From: Radek Czajka Date: Tue, 29 Dec 2015 14:19:14 +0000 (+0100) Subject: Code layout change. X-Git-Url: https://git.mdrn.pl/wolnelektury.git/commitdiff_plain/357027375ff8867f42ca34bcbfb5a78b5b185fc3?page=%7B%7B%20page_obj.previous_page_number%20%7D%7D%7B%7B%20getvars%20%7D%7D Code layout change. --- diff --git a/.gitignore b/.gitignore index 4ddf5e924..fd63a8e47 100644 --- a/.gitignore +++ b/.gitignore @@ -9,10 +9,10 @@ fabfile_local.py .sass-cache # Compress output -/static +/var # SCSS output -apps/wolnelektury_core/static/scss/*.css +apps/wolnelektury/static/scss/*.css # Python garbage *.pyc @@ -36,8 +36,6 @@ thumbs.db # Tags file TAGS -media -search_index doc/_build reports diff --git a/apps/ajaxable/__init__.py b/apps/ajaxable/__init__.py deleted file mode 100644 index ffa37881b..000000000 --- a/apps/ajaxable/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -""" -Provides a way to create forms behaving correctly as AJAX forms -as well as standalone forms without any Javascript. -""" diff --git a/apps/ajaxable/locale/pl/LC_MESSAGES/django.mo b/apps/ajaxable/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 269549eb3..000000000 Binary files a/apps/ajaxable/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/ajaxable/locale/pl/LC_MESSAGES/django.po b/apps/ajaxable/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 7b190fa12..000000000 --- a/apps/ajaxable/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,23 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2012-01-27 16:36+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \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%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2)\n" - -#: utils.py:72 -msgid "Send" -msgstr "Wyślij" diff --git a/apps/ajaxable/models.py b/apps/ajaxable/models.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/ajaxable/templates/ajaxable/form.html b/apps/ajaxable/templates/ajaxable/form.html deleted file mode 100755 index 13586ac9d..000000000 --- a/apps/ajaxable/templates/ajaxable/form.html +++ /dev/null @@ -1,20 +0,0 @@ -{% load i18n %} -{% load ssi_csrf_token from ssify %} - -

{{ title }}

- -
-{% ssi_csrf_token %} -{% if honeypot %} - {% load honeypot %} - {% render_honeypot_field %} -{% endif %} -
    -
    - {{ form.as_ul }} -
  1. -
-
- -{% block extra %}{% endblock %} \ No newline at end of file diff --git a/apps/ajaxable/templates/ajaxable/form_on_page.html b/apps/ajaxable/templates/ajaxable/form_on_page.html deleted file mode 100755 index 61175d507..000000000 --- a/apps/ajaxable/templates/ajaxable/form_on_page.html +++ /dev/null @@ -1,14 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block titleextra %}{{ title }}{% endblock %} - -{% block body %} - - {% include ajax_template %} - - {% if response_data.message %} -

{{ response_data.message }}

- {% endif %} - -{% endblock %} diff --git a/apps/ajaxable/templatetags/__init__.py b/apps/ajaxable/templatetags/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/ajaxable/templatetags/ajaxable_tags.py b/apps/ajaxable/templatetags/ajaxable_tags.py deleted file mode 100644 index 351e9f13d..000000000 --- a/apps/ajaxable/templatetags/ajaxable_tags.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import template -from ajaxable.utils import placeholdized -register = template.Library() - - -@register.filter -def placeholdize(form): - return placeholdized(form) - - -@register.filter -def placeholdized_ul(form): - return placeholdized(form).as_ul() diff --git a/apps/ajaxable/utils.py b/apps/ajaxable/utils.py deleted file mode 100755 index 89b56228d..000000000 --- a/apps/ajaxable/utils.py +++ /dev/null @@ -1,186 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from functools import wraps - -from django.http import (HttpResponse, HttpResponseRedirect, - HttpResponseForbidden) -from django.shortcuts import render_to_response -from django.template import RequestContext -from django.utils.encoding import force_unicode -from django.utils.functional import Promise -from django.utils.http import urlquote_plus -import json -from django.utils.translation import ugettext_lazy as _ -from django.views.decorators.vary import vary_on_headers -from honeypot.decorators import verify_honeypot_value - - -class LazyEncoder(json.JSONEncoder): - def default(self, obj): - if isinstance(obj, Promise): - return force_unicode(obj) - return obj - - -def method_decorator(function_decorator): - """Converts a function decorator to a method decorator. - - It just makes it ignore first argument. - """ - def decorator(method): - @wraps(method) - def wrapped_method(self, *args, **kwargs): - def function(*fargs, **fkwargs): - return method(self, *fargs, **fkwargs) - return function_decorator(function)(*args, **kwargs) - return wrapped_method - return decorator - - -def require_login(request): - """Return 403 if request is AJAX. Redirect to login page if not.""" - if request.is_ajax(): - return HttpResponseForbidden('Not logged in') - else: - return HttpResponseRedirect('/uzytkownicy/zaloguj')# next?=request.build_full_path()) - - -def placeholdized(form): - for field in form.fields.values(): - field.widget.attrs['placeholder'] = field.label - return form - - -class AjaxableFormView(object): - """Subclass this to create an ajaxable view for any form. - - In the subclass, provide at least form_class. - - """ - form_class = None - placeholdize = False - # override to customize form look - template = "ajaxable/form.html" - submit = _('Send') - - title = '' - success_message = '' - POST_login = False - formname = "form" - form_prefix = None - full_template = "ajaxable/form_on_page.html" - honeypot = False - - @method_decorator(vary_on_headers('X-Requested-With')) - def __call__(self, request, *args, **kwargs): - """A view displaying a form, or JSON if request is AJAX.""" - obj = self.get_object(request, *args, **kwargs) - form_args, form_kwargs = self.form_args(request, obj) - if self.form_prefix: - form_kwargs['prefix'] = self.form_prefix - - if request.method == "POST": - if self.honeypot: - response = verify_honeypot_value(request, None) - if response: - return response - - # do I need to be logged in? - if self.POST_login and not request.user.is_authenticated(): - return require_login(request) - - form_kwargs['data'] = request.POST - form = self.form_class(*form_args, **form_kwargs) - if form.is_valid(): - add_args = self.success(form, request) - response_data = { - 'success': True, - 'message': self.success_message, - 'redirect': request.GET.get('next') - } - if add_args: - response_data.update(add_args) - if not request.is_ajax() and response_data['redirect']: - return HttpResponseRedirect(urlquote_plus( - response_data['redirect'], safe='/?=&')) - elif request.is_ajax(): - # Form was sent with errors. Send them back. - if self.form_prefix: - errors = {} - for key, value in form.errors.items(): - errors["%s-%s" % (self.form_prefix, key)] = value - else: - errors = form.errors - response_data = {'success': False, 'errors': errors} - else: - response_data = None - if request.is_ajax(): - return HttpResponse(LazyEncoder(ensure_ascii=False).encode(response_data)) - else: - if (self.POST_login and not request.user.is_authenticated() - and not request.is_ajax()): - return require_login(request) - - form = self.form_class(*form_args, **form_kwargs) - response_data = None - - title = self.title - if request.is_ajax(): - template = self.template - else: - template = self.full_template - cd = self.context_description(request, obj) - if cd: - title += ": " + cd - if self.placeholdize: - form = placeholdized(form) - context = { - self.formname: form, - "title": title, - "honeypot": self.honeypot, - "placeholdize": self.placeholdize, - "submit": self.submit, - "response_data": response_data, - "ajax_template": self.template, - "view_args": args, - "view_kwargs": kwargs, - } - context.update(self.extra_context(request, obj)) - return render_to_response(template, context, - context_instance=RequestContext(request)) - - def redirect_or_refresh(self, request, path, message=None): - """If the form is AJAX, refresh the page. If not, go to `path`.""" - if request.is_ajax(): - output = "" - if message: - output = "
" + message + "
" + output - return HttpResponse(output) - else: - return HttpResponseRedirect(path) - - def get_object(self, request, *args, **kwargs): - """Override to parse view args and get some associated data.""" - return None - - def form_args(self, request, obj): - """Override to parse view args and give additional args to the form.""" - return (), {} - - def extra_context(self, request, obj): - """Override to pass something to template.""" - return {} - - def context_description(self, request, obj): - """Description to appear in standalone form, but not in AJAX form.""" - return "" - - def success(self, form, request): - """What to do when the form is valid. - - By default, just save the form. - - """ - return form.save(request) diff --git a/apps/api/__init__.py b/apps/api/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/api/emitters.py b/apps/api/emitters.py deleted file mode 100644 index 2f6f7e75f..000000000 --- a/apps/api/emitters.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -""" -Wrappers for piston Emitter classes. - -When outputting a queryset of selected models, instead of returning -XML or JSON stanzas, SSI include statements are returned. - -""" -from django.core.urlresolvers import reverse -from django.db.models.query import QuerySet -from piston.emitters import Emitter, XMLEmitter, JSONEmitter -from catalogue.models import Book, Fragment, Tag -from django.utils.translation import get_language - - -class SsiQS(object): - """A wrapper for QuerySet that won't serialize.""" - - def __init__(self, queryset): - self.queryset = queryset - - def __unicode__(self): - raise TypeError("This is not serializable.") - - def get_ssis(self, emitter_format): - """Yields SSI include statements for the queryset.""" - url_pattern = reverse('api_include', - kwargs={'model': self.queryset.model.__name__.lower(), - 'pk': '0000', - 'emitter_format': emitter_format, - 'lang': get_language(), - }) - for instance in self.queryset: - yield "" % url_pattern.replace('0000', - str(instance.pk)) - - -class SsiEmitterMixin(object): - def construct(self): - if isinstance(self.data, QuerySet) and self.data.model in (Book, - Fragment, Tag): - return SsiQS(self.data) - else: - return super(SsiEmitterMixin, self).construct() - - -class SsiJsonEmitter(SsiEmitterMixin, JSONEmitter): - def render(self, request): - try: - return super(SsiJsonEmitter, self).render(request) - except TypeError: - return '[%s]' % ",".join(self.construct().get_ssis('json')) - -Emitter.register('json', SsiJsonEmitter, 'application/json; charset=utf-8') - - -class SsiXmlEmitter(SsiEmitterMixin, XMLEmitter): - def render(self, request): - try: - return super(SsiXmlEmitter, self).render(request) - except TypeError: - return '\n' \ - '%s' % \ - ''.join(self.construct().get_ssis('xml')) - -Emitter.register('xml', SsiXmlEmitter, 'text/xml; charset=utf-8') - diff --git a/apps/api/handlers.py b/apps/api/handlers.py deleted file mode 100644 index 5fe931e69..000000000 --- a/apps/api/handlers.py +++ /dev/null @@ -1,469 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import json - -from django.contrib.sites.models import Site -from django.core.urlresolvers import reverse -from django.utils.functional import lazy -from piston.handler import AnonymousBaseHandler, BaseHandler -from piston.utils import rc -from sorl.thumbnail import default - -from catalogue.forms import BookImportForm -from catalogue.models import Book, Tag, BookMedia, Fragment, Collection -from picture.models import Picture -from picture.forms import PictureImportForm - -from stats.utils import piwik_track - -from . import emitters # Register our emitters - -API_BASE = WL_BASE = MEDIA_BASE = lazy( - lambda: u'http://' + Site.objects.get_current().domain, unicode)() - - -category_singular = { - 'authors': 'author', - 'kinds': 'kind', - 'genres': 'genre', - 'epochs': 'epoch', - 'themes': 'theme', - 'books': 'book', -} -category_plural = {} -for k, v in category_singular.items(): - category_plural[v] = k - -book_tag_categories = ['author', 'epoch', 'kind', 'genre'] - - - -def read_tags(tags, allowed): - """ Reads a path of filtering tags. - - :param str tags: a path of category and slug pairs, like: authors/an-author/... - :returns: list of Tag objects - :raises: ValueError when tags can't be found - """ - if not tags: - return [], [] - - tags = tags.strip('/').split('/') - real_tags = [] - books = [] - while tags: - category = tags.pop(0) - slug = tags.pop(0) - - try: - category = category_singular[category] - except KeyError: - raise ValueError('Unknown category.') - - if not category in allowed: - raise ValueError('Category not allowed.') - - if category == 'book': - try: - books.append(Book.objects.get(slug=slug)) - except Book.DoesNotExist: - raise ValueError('Unknown book.') - - try: - real_tags.append(Tag.objects.get(category=category, slug=slug)) - except Tag.DoesNotExist: - raise ValueError('Tag not found') - return real_tags, books - - -# RESTful handlers - - -class BookMediaHandler(BaseHandler): - """ Responsible for representing media in Books. """ - - model = BookMedia - fields = ['name', 'type', 'url', 'artist', 'director'] - - @classmethod - def url(cls, media): - """ Link to media on site. """ - - return MEDIA_BASE + media.file.url - - @classmethod - def artist(cls, media): - return media.extra_info.get('artist_name', '') - - @classmethod - def director(cls, media): - return media.extra_info.get('director_name', '') - - -class BookDetails(object): - """Custom fields used for representing Books.""" - - @classmethod - def href(cls, book): - """ Returns an URI for a Book in the API. """ - return API_BASE + reverse("api_book", args=[book.slug]) - - @classmethod - def url(cls, book): - """ Returns Book's URL on the site. """ - - return WL_BASE + book.get_absolute_url() - - @classmethod - def children(cls, book): - """ Returns all children for a book. """ - - return book.children.all() - - @classmethod - def media(cls, book): - """ Returns all media for a book. """ - return book.media.all() - - @classmethod - def cover(cls, book): - return MEDIA_BASE + book.cover.url if book.cover else '' - - @classmethod - def cover_thumb(cls, book): - return MEDIA_BASE + default.backend.get_thumbnail( - book.cover, "139x193").url if book.cover else '' - - - -class BookDetailHandler(BaseHandler, BookDetails): - """ Main handler for Book objects. - - Responsible for single Book details. - """ - allowed_methods = ['GET'] - fields = ['title', 'parent', 'children'] + Book.formats + [ - 'media', 'url', 'cover', 'cover_thumb'] + [ - category_plural[c] for c in book_tag_categories] - - @piwik_track - def read(self, request, book): - """ Returns details of a book, identified by a slug and lang. """ - try: - return Book.objects.get(slug=book) - except Book.DoesNotExist: - return rc.NOT_FOUND - - -class AnonymousBooksHandler(AnonymousBaseHandler, BookDetails): - """ Main handler for Book objects. - - Responsible for lists of Book objects. - """ - allowed_methods = ('GET',) - model = Book - fields = book_tag_categories + ['href', 'title', 'url', 'cover', 'cover_thumb'] - - @classmethod - def genres(cls, book): - """ Returns all media for a book. """ - return book.tags.filter(category='genre') - - @piwik_track - def read(self, request, tags=None, top_level=False, - audiobooks=False, daisy=False, pk=None): - """ Lists all books with given tags. - - :param tags: filtering tags; should be a path of categories - and slugs, i.e.: authors/an-author/epoch/an-epoch/ - :param top_level: if True and a book is included in the results, - it's children are aren't. By default all books matching the tags - are returned. - """ - if pk is not None: - try: - return Book.objects.get(pk=pk) - except Book.DoesNotExist: - return rc.NOT_FOUND - - try: - tags, _ancestors = read_tags(tags, allowed=book_tag_categories) - except ValueError: - return rc.NOT_FOUND - - if tags: - if top_level: - books = Book.tagged_top_level(tags) - return books if books else rc.NOT_FOUND - else: - books = Book.tagged.with_all(tags) - else: - books = Book.objects.all() - - if top_level: - books = books.filter(parent=None) - if audiobooks: - books = books.filter(media__type='mp3').distinct() - if daisy: - books = books.filter(media__type='daisy').distinct() - - if books.exists(): - return books - else: - return rc.NOT_FOUND - - def create(self, request, *args, **kwargs): - return rc.FORBIDDEN - - -class BooksHandler(BookDetailHandler): - allowed_methods = ('GET', 'POST') - model = Book - fields = book_tag_categories + ['href', 'title', 'url', 'cover', 'cover_thumb'] - anonymous = AnonymousBooksHandler - - def create(self, request, *args, **kwargs): - if not request.user.has_perm('catalogue.add_book'): - return rc.FORBIDDEN - - data = json.loads(request.POST.get('data')) - form = BookImportForm(data) - if form.is_valid(): - form.save() - return rc.CREATED - else: - return rc.NOT_FOUND - - -class EBooksHandler(AnonymousBooksHandler): - fields = ('author', 'href', 'title', 'cover') + tuple(Book.ebook_formats) - - -# add categorized tags fields for Book -def _tags_getter(category): - @classmethod - def get_tags(cls, book): - return book.tags.filter(category=category) - return get_tags -def _tag_getter(category): - @classmethod - def get_tag(cls, book): - return ', '.join(tag.name for tag in book.tags.filter(category=category)) - return get_tag -for plural, singular in category_singular.items(): - setattr(BookDetails, plural, _tags_getter(singular)) - setattr(BookDetails, singular, _tag_getter(singular)) - -# add fields for files in Book -def _file_getter(format): - field = "%s_file" % format - @classmethod - def get_file(cls, book): - f = getattr(book, field) - if f: - return MEDIA_BASE + f.url - else: - return '' - return get_file -for format in Book.formats: - setattr(BookDetails, format, _file_getter(format)) - - -class CollectionDetails(object): - """Custom Collection fields.""" - - @classmethod - def href(cls, collection): - """ Returns URI in the API for the collection. """ - - return API_BASE + reverse("api_collection", args=[collection.slug]) - - @classmethod - def url(cls, collection): - """ Returns URL on the site. """ - - return WL_BASE + collection.get_absolute_url() - - @classmethod - def books(cls, collection): - return Book.objects.filter(collection.get_query()) - - - -class CollectionDetailHandler(BaseHandler, CollectionDetails): - allowed_methods = ('GET',) - fields = ['url', 'title', 'description', 'books'] - - @piwik_track - def read(self, request, slug): - """ Returns details of a collection, identified by slug. """ - try: - return Collection.objects.get(slug=slug) - except Collection.DoesNotExist: - return rc.NOT_FOUND - - -class CollectionsHandler(BaseHandler, CollectionDetails): - allowed_methods = ('GET',) - model = Collection - fields = ['url', 'href', 'title'] - - @piwik_track - def read(self, request): - """ Returns all collections. """ - return Collection.objects.all() - - -class TagDetails(object): - """Custom Tag fields.""" - - @classmethod - def href(cls, tag): - """ Returns URI in the API for the tag. """ - - return API_BASE + reverse("api_tag", args=[category_plural[tag.category], tag.slug]) - - @classmethod - def url(cls, tag): - """ Returns URL on the site. """ - - return WL_BASE + tag.get_absolute_url() - - -class TagDetailHandler(BaseHandler, TagDetails): - """ Responsible for details of a single Tag object. """ - - fields = ['name', 'url', 'sort_key', 'description'] - - @piwik_track - def read(self, request, category, slug): - """ Returns details of a tag, identified by category and slug. """ - - try: - category_sng = category_singular[category] - except KeyError, e: - return rc.NOT_FOUND - - try: - return Tag.objects.get(category=category_sng, slug=slug) - except Tag.DoesNotExist: - return rc.NOT_FOUND - - -class TagsHandler(BaseHandler, TagDetails): - """ Main handler for Tag objects. - - Responsible for lists of Tag objects - and fields used for representing Tags. - - """ - allowed_methods = ('GET',) - model = Tag - fields = ['name', 'href', 'url'] - - @piwik_track - def read(self, request, category=None, pk=None): - """ Lists all tags in the category (eg. all themes). """ - if pk is not None: - try: - return Tag.objects.exclude(category='set').get(pk=pk) - except Book.DoesNotExist: - return rc.NOT_FOUND - - try: - category_sng = category_singular[category] - except KeyError, e: - return rc.NOT_FOUND - - tags = Tag.objects.filter(category=category_sng).exclude(items=None) - if tags.exists(): - return tags - else: - return rc.NOT_FOUND - - -class FragmentDetails(object): - """Custom Fragment fields.""" - - @classmethod - def href(cls, fragment): - """ Returns URI in the API for the fragment. """ - - return API_BASE + reverse("api_fragment", - args=[fragment.book.slug, fragment.anchor]) - - @classmethod - def url(cls, fragment): - """ Returns URL on the site for the fragment. """ - - return WL_BASE + fragment.get_absolute_url() - - @classmethod - def themes(cls, fragment): - """ Returns a list of theme tags for the fragment. """ - - return fragment.tags.filter(category='theme') - - -class FragmentDetailHandler(BaseHandler, FragmentDetails): - fields = ['book', 'anchor', 'text', 'url', 'themes'] - - @piwik_track - def read(self, request, book, anchor): - """ Returns details of a fragment, identified by book slug and anchor. """ - try: - return Fragment.objects.get(book__slug=book, anchor=anchor) - except Fragment.DoesNotExist: - return rc.NOT_FOUND - - -class FragmentsHandler(BaseHandler, FragmentDetails): - """ Main handler for Fragments. - - Responsible for lists of Fragment objects - and fields used for representing Fragments. - - """ - model = Fragment - fields = ['book', 'url', 'anchor', 'href'] - allowed_methods = ('GET',) - - categories = set(['author', 'epoch', 'kind', 'genre', 'book', 'theme']) - - @piwik_track - def read(self, request, tags): - """ Lists all fragments with given book, tags, themes. - - :param tags: should be a path of categories and slugs, i.e.: - books/book-slug/authors/an-author/themes/a-theme/ - - """ - try: - tags, ancestors = read_tags(tags, allowed=self.categories) - except ValueError: - return rc.NOT_FOUND - fragments = Fragment.tagged.with_all(tags).select_related('book') - if fragments.exists(): - return fragments - else: - return rc.NOT_FOUND - - -class PictureHandler(BaseHandler): - model = Picture - fields = ('slug', 'title') - allowed_methods = ('POST',) - - def create(self, request): - if not request.user.has_perm('picture.add_picture'): - return rc.FORBIDDEN - - data = json.loads(request.POST.get('data')) - form = PictureImportForm(data) - if form.is_valid(): - form.save() - return rc.CREATED - else: - return rc.NOT_FOUND diff --git a/apps/api/helpers.py b/apps/api/helpers.py deleted file mode 100644 index 62578e7c3..000000000 --- a/apps/api/helpers.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from time import mktime -from piston.resource import Resource - -def timestamp(dtime): - "converts a datetime.datetime object to a timestamp int" - return int(mktime(dtime.timetuple())) - -class CsrfExemptResource(Resource): - """A Custom Resource that is csrf exempt""" - def __init__(self, handler, authentication=None): - super(CsrfExemptResource, self).__init__(handler, authentication) - self.csrf_exempt = getattr(self.handler, 'csrf_exempt', True) diff --git a/apps/api/locale/pl/LC_MESSAGES/django.mo b/apps/api/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 816c91c7a..000000000 Binary files a/apps/api/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/api/locale/pl/LC_MESSAGES/django.po b/apps/api/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 177d4491f..000000000 --- a/apps/api/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,158 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2013-06-14 11:45+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \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%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.5.4\n" - -#: models.py:15 -msgid "slug" -msgstr "" - -#: templates/api/main.html:5 -msgid "WolneLektury.pl API" -msgstr "API serwisu WolneLektury.pl" - -#: templates/api/main.html:16 -#, python-format -msgid "" -"\n" -"WolneLektury.pl API resides under %(u)s.\n" -"You can use it to access information about books, their fragments and\n" -"their metadata.\n" -msgstr "" -"\n" -"API serwisu WolneLektury.pl znajduje się pod adresem %(u)s.\n" -"Za jego pomocą można uzyskać informacje o utworach, ich fragmentach i " -"metadanych.\n" - -#: templates/api/main.html:24 -msgid "" -"\n" -"Default data serialization format is\n" -"JSON, \n" -"but you can also use XML by appending ?format=xml\n" -"query parameter to each URL.\n" -msgstr "" -"\n" -"Dane domyślnie są serializowane w formacie JSON,\n" -"ale dostępny jest też format XML – wystarczy dodać parametr ?" -"format=xml\n" -"do każdego zapytania.\n" - -#: templates/api/main.html:33 -msgid "" -"\n" -"The URLs in WolneLektury.pl API are:\n" -msgstr "" -"\n" -"API Wolnych Lektur zawiera następujące adresy URL:\n" - -#: templates/api/main.html:40 -msgid "All books" -msgstr "Wszystkie utwory" - -#: templates/api/main.html:42 -msgid "Audiobooks" -msgstr "Audiobooki" - -#: templates/api/main.html:44 -msgid "DAISY" -msgstr "DAISY" - -#: templates/api/main.html:47 -msgid "List of all authors" -msgstr "Lista autorów" - -#: templates/api/main.html:49 -msgid "List of all epochs" -msgstr "Lista epok" - -#: templates/api/main.html:51 -msgid "List of all genres" -msgstr "Lista gatunków literackich" - -#: templates/api/main.html:53 -msgid "List of all kinds" -msgstr "Lista rodzajów literackich" - -#: templates/api/main.html:56 -msgid "List of all themes" -msgstr "Lista motywów i tematów literackich" - -#: templates/api/main.html:58 -msgid "Collections" -msgstr "Kolekcje" - -#: templates/api/main.html:64 -#, python-format -msgid "" -"\n" -"Each element of those lists contains a link (in a \"href\") attibute\n" -"which points to individual resource's details, i.e.:\n" -"%(e1)s or\n" -"%(e2)s.\n" -msgstr "" -"\n" -"Każdy element na tych listach zawiera adres (w atrybucie „href”), pod którym " -"można znaleźć szczegółowe dane, np. %(e1)s czy %(e2)s.\n" - -#: templates/api/main.html:73 -#, python-format -msgid "" -"\n" -"You can combine authors, epochs, genres and kinds to find only books " -"matching\n" -"those criteria. For instance:\n" -"%(e)s.\n" -msgstr "" -"\n" -"Można łączyć autorów, epoki, gatunki i rodzaje, aby wybrać tylko utwory " -"odpowiadające zadanym kryteriom. Na przykład: %(e)s.\n" - -#: templates/api/main.html:81 -#, python-format -msgid "" -"\n" -"If you only want top-level books and not all the children, you can use /" -"parent_books/, as in:\n" -"%(e)s.\n" -msgstr "" -"\n" -"Aby spośród wszystkich pasujących wybrać tylko utwory najwyższego poziomu " -"(pomijając ich podutwory), można użyć zapytania /parent_books/, np.: %(e)s.\n" - -#: templates/api/main.html:89 -#, python-format -msgid "" -"\n" -"The same way, using also books and themes, you can search for a list of " -"fragments:\n" -"%(e)s. \n" -"Again, each entry has a \"href\" attribute which links to the fragment's " -"details, i.e.:\n" -"%(f)s. \n" -msgstr "" -"\n" -"W ten sam sposób, filtrując dodatkowo według lektur lub motywów, można " -"wyszukiwać fragmenty:%(e)s. \n" -"Każdy element uzyskanej listy w atrybucie „href” zawiera link do " -"szczegółowego opisu danego fragmentu, np.:\n" -"%(f)s. \n" diff --git a/apps/api/management/__init__.py b/apps/api/management/__init__.py deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/api/management/commands/__init__.py b/apps/api/management/commands/__init__.py deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/api/management/commands/mobileinit.py b/apps/api/management/commands/mobileinit.py deleted file mode 100755 index 57b41aa46..000000000 --- a/apps/api/management/commands/mobileinit.py +++ /dev/null @@ -1,168 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from datetime import datetime -import os -import os.path -import re -import sqlite3 -from django.core.management.base import BaseCommand - -from api.helpers import timestamp -from api.settings import MOBILE_INIT_DB -from catalogue.models import Book, Tag - - -class Command(BaseCommand): - help = 'Creates an initial SQLite file for the mobile app.' - - def handle(self, **options): - # those should be versioned - last_checked = timestamp(datetime.now()) - db = init_db(last_checked) - for b in Book.objects.all(): - add_book(db, b) - for t in Tag.objects.exclude( - category__in=('book', 'set', 'theme')).exclude(items=None): - # only add non-empty tags - add_tag(db, t) - db.commit() - db.close() - current(last_checked) - - -def pretty_size(size): - """ Turns size in bytes into a prettier string. - - >>> pretty_size(100000) - '97 KiB' - """ - if not size: - return None - units = ['B', 'KiB', 'MiB', 'GiB'] - size = float(size) - unit = units.pop(0) - while size > 1000 and units: - size /= 1024 - unit = units.pop(0) - if size < 10: - return "%.1f %s" % (size, unit) - return "%d %s" % (size, unit) - - - if not isinstance(value, unicode): - value = unicode(value, 'utf-8') - - # try to replace chars - value = re.sub('[^a-zA-Z0-9\\s\\-]{1}', replace_char, value) - value = value.lower() - value = re.sub(r'[^a-z0-9{|}]+', '~', value) - - return value.encode('ascii', 'ignore') - - - -def init_db(last_checked): - if not os.path.isdir(MOBILE_INIT_DB): - os.makedirs(MOBILE_INIT_DB) - db = sqlite3.connect(os.path.join(MOBILE_INIT_DB, 'initial.db-%d' % last_checked)) - - schema = """ -CREATE TABLE book ( - id INTEGER PRIMARY KEY, - title VARCHAR, - cover VARCHAR, - html_file VARCHAR, - html_file_size INTEGER, - parent INTEGER, - parent_number INTEGER, - - sort_key VARCHAR, - pretty_size VARCHAR, - authors VARCHAR, - _local BOOLEAN -); -CREATE INDEX IF NOT EXISTS book_title_index ON book (sort_key); -CREATE INDEX IF NOT EXISTS book_title_index ON book (title); -CREATE INDEX IF NOT EXISTS book_parent_index ON book (parent); - -CREATE TABLE tag ( - id INTEGER PRIMARY KEY, - name VARCHAR, - category VARCHAR, - sort_key VARCHAR, - books VARCHAR); -CREATE INDEX IF NOT EXISTS tag_name_index ON tag (name); -CREATE INDEX IF NOT EXISTS tag_category_index ON tag (category); -CREATE INDEX IF NOT EXISTS tag_sort_key_index ON tag (sort_key); - -CREATE TABLE state (last_checked INTEGER); -""" - - db.executescript(schema) - db.execute("INSERT INTO state VALUES (:last_checked)", locals()) - return db - - -def current(last_checked): - target = os.path.join(MOBILE_INIT_DB, 'initial.db') - if os.path.lexists(target): - os.unlink(target) - os.symlink( - 'initial.db-%d' % last_checked, - target, - ) - - - -book_sql = """ - INSERT INTO book - (id, title, cover, html_file, html_file_size, parent, parent_number, sort_key, pretty_size, authors) - VALUES - (:id, :title, :cover, :html_file, :html_file_size, :parent, :parent_number, :sort_key, :size_str, :authors); -""" -book_tag_sql = "INSERT INTO book_tag (book, tag) VALUES (:book, :tag);" -tag_sql = """ - INSERT INTO tag - (id, category, name, sort_key, books) - VALUES - (:id, :category, :name, :sort_key, :book_ids); -""" -categories = {'author': 'autor', - 'epoch': 'epoka', - 'genre': 'gatunek', - 'kind': 'rodzaj', - 'theme': 'motyw' - } - - -def add_book(db, book): - id = book.id - title = book.title - if book.html_file: - html_file = book.html_file.url - html_file_size = book.html_file.size - else: - html_file = html_file_size = None - if book.cover: - cover = book.cover.url - else: - cover = None - parent = book.parent_id - parent_number = book.parent_number - sort_key = book.sort_key - size_str = pretty_size(html_file_size) - authors = ", ".join(t.name for t in book.tags.filter(category='author')) - db.execute(book_sql, locals()) - - -def add_tag(db, tag): - id = tag.id - category = categories[tag.category] - name = tag.name - sort_key = tag.sort_key - - books = Book.tagged_top_level([tag]) - book_ids = ','.join(str(b.id) for b in books) - db.execute(tag_sql, locals()) diff --git a/apps/api/migrations/0001_initial.py b/apps/api/migrations/0001_initial.py deleted file mode 100644 index 4d20304bc..000000000 --- a/apps/api/migrations/0001_initial.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Deleted', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('object_id', models.IntegerField()), - ('slug', models.SlugField(max_length=120, verbose_name='Slug', blank=True)), - ('category', models.CharField(db_index=True, max_length=64, null=True, blank=True)), - ('created_at', models.DateTimeField(editable=False, db_index=True)), - ('deleted_at', models.DateTimeField(auto_now_add=True, db_index=True)), - ('content_type', models.ForeignKey(to='contenttypes.ContentType')), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.AlterUniqueTogether( - name='deleted', - unique_together=set([('content_type', 'object_id')]), - ), - ] diff --git a/apps/api/migrations/0002_auto_20151221_1225.py b/apps/api/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index 339068ac5..000000000 --- a/apps/api/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='deleted', - name='slug', - field=models.SlugField(max_length=120, verbose_name='slug', blank=True), - ), - ] diff --git a/apps/api/migrations/__init__.py b/apps/api/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/api/models.py b/apps/api/models.py deleted file mode 100644 index 5a3d42440..000000000 --- a/apps/api/models.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib.contenttypes.models import ContentType -from django.db import models -from django.db.models.signals import pre_delete -from django.utils.translation import ugettext_lazy as _ - -from catalogue.models import Book, Tag - - -class Deleted(models.Model): - object_id = models.IntegerField() - slug = models.SlugField(_('slug'), max_length=120, blank=True, db_index=True) - content_type = models.ForeignKey(ContentType) - category = models.CharField(max_length=64, null=True, blank=True, db_index=True) - created_at = models.DateTimeField(editable=False, db_index=True) - deleted_at = models.DateTimeField(auto_now_add=True, db_index=True) - - class Meta: - unique_together = (('content_type', 'object_id'),) - - -def _pre_delete_handler(sender, instance, **kwargs): - """ save deleted objects for change history purposes """ - - if sender in (Book, Tag): - if sender == Tag: - if instance.category in ('book', 'set'): - return - else: - category = instance.category - else: - category = None - content_type = ContentType.objects.get_for_model(sender) - Deleted.objects.create(content_type=content_type, object_id=instance.id, - created_at=instance.created_at, category=category, slug=instance.slug) -pre_delete.connect(_pre_delete_handler) diff --git a/apps/api/settings.py b/apps/api/settings.py deleted file mode 100644 index 0802c5453..000000000 --- a/apps/api/settings.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import os.path -from django.conf import settings - - -try: - MOBILE_INIT_DB = settings.API_MOBILE_INIT_DB -except AttributeError: - MOBILE_INIT_DB = os.path.abspath(os.path.join(settings.MEDIA_ROOT, 'api/mobile/initial/')) diff --git a/apps/api/templates/api/main.html b/apps/api/templates/api/main.html deleted file mode 100755 index 04244dc91..000000000 --- a/apps/api/templates/api/main.html +++ /dev/null @@ -1,97 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load build_absolute_uri from fnp_common %} - -{% block title %}{% trans "WolneLektury.pl API" %}{% endblock %} - -{% block bodyid %}api{% endblock %} - -{% block body %} - -

API

- -
-

-{% url "api" as u %} -{% blocktrans with u=u|build_absolute_uri:request %} -WolneLektury.pl API resides under {{ u }}. -You can use it to access information about books, their fragments and -their metadata. -{% endblocktrans %} -

- -

-{% blocktrans %} -Default data serialization format is -JSON, -but you can also use XML by appending ?format=xml -query parameter to each URL. -{% endblocktrans %} -

- -

-{% blocktrans %} -The URLs in WolneLektury.pl API are: -{% endblocktrans %} -

- - - -

-{% url "api_book" "studnia-i-wahadlo" as e1 %} -{% url "api_tag" "authors" "edgar-allan-poe" as e2 %} -{% blocktrans %} -Each element of those lists contains a link (in a "href") attibute -which points to individual resource's details, i.e.: -{{e1}} or -{{e2}}. -{% endblocktrans %} -

- -

-{% blocktrans with "/api/authors/adam-mickiewicz/kinds/liryka/books/" as e %} -You can combine authors, epochs, genres and kinds to find only books matching -those criteria. For instance: -{{e}}. -{% endblocktrans %} -

- -

-{% blocktrans with "/api/authors/adam-mickiewicz/kinds/liryka/parent_books/" as e %} -If you only want top-level books and not all the children, you can use /parent_books/, as in: -{{e}}. -{% endblocktrans %} -

- -

-{% url "api_fragment" "sen-nocy-letniej" "1290526312912-3814598192" as f %} -{% blocktrans with "/api/authors/william-shakespeare/themes/zabawa/fragments/" as e %} -The same way, using also books and themes, you can search for a list of fragments: -{{e}}. -Again, each entry has a "href" attribute which links to the fragment's details, i.e.: -{{f}}. -{% endblocktrans %} -

-
-{% endblock %} diff --git a/apps/api/templates/oauth/challenge.html b/apps/api/templates/oauth/challenge.html deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/api/tests.py b/apps/api/tests.py deleted file mode 100644 index 94abe53b5..000000000 --- a/apps/api/tests.py +++ /dev/null @@ -1,95 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from os import path - -from django.core.files.uploadedfile import SimpleUploadedFile -from django.test import TestCase -from django.test.utils import override_settings -import json - -from catalogue.models import Book, Tag -from picture.forms import PictureImportForm -from picture.models import Picture -import picture.tests - - -@override_settings( - NO_SEARCH_INDEX=True, - CACHES={'default': { - 'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}}, - SSIFY_CACHE_ALIASES=['default'], - SSIFY_RENDER=True, -) -class ApiTest(TestCase): - def load_json(self, url): - content = self.client.get(url).content - try: - data = json.loads(content) - except ValueError: - self.fail('No JSON could be decoded:', content) - return data - - -class BookTests(ApiTest): - - def setUp(self): - self.tag = Tag.objects.create(category='author', slug='joe') - self.book = Book.objects.create(title='A Book', slug='a-book') - self.book_tagged = Book.objects.create(title='Tagged Book', slug='tagged-book') - self.book_tagged.tags = [self.tag] - self.book_tagged.save() - - def test_book_list(self): - books = self.load_json('/api/books/') - self.assertEqual(len(books), 2, - 'Wrong book list.') - - def test_tagged_books(self): - books = self.load_json('/api/authors/joe/books/') - - self.assertEqual([b['title'] for b in books], [self.book_tagged.title], - 'Wrong tagged book list.') - - def test_detail(self): - book = self.load_json('/api/books/a-book/') - self.assertEqual(book['title'], self.book.title, - 'Wrong book details.') - - -class TagTests(ApiTest): - - def setUp(self): - self.tag = Tag.objects.create(category='author', slug='joe', name='Joe') - self.book = Book.objects.create(title='A Book', slug='a-book') - self.book.tags = [self.tag] - self.book.save() - - def test_tag_list(self): - tags = self.load_json('/api/authors/') - self.assertEqual(len(tags), 1, - 'Wrong tag list.') - - def test_tag_detail(self): - tag = self.load_json('/api/authors/joe/') - self.assertEqual(tag['name'], self.tag.name, - 'Wrong tag details.') - - -class PictureTests(ApiTest): - def test_publish(self): - slug = "kandinsky-composition-viii" - xml = SimpleUploadedFile('composition8.xml', open(path.join(picture.tests.__path__[0], "files", slug + ".xml")).read()) - img = SimpleUploadedFile('kompozycja-8.png', open(path.join(picture.tests.__path__[0], "files", slug + ".png")).read()) - - import_form = PictureImportForm({}, { - 'picture_xml_file': xml, - 'picture_image_file': img - }) - - assert import_form.is_valid() - if import_form.is_valid(): - import_form.save() - - Picture.objects.get(slug=slug) diff --git a/apps/api/urls.py b/apps/api/urls.py deleted file mode 100644 index 1c2e656d1..000000000 --- a/apps/api/urls.py +++ /dev/null @@ -1,96 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url -from django.views.decorators.csrf import csrf_exempt -from django.views.generic import TemplateView -from piston.authentication import OAuthAuthentication, oauth_access_token -from piston.resource import Resource -from ssify import ssi_included -from api import handlers -from api.helpers import CsrfExemptResource - -auth = OAuthAuthentication(realm="Wolne Lektury") - -book_list_resource = CsrfExemptResource(handler=handlers.BooksHandler, authentication=auth) -ebook_list_resource = Resource(handler=handlers.EBooksHandler) -#book_list_resource = Resource(handler=handlers.BooksHandler) -book_resource = Resource(handler=handlers.BookDetailHandler) - -collection_resource = Resource(handler=handlers.CollectionDetailHandler) -collection_list_resource = Resource(handler=handlers.CollectionsHandler) - -tag_list_resource = Resource(handler=handlers.TagsHandler) -tag_resource = Resource(handler=handlers.TagDetailHandler) - -fragment_resource = Resource(handler=handlers.FragmentDetailHandler) -fragment_list_resource = Resource(handler=handlers.FragmentsHandler) - -picture_resource = CsrfExemptResource(handler=handlers.PictureHandler, authentication=auth) - - -@ssi_included -def incl(request, model, pk, emitter_format): - resource = { - 'book': book_list_resource, - 'fragment': fragment_list_resource, - 'tag': tag_list_resource, - }[model] - request.piwik_track = False - resp = resource(request, pk=pk, emitter_format=emitter_format) - if emitter_format == 'xml': - # Ugly, but quick way of stripping header and tags. - resp.content = resp.content[49:-11] - return resp - - -urlpatterns = patterns( - 'piston.authentication', - url(r'^oauth/request_token/$', 'oauth_request_token'), - url(r'^oauth/authorize/$', 'oauth_user_auth'), - url(r'^oauth/access_token/$', csrf_exempt(oauth_access_token)), - -) + patterns('', - url(r'^$', TemplateView.as_view(template_name='api/main.html'), name='api'), - url(r'^include/(?Pbook|fragment|tag)/(?P\d+)\.(?P.+)\.(?Pxml|json)$', - incl, name='api_include'), - - # info boxes (used by mobile app) - url(r'book/(?P\d*?)/info\.html$', 'catalogue.views.book_info'), - url(r'tag/(?P\d*?)/info\.html$', 'catalogue.views.tag_info'), - - # books by collections - url(r'^collections/$', collection_list_resource, name="api_collections"), - url(r'^collections/(?P[^/]+)/$', collection_resource, name="api_collection"), - - # objects details - url(r'^books/(?P[a-z0-9-]+)/$', book_resource, name="api_book"), - url(r'^(?P[a-z0-9-]+)/(?P[a-z0-9-]+)/$', - tag_resource, name="api_tag"), - url(r'^books/(?P[a-z0-9-]+)/fragments/(?P[a-z0-9-]+)/$', - fragment_resource, name="api_fragment"), - - # books by tags - url(r'^(?P(?:(?:[a-z0-9-]+/){2}){0,6})books/$', - book_list_resource, name='api_book_list'), - url(r'^(?P(?:(?:[a-z0-9-]+/){2}){0,6})ebooks/$', - ebook_list_resource, name='api_ebook_list'), - url(r'^(?P(?:(?:[a-z0-9-]+/){2}){0,6})parent_books/$', - book_list_resource, {"top_level": True}, name='api_parent_book_list'), - url(r'^(?P(?:(?:[a-z0-9-]+/){2}){0,6})parent_ebooks/$', - ebook_list_resource, {"top_level": True}, name='api_parent_ebook_list'), - url(r'^(?P(?:(?:[a-z0-9-]+/){2}){0,6})audiobooks/$', - book_list_resource, {"audiobooks": True}, name='api_audiobook_list'), - url(r'^(?P(?:(?:[a-z0-9-]+/){2}){0,6})daisy/$', - book_list_resource, {"daisy": True}, name='api_daisy_list'), - - url(r'^pictures/$', picture_resource), - - # fragments by book, tags, themes - # this should be paged - url(r'^(?P(?:(?:[a-z0-9-]+/){2}){1,6})fragments/$', fragment_list_resource), - - # tags by category - url(r'^(?P[a-z0-9-]+)/$', tag_list_resource, name='api_tag_list'), -) diff --git a/apps/catalogue/__init__.py b/apps/catalogue/__init__.py deleted file mode 100644 index eaeb7d468..000000000 --- a/apps/catalogue/__init__.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import logging -from django.conf import settings as settings -from catalogue.utils import AppSettings - - -default_app_config = 'catalogue.apps.CatalogueConfig' - - -class Settings(AppSettings): - """Default settings for catalogue app.""" - DEFAULT_LANGUAGE = u'pol' - # PDF needs TeXML + XeLaTeX, MOBI needs Calibre. - DONT_BUILD = set(['pdf', 'mobi']) - FORMAT_ZIPS = { - 'epub': 'wolnelektury_pl_epub', - 'pdf': 'wolnelektury_pl_pdf', - 'mobi': 'wolnelektury_pl_mobi', - 'fb2': 'wolnelektury_pl_fb2', - } - - REDAKCJA_URL = "http://redakcja.wolnelektury.pl" - GOOD_LICENSES = set([r'CC BY \d\.\d', r'CC BY-SA \d\.\d']) - RELATED_RANDOM_PICTURE_CHANCE = .5 - - def _more_DONT_BUILD(self, value): - for format_ in ['cover', 'pdf', 'epub', 'mobi', 'fb2', 'txt']: - attname = 'NO_BUILD_%s' % format_.upper() - if hasattr(settings, attname): - logging.warn("%s is deprecated, " - "use CATALOGUE_DONT_BUILD instead", attname) - if getattr(settings, attname): - value.add(format_) - else: - value.remove(format_) - return value - - def _more_FORMAT_ZIPS(self, value): - for format_ in ['epub', 'pdf', 'mobi', 'fb2']: - attname = 'ALL_%s_ZIP' % format_.upper() - if hasattr(settings, attname): - logging.warn("%s is deprecated, " - "use CATALOGUE_FORMAT_ZIPS[%s] instead", - attname, format_) - value[format_] = getattr(settings, attname) - return value - - -app_settings = Settings('CATALOGUE') diff --git a/apps/catalogue/admin.py b/apps/catalogue/admin.py deleted file mode 100644 index 28cf53c37..000000000 --- a/apps/catalogue/admin.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin -from django import forms - -from newtagging.admin import TaggableModelAdmin, TaggableModelForm -from catalogue.models import Tag, Book, Fragment, BookMedia, Collection, Source - - -class TagAdmin(admin.ModelAdmin): - list_display = ('name', 'slug', 'sort_key', 'category', 'has_description',) - list_filter = ('category',) - search_fields = ('name',) - ordering = ('name',) - - prepopulated_fields = {'slug': ('name',), 'sort_key': ('name',),} - radio_fields = {'category': admin.HORIZONTAL} - - -class MediaInline(admin.TabularInline): - model = BookMedia - readonly_fields = ['source_sha1'] - extra = 0 - - -class BookAdmin(TaggableModelAdmin): - tag_model = Tag - - list_display = ('title', 'slug', 'created_at', 'has_epub_file', 'has_html_file', 'has_description',) - search_fields = ('title',) - ordering = ('title',) - - inlines = [MediaInline] - - def change_view(self, request, object_id, extra_context=None): - if not request.GET.has_key('advanced'): - self.form = forms.ModelForm - self.fields = ('title', 'description', 'gazeta_link', 'wiki_link') - self.readonly_fields = ('title',) - else: - self.form = TaggableModelForm - self.fields = None - self.readonly_fields = () - return super(BookAdmin, self).change_view(request, object_id, - extra_context=extra_context) - - -class FragmentAdmin(TaggableModelAdmin): - tag_model = Tag - - list_display = ('book', 'anchor',) - ordering = ('book', 'anchor',) - - -class CollectionAdmin(admin.ModelAdmin): - prepopulated_fields = {'slug': ('title',)} - - -class SourceAdmin(admin.ModelAdmin): - list_display = ('netloc', 'name') - - -admin.site.register(Tag, TagAdmin) -admin.site.register(Book, BookAdmin) -admin.site.register(Fragment, FragmentAdmin) -admin.site.register(Collection, CollectionAdmin) -admin.site.register(Source, SourceAdmin) diff --git a/apps/catalogue/apps.py b/apps/catalogue/apps.py deleted file mode 100644 index 54bfc8f8b..000000000 --- a/apps/catalogue/apps.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.apps import AppConfig - -class CatalogueConfig(AppConfig): - name = 'catalogue' - - def ready(self): - from . import signals diff --git a/apps/catalogue/constants.py b/apps/catalogue/constants.py deleted file mode 100644 index 36f4f5dd3..000000000 --- a/apps/catalogue/constants.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.utils.translation import ugettext_lazy as _ - -LICENSES = { - 'http://creativecommons.org/licenses/by-sa/3.0/': { - 'icon': 'cc-by-sa', - 'description': _('Creative Commons Attribution-ShareAlike 3.0 Unported'), - }, -} -LICENSES['http://creativecommons.org/licenses/by-sa/3.0/deed.pl'] = \ - LICENSES['http://creativecommons.org/licenses/by-sa/3.0/'] - -# Those will be generated only for books with own HTML. -EBOOK_FORMATS_WITHOUT_CHILDREN = ['txt', 'fb2'] -# Those will be generated for all books. -EBOOK_FORMATS_WITH_CHILDREN = ['pdf', 'epub', 'mobi'] -# Those will be generated when inherited cover changes. -EBOOK_FORMATS_WITH_COVERS = ['pdf', 'epub', 'mobi'] - -EBOOK_FORMATS = EBOOK_FORMATS_WITHOUT_CHILDREN + EBOOK_FORMATS_WITH_CHILDREN - -LANGUAGES_3TO2 = { - 'deu': 'de', - 'ger': 'de', - 'eng': 'en', - 'spa': 'es', - 'fra': 'fr', - 'fre': 'fr', - 'ita': 'it', - 'jpn': 'jp', - 'lit': 'lt', - 'pol': 'pl', - 'rus': 'ru', - 'ukr': 'uk', -} diff --git a/apps/catalogue/feeds.py b/apps/catalogue/feeds.py deleted file mode 100644 index 2411d015a..000000000 --- a/apps/catalogue/feeds.py +++ /dev/null @@ -1,83 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib.sites.models import Site -from django.contrib.syndication.views import Feed -from django.core.urlresolvers import reverse - -from catalogue import models - -def absolute_url(url): - return "http://%s%s" % (Site.objects.get_current().domain, url) - - -class AudiobookFeed(Feed): - description = "Audiobooki ostatnio dodane do serwisu Wolne Lektury." - - mime_types = { - 'mp3': 'audio/mpeg', - 'ogg': 'audio/ogg', - 'daisy': 'application/zip', - } - - titles = { - 'all': 'WolneLektury.pl - audiobooki we wszystkich formatach', - 'mp3': 'WolneLektury.pl - audiobooki w formacie MP3', - 'ogg': 'WolneLektury.pl - audiobooki w formacie Ogg Vorbis', - 'daisy': 'WolneLektury.pl - audiobooki w formacie DAISY', - } - - def get_object(self, request, type): - return {'type': type, 'all': 'all' in request.GET} - - def title(self, args): - return self.titles[args['type']] - - def link(self, args): - return reverse('audiobook_feed', args=(args['type'],)) - - def items(self, args): - objects = models.BookMedia.objects.order_by('-uploaded_at') - if type == 'all': - objects = objects.filter(type__in=('mp3', 'ogg', 'daisy')) - else: - objects = objects.filter(type=args['type']) - if not args['all']: - objects = objects[:50] - return objects - - def item_title(self, item): - return item.name - - def item_categories(self, item): - return sorted(set(author.name for author in - item.book.tags.filter(category='author').iterator())) - - def item_description(self, item): - lines = [] - artist = item.extra_info.get('artist_name', None) - if artist is not None: - lines.append(u'Czyta: %s' % artist) - director = item.extra_info.get('artist_name', None) - if director is not None: - lines.append(u'Reżyseruje: %s' % director) - return u'
\n'.join(lines) - - def item_link(self, item): - return item.book.get_absolute_url() - - def item_guid(self, item): - return absolute_url(item.file.url) - - def item_enclosure_url(self, item): - return absolute_url(item.file.url) - - def item_enclosure_length(self, item): - return item.file.size - - def item_enclosure_mime_type(self, item): - return self.mime_types[item.type] - - def item_pubdate(self, item): - return item.uploaded_at diff --git a/apps/catalogue/fields.py b/apps/catalogue/fields.py deleted file mode 100644 index 0ff2ca9ef..000000000 --- a/apps/catalogue/fields.py +++ /dev/null @@ -1,243 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django.core.files import File -from django.db import models -from django.db.models.fields.files import FieldFile -from catalogue import app_settings -from catalogue.constants import LANGUAGES_3TO2 -from catalogue.utils import remove_zip, truncate_html_words -from celery.task import Task, task -from celery.utils.log import get_task_logger -from waiter.utils import clear_cache - -task_logger = get_task_logger(__name__) - - -class EbookFieldFile(FieldFile): - """Represents contents of an ebook file field.""" - - def build(self): - """Build the ebook immediately.""" - return self.field.builder.build(self) - - def build_delay(self): - """Builds the ebook in a delayed task.""" - return self.field.builder.delay(self.instance, self.field.attname) - - -class EbookField(models.FileField): - """Represents an ebook file field, attachable to a model.""" - attr_class = EbookFieldFile - - def __init__(self, format_name, *args, **kwargs): - super(EbookField, self).__init__(*args, **kwargs) - self.format_name = format_name - - def deconstruct(self): - name, path, args, kwargs = super(EbookField, self).deconstruct() - args.insert(0, self.format_name) - return name, path, args, kwargs - - @property - def builder(self): - """Finds a celery task suitable for the format of the field.""" - return BuildEbook.for_format(self.format_name) - - def contribute_to_class(self, cls, name): - super(EbookField, self).contribute_to_class(cls, name) - - def has(model_instance): - return bool(getattr(model_instance, self.attname, None)) - has.__doc__ = None - has.__name__ = str("has_%s" % self.attname) - has.short_description = self.name - has.boolean = True - setattr(cls, 'has_%s' % self.attname, has) - - -class BuildEbook(Task): - formats = {} - - @classmethod - def register(cls, format_name): - """A decorator for registering subclasses for particular formats.""" - def wrapper(builder): - cls.formats[format_name] = builder - return builder - return wrapper - - @classmethod - def for_format(cls, format_name): - """Returns a celery task suitable for specified format.""" - return cls.formats.get(format_name, BuildEbookTask) - - @staticmethod - def transform(wldoc, fieldfile): - """Transforms an librarian.WLDocument into an librarian.OutputFile. - - By default, it just calls relevant wldoc.as_??? method. - - """ - return getattr(wldoc, "as_%s" % fieldfile.field.format_name)() - - def run(self, obj, field_name): - """Just run `build` on FieldFile, can't pass it directly to Celery.""" - task_logger.info("%s -> %s" % (obj.slug, field_name)) - ret = self.build(getattr(obj, field_name)) - obj.flush_includes() - return ret - - def build(self, fieldfile): - book = fieldfile.instance - out = self.transform(book.wldocument(), fieldfile) - fieldfile.save(None, File(open(out.get_filename())), save=False) - if book.pk is not None: - type(book).objects.filter(pk=book.pk).update(**{ - fieldfile.field.attname: fieldfile - }) - if fieldfile.field.format_name in app_settings.FORMAT_ZIPS: - remove_zip(app_settings.FORMAT_ZIPS[fieldfile.field.format_name]) -# Don't decorate BuildEbook, because we want to subclass it. -BuildEbookTask = task(BuildEbook, ignore_result=True) - - -@BuildEbook.register('txt') -@task(ignore_result=True) -class BuildTxt(BuildEbook): - @staticmethod - def transform(wldoc, fieldfile): - return wldoc.as_text() - - -@BuildEbook.register('pdf') -@task(ignore_result=True) -class BuildPdf(BuildEbook): - @staticmethod - def transform(wldoc, fieldfile): - return wldoc.as_pdf(morefloats=settings.LIBRARIAN_PDF_MOREFLOATS, - cover=True) - - def build(self, fieldfile): - BuildEbook.build(self, fieldfile) - clear_cache(fieldfile.instance.slug) - - -@BuildEbook.register('epub') -@task(ignore_result=True) -class BuildEpub(BuildEbook): - @staticmethod - def transform(wldoc, fieldfile): - return wldoc.as_epub(cover=True) - - -@BuildEbook.register('html') -@task(ignore_result=True) -class BuildHtml(BuildEbook): - def build(self, fieldfile): - from django.core.files.base import ContentFile - from fnpdjango.utils.text.slughifi import slughifi - from sortify import sortify - from librarian import html - from catalogue.models import Fragment, Tag - - book = fieldfile.instance - - html_output = self.transform( - book.wldocument(parse_dublincore=False), - fieldfile) - - # Delete old fragments, create from scratch if necessary. - book.fragments.all().delete() - - if html_output: - meta_tags = list(book.tags.filter( - category__in=('author', 'epoch', 'genre', 'kind'))) - - lang = book.language - lang = LANGUAGES_3TO2.get(lang, lang) - if lang not in [ln[0] for ln in settings.LANGUAGES]: - lang = None - - fieldfile.save(None, ContentFile(html_output.get_string()), - save=False) - type(book).objects.filter(pk=book.pk).update(**{ - fieldfile.field.attname: fieldfile - }) - - # Extract fragments - closed_fragments, open_fragments = html.extract_fragments(fieldfile.path) - for fragment in closed_fragments.values(): - try: - theme_names = [s.strip() for s in fragment.themes.split(',')] - except AttributeError: - continue - themes = [] - for theme_name in theme_names: - if not theme_name: - continue - if lang == settings.LANGUAGE_CODE: - # Allow creating themes if book in default language. - tag, created = Tag.objects.get_or_create( - slug=slughifi(theme_name), - category='theme') - if created: - tag.name = theme_name - setattr(tag, "name_%s" % lang, theme_name) - tag.sort_key = sortify(theme_name.lower()) - tag.save() - themes.append(tag) - elif lang is not None: - # Don't create unknown themes in non-default languages. - try: - tag = Tag.objects.get(category='theme', - **{"name_%s" % lang: theme_name}) - except Tag.DoesNotExist: - pass - else: - themes.append(tag) - if not themes: - continue - - text = fragment.to_string() - short_text = truncate_html_words(text, 15) - if text == short_text: - short_text = '' - new_fragment = Fragment.objects.create(anchor=fragment.id, - book=book, text=text, short_text=short_text) - - new_fragment.save() - new_fragment.tags = set(meta_tags + themes) - book.html_built.send(sender=type(self), instance=book) - return True - return False - -@BuildEbook.register('cover_thumb') -@task(ignore_result=True) -class BuildCoverThumb(BuildEbook): - @classmethod - def transform(cls, wldoc, fieldfile): - from librarian.cover import WLCover - return WLCover(wldoc.book_info, height=193).output_file() - - - -class OverwritingFieldFile(FieldFile): - """ - Deletes the old file before saving the new one. - """ - - def save(self, name, content, *args, **kwargs): - leave = kwargs.pop('leave', None) - # delete if there's a file already and there's a new one coming - if not leave and self and (not hasattr(content, 'path') or - content.path != self.path): - self.delete(save=False) - return super(OverwritingFieldFile, self).save( - name, content, *args, **kwargs) - - -class OverwritingFileField(models.FileField): - attr_class = OverwritingFieldFile diff --git a/apps/catalogue/fixtures/collection-boy.json b/apps/catalogue/fixtures/collection-boy.json deleted file mode 100644 index 1328b132b..000000000 --- a/apps/catalogue/fixtures/collection-boy.json +++ /dev/null @@ -1,19 +0,0 @@ -[ - { - "pk": "promo", - "model": "chunks.chunk", - "fields": { - "content": "

\r\n\r\n\r\nOh Boy!\r\n\r\n\r\n

\r\n\r\n\r\nBiblioteczka Boya\r\n\r\n\r\n

\r\n\r\n\r\n

T\u0142umaczenia literatury francuskiej i nie tylko.

\r\n\r\n

Biblioteczka Boya \u21d2

\r\n\r\n\r\n
", - "description": "boks promocyjny na g\u0142\u00f3wnej" - } - }, - { - "pk": "boy", - "model": "catalogue.collection", - "fields": { - "book_slugs": "http://www.wolnelektury.pl/katalog/lektura/piesn-o-rolandzie/\nhttp://www.wolnelektury.pl/katalog/lektura/wielki-testament/\nhttp://www.wolnelektury.pl/katalog/lektura/skapiec/\nhttp://www.wolnelektury.pl/katalog/lektura/mieszczanin-szlachcicem/\nhttp://www.wolnelektury.pl/katalog/lektura/kandyd/\nhttp://www.wolnelektury.pl/katalog/lektura/rozprawa-o-metodzie/\nhttp://www.wolnelektury.pl/katalog/lektura/listy-perskie/\nhttp://www.wolnelektury.pl/katalog/lektura/spowiedz-dzieciecia-wieku/\nhttp://www.wolnelektury.pl/katalog/lektura/ubu-krol/\nhttp://www.wolnelektury.pl/katalog/lektura/legenda-o-tristanie-i-izoldzie/\nhttp://www.wolnelektury.pl/katalog/lektura/boy-swietoszek/\nhttp://www.wolnelektury.pl/katalog/lektura/mizantrop/\nhttp://www.wolnelektury.pl/katalog/lektura/kubus-fatalista-i-jego-pan/\nhttp://www.wolnelektury.pl/katalog/lektura/mysli/\nhttp://www.wolnelektury.pl/katalog/lektura/o-duchu-praw/\nhttp://www.wolnelektury.pl/katalog/lektura/proby/\nhttp://www.wolnelektury.pl/katalog/lektura/w-strone-swanna/\nhttp://www.wolnelektury.pl/katalog/lektura/gargantua-i-pantagruel/", - "description": "", - "title": "Biblioteczka Boya" - } - } -] \ No newline at end of file diff --git a/apps/catalogue/forms.py b/apps/catalogue/forms.py deleted file mode 100644 index d52310bd3..000000000 --- a/apps/catalogue/forms.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import forms -from django.utils.translation import ugettext_lazy as _ - -from catalogue.models import Book -from waiter.models import WaitedFile -from django.core.exceptions import ValidationError -from catalogue.utils import get_customized_pdf_path -from catalogue.tasks import build_custom_pdf - - -class BookImportForm(forms.Form): - book_xml_file = forms.FileField(required=False) - book_xml = forms.CharField(required=False) - - def clean(self): - from django.core.files.base import ContentFile - - if not self.cleaned_data['book_xml_file']: - if self.cleaned_data['book_xml']: - self.cleaned_data['book_xml_file'] = \ - ContentFile(self.cleaned_data['book_xml'].encode('utf-8')) - else: - raise forms.ValidationError(_("Please supply an XML.")) - return super(BookImportForm, self).clean() - - def save(self, commit=True, **kwargs): - return Book.from_xml_file(self.cleaned_data['book_xml_file'], overwrite=True, **kwargs) - - -FORMATS = [(f, f.upper()) for f in Book.ebook_formats] - - -class DownloadFormatsForm(forms.Form): - formats = forms.MultipleChoiceField(required=False, choices=FORMATS, - widget=forms.CheckboxSelectMultiple) - - def __init__(self, *args, **kwargs): - super(DownloadFormatsForm, self).__init__(*args, **kwargs) - - -CUSTOMIZATION_FLAGS = ( - ('nofootnotes', _("Don't show footnotes")), - ('nothemes', _("Don't disply themes")), - ('nowlfont', _("Don't use our custom font")), - ('no-cover', _("Without cover")), - ) -CUSTOMIZATION_OPTIONS = ( - ('leading', _("Leading"), ( - ('', _('Normal leading')), - ('onehalfleading', _('One and a half leading')), - ('doubleleading', _('Double leading')), - )), - ('fontsize', _("Font size"), ( - ('', _('Default')), - ('13pt', _('Big')) - )), -# ('pagesize', _("Paper size"), ( -# ('a4paper', _('A4')), -# ('a5paper', _('A5')), -# )), - ) - - -class CustomPDFForm(forms.Form): - def __init__(self, book, *args, **kwargs): - super(CustomPDFForm, self).__init__(*args, **kwargs) - self.book = book - for name, label in CUSTOMIZATION_FLAGS: - self.fields[name] = forms.BooleanField(required=False, label=label) - for name, label, choices in CUSTOMIZATION_OPTIONS: - self.fields[name] = forms.ChoiceField(choices, required=False, label=label) - - def clean(self): - self.cleaned_data['cust'] = self.customizations - self.cleaned_data['path'] = get_customized_pdf_path(self.book, - self.cleaned_data['cust']) - if not WaitedFile.can_order(self.cleaned_data['path']): - raise ValidationError(_('Queue is full. Please try again later.')) - return self.cleaned_data - - @property - def customizations(self): - c = [] - for name, label in CUSTOMIZATION_FLAGS: - if self.cleaned_data.get(name): - c.append(name) - for name, label, choices in CUSTOMIZATION_OPTIONS: - option = self.cleaned_data.get(name) - if option: - c.append(option) - c.sort() - return c - - def save(self, *args, **kwargs): - if not self.cleaned_data['cust'] and self.book.pdf_file: - # Don't build with default options, just redirect to the standard file. - return {"redirect": self.book.pdf_file.url} - url = WaitedFile.order(self.cleaned_data['path'], - lambda p, waiter_id: build_custom_pdf.delay(self.book.id, - self.cleaned_data['cust'], p, waiter_id), - self.book.pretty_title() - ) - #return redirect(url) - return {"redirect": url} diff --git a/apps/catalogue/helpers.py b/apps/catalogue/helpers.py deleted file mode 100644 index 7ca2cbd3a..000000000 --- a/apps/catalogue/helpers.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib.contenttypes.models import ContentType -from django.db.models import Count -from .models import Tag, Book - - -BOOK_CATEGORIES = ('author', 'epoch', 'genre', 'kind') - - -def get_top_level_related_tags(tags=None, categories=BOOK_CATEGORIES): - """ - Finds tags related to given tags through books, and counts their usage. - - Takes ancestry into account: if a tag is applied to a book, its - usage on the book's descendants is ignored. - - This is tested for PostgreSQL 9.1+, and might not work elsewhere. - It particular, it uses raw SQL using WITH clause, which is - supported in SQLite from v. 3.8.3, and is missing in MySQL. - http://bugs.mysql.com/bug.php?id=16244 - - """ - # First, find all tag relations of relevant books. - bct = ContentType.objects.get_for_model(Book) - relations = Tag.intermediary_table_model.objects.filter( - content_type=bct) - if tags is not None: - tagged_books = Book.tagged.with_all(tags).only('pk') - relations = relations.filter( - object_id__in=tagged_books).exclude( - tag_id__in=[tag.pk for tag in tags]) - - rel_sql, rel_params = relations.query.sql_with_params() - - # Exclude those relations between a book and a tag, - # for which there is a relation between the book's ancestor - # and the tag and - - return Tag.objects.raw(''' - WITH AllTagged AS (''' + rel_sql + ''') - SELECT catalogue_tag.*, COUNT(catalogue_tag.id) AS count - FROM catalogue_tag, AllTagged - WHERE catalogue_tag.id=AllTagged.tag_id - AND catalogue_tag.category IN %s - AND NOT EXISTS ( - SELECT AncestorTagged.id - FROM catalogue_book_ancestor Ancestor, - AllTagged AncestorTagged - WHERE Ancestor.from_book_id=AllTagged.object_id - AND AncestorTagged.content_type_id=%s - AND AncestorTagged.object_id=Ancestor.to_book_id - AND AncestorTagged.tag_id=AllTagged.tag_id - ) - GROUP BY catalogue_tag.id - ORDER BY sort_key''', rel_params + (categories, bct.pk)) diff --git a/apps/catalogue/import_utils.py b/apps/catalogue/import_utils.py deleted file mode 100644 index ca0c6efe5..000000000 --- a/apps/catalogue/import_utils.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from librarian import DocProvider - -class ORMDocProvider(DocProvider): - """Used for getting books' children.""" - - def __init__(self, book): - self.book = book - - def by_slug(self, slug): - if slug == self.book.slug: - return open(self.book.xml_file.path) - else: - return type(self.book).objects.get(slug=slug).xml_file diff --git a/apps/catalogue/locale/de/LC_MESSAGES/django.mo b/apps/catalogue/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index 1cd46613d..000000000 Binary files a/apps/catalogue/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/de/LC_MESSAGES/django.po b/apps/catalogue/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 057dc348f..000000000 --- a/apps/catalogue/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,874 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2013-04-09 10:38+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "Bitte stellen Sie die XML bereit." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "Zeige die Fußnoten nicht" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "Zeige die Motive nicht " - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "Benutze voreingestellte Schrift nicht" - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "Zeilenabstand" - -#: forms.py:53 -msgid "Normal leading" -msgstr "Normaler Zeilenabstand" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "Zeilenabstand 1,5" - -#: forms.py:55 -msgid "Double leading" -msgstr "Doppelter Zeilenabstand" - -#: forms.py:57 -msgid "Font size" -msgstr "Schriftgröße" - -#: forms.py:58 -msgid "Default" -msgstr "Voreingestellt" - -#: forms.py:59 -msgid "Big" -msgstr "Groß" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"Ein Fehler ist aufgetreten: %(exception)s\n" -"\n" -"%(tb)s" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "Buch wurde erfolgreich importiert" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "Fehler beim Importieren der Datei: %r" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "PDF-Datei herunterladen" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "Herunterladen" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "Titel" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "Sortierschlüssel" - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "Slug" - -#: models/book.py:33 -msgid "language code" -msgstr "Sprachenkode" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "Beschreibung" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "Erstellungsdatum" - -#: models/book.py:38 -msgid "parent number" -msgstr "Elternnummer" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr "zusätzliche Informationen" - -#: models/book.py:44 -msgid "cover" -msgstr "Umschlag" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "Buch" - -#: models/book.py:67 -msgid "books" -msgstr "Bücher" - -#: models/book.py:244 -#, python-format -msgid "Book \"%s\" does not exist." -msgstr "Buch mit dem Slug = \"%s\" ist nicht vorhanden." - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "Buch %s ist bereits vorhanden" - -#: models/book.py:599 models/bookmedia.py:23 -#, python-format -msgid "%s file" -msgstr "%s XML-Datei" - -#: models/bookmedia.py:26 -msgid "type" -msgstr "Typ" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "Name" - -#: models/bookmedia.py:28 -#, fuzzy -msgid "file" -msgstr "XML-Datei" - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "book media" - -#: models/collection.py:16 -msgid "book slugs" -msgstr "Büchervorschau" - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "Art" - -#: models/collection.py:22 -msgid "collection" -msgstr "Sammlung" - -#: models/collection.py:23 -msgid "collections" -msgstr "Sammlungen" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "Auszug" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "Auszüge" - -#: models/tag.py:16 -msgid "author" -msgstr "Autor" - -#: models/tag.py:17 -msgid "epoch" -msgstr "Epoche" - -#: models/tag.py:19 -msgid "genre" -msgstr "Genre" - -#: models/tag.py:20 -msgid "theme" -msgstr "Motiv" - -#: models/tag.py:21 -msgid "set" -msgstr "Buchregal" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "Kategorie" - -#: models/tag.py:40 -msgid "book count" -msgstr "Anzahl der Bücher" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "Tag" - -#: models/tag.py:66 -msgid "tags" -msgstr "Tags" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "Auflistung aller Audiobücher" - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "Neueste MP3-Audiobücher" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "Neueste Ogg-Vorbis-Audiobuch-Dateien" - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -msgstr "" -"Audiothek der Schullektüren, die der Stiftung Nowoczesna Polska gehört. \n" -"Sie können sie kostenlos und ohne Beschränkungen benutzen. \n" -"Audiobücher nehmen bekannte Schauspieler und Schauspielerinnen, darunter " -"Danuta Stenka und Jan Peszek." - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "Siehe auch" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "Motiv" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "Im Werk" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "Dieses Werk steht unter Lizenz" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" Creative " -"Commons Attribution-ShareAlike 3.0\n" -" license." -msgstr "" -"Dieses Werk ist nicht urheberrechtlich geschützt, dass sie frei benutzt " -"werden kann, vervielfältigt und veröffentlicht. Wenn es irgendwelche " -"zusätzlichen ürheberrechtlich geschützten Materialien an diesem Werk gibt " -"(Anmerkungen, Motive), sind sie unter der Lizenz http://creativecommons.org/" -"licenses/by-sa/3.0/ verfügbar." - -#: templates/catalogue/book_info.html:20 -#, fuzzy -msgid "Resource prepared based on:" -msgstr "Der Text basiert auf:" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "Redigiert und kommentiert von:" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "Auflistung von allen Werken" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "Inhaltsverzeichnis" - -#: templates/catalogue/book_list.html:30 -msgid "↑ top ↑" -msgstr "↑ top ↑" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "Epoche" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "Sorte" - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "Gattung" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "Online lesen" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "Drucken" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "Für ein E-Book-Reader" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "für Kindle" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr "für fortgeschrittene Benutzung" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "Hören" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "Inhaltsverzeichnis" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "Motive" - -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "Editieren. Notiz" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "Infobox" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "Bücherseite" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "für ein E-Book-Reader" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "Lade alle Audiobücher von diesem Buch herunter" - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "Motive und Themen" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "Siehe" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "Quelle" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "vom Buch" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "XML-Ursprungsdatei" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "Buch über" - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr "Editor-Plattform" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "Buchbeschreibung in Lektury.Gazeta.pl" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "Buchbeschreibung in Wikipedia" - -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "Passe dieses Buch zusammen" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "Katalog" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "Laden Sie den Katalog als PDF-Datei" - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "Autoren" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "Sorten" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "Gattungen" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "Epochen" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "Themen und Motive" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -#, fuzzy -msgid "Collections" -msgstr "Sammlungen" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "Auflistung aller DAISY-Dateien" - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "Neueste DAISY-Audiobücher" - -#: templates/catalogue/daisy_list.html:15 -msgid "" -"System DAISY to uznany na całym świecie format udostępniania książek\n" -"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -"ograniczeń." -msgstr "" -"DAISY-System ist ein weltweit anerkanntes Buchformatr, \n" -"das an Bedürfnisse der Sehbehinderten, der Blinden und anderen Menschen mit " -"Leseschwierigkeiten. \n" -"Sie können es kostenlos und ohne Beschränkungen benutzen." - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "Die Kriterien sind mehrdeutig. Wählen Sie eine der folgenden Optionen:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "Den ganzen Auszug zeigen" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "Den Auszug verstecken" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "volle Kategorie sehen" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please wait…" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "Alle Bücher" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "Audioücher" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "DAISY" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "Das Werk steht unter Lizenz" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "Basiert auf" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "Details" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "Autor" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "Andere Ressoursen" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "Quelle des Bildes" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "Bild auf dem Editor-Plattform" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "Siehe XML-Quelle" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Motive des Werkes" - -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "Auflistung aller Bilder" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "Herunterladen als" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Künstler" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "Regisseur" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "Audiobücher wurden als Teil der folgenden Projekte vorbereitet:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "%(cs)s, gestiftet von %(fb)s" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" -"Audiobücher wurden als Teil des Projektes %(cs)s vorbereitet, gestiftet von " -"%(fb)s." - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "Audiobücher wurden als Teil des Projektes %(cs)s vorbereitet." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -#, fuzzy -msgid "Recent audiobooks" -msgstr "Neueste MP3-Audiobücher" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -#, fuzzy -msgid "Recent publications" -msgstr "gehe zur Public Domain" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see recent audiobooks\n" -" and recent DAISY files." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "Suchen" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "Haben Sie gemeint" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "Ergebnisse nach Titeln" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "Ergebnisse nach Autoren" - -#: templates/catalogue/search_multiple_hits.html:80 -#, fuzzy -msgid "Results by translators" -msgstr "Ergebnisse nach Autoren" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "Ergebnisse im Text" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "Andere Ergebnisse" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "Sorry! Suchkriterien haben keine Ressourcen erwiesen" - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"Search engine supports following criteria: title, author, theme/topic, " -"epoch, kind and genre.\n" -"\t\tAs for now we do not support full text search." -msgstr "" -"Suchmaschine fördert die folgenden Kriterien: Titel, Autor, Thema/Motiv, " -"Epoche, Art und Genre. \n" -"Die Volltextsuche ist noch nicht möglich." - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "Sorry! Suchfrage muss zumindest zwei Buchstaben enthalten" - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "in Lektury.Gazeta.pl" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "in Wikipedia" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -#, fuzzy -msgid "Download a custom PDF" -msgstr "PDF-Datei herunterladen" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Leg das Buch aufs Regal ab!" - -#~ msgid "Create new shelf" -#~ msgstr "Neues Bücherregal erstellen" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Sie haben kein Bücherregal. Sie können eins unten erschaffen, wenn Sie " -#~ "wollen." - -#~ msgid "Put on the shelf!" -#~ msgstr "Aufs Bücherregal legen!" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Auschnitt aus dem Inhalt der Bücherregale" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Sie besitzen kein Bücherregal. Sie können eins unten erschaffen, wenn Sie " -#~ "wollen." - -#~ msgid "Save all shelves" -#~ msgstr "Alle Bücherregale speichern" - -#~ msgid "Your shelves with books" -#~ msgstr "Ihre Bücherregale" - -#~ msgid "remove" -#~ msgstr "Entfernen" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "Sie haben noch keine Bücherregale. Sie können eins unten erschaffen, wenn " -#~ "Sie wollen." - -#~ msgid "Create shelf" -#~ msgstr "Erschaffe ein Bücherregal" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "Geben Sie eine gültige JSON-Wert ein. Fehler:% s" - -#~ msgid "A4" -#~ msgstr "A4 DIN" - -#~ msgid "A5" -#~ msgstr "A5 DIN" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "Falsche Anpassungsoptionen für PDF-Datei" - -#~ msgid "Bad method" -#~ msgstr "Falsche Methode" - -#~ msgid "title, author, theme/topic, epoch, kind, genre" -#~ msgstr "Titel, Autor, Motiv/Thema, Epoche, Art, Gattung" - -#~ msgid "main page" -#~ msgstr "Startseite" - -#~ msgid "Show tag on main page" -#~ msgstr "Tag für die Startseite anzeigen" - -#~ msgid "year of death" -#~ msgstr "Todesjahr" - -#~ msgid "short HTML" -#~ msgstr "kurze HTML" - -#~ msgid "HTML file" -#~ msgstr "HTML-Datei" - -#~ msgid "PDF file" -#~ msgstr "PDF-Datei" - -#~ msgid "EPUB file" -#~ msgstr "EPUB-Datei" - -#~ msgid "ODT file" -#~ msgstr "ODT-Datei" - -#~ msgid "TXT file" -#~ msgstr "TXT-Datei" - -#~ msgid "MP3 file" -#~ msgstr "MP3-Datei" - -#~ msgid "OGG file" -#~ msgstr "OGG-Datei" - -#~ msgid "translator" -#~ msgstr "Übersetzer" - -#~ msgid "year of translator's death" -#~ msgstr "Todesjahr des Übersetzers" - -#~ msgid "book stub" -#~ msgstr "Buch Vorschau" - -#~ msgid "

To maintain your shelves you need to be logged in.

" -#~ msgstr "

Um die Bücherregale zu verwalten, musst du eingeloggt sein.

" - -#~ msgid "

Shelves were sucessfully saved.

" -#~ msgstr "

Bücherregale wurden erfolgreich gespeichert.

" - -#~ msgid "Book was successfully removed from the shelf" -#~ msgstr "Das Buch wurde erfolgreich entfernt" - -#~ msgid "

Shelf %s was successfully created

" -#~ msgstr "

Büchrregal %s wurde erfolgreich erstellt

" - -#~ msgid "

Shelf %s was successfully removed

" -#~ msgstr "

Bücherregal%s wurde erfolgreich entfernt

" - -#~ msgid "Today is %(month)s, %(day)s." -#~ msgstr "Heute ist %(month)s, %(day)s." - -#~ msgid "content type" -#~ msgstr "Inhaltstyp" - -#~ msgid "object id" -#~ msgstr "Objekt ID" diff --git a/apps/catalogue/locale/en/LC_MESSAGES/django.mo b/apps/catalogue/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index 89aa2c84b..000000000 Binary files a/apps/catalogue/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/en/LC_MESSAGES/django.po b/apps/catalogue/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index f66d1efe0..000000000 --- a/apps/catalogue/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,868 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:38+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "Please supply an XML." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "Don't show footnotes" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "Don't display themes" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "Don't use our custom font" - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "Leading" - -#: forms.py:53 -msgid "Normal leading" -msgstr "Normal leading" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "One and a half leading" - -#: forms.py:55 -msgid "Double leading" -msgstr "Double leading" - -#: forms.py:57 -msgid "Font size" -msgstr "Font size" - -#: forms.py:58 -msgid "Default" -msgstr "Default" - -#: forms.py:59 -msgid "Big" -msgstr "Big" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "Book imported succesfully" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "An error occured while importing file: %r" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "Download custom PDF" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "Download" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "Title" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "Sort key" - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "Slug" - -#: models/book.py:33 -msgid "language code" -msgstr "language code" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "Description" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "creation date" - -#: models/book.py:38 -msgid "parent number" -msgstr "Parent number" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr "Additional information" - -#: models/book.py:44 -msgid "cover" -msgstr "cover" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "book" - -#: models/book.py:67 -msgid "books" -msgstr "Books" - -#: models/book.py:244 -#, python-format -msgid "Book \"%s\" does not exist." -msgstr "Book with stub = \"%s\" does not exist." - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "Book %s already exists" - -#: models/book.py:599 models/bookmedia.py:23 -#, python-format -msgid "%s file" -msgstr "%s file" - -#: models/bookmedia.py:26 -msgid "type" -msgstr "type" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "name" - -#: models/bookmedia.py:28 -msgid "file" -msgstr "XML file" - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "book media" - -#: models/collection.py:16 -msgid "book slugs" -msgstr "Book stubs" - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "form" - -#: models/collection.py:22 -msgid "collection" -msgstr "collection" - -#: models/collection.py:23 -msgid "collections" -msgstr "collections" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "Fragment" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "Fragments" - -#: models/tag.py:16 -msgid "author" -msgstr "author" - -#: models/tag.py:17 -msgid "epoch" -msgstr "period" - -#: models/tag.py:19 -msgid "genre" -msgstr "genre" - -#: models/tag.py:20 -msgid "theme" -msgstr "motif" - -#: models/tag.py:21 -msgid "set" -msgstr "set" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "Category" - -#: models/tag.py:40 -msgid "book count" -msgstr "Number of books" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "tag" - -#: models/tag.py:66 -msgid "tags" -msgstr "tags" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "List of the audiobooks" - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "Latest MP3 audiobooks" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "Latest Ogg Vorbis audiobooks" - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -msgstr "" -"Audio library of required readings of Modern Poland Foundation.\n" -"It is free of charge and you can use it without any limits. \n" -"Audiobooks are recorded with the participation of famous Polish actors like " -"Danuta Stenka or Jan Peszek." - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "See also" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "Theme" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "in work " - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "This work is licensed under:" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" Creative " -"Commons Attribution-ShareAlike 3.0\n" -" license." -msgstr "" -"This work is not covered by copyright and is a part of the\n" -" public domain, which means that it can be used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" Creative " -"Commons Attribution-ShareAlike 3.0\n" -" license." - -#: templates/catalogue/book_info.html:20 -#, fuzzy -msgid "Resource prepared based on:" -msgstr "Text based on:" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "Edited and annotated by:" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "List of all works" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "Table of Contents" - -#: templates/catalogue/book_list.html:30 -msgid "↑ top ↑" -msgstr "↑ top ↑" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "Period" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "Form" - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "Genre" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "Read online" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "to print" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "for an e-book reader" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "for Kindle" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr "" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "Listen" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "Table of contents" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "Themes" - -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "Edit. note" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "Infobox" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "Book's page" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "for a reader" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "Download all audiobooks for this book" - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "Motifs and themes" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "See" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "Source" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "of the book" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "Source XML file" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "Book on" - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr "Editor's Platform" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "Book description on Lektury.Gazeta.pl" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "Book description on Wikipedia" - -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "Mix this book" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "Catalogue" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "Download the catalogue in PDF format." - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "Authors" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "Forms" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "Genres" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "Periods" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "Motifs and themes" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -#, fuzzy -msgid "Collections" -msgstr "collections" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "List of all DAISY files" - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "Latest DAISY audiobooks" - -#: templates/catalogue/daisy_list.html:15 -msgid "" -"System DAISY to uznany na całym świecie format udostępniania książek\n" -"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -"ograniczeń." -msgstr "" -"The internationally recognized DAISY book format \n" -"provides the best possible standardized access to books for people who are \n" -"partially sighted, blind or are dyslexic. It is free of charge and you can " -"use it without any limits." - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "" -"The criteria are ambiguous. Please select one of the following options:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "Expand fragment" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "Hide fragment" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "See full category" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please wait…" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "All books" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "Audiobooks" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "DAISY" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "Work is licensed under " - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "Based on" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "Details" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "Author" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "Other sources" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "Source of the image" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "Image on the Editor's Platform" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "View XML source" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Work's themes " - -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "List of all pictures" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "Download as" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Reader" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "Director" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "Audiobooks were prepared as a part of the following projects:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "%(cs)s, funded by %(fb)s" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "Audiobooks were prepared as a part of the %(cs)s project." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -#, fuzzy -msgid "Recent audiobooks" -msgstr "Latest MP3 audiobooks" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -#, fuzzy -msgid "Recent publications" -msgstr "Goes to public domain" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see recent audiobooks\n" -" and recent DAISY files." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "Search" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "Did you mean" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "Results by title" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "Results by authors" - -#: templates/catalogue/search_multiple_hits.html:80 -#, fuzzy -msgid "Results by translators" -msgstr "Translator" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "Results in text" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "Other results" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "Sorry! Search cirteria did not match any resources." - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"Search engine supports following criteria: title, author, theme/topic, " -"epoch, kind and genre.\n" -"\t\tAs for now we do not support full text search." -msgstr "" -"Search engine supports following criteria: title, author, theme/topic, " -"period, form and genre.\n" -"\t\tAs for now we do not support full text search." - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "Sorry! Search query must have at least two characters." - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "in Lektury.Gazeta.pl" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "in Wikipedia" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr "Download a custom PDF" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Put this book on the shelf!" - -#~ msgid "Create new shelf" -#~ msgstr "Create new shelf" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "You do not have any shelves. You can create one below, if you want to." - -#~ msgid "Put on the shelf!" -#~ msgstr "Put on the shelf!" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Shelves containing fragment" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "You do not own any shelves. You can create one below, if you want to." - -#~ msgid "Save all shelves" -#~ msgstr "Save all shelves" - -#~ msgid "Your shelves with books" -#~ msgstr "Your shelves with books" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "You do not own any shelves. You can create one below if you want to" - -#~ msgid "Create shelf" -#~ msgstr "Create shelf" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "Enter a valid JSON value. Error: %s" - -#~ msgid "A4" -#~ msgstr "A4" - -#~ msgid "A5" -#~ msgstr "A5" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "Incorrect customization options for PDF" - -#~ msgid "Bad method" -#~ msgstr "Bad method" - -#~ msgid "title, author, theme/topic, epoch, kind, genre" -#~ msgstr "title, author, motifs/theme, period, form, genre" - -#~ msgid "main page" -#~ msgstr "Main page" - -#~ msgid "Show tag on main page" -#~ msgstr "Show tag on main page" - -#~ msgid "year of death" -#~ msgstr "Year of death" - -#~ msgid "short HTML" -#~ msgstr "short HTML" - -#~ msgid "HTML file" -#~ msgstr "HTML file" - -#~ msgid "PDF file" -#~ msgstr "PDF file" - -#~ msgid "EPUB file" -#~ msgstr "EPUB file" - -#~ msgid "ODT file" -#~ msgstr "ODT file" - -#~ msgid "TXT file" -#~ msgstr "TXT file" - -#~ msgid "MP3 file" -#~ msgstr "MP3 file" - -#~ msgid "OGG file" -#~ msgstr "OGG file" - -#~ msgid "year of translator's death" -#~ msgstr "Year of translator's death" - -#~ msgid "book stub" -#~ msgstr "Book stub" - -#~ msgid "time" -#~ msgstr "time" - -#~ msgid "

To maintain your shelves you need to be logged in.

" -#~ msgstr "

To administer your shelves you need to be logged in.

" - -#~ msgid "

Shelves were sucessfully saved.

" -#~ msgstr "

Shelves were sucessfully saved.

" - -#~ msgid "Book was successfully removed from the shelf" -#~ msgstr "Book was successfully removed from the shelf" - -#~ msgid "

Shelf %s was successfully created

" -#~ msgstr "

Shelf %s was successfully created

" - -#~ msgid "

Shelf %s was successfully removed

" -#~ msgstr "

Shelf %s was successfully removed

" - -#~ msgid "Today is %(month)s, %(day)s." -#~ msgstr "Today is %(month)s, %(day)s." - -#~ msgid "content type" -#~ msgstr "content type" - -#~ msgid "object id" -#~ msgstr "object id" diff --git a/apps/catalogue/locale/es/LC_MESSAGES/django.mo b/apps/catalogue/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index cb82bd10f..000000000 Binary files a/apps/catalogue/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/es/LC_MESSAGES/django.po b/apps/catalogue/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index aa3cd85f4..000000000 --- a/apps/catalogue/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,885 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2013-04-09 10:39+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "Por favor, suministre un XML." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "No mostres notas a pie de página" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "No mostres temas" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "No uses nuestro tipo de la fuente de personalización " - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "Interlineado" - -#: forms.py:53 -msgid "Normal leading" -msgstr "Interlineado normal" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "Interlineado uno y medio" - -#: forms.py:55 -msgid "Double leading" -msgstr "Interlineado doble" - -#: forms.py:57 -msgid "Font size" -msgstr "Tamaño de la fuente" - -#: forms.py:58 -msgid "Default" -msgstr "Valor por defecto" - -#: forms.py:59 -msgid "Big" -msgstr "Grande" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -# msgid "Today is %(month)s, %(day)s." -# msgstr "Hoy es el %(día)s de %(mes)es" -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"Ha ocurrido un error: %(exception)s\n" -"\n" -"%(tb)s" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "El libro ha sido importado con éxito" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "Ha ocurrido un error al cargar el archivo: %r" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "Descarga PDF personalizado" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "Descargar" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "título" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "clave de clasificación" - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "slug" - -#: models/book.py:33 -msgid "language code" -msgstr "código de idioma" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "descripción" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "fecha de creación" - -#: models/book.py:38 -msgid "parent number" -msgstr "cifra matriz" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr "información adicional" - -#: models/book.py:44 -msgid "cover" -msgstr "tapa" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "libro" - -#: models/book.py:67 -msgid "books" -msgstr "libros" - -#: models/book.py:244 -#, fuzzy, python-format -msgid "Book \"%s\" does not exist." -msgstr "Libro con slug = \"%s\" no existe." - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "Libro %s ya existe" - -#: models/book.py:599 models/bookmedia.py:23 -#, python-format -msgid "%s file" -msgstr "%s archivo" - -#: models/bookmedia.py:26 -msgid "type" -msgstr "tipo" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "nombre" - -#: models/bookmedia.py:28 -msgid "file" -msgstr "archivo" - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "los medios de el libro" - -#: models/collection.py:16 -#, fuzzy -msgid "book slugs" -msgstr "vista previa de libros" - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "tipo" - -#: models/collection.py:22 -msgid "collection" -msgstr "colección" - -#: models/collection.py:23 -msgid "collections" -msgstr "colecciones" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "fragmento" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "fragmentos" - -#: models/tag.py:16 -msgid "author" -msgstr "autor" - -#: models/tag.py:17 -msgid "epoch" -msgstr "época" - -#: models/tag.py:19 -msgid "genre" -msgstr "género" - -#: models/tag.py:20 -msgid "theme" -msgstr "tema" - -#: models/tag.py:21 -msgid "set" -msgstr "colección" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "categoría" - -#: models/tag.py:40 -msgid "book count" -msgstr "número de libros" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "tag" - -#: models/tag.py:66 -msgid "tags" -msgstr "tags" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "Lista de todos los audiolibros " - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "Los últimos audiolibros en formato MP3 " - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "Los últimos audiolibros en formato Ogg Vorbis " - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -msgstr "" -"Colección de grabaciones de libros de lectura obligatoria de la Fundación " -"Polonia Moderna.\n" -"Podéis disfrutar de ella gratuitamente y sin límites.\n" -"Los audiolibros están grabados por actores conocidos, como Danuta Stenka y " -"Jan Peszek." - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "Véase también" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "Tema" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "en la obra" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "Esta obra está autorizada bajo:" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" Creative " -"Commons Attribution-ShareAlike 3.0\n" -" license." -msgstr "" -"Esta obra está libre de derechos de autor y es de dominio público, por ende " -"se puede usar,publicar y difundir libremente. Si esta obra tiene materiales " -"adicionales (como notas a pie de pá gina, temas lutrarios, etc.), que no " -"esten libres de derechos de autor, dichos materiales están publicados bajo " -"la \n" -"Creative Commons " -"Attribution-ShareAlike 3.0\n" -" licencia." - -#: templates/catalogue/book_info.html:20 -#, fuzzy -msgid "Resource prepared based on:" -msgstr "Texto preparado a base de:" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "Editado y anotado por:" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "Lista de todas las obras" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "Tabla de contenido" - -#: templates/catalogue/book_list.html:30 -msgid "↑ top ↑" -msgstr "↑volver arriba↑" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "Época" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "Género" - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "Subgénero" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "Leer en línea" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "imprimir" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "para el lector de audiolibro " - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "para Kindle" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr "para uso avanzado" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "Escuchar" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "Tabla de contenido" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "Temas" - -# ! także: N.de la R. -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "Nota de la redacción" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "Infobox" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "Página del libro" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "para el lector" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "Descarga todos los audiolibros para este libro" - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "Motivos y temas" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "Vea" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "Fuente" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "del libro" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "archivo fuente XML" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "El libro está en el estante" - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr "Plataforma de Editor" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "Descripción del libro en Lektury.Gazeta.pl" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "Descripción del libro en Wikipedia" - -# ! mezcla - jeśli chodzi o pomieszanie -# ! relaciona lub combina - jeśli chodzi o powiązanie -# ! prepara - jeśli chodzi o przygotowanie -# (zmienić czasownik "mezcla" na któryś z powyższych jeśli kontekst jest inny) -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "Mezcla este libro" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "Catálogo" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "Descarga el catálogo en formato PDF" - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "Autor" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "Géneros" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "Subgénero" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "Épocas" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "Temas" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -#, fuzzy -msgid "Collections" -msgstr "colecciones" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "Lista de todos los archivos DAISY" - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "Los últimos audiolibros en formato DAISY" - -#: templates/catalogue/daisy_list.html:15 -msgid "" -"System DAISY to uznany na całym świecie format udostępniania książek\n" -"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -"ograniczeń." -msgstr "" -"El sistema DAISY es un formato, reconocido en todo el mundo, que facilita el " -"acceso a los libros \n" -"y está adaptado a las necesidades de personas con baja visión, invidentes o " -"las que \n" -"tienen problemas de lectura. Los podéis disfrutar de manera gratuita y sin " -"límites." - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "" -"Los criterios son ambiguos. Por favor, seleccione una de las siguientes " -"opciones:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "Extender fragmento" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "Ocultar fragmento" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "Ver la categoría completa" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please wait…" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "Todos los libros" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "Audiolibros" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "DAISY" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "Esta obra está autorizada bajo" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "Basado en " - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "Detalles" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "Autor" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "Otros recursos" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "Fuente de la imagen" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "Imagen en la Plataforma de Editor" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "Ver código fuente XML" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Temas de las obras" - -# ! los dibujos - obrazki, rysunki -# ! las fotos - jeśli chodzi o zdjęcia -# ! los cuadros - jeśli chodzi o obrazy -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "Lista de todos los dibujos" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "Descargar como" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Artista" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "Director" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "Audiolibros forman parte de los siguientes proyectos:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "%(cs)s,financiado por %(fb)s" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "Audiolibros forman parte del proyecto %(cs)s financiado por %(fb)s." - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "Audiolibros forman parte del proyecto %(cs)s." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -#, fuzzy -msgid "Recent audiobooks" -msgstr "Los últimos audiolibros en formato MP3 " - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -#, fuzzy -msgid "Recent publications" -msgstr "pasa al dominio público" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see recent audiobooks\n" -" and recent DAISY files." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "Buscar" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "¿Te has referido a...?" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "Resultados por título" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "Resultados por autor" - -#: templates/catalogue/search_multiple_hits.html:80 -#, fuzzy -msgid "Results by translators" -msgstr "Resultados por autor" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "Resultados en el texto" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "Otros resultados" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "" -"¡Lo siento! El criterio de la búsqueda no corresponde a ningún recurso." - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"Search engine supports following criteria: title, author, theme/topic, " -"epoch, kind and genre.\n" -"\t\tAs for now we do not support full text search." -msgstr "" -"El buscador admite los siguientes criterios: título, autor, tema, época, " -"género y subgénero.\n" -"\t\tHasta ahora no se admite la búsqueda de texto completo. " - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "" -"¡Lo siento! La consulta de búsqueda tiene que consistir de dos caracteres " -"como mínimo." - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "en Lektury.Gazeta.pl" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "en Wikipedia" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr "Descarga un PDF personalisado" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "¡Ponlo en el estante!" - -#~ msgid "Create new shelf" -#~ msgstr "Crear estante nuevo" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "No tienes estante. Si quieres, puedes hacer uno aquí." - -#~ msgid "Put on the shelf!" -#~ msgstr "¡Ponlo en el estante! " - -#~ msgid "Shelves containing fragment" -#~ msgstr "Los estantes que contienen este fragmento" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "No tienes estante. Si quieres, puedes hacer uno aquí." - -#~ msgid "Save all shelves" -#~ msgstr "Guarda todos los estantes" - -#~ msgid "Your shelves with books" -#~ msgstr "Tu estanetría con libros" - -#~ msgid "remove" -#~ msgstr "borre" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "No tienes estante. Si quieres, puedes hacer uno aquí." - -#~ msgid "Create shelf" -#~ msgstr "Crear estante" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "Introducir un valor válido de JSON. Error: %s" - -#~ msgid "A4" -#~ msgstr "A4" - -#~ msgid "A5" -#~ msgstr "A5" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "Opciones de personalización para PDF incorrectas" - -#, fuzzy -#~ msgid "Bad method" -#~ msgstr "Método incorrecto" - -#~ msgid "title, author, theme/topic, epoch, kind, genre" -#~ msgstr "título, autor, tema/motivo, época, género, subgénero" - -#~ msgid "main page" -#~ msgstr "página principal" - -#~ msgid "Show tag on main page" -#~ msgstr "Mostrar tag en la página principal" - -#~ msgid "year of death" -#~ msgstr "año de muerte" - -#~ msgid "short HTML" -#~ msgstr "HTML corto" - -#~ msgid "HTML file" -#~ msgstr "archivo HTML" - -#~ msgid "PDF file" -#~ msgstr "archivo PDF" - -#~ msgid "EPUB file" -#~ msgstr "archivo EPUB" - -#~ msgid "ODT file" -#~ msgstr "archivo ODT" - -#~ msgid "TXT file" -#~ msgstr "archivo TXT" - -#~ msgid "MP3 file" -#~ msgstr "archivo MP3" - -#~ msgid "OGG file" -#~ msgstr "archivo OGG" - -#~ msgid "translator" -#~ msgstr "traductor" - -#~ msgid "year of translator's death" -#~ msgstr "año de la muerte del traductor" - -#~ msgid "book stub" -#~ msgstr "vista previa del libro" - -#, fuzzy -#~ msgid "

To maintain your shelves you need to be logged in.

" -#~ msgstr "

Para organizar tus estantes tienes que ingresar.

" - -#~ msgid "

Shelves were sucessfully saved.

" -#~ msgstr "

Estantes han sido guardados.

" - -#~ msgid "Book was successfully removed from the shelf" -#~ msgstr "El libro ha sido eliminado del estante." - -#~ msgid "

Shelf %s was successfully created

" -#~ msgstr "

Estante %s ha sido creado

" - -#~ msgid "

Shelf %s was successfully removed

" -#~ msgstr "

Estante %s ha sido eliminado

" - -#~ msgid "content type" -#~ msgstr "tipo de contenido" - -#~ msgid "object id" -#~ msgstr "id de objeto" diff --git a/apps/catalogue/locale/fr/LC_MESSAGES/django.mo b/apps/catalogue/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index 3b0d2d304..000000000 Binary files a/apps/catalogue/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/fr/LC_MESSAGES/django.po b/apps/catalogue/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index 7274d84eb..000000000 --- a/apps/catalogue/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,868 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2013-04-09 10:38+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "Fournissez un XML, s'il vous plaît." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "Ne montre pas d'annotations" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "N'affiche pas de thèmes" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "N'utilise pas notre caractère usuel" - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "Interligne" - -#: forms.py:53 -msgid "Normal leading" -msgstr "Interligne normal" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "Interligne et demi" - -#: forms.py:55 -msgid "Double leading" -msgstr "Interligne double" - -#: forms.py:57 -msgid "Font size" -msgstr "Taille des caractères" - -#: forms.py:58 -msgid "Default" -msgstr "Implicite" - -#: forms.py:59 -msgid "Big" -msgstr "Grand(e)(s)" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -# msgid "Today is %(month)s, %(day)s." -# msgstr "Aujourd'hui nous sommes le" -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"Un erreur a eu lieu : %(exception)s\n" -"\n" -"%(tb)s" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "Livre importé avec succès" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "Erreur pendant l'importation du fichier: %r" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "Téléchargez un PDF personnalisé" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "Téléchargez" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "titre" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "critère de tri" - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "ébauche" - -#: models/book.py:33 -msgid "language code" -msgstr "code de langue" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "description" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "date de création" - -#: models/book.py:38 -msgid "parent number" -msgstr "nombre de parent" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr "information supplémentaire" - -#: models/book.py:44 -msgid "cover" -msgstr "couverture" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "livre" - -#: models/book.py:67 -msgid "books" -msgstr "livres" - -#: models/book.py:244 -#, python-format -msgid "Book \"%s\" does not exist." -msgstr "Livre \"%s\" n'existe pas." - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "Livre %s existe déjà" - -#: models/book.py:599 models/bookmedia.py:23 -#, python-format -msgid "%s file" -msgstr "fichier %s" - -#: models/bookmedia.py:26 -msgid "type" -msgstr "type" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "nom" - -#: models/bookmedia.py:28 -msgid "file" -msgstr "fichier" - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "book media" - -#: models/collection.py:16 -#, fuzzy -msgid "book slugs" -msgstr "ébauches des livres" - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "type" - -#: models/collection.py:22 -msgid "collection" -msgstr "collection" - -#: models/collection.py:23 -msgid "collections" -msgstr "collections" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "extrait" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "extraits" - -#: models/tag.py:16 -msgid "author" -msgstr "auteur" - -#: models/tag.py:17 -msgid "epoch" -msgstr "époque" - -#: models/tag.py:19 -msgid "genre" -msgstr "genre" - -#: models/tag.py:20 -msgid "theme" -msgstr "thème" - -#: models/tag.py:21 -msgid "set" -msgstr "série" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "catégorie" - -#: models/tag.py:40 -msgid "book count" -msgstr "nombre des livres" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "tag" - -#: models/tag.py:66 -msgid "tags" -msgstr "tags" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "Liste des tous les livres audio" - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "Les plus nouveaux livres audio MP3" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "Les plus nouveaux livres audio Ogg Vorbis" - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -msgstr "" -"Audiothèque des lectures scolaires de la Fondation Pologne Moderne.\n" -"Vous pouvez l'utiliser gratuitement et sans limites. \n" -"Les livres audio sont lus par les acteurs connus, comme par exemple: Danuta " -"Stenka et Jan Peszek." - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "Voir aussi" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "Thème" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "dans l'oeuvre" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "Cet oeuvre est publié sous la licence" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" Creative " -"Commons Attribution-ShareAlike 3.0\n" -" license." -msgstr "" -"Cet ouvrage n'est pas protégé par le droit d'auteur et appartiennent au\n" -"domaine public; c'est-à-dire qu'il peut être publié et divulgué librement.\n" -"Si l'ouvrage est accompagné des matériaux supplémentaires (annotations, " -"motifs littéraires, etc.),\n" -"ces derniers sont donc distribués sous la licence:\n" -"Paternité " -"- Partage à l'Identique 3.0 non transposé." - -#: templates/catalogue/book_info.html:20 -#, fuzzy -msgid "Resource prepared based on:" -msgstr "Préparation du texte basée sur:" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "Les éditions et annotations par:" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "Liste des tous les ouvrages" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "Table des matières" - -#: templates/catalogue/book_list.html:30 -msgid "↑ top ↑" -msgstr "↑ top ↑" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "Époque" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "Type" - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "Genre" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "Lire en ligne" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "pour imprimer" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "pour un lecteur des livres numeriques" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "pour Kindle" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr "pour l’utilisation avancée" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "Écoutez" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "Wolne Lektury (Lectures Libres)" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "Table des matières" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "Thèmes" - -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "Note d'éditeur" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "Infobox" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "Site du livre" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "pour un lecteur" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "Téléchargez tous les livres audio pour ce livre" - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "Motifs et thèmes" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "Voir" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "Source" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "du livre" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "Fichier source XML" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "Livre sur" - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr "Plateforme d'éditeur" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "Description du livre sur Lektury.Gazeta.pl" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "Description du livre sur Wikipédia" - -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "Mixez ce livre" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "Catalogue" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "Téléchargez le catalogue au format PDF" - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "Auteurs" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "Types" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "Genres" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "Époques" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "Thèmes et sujets" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -#, fuzzy -msgid "Collections" -msgstr "collections" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "Liste des tous les livres audio DAISY" - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "Le plus nouveaux livres audio DAISY" - -#: templates/catalogue/daisy_list.html:15 -msgid "" -"System DAISY to uznany na całym świecie format udostępniania książek\n" -"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -"ograniczeń." -msgstr "" -"DAISY est un système pour rendre les livres accessibles, apprécié autour du " -"monde, \n" -"approprié à des non voyants et à des malvoyants et à des personnes \n" -"qui ont des difficultés à lire. Vous pouvez l'utiliser gratuitement et sans " -"limites." - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "Les critères sont ambigus. Choisissez parmi les options ci-dessous:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "Montrer l'extrait" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "Cacher l'extrait" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "Voir catégorie entière" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please wait…" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "Tous les livres" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "Livres audio" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "DAISY" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "Ouvrage sous la licence" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "Basé sur" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "Détails" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "Auteur" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "Autres ressources" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "Source d'image" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "L'image sur la Plateforme d'éditeur" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "Voir source XML" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Les thèmes de l'oeuvre" - -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "Liste de tous les images" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "Téléchargez comme" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Artiste" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "Metteur en scène" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "Livres audios ont été préparés comme une part des projets:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "%(cs)s, sponsorisé par %(fb)s" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" -"Livres audios ont été préparés comme une part du projet %(cs)s sponsorisé " -"par %(fb)s." - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "Livres audios ont été préparés comme une part du projet %(cs)s." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -#, fuzzy -msgid "Recent audiobooks" -msgstr "Les plus nouveaux livres audio MP3" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -#, fuzzy -msgid "Recent publications" -msgstr "entre dans le domaine public" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see recent audiobooks\n" -" and recent DAISY files." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "Rechercher" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "Est-ce que vous cherchez" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "Résultats par le titre" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "Résultats par l'auteur" - -#: templates/catalogue/search_multiple_hits.html:80 -#, fuzzy -msgid "Results by translators" -msgstr "traducteur" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "Résultats dans le texte" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "Autres résultats" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "" -"Nous sommes désolés, aucune ressource ne répond aux critères de recherche." - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"Search engine supports following criteria: title, author, theme/topic, " -"epoch, kind and genre.\n" -"\t\tAs for now we do not support full text search." -msgstr "" -"Le moteur de recherche permet de chercher selon le titre, auteur, sujet/" -"thème, époque, type et genre.\n" -"\t\tPour le moment nous n'assurons pas la recherche en plein texte." - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "" -"Nous sommes désolés, pour effectuer la recherche il faut entrer au moins " -"deux caractères." - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "sur Lektury.Gazeta.pl" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "sur Wikipédia" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr "Téléchargez un PDF pérsonnalisé" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Mettre un livre sur l'étagère!" - -#~ msgid "Create new shelf" -#~ msgstr "Créez une nouvelle étagère" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une au-dessous, si " -#~ "vous voulez." - -#~ msgid "Put on the shelf!" -#~ msgstr "Mettre sur l'étagère!" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Étagères qui contiennent l'extrait" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une au-dessous, si " -#~ "vous voulez." - -#~ msgid "Save all shelves" -#~ msgstr "Enregistrer toutes les étagères" - -#~ msgid "Your shelves with books" -#~ msgstr "Vos étagères avec les livres" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une en-dessus, si " -#~ "vous voulez." - -#~ msgid "Create shelf" -#~ msgstr "Créez une étagère" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "Entrer une valeur JSON valide. Erreur: %s." - -#~ msgid "A4" -#~ msgstr "A4" - -#~ msgid "A5" -#~ msgstr "A5" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "Options de personnalisation incorrectes pour PDF" - -#~ msgid "Bad method" -#~ msgstr "Mauvaise méthode" - -#~ msgid "title, author, theme/topic, epoch, kind, genre" -#~ msgstr "titre, auteur, thème/sujet, époque, type, genre" - -#~ msgid "main page" -#~ msgstr "page d'accueil" - -#~ msgid "Show tag on main page" -#~ msgstr "Montrer le tag au page d'accueil" - -#~ msgid "year of death" -#~ msgstr "année de la mort" - -#~ msgid "short HTML" -#~ msgstr "HTML court" - -#~ msgid "HTML file" -#~ msgstr "fichier HTML" - -#~ msgid "PDF file" -#~ msgstr "fichier PDF" - -#~ msgid "ODT file" -#~ msgstr "fichier ODT" - -#~ msgid "TXT file" -#~ msgstr "fichier TXT" - -#~ msgid "MP3 file" -#~ msgstr "fichier MP3" - -#~ msgid "OGG file" -#~ msgstr "fichier OGG" - -#~ msgid "year of translator's death" -#~ msgstr "année de la mort du traducteur" - -#~ msgid "book stub" -#~ msgstr "ébauche du livre" - -#~ msgid "

To maintain your shelves you need to be logged in.

" -#~ msgstr "

Connectez-vous pour gérer vos étagères.

" - -#~ msgid "

Shelves were sucessfully saved.

" -#~ msgstr "

Les étagères %sont été enregistrées

" - -#~ msgid "Book was successfully removed from the shelf" -#~ msgstr "Le livre a été supprimé de l'étagère" - -#~ msgid "

Shelf %s was successfully created

" -#~ msgstr "

L'étagère %sa été créée

" - -#~ msgid "

Shelf %s was successfully removed

" -#~ msgstr "

L'étagère %sa été supprimée

" - -#~ msgid "content type" -#~ msgstr "type du contenu" - -#~ msgid "object id" -#~ msgstr "ID de l'objet" diff --git a/apps/catalogue/locale/it/LC_MESSAGES/django.mo b/apps/catalogue/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index a164e91b0..000000000 Binary files a/apps/catalogue/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/it/LC_MESSAGES/django.po b/apps/catalogue/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index c5eabd259..000000000 --- a/apps/catalogue/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,793 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2013-04-09 10:39+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "Si prega di fornire un XML." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "Non mostrare le note" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "Non visualizzare i temi" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "Non utilizzare il nostro font personalizzato" - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "Interlinea" - -#: forms.py:53 -msgid "Normal leading" -msgstr "Interlinea normale" - -#: forms.py:54 -msgid "One and a half leading" -msgstr " Interlinea 1,5" - -#: forms.py:55 -msgid "Double leading" -msgstr "Interlinea doppia" - -#: forms.py:57 -msgid "Font size" -msgstr "Grandezza del carattere" - -#: forms.py:58 -msgid "Default" -msgstr "Predefinito" - -#: forms.py:59 -msgid "Big" -msgstr "Grande" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"Si e verificato un errore: %(exception)s \n" -"\n" -"%(tb)s" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "Libro scaricato con successo" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "Errore dell'importazione del file: %r" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "Scarica PDF personalizzato" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "Scarica" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "titolo" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "chiave di ordinamento" - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "slug" - -#: models/book.py:33 -msgid "language code" -msgstr "codice della lingua" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "descrizione" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "data di creazione" - -#: models/book.py:38 -msgid "parent number" -msgstr "numero del genitore" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr " ulteriori informazioni" - -#: models/book.py:44 -msgid "cover" -msgstr "copertina" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "libro" - -#: models/book.py:67 -msgid "books" -msgstr "Libri" - -#: models/book.py:244 -#, python-format -msgid "Book \"%s\" does not exist." -msgstr "Il libro \"%s\" non esiste." - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "Il libro %s esiste già" - -#: models/book.py:599 models/bookmedia.py:23 -#, python-format -msgid "%s file" -msgstr "i %s di file" - -#: models/bookmedia.py:26 -msgid "type" -msgstr "tipo" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "nome" - -#: models/bookmedia.py:28 -msgid "file" -msgstr "file" - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "book media" - -#: models/collection.py:16 -msgid "book slugs" -msgstr " slug del libro " - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "categoria" - -#: models/collection.py:22 -msgid "collection" -msgstr "raccolta" - -#: models/collection.py:23 -msgid "collections" -msgstr " raccolte" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "Frammento" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "Frammenti" - -#: models/tag.py:16 -msgid "author" -msgstr "autore" - -#: models/tag.py:17 -msgid "epoch" -msgstr "epoca" - -#: models/tag.py:19 -msgid "genre" -msgstr "genere" - -#: models/tag.py:20 -msgid "theme" -msgstr "tema" - -#: models/tag.py:21 -msgid "set" -msgstr "raccolta" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "categoria" - -#: models/tag.py:40 -msgid "book count" -msgstr "conteggio dei libri" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "tag" - -#: models/tag.py:66 -msgid "tags" -msgstr "i tag" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "Elenco di tutti gli audiolibri " - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "Ultimi audiolibri MP3" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "Ultimi audiolibri Ogg Vorbis" - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -msgstr "" - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "Vedi anche" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "tema" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "in corso" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "Questa opera è pubblicata su licenza:" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" Creative " -"Commons Attribution-ShareAlike 3.0\n" -" license." -msgstr "" -"Questa opera non è sotto il diritto d'autore e fa parte del\n" -"pubblico dominio, il che significa che è possibile pubblicarla \n" -"e distribuirla liberamente. Se un'opera è completata con i materiali " -"aggiuntivi \n" -"(le annotazioni, i motivi letterari ecc.) che sono protette dal diritto " -"d'autore, quei\n" -"materiali aggiuntivi sono disponibili secondo la \n" -" Creative " -"Commons Attribution-ShareAlike 3.0\n" -"licenza." - -#: templates/catalogue/book_info.html:20 -#, fuzzy -msgid "Resource prepared based on:" -msgstr "Il testo preparato e basato su:" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "Curato ed elaborato da:" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "Elenco di tutte le opere" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "Indice" - -#: templates/catalogue/book_list.html:30 -msgid "↑ top ↑" -msgstr "" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "Epoca" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "Categoria" - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "Genere" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "Leggi online" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr "" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "Ascolta" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "Indice" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "Temi" - -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "Modifica. nota" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "Infobox" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "Pagina del libro" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "Scarica tutti gli audiolibri per questo libro." - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "Motivi e temi" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "Vedi" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "Fonte" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "del libro" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "File di fonte XML" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "Libro su" - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr " Piattaforma del editore" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "Descrizione del libro su Lektury.Gazeta.pl" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "Descrizione del libro su Wikipedia" - -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "Combina questo libro" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "Catalogo" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "Scarica il catalogo nel formato PDF." - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "Autori" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "Categorie" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "Generi" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "Epoche" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "temi e argomenti" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -#, fuzzy -msgid "Collections" -msgstr " raccolte" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "Elenco di tutti i file DAISY " - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "Ultimi audiolibri DAISY" - -#: templates/catalogue/daisy_list.html:15 -msgid "" -"System DAISY to uznany na całym świecie format udostępniania książek\n" -"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -"ograniczeń." -msgstr "" - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "" -"Questi criteri sono ambigui. Si prega di selezionare una delle seguenti " -"opzioni:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "Espandi il frammento" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "Nascondi il frammento" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "Vedi tutta la categoria" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please wait…" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "Tutti i libri" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "Audiolibri" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "DAISY" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "L'opera è su licenza di" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "Basato su" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "Dettagli" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "Autore" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "Altre fonti" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "Fonte dell'immagine" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "Immagine sulla piattaforma del editore" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "Visualizza la fonte XML" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Temi dell'opera" - -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "Elenco di tutte le immagini" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "Scarica come" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Artista" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "Direttore" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "Gli audilobri sono stati preparati come parte dei seguenti progetti:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "%(cs)s, creato da %(fb)s // %(cs)s, finanziato da %(fb)s" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" -"Gli audiollibri sono stati preparati come parte del progetto %(cs)s, " -"finanziato da %(fb)s" - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "Gli audiolibri sono stati preparati come parte di progetto %(cs)s." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -#, fuzzy -msgid "Recent audiobooks" -msgstr "Ultimi audiolibri MP3" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -msgid "Recent publications" -msgstr "" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see recent audiobooks\n" -" and recent DAISY files." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "Cerca" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "Volevi dire" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "Risultati per titolo" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "Risultati per autore" - -#: templates/catalogue/search_multiple_hits.html:80 -msgid "Results by translators" -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "Risultati nel testo" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "Altri risultati" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "Siamo spiacenti!I criteri di ricerca non corrispondono alle risorse." - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"Search engine supports following criteria: title, author, theme/topic, " -"epoch, kind and genre.\n" -"\t\tAs for now we do not support full text search." -msgstr "" -"Il motore di ricerca supporta i seguenti criteri: titolo, autore, tema, " -"epoca, genere.\n" -"\t\t Per il momento non supportiamo i criteri del testo intero." - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "" -"Siamo spiacenti! La ricerca viene effettuata su parole con almeno due " -"caratteri." - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "su Lektury.Gazeta.pl" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "su Wikipedia" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr " Scarica un PDF personalizzato" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Metti il libro sullo scaffale" - -#~ msgid "Create new shelf" -#~ msgstr "Crea un nuovo scaffale" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "Non hai nessuno scaffale. se vuoi puoi crearne uno, qui sotto." - -#~ msgid "Put on the shelf!" -#~ msgstr "Metti sullo scaffale!" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Gli scaffali che contengono il frammento" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "Non hai nessuno scaffale. Se vuoi puoi crearne uno, qui sotto." - -#~ msgid "Save all shelves" -#~ msgstr "Salva tutti gli scaffali" - -#~ msgid "Your shelves with books" -#~ msgstr "I tuoi scaffali con i libri" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "Non hai nessuno scaffale. se vuoi puoi crearne uno, qui sotto." - -#~ msgid "Create shelf" -#~ msgstr "Crea uno scaffale" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "Inserire un valore valido JSON. Errore: %s" - -#~ msgid "A4" -#~ msgstr "A4" - -#~ msgid "A5" -#~ msgstr "A5" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "Opzioni di personalizzazione non corrette per PDF" - -#~ msgid "Bad method" -#~ msgstr "Metodo non corretto" diff --git a/apps/catalogue/locale/jp/LC_MESSAGES/django.mo b/apps/catalogue/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index 86b539e6b..000000000 Binary files a/apps/catalogue/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/jp/LC_MESSAGES/django.po b/apps/catalogue/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index 8de2d5621..000000000 --- a/apps/catalogue/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,721 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "" - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "" - -#: forms.py:53 -msgid "Normal leading" -msgstr "" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "" - -#: forms.py:55 -msgid "Double leading" -msgstr "" - -#: forms.py:57 -msgid "Font size" -msgstr "" - -#: forms.py:58 -msgid "Default" -msgstr "" - -#: forms.py:59 -msgid "Big" -msgstr "" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "" - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "" - -#: models/book.py:33 -msgid "language code" -msgstr "" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "" - -#: models/book.py:38 -msgid "parent number" -msgstr "" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr "" - -#: models/book.py:44 -msgid "cover" -msgstr "" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "" - -#: models/book.py:67 -msgid "books" -msgstr "" - -#: models/book.py:244 -#, python-format -msgid "Book \"%s\" does not exist." -msgstr "" - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "" - -#: models/book.py:599 models/bookmedia.py:23 -#, python-format -msgid "%s file" -msgstr "" - -#: models/bookmedia.py:26 -msgid "type" -msgstr "" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "" - -#: models/bookmedia.py:28 -msgid "file" -msgstr "" - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "" - -#: models/collection.py:16 -msgid "book slugs" -msgstr "" - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "" - -#: models/collection.py:22 -msgid "collection" -msgstr "" - -#: models/collection.py:23 -msgid "collections" -msgstr "" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "" - -#: models/tag.py:16 -msgid "author" -msgstr "" - -#: models/tag.py:17 -msgid "epoch" -msgstr "" - -#: models/tag.py:19 -msgid "genre" -msgstr "" - -#: models/tag.py:20 -msgid "theme" -msgstr "" - -#: models/tag.py:21 -msgid "set" -msgstr "" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "" - -#: models/tag.py:40 -msgid "book count" -msgstr "" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "" - -#: models/tag.py:66 -msgid "tags" -msgstr "" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "" - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "" - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -msgstr "" - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" Creative " -"Commons Attribution-ShareAlike 3.0\n" -" license." -msgstr "" - -#: templates/catalogue/book_info.html:20 -msgid "Resource prepared based on:" -msgstr "" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "" - -#: templates/catalogue/book_list.html:30 -msgid "↑ top ↑" -msgstr "" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "" - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr "" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "" - -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "" - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "" - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr "" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "" - -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "" - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -msgid "Collections" -msgstr "" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "" - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "" - -#: templates/catalogue/daisy_list.html:15 -msgid "" -"System DAISY to uznany na całym świecie format udostępniania książek\n" -"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -"ograniczeń." -msgstr "" - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please wait…" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "" - -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "" - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -msgid "Recent audiobooks" -msgstr "" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -msgid "Recent publications" -msgstr "" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see recent audiobooks\n" -" and recent DAISY files." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:80 -msgid "Results by translators" -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "" - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"Search engine supports following criteria: title, author, theme/topic, " -"epoch, kind and genre.\n" -"\t\tAs for now we do not support full text search." -msgstr "" - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "" - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr "" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" diff --git a/apps/catalogue/locale/lt/LC_MESSAGES/django.mo b/apps/catalogue/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index 04cdc6613..000000000 Binary files a/apps/catalogue/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/lt/LC_MESSAGES/django.po b/apps/catalogue/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index 0889888c4..000000000 --- a/apps/catalogue/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,879 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2013-04-09 10:40+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "Prašome pateikti XML." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "Nerodyti išnašų" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "Nerodyti motyvų" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "Nenaudoti derinčių šriftų" - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "eilučių intervalas" - -#: forms.py:53 -msgid "Normal leading" -msgstr "Normalus intervalas" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "Pusantro intervalo" - -#: forms.py:55 -msgid "Double leading" -msgstr "Dvigubasis intervalas" - -#: forms.py:57 -msgid "Font size" -msgstr "Šrifto dydis" - -#: forms.py:58 -msgid "Default" -msgstr "Numatytasis " - -#: forms.py:59 -msgid "Big" -msgstr "Didelis" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"Įvyko klaida: %(exception)s\n" -"\n" -"%(tb)s" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "Knyga buvo sėkmingai importuota" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "Importuojant failą įvyko klaida: %r" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "Sukurti ir atsisiųsti PDF failą" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "Atsisiųsti" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "pavadinimas" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "rikiavimo raktas" - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "slug" - -#: models/book.py:33 -msgid "language code" -msgstr "kalbos kodas" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "aprašymas" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "sukūrimo data" - -# sprawdz -#: models/book.py:38 -msgid "parent number" -msgstr "pirminis numeris" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr "papildomos informacijos" - -#: models/book.py:44 -msgid "cover" -msgstr "viršelis" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "knyga" - -#: models/book.py:67 -msgid "books" -msgstr "knygos" - -#: models/book.py:244 -#, python-format -msgid "Book \"%s\" does not exist." -msgstr "Knyga \"%s\" neegzistuoja." - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "Knyga %s jau egzistuoja" - -#: models/book.py:599 models/bookmedia.py:23 -#, python-format -msgid "%s file" -msgstr "%s failas " - -#: models/bookmedia.py:26 -msgid "type" -msgstr "tipas" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "pavadinimas" - -#: models/bookmedia.py:28 -msgid "file" -msgstr "failas " - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "book media" - -#: models/collection.py:16 -msgid "book slugs" -msgstr "book slugs" - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "rūšis" - -#: models/collection.py:22 -msgid "collection" -msgstr "kolekcija" - -#: models/collection.py:23 -msgid "collections" -msgstr "kolekcijos" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "fragmentas" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "fragmentai" - -#: models/tag.py:16 -msgid "author" -msgstr "autorius" - -#: models/tag.py:17 -msgid "epoch" -msgstr "epocha" - -#: models/tag.py:19 -msgid "genre" -msgstr "žanras" - -#: models/tag.py:20 -msgid "theme" -msgstr "motyvas" - -#: models/tag.py:21 -msgid "set" -msgstr "rinkinys" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "kategorija " - -#: models/tag.py:40 -msgid "book count" -msgstr "knygų skaičius" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "žymė" - -#: models/tag.py:66 -msgid "tags" -msgstr "žymės" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "Visų audio knygų sąrašas" - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "Naujosios MP3 audio knygos" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "Naujosios Ogg Vorbis audio knygos" - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -msgstr "" -"Fondo Šiuolaikinė Lenkija privalomos literatūros audio knygų rinkinys.\n" -"Galite juo naudotis nemokamai ir be apribojimų.\n" -"Audio knygos yra garsių aktorių įrašomos, tokių kaip Danuta Stenka ir Jan " -"Peszek." - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "Žiūrėti daugiau" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "Motyvas" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "kūrinyje" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "Šis kūrinys yra licencijuotas pagal:" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" Creative " -"Commons Attribution-ShareAlike 3.0\n" -" license." -msgstr "" -"Šio visuomenės srities kūrinio autorių teisė neapima,\n" -"tai reiškia, kad gali būti laisvai naudojamas bei\n" -"platinamas. Jei su šiuo kūriniu yra pateikiamos bet kokios\n" -"papildomos autorinių teisių saugomos medžiagos (kaip pastabos, motyvai ir t." -"t.), šios\n" -"medžiagos yra licencijuotos pagal\n" -"Creative Commons " -"Attribution-ShareAlike 3.0\n" -"licenciją." - -#: templates/catalogue/book_info.html:20 -#, fuzzy -msgid "Resource prepared based on:" -msgstr "Tekstas paruoštas remiantis:" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "Redagavimas ir pastabos:" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "Visų kūrinių sąrašas" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "Turinys" - -#: templates/catalogue/book_list.html:30 -msgid "↑ top ↑" -msgstr "↑į viršų↑" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "Epocha" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "Rūšis " - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "Žanras" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "Skaityti online" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "Spausdinti" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "e-knygos skaitytojui" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "skaityklei Kindle" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr " išplėstiniam naudojimui" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "Klausytis" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "Turinys" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "Motyvai" - -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "Redaguoti pastabą" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "Infobox" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "Knygos puslapis" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "skaitytojui" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "Atsisiųsti visas šios knygos audio knygas" - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "Motyvai ir temos" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "Žiūrėti" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "Knygos" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "šaltinis" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "Šaltinio XML failas" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "Knyga " - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr "Redaktoriaus Platformoje" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "Knygos aprašymas Lektury.Gazeta.pl interneto svetainėje" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "Knygos aprašymas Vikipedijoje" - -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "Maišyti šią knygą" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "Katalogas" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "Atsisiųsti katalogą PDF formatu." - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "Autoriai" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "Rūšys" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "Žanrai" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "Epochos" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "Motyvai ir temos" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -#, fuzzy -msgid "Collections" -msgstr "kolekcijos" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "Visų DAISY failų sąrašas" - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "Naujosios DAISY audio knygos" - -#: templates/catalogue/daisy_list.html:15 -msgid "" -"System DAISY to uznany na całym świecie format udostępniania książek\n" -"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -"ograniczeń." -msgstr "" -"DAISY sistema yra visame pasaulyje pripažintas knygų bendrinimo formatas\n" -"pritaikytas silpnesnio regėjimo žmonėms, akliesiems bei kitiems\n" -"skaitymo problemų turintiems žmonėms.Galite jomis naudotis nemokamai ir be " -"apribojimų." - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "" -"Paieškos kriterijai nėra tikslūs. Prašome išrinkti vieną iš žemiau nurodytų " -"galimybių:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "Išplėsti fragmentą" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "Slėpti fragmentą" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "Žiūrėti visą kategoriją" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please wait…" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "Visos knygos" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "Audio knygos" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "DAISY " - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "Kūrinys yra licencijuotas pagal:" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "Remiantis" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "Detalės " - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "Autorius" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "Kiti ištekliai" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "Paveikslėlio šaltinis" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "Paveikslėlis Redaktoriaus Platformoje" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "Žiūrėti XML šaltinį" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Kūrinio motyvai" - -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "Visų vaizdų sąrašas" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "Atsisiųsti kaip" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Artistas" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "Režisierus" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "Audio knygos buvo paruoštos kaip projektų dalis:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "\"%(cs)s, %(fb)s finansuotų" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" -"Audio knygos buvo paruoštos kaip dalis %(fb)s. finansuoto %(cs)s projekto." - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "Audio knygos buvo paruoštos kaip dalis %(cs)s projekto." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -#, fuzzy -msgid "Recent audiobooks" -msgstr "Naujosios MP3 audio knygos" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -#, fuzzy -msgid "Recent publications" -msgstr "keliauja į viešą tinklapį " - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see recent audiobooks\n" -" and recent DAISY files." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "Ieškoti" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "Gal turėjote omenyje" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "Rezultatai pagal pavadinimą" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "Rezultatai pagal autorius" - -#: templates/catalogue/search_multiple_hits.html:80 -#, fuzzy -msgid "Results by translators" -msgstr "Rezultatai pagal autorius" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "Rezultatai tekste" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "Kiti rezultatai" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "Atsiprašome! Rezultatų, atitinkančių paieškos kriterijus nėra." - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"Search engine supports following criteria: title, author, theme/topic, " -"epoch, kind and genre.\n" -"\t\tAs for now we do not support full text search." -msgstr "" -"Paieškos sistema palaiko nurodytus kriterijus: pavadinimas, autorius, tema, " -"epocha, rūšis ir žanras.\n" -"\t\t Kol kas negalima atlikti viso teksto paieškos." - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "" -"Atsiprašome! Paieškos užklausa turi susidėti mažiausiai iš dviejų simbolių." - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "Lektury.Gazeta.pl interneto svetainėje" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "Vikipedijoje" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr "Sukurti ir atsisiųsti PDF failą" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Padėkite knygą į lentyną!" - -#~ msgid "Create new shelf" -#~ msgstr "Sukurti naują lentyną" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naują lentyną " -#~ "žemiau." - -#~ msgid "Put on the shelf!" -#~ msgstr "Padėkite į lentyną!" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Lentynos turinčios fragmentus " - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naują lentyną " -#~ "žemiau." - -#~ msgid "Save all shelves" -#~ msgstr "Įrašyti visas lentynas" - -#~ msgid "Your shelves with books" -#~ msgstr "Tavo lentynos su knygomis" - -#~ msgid "remove" -#~ msgstr "pašalinti" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naują lentyną " -#~ "žemiau." - -#~ msgid "Create shelf" -#~ msgstr "Sukurti lentyną" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "Įvesti atitinkamą vertybę JSON. Klaida: %s" - -#~ msgid "A4" -#~ msgstr "A4" - -#~ msgid "A5" -#~ msgstr "A5" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "Neteisingi PDF tinkinimo pasirinkimai" - -#~ msgid "Bad method" -#~ msgstr "Blogas metodas" - -#~ msgid "title, author, theme/topic, epoch, kind, genre" -#~ msgstr "Pavadinimas , autorius, motyvas /tema, gadynė, \trūšis, sortas" - -#~ msgid "main page" -#~ msgstr "pagrindinis puslapis" - -#~ msgid "Show tag on main page" -#~ msgstr "Parodyk tagą pagrindinemę puslapyję" - -#~ msgid "year of death" -#~ msgstr "mirimo metai" - -#~ msgid "short HTML" -#~ msgstr "trumpas HTML" - -#~ msgid "HTML file" -#~ msgstr "HTML failas" - -#~ msgid "PDF file" -#~ msgstr "PDF failas" - -#~ msgid "EPUB file" -#~ msgstr "EPUB failas" - -#~ msgid "ODT file" -#~ msgstr "ODT failas" - -#~ msgid "TXT file" -#~ msgstr "TXT failsa" - -#~ msgid "MP3 file" -#~ msgstr "MP3 failas" - -#~ msgid "OGG file" -#~ msgstr "OGG failas" - -#~ msgid "translator" -#~ msgstr "vertėjas" - -#~ msgid "year of translator's death" -#~ msgstr "vertėjo mirimo metai" - -#~ msgid "book stub" -#~ msgstr "knygos paskelbimas" - -#~ msgid "

To maintain your shelves you need to be logged in.

" -#~ msgstr "

Kad valdyti savo lentynom, turi prisijungti.

" - -#~ msgid "

Shelves were sucessfully saved.

" -#~ msgstr "

Lentynos liko užrašytos.

" - -#~ msgid "Book was successfully removed from the shelf" -#~ msgstr "pašalinta" - -#~ msgid "

Shelf %s was successfully created

" -#~ msgstr "

Lentyna %s sukurta

" - -#~ msgid "

Shelf %s was successfully removed

" -#~ msgstr "

Lentyna %spašalinta

" - -#~ msgid "Today is %(month)s, %(day)s." -#~ msgstr "Å iandien yra %(month)s, %(day)s." - -#~ msgid "content type" -#~ msgstr "turinio rÅ«Å¡is" - -#~ msgid "object id" -#~ msgstr "id obiektas" diff --git a/apps/catalogue/locale/pl/LC_MESSAGES/django.mo b/apps/catalogue/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 739f69b2d..000000000 Binary files a/apps/catalogue/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/pl/LC_MESSAGES/django.po b/apps/catalogue/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index c1a8aac2b..000000000 --- a/apps/catalogue/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,948 +0,0 @@ -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -msgid "" -msgstr "" -"Project-Id-Version: WolneLektury\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-10-16 13:54+0200\n" -"PO-Revision-Date: 2014-10-16 13:55+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: Fundacja Nowoczesna Polska \n" -"Language: pl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" -"X-Generator: Poedit 1.5.4\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" -"Creative Commons Uznanie autorstwa – Na tych samych warunkach 3.0 Unported" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "Proszę podać XML." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "Bez przypisów" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "Bez motywów" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "Bez naszego kroju pisma" - -#: forms.py:49 -msgid "Without cover" -msgstr "Bez okładki" - -#: forms.py:52 -msgid "Leading" -msgstr "Interlinia" - -#: forms.py:53 -msgid "Normal leading" -msgstr "Zwykła interlinia" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "Powiększona interlinia" - -#: forms.py:55 -msgid "Double leading" -msgstr "Podwójna interlinia" - -#: forms.py:57 -msgid "Font size" -msgstr "Rozmiar tekstu" - -#: forms.py:58 -msgid "Default" -msgstr "Domyślnie" - -#: forms.py:59 -msgid "Big" -msgstr "Duży" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "Kolejka jest pełna. Proszę spróbować ponownie później." - -#: models/book.py:43 models/collection.py:13 -msgid "title" -msgstr "tytuł" - -#: models/book.py:44 models/tag.py:35 -msgid "sort key" -msgstr "klucz sortowania" - -#: models/book.py:45 -#, fuzzy -msgid "sort key by author" -msgstr "Znalezieni autorzy" - -#: models/book.py:46 models/book.py:48 models/collection.py:14 -#: models/collection.py:17 models/tag.py:34 -msgid "slug" -msgstr "slug" - -#: models/book.py:49 -msgid "language code" -msgstr "Kod języka" - -#: models/book.py:51 models/book.py:160 models/collection.py:15 -#: models/tag.py:38 models/tag.py:144 -msgid "description" -msgstr "opis" - -#: models/book.py:52 models/book.py:53 models/bookmedia.py:34 models/tag.py:45 -#: models/tag.py:46 -msgid "creation date" -msgstr "data utworzenia" - -#: models/book.py:54 -msgid "parent number" -msgstr "numer rodzica" - -#: models/book.py:55 models/bookmedia.py:35 -msgid "extra information" -msgstr "dodatkowe informacje" - -#: models/book.py:60 -msgid "cover" -msgstr "okładka" - -#: models/book.py:65 -msgid "cover thumbnail" -msgstr "podgląd okładki" - -#: models/book.py:92 models/collection.py:20 -msgid "book" -msgstr "książka" - -#: models/book.py:93 -msgid "books" -msgstr "książki" - -#: models/book.py:258 -#, python-format -msgid "Book \"%s\" does not exist." -msgstr "Utwór \"%s\" nie istnieje." - -#: models/book.py:272 -#, python-format -msgid "Book %s already exists" -msgstr "Książka %s już istnieje" - -#: models/book.py:519 -msgid "This work needs modernisation" -msgstr "Ten utwór wymaga uwspółcześnienia" - -#: models/book.py:546 models/bookmedia.py:27 -#, python-format -msgid "%s file" -msgstr "plik %s" - -#: models/bookmedia.py:30 -msgid "type" -msgstr "typ" - -#: models/bookmedia.py:31 models/source.py:12 models/tag.py:33 -msgid "name" -msgstr "nazwa" - -#: models/bookmedia.py:32 -msgid "file" -msgstr "plik" - -#: models/bookmedia.py:44 models/bookmedia.py:45 -msgid "book media" -msgstr "media książki" - -#: models/collection.py:18 -msgid "book slugs" -msgstr "slugi utworów" - -#: models/collection.py:20 models/tag.py:20 -msgid "kind" -msgstr "rodzaj" - -#: models/collection.py:24 -msgid "collection" -msgstr "kolekcja" - -#: models/collection.py:25 -msgid "collections" -msgstr "kolekcje" - -#: models/fragment.py:31 -msgid "fragment" -msgstr "fragment" - -#: models/fragment.py:32 -msgid "fragments" -msgstr "fragmenty" - -#: models/source.py:11 -msgid "network location" -msgstr "położenie sieciowe" - -#: models/source.py:16 -msgid "source" -msgstr "źródło" - -#: models/source.py:17 -msgid "sources" -msgstr "źródła" - -#: models/tag.py:18 -msgid "author" -msgstr "autor" - -#: models/tag.py:19 -msgid "epoch" -msgstr "epoka" - -#: models/tag.py:21 -msgid "genre" -msgstr "gatunek" - -#: models/tag.py:22 -msgid "theme" -msgstr "motyw" - -#: models/tag.py:23 -msgid "set" -msgstr "półka" - -#: models/tag.py:24 -msgid "thing" -msgstr "przedmiot" - -#: models/tag.py:36 -msgid "category" -msgstr "kategoria" - -#: models/tag.py:66 -msgid "tag" -msgstr "tag" - -#: models/tag.py:67 -msgid "tags" -msgstr "tagi" - -#: templates/catalogue/audiobook_list.html:8 -#: templates/catalogue/audiobook_list.html:17 -msgid "Listing of all audiobooks" -msgstr "Spis wszystkich audiobooków" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest MP3 audiobooks" -msgstr "Ostatnio dodane audiobooki w formacie MP3" - -#: templates/catalogue/audiobook_list.html:14 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "Ostatnio dodane audiobooki w formacie Ogg Vorbis" - -#: templates/catalogue/book_detail.html:23 -#: templates/catalogue/book_text.html:20 -msgid "Other versions" -msgstr "Inne wersje" - -#: templates/catalogue/book_detail.html:31 -#: templates/catalogue/tagged_object_list.html:75 -#: templates/catalogue/tagged_object_list.html:118 -msgid "See also" -msgstr "Zobacz też" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "Motyw" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "w utworze" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "Utwór jest udostępniony na licencji:" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" Creative " -"Commons Attribution-ShareAlike 3.0\n" -" license." -msgstr "" -"Ten utwór nie jest objęty majątkowym prawem autorskim i znajduje się " -"w domenie publicznej, co oznacza że możesz go swobodnie wykorzystywać, " -"publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi " -"materiałami (przypisy, motywy literackie etc.), które podlegają prawu " -"autorskiemu, to te dodatkowe materiały udostępnione są na licencji Uznanie autorstwa-" -"Na tych samych warunkach 3.0." - -#: templates/catalogue/book_info.html:20 -msgid "Resource prepared based on:" -msgstr "Zasób opracowany na podstawie:" - -#: templates/catalogue/book_info.html:29 -msgid "Edited by:" -msgstr "Opracowanie redakcyjne:" - -#: templates/catalogue/book_info.html:31 -msgid "Edited and annotated by:" -msgstr "Opracowanie redakcyjne i przypisy:" - -#: templates/catalogue/book_info.html:37 -msgid "Publication funded by:" -msgstr "Publikację ufundowali i ufundowały:" - -#: templates/catalogue/book_info.html:43 -msgid "Cover image by:" -msgstr "Ilustracja na okładce:" - -#: templates/catalogue/book_list.html:8 templates/catalogue/book_list.html:13 -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all works" -msgstr "Spis wszystkich utworów" - -#: templates/catalogue/book_list.html:26 -msgid "Table of Content" -msgstr "Spis treści" - -#: templates/catalogue/book_list.html:36 -msgid "↑ top ↑" -msgstr "↑ góra ↑" - -#: templates/catalogue/book_short.html:53 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "Epoka" - -#: templates/catalogue/book_short.html:61 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "Rodzaj" - -#: templates/catalogue/book_short.html:69 -msgid "Genre" -msgstr "Gatunek" - -#: templates/catalogue/book_short.html:78 -msgid "Language" -msgstr "Język" - -#: templates/catalogue/book_short.html:97 -msgid "Read online" -msgstr "Czytaj online" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_wide.html:72 views.py:594 -msgid "Download" -msgstr "Pobierz" - -#: templates/catalogue/book_short.html:104 -msgid "to print" -msgstr "do druku" - -#: templates/catalogue/book_short.html:107 -msgid "for an e-book reader" -msgstr "na czytnik e-booków" - -#: templates/catalogue/book_short.html:110 -msgid "for Kindle" -msgstr "na Kindle" - -#: templates/catalogue/book_short.html:113 -msgid "FictionBook" -msgstr "FictionBook" - -#: templates/catalogue/book_short.html:116 -msgid "for advanced usage" -msgstr "do zadań specjalnych" - -#: templates/catalogue/book_short.html:122 -msgid "Listen" -msgstr "Słuchaj" - -#: templates/catalogue/book_text.html:26 -msgid "Table of contents" -msgstr "Spis treści" - -#: templates/catalogue/book_text.html:30 templatetags/catalogue_tags.py:336 -msgid "Themes" -msgstr "Motywy" - -#: templates/catalogue/book_text.html:34 templates/catalogue/book_text.html:91 -msgid "Settings" -msgstr "Ustawienia" - -#: templates/catalogue/book_text.html:38 -msgid "Edit. note" -msgstr "Nota red." - -#: templates/catalogue/book_text.html:42 -msgid "Infobox" -msgstr "Informacje" - -#: templates/catalogue/book_text.html:56 -#: templates/catalogue/viewer_base.html:53 -msgid "Close" -msgstr "Zamknij" - -#: templates/catalogue/book_text.html:57 -msgid "Please wait..." -msgstr "Proszę czekać…" - -#: templates/catalogue/book_text.html:73 -msgid "Other versions of the book" -msgstr "Inne wersje utworu" - -#: templates/catalogue/book_text.html:74 -msgid "Close the other version" -msgstr "Zamknij drugą wersję" - -#: templates/catalogue/book_text.html:92 -msgid "Display line numbers" -msgstr "Wyświetlaj numerację" - -#: templates/catalogue/book_text.html:93 -msgid "Display themes" -msgstr "Wyświetlaj motywy" - -#: templates/catalogue/book_text.html:94 -msgid "Display footnotes" -msgstr "Wyświetlaj przypisy" - -#: templates/catalogue/book_wide.html:23 -#: templates/catalogue/tagged_object_list.html:61 -msgid "Motifs and themes" -msgstr "Motywy i tematy" - -#: templates/catalogue/book_wide.html:52 -msgid "See" -msgstr "Zobacz" - -#: templates/catalogue/book_wide.html:55 -msgid "Source" -msgstr "Źródło" - -#: templates/catalogue/book_wide.html:55 -msgid "of the book" -msgstr "utworu" - -#: templates/catalogue/book_wide.html:56 -msgid "in" -msgstr "w serwisie" - -#: templates/catalogue/book_wide.html:58 -msgid "Source XML file" -msgstr "Źródłowy plik XML" - -#: templates/catalogue/book_wide.html:60 -msgid "Book on" -msgstr "Utwór na" - -#: templates/catalogue/book_wide.html:60 -msgid "Editor's Platform" -msgstr "Platformie Redakcyjnej" - -#: templates/catalogue/book_wide.html:63 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "Opis lektury w Lektury.Gazeta.pl" - -#: templates/catalogue/book_wide.html:66 -msgid "Book description on Wikipedia" -msgstr "Opis lektury w Wikipedii" - -#: templates/catalogue/book_wide.html:68 -msgid "Mix this book" -msgstr "Miksuj treść utworu" - -#: templates/catalogue/book_wide.html:76 -msgid "Download all audiobooks for this book" -msgstr "Pobierz wszystkie audiobooki tego utworu" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -#: templates/catalogue/menu.html:6 -msgid "Catalogue" -msgstr "Katalog" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "Pobierz katalog w formacie PDF." - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:20 -#: templates/catalogue/tagged_object_list.html:27 -#: templatetags/catalogue_tags.py:332 -msgid "Authors" -msgstr "Autorzy" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:28 -#: templates/catalogue/tagged_object_list.html:35 -#: templatetags/catalogue_tags.py:334 -msgid "Kinds" -msgstr "Rodzaje" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:36 -#: templates/catalogue/tagged_object_list.html:43 -#: templatetags/catalogue_tags.py:333 -msgid "Genres" -msgstr "Gatunki" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:44 -#: templates/catalogue/tagged_object_list.html:51 -#: templatetags/catalogue_tags.py:335 -msgid "Epochs" -msgstr "Epoki" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "Motywy i tematy" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:19 -msgid "Collections" -msgstr "Kolekcje" - -#: templates/catalogue/daisy_list.html:7 -#: templates/catalogue/daisy_list.html:13 -msgid "Listing of all DAISY files" -msgstr "Spis wszystkich plików DAISY" - -#: templates/catalogue/daisy_list.html:10 -msgid "Latest DAISY audiobooks" -msgstr "Ostatnio dodane audiobooki w formacie DAISY" - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "" -"Podane kryteria są niejednoznaczne. Proszę wybrać jedną z następujących " -"możliwości:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "Rozwiń fragment" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "Zwiń fragment" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:6 -msgid "See full category" -msgstr "Zobacz całą kategorię" - -#: templates/catalogue/menu.html:5 -msgid "Catalogue of the library" -msgstr "Katalog biblioteki" - -#: templates/catalogue/menu.html:13 templates/catalogue/menu.html.py:21 -msgid "Please wait…" -msgstr "Proszę czekać…" - -#: templates/catalogue/menu.html:26 -msgid "All books" -msgstr "Wszystkie utwory" - -#: templates/catalogue/menu.html:29 -msgid "Audiobooks" -msgstr "Audiobooki" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "DAISY" - -#: templates/catalogue/menu.html:36 templates/catalogue/tag_list_split.html:8 -msgid "Gallery" -msgstr "Galeria" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "Utwór jest udostępniony na licencji" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "Na podstawie" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "O utworze" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "Autor" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "W innych miejscach" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "Źródło obrazu" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "Obraz na Platformie Redakcyjnej" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "Źródłowy plik XML" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Motywy w utworze" - -#: templates/catalogue/player.html:11 templates/catalogue/viewer_base.html:9 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "Strona utworu" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "Pobierz jako" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Czyta" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "Reżyseruje" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "Audiobooki przygotowane w ramach projektów:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "%(cs)s, finansowanego przez %(fb)s" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" -"Audiobooki przygotowane w ramach projektu %(cs)s finansowanego przez %(fb)s." - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "Audiobooki przygotowane w ramach projektu %(cs)s." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -msgid "Recent audiobooks" -msgstr "Ostatnio dodane audiobooki" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "Ostatnio dodane pliki DAISY" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -msgid "Recent publications" -msgstr "Ostatnie publikacje" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see recent audiobooks\n" -" and recent DAISY files." -msgstr "" -"Zobacz też listę ostatnio dodanych audiobooków\n" -" i plików DAISY." - -#: templates/catalogue/search_multiple_hits.html:8 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "Szukaj" - -#: templates/catalogue/search_multiple_hits.html:14 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "Czy chodziło Ci o" - -#: templates/catalogue/search_multiple_hits.html:55 -msgid "Results by title" -msgstr "Znalezione w tytułach" - -#: templates/catalogue/search_multiple_hits.html:70 -msgid "Results by authors" -msgstr "Znalezieni autorzy" - -#: templates/catalogue/search_multiple_hits.html:83 -msgid "Results by translators" -msgstr "Znalezieni tłumacze" - -#: templates/catalogue/search_multiple_hits.html:96 -msgid "Results in text" -msgstr "Znalezione w treści" - -#: templates/catalogue/search_multiple_hits.html:113 -msgid "Other results" -msgstr "Inne wyniki" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:162 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "Przepraszamy! Brak wyników spełniających kryteria podane w zapytaniu." - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"Search engine supports following criteria: title, author, theme/topic, " -"epoch, kind and genre.\n" -"\t\tAs for now we do not support full text search." -msgstr "" -"Wyszukiwarka obsługuje takie kryteria jak tytuł, autor, motyw/temat, epoka, " -"rodzaj i gatunek utworu. Obecnie nie obsługujemy wyszukiwania fraz w " -"tekstach utworów." - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "Przepraszamy! Zapytanie musi zawierać co najmniej dwa znaki." - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr "Stwórz własny plik PDF" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "Wolna licencja" - -#: templates/catalogue/tag_list_split.html:3 -msgid "Literature" -msgstr "Literatura" - -#: templates/catalogue/tagged_object_list.html:79 -#: templates/catalogue/tagged_object_list.html:132 -msgid "in Culture.pl" -msgstr "w Culture.pl" - -#: templates/catalogue/tagged_object_list.html:84 -#: templates/catalogue/tagged_object_list.html:122 -msgid "in Lektury.Gazeta.pl" -msgstr "w serwisie Lektury.Gazeta.pl" - -#: templates/catalogue/tagged_object_list.html:89 -#: templates/catalogue/tagged_object_list.html:127 -msgid "in Wikipedia" -msgstr "w Wikipedii" - -#: templates/catalogue/viewer_base.html:55 -msgid "Loading" -msgstr "Ładowanie" - -#: views.py:558 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"Wystąpił błąd: %(exception)s\n" -"\n" -"%(tb)s" - -#: views.py:559 -msgid "Book imported successfully" -msgstr "Książka zaimportowana" - -#: views.py:561 -#, python-format -msgid "Error importing file: %r" -msgstr "Błąd podczas importowania pliku: %r" - -#: views.py:593 -msgid "Download custom PDF" -msgstr "Stwórz własny PDF" - -#~ msgid "book count" -#~ msgstr "liczba książek" - -#~ msgid "picture count" -#~ msgstr "liczba obrazów" - -#~ msgid "" -#~ "Book tags can't have attached links. Set them directly on the book " -#~ "instead of it's tag." -#~ msgstr "" -#~ "Tagi typu książka nie mogą mieć ustawionych linków. Ustaw je bezpośrednio " -#~ "dla książki, zamiast dla jej tagu." - -#~ msgid "Wikisource" -#~ msgstr "Wikiźródła" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." - -#~ msgid "" -#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" -#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -#~ "ograniczeń." -#~ msgstr "" -#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" -#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -#~ "ograniczeń." - -#~ msgid "Listing of all pictures" -#~ msgstr "Spis wszystkich obrazów" - -#~ msgid "for a reader" -#~ msgstr "na czytnik" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Wrzuć lekturę na półkę!" - -#~ msgid "Create new shelf" -#~ msgstr "Utwórz nową półkę" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć nową półkę " -#~ "poniżej." - -#~ msgid "Put on the shelf!" -#~ msgstr "Wrzuć na półkę" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Półki zawierające fragment" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć nową półkę " -#~ "poniżej." - -#~ msgid "Save all shelves" -#~ msgstr "Zapisz półki" - -#~ msgid "Your shelves with books" -#~ msgstr "Twoje półki z lekturami" - -#~ msgid "remove" -#~ msgstr "usuń" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć półkę poniżej." - -#~ msgid "Create shelf" -#~ msgstr "Utwórz półkę" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "Wprowadź prawidłową wartość JSON. Błąd: %s" - -#~ msgid "A4" -#~ msgstr "A4" - -#~ msgid "A5" -#~ msgstr "A5" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "Niepoprawne opcje dla PDF" - -#~ msgid "Bad method" -#~ msgstr "Zła metoda" - -#~ msgid "title, author, theme/topic, epoch, kind, genre" -#~ msgstr "tytuł, autor, motyw/temat, epoka, rodzaj, gatunek" - -#~ msgid "ODT file" -#~ msgstr "Plik ODT" - -#~ msgid "MP3 file" -#~ msgstr "Plik MP3" - -#~ msgid "OGG file" -#~ msgstr "Plik OGG" - -#~ msgid "main page" -#~ msgstr "strona główna" - -#~ msgid "Show tag on main page" -#~ msgstr "Pokazuj tag na stronie głównej" - -#~ msgid "HTML file" -#~ msgstr "Plik HTML" - -#~ msgid "PDF file" -#~ msgstr "Plik PDF" - -#~ msgid "EPUB file" -#~ msgstr "Plik EPUB" - -#~ msgid "TXT file" -#~ msgstr "Plik TXT" - -#~ msgid "sha-1 hash" -#~ msgstr "hash sha-1" - -#~ msgid "time" -#~ msgstr "czas" - -#~ msgid "

To maintain your shelves you need to be logged in.

" -#~ msgstr "

Aby zarządzać swoimi półkami, musisz się zalogować.

" - -#~ msgid "

Shelves were sucessfully saved.

" -#~ msgstr "

Półki zostały zapisane.

" - -#~ msgid "Book was successfully removed from the shelf" -#~ msgstr "Usunięto" - -#~ msgid "

Shelf %s was successfully removed

" -#~ msgstr "

Półka %s została usunięta

" - -#, fuzzy -#~ msgid "sort_key" -#~ msgstr "klucz sortowania" - -#~ msgid "year of death" -#~ msgstr "rok śmierci" - -#~ msgid "short HTML" -#~ msgstr "krótki HTML" - -#~ msgid "year of translator's death" -#~ msgstr "rok śmierci tłumacza" - -#~ msgid "book stub" -#~ msgstr "zapowiedź książki" - -#~ msgid "

Shelf %s was successfully created

" -#~ msgstr "

Półka %s została utworzona

" diff --git a/apps/catalogue/locale/ru/LC_MESSAGES/django.mo b/apps/catalogue/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 28bb9da3c..000000000 Binary files a/apps/catalogue/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/ru/LC_MESSAGES/django.po b/apps/catalogue/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index dec617fc1..000000000 --- a/apps/catalogue/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,874 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2013-04-09 10:40+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "Укажите, пожалуйста, XML." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "Не показывать сноски" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "Не показывать темы" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "Не используйте наш специальный шрифт" - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "Ведение" - -#: forms.py:53 -msgid "Normal leading" -msgstr "Нормальное ведение" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "1,5 ведения" - -#: forms.py:55 -msgid "Double leading" -msgstr "Двойное ведение" - -#: forms.py:57 -msgid "Font size" -msgstr "Размер шрифта" - -#: forms.py:58 -msgid "Default" -msgstr "Умолчание" - -#: forms.py:59 -msgid "Big" -msgstr "Большой" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"Появилась ошибка: %(exception)s\n" -"\n" -"%(tb)s" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "Вы удачно заимпортировали книгу" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "Ошибка импорта файла: %r" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "Скачать PDF пользователя" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "Загрузить" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "заглавие" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "ключ сортировки " - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "slug" - -#: models/book.py:33 -msgid "language code" -msgstr "код языка" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "описание" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "дата создания" - -#: models/book.py:38 -msgid "parent number" -msgstr "номер родителя" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr "дополнительная информация" - -#: models/book.py:44 -msgid "cover" -msgstr "обложка" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "книга" - -#: models/book.py:67 -msgid "books" -msgstr "книги" - -#: models/book.py:244 -#, fuzzy, python-format -msgid "Book \"%s\" does not exist." -msgstr "Книга со slug = \"%s\" не существует." - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "Книга %s уже существует" - -#: models/book.py:599 models/bookmedia.py:23 -#, fuzzy, python-format -msgid "%s file" -msgstr "XML файл" - -#: models/bookmedia.py:26 -msgid "type" -msgstr "тип" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "название" - -#: models/bookmedia.py:28 -#, fuzzy -msgid "file" -msgstr "XML файл" - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "аудиокнига" - -#: models/collection.py:16 -#, fuzzy -msgid "book slugs" -msgstr "анонсы книги" - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "форма" - -#: models/collection.py:22 -msgid "collection" -msgstr "сбор" - -#: models/collection.py:23 -msgid "collections" -msgstr "сборы" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "фрагмент" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "фрагменты" - -#: models/tag.py:16 -msgid "author" -msgstr "автор" - -#: models/tag.py:17 -msgid "epoch" -msgstr "эпоха" - -#: models/tag.py:19 -msgid "genre" -msgstr "жанр" - -#: models/tag.py:20 -msgid "theme" -msgstr "мотив" - -#: models/tag.py:21 -msgid "set" -msgstr "набор" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "категория" - -#: models/tag.py:40 -msgid "book count" -msgstr "число книг" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "таг" - -#: models/tag.py:66 -msgid "tags" -msgstr "таги" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "Список работ" - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "Последние MP3 аудиокниги" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "Последние Ogg Vorbis аудиокниги" - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -msgstr "" -"Аудиотека школьных чтений Фонда Nowoczesna Polska.\n" -". Можете использовать ее бесплатно и без ограничений. \n" -"Аудиокниги записывают известные актеры, в том числе Данута Стенка и Ян Пешек." - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "Подробнее" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "Мотив" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "в труде" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "Разрешение на работу со стороны" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" Creative " -"Commons Attribution-ShareAlike 3.0\n" -" license." -msgstr "" -"Этот труд не защищен авторским правом и является частью \n" -"         общественного домена, что обозначает, нем можно свободно " -"спользоваться, публиковать и \n" -"         распространять. Если есть какие-либо дополнительные материалы, " -"защищенные авторскими правами \n" -"         предоставленные с этой работой (например, аннотации, мотивы и т." -"д.), эти \n" -"         материалы доступны по лицензией \n" -"         " -"Creative Commons Attribution-ShareAlike 3.0 " - -#: templates/catalogue/book_info.html:20 -#, fuzzy -msgid "Resource prepared based on:" -msgstr "Текст подготовлен на основе:" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "Под редакцией и с комментариями:" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "Список работ" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "Оглавление" - -#: templates/catalogue/book_list.html:30 -msgid "↑ top ↑" -msgstr "↑ топ ↑" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "эпоха" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "форма" - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "жанр" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "Читать онлайн" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "печатать" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "для читателя электронной книги" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "для Киндле" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr "продвинутое использование" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "Послушайте" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "на WolneLektury.pl" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "Оглавление" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "Мотивы" - -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "Изменить примечание" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "Инфобокс" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "Возратитесь на сайт книги" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "для читателя" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "Скачать все книги с этой полки" - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "Мотивы и темы" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "Посмотрите" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "Источник" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "данной книги" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "Исходный файл" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "Книга на" - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr "Платформа редакторов" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "Описание книги на Lektury.Gazeta.pl" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "Описание книги на Wikipedia" - -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "данной книги" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "Каталог" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "Скачать каталог в PDF формате." - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "Авторы" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "Формы" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "Жанры" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "Эпохи" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "Мотивы и темы" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -#, fuzzy -msgid "Collections" -msgstr "сборы" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "Список всех DAISY файлов" - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "Последние DAISY аудиокниги" - -#: templates/catalogue/daisy_list.html:15 -msgid "" -"System DAISY to uznany na całym świecie format udostępniania książek\n" -"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -"ograniczeń." -msgstr "" -"Система DAISY это известный во всем мире формат записи книг\n" -", предназначен для людей с плохим зрением, плохо видящих и других лиц\n" -", имеющих проблемы с чтением. Книгами можно пользоваться бесплатно и без " -"ограничений." - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "" -"Критерия являются неоднозначными. Пожалуйста, выберите один из следующих " -"вариантов:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "Растянуть фрагмент" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "Скрыть фрагмент" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "Вся категория" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please wait…" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "Все книги" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "Аудиокниги" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "Даисы" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "Разрешение на работу со стороны" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "Основанный на" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "Подробнее" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "Автор" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "другие ресурсы" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "Источник книги" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "Изображение на платформе редакторов" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "Просмотр XML-источник" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Темы труда" - -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "Список работ" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "Скачать" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Артист" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "режиссер" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "Аудиокниги были подготовлены в рамках проекта:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "%(cs)s, финансируемого %(fb)s" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" -"Аудиокниги были подготовлены в рамках %(cs)s проектa, финансируемого %(fb)s." - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "Аудиокниги были подготовлены в рамках %(cs)s проектa." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -#, fuzzy -msgid "Recent audiobooks" -msgstr "Последние MP3 аудиокниги" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -#, fuzzy -msgid "Recent publications" -msgstr "идти к публичной домене" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see recent audiobooks\n" -" and recent DAISY files." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "Поиск" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "Вы имели в виду" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "Результаты по заглавиям" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "Результаты по авторам" - -#: templates/catalogue/search_multiple_hits.html:80 -#, fuzzy -msgid "Results by translators" -msgstr "переводчик" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "Результаты в текстах" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "другие ресурсы" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "Извините! Критерий поиска не соответствует никаким ресурсам." - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"Search engine supports following criteria: title, author, theme/topic, " -"epoch, kind and genre.\n" -"\t\tAs for now we do not support full text search." -msgstr "" -"Искать поддержку двигателя используя критерии: заглавие, автор, тема/сюжет, " -"эпоха, форма и жанр.\n" -"\t\tПока мы не поддерживаем поиска всего текста." - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "" -"Извините! У искаемого вопроса должны быть по крайней мере два свойства." - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "на Lektury.Gazeta.pl" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "в Википедии" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr "Скачать PDF" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Поставьте книгу на полку!" - -#~ msgid "Create new shelf" -#~ msgstr "Создать новую полку" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "У вас нет никаких полок. Если вы хотите, вы можете создать одну ниже." - -#~ msgid "Put on the shelf!" -#~ msgstr "Поставьте на полку!" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Полки с фрагментом" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "У вас нет никакой полки. Если вы хотите, вы можете создать одну ниже." - -#~ msgid "Save all shelves" -#~ msgstr "Сохранить все полки" - -#~ msgid "Your shelves with books" -#~ msgstr "Ваши книжные полки" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "У вас нет никаких полок. Если хотите, вы можете создать одну ниже." - -#~ msgid "Create shelf" -#~ msgstr "Создать полку" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "Ввести правильное JSON значение. Ошибка: %s" - -#~ msgid "A4" -#~ msgstr "b2" - -#~ msgid "A5" -#~ msgstr "A5" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "Неправильные параметры настройки для PDF" - -#~ msgid "Bad method" -#~ msgstr "Плохой метод" - -#~ msgid "title, author, theme/topic, epoch, kind, genre" -#~ msgstr "Заглавие, автор, мотив/тема, эпоха, форма, жанр" - -#~ msgid "main page" -#~ msgstr "главная страница" - -#~ msgid "Show tag on main page" -#~ msgstr "Показать таг на главной странице" - -#~ msgid "year of death" -#~ msgstr "год смерти" - -#~ msgid "short HTML" -#~ msgstr "короткий HTML" - -#~ msgid "HTML file" -#~ msgstr "HTML файл" - -#~ msgid "PDF file" -#~ msgstr "PDF файл" - -#~ msgid "EPUB file" -#~ msgstr "EPUB файл" - -#~ msgid "ODT file" -#~ msgstr "ODT файл" - -#~ msgid "TXT file" -#~ msgstr "TXT файл" - -#~ msgid "MP3 file" -#~ msgstr "MP3 файл" - -#~ msgid "OGG file" -#~ msgstr "OGG файл" - -#~ msgid "year of translator's death" -#~ msgstr "год смерти переводчика" - -#~ msgid "book stub" -#~ msgstr "анонс книги" - -#, fuzzy -#~ msgid "time" -#~ msgstr "мотив" - -#~ msgid "

To maintain your shelves you need to be logged in.

" -#~ msgstr "

Зарегиструйтесь, чтобы сохранить свои полки.

" - -#~ msgid "

Shelves were sucessfully saved.

" -#~ msgstr "

Полки - удачно сохранены.

" - -#~ msgid "Book was successfully removed from the shelf" -#~ msgstr "Книга была удачно удалена с полки" - -#~ msgid "

Shelf %s was successfully created

" -#~ msgstr "

Полка %sбыла удачно создана

" - -#~ msgid "

Shelf %s was successfully removed

" -#~ msgstr "

Полка%sбыла удачно удалена." - -#~ msgid "Today is %(month)s, %(day)s." -#~ msgstr "Сегодня %(month)s, %(day)s." - -#~ msgid "content type" -#~ msgstr "тип содержания" - -#~ msgid "object id" -#~ msgstr "ID объекта" diff --git a/apps/catalogue/locale/uk/LC_MESSAGES/django.mo b/apps/catalogue/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index cea863ee3..000000000 Binary files a/apps/catalogue/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/uk/LC_MESSAGES/django.po b/apps/catalogue/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index 6424340b4..000000000 --- a/apps/catalogue/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,870 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2013-04-09 10:40+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "Введіть будь ласка XML." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "Сховати примітки" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "Сховати теми" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "Не використовувати нашого настроюваного шрифту" - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "Leading" - -#: forms.py:53 -msgid "Normal leading" -msgstr "Normal leading" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "One and a half leading" - -#: forms.py:55 -msgid "Double leading" -msgstr "Double leading" - -#: forms.py:57 -msgid "Font size" -msgstr "Розмір шрифту" - -#: forms.py:58 -msgid "Default" -msgstr "За умовчанням" - -#: forms.py:59 -msgid "Big" -msgstr "Великий" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"Система виявила помилку %(exception)s\n" -"\n" -"%(tb)s" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "Книжку успішно завантажено" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "Помилка в завантаженні файла: %r" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "Завантажити настроюваний PDF" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "Завантажити" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "заголовок" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "ключ сортування" - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "slug" - -#: models/book.py:33 -msgid "language code" -msgstr "мовний код" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "опис" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "дата створення" - -#: models/book.py:38 -msgid "parent number" -msgstr "номер батька" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr "додаткова інформація" - -#: models/book.py:44 -msgid "cover" -msgstr "обкладинка" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "книжка" - -#: models/book.py:67 -msgid "books" -msgstr "книжки" - -#: models/book.py:244 -#, python-format -msgid "Book \"%s\" does not exist." -msgstr "Книжка \"%s\" не існує." - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "Книжка %s вже існує" - -#: models/book.py:599 models/bookmedia.py:23 -#, python-format -msgid "%s file" -msgstr "файл %s" - -#: models/bookmedia.py:26 -msgid "type" -msgstr "тип" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "назва" - -#: models/bookmedia.py:28 -msgid "file" -msgstr "файл" - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "book media" - -#: models/collection.py:16 -msgid "book slugs" -msgstr "slugs книжок" - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "рід" - -#: models/collection.py:22 -msgid "collection" -msgstr "колекція" - -#: models/collection.py:23 -msgid "collections" -msgstr "колекції" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "фрагмент" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "фрагменти" - -#: models/tag.py:16 -msgid "author" -msgstr "автор" - -#: models/tag.py:17 -msgid "epoch" -msgstr "епоха" - -#: models/tag.py:19 -msgid "genre" -msgstr "жанр" - -#: models/tag.py:20 -msgid "theme" -msgstr "тема" - -#: models/tag.py:21 -msgid "set" -msgstr "вибір" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "категорія" - -#: models/tag.py:40 -msgid "book count" -msgstr "кількість книжок" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "теґ" - -#: models/tag.py:66 -msgid "tags" -msgstr "теґи" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "Список усіх аудіокниг" - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "Останні аудіокниги MP3" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "Останні аудіокниги Ogg Vorbis" - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -msgstr "" -"Аудіотека шкільної літератури Фонду Сучасна Польща (Fundacja Nowoczesna " -"Polska).\n" -"Можна нею користуватися безкоштовно і без обмежень.\n" -"Аудіокниги зачитують відомі актори, серед яких Данута Стенка та Ян Пешек." - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "Дивіться також" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "Тема" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "у творі" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "Цей твір є доступним на ліцензії:" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" Creative " -"Commons Attribution-ShareAlike 3.0\n" -" license." -msgstr "" -"Цей твір не охороняється авторським правом і є частиною\n" -" суспільного надбання, тому його можна використовувати без обмежень, " -"публікувати, та\n" -" розповсюджувати. Якщо твір містить додаткові матеріали, котрі " -"охороняються авторським правом\n" -" (наприклад примітки, мотиви, тощо), доступ до цих\n" -" додаткових матеріалів надається на умовах ліцензії \n" -" Creative " -"Commons Із зазначенням імені автора – На тих же умовах 3.0\n" -" ." - -#: templates/catalogue/book_info.html:20 -#, fuzzy -msgid "Resource prepared based on:" -msgstr "Текст підготовлено на основі" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "Редагування та примітки:" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "Список усіх творів" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "Зміст" - -#: templates/catalogue/book_list.html:30 -msgid "↑ top ↑" -msgstr "↑ вгору ↑" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "Епоха" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "Рід" - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "Жанр" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "Читати онлайн" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "до друку" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "для рідера електронних книг" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "на Kindle" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr "для розширеного користування" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "Послухати" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "Зміст" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "Теми" - -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "Редакторський коментар" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "Інфобокс" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "Сторінка книжки" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "на рідер" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "Завантажити усі аудіокниги для цієї книжки" - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "Мотиви та теми" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "Дивись" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "Джерело" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "книжки" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "Файл джерела XML" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "Книжка на" - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr "Платформа редагування" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "Опис книжки на Lektury.Gazeta.pl" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "Опис книжки на Вікіпедії" - -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "Міксувати цю книжку" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "Каталог" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "Завантажити каталог у форматі PDF" - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "Автори" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "Роди" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "Жанри" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "Епохи" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "Теми" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -#, fuzzy -msgid "Collections" -msgstr "колекції" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "Список усіх файлів DAISY" - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "Останні аудіокниги DAISY" - -#: templates/catalogue/daisy_list.html:15 -msgid "" -"System DAISY to uznany na całym świecie format udostępniania książek\n" -"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -"ograniczeń." -msgstr "" -"Система DAISY це визнаний у всьому світі формат надавання доступу до книжок\n" -" котрий відповідає потребам осіб слабозорих, сліпих, а також інших осіб\n" -" які мають труднощі з читанням. Можете ними користуватися безкоштовно і без " -"обмежень." - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "Критерії неоднозначні. Виберіть один з варіантів нижче:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "Розвинути фрагмент" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "Сховати фрагмент" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "Дивитись повну категорію" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please wait…" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "Усі книжки" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "Аудіокниги" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "DAISY" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "Твір на ліцензії" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "На основі" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "Деталі" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "Автор" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "Інші ресурси" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "Джерело графіки" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "Графіка на редакторській платформі" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "Дивитись джерело XML" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Теми у творі" - -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "Список усіх графік" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "Завантажити як" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Художник" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "Режисер" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "Аудіокниги виготовлено в рамках проектів:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "%(cs)s, фінансованого із коштів %(fb)s" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" -"Аудіокниги виготовлено в рамках проекту %(cs)s, фінансованого із коштів " -"%(fb)s." - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "Аудіокниги виготовлено в рамках проекту %(cs)s." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -#, fuzzy -msgid "Recent audiobooks" -msgstr "Останні аудіокниги MP3" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -#, fuzzy -msgid "Recent publications" -msgstr "входить у суспільне надбання" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see recent audiobooks\n" -" and recent DAISY files." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "Пошук" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "Ви мали на увазі" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "Результати за заголовком" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "Результати за авторами" - -#: templates/catalogue/search_multiple_hits.html:80 -#, fuzzy -msgid "Results by translators" -msgstr "Результати за авторами" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "Результати в тексті" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "Інші результати" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "На жаль, Ваші критерії пошуку не відповідають жодним результатам." - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"Search engine supports following criteria: title, author, theme/topic, " -"epoch, kind and genre.\n" -"\t\tAs for now we do not support full text search." -msgstr "" -"Система пошуку дозволяє здійснювати пошук за наступними критеріями: " -"заголовок, автор, тема, епоха, рід та жанр.\n" -"\t\tНа даний момент пошук у повному обсязі тексту не є можливим." - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "На жаль, для пошуку потрібно ввести щонайменше два знаки." - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "на Lektury.Gazeta.pl" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "на Вікіпедії" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr "Завантажити настроюваний PDF" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Покласти книжку на полицю!" - -#~ msgid "Create new shelf" -#~ msgstr "Створити нову полицю" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "У вас немає жодних полиць. Можете створити полицю нижче, якщо бажаєте." - -#~ msgid "Put on the shelf!" -#~ msgstr "Покласти на полицю!" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Полиці, які містять фрагмент" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "У Вас немає жодних полиць. Можете створити одну нижче, якщо бажаєте." - -#~ msgid "Save all shelves" -#~ msgstr "Зберегти усі полиці" - -#~ msgid "Your shelves with books" -#~ msgstr "Ваші полиці з книжками" - -#~ msgid "remove" -#~ msgstr "видалити" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "У Вас немає жодної полиці. Можете створити одну нижче, якщо бажаєте." - -#~ msgid "Create shelf" -#~ msgstr "Створити полицю" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "Введіть правильну вартість JSON. Помилка: %s" - -#~ msgid "A4" -#~ msgstr "А4" - -#~ msgid "A5" -#~ msgstr "А5" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "Неправильні параметри настроювання для PDF" - -#~ msgid "Bad method" -#~ msgstr "Неправильний спосіб" - -#~ msgid "title, author, theme/topic, epoch, kind, genre" -#~ msgstr "заголовок, автор, тема, епоха, рід, жанр" - -#~ msgid "main page" -#~ msgstr "головна сторінка" - -#~ msgid "Show tag on main page" -#~ msgstr "Показати теґ на головній сторінці" - -#~ msgid "year of death" -#~ msgstr "дата смерті" - -#~ msgid "short HTML" -#~ msgstr "короткий HTML" - -#~ msgid "HTML file" -#~ msgstr "файл HTML" - -#~ msgid "PDF file" -#~ msgstr "файл PDF" - -#~ msgid "EPUB file" -#~ msgstr "файл EPUB" - -#~ msgid "ODT file" -#~ msgstr "файл ODT" - -#~ msgid "TXT file" -#~ msgstr "файл TXT" - -#~ msgid "MP3 file" -#~ msgstr "файл MP3" - -#~ msgid "OGG file" -#~ msgstr "файл OGG" - -#~ msgid "translator" -#~ msgstr "перекладач" - -#~ msgid "year of translator's death" -#~ msgstr "рік смерті перекладача" - -#~ msgid "book stub" -#~ msgstr "заготовка книжки" - -#~ msgid "

To maintain your shelves you need to be logged in.

" -#~ msgstr "

Щоб управляти своїми полицями, увійдть в акаунт

" - -#~ msgid "

Shelves were sucessfully saved.

" -#~ msgstr "

Полиці успішно збережено.

" - -#~ msgid "Book was successfully removed from the shelf" -#~ msgstr "Книжку було успішно видалено з полиці" - -#~ msgid "

Shelf %s was successfully created

" -#~ msgstr "

Полицю %s успішно створено

" - -#~ msgid "

Shelf %s was successfully removed

" -#~ msgstr "

Полицю %s успішно видалено

" - -#~ msgid "content type" -#~ msgstr "тип змісту" - -#~ msgid "object id" -#~ msgstr "ІД об'єкту" diff --git a/apps/catalogue/management/__init__.py b/apps/catalogue/management/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/catalogue/management/commands/__init__.py b/apps/catalogue/management/commands/__init__.py deleted file mode 100644 index 8b1378917..000000000 --- a/apps/catalogue/management/commands/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/catalogue/management/commands/checkcovers.py b/apps/catalogue/management/commands/checkcovers.py deleted file mode 100644 index 7535dd474..000000000 --- a/apps/catalogue/management/commands/checkcovers.py +++ /dev/null @@ -1,130 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from optparse import make_option -from django.contrib.sites.models import Site -from django.core.management.base import BaseCommand -from catalogue import app_settings -from django.utils.functional import lazy - - -def ancestor_has_cover(book): - while book.parent: - book = book.parent - if book.extra_info.get('cover_url'): - return True - return False - - -current_domain = lazy(lambda: Site.objects.get_current().domain, str)() -def full_url(obj): - return 'http://%s%s' % ( - current_domain, - obj.get_absolute_url()) - - -class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, - help='Suppress output'), - ) - help = 'Checks cover sources and licenses.' - - def handle(self, **options): - from collections import defaultdict - import re - from django.db import transaction - from catalogue.models import Book - - verbose = options['verbose'] - - without_cover = [] - with_ancestral_cover = [] - not_redakcja = [] - bad_license = defaultdict(list) - no_license = [] - - re_license = re.compile(ur'.*,\s*(CC.*)') - - redakcja_url = app_settings.REDAKCJA_URL - good_license = re.compile("(%s)" % ")|(".join( - app_settings.GOOD_LICENSES)) - - with transaction.commit_on_success(): - for book in Book.objects.all().order_by('slug').iterator(): - extra_info = book.extra_info - if not extra_info.get('cover_url'): - if ancestor_has_cover(book): - with_ancestral_cover.append(book) - else: - without_cover.append(book) - else: - if not extra_info.get('cover_source', '' - ).startswith(redakcja_url): - not_redakcja.append(book) - match = re_license.match(extra_info.get('cover_by', '')) - if match: - if not good_license.match(match.group(1)): - bad_license[match.group(1)].append(book) - else: - no_license.append(book) - - print """%d books with no covers, %d with inherited covers. -Bad licenses used: %s (%d covers without license). -%d covers not from %s. -""" % ( - len(without_cover), - len(with_ancestral_cover), - ", ".join(sorted(bad_license.keys())) or "none", - len(no_license), - len(not_redakcja), - redakcja_url, - ) - - if verbose: - if bad_license: - print - print "Bad license:" - print "============" - for lic, books in bad_license.items(): - print - print lic - for book in books: - print full_url(book) - - if no_license: - print - print "No license:" - print "===========" - for book in no_license: - print - print full_url(book) - print book.extra_info.get('cover_by') - print book.extra_info.get('cover_source') - print book.extra_info.get('cover_url') - - if not_redakcja: - print - print "Not from Redakcja or source missing:" - print "====================================" - for book in not_redakcja: - print - print full_url(book) - print book.extra_info.get('cover_by') - print book.extra_info.get('cover_source') - print book.extra_info.get('cover_url') - - if without_cover: - print - print "No cover:" - print "=========" - for book in without_cover: - print full_url(book) - - if with_ancestral_cover: - print - print "With ancestral cover:" - print "=====================" - for book in with_ancestral_cover: - print full_url(book) diff --git a/apps/catalogue/management/commands/checkintegrity.py b/apps/catalogue/management/commands/checkintegrity.py deleted file mode 100644 index 6ae2b9a2f..000000000 --- a/apps/catalogue/management/commands/checkintegrity.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from optparse import make_option -from django.core.management.base import BaseCommand - -from catalogue.models import Book - - -class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, - help='Suppress output'), - make_option('-d', '--dry-run', action='store_true', dest='dry_run', default=False, - help="Just check for problems, don't fix them"), - ) - help = 'Checks integrity of catalogue data.' - - def handle(self, **options): - from django.db import transaction - - verbose = options['verbose'] - - with transaction.commit_on_success(): - for book in Book.objects.all().iterator(): - try: - info = book.wldocument().book_info - except: - if verbose: - print "ERROR! Bad XML for book:", book.slug - print "To resolve: republish." - print - else: - should_be = [p.slug for p in info.parts] - is_now = [p.slug for p in book.children.all().order_by('parent_number')] - if should_be != is_now: - if verbose: - print "ERROR! Wrong children for book:", book.slug - print "Is: ", is_now - print "Should be:", should_be - print "To resolve: republish parent book." - print - - # Check for ancestry. - parents = [] - parent = book.parent - while parent: - parents.append(parent) - parent = parent.parent - ancestors = list(book.ancestor.all()) - if set(ancestors) != set(parents): - if options['verbose']: - print "Wrong ancestry for book:", book - print "Is: ", ", ".join(ancestors) - print "Should be:", ", ".join(parents) - if not options['dry_run']: - book.repopulate_ancestors() - if options['verbose']: - print "Fixed." - if options['verbose']: - print - - # TODO: check metadata tags, reset counters diff --git a/apps/catalogue/management/commands/importbooks.py b/apps/catalogue/management/commands/importbooks.py deleted file mode 100644 index a15faa0b6..000000000 --- a/apps/catalogue/management/commands/importbooks.py +++ /dev/null @@ -1,173 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import os -import sys -import time -from optparse import make_option -from django.conf import settings -from django.core.management.base import BaseCommand -from django.core.management.color import color_style -from django.core.files import File -from catalogue.utils import trim_query_log -from librarian.picture import ImageStore -from wolnelektury_core.management.profile import profile - -from catalogue.models import Book -from picture.models import Picture - -from search.index import Index - - -class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, - help='Verbosity level; 0=minimal output, 1=normal output, 2=all output'), - make_option('-f', '--force', action='store_true', dest='force', default=False, - help='Overwrite works already in the catalogue'), - make_option('-D', '--dont-build', dest='dont_build', - metavar="FORMAT,...", - help="Skip building specified formats"), - make_option('-S', '--no-search-index', action='store_false', dest='search_index', default=True, - help='Skip indexing imported works for search'), - make_option('-w', '--wait-until', dest='wait_until', metavar='TIME', - help='Wait until specified time (Y-M-D h:m:s)'), - make_option('-p', '--picture', action='store_true', dest='import_picture', default=False, - help='Import pictures'), - ) - help = 'Imports books from the specified directories.' - args = 'directory [directory ...]' - - def import_book(self, file_path, options): - verbose = options.get('verbose') - if options.get('dont_build'): - dont_build = options.get('dont_build').lower().split(',') - else: - dont_build = None - file_base, ext = os.path.splitext(file_path) - book = Book.from_xml_file(file_path, overwrite=options.get('force'), - dont_build=dont_build, - search_index_tags=False) - for ebook_format in Book.ebook_formats: - if os.path.isfile(file_base + '.' + ebook_format): - getattr(book, '%s_file' % ebook_format).save( - '%s.%s' % (book.slug, ebook_format), - File(file(file_base + '.' + ebook_format)), - save=False - ) - if verbose: - print "Importing %s.%s" % (file_base, ebook_format) - book.save() - - def import_picture(self, file_path, options, continue_on_error=True): - try: - image_store = ImageStore(os.path.dirname(file_path)) - picture = Picture.from_xml_file(file_path, image_store=image_store, overwrite=options.get('force')) - except Exception, ex: - if continue_on_error: - print "%s: %s" % (file_path, ex) - return - else: - raise ex - return picture - - # @profile - def handle(self, *directories, **options): - from django.db import transaction - - self.style = color_style() - - verbose = options.get('verbose') - import_picture = options.get('import_picture') - - wait_until = None - if options.get('wait_until'): - wait_until = time.mktime(time.strptime(options.get('wait_until'), '%Y-%m-%d %H:%M:%S')) - if verbose > 0: - print "Will wait until %s; it's %f seconds from now" % ( - time.strftime('%Y-%m-%d %H:%M:%S', - time.localtime(wait_until)), wait_until - time.time()) - - index = None - if options.get('search_index') and not settings.NO_SEARCH_INDEX: - index = Index() - try: - index.index_tags() - index.index.commit() - except Exception, e: - index.index.rollback() - raise e - - # Start transaction management. - transaction.commit_unless_managed() - transaction.enter_transaction_management() - transaction.managed(True) - - files_imported = 0 - files_skipped = 0 - - for dir_name in directories: - if not os.path.isdir(dir_name): - print self.style.ERROR("%s: Not a directory. Skipping." % dir_name) - else: - # files queue - files = sorted(os.listdir(dir_name)) - postponed = {} - while files: - trim_query_log(0) - file_name = files.pop(0) - file_path = os.path.join(dir_name, file_name) - file_base, ext = os.path.splitext(file_path) - - # Skip files that are not XML files - if not ext == '.xml': - continue - - if verbose > 0: - print "Parsing '%s'" % file_path - else: - sys.stdout.write('.') - sys.stdout.flush() - - # Import book files - try: - if import_picture: - self.import_picture(file_path, options) - else: - self.import_book(file_path, options) - - files_imported += 1 - transaction.commit() - - except (Book.AlreadyExists, Picture.AlreadyExists): - print self.style.ERROR('%s: Book or Picture already imported. Skipping. To overwrite use --force.' % - file_path) - files_skipped += 1 - - except Book.DoesNotExist, e: - if file_name not in postponed or postponed[file_name] < files_imported: - # push it back into the queue, maybe the missing child will show up - if verbose: - print self.style.NOTICE('Waiting for missing children') - files.append(file_name) - postponed[file_name] = files_imported - else: - # we're in a loop, nothing's being imported - some child is really missing - raise e - - # Print results - print - print "Results: %d files imported, %d skipped, %d total." % ( - files_imported, files_skipped, files_imported + files_skipped) - print - - if wait_until: - print 'Waiting...' - try: - time.sleep(wait_until - time.time()) - except IOError: - print "it's already too late" - - transaction.commit() - transaction.leave_transaction_management() diff --git a/apps/catalogue/management/commands/pack.py b/apps/catalogue/management/commands/pack.py deleted file mode 100755 index ba06341b8..000000000 --- a/apps/catalogue/management/commands/pack.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from optparse import make_option - -from django.core.management.base import BaseCommand -from django.core.management.color import color_style -import zipfile - -from catalogue.models import Book, Tag - - -class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-t', '--tags', dest='tags', metavar='SLUG,...', - help='Use only books tagged with this tags'), - make_option('-i', '--include', dest='include', metavar='SLUG,...', - help='Include specific books by slug'), - make_option('-e', '--exclude', dest='exclude', metavar='SLUG,...', - help='Exclude specific books by slug') - ) - help = 'Prepare ZIP package with files of given type.' - args = '[%s] output_path.zip' % '|'.join(Book.formats) - - def handle(self, ftype, path, **options): - self.style = color_style() - verbose = int(options.get('verbosity')) - tags = options.get('tags') - include = options.get('include') - exclude = options.get('exclude') - - if ftype in Book.formats: - field = "%s_file" % ftype - else: - print self.style.ERROR('Unknown file type.') - return - - books = [] - - if include: - books += list(Book.objects.filter(slug__in=include.split(',')).only('slug', field)) - - if tags: - books += list(Book.tagged.with_all(Tag.objects.filter(slug__in=tags.split(','))).only('slug', field)) - elif not include: - books = list(Book.objects.all().only('slug', field)) - - if exclude: - books = [book for book in books if book.slug not in exclude.split(',')] - - archive = zipfile.ZipFile(path, 'w', zipfile.ZIP_DEFLATED) - - processed = skipped = 0 - for book in books: - if verbose >= 2: - print 'Parsing', book.slug - content = getattr(book, field) - if not content: - if verbose >= 1: - print self.style.NOTICE('%s has no %s file' % (book.slug, ftype)) - skipped += 1 - continue - archive.write(content.path, str('%s.%s' % (book.slug, ftype))) - processed += 1 - archive.close() - - if not processed: - if skipped: - print self.style.ERROR("No books with %s files found" % ftype) - else: - print self.style.ERROR("No books found") - return - - if verbose >= 1: - print "%d processed, %d skipped" % (processed, skipped) - print "Results written to %s" % path diff --git a/apps/catalogue/management/commands/report_dead_links.py b/apps/catalogue/management/commands/report_dead_links.py deleted file mode 100644 index 34b1e7054..000000000 --- a/apps/catalogue/management/commands/report_dead_links.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from __future__ import print_function, unicode_literals - -from django.core.management.base import BaseCommand - - -class Command(BaseCommand): - help = 'Checks for dead links.' - - def handle(self, **options): - from catalogue.models import Book - from picture.models import Picture - from urllib2 import urlopen, HTTPError, URLError - from django.core.urlresolvers import reverse - from django.contrib.sites.models import Site - from django.contrib.sites.shortcuts import get_current_site - - domain = get_current_site(None).domain - - fields = [ - (Book, [ - ('gazeta_link', lambda b: b.gazeta_link), - ('wiki_link', lambda b: b.wiki_link), - ('źródło', lambda b: b.extra_info.get('source_url')), - ], 'admin:catalogue_book_change' - ), - (Picture, [ - ('gazeta_link', lambda p: p.culturepl_link), - ('wiki_link', lambda p: p.wiki_link), - ('źródło', lambda p: p.extra_info.get('source_url')), - ], 'admin:pictures_picture_change' - ) - ] - - for model, model_fields, admin_name in fields: - for obj in model.objects.all(): - clean = True - for name, get in model_fields: - url = get(obj) - if url: - try: - urlopen(url) - except (HTTPError, URLError, ValueError), e: - if clean: - clean = False - print(unicode(obj).encode('utf-8')) - print(('Na stronie: https://%s%s' % (domain, obj.get_absolute_url())).encode('utf-8')) - print(('Administracja: https://%s%s' % (domain, reverse(admin_name, args=[obj.pk]))).encode('utf-8')) - if obj.extra_info.get('about'): - print(('Redakcja: %s' % (obj.extra_info.get('about'),)).encode('utf-8')) - print((' %s (%s): %s' % (name, getattr(e, 'code', 'błąd'), url)).encode('utf-8')) - if not clean: - print() diff --git a/apps/catalogue/management/commands/savemedia.py b/apps/catalogue/management/commands/savemedia.py deleted file mode 100755 index 216c5e335..000000000 --- a/apps/catalogue/management/commands/savemedia.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import os.path - -from django.core.management.base import BaseCommand - -from catalogue.models import Book, BookMedia -from catalogue.utils import ExistingFile - - -class Command(BaseCommand): - help = "Saves uploaded media with a given book and a given name. If media has a source SHA1 info - matching media is replaced." - args = 'path slug name' - - def handle(self, *args, **options): - from django.db import transaction - - path, slug, name = args - - # Start transaction management. - transaction.commit_unless_managed() - transaction.enter_transaction_management() - transaction.managed(True) - - book = Book.objects.get(slug=slug) - - root, ext = os.path.splitext(path) - ext = ext.lower() - if ext: - ext = ext[1:] - if ext == 'zip': - ext = 'daisy' - - source_sha1 = BookMedia.read_source_sha1(path, ext) - print "Source file SHA1:", source_sha1 - try: - assert source_sha1 - bm = book.media.get(type=ext, source_sha1=source_sha1) - print "Replacing media: %s (%s)" % (bm.name.encode('utf-8'), ext) - except (AssertionError, BookMedia.DoesNotExist): - bm = BookMedia(book=book, type=ext) - print "Creating new media" - bm.name = name - bm.file.save(None, ExistingFile(path)) - bm.save() - transaction.commit() - transaction.leave_transaction_management() diff --git a/apps/catalogue/migrations/0001_initial.py b/apps/catalogue/migrations/0001_initial.py deleted file mode 100644 index 661fde840..000000000 --- a/apps/catalogue/migrations/0001_initial.py +++ /dev/null @@ -1,221 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import fnpdjango.storage -import jsonfield.fields -import catalogue.fields -import catalogue.models.bookmedia -from django.conf import settings -import catalogue.models.book - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('contenttypes', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Book', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('title', models.CharField(max_length=120, verbose_name='Title')), - ('sort_key', models.CharField(verbose_name='Sort key', max_length=120, editable=False, db_index=True)), - ('sort_key_author', models.CharField(default='', verbose_name='sort key by author', max_length=120, editable=False, db_index=True)), - ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), - ('common_slug', models.SlugField(max_length=120, verbose_name='Slug')), - ('language', models.CharField(default=b'pol', max_length=3, verbose_name='language code', db_index=True)), - ('description', models.TextField(verbose_name='Description', blank=True)), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)), - ('changed_at', models.DateTimeField(auto_now=True, verbose_name='creation date', db_index=True)), - ('parent_number', models.IntegerField(default=0, verbose_name='Parent number')), - ('extra_info', jsonfield.fields.JSONField(default={}, verbose_name='Additional information')), - ('gazeta_link', models.CharField(max_length=240, blank=True)), - ('wiki_link', models.CharField(max_length=240, blank=True)), - ('cover', catalogue.fields.EbookField(b'cover', upload_to=catalogue.models.book._cover_upload_to, storage=fnpdjango.storage.BofhFileSystemStorage(), max_length=255, blank=True, null=True, verbose_name='cover')), - ('cover_thumb', catalogue.fields.EbookField(b'cover_thumb', max_length=255, upload_to=catalogue.models.book._cover_thumb_upload_to, null=True, verbose_name='cover thumbnail', blank=True)), - ('_related_info', jsonfield.fields.JSONField(null=True, editable=False, blank=True)), - ('txt_file', catalogue.fields.EbookField(b'txt', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._txt_upload_to, max_length=255, blank=True, verbose_name='TXT file')), - ('fb2_file', catalogue.fields.EbookField(b'fb2', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._fb2_upload_to, max_length=255, blank=True, verbose_name='FB2 file')), - ('pdf_file', catalogue.fields.EbookField(b'pdf', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._pdf_upload_to, max_length=255, blank=True, verbose_name='PDF file')), - ('epub_file', catalogue.fields.EbookField(b'epub', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._epub_upload_to, max_length=255, blank=True, verbose_name='EPUB file')), - ('mobi_file', catalogue.fields.EbookField(b'mobi', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._mobi_upload_to, max_length=255, blank=True, verbose_name='MOBI file')), - ('html_file', catalogue.fields.EbookField(b'html', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._html_upload_to, max_length=255, blank=True, verbose_name='HTML file')), - ('xml_file', catalogue.fields.EbookField(b'xml', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._xml_upload_to, max_length=255, blank=True, verbose_name='XML file')), - ('parent', models.ForeignKey(related_name=b'children', blank=True, to='catalogue.Book', null=True)), - ], - options={ - 'ordering': ('sort_key',), - 'verbose_name': 'book', - 'verbose_name_plural': 'Books', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='BookMedia', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('type', models.CharField(db_index=True, max_length=20, verbose_name='type', choices=[(b'mp3', 'MP3 file'), (b'ogg', 'Ogg Vorbis file'), (b'daisy', 'DAISY file')])), - ('name', models.CharField(max_length=512, verbose_name='name')), - ('file', catalogue.fields.OverwritingFileField(upload_to=catalogue.models.bookmedia._file_upload_to, max_length=600, verbose_name='XML file')), - ('uploaded_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)), - ('extra_info', jsonfield.fields.JSONField(default={}, verbose_name='Additional information', editable=False)), - ('source_sha1', models.CharField(max_length=40, null=True, editable=False, blank=True)), - ('book', models.ForeignKey(related_name=b'media', to='catalogue.Book')), - ], - options={ - 'ordering': ('type', 'name'), - 'verbose_name': 'book media', - 'verbose_name_plural': 'book media', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Collection', - fields=[ - ('title', models.CharField(max_length=120, verbose_name='Title', db_index=True)), - ('title_de', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('title_en', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('title_es', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('title_fr', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('title_it', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('title_lt', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('title_pl', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('title_ru', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('title_uk', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('slug', models.SlugField(max_length=120, serialize=False, verbose_name='Slug', primary_key=True)), - ('description', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_de', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_en', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_es', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_fr', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_it', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_lt', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_pl', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_ru', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_uk', models.TextField(null=True, verbose_name='Description', blank=True)), - ('book_slugs', models.TextField(verbose_name='Book stubs')), - ('kind', models.CharField(default=b'book', max_length=10, verbose_name='form', db_index=True, choices=[(b'book', 'book'), (b'picture', b'picture')])), - ], - options={ - 'ordering': ('title',), - 'verbose_name': 'collection', - 'verbose_name_plural': 'collections', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Fragment', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('text', models.TextField()), - ('short_text', models.TextField(editable=False)), - ('anchor', models.CharField(max_length=120)), - ('book', models.ForeignKey(related_name=b'fragments', to='catalogue.Book')), - ], - options={ - 'ordering': ('book', 'anchor'), - 'verbose_name': 'Fragment', - 'verbose_name_plural': 'Fragments', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Source', - fields=[ - ('netloc', models.CharField(max_length=120, serialize=False, verbose_name='network location', primary_key=True)), - ('name', models.CharField(max_length=120, verbose_name='name', blank=True)), - ('name_de', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ('name_en', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ('name_es', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ('name_fr', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ('name_it', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ('name_lt', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ('name_pl', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ('name_ru', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ('name_uk', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ], - options={ - 'ordering': ('netloc',), - 'verbose_name': 'source', - 'verbose_name_plural': 'sources', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Tag', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=50, verbose_name='name', db_index=True)), - ('name_de', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('name_en', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('name_es', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('name_fr', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('name_it', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('name_lt', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('name_pl', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('name_ru', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('name_uk', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('slug', models.SlugField(max_length=120, verbose_name='Slug')), - ('sort_key', models.CharField(max_length=120, verbose_name='Sort key', db_index=True)), - ('category', models.CharField(db_index=True, max_length=50, verbose_name='Category', choices=[(b'author', 'author'), (b'epoch', 'period'), (b'kind', 'form'), (b'genre', 'genre'), (b'theme', 'motif'), (b'set', 'set'), (b'book', 'book'), (b'thing', 'thing')])), - ('description', models.TextField(verbose_name='Description', blank=True)), - ('description_de', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_en', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_es', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_fr', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_it', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_lt', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_pl', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_ru', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_uk', models.TextField(null=True, verbose_name='Description', blank=True)), - ('book_count', models.IntegerField(null=True, verbose_name='Number of books', blank=True)), - ('picture_count', models.IntegerField(null=True, verbose_name='picture count', blank=True)), - ('gazeta_link', models.CharField(max_length=240, blank=True)), - ('culturepl_link', models.CharField(max_length=240, blank=True)), - ('wiki_link', models.CharField(max_length=240, blank=True)), - ('wiki_link_de', models.CharField(max_length=240, null=True, blank=True)), - ('wiki_link_en', models.CharField(max_length=240, null=True, blank=True)), - ('wiki_link_es', models.CharField(max_length=240, null=True, blank=True)), - ('wiki_link_fr', models.CharField(max_length=240, null=True, blank=True)), - ('wiki_link_it', models.CharField(max_length=240, null=True, blank=True)), - ('wiki_link_lt', models.CharField(max_length=240, null=True, blank=True)), - ('wiki_link_pl', models.CharField(max_length=240, null=True, blank=True)), - ('wiki_link_ru', models.CharField(max_length=240, null=True, blank=True)), - ('wiki_link_uk', models.CharField(max_length=240, null=True, blank=True)), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)), - ('changed_at', models.DateTimeField(auto_now=True, verbose_name='creation date', db_index=True)), - ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)), - ], - options={ - 'ordering': ('sort_key',), - 'verbose_name': 'tag', - 'verbose_name_plural': 'tags', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='TagRelation', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('object_id', models.PositiveIntegerField(verbose_name='object id', db_index=True)), - ('content_type', models.ForeignKey(verbose_name='content type', to='contenttypes.ContentType')), - ('tag', models.ForeignKey(related_name=b'items', verbose_name='tag', to='catalogue.Tag')), - ], - options={ - 'db_table': 'catalogue_tag_relation', - }, - bases=(models.Model,), - ), - migrations.AlterUniqueTogether( - name='tagrelation', - unique_together=set([('tag', 'content_type', 'object_id')]), - ), - migrations.AlterUniqueTogether( - name='tag', - unique_together=set([('slug', 'category')]), - ), - ] diff --git a/apps/catalogue/migrations/0002_book_ancestor.py b/apps/catalogue/migrations/0002_book_ancestor.py deleted file mode 100644 index 9f304c3d7..000000000 --- a/apps/catalogue/migrations/0002_book_ancestor.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='book', - name='ancestor', - field=models.ManyToManyField(related_name=b'descendant', null=True, editable=False, to='catalogue.Book', blank=True), - preserve_default=True, - ), - ] diff --git a/apps/catalogue/migrations/0003_populate_ancestors.py b/apps/catalogue/migrations/0003_populate_ancestors.py deleted file mode 100644 index b6117570b..000000000 --- a/apps/catalogue/migrations/0003_populate_ancestors.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations - - -def populate_ancestors(apps, schema_editor): - """Fixes the ancestry cache.""" - # TODO: table names - from django.db import connection, transaction - if connection.vendor == 'postgres': - cursor = connection.cursor() - cursor.execute(""" - WITH RECURSIVE ancestry AS ( - SELECT book.id, book.parent_id - FROM catalogue_book AS book - WHERE book.parent_id IS NOT NULL - UNION - SELECT ancestor.id, book.parent_id - FROM ancestry AS ancestor, catalogue_book AS book - WHERE ancestor.parent_id = book.id - AND book.parent_id IS NOT NULL - ) - INSERT INTO catalogue_book_ancestor - (from_book_id, to_book_id) - SELECT id, parent_id - FROM ancestry - ORDER BY id; - """) - else: - Book = apps.get_model("catalogue", "Book") - for book in Book.objects.exclude(parent=None): - parent = book.parent - while parent is not None: - book.ancestor.add(parent) - parent = parent.parent - - -def remove_book_tags(apps, schema_editor): - Tag = apps.get_model("catalogue", "Tag") - Book = apps.get_model("catalogue", "Book") - Tag.objects.filter(category='book').delete() - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0002_book_ancestor'), - ] - - operations = [ - migrations.RunPython(populate_ancestors), - migrations.RunPython(remove_book_tags), - ] diff --git a/apps/catalogue/migrations/0004_remove_booktags_count_related_info.py b/apps/catalogue/migrations/0004_remove_booktags_count_related_info.py deleted file mode 100644 index 916224b25..000000000 --- a/apps/catalogue/migrations/0004_remove_booktags_count_related_info.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0003_populate_ancestors'), - ] - - operations = [ - migrations.AlterField( - model_name='tag', - name='category', - field=models.CharField(db_index=True, max_length=50, verbose_name='Category', choices=[(b'author', 'author'), (b'epoch', 'period'), (b'kind', 'form'), (b'genre', 'genre'), (b'theme', 'motif'), (b'set', 'set'), (b'thing', 'thing')]), - ), - - migrations.RemoveField( - model_name='tag', - name='book_count', - ), - migrations.RemoveField( - model_name='tag', - name='picture_count', - ), - migrations.RemoveField( - model_name='book', - name='_related_info', - ), - ] diff --git a/apps/catalogue/migrations/0005_auto_20141016_1337.py b/apps/catalogue/migrations/0005_auto_20141016_1337.py deleted file mode 100644 index 6de315722..000000000 --- a/apps/catalogue/migrations/0005_auto_20141016_1337.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0004_remove_booktags_count_related_info'), - ] - - operations = [ - migrations.AlterField( - model_name='book', - name='title', - field=models.CharField(max_length=32767, verbose_name='Title'), - ), - ] diff --git a/apps/catalogue/migrations/0006_auto_20141022_1059.py b/apps/catalogue/migrations/0006_auto_20141022_1059.py deleted file mode 100644 index f36eb0742..000000000 --- a/apps/catalogue/migrations/0006_auto_20141022_1059.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -def capitalize_objects(apps, schema_editor): - """Capitalize Polish names of things.""" - Tag = apps.get_model('catalogue', 'Tag') - for tag in Tag.objects.filter(category='thing'): - tag.name = tag.name_pl = tag.name.capitalize() - tag.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0005_auto_20141016_1337'), - ] - - operations = [ - migrations.RunPython(capitalize_objects), - ] diff --git a/apps/catalogue/migrations/0007_auto_20151123_1529.py b/apps/catalogue/migrations/0007_auto_20151123_1529.py deleted file mode 100644 index 86afa9889..000000000 --- a/apps/catalogue/migrations/0007_auto_20151123_1529.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0006_auto_20141022_1059'), - ] - - operations = [ - migrations.AlterField( - model_name='tag', - name='name', - field=models.CharField(max_length=120, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_de', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_en', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_es', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_fr', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_it', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_lt', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_pl', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_ru', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_uk', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - ] diff --git a/apps/catalogue/migrations/0008_auto_20151221_1225.py b/apps/catalogue/migrations/0008_auto_20151221_1225.py deleted file mode 100644 index ba6c47027..000000000 --- a/apps/catalogue/migrations/0008_auto_20151221_1225.py +++ /dev/null @@ -1,255 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models -import jsonfield.fields -import catalogue.fields -import catalogue.models.bookmedia - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0007_auto_20151123_1529'), - ] - - operations = [ - migrations.AlterModelOptions( - name='book', - options={'ordering': ('sort_key',), 'verbose_name': 'book', 'verbose_name_plural': 'books'}, - ), - migrations.AlterModelOptions( - name='fragment', - options={'ordering': ('book', 'anchor'), 'verbose_name': 'fragment', 'verbose_name_plural': 'fragments'}, - ), - migrations.AlterField( - model_name='book', - name='ancestor', - field=models.ManyToManyField(related_name='descendant', editable=False, to='catalogue.Book', blank=True), - ), - migrations.AlterField( - model_name='book', - name='common_slug', - field=models.SlugField(max_length=120, verbose_name='slug'), - ), - migrations.AlterField( - model_name='book', - name='description', - field=models.TextField(verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='book', - name='extra_info', - field=jsonfield.fields.JSONField(default={}, verbose_name='extra information'), - ), - migrations.AlterField( - model_name='book', - name='parent_number', - field=models.IntegerField(default=0, verbose_name='parent number'), - ), - migrations.AlterField( - model_name='book', - name='slug', - field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), - ), - migrations.AlterField( - model_name='book', - name='sort_key', - field=models.CharField(verbose_name='sort key', max_length=120, editable=False, db_index=True), - ), - migrations.AlterField( - model_name='book', - name='title', - field=models.CharField(max_length=32767, verbose_name='title'), - ), - migrations.AlterField( - model_name='bookmedia', - name='extra_info', - field=jsonfield.fields.JSONField(default={}, verbose_name='extra information', editable=False), - ), - migrations.AlterField( - model_name='bookmedia', - name='file', - field=catalogue.fields.OverwritingFileField(upload_to=catalogue.models.bookmedia._file_upload_to, max_length=600, verbose_name='file'), - ), - migrations.AlterField( - model_name='collection', - name='book_slugs', - field=models.TextField(verbose_name='book slugs'), - ), - migrations.AlterField( - model_name='collection', - name='description', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_de', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_en', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_es', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_fr', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_it', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_lt', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_pl', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_ru', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_uk', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='kind', - field=models.CharField(default=b'book', max_length=10, verbose_name='kind', db_index=True, choices=[(b'book', 'book'), (b'picture', b'picture')]), - ), - migrations.AlterField( - model_name='collection', - name='slug', - field=models.SlugField(max_length=120, serialize=False, verbose_name='slug', primary_key=True), - ), - migrations.AlterField( - model_name='collection', - name='title', - field=models.CharField(max_length=120, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_de', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_en', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_es', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_fr', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_it', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_lt', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_pl', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_ru', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_uk', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='tag', - name='category', - field=models.CharField(db_index=True, max_length=50, verbose_name='category', choices=[(b'author', 'author'), (b'epoch', 'epoch'), (b'kind', 'kind'), (b'genre', 'genre'), (b'theme', 'theme'), (b'set', 'set'), (b'thing', 'thing')]), - ), - migrations.AlterField( - model_name='tag', - name='description', - field=models.TextField(verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_de', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_en', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_es', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_fr', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_it', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_lt', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_pl', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_ru', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_uk', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='slug', - field=models.SlugField(max_length=120, verbose_name='slug'), - ), - migrations.AlterField( - model_name='tag', - name='sort_key', - field=models.CharField(max_length=120, verbose_name='sort key', db_index=True), - ), - ] diff --git a/apps/catalogue/migrations/__init__.py b/apps/catalogue/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/catalogue/models/__init__.py b/apps/catalogue/models/__init__.py deleted file mode 100644 index 73b51090c..000000000 --- a/apps/catalogue/models/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from catalogue.models.tag import Tag -from catalogue.models.bookmedia import BookMedia -from catalogue.models.fragment import Fragment -from catalogue.models.book import Book -from catalogue.models.collection import Collection -from catalogue.models.source import Source diff --git a/apps/catalogue/models/book.py b/apps/catalogue/models/book.py deleted file mode 100644 index 5f68e09ff..000000000 --- a/apps/catalogue/models/book.py +++ /dev/null @@ -1,552 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from collections import OrderedDict -from random import randint -import re -from django.conf import settings -from django.db import connection, models, transaction -from django.db.models import permalink -import django.dispatch -from django.contrib.contenttypes.fields import GenericRelation -from django.core.urlresolvers import reverse -from django.utils.translation import ugettext_lazy as _ -import jsonfield -from fnpdjango.storage import BofhFileSystemStorage -from ssify import flush_ssi_includes -from newtagging import managers -from catalogue import constants -from catalogue.fields import EbookField -from catalogue.models import Tag, Fragment, BookMedia -from catalogue.utils import create_zip -from catalogue import app_settings -from catalogue import tasks - -bofh_storage = BofhFileSystemStorage() - - -def _cover_upload_to(i, n): - return 'book/cover/%s.jpg' % i.slug - -def _cover_thumb_upload_to(i, n): - return 'book/cover_thumb/%s.jpg' % i.slug - -def _ebook_upload_to(upload_path): - def _upload_to(i, n): - return upload_path % i.slug - return _upload_to - - -class Book(models.Model): - """Represents a book imported from WL-XML.""" - title = models.CharField(_('title'), max_length=32767) - sort_key = models.CharField(_('sort key'), max_length=120, db_index=True, editable=False) - sort_key_author = models.CharField(_('sort key by author'), max_length=120, db_index=True, editable=False, default=u'') - slug = models.SlugField(_('slug'), max_length=120, db_index=True, - unique=True) - common_slug = models.SlugField(_('slug'), max_length=120, db_index=True) - language = models.CharField(_('language code'), max_length=3, db_index=True, - default=app_settings.DEFAULT_LANGUAGE) - description = models.TextField(_('description'), blank=True) - created_at = models.DateTimeField(_('creation date'), auto_now_add=True, db_index=True) - changed_at = models.DateTimeField(_('creation date'), auto_now=True, db_index=True) - parent_number = models.IntegerField(_('parent number'), default=0) - extra_info = jsonfield.JSONField(_('extra information'), default={}) - gazeta_link = models.CharField(blank=True, max_length=240) - wiki_link = models.CharField(blank=True, max_length=240) - # files generated during publication - - cover = EbookField('cover', _('cover'), - null=True, blank=True, - upload_to=_cover_upload_to, - storage=bofh_storage, max_length=255) - # Cleaner version of cover for thumbs - cover_thumb = EbookField('cover_thumb', _('cover thumbnail'), - null=True, blank=True, - upload_to=_cover_thumb_upload_to, - max_length=255) - ebook_formats = constants.EBOOK_FORMATS - formats = ebook_formats + ['html', 'xml'] - - parent = models.ForeignKey('self', blank=True, null=True, - related_name='children') - ancestor = models.ManyToManyField('self', blank=True, - editable=False, related_name='descendant', symmetrical=False) - - objects = models.Manager() - tagged = managers.ModelTaggedItemManager(Tag) - tags = managers.TagDescriptor(Tag) - tag_relations = GenericRelation(Tag.intermediary_table_model) - - html_built = django.dispatch.Signal() - published = django.dispatch.Signal() - - short_html_url_name = 'catalogue_book_short' - - class AlreadyExists(Exception): - pass - - class Meta: - ordering = ('sort_key',) - verbose_name = _('book') - verbose_name_plural = _('books') - app_label = 'catalogue' - - def __unicode__(self): - return self.title - - def save(self, force_insert=False, force_update=False, **kwargs): - from sortify import sortify - - self.sort_key = sortify(self.title)[:120] - self.title = unicode(self.title) # ??? - - try: - author = self.tags.filter(category='author')[0].sort_key - except IndexError: - author = u'' - self.sort_key_author = author - - ret = super(Book, self).save(force_insert, force_update, **kwargs) - - return ret - - @permalink - def get_absolute_url(self): - return ('catalogue.views.book_detail', [self.slug]) - - @staticmethod - @permalink - def create_url(slug): - return ('catalogue.views.book_detail', [slug]) - - @property - def name(self): - return self.title - - def language_code(self): - return constants.LANGUAGES_3TO2.get(self.language, self.language) - - def language_name(self): - return dict(settings.LANGUAGES).get(self.language_code(), "") - - def has_media(self, type_): - if type_ in Book.formats: - return bool(getattr(self, "%s_file" % type_)) - else: - return self.media.filter(type=type_).exists() - - def get_media(self, type_): - if self.has_media(type_): - if type_ in Book.formats: - return getattr(self, "%s_file" % type_) - else: - return self.media.filter(type=type_) - else: - return None - - def get_mp3(self): - return self.get_media("mp3") - def get_odt(self): - return self.get_media("odt") - def get_ogg(self): - return self.get_media("ogg") - def get_daisy(self): - return self.get_media("daisy") - - def has_description(self): - return len(self.description) > 0 - has_description.short_description = _('description') - has_description.boolean = True - - # ugly ugly ugly - def has_mp3_file(self): - return bool(self.has_media("mp3")) - has_mp3_file.short_description = 'MP3' - has_mp3_file.boolean = True - - def has_ogg_file(self): - return bool(self.has_media("ogg")) - has_ogg_file.short_description = 'OGG' - has_ogg_file.boolean = True - - def has_daisy_file(self): - return bool(self.has_media("daisy")) - has_daisy_file.short_description = 'DAISY' - has_daisy_file.boolean = True - - def wldocument(self, parse_dublincore=True, inherit=True): - from catalogue.import_utils import ORMDocProvider - from librarian.parser import WLDocument - - if inherit and self.parent: - meta_fallbacks = self.parent.cover_info() - else: - meta_fallbacks = None - - return WLDocument.from_file(self.xml_file.path, - provider=ORMDocProvider(self), - parse_dublincore=parse_dublincore, - meta_fallbacks=meta_fallbacks) - - @staticmethod - def zip_format(format_): - def pretty_file_name(book): - return "%s/%s.%s" % ( - book.extra_info['author'], - book.slug, - format_) - - field_name = "%s_file" % format_ - books = Book.objects.filter(parent=None).exclude(**{field_name: ""}) - paths = [(pretty_file_name(b), getattr(b, field_name).path) - for b in books.iterator()] - return create_zip(paths, app_settings.FORMAT_ZIPS[format_]) - - def zip_audiobooks(self, format_): - bm = BookMedia.objects.filter(book=self, type=format_) - paths = map(lambda bm: (None, bm.file.path), bm) - return create_zip(paths, "%s_%s" % (self.slug, format_)) - - def search_index(self, book_info=None, index=None, index_tags=True, commit=True): - if index is None: - from search.index import Index - index = Index() - try: - index.index_book(self, book_info) - if index_tags: - index.index_tags() - if commit: - index.index.commit() - except Exception, e: - index.index.rollback() - raise e - - - @classmethod - def from_xml_file(cls, xml_file, **kwargs): - from django.core.files import File - from librarian import dcparser - - # use librarian to parse meta-data - book_info = dcparser.parse(xml_file) - - if not isinstance(xml_file, File): - xml_file = File(open(xml_file)) - - try: - return cls.from_text_and_meta(xml_file, book_info, **kwargs) - finally: - xml_file.close() - - @classmethod - def from_text_and_meta(cls, raw_file, book_info, overwrite=False, - dont_build=None, search_index=True, - search_index_tags=True): - if dont_build is None: - dont_build = set() - dont_build = set.union(set(dont_build), set(app_settings.DONT_BUILD)) - - # check for parts before we do anything - children = [] - if hasattr(book_info, 'parts'): - for part_url in book_info.parts: - try: - children.append(Book.objects.get(slug=part_url.slug)) - except Book.DoesNotExist: - raise Book.DoesNotExist(_('Book "%s" does not exist.') % - part_url.slug) - - # Read book metadata - book_slug = book_info.url.slug - if re.search(r'[^a-z0-9-]', book_slug): - raise ValueError('Invalid characters in slug') - book, created = Book.objects.get_or_create(slug=book_slug) - - if created: - book_shelves = [] - old_cover = None - else: - if not overwrite: - raise Book.AlreadyExists(_('Book %s already exists') % ( - book_slug)) - # Save shelves for this book - book_shelves = list(book.tags.filter(category='set')) - old_cover = book.cover_info() - - # Save XML file - book.xml_file.save('%s.xml' % book.slug, raw_file, save=False) - - book.language = book_info.language - book.title = book_info.title - if book_info.variant_of: - book.common_slug = book_info.variant_of.slug - else: - book.common_slug = book.slug - book.extra_info = book_info.to_dict() - book.save() - - meta_tags = Tag.tags_from_info(book_info) - - book.tags = set(meta_tags + book_shelves) - - cover_changed = old_cover != book.cover_info() - obsolete_children = set(b for b in book.children.all() - if b not in children) - notify_cover_changed = [] - for n, child_book in enumerate(children): - new_child = child_book.parent != book - child_book.parent = book - child_book.parent_number = n - child_book.save() - if new_child or cover_changed: - notify_cover_changed.append(child_book) - # Disown unfaithful children and let them cope on their own. - for child in obsolete_children: - child.parent = None - child.parent_number = 0 - child.save() - if old_cover: - notify_cover_changed.append(child) - - cls.repopulate_ancestors() - - # No saves beyond this point. - - # Build cover. - if 'cover' not in dont_build: - book.cover.build_delay() - book.cover_thumb.build_delay() - - # Build HTML and ebooks. - book.html_file.build_delay() - if not children: - for format_ in constants.EBOOK_FORMATS_WITHOUT_CHILDREN: - if format_ not in dont_build: - getattr(book, '%s_file' % format_).build_delay() - for format_ in constants.EBOOK_FORMATS_WITH_CHILDREN: - if format_ not in dont_build: - getattr(book, '%s_file' % format_).build_delay() - - if not settings.NO_SEARCH_INDEX and search_index: - tasks.index_book.delay(book.id, book_info=book_info, index_tags=search_index_tags) - - for child in notify_cover_changed: - child.parent_cover_changed() - - cls.published.send(sender=cls, instance=book) - return book - - @classmethod - def repopulate_ancestors(cls): - """Fixes the ancestry cache.""" - # TODO: table names - with transaction.atomic(): - cursor = connection.cursor() - if connection.vendor == 'postgres': - cursor.execute("TRUNCATE catalogue_book_ancestor") - cursor.execute(""" - WITH RECURSIVE ancestry AS ( - SELECT book.id, book.parent_id - FROM catalogue_book AS book - WHERE book.parent_id IS NOT NULL - UNION - SELECT ancestor.id, book.parent_id - FROM ancestry AS ancestor, catalogue_book AS book - WHERE ancestor.parent_id = book.id - AND book.parent_id IS NOT NULL - ) - INSERT INTO catalogue_book_ancestor - (from_book_id, to_book_id) - SELECT id, parent_id - FROM ancestry - ORDER BY id; - """) - else: - cursor.execute("DELETE FROM catalogue_book_ancestor") - for b in cls.objects.exclude(parent=None): - parent = b.parent - while parent is not None: - b.ancestor.add(parent) - parent = parent.parent - - def flush_includes(self, languages=True): - if not languages: - return - if languages is True: - languages = [lc for (lc, _ln) in settings.LANGUAGES] - flush_ssi_includes([ - template % (self.pk, lang) - for template in [ - '/katalog/b/%d/mini.%s.html', - '/katalog/b/%d/mini_nolink.%s.html', - '/katalog/b/%d/short.%s.html', - '/katalog/b/%d/wide.%s.html', - '/api/include/book/%d.%s.json', - '/api/include/book/%d.%s.xml', - ] - for lang in languages - ]) - - def cover_info(self, inherit=True): - """Returns a dictionary to serve as fallback for BookInfo. - - For now, the only thing inherited is the cover image. - """ - need = False - info = {} - for field in ('cover_url', 'cover_by', 'cover_source'): - val = self.extra_info.get(field) - if val: - info[field] = val - else: - need = True - if inherit and need and self.parent is not None: - parent_info = self.parent.cover_info() - parent_info.update(info) - info = parent_info - return info - - def related_themes(self): - return Tag.objects.usage_for_queryset( - Fragment.objects.filter(models.Q(book=self) | models.Q(book__ancestor=self)), - counts=True).filter(category='theme') - - def parent_cover_changed(self): - """Called when parent book's cover image is changed.""" - if not self.cover_info(inherit=False): - if 'cover' not in app_settings.DONT_BUILD: - self.cover.build_delay() - self.cover_thumb.build_delay() - for format_ in constants.EBOOK_FORMATS_WITH_COVERS: - if format_ not in app_settings.DONT_BUILD: - getattr(self, '%s_file' % format_).build_delay() - for child in self.children.all(): - child.parent_cover_changed() - - def other_versions(self): - """Find other versions (i.e. in other languages) of the book.""" - return type(self).objects.filter(common_slug=self.common_slug).exclude(pk=self.pk) - - def parents(self): - books = [] - parent = self.parent - while parent is not None: - books.insert(0, parent) - parent = parent.parent - return books - - def pretty_title(self, html_links=False): - names = [(tag.name, tag.get_absolute_url()) - for tag in self.tags.filter(category='author')] - books = self.parents() + [self] - names.extend([(b.title, b.get_absolute_url()) for b in books]) - - if html_links: - names = ['%s' % (tag[1], tag[0]) for tag in names] - else: - names = [tag[0] for tag in names] - return ', '.join(names) - - @classmethod - def tagged_top_level(cls, tags): - """ Returns top-level books tagged with `tags`. - - It only returns those books which don't have ancestors which are - also tagged with those tags. - - """ - objects = cls.tagged.with_all(tags) - return objects.exclude(ancestor__in=objects) - - @classmethod - def book_list(cls, filter=None): - """Generates a hierarchical listing of all books. - - Books are optionally filtered with a test function. - - """ - - books_by_parent = {} - books = cls.objects.all().order_by('parent_number', 'sort_key').only( - 'title', 'parent', 'slug') - if filter: - books = books.filter(filter).distinct() - - book_ids = set(b['pk'] for b in books.values("pk").iterator()) - for book in books.iterator(): - parent = book.parent_id - if parent not in book_ids: - parent = None - books_by_parent.setdefault(parent, []).append(book) - else: - for book in books.iterator(): - books_by_parent.setdefault(book.parent_id, []).append(book) - - orphans = [] - books_by_author = OrderedDict() - for tag in Tag.objects.filter(category='author').iterator(): - books_by_author[tag] = [] - - for book in books_by_parent.get(None, ()): - authors = list(book.tags.filter(category='author')) - if authors: - for author in authors: - books_by_author[author].append(book) - else: - orphans.append(book) - - return books_by_author, orphans, books_by_parent - - _audiences_pl = { - "SP": (1, u"szkoła podstawowa"), - "SP1": (1, u"szkoła podstawowa"), - "SP2": (1, u"szkoła podstawowa"), - "P": (1, u"szkoła podstawowa"), - "G": (2, u"gimnazjum"), - "L": (3, u"liceum"), - "LP": (3, u"liceum"), - } - def audiences_pl(self): - audiences = self.extra_info.get('audiences', []) - audiences = sorted(set([self._audiences_pl.get(a, (99, a)) for a in audiences])) - return [a[1] for a in audiences] - - def stage_note(self): - stage = self.extra_info.get('stage') - if stage and stage < '0.4': - return (_('This work needs modernisation'), - reverse('infopage', args=['wymagajace-uwspolczesnienia'])) - else: - return None, None - - def choose_fragment(self): - fragments = self.fragments.order_by() - fragments_count = fragments.count() - if not fragments_count and self.children.exists(): - fragments = Fragment.objects.filter(book__ancestor=self).order_by() - fragments_count = fragments.count() - if fragments_count: - return fragments[randint(0, fragments_count - 1)] - elif self.parent: - return self.parent.choose_fragment() - else: - return None - - -# add the file fields -for format_ in Book.formats: - field_name = "%s_file" % format_ - # This weird globals() assignment makes Django migrations comfortable. - _upload_to = _ebook_upload_to('book/%s/%%s.%s' % (format_, format_)) - _upload_to.__name__ = '_%s_upload_to' % format_ - globals()[_upload_to.__name__] = _upload_to - - EbookField(format_, _("%s file" % format_.upper()), - upload_to=_upload_to, - storage=bofh_storage, - max_length=255, - blank=True, - default='' - ).contribute_to_class(Book, field_name) diff --git a/apps/catalogue/models/bookmedia.py b/apps/catalogue/models/bookmedia.py deleted file mode 100644 index 1ef3fd7b9..000000000 --- a/apps/catalogue/models/bookmedia.py +++ /dev/null @@ -1,134 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from collections import OrderedDict -import json -from collections import namedtuple -from django.db import models -from django.utils.translation import ugettext_lazy as _ -import jsonfield -from fnpdjango.utils.text.slughifi import slughifi -from catalogue.fields import OverwritingFileField - - -def _file_upload_to(i, _n): - return 'book/%(ext)s/%(name)s.%(ext)s' % { - 'ext': i.ext(), 'name': slughifi(i.name)} - -class BookMedia(models.Model): - """Represents media attached to a book.""" - FileFormat = namedtuple("FileFormat", "name ext") - formats = OrderedDict([ - ('mp3', FileFormat(name='MP3', ext='mp3')), - ('ogg', FileFormat(name='Ogg Vorbis', ext='ogg')), - ('daisy', FileFormat(name='DAISY', ext='daisy.zip')), - ]) - format_choices = [(k, _('%s file' % t.name)) - for k, t in formats.items()] - - type = models.CharField(_('type'), db_index=True, choices=format_choices, max_length=20) - name = models.CharField(_('name'), max_length=512) - file = OverwritingFileField(_('file'), max_length=600, - upload_to=_file_upload_to) - uploaded_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False, db_index=True) - extra_info = jsonfield.JSONField(_('extra information'), default={}, editable=False) - book = models.ForeignKey('Book', related_name='media') - source_sha1 = models.CharField(null=True, blank=True, max_length=40, editable=False) - - def __unicode__(self): - return "%s (%s)" % (self.name, self.file.name.split("/")[-1]) - - class Meta: - ordering = ('type', 'name') - verbose_name = _('book media') - verbose_name_plural = _('book media') - app_label = 'catalogue' - - def save(self, *args, **kwargs): - from catalogue.utils import ExistingFile, remove_zip - - try: - old = BookMedia.objects.get(pk=self.pk) - except BookMedia.DoesNotExist: - old = None - else: - # if name changed, change the file name, too - if slughifi(self.name) != slughifi(old.name): - self.file.save(None, ExistingFile(self.file.path), save=False, leave=True) - - super(BookMedia, self).save(*args, **kwargs) - - # remove the zip package for book with modified media - if old: - remove_zip("%s_%s" % (old.book.slug, old.type)) - remove_zip("%s_%s" % (self.book.slug, self.type)) - - extra_info = self.extra_info - if isinstance(extra_info, basestring): - # Walkaround for weird jsonfield 'no-decode' optimization. - extra_info = json.loads(extra_info) - extra_info.update(self.read_meta()) - self.extra_info = extra_info - self.source_sha1 = self.read_source_sha1(self.file.path, self.type) - return super(BookMedia, self).save(*args, **kwargs) - - def read_meta(self): - """ - Reads some metadata from the audiobook. - """ - import mutagen - from mutagen import id3 - - artist_name = director_name = project = funded_by = '' - if self.type == 'mp3': - try: - audio = id3.ID3(self.file.path) - artist_name = ', '.join(', '.join(tag.text) for tag in audio.getall('TPE1')) - director_name = ', '.join(', '.join(tag.text) for tag in audio.getall('TPE3')) - project = ", ".join([t.data for t in audio.getall('PRIV') - if t.owner == 'wolnelektury.pl?project']) - funded_by = ", ".join([t.data for t in audio.getall('PRIV') - if t.owner == 'wolnelektury.pl?funded_by']) - except: - pass - elif self.type == 'ogg': - try: - audio = mutagen.File(self.file.path) - artist_name = ', '.join(audio.get('artist', [])) - director_name = ', '.join(audio.get('conductor', [])) - project = ", ".join(audio.get('project', [])) - funded_by = ", ".join(audio.get('funded_by', [])) - except: - pass - else: - return {} - return {'artist_name': artist_name, 'director_name': director_name, - 'project': project, 'funded_by': funded_by} - - def ext(self): - return self.formats[self.type].ext - - @staticmethod - def read_source_sha1(filepath, filetype): - """ - Reads source file SHA1 from audiobok metadata. - """ - import mutagen - from mutagen import id3 - - if filetype == 'mp3': - try: - audio = id3.ID3(filepath) - return [t.data for t in audio.getall('PRIV') - if t.owner == 'wolnelektury.pl?flac_sha1'][0] - except: - return None - elif filetype == 'ogg': - try: - audio = mutagen.File(filepath) - return audio.get('flac_sha1', [None])[0] - except: - return None - else: - return None diff --git a/apps/catalogue/models/collection.py b/apps/catalogue/models/collection.py deleted file mode 100644 index 098501eba..000000000 --- a/apps/catalogue/models/collection.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django.db import models -from django.utils.translation import ugettext_lazy as _ -from ssify import flush_ssi_includes - - -class Collection(models.Model): - """A collection of books, which might be defined before publishing them.""" - title = models.CharField(_('title'), max_length=120, db_index=True) - slug = models.SlugField(_('slug'), max_length=120, primary_key=True) - description = models.TextField(_('description'), null=True, blank=True) - - models.SlugField(_('slug'), max_length=120, unique=True, db_index=True) - book_slugs = models.TextField(_('book slugs')) - - kind = models.CharField(_('kind'), max_length=10, blank=False, default='book', db_index=True, choices=((('book'), _('book')), (('picture'), ('picture')))) - - class Meta: - ordering = ('title',) - verbose_name = _('collection') - verbose_name_plural = _('collections') - app_label = 'catalogue' - - def __unicode__(self): - return self.title - - @models.permalink - def get_absolute_url(self): - return ("collection", [self.slug]) - - def get_query(self): - slugs = self.book_slugs.split() - # allow URIs - slugs = [slug.rstrip('/').rsplit('/', 1)[-1] if '/' in slug else slug - for slug in slugs] - return models.Q(slug__in=slugs) - - def flush_includes(self, languages=True): - if not languages: - return - if languages is True: - languages = [lc for (lc, _ln) in settings.LANGUAGES] - - flush_ssi_includes([ - '/katalog/%s.json' % lang for lang in languages]) diff --git a/apps/catalogue/models/fragment.py b/apps/catalogue/models/fragment.py deleted file mode 100644 index a3dbdea54..000000000 --- a/apps/catalogue/models/fragment.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django.contrib.contenttypes.fields import GenericRelation -from django.core.urlresolvers import reverse -from django.db import models -from django.utils.translation import ugettext_lazy as _ -from newtagging import managers -from catalogue.models import Tag -from ssify import flush_ssi_includes - - -class Fragment(models.Model): - """Represents a themed fragment of a book.""" - text = models.TextField() - short_text = models.TextField(editable=False) - anchor = models.CharField(max_length=120) - book = models.ForeignKey('Book', related_name='fragments') - - objects = models.Manager() - tagged = managers.ModelTaggedItemManager(Tag) - tags = managers.TagDescriptor(Tag) - tag_relations = GenericRelation(Tag.intermediary_table_model) - - short_html_url_name = 'catalogue_fragment_short' - - class Meta: - ordering = ('book', 'anchor',) - verbose_name = _('fragment') - verbose_name_plural = _('fragments') - app_label = 'catalogue' - - def get_absolute_url(self): - return '%s#m%s' % (reverse('book_text', args=[self.book.slug]), self.anchor) - - def get_short_text(self): - """Returns short version of the fragment.""" - return self.short_text if self.short_text else self.text - - def flush_includes(self, languages=True): - if not languages: - return - if languages is True: - languages = [lc for (lc, _ln) in settings.LANGUAGES] - flush_ssi_includes([ - template % (self.pk, lang) - for template in [ - '/katalog/f/%d/short.%s.html', - '/api/include/fragment/%d.%s.json', - '/api/include/fragment/%d.%s.xml', - ] - for lang in languages - ]) diff --git a/apps/catalogue/models/source.py b/apps/catalogue/models/source.py deleted file mode 100644 index 9aff4efec..000000000 --- a/apps/catalogue/models/source.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.db import models -from django.utils.translation import ugettext_lazy as _ - - -class Source(models.Model): - """A collection of books, which might be defined before publishing them.""" - netloc = models.CharField(_('network location'), max_length=120, primary_key=True) - name = models.CharField(_('name'), max_length=120, blank=True) - - class Meta: - ordering = ('netloc',) - verbose_name = _('source') - verbose_name_plural = _('sources') - app_label = 'catalogue' - - def __unicode__(self): - return self.netloc - - def save(self, *args, **kwargs): - from catalogue.models import Book - try: - str(self.pk) - old_self = type(self).objects.get(pk=self) - except type(self).DoesNotExist: - old_name = u'' - old_netloc = self.netloc - else: - old_name = old_self.name - old_netloc = old_self.netloc - - ret = super(Source, self).save(*args, **kwargs) - - # If something really changed here, find relevant books - # and invalidate their cached includes. - if old_name != self.name or old_netloc != self.netloc: - for book in Book.objects.all(): - source = book.extra_info.get('source_url', '') - if self.netloc in source or (old_netloc != self.netloc - and old_netloc in source): - book.flush_includes() - return ret diff --git a/apps/catalogue/models/tag.py b/apps/catalogue/models/tag.py deleted file mode 100644 index 02bf6c07d..000000000 --- a/apps/catalogue/models/tag.py +++ /dev/null @@ -1,233 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django.core.cache import caches -from django.contrib.auth.models import User -from django.db import models -from django.db.models import permalink -from django.dispatch import Signal -from django.utils.translation import ugettext_lazy as _ -from newtagging.models import TagBase -from ssify import flush_ssi_includes - - -# Those are hard-coded here so that makemessages sees them. -TAG_CATEGORIES = ( - ('author', _('author')), - ('epoch', _('epoch')), - ('kind', _('kind')), - ('genre', _('genre')), - ('theme', _('theme')), - ('set', _('set')), - ('thing', _('thing')), # things shown on pictures -) - - -class Tag(TagBase): - """A tag attachable to books and fragments (and possibly anything). - - Used to represent searchable metadata (authors, epochs, genres, kinds), - fragment themes (motifs) and some book hierarchy related kludges.""" - name = models.CharField(_('name'), max_length=120, db_index=True) - slug = models.SlugField(_('slug'), max_length=120, db_index=True) - sort_key = models.CharField(_('sort key'), max_length=120, db_index=True) - category = models.CharField(_('category'), max_length=50, blank=False, null=False, - db_index=True, choices=TAG_CATEGORIES) - description = models.TextField(_('description'), blank=True) - - user = models.ForeignKey(User, blank=True, null=True) - gazeta_link = models.CharField(blank=True, max_length=240) - culturepl_link = models.CharField(blank=True, max_length=240) - wiki_link = models.CharField(blank=True, max_length=240) - - created_at = models.DateTimeField(_('creation date'), auto_now_add=True, db_index=True) - changed_at = models.DateTimeField(_('creation date'), auto_now=True, db_index=True) - - after_change = Signal(providing_args=['instance', 'languages']) - - class UrlDeprecationWarning(DeprecationWarning): - pass - - categories_rev = { - 'autor': 'author', - 'epoka': 'epoch', - 'rodzaj': 'kind', - 'gatunek': 'genre', - 'motyw': 'theme', - 'polka': 'set', - 'obiekt': 'thing', - } - categories_dict = dict((item[::-1] for item in categories_rev.iteritems())) - - class Meta: - ordering = ('sort_key',) - verbose_name = _('tag') - verbose_name_plural = _('tags') - unique_together = (("slug", "category"),) - app_label = 'catalogue' - - def save(self, *args, **kwargs): - flush_cache = flush_all_includes = False - if self.pk and self.category != 'set': - # Flush the whole views cache. - # Seem a little harsh, but changed tag names, descriptions - # and links come up at any number of places. - flush_cache = True - - # Find in which languages we need to flush related includes. - old_self = type(self).objects.get(pk=self.pk) - # Category shouldn't normally be changed, but just in case. - if self.category != old_self.category: - flush_all_includes = True - languages_changed = self.languages_changed(old_self) - - ret = super(Tag, self).save(*args, **kwargs) - - if flush_cache: - caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() - if flush_all_includes: - flush_ssi_includes() - else: - self.flush_includes() - self.after_change.send(sender=type(self), instance=self, languages=languages_changed) - - return ret - - def languages_changed(self, old): - all_langs = [lc for (lc, _ln) in settings.LANGUAGES] - if (old.category, old.slug) != (self.category, self.slug): - return all_langs - languages = set() - for lang in all_langs: - name_field = 'name_%s' % lang - if getattr(old, name_field) != getattr(self, name_field): - languages.add(lang) - return languages - - def flush_includes(self, languages=True): - if not languages: - return - if languages is True: - languages = [lc for (lc, _ln) in settings.LANGUAGES] - flush_ssi_includes([ - template % (self.pk, lang) - for template in [ - '/api/include/tag/%d.%s.json', - '/api/include/tag/%d.%s.xml', - ] - for lang in languages - ]) - flush_ssi_includes([ - '/katalog/%s.json' % lang for lang in languages]) - - def __unicode__(self): - return self.name - - def __repr__(self): - return "Tag(slug=%r)" % self.slug - - @permalink - def get_absolute_url(self): - return ('catalogue.views.tagged_object_list', [self.url_chunk]) - - @classmethod - @permalink - def create_url(cls, category, slug): - return ('catalogue.views.tagged_object_list', [ - '/'.join((cls.categories_dict[category], slug)) - ]) - - def has_description(self): - return len(self.description) > 0 - has_description.short_description = _('description') - has_description.boolean = True - - @staticmethod - def get_tag_list(tags): - if isinstance(tags, basestring): - real_tags = [] - ambiguous_slugs = [] - category = None - deprecated = False - tags_splitted = tags.split('/') - for name in tags_splitted: - if category: - real_tags.append(Tag.objects.get(slug=name, category=category)) - category = None - elif name in Tag.categories_rev: - category = Tag.categories_rev[name] - else: - try: - real_tags.append(Tag.objects.get(slug=name)) - deprecated = True - except Tag.MultipleObjectsReturned, e: - ambiguous_slugs.append(name) - - if category: - # something strange left off - raise Tag.DoesNotExist() - if ambiguous_slugs: - # some tags should be qualified - e = Tag.MultipleObjectsReturned() - e.tags = real_tags - e.ambiguous_slugs = ambiguous_slugs - raise e - if deprecated: - e = Tag.UrlDeprecationWarning() - e.tags = real_tags - raise e - return real_tags - else: - return TagBase.get_tag_list(tags) - - @property - def url_chunk(self): - return '/'.join((Tag.categories_dict[self.category], self.slug)) - - @staticmethod - def tags_from_info(info): - from fnpdjango.utils.text.slughifi import slughifi - from sortify import sortify - meta_tags = [] - categories = (('kinds', 'kind'), ('genres', 'genre'), ('authors', 'author'), ('epochs', 'epoch')) - for field_name, category in categories: - try: - tag_names = getattr(info, field_name) - except: - try: - tag_names = [getattr(info, category)] - except: - # For instance, Pictures do not have 'genre' field. - continue - for tag_name in tag_names: - lang = getattr(tag_name, 'lang', settings.LANGUAGE_CODE) - tag_sort_key = tag_name - if category == 'author': - tag_sort_key = tag_name.last_name - tag_name = tag_name.readable() - if lang == settings.LANGUAGE_CODE: - # Allow creating new tag, if it's in default language. - tag, created = Tag.objects.get_or_create(slug=slughifi(tag_name), category=category) - if created: - tag_name = unicode(tag_name) - tag.name = tag_name - setattr(tag, "name_%s" % lang, tag_name) - tag.sort_key = sortify(tag_sort_key.lower()) - tag.save() - - meta_tags.append(tag) - else: - # Ignore unknown tags in non-default languages. - try: - tag = Tag.objects.get(category=category, **{"name_%s" % lang: tag_name}) - except Tag.DoesNotExist: - pass - else: - meta_tags.append(tag) - return meta_tags - - -# Pickle complains about not having this. -TagRelation = Tag.intermediary_table_model diff --git a/apps/catalogue/signals.py b/apps/catalogue/signals.py deleted file mode 100644 index 660d26493..000000000 --- a/apps/catalogue/signals.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django.core.cache import caches -from django.db.models.signals import post_save, post_delete -from django.dispatch import receiver -from ssify import flush_ssi_includes -from newtagging.models import tags_updated -from picture.models import Picture, PictureArea -from .models import BookMedia, Book, Collection, Fragment, Tag - - -#### -# BookMedia -#### - - -@receiver([post_save, post_delete], sender=BookMedia) -def bookmedia_save(sender, instance, **kwargs): - instance.book.save() - - -#### -# Collection -#### - - -@receiver(post_save, sender=Collection) -def collection_save(sender, instance, **kwargs): - caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() - flush_ssi_includes([ - '/katalog/%s.json' % lang - for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) - - -@receiver(post_delete, sender=Collection) -def collection_delete(sender, instance, **kwargs): - flush_ssi_includes([ - '/katalog/%s.json' % lang - for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) - -#### -# Book -#### - - -@receiver(post_save, sender=Book) -def book_save(sender, instance, **kwargs): - # Books come out anywhere. - caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() - instance.flush_includes() - - -@receiver(post_delete, sender=Book) -def book_delete(sender, instance, **kwargs): - caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() - flush_ssi_includes([ - '/katalog/%s.json' % lang - for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) - - if not settings.NO_SEARCH_INDEX: - # remove the book from search index, when it is deleted. - from search.index import Index - idx = Index() - idx.remove_book(instance) - idx.index_tags() - - -#### -# Tag -#### - - -@receiver(Tag.after_change) -def tag_after_change(sender, instance, languages, **kwargs): - caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() - flush_ssi_includes([ - '/katalog/%s.json' % lang - for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) - - for model in Book, Picture: - for model_instance in model.tagged.with_all([instance]).only('pk'): - model_instance.flush_includes() - - if instance.category == 'author': - for model in Fragment, PictureArea: - for model_instance in model.tagged.with_all([instance]).only('pk'): - model_instance.flush_includes() - - -@receiver(tags_updated) -def receive_tags_updated(sender, instance, affected_tags, **kwargs): - categories = set(tag.category for tag in affected_tags - if tag.category not in ('set', 'book')) - if not categories: - return - - caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() - instance.flush_includes() - flush_ssi_includes([ - '/katalog/%s.json' % lang - for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) diff --git a/apps/catalogue/static/jplayer/Jplayer.swf b/apps/catalogue/static/jplayer/Jplayer.swf deleted file mode 100644 index 85c0ba38e..000000000 Binary files a/apps/catalogue/static/jplayer/Jplayer.swf and /dev/null differ diff --git a/apps/catalogue/static/jplayer/jplayer.blue.monday.css b/apps/catalogue/static/jplayer/jplayer.blue.monday.css deleted file mode 100644 index f8b314b6e..000000000 --- a/apps/catalogue/static/jplayer/jplayer.blue.monday.css +++ /dev/null @@ -1,627 +0,0 @@ -/* - * Skin for jPlayer Plugin (jQuery JavaScript Library) - * http://www.happyworm.com/jquery/jplayer - * - * Skin Name: Blue Monday - * - * Copyright (c) 2010-2011 Happyworm Ltd - * Dual licensed under the MIT and GPL licenses. - * - http://www.opensource.org/licenses/mit-license.php - * - http://www.gnu.org/copyleft/gpl.html - * - * Author: Silvia Benvenuti - * Skin Version: 4.0 (jPlayer 2.1.0) - * Date: 1st September 2011 - */ - -div.jp-audio, -div.jp-video { - - /* Edit the font-size to counteract inherited font sizing. - * Eg. 1.25em = 1 / 0.8em - */ - - font-size:1.25em; /* 1.25em for testing in site pages */ /* No parent CSS that can effect the size in the demos ZIP */ - - font-family:Verdana, Arial, sans-serif; - line-height:1.6; - color: #565656; - border:1px solid #009be3; - background-color:#eee; - position:relative; -} -div.jp-audio { - width:420px; -} -div.jp-video-270p { - width:480px; -} -div.jp-video-360p { - width:640px; -} -div.jp-video-full { - /* Rules for IE6 (full-screen) */ - width:480px; - height:270px; - /* Rules for IE7 (full-screen) - Otherwise the relative container causes other page items that are not position:static (default) to appear over the video/gui. */ - position:static !important; position:relative -} - -div.jp-video-full div.jp-jplayer { - top: 0; - left: 0; - position: fixed !important; position: relative; /* Rules for IE6 (full-screen) */ - overflow: hidden; - z-index:1000; -} - -div.jp-video-full div.jp-gui { - position: fixed !important; position: static; /* Rules for IE6 (full-screen) */ - top: 0; - left: 0; - width:100%; - height:100%; - z-index:1000; -} - -div.jp-video-full div.jp-interface { - position: absolute !important; position: relative; /* Rules for IE6 (full-screen) */ - bottom: 0; - left: 0; - z-index:1000; -} - -div.jp-interface { - position: relative; - background-color:#eee; - width:100%; -} - -div.jp-interface a { - color: #0c767d; -} - -div.jp-audio div.jp-type-single div.jp-interface { - height:80px; -} -div.jp-audio div.jp-type-playlist div.jp-interface { - height:80px; -} - -div.jp-video div.jp-interface { - border-top:1px solid #009be3; -} - -/* @group CONTROLS */ - -div.jp-controls-holder { - clear: both; - width:440px; - margin:0 auto; - position: relative; - overflow:hidden; - top:-8px; /* This negative value depends on the size of the text in jp-currentTime and jp-duration */ -} - -div.jp-interface ul.jp-controls { - list-style-type:none; - margin:0; - padding: 0; - overflow:hidden; -} - -div.jp-audio ul.jp-controls { - width: 380px; - padding:20px 20px 0 20px; -} - -div.jp-video div.jp-type-single ul.jp-controls { - width: 78px; - margin-left: 200px; -} - -div.jp-video div.jp-type-playlist ul.jp-controls { - width: 134px; - margin-left: 172px; -} -div.jp-video ul.jp-controls, -div.jp-interface ul.jp-controls li { - display:inline; - float: left; -} - -div.jp-interface ul.jp-controls a { - display:block; - overflow:hidden; - text-indent:-9999px; -} -a.jp-play, -a.jp-pause { - width:40px; - height:40px; -} - -a.jp-play { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 0 no-repeat; -} -a.jp-play:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -41px 0 no-repeat; -} -a.jp-pause { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -42px no-repeat; - display: none; -} -a.jp-pause:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -41px -42px no-repeat; -} - -a.jp-stop, a.jp-previous, a.jp-next { - width:28px; - height:28px; - margin-top:6px; -} - -a.jp-stop { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -83px no-repeat; - margin-left:10px; -} - -a.jp-stop:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -29px -83px no-repeat; -} - -a.jp-previous { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -112px no-repeat; -} -a.jp-previous:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -29px -112px no-repeat; -} - -a.jp-next { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -141px no-repeat; -} -a.jp-next:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -29px -141px no-repeat; -} - -/* @end */ - -/* @group progress bar */ - -div.jp-progress { - overflow:hidden; - background-color: #ddd; -} -div.jp-audio div.jp-progress { - position: absolute; - top:32px; - height:15px; -} -div.jp-audio div.jp-type-single div.jp-progress { - left:110px; - width:186px; -} -div.jp-audio div.jp-type-playlist div.jp-progress { - left:166px; - width:130px; -} -div.jp-video div.jp-progress { - top:0px; - left:0px; - width:100%; - height:10px; -} -div.jp-seek-bar { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -202px repeat-x; - width:0px; - height:100%; - cursor: pointer; -} -div.jp-play-bar { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -218px repeat-x ; - width:0px; - height:100%; -} - -/* The seeking class is added/removed inside jPlayer */ -div.jp-seeking-bg { - background: url("/static/jplayer/jplayer.blue.monday.seeking.gif"); -} - -/* @end */ - -/* @group volume controls */ - - -a.jp-mute, -a.jp-unmute, -a.jp-volume-max { - width:18px; - height:15px; - margin-top:12px; -} - -div.jp-audio div.jp-type-single a.jp-mute, -div.jp-audio div.jp-type-single a.jp-unmute { - margin-left: 210px; -} - -div.jp-audio div.jp-type-playlist a.jp-mute, -div.jp-audio div.jp-type-playlist a.jp-unmute { - margin-left: 154px; -} - -div.jp-audio a.jp-volume-max { - margin-left: 56px; -} - -div.jp-video a.jp-mute, -div.jp-video a.jp-unmute, -div.jp-video a.jp-volume-max { - position: absolute; - top:12px; - margin-top:0; -} - -div.jp-video a.jp-mute, -div.jp-video a.jp-unmute { - left: 50px; -} - -div.jp-video a.jp-volume-max { - left: 134px; -} - -a.jp-mute { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -170px no-repeat; -} -a.jp-mute:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -19px -170px no-repeat; -} -a.jp-unmute { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -60px -170px no-repeat; - display: none; -} -a.jp-unmute:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -79px -170px no-repeat; -} - a.jp-volume-max { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -186px no-repeat; -} -a.jp-volume-max:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -19px -186px no-repeat; -} - -div.jp-volume-bar { - position: absolute; - overflow:hidden; - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -250px repeat-x; - width:46px; - height:5px; - cursor: pointer; -} -div.jp-audio div.jp-volume-bar { - top:37px; - left:330px; -} -div.jp-video div.jp-volume-bar { - top:17px; - left:72px; -} -div.jp-volume-bar-value { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -256px repeat-x; - width:0px; - height:5px; -} - -/* @end */ - -/* @group current time and duration */ - -div.jp-audio div.jp-time-holder { - position:absolute; - top:50px; -} -div.jp-audio div.jp-type-single div.jp-time-holder { - left:110px; - width:186px; -} -div.jp-audio div.jp-type-playlist div.jp-time-holder { - left:166px; - width:130px; -} - -div.jp-current-time, -div.jp-duration { - width:60px; - font-size:.64em; - font-style:oblique; -} -div.jp-current-time { - float: left; - display:inline; -} -div.jp-duration { - float: right; - display:inline; - text-align: right; -} - -div.jp-video div.jp-current-time { - margin-left:20px; -} -div.jp-video div.jp-duration { - margin-right:20px; -} - -/* @end */ - -/* @group playlist */ - -div.jp-title { - font-weight:bold; - text-align:center; -} - -div.jp-title, -div.jp-playlist { - width:100%; - background-color:#ccc; - border-top:1px solid #009be3; -} -div.jp-type-single div.jp-title, -div.jp-type-playlist div.jp-title, -div.jp-type-single div.jp-playlist { - border-top:none; -} -div.jp-title ul, -div.jp-playlist ul { - list-style-type:none; - margin:0; - padding:0 20px; - font-size:.8em; -} - -div.jp-title li { - padding:5px 0; - font-weight:bold; -} -div.jp-playlist li { - padding:5px 0 4px 20px; - border-bottom:1px solid #eee; -} - -div.jp-playlist li div { - display:inline; -} - -/* Note that the first-child (IE6) and last-child (IE6/7/8) selectors do not work on IE */ - -div.jp-type-playlist div.jp-playlist li:last-child { - padding:5px 0 5px 20px; - border-bottom:none; -} -div.jp-type-playlist div.jp-playlist li.jp-playlist-current { - list-style-type:square; - list-style-position:inside; - padding-left:7px; -} -div.jp-type-playlist div.jp-playlist a { - color: #333; - text-decoration: none; -} -div.jp-type-playlist div.jp-playlist a:hover { - color:#0D7E85; -} -div.jp-type-playlist div.jp-playlist a.jp-playlist-current { - color:#0D7E85; -} - -div.jp-type-playlist div.jp-playlist a.jp-playlist-item-remove { - float:right; - display:inline; - text-align:right; - margin-right:10px; - font-weight:bold; - color:#666; -} -div.jp-type-playlist div.jp-playlist a.jp-playlist-item-remove:hover { - color:#0D7E85; -} -div.jp-type-playlist div.jp-playlist span.jp-free-media { - float:right; - display:inline; - text-align:right; - margin-right:10px; -} -div.jp-type-playlist div.jp-playlist span.jp-free-media a{ - color:#565656; -} -div.jp-type-playlist div.jp-playlist span.jp-free-media a:hover{ - color:#0D7E85; -} -span.jp-artist { - font-size:.8em; - color:#565656; -} - -/* @end */ - -div.jp-video-play { - position:absolute; - top:0; - left:0; - width:100%; - cursor:pointer; - background-color:rgba(0,0,0,0); /* Makes IE9 work with the active area over the whole video area. IE6/7/8 only have the button as active area. */ -} -div.jp-video-270p div.jp-video-play { - height:270px; -} -div.jp-video-360p div.jp-video-play { - height:360px; -} -div.jp-video-full div.jp-video-play { - height:100%; - z-index:1000; -} -a.jp-video-play-icon { - position:relative; - display:block; - width: 112px; - height: 100px; - - margin-left:-56px; - margin-top:-50px; - left:50%; - top:50%; - - background: url("/static/jplayer/jplayer.blue.monday.video.play.png") 0 0 no-repeat; - text-indent:-9999px; -} -div.jp-video-play:hover a.jp-video-play-icon { - background: url("/static/jplayer/jplayer.blue.monday.video.play.png") 0 -100px no-repeat; -} - - - - - -div.jp-jplayer audio, -div.jp-jplayer { - width:0px; - height:0px; -} - -div.jp-jplayer { - background-color: #000000; -} - - - - - -/* @group TOGGLES */ - -/* The audio toggles are nested inside jp-time-holder */ - -ul.jp-toggles { - list-style-type:none; - padding:0; - margin:0 auto; - overflow:hidden; -} - -div.jp-audio .jp-type-single ul.jp-toggles { - width:25px; -} -div.jp-audio .jp-type-playlist ul.jp-toggles { - width:55px; - margin: 0; - position: absolute; - left: 325px; - top: 50px; -} - -div.jp-video ul.jp-toggles { - margin-top:10px; - width:100px; -} - -ul.jp-toggles li { - display:block; - float:right; -} - -ul.jp-toggles li a { - display:block; - width:25px; - height:18px; - text-indent:-9999px; - line-height:100%; /* need this for IE6 */ -} - -a.jp-full-screen { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -310px no-repeat; - margin-left: 20px; -} - -a.jp-full-screen:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -30px -310px no-repeat; -} - -a.jp-restore-screen { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -60px -310px no-repeat; - margin-left: 20px; -} - -a.jp-restore-screen:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -90px -310px no-repeat; -} - -a.jp-repeat { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -290px no-repeat; -} - -a.jp-repeat:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -30px -290px no-repeat; -} - -a.jp-repeat-off { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -60px -290px no-repeat; -} - -a.jp-repeat-off:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -90px -290px no-repeat; -} - -a.jp-shuffle { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -270px no-repeat; - margin-left: 5px; -} - -a.jp-shuffle:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -30px -270px no-repeat; -} - -a.jp-shuffle-off { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -60px -270px no-repeat; - margin-left: 5px; -} - -a.jp-shuffle-off:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -90px -270px no-repeat; -} - - -/* @end */ - -/* @group NO SOLUTION error feedback */ - -.jp-no-solution { - position:absolute; - width:390px; - margin-left:-202px; - left:50%; - top: 10px; - - padding:5px; - font-size:.8em; - background-color:#eee; - border:2px solid #009be3; - color:#000; - display:none; -} - -.jp-no-solution a { - color:#000; -} - -.jp-no-solution span { - font-size:1em; - display:block; - text-align:center; - font-weight:bold; -} - -/* @end */ diff --git a/apps/catalogue/static/jplayer/jplayer.blue.monday.jpg b/apps/catalogue/static/jplayer/jplayer.blue.monday.jpg deleted file mode 100644 index adab53ff7..000000000 Binary files a/apps/catalogue/static/jplayer/jplayer.blue.monday.jpg and /dev/null differ diff --git a/apps/catalogue/static/jplayer/jplayer.blue.monday.seeking.gif b/apps/catalogue/static/jplayer/jplayer.blue.monday.seeking.gif deleted file mode 100644 index dbd2105ab..000000000 Binary files a/apps/catalogue/static/jplayer/jplayer.blue.monday.seeking.gif and /dev/null differ diff --git a/apps/catalogue/static/jplayer/jplayer.blue.monday.video.play.png b/apps/catalogue/static/jplayer/jplayer.blue.monday.video.play.png deleted file mode 100644 index 8e97df011..000000000 Binary files a/apps/catalogue/static/jplayer/jplayer.blue.monday.video.play.png and /dev/null differ diff --git a/apps/catalogue/static/jplayer/jplayer.playlist.min.js b/apps/catalogue/static/jplayer/jplayer.playlist.min.js deleted file mode 100644 index 138ccfa5e..000000000 --- a/apps/catalogue/static/jplayer/jplayer.playlist.min.js +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Playlist Object for the jPlayer Plugin - * http://www.jplayer.org - * - * Copyright (c) 2009 - 2013 Happyworm Ltd - * Dual licensed under the MIT and GPL licenses. - * - http://www.opensource.org/licenses/mit-license.php - * - http://www.gnu.org/copyleft/gpl.html - * - * Author: Mark J Panaghiston - * Version: 2.3.0 - * Date: 20th April 2013 - * - * Requires: - * - jQuery 1.7.0+ - * - jPlayer 2.3.0+ - */ -(function(b,f){jPlayerPlaylist=function(a,c,d){var e=this;this.current=0;this.removing=this.shuffled=this.loop=!1;this.cssSelector=b.extend({},this._cssSelector,a);this.options=b.extend(!0,{keyBindings:{next:{key:39,fn:function(){e.next()}},previous:{key:37,fn:function(){e.previous()}}}},this._options,d);this.playlist=[];this.original=[];this._initPlaylist(c);this.cssSelector.title=this.cssSelector.cssSelectorAncestor+" .jp-title";this.cssSelector.playlist=this.cssSelector.cssSelectorAncestor+" .jp-playlist"; -this.cssSelector.next=this.cssSelector.cssSelectorAncestor+" .jp-next";this.cssSelector.previous=this.cssSelector.cssSelectorAncestor+" .jp-previous";this.cssSelector.shuffle=this.cssSelector.cssSelectorAncestor+" .jp-shuffle";this.cssSelector.shuffleOff=this.cssSelector.cssSelectorAncestor+" .jp-shuffle-off";this.options.cssSelectorAncestor=this.cssSelector.cssSelectorAncestor;this.options.repeat=function(a){e.loop=a.jPlayer.options.loop};b(this.cssSelector.jPlayer).bind(b.jPlayer.event.ready,function(){e._init()}); -b(this.cssSelector.jPlayer).bind(b.jPlayer.event.ended,function(){e.next()});b(this.cssSelector.jPlayer).bind(b.jPlayer.event.play,function(){b(this).jPlayer("pauseOthers")});b(this.cssSelector.jPlayer).bind(b.jPlayer.event.resize,function(a){a.jPlayer.options.fullScreen?b(e.cssSelector.title).show():b(e.cssSelector.title).hide()});b(this.cssSelector.previous).click(function(){e.previous();b(this).blur();return!1});b(this.cssSelector.next).click(function(){e.next();b(this).blur();return!1});b(this.cssSelector.shuffle).click(function(){e.shuffle(!0); -return!1});b(this.cssSelector.shuffleOff).click(function(){e.shuffle(!1);return!1}).hide();this.options.fullScreen||b(this.cssSelector.title).hide();b(this.cssSelector.playlist+" ul").empty();this._createItemHandlers();b(this.cssSelector.jPlayer).jPlayer(this.options)};jPlayerPlaylist.prototype={_cssSelector:{jPlayer:"#jquery_jplayer_1",cssSelectorAncestor:"#jp_container_1"},_options:{playlistOptions:{autoPlay:!1,loopOnPrevious:!1,shuffleOnLoop:!0,enableRemoveControls:!1,displayTime:"slow",addTime:"fast", -removeTime:"fast",shuffleTime:"slow",itemClass:"jp-playlist-item",freeGroupClass:"jp-free-media",freeItemClass:"jp-playlist-item-free",removeItemClass:"jp-playlist-item-remove"}},option:function(a,b){if(b===f)return this.options.playlistOptions[a];this.options.playlistOptions[a]=b;switch(a){case "enableRemoveControls":this._updateControls();break;case "itemClass":case "freeGroupClass":case "freeItemClass":case "removeItemClass":this._refresh(!0),this._createItemHandlers()}return this},_init:function(){var a= -this;this._refresh(function(){a.options.playlistOptions.autoPlay?a.play(a.current):a.select(a.current)})},_initPlaylist:function(a){this.current=0;this.removing=this.shuffled=!1;this.original=b.extend(!0,[],a);this._originalPlaylist()},_originalPlaylist:function(){var a=this;this.playlist=[];b.each(this.original,function(b){a.playlist[b]=a.original[b]})},_refresh:function(a){var c=this;if(a&&!b.isFunction(a))b(this.cssSelector.playlist+" ul").empty(),b.each(this.playlist,function(a){b(c.cssSelector.playlist+ -" ul").append(c._createListItem(c.playlist[a]))}),this._updateControls();else{var d=b(this.cssSelector.playlist+" ul").children().length?this.options.playlistOptions.displayTime:0;b(this.cssSelector.playlist+" ul").slideUp(d,function(){var d=b(this);b(this).empty();b.each(c.playlist,function(a){d.append(c._createListItem(c.playlist[a]))});c._updateControls();b.isFunction(a)&&a();c.playlist.length?b(this).slideDown(c.options.playlistOptions.displayTime):b(this).show()})}},_createListItem:function(a){var c= -this,d="
  • ",d=d+("×");if(a.free){var e=!0,d=d+("(");b.each(a,function(a,f){b.jPlayer.prototype.format[a]&&(e?e=!1:d+=" | ",d+=""+a+"")});d+=")"}d+=""+a.title+(a.artist? -" ":"")+"";return d+="
  • "},_createItemHandlers:function(){var a=this;b(this.cssSelector.playlist).off("click","a."+this.options.playlistOptions.itemClass).on("click","a."+this.options.playlistOptions.itemClass,function(){var c=b(this).parent().parent().index();a.current!==c?a.play(c):b(a.cssSelector.jPlayer).jPlayer("play");b(this).blur();return!1});b(this.cssSelector.playlist).off("click","a."+this.options.playlistOptions.freeItemClass).on("click", -"a."+this.options.playlistOptions.freeItemClass,function(){b(this).parent().parent().find("."+a.options.playlistOptions.itemClass).click();b(this).blur();return!1});b(this.cssSelector.playlist).off("click","a."+this.options.playlistOptions.removeItemClass).on("click","a."+this.options.playlistOptions.removeItemClass,function(){var c=b(this).parent().parent().index();a.remove(c);b(this).blur();return!1})},_updateControls:function(){this.options.playlistOptions.enableRemoveControls?b(this.cssSelector.playlist+ -" ."+this.options.playlistOptions.removeItemClass).show():b(this.cssSelector.playlist+" ."+this.options.playlistOptions.removeItemClass).hide();this.shuffled?(b(this.cssSelector.shuffleOff).show(),b(this.cssSelector.shuffle).hide()):(b(this.cssSelector.shuffleOff).hide(),b(this.cssSelector.shuffle).show())},_highlight:function(a){this.playlist.length&&a!==f&&(b(this.cssSelector.playlist+" .jp-playlist-current").removeClass("jp-playlist-current"),b(this.cssSelector.playlist+" li:nth-child("+(a+1)+ -")").addClass("jp-playlist-current").find(".jp-playlist-item").addClass("jp-playlist-current"),b(this.cssSelector.title+" li").html(this.playlist[a].title+(this.playlist[a].artist?" ":"")))},setPlaylist:function(a){this._initPlaylist(a);this._init()},add:function(a,c){b(this.cssSelector.playlist+" ul").append(this._createListItem(a)).find("li:last-child").hide().slideDown(this.options.playlistOptions.addTime);this._updateControls();this.original.push(a); -this.playlist.push(a);c?this.play(this.playlist.length-1):1===this.original.length&&this.select(0)},remove:function(a){var c=this;if(a===f)return this._initPlaylist([]),this._refresh(function(){b(c.cssSelector.jPlayer).jPlayer("clearMedia")}),!0;if(this.removing)return!1;a=0>a?c.original.length+a:a;0<=a&&aa?this.original.length+a:a;0<=a&&aa?this.original.length+a:a;0<=a&&ab?"0"+b:b;a=this.options.timeFormat.padMin&&10>a?"0"+a:a;c=this.options.timeFormat.padSec&&10>c?"0"+c:c;b=""+(this.options.timeFormat.showHour?b+this.options.timeFormat.sepHour:"");b+=this.options.timeFormat.showMin?a+this.options.timeFormat.sepMin:"";return b+=this.options.timeFormat.showSec?c+this.options.timeFormat.sepSec:""}};var m=new l;b.jPlayer.convertTime=function(a){return m.time(a)}; -b.jPlayer.uaBrowser=function(a){a=a.toLowerCase();var b=/(opera)(?:.*version)?[ \/]([\w.]+)/,d=/(msie) ([\w.]+)/,e=/(mozilla)(?:.*? rv:([\w.]+))?/;a=/(webkit)[ \/]([\w.]+)/.exec(a)||b.exec(a)||d.exec(a)||0>a.indexOf("compatible")&&e.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}};b.jPlayer.uaPlatform=function(a){var b=a.toLowerCase(),d=/(android)/,e=/(mobile)/;a=/(ipad|iphone|ipod|android|blackberry|playbook|windows ce|webos)/.exec(b)||[];b=/(ipad|playbook)/.exec(b)||!e.exec(b)&&d.exec(b)|| -[];a[1]&&(a[1]=a[1].replace(/\s/g,"_"));return{platform:a[1]||"",tablet:b[1]||""}};b.jPlayer.browser={};b.jPlayer.platform={};var j=b.jPlayer.uaBrowser(navigator.userAgent);j.browser&&(b.jPlayer.browser[j.browser]=!0,b.jPlayer.browser.version=j.version);j=b.jPlayer.uaPlatform(navigator.userAgent);j.platform&&(b.jPlayer.platform[j.platform]=!0,b.jPlayer.platform.mobile=!j.tablet,b.jPlayer.platform.tablet=!!j.tablet);b.jPlayer.getDocMode=function(){var a;b.jPlayer.browser.msie&&(document.documentMode? -a=document.documentMode:(a=5,document.compatMode&&"CSS1Compat"===document.compatMode&&(a=7)));return a};b.jPlayer.browser.documentMode=b.jPlayer.getDocMode();b.jPlayer.nativeFeatures={init:function(){var a=document,b=a.createElement("video"),d={w3c:"fullscreenEnabled fullscreenElement requestFullscreen exitFullscreen fullscreenchange fullscreenerror".split(" "),moz:"mozFullScreenEnabled mozFullScreenElement mozRequestFullScreen mozCancelFullScreen mozfullscreenchange mozfullscreenerror".split(" "), -webkit:" webkitCurrentFullScreenElement webkitRequestFullScreen webkitCancelFullScreen webkitfullscreenchange ".split(" "),webkitVideo:"webkitSupportsFullscreen webkitDisplayingFullscreen webkitEnterFullscreen webkitExitFullscreen ".split(" ")},e=["w3c","moz","webkit","webkitVideo"],g,h;this.fullscreen=b={support:{w3c:!!a[d.w3c[0]],moz:!!a[d.moz[0]],webkit:"function"===typeof a[d.webkit[3]],webkitVideo:"function"===typeof b[d.webkitVideo[2]]},used:{}};g=0;for(h=e.length;g','','','',''];c=document.createElement(''); -for(var e=0;e=a&&(b=!0);return b},_validString:function(a){return a&&"string"===typeof a},_limitValue:function(a,b,d){return ad?d:a},_urlNotSetError:function(a){this._error({type:b.jPlayer.error.URL_NOT_SET,context:a,message:b.jPlayer.errorMsg.URL_NOT_SET,hint:b.jPlayer.errorHint.URL_NOT_SET})},_flashError:function(a){var c;c=this.internal.ready?"FLASH_DISABLED":"FLASH";this._error({type:b.jPlayer.error[c],context:this.internal.flash.swf, -message:b.jPlayer.errorMsg[c]+a.message,hint:b.jPlayer.errorHint[c]});this.internal.flash.jq.css({width:"1px",height:"1px"})},_error:function(a){this._trigger(b.jPlayer.event.error,a);this.options.errorAlerts&&this._alert("Error!"+(a.message?"\n\n"+a.message:"")+(a.hint?"\n\n"+a.hint:"")+"\n\nContext: "+a.context)},_warning:function(a){this._trigger(b.jPlayer.event.warning,f,a);this.options.warningAlerts&&this._alert("Warning!"+(a.message?"\n\n"+a.message:"")+(a.hint?"\n\n"+a.hint:"")+"\n\nContext: "+ -a.context)},_alert:function(a){alert("jPlayer "+this.version.script+" : id='"+this.internal.self.id+"' : "+a)},_emulateHtmlBridge:function(){var a=this;b.each(b.jPlayer.emulateMethods.split(/\s+/g),function(b,d){a.internal.domNode[d]=function(b){a[d](b)}});b.each(b.jPlayer.event,function(c,d){var e=!0;b.each(b.jPlayer.reservedEvent.split(/\s+/g),function(a,b){if(b===c)return e=!1});e&&a.element.bind(d+".jPlayer.jPlayerHtml",function(){a._emulateHtmlUpdate();var b=document.createEvent("Event");b.initEvent(c, -!1,!0);a.internal.domNode.dispatchEvent(b)})})},_emulateHtmlUpdate:function(){var a=this;b.each(b.jPlayer.emulateStatus.split(/\s+/g),function(b,d){a.internal.domNode[d]=a.status[d]});b.each(b.jPlayer.emulateOptions.split(/\s+/g),function(b,d){a.internal.domNode[d]=a.options[d]})},_destroyHtmlBridge:function(){var a=this;this.element.unbind(".jPlayerHtml");b.each((b.jPlayer.emulateMethods+" "+b.jPlayer.emulateStatus+" "+b.jPlayer.emulateOptions).split(/\s+/g),function(b,d){delete a.internal.domNode[d]})}}; -b.jPlayer.error={FLASH:"e_flash",FLASH_DISABLED:"e_flash_disabled",NO_SOLUTION:"e_no_solution",NO_SUPPORT:"e_no_support",URL:"e_url",URL_NOT_SET:"e_url_not_set",VERSION:"e_version"};b.jPlayer.errorMsg={FLASH:"jPlayer's Flash fallback is not configured correctly, or a command was issued before the jPlayer Ready event. Details: ",FLASH_DISABLED:"jPlayer's Flash fallback has been disabled by the browser due to the CSS rules you have used. Details: ",NO_SOLUTION:"No solution can be found by jPlayer in this browser. Neither HTML nor Flash can be used.", -NO_SUPPORT:"It is not possible to play any media format provided in setMedia() on this browser using your current options.",URL:"Media URL could not be loaded.",URL_NOT_SET:"Attempt to issue media playback commands, while no media url is set.",VERSION:"jPlayer "+b.jPlayer.prototype.version.script+" needs Jplayer.swf version "+b.jPlayer.prototype.version.needFlash+" but found "};b.jPlayer.errorHint={FLASH:"Check your swfPath option and that Jplayer.swf is there.",FLASH_DISABLED:"Check that you have not display:none; the jPlayer entity or any ancestor.", -NO_SOLUTION:"Review the jPlayer options: support and supplied.",NO_SUPPORT:"Video or audio formats defined in the supplied option are missing.",URL:"Check media URL is valid.",URL_NOT_SET:"Use setMedia() to set the media URL.",VERSION:"Update jPlayer files."};b.jPlayer.warning={CSS_SELECTOR_COUNT:"e_css_selector_count",CSS_SELECTOR_METHOD:"e_css_selector_method",CSS_SELECTOR_STRING:"e_css_selector_string",OPTION_KEY:"e_option_key"};b.jPlayer.warningMsg={CSS_SELECTOR_COUNT:"The number of css selectors found did not equal one: ", -CSS_SELECTOR_METHOD:"The methodName given in jPlayer('cssSelector') is not a valid jPlayer method.",CSS_SELECTOR_STRING:"The methodCssSelector given in jPlayer('cssSelector') is not a String or is empty.",OPTION_KEY:"The option requested in jPlayer('option') is undefined."};b.jPlayer.warningHint={CSS_SELECTOR_COUNT:"Check your css selector and the ancestor.",CSS_SELECTOR_METHOD:"Check your method name.",CSS_SELECTOR_STRING:"Check your css selector is a string.",OPTION_KEY:"Check your option name."}}); \ No newline at end of file diff --git a/apps/catalogue/static/player/openplayer.js b/apps/catalogue/static/player/openplayer.js deleted file mode 100644 index 4fe27bd31..000000000 --- a/apps/catalogue/static/player/openplayer.js +++ /dev/null @@ -1,18 +0,0 @@ -(function($) { - $(function() { - - - -$('.open-player').click(function(event) { - event.preventDefault(); - window.open($(this).attr('href'), - 'player', - 'width=422, height=500, scrollbars=1' - ); -}); - - - - }); -})(jQuery); - diff --git a/apps/catalogue/static/player/player.css b/apps/catalogue/static/player/player.css deleted file mode 100644 index 829a9a1c0..000000000 --- a/apps/catalogue/static/player/player.css +++ /dev/null @@ -1,21 +0,0 @@ -#player h1 { - font-size: 2em; - margin: .5em; -} - -.player-info { - margin: 1em; -} - - -.play { - cursor: pointer; -} - -.play:hover { - color: #0D7E85; -} - -.daisy-list { - list-style: none; -} diff --git a/apps/catalogue/static/player/player.js b/apps/catalogue/static/player/player.js deleted file mode 100755 index 69dceed55..000000000 --- a/apps/catalogue/static/player/player.js +++ /dev/null @@ -1,34 +0,0 @@ -(function($) { - $(function() { - - $("#jplayer").each(function() { - var $self = $(this); - $self.jPlayer({ - swfPath: "/static/jplayer/", - solution: "html,flash", - supplied: $self.attr('data-supplied'), - - ready: function() { - var player = $(this); - var setMedia = function(elem) { - var li = $(elem).parent(); - $('.jp-playlist-current').removeClass('jp-playlist-current'); - $(li).addClass('jp-playlist-current'); - var media = {} - - $('.mp3', li).each(function() {media['mp3'] = $(this).attr('href')}); - $('.ogg', li).each(function() {media['oga'] = $(this).attr('href')}); - - return player.jPlayer("setMedia", media); - }; - setMedia($('.play').first()).jPlayer("play"); - - $('.play').click(function() { - setMedia(this).jPlayer("play"); - }); - } - }); - }); - - }); -})(jQuery) \ No newline at end of file diff --git a/apps/catalogue/tasks.py b/apps/catalogue/tasks.py deleted file mode 100644 index a2b8be088..000000000 --- a/apps/catalogue/tasks.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from datetime import datetime -from traceback import print_exc -from celery.task import task -from celery.utils.log import get_task_logger -from django.conf import settings -from wolnelektury.utils import localtime_to_utc -from waiter.models import WaitedFile - -task_logger = get_task_logger(__name__) - - -# TODO: move to model? -def touch_tag(tag): - update_dict = { - 'changed_at': localtime_to_utc(datetime.now()), - } - - type(tag).objects.filter(pk=tag.pk).update(**update_dict) - - -@task -def index_book(book_id, book_info=None, **kwargs): - from catalogue.models import Book - try: - return Book.objects.get(id=book_id).search_index(book_info, **kwargs) - except Exception, e: - print "Exception during index: %s" % e - print_exc() - raise e - - -@task(ignore_result=True, rate_limit=settings.CATALOGUE_CUSTOMPDF_RATE_LIMIT) -def build_custom_pdf(book_id, customizations, file_name, waiter_id=None): - """Builds a custom PDF file.""" - try: - from django.core.files import File - from django.core.files.storage import DefaultStorage - from catalogue.models import Book - - task_logger.info(DefaultStorage().path(file_name)) - if not DefaultStorage().exists(file_name): - kwargs = { - 'cover': True, - } - if 'no-cover' in customizations: - kwargs['cover'] = False - customizations.remove('no-cover') - pdf = Book.objects.get(pk=book_id).wldocument().as_pdf( - customizations=customizations, - morefloats=settings.LIBRARIAN_PDF_MOREFLOATS, - **kwargs) - DefaultStorage().save(file_name, File(open(pdf.get_filename()))) - finally: - if waiter_id is not None: - WaitedFile.objects.filter(pk=waiter_id).delete() diff --git a/apps/catalogue/templates/catalogue/audiobook_list.html b/apps/catalogue/templates/catalogue/audiobook_list.html deleted file mode 100644 index 75576f4ad..000000000 --- a/apps/catalogue/templates/catalogue/audiobook_list.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "catalogue/book_list.html" %} -{% load i18n %} -{% load catalogue_tags %} -{% load ssi_include from ssify %} - -{% block bodyid %}book-a-list{% endblock %} - -{% block titleextra %}{% trans "Listing of all audiobooks" %}{% endblock %} - -{% block metadescription %}Darmowe audiobooki na wolnej licencji. Lektury czytane przez znanych aktorów.{% endblock %} - -{% block extrahead %} - - -{% endblock %} - -{% block book_list_header %}{% trans "Listing of all audiobooks" %}{% endblock %} - -{% block book_list_info %} -{% ssi_include 'chunk' key='audiobook-list' %} -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/book_detail.html b/apps/catalogue/templates/catalogue/book_detail.html deleted file mode 100644 index 7e8128fa7..000000000 --- a/apps/catalogue/templates/catalogue/book_detail.html +++ /dev/null @@ -1,36 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load common_tags catalogue_tags %} -{% load ssify %} -{% load build_absolute_uri from fnp_common %} - -{% block titleextra %}{{ book.pretty_title }}{% endblock %} -{% block ogimage %}{% if book.cover %}{{ book.cover.url|build_absolute_uri:request }}{% endif %}{% endblock %} - -{% block metadescription %}{% book_title book %}. {{ block.super }}{% endblock %} - -{% block bodyid %}book-detail{% endblock %} - -{% block body %} - -{% ssi_include 'catalogue_book_wide' pk=book.pk %} - -{% work_list book_children %} - -{% spaceless %} -{% if book.other_versions %} -
    -

    {% trans "Other versions" %}:

    -{% for rel in book.other_versions %} - {% ssi_include 'catalogue_book_mini' pk=rel.pk %} -{% endfor %} -
    -{% endif %} - -
    -

    {% trans "See also" %}:

    -{% related_books book taken=book.other_versions|length %} -
    -{% endspaceless %} - -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/book_fragments.html b/apps/catalogue/templates/catalogue/book_fragments.html deleted file mode 100644 index d46f869d8..000000000 --- a/apps/catalogue/templates/catalogue/book_fragments.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load work_list from catalogue_tags %} - -{% block titleextra %}{% trans "Theme" %} {{ theme }} {% trans "in work " %} {{ book }}{% endblock %} - -{% block bodyid %}tagged-object-list{% endblock %} - -{% block body %} -
    -

    {% trans "Theme" %} - {{ theme }} -
    {% trans "in work " %} - {{ book }}

    -
    - -
    - {% work_list fragments %} -
    -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/book_info.html b/apps/catalogue/templates/catalogue/book_info.html deleted file mode 100755 index e245335ee..000000000 --- a/apps/catalogue/templates/catalogue/book_info.html +++ /dev/null @@ -1,46 +0,0 @@ -{% load i18n %} -{% load catalogue_tags %} - -

    - {% if book.extra_info.license %} - {% trans "This work is licensed under:" %} - {{ book.extra_info.license_description }} - {% else %} - {% blocktrans %}This work isn't covered by copyright and is part of the - public domain, which means it can be freely used, published and - distributed. If there are any additional copyrighted materials - provided with this work (such as annotations, motifs etc.), those - materials are licensed under the - Creative Commons Attribution-ShareAlike 3.0 - license.{% endblocktrans %} - {% endif %} -

    - -{% if book.extra_info.source_name %} -

    {% trans "Resource prepared based on:" %} {{ book.extra_info.source_name }}

    -{% endif %} - -{% if book.extra_info.description %} -

    {{ book.extra_info.description }}

    -{% endif %} - -{% if book.extra_info.editor or book.extra_info.technical_editor %} -

    {% if is_picture %} - {% trans "Edited by:" %} - {% else %} - {% trans "Edited and annotated by:" %} - {% endif %} - {% all_editors book.extra_info %}.

    -{% endif %} - -{% if book.extra_info.funders %} -

    {% trans "Publication funded by:" %} - {% for funder in book.extra_info.funders %}{{ funder }}{% if not forloop.last %}, {% else %}.{% endif %}{% endfor %} -

    -{% endif %} - -{% if book.extra_info.cover_by %} -

    {% trans "Cover image by:" %} - - {{ book.extra_info.cover_by }}.

    -{% endif %} diff --git a/apps/catalogue/templates/catalogue/book_list.html b/apps/catalogue/templates/catalogue/book_list.html deleted file mode 100644 index e29cd50ec..000000000 --- a/apps/catalogue/templates/catalogue/book_list.html +++ /dev/null @@ -1,39 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} -{% load ssi_include from ssify %} - -{% block bodyid %}book-a-list{% endblock %} - -{% block titleextra %}{% trans "Listing of all works" %}{% endblock %} - -{% block body %} -{% spaceless %} - -

    {% block book_list_header %}{% trans "Listing of all works" %}{% endblock %}

    - -
    - {% block book_list_info %} - {% ssi_include 'chunk' key='book-list' %} - {% endblock %} -
    - -
    - - - -
    -

    {% trans "Table of Content" %}

    -
    - {{ rendered_nav }} -
    -
    -
    - {% block book_list %} - {{ rendered_book_list }} - {% endblock %} -
    - {% trans "↑ top ↑" %} - -{% endspaceless %} -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/book_mini_box.html b/apps/catalogue/templates/catalogue/book_mini_box.html deleted file mode 100755 index 88ec16dfd..000000000 --- a/apps/catalogue/templates/catalogue/book_mini_box.html +++ /dev/null @@ -1,22 +0,0 @@ -{% spaceless %} - -{% endspaceless %} \ No newline at end of file diff --git a/apps/catalogue/templates/catalogue/book_searched.html b/apps/catalogue/templates/catalogue/book_searched.html deleted file mode 100644 index 357491ce6..000000000 --- a/apps/catalogue/templates/catalogue/book_searched.html +++ /dev/null @@ -1,38 +0,0 @@ -{% spaceless %} - -{% load i18n %} -{% load inline_tag_list from catalogue_tags %} -{% load ssi_include from ssify %} - -
    - -{% ssi_include 'catalogue_book_short' pk=book.pk %} - -
    - {% for hit in hits %} - {% if hit.snippet %} - - {% else %} - {% if hit.fragment %} - - {% endif %} - {% endif %} - {% endfor %} -
    - -
    - -
    - -{% endspaceless %} \ No newline at end of file diff --git a/apps/catalogue/templates/catalogue/book_short.html b/apps/catalogue/templates/catalogue/book_short.html deleted file mode 100644 index b069cb585..000000000 --- a/apps/catalogue/templates/catalogue/book_short.html +++ /dev/null @@ -1,135 +0,0 @@ -{% spaceless %} -{% load i18n %} -{% load catalogue_tags ssify %} -{% load likes_book book_shelf_tags from social_tags %} -
    -
    -
    - - - - -
    - - -{% likes_book book.pk as likes %} -
    -
    - ★ -
    -
    -
    - {% ssi_csrf_token %} - -
    -
    -
    - - -
    -
    - {% for tag in tags.author %} - {{ tag.name }}{% if not forloop.last %}, - {% endif %}{% endfor %}{% for parent in parents %}, - {{ parent.title }}{% endfor %} -
    -
    - {% if main_link %}{% endif %}{{ book.title }}{% if main_link %}{% endif %} -
    -
    - -
    - {% if book.cover_thumb %} - {% if main_link %}{% endif %} - Cover - {% if main_link %}{% endif %} - {% endif %} - {% block cover-area-extra %}{% endblock %} -
    -
    - {% spaceless %} - - - {% trans "Epoch" %}:  - {% for tag in tags.epoch %} - {{ tag.name }} - {% if not forloop.last %}, {% endif %} - {% endfor %} - - - - {% trans "Kind" %}:  - {% for tag in tags.kind %} - {{ tag.name }} - {% if not forloop.last %}, {% endif %} - {% endfor %} - - - - {% trans "Genre" %}:  - {% for tag in tags.genre %} - {{ tag.name }} - {% if not forloop.last %}, {% endif %} - {% endfor %} - - - {% if show_lang %} - - {% trans "Language" %}:  - {{ book.language_name }} - - {% endif %} - - {% if stage_note %} -
    - {{ stage_note }} - - {% endif %} - - {% endspaceless %} -
    -
    - {% book_shelf_tags book.pk %} - -
      -
    • - {% if book.html_file %} - {% trans "Read online" %} - {% endif %} -
    • -
    • - {% trans "Download" %} -
      - {% if book.pdf_file %} - PDF {% trans "to print" %} - {% endif %} - {% if book.epub_file %} - EPUB {% trans "for an e-book reader" %} - {% endif %} - {% if book.mobi_file %} - MOBI {% trans "for Kindle" %} - {% endif %} - {% if book.fb2_file %} - FB2 {% trans "FictionBook" %} - {% endif %} - {% if book.txt_file %} - TXT {% trans "for advanced usage" %} - {% endif %} -
      -
    • -
    • - {% if has_audio %} - {% trans "Listen" %} - {% endif %} -
    • -
    - {% block book-box-extra-info %}{% endblock %} - {% block box-append %} - {% endblock %} -
    - {% block right-column %} - {% endblock %} -
    -
    -
    -{% endspaceless %} \ No newline at end of file diff --git a/apps/catalogue/templates/catalogue/book_text.html b/apps/catalogue/templates/catalogue/book_text.html deleted file mode 100644 index 339cfc7b2..000000000 --- a/apps/catalogue/templates/catalogue/book_text.html +++ /dev/null @@ -1,100 +0,0 @@ -{% extends "catalogue/viewer_base.html" %} -{% load i18n %} -{% load catalogue_tags ssify %} -{% load thumbnail %} - - -{% block title %}{{ book.pretty_title }}{% endblock %} - - -{% block menu %} -
  • - {{ book.pretty_title }} -
  • - -{% if book.other_versions.exists %} - -{% endif %} - - - - - - - - - - -{% endblock menu %} - - - -{% block big-pane %} -
    - -
    - -
    - - -{% endblock big-pane %} - - - - - -{% block footer %} -
    - {% book_info book %} -
    - -{% if book.other_versions.exists %} -
    -

    {% trans "Other versions of the book" %}

    - {% trans "Close the other version" %} - -
    -{% endif %} - - - -
    - {% ssi_include 'catalogue_book_short' pk=book.pk %} -
    -{% endblock footer %} diff --git a/apps/catalogue/templates/catalogue/book_wide.html b/apps/catalogue/templates/catalogue/book_wide.html deleted file mode 100644 index b84acdb53..000000000 --- a/apps/catalogue/templates/catalogue/book_wide.html +++ /dev/null @@ -1,84 +0,0 @@ -{% extends "catalogue/book_short.html" %} -{% load i18n %} -{% load choose_fragment download_audio tag_list custom_pdf_link_li license_icon source_name from catalogue_tags %} -{% load choose_cite from social_tags %} -{% load ssi_include from ssify %} - - -{% block box-class %}book-wide-box{% endblock %} - - -{% block cover-area-extra %} -{% if extra_info.license %} - {% license_icon extra_info.license %} -{% endif %} -{% endblock %} - - - -{% block book-box-extra-info %} -{% if themes %} -
    -

    {% trans "Motifs and themes" %}

    -
    - -
    -
    -{% else %} -

     

    -{% endif %} -{% endblock %} - - -{% block right-column %} -
    -
    - {% choose_cite book.pk as cite_promo %} - {% choose_fragment book.pk unless=cite_promo as fragment_promo %} - {{ cite_promo.if }} - {% ssi_include 'social_cite' pk=cite_promo %} - {{ cite_promo.endif }} - {{ fragment_promo.if }} - {% ssi_include 'catalogue_fragment_promo' pk=fragment_promo %} - {{ fragment_promo.endif }} -
    - -
    -

    {% trans "See" %}

    - -
    -
    -

    {% trans "Download" %}

    -
      -
    • - {% if related.media.mp3 or related.media.ogg or related.media.daisy %} - {% trans "Download all audiobooks for this book" %}: - {% download_audio book %}. - {% endif %} -
    • - {% custom_pdf_link_li book %} -
    -
    -
    -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/catalogue.html b/apps/catalogue/templates/catalogue/catalogue.html deleted file mode 100644 index c7cee4096..000000000 --- a/apps/catalogue/templates/catalogue/catalogue.html +++ /dev/null @@ -1,38 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} - - -{% block titleextra %}{% trans "Catalogue" %}{% endblock %} - -{% block bodyid %}catalogue-catalogue{% endblock %} - -{% block body %} -

    {% trans "Catalogue" %}

    - -
    - -

    - {% trans "Download the catalogue in PDF format." %} -

    - -

    {% trans "Authors" %}

    -
    {{ output.author }}
    - -

    {% trans "Kinds" %}

    -
    {{ output.kind }}
    - -

    {% trans "Genres" %}

    -
    {{ output.genre }}
    - -

    {% trans "Epochs" %}

    -
    {{ output.epoch }}
    - -

    {% trans "Themes and topics" %}

    -
    {{ output.theme }}
    - -

    {% trans "Collections" %}

    -
    {{ output.collections }}
    - -
    -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/collection.html b/apps/catalogue/templates/catalogue/collection.html deleted file mode 100755 index 4bb12c938..000000000 --- a/apps/catalogue/templates/catalogue/collection.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "catalogue/book_list.html" %} -{% load i18n %} - -{% block titleextra %}{{ context.collection.title }}{% endblock %} - -{% block book_list_header %}{{ context.collection.title }}{% endblock %} - -{% block book_list_info %} -{{ context.collection.description|safe }} -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/collection_list.html b/apps/catalogue/templates/catalogue/collection_list.html deleted file mode 100755 index 38466f157..000000000 --- a/apps/catalogue/templates/catalogue/collection_list.html +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/apps/catalogue/templates/catalogue/daisy_list.html b/apps/catalogue/templates/catalogue/daisy_list.html deleted file mode 100644 index 65d9d6bcd..000000000 --- a/apps/catalogue/templates/catalogue/daisy_list.html +++ /dev/null @@ -1,17 +0,0 @@ -{% extends "catalogue/book_list.html" %} -{% load i18n %} -{% load ssi_include from ssify %} - -{% block bodyid %}book-a-list{% endblock %} - -{% block titleextra %}{% trans "Listing of all DAISY files" %}{% endblock %} - -{% block extrahead %} - -{% endblock %} - -{% block book_list_header %}{% trans "Listing of all DAISY files" %}{% endblock %} - -{% block book_list_info %} -{% ssi_include 'chunk' key='daisy-list' %} -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/differentiate_tags.html b/apps/catalogue/templates/catalogue/differentiate_tags.html deleted file mode 100644 index b8ef906ef..000000000 --- a/apps/catalogue/templates/catalogue/differentiate_tags.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} - -{% block titleextra %}{% title_from_tags tags %}{% endblock %} - -{% block bodyid %}differentiate_tags{% endblock %} - -{% block body %} -

    {% title_from_tags tags %}

    - -

    {% trans "The criteria are ambiguous. Please select one of the following options:" %}

    - -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/fragment_promo.html b/apps/catalogue/templates/catalogue/fragment_promo.html deleted file mode 100755 index cf817ae7c..000000000 --- a/apps/catalogue/templates/catalogue/fragment_promo.html +++ /dev/null @@ -1,8 +0,0 @@ -{% if fragment %} - -
    - {{ fragment.get_short_text|safe }} -
    -

    {{ fragment.book.pretty_title }}

    -
    -{% endif %} diff --git a/apps/catalogue/templates/catalogue/fragment_short.html b/apps/catalogue/templates/catalogue/fragment_short.html deleted file mode 100644 index b5921f215..000000000 --- a/apps/catalogue/templates/catalogue/fragment_short.html +++ /dev/null @@ -1,26 +0,0 @@ -{% load i18n %} -{% load book_title_html from catalogue_tags %} - -
    - {% if fragment.short_text %} - - {% endif %} -
    -
    - - {{ fragment.text|safe }} - -
    - {% if fragment.short_text %} - ↑ {% trans "Hide fragment" %} ↑ - {% endif %} -
    -

    {% book_title_html fragment.book %}

    -
    diff --git a/apps/catalogue/templates/catalogue/inline_tag_list.html b/apps/catalogue/templates/catalogue/inline_tag_list.html deleted file mode 100755 index 59b1acce9..000000000 --- a/apps/catalogue/templates/catalogue/inline_tag_list.html +++ /dev/null @@ -1,17 +0,0 @@ -{% load i18n %} -{% load catalogue_tags %} -{% if one_tag %} - {% trans "See full category" %} {{ one_tag }} -{% else %} - -{% endif %} diff --git a/apps/catalogue/templates/catalogue/menu.html b/apps/catalogue/templates/catalogue/menu.html deleted file mode 100644 index 5ddbd3b23..000000000 --- a/apps/catalogue/templates/catalogue/menu.html +++ /dev/null @@ -1,41 +0,0 @@ -{% spaceless %} -{% load i18n static %} - - - {% trans "Catalogue of the library" %} - {% trans "Catalogue" %} - - - -{% endspaceless %} \ No newline at end of file diff --git a/apps/catalogue/templates/catalogue/picture_detail.html b/apps/catalogue/templates/catalogue/picture_detail.html deleted file mode 100644 index b8b70c6be..000000000 --- a/apps/catalogue/templates/catalogue/picture_detail.html +++ /dev/null @@ -1,94 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags pagination_tags %} -{% load thumbnail %} - - -{% block titleextra %}{{ picture.title }}{% endblock %} - -{% block bodyid %}picture-detail{% endblock %} - -{% block body %} -

    {{picture.title}}

    - -
    - - - {% thumbnail picture.image_file "400x500" upscale="false" as im %} - - {% endthumbnail %} - - {% if picture.info.license %} -

    {% trans "Work is licensed under " %} {{ picture.info.license_description }}.

    - {% endif %} -

    {% trans "Based on" %}: {{ picture.info.source_name }}

    - {% if picture.info.description %} -
    -
    {{ picture.info.description|safe }}
    -{%comment%}
    {{ picture.info.description|safe|truncatewords_html:30 }}
    {%endcomment%} -
    -

    - {% endif %} - -
    - -
    -
    -

    {% trans "Details" %}

    -
      -
    • - {% trans "Author" %}: - {% for tag in categories.author %} - {{ tag }}{% if not forloop.last %}, {% endif %} - {% endfor %} -
    • -
    • - {% trans "Epoch" %}: - {% for tag in categories.epoch %} - {{ tag }}{% if not forloop.last %}, {% endif %} - {% endfor %} -
    • -
    • - {% trans "Kind" %}: - {% for tag in categories.kind %} - {{ tag }}{% if not forloop.last %}, {% endif %} - {% endfor %} -
    • -
    -

    {% trans "Other resources" %}

    - -

    {% trans "View XML source" %}

    -
    -
    -

    {% trans "Work's themes " %}

    - -
    -
    -
    -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/picture_list.html b/apps/catalogue/templates/catalogue/picture_list.html deleted file mode 100644 index ce61ec48b..000000000 --- a/apps/catalogue/templates/catalogue/picture_list.html +++ /dev/null @@ -1,32 +0,0 @@ -{% extends "catalogue/book_list.html" %} -{% load i18n %} -{% load catalogue_tags chunks %} -{% load thumbnail %} - -{% block bodyid %}picture-list{% endblock %} - -{% block titleextra %}{% trans "Listing of all works" %}{% endblock %} - -{% block picture_list_header %}{% trans "Listing of all works" %}{% endblock %} - - -{% block book_list %} -{% for author, group in pictures_by_author.items %} - -
    -

    {{ author }}

    - {% for picture in group %} -
    - {% thumbnail picture.image_file "300x300" as im %} - - {% endthumbnail %} - {{picture.title}} -
    -
    - {% endfor %} -
    - -{% endfor %} - -{% endblock %} - diff --git a/apps/catalogue/templates/catalogue/player.html b/apps/catalogue/templates/catalogue/player.html deleted file mode 100755 index 701fbe850..000000000 --- a/apps/catalogue/templates/catalogue/player.html +++ /dev/null @@ -1,140 +0,0 @@ - - - {% load static from staticfiles %} - {% load i18n pipeline %} - {% load catalogue_tags %} - {% load thumbnail %} - - - - {% trans "Wolne Lektury" %} :: - {{ book.title }} - {{ audiobook }} - - {% stylesheet "all" %} - {% stylesheet "player" %} - - - - - {% if book.cover_thumb %} - Cover - {% endif %} - - -

    {% book_title book %}

    - -
    -

    {% trans "Book's page" %}.

    -

    {% trans "Download as" %} {% download_audio book False %}.

    - - {% if book.has_daisy_file %} -

    DAISY:

    - - {% endif %} -
    - -
    - - - - - {% if projects|length > 1 %} -

    {% trans "Audiobooks were prepared as a part of the projects:" %}

    -
      - {% for cs, fb in projects %} -
    • - {% if fb %} - {% blocktrans %}{{ cs }}, funded by {{ fb }}{% endblocktrans %} - {% else %} - {{ cs }} - {% endif %} -
    • - {% endfor %} -
    - {% else %} -

    - {% with projects.0.0 as cs %} - {% with projects.0.1 as fb %} - {% if fb %} - {% blocktrans %}Audiobooks were prepared as a part of the {{ cs }} project funded by {{ fb }}.{% endblocktrans %} - {% else %} - {% blocktrans %}Audiobooks were prepared as a part of the {{ cs }} project.{% endblocktrans %} - {% endif %} - {% endwith %} - {% endwith %} -

    - {% endif %} - - - - {% javascript "player" %} - - {{ piwik_tag|safe }} - - diff --git a/apps/catalogue/templates/catalogue/recent_audiobooks_list.html b/apps/catalogue/templates/catalogue/recent_audiobooks_list.html deleted file mode 100755 index 762cb80d7..000000000 --- a/apps/catalogue/templates/catalogue/recent_audiobooks_list.html +++ /dev/null @@ -1,15 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} - -{% block titleextra %}{% trans "Recent audiobooks" %}{% endblock %} - -{% block bodyid %}recent-list{% endblock %} - -{% block body %} -

    {% trans "Recent audiobooks" %}

    - -
    - {% work_list object_list %} -
    -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/recent_daisy_list.html b/apps/catalogue/templates/catalogue/recent_daisy_list.html deleted file mode 100755 index 6675af206..000000000 --- a/apps/catalogue/templates/catalogue/recent_daisy_list.html +++ /dev/null @@ -1,15 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} - -{% block titleextra %}{% trans "Recent DAISY files" %}{% endblock %} - -{% block bodyid %}recent-list{% endblock %} - -{% block body %} -

    {% trans "Recent DAISY files" %}

    - -
    - {% work_list object_list %} -
    -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/recent_list.html b/apps/catalogue/templates/catalogue/recent_list.html deleted file mode 100755 index 28a96b831..000000000 --- a/apps/catalogue/templates/catalogue/recent_list.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} - -{% block titleextra %}{% trans "Recent publications" %}{% endblock %} - -{% block bodyid %}recent-list{% endblock %} - -{% block body %} -

    {% trans "Recent publications" %}

    - - {% url 'recent_audiobooks_list' as a %} - {% url 'recent_daisy_list' as d %} -

    - {% blocktrans %}You can also see recent audiobooks - and recent DAISY files.{% endblocktrans %} -

    - -
    - {% work_list object_list %} -
    -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/related_books.html b/apps/catalogue/templates/catalogue/related_books.html deleted file mode 100755 index 6407d5a04..000000000 --- a/apps/catalogue/templates/catalogue/related_books.html +++ /dev/null @@ -1,25 +0,0 @@ -{% spaceless %} -{% load catalogue_random_book from catalogue_tags %} -{% load picture_random_picture from picture_tags %} -{% load ssi_include from ssify %} - -{% for pic in pics %} - {% ssi_include 'picture_mini' pk=pic.pk %} -{% endfor %} - -{% for book in books %} - {% ssi_include 'catalogue_book_mini' pk=book.pk %} -{% endfor %} - -{% if random %} - {% catalogue_random_book random_excluded_books as random_book_pk %} - {% picture_random_picture random_excluded_pics unless=random_book_pk as random_pic_pk %} - {{ random_book_pk.if }} - {% ssi_include 'catalogue_book_mini' pk=random_book_pk %} - {{ random_book_pk.endif }} - {{ random_pic_pk.if }} - {% ssi_include 'picture_mini' pk=random_pic_pk %} - {{ random_pic_pk.endif }} -{% endif %} - -{% endspaceless %} \ No newline at end of file diff --git a/apps/catalogue/templates/catalogue/search_multiple_hits.html b/apps/catalogue/templates/catalogue/search_multiple_hits.html deleted file mode 100644 index d1e1dedf7..000000000 --- a/apps/catalogue/templates/catalogue/search_multiple_hits.html +++ /dev/null @@ -1,129 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load pagination_tags %} -{% load inline_tag_list from catalogue_tags %} -{% load book_searched from search_tags %} -{% load ssi_include from ssify %} - -{% block titleextra %}{% trans "Search" %}{% endblock %} - -{% block bodyid %}tagged-object-list{% endblock %} - -{% block body %} - {% if did_you_mean %} - {% trans "Did you mean" %} {{did_you_mean|lower}}? - {% endif %} - -
    - {% if tags.author %} -
    -
    {% trans "Authors" %}:
    -
    - {% inline_tag_list tags.author %} -
    -
    - {% endif %} - {% if tags.kind %} -
    -
    {% trans "Kinds" %}:
    -
    - {% inline_tag_list tags.kind %} -
    -
    - {% endif %} - {% if tags.genre %} -
    -
    {% trans "Genres" %}:
    -
    - {% inline_tag_list tags.genre %} -
    -
    - {% endif %} - {% if tags.epoch %} -
    -
    {% trans "Epochs" %}:
    -
    - {% inline_tag_list tags.epoch %} -
    -
    - {% endif %} -
    - - {% if results.title %} -
    -
    -

    {% trans "Results by title" %}

    -
    -
    -
    -
      - {% for result in results.title %}
    1. - {% ssi_include 'catalogue_book_short' pk=result.book.pk %} -
    2. {% endfor %} -
    -
    - {% endif %} - - {% if results.author %} -
    -
    -

    {% trans "Results by authors" %}

    -
    -
    -
    -
      - {% for author in results.author %}
    1. {% ssi_include 'catalogue_book_short' pk=author.book.pk %}
    2. {% endfor %} -
    -
    - {% endif %} - - {% if results.translator %} -
    -
    -

    {% trans "Results by translators" %}

    -
    -
    -
    -
      - {% for translator in results.translator %}
    1. {% ssi_include 'catalogue_book_short' pk=translator.book.pk %}
    2. {% endfor %} -
    -
    - {% endif %} - - {% if results.content %} -
    -
    -

    {% trans "Results in text" %}

    -
    -
    -
    -
      - {% for result in results.content %} -
    1. - {% book_searched result %} -
    2. - {% endfor %} -
    -
    - {% endif %} - - {% if results.other %} -
    -
    -

    {% trans "Other results" %}

    -
    -
    -
    -
      - {% for result in results.other %} -
    1. - {% book_searched result %} -
    2. - {% endfor %} -
    -
    - {% endif %} - - - -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/search_no_hits.html b/apps/catalogue/templates/catalogue/search_no_hits.html deleted file mode 100644 index a2c9a63a7..000000000 --- a/apps/catalogue/templates/catalogue/search_no_hits.html +++ /dev/null @@ -1,30 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags pagination_tags %} - -{% block titleextra %}{% trans "Search" %}{% endblock %} - -{% block bodyid %}tagged-object-list{% endblock %} - -{% block body %} -

    {% trans "Search" %}

    - -
    -
    -

    - {% if did_you_mean %} - {% trans "Did you mean" %} {{did_you_mean|lower}}? - {% endif %} -

    -

    {% trans "Sorry! Search cirteria did not match any resources." %}

    - -

    {% blocktrans %}Search engine supports following criteria: title, author, theme/topic, epoch, kind and genre. - As for now we do not support full text search.{% endblocktrans %}

    - {% include "info/join_us.html" %} -
    -
    - -
    - {% include "publishing_suggest.html" %} -
    -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/search_too_short.html b/apps/catalogue/templates/catalogue/search_too_short.html deleted file mode 100644 index 62d0ad022..000000000 --- a/apps/catalogue/templates/catalogue/search_too_short.html +++ /dev/null @@ -1,17 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags pagination_tags %} - -{% block titleextra %}{% trans "Search" %}{% endblock %} - -{% block bodyid %}tagged-object-list{% endblock %} - -{% block body %} -

    {% trans "Search" %}

    - -
    -

    {% trans "Sorry! Search query must have at least two characters." %}

    - {% include "info/join_us.html" %} -
    - -{% endblock %} \ No newline at end of file diff --git a/apps/catalogue/templates/catalogue/snippets/audiobook_list.html b/apps/catalogue/templates/catalogue/snippets/audiobook_list.html deleted file mode 100755 index d7f599274..000000000 --- a/apps/catalogue/templates/catalogue/snippets/audiobook_list.html +++ /dev/null @@ -1,12 +0,0 @@ -{% load catalogue_tags %} - -{% audiobook_tree orphans books_by_parent %} -{% for author, group in books_by_author.items %} - {% if group %} - -
    -

    {{ author }}

    - {% audiobook_tree group books_by_parent %} -
    - {% endif %} -{% endfor %} diff --git a/apps/catalogue/templates/catalogue/snippets/book_list.html b/apps/catalogue/templates/catalogue/snippets/book_list.html deleted file mode 100755 index 526dcbbcc..000000000 --- a/apps/catalogue/templates/catalogue/snippets/book_list.html +++ /dev/null @@ -1,12 +0,0 @@ -{% load catalogue_tags %} - -{% book_tree orphans books_by_parent %} -{% for author, group in books_by_author.items %} - {% if group %} - -
    -

    {{ author }}

    - {% book_tree group books_by_parent %} -
    - {% endif %} -{% endfor %} diff --git a/apps/catalogue/templates/catalogue/snippets/book_list_nav.html b/apps/catalogue/templates/catalogue/snippets/book_list_nav.html deleted file mode 100755 index 258824df3..000000000 --- a/apps/catalogue/templates/catalogue/snippets/book_list_nav.html +++ /dev/null @@ -1,10 +0,0 @@ -{% for index, authors in books_nav.items %} - -{% endfor %} diff --git a/apps/catalogue/templates/catalogue/snippets/custom_pdf_link_li.html b/apps/catalogue/templates/catalogue/snippets/custom_pdf_link_li.html deleted file mode 100644 index 353ad8bdf..000000000 --- a/apps/catalogue/templates/catalogue/snippets/custom_pdf_link_li.html +++ /dev/null @@ -1,7 +0,0 @@ -{% load i18n %} -{% if not NO_CUSTOM_PDF %} -
  • - {% trans "Download a custom PDF" %} -
  • -{% endif %} diff --git a/apps/catalogue/templates/catalogue/snippets/license_icon.html b/apps/catalogue/templates/catalogue/snippets/license_icon.html deleted file mode 100755 index 732e3bf92..000000000 --- a/apps/catalogue/templates/catalogue/snippets/license_icon.html +++ /dev/null @@ -1,10 +0,0 @@ -{% load i18n %} -{% load static from staticfiles %} - -{% if license_url %} - - {% trans - -{% endif %} diff --git a/apps/catalogue/templates/catalogue/tag_list.html b/apps/catalogue/templates/catalogue/tag_list.html deleted file mode 100644 index e0fecc020..000000000 --- a/apps/catalogue/templates/catalogue/tag_list.html +++ /dev/null @@ -1,21 +0,0 @@ -{% spaceless %} - -{% load i18n %} -{% load catalogue_tags %} -{% if one_tag %} -

    {% trans "See full category" %} {{ one_tag }}

    -{% else %} - -{% endif %} - -{% endspaceless %} \ No newline at end of file diff --git a/apps/catalogue/templates/catalogue/tag_list_split.html b/apps/catalogue/templates/catalogue/tag_list_split.html deleted file mode 100644 index cb7ab26ec..000000000 --- a/apps/catalogue/templates/catalogue/tag_list_split.html +++ /dev/null @@ -1,10 +0,0 @@ -{% load i18n %} -{% if books %} -

    {% trans "Literature" %}:

    -
    {{books|safe}}
    -{% endif %} - -{% if pictures %} -

    {% trans "Gallery" %}:

    -
    {{pictures|safe}}
    -{% endif %} diff --git a/apps/catalogue/templates/catalogue/tagged_object_list.html b/apps/catalogue/templates/catalogue/tagged_object_list.html deleted file mode 100644 index 3df560a6f..000000000 --- a/apps/catalogue/templates/catalogue/tagged_object_list.html +++ /dev/null @@ -1,167 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags switch_tag social_tags %} -{% load ssi_include from ssify %} - -{% block titleextra %}{% title_from_tags tags %}{% endblock %} - -{% block bodyid %}tagged-object-list{% endblock %} - -{% block body %} -
    -
    -

    {% html_title_from_tags tags %}

    - - {% with tags|last as last_tag %} - {% if last_tag.has_description %} -
    - -
    {{ last_tag.description|safe|truncatewords_html:40 }}
    -
    - {% endif %} - -
    -
    - {% if categories.author %} -
    -
    {% trans "Authors" %}:
    -
    - {% inline_tag_list categories.author tags %} -
    -
    - {% endif %} - {% if categories.kind %} -
    -
    {% trans "Kinds" %}:
    -
    - {% inline_tag_list categories.kind tags %} -
    -
    - {% endif %} - {% if categories.genre %} -
    -
    {% trans "Genres" %}:
    -
    - {% inline_tag_list categories.genre tags %} -
    -
    - {% endif %} - {% if categories.epoch %} -
    -
    {% trans "Epochs" %}:
    -
    - {% inline_tag_list categories.epoch tags %} -
    -
    - {% endif %} - - {% if categories.theme %} -
    -

    - {% trans "Motifs and themes" %}

    -
    - {% tag_list categories.theme tags %} -
    -
    - {% endif %} -
    - -
    - - - {% if theme_is_set %} -
    - {% if last_tag.gazeta_link or last_tag.wiki_link %} -

    {% trans "See also" %}:

    - - {% endif %} -
    - {% endif %} - - -
    -
    - - -
    - {% if theme_is_set %} - {% work_list object_list %} - {% else %} - - {% choose_cite tag_ids=tag_ids as cite_promo_pk %} - {% choose_fragment tag_ids=tag_ids unless=cite_promo_pk as fragment_promo_pk %} - {{ cite_promo_pk.if }} - {% ssi_include 'social_cite' pk=cite_promo_pk %} - {{ cite_promo_pk.endif }} - {{ fragment_promo_pk.if }} - {% ssi_include 'catalogue_fragment_promo' pk=fragment_promo_pk %} - {{ fragment_promo_pk.endif }} - -
    - {% if last_tag.gazeta_link or last_tag.wiki_link %} -

    {% trans "See also" %}:

    - - {% endif %} -
    - -
    - {% comment %} -

    {% trans "Download" %}:

    - - {% endcomment %} -
    - {% endif %} - -
    - -
    - - - - {% if not theme_is_set %} -
    - {% if object_list %} - {% work_list object_list %} - {% else %} - {% trans "Sorry! Search cirteria did not match any resources." %} - {% include "info/join_us.html" %} - {% endif %} -
    - {% endif %} - {% endwith %} -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/viewer_base.html b/apps/catalogue/templates/catalogue/viewer_base.html deleted file mode 100644 index 416b9defe..000000000 --- a/apps/catalogue/templates/catalogue/viewer_base.html +++ /dev/null @@ -1,74 +0,0 @@ - -{% load i18n %} -{% load static from staticfiles %} -{% load pipeline %} - - - - - {% block title %}{% endblock %} :: {% trans "Wolne Lektury" %} - - {% stylesheet "book_text" %} - {% block extrahead %}{% endblock %} - - - - - - - - {% block big-pane %} -
    - - {% block main %} -
    - {% block main-text %}{% endblock %} -
    - {% endblock main %} - {% endblock big-pane %} - - -
    - {% block footer %}{% endblock %} - -
    - - {# template #} -
    - -
    -

    * {% trans "Loading" %}

    -
    -
    -
    - -
    - - - {% block js-dependencies %}{% endblock %} - - {% javascript "book_text" %} - - {{ piwik_tag|safe }} - {% block extrabody %}{% endblock %} - - - diff --git a/apps/catalogue/templates/catalogue/work-list.html b/apps/catalogue/templates/catalogue/work-list.html deleted file mode 100755 index 30265255a..000000000 --- a/apps/catalogue/templates/catalogue/work-list.html +++ /dev/null @@ -1,19 +0,0 @@ -{% spaceless %} - -{% load pagination_tags %} -{% load class_name from catalogue_tags %} -{% load ssi_include from ssify %} - -{% autopaginate object_list 10 %} - -
      -{% for item in object_list %} -
    1. - {% ssi_include item.short_html_url_name pk=item.pk %} -
    2. -{% endfor %} -
    - -{% paginate %} - -{% endspaceless %} diff --git a/apps/catalogue/templatetags/__init__.py b/apps/catalogue/templatetags/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/catalogue/templatetags/catalogue_tags.py b/apps/catalogue/templatetags/catalogue_tags.py deleted file mode 100644 index 6e81caec2..000000000 --- a/apps/catalogue/templatetags/catalogue_tags.py +++ /dev/null @@ -1,445 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from random import randint, random -from urlparse import urlparse - -from django.conf import settings -from django import template -from django.template import Node, Variable, Template, Context -from django.core.urlresolvers import reverse -from django.contrib.auth.forms import UserCreationForm, AuthenticationForm -from django.utils.cache import add_never_cache_headers -from django.utils.translation import ugettext as _ - -from ssify import ssi_variable -from catalogue.models import Book, BookMedia, Fragment, Tag, Source -from catalogue.constants import LICENSES -from picture.models import Picture - -register = template.Library() - - -class RegistrationForm(UserCreationForm): - def as_ul(self): - "Returns this form rendered as HTML
  • s -- excluding the
      ." - return self._html_output(u'
    • %(errors)s%(label)s %(field)s%(help_text)s
    • ', u'
    • %s
    • ', '', u' %s', False) - - -class LoginForm(AuthenticationForm): - def as_ul(self): - "Returns this form rendered as HTML
    • s -- excluding the
        ." - return self._html_output(u'
      • %(errors)s%(label)s %(field)s%(help_text)s
      • ', u'
      • %s
      • ', '', u' %s', False) - - -def iterable(obj): - try: - iter(obj) - return True - except TypeError: - return False - - -def capfirst(text): - try: - return '%s%s' % (text[0].upper(), text[1:]) - except IndexError: - return '' - - -@register.simple_tag -def html_title_from_tags(tags): - if len(tags) < 2: - return title_from_tags(tags) - template = Template("{{ category }}: {{ tag.name }}") - return capfirst(",
        ".join( - template.render(Context({'tag': tag, 'category': _(tag.category)})) for tag in tags)) - - -def simple_title(tags): - title = [] - for tag in tags: - title.append("%s: %s" % (_(tag.category), tag.name)) - return capfirst(', '.join(title)) - - -@register.simple_tag -def book_title(book, html_links=False): - return book.pretty_title(html_links) - - -@register.simple_tag -def book_title_html(book): - return book_title(book, html_links=True) - - -@register.simple_tag -def title_from_tags(tags): - def split_tags(tags): - result = {} - for tag in tags: - result[tag.category] = tag - return result - - # TODO: Remove this after adding flection mechanism - return simple_title(tags) - - class Flection(object): - def get_case(self, name, flection): - return name - flection = Flection() - - self = split_tags(tags) - - title = u'' - - # Specjalny przypadek oglądania wszystkich lektur na danej półce - if len(self) == 1 and 'set' in self: - return u'Półka %s' % self['set'] - - # Specjalny przypadek "Twórczość w pozytywizmie", wtedy gdy tylko epoka - # jest wybrana przez użytkownika - if 'epoch' in self and len(self) == 1: - text = u'Twórczość w %s' % flection.get_case(unicode(self['epoch']), u'miejscownik') - return capfirst(text) - - # Specjalny przypadek "Dramat w twórczości Sofoklesa", wtedy gdy podane - # są tylko rodzaj literacki i autor - if 'kind' in self and 'author' in self and len(self) == 2: - text = u'%s w twórczości %s' % (unicode(self['kind']), - flection.get_case(unicode(self['author']), u'dopełniacz')) - return capfirst(text) - - # Przypadki ogólniejsze - if 'theme' in self: - title += u'Motyw %s' % unicode(self['theme']) - - if 'genre' in self: - if 'theme' in self: - title += u' w %s' % flection.get_case(unicode(self['genre']), u'miejscownik') - else: - title += unicode(self['genre']) - - if 'kind' in self or 'author' in self or 'epoch' in self: - if 'genre' in self or 'theme' in self: - if 'kind' in self: - title += u' w %s ' % flection.get_case(unicode(self['kind']), u'miejscownik') - else: - title += u' w twórczości ' - else: - title += u'%s ' % unicode(self.get('kind', u'twórczość')) - - if 'author' in self: - title += flection.get_case(unicode(self['author']), u'dopełniacz') - elif 'epoch' in self: - title += flection.get_case(unicode(self['epoch']), u'dopełniacz') - - return capfirst(title) - - -@register.simple_tag -def book_tree(book_list, books_by_parent): - text = "".join("
      • %s%s
      • " % ( - book.get_absolute_url(), book.title, book_tree(books_by_parent.get(book, ()), books_by_parent) - ) for book in book_list) - - if text: - return "
          %s
        " % text - else: - return '' - -@register.simple_tag -def audiobook_tree(book_list, books_by_parent): - text = "".join("
      • %s%s
      • " % ( - reverse("book_player", args=[book.slug]), book.title, audiobook_tree(books_by_parent.get(book, ()), books_by_parent) - ) for book in book_list) - - if text: - return "
          %s
        " % text - else: - return '' - -@register.simple_tag -def book_tree_texml(book_list, books_by_parent, depth=1): - return "".join(""" - %(depth)dem%(title)s - %(audiences)s - %(audiobook)s - - %(children)s - """ % { - "depth": depth, - "title": book.title, - "audiences": ", ".join(book.audiences_pl()), - "audiobook": "audiobook" if book.has_media('mp3') else "", - "children": book_tree_texml(books_by_parent.get(book.id, ()), books_by_parent, depth + 1) - } for book in book_list) - - -@register.simple_tag -def book_tree_csv(author, book_list, books_by_parent, depth=1, max_depth=3, delimeter="\t"): - def quote_if_necessary(s): - try: - s.index(delimeter) - s.replace('"', '\\"') - return '"%s"' % s - except ValueError: - return s - - return "".join("""%(author)s%(d)s%(preindent)s%(title)s%(d)s%(postindent)s%(audiences)s%(d)s%(audiobook)s -%(children)s""" % { - "d": delimeter, - "preindent": delimeter * (depth - 1), - "postindent": delimeter * (max_depth - depth), - "depth": depth, - "author": quote_if_necessary(author.name), - "title": quote_if_necessary(book.title), - "audiences": ", ".join(book.audiences_pl()), - "audiobook": "audiobook" if book.has_media('mp3') else "", - "children": book_tree_csv(author, books_by_parent.get(book.id, ()), books_by_parent, depth + 1) - } for book in book_list) - -@register.simple_tag -def all_editors(extra_info): - editors = [] - if 'editors' in extra_info: - editors += extra_info['editors'] - if 'technical_editors' in extra_info: - editors += extra_info['technical_editors'] - # support for extra_info-s from librarian<1.2 - if 'editor' in extra_info: - editors.append(extra_info['editor']) - if 'technical_editor' in extra_info: - editors.append(extra_info['technical_editor']) - return ', '.join( - ' '.join(p.strip() for p in person.rsplit(',', 1)[::-1]) - for person in sorted(set(editors))) - - -@register.simple_tag -def user_creation_form(): - return RegistrationForm(prefix='registration').as_ul() - - -@register.simple_tag -def authentication_form(): - return LoginForm(prefix='login').as_ul() - - -@register.tag -def catalogue_url(parser, token): - bits = token.split_contents() - - tags_to_add = [] - tags_to_remove = [] - for bit in bits[1:]: - if bit[0] == '-': - tags_to_remove.append(bit[1:]) - else: - tags_to_add.append(bit) - - return CatalogueURLNode(tags_to_add, tags_to_remove) - - -class CatalogueURLNode(Node): - def __init__(self, tags_to_add, tags_to_remove): - self.tags_to_add = [Variable(tag) for tag in tags_to_add] - self.tags_to_remove = [Variable(tag) for tag in tags_to_remove] - - def render(self, context): - tags_to_add = [] - tags_to_remove = [] - - for tag_variable in self.tags_to_add: - tag = tag_variable.resolve(context) - if isinstance(tag, (list, dict)): - tags_to_add += [t for t in tag] - else: - tags_to_add.append(tag) - - for tag_variable in self.tags_to_remove: - tag = tag_variable.resolve(context) - if iterable(tag): - tags_to_remove += [t for t in tag] - else: - tags_to_remove.append(tag) - - tag_slugs = [tag.url_chunk for tag in tags_to_add] - for tag in tags_to_remove: - try: - tag_slugs.remove(tag.url_chunk) - except KeyError: - pass - - if len(tag_slugs) > 0: - return reverse('tagged_object_list', kwargs={'tags': '/'.join(tag_slugs)}) - else: - return reverse('main_page') - - -@register.inclusion_tag('catalogue/tag_list.html') -def tag_list(tags, choices=None): - if choices is None: - choices = [] - if len(tags) == 1 and tags[0].category not in [t.category for t in choices]: - one_tag = tags[0] - return locals() - - -@register.inclusion_tag('catalogue/inline_tag_list.html') -def inline_tag_list(tags, choices=None): - return tag_list(tags, choices) - - -@register.inclusion_tag('catalogue/collection_list.html') -def collection_list(collections): - return locals() - - -@register.inclusion_tag('catalogue/book_info.html') -def book_info(book): - return { - 'is_picture': isinstance(book, Picture), - 'book': book, - } - - -@register.inclusion_tag('catalogue/work-list.html', takes_context=True) -def work_list(context, object_list): - request = context.get('request') - return locals() - - -# TODO: These are no longer just books. -@register.inclusion_tag('catalogue/related_books.html', takes_context=True) -def related_books(context, instance, limit=6, random=1, taken=0): - limit = limit - taken - max_books = limit - random - is_picture = isinstance(instance, Picture) - - pics_qs = Picture.objects.all() - if is_picture: - pics_qs = pics_qs.exclude(pk=instance.pk) - pics = Picture.tagged.related_to(instance, pics_qs) - if pics.exists(): - # Reserve one spot for an image. - max_books -= 1 - - books_qs = Book.objects.all() - if not is_picture: - books_qs = books_qs.exclude(common_slug=instance.common_slug).exclude(ancestor=instance) - books = Book.tagged.related_to(instance, books_qs)[:max_books] - - pics = pics[:1 + max_books - books.count()] - - random_excluded_books = [b.pk for b in books] - random_excluded_pics = [p.pk for p in pics] - (random_excluded_pics if is_picture else random_excluded_books).append(instance.pk) - - return { - 'request': context['request'], - 'books': books, - 'pics': pics, - 'random': random, - 'random_excluded_books': random_excluded_books, - 'random_excluded_pics': random_excluded_pics, - } - - -@register.inclusion_tag('catalogue/menu.html') -def catalogue_menu(): - return {'categories': [ - ('author', _('Authors'), 'autorzy'), - ('genre', _('Genres'), 'gatunki'), - ('kind', _('Kinds'), 'rodzaje'), - ('epoch', _('Epochs'), 'epoki'), - ('theme', _('Themes'), 'motywy'), - ]} - - -@register.simple_tag -def download_audio(book, daisy=True): - links = [] - if book.has_media('mp3'): - links.append("%s" % - (reverse('download_zip_mp3', args=[book.slug]), - BookMedia.formats['mp3'].name)) - if book.has_media('ogg'): - links.append("%s" % - (reverse('download_zip_ogg', args=[book.slug]), - BookMedia.formats['ogg'].name)) - if daisy and book.has_media('daisy'): - for dsy in book.get_media('daisy'): - links.append("%s" % - (dsy.file.url, BookMedia.formats['daisy'].name)) - return ", ".join(links) - - -@register.inclusion_tag("catalogue/snippets/custom_pdf_link_li.html") -def custom_pdf_link_li(book): - return { - 'book': book, - 'NO_CUSTOM_PDF': settings.NO_CUSTOM_PDF, - } - - -@register.inclusion_tag("catalogue/snippets/license_icon.html") -def license_icon(license_url): - """Creates a license icon, if the license_url is known.""" - known = LICENSES.get(license_url) - if known is None: - return {} - return { - "license_url": license_url, - "icon": "img/licenses/%s.png" % known['icon'], - "license_description": known['description'], - } - - -@register.filter -def class_name(obj): - return obj.__class__.__name__ - - -@register.simple_tag -def source_name(url): - url = url.lstrip() - netloc = urlparse(url).netloc - if not netloc: - netloc = urlparse('http://' + url).netloc - if not netloc: - return '' - source, created = Source.objects.get_or_create(netloc=netloc) - return source.name or netloc - - -@ssi_variable(register, patch_response=[add_never_cache_headers]) -def catalogue_random_book(request, exclude_ids): - from .. import app_settings - if random() < app_settings.RELATED_RANDOM_PICTURE_CHANCE: - return None - queryset = Book.objects.exclude(pk__in=exclude_ids) - count = queryset.count() - if count: - return queryset[randint(0, count - 1)].pk - else: - return None - - -@ssi_variable(register, patch_response=[add_never_cache_headers]) -def choose_fragment(request, book_id=None, tag_ids=None, unless=False): - if unless: - return None - - if book_id is not None: - fragment = Book.objects.get(pk=book_id).choose_fragment() - else: - if tag_ids is not None: - tags = Tag.objects.filter(pk__in=tag_ids) - fragments = Fragment.tagged.with_all(tags).order_by().only('id') - else: - fragments = Fragment.objects.all().order_by().only('id') - fragment_count = fragments.count() - fragment = fragments[randint(0, fragment_count - 1)] if fragment_count else None - return fragment.pk if fragment is not None else None diff --git a/apps/catalogue/test_utils.py b/apps/catalogue/test_utils.py deleted file mode 100644 index 9d87311dd..000000000 --- a/apps/catalogue/test_utils.py +++ /dev/null @@ -1,93 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from os.path import abspath, dirname, join -import tempfile -from traceback import extract_stack -from django.test import TestCase -from django.test.utils import override_settings -from fnpdjango.utils.text.slughifi import slughifi -from librarian import WLURI -from django.conf import settings - - -@override_settings( - MEDIA_ROOT=tempfile.mkdtemp(prefix='djangotest_'), - CATALOGUE_DONT_BUILD=set(['pdf', 'mobi', 'epub', 'txt', 'fb2', 'cover']), - NO_SEARCH_INDEX=True, - CELERY_ALWAYS_EAGER=True, - CACHES={ - 'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}, - }, - SOLR=settings.SOLR_TEST, - SSIFY_RENDER=False, -) -class WLTestCase(TestCase): - """ - Generic base class for tests. Adds settings freeze and clears MEDIA_ROOT. - """ - longMessage = True - - -class PersonStub(object): - - def __init__(self, first_names, last_name): - self.first_names = first_names - self.last_name = last_name - - def readable(self): - return " ".join(self.first_names + (self.last_name,)) - - -class BookInfoStub(object): - _empty_fields = ['cover_url', 'variant_of'] - # allow single definition for multiple-value fields - _salias = { - 'authors': 'author', - } - - def __init__(self, **kwargs): - self.__dict = kwargs - - def __setattr__(self, key, value): - if not key.startswith('_'): - self.__dict[key] = value - return object.__setattr__(self, key, value) - - def __getattr__(self, key): - try: - return self.__dict[key] - except KeyError: - if key in self._empty_fields: - return None - elif key in self._salias: - return [getattr(self, self._salias[key])] - else: - raise - - def to_dict(self): - return dict((key, unicode(value)) for key, value in self.__dict.items()) - - -def info_args(title, language=None): - """ generate some keywords for comfortable BookInfoCreation """ - slug = unicode(slughifi(title)) - if language is None: - language = u'pol' - return { - 'title': unicode(title), - 'url': WLURI.from_slug(slug), - 'about': u"http://wolnelektury.pl/example/URI/%s" % slug, - 'language': language, - } - - -def get_fixture(path, app=None): - if app is not None: - mod_path = app.__file__ - f_path = join(dirname(abspath(mod_path)), 'tests/files', path) - else: - mod_path = extract_stack(limit=2)[0][0] - f_path = join(dirname(abspath(mod_path)), 'files', path) - return f_path diff --git a/apps/catalogue/tests/__init__.py b/apps/catalogue/tests/__init__.py deleted file mode 100644 index 9c41af207..000000000 --- a/apps/catalogue/tests/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from catalogue.tests.book_import import * -from catalogue.tests.bookmedia import * -from catalogue.tests.cover import * -from catalogue.tests.search import * -from catalogue.tests.tags import * -from catalogue.tests.templatetags import * -from .visit import * diff --git a/apps/catalogue/tests/book_import.py b/apps/catalogue/tests/book_import.py deleted file mode 100644 index 775fc2929..000000000 --- a/apps/catalogue/tests/book_import.py +++ /dev/null @@ -1,450 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings - -from django.core.files.base import ContentFile -from catalogue.test_utils import * -from catalogue import models -from librarian import WLURI - -from nose.tools import raises -from os import path, makedirs - -class BookImportLogicTests(WLTestCase): - - def setUp(self): - WLTestCase.setUp(self) - self.book_info = BookInfoStub( - url=WLURI.from_slug(u"default-book"), - about=u"http://wolnelektury.pl/example/URI/default_book", - title=u"Default Book", - author=PersonStub(("Jim",), "Lazy"), - kind="X-Kind", - genre="X-Genre", - epoch="X-Epoch", - language=u"pol", - ) - - self.expected_tags = [ - ('author', 'jim-lazy'), - ('genre', 'x-genre'), - ('epoch', 'x-epoch'), - ('kind', 'x-kind'), - ] - self.expected_tags.sort() - - def test_empty_book(self): - BOOK_TEXT = "" - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - - self.assertEqual(book.title, "Default Book") - self.assertEqual(book.slug, "default-book") - self.assert_(book.parent is None) - self.assertFalse(book.has_html_file()) - - # no fragments generated - self.assertEqual(book.fragments.count(), 0) - - # TODO: this should be filled out probably... - self.assertEqual(book.wiki_link, '') - self.assertEqual(book.gazeta_link, '') - self.assertEqual(book.description, '') - - tags = [ (tag.category, tag.slug) for tag in book.tags ] - tags.sort() - - self.assertEqual(tags, self.expected_tags) - - def test_not_quite_empty_book(self): - """ Not empty, but without any real text. - - Should work like any other non-empty book. - """ - - BOOK_TEXT = """ - - Nic - - """ - - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - self.assertTrue(book.has_html_file()) - - def test_book_with_fragment(self): - BOOK_TEXT = """ - - LoveAla ma kota - - """ - - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - self.assertTrue(book.has_html_file()) - - self.assertEqual(book.fragments.count(), 1) - self.assertEqual(book.fragments.all()[0].text, u'

        Ala ma kota

        \n') - - self.assert_(('theme', 'love') in [ (tag.category, tag.slug) for tag in book.fragments.all()[0].tags ]) - - def test_book_with_empty_theme(self): - """ empty themes should be ignored """ - - BOOK_TEXT = """ - - , Love , , Ala ma kota - - """ - - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - self.assert_([('theme', 'love')], - [ (tag.category, tag.slug) for tag in book.fragments.all()[0].tags.filter(category='theme') ]) - - def test_book_with_no_theme(self): - """ fragments with no themes shouldn't be created at all """ - - BOOK_TEXT = """ - - Ala ma kota - - """ - - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - self.assertEqual(book.fragments.count(), 0) - self.assertEqual(book.tags.filter(category='theme').count(), 0) - - @raises(ValueError) - def test_book_with_invalid_slug(self): - """ Book with invalid characters in slug shouldn't be imported """ - self.book_info.url = WLURI.from_slug(u"default_book") - BOOK_TEXT = "" - models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - - def test_book_replace_title(self): - BOOK_TEXT = """""" - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - self.book_info.title = u"Extraordinary" - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info, overwrite=True) - - tags = [ (tag.category, tag.slug) for tag in book.tags ] - tags.sort() - - self.assertEqual(tags, self.expected_tags) - - def test_book_replace_author(self): - BOOK_TEXT = """""" - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - self.book_info.author = PersonStub(("Hans", "Christian"), "Andersen") - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info, overwrite=True) - - tags = [ (tag.category, tag.slug) for tag in book.tags ] - tags.sort() - - self.expected_tags.remove(('author', 'jim-lazy')) - self.expected_tags.append(('author', 'hans-christian-andersen')) - self.expected_tags.sort() - - self.assertEqual(tags, self.expected_tags) - - # the old tag shouldn't disappear - models.Tag.objects.get(slug="jim-lazy", category="author") - - def test_book_remove_fragment(self): - BOOK_TEXT = """ - - - LoveAla ma kota - HatredTo kot Ali - - - """ - BOOK_TEXT_AFTER = """ - - - LoveAla ma kota - To kot Ali - - - """ - - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - self.assertEqual(book.fragments.count(), 2) - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT_AFTER), self.book_info, overwrite=True) - self.assertEqual(book.fragments.count(), 1) - - def test_multiple_tags(self): - BOOK_TEXT = """""" - self.book_info.authors = self.book_info.author, PersonStub(("Joe",), "Dilligent"), - self.book_info.kinds = self.book_info.kind, 'Y-Kind', - self.book_info.genres = self.book_info.genre, 'Y-Genre', - self.book_info.epochs = self.book_info.epoch, 'Y-Epoch', - - self.expected_tags.extend([ - ('author', 'joe-dilligent'), - ('genre', 'y-genre'), - ('epoch', 'y-epoch'), - ('kind', 'y-kind'), - ]) - self.expected_tags.sort() - - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - tags = [ (tag.category, tag.slug) for tag in book.tags ] - tags.sort() - - self.assertEqual(tags, self.expected_tags) - - -class ChildImportTests(WLTestCase): - - def setUp(self): - WLTestCase.setUp(self) - self.child_info = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Joe",), "Doe"), - **info_args("Child") - ) - - self.parent_info = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Jim",), "Lazy"), - parts=[self.child_info.url], - **info_args("Parent") - ) - - def test_child(self): - TEXT = """""" - child = models.Book.from_text_and_meta(ContentFile(TEXT), self.child_info) - parent = models.Book.from_text_and_meta(ContentFile(TEXT), self.parent_info) - author = parent.tags.get(category='author') - books = self.client.get(author.get_absolute_url()).context['object_list'] - self.assertEqual(len(books), 1, - "Only parent book should be visible on author's page") - - def test_child_replace(self): - PARENT_TEXT = """""" - CHILD_TEXT = """ - - PiesAla ma kota - - """ - child = models.Book.from_text_and_meta(ContentFile(CHILD_TEXT), self.child_info) - parent = models.Book.from_text_and_meta(ContentFile(PARENT_TEXT), self.parent_info) - CHILD_TEXT = """ - - KotAla ma kota - - """ - child = models.Book.from_text_and_meta(ContentFile(CHILD_TEXT), self.child_info, overwrite=True) - themes = parent.related_themes() - self.assertEqual(['Kot'], [tag.name for tag in themes], - 'wrong related theme list') - - -class TreeImportTest(WLTestCase): - def setUp(self): - WLTestCase.setUp(self) - self.child_info = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Joe",), "Doe"), - **info_args("Child") - ) - self.CHILD_TEXT = """ - - Pies - Ala ma kota - - """ - self.child = models.Book.from_text_and_meta( - ContentFile(self.CHILD_TEXT), self.child_info) - - self.book_info = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Joe",), "Doe"), - parts=[self.child_info.url], - **info_args("Book") - ) - self.BOOK_TEXT = """""" - self.book = models.Book.from_text_and_meta( - ContentFile(self.BOOK_TEXT), self.book_info) - - self.parent_info = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Jim",), "Lazy"), - parts=[self.book_info.url], - **info_args("Parent") - ) - self.PARENT_TEXT = """""" - self.parent = models.Book.from_text_and_meta( - ContentFile(self.PARENT_TEXT), self.parent_info) - - def test_ok(self): - self.assertEqual( - list(self.client.get('/katalog/gatunek/x-genre/' - ).context['object_list']), - [self.parent], - u"There should be only parent on common tag page." - ) - pies = models.Tag.objects.get(slug='pies') - themes = self.parent.related_themes() - self.assertEqual(len(themes), 1, - u"There should be child theme in parent theme counter." - ) - # TODO: book_count is deprecated, update here. - #~ epoch = models.Tag.objects.get(slug='x-epoch') - #~ self.assertEqual(epoch.book_count, 1, - #~ u"There should be only parent in common tag's counter." - #~ ) - - def test_child_republish(self): - CHILD_TEXT = """ - - Pies, Kot - Ala ma kota - - """ - models.Book.from_text_and_meta( - ContentFile(CHILD_TEXT), self.child_info, overwrite=True) - self.assertEqual( - list(self.client.get('/katalog/gatunek/x-genre/' - ).context['object_list']), - [self.parent], - u"There should only be parent on common tag page." - ) - pies = models.Tag.objects.get(slug='pies') - kot = models.Tag.objects.get(slug='kot') - self.assertEqual(len(self.parent.related_themes()), 2, - u"There should be child themes in parent theme counter." - ) - # TODO: book_count is deprecated, update here. - #~ epoch = models.Tag.objects.get(slug='x-epoch') - #~ self.assertEqual(epoch.book_count, 1, - #~ u"There should only be parent in common tag's counter." - #~ ) - - def test_book_change_child(self): - second_child_info = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='Other-Kind', - author=PersonStub(("Joe",), "Doe"), - **info_args("Second Child") - ) - SECOND_CHILD_TEXT = """ - - Kot - Ala ma kota - - """ - # Import a second child. - second_child = models.Book.from_text_and_meta( - ContentFile(SECOND_CHILD_TEXT), second_child_info) - # The book has only this new child now. - self.book_info.parts = [second_child_info.url] - self.book = models.Book.from_text_and_meta( - ContentFile(self.BOOK_TEXT), self.book_info, overwrite=True) - - self.assertEqual( - set(self.client.get('/katalog/gatunek/x-genre/' - ).context['object_list']), - set([self.parent, self.child]), - u"There should be parent and old child on common tag page." - ) - kot = models.Tag.objects.get(slug='kot') - self.assertEqual(len(self.parent.related_themes()), 1, - u"There should only be new child themes in parent theme counter." - ) - epoch = models.Tag.objects.get(slug='x-epoch') - # book_count deprecated, update test. - #~ self.assertEqual(epoch.book_count, 2, - #~ u"There should be parent and old child in common tag's counter." - #~ ) - self.assertEqual( - list(self.client.get('/katalog/lektura/parent/motyw/kot/' - ).context['fragments']), - [second_child.fragments.all()[0]], - u"There should be new child's fragments on parent's theme page." - ) - self.assertEqual( - list(self.client.get('/katalog/lektura/parent/motyw/pies/' - ).context['fragments']), - [], - u"There should be no old child's fragments on parent's theme page." - ) - - -class MultilingualBookImportTest(WLTestCase): - def setUp(self): - WLTestCase.setUp(self) - common_uri = WLURI.from_slug('common-slug') - - self.pol_info = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Joe",), "Doe"), - variant_of=common_uri, - **info_args(u"Książka") - ) - - self.eng_info = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Joe",), "Doe"), - variant_of=common_uri, - **info_args("A book", "eng") - ) - - def test_multilingual_import(self): - BOOK_TEXT = """A""" - - book1 = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.pol_info) - book2 = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.eng_info) - - self.assertEqual( - set([b.language for b in models.Book.objects.all()]), - set(['pol', 'eng']), - 'Books imported in wrong languages.' - ) - - -class BookImportGenerateTest(WLTestCase): - def setUp(self): - WLTestCase.setUp(self) - xml = path.join(path.dirname(__file__), 'files/fraszka-do-anusie.xml') - self.book = models.Book.from_xml_file(xml) - - def test_gen_pdf(self): - self.book.pdf_file.build() - book = models.Book.objects.get(pk=self.book.pk) - self.assertTrue(path.exists(book.pdf_file.path)) - - def test_gen_pdf_parent(self): - """This book contains a child.""" - xml = path.join(path.dirname(__file__), "files/fraszki.xml") - parent = models.Book.from_xml_file(xml) - parent.pdf_file.build() - parent = models.Book.objects.get(pk=parent.pk) - self.assertTrue(path.exists(parent.pdf_file.path)) - - def test_custom_pdf(self): - from catalogue.tasks import build_custom_pdf - out = 'test-custom.pdf' - absoulute_path = path.join(settings.MEDIA_ROOT, out) - - if not path.exists(path.dirname(absoulute_path)): - makedirs(path.dirname(absoulute_path)) - - build_custom_pdf(self.book.id, - customizations=['nofootnotes', '13pt', 'a4paper'], file_name=out) - self.assertTrue(path.exists(absoulute_path)) diff --git a/apps/catalogue/tests/bookmedia.py b/apps/catalogue/tests/bookmedia.py deleted file mode 100644 index 2d3cf539d..000000000 --- a/apps/catalogue/tests/bookmedia.py +++ /dev/null @@ -1,119 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from os.path import basename, exists, join, dirname -from django.core.files.base import ContentFile - -from catalogue.test_utils import * -from catalogue import models, utils - -class BookMediaTests(WLTestCase): - - def setUp(self): - WLTestCase.setUp(self) - self.file = ContentFile('X') - self.file2 = ContentFile('Y') - self.book = models.Book.objects.create(slug='test-book') - - def test_diacritics(self): - bm = models.BookMedia(book=self.book, type="ogg", - name=u"Zażółć gęślą jaźń") - bm.file.save(None, self.file) - self.assertEqual(basename(bm.file.name), 'zazolc-gesla-jazn.ogg') - - def test_long_name(self): - bm = models.BookMedia(book=self.book, type="ogg", - name="Some very very very very very very very very very very very very very very very very long file name") - bm.file.save(bm.name, self.file) - - # reload to see what was really saved - bm = models.BookMedia.objects.get(pk=bm.pk) - self.assertEqual(bm.file.size, 1) - - def test_overwrite(self): - """ - File gets overwritten with same filename on update. - """ - - bm = models.BookMedia(book=self.book, type='ogg', - name="Some media") - bm.file.save(None, self.file) - bm.file.save(None, self.file2) - - self.assertEqual(bm.file.read(), 'Y') - self.assertEqual(basename(bm.file.name), 'some-media.ogg') - - def test_no_clobber(self): - """ - File save doesn't clobber some other media with similar name. - """ - - bm = models.BookMedia(book=self.book, type='ogg', - name=u"Tytul") - bm.file.save(None, self.file) - bm2 = models.BookMedia(book=self.book, type='ogg', - name=u"Tytuł") - bm2.file.save(None, self.file2) - self.assertEqual(basename(bm.file.name), 'tytul.ogg') - self.assertNotEqual(basename(bm2.file.name), 'tytul.ogg') - self.assertEqual(bm.file.read(), 'X') - self.assertEqual(bm2.file.read(), 'Y') - - def test_change_name(self): - """ - File name reflects name change. - """ - - bm = models.BookMedia(book=self.book, type='ogg', name="Title") - bm.file.save(None, self.file) - bm.name = "Other Title" - bm.save() - self.assertEqual(basename(bm.file.name), 'other-title.ogg') - self.assertEqual(bm.file.read(), 'X') - - def test_change_name_no_clobber(self): - """ - File name after change won't clobber some other file - with similar name. - """ - - bm = models.BookMedia(book=self.book, type='ogg', name="Title") - bm.file.save(None, self.file) - bm2 = models.BookMedia(book=self.book, type='ogg', name="Other title") - bm2.file.save(None, self.file2) - bm2.name = "Title" - bm2.save() - self.assertNotEqual(basename(bm2.file.name), 'title.ogg') - self.assertEqual(bm.file.read(), 'X') - self.assertEqual(bm2.file.read(), 'Y') - - def test_zip_audiobooks(self): - paths = [ - (None, join(dirname(__file__), "files/fraszka-do-anusie.xml")), - (None, join(dirname(__file__), "files/fraszki.xml")), - ] - - url = utils.create_zip(paths, 'test-zip-slug') - self.assertEqual("zip/test-zip-slug.zip", url) - self.assertTrue(exists(join(settings.MEDIA_ROOT, url))) - - utils.remove_zip('test-zip-slug') - self.assertFalse(exists(join(settings.MEDIA_ROOT, url))) - - def test_remove_zip_on_media_change(self): - bm = models.BookMedia(book=self.book, type='ogg', name="Title") - bm.file.save(None, self.file) - bm.save() - - zip_url = self.book.zip_audiobooks('ogg') - self.assertEqual('zip/'+self.book.slug+'_ogg.zip', zip_url) - self.assertTrue(exists(join(settings.MEDIA_ROOT, zip_url))) - - bm2 = models.BookMedia(book=self.book, type='ogg', name="Other title") - bm2.file.save(None, self.file2) - bm2.name = "Title" - bm2.save() - # was the audiobook zip deleted? - self.assertFalse(exists(join(settings.MEDIA_ROOT, zip_url))) diff --git a/apps/catalogue/tests/cover.py b/apps/catalogue/tests/cover.py deleted file mode 100755 index 0e08556b4..000000000 --- a/apps/catalogue/tests/cover.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.core.files.base import ContentFile -from catalogue.test_utils import BookInfoStub, PersonStub, info_args, WLTestCase -from catalogue.models import Book -from mock import patch - - -class CoverTests(WLTestCase): - """Checks in parent_cover_changed is properly called.""" - def setUp(self): - WLTestCase.setUp(self) - self.TEXT = """""" - self.child = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Joe",), "Doe"), - **info_args("Child") - ) - - self.parent = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Jim",), "Lazy"), - cover_url="http://example.com/cover.jpg", - parts=[self.child.url], - **info_args("Parent") - ) - - @patch.object(Book, 'parent_cover_changed', autospec=True) - def test_simple_import(self, parent_cover_changed): - child = Book.from_text_and_meta(ContentFile(self.TEXT), self.child) - parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent) - parent_cover_changed.assert_called_with(child) - - # Now reimport parent. - parent_cover_changed.reset_mock() - parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent, - overwrite=True) - self.assertEqual(parent_cover_changed.call_count, 0) - - # Now change cover in parent. - parent_cover_changed.reset_mock() - self.parent.cover_url = "http://example.com/other-cover.jpg" - parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent, - overwrite=True) - parent_cover_changed.assert_called_with(child) - - @patch.object(Book, 'parent_cover_changed', autospec=True) - def test_change_cover(self, parent_cover_changed): - child = Book.from_text_and_meta(ContentFile(self.TEXT), self.child) - parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent) - parent_cover_changed.assert_called_with(child) - - @patch.object(Book, 'parent_cover_changed', autospec=True) - def test_new_child(self, parent_cover_changed): - # Add parent without child first. - parts, self.parent.parts = self.parent.parts, [] - parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent) - - # Now import child and reimport parent. - child = Book.from_text_and_meta(ContentFile(self.TEXT), self.child) - self.parent.parts = parts - parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent, - overwrite=True) - parent_cover_changed.assert_called_with(child) - - # Now remove the child. - parent_cover_changed.reset_mock() - self.parent.parts = [] - parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent, - overwrite=True) - parent_cover_changed.assert_called_with(child) diff --git a/apps/catalogue/tests/files/fraszka-do-anusie.xml b/apps/catalogue/tests/files/fraszka-do-anusie.xml deleted file mode 100755 index 3bbda155e..000000000 --- a/apps/catalogue/tests/files/fraszka-do-anusie.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - -Sęp Szarzyński, Mikołaj -Fraszka do Anusie -Sekuła, Aleksandra -Sutkowska, Olga -Fundacja Nowoczesna Polska -Barok -Liryka -Fraszka -Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez Bibliotekę Narodową z egzemplarza pochodzącego ze zbiorów BN. -http://wolnelektury.pl/katalog/lektura/fraszka-do-anusie -http://www.polona.pl/Content/8759 -Szarzyński Sęp, Mikołaj (ca 1550-1581), Rytmy abo Wiersze polskie w wyborze, E. Wende, Warszawa, 1914 -Domena publiczna - Mikołaj Sęp Szarzyński zm. 1581 -1581 -xml -text -text -2008-12-29 -L -L -pol - - - - -Mikołaj Sęp Szarzyński - -Fraszka do Anusie - - - -Kochanek, Łzy, Miłość, Oko, Serce, WzrokJeśli oczu hamować swoich nie umiały/ -Leśnych krynic boginie, aby nie płakały,/ -Gdy baczyłybaczyły --- tu: zobaczyły, patrzyły na. przy studni Narcyza pięknego,/ -A on umarł prze miłość oblicza swojego;/ -Jeśli nieśmiertelnym stanom żałość rozkazuje,/ -Gdy niebaczna fortuna co niesłusznie psuje: - -Jakoż ja mam hamować, by na lice moje/ -Z oczu smutnych żałośne nie płynęły zdroje?/ -Jako serce powściągać, aby nie wzdychało/ -I od ciężkiej żałości omdlewać nie miało? - - - diff --git a/apps/catalogue/tests/files/fraszki.xml b/apps/catalogue/tests/files/fraszki.xml deleted file mode 100755 index 90e7c1245..000000000 --- a/apps/catalogue/tests/files/fraszki.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - -Kochanowski, Jan -Fraszki -http://wolnelektury.pl/katalog/lektura/fraszka-do-anusie - -Fundacja Nowoczesna Polska -Renesans -Liryka -Fraszka - - -http://wolnelektury.pl/katalog/lektura/fraszki - -Domena publiczna - Jan Kochanowski zm. 1584 -1584 -xml -text - -text -2008-11-12 -pol - - - diff --git a/apps/catalogue/tests/search.py b/apps/catalogue/tests/search.py deleted file mode 100644 index 77afae4c3..000000000 --- a/apps/catalogue/tests/search.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from catalogue import models, views -from catalogue.test_utils import * - -from nose.tools import raises - -class BasicSearchLogicTests(WLTestCase): - - def setUp(self): - WLTestCase.setUp(self) - self.author_tag = models.Tag.objects.create( - name=u'Adam Mickiewicz [SubWord]', - category=u'author', slug="one") - - self.unicode_tag = models.Tag.objects.create( - name=u'Tadeusz Żeleński (Boy)', - category=u'author', slug="two") - - self.polish_tag = models.Tag.objects.create( - name=u'ĘÓĄŚŁŻŹĆŃęóąśłżźćń', - category=u'author', slug="three") - - @raises(ValueError) - def test_empty_query(self): - """ Check that empty queries raise an error. """ - views.find_best_matches(u'') - - @raises(ValueError) - def test_one_letter_query(self): - """ Check that one letter queries aren't permitted. """ - views.find_best_matches(u't') - - def test_match_by_prefix(self): - """ Tags should be matched by prefix of words within it's name. """ - self.assertEqual(views.find_best_matches(u'Ada'), (self.author_tag,)) - self.assertEqual(views.find_best_matches(u'Mic'), (self.author_tag,)) - self.assertEqual(views.find_best_matches(u'Mickiewicz'), (self.author_tag,)) - - def test_match_case_insensitive(self): - """ Tag names should match case insensitive. """ - self.assertEqual(views.find_best_matches(u'adam mickiewicz'), (self.author_tag,)) - - def test_match_case_insensitive_unicode(self): - """ Tag names should match case insensitive (unicode). """ - self.assertEqual(views.find_best_matches(u'tadeusz żeleński (boy)'), (self.unicode_tag,)) - - def test_word_boundary(self): - self.assertEqual(views.find_best_matches(u'SubWord'), (self.author_tag,)) - self.assertEqual(views.find_best_matches(u'[SubWord'), (self.author_tag,)) - - def test_unrelated_search(self): - self.assertEqual(views.find_best_matches(u'alamakota'), tuple()) - self.assertEqual(views.find_best_matches(u'Adama'), ()) - - def test_infix_doesnt_match(self): - """ Searching for middle of a word shouldn't match. """ - self.assertEqual(views.find_best_matches(u'deusz'), tuple()) - - def test_diactricts_removal_pl(self): - """ Tags should match both with and without national characters. """ - self.assertEqual(views.find_best_matches(u'ĘÓĄŚŁŻŹĆŃęóąśłżźćń'), (self.polish_tag,)) - self.assertEqual(views.find_best_matches(u'EOASLZZCNeoaslzzcn'), (self.polish_tag,)) - self.assertEqual(views.find_best_matches(u'eoaslzzcneoaslzzcn'), (self.polish_tag,)) - - def test_diactricts_query_removal_pl(self): - """ Tags without national characters shouldn't be matched by queries with them. """ - self.assertEqual(views.find_best_matches(u'Adąm'), ()) - - def test_sloppy(self): - self.assertEqual(views.find_best_matches(u'Żelenski'), (self.unicode_tag,)) - self.assertEqual(views.find_best_matches(u'zelenski'), (self.unicode_tag,)) diff --git a/apps/catalogue/tests/tags.py b/apps/catalogue/tests/tags.py deleted file mode 100644 index 42ea6e245..000000000 --- a/apps/catalogue/tests/tags.py +++ /dev/null @@ -1,297 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.core.files.base import ContentFile -from django.test import Client -from catalogue import models -from catalogue.test_utils import * - - -class BooksByTagTests(WLTestCase): - """ tests the /katalog/category/tag page for found books """ - - def setUp(self): - WLTestCase.setUp(self) - author = PersonStub(("Common",), "Man") - - # grandchild - self.gchild_info = BookInfoStub(genre='Genre', epoch='Epoch', kind='Kind', author=author, - **info_args("GChild")) - # child - self.child_info = BookInfoStub(genre='Genre', epoch='Epoch', kind='Other Kind', author=author, - parts=[self.gchild_info.url], - **info_args("Child")) - # parent - self.parent_info = BookInfoStub(genre='Genre', epoch='Epoch', kind='Kind', author=author, - parts=[self.child_info.url], - **info_args("Parent")) - - self.book_file = ContentFile('') - - def test_nonexistent_tag(self): - """ Looking for a non-existent tag should yield 404 """ - self.assertEqual(404, self.client.get('/katalog/autor/czeslaw-milosz/').status_code) - - def test_book_tag(self): - """ Looking for a book tag isn't permitted """ - models.Book.from_text_and_meta(self.book_file, self.gchild_info) - self.assertEqual(404, self.client.get('/katalog/gchild/').status_code) - - def test_tag_empty(self): - """ Tag with no books should return no books """ - models.Book.from_text_and_meta(self.book_file, self.gchild_info) - models.Tag.objects.create(name='Empty tag', slug='empty', category='author') - - context = self.client.get('/katalog/autor/empty/').context - self.assertEqual(0, len(context['object_list'])) - - def test_tag_eliminate(self): - """ Filtering by tag should only yield top-level qualifying books. """ - for info in self.gchild_info, self.child_info, self.parent_info: - models.Book.from_text_and_meta(self.book_file, info) - - # all three qualify - context = self.client.get('/katalog/gatunek/genre/').context - self.assertEqual([book.title for book in context['object_list']], - ['Parent']) - - # parent and gchild qualify, child doesn't - context = self.client.get('/katalog/rodzaj/kind/').context - self.assertEqual([book.title for book in context['object_list']], - ['Parent']) - - # Filtering by child's tag should yield the child - context = self.client.get('/katalog/rodzaj/other-kind/').context - self.assertEqual([book.title for book in context['object_list']], - ['Child']) - - -class TagRelatedTagsTests(WLTestCase): - """ tests the /katalog/category/tag/ page for related tags """ - - def setUp(self): - WLTestCase.setUp(self) - self.client = Client() - author = PersonStub(("Common",), "Man") - - gchild_info = BookInfoStub(author=author, genre="GchildGenre", epoch='Epoch', kind="Kind", - **info_args(u"GChild")) - child1_info = BookInfoStub(author=author, genre="ChildGenre", epoch='Epoch', kind="ChildKind", - parts=[gchild_info.url], - **info_args(u"Child1")) - child2_info = BookInfoStub(author=author, genre="ChildGenre", epoch='Epoch', kind="ChildKind", - **info_args(u"Child2")) - parent_info = BookInfoStub(author=author, genre="Genre", epoch='Epoch', kind="Kind", - parts=[child1_info.url, child2_info.url], - **info_args(u"Parent")) - - for info in gchild_info, child1_info, child2_info, parent_info: - book_text = """ - - Theme, %sTheme - Ala ma kota - - - """ % info.title.encode('utf-8') - book = models.Book.from_text_and_meta(ContentFile(book_text), info) - book.save() - - tag_empty = models.Tag(name='Empty tag', slug='empty', category='author') - tag_empty.save() - - def test_empty(self): - """ empty tag should have no related tags """ - - cats = self.client.get('/katalog/autor/empty/').context['categories'] - self.assertEqual({k: v for (k, v) in cats.items() if v}, {}, - 'tags related to empty tag') - - def test_has_related(self): - """ related own and descendants' tags should be generated """ - - cats = self.client.get('/katalog/rodzaj/kind/').context['categories'] - self.assertTrue('Common Man' in [tag.name for tag in cats['author']], - 'missing `author` related tag') - self.assertTrue('Epoch' in [tag.name for tag in cats['epoch']], - 'missing `epoch` related tag') - self.assertFalse(cats.get("kind", False), - "There should be no child-only related `kind` tags") - self.assertTrue("Genre" in [tag.name for tag in cats['genre']], - 'missing `genre` related tag') - self.assertFalse("ChildGenre" in [tag.name for tag in cats['genre']], - "There should be no child-only related `genre` tags") - self.assertTrue("GchildGenre" in [tag.name for tag in cats['genre']], - "missing grandchild's related tag") - self.assertTrue('Theme' in [tag.name for tag in cats['theme']], - "missing related theme") - self.assertFalse('Child1Theme' in [tag.name for tag in cats['theme']], - "There should be no child-only related `theme` tags") - self.assertTrue('GChildTheme' in [tag.name for tag in cats['theme']], - "missing grandchild's related theme") - - def test_related_differ(self): - """ related tags shouldn't include filtering tags """ - - response = self.client.get('/katalog/rodzaj/kind/') - cats = response.context['categories'] - self.assertFalse(cats.get('kind', False), - 'filtering tag wrongly included in related') - cats = self.client.get('/katalog/motyw/theme/').context['categories'] - self.assertFalse('Theme' in [tag.name for tag in cats['theme']], - 'filtering theme wrongly included in related') - - def test_parent_tag_once(self): - """ if parent and descendants have a common tag, count it only once """ - - cats = self.client.get('/katalog/rodzaj/kind/').context['categories'] - self.assertEqual([(tag.name, tag.count) for tag in cats['epoch']], - [('Epoch', 1)], - 'wrong related tag epoch tag on tag page') - - - def test_siblings_tags_count(self): - """ if children have tags and parent hasn't, count the children """ - - cats = self.client.get('/katalog/epoka/epoch/').context['categories'] - self.assertTrue(('ChildKind', 2) in [(tag.name, tag.count) for tag in cats['kind']], - 'wrong related kind tags on tag page, got: ' + - unicode([(tag.name, tag.count) for tag in cats['kind']])) - - # all occurencies of theme should be counted - self.assertTrue(('Theme', 4) in [(tag.name, tag.count) for tag in cats['theme']], - 'wrong related theme count') - - def test_query_child_tag(self): - """ - If child and parent have a common tag, but parent isn't included - in the result, child should still count. - """ - cats = self.client.get('/katalog/gatunek/childgenre/').context['categories'] - self.assertTrue(('Epoch', 2) in [(tag.name, tag.count) for tag in cats['epoch']], - 'wrong related kind tags on tag page, got: ' + - unicode([(tag.name, tag.count) for tag in cats['epoch']])) - - -class CleanTagRelationTests(WLTestCase): - """ tests for tag relations cleaning after deleting things """ - - def setUp(self): - WLTestCase.setUp(self) - author = PersonStub(("Common",), "Man") - - book_info = BookInfoStub(author=author, genre="G", epoch='E', kind="K", - **info_args(u"Book")) - book_text = """ - ThemeAla ma kota - - - """ - self.book = models.Book.from_text_and_meta(ContentFile(book_text), book_info) - - def test_delete_objects(self): - """ there should be no related tags left after deleting some objects """ - - models.Book.objects.all().delete() - cats = self.client.get('/katalog/rodzaj/k/').context['categories'] - self.assertEqual({k: v for (k, v) in cats.items() if v}, {}) - self.assertEqual(models.Fragment.objects.all().count(), 0, - "orphaned fragments left") - self.assertEqual(models.Tag.intermediary_table_model.objects.all().count(), 0, - "orphaned TagRelation objects left") - - def test_deleted_tag(self): - """ there should be no tag relations left after deleting tags """ - - models.Tag.objects.all().delete() - self.assertEqual(len(self.book.related_themes()), 0) - self.assertEqual(models.Tag.intermediary_table_model.objects.all().count(), 0, - "orphaned TagRelation objects left") - - -class TestIdenticalTag(WLTestCase): - - def setUp(self): - WLTestCase.setUp(self) - author = PersonStub((), "Tag") - - self.book_info = BookInfoStub(author=author, - genre="tag", - epoch='tag', - kind="tag", - **info_args(u"tag")) - self.book_text = """ - - - tagAla ma kota - - - - """ - - - def test_book_tags(self): - """ there should be all related tags in relevant categories """ - book = models.Book.from_text_and_meta(ContentFile(self.book_text), self.book_info) - - related_themes = book.related_themes() - for category in 'author', 'kind', 'genre', 'epoch': - self.assertTrue('tag' in [tag.slug for tag in book.tags.filter(category=category)], - 'missing related tag for %s' % category) - self.assertTrue('tag' in [tag.slug for tag in related_themes]) - - def test_qualified_url(self): - models.Book.from_text_and_meta(ContentFile(self.book_text), self.book_info) - categories = {'author': 'autor', 'theme': 'motyw', 'epoch': 'epoka', 'kind':'rodzaj', 'genre':'gatunek'} - for cat, localcat in categories.iteritems(): - context = self.client.get('/katalog/%s/tag/' % localcat).context - self.assertEqual(1, len(context['object_list'])) - self.assertNotEqual({}, context['categories']) - self.assertFalse(context['categories'].get(cat, False)) - - -class BookTagsTests(WLTestCase): - """ tests the /katalog/lektura/book/ page for related tags """ - - def setUp(self): - WLTestCase.setUp(self) - author1 = PersonStub(("Common",), "Man") - author2 = PersonStub(("Jim",), "Lazy") - - child_info = BookInfoStub(authors=(author1, author2), genre="ChildGenre", epoch='Epoch', kind="ChildKind", - **info_args(u"Child")) - parent_info = BookInfoStub(author=author1, genre="Genre", epoch='Epoch', kind="Kind", - parts=[child_info.url], - **info_args(u"Parent")) - - for info in child_info, parent_info: - book_text = """ - - Theme, %sTheme - Ala ma kota - - - """ % info.title.encode('utf-8') - models.Book.from_text_and_meta(ContentFile(book_text), info) - - def test_book_tags(self): - """ book should have own tags and whole tree's themes """ - - book = models.Book.objects.get(slug='parent') - related_themes = book.related_themes() - - self.assertEqual([t.slug for t in book.tags.filter(category='author')], - ['common-man']) - self.assertEqual([t.slug for t in book.tags.filter(category='kind')], - ['kind']) - self.assertEqual([(tag.name, tag.count) for tag in related_themes], - [('ChildTheme', 1), ('ParentTheme', 1), ('Theme', 2)]) - - def test_catalogue_tags(self): - """ test main page tags and counts """ - context = self.client.get('/katalog/').context - self.assertEqual([(tag.name, tag.count) for tag in context['categories']['author']], - [('Jim Lazy', 1), ('Common Man', 1)]) - self.assertEqual([(tag.name, tag.count) for tag in context['categories']['theme']], - [('ChildTheme', 1), ('ParentTheme', 1), ('Theme', 2)]) - diff --git a/apps/catalogue/tests/templatetags.py b/apps/catalogue/tests/templatetags.py deleted file mode 100644 index a66d604de..000000000 --- a/apps/catalogue/tests/templatetags.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from catalogue import models -from catalogue.templatetags import catalogue_tags -from catalogue.test_utils import * -from django.core.files.base import ContentFile - - -class BookDescTests(WLTestCase): - """ tests book_title template tag """ - - def setUp(self): - WLTestCase.setUp(self) - authors = PersonStub(("Common",), "Man"), PersonStub(("Jane",), "Doe") - - child_info = BookInfoStub(authors=authors, genre="Genre", epoch='Epoch', kind="Kind", - **info_args(u"Child")) - parent_info = BookInfoStub(authors=authors, genre="Genre", epoch='Epoch', kind="Kind", - parts=[child_info.url], - **info_args(u"Parent")) - - self.child = models.Book.from_text_and_meta(ContentFile(''), child_info) - models.Book.from_text_and_meta(ContentFile(''), parent_info) - self.child = models.Book.objects.get(pk=self.child.pk) - - def test_book_desc(self): - """ book description should return authors, ancestors, book """ - self.assertEqual(catalogue_tags.book_title(self.child), 'Jane Doe, Common Man, Parent, Child') diff --git a/apps/catalogue/tests/visit.py b/apps/catalogue/tests/visit.py deleted file mode 100644 index cab3c987d..000000000 --- a/apps/catalogue/tests/visit.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from catalogue import models -from catalogue.test_utils import BookInfoStub, PersonStub, WLTestCase, info_args -from django.core.files.base import ContentFile - - -class VisitTest(WLTestCase): - """Simply create some objects and visit some views.""" - - def setUp(self): - WLTestCase.setUp(self) - author = PersonStub(("Jane",), "Doe") - book_info = BookInfoStub(author=author, genre="Genre", - epoch='Epoch', kind="Kind", **info_args(u"A book")) - self.book = models.Book.from_text_and_meta(ContentFile(''' - - - - - Theme - Test - - - - - '''), book_info) - self.collection = models.Collection.objects.create( - title='Biblioteczka Boya', slug='boy', book_slugs='a-book') - - def test_visit_urls(self): - """ book description should return authors, ancestors, book """ - url_map = { - 200: [ - '', - 'lektury/', - 'lektury/boy/', - 'nowe/', - 'lektura/a-book/', - 'lektura/a-book.html', - 'lektura/a-book/motyw/theme/', - 'motyw/theme/', - 'autor/jane-doe/', - 'autor/jane-doe/gatunek/genre/', - 'autor/jane-doe/gatunek/genre/motyw/theme/', - 'pl.json', - 'b/%d/mini.pl.html' % self.book.pk, - 'b/%d/mini_nolink.pl.html' % self.book.pk, - 'b/%d/short.pl.html' % self.book.pk, - 'b/%d/wide.pl.html' % self.book.pk, - 'f/%d/promo.pl.html' % self.book.fragments.all()[0].pk, - 'f/%d/short.pl.html' % self.book.fragments.all()[0].pk, - ], - 404: [ - 'lektury/nonexistent/', # Nonexistent Collection. - 'lektura/nonexistent/', # Nonexistent Book. - 'lektura/nonexistent.html', # Nonexistent Book's HTML. - 'lektura/nonexistent/motyw/theme/', # Nonexistent Book's theme. - 'lektura/a-book/motyw/nonexistent/', # Nonexistent theme in a Book. - 'autor/nonexistent/', # Nonexistent author. - 'motyw/nonexistent/', # Nonexistent theme. - 'zh.json', # Nonexistent language. - 'b/%d/mini.pl.html' % (self.book.pk + 100), # Nonexistent book. - 'b/%d/mini_nolink.pl.html' % (self.book.pk + 100), # Nonexistent book. - 'b/%d/short.pl.html' % (self.book.pk + 100), # Nonexistent book. - 'b/%d/wide.pl.html' % (self.book.pk + 100), # Nonexistent book. - 'f/%d/promo.pl.html' % (self.book.fragments.all()[0].pk + 100), # Nonexistent fragment. - 'f/%d/short.pl.html' % (self.book.fragments.all()[0].pk + 100), # Nonexistent fragment. - ] - } - prefix = '/katalog/' - for expected_status, urls in url_map.items(): - for url in urls: - print(url) - status = self.client.get(prefix + url).status_code - self.assertEqual(status, expected_status, - "Wrong status code for '%s'. Expected %d, got %d." % ( - prefix + url, expected_status, status)) diff --git a/apps/catalogue/translation.py b/apps/catalogue/translation.py deleted file mode 100644 index 319736515..000000000 --- a/apps/catalogue/translation.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# - -from modeltranslation.translator import translator, TranslationOptions -from catalogue.models import Collection, Tag, Source - -class TagTranslationOptions(TranslationOptions): - fields = ('name', 'description', 'wiki_link') - -class CollectionTranslationOptions(TranslationOptions): - fields = ('title', 'description') - -class SourceTranslationOptions(TranslationOptions): - fields = ('name',) - -translator.register(Tag, TagTranslationOptions) -translator.register(Collection, CollectionTranslationOptions) -translator.register(Source, SourceTranslationOptions) diff --git a/apps/catalogue/urls.py b/apps/catalogue/urls.py deleted file mode 100644 index b7c59a055..000000000 --- a/apps/catalogue/urls.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url -from django.db.models import Max -from django.views.generic import ListView, RedirectView -from catalogue.feeds import AudiobookFeed -from catalogue.views import CustomPDFFormView -from catalogue.models import Book - - -SLUG = r'[a-z0-9-]*' - -urlpatterns = patterns('picture.views', - # pictures - currently pictures are coupled with catalogue, hence the url is here - url(r'^obraz/$', 'picture_list_thumb', name='picture_list_thumb'), - url(r'^obraz/(?P%s).html$' % SLUG, 'picture_viewer', name='picture_viewer'), - url(r'^obraz/(?P%s)/$' % SLUG, 'picture_detail'), - - url(r'^p/(?P\d+)/mini\.(?P.+)\.html', 'picture_mini', name='picture_mini'), - url(r'^p/(?P\d+)/short\.(?P.+)\.html', 'picture_short', name='picture_short'), - url(r'^pa/(?P\d+)/short\.(?P.+)\.html', 'picturearea_short', name='picture_area_short'), -) - -urlpatterns += patterns('', - # old search page - redirected - url(r'^szukaj/$', RedirectView.as_view( - url='/szukaj/', query_string=True, permanent=True)), -) - -urlpatterns += patterns('catalogue.views', - url(r'^$', 'catalogue', name='catalogue'), - - url(r'^lektury/$', 'book_list', name='book_list'), - url(r'^lektury/(?P[a-zA-Z0-9-]+)/$', 'collection', name='collection'), - url(r'^audiobooki/$', 'audiobook_list', name='audiobook_list'), - url(r'^daisy/$', 'daisy_list', name='daisy_list'), - url(r'^tags/$', 'tags_starting_with', name='hint'), - url(r'^jtags/?$', 'json_tags_starting_with', name='jhint'), - url(r'^nowe/$', ListView.as_view( - queryset=Book.objects.filter(parent=None).order_by('-created_at'), - template_name='catalogue/recent_list.html'), name='recent_list'), - url(r'^nowe/audiobooki/$', ListView.as_view( - queryset=Book.objects.filter(media__type='ogg').annotate(m=Max('media__uploaded_at')).order_by('-m'), - template_name='catalogue/recent_audiobooks_list.html'), name='recent_audiobooks_list'), - url(r'^nowe/daisy/$', ListView.as_view( - queryset=Book.objects.filter(media__type='daisy').annotate(m=Max('media__uploaded_at')).order_by('-m'), - template_name='catalogue/recent_daisy_list.html'), name='recent_daisy_list'), - - url(r'^custompdf/(?P%s)/$' % SLUG, CustomPDFFormView(), name='custom_pdf_form'), - - url(r'^audiobooki/(?Pmp3|ogg|daisy|all).xml$', AudiobookFeed(), name='audiobook_feed'), - - - # zip - url(r'^zip/pdf\.zip$', 'download_zip', {'format': 'pdf', 'slug': None}, 'download_zip_pdf'), - url(r'^zip/epub\.zip$', 'download_zip', {'format': 'epub', 'slug': None}, 'download_zip_epub'), - url(r'^zip/mobi\.zip$', 'download_zip', {'format': 'mobi', 'slug': None}, 'download_zip_mobi'), - url(r'^zip/mp3/(?P%s)\.zip' % SLUG, 'download_zip', {'format': 'mp3'}, 'download_zip_mp3'), - url(r'^zip/ogg/(?P%s)\.zip' % SLUG, 'download_zip', {'format': 'ogg'}, 'download_zip_ogg'), - - # Public interface. Do not change this URLs. - url(r'^lektura/(?P%s)\.html$' % SLUG, 'book_text', name='book_text'), - url(r'^lektura/(?P%s)/audiobook/$' % SLUG, 'player', name='book_player'), - url(r'^lektura/(?P%s)/$' % SLUG, 'book_detail', name='book_detail'), - url(r'^lektura/(?P%s)/motyw/(?P[a-zA-Z0-9-]+)/$' % SLUG, - 'book_fragments', name='book_fragments'), - - # Includes. - url(r'^(?P[^/]+)\.json$', 'catalogue_json'), - url(r'^b/(?P\d+)/mini\.(?P.+)\.html', 'book_mini', name='catalogue_book_mini'), - url(r'^b/(?P\d+)/mini_nolink\.(?P.+)\.html', 'book_mini', {'with_link': False}, name='catalogue_book_mini_nolink'), - url(r'^b/(?P\d+)/short\.(?P.+)\.html', 'book_short', name='catalogue_book_short'), - url(r'^b/(?P\d+)/wide\.(?P.+)\.html', 'book_wide', name='catalogue_book_wide'), - url(r'^f/(?P\d+)/promo\.(?P.+)\.html', 'fragment_promo', name='catalogue_fragment_promo'), - url(r'^f/(?P\d+)/short\.(?P.+)\.html', 'fragment_short', name='catalogue_fragment_short'), - - # This should be the last pattern. - url(r'^(?P[a-zA-Z0-9-/]*)/$', 'tagged_object_list', name='tagged_object_list'), -) diff --git a/apps/catalogue/utils.py b/apps/catalogue/utils.py deleted file mode 100644 index bcc5a0b33..000000000 --- a/apps/catalogue/utils.py +++ /dev/null @@ -1,358 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from collections import defaultdict -import hashlib -import random -import re -import time -from base64 import urlsafe_b64encode - -from django.http import HttpResponse -from django.core.files.uploadedfile import UploadedFile -from django.core.files.storage import DefaultStorage -from django.utils.encoding import force_unicode -from django.conf import settings -from os import mkdir, path, unlink -from errno import EEXIST, ENOENT -from fcntl import flock, LOCK_EX -from zipfile import ZipFile - -from reporting.utils import read_chunks - -# Use the system (hardware-based) random number generator if it exists. -if hasattr(random, 'SystemRandom'): - randrange = random.SystemRandom().randrange -else: - randrange = random.randrange -MAX_SESSION_KEY = 18446744073709551616L # 2 << 63 - - -def get_random_hash(seed): - sha_digest = hashlib.sha1('%s%s%s%s' % - (randrange(0, MAX_SESSION_KEY), time.time(), unicode(seed).encode('utf-8', 'replace'), - settings.SECRET_KEY)).digest() - return urlsafe_b64encode(sha_digest).replace('=', '').replace('_', '-').lower() - - -def split_tags(*tag_lists): - if len(tag_lists) == 1: - result = defaultdict(list) - for tag in tag_lists[0]: - result[tag.category].append(tag) - else: - result = defaultdict(dict) - for tag_list in tag_lists: - for tag in tag_list: - try: - result[tag.category][tag.pk].count += tag.count - except KeyError: - result[tag.category][tag.pk] = tag - for k, v in result.items(): - result[k] = sorted(v.values(), key=lambda tag: tag.sort_key) - return result - - -class ExistingFile(UploadedFile): - - def __init__(self, path, *args, **kwargs): - self.path = path - super(ExistingFile, self).__init__(*args, **kwargs) - - def temporary_file_path(self): - return self.path - - def close(self): - pass - - -class LockFile(object): - """ - A file lock monitor class; createas an ${objname}.lock - file in directory dir, and locks it exclusively. - To be used in 'with' construct. - """ - def __init__(self, dir, objname): - self.lockname = path.join(dir, objname + ".lock") - - def __enter__(self): - self.lock = open(self.lockname, 'w') - flock(self.lock, LOCK_EX) - - def __exit__(self, *err): - try: - unlink(self.lockname) - except OSError as oe: - if oe.errno != EEXIST: - raise oe - self.lock.close() - - -#@task -def create_zip(paths, zip_slug): - """ - Creates a zip in MEDIA_ROOT/zip directory containing files from path. - Resulting archive filename is ${zip_slug}.zip - Returns it's path relative to MEDIA_ROOT (no initial slash) - """ - # directory to store zip files - zip_path = path.join(settings.MEDIA_ROOT, 'zip') - - try: - mkdir(zip_path) - except OSError as oe: - if oe.errno != EEXIST: - raise oe - zip_filename = zip_slug + ".zip" - - with LockFile(zip_path, zip_slug): - if not path.exists(path.join(zip_path, zip_filename)): - zipf = ZipFile(path.join(zip_path, zip_filename), 'w') - try: - for arcname, p in paths: - if arcname is None: - arcname = path.basename(p) - zipf.write(p, arcname) - finally: - zipf.close() - - return 'zip/' + zip_filename - - -def remove_zip(zip_slug): - """ - removes the ${zip_slug}.zip file from zip store. - """ - zip_file = path.join(settings.MEDIA_ROOT, 'zip', zip_slug + '.zip') - try: - unlink(zip_file) - except OSError as oe: - if oe.errno != ENOENT: - raise oe - - -class AttachmentHttpResponse(HttpResponse): - """Response serving a file to be downloaded. - """ - def __init__(self, file_path, file_name, mimetype): - super(AttachmentHttpResponse, self).__init__(mimetype=mimetype) - self['Content-Disposition'] = 'attachment; filename=%s' % file_name - self.file_path = file_path - self.file_name = file_name - - with open(DefaultStorage().path(self.file_path)) as f: - for chunk in read_chunks(f): - self.write(chunk) - -class MultiQuerySet(object): - def __init__(self, *args, **kwargs): - self.querysets = args - self._count = None - - def count(self): - if not self._count: - self._count = sum(len(qs) for qs in self.querysets) - return self._count - - def __len__(self): - return self.count() - - def __getitem__(self, item): - try: - (offset, stop, step) = item.indices(self.count()) - except AttributeError: - # it's not a slice - make it one - return self[item : item + 1][0] - items = [] - total_len = stop - offset - for qs in self.querysets: - if len(qs) < offset: - offset -= len(qs) - else: - items += list(qs[offset:stop]) - if len(items) >= total_len: - return items - else: - offset = 0 - stop = total_len - len(items) - continue - -class SortedMultiQuerySet(MultiQuerySet): - def __init__(self, *args, **kwargs): - self.order_by = kwargs.pop('order_by', None) - self.sortfn = kwargs.pop('sortfn', None) - if self.order_by is not None: - self.sortfn = lambda a, b: cmp((getattr(a, f) for f in self.order_by), - (getattr(b, f) for f in self.order_by)) - super(SortedMultiQuerySet, self).__init__(*args, **kwargs) - - def __getitem__(self, item): - sort_heads = [0] * len(self.querysets) - try: - (offset, stop, step) = item.indices(self.count()) - except AttributeError: - # it's not a slice - make it one - return self[item : item + 1][0] - items = [] - total_len = stop - offset - skipped = 0 - i_s = range(len(sort_heads)) - - while len(items) < total_len: - candidate = None - candidate_i = None - for i in i_s: - def get_next(): - return self.querysets[i][sort_heads[i]] - try: - if candidate is None: - candidate = get_next() - candidate_i = i - else: - competitor = get_next() - if self.sortfn(candidate, competitor) > 0: - candidate = competitor - candidate_i = i - except IndexError: - continue # continue next sort_head - # we have no more elements: - if candidate is None: - break - sort_heads[candidate_i] += 1 - if skipped < offset: - skipped += 1 - continue # continue next item - items.append(candidate) - - return items - - -def truncate_html_words(s, num, end_text='...'): - """Truncates HTML to a certain number of words (not counting tags and - comments). Closes opened tags if they were correctly closed in the given - html. Takes an optional argument of what should be used to notify that the - string has been truncated, defaulting to ellipsis (...). - - Newlines in the HTML are preserved. - - This is just a version of django.utils.text.truncate_html_words with no space before the end_text. - """ - s = force_unicode(s) - length = int(num) - if length <= 0: - return u'' - html4_singlets = ('br', 'col', 'link', 'base', 'img', 'param', 'area', 'hr', 'input') - # Set up regular expressions - re_words = re.compile(r'&.*?;|<.*?>|(\w[\w-]*)', re.U) - re_tag = re.compile(r'<(/)?([^ ]+?)(?: (/)| .*?)?>') - # Count non-HTML words and keep note of open tags - pos = 0 - end_text_pos = 0 - words = 0 - open_tags = [] - while words <= length: - m = re_words.search(s, pos) - if not m: - # Checked through whole string - break - pos = m.end(0) - if m.group(1): - # It's an actual non-HTML word - words += 1 - if words == length: - end_text_pos = pos - continue - # Check for tag - tag = re_tag.match(m.group(0)) - if not tag or end_text_pos: - # Don't worry about non tags or tags after our truncate point - continue - closing_tag, tagname, self_closing = tag.groups() - tagname = tagname.lower() # Element names are always case-insensitive - if self_closing or tagname in html4_singlets: - pass - elif closing_tag: - # Check for match in open tags list - try: - i = open_tags.index(tagname) - except ValueError: - pass - else: - # SGML: An end tag closes, back to the matching start tag, all unclosed intervening start tags with omitted end tags - open_tags = open_tags[i+1:] - else: - # Add it to the start of the open tags list - open_tags.insert(0, tagname) - if words <= length: - # Don't try to close tags if we don't need to truncate - return s - out = s[:end_text_pos] - if end_text: - out += end_text - # Close any tags still open - for tag in open_tags: - out += '' % tag - # Return string - return out - - -def customizations_hash(customizations): - customizations.sort() - return hash(tuple(customizations)) - - -def get_customized_pdf_path(book, customizations): - """ - Returns a MEDIA_ROOT relative path for a customized pdf. The name will contain a hash of customization options. - """ - h = customizations_hash(customizations) - return 'book/%s/%s-custom-%s.pdf' % (book.slug, book.slug, h) - - -def clear_custom_pdf(book): - """ - Returns a list of paths to generated customized pdf of a book - """ - from waiter.utils import clear_cache - clear_cache('book/%s' % book.slug) - - -class AppSettings(object): - """Allows specyfying custom settings for an app, with default values. - - Just subclass, set some properties and instantiate with a prefix. - Getting a SETTING from an instance will check for prefix_SETTING - in project settings if set, else take the default. The value will be - then filtered through _more_SETTING method, if there is one. - - """ - def __init__(self, prefix): - self._prefix = prefix - - def __getattribute__(self, name): - if name.startswith('_'): - return object.__getattribute__(self, name) - value = getattr(settings, - "%s_%s" % (self._prefix, name), - object.__getattribute__(self, name)) - more = "_more_%s" % name - if hasattr(self, more): - value = getattr(self, more)(value) - return value - - -def trim_query_log(trim_to=25): - """ -connection.queries includes all SQL statements -- INSERTs, UPDATES, SELECTs, etc. Each time your app hits the database, the query will be recorded. -This can sometimes occupy lots of memory, so trim it here a bit. - """ - if settings.DEBUG: - from django.db import connection - connection.queries = trim_to > 0 \ - and connection.queries[-trim_to:] \ - or [] - - -def delete_from_cache_by_language(cache, key_template): - cache.delete_many([key_template % lc for lc, ln in settings.LANGUAGES]) diff --git a/apps/catalogue/views.py b/apps/catalogue/views.py deleted file mode 100644 index a25a08ffa..000000000 --- a/apps/catalogue/views.py +++ /dev/null @@ -1,691 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from collections import OrderedDict -import re - -from django.conf import settings -from django.template import RequestContext -from django.template.loader import render_to_string -from django.shortcuts import render_to_response, get_object_or_404, render -from django.http import HttpResponse, HttpResponseRedirect, Http404, HttpResponsePermanentRedirect, JsonResponse -from django.core.urlresolvers import reverse -from django.db.models import Q -from django.contrib.auth.decorators import login_required, user_passes_test -from django.utils.http import urlquote_plus -from django.utils import translation -from django.utils.translation import ugettext as _, ugettext_lazy - -from ajaxable.utils import AjaxableFormView -from pdcounter import models as pdcounter_models -from pdcounter import views as pdcounter_views -from picture.models import Picture, PictureArea -from picture.views import picture_list_thumb -from ssify import ssi_included, ssi_expect, SsiVariable as V -from suggest.forms import PublishingSuggestForm -from catalogue import forms -from catalogue.helpers import get_top_level_related_tags -from catalogue import models -from catalogue.utils import split_tags, MultiQuerySet, SortedMultiQuerySet -from catalogue.templatetags.catalogue_tags import tag_list, collection_list - -staff_required = user_passes_test(lambda user: user.is_staff) - - -def catalogue(request, as_json=False): - common_categories = ('author',) - split_categories = ('epoch', 'genre', 'kind') - - categories = split_tags( - get_top_level_related_tags(categories=common_categories), - models.Tag.objects.usage_for_model( - models.Fragment, counts=True).filter(category='theme'), - models.Tag.objects.usage_for_model( - Picture, counts=True).filter(category__in=common_categories), - models.Tag.objects.usage_for_model( - PictureArea, counts=True).filter( - category='theme') - ) - book_categories = split_tags( - get_top_level_related_tags(categories=split_categories) - ) - picture_categories = split_tags( - models.Tag.objects.usage_for_model( - Picture, counts=True).filter( - category__in=split_categories), - ) - - collections = models.Collection.objects.all() - - def render_tag_list(tags): - return render_to_string('catalogue/tag_list.html', tag_list(tags)) - - def render_split(with_books, with_pictures): - ctx = {} - if with_books: - ctx['books'] = render_tag_list(with_books) - if with_pictures: - ctx['pictures'] = render_tag_list(with_pictures) - return render_to_string('catalogue/tag_list_split.html', ctx) - - output = {} - output['theme'] = render_tag_list(categories.get('theme', [])) - for category in common_categories: - output[category] = render_tag_list(categories.get(category, [])) - for category in split_categories: - output[category] = render_split( - book_categories.get(category, []), - picture_categories.get(category, [])) - - output['collections'] = render_to_string( - 'catalogue/collection_list.html', collection_list(collections)) - if as_json: - return JsonResponse(output) - else: - return render_to_response('catalogue/catalogue.html', locals(), - context_instance=RequestContext(request)) - - -@ssi_included -def catalogue_json(request): - return catalogue(request, True) - - -def book_list(request, filter=None, get_filter=None, - template_name='catalogue/book_list.html', - nav_template_name='catalogue/snippets/book_list_nav.html', - list_template_name='catalogue/snippets/book_list.html', - context=None, - ): - """ generates a listing of all books, optionally filtered with a test function """ - if get_filter: - filter = get_filter() - books_by_author, orphans, books_by_parent = models.Book.book_list(filter) - books_nav = OrderedDict() - for tag in books_by_author: - if books_by_author[tag]: - books_nav.setdefault(tag.sort_key[0], []).append(tag) - rendered_nav = render_to_string(nav_template_name, locals()) - rendered_book_list = render_to_string(list_template_name, locals()) - return render_to_response(template_name, locals(), - context_instance=RequestContext(request)) - - -def audiobook_list(request): - return book_list(request, Q(media__type='mp3') | Q(media__type='ogg'), - template_name='catalogue/audiobook_list.html', - list_template_name='catalogue/snippets/audiobook_list.html', - ) - - -def daisy_list(request): - return book_list(request, Q(media__type='daisy'), - template_name='catalogue/daisy_list.html', - ) - - -def collection(request, slug): - coll = get_object_or_404(models.Collection, slug=slug) - if coll.kind == 'book': - view = book_list - tmpl = "catalogue/collection.html" - elif coll.kind == 'picture': - view = picture_list_thumb - tmpl = "picture/collection.html" - else: - raise ValueError('How do I show this kind of collection? %s' % coll.kind) - return view(request, get_filter=coll.get_query, - template_name=tmpl, - context={'collection': coll}) - - -def differentiate_tags(request, tags, ambiguous_slugs): - beginning = '/'.join(tag.url_chunk for tag in tags) - unparsed = '/'.join(ambiguous_slugs[1:]) - options = [] - for tag in models.Tag.objects.filter(slug=ambiguous_slugs[0]): - options.append({ - 'url_args': '/'.join((beginning, tag.url_chunk, unparsed)).strip('/'), - 'tags': [tag] - }) - return render_to_response('catalogue/differentiate_tags.html', - {'tags': tags, 'options': options, 'unparsed': ambiguous_slugs[1:]}, - context_instance=RequestContext(request)) - - -# TODO: Rewrite this hellish piece of code which tries to do everything -def tagged_object_list(request, tags=''): - # preliminary tests and conditions - try: - tags = models.Tag.get_tag_list(tags) - except models.Tag.DoesNotExist: - # Perhaps the user is asking about an author in Public Domain - # counter (they are not represented in tags) - chunks = tags.split('/') - if len(chunks) == 2 and chunks[0] == 'autor': - return pdcounter_views.author_detail(request, chunks[1]) - else: - raise Http404 - except models.Tag.MultipleObjectsReturned, e: - # Ask the user to disambiguate - return differentiate_tags(request, e.tags, e.ambiguous_slugs) - except models.Tag.UrlDeprecationWarning, e: - return HttpResponsePermanentRedirect(reverse('tagged_object_list', args=['/'.join(tag.url_chunk for tag in e.tags)])) - - try: - if len(tags) > settings.MAX_TAG_LIST: - raise Http404 - except AttributeError: - pass - - # beginning of digestion - theme_is_set = [tag for tag in tags if tag.category == 'theme'] - shelf_is_set = [tag for tag in tags if tag.category == 'set'] - only_shelf = shelf_is_set and len(tags) == 1 - only_my_shelf = only_shelf and request.user.is_authenticated() and request.user == tags[0].user - tags_pks = [tag.pk for tag in tags] - - objects = None - - if theme_is_set: - shelf_tags = [tag for tag in tags if tag.category == 'set'] - fragment_tags = [tag for tag in tags if tag.category != 'set'] - fragments = models.Fragment.tagged.with_all(fragment_tags) - areas = PictureArea.tagged.with_all(fragment_tags) - - if shelf_tags: - books = models.Book.tagged.with_all(shelf_tags).order_by() - fragments = fragments.filter(Q(book__in=books) | Q(book__ancestor__in=books)) - areas = PictureArea.objects.none() - - categories = split_tags( - models.Tag.objects.usage_for_queryset(fragments, counts=True - ).exclude(pk__in=tags_pks), - models.Tag.objects.usage_for_queryset(areas, counts=True - ).exclude(pk__in=tags_pks) - ) - - # we want the Pictures to go first - objects = MultiQuerySet(areas, fragments) - else: - all_books = models.Book.tagged.with_all(tags) - if shelf_is_set: - books = all_books.order_by('sort_key_author', 'title') - pictures = Picture.objects.none() - related_book_tags = models.Tag.objects.usage_for_queryset( - books, counts=True).exclude( - category='set').exclude(pk__in=tags_pks) - else: - books = models.Book.tagged_top_level(tags).order_by( - 'sort_key_author', 'title') - pictures = Picture.tagged.with_all(tags).order_by( - 'sort_key_author', 'title') - related_book_tags = get_top_level_related_tags(tags) - - fragments = models.Fragment.objects.filter(book__in=all_books) - areas = PictureArea.objects.filter(picture__in=pictures) - - categories = split_tags( - related_book_tags, - models.Tag.objects.usage_for_queryset( - pictures, counts=True).exclude(pk__in=tags_pks), - models.Tag.objects.usage_for_queryset( - fragments, counts=True).filter( - category='theme').exclude(pk__in=tags_pks), - models.Tag.objects.usage_for_queryset( - areas, counts=True).filter( - category__in=('theme', 'thing')).exclude( - pk__in=tags_pks), - ) - - objects = SortedMultiQuerySet(pictures, books, - order_by=('sort_key_author', 'title')) - - return render_to_response('catalogue/tagged_object_list.html', - { - 'object_list': objects, - 'categories': categories, - 'only_shelf': only_shelf, - 'only_my_shelf': only_my_shelf, - 'formats_form': forms.DownloadFormatsForm(), - 'tags': tags, - 'tag_ids': tags_pks, - 'theme_is_set': theme_is_set, - }, - context_instance=RequestContext(request)) - - -def book_fragments(request, slug, theme_slug): - book = get_object_or_404(models.Book, slug=slug) - theme = get_object_or_404(models.Tag, slug=theme_slug, category='theme') - fragments = models.Fragment.tagged.with_all([theme]).filter( - Q(book=book) | Q(book__ancestor=book)) - - return render_to_response('catalogue/book_fragments.html', locals(), - context_instance=RequestContext(request)) - - -def book_detail(request, slug): - try: - book = models.Book.objects.get(slug=slug) - except models.Book.DoesNotExist: - return pdcounter_views.book_stub_detail(request, slug) - - book_children = book.children.all().order_by('parent_number', 'sort_key') - return render_to_response('catalogue/book_detail.html', locals(), - context_instance=RequestContext(request)) - - -def player(request, slug): - book = get_object_or_404(models.Book, slug=slug) - if not book.has_media('mp3'): - raise Http404 - - ogg_files = {} - for m in book.media.filter(type='ogg').order_by().iterator(): - ogg_files[m.name] = m - - audiobooks = [] - have_oggs = True - projects = set() - for mp3 in book.media.filter(type='mp3').iterator(): - # ogg files are always from the same project - meta = mp3.extra_info - project = meta.get('project') - if not project: - # temporary fallback - project = u'CzytamySłuchając' - - projects.add((project, meta.get('funded_by', ''))) - - media = {'mp3': mp3} - - ogg = ogg_files.get(mp3.name) - if ogg: - media['ogg'] = ogg - else: - have_oggs = False - audiobooks.append(media) - - projects = sorted(projects) - - extra_info = book.extra_info - - return render_to_response('catalogue/player.html', locals(), - context_instance=RequestContext(request)) - - -def book_text(request, slug): - book = get_object_or_404(models.Book, slug=slug) - - if not book.has_html_file(): - raise Http404 - return render_to_response('catalogue/book_text.html', locals(), - context_instance=RequestContext(request)) - - -# ========== -# = Search = -# ========== - -def _no_diacritics_regexp(query): - """ returns a regexp for searching for a query without diacritics - - should be locale-aware """ - names = { - u'a':u'aąĄ', u'c':u'cćĆ', u'e':u'eęĘ', u'l': u'lłŁ', u'n':u'nńŃ', u'o':u'oóÓ', u's':u'sśŚ', u'z':u'zźżŹŻ', - u'ą':u'ąĄ', u'ć':u'ćĆ', u'ę':u'ęĘ', u'ł': u'łŁ', u'ń':u'ńŃ', u'ó':u'óÓ', u'ś':u'śŚ', u'ź':u'źŹ', u'ż':u'żŻ' - } - def repl(m): - l = m.group() - return u"(%s)" % '|'.join(names[l]) - return re.sub(u'[%s]' % (u''.join(names.keys())), repl, query) - -def unicode_re_escape(query): - """ Unicode-friendly version of re.escape """ - return re.sub(r'(?u)(\W)', r'\\\1', query) - -def _word_starts_with(name, prefix): - """returns a Q object getting models having `name` contain a word - starting with `prefix` - - We define word characters as alphanumeric and underscore, like in JS. - - Works for MySQL, PostgreSQL, Oracle. - For SQLite, _sqlite* version is substituted for this. - """ - kwargs = {} - - prefix = _no_diacritics_regexp(unicode_re_escape(prefix)) - # can't use [[:<:]] (word start), - # but we want both `xy` and `(xy` to catch `(xyz)` - kwargs['%s__iregex' % name] = u"(^|[^[:alnum:]_])%s" % prefix - - return Q(**kwargs) - - -def _word_starts_with_regexp(prefix): - prefix = _no_diacritics_regexp(unicode_re_escape(prefix)) - return ur"(^|(?<=[^\wąćęłńóśźżĄĆĘŁŃÓŚŹŻ]))%s" % prefix - - -def _sqlite_word_starts_with(name, prefix): - """ version of _word_starts_with for SQLite - - SQLite in Django uses Python re module - """ - kwargs = {} - kwargs['%s__iregex' % name] = _word_starts_with_regexp(prefix) - return Q(**kwargs) - - -if hasattr(settings, 'DATABASES'): - if settings.DATABASES['default']['ENGINE'] == 'django.db.backends.sqlite3': - _word_starts_with = _sqlite_word_starts_with -elif settings.DATABASE_ENGINE == 'sqlite3': - _word_starts_with = _sqlite_word_starts_with - - -class App(): - def __init__(self, name, view): - self.name = name - self._view = view - self.lower = name.lower() - self.category = 'application' - def view(self): - return reverse(*self._view) - -_apps = ( - App(u'Leśmianator', (u'lesmianator', )), - ) - - -def _tags_starting_with(prefix, user=None): - prefix = prefix.lower() - # PD counter - book_stubs = pdcounter_models.BookStub.objects.filter(_word_starts_with('title', prefix)) - authors = pdcounter_models.Author.objects.filter(_word_starts_with('name', prefix)) - - books = models.Book.objects.filter(_word_starts_with('title', prefix)) - tags = models.Tag.objects.filter(_word_starts_with('name', prefix)) - if user and user.is_authenticated(): - tags = tags.filter(~Q(category='set') | Q(user=user)) - else: - tags = tags.exclude(category='set') - - prefix_regexp = re.compile(_word_starts_with_regexp(prefix)) - return list(books) + list(tags) + [app for app in _apps if prefix_regexp.search(app.lower)] + list(book_stubs) + list(authors) - - -def _get_result_link(match, tag_list): - if isinstance(match, models.Tag): - return reverse('catalogue.views.tagged_object_list', - kwargs={'tags': '/'.join(tag.url_chunk for tag in tag_list + [match])} - ) - elif isinstance(match, App): - return match.view() - else: - return match.get_absolute_url() - - -def _get_result_type(match): - if isinstance(match, models.Book) or isinstance(match, pdcounter_models.BookStub): - match_type = 'book' - else: - match_type = match.category - return match_type - - -def books_starting_with(prefix): - prefix = prefix.lower() - return models.Book.objects.filter(_word_starts_with('title', prefix)) - - -def find_best_matches(query, user=None): - """ Finds a models.Book, Tag, models.BookStub or Author best matching a query. - - Returns a with: - - zero elements when nothing is found, - - one element when a best result is found, - - more then one element on multiple exact matches - - Raises a ValueError on too short a query. - """ - - query = query.lower() - if len(query) < 2: - raise ValueError("query must have at least two characters") - - result = tuple(_tags_starting_with(query, user)) - # remove pdcounter stuff - book_titles = set(match.pretty_title().lower() for match in result - if isinstance(match, models.Book)) - authors = set(match.name.lower() for match in result - if isinstance(match, models.Tag) and match.category == 'author') - result = tuple(res for res in result if not ( - (isinstance(res, pdcounter_models.BookStub) and res.pretty_title().lower() in book_titles) - or (isinstance(res, pdcounter_models.Author) and res.name.lower() in authors) - )) - - exact_matches = tuple(res for res in result if res.name.lower() == query) - if exact_matches: - return exact_matches - else: - return tuple(result)[:1] - - -def search(request): - tags = request.GET.get('tags', '') - prefix = request.GET.get('q', '') - - try: - tag_list = models.Tag.get_tag_list(tags) - except: - tag_list = [] - - try: - result = find_best_matches(prefix, request.user) - except ValueError: - return render_to_response('catalogue/search_too_short.html', {'tags':tag_list, 'prefix':prefix}, - context_instance=RequestContext(request)) - - if len(result) == 1: - return HttpResponseRedirect(_get_result_link(result[0], tag_list)) - elif len(result) > 1: - return render_to_response('catalogue/search_multiple_hits.html', - {'tags':tag_list, 'prefix':prefix, 'results':((x, _get_result_link(x, tag_list), _get_result_type(x)) for x in result)}, - context_instance=RequestContext(request)) - else: - form = PublishingSuggestForm(initial={"books": prefix + ", "}) - return render_to_response('catalogue/search_no_hits.html', - {'tags':tag_list, 'prefix':prefix, "pubsuggest_form": form}, - context_instance=RequestContext(request)) - - -def tags_starting_with(request): - prefix = request.GET.get('q', '') - # Prefix must have at least 2 characters - if len(prefix) < 2: - return HttpResponse('') - tags_list = [] - result = "" - for tag in _tags_starting_with(prefix, request.user): - if not tag.name in tags_list: - result += "\n" + tag.name - tags_list.append(tag.name) - return HttpResponse(result) - -def json_tags_starting_with(request, callback=None): - # Callback for JSONP - prefix = request.GET.get('q', '') - callback = request.GET.get('callback', '') - # Prefix must have at least 2 characters - if len(prefix) < 2: - return HttpResponse('') - tags_list = [] - for tag in _tags_starting_with(prefix, request.user): - if not tag.name in tags_list: - tags_list.append(tag.name) - if request.GET.get('mozhint', ''): - result = [prefix, tags_list] - else: - result = {"matches": tags_list} - response = JsonResponse(result, safe=False) - if callback: - response.content = callback + "(" + response.content + ");" - return response - - -# ========= -# = Admin = -# ========= -@login_required -@staff_required -def import_book(request): - """docstring for import_book""" - book_import_form = forms.BookImportForm(request.POST, request.FILES) - if book_import_form.is_valid(): - try: - book_import_form.save() - except: - import sys - import pprint - import traceback - info = sys.exc_info() - exception = pprint.pformat(info[1]) - tb = '\n'.join(traceback.format_tb(info[2])) - return HttpResponse(_("An error occurred: %(exception)s\n\n%(tb)s") % {'exception':exception, 'tb':tb}, mimetype='text/plain') - return HttpResponse(_("Book imported successfully")) - else: - return HttpResponse(_("Error importing file: %r") % book_import_form.errors) - - -# info views for API - -def book_info(request, id, lang='pl'): - book = get_object_or_404(models.Book, id=id) - # set language by hand - translation.activate(lang) - return render_to_response('catalogue/book_info.html', locals(), - context_instance=RequestContext(request)) - - -def tag_info(request, id): - tag = get_object_or_404(models.Tag, id=id) - return HttpResponse(tag.description) - - -def download_zip(request, format, slug=None): - url = None - if format in models.Book.ebook_formats: - url = models.Book.zip_format(format) - elif format in ('mp3', 'ogg') and slug is not None: - book = get_object_or_404(models.Book, slug=slug) - url = book.zip_audiobooks(format) - else: - raise Http404('No format specified for zip package') - return HttpResponseRedirect(urlquote_plus(settings.MEDIA_URL + url, safe='/?=')) - - -class CustomPDFFormView(AjaxableFormView): - form_class = forms.CustomPDFForm - title = ugettext_lazy('Download custom PDF') - submit = ugettext_lazy('Download') - honeypot = True - - def __call__(self, *args, **kwargs): - if settings.NO_CUSTOM_PDF: - raise Http404('Custom PDF is disabled') - return super(CustomPDFFormView, self).__call__(*args, **kwargs) - - def form_args(self, request, obj): - """Override to parse view args and give additional args to the form.""" - return (obj,), {} - - def get_object(self, request, slug, *args, **kwargs): - return get_object_or_404(models.Book, slug=slug) - - def context_description(self, request, obj): - return obj.pretty_title() - - -#### -# Includes -#### - - -@ssi_included -def book_mini(request, pk, with_link=True): - book = get_object_or_404(models.Book, pk=pk) - author_str = ", ".join(tag.name - for tag in book.tags.filter(category='author')) - return render(request, 'catalogue/book_mini_box.html', { - 'book': book, - 'author_str': author_str, - 'with_link': with_link, - 'show_lang': book.language_code() != settings.LANGUAGE_CODE, - }) - - -@ssi_included(get_ssi_vars=lambda pk: (lambda ipk: ( - ('ssify.get_csrf_token',), - ('social_tags.likes_book', (ipk,)), - ('social_tags.book_shelf_tags', (ipk,)), - ))(ssi_expect(pk, int))) -def book_short(request, pk): - book = get_object_or_404(models.Book, pk=pk) - stage_note, stage_note_url = book.stage_note() - - return render(request, 'catalogue/book_short.html', { - 'book': book, - 'has_audio': book.has_media('mp3'), - 'main_link': book.get_absolute_url(), - 'parents': book.parents(), - 'tags': split_tags(book.tags.exclude(category__in=('set', 'theme'))), - 'show_lang': book.language_code() != settings.LANGUAGE_CODE, - 'stage_note': stage_note, - 'stage_note_url': stage_note_url, - }) - - -@ssi_included(get_ssi_vars=lambda pk: book_short.get_ssi_vars(pk) + - (lambda ipk: ( - ('social_tags.choose_cite', [ipk]), - ('catalogue_tags.choose_fragment', [ipk], { - 'unless': V('social_tags.choose_cite', [ipk])}), - ))(ssi_expect(pk, int))) -def book_wide(request, pk): - book = get_object_or_404(models.Book, pk=pk) - stage_note, stage_note_url = book.stage_note() - extra_info = book.extra_info - - return render(request, 'catalogue/book_wide.html', { - 'book': book, - 'has_audio': book.has_media('mp3'), - 'parents': book.parents(), - 'tags': split_tags(book.tags.exclude(category__in=('set', 'theme'))), - 'show_lang': book.language_code() != settings.LANGUAGE_CODE, - 'stage_note': stage_note, - 'stage_note_url': stage_note_url, - - 'main_link': reverse('book_text', args=[book.slug]) if book.html_file else None, - 'extra_info': extra_info, - 'hide_about': extra_info.get('about', '').startswith('http://wiki.wolnepodreczniki.pl'), - 'themes': book.related_themes(), - }) - - -@ssi_included -def fragment_short(request, pk): - fragment = get_object_or_404(models.Fragment, pk=pk) - return render(request, 'catalogue/fragment_short.html', - {'fragment': fragment}) - - -@ssi_included -def fragment_promo(request, pk): - fragment = get_object_or_404(models.Fragment, pk=pk) - return render(request, 'catalogue/fragment_promo.html', { - 'fragment': fragment - }) diff --git a/apps/chunks/__init__.py b/apps/chunks/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/chunks/admin.py b/apps/chunks/admin.py deleted file mode 100644 index 61e9f8757..000000000 --- a/apps/chunks/admin.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.contrib import admin - -from chunks.models import Chunk, Attachment - - -class ChunkAdmin(admin.ModelAdmin): - list_display = ('key', 'description',) - search_fields = ('key', 'content',) - -admin.site.register(Chunk, ChunkAdmin) - - -class AttachmentAdmin(admin.ModelAdmin): - list_display = ('key',) - search_fields = ('key',) - -admin.site.register(Attachment, AttachmentAdmin) diff --git a/apps/chunks/locale/de/LC_MESSAGES/django.mo b/apps/chunks/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index b9a35c717..000000000 Binary files a/apps/chunks/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/de/LC_MESSAGES/django.po b/apps/chunks/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 8451d6319..000000000 --- a/apps/chunks/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,74 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-04-11 22:56+0100\n" -"Last-Translator: Kamil \n" -"Language-Team: \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "Schlüssel" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "Die einzigartige Bezeichnung für dieses Chunk von Inhalten" - -#: models.py:12 -msgid "description" -msgstr "Beschreibung" - -#: models.py:13 -msgid "content" -msgstr "Inhalt" - -#: models.py:17 -msgid "chunk" -msgstr "Chunk" - -#: models.py:18 -msgid "chunks" -msgstr "Chunks" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "Die einzigartige Bezeichnung für diese Beilage" - -#: models.py:38 -msgid "attachment" -msgstr "Beilage" - -#: models.py:38 -msgid "attachments" -msgstr "Beilagen" - -#~ msgid "title" -#~ msgstr "Titel" - -#~ msgid "slug" -#~ msgstr "Slug" - -#~ msgid "file" -#~ msgstr "Datei" - -#~ msgid "author" -#~ msgstr "Autor" - -#~ msgid "slideshare ID" -#~ msgstr "Dia-ID" - -#~ msgid "HTML" -#~ msgstr "HTML" - -#~ msgid "document" -#~ msgstr "Dokument" diff --git a/apps/chunks/locale/en/LC_MESSAGES/django.mo b/apps/chunks/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index 948c8ead2..000000000 Binary files a/apps/chunks/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/en/LC_MESSAGES/django.po b/apps/chunks/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index fa9b726c4..000000000 --- a/apps/chunks/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,53 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 20:05+0100\n" -"Last-Translator: xxx \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "key" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "A unique name for this piece of content" - -#: models.py:12 -msgid "description" -msgstr "description" - -#: models.py:13 -msgid "content" -msgstr "content" - -#: models.py:17 -msgid "chunk" -msgstr "piece" - -#: models.py:18 -msgid "chunks" -msgstr "pieces" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "A unique name for this attachment" - -#: models.py:38 -msgid "attachment" -msgstr "attachment" - -#: models.py:38 -msgid "attachments" -msgstr "attachments" diff --git a/apps/chunks/locale/es/LC_MESSAGES/django.mo b/apps/chunks/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index f476287e0..000000000 Binary files a/apps/chunks/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/es/LC_MESSAGES/django.po b/apps/chunks/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index f5c97195c..000000000 --- a/apps/chunks/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,53 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-18 13:02+0100\n" -"Last-Translator: Anna Jopp \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "clave" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "El nombre único para este elemento del contenido" - -#: models.py:12 -msgid "description" -msgstr "descripción" - -#: models.py:13 -msgid "content" -msgstr "contenido" - -#: models.py:17 -msgid "chunk" -msgstr "elemento" - -#: models.py:18 -msgid "chunks" -msgstr "elementos" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "El nombre único para este archivo adjunto" - -#: models.py:38 -msgid "attachment" -msgstr "archivo adjunto" - -#: models.py:38 -msgid "attachments" -msgstr "archivos adjuntos" diff --git a/apps/chunks/locale/fr/LC_MESSAGES/django.mo b/apps/chunks/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index 2ededce27..000000000 Binary files a/apps/chunks/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/fr/LC_MESSAGES/django.po b/apps/chunks/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index 21730632e..000000000 --- a/apps/chunks/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,53 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-22 20:52+0100\n" -"Last-Translator: Ela Janota \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "clé" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "Un nom unique pour ce fragment du contenu" - -#: models.py:12 -msgid "description" -msgstr "description" - -#: models.py:13 -msgid "content" -msgstr "contenu" - -#: models.py:17 -msgid "chunk" -msgstr "fragment" - -#: models.py:18 -msgid "chunks" -msgstr "fragments" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "Un nom unique pour cette pièce jointe" - -#: models.py:38 -msgid "attachment" -msgstr "pièce jointe" - -#: models.py:38 -msgid "attachments" -msgstr "pièces jointes" diff --git a/apps/chunks/locale/it/LC_MESSAGES/django.mo b/apps/chunks/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index 1f02d2425..000000000 Binary files a/apps/chunks/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/it/LC_MESSAGES/django.po b/apps/chunks/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index 1e17a5fb3..000000000 --- a/apps/chunks/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,54 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-21 16:52+0100\n" -"Last-Translator: xxx\n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "Chiave" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "un nome unico per questo allegato" - -#: models.py:12 -msgid "description" -msgstr "descrizione" - -#: models.py:13 -msgid "content" -msgstr "contenuto" - -#: models.py:17 -msgid "chunk" -msgstr "blocco" - -#: models.py:18 -msgid "chunks" -msgstr "blocchi" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "Un nome unico per questo allegato" - -#: models.py:38 -msgid "attachment" -msgstr "allegato" - -#: models.py:38 -msgid "attachments" -msgstr "allegati" diff --git a/apps/chunks/locale/jp/LC_MESSAGES/django.mo b/apps/chunks/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index c9739db34..000000000 Binary files a/apps/chunks/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/jp/LC_MESSAGES/django.po b/apps/chunks/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index ceae77c94..000000000 --- a/apps/chunks/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,54 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "" - -#: models.py:12 -msgid "description" -msgstr "" - -#: models.py:13 -msgid "content" -msgstr "" - -#: models.py:17 -msgid "chunk" -msgstr "" - -#: models.py:18 -msgid "chunks" -msgstr "" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "" - -#: models.py:38 -msgid "attachment" -msgstr "" - -#: models.py:38 -msgid "attachments" -msgstr "" diff --git a/apps/chunks/locale/lt/LC_MESSAGES/django.mo b/apps/chunks/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index 582f7d416..000000000 Binary files a/apps/chunks/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/lt/LC_MESSAGES/django.po b/apps/chunks/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index 5499a2129..000000000 --- a/apps/chunks/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,54 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-01 16:13+0100\n" -"Last-Translator: Aneta\n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "raktas" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "Unikalus šio turinio gabalo pavadnimas" - -#: models.py:12 -msgid "description" -msgstr "aprašymas" - -#: models.py:13 -msgid "content" -msgstr "turinys" - -#: models.py:17 -msgid "chunk" -msgstr "gabalas" - -#: models.py:18 -msgid "chunks" -msgstr "gabalai" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "Unikalus šio priedo pavadnimas" - -#: models.py:38 -msgid "attachment" -msgstr "priedas" - -#: models.py:38 -msgid "attachments" -msgstr "priedai" diff --git a/apps/chunks/locale/pl/LC_MESSAGES/django.mo b/apps/chunks/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 54db07239..000000000 Binary files a/apps/chunks/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/pl/LC_MESSAGES/django.po b/apps/chunks/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 176e57df5..000000000 --- a/apps/chunks/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,54 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2010-05-19 16:19\n" -"Last-Translator: \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "klucz" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "Unikalna nazwa dla tego kawałka treści" - -#: models.py:12 -msgid "description" -msgstr "opis" - -#: models.py:13 -msgid "content" -msgstr "zawartość" - -#: models.py:17 -msgid "chunk" -msgstr "kawałek" - -#: models.py:18 -msgid "chunks" -msgstr "kawałki" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "Unikalna nazwa dla tego załącznika" - -#: models.py:38 -msgid "attachment" -msgstr "załącznik" - -#: models.py:38 -msgid "attachments" -msgstr "załączniki" diff --git a/apps/chunks/locale/ru/LC_MESSAGES/django.mo b/apps/chunks/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index ebf2dad2b..000000000 Binary files a/apps/chunks/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/ru/LC_MESSAGES/django.po b/apps/chunks/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index 5ba98838b..000000000 --- a/apps/chunks/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,53 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 22:10+0100\n" -"Last-Translator: xxx \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "ключ" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "Уникальное имя для этого фрагмента содержания" - -#: models.py:12 -msgid "description" -msgstr "описание" - -#: models.py:13 -msgid "content" -msgstr "содержание" - -#: models.py:17 -msgid "chunk" -msgstr "фрагмент" - -#: models.py:18 -msgid "chunks" -msgstr "фрагменты" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "Уникальное имя для этого приложения" - -#: models.py:38 -msgid "attachment" -msgstr "приложение" - -#: models.py:38 -msgid "attachments" -msgstr "приложения" diff --git a/apps/chunks/locale/uk/LC_MESSAGES/django.mo b/apps/chunks/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index 60dbea6a6..000000000 Binary files a/apps/chunks/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/uk/LC_MESSAGES/django.po b/apps/chunks/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index 620d87341..000000000 --- a/apps/chunks/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,53 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 17:29+0100\n" -"Last-Translator: xxx \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "ключ" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "Унікальна назва для цієї частини змісту" - -#: models.py:12 -msgid "description" -msgstr "опис" - -#: models.py:13 -msgid "content" -msgstr "зміст" - -#: models.py:17 -msgid "chunk" -msgstr "частина" - -#: models.py:18 -msgid "chunks" -msgstr "частини" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "Унікальна назва для цього додатку" - -#: models.py:38 -msgid "attachment" -msgstr "додаток" - -#: models.py:38 -msgid "attachments" -msgstr "додатки" diff --git a/apps/chunks/migrations/0001_initial.py b/apps/chunks/migrations/0001_initial.py deleted file mode 100644 index 878e4fbfb..000000000 --- a/apps/chunks/migrations/0001_initial.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Attachment', - fields=[ - ('key', models.CharField(help_text='A unique name for this attachment', max_length=255, serialize=False, verbose_name='key', primary_key=True)), - ('attachment', models.FileField(upload_to=b'chunks/attachment')), - ], - options={ - 'ordering': ('key',), - 'verbose_name': 'attachment', - 'verbose_name_plural': 'attachments', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Chunk', - fields=[ - ('key', models.CharField(help_text='A unique name for this piece of content', max_length=255, serialize=False, verbose_name='key', primary_key=True)), - ('description', models.CharField(max_length=255, null=True, verbose_name='Description', blank=True)), - ('content', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_de', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_en', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_es', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_fr', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_it', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_lt', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_pl', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_ru', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_uk', models.TextField(null=True, verbose_name='content', blank=True)), - ], - options={ - 'ordering': ('key',), - 'verbose_name': 'piece', - 'verbose_name_plural': 'pieces', - }, - bases=(models.Model,), - ), - ] diff --git a/apps/chunks/migrations/0002_auto_20140911_1253.py b/apps/chunks/migrations/0002_auto_20140911_1253.py deleted file mode 100644 index 09d541cd4..000000000 --- a/apps/chunks/migrations/0002_auto_20140911_1253.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -def null_to_blank(apps, schema_editor): - Chunk = apps.get_model("chunks", "Chunk") - Chunk.objects.filter(content=None).update(content='') - Chunk.objects.filter(description=None).update(description='') - - -class Migration(migrations.Migration): - - dependencies = [ - ('chunks', '0001_initial'), - ] - - operations = [ - migrations.RunPython(null_to_blank), - migrations.AlterField( - model_name='chunk', - name='content', - field=models.TextField(verbose_name='content', blank=True), - ), - migrations.AlterField( - model_name='chunk', - name='description', - field=models.CharField(max_length=255, verbose_name='Description', blank=True), - ), - ] diff --git a/apps/chunks/migrations/0003_auto_20151221_1225.py b/apps/chunks/migrations/0003_auto_20151221_1225.py deleted file mode 100644 index a7d7ca33b..000000000 --- a/apps/chunks/migrations/0003_auto_20151221_1225.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('chunks', '0002_auto_20140911_1253'), - ] - - operations = [ - migrations.AlterModelOptions( - name='chunk', - options={'ordering': ('key',), 'verbose_name': 'chunk', 'verbose_name_plural': 'chunks'}, - ), - migrations.AlterField( - model_name='chunk', - name='description', - field=models.CharField(max_length=255, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='chunk', - name='key', - field=models.CharField(help_text='A unique name for this chunk of content', max_length=255, serialize=False, verbose_name='key', primary_key=True), - ), - ] diff --git a/apps/chunks/migrations/__init__.py b/apps/chunks/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/chunks/models.py b/apps/chunks/models.py deleted file mode 100644 index 7f5410b24..000000000 --- a/apps/chunks/models.py +++ /dev/null @@ -1,45 +0,0 @@ -from django.conf import settings -from django.db import models -from django.utils.translation import ugettext_lazy as _ -from ssify import flush_ssi_includes - - -class Chunk(models.Model): - """ - A Chunk is a piece of content associated with a unique key that can be inserted into - any template with the use of a special template tag. - """ - key = models.CharField(_('key'), help_text=_('A unique name for this chunk of content'), primary_key=True, max_length=255) - description = models.CharField(_('description'), blank=True, max_length=255) - content = models.TextField(_('content'), blank=True) - - class Meta: - ordering = ('key',) - verbose_name = _('chunk') - verbose_name_plural = _('chunks') - - def __unicode__(self): - return self.key - - def save(self, *args, **kwargs): - ret = super(Chunk, self).save(*args, **kwargs) - self.flush_includes() - return ret - - def flush_includes(self): - flush_ssi_includes([ - '/chunks/chunk/%s.%s.html' % (self.key, lang) - for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) - - - -class Attachment(models.Model): - key = models.CharField(_('key'), help_text=_('A unique name for this attachment'), primary_key=True, max_length=255) - attachment = models.FileField(upload_to='chunks/attachment') - - class Meta: - ordering = ('key',) - verbose_name, verbose_name_plural = _('attachment'), _('attachments') - - def __unicode__(self): - return self.key diff --git a/apps/chunks/translation.py b/apps/chunks/translation.py deleted file mode 100644 index 46f1c7ac4..000000000 --- a/apps/chunks/translation.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# - -from modeltranslation.translator import translator, TranslationOptions -from chunks.models import Chunk - -class ChunkTranslationOptions(TranslationOptions): - fields = ('content',) - -translator.register(Chunk, ChunkTranslationOptions) diff --git a/apps/chunks/urls.py b/apps/chunks/urls.py deleted file mode 100644 index 005cadd02..000000000 --- a/apps/chunks/urls.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - -urlpatterns = patterns('chunks.views', - url(r'^chunk/(?P.+)\.(?P.+)\.html$', 'chunk', name='chunk'), -) diff --git a/apps/chunks/views.py b/apps/chunks/views.py deleted file mode 100644 index cbcf5bf6c..000000000 --- a/apps/chunks/views.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.http import HttpResponse -from ssify import ssi_included -from .models import Chunk - -@ssi_included -def chunk(request, key): - chunk, created = Chunk.objects.get_or_create(key=key) - return HttpResponse(chunk.content) diff --git a/apps/dictionary/__init__.py b/apps/dictionary/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/dictionary/constants.py b/apps/dictionary/constants.py deleted file mode 100644 index e99dc3ff0..000000000 --- a/apps/dictionary/constants.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from __future__ import unicode_literals - -from django.utils.translation import ugettext_lazy as _ - - -FN_TYPES = { - 'pa': _("author's footnotes"), - 'pe': _("Wolne Lektury editorial footnotes"), - 'pr': _("source editorial footnotes"), - 'pt': _("translator's footnotes"), -} diff --git a/apps/dictionary/locale/pl/LC_MESSAGES/django.mo b/apps/dictionary/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index c95d7b4e5..000000000 Binary files a/apps/dictionary/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/dictionary/locale/pl/LC_MESSAGES/django.po b/apps/dictionary/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 1cb8844e8..000000000 --- a/apps/dictionary/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,79 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: WolneLektury-dictionary\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-10-24 11:58+0200\n" -"PO-Revision-Date: 2014-10-24 11:58+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: pl\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%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.5.4\n" - -#: constants.py:11 -msgid "author's footnotes" -msgstr "przypisy autorskie" - -#: constants.py:12 -msgid "Wolne Lektury editorial footnotes" -msgstr "przypisy redaktorów Wolnych Lektur" - -#: constants.py:13 -msgid "source editorial footnotes" -msgstr "przypisy redakcji źródła" - -#: constants.py:14 -msgid "translator's footnotes" -msgstr "przypisy tłumacza" - -#: templates/dictionary/note_list.html:8 -#: templates/dictionary/note_list.html:12 -msgid "Footnotes" -msgstr "Przypisy" - -#: templates/dictionary/note_list.html:17 -msgid "By first letter" -msgstr "Pierwsza litera" - -#: templates/dictionary/note_list.html:19 -#: templates/dictionary/note_list.html:21 -#: templates/dictionary/note_list.html:37 -#: templates/dictionary/note_list.html:39 -#: templates/dictionary/note_list.html:56 -#: templates/dictionary/note_list.html:58 -#: templates/dictionary/note_list.html:74 -#: templates/dictionary/note_list.html:76 -msgid "all" -msgstr "wszystkie" - -#: templates/dictionary/note_list.html:35 -msgid "By type" -msgstr "Według typu" - -#: templates/dictionary/note_list.html:54 -msgid "By qualifier" -msgstr "Według kwalifikatora" - -#: templates/dictionary/note_list.html:72 -msgid "By language" -msgstr "Według języka" - -#: templates/dictionary/note_list.html:92 -#, python-format -msgid "%(c)s footnote found" -msgid_plural "%(c)s footnotes found" -msgstr[0] "Znaleziono %(c)s przypis." -msgstr[1] "Znaleziono %(c)s przypisy." -msgstr[2] "Znaleziono %(c)s przypisów." - -#~ msgid "Footnotes on WolneLektury.pl" -#~ msgstr "Przypisy w WolneLektury.pl" diff --git a/apps/dictionary/migrations/0001_initial.py b/apps/dictionary/migrations/0001_initial.py deleted file mode 100644 index 1908a840a..000000000 --- a/apps/dictionary/migrations/0001_initial.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Note', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('anchor', models.CharField(max_length=64)), - ('html', models.TextField()), - ('sort_key', models.CharField(max_length=128, db_index=True)), - ('book', models.ForeignKey(to='catalogue.Book')), - ], - options={ - 'ordering': ['sort_key'], - }, - bases=(models.Model,), - ), - ] diff --git a/apps/dictionary/migrations/0002_auto_20141006_1422.py b/apps/dictionary/migrations/0002_auto_20141006_1422.py deleted file mode 100644 index a9bad32b9..000000000 --- a/apps/dictionary/migrations/0002_auto_20141006_1422.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0004_remove_booktags_count_related_info'), - ('dictionary', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='NoteSource', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('anchor', models.CharField(max_length=64)), - ('book', models.ForeignKey(to='catalogue.Book')), - ('note', models.ForeignKey(to='dictionary.Note')), - ], - options={ - 'ordering': ['book'], - }, - bases=(models.Model,), - ), - migrations.RemoveField( - model_name='note', - name='anchor', - ), - migrations.RemoveField( - model_name='note', - name='book', - ), - migrations.AddField( - model_name='note', - name='fn_type', - field=models.CharField(default='', max_length=10, db_index=True), - preserve_default=False, - ), - migrations.AddField( - model_name='note', - name='language', - field=models.CharField(default='', max_length=10, db_index=True), - preserve_default=False, - ), - migrations.AddField( - model_name='note', - name='qualifier', - field=models.CharField(default='', max_length=128, db_index=True, blank=True), - preserve_default=False, - ), - ] diff --git a/apps/dictionary/migrations/0003_auto_20141023_1445.py b/apps/dictionary/migrations/0003_auto_20141023_1445.py deleted file mode 100644 index ee4beeebe..000000000 --- a/apps/dictionary/migrations/0003_auto_20141023_1445.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('dictionary', '0002_auto_20141006_1422'), - ] - - operations = [ - migrations.CreateModel( - name='Qualifier', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('qualifier', models.CharField(unique=True, max_length=128, db_index=True)), - ('name', models.CharField(max_length=255)), - ], - options={ - 'ordering': ['qualifier'], - }, - bases=(models.Model,), - ), - migrations.RemoveField( - model_name='note', - name='qualifier', - ), - migrations.AddField( - model_name='note', - name='qualifiers', - field=models.ManyToManyField(to='dictionary.Qualifier', null=True), - preserve_default=True, - ), - ] diff --git a/apps/dictionary/migrations/0004_auto_20151221_1225.py b/apps/dictionary/migrations/0004_auto_20151221_1225.py deleted file mode 100644 index ee7252ce0..000000000 --- a/apps/dictionary/migrations/0004_auto_20151221_1225.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dictionary', '0003_auto_20141023_1445'), - ] - - operations = [ - migrations.AlterField( - model_name='note', - name='qualifiers', - field=models.ManyToManyField(to='dictionary.Qualifier'), - ), - ] diff --git a/apps/dictionary/migrations/__init__.py b/apps/dictionary/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/dictionary/models.py b/apps/dictionary/models.py deleted file mode 100644 index cc2b0ac51..000000000 --- a/apps/dictionary/models.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.db import models, transaction -from celery.task import task -from sortify import sortify -from celery.utils.log import get_task_logger - -task_logger = get_task_logger(__name__) - -from catalogue.models import Book - - -class Qualifier(models.Model): - qualifier = models.CharField(max_length=128, db_index=True, unique=True) - name = models.CharField(max_length=255) - - class Meta: - ordering = ['qualifier'] - - def __unicode__(self): - return self.name or self.qualifier - - -class Note(models.Model): - """Represents a single annotation from a book.""" - html = models.TextField() - sort_key = models.CharField(max_length=128, db_index=True) - fn_type = models.CharField(max_length=10, db_index=True) - qualifiers = models.ManyToManyField(Qualifier) - language = models.CharField(max_length=10, db_index=True) - - class Meta: - ordering = ['sort_key'] - - -class NoteSource(models.Model): - """Represents a single annotation from a book.""" - note = models.ForeignKey(Note) - book = models.ForeignKey(Book) - anchor = models.CharField(max_length=64) - - class Meta: - ordering = ['book'] - - -@task(ignore_result=True) -def build_notes(book): - task_logger.info(book.slug) - with transaction.atomic(): - book.notesource_set.all().delete() - if book.html_file: - from librarian import html - from librarian.fn_qualifiers import FN_QUALIFIERS - - for anchor, fn_type, qualifiers, text_str, html_str in \ - html.extract_annotations(book.html_file.path): - sort_key = sortify(text_str).strip()[:128] - - language = book.language - note = None - notes = Note.objects.filter(sort_key=sort_key, - fn_type=fn_type, - language=language, html=html_str) - if notes: - note = notes[0] - else: - note = Note.objects.create( - sort_key=sort_key, - html=html_str, - fn_type=fn_type, - language=language - ) - - qualifier_objects = [] - for qualifier in qualifiers: - obj, created = Qualifier.objects.get_or_create( - qualifier=qualifier, defaults={ - 'name': FN_QUALIFIERS.get(qualifier, '') - }) - qualifier_objects.append(obj) - note.qualifiers = qualifier_objects - note.notesource_set.create(book=book, anchor=anchor) - - Note.objects.filter(notesource=None).delete() - - -def notes_from_book(sender, instance, **kwargs): - build_notes.delay(instance) -Book.html_built.connect(notes_from_book) diff --git a/apps/dictionary/templates/dictionary/note_list.html b/apps/dictionary/templates/dictionary/note_list.html deleted file mode 100755 index 9428655b0..000000000 --- a/apps/dictionary/templates/dictionary/note_list.html +++ /dev/null @@ -1,116 +0,0 @@ -{% extends "base.html" %} -{% load i18n pagination_tags %} -{% load set_get from set_get %} - - -{% block bodyid %}footnotes{% endblock %} - -{% block titleextra %}{% trans "Footnotes" %}{% endblock %} - - -{% block body %} -

        {% trans "Footnotes" %}

        - -
        - -

        -{% trans "By first letter" %}: -{% if letter %} - {% trans "all" %} -{% else %} - {% trans "all" %} -{% endif %} - -{% for let in letters %} - | - {% if let == letter %} - {{ let|upper }} - {% else %} - {{ let|upper }} - {% endif %} -{% endfor %} -

        - -

        -{% trans "By type" %}: -{% if fn_type %} - {% trans "all" %} -{% else %} - {% trans "all" %} -{% endif %} - -{% for fnt, fnt_name in fn_types %} - | - {% if fnt == fn_type %} - {{ fnt_name }} - {% else %} - {{ fnt_name }} - {% endif %} -{% endfor %} -

        - - -

        -{% trans "By qualifier" %}: -{% if qualifier %} - {% trans "all" %} -{% else %} - {% trans "all" %} -{% endif %} - -{% for qual in qualifiers %} - | - {% if qual == qualifier %} - {{ qual }} - {% else %} - {{ qual }} - {% endif %} -{% endfor %} -

        - -

        -{% trans "By language" %}: -{% if language %} - {% trans "all" %} -{% else %} - {% trans "all" %} -{% endif %} - -{% for lang, lang_name in languages %} - | - {% if lang == language %} - {{ lang_name }} - {% else %} - {{ lang_name }} - {% endif %} -{% endfor %} -

        - -
        - -

        -{% blocktrans count object_list.count as c %}{{c}} footnote found{% plural %}{{c}} footnotes found{% endblocktrans %} -

        - -{% if object_list.exists %} - -{% autopaginate object_list 100 %} -{% paginate %} -{% for obj in object_list %} -
        - {{ obj.html|safe }} - {% for note_source in obj.notesource_set.all %} - - {% endfor %} -
        -{% endfor %} -{% paginate %} - -{% endif %} - -
        - -{% endblock %} diff --git a/apps/dictionary/templatetags/__init__.py b/apps/dictionary/templatetags/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/dictionary/templatetags/set_get.py b/apps/dictionary/templatetags/set_get.py deleted file mode 100644 index 9afe3e87f..000000000 --- a/apps/dictionary/templatetags/set_get.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import template -from django.utils.http import urlencode - -register = template.Library() - - -@register.simple_tag(takes_context=True) -def set_get(context, *omit, **kwargs): - request = context['request'] - query = request.GET.dict() - for k in omit: - if k in query: - del query[k] - for k, v in kwargs.items(): - query[k] = v - return urlencode(query) diff --git a/apps/dictionary/tests.py b/apps/dictionary/tests.py deleted file mode 100755 index 0c83cf183..000000000 --- a/apps/dictionary/tests.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.core.files.base import ContentFile -from catalogue.test_utils import * -from catalogue.models import Book - - -class DictionaryTests(WLTestCase): - - def setUp(self): - WLTestCase.setUp(self) - self.book_info = BookInfoStub( - author=PersonStub(("Jim",), "Lazy"), - kind="X-Kind", - genre="X-Genre", - epoch="X-Epoch", - **info_args(u"Default Book") - ) - - def test_book_with_footnote(self): - BOOK_TEXT = """ - - rose --- kind of a flower. - rose --- kind of a flower. - rose (techn.) --- #FF007F. - - """ - - book = Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - - self.assertEqual( - len(self.client.get('/przypisy/').context['object_list']), - 2, - 'There should be two notes on the note list.') - - self.assertEqual( - len(self.client.get('/przypisy/?ltr=a').context['object_list']), - 0, - 'There should not be a note for the letter A.') - - self.assertEqual( - len(self.client.get('/przypisy/?ltr=r').context['object_list']), - 2, - 'Both notes start with the letter R.') - - self.assertEqual( - len(self.client.get('/przypisy/?qual=techn.').context['object_list']), - 1, - 'There should be a note qualified with \'techn.\' qualifier.') - diff --git a/apps/dictionary/urls.py b/apps/dictionary/urls.py deleted file mode 100755 index 2320f4773..000000000 --- a/apps/dictionary/urls.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url -from dictionary.views import NotesView - -urlpatterns = patterns('dictionary.views', - url(r'^$', NotesView.as_view(), name='dictionary_notes'), -) - diff --git a/apps/dictionary/views.py b/apps/dictionary/views.py deleted file mode 100755 index 69c6bf65c..000000000 --- a/apps/dictionary/views.py +++ /dev/null @@ -1,83 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.views.generic.list import ListView -from django.conf import settings -from django.db.models import Count, Q -from catalogue.constants import LANGUAGES_3TO2 -from .constants import FN_TYPES -from .models import Note, Qualifier - - -class NotesView(ListView): - def get_queryset(self): - objects = Note.objects.all() - filters = {} - - try: - self.qualifier = Qualifier.objects.get(qualifier=self.request.GET.get('qual')) - except Qualifier.DoesNotExist: - self.qualifier = None - else: - filters['qualifier'] = Q(qualifiers=self.qualifier) - - self.language = self.request.GET.get('lang') - if self.language: - filters['language'] = Q(language=self.language) - - self.fn_type = self.request.GET.get('type') - if self.fn_type: - filters['fn_type'] = Q(fn_type=self.fn_type) - - self.letter = self.request.GET.get('ltr') - if self.letter == "0-9": - objects = objects.filter(sort_key__regex=r"^[0-9]") - #filters['letter'] = Q(sort_key__regex=r"^[0-9]") - elif self.letter: - objects = objects.filter(sort_key__startswith=self.letter) - #filters['letter'] = Q(sort_key__startswith=self.letter) - - self.letters = ["0-9"] + [chr(a) for a in range(ord('a'), ord('z')+1)] - - nobj = objects - for key, fltr in filters.items(): - if key != 'qualifier': - nobj = nobj.filter(fltr) - self.qualifiers = Qualifier.objects.filter(note__in=nobj).distinct() - - nobj = objects - for key, fltr in filters.items(): - if key != 'language': - nobj = nobj.filter(fltr) - self.languages = nobj.order_by('language').values_list( - 'language', flat=True).distinct() - lang_names = dict(settings.LANGUAGES) - self.languages = [ - (lang, lang_names.get(LANGUAGES_3TO2.get(lang, lang), lang)) - for lang in self.languages] - - nobj = objects - for key, fltr in filters.items(): - if key != 'fn_type': - nobj = nobj.filter(fltr) - self.fn_types = nobj.order_by('fn_type').values_list( - 'fn_type', flat=True).distinct() - self.fn_types = [(fnt, FN_TYPES[fnt]) for fnt in self.fn_types] - - for f in filters.values(): - objects = objects.filter(f) - - return objects - - def get_context_data(self, **kwargs): - context = super(NotesView, self).get_context_data(**kwargs) - context['letters'] = self.letters - context['letter'] = self.letter - context['qualifiers'] = self.qualifiers - context['qualifier'] = self.qualifier - context['languages'] = self.languages - context['language'] = self.language - context['fn_types'] = self.fn_types - context['fn_type'] = self.fn_type - return context diff --git a/apps/funding/__init__.py b/apps/funding/__init__.py deleted file mode 100644 index 9e81e9ec3..000000000 --- a/apps/funding/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings as settings -from catalogue.utils import AppSettings - - -class Settings(AppSettings): - """Default settings for funding app.""" - DEFAULT_LANGUAGE = u'pl' - DEFAULT_AMOUNT = 20 - MIN_AMOUNT = 1 - DAYS_NEAR = 2 - - -app_settings = Settings('FUNDING') diff --git a/apps/funding/admin.py b/apps/funding/admin.py deleted file mode 100644 index d70aef66a..000000000 --- a/apps/funding/admin.py +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.utils.translation import ugettext_lazy as _ -from django.contrib import admin -from .models import Offer, Perk, Funding, Spent - - -class OfferAdmin(admin.ModelAdmin): - model = Offer - list_display = ['title', 'author', 'target', 'sum', 'is_win', 'start', 'end'] - search_fields = ['title', 'author'] - readonly_fields = ('cover_img_tag',) - - -class PerkAdmin(admin.ModelAdmin): - model = Perk - search_fields = ['name', 'long_name'] - list_display = ['name', 'long_name', 'price', 'end_date', 'offer'] - list_filter = ['offer'] - - - -class PayedFilter(admin.SimpleListFilter): - title = _('payment complete') - parameter_name = 'payed' - def lookups(self, request, model_admin): - return ( - ('yes', _('Yes')), - ('no', _('No')), - ) - def queryset(self, request, queryset): - if self.value() == 'yes': - return queryset.exclude(payed_at=None) - elif self.value() == 'no': - return queryset.filter(payed_at=None) - -class PerksFilter(admin.SimpleListFilter): - title = _('perks') - parameter_name = 'perks' - def lookups(self, request, model_admin): - return ( - ('yes', _('Yes')), - ('no', _('No')), - ) - def queryset(self, request, queryset): - if self.value() == 'yes': - return queryset.exclude(perks=None) - elif self.value() == 'no': - return queryset.filter(perks=None) - - -class FundingAdmin(admin.ModelAdmin): - model = Funding - list_display = ['payed_at', 'offer', 'amount', 'name', 'email', 'perk_names'] - search_fields = ['name', 'email', 'offer__title', 'offer__author'] - list_filter = [PayedFilter, 'offer', PerksFilter] - - - -class SpentAdmin(admin.ModelAdmin): - model = Spent - list_display = ['book', 'amount', 'timestamp'] - search_fields = ['book__title'] - - -admin.site.register(Offer, OfferAdmin) -admin.site.register(Perk, PerkAdmin) -admin.site.register(Funding, FundingAdmin) -admin.site.register(Spent, SpentAdmin) diff --git a/apps/funding/forms.py b/apps/funding/forms.py deleted file mode 100644 index 6ed9076dd..000000000 --- a/apps/funding/forms.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import forms -from django.utils import formats -from django.utils.translation import ugettext_lazy as _, ugettext, get_language -from .models import Funding -from .widgets import PerksAmountWidget -from . import app_settings - - -class FundingForm(forms.Form): - required_css_class = 'required' - - amount = forms.DecimalField(label=_("Amount"), decimal_places=2, - widget=PerksAmountWidget()) - name = forms.CharField(label=_("Name"), required=False, - help_text=_("Optional name for public list of contributors")) - email = forms.EmailField(label=_("Contact e-mail"), - help_text=_("We'll use it to contact you about the details needed for your perks,
        " - "and to send you updates about your payment and the fundraiser status (which you can always turn off).
        " - "Your e-mail won't be publicised."), required=False) - - def __init__(self, offer, *args, **kwargs): - self.offer = offer - super(FundingForm, self).__init__(*args, **kwargs) - self.fields['amount'].widget.form_instance = self - - def clean_amount(self): - if self.cleaned_data['amount'] < app_settings.MIN_AMOUNT: - min_amount = app_settings.MIN_AMOUNT - if isinstance(min_amount, float): - min_amount = formats.number_format(min_amount, 2) - raise forms.ValidationError( - ugettext("The minimum amount is %(amount)s PLN.") % { - 'amount': min_amount}) - return self.cleaned_data['amount'] - - def clean(self): - if not self.offer.is_current(): - raise forms.ValidationError(ugettext("This offer is out of date.")) - return self.cleaned_data - - def save(self): - funding = Funding.objects.create( - offer=self.offer, - name=self.cleaned_data['name'], - email=self.cleaned_data['email'], - amount=self.cleaned_data['amount'], - language_code=get_language(), - ) - funding.perks = funding.offer.get_perks(funding.amount) - return funding - diff --git a/apps/funding/locale/pl/LC_MESSAGES/django.mo b/apps/funding/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index e08978e46..000000000 Binary files a/apps/funding/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/funding/locale/pl/LC_MESSAGES/django.po b/apps/funding/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index b1a27359a..000000000 --- a/apps/funding/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,656 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-04-16 13:13+0200\n" -"PO-Revision-Date: 2015-04-16 13:13+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \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%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.5.4\n" - -#: admin.py:26 -msgid "payment complete" -msgstr "płatność doszła do skutku" - -#: admin.py:30 admin.py:44 -msgid "Yes" -msgstr "Tak" - -#: admin.py:31 admin.py:45 -msgid "No" -msgstr "Nie" - -#: admin.py:40 models.py:216 models.py:234 -msgid "perks" -msgstr "prezenty" - -#: forms.py:16 templates/funding/wlfund.html:27 -msgid "Amount" -msgstr "Kwota" - -#: forms.py:18 -msgid "Name" -msgstr "Imię i nazwisko na listę darczyńców" - -#: forms.py:19 -msgid "Optional name for public list of contributors" -msgstr "" -"Opcjonalnie imię i nazwisko lub pseudonim do publicznej listy darczyńców." - -#: forms.py:20 -msgid "Contact e-mail" -msgstr "E-mail kontaktowy" - -#: forms.py:21 -msgid "" -"We'll use it to contact you about the details needed for your perks,
        and to send you updates about your payment and the fundraiser " -"status (which you can always turn off).
        Your e-mail won't be publicised." -msgstr "" -"Użyjemy go do kontaktu w sprawie danych potrzebnych do realizacji " -"prezentów
        i do informowania Cię o zmianach statusu płatności i " -"zbiórki (z czego zawsze możesz zrezygnować).
        Twój adres e-mail nie " -"będzie upubliczniony." - -#: forms.py:36 -#, python-format -msgid "The minimum amount is %(amount)s PLN." -msgstr "Minimalna kwota wpłaty to %(amount)s zł." - -#: forms.py:42 -msgid "This offer is out of date." -msgstr "Ta zbiórka jest już nieaktywna." - -#: models.py:25 -msgid "author" -msgstr "autor" - -#: models.py:26 -msgid "title" -msgstr "tytuł" - -#: models.py:27 -msgid "slug" -msgstr "slug" - -#: models.py:28 -msgid "description" -msgstr "opis" - -#: models.py:29 -msgid "target" -msgstr "kwota docelowa" - -#: models.py:30 -msgid "start" -msgstr "początek" - -#: models.py:31 -msgid "end" -msgstr "koniec" - -#: models.py:32 -msgid "redakcja URL" -msgstr "URL na Redakcji" - -#: models.py:34 -msgid "Published book." -msgstr "Opublikowana książka." - -#: models.py:35 -msgid "Cover" -msgstr "Okładka" - -#: models.py:36 -msgid "Poll" -msgstr "Ankieta" - -#: models.py:38 -msgid "Near-end notifications sent" -msgstr "Wysłano powiadomienia przed końcem" - -#: models.py:39 -msgid "End notifications sent" -msgstr "Wysłano powiadomienia o zakończeniu" - -#: models.py:43 -msgid "Cover preview" -msgstr "Podgląd okładki" - -#: models.py:47 models.py:208 models.py:229 -msgid "offer" -msgstr "zbiórka" - -#: models.py:48 -msgid "offers" -msgstr "zbiórki" - -#: models.py:163 -msgid "The fundraiser has ended!" -msgstr "Zbiórka dobiegła końca!" - -#: models.py:179 -msgid "The fundraiser will end soon!" -msgstr "Zbiórka niedługo się zakończy!" - -#: models.py:193 -msgid "The book you helped fund has been published." -msgstr "Książka, którą pomogłeś/-aś ufundować, została opublikowana." - -#: models.py:209 -msgid "price" -msgstr "cena" - -#: models.py:210 models.py:230 -msgid "name" -msgstr "nazwa" - -#: models.py:211 -msgid "long name" -msgstr "długa nazwa" - -#: models.py:212 -msgid "end date" -msgstr "data końcowa" - -#: models.py:215 -msgid "perk" -msgstr "prezent" - -#: models.py:231 -msgid "email" -msgstr "e-mail" - -#: models.py:232 models.py:314 -msgid "amount" -msgstr "kwota" - -#: models.py:233 -msgid "payed at" -msgstr "data wpłaty" - -#: models.py:236 -msgid "notifications" -msgstr "powiadomienia" - -#: models.py:240 -msgid "funding" -msgstr "wpłata" - -#: models.py:241 templates/admin/funding/offer/change_form.html:22 -msgid "fundings" -msgstr "wpłaty" - -#: models.py:315 -msgid "when" -msgstr "kiedy" - -#: models.py:318 -msgid "money spent on a book" -msgstr "pieniądze wydane na książkę" - -#: models.py:319 -msgid "money spent on books" -msgstr "pieniądze wydane na książki" - -#: models.py:345 templates/funding/thanks.html:6 -#: templates/funding/thanks.html.py:15 -msgid "Thank you for your support!" -msgstr "Dziękujemy za Twoje wsparcie!" - -#: templates/funding/disable_notifications.html:5 -#: templates/funding/no_thanks.html:5 templates/funding/no_thanks.html.py:9 -msgid "Payment failed" -msgstr "Płatność nie doszła do skutku" - -#: templates/funding/disable_notifications.html:9 -#: templates/funding/disable_notifications.html:16 -msgid "Disable notifications" -msgstr "Wyłącz powiadomienia" - -#: templates/funding/disable_notifications.html:14 -#, python-format -msgid "Are you sure you want to disable notifications for address %(e)s?" -msgstr "Czy na pewno chcesz wyłączyć powiadomienia dla adresu %(e)s?" - -#: templates/funding/disable_notifications.html:21 -#, python-format -msgid "Notifications for address %(e)s have been successfully disabled." -msgstr "Powiadomienia dla adresu %(e)s zostały wyłączone." - -#: templates/funding/disable_notifications.html:27 -#, python-format -msgid "Return to the current fundraiser." -msgstr "Wróć do aktualnej zbiórki." - -#: templates/funding/email/base.txt:1 -msgid "Hi" -msgstr "Cześć" - -#: templates/funding/email/base.txt:4 -msgid "" -"Cheers,\n" -"Wolne Lektury team" -msgstr "" -"Pozdrawiamy\n" -"zespół Wolnych Lektur" - -#: templates/funding/email/base.txt:8 -msgid "If you don't want to receive any more updates, please visit this page:" -msgstr "Jeśli nie chcesz otrzymywać kolejnych powiadomień, odwiedź tę stronę:" - -#: templates/funding/email/end.txt:6 -msgid "" -"we succesfully collected the full amount needed\n" -"for the book you contributed to:" -msgstr "udało nam się zebrać pełną kwotę na książkę, którą wsparłeś/-aś:" - -#: templates/funding/email/end.txt:12 -msgid "" -"We will now digitize it, develop and publish it in the library,\n" -"in various formats, free for everyone." -msgstr "" -"Teraz ją zdigitalizujemy, opracujemy i bezpłatnie udostępnimy w bibliotece w " -"wielu formatach." - -#: templates/funding/email/end.txt:15 -msgid "" -"Your name will be included on the list of contributors, irrespectively\n" -"of the amount of your contribution." -msgstr "" -"Zostaniesz umieszczony/-a na liście darczyńców, niezależnie od wysokości " -"wpłaty." - -#: templates/funding/email/end.txt:18 -msgid "" -"We will contact you again about details needed\n" -"to deliver your perks." -msgstr "Skontaktujemy się z Tobą w sprawie prezentów, które wybrałeś/-aś." - -#: templates/funding/email/end.txt:21 -#, python-format -msgid "" -"All of the money remaining after this fundraiser (%(r)s PLN)\n" -"will be spent on liberating other books still waiting for publication." -msgstr "" -"Wszystkie dodatkowe pieniądze pozostałe z tej zbiórki (%(r)s PLN)\n" -"zostaną przeznaczone na uwolnienie innych książek czekających na publikację." - -#: templates/funding/email/end.txt:23 templates/funding/email/end.txt.py:34 -msgid "You can see how we're spending these funds on this page:" -msgstr "Możesz zobaczyć, jak wydajemy te środki, na tej stronie:" - -#: templates/funding/email/end.txt:26 -msgid "" -"unfortunately, we were unable to collect the full amount needed\n" -"for the book you contributed to:" -msgstr "" -"niestety, nie udało nam się zebrać pełnej kwoty na książkę, którą wsparłeś/-" -"aś:" - -#: templates/funding/email/end.txt:32 -#, python-format -msgid "" -"All of the money we collected in this fundraiser (%(x)s PLN)\n" -"will be spent on liberating other books still waiting for publication." -msgstr "" -"Wszystkie pieniądze z tej zbiórki (%(x)s PLN)\n" -"zostaną przeznaczone na uwolnienie innych książek czekających na publikację." - -#: templates/funding/email/end.txt:37 templates/funding/email/published.txt:12 -msgid "" -"If you'd like to help liberate another book, or invite your friends\n" -"to do so, we're currently raising money for:" -msgstr "" -"Jeśli chcesz pomóc uwolnić kolejną książkę, albo zachęcić do tego\n" -"swoich znajomych, to aktualnie zbieramy na:" - -#: templates/funding/email/near.txt:5 -#, python-format -msgid "there's only %(d)s day left until the end of the fundraiser for:\n" -msgid_plural "" -"There're only %(d)s days left until the end of the fundraiser for:\n" -msgstr[0] "został jeden dzień do końca zbiórki na:\n" -msgstr[1] "zostały %(d)s dni do końca zbiórki na:\n" -msgstr[2] "zostało %(d)s dni do końca zbiórki na:\n" - -#: templates/funding/email/near.txt:10 -#, python-format -msgid "We managed to collect %(x)s PLN so far." -msgstr "Dotąd udało nam się zebrać %(x)s PLN." - -#: templates/funding/email/near.txt:12 -msgid "" -"The fundraiser is a success already, but the more money\n" -"we collect, the more other books we'll publish." -msgstr "" -"Zbiórka już osiągnęła sukces, ale im więcej pieniędzy\n" -"zbierzemy, tym więcej opublikujemy książek." - -#: templates/funding/email/near.txt:14 -#, python-format -msgid "We still need %(x)s PLN more." -msgstr "Nadal potrzebujemy %(x)s PLN." - -#: templates/funding/email/near.txt:16 -msgid "There's still time to let your friends know about the fundraiser!" -msgstr "Jest jeszcze czas, by poinformować o zbiórce Twoich znajomych!" - -#: templates/funding/email/published.txt:4 -msgid "we have just published the book you contributed to:" -msgstr "właśnie opublikowaliśmy książkę, którą wsparłeś/-aś:" - -#: templates/funding/email/published.txt:9 -msgid "" -"Thanks to you, it is now available for free,\n" -"in various formats, to everyone." -msgstr "" -"Dzięki Tobie jest teraz dostępna bezpłatnie\n" -"dla wszystkich w wielu formatach." - -#: templates/funding/email/thanks.txt:6 -msgid "" -"Thank you for your support - thanks to you we will set another book free." -msgstr "Dziękujemy za wsparcie - dzięki Tobie uwolnimy kolejną książkę." - -#: templates/funding/email/thanks.txt:8 -msgid "The book will be supplemented with your name as a donor." -msgstr "" -"Twoje imię i nazwisko lub pseudonim zostaną dodane do listy darczyńców przy " -"opublikowanej książce." - -#: templates/funding/email/thanks.txt:10 -msgid "We will contact you about details needed for your perks." -msgstr "Skontaktujemy się z Tobą w sprawie prezentów, które wybrałeś/-aś." - -#: templates/funding/email/thanks.txt:12 -msgid "" -"We will keep you informed about status changes to this fundraiser\n" -"and the upcoming ones that we plan to launch." -msgstr "" -"Będziemy Cię informować o zmianach statusu tej zbiórki\n" -"i o kolejnych, które planujemy rozpocząć." - -#: templates/funding/includes/funding.html:13 -msgid "Support!" -msgstr "Wesprzyj!" - -#: templates/funding/includes/funding.html:15 -#: templates/funding/offer_detail.html:40 templates/funding/thanks.html:35 -#: templates/funding/wlfund.html:17 -msgid "Learn more" -msgstr "Dowiedz się więcej" - -#: templates/funding/includes/funding.html:22 -#: templates/funding/includes/funding.html:48 -#: templates/funding/offer_detail.html:35 templates/funding/offer_list.html:31 -msgid "Help free the book!" -msgstr "Pomóż uwolnić książkę!" - -#: templates/funding/includes/funding.html:30 -msgid "collected" -msgstr "zebrane" - -#: templates/funding/includes/funding.html:33 -msgid "needed" -msgstr "potrzebujemy" - -#: templates/funding/includes/funding.html:36 -msgid "until fundraiser end" -msgstr "do końca zbiórki" - -#: templates/funding/includes/fundings.html:15 -msgid "Anonymous" -msgstr "Anonim" - -#: templates/funding/includes/offer_status.html:6 -#, python-format -msgid "" -"The fundraiser\n" -" ends on %(end)s. The full amount has been successfully\n" -" raised, but you can still contribute and help liberate\n" -" more books." -msgstr "" -"Zbiórka kończy się %(end)s. Pełna kwota została już zebrana,\n" -" ale ciągle możesz dołożyć się i pomóc uwolnić więcej książek." - -#: templates/funding/includes/offer_status.html:13 -#, python-format -#| msgid "" -#| "W need %(target)s zł to digitize it,\n" -#| " compile it and publish for free in multiple formats." -msgid "" -"We need %(target)s zł to digitize it,\n" -" compile it and publish for free in multiple formats." -msgstr "" -"Potrzebujemy %(target)s zł, by ją zdigitalizować, opracować i bezpłatnie " -"udostępnić w serwisie w wielu formatach." - -#: templates/funding/includes/offer_status.html:17 -#, python-format -#| msgid "" -#| "If we raise enought money before %(end)s we will\n" -#| " publish it and make it available for everyone." -msgid "" -"If we raise enough money before %(end)s we will\n" -" publish it and make it available for everyone." -msgstr "" -"Jeśli do %(end)s uda się zebrać pełną kwotę, opublikujemy ją i będzie " -"dostępna dla wszystkich." - -#: templates/funding/includes/offer_status.html:24 -#: templates/funding/thanks.html:19 -msgid "Full amount was successfully raised!" -msgstr "Udało się zebrać pełną kwotę!" - -#: templates/funding/includes/offer_status.html:28 -msgid "The amount needed was not raised." -msgstr "Nie udało się zebrać pełnej kwoty." - -#: templates/funding/includes/offer_status_more.html:8 -msgid "Fundraiser span" -msgstr "Termin zbiórki" - -#: templates/funding/includes/offer_status_more.html:12 -#, python-format -msgid "" -"The book\n" -" %(bt)s has been already published." -msgstr "" -"Książka\n" -" %(bt)s została opublikowana." - -#: templates/funding/includes/offer_status_more.html:16 -#, python-format -msgid "" -"You can follow\n" -" the work on the Editorial Platform." -msgstr "Możesz śledzić prace na Platformie Redakcyjnej." - -#: templates/funding/no_thanks.html:12 -msgid "You're support has not been processed successfully." -msgstr "Twoje wsparcie nie zostało zaksięgowane." - -#: templates/funding/no_thanks.html:16 -#, python-format -msgid "" -"Return to the current fundraiser and try again " -"or try to use a different payment method." -msgstr "" -"Wróć do aktualnej zbiórki i spróbuj ponownie lub " -"użyj innej metody płatności." - -#: templates/funding/offer_detail.html:48 -msgid "Support the publication" -msgstr "Wesprzyj publikację" - -#: templates/funding/offer_detail.html:54 -msgid "Donate!" -msgstr "Wpłać!" - -#: templates/funding/offer_detail.html:62 templates/funding/thanks.html:41 -msgid "Tell your friends!" -msgstr "Powiedz swoim znajomym!" - -#: templates/funding/offer_detail.html:63 -msgid "Support Wolne Lektury!" -msgstr "Wesprzyj Wolne Lektury!" - -#: templates/funding/offer_detail.html:66 -msgid "See all fundraisers." -msgstr "Zobacz wszystkie zbiórki." - -#: templates/funding/offer_detail.html:71 -msgid "Supporters" -msgstr "Wpłaty" - -#: templates/funding/offer_list.html:7 templates/funding/offer_list.html:12 -msgid "All fundraisers" -msgstr "Wszystkie zbiórki" - -#: templates/funding/offer_list.html:17 -msgid "Current fundraiser:" -msgstr "Aktualna zbiórka:" - -#: templates/funding/offer_list.html:23 -msgid "No fundraiser is currently running." -msgstr "Obecnie nie jest aktywna żadna zbiórka." - -#: templates/funding/offer_list.html:24 templates/funding/offer_list.html:40 -msgid "Previous fundraisers:" -msgstr "Poprzednie zbiórki:" - -#: templates/funding/snippets/any_remaining.html:4 -#, python-format -msgid "" -"Any remaining funds will be spent\n" -"on other books waiting to be published." -msgstr "" -"Wszelkie pozostałe środki przeznaczymy na inne " -"książki czekające na publikację." - -#: templates/funding/snippets/any_remaining.html:7 -msgid "" -"We will supplement every book with your name as a donor, no matter how\n" -"big your support will be." -msgstr "" -"Zostaniesz umieszczony/-a na liście darczyńców, niezależnie od wysokości " -"wpłaty." - -#: templates/funding/thanks.html:10 -msgid "Thank you!" -msgstr "Dziękujemy!" - -#: templates/funding/thanks.html:16 -msgid "We will contact you if you qualify for perks." -msgstr "Skontaktujemy się z Tobą w sprawie prezentów, które wybrałeś/-aś." - -#: templates/funding/thanks.html:21 -#, python-format -msgid "" -"Your donation will be spent on digitizing, compiling and\n" -" publishing the book %(b)s in multiple formats." -msgstr "" -"Wpłacone przez Ciebie pieniądze przeznaczymy na digitalizację, opracowanie i " -"udostępnienie książki %(b)s w bibliotece w wielu formatach." - -#: templates/funding/thanks.html:26 -#, python-format -msgid "" -"If the full amount needed is raised,\n" -" your donation will be spent on digitizing, compiling and\n" -" publishing the book %(b)s in multiple formats." -msgstr "" -"Jeśli uda się zebrać pełną kwotę, wpłacone przez Ciebie pieniądze " -"przeznaczymy na digitalizację, opracowanie i udostępnienie książki %(b)s w " -"bibliotece w wielu formatach." - -#: templates/funding/thanks.html:38 -msgid "Go back to the current fundraiser." -msgstr "Wróć do aktualnej zbiórki." - -#: templates/funding/thanks.html:42 -msgid "I support Wolne Lektury." -msgstr "Wspieram Wolne Lektury" - -#: templates/funding/thanks.html:45 -msgid "Vote for a book for the next fundraiser" -msgstr "Pomóż wybrać następną książkę, na którą będziemy zbierać pieniądze" - -#: templates/funding/widgets/amount.html:13 -msgid "Other amount" -msgstr "Inna kwota" - -#: templates/funding/wlfund.html:4 templates/funding/wlfund.html.py:8 -msgid "Remaining funds" -msgstr "Pozostałe środki" - -#: templates/funding/wlfund.html:11 -#, python-format -msgid "" -"If\n" -"the full amount needed for publishing a book is not raised in time,\n" -"the funds are spent on other books waiting for\n" -"publication. The same thing happens with any money remaining\n" -"from successful fundraisers." -msgstr "" -"Jeśli nie udało się zebrać pełnej kwoty potrzebnej do opublikowania książki, " -"środki przekazujemy na redakcję innych utworów " -"oczekujących na publikację w serwisie. Na ten cel przekazujemy również " -"nadmiarowe środki ze zbiórek ukończonych sukcesem." - -#: templates/funding/wlfund.html:19 -msgid "Spending these remaining funds is recorded in this table." -msgstr "W poniższej tabeli rejestrujemy wydatkowanie tych środków." - -#: templates/funding/wlfund.html:25 -msgid "Date" -msgstr "Data" - -#: templates/funding/wlfund.html:26 -msgid "Operation" -msgstr "Rozdysponowanie środków" - -#: templates/funding/wlfund.html:28 -msgid "Balance" -msgstr "Bilans" - -#: templates/funding/wlfund.html:35 -msgid "Money spent on publishing the book" -msgstr "Pieniądze przeznaczone na opublikowanie książki" - -#: templates/funding/wlfund.html:44 -msgid "Money remaining from the fundraiser for" -msgstr "Pieniądze pozostałe ze zbiórki na" - -#: templates/funding/wlfund.html:53 -msgid "There are no previous fundraisers to show yet." -msgstr "Nie ma jeszcze żadnych zakończonych zbiórek." - -#~ msgid "due" -#~ msgstr "data publikacji" - -#~ msgid "When will it be published if the money is raised." -#~ msgstr "" -#~ "Kiedy książka zostanie opublikowana, jeśli uda się zebrać pieniądze." - -#~ msgid "" -#~ "The fundraiser\n" -#~ " ends on %(end)s. The book will be published by %(due)s." -#~ msgstr "" -#~ "Zbiórka kończy się %(end)s. Książka zostanie opublikowana do %(due)s." - -#~ msgid "" -#~ "The book\n" -#~ " will be published by %(due)s." -#~ msgstr "Książka zostanie opublikowana do %(due)s." diff --git a/apps/funding/management/__init__.py b/apps/funding/management/__init__.py deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/funding/management/commands/__init__.py b/apps/funding/management/commands/__init__.py deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/funding/management/commands/funding_notify.py b/apps/funding/management/commands/funding_notify.py deleted file mode 100755 index 1a30ffc90..000000000 --- a/apps/funding/management/commands/funding_notify.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from optparse import make_option -from django.core.management.base import BaseCommand - - -class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, - help='Suppress output'), - ) - help = 'Sends relevant funding notifications.' - - def handle(self, **options): - - from datetime import date, timedelta - from funding.models import Offer - from funding import app_settings - from django.core.cache import caches - from django.conf import settings - - verbose = options['verbose'] - - for offer in Offer.past().filter(notified_end=None): - if verbose: - print 'Notify end:', offer - # The 'WL fund' list needs to be updated. - caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() - offer.flush_includes() - offer.notify_end() - - current = Offer.current() - if (current is not None and - current.end <= date.today() + timedelta(app_settings.DAYS_NEAR - 1) and - not current.notified_near): - if verbose: - print 'Notify near:', current - current.notify_near() diff --git a/apps/funding/migrations/0001_initial.py b/apps/funding/migrations/0001_initial.py deleted file mode 100644 index cebe8d287..000000000 --- a/apps/funding/migrations/0001_initial.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('polls', '0001_initial'), - ('catalogue', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Funding', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=127, verbose_name='name', blank=True)), - ('email', models.EmailField(db_index=True, max_length=75, verbose_name='email', blank=True)), - ('amount', models.DecimalField(verbose_name='amount', max_digits=10, decimal_places=2)), - ('payed_at', models.DateTimeField(db_index=True, null=True, verbose_name='payed at', blank=True)), - ('language_code', models.CharField(max_length=2, null=True, blank=True)), - ('notifications', models.BooleanField(default=True, db_index=True, verbose_name='notifications')), - ('notify_key', models.CharField(max_length=32)), - ], - options={ - 'ordering': ['-payed_at'], - 'verbose_name': 'funding', - 'verbose_name_plural': 'fundings', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Offer', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('author', models.CharField(max_length=255, verbose_name='author')), - ('title', models.CharField(max_length=255, verbose_name='Title')), - ('slug', models.SlugField(verbose_name='Slug')), - ('description', models.TextField(verbose_name='Description', blank=True)), - ('target', models.DecimalField(verbose_name='target', max_digits=10, decimal_places=2)), - ('start', models.DateField(verbose_name='start', db_index=True)), - ('end', models.DateField(verbose_name='end', db_index=True)), - ('redakcja_url', models.URLField(verbose_name='redakcja URL', blank=True)), - ('cover', models.ImageField(upload_to=b'funding/covers', verbose_name='Cover')), - ('notified_near', models.DateTimeField(null=True, verbose_name='Near-end notifications sent', blank=True)), - ('notified_end', models.DateTimeField(null=True, verbose_name='End notifications sent', blank=True)), - ('book', models.ForeignKey(blank=True, to='catalogue.Book', help_text='Published book.', null=True)), - ('poll', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='polls.Poll', help_text='Poll', null=True)), - ], - options={ - 'ordering': ['-end'], - 'verbose_name': 'offer', - 'verbose_name_plural': 'offers', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Perk', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('price', models.DecimalField(verbose_name='price', max_digits=10, decimal_places=2)), - ('name', models.CharField(max_length=255, verbose_name='name')), - ('long_name', models.CharField(max_length=255, verbose_name='long name')), - ('end_date', models.DateField(null=True, verbose_name='end date', blank=True)), - ('offer', models.ForeignKey(verbose_name='offer', blank=True, to='funding.Offer', null=True)), - ], - options={ - 'ordering': ['-price'], - 'verbose_name': 'perk', - 'verbose_name_plural': 'perks', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Spent', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('amount', models.DecimalField(verbose_name='amount', max_digits=10, decimal_places=2)), - ('timestamp', models.DateField(verbose_name='when')), - ('book', models.ForeignKey(to='catalogue.Book')), - ], - options={ - 'ordering': ['-timestamp'], - 'verbose_name': 'money spent on a book', - 'verbose_name_plural': 'money spent on books', - }, - bases=(models.Model,), - ), - migrations.AddField( - model_name='funding', - name='offer', - field=models.ForeignKey(verbose_name='offer', to='funding.Offer'), - preserve_default=True, - ), - migrations.AddField( - model_name='funding', - name='perks', - field=models.ManyToManyField(to='funding.Perk', verbose_name='perks', blank=True), - preserve_default=True, - ), - ] diff --git a/apps/funding/migrations/0002_auto_20151221_1225.py b/apps/funding/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index 3224eb006..000000000 --- a/apps/funding/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('funding', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='funding', - name='email', - field=models.EmailField(db_index=True, max_length=254, verbose_name='email', blank=True), - ), - migrations.AlterField( - model_name='offer', - name='description', - field=models.TextField(verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='offer', - name='slug', - field=models.SlugField(verbose_name='slug'), - ), - migrations.AlterField( - model_name='offer', - name='title', - field=models.CharField(max_length=255, verbose_name='title'), - ), - ] diff --git a/apps/funding/migrations/__init__.py b/apps/funding/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/funding/models.py b/apps/funding/models.py deleted file mode 100644 index e36b73255..000000000 --- a/apps/funding/models.py +++ /dev/null @@ -1,348 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from datetime import date, datetime -from urllib import urlencode -from django.conf import settings -from django.contrib.sites.models import Site -from django.core.urlresolvers import reverse -from django.core.mail import send_mail -from django.db import models -from django.template.loader import render_to_string -from django.utils.timezone import utc -from django.utils.translation import ugettext_lazy as _, override -import getpaid -from ssify import flush_ssi_includes -from catalogue.models import Book -from catalogue.utils import get_random_hash -from polls.models import Poll -from . import app_settings - - -class Offer(models.Model): - """ A fundraiser for a particular book. """ - author = models.CharField(_('author'), max_length=255) - title = models.CharField(_('title'), max_length=255) - slug = models.SlugField(_('slug')) - description = models.TextField(_('description'), blank=True) - target = models.DecimalField(_('target'), decimal_places=2, max_digits=10) - start = models.DateField(_('start'), db_index=True) - end = models.DateField(_('end'), db_index=True) - redakcja_url = models.URLField(_('redakcja URL'), blank=True) - book = models.ForeignKey(Book, null=True, blank=True, - help_text=_('Published book.')) - cover = models.ImageField(_('Cover'), upload_to='funding/covers') - poll = models.ForeignKey(Poll, help_text=_('Poll'), null=True, blank=True, on_delete=models.SET_NULL) - - notified_near = models.DateTimeField(_('Near-end notifications sent'), blank=True, null=True) - notified_end = models.DateTimeField(_('End notifications sent'), blank=True, null=True) - - def cover_img_tag(self): - return u'' % self.cover.url - cover_img_tag.short_description = _('Cover preview') - cover_img_tag.allow_tags = True - - class Meta: - verbose_name = _('offer') - verbose_name_plural = _('offers') - ordering = ['-end'] - - def __unicode__(self): - return u"%s - %s" % (self.author, self.title) - - def get_absolute_url(self): - return reverse('funding_offer', args=[self.slug]) - - def save(self, *args, **kw): - published_now = (self.book_id is not None and - self.pk is not None and - type(self).objects.values('book').get(pk=self.pk)['book'] != self.book_id) - retval = super(Offer, self).save(*args, **kw) - self.flush_includes() - if published_now: - self.notify_published() - return retval - - def flush_includes(self): - flush_ssi_includes([ - template % (self.pk, lang) - for template in [ - '/wesprzyj/o/%d/top-bar.%s.html', - '/wesprzyj/o/%d/detail-bar.%s.html', - '/wesprzyj/o/%d/list-bar.%s.html', - '/wesprzyj/o/%d/status.%s.html', - '/wesprzyj/o/%d/status-more.%s.html', - ] + [ - '/wesprzyj/o/%%d/fundings/%d.%%s.html' % page - for page in range(1, len(self.funding_payed()) // 10 + 2) - ] - for lang in [lc for (lc, _ln) in settings.LANGUAGES] - ]) - - def is_current(self): - return self.start <= date.today() <= self.end and self == self.current() - - def is_win(self): - return self.sum() >= self.target - - def remaining(self): - if self.is_current(): - return None - if self.is_win(): - return self.sum() - self.target - else: - return self.sum() - - @classmethod - def current(cls): - """ Returns current fundraiser or None. - - Current fundraiser is the one that: - - has already started, - - hasn't yet ended, - - if there's more than one of those, it's the one that ends last. - - """ - today = date.today() - objects = cls.objects.filter(start__lte=today, end__gte=today).order_by('-end') - try: - return objects[0] - except IndexError: - return None - - @classmethod - def past(cls): - """ QuerySet for all past fundraisers. """ - objects = cls.public() - current = cls.current() - if current is not None: - objects = objects.exclude(pk=current.pk) - return objects - - @classmethod - def public(cls): - """ QuerySet for all current and past fundraisers. """ - today = date.today() - return cls.objects.filter(start__lte=today) - - def get_perks(self, amount=None): - """ Finds all the perks for the offer. - - If amount is provided, returns the perks you get for it. - - """ - perks = Perk.objects.filter( - models.Q(offer=self) | models.Q(offer=None) - ).exclude(end_date__lt=date.today()) - if amount is not None: - perks = perks.filter(price__lte=amount) - return perks - - def funding_payed(self): - """ QuerySet for all completed payments for the offer. """ - return Funding.payed().filter(offer=self) - - def funders(self): - return self.funding_payed().order_by('-amount', 'payed_at') - - def sum(self): - """ The money gathered. """ - return self.funding_payed().aggregate(s=models.Sum('amount'))['s'] or 0 - - def notify_all(self, subject, template_name, extra_context=None): - Funding.notify_funders( - subject, template_name, extra_context, - query_filter=models.Q(offer=self) - ) - - def notify_end(self, force=False): - if not force and self.notified_end: return - assert not self.is_current() - self.notify_all( - _('The fundraiser has ended!'), - 'funding/email/end.txt', { - 'offer': self, - 'is_win': self.is_win(), - 'remaining': self.remaining(), - 'current': self.current(), - }) - self.notified_end = datetime.utcnow().replace(tzinfo=utc) - self.save() - - def notify_near(self, force=False): - if not force and self.notified_near: return - assert self.is_current() - sum_ = self.sum() - need = self.target - sum_ - self.notify_all( - _('The fundraiser will end soon!'), - 'funding/email/near.txt', { - 'days': (self.end - date.today()).days + 1, - 'offer': self, - 'is_win': self.is_win(), - 'sum': sum_, - 'need': need, - }) - self.notified_near = datetime.utcnow().replace(tzinfo=utc) - self.save() - - def notify_published(self): - assert self.book is not None - self.notify_all( - _('The book you helped fund has been published.'), - 'funding/email/published.txt', { - 'offer': self, - 'book': self.book, - 'author': self.book.pretty_title(), - 'current': self.current(), - }) - - -class Perk(models.Model): - """ A perk offer. - - If no attached to a particular Offer, applies to all. - - """ - offer = models.ForeignKey(Offer, verbose_name=_('offer'), null=True, blank=True) - price = models.DecimalField(_('price'), decimal_places=2, max_digits=10) - name = models.CharField(_('name'), max_length=255) - long_name = models.CharField(_('long name'), max_length=255) - end_date = models.DateField(_('end date'), null=True, blank=True) - - class Meta: - verbose_name = _('perk') - verbose_name_plural = _('perks') - ordering = ['-price'] - - def __unicode__(self): - return "%s (%s%s)" % (self.name, self.price, u" for %s" % self.offer if self.offer else "") - - -class Funding(models.Model): - """ A person paying in a fundraiser. - - The payment was completed if and only if payed_at is set. - - """ - offer = models.ForeignKey(Offer, verbose_name=_('offer')) - name = models.CharField(_('name'), max_length=127, blank=True) - email = models.EmailField(_('email'), blank=True, db_index=True) - amount = models.DecimalField(_('amount'), decimal_places=2, max_digits=10) - payed_at = models.DateTimeField(_('payed at'), null=True, blank=True, db_index=True) - perks = models.ManyToManyField(Perk, verbose_name=_('perks'), blank=True) - language_code = models.CharField(max_length=2, null=True, blank=True) - notifications = models.BooleanField(_('notifications'), default=True, db_index=True) - notify_key = models.CharField(max_length=32) - - class Meta: - verbose_name = _('funding') - verbose_name_plural = _('fundings') - ordering = ['-payed_at'] - - @classmethod - def payed(cls): - """ QuerySet for all completed payments. """ - return cls.objects.exclude(payed_at=None) - - def __unicode__(self): - return unicode(self.offer) - - def get_absolute_url(self): - return reverse('funding_funding', args=[self.pk]) - - def perk_names(self): - return ", ".join(perk.name for perk in self.perks.all()) - - def get_disable_notifications_url(self): - return "%s?%s" % (reverse("funding_disable_notifications"), - urlencode({ - 'email': self.email, - 'key': self.notify_key, - })) - - def save(self, *args, **kwargs): - if self.email and not self.notify_key: - self.notify_key = get_random_hash(self.email) - ret = super(Funding, self).save(*args, **kwargs) - self.offer.flush_includes() - return ret - - @classmethod - def notify_funders(cls, subject, template_name, extra_context=None, - query_filter=None, payed_only=True): - funders = cls.objects.exclude(email="").filter(notifications=True) - if payed_only: - funders = funders.exclude(payed_at=None) - if query_filter is not None: - funders = funders.filter(query_filter) - emails = set() - for funder in funders: - if funder.email in emails: - continue - emails.add(funder.email) - funder.notify(subject, template_name, extra_context) - - def notify(self, subject, template_name, extra_context=None): - context = { - 'funding': self, - 'site': Site.objects.get_current(), - } - if extra_context: - context.update(extra_context) - with override(self.language_code or app_settings.DEFAULT_LANGUAGE): - send_mail(subject, - render_to_string(template_name, context), - settings.CONTACT_EMAIL, - [self.email], - fail_silently=False - ) - - def disable_notifications(self): - """Disables all notifications for this e-mail address.""" - type(self).objects.filter(email=self.email).update(notifications=False) - - -# Register the Funding model with django-getpaid for payments. -getpaid.register_to_payment(Funding, unique=False, related_name='payment') - - -class Spent(models.Model): - """ Some of the remaining money spent on a book. """ - book = models.ForeignKey(Book) - amount = models.DecimalField(_('amount'), decimal_places=2, max_digits=10) - timestamp = models.DateField(_('when')) - - class Meta: - verbose_name = _('money spent on a book') - verbose_name_plural = _('money spent on books') - ordering = ['-timestamp'] - - def __unicode__(self): - return u"Spent: %s" % unicode(self.book) - - -def new_payment_query_listener(sender, order=None, payment=None, **kwargs): - """ Set payment details for getpaid. """ - payment.amount = order.amount - payment.currency = 'PLN' -getpaid.signals.new_payment_query.connect(new_payment_query_listener) - - -def user_data_query_listener(sender, order, user_data, **kwargs): - """ Set user data for payment. """ - user_data['email'] = order.email -getpaid.signals.user_data_query.connect(user_data_query_listener) - -def payment_status_changed_listener(sender, instance, old_status, new_status, **kwargs): - """ React to status changes from getpaid. """ - if old_status != 'paid' and new_status == 'paid': - instance.order.payed_at = datetime.utcnow().replace(tzinfo=utc) - instance.order.save() - if instance.order.email: - instance.order.notify( - _('Thank you for your support!'), - 'funding/email/thanks.txt' - ) -getpaid.signals.payment_status_changed.connect(payment_status_changed_listener) diff --git a/apps/funding/static/funding/funding.js b/apps/funding/static/funding/funding.js deleted file mode 100644 index 765bddcad..000000000 --- a/apps/funding/static/funding/funding.js +++ /dev/null @@ -1,18 +0,0 @@ -$(function() { - $('.funding .close').click(function(e) { - e.preventDefault(); - var fundNode = $(e.target).parent(); - fundNode.slideUp(function(){fundingHandle.show()}); - if(Modernizr.localstorage) - localStorage['hide-offer-id'] = fundNode.attr('data-offer-id'); - }); - - var fundingTopHeader = $('#funding-closeable'); - var fundingHandle = $('#funding-handle'); - fundingHandle.click(function(e) { - fundingTopHeader.slideDown(); - $(e.target).hide(); - if(Modernizr.localstorage) - localStorage.removeItem('hide-offer-id'); - }); -}); \ No newline at end of file diff --git a/apps/funding/templates/admin/funding/offer/change_form.html b/apps/funding/templates/admin/funding/offer/change_form.html deleted file mode 100755 index 292d0dfeb..000000000 --- a/apps/funding/templates/admin/funding/offer/change_form.html +++ /dev/null @@ -1,31 +0,0 @@ -{% extends "admin/change_form.html" %} -{% load i18n %} - -{% block extrahead %} -{{ block.super }} - -{% endblock %} - - - -{% block pretitle %} - - -↓ {% trans "fundings" %} ↓ - -{{ block.super }} -{% endblock %} diff --git a/apps/funding/templates/funding/disable_notifications.html b/apps/funding/templates/funding/disable_notifications.html deleted file mode 100644 index 9123310d9..000000000 --- a/apps/funding/templates/funding/disable_notifications.html +++ /dev/null @@ -1,34 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load fnp_share %} - -{% block titleextra %}{% trans "Payment failed" %}{% endblock %} - -{% block body %} - -

        {% trans "Disable notifications" %}

        -
        - -{% if view.object.notifications %} - -

        {% blocktrans with e=view.object.email %}Are you sure you want to disable notifications for address {{e}}?{% endblocktrans %}

        -
        - -
        - -{% else %} - -

        {% blocktrans with e=view.object.email %}Notifications for address {{e}} have been successfully disabled.{% endblocktrans %}

        - -{% endif %} - -{% url 'funding_current' as current %} -

        -{% blocktrans with current=current %}Return to the current fundraiser.{% endblocktrans %} -

        - - -
        - - -{% endblock %} diff --git a/apps/funding/templates/funding/email/base.txt b/apps/funding/templates/funding/email/base.txt deleted file mode 100755 index 1129549ce..000000000 --- a/apps/funding/templates/funding/email/base.txt +++ /dev/null @@ -1,10 +0,0 @@ -{% autoescape off %}{% load i18n %}{% trans 'Hi' %}{% if funding.name %} {{ funding.name }}{% endif %}, -{% block body %} -{% endblock %} -{% blocktrans %}Cheers, -Wolne Lektury team{% endblocktrans %} - --- -{% blocktrans %}If you don't want to receive any more updates, please visit this page:{% endblocktrans %} -http://{{site.domain}}{{ funding.get_disable_notifications_url }} -{% endautoescape %} diff --git a/apps/funding/templates/funding/email/end.txt b/apps/funding/templates/funding/email/end.txt deleted file mode 100755 index 023d34427..000000000 --- a/apps/funding/templates/funding/email/end.txt +++ /dev/null @@ -1,42 +0,0 @@ -{% extends "funding/email/base.txt" %} -{% load i18n %} - - -{% block body %}{% if is_win %} -{% blocktrans %}we succesfully collected the full amount needed -for the book you contributed to:{% endblocktrans %} - - {{ offer.author }} – {{ offer.title }} - http://{{ site.domain }}{{ offer.get_absolute_url }} - -{% blocktrans %}We will now digitize it, develop and publish it in the library, -in various formats, free for everyone.{% endblocktrans %} -{% if funding.name %} -{% blocktrans %}Your name will be included on the list of contributors, irrespectively -of the amount of your contribution.{% endblocktrans %} -{% endif %}{# funding.name #}{% if funding.perks.exists %} -{% blocktrans %}We will contact you again about details needed -to deliver your perks.{% endblocktrans %} -{% endif %}{# funding.perks.exists #}{% if remaining %} -{% blocktrans with r=remaining %}All of the money remaining after this fundraiser ({{ r }} PLN) -will be spent on liberating other books still waiting for publication.{% endblocktrans %} -{% blocktrans %}You can see how we're spending these funds on this page:{% endblocktrans %} -http://{{ site.domain }}{% url 'funding_wlfund' %} -{% endif %}{# remaining #}{% else %}{# !is_win #} -{% blocktrans %}unfortunately, we were unable to collect the full amount needed -for the book you contributed to:{% endblocktrans %} - - {{ offer.author }} – {{ offer.title }} - http://{{ site.domain }}{{ offer.get_absolute_url }} -{% if remaining %} -{% blocktrans with x=remaining %}All of the money we collected in this fundraiser ({{ x }} PLN) -will be spent on liberating other books still waiting for publication.{% endblocktrans %} -{% blocktrans %}You can see how we're spending these funds on this page:{% endblocktrans %} -http://{{ site.domain }}{% url 'funding_wlfund' %} -{% endif %}{# remaining #}{% endif %}{# is_win #}{% if current %} -{% blocktrans %}If you'd like to help liberate another book, or invite your friends -to do so, we're currently raising money for:{% endblocktrans %} - - {{ current.author }} – {{ current.title }} - http://{{ site.domain }}{% url 'funding_current' %} -{% endif %}{% endblock %} diff --git a/apps/funding/templates/funding/email/near.txt b/apps/funding/templates/funding/email/near.txt deleted file mode 100755 index 47537c129..000000000 --- a/apps/funding/templates/funding/email/near.txt +++ /dev/null @@ -1,18 +0,0 @@ -{% extends "funding/email/base.txt" %} -{% load i18n %} - -{% block body %} -{% blocktrans count days as d %}there's only {{ d }} day left until the end of the fundraiser for: -{% plural %}There're only {{ d }} days left until the end of the fundraiser for: -{% endblocktrans %} - {{ offer.author }} – {{ offer.title }} - -{% blocktrans with x=sum %}We managed to collect {{x}} PLN so far.{% endblocktrans %} -{% if is_win %} -{% blocktrans %}The fundraiser is a success already, but the more money -we collect, the more other books we'll publish.{% endblocktrans %} -{% else %}{% blocktrans with x=need %}We still need {{ x }} PLN more.{% endblocktrans %} -{% endif %} -{% trans "There's still time to let your friends know about the fundraiser!" %} -http://{{ site.domain }}{% url 'funding_current' %} -{% endblock %} diff --git a/apps/funding/templates/funding/email/published.txt b/apps/funding/templates/funding/email/published.txt deleted file mode 100755 index 672efa2ae..000000000 --- a/apps/funding/templates/funding/email/published.txt +++ /dev/null @@ -1,17 +0,0 @@ -{% extends "funding/email/base.txt" %} -{% load i18n %} -{% block body %} -{% blocktrans %}we have just published the book you contributed to:{% endblocktrans %} - - {{ author }} – {{ offer.book.title }} - http://{{ site.domain }}{{ offer.book.get_absolute_url }} - -{% blocktrans %}Thanks to you, it is now available for free, -in various formats, to everyone.{% endblocktrans %} -{% if current %} -{% blocktrans %}If you'd like to help liberate another book, or invite your friends -to do so, we're currently raising money for:{% endblocktrans %} - - {{ current.author }} – {{ current.title }} - http://{{ site.domain }}{% url 'funding_current' %} -{% endif %}{% endblock %} diff --git a/apps/funding/templates/funding/email/thanks.txt b/apps/funding/templates/funding/email/thanks.txt deleted file mode 100644 index 2ded0bd9d..000000000 --- a/apps/funding/templates/funding/email/thanks.txt +++ /dev/null @@ -1,14 +0,0 @@ -{% extends "funding/email/base.txt" %} -{% load i18n %} - - -{% block body %} -{% trans 'Thank you for your support - thanks to you we will set another book free.' %}{% if funding.name %} - -{% trans 'The book will be supplemented with your name as a donor.' %}{% endif %} -{% if funding.perks.exists %} -{% blocktrans %}We will contact you about details needed for your perks.{% endblocktrans %} -{% endif %}{# funding.perks.exists #} -{% blocktrans %}We will keep you informed about status changes to this fundraiser -and the upcoming ones that we plan to launch.{% endblocktrans %} -{% endblock %} diff --git a/apps/funding/templates/funding/includes/funding.html b/apps/funding/templates/funding/includes/funding.html deleted file mode 100644 index c8f62d275..000000000 --- a/apps/funding/templates/funding/includes/funding.html +++ /dev/null @@ -1,72 +0,0 @@ -{% spaceless %} - -{% load i18n %} -{% load time_tags %} - -{% if offer %} - - -{% if closeable %} -
        {% trans "Help free the book!" %}
        - - - -{% endif %} - - -{% endif %} - -{% endspaceless %} diff --git a/apps/funding/templates/funding/includes/fundings.html b/apps/funding/templates/funding/includes/fundings.html deleted file mode 100644 index e13e1ec18..000000000 --- a/apps/funding/templates/funding/includes/fundings.html +++ /dev/null @@ -1,28 +0,0 @@ -{% spaceless %} - -{% load i18n %} -{% load pagination_tags %} - - - -{% for funding in fundings %} - - - - - -{% endfor %} -
        {{ funding.payed_at.date }} - {% if funding.name %} - {{ funding.name }} - {% else %} - {% trans "Anonymous" %} - {% endif %} - {{ funding.amount }} zł  - {% for perk in funding.perks.all %} - {{ perk.name }}{% if not forloop.last %},{% endif %} - {% endfor %} -
        - -{% endspaceless %}{% paginate %} - diff --git a/apps/funding/templates/funding/includes/offer_status.html b/apps/funding/templates/funding/includes/offer_status.html deleted file mode 100644 index 4d5ae05ea..000000000 --- a/apps/funding/templates/funding/includes/offer_status.html +++ /dev/null @@ -1,31 +0,0 @@ -{% load i18n %} - -{% if offer.is_current %} - {% if offer.is_win %} -

        - {% blocktrans with end=offer.end %}The fundraiser - ends on {{ end }}. The full amount has been successfully - raised, but you can still contribute and help liberate - more books.{% endblocktrans %} -

        - {% else %} -

        - {% blocktrans with target=offer.target|floatformat:-2 %}We need {{target}} zł to digitize it, - compile it and publish for free in multiple formats.{% endblocktrans %} -

        -

        - {% blocktrans with end=offer.end %}If we raise enough money before {{end}} we will - publish it and make it available for everyone.{% endblocktrans %} -

        - {% endif %} -{% else %} - {% if offer.is_win %} -

        - {% trans "Full amount was successfully raised!" %} -

        - {% else %} -

        - {% trans "The amount needed was not raised." %} -

        - {% endif %} -{% endif %} diff --git a/apps/funding/templates/funding/includes/offer_status_more.html b/apps/funding/templates/funding/includes/offer_status_more.html deleted file mode 100644 index c94c9a801..000000000 --- a/apps/funding/templates/funding/includes/offer_status_more.html +++ /dev/null @@ -1,26 +0,0 @@ -{% load i18n %} - -{% if offer.is_current %} -

        - {% include "funding/snippets/any_remaining.html" %} -

        -{% else %} -

        {% trans "Fundraiser span" %}: {{ offer.start }} – {{ offer.end }}

        - {% if offer.is_win %} -

        - {% if offer.book %} - {% blocktrans with bu=offer.book.get_absolute_url bt=offer.book %}The book - {{ bt }} has been already published.{% endblocktrans %} - {% else %} - {% if offer.redakcja_url %} - {% blocktrans with r=offer.redakcja_url %}You can follow - the work on the Editorial Platform.{% endblocktrans %} - {% endif %} - {% endif %} -

        - {% endif %} - - {% if offer.remaining %} -

        {% include "funding/snippets/any_remaining.html" %}

        - {% endif %} -{% endif %} diff --git a/apps/funding/templates/funding/no_thanks.html b/apps/funding/templates/funding/no_thanks.html deleted file mode 100644 index 3c8db166e..000000000 --- a/apps/funding/templates/funding/no_thanks.html +++ /dev/null @@ -1,23 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load fnp_share %} - -{% block titleextra %}{% trans "Payment failed" %}{% endblock %} - -{% block body %} - -

        {% trans "Payment failed" %}

        -
        - -

        {% trans "You're support has not been processed successfully." %}

        - -{% url 'funding_current' as current %} -

        -{% blocktrans with current=current %}Return to the current fundraiser and try again or try to use a different payment method.{% endblocktrans %} -

        - - -
        - - -{% endblock %} diff --git a/apps/funding/templates/funding/offer_detail.html b/apps/funding/templates/funding/offer_detail.html deleted file mode 100644 index 70930c400..000000000 --- a/apps/funding/templates/funding/offer_detail.html +++ /dev/null @@ -1,77 +0,0 @@ -{% extends "base.html" %} -{% load url from future %} -{% load i18n static %} -{% load pagination_tags %} -{% load fnp_share %} -{% load thumbnail %} -{% load build_absolute_uri from fnp_common %} -{% load ssi_include from ssify %} - - -{% block titleextra %}{{ object }}{% endblock %} - -{% block ogimage %}{{ object.cover.url|build_absolute_uri:request }}{% endblock %} - -{% block metadescription %}Wesprzyj kolejną publikację Wolnych Lektur!{% endblock %} - - -{% block body %} - -

        {{ object }}

        - -{% ssi_include 'funding_detail_bar' pk=object.pk %} -
        -
        - {% if object.cover %} - Cover - {% endif %} -
        -

        {% trans "Help free the book!" %}

        - {{ object.description|safe }} - {% ssi_include 'funding_status' pk=object.pk %} - 1%Możesz też przekazać
        1% podatku na rozwój biblioteki. →
        - {% ssi_include 'funding_status_more' pk=object.pk %} -

        {% trans "Learn more" %}.

        -
        - -
        -
        - - {% if object.is_current %} -
        -

        {% trans "Support the publication" %}

        -
        - - {{ form.as_table }} - -
        - -
        -
        -
        - - {% url 'funding_current' object.slug as current %} -

        {% trans "Tell your friends!" %}

        - - {% endif %} - -

        {% trans "See all fundraisers." %}

        - -
        - - -

        {% trans "Supporters" %}:

        - -
        - {% ssi_include 'funding_fundings' pk=object.pk page=page %} -
        - -{% endblock %} diff --git a/apps/funding/templates/funding/offer_list.html b/apps/funding/templates/funding/offer_list.html deleted file mode 100644 index e8088bfa8..000000000 --- a/apps/funding/templates/funding/offer_list.html +++ /dev/null @@ -1,47 +0,0 @@ -{% extends "base.html" %} -{% load url from future %} -{% load i18n %} -{% load ssi_include from ssify %} -{% load pagination_tags %} - -{% block titleextra %}{% trans "All fundraisers" %}{% endblock %} - -{% block bodyid %}funding-offer-list{% endblock %} - -{% block body %} -

        {% trans "All fundraisers" %}

        - - -{% autopaginate object_list 10 %} -{% if page_obj.number == 1 %} -

        {% trans "Current fundraiser:" %}

        -{% endif %} - -{% for offer in object_list %} -{% with is_win=offer.is_win is_current=offer.is_current %} - {% if not is_current and forloop.first and page_obj.number == 1 %} -

        {% trans "No fundraiser is currently running." %}

        -

        {% trans "Previous fundraisers:" %}

        - {% endif %} - - {% ssi_include 'funding_list_bar' pk=offer.pk %} - -
        - {% if is_current %} -

        {% trans "Help free the book!" %}

        - {{ offer.description|safe }} - {% endif %} - {% ssi_include 'funding_status' pk=offer.pk %} - {% ssi_include 'funding_status_more' pk=offer.pk %} - -
        - - {% if is_current and not forloop.last %} -

        {% trans "Previous fundraisers:" %}

        - {% endif %} - -{% endwith %} -{% endfor %} -{% paginate %} - -{% endblock %} diff --git a/apps/funding/templates/funding/snippets/any_remaining.html b/apps/funding/templates/funding/snippets/any_remaining.html deleted file mode 100644 index d8a5bd675..000000000 --- a/apps/funding/templates/funding/snippets/any_remaining.html +++ /dev/null @@ -1,10 +0,0 @@ - -{% load i18n %} -{% url 'funding_wlfund' as wlfund %} -{% blocktrans %}Any remaining funds will be spent -on other books waiting to be published.{% endblocktrans %} -

        -{% blocktrans %}We will supplement every book with your name as a donor, no matter how -big your support will be.{% endblocktrans %} - - diff --git a/apps/funding/templates/funding/thanks.html b/apps/funding/templates/funding/thanks.html deleted file mode 100644 index 676ea487b..000000000 --- a/apps/funding/templates/funding/thanks.html +++ /dev/null @@ -1,51 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load fnp_share %} -{% load polls_tags %} - -{% block titleextra %}{% trans "Thank you for your support!" %}{% endblock %} - -{% block body %} - -

        {% trans "Thank you!" %}

        -
        - -1%Możesz też przekazać
        1% podatku na rozwój biblioteki. →
        - -

        {% trans "Thank you for your support!" %}

        -

        {% blocktrans %}We will contact you if you qualify for perks.{% endblocktrans %}

        - -{% if offer.is_win %} -

        {% trans "Full amount was successfully raised!" %}

        - -

        {% blocktrans with b=offer.title %}Your donation will be spent on digitizing, compiling and - publishing the book {{ b }} in multiple formats.{% endblocktrans %}

        - -{% else %} - -

        {% blocktrans with b=offer.title %}If the full amount needed is raised, - your donation will be spent on digitizing, compiling and - publishing the book {{ b }} in multiple formats.{% endblocktrans %}

        - -{% endif %} - - -

        {% include "funding/snippets/any_remaining.html" %} - -{% trans "Learn more" %}.

        - -{% url 'funding_current' offer.slug as current %} -

        {% trans "Go back to the current fundraiser." %}

        - - -

        {% trans "Tell your friends!" %}

        - - -{% if offer.poll %} -

        {% trans "Vote for a book for the next fundraiser" %}

        - {% poll offer.poll %} -{% endif %} -
        - - -{% endblock %} diff --git a/apps/funding/templates/funding/widgets/amount.html b/apps/funding/templates/funding/widgets/amount.html deleted file mode 100644 index 01db675a0..000000000 --- a/apps/funding/templates/funding/widgets/amount.html +++ /dev/null @@ -1,19 +0,0 @@ -{% load i18n %} -
        -{% if perks %} - {% for perk in perks %} -
        - {% endfor %} - - zł -{% else %} - -{% endif %} -
        diff --git a/apps/funding/templates/funding/wlfund.html b/apps/funding/templates/funding/wlfund.html deleted file mode 100644 index bb8a2bea2..000000000 --- a/apps/funding/templates/funding/wlfund.html +++ /dev/null @@ -1,59 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block titleextra %}{% trans "Remaining funds" %}{% endblock %} - -{% block body %} - -

        {% trans "Remaining funds" %}

        - -
        -

        {% blocktrans with r="http://redakcja.wolnelektury.pl/" %}If -the full amount needed for publishing a book is not raised in time, -the funds are spent on other books waiting for -publication. The same thing happens with any money remaining -from successful fundraisers.{% endblocktrans %} - -{% trans "Learn more" %}.

        - -

        {% trans "Spending these remaining funds is recorded in this table." %}

        -
        - - - - - - - - - - - {% for tag, entry in log %} - {% if tag == 'spent' %} - - - - - - - {% else %} - - - - - - - {% endif %} - {% empty %} - - {% endfor %} -
        {% trans "Date" %}:{% trans "Operation" %}:{% trans "Amount" %}:{% trans "Balance" %}:
        {{ entry.timestamp }}{% trans "Money spent on publishing the book" %}: - - {{ entry.book }}-{{ entry.amount }} zł{{ entry.total }} zł
        {{ entry.end }}{% trans "Money remaining from the fundraiser for" %}: - - {{ entry }}+{{ entry.wlfund }} zł{{ entry.total }} zł
        - {% trans "There are no previous fundraisers to show yet." %} -
        - - -{% endblock %} diff --git a/apps/funding/templatetags/__init__.py b/apps/funding/templatetags/__init__.py deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/funding/templatetags/funding_tags.py b/apps/funding/templatetags/funding_tags.py deleted file mode 100755 index 5dbeec6eb..000000000 --- a/apps/funding/templatetags/funding_tags.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import template -from ssify import ssi_variable -from ssify.utils import ssi_cache_control -from ..models import Offer -from ..utils import sanitize_payment_title - -register = template.Library() - - -@ssi_variable(register, patch_response=[ssi_cache_control(must_revalidate=True, max_age=0)]) -def current_offer(request): - offer = Offer.current() - return offer.pk if offer is not None else None - - -register.filter(sanitize_payment_title) diff --git a/apps/funding/tests.py b/apps/funding/tests.py deleted file mode 100644 index 6dbfbb457..000000000 --- a/apps/funding/tests.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from datetime import date, timedelta -from django.test import TestCase -from .models import Offer, Perk - - -class PerksTest(TestCase): - def setUp(self): - self.today = date.today() - self.offer1 = Offer.objects.create( - author='author1', title='title1', slug='slug1', - target=100, start=self.today, end=self.today) - - def test_perks(self): - perk = Perk.objects.create(price=20, name='Perk 20') - perk1 = Perk.objects.create(offer=self.offer1, price=50, name='Perk 50') - offer2 = Offer.objects.create( - author='author2', title='title2', slug='slug2', - target=100, start=self.today-timedelta(1), end=self.today-timedelta(1)) - perk2 = Perk.objects.create(offer=offer2, price=1, name='Perk 1') - - self.assertEqual( - set(self.offer1.get_perks(10)), - set()) - self.assertEqual( - set(self.offer1.get_perks(70)), - set([perk, perk1])) - - -class FundingTest(TestCase): - def setUp(self): - self.today = date.today() - self.offer_past = Offer.objects.create( - author='an-author', title='past', slug='past', - target=100, start=self.today-timedelta(1), end=self.today-timedelta(1)) - self.offer_current = Offer.objects.create( - author='an-author', title='current', slug='current', - target=100, start=self.today, end=self.today) - self.offer_future = Offer.objects.create( - author='an-author', title='future', slug='future', - target=100, start=self.today+timedelta(1), end=self.today+timedelta(1)) - - def test_current(self): - self.assertTrue(self.offer_current.is_current()) - self.assertFalse(self.offer_past.is_current()) - self.assertEqual(Offer.current(), self.offer_current) - self.assertEqual( - set(Offer.past()), - set([self.offer_past]) - ) - self.assertEqual( - set(Offer.public()), - set([self.offer_past, self.offer_current]) - ) - - def test_interrupt(self): - # A new offer starts, ending the previously current one. - offer_interrupt = Offer.objects.create( - author='an-author', title='interrupt', slug='interrupt', - target=100, start=self.today-timedelta(1), end=self.today+timedelta(1)) - - self.assertTrue(offer_interrupt.is_current()) - self.assertFalse(self.offer_current.is_current()) - self.assertEqual(Offer.current(), offer_interrupt) - self.assertEqual( - set(Offer.past()), - set([self.offer_past, self.offer_current]) - ) - self.assertEqual( - set(Offer.public()), - set([self.offer_past, self.offer_current, offer_interrupt]) - ) - diff --git a/apps/funding/urls.py b/apps/funding/urls.py deleted file mode 100644 index 4d806e84b..000000000 --- a/apps/funding/urls.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url, include - -from .views import (WLFundView, OfferDetailView, OfferListView, - ThanksView, NoThanksView, CurrentView, DisableNotifications) - - -urlpatterns = patterns('funding.views', - - url(r'^$', CurrentView.as_view(), name='funding_current'), - url(r'^teraz/$', CurrentView.as_view()), - url(r'^teraz/(?P[^/]+)/$', CurrentView.as_view(), name='funding_current'), - url(r'^lektura/$', OfferListView.as_view(), name='funding'), - url(r'^lektura/(?P[^/]+)/$', OfferDetailView.as_view(), name='funding_offer'), - url(r'^pozostale/$', WLFundView.as_view(), name='funding_wlfund'), - - url(r'^dziekujemy/$', ThanksView.as_view(), name='funding_thanks'), - url(r'^niepowodzenie/$', NoThanksView.as_view(), name='funding_nothanks'), - - url(r'^wylacz_email/$', DisableNotifications.as_view(), name='funding_disable_notifications'), - - url(r'^getpaid/', include('getpaid.urls')), - - # Includes - url(r'^o/(?P\d+)/top-bar\.(?P.+)\.html$', 'top_bar', name='funding_top_bar'), - url(r'^o/(?P\d+)/detail-bar\.(?P.+)\.html$', 'detail_bar', name='funding_detail_bar'), - url(r'^o/(?P\d+)/list-bar\.(?P.+)\.html$', 'list_bar', name='funding_list_bar'), - url(r'^o/(?P\d+)/status\.(?P.+)\.html$', 'offer_status', name='funding_status'), - url(r'^o/(?P\d+)/status-more\.(?P.+)\.html$', 'offer_status_more', name='funding_status_more'), - url(r'^o/(?P\d+)/fundings/(?P\d+)\.(?P.+)\.html$', 'offer_fundings', name='funding_fundings'), -) diff --git a/apps/funding/utils.py b/apps/funding/utils.py deleted file mode 100644 index c16c9d93d..000000000 --- a/apps/funding/utils.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import re -import string -from fnpdjango.utils.text.slughifi import char_map - -# PayU chokes on non-Polish diacritics. -# Punctuation is handled correctly and escaped as needed, -# with the notable exception of backslash. -sane_in_payu_title = re.escape( - string.uppercase + - string.lowercase + - u'ąćęłńóśźżĄĆĘŁŃÓŚŹŻ' + - string.digits + - ' ' + - "".join(set(string.punctuation) - set('\\')) -) - -def replace_char(m): - char = m.group() - return char_map.get(char, '') - -def sanitize_payment_title(value): - return re.sub('[^%s]{1}' % sane_in_payu_title, replace_char, unicode(value)) diff --git a/apps/funding/views.py b/apps/funding/views.py deleted file mode 100644 index 7c9adef46..000000000 --- a/apps/funding/views.py +++ /dev/null @@ -1,228 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.core.paginator import Paginator, InvalidPage -from django.core.urlresolvers import reverse -from django.http import Http404 -from django.shortcuts import get_object_or_404, redirect, render -from django.views.decorators.csrf import csrf_exempt -from django.views.generic import TemplateView, FormView, ListView -from getpaid.models import Payment -from ssify import ssi_included -from ssify.utils import ssi_cache_control -from . import app_settings -from .forms import FundingForm -from .models import Offer, Spent, Funding - - -def mix(*streams): - substreams = [] - for stream, read_date, tag in streams: - iterstream = iter(stream) - try: - item = next(iterstream) - except StopIteration: - pass - else: - substreams.append([read_date(item), item, iterstream, read_date, tag]) - while substreams: - i, substream = max(enumerate(substreams), key=lambda x: x[1][0]) - yield substream[4], substream[1] - try: - item = next(substream[2]) - except StopIteration: - del substreams[i] - else: - substream[0:2] = [substream[3](item), item] - - -class WLFundView(TemplateView): - template_name = "funding/wlfund.html" - - def get_context_data(self): - def add_total(total, it): - for tag, e in it: - e.total = total - if tag == 'spent': - total += e.amount - else: - total -= e.wlfund - yield tag, e - - ctx = super(WLFundView, self).get_context_data() - offers = [] - - for o in Offer.past(): - if o.is_win(): - o.wlfund = o.sum() - o.target - if o.wlfund > 0: - offers.append(o) - else: - o.wlfund = o.sum() - if o.wlfund > 0: - offers.append(o) - amount = sum(o.wlfund for o in offers) - sum(o.amount for o in Spent.objects.all()) - - ctx['amount'] = amount - ctx['log'] = add_total(amount, mix( - (offers, lambda x: x.end, 'offer'), - (Spent.objects.all().select_related(), lambda x: x.timestamp, 'spent'), - )) - return ctx - - -class OfferDetailView(FormView): - form_class = FundingForm - template_name = "funding/offer_detail.html" - backend = 'getpaid.backends.payu' - - @csrf_exempt - def dispatch(self, request, slug=None): - if getattr(self, 'object', None) is None: - if slug: - self.object = get_object_or_404(Offer.public(), slug=slug) - else: - self.object = Offer.current() - if self.object is None: - raise Http404 - return super(OfferDetailView, self).dispatch(request, slug) - - def get_form(self, form_class): - if self.request.method == 'POST': - return form_class(self.object, self.request.POST) - else: - return form_class(self.object, initial={'amount': app_settings.DEFAULT_AMOUNT}) - - def get_context_data(self, *args, **kwargs): - ctx = super(OfferDetailView, self).get_context_data(*args, **kwargs) - ctx['object'] = self.object - ctx['page'] = self.request.GET.get('page', 1) - if self.object.is_current(): - ctx['funding_no_show_current'] = True - return ctx - - def form_valid(self, form): - funding = form.save() - # Skip getpaid.forms.PaymentMethodForm, go directly to the broker. - payment = Payment.create(funding, self.backend) - gateway_url_tuple = payment.get_processor()(payment).get_gateway_url(self.request) - payment.change_status('in_progress') - return redirect(gateway_url_tuple[0]) - - -class CurrentView(OfferDetailView): - @csrf_exempt - def dispatch(self, request, slug=None): - self.object = Offer.current() - if self.object is None: - return redirect(reverse('funding')) - elif slug != self.object.slug: - return redirect(reverse('funding_current', args=[self.object.slug])) - return super(CurrentView, self).dispatch(request, slug) - - -class OfferListView(ListView): - queryset = Offer.public() - - def get_context_data(self, *args, **kwargs): - ctx = super(OfferListView, self).get_context_data(*args, **kwargs) - ctx['funding_no_show_current'] = True - return ctx - - -class ThanksView(TemplateView): - template_name = "funding/thanks.html" - - def get_context_data(self, *args, **kwargs): - ctx = super(ThanksView, self).get_context_data(*args, **kwargs) - ctx['offer'] = Offer.current() - ctx['funding_no_show_current'] = True - return ctx - - -class NoThanksView(TemplateView): - template_name = "funding/no_thanks.html" - - -class DisableNotifications(TemplateView): - template_name = "funding/disable_notifications.html" - - @csrf_exempt - def dispatch(self, request): - self.object = get_object_or_404(Funding, - email=request.GET.get('email'), notify_key=request.GET.get('key')) - return super(DisableNotifications, self).dispatch(request) - - def post(self, *args, **kwargs): - self.object.disable_notifications() - return redirect(self.request.get_full_path()) - - -def offer_bar(request, pk, link=False, closeable=False, show_title=True, show_title_calling=True, add_class=""): - offer = get_object_or_404(Offer, pk=pk) - offer_sum = offer.sum() - - return render(request, "funding/includes/funding.html", { - 'offer': offer, - 'sum': offer_sum, - 'is_current': offer.is_current(), - 'is_win': offer_sum >= offer.target, - 'missing': offer.target - offer_sum, - 'percentage': 100 * offer_sum / offer.target, - 'link': link, - 'closeable': closeable, - 'show_title': show_title, - 'show_title_calling': show_title_calling, - 'add_class': add_class, - }) - - -@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) -def top_bar(request, pk): - return offer_bar(request, pk, - link=True, closeable=True, add_class="funding-top-header") - - -@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) -def list_bar(request, pk): - return offer_bar(request, pk, - link=True, show_title_calling=False) - - -@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) -def detail_bar(request, pk): - return offer_bar(request, pk, - show_title=False) - - -@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) -def offer_status(request, pk): - offer = get_object_or_404(Offer, pk=pk) - return render(request, "funding/includes/offer_status.html", { - 'offer': offer, - }) - - -@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) -def offer_status_more(request, pk): - offer = get_object_or_404(Offer, pk=pk) - return render(request, "funding/includes/offer_status_more.html", { - 'offer': offer, - }) - - -@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) -def offer_fundings(request, pk, page): - offer = get_object_or_404(Offer, pk=pk) - fundings = offer.funding_payed() - paginator = Paginator(fundings, 10, 2) - try: - page_obj = paginator.page(int(page)) - except InvalidPage: - raise Http404 - return render(request, "funding/includes/fundings.html", { - "paginator": paginator, - "page_obj": page_obj, - "fundings": page_obj.object_list, - }) diff --git a/apps/funding/widgets.py b/apps/funding/widgets.py deleted file mode 100644 index 8dc9742ce..000000000 --- a/apps/funding/widgets.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from decimal import Decimal -from django import forms -from django.template.loader import render_to_string - - -class PerksAmountWidget(forms.Textarea): - def perks_input_name(self, name): - return "_%s_perk" % name - - def render(self, name, value, attrs=None): - try: - value = Decimal(value) - except: - pass - perks = list(self.form_instance.offer.get_perks()) - perk_chosen = False - for perk in perks: - if perk.price == value: - perk.chosen = True - perk_chosen = True - break - - return render_to_string("funding/widgets/amount.html", { - "perks": perks, - "name": name, - "perks_input_name": self.perks_input_name(name), - "perk_chosen": perk_chosen, - "value": value, - "attrs": attrs, - }) - - def value_from_datadict(self, data, files, name): - num_str = data.get(self.perks_input_name(name)) or data[name] - return num_str.replace(',', '.') diff --git a/apps/infopages/__init__.py b/apps/infopages/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/infopages/admin.py b/apps/infopages/admin.py deleted file mode 100644 index 14a06afa9..000000000 --- a/apps/infopages/admin.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin - -from modeltranslation.admin import TranslationAdmin -from infopages.models import InfoPage - -class InfoPageAdmin(TranslationAdmin): - list_display = ('title', 'slug', 'main_page') - -admin.site.register(InfoPage, InfoPageAdmin) diff --git a/apps/infopages/fixtures/infopages.json b/apps/infopages/fixtures/infopages.json deleted file mode 100644 index 4608715b9..000000000 --- a/apps/infopages/fixtures/infopages.json +++ /dev/null @@ -1,268 +0,0 @@ -[ - { - "pk": 2, - "model": "infopages.infopage", - "fields": { - "title_de": "\ufeffDu kannst uns helfen", - "left_column_uk": "

        \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e

        \r\n\r\n

        \u041c\u0438 \u043d\u0430\u043c\u0430\u0433\u0430\u0454\u043c\u043e\u0441\u044f \u044f\u043a\u043e\u043c\u043e\u0433\u0430 \u043a\u0440\u0430\u0449\u0435 \u043f\u0456\u0434\u0433\u043e\u0442\u0443\u0432\u0430\u0442\u0438 \u0442\u0432\u043e\u0440\u0438, \u044f\u043a\u0456 \u043f\u043e\u0441\u0442\u0443\u043f\u043e\u0432\u043e \u0434\u043e\u0434\u0430\u044e\u0442\u044c\u0441\u044f \u0434\u043e \u043d\u0430\u0448\u043e\u0457 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438. \u0426\u0435 \u043c\u043e\u0436\u043b\u0438\u0432\u043e \u0442\u0456\u043b\u044c\u043a\u0438 \u0437\u0430\u0432\u0434\u044f\u043a\u0438 \u043d\u0430\u0448\u0438\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c.

        \r\n\r\n

        \u0417\u0430\u043f\u0440\u043e\u0448\u0443\u0454\u043c\u043e \u0443\u0441\u0456\u0445, \u0445\u0442\u043e \u0445\u043e\u0447\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0443 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0448\u043a\u0456\u043b\u044c\u043d\u043e\u0457 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438 Wolne Lektury.

        \r\n\r\n

        \u0412\u0441\u0456\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c \u043c\u0438 \u043f\u0440\u043e\u043f\u043e\u043d\u0443\u0454\u043c\u043e \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0438 \u0456 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u0438\u0439 \u0434\u043e\u0441\u0432\u0456\u0434 \u043e\u0431\u0440\u043e\u0431\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443: \u0437\u043c\u0456\u0441\u0442\u043e\u0432\u043d\u0435 \u0442\u0430 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f. \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438 \u043c\u043e\u0436\u0443\u0442\u044c \u043e\u0437\u043d\u0430\u0439\u043e\u043c\u0438\u0442\u0438\u0441\u044f \u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u0442\u0430 \u043c\u043e\u0436\u043b\u0438\u0432\u043e\u0441\u0442\u044f\u043c\u0438, \u043f\u043e\u0432\u2019\u044f\u0437\u0430\u043d\u0438\u043c\u0438 \u0437 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u044f\u043c\u0438.\r\n\r\n\u0421\u043f\u0456\u043b\u044c\u043d\u043e \u0437 \u043d\u0430\u043c\u0438 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438 \u043e\u0440\u0433\u0430\u043d\u0456\u0437\u0443\u044e\u0442\u044c \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0438 \u0442\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0456\u0457, \u0434\u043e\u043f\u043e\u043c\u0430\u0433\u0430\u044e\u0442\u044c \u0432 \u043f\u0456\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u0456 \u0442\u0435\u043a\u0441\u0442\u0456\u0432 \u0434\u043b\u044f \u0441\u043b\u0443\u0445\u0430\u043d\u043d\u044f (\u0442\u0430\u043a \u0437\u0432\u0430\u043d\u0438\u0445 \u0430\u0443\u0434\u0456\u043e-\u043a\u043d\u0438\u0433). \u041c\u0438 \u043f\u0456\u0434\u043f\u0438\u0441\u0443\u0454\u043c\u043e \u0437 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c\u0438 \u0443\u0433\u043e\u0434\u0438 \u0442\u0430 \u043d\u0430\u0434\u0430\u0454\u043c\u043e \u0457\u043c \u043f\u043e\u0441\u0432\u0456\u0434\u0447\u0435\u043d\u043d\u044f \u043f\u0440\u043e \u0446\u0435 \u043a\u043e\u043b\u0438 \u0456 \u044f\u043a\u0456 \u043f\u0440\u0430\u0446\u0456 \u0432\u0438\u043a\u043e\u043d\u0443\u0432\u0430\u0432 \u0434\u043b\u044f \u043d\u0430\u0448\u043e\u0433\u043e \u0444\u043e\u043d\u0434\u0443 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440. \u0422\u0440\u0435\u043d\u0456\u043d\u0433\u0438, \u0434\u043e\u0441\u0432\u0456\u0434 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u0438, \u044f\u043a\u0456 \u0446\u0435 \u0437\u0430\u0441\u0432\u0456\u0434\u0447\u0443\u044e\u0442\u044c, \u043c\u043e\u0436\u0443\u0442\u044c \u0431\u0443\u0442\u0438 \u0446\u0456\u043d\u043d\u0438\u043c\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0456 \u043f\u0456\u0434\u0432\u0438\u0449\u0435\u043d\u043d\u044f \u043a\u0432\u0430\u043b\u0456\u0444\u0456\u043a\u0430\u0446\u0456\u0439 \u0456 \u043f\u0440\u043e\u0444\u0435\u0441\u0456\u0439\u043d\u0456\u0439 \u043a\u0430\u0440'\u0454\u0440\u0456.

        \r\n\r\n

        \u0429\u043e \u043c\u043e\u0436\u043d\u0430 \u0440\u043e\u0431\u0438\u0442\u0438?

        \r\n\r\n

        \u041d\u0430\u0439\u0431\u0456\u043b\u044c\u0448\u0435 \u0440\u043e\u0431\u043e\u0442\u0438 \u043f\u0440\u0438\u0441\u0432\u044f\u0447\u0443\u0454\u0442\u044c\u0441\u044f \u043f\u0456\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044e \u0442\u0435\u043a\u0441\u0442\u0443 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u0457. \u0412 \u0442\u0435\u043a\u0441\u0442\u0456, \u044f\u043a\u0438\u0439 \u043c\u0438 \u043e\u0442\u0440\u0438\u043c\u0443\u0454\u043c\u043e \u0432\u0456\u0434 \u041d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438 \u0442\u0440\u0435\u0431\u0430 \u0432\u0438\u043f\u0440\u0430\u0432\u0438\u0442\u0438 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0456\u0447\u043d\u0456 \u0442\u0430 \u0456\u043d\u0448\u0456 \u043c\u0435\u0445\u0430\u043d\u0456\u0447\u043d\u0456 \u043f\u043e\u043c\u0438\u043b\u043a\u0438, \u0430 \u043f\u043e\u0442\u0456\u043c \u0434\u043e\u0434\u0430\u0442\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u0456 \u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0438, \u043f\u0430\u043c\u2019\u044f\u0442\u0430\u044e\u0447\u0438 \u043f\u0440\u043e \u0446\u0435, \u0449\u043e \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u043f\u043e\u0437\u0438\u0446\u0456\u044f \u0441\u043a\u0435\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u0435\u0440\u0448 \u0437\u0430 \u0432\u0441\u0435 \u0434\u043e \u0443\u0447\u043d\u0456\u0432, \u0434\u043b\u044f \u044f\u043a\u0438\u0445 \u0431\u0430\u0433\u0430\u0442\u043e \u0441\u043b\u0456\u0432 \u0442\u0430 \u0444\u0440\u0430\u0437 \u0437\u0432\u0443\u0447\u0430\u0442\u0438\u043c\u0435 \u0430\u043d\u0430\u0445\u0440\u043e\u043d\u0456\u0447\u043d\u043e. \u0414\u0430\u0432\u043d\u0456\u0448\u0456 \u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u0457 (\u0432\u0441\u0435 \u0437\u0430\u043b\u0435\u0436\u0438\u0442\u044c \u0442\u0443\u0442 \u0432\u0456\u0434 \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0430) \u043f\u0456\u0434\u0434\u0430\u044e\u0442\u044c\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u043e\u043c\u0443 \u043c\u043e\u0432\u043d\u043e\u043c\u0443 \u043e\u0441\u0443\u0447\u0430\u0441\u043d\u0435\u043d\u043d\u044e, \u043d\u0430 \u043f\u0440\u0438\u043a\u043b\u0430\u0434 \u0449\u043e\u0434\u043e \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0443 \u0447\u0438 \u0444\u043b\u0435\u043a\u0441\u0456\u0457, \u043f\u0440\u0438 \u0447\u043e\u043c\u0443 \u043c\u0438 \u0434\u0431\u0430\u0454\u043c\u043e \u043f\u0440\u043e \u0446\u0435 \u0449\u043e\u0431 \u043d\u0435 \u043f\u043e\u0440\u0443\u0448\u0443\u0432\u0430\u0442\u0438 \u0430\u0440\u0442\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0443 \u0442\u0435\u043a\u0441\u0442\u0443. \u041e\u0441\u0442\u0430\u043d\u043d\u0456\u043c \u0435\u0442\u0430\u043f\u043e\u043c \u0454 \u043f\u043e\u0448\u0443\u043a \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432 \u0442\u0430 \u0442\u0435\u043c, \u044f\u043a\u0456 \u043c\u0430\u044e\u0442\u044c \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0432 \u0433\u043b\u0438\u0431\u0438\u043d\u043d\u043e\u043c\u0443 \u043f\u0456\u0437\u043d\u0430\u043d\u043d\u0456 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0438. \u0412 \u0443\u0441\u0456\u0445 \u0446\u0438\u0445 \u043f\u0440\u0430\u0446\u044f\u0445 \u043d\u0430\u0441 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0443\u044e\u0442\u044c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438 - \u0432\u0447\u0438\u0442\u0435\u043b\u0456 \u0442\u0430 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0438 - \u044f\u043a\u0456 \u0447\u0430\u0441\u0442\u043e \u0434\u043e\u043f\u043e\u043c\u0430\u0433\u0430\u044e\u0442\u044c \u0442\u0430\u043a\u043e\u0436 \u043f\u043e\u0440\u0430\u0434\u043e\u044e \u0442\u0430 \u0437\u0430\u0443\u0432\u0430\u0436\u0435\u043d\u043d\u044f\u043c\u0438 \u043f\u0440\u0438 \u043f\u0440\u0438\u0439\u043d\u044f\u0442\u0442\u0456 \u0432\u0430\u0436\u043b\u0438\u0432\u0438\u0445 \u0440\u0456\u0448\u0435\u043d\u044c.

        \r\n\r\n

        \u042f\u043a \u0434\u043e \u043d\u0430\u0441 \u0437\u0433\u043e\u043b\u043e\u0441\u0438\u0442\u0438\u0441\u044f?

        \r\n\r\n

        \u0423\u0441\u0456\u0445 \u0437\u0430\u0446\u0456\u043a\u0430\u0432\u043b\u0435\u043d\u0438\u0445 \u043f\u0440\u043e\u0441\u0438\u043c\u043e \u0432\u0438\u0441\u043b\u0430\u0442\u0438 \u043b\u0438\u0441\u0442\u0430 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0443 fundacja@nowoczesnapolska.org.pl.

        \r\n\r\n

        \u0417\u0430\u043f\u0440\u043e\u0448\u0443\u0454\u043c\u043e \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0457 Wolne Lektury, \u0434\u0435 \u043c\u043e\u0436\u043d\u0430 \u0437\u043d\u0430\u0439\u0442\u0438 \u0443\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e \u043f\u0440\u043e \u0446\u0435, \u044f\u043a \u0437\u0430\u043b\u0443\u0447\u0438\u0442\u0438\u0441\u044c \u0443 \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0439\u043d\u0443 \u0440\u043e\u0431\u043e\u0442\u0443.

        ", - "main_page": null, - "right_column_pl": "

        Kogo szukamy?

        \r\n\r\n

        Redaktor\u00f3w technicznych (sk\u0142ad tekstu)

        \r\n

        Sk\u0142ad jest pierwszym etapem pracy nad tekstem. Za pomoc\u0105 znacznik\u00f3w j\u0119zyka WL-XML nadajemy tekstowi po\u017c\u0105dan\u0105 form\u0119 i umo\u017cliwiamy wy\u015bwietlenie go na stronie internetowej. Redakcje techniczna dokonywana jest na Platformie Redakcyjnej, kt\u00f3ra pozwala na zautomatyzowanie du\u017cej cz\u0119\u015bci pracy.

        \r\n\r\n

        Kto mo\u017ce zosta\u0107 redaktorem technicznym?

        \r\n
          \r\n
        • Ka\u017cdy \u2013 po kr\u00f3tkim szkoleniu.
        • \r\n
        \r\n\r\n

        Wi\u0119cej informacji o redakcji technicznej znajdziecie na stronie redakcji Wolnych Lektur

        \r\n\r\n
        \r\n\r\n

        Redaktor\u00f3w literackich (merytorycznych)

        \r\n

        Redakcja literacka obejmuje korekt\u0119, uwsp\u00f3\u0142cze\u015bnienia oraz dodawanie przypis\u00f3w i motyw\u00f3w literackich. To unikalna mo\u017cliwo\u015b\u0107 zdobycia do\u015bwiadczenia w cyfrowej edycji tekst\u00f3w.

        \r\n\r\n

        Kto mo\u017ce zosta\u0107 redaktorem literackim?

        \r\n
          \r\n
        • Osoby, kt\u00f3re maj\u0105 do\u015bwiadczenie w redakcji tekst\u00f3w literackich,
        • \r\n
        • Studenci i absolwenci studi\u00f3w humanistycznych, kt\u00f3rzy chc\u0105 takie do\u015bwiadczenie zdoby\u0107.
        • \r\n
        \r\n

        Wi\u0119cej informacji o redakcji merytorycznej znajdziecie na stronie redakcji Wolnych Lektur

        \r\n\r\n
        \r\n\r\n

        T\u0142umaczy

        \r\n

        Strona WolneLektury.pl jest dost\u0119pna w siedmiu j\u0119zykach obcych \u2013 angielskim, francuskim, niemieckim, hiszpa\u0144skim, litewskim, rosyjskim oraz ukrai\u0144skim. U\u017cytkownikami biblioteki jest ponad 200 tysi\u0119cy os\u00f3b z zagranicy, a ju\u017c nied\u0142ugo nasze zbiory obejm\u0105 r\u00f3wnie\u017c dzie\u0142a w j\u0119zykach obcych. Dlatego potrzebujemy na bie\u017c\u0105co t\u0142umaczy\u0107 nowe informacje pojawiaj\u0105ce si\u0119 na stronie.

        \r\n

        Kto mo\u017ce pom\u00f3c w t\u0142umaczeniach?

        \r\n
          \r\n
        • Ka\u017cdy, kto dobrze zna co najmniej jeden z powy\u017cszych j\u0119zyk\u00f3w.
        • \r\n
        \r\n\r\n
        \r\n\r\n

        Programist\u00f3w

        \r\n

        Poza sam\u0105 stron\u0105 Wolnych Lektur tworzymy r\u00f3wnie\u017c:

        \r\n
          \r\n
        • narz\u0119dzia redakcyjne,
        • \r\n
        • konwertery do r\u00f3\u017cnych format\u00f3w e-book\u00f3w,
        • \r\n
        • aplikacje mobile u\u0142atwiaj\u0105ce dost\u0119p do naszych zasob\u00f3w.
        • \r\n
        \r\n\r\n

        U\u017cywamy takich technologii jak: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nTworzone przez nas oprogramowanie udost\u0119pniamy na wolnej licencji.

        \r\n

        Kto mo\u017ce pom\u00f3c w pracach programistycznych?

        \r\n
          \r\n
        • Ka\u017cdy, kto umie i chcia\u0142by zdoby\u0107 punkty do karmy za udzia\u0142 w otwartym projekcie programistycznym. ;)
        • \r\n
        \r\n", - "right_column_lt": "

        Labiausiai nusipeln\u0119 savanoriai

        \r\n\r\n\t

        Agatapaszkowska (bendradarbiauja su mumis nuo 2008 m. kovo 15 d.)

        \r\n\r\n

        tarp kitko pareng\u0117 \u201eW pustyni i w puszczy\u201d Sienkiewicza ; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

        \r\n\r\n\r\n\t

        AgnieszkaKappa (bendradarbiauja su mumis nuo 2008 m. kovo 16 d.)

        \r\n\r\n

        tarp kitko pad\u0117jo paruo\u0161ti literat\u016bros tem\u0173 ir motyv\u0173 s\u0105ra\u0161\u0105; parsiuo\u0161\u0117 teksto apra\u0161ymus: Sienkiewicz (Latarnik, Janko Muzykant, Quo vadis); aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

        \r\n\r\n\r\n

        Anerys (bendradarbiauja su mumis nuo 2007 m. liepos 5 d.)

        \r\n\r\n

        tarp kitko pad\u0117jo paruo\u0161ti literat\u016bros tem\u0173 ir motyv\u0173 s\u0105ra\u0161\u0105, diskusija apie literat\u016brin\u0119s r\u016b\u0161is, parsiuo\u0161\u0117 \u0161iu tekstu apra\u0161ymus; BogurodzicA, \u201eFraszki\u201d ir \u201eTrenyTreny\u201d Kochanowskiego; eil\u0117ra\u0161\u010diai: S\u0142owacki (Gr\u00f3b Agamemnona), \u201e\u015awi\u0119toszek\u201d Molier, ar poezija\u00a0\u00a0 Kasprowicz (himnas\u00a0\u00a0 \u201eDies Irae\u201d);aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d:\r\n http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

        \r\n\r\n\r\n\t

        EmiliaZdankiewicz (bendradarbiauja su mumis nuo 2008 m. kovo 17 d.

        \r\n\r\n

        tarp kitko literat\u016brinai motyvai, diskusijos, apra\u0161ymai: S\u0142owacki, Kordian; Konopnicka, Nasza szkapa; Mickiewicz, Dziady cz. III; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

        \r\n\r\n\r\n\t

        Ewa_Serafin (bendradarbiauja su mumis nuo 2008 m. kovo 15 d.)

        \r\n\r\n

        tarp kitko pad\u0117jo paruo\u0161ti literat\u016bros tem\u0173 ir motyv\u0173 s\u0105ra\u0161\u0105, parsiuo\u0161\u0117 \u0161iu poeti\u0161ku tekstu apra\u0161ymus: Kasprowicz (\u201eZ wichr\u00f3w i hal\u201d, \u201eNad przepa\u015bciami\u201d, \u201eW ciemno\u015bci schodzi moja dusza\u201d oraz \u201eNad Niemnem\u201d Orzeszkowej; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafin

        \r\n\r\n\r\n \t

        Hanna_Golab (bendradarbiauja su mumis nuo 2008 m. kovo 15 d.)

        \r\n\r\n

        apra\u0161\u0117:\u201eKr\u00f3la Edypa\u201d Sofoklesa ir \u201eDusio\u0142k\u201d Le\u015bmian; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

        \r\n\r\n\r\n\t

        Ingene (bendradarbiauja su mumis nuo 2008 m. liepos 16 d.)

        \r\n\r\n

        tarp kitko apra\u0161\u0117: \u201eSi\u0142aczka\u201d \u017beromski, \u201eQuo vadis\u201d Sienkiewicz ir \u201eTreny\u201d Kochanowski; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene

        \r\n \r\n\t

        Jmyszkowska (bendradarbiauja su mumis nuo 2008 m. kovo 26 d.)

        \r\n\r\n

        tarp kitko apra\u0161\u0117 \u201eGiaura\u201d Byron ir \u201eQuo vadis\u201d Sienkiewicz; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska

        \r\n\r\n\r\n

        Marysiabailey (bendradarbiauja su mumis nuo 2007 m. spalio 1 d.)

        \r\n\r\n

        tarp kitko pad\u0117jo paruo\u0161ti literat\u016bros tem\u0173 ir motyv\u0173 s\u0105ra\u0161\u0105; apra\u0161\u0117 \u201eCh\u0142opi\u201d Reymont, \u201eLalka\u201d Prus, \u201eNie-Bosk\u0105 komedia\u201d Krasi\u0144skie, \u201eBajki\u201d ir \u201eSatyry\u201d Krasicki, \u201eAntygona\u201d Sofokles ir k\u016brinius: Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman, Kasprowicz; zob. ;aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey; parose ir ved\u0117 apmokymus savanoriams 2008 m. kovo 15 d.; u\u017esiimin\u0117jo proofreading, o dabartiniu metu vadovauja darbams susijusiems su audio knyg\u0173 ruo\u0161imu.

        \r\n\r\n\r\n

        Olga_Wojtczak (bendradarbiauja su mumis nuo 2008 m. spalio 21 d.)

        \r\n\r\n

        tarp kitko apra\u0161e roman\u0105 Sienkiewicz (Trilogija), Reymont, \u017beromski, dramos Shakespear; ;aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak

        \r\n\r\n\r\n

        Renataml (bendradarbiauja su mumis nuo 2007 m. bir\u017eelio 30 d.)

        \r\n\r\n

        pad\u0117jo parsiuo\u0161ti diskusij\u0105 apie motyv\u0173 s\u0105ra\u0161\u0105, patar\u0117 mums, nes tai patyrusi mokytoja, \u201eLalk\u0119\u201d Prusa, \u201eBalladyn\u0119\u201d S\u0142owackiego, \u201eSi\u0142aczk\u0119\u201d \u017beromskiego.\r\n\r\n http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

        \r\n", - "left_column_lt": "

        Savanori\u0161ka veikla

        \r\n\r\n

        D\u0117ka savanori\u0173 k\u016brini\u0173 apra\u0161ymai, kurie yra \u012fjungiami \u012f m\u016bs\u0173 bibliotek\u0105 yra kiekvien\u0105 kart\u0105 kruop\u0161\u010diai paruo\u0161iami.

        \r\n \r\n \r\n

        Kvie\u010diame visus, kurie nori kartu su mumis kurti mokykline internetine bibliotek\u0105 Laisvoji Literat\u016bra.

        \r\n \r\n

        Visiem savanoriams teikiame apmokym\u0105 ir praktik\u0105 suri\u0161ta su teksto editavimu: techninis ir esminis teksto redagavimas. \r\n Savanoriai gali susipa\u017einti su problemom suri\u0161tomis su teksto platinimu internete, bet ir su galimybe juos i\u0161ri\u0161ti.\r\n Savanoriai padeda mums organizuoti apmokymus ir konferencijas, taip pat padeda paruo\u0161ti knyg\u0173 garso \u012fra\u0161us (taip vadinamos: audio knygos). \r\n Kiekvienam savanoriui kuris nori parvirtimo bei paliudijimo, kad dirbo (ir k\u0105 veik\u0117) m\u016bs\u0173 fonde, suteikiame tokia galimyb\u0119.\r\n Apmokymai, praktika ir paliudijimas gali prisid\u0117ti prie darbo kvalifikacij\u0173 pak\u0117limo.

        \r\n\r\n

        K\u0105 dar galima padaryti?

        \r\n \r\n

        Daug darbo yra ruo\u0161iant mokyklin\u0119 literat\u016br\u0105 leidimui. Perdirbti reikia tekst\u0105, kuri gauname i\u0161 Lenkijos Nacionalines\r\n Bibliotekos reikia pa\u0161alinti korekt\u016bros ir kitas klaidas, o veliau sukurti i\u0161na\u0161as, vis\u0105 laik\u0105 reikia tur\u0117ti omeny kad \r\n m\u016bs\u0173 svetain\u0119 aplanko da\u017eniausiai jaunimas ir visu pirma jiems tekstas turi b\u016bti \u012fdomus. \r\n Ankstesnieji knyg\u0173 ledinei turi pereiti kalbos modernizacij\u0105 (tai diktuoja autori\u0173 teis\u0117s) pvz.: ra\u0161ybos ar kaitybos kartu \r\n reikia stengtis kad nepa\u017eeisti menini\u0173 teksto savybi\u0173. Paskutinis etapas tai ie\u0161kojimas literat\u016brini\u0173 motyv\u0173 ir tem\u0173\r\n kurie per\u017ei\u016br\u0117s k\u016briny perd\u0117m. Visuose \u0161iuose darbuose mare mus savanoriai - mokytojai ir studentai - da\u017enai pataria atkreipia d\u0117mesy, padeda nuspr\u0119sti.

        \r\n \r\n

        Kaip prie m\u016bs\u0173 prisijungti?

        \r\n \r\n

        Susidom\u0117jusius kvie\u010diame ra\u0161yti: e-pa\u0161tas fundacja@nowoczesnapolska.org.pl.

        \r\n\r\n

        Kvie\u010diame tai pat aplankyti redakcijos Laisvoji Literat\u016bra tinklap\u012f, \r\n kur galim surasti visas reikalingas \u017einias apie tai kaip prisijungi \u012f redakcini darb\u0105.

        ", - "title_fr": "Vous pouvez nous aider", - "right_column_ru": "

        \u0421\u0430\u043c\u044b\u0435 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u0435 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b

        \r\n\r\n\t

        Agatapaszkowska (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 15 \u043c\u0430\u0440\u0442\u0430 2008)

        \r\n\r\n

        \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u201e\u0412 \u043f\u0443\u0441\u0442\u044b\u043d\u0435 \u0438 \u043f\u0443\u0449\u0435\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 ; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

        \r\n\r\n\r\n\t

        AgnieszkaKappa (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 16 \u043c\u0430\u0440\u0442\u0430 2008)

        \r\n\r\n

        \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c; \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 (\"\u041c\u0430\u044f\u0447\u043d\u0438\u043a\", \"\u042f\u043d\u043a\u043e-\u043c\u0443\u0437\u044b\u043a\u0430\u043d\u0442\", \"\u041a\u0430\u043c\u043e \u0433\u0440\u044f\u0434\u0435\u0448\u0438\"); \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

        \r\n\r\n\r\n

        Anerys (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 5 \u0438\u044e\u043b\u044f 2007)

        \r\n\r\n

        \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u0436\u0430\u043d\u0440\u043e\u0432, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u0411\u043e\u0433\u043e\u0440\u043e\u0434\u0438\u0446\u0443, \u201e\u042d\u043f\u0438\u0433\u0440\u0430\u043c\u043c\u044b\u201d \u0438 \u201e\u0422\u0440\u0435\u043d\u044b\u201d \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e; \u0441\u0442\u0438\u0445\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f \u0421\u043b\u043e\u0432\u0430\u0446\u043a\u043e\u0433\u043e (Gr\u00f3b Agamemnona), \u201e\u041e\u0431\u043c\u0430\u043d\u0449\u0438\u043a\u0430\u201d \u041c\u043e\u043b\u044c\u0435\u0440\u0430, \u043f\u043e\u044d\u0437\u0438\u044e \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0438\u0447\u0430 (\u0432 \u0442.\u0447. \u0433\u0438\u043c\u043d \u201eDies Irae\u201d) \u0438 \u0434\u0440.; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

        \r\n\r\n\r\n\t

        EmiliaZdankiewicz (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 17 \u043c\u0430\u0440\u0442\u0430 2008)

        \r\n\r\n

        \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0435 \u043c\u043e\u0442\u0438\u0432\u044b: \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u044f \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435, \u0421\u043b\u043e\u0432\u0430\u0446\u043a\u0438\u0439 \"\u041a\u043e\u0440\u0434\u0438\u0430\u043d\"; \u041a\u043e\u043d\u043e\u043f\u043d\u0438\u0446\u043a\u0430\u044f \"Nasza szkapa\"; \u041c\u0438\u0446\u0435\u043a\u0432\u0438\u0447 \"\u0414\u0437\u044f\u0434\u044b \u0447. III\" \u0438 \u0434\u0440.; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

        \r\n\r\n\r\n\t

        Ewa_Serafin (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 15 \u043c\u0430\u0440\u0442\u0430 2008)

        \r\n\r\n

        \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u043f\u043e\u044d\u0437\u0438\u044e \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0438\u0447\u0430 (\u201eZ wichr\u00f3w i hal\u201d, \u201eNad przepa\u015bciami\u201d, \u201eW ciemno\u015bci schodzi moja dusza\u201d), \u0430 \u0442\u0430\u043a\u0436\u0435 \u201eNad Niemnem\u201d \u041e\u0436\u0435\u0448\u043a\u043e; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafin

        \r\n\r\n\r\n \t

        Hanna_Golab (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 15 \u043c\u0430\u0440\u0442\u0430 2008)

        \r\n\r\n

        \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u201e\u0426\u0430\u0440\u044f \u042d\u0434\u0438\u043f\u0430\u201d \u0421\u043e\u0444\u043e\u043a\u043b\u0430, \u0432 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u201eDusio\u0142ek\u201d \u041b\u0435\u0441\u044c\u043c\u044f\u043d\u0430; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

        \r\n\r\n\r\n\t

        Ingene (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 16 \u0438\u044e\u043b\u044f 2008)

        \r\n\r\n

        \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u201eSi\u0142aczka\u201d \u0416\u0435\u0440\u043e\u043c\u0441\u043a\u043e\u0433\u043e, \u201e\u041a\u0430\u043c\u043e \u0433\u0440\u044f\u0434\u0435\u0448\u0438\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430, \u201e\u0422\u0440\u0435\u043d\u044b\u201d \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0438 \u0434\u0440.; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene

        \r\n \r\n\t

        Jmyszkowska (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 26 \u043c\u0430\u0440\u0442\u0430 2008)

        \r\n\r\n

        \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u201e\u0413\u044f\u0443\u0440\u0430\u201d \u0411\u0430\u0439\u0440\u043e\u043d\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u201e\u041a\u0430\u043c\u043e \u0433\u0440\u044f\u0434\u0435\u0448\u0438\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska

        \r\n\r\n\r\n

        Marysiabailey (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 1 \u043e\u043a\u0442\u0430\u0431\u0440\u044f 2007)

        \r\n\r\n

        \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0438\u0445 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f; \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0430 \u201e\u041c\u0443\u0436\u0438\u043a\u043e\u0432\u201d \u0420\u0435\u0439\u043c\u043e\u043d\u0442\u0430, \u201e\u041a\u0443\u043a\u043b\u0443\u201d \u041f\u0440\u0443\u0441\u0430, \u201e\u041d\u0435\u0431\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043a\u043e\u043c\u0435\u0434\u0438\u044e\u201d \u041a\u0440\u0430\u0441\u0438\u043d\u044c\u0441\u043a\u043e\u0433\u043e, \u201eBajki\u201d \u0438 \u201eSatyry\u201d \u041a\u0440\u0430\u0441\u0438\u0446\u043a\u043e\u0433\u043e, \u201e\u0410\u043d\u0442\u0438\u0433\u043e\u043d\u0443\u201d \u0421\u043e\u0444\u043e\u043a\u043b\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e, \u041c\u043e\u0440\u0448\u0442\u0438\u043d\u0430, \u041c\u0438\u0446\u043a\u0435\u0432\u0438\u0447\u0430, \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0438\u0447\u0430, \u0413\u0435\u0442\u0435, \u041e\u043f\u043f\u043c\u0430\u043d\u0430; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey; \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0430 \u0438 \u0432\u0435\u043b\u0430 \u0443\u0447\u0435\u0431\u0443 \u0434\u043b\u044f \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u043e\u0432 15 \u043c\u0430\u0440\u0442\u0430 2008; \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0430\u0441\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0443\u0440\u043e\u0439, \u0441\u0435\u0439\u0447\u0430\u0441 \u0436\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043d\u0430\u0434 \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433\u0430\u043c\u0438.

        \r\n\r\n\r\n

        Olga_Wojtczak (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 21 \u043e\u043a\u0442\u0430\u0431\u0440\u044f 2008)

        \r\n\r\n

        \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0430 \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u043e\u043c\u0430\u043d\u044b \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 (\"\u0422\u0440\u0438\u043b\u043e\u0433\u0438\u044f\"), \u0420\u0435\u0439\u043c\u043e\u043d\u0442\u0430, \u0416\u0435\u0440\u043e\u043c\u0441\u043a\u043e\u0433\u043e, \u0434\u0440\u0430\u043c\u044b \u0428\u0435\u043a\u0441\u043f\u0438\u0440\u0430; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak

        \r\n\r\n\r\n

        Renataml (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 30 \u0438\u044e\u043d\u044f 2007)

        \r\n\r\n

        \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 \u043d\u0430\u0441\u0447\u0435\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u043c\u043e\u0442\u0438\u0432\u043e\u0432; \u043a\u0430\u043a \u043e\u043f\u044b\u0442\u043d\u044b\u0439 \u0443\u0447\u0438\u0442\u0435\u043b\u044c, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0430 \u043d\u0430\u0441 \u0441\u043e\u0432\u0435\u0442\u0430\u043c\u0438, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u201e\u041a\u0443\u043a\u043b\u0443\u201d \u041f\u0440\u0443\u0441\u0430, \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u201eBalladyn\u0430\u201d \u0421\u043b\u043e\u0432\u0430\u0446\u043a\u043e\u0433\u043e, \u201eSi\u0142aczk\u0119\u201d \u0416\u0435\u0440\u043e\u043c\u0441\u043a\u043e\u0433\u043e.\r\n\r\n http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

        ", - "left_column_fr": "

        B\u00e9n\u00e9volat

        \r\n\r\n

        Nous essayons de r\u00e9diger les oeuvres ajout\u00e9es successivement \u00e0 notre biblioth\u00e8que le mieux possible. Ce n'est possible que gr\u00e2ce \u00e0 nos b\u00e9n\u00e9voles.

        \r\n\r\n \r\n

        Nous invitons tous ceux qui veulent contribuer \u00e0 la cr\u00e9ation de la biblioth\u00e8que en ligne Lectures libres \u00e0 coop\u00e9rer avec nous.

        \r\n \r\n

        Tous les b\u00e9n\u00e9voles peuvent profiter de l'apprentissage et gagner de la pratique en \u00e9dition du texte: r\u00e9daction technique et du contenu. Les b\u00e9n\u00e9voles ont la possibilit\u00e9 de d\u00e9couvrir les probl\u00e8mes, mais aussi les possibilit\u00e9s li\u00e9es avec les publications en ligne. Ils co-organisent des entra\u00eenements et des conf\u00e9rences, aident \u00e0 pr\u00e9parer des versions des textes \u00e0 \u00e9couter (livres audio). Les b\u00e9n\u00e9voles obtiennent un contrat et un certificat pr\u00e9cisant quand et en quelle qualit\u00e9 ils ont aid\u00e9 notre fondation. Des entra\u00eenements, la pratique de l'\u00e9dition et les c\u00e9rtificats qui les confirment peuvent vous aider \u00e0 d\u00e9montrer vos comp\u00e9tences et peuvent \u00eatre tr\u00e8s precieux pour votre d\u00e9veloppement professionnel.

        \r\n\r\n \r\n

        Qu'est-ce qu'il y a \u00e0 faire?

        \r\n \r\n

        Le plus de travail est consacr\u00e9 \u00e0 pr\u00e9parer le texte pour la publication. Dans le texte qu'on re\u00e7oit de la Biblioth\u00e8que nationale il faut corriger les fautes de frappe ou autres erreurs m\u00e9caniques, et puis ajouter des annotations tout en sachant que norte offre est cibl\u00e9e aux \u00e9l\u00e8ves, pour lesquels beaucoup des mots sembleront anachroniques. Dans les \u00e9ditions plus anciennes (tout en vue du droit d'auteur) on introduit des modernisations de la langue par exemple en ce qui concerne l'orthographe ou flexion, tout en prenant soin \u00e0 ne pas d\u00e9former la sp\u00e9cificit\u00e9 artistique du texte. Derni\u00e8re \u00e9tape c'est la recherche des motifs et th\u00e8mes litt\u00e9raires, pour aider \u00e0 conna\u00eetre la litt\u00e9rature d'une fa\u00e7on r\u00e9element profonde. Dans tous ces travaux nous sommes aid\u00e9s par les b\u00e9n\u00e9voles - professeurs et \u00e9tudiants - dont les conseils et commentaires nous aident fr\u00e9quemment \u00e0 prendre des d\u00e9cisions importantes.

        \r\n \r\n

        Comment nous contacter?

        \r\n \r\n

        Toutes les personnes int\u00e9ress\u00e9es sont invit\u00e9es \u00e0 envoyer un message \u00e0 l'adresse fundacja@nowoczesnapolska.org.pl.

        \r\n\r\n

        Vous pouvez aussi visiter le site de la r\u00e9daction Lectures Libres, o\u00f9 on peut trouver toutes les informations n\u00e9cessaires, expliquant comment se joindre \u00e0 nos travaux de r\u00e9daction.

        ", - "title": "You can help us", - "title_lt": "Gali mums padeti", - "right_column": "

        The most noteworthy volunteers

        \r\n\r\n\t\r\n\r\n

        AgataPaszkowska (contributes to the website since March 15, 2008)

        \r\n\r\n

        Among the others, she worked on Henryk Sienkiewicz's \"In Desert nad Wilderness\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

        \r\n\r\n\r\n\t\r\n\r\n\r\n\r\n

        AgnieszkaKappa (contributes to the website since March 16, 2008)

        \r\n\r\n

        Among the others, she participated in creating the booklist and descritpion of the usage of the motifs and themes; worked on Henryk Sienkiewicz's works (\"The Lighthouse Keeper\", \"Janko Muzykant\", \"Quo vadis\"); cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

        \r\n\r\n\r\n \r\n\r\n\r\n\r\n

        Anerys (contributes to the website since July 5, 2007)

        \r\n\r\n

        Among the others, she took part in creating the list of literary motifs and themes, and dicussion on the literary genres, she worked on Bogurodzica, Jan Kochanowski's \"Fraszki\" and \"Laments\"; Juliusz S\u0142owacki's poems (\"Gr\u00f3b Agamemnona\"), Moliere's \"Tartuffe\" and Jan Kasprowicz's poems (together with \"Dies Irae\" hymn); cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

        \r\n\r\n\r\n\r\n\r\n\r\n\r\n

        EmiliaZdankiewicz (contributes to the website since March 17, 2008)

        \r\n\r\n

        Among the others: literary motifs, discussion and descriptions; Juliusz S\u0142owacki's \"Kordian\"; Maria Konopnicka's \"Nasza Szkapa\"; Adam Mickiewicz's \"Dziady, part III); cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

        \r\n\r\n\r\n\r\n

        Ewa_Serafin (contributes to the website since March 15, 2008)

        \r\n\r\n

        Among the others, she participated in creating list and usage description of literary motifsand themes; she worked on Jan Kasprowicz poems (\"Z wichr\u00f3w i hal\", \"Nad przepa\u015bciami\", \"W ciemno\u015bci schodzi moja dusza\") and Eliza Orzeszkowa's \"On the Niemen\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafin

        \r\n\r\n\r\n \r\n\r\n\r\n\r\n

        Hanna_Golab (contributes to the website since March 15, 2008)

        \r\n\r\n

        She worked on Sophocles' \"Oedipus the King\" and Boles\u0142aw Le\u015bmian's \"Dusio\u0142ek\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

        \r\n\r\n\r\n\r\n

        Ingene (contributes to the website since July 16, 2008)

        \r\n\r\n

        Among the others, she worked on Stefan \u017beromski's \"Si\u0142aczka\", Henryk Sienkiewicz's \"Quo vadis\" and Jan Kochanowski's \"Laments\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene

        \r\n \r\n\r\n\r\n\r\n

        Jmyszkowska (contributes to the website since March 26, 2008)

        Among the others, she worked on Byron's \"Giaour\" and Henryk Sienkiewicz's \"Quo vadis\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska

        \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n

        Marysiabailey (contributes to the website since October 1, 2007)

        \r\n\r\n

        Among the others, she took part in creating the list of literary themes and motifs and description of usage of those bra\u0142a udzia\u0142; worked on W\u0142adys\u0142aw Reymont's \"Ch\u0142opi\", Boles\u0142aw Prus' \"The Doll\", Zygmunt Krasi\u0144ski's \"Nie-boska komedia\", Ignacy Krasicki's \"Fables\" and \"Satires\", Sophocles' \"Antigone\" and poems of Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Geothe and Oppman; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey; Furthermore, she prepared and carried on the training for volunteers and took care of proofreading. Currently she's managing the works on audiobooks.

        \r\n\r\n\r\n \r\n\r\n\r\n\r\n

        Olga_Wojtczak (contributes to the website since October 21, 2008)

        \r\n\r\n

        Among the others, she worked on Henryk Sienkiewicz's novels (The Trilogy), the works of W\u0142adys\u0142aw Reymont and Stefan \u017beromski, as well as Shakespeare's dramas;cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak

        \r\n\r\n\r\n \r\n\r\n\r\n\r\n

        Renataml (contributes to the website since June 30, 2007)

        \r\n\r\n

        She took part in the discussion on list of motifs, as a experienced teacher she supported us with pieces of advice; edited Boles\u0142aw Prus' \"The Doll\", Juliusz S\u0142owacki's \"Balladyna\", Stefan \u017beromski's \"Si\u0142aczka\". http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

        ", - "right_column_es": "

        Los voluntarios a los que merecemos mucho

        \r\n\r\n\r\n\r\n\t

        Agatapaszkowska (trabaja con nosotros desde el 15 de marzo 2008)

        \r\n\r\n\r\n\r\n

        edit\u00f3, entre otros, \u201cW pustynii i w puszczy\u201d de Sienkiewicz ; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

        \r\n\r\n\r\n\r\n\r\n\r\n\t

        AgnieszkaKappa (trabaja con nosotros desde el 16 de marzo 2008)

        \r\n\r\n\r\n\r\n

        particip\u00f3 en la creaci\u00f3n de la lista y la descripci\u00f3n del uso de los motivos y temas literarios, edit\u00f3 los textos de Sienkiewicz (\u201cFarero\u201d, \u201cJanko Muzykant\u201d, \u201cQuo vadis\u201d); ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

        \r\n\r\n\r\n\r\n\r\n\r\n

        Anerys (trabaja con nosotros desde el 5 de julio 2007)

        \r\n\r\n\r\n\r\n

        particip\u00f3 en la creaci\u00f3nn de la lista de los motivos y temas literarios y la debate sobre los g\u00e9neros literarios, edit\u00f3 Bogurodzica, \u201cFraszki\u201d y \u201cTreny\u201d de Kochanowski, poemas de S\u0142owacki (\u201cLa tumba de Agamemnon\u201d), \u201cTartufo\u201d de Moliere y los poemas de Kasprowicz (el himno \u201cDies Irae\u201d); ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

        \r\n\r\n\r\n\r\n\r\n\r\n\t

        EmiliaZdankiewicz (trabaja con nosotros desde el 17 de marzo 2008)

        \r\n\r\n\r\n\r\n

        edit\u00f3 y discut\u00f3 sobre los motivos literarios, \u201cKordian\u201d de S\u0142owacki, \u201cNasza Szkapa\u201d de Konopnicka,\u201dDziady\u201d parte III de Mickiewicz; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

        \r\n\r\n\r\n\r\n\r\n\r\n\t

        Ewa_Serafin (trabaja con nosotros desde el 15 de marzo 2008)

        \r\n\r\n\r\n\r\n

        particip\u00f3 en la creaci\u00f3n de la lista y la descripci\u00f3n del uso de los motivos y temas literarios, edit\u00f3 los poemas de Kasprowicz (\u201cZ wichr\u00f3w i hal\u201d, \u201cNad przepa\u015bciami\u201d, \u201cW ciemno\u015bci schodzi moja dusza\u201d) y \u201cNad Niemnem\u201d de Orzeszkowa; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafin

        \r\n\r\n\r\n\r\n\r\n\r\n \t

        Hanna_Golab (trabaja con nosotros desde el 15 de marzo 2008)

        \r\n\r\n\r\n\r\n

        edit\u00f3 \u201cEdipo Rey\u201d de S\u00f3focles y \u201cDusio\u0142ek\u201d de Le\u015bmian; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

        \r\n\r\n\r\n\r\n\r\n\r\n\t

        Ingene (trabaja con nosotros desde el 16 de julio 2008)

        \r\n\r\n\r\n\r\n

        edit\u00f3 \u201eSi\u0142aczka\u201dde \u017beromski, \u201eQuo vadis\u201d de Sienkiewicz y \u201eTreny\u201d de Kochanowski; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene

        \r\n\r\n \r\n\r\n\t

        Jmyszkowska (trabaja con nosotros desde el 26 de marzo 2008)

        \r\n\r\n\r\n\r\n

        edit\u00f3 \u201cGiaur\u201d de Byron y \u201cQuo vadis\u201d de Sienkiewicz; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska

        \r\n\r\n\r\n\r\n\r\n\r\n

        Marysiabailey (trabaja con nosotros desde el 1 de octubre 2007)

        \r\n\r\n\r\n\r\n

        partici\u00f3 en la creaci\u00f3n de la lista de motivos y temas literarios y la descripci\u00f3n de su uso, edit\u00f3 \u201cLos campesinos\u201d de Reymont, \u201cLa mu\u00f1eca\u201d de Prus, \u201cNie-boska komedia\u201d de Krasi\u0144ski, \u201cFabulas\u201d y \u201cS\u00e1tiras\u201d de Krasicki, \u201cAnt\u00edgona\u201d de S\u00f3focles y las obras de Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey; adem\u00e1s prepar\u00f3 y condujo el curso para voluntarios el 15 de marzo 2008; se ocupaba de proofreading y actualmente coordina los trabajos sobre los audiolibros.

        \r\n\r\n\r\n\r\n\r\n\r\n

        Olga_Wojtczak (trabaja con nosotros desde el 21 de octubre 2008)

        \r\n\r\n\r\n\r\n

        edit\u00f3 las novelas de Sienkiewicz (\u201cLa Trilogia\u201d), Reymont, \u017beromski, las dramas de Shakespeare; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak

        \r\n\r\n\r\n\r\n\r\n\r\n

        Renataml (trabaja con nosotros desde el 30 de junio 2007)

        \r\n\r\n\r\n\r\n

        particip\u00f3 en la debate sobre la lista de motivos literarios, nos ayud\u00f3 con sus consejos de profesora con experiencia, edit\u00f3 \u201cLa mu\u00f1eca\u201d de Prus, \u201cBalladyna\u201d de S\u0142owacki, \u201cSi\u0142aczka\u201d de \u017beromski. http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

        ", - "right_column_en": "

        The most noteworthy volunteers

        \r\n\r\n\t\r\n\r\n

        AgataPaszkowska (contributes to the website since March 15, 2008)

        \r\n\r\n

        Among the others, she worked on Henryk Sienkiewicz's \"In Desert nad Wilderness\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

        \r\n\r\n\r\n\t\r\n\r\n\r\n\r\n

        AgnieszkaKappa (contributes to the website since March 16, 2008)

        \r\n\r\n

        Among the others, she participated in creating the booklist and descritpion of the usage of the motifs and themes; worked on Henryk Sienkiewicz's works (\"The Lighthouse Keeper\", \"Janko Muzykant\", \"Quo vadis\"); cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

        \r\n\r\n\r\n \r\n\r\n\r\n\r\n

        Anerys (contributes to the website since July 5, 2007)

        \r\n\r\n

        Among the others, she took part in creating the list of literary motifs and themes, and dicussion on the literary genres, she worked on Bogurodzica, Jan Kochanowski's \"Fraszki\" and \"Laments\"; Juliusz S\u0142owacki's poems (\"Gr\u00f3b Agamemnona\"), Moliere's \"Tartuffe\" and Jan Kasprowicz's poems (together with \"Dies Irae\" hymn); cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

        \r\n\r\n\r\n\r\n\r\n\r\n\r\n

        EmiliaZdankiewicz (contributes to the website since March 17, 2008)

        \r\n\r\n

        Among the others: literary motifs, discussion and descriptions; Juliusz S\u0142owacki's \"Kordian\"; Maria Konopnicka's \"Nasza Szkapa\"; Adam Mickiewicz's \"Dziady, part III); cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

        \r\n\r\n\r\n\r\n

        Ewa_Serafin (contributes to the website since March 15, 2008)

        \r\n\r\n

        Among the others, she participated in creating list and usage description of literary motifsand themes; she worked on Jan Kasprowicz poems (\"Z wichr\u00f3w i hal\", \"Nad przepa\u015bciami\", \"W ciemno\u015bci schodzi moja dusza\") and Eliza Orzeszkowa's \"On the Niemen\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafin

        \r\n\r\n\r\n \r\n\r\n\r\n\r\n

        Hanna_Golab (contributes to the website since March 15, 2008)

        \r\n\r\n

        She worked on Sophocles' \"Oedipus the King\" and Boles\u0142aw Le\u015bmian's \"Dusio\u0142ek\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

        \r\n\r\n\r\n\r\n

        Ingene (contributes to the website since July 16, 2008)

        \r\n\r\n

        Among the others, she worked on Stefan \u017beromski's \"Si\u0142aczka\", Henryk Sienkiewicz's \"Quo vadis\" and Jan Kochanowski's \"Laments\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene

        \r\n \r\n\r\n\r\n\r\n

        Jmyszkowska (contributes to the website since March 26, 2008)

        Among the others, she worked on Byron's \"Giaour\" and Henryk Sienkiewicz's \"Quo vadis\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska

        \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n

        Marysiabailey (contributes to the website since October 1, 2007)

        \r\n\r\n

        Among the others, she took part in creating the list of literary themes and motifs and description of usage of those bra\u0142a udzia\u0142; worked on W\u0142adys\u0142aw Reymont's \"Ch\u0142opi\", Boles\u0142aw Prus' \"The Doll\", Zygmunt Krasi\u0144ski's \"Nie-boska komedia\", Ignacy Krasicki's \"Fables\" and \"Satires\", Sophocles' \"Antigone\" and poems of Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Geothe and Oppman; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey; Furthermore, she prepared and carried on the training for volunteers and took care of proofreading. Currently she's managing the works on audiobooks.

        \r\n\r\n\r\n \r\n\r\n\r\n\r\n

        Olga_Wojtczak (contributes to the website since October 21, 2008)

        \r\n\r\n

        Among the others, she worked on Henryk Sienkiewicz's novels (The Trilogy), the works of W\u0142adys\u0142aw Reymont and Stefan \u017beromski, as well as Shakespeare's dramas;cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak

        \r\n\r\n\r\n \r\n\r\n\r\n\r\n

        Renataml (contributes to the website since June 30, 2007)

        \r\n\r\n

        She took part in the discussion on list of motifs, as a experienced teacher she supported us with pieces of advice; edited Boles\u0142aw Prus' \"The Doll\", Juliusz S\u0142owacki's \"Balladyna\", Stefan \u017beromski's \"Si\u0142aczka\". http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

        ", - "left_column_de": "

        Volontariat

        \r\n\r\n

        Wir sind stets bem\u00fcht, unseren Bibliothekbestand st\u00e4ndig um neue Werke zu erweitern. Dies ist nur \r\n dank der Hilfe unserer Volont\u00e4re m\u00f6glich.

        \r\n\r\n

        Wir laden herzlich alle Menschen ein, die sich an der Mitgestaltung unserer Internet-Schulbibliothek beteiligen wollen.

        \r\n \r\n \r\n \r\n

        Allen Volont\u00e4ren bieten wir Schulungen und Praktikum im Bereich der Textverarbeitung an: \r\n technische und sachliche Redaktion. Volont\u00e4re k\u00f6nnen mehr \u00fcber Probleme und M\u00f6glichkeiten erfahren, \r\n die mit der Ver\u00f6ffentlichung von Internetpublikationen verbunden sind. Unsere Volont\u00e4re beteiligen \r\n sich zudem an der Organisation von Schulungen und Konferenzen, helfen bei der Vorbereitung \r\n von H\u00f6rtexten (sog. Audiobooks). Wir stellen Vertr\u00e4ge und Bescheinigungen unseren Volont\u00e4ren \r\n bez\u00fcglich der Art der T\u00e4tigkeit und deren Zeitrahmen aus. Schulungen, Verlagspraktikum sowie \r\n w\u00e4hrend des Volontariats erworbene Erfahrungen und Kompetenzen k\u00f6nnen ganz gewiss zum beruflichen Aufstieg verhelfen.

        \r\n \r\n \r\n

        Was zu tun ist?

        \r\n \r\n

        Der Gro\u00dfteil der Arbeit liegt in der Vorbereitung der Lekt\u00fcren zur Ver\u00f6ffentlichung. Die Texte, die wir \r\n von der Nationalbibliothek bekommen, m\u00fcssen auf Tipp- und andere mechanische Fehler \u00fcberpr\u00fcft werden. \r\n Die Anmerkungen m\u00fcssen in den Text eingef\u00fcgt werden. Es sei zu bedenken, dass unsere Zielgruppe Sch\u00fcler sind, \r\n so m\u00fcssen dementsprechend die W\u00f6rter und Wendungen an diese Altersgruppe angepasst werden. \u00c4ltere Ausgaben \r\n (hier gilt das strenge Uhrheberrecht) werden stets in Hinblick auf Rechtsschreibung und Flexion an die \r\n Gegenwartssprache angepasst und zwar unter gleichzeitiger Beachtung der Einheit von Form und literarischen Stilen. \r\n Das Aussuchen von literarischen Motiven und Themen, die uns helfen sollen, Literaturinhalte tiefgreifend zu verstehen, \r\n schlie\u00dfen unsere Projektarbeiten ab. Bei allen diesen Unternehmungen helfen uns Volont\u00e4re - Lehrer sowie Sch\u00fcller - \r\n die uns mit eigenen Ratschl\u00e4gen und Bemerkungen bei der Entscheidungsfindung unterst\u00fctzen.

        \r\n \r\n \r\n

        Wie Sie uns erreichen?

        \r\n \r\n

        Personen, die an der Zusammenarbeit interessiert sind, bitten wir um eine E-Mail an folgende Adresse zu richten: fundacja@nowoczesnapolska.org.pl.

        \r\n\r\n

        Wir laden Sie auch ein unter Redaktonseite der Freien Lekt\u00fcren, auf unserer Hompage finden Sie n\u00fctzliche Informationen rund um das Thema Redaktionsarbeit.

        ", - "title_uk": "\u041c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043c \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438", - "right_column_it": null, - "title_pl": "Mo\u017cesz nam pom\u00f3c", - "left_column": "

        Volunteering

        \r\n\r\n

        We try our best to elaborate works appended to our library. It is possible only thanks to the support of our volunteers.

        \r\n\r\n \r\n

        We invite every person who wants to take part in developing the web school library Wolne Lektury.

        \r\n

        We offer trainings and traineeships in proofreading and copy-editing for every and each volunteer. Our volunteers can learn not only about the problems, but also the opportunities concerning web publishing. They organize the trainings and conferences together with us, as well as they help in preparing the audio versions ob books (so called audiobooks). We are also able to issue voluneering contracts and certificates regarding sort and duration of volunteer's work for our foundation. The traineeships, proofreading and copywriting practice as well as the certificates confirming those may be found vital in acquiring professional qualifications and promotion. .

        \r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n

        What else is there to be done?

        \r\n \r\n

        Preparing the reading for publishing demands the most effort. One has to correct the typos nad other errors of this kind in the texts we receive from the National Library. Next, one needs to provide the book with the annotations, at the same time bearing in mind that our offering is addressed to the pupils, for whom many words and collocations may sound out of date. The older editions (the rule is determined by copyrights) are subject to essential lingustic modernisations, i.e. in spelling or inflection but we pay attention to not to violate the artistic specifity of the literary works. The last stage of the preparation is searching for literary motfis and themes, so the text is examined thoroughly. In each and every phase we are supported by the volunteers - teachers and students - who often advise us point out crucial matters as we take important decisions.

        \r\n \r\n\r\n\r\n\r\n\r\n\r\n

        How to contact us?

        \r\n \r\n

        We ask every interested person to send us an e-mailfundacja@nowoczesnapolska.org.pl.

        \r\n\r\n

        Please, visit also the editorial website of Wolne Lektury. There you will find essential information on how to involve yourself in editorial works.

        \r\n\r\n", - "right_column_uk": "

        \u041d\u0430\u0439\u0431\u0456\u043b\u044c\u0448 \u0437\u0430\u0441\u043b\u0443\u0436\u0435\u043d\u0456 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438

        \r\n\r\n\t

        Agatapaszkowska (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 15 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)

        \r\n\r\n

        \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u00ab\u0412 \u043f\u0443\u0441\u0442\u0435\u043b\u0456 \u0456 \u0432 \u0434\u0436\u0443\u043d\u0433\u043b\u044f\u0445\u00bb \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

        \r\n\r\n\r\n\t

        AgnieszkaKappa (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 16 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)

        \r\n\r\n

        \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0432 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u0442\u0430 \u043e\u043f\u0438\u0441\u0443 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432 \u0442\u0430 \u0442\u0435\u043c; \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0442\u0435\u043a\u0441\u0442\u0438 \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 (Latarnik, \u042f\u043d\u043a\u043e \u041c\u0443\u0437\u0438\u043a\u0430\u043d\u0442, Quo vadis); \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

        \r\n\r\n\r\n

        Anerys (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 5 \u043b\u0438\u043f\u043d\u044f 2007)

        \r\n\r\n

        \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0432 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432 \u0442\u0430 \u0442\u0435\u043c, \u0434\u0438\u0441\u043a\u0443\u0441\u0456\u0457 \u043d\u0430 \u0442\u0435\u043c\u0443 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0436\u0430\u043d\u0440\u0456\u0432, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0433\u0456\u043c\u043d \u0411\u043e\u0433\u043e\u0440\u043e\u0434\u0438\u0446\u044f, \u00ab\u0424\u0440\u0430\u0448\u043a\u0438\u00bb \u0442\u0430 \u00ab\u0422\u0440\u0435\u043d\u0438\u00bb \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u044c\u043a\u043e\u0433\u043e; \u0432\u0456\u0440\u0448\u0456 \u0421\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u043e\u0433\u043e (Gr\u00f3b Agamemnona), \u00ab\u0422\u0430\u0440\u0442\u044e\u0444\u0430\u00bb \u041c\u043e\u043b\u044c\u0454\u0440\u0430, \u0442\u0430 \u043f\u043e\u0435\u0437\u0456\u0457 \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0456\u0447\u0430 (\u0432 \u0446\u044c\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0456 \u0433\u0456\u043c\u043d \u201eDies Irae\u201d); \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

        \r\n\r\n\r\n\t

        EmiliaZdankiewicz (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 17 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)

        \r\n\r\n

        \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0456 \u043c\u043e\u0442\u0438\u0432\u0438 \u2014 \u0434\u0438\u0441\u043a\u0443\u0441\u0456\u044f \u0442\u0430 \u043e\u043f\u0438\u0441, \u0421\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u0438\u0439, \u041a\u043e\u0440\u0434\u0456\u0430\u043d; \u041a\u043e\u043d\u043e\u043f\u043d\u0456\u0446\u044c\u043a\u0430, Nasza szkapa; \u041c\u0456\u0446\u043a\u0435\u0432\u0438\u0447, \u0414\u0437\u044f\u0434\u0438 \u0447. III; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

        \r\n\r\n\r\n\t

        Ewa_Serafin (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 15 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)

        \r\n\r\n

        \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0432 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u0442\u0430 \u043e\u043f\u0438\u0441\u0443 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432 \u0442\u0430 \u0442\u0435\u043c, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u043f\u043e\u0435\u0437\u0456\u0457 \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0456\u0447\u0430 (\u201cZ wichr\u00f3w i hal\u201d, \u201cNad przepa\u015bciami\u201d, \u201cW ciemno\u015bci schodzi moja dusza\u201d), \u0430 \u0442\u0430\u043a\u043e\u0436 \u201cNad Niemnem\u201d \u0415\u043b\u0456\u0437\u0438 \u041e\u0436\u0435\u0448\u043a\u043e; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafin

        \r\n\r\n\r\n \t

        Hanna_Golab (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 15 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)

        \r\n\r\n

        \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u201c\u0426\u0430\u0440\u044f \u0415\u0434\u0456\u043f\u0430\u201d \u0421\u043e\u0444\u043e\u043a\u043b\u0430 \u0442\u0430 \u0432\u0456\u0440\u0448 \u201cDusio\u0142ek\u201d \u041b\u0435\u0441\u044c\u043c\u044f\u043d\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

        \r\n\r\n\r\n\t

        Ingene (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 16 \u043b\u0438\u043f\u043d\u044f 2008)

        \r\n\r\n

        \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u043e\u043f\u043e\u0432\u0456\u0434\u0430\u043d\u043d\u044f \u201cSi\u0142aczka\u201d \u0416\u0435\u0440\u043e\u043c\u0441\u044c\u043a\u043e\u0433\u043e, \u201cQuo vadis\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 \u0442\u0430 \u201c\u0422\u0440\u0435\u043d\u0438\u201d \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u044c\u043a\u043e\u0433\u043e; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene

        \r\n \r\n\t

        Jmyszkowska (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 26 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)

        \r\n\r\n

        \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u201c\u0413\u044f\u0443\u0440\u0430\u201d \u0411\u0430\u0439\u0440\u043e\u043d\u0430 \u0442\u0430 \u201cQuo vadis\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska

        \r\n\r\n\r\n

        Marysiabailey (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 1 \u0436\u043e\u0432\u0442\u043d\u044f 2007)

        \r\n\r\n

        \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0442\u0435\u043c \u0442\u0430 \u043e\u043f\u0438\u0441\u0456 \u0457\u0445 \u0437\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u043d\u043d\u044f; \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0442\u0432\u043e\u0440\u0438: \u201c\u0421\u0435\u043b\u044f\u043d\u0438\u201d \u0420\u0435\u0439\u043c\u043e\u043d\u0442\u0430 , \u201cLalka\u201d \u041f\u0440\u0443\u0441\u0430, \u201cNie-Boska komedia\u201d \u041a\u0440\u0430\u0441\u0456\u043d\u0441\u044c\u043a\u043e\u0433\u043e, \u201eBajki\u201d \u0442\u0430 \u201eSatyry\u201d \u041a\u0440\u0430\u0441\u0456\u0446\u044c\u043a\u043e\u0433\u043e, \u201c\u0410\u043d\u0442\u0438\u0433\u043e\u043d\u0430\u201d \u0421\u043e\u0444\u043e\u043a\u043b\u0430, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0442\u0432\u043e\u0440\u0438 \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u044c\u043a\u043e\u0433\u043e, \u041c\u043e\u0440\u0448\u0442\u0438\u043d\u0430, \u041c\u0456\u0446\u043a\u0435\u0432\u0438\u0447\u0430, \u0490\u0435\u0442\u0435, \u041e\u043f\u043f\u043c\u0430\u043d\u0430, \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0456\u0447\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey; \u043a\u0440\u0456\u043c \u0442\u043e\u0433\u043e, \u043f\u0456\u0434\u0433\u043e\u0442\u0443\u0432\u0430\u043b\u0430 \u0456 \u043f\u0440\u043e\u0432\u0435\u043b\u0430 \u0442\u0440\u0435\u043d\u0456\u043d\u0433 \u0434\u043b\u044f \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0456\u0432 15 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008; \u0437\u0430\u044f\u043c\u0430\u043b\u0430\u0441\u044f \u0442\u0430\u043a\u043e\u0434 \u043a\u043e\u0440\u0435\u043a\u0442\u043e\u044e, \u0430 \u043d\u0430 \u0434\u0430\u043d\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0430\u0446\u044e\u0454 \u043d\u0430\u0434 \u0430\u0443\u0434\u0456\u043e-\u043a\u043d\u0438\u0433\u0430\u043c\u0438.

        \r\n\r\n\r\n

        Olga_Wojtczak (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 21 \u0436\u043e\u0432\u0442\u043d\u044f 2008)

        \r\n\r\n

        \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0440\u043e\u043c\u0430\u043d\u0438 \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 (\u0422\u0440\u0438\u043b\u043e\u0433\u0456\u044f), \u0420\u0435\u0439\u043c\u043e\u043d\u0442\u0430, \u0416\u0435\u0440\u043e\u043c\u0441\u044c\u043a\u043e\u0433\u043e, \u0434\u0440\u0430\u043c\u0438 \u0428\u0435\u043a\u0441\u043f\u0456\u0440\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak

        \r\n\r\n\r\n

        Renataml (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 30 \u0447\u0435\u0440\u0432\u043d\u044f 2007)

        \r\n\r\n

        \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0432 \u0434\u0438\u0441\u043a\u0443\u0441\u0456\u0457 \u043d\u0430 \u0442\u0435\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u043c\u043e\u0442\u0438\u0432\u0456\u0432; \u044f\u043a \u0434\u043e\u0441\u0432\u0456\u0434\u0447\u0435\u043d\u0430 \u0432\u0447\u0438\u0442\u0435\u043b\u044c\u043a\u0430, \u043d\u0430\u0434\u0430\u0432\u0430\u043b\u0430 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0443 \u0442\u0430 \u043f\u043e\u0440\u0430\u0434\u0438, \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043b\u0430 \u0440\u043e\u043c\u0430\u043d \u00abLalka\u00bb \u041f\u0440\u0443\u0441\u0430, \u0434\u0440\u0430\u043c\u0443 \u00ab\u0411\u0430\u043b\u043b\u0430\u0434\u0438\u043d\u0430\u00bb \u0421\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u043e\u0433\u043e, \u043e\u043f\u043e\u0432\u0456\u0434\u0430\u043d\u043d\u044f \u00abSi\u0142aczka\u00bb \u0416\u0435\u0440\u043e\u043c\u0441\u044c\u043a\u043e\u0433\u043e.\r\n\r\n http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

        ", - "title_en": "You can help us", - "left_column_pl": "

        Wolontariat w Wolnych Lekturach

        \r\n
          \r\n
        • Zosta\u0144 naszym redaktorem, programist\u0105 lub t\u0142umaczem \u2013 wolontariuszem.
        • \r\n
        • Zdob\u0105d\u017a nowe umiej\u0119tno\u015bci i do\u015bwiadczenie.
        • \r\n
        • We\u017a udzia\u0142 w otwartym projekcie i tw\u00f3rz innowacyjn\u0105 bibliotek\u0119 internetow\u0105.
        • \r\n
        \r\n

        Dzi\u0119ki pracy naszych wolontariuszy opublikowali\u015bmy ju\u017c ponad 1500 lektur, z kt\u00f3rych skorzysta\u0142y ponad 3 miliony czytelnik\u00f3w z ca\u0142ego \u015bwiata.

        \r\n

        Zapraszamy wszystkie osoby, kt\u00f3re chc\u0105 wsp\u00f3\u0142tworzy\u0107 nasz projekt. Wsp\u00f3\u0142pracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi literatur\u0105, redagowaniem tekst\u00f3w i projektami informatycznymi. Oferujemy profesjonalne szkolenia i sta\u0142\u0105 pomoc merytoryczn\u0105. Wolontariusze mog\u0105 pracowa\u0107 zdalnie lub w siedzibie Fundacji.

        \r\n

        Organizujemy r\u00f3wnie\u017c praktyki studenckie \u2013 nawi\u0105zali\u015bmy wsp\u00f3\u0142prac\u0119 z Instytutem Informacji Naukowej i Studi\u00f3w Bibliologicznych UW, Biurem Karier UKSW oraz Wydzia\u0142em Fizyki UW.

        \r\n\r\n

        Jak si\u0119 do nas zg\u0142osi\u0107?

        \r\n

        Wszystkie zainteresowane osoby prosimy o przys\u0142anie maila na adres marta.niedzialkowska@nowoczesnapolska.org.pl.

        \r\n", - "left_column_it": null, - "title_es": "\ufeffPuedes ayudarnos", - "left_column_ru": "

        \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e

        \r\n\r\n

        \u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0435 \u043d\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c. \u042d\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\r\n \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043d\u0430\u0448\u0438\u043c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c-\u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c.

        \r\n\r\n \r\n

        \u041c\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0448\u043a\u043e\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Wolne Lektury \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u043c\u0438.

        \r\n \r\n

        \u041c\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443 \u043f\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0442\u0435\u043a\u0441\u0442\u043e\u0432: \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u0438\r\n \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443. \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438, \u0442\u0430\u043a \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438.\r\n \u041e\u043d\u0438, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u043c\u0438, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u044e\u0442 \u0443\u0447\u0435\u0431\u0443 \u0438 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u0430\u0433\u0430\u044e\u0442 \u0432 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u0443\u0448\u0430\u043d\u0438\u044f (\u0442.\u043d.\r\n \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433). \u041c\u044b \u0432\u044b\u0434\u0430\u0435\u043c \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u044b \u0438 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0430\u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \r\n \u0438 \u043a\u0430\u043a\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u043e\u043c \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \r\n \u0444\u043e\u043d\u0434\u0430. \u0423\u0447\u0435\u0431\u0430, \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0449\u0438\u0435 \u0438\u0445 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435\r\n \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0441\u043b\u0443\u0436\u0431\u0435.

        \r\n\r\n \r\n

        \u0427\u0442\u043e \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?

        \r\n \r\n

        \u0421\u0430\u043c\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u0412 \u0442\u0435\u043a\u0441\u0442\u0430\u0445 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u043c\u0438 \u0438\u0437 \u041d\u0430\u0440\u043e\u0434\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \r\n \u0417\u0430\u0442\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u043e\u0441\u043a\u0438, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u043e \u043a \u0443\u0447\u0435\u043d\u0438\u043a\u0430\u043c, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432 \u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0437\u0432\u0443\u0447\u0438\u0442 \u0430\u043d\u0430\u0445\u0440\u043e\u043d\u0438\u0447\u043d\u043e.\r\n \u041f\u0440\u0435\u0436\u043d\u0438\u0435 \u0438\u0437\u0434\u0430\u043d\u0438\u044f (\u0440\u0435\u0436\u0438\u043c \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0430) \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440. \u043f\u043e \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0438\u043b\u0438 \u0444\u043b\u0435\u043a\u0441\u0438\u0438. \u041f\u0440\u0438\u0447\u0435\u043c, \u043c\u044b \u0437\u0430\u0431\u043e\u0442\u0438\u043c\u0441\u044f \u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438\r\n \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \"\u043d\u0430\u0441\u043a\u0432\u043e\u0437\u044c\".\r\n \u0412\u043e \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0445 \u0441\u0432\u043e\u044e \u043f\u043e\u043c\u043e\u0449\u044c \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b - \u0443\u0447\u0438\u0442\u0435\u043b\u044f \u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b, \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u0432\u043e\u0438 \u0441\u043e\u0432\u0435\u0442\u044b \u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f\r\n \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439.

        \r\n \r\n

        \u041a\u0430\u043a \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0432 \u043d\u0430\u0448 \u0444\u043e\u043d\u0434?

        \r\n \r\n

        \u0412\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0441\u0438\u043c \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0438-\u043c\u0435\u0439\u043b \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 fundacja@nowoczesnapolska.org.pl.

        \r\n\r\n

        \u041c\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Wolne Lektury, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u043c.

        ", - "slug": "help_us", - "right_column_de": "

        Wohlverdiente Volont\u00e4re

        \r\n\r\n\t

        Agatapaszkowska (Mitarbeit seit 15. M\u00e4rz 2008)

        \r\n\r\n

        bearbeitete u.a. \"Durch W\u00fcste und Wildnis\" von Sienkiewicz; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

        \r\n\r\n\r\n\t

        AgnieszkaKappa (Mitarbeit seit 16. M\u00e4rz 2008)

        \r\n\r\n

        arbeitete u.a. an der Erstellung der Liste und Beschreibung der literarischen Themen und Motive;bearbeitete Texten von Sienkiewicz ( Der Leuchtturmw\u00e4rter, Janko der Musikant, Quo vadis);s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

        \r\n\r\n\r\n \r\n \r\n\r\n

        Anerys (Mitarbeit seit 5. Juli 2007)

        \r\n\r\n

        arbeitete u.a. an der Erstellung der Liste und Beschreibung der literarischen Themen und Motive;nahm an der Diskussion \u00fcber Literaturgattungen teil, bearbeitete folgende Werke: Bogurodzica, \"Spruchgedichte\" und \"Klagelieder\" von Kochanowski; Gedichte von Slowacki ( Agamemnons Grab), \"Tartuffe oder der Betr\u00fcger\" von Moliere, ob Poesien von Kasprowicz (u.a. eine Hymne \"Dies Irae\"); s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

        \r\n \r\n\r\n\t

        EmiliaZdankiewicz (Mitarbeit seit 17. M\u00e4rz 2008)

        \r\n\r\n

        nahm u.a. an der Diskussion und Beschreibung literarischer Motive teil, S\u0142owacki, Kordian; Konopnicka, Unsere M\u00e4hre; Mickiewicz, Totenfeier Teil III; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

        \r\n\r\n \r\n\t\r\n\t

        Ewa_Serafin (Mitarbeit seit 15. M\u00e4rz 2008)

        \r\n\r\n

        arbeitete u.a. an der Erstellung der Liste und Beschreibung der literarischen Themen und Motive, bearbeitete Kasprowicz Gedichte (\u201eZ wichr\u00f3w i hal\u201d, \u201eNad przepa\u015bciami\u201d, \u201eW ciemno\u015bci schodzi moja dusza\u201d oraz \u201eNad Niemnem\u201d Orzeszkowej; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafin

        \r\n\r\n\r\n \t

        Hanna_Golab (Mitarbeit seit 15. M\u00e4rz 2008)

        \r\n\r\n

        bearbeitete \" K\u00f6nig \u00d6dipus\" von Sophokles sowie \"Dusio\u0142ek\" von Lesmian; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

        \r\n\r\n\r\n\t

        Ingene (Mitarbeit seit 16. Juli 2008)

        \r\n\r\n

        bearbeitete u.a. \u201eSi\u0142aczka\u201d von \u017beromski, \u201eQuo vadis\u201d von Sienkiewicz sowie \u201eKlagelieder\u201d von Kochanowski; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene

        \r\n \r\n\t

        Jmyszkowska (Mitarbeit seit 26. M\u00e4rz 2008)

        \r\n\r\n

        bearbeitete u.a. \u201eGiaur\u201d von Byron sowie \u201eQuo vadis\u201d von Sienkiewicz; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska

        \r\n\r\n\r\n

        Marysiabailey (Mitarbeit seit 1. Oktober 2007)

        \r\n\r\n

        arbeitete u.a. an der Erstellung der Liste und Beschreibung der literarischen Themen und Motive sowie deren Benutzung; bearbeitete folgende Werke: \"Die Bauern\" von Reymont, \"Die Puppe\" von Prus, \"Un-g\u00f6ttliche Kom\u00f6die\" von Krasinski, \"M\u00e4rchens\" und \"Satire\" von Krasickiego, \"Antigone\" von Sophokles sowie Werke von Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman, Kasprowicz; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\u201c: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\r\n\r\n\r\n

        Olga_Wojtczak (Mitarbeit seit 21. Oktober 2008)

        \r\n\r\n

        bearbeitete u.a. Romane von Sienkiewicz ( Die Trilogie), Reymont, \u017beromski und Dramen von Shakespeare; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak

        \r\n\r\n

        Renataml (Mitarbeit seit 30. Juni 2007)

        \r\n\r\n

        nahm an der Diskussion \u00fcber Motivlisten teil, als erfahrene Lehrerin unterst\u00fctzte sie uns mit vielen Ratschl\u00e4gen, bearbeitete folgende Werke: \"Die Puppe\" von Prus, \"Balladyna\" von Slowacki, \"Si\u0142aczka\" \u017beromski.\r\n\r\n http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

        \r\n", - "left_column_es": "

        Voluntariado

        \r\n\r\n\r\n\r\n

        Hacemos todo lo posible para elaborar las obras de nuestra biblioteca con la mayor perfecci\u00f3n. Esto es posible s\u00f3lo gracias al apoyo de nuestros voluntarios.

        \r\n\r\n\r\n\r\n \r\n\r\n

        Invitamos a todos quienes quieren formar parte en el desarrollo de la biblioteca virtual de Wolne Lektury.

        \r\n\r\n \r\n\r\n

        A todos los voluntarios les ofrecemos cursos y pr\u00e1cticas en cuanto a la redacci\u00f3n t\u00e9cnica y pr\u00e1ctica. Los voluntarios tienen la posibilidad de conocer tanto los problemas como las oportunidades relacionadas con las publicaciones virtuales. Nos ayudan en la organizaci\u00f3n de conferencias y cursos de formaci\u00f3n, asimismo asisten en la edici\u00f3n de los textos en forma auditiva (audiolibros). Los proporcionamos contratos y certificados con los detalles del trabajo y tipo de tareas realizadas para nuestra fundaci\u00f3n. Los cursos, las pr\u00e1cticas realizadas y los certificados correspondientes podr\u00e1n resultar \u00fatiles en el proceso del desarrollo profesional y para el futuro trabajo profesional.

        \r\n\r\n \r\n\r\n

        >\u00bfEn qu\u00e9 nos puedes ayudar?

        \r\n\r\n La Biblioteca\r\n\r\n Nacional proporciona textos, pero hay que eliminar las faltas de ortograf\u00eda y otros errores mec\u00e1nicos y, a continuaci\u00f3n, a\u00f1adir glosas.\r\n\r\n

        La mayor\u00eda de trabajo la tenemos con la preparaci\u00f3n de los libros para la publicaci\u00f3n. La Biblioteca Nacional proporciona textos pero hay que corregir las erratas y otros errores, despu\u00e9s a\u00f1adir las anotaciones a pie de p\u00e1gina teniendo en cuenta que nuestra oferta es dirigida especialmente a estudiantes para quienes muchas palabras o expresiones pueden ser anacr\u00f3nicas. Tratamos de modernizar las ediciones antiguas (respetando el derecho de autor) respecto a la ortograf\u00eda o la inflexi\u00f3n pero cuidamos para no violar el valor art\u00edstico del texto. La \u00faltima etapa es buscar todos los motivos y temas literarios que ayudar\u00e1n en conocer la lectura totalmente. En todos los trabajos nos ayudan los voluntarios, profesores y estudiantes, a menudo ayudando tambi\u00e9n en la toma de decisiones importantes.

        \r\n\r\n \r\n\r\n

        \u00bfC\u00f3mo inscribirse?

        \r\n\r\n \r\n\r\n

        Todos que est\u00e9n interesados enviad un mail a fundacja@nowoczesnapolska.org.pl.

        \r\n\r\n\r\n\r\n

        Os invitamos tambi\u00e9n a visitar la p\u00e1gina de la redacci\u00f3n de Wolne Lektury donde hay todas las informaciones necesarias para empezar el trabajo editorial.

        \r\n\r\n", - "left_column_en": "

        Volunteering

        \r\n\r\n

        We try our best to elaborate works appended to our library. It is possible only thanks to the support of our volunteers.

        \r\n\r\n \r\n

        We invite every person who wants to take part in developing the web school library Wolne Lektury.

        \r\n

        We offer trainings and traineeships in proofreading and copy-editing for every and each volunteer. Our volunteers can learn not only about the problems, but also the opportunities concerning web publishing. They organize the trainings and conferences together with us, as well as they help in preparing the audio versions ob books (so called audiobooks). We are also able to issue voluneering contracts and certificates regarding sort and duration of volunteer's work for our foundation. The traineeships, proofreading and copywriting practice as well as the certificates confirming those may be found vital in acquiring professional qualifications and promotion. .

        \r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n

        What else is there to be done?

        \r\n \r\n

        Preparing the reading for publishing demands the most effort. One has to correct the typos nad other errors of this kind in the texts we receive from the National Library. Next, one needs to provide the book with the annotations, at the same time bearing in mind that our offering is addressed to the pupils, for whom many words and collocations may sound out of date. The older editions (the rule is determined by copyrights) are subject to essential lingustic modernisations, i.e. in spelling or inflection but we pay attention to not to violate the artistic specifity of the literary works. The last stage of the preparation is searching for literary motfis and themes, so the text is examined thoroughly. In each and every phase we are supported by the volunteers - teachers and students - who often advise us point out crucial matters as we take important decisions.

        \r\n \r\n\r\n\r\n\r\n\r\n\r\n

        How to contact us?

        \r\n \r\n

        We ask every interested person to send us an e-mailfundacja@nowoczesnapolska.org.pl.

        \r\n\r\n

        Please, visit also the editorial website of Wolne Lektury. There you will find essential information on how to involve yourself in editorial works.

        \r\n\r\n", - "right_column_fr": "

        Nos b\u00e9n\u00e9voles les plus m\u00e9ritants

        \r\n\r\n\t

        Agatapaszkowska (coop\u00e8re avec nous depuis le 15 mars 2008)

        \r\n\r\n

        entre autres, elle a r\u00e9dig\u00e9 \"W pustyni i w puszczy\u201d de Henryk Sienkiewicz; voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

        \r\n\r\n\r\n\t

        AgnieszkaKappa (coop\u00e8re avec nous depuis le 16 mars 2008)

        \r\n\r\n

        entre autres, elle a particip\u00e9 \u00e0 la pr\u00e9paration de la liste des motifs et th\u00e8mes litt\u00e9raires et leurs descriptions, a r\u00e9dig\u00e9 les textes de Sienkiewicz (\"Latarnik\", \"Janko Muzykant\", \"Quo vadis\"); voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

        \r\n\r\n\r\n

        Anerys (coop\u00e8re avec nous depuis le 5 juillet 2007)

        \r\n\r\n

        entre autres, elle a particip\u00e9 \u00e0 la pr\u00e9paration de la liste des motifs et th\u00e8mes litt\u00e9raires, dans la discussion sur les genres litt\u00e9raires, elle \u00e0 r\u00e9dig\u00e9 \"Bogurodzica\", \"Fraszki\u201d et \"Treny\u201d de Kochanowski; les po\u00e8mes de S\u0142owacki (\"Gr\u00f3b Agamemnona\"), \"Tartuffe, ou l'Imposteur\" de Moli\u00e8re, les po\u00e8mes de Kasprowicz (entre autres le hymne \"Dies Irae\u201d); voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

        \r\n\r\n\r\n\t

        EmiliaZdankiewicz (coop\u00e8re avec nous depuis le 17 mars 2008)

        \r\n\r\n

        entre autres, les motifs litt\u00e9raires - discussion et description, \"Kordian\" de S\u0142owacki; \"Nasza szkapa\" de Konopnicka; \"A\u00efeux p.III\" de Mickiewicz; voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

        \r\n\r\n\r\n\t

        Ewa_Serafin (coop\u00e8re avec nous depuis le 15 mars 2008)

        \r\n\r\n

        entre autres a particip\u00e9 \u00e0 la cr\u00e9ation de la liste et de la description de l'utilisation des motifs et th\u00e8mes litt\u00e9raires, a r\u00e9dig\u00e9 les po\u00e8mes de Kasprowicz (\"Z wichr\u00f3w i hal\u201d, \"Nad przepa\u015bciami\u201d, \"W ciemno\u015bci schodzi moja dusza\u201d ainsi que \u201eNad Niemnem\u201d d'Orzeszkowa; voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafin

        \r\n\r\n\r\n \t

        Hanna_Golab (coop\u00e8re avec nous depuis le 15 juillet 2008)

        \r\n\r\n elle a r\u00e9dig\u00e9 \"Oedipe roi\u201d de Sophocle et \"Dusio\u0142ek\u201d de Le\u015bmian; voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

        \r\n\r\n\r\n\t

        Ingene (coop\u00e8re avec nous depuis le 16 juillet 2008)

        \r\n\r\n

        elle a r\u00e9dig\u00e9 \"Si\u0142aczka\u201d de \u017beromski, \"Quo vadis\u201d de Sienkiewicz ainsi que \"Treny\u201d de Kochanowski; voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene

        \r\n \r\n\t

        Jmyszkowska (coop\u00e8re avec nous depuis le 26 mars 2008)

        \r\n\r\n

        entre autres, elle a r\u00e9dig\u00e9 \"Giaour\u201d de Byron et \"Quo vadis\u201d de Sienkiewicz; voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska

        \r\n\r\n\r\n

        Marysiabailey (coop\u00e8re avec nous depuis le 1 octobre 2007)

        \r\n\r\n

        elle a particip\u00e9 \u00e0 la pr\u00e9paration de la liste des motifs et th\u00e8mes litt\u00e9raires et de la description de leur utilisation; elle a r\u00e9dig\u00e9 \"Les Paysans\u201d de Reymont, \"La poup\u00e9e\u201d de Prus, \"Nie-Boska komedia\u201d de Krasi\u0144ski, \"Bajki\u201d et \"Satyry\u201d de Krasicki, \"Antigone\u201d de Sophocle et les oeuvres de Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman, Kasprowicz; voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey; elle a en plus pr\u00e9par\u00e9 et conduit l'entra\u00eenement pour les b\u00e9n\u00e9voles le 15 mars 2008; elle a fait la correcte des textes et est coordinatrice du travail sur les livres audio.

        \r\n\r\n\r\n

        Olga_Wojtczak (coop\u00e8re avec nous depuis le 21 octobre 2008)

        \r\n\r\n

        entre autres, elle a r\u00e9dig\u00e9 les romans de Sienkiewicz (la Trilogie), de Reymont, \u017beromski, les oeuvres de Shakespeare; voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak

        \r\n\r\n\r\n

        Renataml (coop\u00e8re avec nous depuis le 30 juin 2007)

        \r\n\r\n

        a particip\u00e9 \u00e0 la discussion sur la liste des motifs, en tant qu'enseignante experiment\u00e9e, elle nous a donn\u00e9 des conseils pr\u00e9cieux, a \u00e9dit\u00e9 \"La poup\u00e9e\u201d de Prus, \"Balladyna\u201d de S\u0142owacki, \"Si\u0142aczka\u201d de \u017beromski.\r\n\r\n http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

        \r\n", - "title_ru": "\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0447\u044c", - "title_it": null - } - }, - { - "pk": 1, - "model": "infopages.infopage", - "fields": { - "title_de": "Volontariat f\u00fcr Wissen", - "left_column_uk": "

        \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e

        \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

        \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0411\u0456\u043e\u0433\u0440\u0430\u043c\u0438 \u043f\u0438\u0441\u044c\u043c\u0435\u043d\u043d\u0438\u043a\u0456\u0432 \u0442\u0430 \u0434\u0435\u0444\u0456\u043d\u0456\u0446\u0456\u0457 \u0435\u043f\u043e\u0445 \u0442\u0430 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0436\u0430\u043d\u0440\u0456\u0432 \u0432 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0456 \u0443\u0447\u043d\u044f\u043c\u0438 \u0447\u043e\u0442\u0438\u0440\u044c\u043e\u0445 \u0448\u043a\u0456\u043b \u043f\u0456\u0434\u0447\u0430\u0441 \u043c\u0430\u0439\u0441\u0442\u0435\u0440-\u043a\u043b\u0430\u0441\u0456\u0432 \u201c\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0432 \u043e\u0441\u0432\u0456\u0442\u0456\u201d.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

        \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

        \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0423\u0447\u043d\u0456 \u0441\u043f\u0456\u043b\u044c\u043d\u043e \u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0438 \u0432\u0456\u0434 \u0434\u043e\u0433\u043b\u044f\u0434\u043e\u043c \u0432\u0447\u0438\u0442\u0435\u043b\u0456\u0432 \u0442\u0430 \u0441\u043f\u0435\u0446\u0456\u0430\u043b\u0456\u0441\u0442\u0456\u0432 \u2014 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u0437\u043d\u0430\u0432\u0446\u0456\u0432 \u043d\u0430 \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u0432\u0456\u0439 \u0432\u0456\u043a\u0456-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0456\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0456\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u044e\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2ia. \u0420\u043e\u0431\u043e\u0442\u0430 \u043d\u0430\u0434 \u0446\u0438\u043c\u0438 \u0442\u0435\u043a\u0441\u0442\u0430\u043c\u0438 \u0431\u0443\u043b\u0430 \u0432\u043e\u0434\u043d\u043e\u0447\u0430\u0441 \u043d\u0430\u0443\u043a\u043e\u044e \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0442\u0438\u0441\u044f \u043a\u043e\u043c\u043f\u2019\u044e\u0442\u0435\u0440\u043e\u043c \u0442\u0430 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0448\u0443\u043a\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457, \u0430 \u0442\u0430\u043a\u043e\u0436 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438 \u0457\u0457 \u0432\u0456\u0440\u043e\u0433\u0456\u0434\u043d\u043e\u0441\u0442\u0456.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

        \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

        \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u041f\u0440\u043e\u0435\u043a\u0442 \"\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0432 \u043e\u0441\u0432\u0456\u0442\u0456\" \u0437\u0434\u0456\u0439\u0441\u043d\u0435\u043d\u043e \u0437\u0430\u0432\u0434\u044f\u043a\u0438 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0446\u0456 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u043e\u0441\u0432\u0456\u0442\u0438. \u041f\u0440\u0438\u0437\u0438 \u0434\u043b\u044f \u0443\u0447\u043d\u0456\u0432 \u043f\u0440\u0438\u0433\u043e\u0442\u0443\u0432\u0430\u043b\u0438\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0412\u0438\u0434\u0430\u0432\u043d\u0438\u0446\u0442\u0432\u043e Nasza Ksi\u0119garnia\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0442\u0430\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0412\u0438\u0434\u0430\u0432\u043d\u0438\u0446\u0442\u0432\u043e Helion. \u0422\u0435\u043a\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043d\u043e \u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u0456 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Plagiat.pl.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

        \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

        \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0417\u0432\u0456\u0442 \u0437 \u0440\u0435\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u0457 \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \"\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0432 \u043e\u0441\u0432\u0456\u0442\u0456\".\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

        \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

        \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \r\n\u00a0\u00a0\u00a0 \r\n\u00a0\u00a0\u00a0 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

        ", - "main_page": null, - "right_column_pl": "\t

        Autorzy

        \r\n\r\n\t
          \r\n\t\t
        1. \r\n\t\t\t

          \r\n\t\t\t\tGimnazjum nr 40 z Oddzia\u0142ami Integracyjnymi w Zespole\r\n\t\t\t\tSzk\u00f3\u0142 nr 69 im. Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; klasa druga pod opiek\u0105\r\n\t\t\t\tAnny Budziarek-Friedrich:\r\n\t\t\t

          \r\n\r\n\t\t\t
            \r\n\t\t\t\t
          • Burdon Filip;
          • \r\n\r\n\t\t\t\t
          • D\u0119bski Bartek;
          • \r\n\t\t\t\t
          • Jackowicz Kamil;
          • \r\n\t\t\t\t
          • Kurek Pawe\u0142;
          • \r\n\t\t\t\t
          • Makles Bartosz;
          • \r\n\t\t\t\t
          • Markiewicz Jeremiasz;
          • \r\n\t\t\t\t
          • Migda\u0142 Katarzyna;
          • \r\n\r\n\t\t\t\t
          • Mioduszewski Micha\u0142;
          • \r\n\t\t\t\t
          • Pfeiffer Ida;
          • \r\n\t\t\t\t
          • P\u0142askowicka Karolina;
          • \r\n\t\t\t\t
          • Sailer Ewa.
          • \r\n\t\t\t
          \r\n\t\t
        2. \r\n\r\n\t\t
        3. \r\n\t\t\t

          \r\n\t\t\t\tXXXIII Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Miko\u0142aja Kopernika,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; klasa pierwsza o profilu\r\n\t\t\t\tbiologiczno-chemicznym pod opiek\u0105 El\u017cbiety Konkowskiej:\r\n\t\t\t

          \r\n\r\n\t\t\t
            \r\n\t\t\t\t
          • Chwil Bart\u0142omiej;
          • \r\n\t\t\t\t
          • Czarnecka Natalia;
          • \r\n\t\t\t\t
          • Gawro\u0144ska Iga;
          • \r\n\r\n\t\t\t\t
          • Grabarczyk Marta;
          • \r\n\t\t\t\t
          • Jastrz\u0105b Katarzyna;
          • \r\n\t\t\t\t
          • Krawczak Olga;
          • \r\n\t\t\t\t
          • Krawczyk Marianna;
          • \r\n\t\t\t\t
          • Kur Natalia;
          • \r\n\t\t\t\t
          • Kwiatek Marta;
          • \r\n\r\n\t\t\t\t
          • La\u015bkiewicz Joanna;
          • \r\n\t\t\t\t
          • Machczy\u0144ska Daria;
          • \r\n\t\t\t\t
          • Miecznikowska Izabela;
          • \r\n\t\t\t\t
          • Moczulska Karolina;
          • \r\n\t\t\t\t
          • Mo\u015bcicka Aneta;
          • \r\n\t\t\t\t
          • Narloch Sabina;
          • \r\n\r\n\t\t\t\t
          • Przybysz Pawe\u0142;
          • \r\n\t\t\t\t
          • Puchta Marek;
          • \r\n\t\t\t\t
          • Ryska Cezary;
          • \r\n\t\t\t\t
          • Sandomierski Bart\u0142omiej;
          • \r\n\t\t\t\t
          • S\u0142awi\u0144ski Tomasz;
          • \r\n\t\t\t\t
          • S\u0142owik Olga;
          • \r\n\r\n\t\t\t\t
          • Starzycka Katarzyna;
          • \r\n\t\t\t\t
          • Strzelczak Karolina;
          • \r\n\t\t\t\t
          • Szafran Danuta;
          • \r\n\t\t\t\t
          • Szmigielska Magdalena;
          • \r\n\t\t\t\t
          • Szulkowska Alicja;
          • \r\n\t\t\t\t
          • \u015alusarczyk Anna;
          • \r\n\r\n\t\t\t\t
          • Tytkowska Anna.
          • \r\n\t\t\t
          \r\n\t\t\t
        4. \r\n\t\t\t\t

          \r\n\t\t\t\t\tAutorskie Niepubliczne Liceum Og\u00f3lnokszta\u0142c\u0105ce nr\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; klasa pierwsza\r\n\t\t\t\t\to profilu og\u00f3lnym pod opiek\u0105 Micha\u0142a Friedricha:\r\n\t\t\t\t

          \r\n\r\n\t\t\t\t
            \r\n\t\t\t\t\t
          • Baraniecka Marta;
          • \r\n\r\n\t\t\t\t\t
          • Go\u0142aszewska Ewa;
          • \r\n\t\t\t\t\t
          • Kwiatkowski Micha\u0142;
          • \r\n\t\t\t\t\t
          • Machnikowska Monika;
          • \r\n\t\t\t\t\t
          • Pietrzak Bartosz;
          • \r\n\t\t\t\t\t
          • Przespolewski Przemys\u0142aw;
          • \r\n\t\t\t\t\t
          • Rosi\u0144ska Zuzanna;
          • \r\n\r\n\t\t\t\t\t
          • Sibiga Magdalena.
          • \r\n\t\t\t\t
          \r\n\t\t\t
        5. \r\n\t\t\t
        6. \r\n\t\t\t\t

          \r\n\t\t\t\t\tLXIV Liceum Og\u00f3lnokszta\u0142c\u0105ce im. St. I. Witkiewicza,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; klasa pierwsza o\r\n\t\t\t\t\tprofilu og\u00f3lnym pod opiek\u0105 Daniela Zycha:\r\n\t\t\t\t

          \r\n\r\n\t\t\t\t
            \r\n\r\n\t\t\t\t\t
          • Andrzejczak Kamil;
          • \r\n\t\t\t\t\t
          • Czubaj Konrad;
          • \r\n\t\t\t\t\t
          • Dr\u0105gowska Katarzyna;
          • \r\n\t\t\t\t\t
          • Gajewska Magdalena;
          • \r\n\t\t\t\t\t
          • G\u0142owacki Jan;
          • \r\n\t\t\t\t\t
          • Grad Pawe\u0142;
          • \r\n\r\n\t\t\t\t\t
          • Hnatowski Bartek;
          • \r\n\t\t\t\t\t
          • Karwowski Marcin;
          • \r\n\t\t\t\t\t
          • K\u0142os Aneta;
          • \r\n\t\t\t\t\t
          • Kozie\u0142 Barbara;
          • \r\n\t\t\t\t\t
          • Koz\u0142owska Anna;
          • \r\n\t\t\t\t\t
          • Krug Pamela;
          • \r\n\r\n\t\t\t\t\t
          • Krzosek Jakub;
          • \r\n\t\t\t\t\t
          • Luba\u015b Micha\u0142;
          • \r\n\t\t\t\t\t
          • Masewicz Natalia;
          • \r\n\t\t\t\t\t
          • Mastalerz Agnieszka;
          • \r\n\t\t\t\t\t
          • Modelska Marta;
          • \r\n\t\t\t\t\t
          • Nowak Aleksandra;
          • \r\n\r\n\t\t\t\t\t
          • Pabian Agnieszka;
          • \r\n\t\t\t\t\t
          • Paszkowska Aleksandra;
          • \r\n\t\t\t\t\t
          • Pielat Zofia;
          • \r\n\t\t\t\t\t
          • Poniecka Agnieszka;
          • \r\n\t\t\t\t\t
          • Pytlak Urszula;
          • \r\n\t\t\t\t\t
          • Rosa Karolina;
          • \r\n\r\n\t\t\t\t\t
          • Smyczy\u0144ska Kamila;
          • \r\n\t\t\t\t\t
          • Stoli\u0144ska Barbara;
          • \r\n\t\t\t\t\t
          • Szyma\u0144ska Katarzyna;
          • \r\n\t\t\t\t\t
          • \u015acibior Ewa;
          • \r\n\t\t\t\t\t
          • Witczak Magda;
          • \r\n\t\t\t\t\t
          • Witkowska Justyna;
          • \r\n\r\n\t\t\t\t\t
          • Wyrzykowska Jowita;
          • \r\n\t\t\t\t\t
          • Zi\u00f3\u0142kowska Adrianna.
          • \r\n\t\t\t\t
          \r\n\t\t\t
        7. \r\n\t \r\n\t
        \r\n", - "right_column_lt": "\t

        Autoriai

        \r\n\r\n\t
          \r\n\t\t
        1. \r\n\t\t\t

          \r\n\t\t\t\tGimnazija nr 40 Lenkijos Armijos Kovojan\u010dios Grup\u0117s \u201eKRYBAR\u201d vardo Mokykl\u0173 Kompleksas nr 69,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; antra klas\u0117 globojama mokytojos\r\n\t\t\t\tAnny Budziarek-Friedrich:\r\n\t\t\t

          \r\n\r\n\t\t\t
            \r\n\t\t\t\t
          • Burdon Filip;
          • \r\n\r\n\t\t\t\t
          • D\u0119bski Bartek;
          • \r\n\t\t\t\t
          • Jackowicz Kamil;
          • \r\n\t\t\t\t
          • Kurek Pawe\u0142;
          • \r\n\t\t\t\t
          • Makles Bartosz;
          • \r\n\t\t\t\t
          • Markiewicz Jeremiasz;
          • \r\n\t\t\t\t
          • Migda\u0142 Katarzyna;
          • \r\n\r\n\t\t\t\t
          • Mioduszewski Micha\u0142;
          • \r\n\t\t\t\t
          • Pfeiffer Ida;
          • \r\n\t\t\t\t
          • P\u0142askowicka Karolina;
          • \r\n\t\t\t\t
          • Sailer Ewa.
          • \r\n\t\t\t
          \r\n\t\t
        2. \r\n\r\n\t\t
        3. \r\n\t\t\t

          \r\n\t\t\t\tXXXIII Miko\u0142ojaus Koperniko Bendrojo Lavinimo Licejus\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; pirma klas\u0117 biologijos chemijos profiliuos,\r\n\t\t\t\tglobojama mokytojos El\u017cbiety Konkowskiej:\r\n\t\t\t

          \r\n\r\n\t\t\t
            \r\n\t\t\t\t
          • Chwil Bart\u0142omiej;
          • \r\n\t\t\t\t
          • Czarnecka Natalia;
          • \r\n\t\t\t\t
          • Gawro\u0144ska Iga;
          • \r\n\r\n\t\t\t\t
          • Grabarczyk Marta;
          • \r\n\t\t\t\t
          • Jastrz\u0105b Katarzyna;
          • \r\n\t\t\t\t
          • Krawczak Olga;
          • \r\n\t\t\t\t
          • Krawczyk Marianna;
          • \r\n\t\t\t\t
          • Kur Natalia;
          • \r\n\t\t\t\t
          • Kwiatek Marta;
          • \r\n\r\n\t\t\t\t
          • La\u015bkiewicz Joanna;
          • \r\n\t\t\t\t
          • Machczy\u0144ska Daria;
          • \r\n\t\t\t\t
          • Miecznikowska Izabela;
          • \r\n\t\t\t\t
          • Moczulska Karolina;
          • \r\n\t\t\t\t
          • Mo\u015bcicka Aneta;
          • \r\n\t\t\t\t
          • Narloch Sabina;
          • \r\n\r\n\t\t\t\t
          • Przybysz Pawe\u0142;
          • \r\n\t\t\t\t
          • Puchta Marek;
          • \r\n\t\t\t\t
          • Ryska Cezary;
          • \r\n\t\t\t\t
          • Sandomierski Bart\u0142omiej;
          • \r\n\t\t\t\t
          • S\u0142awi\u0144ski Tomasz;
          • \r\n\t\t\t\t
          • S\u0142owik Olga;
          • \r\n\r\n\t\t\t\t
          • Starzycka Katarzyna;
          • \r\n\t\t\t\t
          • Strzelczak Karolina;
          • \r\n\t\t\t\t
          • Szafran Danuta;
          • \r\n\t\t\t\t
          • Szmigielska Magdalena;
          • \r\n\t\t\t\t
          • Szulkowska Alicja;
          • \r\n\t\t\t\t
          • \u015alusarczyk Anna;
          • \r\n\r\n\t\t\t\t
          • Tytkowska Anna.
          • \r\n\t\t\t
          \r\n\t\t\t
        4. \r\n\t\t\t\t

          \r\n\t\t\t\t \tPrivatus Bendrojo Lavinimo Lic\u0117jus nr\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; \r\n\t\t\t\t\tpirma klas\u0117 bendra s profilius,\r\n\t\t\t \tglobojama mokytojaus Micha\u0142 Friedrich\r\n\t\t\t\t\t\r\n\t\t\t\t

          \r\n\r\n\t\t\t\t
            \r\n\t\t\t\t\t
          • Baraniecka Marta;
          • \r\n\r\n\t\t\t\t\t
          • Go\u0142aszewska Ewa;
          • \r\n\t\t\t\t\t
          • Kwiatkowski Micha\u0142;
          • \r\n\t\t\t\t\t
          • Machnikowska Monika;
          • \r\n\t\t\t\t\t
          • Pietrzak Bartosz;
          • \r\n\t\t\t\t\t
          • Przespolewski Przemys\u0142aw;
          • \r\n\t\t\t\t\t
          • Rosi\u0144ska Zuzanna;
          • \r\n\r\n\t\t\t\t\t
          • Sibiga Magdalena.
          • \r\n\t\t\t\t
          \r\n\t\t\t
        5. \r\n\t\t\t
        6. \r\n\t\t\t\t

          \r\n\t\t\t\t\tLXIV St. I. Witkiewicz Bendrojo Lavinimo Licejus\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; pirma klas\u0117 bendras profilius,\r\n\t\t\t \tglobojama mokytojaus Daniel Zych:\r\n\t\t\t\t

          \r\n\r\n\t\t\t\t
            \r\n\r\n\t\t\t\t\t
          • Andrzejczak Kamil;
          • \r\n\t\t\t\t\t
          • Czubaj Konrad;
          • \r\n\t\t\t\t\t
          • Dr\u0105gowska Katarzyna;
          • \r\n\t\t\t\t\t
          • Gajewska Magdalena;
          • \r\n\t\t\t\t\t
          • G\u0142owacki Jan;
          • \r\n\t\t\t\t\t
          • Grad Pawe\u0142;
          • \r\n\r\n\t\t\t\t\t
          • Hnatowski Bartek;
          • \r\n\t\t\t\t\t
          • Karwowski Marcin;
          • \r\n\t\t\t\t\t
          • K\u0142os Aneta;
          • \r\n\t\t\t\t\t
          • Kozie\u0142 Barbara;
          • \r\n\t\t\t\t\t
          • Koz\u0142owska Anna;
          • \r\n\t\t\t\t\t
          • Krug Pamela;
          • \r\n\r\n\t\t\t\t\t
          • Krzosek Jakub;
          • \r\n\t\t\t\t\t
          • Luba\u015b Micha\u0142;
          • \r\n\t\t\t\t\t
          • Masewicz Natalia;
          • \r\n\t\t\t\t\t
          • Mastalerz Agnieszka;
          • \r\n\t\t\t\t\t
          • Modelska Marta;
          • \r\n\t\t\t\t\t
          • Nowak Aleksandra;
          • \r\n\r\n\t\t\t\t\t
          • Pabian Agnieszka;
          • \r\n\t\t\t\t\t
          • Paszkowska Aleksandra;
          • \r\n\t\t\t\t\t
          • Pielat Zofia;
          • \r\n\t\t\t\t\t
          • Poniecka Agnieszka;
          • \r\n\t\t\t\t\t
          • Pytlak Urszula;
          • \r\n\t\t\t\t\t
          • Rosa Karolina;
          • \r\n\r\n\t\t\t\t\t
          • Smyczy\u0144ska Kamila;
          • \r\n\t\t\t\t\t
          • Stoli\u0144ska Barbara;
          • \r\n\t\t\t\t\t
          • Szyma\u0144ska Katarzyna;
          • \r\n\t\t\t\t\t
          • \u015acibior Ewa;
          • \r\n\t\t\t\t\t
          • Witczak Magda;
          • \r\n\t\t\t\t\t
          • Witkowska Justyna;
          • \r\n\r\n\t\t\t\t\t
          • Wyrzykowska Jowita;
          • \r\n\t\t\t\t\t
          • Zi\u00f3\u0142kowska Adrianna.
          • \r\n\t\t\t\t
          \r\n\t\t\t
        7. \r\n\t \r\n\t
        ", - "left_column_lt": "

        Savanoriai

        \r\n\t

        \r\n\t\tAutori\u0173 biografijos ir literat\u016brinis r\u016b\u0161i\u0173 apra\u0161ymus \r\n\t\tinternetin\u0117je bibliotekoje Laisvoji Literat\u016bra paruo\u0161\u0117 mokiniai\r\n\t\ti\u0161 keturi\u0173 mokykl\u0173 seminarijos \u201eLik savanoriu kad su\u017einoti daugiau\u201d.\r\n\t

        \r\n\r\n\t

        \r\n\t\tMokiniai dirbo visi kartu globojami mokytoj\u0173 ir literat\u016bros \u017einov\u0173.\r\n\t\t\r\n\r\n\t\t\tinternetine platforma viki\r\n\t\tparuo\u0161ta grup\u0117s\r\n\t\t2ia. Kuriant apra\u0161ymus naudojo kompiuterius, internet\u0105 tam kad\r\n\t\t surasti informacij\u0105 ir patikrinti jos tik\u0117tinum\u0105.\r\n\t

        \r\n\r\n\t

        \r\n\t\tProjektas \"Lik savanoriu kad su\u017einoti daugiau\" buvo \u012fvykdytas\r\n\t\t d\u0117ka\r\n\t\t\r\n\t\t\tMinisterstwa Edukacji Narodowej. Dovanas mokiniams \u012fsteig\u0117\r\n\t\t\r\n\r\n\t\t\tLeidykla M\u016bs\u016b Knygynas\r\n\t\ti\r\n\t\tWydawnictwo Helion. Patikrinta servise.\r\n\t\t\r\n\t\t\tPlagiat.pl.\r\n\t

        \r\n\r\n\t

        \r\n\t\tRaportas suristas su \u012fgyvendinimu projekto \u201eLik savanoriu kad su\u017einoti daugiau\".\r\n\t

        \r\n\r\n\t

        \r\n\t\r\n\t\r\n\t\r\n \r\n \r\n\t

        ", - "title_fr": "B\u00e9n\u00e9volat pour le savoir", - "right_column_ru": "\t

        \u0410\u0432\u0442\u043e\u0440\u044b

        \r\n\r\n\t
          \r\n\t\t
        1. \r\n\t\t\t

          \r\n\t\t\t\t\u0413\u0438\u043c\u043d\u0430\u0437\u0438\u0439 \u043d\u043e\u043c\u0435\u0440 40 \u0441 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0435\r\n\t\t\t\t\u0448\u043a\u043e\u043b \u043d\u043e\u043c\u0435\u0440 69 \u0438\u043c. \u0410\u0440\u0438\u043c\u0438\u0438 \u043a\u0440\u0430\u0439\u043e\u0432\u043e\u0439 \u0431\u043e\u0435\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c\r\n\t\t\t\tAnny Budziarek-Friedrich:\r\n\t\t\t

          \r\n\r\n\t\t\t
            \r\n\t\t\t\t
          • Burdon Filip;
          • \r\n\r\n\t\t\t\t
          • D\u0119bski Bartek;
          • \r\n\t\t\t\t
          • Jackowicz Kamil;
          • \r\n\t\t\t\t
          • Kurek Pawe\u0142;
          • \r\n\t\t\t\t
          • Makles Bartosz;
          • \r\n\t\t\t\t
          • Markiewicz Jeremiasz;
          • \r\n\t\t\t\t
          • Migda\u0142 Katarzyna;
          • \r\n\r\n\t\t\t\t
          • Mioduszewski Micha\u0142;
          • \r\n\t\t\t\t
          • Pfeiffer Ida;
          • \r\n\t\t\t\t
          • P\u0142askowicka Karolina;
          • \r\n\t\t\t\t
          • Sailer Ewa.
          • \r\n\t\t\t
          \r\n\t\t
        2. \r\n\r\n\t\t
        3. \r\n\t\t\t

          \r\n\t\t\t\tXXXIII \u041e\u0431\u0449\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u0446\u0435\u0439 \u0438\u043c. \u041d\u0438\u043a\u043e\u043b\u0430\u044f \u041a\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0431\u0438\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e-\u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e\r\n\t\t\t\t\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c El\u017cbiety Konkowskiej:\r\n\t\t\t

          \r\n\r\n\t\t\t
            \r\n\t\t\t\t
          • Chwil Bart\u0142omiej;
          • \r\n\t\t\t\t
          • Czarnecka Natalia;
          • \r\n\t\t\t\t
          • Gawro\u0144ska Iga;
          • \r\n\r\n\t\t\t\t
          • Grabarczyk Marta;
          • \r\n\t\t\t\t
          • Jastrz\u0105b Katarzyna;
          • \r\n\t\t\t\t
          • Krawczak Olga;
          • \r\n\t\t\t\t
          • Krawczyk Marianna;
          • \r\n\t\t\t\t
          • Kur Natalia;
          • \r\n\t\t\t\t
          • Kwiatek Marta;
          • \r\n\r\n\t\t\t\t
          • La\u015bkiewicz Joanna;
          • \r\n\t\t\t\t
          • Machczy\u0144ska Daria;
          • \r\n\t\t\t\t
          • Miecznikowska Izabela;
          • \r\n\t\t\t\t
          • Moczulska Karolina;
          • \r\n\t\t\t\t
          • Mo\u015bcicka Aneta;
          • \r\n\t\t\t\t
          • Narloch Sabina;
          • \r\n\r\n\t\t\t\t
          • Przybysz Pawe\u0142;
          • \r\n\t\t\t\t
          • Puchta Marek;
          • \r\n\t\t\t\t
          • Ryska Cezary;
          • \r\n\t\t\t\t
          • Sandomierski Bart\u0142omiej;
          • \r\n\t\t\t\t
          • S\u0142awi\u0144ski Tomasz;
          • \r\n\t\t\t\t
          • S\u0142owik Olga;
          • \r\n\r\n\t\t\t\t
          • Starzycka Katarzyna;
          • \r\n\t\t\t\t
          • Strzelczak Karolina;
          • \r\n\t\t\t\t
          • Szafran Danuta;
          • \r\n\t\t\t\t
          • Szmigielska Magdalena;
          • \r\n\t\t\t\t
          • Szulkowska Alicja;
          • \r\n\t\t\t\t
          • \u015alusarczyk Anna;
          • \r\n\r\n\t\t\t\t
          • Tytkowska Anna.
          • \r\n\t\t\t
          \r\n\t\t\t
        4. \r\n\t\t\t\t

          \r\n\t\t\t\t\t\u0410\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0439 \u043d\u0435\u043f\u0443\u0431\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0431\u0449\u0435\u043e\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u0446\u0435\u0439 \u043d\u043e\u043c\u0435\u0440\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa;\u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\r\n\t\t\t\t\t\u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c Micha\u0142a Friedricha:\r\n\t\t\t\t

          \r\n\r\n\t\t\t\t
            \r\n\t\t\t\t\t
          • Baraniecka Marta;
          • \r\n\r\n\t\t\t\t\t
          • Go\u0142aszewska Ewa;
          • \r\n\t\t\t\t\t
          • Kwiatkowski Micha\u0142;
          • \r\n\t\t\t\t\t
          • Machnikowska Monika;
          • \r\n\t\t\t\t\t
          • Pietrzak Bartosz;
          • \r\n\t\t\t\t\t
          • Przespolewski Przemys\u0142aw;
          • \r\n\t\t\t\t\t
          • Rosi\u0144ska Zuzanna;
          • \r\n\r\n\t\t\t\t\t
          • Sibiga Magdalena.
          • \r\n\t\t\t\t
          \r\n\t\t\t
        5. \r\n\t\t\t
        6. \r\n\t\t\t\t

          \r\n\t\t\t\t\tLXIV \u041e\u0431\u0449\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u0446\u0435\u0439 \u0438\u043c. \u0421. \u0418. \u0412\u0438\u0442\u043a\u0435\u0432\u0438\u0447\u0430,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\r\n\t\t\t\t\t\u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c Daniela Zycha:\r\n\t\t\t\t

          \r\n\r\n\t\t\t\t
            \r\n\r\n\t\t\t\t\t
          • Andrzejczak Kamil;
          • \r\n\t\t\t\t\t
          • Czubaj Konrad;
          • \r\n\t\t\t\t\t
          • Dr\u0105gowska Katarzyna;
          • \r\n\t\t\t\t\t
          • Gajewska Magdalena;
          • \r\n\t\t\t\t\t
          • G\u0142owacki Jan;
          • \r\n\t\t\t\t\t
          • Grad Pawe\u0142;
          • \r\n\r\n\t\t\t\t\t
          • Hnatowski Bartek;
          • \r\n\t\t\t\t\t
          • Karwowski Marcin;
          • \r\n\t\t\t\t\t
          • K\u0142os Aneta;
          • \r\n\t\t\t\t\t
          • Kozie\u0142 Barbara;
          • \r\n\t\t\t\t\t
          • Koz\u0142owska Anna;
          • \r\n\t\t\t\t\t
          • Krug Pamela;
          • \r\n\r\n\t\t\t\t\t
          • Krzosek Jakub;
          • \r\n\t\t\t\t\t
          • Luba\u015b Micha\u0142;
          • \r\n\t\t\t\t\t
          • Masewicz Natalia;
          • \r\n\t\t\t\t\t
          • Mastalerz Agnieszka;
          • \r\n\t\t\t\t\t
          • Modelska Marta;
          • \r\n\t\t\t\t\t
          • Nowak Aleksandra;
          • \r\n\r\n\t\t\t\t\t
          • Pabian Agnieszka;
          • \r\n\t\t\t\t\t
          • Paszkowska Aleksandra;
          • \r\n\t\t\t\t\t
          • Pielat Zofia;
          • \r\n\t\t\t\t\t
          • Poniecka Agnieszka;
          • \r\n\t\t\t\t\t
          • Pytlak Urszula;
          • \r\n\t\t\t\t\t
          • Rosa Karolina;
          • \r\n\r\n\t\t\t\t\t
          • Smyczy\u0144ska Kamila;
          • \r\n\t\t\t\t\t
          • Stoli\u0144ska Barbara;
          • \r\n\t\t\t\t\t
          • Szyma\u0144ska Katarzyna;
          • \r\n\t\t\t\t\t
          • \u015acibior Ewa;
          • \r\n\t\t\t\t\t
          • Witczak Magda;
          • \r\n\t\t\t\t\t
          • Witkowska Justyna;
          • \r\n\r\n\t\t\t\t\t
          • Wyrzykowska Jowita;
          • \r\n\t\t\t\t\t
          • Zi\u00f3\u0142kowska Adrianna.
          • \r\n\t\t\t\t
          \r\n\t\t\t
        7. \r\n\t \r\n\t
        ", - "left_column_fr": "

        B\u00e9n\u00e9volat

        \r\n\t

        \r\n\t\tLes histoires de vie des auteurs ainsi que les d\u00e9finitions des \u00e9poques et genres litt\u00e9raires dans la biblioth\u00e8que en ligne Lectures libres ont \u00e9t\u00e9 \u00e9crites par les \u00e9l\u00e8ves des quatre \u00e9coles pendant les ateliers \"B\u00e9n\u00e9volat pour le savoir\"\r\n\t

        \r\n\r\n\t

        \r\n\t\tLes \u00e9l\u00e8ves ont travaill\u00e9 ensemble sous la supervision des professeurs et sp\u00e9cialistes \u2013 hommes des lettres sur\r\n\t\t\r\n\r\n\t\tune platforme en ligne wiki\r\n\t\tmise en place par l'\u00e9quipe\r\n\t\t2ia. Le travail sur les fiches comprenait aussi la ma\u00eetrise de l'ordinateur et de l'internet pour chercher des informations, ainsi que pour v\u00e9rifier leur fiabilit\u00e9.\r\n\t

        \r\n\r\n\t

        \r\n\t\tLe projet \"B\u00e9n\u00e9volat pour le savoir\" a \u00e9t\u00e9 r\u00e9alis\u00e9 gr\u00e2ce \u00e0 l'appui \t\r\n\t\tdu Minist\u00e8re de l'Education nationale\t. Des r\u00e9compenses pour les \u00e9l\u00e8ves ont \u00e9t\u00e9 fond\u00e9es par \r\n\r\n\t\t\tla Maison d'\u00e9dition Nasza Ksi\u0119garnia\r\n\t\tet\r\n\t\tla Maison d'\u00e9dition Helion. Les fiches ont \u00e9t\u00e9 v\u00e9rifi\u00e9es sur le site\r\n\t\t\r\n\t\t\tPlagiat.pl.\r\n\t

        \r\n\r\n\t

        \r\n\t\t Le rapport sur la r\u00e9alisation du projet \"B\u00e9n\u00e9volat pour le savoir\"\r\n.\r\n\t

        \r\n\r\n\t

        \r\n\t\r\n\t\r\n\t\r\n \r\n \r\n\t

        ", - "title": "Volunteering for knowledge", - "title_lt": "Lik savanoriu kad su\u009einoti daugiau", - "right_column": "

        Authors

        \r\n\r\n\t
          \r\n\t\t
        1. \r\n\t\t\tGimnazjum nr 40 z Oddzia\u0142ami Integracyjnymi w Zespole\r\n\t\t\t\tSzk\u00f3\u0142 nr 69 im. Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; second form attented by\t\t\t\tAnna Budziarek-Friedrich:\r\n\t\t\t

          \r\n\r\n\t\t\t
            \r\n\t\t\t\t
          • Burdon Filip;
          • \r\n\r\n\t\t\t\t
          • D\u0119bski Bartek;
          • \r\n\t\t\t\t
          • Jackowicz Kamil;
          • \r\n\t\t\t\t
          • Kurek Pawe\u0142;
          • \r\n\t\t\t\t
          • Makles Bartosz;
          • \r\n\t\t\t\t
          • Markiewicz Jeremiasz;
          • \r\n\t\t\t\t
          • Migda\u0142 Katarzyna;
          • \r\n\r\n\t\t\t\t
          • Mioduszewski Micha\u0142;
          • \r\n\t\t\t\t
          • Pfeiffer Ida;
          • \r\n\t\t\t\t
          • P\u0142askowicka Karolina;
          • \r\n\t\t\t\t
          • Sailer Ewa.
          • \r\n\t\t\t
          \r\n\t\t
        2. \r\n\r\n\t\t
        3. \r\n\t\t\t

          \r\n\t\t\t\tXXXIII Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Miko\u0142aja Kopernika,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; first year, biologyoriented class attented by El\u017cbieta Konkowskiej:\r\n\t\t\t

          \r\n\r\n\t\t\t
            \r\n\t\t\t\t
          • Chwil Bart\u0142omiej;
          • \r\n\t\t\t\t
          • Czarnecka Natalia;
          • \r\n\t\t\t\t
          • Gawro\u0144ska Iga;
          • \r\n\r\n\t\t\t\t
          • Grabarczyk Marta;
          • \r\n\t\t\t\t
          • Jastrz\u0105b Katarzyna;
          • \r\n\t\t\t\t
          • Krawczak Olga;
          • \r\n\t\t\t\t
          • Krawczyk Marianna;
          • \r\n\t\t\t\t
          • Kur Natalia;
          • \r\n\t\t\t\t
          • Kwiatek Marta;
          • \r\n\r\n\t\t\t\t
          • La\u015bkiewicz Joanna;
          • \r\n\t\t\t\t
          • Machczy\u0144ska Daria;
          • \r\n\t\t\t\t
          • Miecznikowska Izabela;
          • \r\n\t\t\t\t
          • Moczulska Karolina;
          • \r\n\t\t\t\t
          • Mo\u015bcicka Aneta;
          • \r\n\t\t\t\t
          • Narloch Sabina;
          • \r\n\r\n\t\t\t\t
          • Przybysz Pawe\u0142;
          • \r\n\t\t\t\t
          • Puchta Marek;
          • \r\n\t\t\t\t
          • Ryska Cezary;
          • \r\n\t\t\t\t
          • Sandomierski Bart\u0142omiej;
          • \r\n\t\t\t\t
          • S\u0142awi\u0144ski Tomasz;
          • \r\n\t\t\t\t
          • S\u0142owik Olga;
          • \r\n\r\n\t\t\t\t
          • Starzycka Katarzyna;
          • \r\n\t\t\t\t
          • Strzelczak Karolina;
          • \r\n\t\t\t\t
          • Szafran Danuta;
          • \r\n\t\t\t\t
          • Szmigielska Magdalena;
          • \r\n\t\t\t\t
          • Szulkowska Alicja;
          • \r\n\t\t\t\t
          • \u015alusarczyk Anna;
          • \r\n\r\n\t\t\t\t
          • Tytkowska Anna.
          • \r\n\t\t\t
          \r\n\t\t\t
        4. \r\n\t\t\t\t

          \r\n\t\t\t\t\tAutorskie Niepubliczne Liceum Og\u00f3lnokszta\u0142c\u0105ce nr\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; first year, general education class attented by Micha\u0142 Friedrich:\r\n\t\t\t\t

          \r\n\r\n\t\t\t\t
            \r\n\t\t\t\t\t
          • Baraniecka Marta;
          • \r\n\r\n\t\t\t\t\t
          • Go\u0142aszewska Ewa;
          • \r\n\t\t\t\t\t
          • Kwiatkowski Micha\u0142;
          • \r\n\t\t\t\t\t
          • Machnikowska Monika;
          • \r\n\t\t\t\t\t
          • Pietrzak Bartosz;
          • \r\n\t\t\t\t\t
          • Przespolewski Przemys\u0142aw;
          • \r\n\t\t\t\t\t
          • Rosi\u0144ska Zuzanna;
          • \r\n\r\n\t\t\t\t\t
          • Sibiga Magdalena.
          • \r\n\t\t\t\t
          \r\n\t\t\t
        5. \r\n\t\t\t
        6. \r\n\t\t\t\t

          \r\n\t\t\t\t\tLXIV Liceum Og\u00f3lnokszta\u0142c\u0105ce im. St. I. Witkiewicza,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; first year, general education class attented by Daniel Zych:\r\n\t\t\t\t

          \r\n\r\n\t\t\t\t
            \r\n\r\n\t\t\t\t\t
          • Andrzejczak Kamil;
          • \r\n\t\t\t\t\t
          • Czubaj Konrad;
          • \r\n\t\t\t\t\t
          • Dr\u0105gowska Katarzyna;
          • \r\n\t\t\t\t\t
          • Gajewska Magdalena;
          • \r\n\t\t\t\t\t
          • G\u0142owacki Jan;
          • \r\n\t\t\t\t\t
          • Grad Pawe\u0142;
          • \r\n\r\n\t\t\t\t\t
          • Hnatowski Bartek;
          • \r\n\t\t\t\t\t
          • Karwowski Marcin;
          • \r\n\t\t\t\t\t
          • K\u0142os Aneta;
          • \r\n\t\t\t\t\t
          • Kozie\u0142 Barbara;
          • \r\n\t\t\t\t\t
          • Koz\u0142owska Anna;
          • \r\n\t\t\t\t\t
          • Krug Pamela;
          • \r\n\r\n\t\t\t\t\t
          • Krzosek Jakub;
          • \r\n\t\t\t\t\t
          • Luba\u015b Micha\u0142;
          • \r\n\t\t\t\t\t
          • Masewicz Natalia;
          • \r\n\t\t\t\t\t
          • Mastalerz Agnieszka;
          • \r\n\t\t\t\t\t
          • Modelska Marta;
          • \r\n\t\t\t\t\t
          • Nowak Aleksandra;
          • \r\n\r\n\t\t\t\t\t
          • Pabian Agnieszka;
          • \r\n\t\t\t\t\t
          • Paszkowska Aleksandra;
          • \r\n\t\t\t\t\t
          • Pielat Zofia;
          • \r\n\t\t\t\t\t
          • Poniecka Agnieszka;
          • \r\n\t\t\t\t\t
          • Pytlak Urszula;
          • \r\n\t\t\t\t\t
          • Rosa Karolina;
          • \r\n\r\n\t\t\t\t\t
          • Smyczy\u0144ska Kamila;
          • \r\n\t\t\t\t\t
          • Stoli\u0144ska Barbara;
          • \r\n\t\t\t\t\t
          • Szyma\u0144ska Katarzyna;
          • \r\n\t\t\t\t\t
          • \u015acibior Ewa;
          • \r\n\t\t\t\t\t
          • Witczak Magda;
          • \r\n\t\t\t\t\t
          • Witkowska Justyna;
          • \r\n\r\n\t\t\t\t\t
          • Wyrzykowska Jowita;
          • \r\n\t\t\t\t\t
          • Zi\u00f3\u0142kowska Adrianna.
          • \r\n\t\t\t\t
          \r\n\t\t\t
        7. \r\n\t \r\n\t
        ", - "right_column_es": "\t

        Autores

        \r\n\r\n\r\n\r\n\t
          \r\n\r\n\t\t
        1. \r\n\r\n\t\t\t

          \r\n\r\n\t\t\t\tGimnazjum nr 40 z Oddzia\u0142ami Integracyjnymi w Zespole\r\n\r\n\t\t\t\tSzk\u00f3\u0142 nr 69 im. Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d,\r\n\r\n\t\t\t\tC/ Drewniana 8, 00-345 Varsovia; segundo curso bajo la supervisi\u00f3n de\r\n\r\n\t\t\t\tAnna Budziarek-Friedrich:\r\n\r\n\t\t\t

          \r\n\r\n\r\n\r\n\t\t\t
            \r\n\r\n\t\t\t\t
          • Burdon Filip;
          • \r\n\r\n\r\n\r\n\t\t\t\t
          • D\u0119bski Bartek;
          • \r\n\r\n\t\t\t\t
          • Jackowicz Kamil;
          • \r\n\r\n\t\t\t\t
          • Kurek Pawe\u0142;
          • \r\n\r\n\t\t\t\t
          • Makles Bartosz;
          • \r\n\r\n\t\t\t\t
          • Markiewicz Jeremiasz;
          • \r\n\r\n\t\t\t\t
          • Migda\u0142 Katarzyna;
          • \r\n\r\n\r\n\r\n\t\t\t\t
          • Mioduszewski Micha\u0142;
          • \r\n\r\n\t\t\t\t
          • Pfeiffer Ida;
          • \r\n\r\n\t\t\t\t
          • P\u0142askowicka Karolina;
          • \r\n\r\n\t\t\t\t
          • Sailer Ewa.
          • \r\n\r\n\t\t\t
          \r\n\r\n\t\t
        2. \r\n\r\n\r\n\r\n\t\t
        3. \r\n\r\n\t\t\t

          \r\n\r\n\t\t\t\tXXXIII Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Miko\u0142aja Kopernika,\r\n\r\n\t\t\t\tC/ Bema 76, 01-225 Varsovia; primer curso de perfil biol\u00f3gico-qu\u00edmico bajo la supervisi\u00f3n de El\u017cbieta Konkowska:\r\n\r\n\t\t\t

          \r\n\r\n\r\n\r\n\t\t\t
            \r\n\r\n\t\t\t\t
          • Chwil Bart\u0142omiej;
          • \r\n\r\n\t\t\t\t
          • Czarnecka Natalia;
          • \r\n\r\n\t\t\t\t
          • Gawro\u0144ska Iga;
          • \r\n\r\n\r\n\r\n\t\t\t\t
          • Grabarczyk Marta;
          • \r\n\r\n\t\t\t\t
          • Jastrz\u0105b Katarzyna;
          • \r\n\r\n\t\t\t\t
          • Krawczak Olga;
          • \r\n\r\n\t\t\t\t
          • Krawczyk Marianna;
          • \r\n\r\n\t\t\t\t
          • Kur Natalia;
          • \r\n\r\n\t\t\t\t
          • Kwiatek Marta;
          • \r\n\r\n\r\n\r\n\t\t\t\t
          • La\u015bkiewicz Joanna;
          • \r\n\r\n\t\t\t\t
          • Machczy\u0144ska Daria;
          • \r\n\r\n\t\t\t\t
          • Miecznikowska Izabela;
          • \r\n\r\n\t\t\t\t
          • Moczulska Karolina;
          • \r\n\r\n\t\t\t\t
          • Mo\u015bcicka Aneta;
          • \r\n\r\n\t\t\t\t
          • Narloch Sabina;
          • \r\n\r\n\r\n\r\n\t\t\t\t
          • Przybysz Pawe\u0142;
          • \r\n\r\n\t\t\t\t
          • Puchta Marek;
          • \r\n\r\n\t\t\t\t
          • Ryska Cezary;
          • \r\n\r\n\t\t\t\t
          • Sandomierski Bart\u0142omiej;
          • \r\n\r\n\t\t\t\t
          • S\u0142awi\u0144ski Tomasz;
          • \r\n\r\n\t\t\t\t
          • S\u0142owik Olga;
          • \r\n\r\n\r\n\r\n\t\t\t\t
          • Starzycka Katarzyna;
          • \r\n\r\n\t\t\t\t
          • Strzelczak Karolina;
          • \r\n\r\n\t\t\t\t
          • Szafran Danuta;
          • \r\n\r\n\t\t\t\t
          • Szmigielska Magdalena;
          • \r\n\r\n\t\t\t\t
          • Szulkowska Alicja;
          • \r\n\r\n\t\t\t\t
          • \u015alusarczyk Anna;
          • \r\n\r\n\r\n\r\n\t\t\t\t
          • Tytkowska Anna.
          • \r\n\r\n\t\t\t
          \r\n\r\n\t\t\t
        4. \r\n\r\n\t\t\t\t

          \r\n\r\n\t\t\t\t\tAutorskie Niepubliczne Liceum Og\u00f3lnokszta\u0142c\u0105ce nr\r\n\r\n\t\t\t\t\t42, C/ Iwicka 47 B, 00-735 Varsovia; primer curso\r\n\r\n\t\t\t\t\tbajo la supervisi\u00f3n de Micha\u0142 Friedrich:\r\n\r\n\t\t\t\t

          \r\n\r\n\r\n\r\n\t\t\t\t
            \r\n\r\n\t\t\t\t\t
          • Baraniecka Marta;
          • \r\n\r\n\r\n\r\n\t\t\t\t\t
          • Go\u0142aszewska Ewa;
          • \r\n\r\n\t\t\t\t\t
          • Kwiatkowski Micha\u0142;
          • \r\n\r\n\t\t\t\t\t
          • Machnikowska Monika;
          • \r\n\r\n\t\t\t\t\t
          • Pietrzak Bartosz;
          • \r\n\r\n\t\t\t\t\t
          • Przespolewski Przemys\u0142aw;
          • \r\n\r\n\t\t\t\t\t
          • Rosi\u0144ska Zuzanna;
          • \r\n\r\n\r\n\r\n\t\t\t\t\t
          • Sibiga Magdalena.
          • \r\n\r\n\t\t\t\t
          \r\n\r\n\t\t\t
        5. \r\n\r\n\t\t\t
        6. \r\n\r\n\t\t\t\t

          \r\n\r\n\t\t\t\t\tLXIV Liceum Og\u00f3lnokszta\u0142c\u0105ce im. St. I. Witkiewicza,\r\n\r\n\t\t\t\t\tC/ Elbl\u0105ska 51, 01-737 Varsovia; primer curso bajo la supervisi\u00f3n de Daniel Zych:\r\n\r\n\t\t\t\t

          \r\n\r\n\r\n\r\n\t\t\t\t
            \r\n\r\n\r\n\r\n\t\t\t\t\t
          • Andrzejczak Kamil;
          • \r\n\r\n\t\t\t\t\t
          • Czubaj Konrad;
          • \r\n\r\n\t\t\t\t\t
          • Dr\u0105gowska Katarzyna;
          • \r\n\r\n\t\t\t\t\t
          • Gajewska Magdalena;
          • \r\n\r\n\t\t\t\t\t
          • G\u0142owacki Jan;
          • \r\n\r\n\t\t\t\t\t
          • Grad Pawe\u0142;
          • \r\n\r\n\r\n\r\n\t\t\t\t\t
          • Hnatowski Bartek;
          • \r\n\r\n\t\t\t\t\t
          • Karwowski Marcin;
          • \r\n\r\n\t\t\t\t\t
          • K\u0142os Aneta;
          • \r\n\r\n\t\t\t\t\t
          • Kozie\u0142 Barbara;
          • \r\n\r\n\t\t\t\t\t
          • Koz\u0142owska Anna;
          • \r\n\r\n\t\t\t\t\t
          • Krug Pamela;
          • \r\n\r\n\r\n\r\n\t\t\t\t\t
          • Krzosek Jakub;
          • \r\n\r\n\t\t\t\t\t
          • Luba\u015b Micha\u0142;
          • \r\n\r\n\t\t\t\t\t
          • Masewicz Natalia;
          • \r\n\r\n\t\t\t\t\t
          • Mastalerz Agnieszka;
          • \r\n\r\n\t\t\t\t\t
          • Modelska Marta;
          • \r\n\r\n\t\t\t\t\t
          • Nowak Aleksandra;
          • \r\n\r\n\r\n\r\n\t\t\t\t\t
          • Pabian Agnieszka;
          • \r\n\r\n\t\t\t\t\t
          • Paszkowska Aleksandra;
          • \r\n\r\n\t\t\t\t\t
          • Pielat Zofia;
          • \r\n\r\n\t\t\t\t\t
          • Poniecka Agnieszka;
          • \r\n\r\n\t\t\t\t\t
          • Pytlak Urszula;
          • \r\n\r\n\t\t\t\t\t
          • Rosa Karolina;
          • \r\n\r\n\r\n\r\n\t\t\t\t\t
          • Smyczy\u0144ska Kamila;
          • \r\n\r\n\t\t\t\t\t
          • Stoli\u0144ska Barbara;
          • \r\n\r\n\t\t\t\t\t
          • Szyma\u0144ska Katarzyna;
          • \r\n\r\n\t\t\t\t\t
          • \u015acibior Ewa;
          • \r\n\r\n\t\t\t\t\t
          • Witczak Magda;
          • \r\n\r\n\t\t\t\t\t
          • Witkowska Justyna;
          • \r\n\r\n\r\n\r\n\t\t\t\t\t
          • Wyrzykowska Jowita;
          • \r\n\r\n\t\t\t\t\t
          • Zi\u00f3\u0142kowska Adrianna.
          • \r\n\r\n\t\t\t\t
          \r\n\r\n\t\t\t
        7. \r\n\r\n\t \r\n\r\n\t
        ", - "right_column_en": "

        Authors

        \r\n\r\n\t
          \r\n\t\t
        1. \r\n\t\t\tGimnazjum nr 40 z Oddzia\u0142ami Integracyjnymi w Zespole\r\n\t\t\t\tSzk\u00f3\u0142 nr 69 im. Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; second form attented by\t\t\t\tAnna Budziarek-Friedrich:\r\n\t\t\t

          \r\n\r\n\t\t\t
            \r\n\t\t\t\t
          • Burdon Filip;
          • \r\n\r\n\t\t\t\t
          • D\u0119bski Bartek;
          • \r\n\t\t\t\t
          • Jackowicz Kamil;
          • \r\n\t\t\t\t
          • Kurek Pawe\u0142;
          • \r\n\t\t\t\t
          • Makles Bartosz;
          • \r\n\t\t\t\t
          • Markiewicz Jeremiasz;
          • \r\n\t\t\t\t
          • Migda\u0142 Katarzyna;
          • \r\n\r\n\t\t\t\t
          • Mioduszewski Micha\u0142;
          • \r\n\t\t\t\t
          • Pfeiffer Ida;
          • \r\n\t\t\t\t
          • P\u0142askowicka Karolina;
          • \r\n\t\t\t\t
          • Sailer Ewa.
          • \r\n\t\t\t
          \r\n\t\t
        2. \r\n\r\n\t\t
        3. \r\n\t\t\t

          \r\n\t\t\t\tXXXIII Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Miko\u0142aja Kopernika,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; first year, biologyoriented class attented by El\u017cbieta Konkowskiej:\r\n\t\t\t

          \r\n\r\n\t\t\t
            \r\n\t\t\t\t
          • Chwil Bart\u0142omiej;
          • \r\n\t\t\t\t
          • Czarnecka Natalia;
          • \r\n\t\t\t\t
          • Gawro\u0144ska Iga;
          • \r\n\r\n\t\t\t\t
          • Grabarczyk Marta;
          • \r\n\t\t\t\t
          • Jastrz\u0105b Katarzyna;
          • \r\n\t\t\t\t
          • Krawczak Olga;
          • \r\n\t\t\t\t
          • Krawczyk Marianna;
          • \r\n\t\t\t\t
          • Kur Natalia;
          • \r\n\t\t\t\t
          • Kwiatek Marta;
          • \r\n\r\n\t\t\t\t
          • La\u015bkiewicz Joanna;
          • \r\n\t\t\t\t
          • Machczy\u0144ska Daria;
          • \r\n\t\t\t\t
          • Miecznikowska Izabela;
          • \r\n\t\t\t\t
          • Moczulska Karolina;
          • \r\n\t\t\t\t
          • Mo\u015bcicka Aneta;
          • \r\n\t\t\t\t
          • Narloch Sabina;
          • \r\n\r\n\t\t\t\t
          • Przybysz Pawe\u0142;
          • \r\n\t\t\t\t
          • Puchta Marek;
          • \r\n\t\t\t\t
          • Ryska Cezary;
          • \r\n\t\t\t\t
          • Sandomierski Bart\u0142omiej;
          • \r\n\t\t\t\t
          • S\u0142awi\u0144ski Tomasz;
          • \r\n\t\t\t\t
          • S\u0142owik Olga;
          • \r\n\r\n\t\t\t\t
          • Starzycka Katarzyna;
          • \r\n\t\t\t\t
          • Strzelczak Karolina;
          • \r\n\t\t\t\t
          • Szafran Danuta;
          • \r\n\t\t\t\t
          • Szmigielska Magdalena;
          • \r\n\t\t\t\t
          • Szulkowska Alicja;
          • \r\n\t\t\t\t
          • \u015alusarczyk Anna;
          • \r\n\r\n\t\t\t\t
          • Tytkowska Anna.
          • \r\n\t\t\t
          \r\n\t\t\t
        4. \r\n\t\t\t\t

          \r\n\t\t\t\t\tAutorskie Niepubliczne Liceum Og\u00f3lnokszta\u0142c\u0105ce nr\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; first year, general education class attented by Micha\u0142 Friedrich:\r\n\t\t\t\t

          \r\n\r\n\t\t\t\t
            \r\n\t\t\t\t\t
          • Baraniecka Marta;
          • \r\n\r\n\t\t\t\t\t
          • Go\u0142aszewska Ewa;
          • \r\n\t\t\t\t\t
          • Kwiatkowski Micha\u0142;
          • \r\n\t\t\t\t\t
          • Machnikowska Monika;
          • \r\n\t\t\t\t\t
          • Pietrzak Bartosz;
          • \r\n\t\t\t\t\t
          • Przespolewski Przemys\u0142aw;
          • \r\n\t\t\t\t\t
          • Rosi\u0144ska Zuzanna;
          • \r\n\r\n\t\t\t\t\t
          • Sibiga Magdalena.
          • \r\n\t\t\t\t
          \r\n\t\t\t
        5. \r\n\t\t\t
        6. \r\n\t\t\t\t

          \r\n\t\t\t\t\tLXIV Liceum Og\u00f3lnokszta\u0142c\u0105ce im. St. I. Witkiewicza,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; first year, general education class attented by Daniel Zych:\r\n\t\t\t\t

          \r\n\r\n\t\t\t\t
            \r\n\r\n\t\t\t\t\t
          • Andrzejczak Kamil;
          • \r\n\t\t\t\t\t
          • Czubaj Konrad;
          • \r\n\t\t\t\t\t
          • Dr\u0105gowska Katarzyna;
          • \r\n\t\t\t\t\t
          • Gajewska Magdalena;
          • \r\n\t\t\t\t\t
          • G\u0142owacki Jan;
          • \r\n\t\t\t\t\t
          • Grad Pawe\u0142;
          • \r\n\r\n\t\t\t\t\t
          • Hnatowski Bartek;
          • \r\n\t\t\t\t\t
          • Karwowski Marcin;
          • \r\n\t\t\t\t\t
          • K\u0142os Aneta;
          • \r\n\t\t\t\t\t
          • Kozie\u0142 Barbara;
          • \r\n\t\t\t\t\t
          • Koz\u0142owska Anna;
          • \r\n\t\t\t\t\t
          • Krug Pamela;
          • \r\n\r\n\t\t\t\t\t
          • Krzosek Jakub;
          • \r\n\t\t\t\t\t
          • Luba\u015b Micha\u0142;
          • \r\n\t\t\t\t\t
          • Masewicz Natalia;
          • \r\n\t\t\t\t\t
          • Mastalerz Agnieszka;
          • \r\n\t\t\t\t\t
          • Modelska Marta;
          • \r\n\t\t\t\t\t
          • Nowak Aleksandra;
          • \r\n\r\n\t\t\t\t\t
          • Pabian Agnieszka;
          • \r\n\t\t\t\t\t
          • Paszkowska Aleksandra;
          • \r\n\t\t\t\t\t
          • Pielat Zofia;
          • \r\n\t\t\t\t\t
          • Poniecka Agnieszka;
          • \r\n\t\t\t\t\t
          • Pytlak Urszula;
          • \r\n\t\t\t\t\t
          • Rosa Karolina;
          • \r\n\r\n\t\t\t\t\t
          • Smyczy\u0144ska Kamila;
          • \r\n\t\t\t\t\t
          • Stoli\u0144ska Barbara;
          • \r\n\t\t\t\t\t
          • Szyma\u0144ska Katarzyna;
          • \r\n\t\t\t\t\t
          • \u015acibior Ewa;
          • \r\n\t\t\t\t\t
          • Witczak Magda;
          • \r\n\t\t\t\t\t
          • Witkowska Justyna;
          • \r\n\r\n\t\t\t\t\t
          • Wyrzykowska Jowita;
          • \r\n\t\t\t\t\t
          • Zi\u00f3\u0142kowska Adrianna.
          • \r\n\t\t\t\t
          \r\n\t\t\t
        7. \r\n\t \r\n\t
        ", - "left_column_de": "

        Volontariat

        \r\n\t

        \r\n\t\tSchriftsteller-Biographien und Definitionen von Epochen und Literaturgattungen\r\n in der Internetbibliothek Freie Lekt\u00fcren haben unsere Sch\u00fcler aus vier\r\n Schulen w\u00e4hrend Workshops \"Volontariat f\u00fcr Wissen\" geschrieben.\r\n\t

        \r\n\r\n\t

        \r\n\t\tDie Sch\u00fcler haben gemeinsam unter Aufsicht der Lehrer\r\n\t\tund Spezialisten -Literaturwissenschaftler - gearbeitet\r\n\t\t\r\n\r\n\t\t\tauf \"wiki\" Internetplattform\r\n\t\tvorbereitet von unserem Team\r\n\t\t2ia. Der Einsatz von Computer und Internet wurde\r\n\t\t- w\u00e4hrend der Arbeiten an Noten - f\u00fcr die Informationssuche und Informationspr\u00fcfung genutzt\r\n\t\tund gleichzeitig als notwendiges Werkzeug in den Lernprozess einbezogen.\r\n\t

        \r\n \r\n\t

        \r\n\t\tDas Projekt \"Volontariat f\u00fcr Wissen\" wurde dank der Unterst\u00fctzung umgesetzt, von\r\n\t\t\r\n\t\t\tMinisterium f\u00fcr Bildung. Preise f\u00fcr Sch\u00fcler spendeten\r\n\t\t\r\n\r\n\t\t\tVerlag unsere Buchhandlung\r\n\t\tund\r\n\t\tWydawnictwo Helion. Noten wurden im Service verifiziert\r\n\t\t\r\n\t\t\tPlagiat.pl.\r\n\t

        \r\n\r\n\t

        \r\n\t\tder Bericht \u00fcber das Projekt \"Volontariat f\u00fcr Wissen\".\r\n\t

        \r\n\r\n\t

        \r\n\t\r\n\t\r\n\t\r\n \r\n \r\n\t

        \r\n", - "title_uk": "\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0432 \u043e\u0441\u0432\u0456\u0442\u0456", - "right_column_it": null, - "title_pl": "Wolontariat dla wiedzy", - "left_column": "

        Volunteers

        \r\n\t

        Writers' biographical entries as well as periods' and genres'\r\ndefinitions placed on web library Wolne Lektury were written by students from four schools during \"Wolontariat dla wiedzy\" (\"Volunteering for knowledge\") workshops.

        \r\n The students worked together under the factual guidance of teachers and specialists - literary scholars\r\n\r\n\ton wiki platform\r\n prepared by 2ia team. At the same time the students learnt how to use a computer and the Internet while searching for necessary information how to verify the credibility of the source.

        \r\n\r\n

        \r\n\"Wolontariat dla wiedzy\" project was realised thanks to the support of \r\nMinisterstwo Edukacji Narodowej. The rewards for the student were funded by\r\n\r\nWydawnictwo Nasza Ksi\u0119garnia\r\nandWydawnictwo Helion. Each entry was verified on \r\nPlagiat.pl website.\r\n

        \r\n\r\n

        \r\n\t\tReport on completion of \"Wolontariat dla wiedzy\" project (PL).\r\n\t

        \r\n\r\n\t

        \r\n\t\r\n\t\r\n\t\r\n \r\n \r\n\t

        ", - "right_column_uk": "

        \u0410\u0432\u0442\u043e\u0440\u0438

        \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
        1. \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

          \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0413\u0456\u043c\u043d\u0430\u0437\u0456\u044f \u211640 \u0437 \u0456\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0456\u0439\u043d\u0438\u043c\u0438 \u0432\u0456\u0434\u0434\u0456\u043b\u0430\u043c\u0438 \u0432 \u041a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0456 \u0448\u043a\u0456\u043b \u2116 69 \u0456\u043c\u0435\u043d\u0456 \u0410\u0440\u043c\u0456\u0457 \u041a\u0440\u0430\u0439\u043e\u0432\u043e\u0457 \u0411\u043e\u0439\u043e\u0432\u043e\u0457 \u0413\u0440\u0443\u043f\u0438 \u201c\u041a\u0420\u0418\u0411\u0410\u0420\u201d,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0443\u043b. \u0414\u0440\u0435\u0432\u043d\u044f\u043d\u0430 8, 00-345 \u0412\u0430\u0440\u0448\u0430\u0432\u0430; \u0434\u0440\u0443\u0433\u0438\u0439 \u043a\u043b\u0430\u0441 \u043f\u0456\u0434 \u043e\u043f\u0456\u043a\u043e\u044e \u0410\u043d\u043d\u0438 \u0411\u0443\u0434\u0437\u044f\u0440\u0435\u043a-\u0424\u0440\u0456\u0434\u0440\u0456\u0445:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

          \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
            \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0411\u0443\u0440\u0434\u043e\u043d \u0424\u0456\u043b\u0456\u043f;
          • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0414\u0435\u043c\u0431\u0441\u044c\u043a\u0456 \u0411\u0430\u0440\u0442\u0435\u043a;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u042f\u0446\u043a\u043e\u0432\u0456\u0447 \u041a\u0430\u043c\u0456\u043b;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041a\u0443\u0440\u0435\u043a \u041f\u0430\u0432\u0435\u043b;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041c\u0430\u043a\u043b\u0435\u0441 \u0411\u0430\u0440\u0442\u043e\u0448;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041c\u0430\u0440\u043a\u0435\u0432\u0456\u0447 \u0404\u0440\u0435\u043c\u044f\u0448;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041c\u0456\u0433\u0434\u0430\u043b \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;
          • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041c\u0456\u043e\u0434\u0443\u0448\u0435\u0432\u0441\u044c\u043a\u0456 \u041c\u0456\u0445\u0430\u043b;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0424\u0430\u0439\u0444\u0435\u0440 \u0406\u0434\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041f\u043b\u0430\u0441\u043a\u043e\u0432\u0456\u0446\u044c\u043a\u0430 \u041a\u0430\u0440\u043e\u043b\u0456\u043d\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0421\u0430\u0439\u043b\u0435\u0440 \u0415\u0432\u0430.
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
        2. \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
        3. \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

          \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 XXXIII \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u043e\u0441\u0432\u0456\u0442\u043d\u0438\u0439 \u043b\u0456\u0446\u0435\u0439 \u0456\u043c\u0435\u043d\u0456 \u041c\u0438\u043a\u043e\u043b\u0430\u044f \u041a\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0443\u043b. \u0411\u0435\u043c\u0430 76, 01-225 \u0412\u0430\u0440\u0448\u0430\u0432\u0430; \u043f\u0435\u0440\u0448\u0438\u0439 \u043a\u043b\u0430\u0441 \u0431\u0456\u043e\u043b\u043e\u0433\u0456\u0447\u043d\u043e-\u0445\u0456\u043c\u0456\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0456\u043b\u044e \u043f\u0456\u0434 \u043e\u043f\u0456\u043a\u043e\u044e \u0415\u043b\u044c\u0436\u0431\u0454\u0442\u0438 \u041a\u043e\u043d\u043a\u043e\u0432\u0441\u044c\u043a\u043e\u0457 :\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

          \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
            \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0425\u0432\u0456\u043b \u0411\u0430\u0440\u0442\u043b\u043e\u043c\u0454\u0439;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0427\u0430\u0440\u043d\u0435\u0446\u044c\u043a\u0430 \u041d\u0430\u0442\u0430\u043b\u0456\u044f ;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0490\u0430\u0432\u0440\u043e\u043d\u0441\u044c\u043a\u0430 \u0406\u0491\u0430 ;
          • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0490\u0440\u0430\u0431\u0430\u0440\u0447\u0438\u043a \u041c\u0430\u0440\u0442\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u042f\u0430\u0441\u0442\u0436\u043e\u043c\u0431 \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041a\u0440\u0430\u0432\u0447\u0430\u043a \u041e\u043b\u044c\u0433\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041a\u0440\u0430\u0432\u0447\u0438\u043a \u041c\u0430\u0440\u0456\u0430\u043d\u043d\u0430 ;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041a\u0443\u0440 \u041d\u0430\u0442\u0430\u043b\u0456\u044f;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041a\u0432\u044f\u0442\u0435\u043a \u041c\u0430\u0440\u0442\u0430;
          • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041b\u0430\u0441\u044c\u043a\u0435\u0432\u0438\u0447 \u0419\u043e\u0430\u043d\u043d\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041c\u0430\u0445\u0447\u0438\u043d\u0441\u044c\u043a\u0430 \u0414\u0430\u0440\u0456\u044f;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041c\u0454\u0447\u043d\u0456\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u0406\u0437\u0430\u0431\u0435\u043b\u044f;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041c\u043e\u0447\u0443\u043b\u0441\u044c\u043a\u0430 \u041a\u0430\u0440\u043e\u043b\u0456\u043d\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041c\u043e\u0441\u044c\u0446\u0456\u0446\u043a\u0430 \u0410\u043d\u0435\u0442\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041d\u0430\u0440\u043b\u043e\u0445 \u0421\u0430\u0431\u0456\u043d\u0430;
          • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041f\u0448\u0438\u0431\u0438\u0448 \u041f\u0430\u0432\u0435\u043b;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041f\u0443\u0445\u0442\u0430 \u041c\u0430\u0440\u0435\u043a;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0420\u0438\u0441\u043a\u0430 \u0426\u0435\u0437\u0430\u0440\u0438;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0421\u0430\u043d\u0434\u043e\u043c\u0454\u0440\u0441\u044c\u043a\u0456 \u0411\u0430\u0440\u043b\u043e\u043c\u0454\u0439;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0421\u043b\u0430\u0432\u0456\u043d\u0441\u044c\u043a\u0456 \u0422\u043e\u043c\u0430\u0448;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0421\u043b\u043e\u0432\u0456\u043a \u041e\u043b\u044c\u0433\u0430;
          • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0421\u0442\u0430\u0436\u0438\u0446\u044c\u043a\u0430 \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0421\u0442\u0436\u0435\u043b\u0447\u0430\u043a \u041a\u0430\u0440\u043e\u043b\u0456\u043d\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0428\u0430\u0444\u0440\u0430\u043d \u0414\u0430\u043d\u0443\u0442\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0428\u043c\u0456\u0491\u0454\u043b\u044c\u0441\u044c\u043a\u0430 \u041c\u0430\u0491\u0434\u0430\u043b\u0435\u043d\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0428\u0443\u043b\u043a\u043e\u0432\u0430\u0441\u044c\u043a\u0430 \u0410\u043b\u0456\u0446\u0456\u044f;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0421\u044c\u043b\u0443\u0441\u0430\u0440\u0447\u0438\u043a \u0410\u043d\u043d\u0430;
          • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0422\u0438\u0442\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u00a0\u0410\u043d\u043d\u0430.
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
        4. \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

          \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0410\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u0439 \u041d\u0435\u043f\u0443\u0431\u043b\u0456\u0447\u043d\u0438\u0439 \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u043e\u0441\u0432\u0456\u0442\u043d\u0456\u0439 \u041b\u0456\u0446\u0435\u0439 \u2116 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 42, \u0432\u0443\u043b. \u0406\u0432\u0456\u0446\u044c\u043a\u0430 47 B, 00-735 \u0412\u0430\u0440\u0448\u0430\u0432\u0430; \u043f\u0435\u0440\u0448\u0438\u0439 \u043a\u043b\u0430\u0441 \u0437\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0456\u043b\u044e \u043f\u0456\u0434 \u043e\u043f\u0456\u043a\u043e\u044e \u041c\u0456\u0445\u0430\u043b\u0430 \u0424\u0440\u0456\u0434\u0440\u0456\u0445\u0430:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

          \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
            \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0411\u0430\u0440\u0430\u043d\u0454\u0446\u044c\u043a\u0430 \u041c\u0430\u0440\u0442\u0430;
          • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0490\u043e\u043b\u0430\u0448\u0435\u0432\u0441\u044c\u043a\u0430 \u0415\u0432\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041a\u0432\u044f\u0442\u043a\u043e\u0432\u0441\u044c\u043a\u0456 \u041c\u0456\u0445\u0430\u043b;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041c\u0430\u0445\u043d\u0456\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u041c\u043e\u043d\u0456\u043a\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041f\u0454\u0442\u0436\u0430\u043a \u0411\u0430\u0440\u0442\u043e\u0448;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041f\u0448\u0435\u0441\u043f\u043e\u043b\u0435\u0432\u0441\u044c\u043a\u0456 \u041f\u0448\u0435\u043c\u0438\u0441\u043b\u0430\u0432;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0420\u043e\u0441\u0456\u043d\u0441\u044c\u043a\u0430 \u0417\u0443\u0437\u0430\u043d\u043d\u0430;
          • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0421\u0456\u0431\u0456\u0491\u0430 \u041c\u0430\u0491\u0434\u0430\u043b\u0435\u043d\u0430.
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
        5. \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
        6. \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

          \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LXIV \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u043e\u0441\u0432\u0456\u0442\u043d\u0456\u0439 \u041b\u0456\u0446\u0435\u0439 \u0456\u043c\u0435\u043d\u0456 \u0421\u0442.\u0406. \u0412\u0456\u0442\u043a\u0454\u0432\u0456\u0447\u0430,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0443\u043b. \u0415\u043b\u044c\u0431\u043b\u043e\u043d\u0437\u044c\u043a\u0430 51, 01-737 \u0412\u0430\u0440\u0448\u0430\u0432\u0430; \u043f\u0435\u0440\u0448\u0438\u0439 \u043a\u043b\u0430\u0441 \u0437\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0456\u043b\u044e \u043f\u0456\u0434 \u043e\u043f\u0456\u043a\u043e\u044e \u0414\u0430\u043d\u0454\u043b\u0430 \u0417\u0438\u0445\u0430:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

          \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
            \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0410\u043d\u0434\u0436\u0435\u0439\u0447\u0430\u043a \u041a\u0430\u043c\u0456\u043b;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0427\u0443\u0431\u0430\u0439 \u041a\u043e\u043d\u0440\u0430\u0434;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0414\u0440\u043e\u043d\u0491\u043e\u0432\u0441\u044c\u043a\u0430 \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0490\u0430\u0454\u0432\u0441\u044c\u043a\u0430 \u041c\u0430\u0491\u0434\u0430\u043b\u0435\u043d\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0490\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u0456 \u042f\u043d;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0490\u0440\u0430\u0434 \u00a0\u041f\u0430\u0432\u0435\u043b;
          • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0413\u043d\u0430\u0442\u043e\u0432\u0441\u044c\u043a\u0456 \u0411\u0430\u0440\u0442\u0435\u043a;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041a\u0430\u0440\u0432\u043e\u0432\u0441\u044c\u043a\u0456 \u041c\u0430\u0440\u0446\u0456\u043d;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041a\u043b\u043e\u0441 \u0410\u043d\u0435\u0442\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041a\u043e\u0437\u0454\u043b \u0411\u0430\u0440\u0431\u0430\u0440\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041a\u043e\u0437\u043b\u043e\u0432\u0441\u044c\u043a\u0430 \u0410\u043d\u043d\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041a\u0440\u0443\u0491 \u041f\u0430\u043c\u0435\u043b\u0430;
          • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041a\u0436\u043e\u0441\u0435\u043a \u042f\u043a\u0443\u0431;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041b\u0443\u0431\u0430\u0441\u044c \u041c\u0456\u0445\u0430\u043b;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041c\u0430\u0441\u0435\u0432\u0456\u0447 \u041d\u0430\u0442\u0430\u043b\u0456\u044f;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041c\u0430\u0441\u0442\u0430\u043b\u0435\u0436 \u0410\u0491\u043d\u0454\u0448\u043a\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041c\u043e\u0434\u0435\u043b\u044c\u0441\u044c\u043a\u0430 \u041c\u0430\u0440\u0442\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041d\u043e\u0432\u0430\u043a \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430;
          • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041f\u0430\u0431\u044f\u043d \u0410\u0491\u043d\u0454\u0448\u043a\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041f\u0430\u0448\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041f\u0454\u043b\u0430\u0442 \u0417\u043e\u0444\u0456\u044f;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041f\u043e\u043d\u0454\u0446\u044c\u043a\u0430 \u0410\u0491\u043d\u0454\u0448\u043a\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u041f\u0438\u0442\u043b\u0430\u043a \u0423\u0440\u0448\u0443\u043b\u044f;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0420\u043e\u0441\u0430 \u041a\u0430\u0440\u043e\u043b\u0456\u043d\u0430;
          • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0421\u043c\u0447\u0438\u043d\u0441\u044c\u043a\u0430 \u041a\u0430\u043c\u0456\u043b\u044f;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0421\u0442\u043e\u043b\u0456\u043d\u0441\u044c\u043a\u0430 \u0411\u0430\u0440\u0431\u0430\u0440\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0428\u0438\u043c\u0430\u043d\u0441\u044c\u043a\u0430 \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0421\u044c\u0446\u0456\u0431\u043e\u0440 \u0415\u0432\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0412\u0456\u0442\u0447\u0430\u043a \u041c\u0430\u0491\u0434\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0412\u0456\u0442\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u042e\u0441\u0442\u0438\u043d\u0430;
          • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0412\u0438\u0436\u0438\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u0419\u043e\u0432\u0456\u0442\u0430;
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          • \u0417\u044e\u043b\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u0410\u0434\u0440\u0456\u0430\u043d\u043d\u0430.
          • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
          \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
        7. \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0
        ", - "title_en": "Volunteering for knowledge", - "left_column_pl": "

        Wolontariat

        \r\n\t

        \r\n\t\tBiogramy pisarzy oraz definicje epok i gatunk\u00f3w literackich w\r\n\t\tbibliotece internetowej Wolne Lektury napisali uczniowie\r\n\t\tczterech szk\u00f3\u0142 podczas warsztat\u00f3w \u201eWolontariat dla wiedzy\u201d.\r\n\t

        \r\n\r\n\t

        \r\n\t\tUczniowie pracowali wsp\u00f3lnie pod merytorycznym nadzorem\r\n\t\tnauczycieli i specjalist\u00f3w \u2013 literaturoznawc\u00f3w na\r\n\t\t\r\n\r\n\t\t\tplatformie internetowej wiki\r\n\t\tprzygotowanej przez zesp\u00f3\u0142\r\n\t\t2ia. Praca nad notami by\u0142a jednocze\u015bnie nauk\u0105 wykorzystywania\r\n\t\tkomputer\u00f3w i internetu do wyszukiwania informacji, a tak\u017ce\r\n\t\tweryfikowania ich wiarygodno\u015bci.\r\n\t

        \r\n\r\n\t

        \r\n\t\tProjekt \"Wolontariat dla wiedzy\" zosta\u0142 zrealizowany dzi\u0119ki\r\n\t\twsparciu\r\n\t\t\r\n\t\t\tMinisterstwa Edukacji Narodowej. Nagrody dla uczni\u00f3w ufundowali\r\n\t\t\r\n\r\n\t\t\tWydawnictwo Nasza Ksi\u0119garnia\r\n\t\ti\r\n\t\tWydawnictwo Helion. Noty zweryfikowano w serwisie\r\n\t\t\r\n\t\t\tPlagiat.pl.\r\n\t

        \r\n\r\n\t

        \r\n\t\tRaport z realizacji projektu \u201eWolontariat dla wiedzy\".\r\n\t

        \r\n\r\n\t

        \r\n\t\r\n\t\r\n\t\r\n \r\n \r\n\t

        \r\n", - "left_column_it": null, - "title_es": "Voluntariado para el conocimiento", - "left_column_ru": "

        \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e

        \r\n\r\n

        \u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0435 \u043d\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u042d\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\r\n \u043b\u0438\u0448\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043d\u0430\u0448\u0438\u043c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c-\u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c.

        \r\n\r\n \r\n

        \u041c\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0448\u043a\u043e\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Wolne Lektury \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u043c\u0438.

        \r\n \r\n

        \u041c\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443 \u043f\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0442\u0435\u043a\u0441\u0442\u043e\u0432: \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u0438\r\n \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443. \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438, \u0442\u0430\u043a \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438.\r\n \u041e\u043d\u0438, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u043c\u0438, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u044e\u0442 \u0443\u0447\u0435\u0431\u0443 \u0438 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0432 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u0443\u0448\u0430\u043d\u0438\u044f (\u0442.\u043d.\r\n \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433). \u041c\u044b \u0432\u044b\u0434\u0430\u0435\u043c \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u044b \u0438 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0430\u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \r\n \u0438 \u043a\u0430\u043a\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u043e\u043c \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \r\n \u0444\u043e\u043d\u0434\u0430. \u0423\u0447\u0435\u0431\u0430, \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0449\u0438\u0435 \u0438\u0445 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435\r\n \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0441\u043b\u0443\u0436\u0431\u0435.

        \r\n\r\n \r\n

        \u0427\u0442\u043e \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?

        \r\n \r\n

        \u0421\u0430\u043c\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u0412 \u0442\u0435\u043a\u0441\u0442\u0430\u0445, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u043c\u0438 \u0438\u0437 \u041d\u0430\u0440\u043e\u0434\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \r\n \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u043e\u0441\u043a\u0438, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u043e \u043a \u0443\u0447\u0435\u043d\u0438\u043a\u0430\u043c, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432 \u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0437\u0432\u0443\u0447\u0438\u0442 \u0430\u043d\u0430\u0445\u0440\u043e\u043d\u0438\u0447\u043d\u043e.\r\n \u041f\u0440\u0435\u0436\u043d\u0438\u0435 \u0438\u0437\u0434\u0430\u043d\u0438\u044f (\u0440\u0435\u0436\u0438\u043c \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0430) \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440. \u043f\u043e \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0438\u043b\u0438 \u0444\u043b\u0435\u043a\u0441\u0438\u0438. \u041f\u0440\u0438\u0447\u0435\u043c, \u043c\u044b \u0437\u0430\u0431\u043e\u0442\u0438\u043c\u0441\u044f \u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438\r\n \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \"\u043d\u0430\u0441\u043a\u0432\u043e\u0437\u044c\".\r\n \u0412\u043e \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0445 \u0441\u0432\u043e\u044e \u043f\u043e\u043c\u043e\u0449\u044c \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b - \u0443\u0447\u0438\u0442\u0435\u043b\u044f \u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b, \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u0432\u043e\u0438 \u0441\u043e\u0432\u0435\u0442\u044b \u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f\r\n \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439.

        \r\n \r\n

        \u041a\u0430\u043a \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0432 \u043d\u0430\u0448 \u0444\u043e\u043d\u0434?

        \r\n \r\n

        \u0412\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0441\u0438\u043c \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0438-\u043c\u0435\u0439\u043b \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 fundacja@nowoczesnapolska.org.pl.

        \r\n\r\n

        \u041c\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Wolne Lektury, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u043c.

        \r\n", - "slug": "voluntary_services", - "right_column_de": "\t

        Autoren

        \r\n\r\n\t
          \r\n\t\t
        1. \r\n\t\t\t

          \r\n\t\t\t\tGymnasium Nr. 40 mit Integrationsabteilungen \r\n\t\t\t\tSchulverbund Nr. 69 Schulname: Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d, \r\n\t\t\t\tStr. Drewniana 8, 00-345 Warszawa; 2. Klasse\r\n\t\t\t\tKlassenlehrerin: Anna Budziarek-Friedrich:\r\n\t\t\t

          \r\n\r\n\t\t\t
            \r\n\t\t\t\t
          • Burdon Filip;
          • \r\n\r\n\t\t\t\t
          • D\u0119bski Bartek;
          • \r\n\t\t\t\t
          • Jackowicz Kamil;
          • \r\n\t\t\t\t
          • Kurek Pawe\u0142;
          • \r\n\t\t\t\t
          • Makles Bartosz;
          • \r\n\t\t\t\t
          • Markiewicz Jeremiasz;
          • \r\n\t\t\t\t
          • Migda\u0142 Katarzyna;
          • \r\n\r\n\t\t\t\t
          • Mioduszewski Micha\u0142;
          • \r\n\t\t\t\t
          • Pfeiffer Ida;
          • \r\n\t\t\t\t
          • P\u0142askowicka Karolina;
          • \r\n\t\t\t\t
          • Sailer Ewa.
          • \r\n\t\t\t
          \r\n\t\t
        2. \r\n\r\n\t\t
        3. \r\n\t\t\t

          \r\n\t\t\t\tXXXIII Kopernikus Oberschule,\r\n\t\t\t\tStr. Bema 76, 01-225 Warszawa; 1. Klasse; \r\n\t\t\t\tFachbereiche: Biologie-Chemie; Klassenlehrerin: El\u017cbieta Konkowska:\r\n\t\t\t

          \r\n\r\n\t\t\t
            \r\n\t\t\t\t
          • Chwil Bart\u0142omiej;
          • \r\n\t\t\t\t
          • Czarnecka Natalia;
          • \r\n\t\t\t\t
          • Gawro\u0144ska Iga;
          • \r\n\r\n\t\t\t\t
          • Grabarczyk Marta;
          • \r\n\t\t\t\t
          • Jastrz\u0105b Katarzyna;
          • \r\n\t\t\t\t
          • Krawczak Olga;
          • \r\n\t\t\t\t
          • Krawczyk Marianna;
          • \r\n\t\t\t\t
          • Kur Natalia;
          • \r\n\t\t\t\t
          • Kwiatek Marta;
          • \r\n\r\n\t\t\t\t
          • La\u015bkiewicz Joanna;
          • \r\n\t\t\t\t
          • Machczy\u0144ska Daria;
          • \r\n\t\t\t\t
          • Miecznikowska Izabela;
          • \r\n\t\t\t\t
          • Moczulska Karolina;
          • \r\n\t\t\t\t
          • Mo\u015bcicka Aneta;
          • \r\n\t\t\t\t
          • Narloch Sabina;
          • \r\n\r\n\t\t\t\t
          • Przybysz Pawe\u0142;
          • \r\n\t\t\t\t
          • Puchta Marek;
          • \r\n\t\t\t\t
          • Ryska Cezary;
          • \r\n\t\t\t\t
          • Sandomierski Bart\u0142omiej;
          • \r\n\t\t\t\t
          • S\u0142awi\u0144ski Tomasz;
          • \r\n\t\t\t\t
          • S\u0142owik Olga;
          • \r\n\r\n\t\t\t\t
          • Starzycka Katarzyna;
          • \r\n\t\t\t\t
          • Strzelczak Karolina;
          • \r\n\t\t\t\t
          • Szafran Danuta;
          • \r\n\t\t\t\t
          • Szmigielska Magdalena;
          • \r\n\t\t\t\t
          • Szulkowska Alicja;
          • \r\n\t\t\t\t
          • \u015alusarczyk Anna;
          • \r\n\r\n\t\t\t\t
          • Tytkowska Anna.
          • \r\n\t\t\t
          \r\n\t\t\t
        4. \r\n\t\t\t\t

          \r\n\t\t\t\t\tPrivate Oberschule Nr 42,\r\n\t\t\t\t\tStr. Iwicka 47 B, 00-735 Warszawa; 1. Klasse\r\n\t\t\t\t\tFachbereich: Allgemeinbildung; Klassenlehrer: Micha\u0142 Friedrich:\r\n\t\t\t\t

          \r\n\r\n\t\t\t\t
            \r\n\t\t\t\t\t
          • Baraniecka Marta;
          • \r\n\r\n\t\t\t\t\t
          • Go\u0142aszewska Ewa;
          • \r\n\t\t\t\t\t
          • Kwiatkowski Micha\u0142;
          • \r\n\t\t\t\t\t
          • Machnikowska Monika;
          • \r\n\t\t\t\t\t
          • Pietrzak Bartosz;
          • \r\n\t\t\t\t\t
          • Przespolewski Przemys\u0142aw;
          • \r\n\t\t\t\t\t
          • Rosi\u0144ska Zuzanna;
          • \r\n\r\n\t\t\t\t\t
          • Sibiga Magdalena.
          • \r\n\t\t\t\t
          \r\n\t\t\t
        5. \r\n\t\t\t
        6. \r\n\t\t\t\t

          \r\n\t\t\t\t\tLXIV Witkiewicz Oberschule,\r\n\t\t\t\t\tStr. Elbl\u0105ska 51, 01-737 Warszawa; 1. Klasse, \r\n\t\t\t\t\tFachbereich: Allgemeinbildung; Klassenlehrer: Daniel Zych:\r\n\t\t\t\t

          \r\n\r\n\t\t\t\t
            \r\n\r\n\t\t\t\t\t
          • Andrzejczak Kamil;
          • \r\n\t\t\t\t\t
          • Czubaj Konrad;
          • \r\n\t\t\t\t\t
          • Dr\u0105gowska Katarzyna;
          • \r\n\t\t\t\t\t
          • Gajewska Magdalena;
          • \r\n\t\t\t\t\t
          • G\u0142owacki Jan;
          • \r\n\t\t\t\t\t
          • Grad Pawe\u0142;
          • \r\n\r\n\t\t\t\t\t
          • Hnatowski Bartek;
          • \r\n\t\t\t\t\t
          • Karwowski Marcin;
          • \r\n\t\t\t\t\t
          • K\u0142os Aneta;
          • \r\n\t\t\t\t\t
          • Kozie\u0142 Barbara;
          • \r\n\t\t\t\t\t
          • Koz\u0142owska Anna;
          • \r\n\t\t\t\t\t
          • Krug Pamela;
          • \r\n\r\n\t\t\t\t\t
          • Krzosek Jakub;
          • \r\n\t\t\t\t\t
          • Luba\u015b Micha\u0142;
          • \r\n\t\t\t\t\t
          • Masewicz Natalia;
          • \r\n\t\t\t\t\t
          • Mastalerz Agnieszka;
          • \r\n\t\t\t\t\t
          • Modelska Marta;
          • \r\n\t\t\t\t\t
          • Nowak Aleksandra;
          • \r\n\r\n\t\t\t\t\t
          • Pabian Agnieszka;
          • \r\n\t\t\t\t\t
          • Paszkowska Aleksandra;
          • \r\n\t\t\t\t\t
          • Pielat Zofia;
          • \r\n\t\t\t\t\t
          • Poniecka Agnieszka;
          • \r\n\t\t\t\t\t
          • Pytlak Urszula;
          • \r\n\t\t\t\t\t
          • Rosa Karolina;
          • \r\n\r\n\t\t\t\t\t
          • Smyczy\u0144ska Kamila;
          • \r\n\t\t\t\t\t
          • Stoli\u0144ska Barbara;
          • \r\n\t\t\t\t\t
          • Szyma\u0144ska Katarzyna;
          • \r\n\t\t\t\t\t
          • \u015acibior Ewa;
          • \r\n\t\t\t\t\t
          • Witczak Magda;
          • \r\n\t\t\t\t\t
          • Witkowska Justyna;
          • \r\n\r\n\t\t\t\t\t
          • Wyrzykowska Jowita;
          • \r\n\t\t\t\t\t
          • Zi\u00f3\u0142kowska Adrianna.
          • \r\n\t\t\t\t
          \r\n\t\t\t
        7. \r\n\t \r\n\t
        \r\n", - "left_column_es": "

        Voluntariado

        \r\n\r\n\t

        \r\n\r\n\t\tBiograf\u00edas de escritores y definiciones de las \u00e9pocas y g\u00e9neros literarios en la biblioteca virtual de Wolne Lektury fueron escritas por estudiantes de cuatro escuelas durante los talleres \u201cVoluntariado para el conocimiento\u201d.

        \r\n\r\n\r\n\r\n\t

        \r\n\r\n\t\tLos estudiantes trabajaron juntos bajo la supervisi\u00f3n de profesores y especialistas-fil\u00f3logos en\r\n\r\n\t\t\r\n\r\n\r\n\r\n\t\t\tla plataforma virtual wiki \r\n\r\n\t\tpreparada por el equipo\r\n\r\n\t\t2ia. Gracias a este trabajo los estudiantes aprendieron a usar los ordenadores e internet para encontrar informaciones y verificar si se les puede confiar.\t

        \r\n\r\n\r\n\r\n\t

        \r\n\r\n\t\tEl proyecto \"Voluntariado para el conocimiento\" se pudo realizar gracias al apoyo del\t\t\r\n\r\n\t\t\tMinisterio de la Educaci\u00f3n Nacional. Los premios para los estudiantes fueron fundados por\r\n\r\n\t\t\r\n\r\n\r\n\r\n\t\t\tEditorial Nasza Ksi\u0119garnia\r\n\r\n\t\ty\r\n\r\n\t\tEditorial Helion. Las notas fueron verificadas en la p\u00e1gina\r\n\r\n\t\t\r\n\r\n\t\t\tPlagiat.pl.\r\n\r\n\t

        \r\n\r\n\r\n\r\n\t

        \r\n\r\n\t\t El informe de la realizaci\u00f3n del proyecto \u201cVoluntariado para el conocimiento\u201d.\r\n\r\n\t

        \r\n\r\n\r\n\r\n\t

        \r\n\r\n\t\r\n\r\n\t\r\n\r\n\t\r\n\r\n \r\n\r\n \r\n\r\n\t

        ", - "left_column_en": "

        Volunteers

        \r\n\t

        Writers' biographical entries as well as periods' and genres'\r\ndefinitions placed on web library Wolne Lektury were written by students from four schools during \"Wolontariat dla wiedzy\" (\"Volunteering for knowledge\") workshops.

        \r\n The students worked together under the factual guidance of teachers and specialists - literary scholars\r\n\r\n\ton wiki platform\r\n prepared by 2ia team. At the same time the students learnt how to use a computer and the Internet while searching for necessary information how to verify the credibility of the source.

        \r\n\r\n

        \r\n\"Wolontariat dla wiedzy\" project was realised thanks to the support of \r\nMinisterstwo Edukacji Narodowej. The rewards for the student were funded by\r\n\r\nWydawnictwo Nasza Ksi\u0119garnia\r\nandWydawnictwo Helion. Each entry was verified on \r\nPlagiat.pl website.\r\n

        \r\n\r\n

        \r\n\t\tReport on completion of \"Wolontariat dla wiedzy\" project (PL).\r\n\t

        \r\n\r\n\t

        \r\n\t\r\n\t\r\n\t\r\n \r\n \r\n\t

        ", - "right_column_fr": "\t

        Auteurs

        \r\n\r\n\t
          \r\n\t\t
        1. \r\n\t\t\t

          \r\n\t\t\t\tColl\u00e8ge no. 40 avec classes d'int\u00e9gration dans l'Ensemble Scolaire no. 69 de Armia Krajowa Grupa Bojowa \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; classe seconde sous la supervision de\r\n\tAnna Budziarek-Friedrich:\r\n\t\t\t

          \r\n\r\n\t\t\t
            \r\n\t\t\t\t
          • Burdon Filip;
          • \r\n\r\n\t\t\t\t
          • D\u0119bski Bartek;
          • \r\n\t\t\t\t
          • Jackowicz Kamil;
          • \r\n\t\t\t\t
          • Kurek Pawe\u0142;
          • \r\n\t\t\t\t
          • Makles Bartosz;
          • \r\n\t\t\t\t
          • Markiewicz Jeremiasz;
          • \r\n\t\t\t\t
          • Migda\u0142 Katarzyna;
          • \r\n\r\n\t\t\t\t
          • Mioduszewski Micha\u0142;
          • \r\n\t\t\t\t
          • Pfeiffer Ida;
          • \r\n\t\t\t\t
          • P\u0142askowicka Karolina;
          • \r\n\t\t\t\t
          • Sailer Ewa.
          • \r\n\t\t\t
          \r\n\t\t
        2. \r\n\r\n\t\t
        3. \r\n\t\t\t

          \r\n\t\t\t\tXXXIII Lyc\u00e9e g\u00e9n\u00e9ral de Miko\u0142aj Kopernik,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; classe premi\u00e8re, orientation biologie-chimique\r\n sous la supervision de El\u017cbieta Konkowska:\r\n\t\t\t

          \r\n\r\n\t\t\t
            \r\n\t\t\t\t
          • Chwil Bart\u0142omiej;
          • \r\n\t\t\t\t
          • Czarnecka Natalia;
          • \r\n\t\t\t\t
          • Gawro\u0144ska Iga;
          • \r\n\r\n\t\t\t\t
          • Grabarczyk Marta;
          • \r\n\t\t\t\t
          • Jastrz\u0105b Katarzyna;
          • \r\n\t\t\t\t
          • Krawczak Olga;
          • \r\n\t\t\t\t
          • Krawczyk Marianna;
          • \r\n\t\t\t\t
          • Kur Natalia;
          • \r\n\t\t\t\t
          • Kwiatek Marta;
          • \r\n\r\n\t\t\t\t
          • La\u015bkiewicz Joanna;
          • \r\n\t\t\t\t
          • Machczy\u0144ska Daria;
          • \r\n\t\t\t\t
          • Miecznikowska Izabela;
          • \r\n\t\t\t\t
          • Moczulska Karolina;
          • \r\n\t\t\t\t
          • Mo\u015bcicka Aneta;
          • \r\n\t\t\t\t
          • Narloch Sabina;
          • \r\n\r\n\t\t\t\t
          • Przybysz Pawe\u0142;
          • \r\n\t\t\t\t
          • Puchta Marek;
          • \r\n\t\t\t\t
          • Ryska Cezary;
          • \r\n\t\t\t\t
          • Sandomierski Bart\u0142omiej;
          • \r\n\t\t\t\t
          • S\u0142awi\u0144ski Tomasz;
          • \r\n\t\t\t\t
          • S\u0142owik Olga;
          • \r\n\r\n\t\t\t\t
          • Starzycka Katarzyna;
          • \r\n\t\t\t\t
          • Strzelczak Karolina;
          • \r\n\t\t\t\t
          • Szafran Danuta;
          • \r\n\t\t\t\t
          • Szmigielska Magdalena;
          • \r\n\t\t\t\t
          • Szulkowska Alicja;
          • \r\n\t\t\t\t
          • \u015alusarczyk Anna;
          • \r\n\r\n\t\t\t\t
          • Tytkowska Anna.
          • \r\n\t\t\t
          \r\n\t\t\t
        4. \r\n\t\t\t\t

          \r\n\t\t\t\t\tLyc\u00e9e priv\u00e9 g\u00e9n\u00e9ral no. 42, ul. Iwicka 47 B, 00-735 Warszawa; classe premi\u00e8re, orientation g\u00e9n\u00e9rale, sous la supervision de Micha\u0142 Friedrich:\r\n\t\t\t\t

          \r\n\r\n\t\t\t\t
            \r\n\t\t\t\t\t
          • Baraniecka Marta;
          • \r\n\r\n\t\t\t\t\t
          • Go\u0142aszewska Ewa;
          • \r\n\t\t\t\t\t
          • Kwiatkowski Micha\u0142;
          • \r\n\t\t\t\t\t
          • Machnikowska Monika;
          • \r\n\t\t\t\t\t
          • Pietrzak Bartosz;
          • \r\n\t\t\t\t\t
          • Przespolewski Przemys\u0142aw;
          • \r\n\t\t\t\t\t
          • Rosi\u0144ska Zuzanna;
          • \r\n\r\n\t\t\t\t\t
          • Sibiga Magdalena.
          • \r\n\t\t\t\t
          \r\n\t\t\t
        5. \r\n\t\t\t
        6. \r\n\t\t\t\t

          \r\n\t\t\t\t\tLXIV Lyc\u00e9e g\u00e9n\u00e9ral de St. I. Witkiewicz,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; classe premi\u00e8re, orientation g\u00e9n\u00e9rale, sous la supervision de Daniel Zych:\r\n\t\t\t\t

          \r\n\r\n\t\t\t\t
            \r\n\r\n\t\t\t\t\t
          • Andrzejczak Kamil;
          • \r\n\t\t\t\t\t
          • Czubaj Konrad;
          • \r\n\t\t\t\t\t
          • Dr\u0105gowska Katarzyna;
          • \r\n\t\t\t\t\t
          • Gajewska Magdalena;
          • \r\n\t\t\t\t\t
          • G\u0142owacki Jan;
          • \r\n\t\t\t\t\t
          • Grad Pawe\u0142;
          • \r\n\r\n\t\t\t\t\t
          • Hnatowski Bartek;
          • \r\n\t\t\t\t\t
          • Karwowski Marcin;
          • \r\n\t\t\t\t\t
          • K\u0142os Aneta;
          • \r\n\t\t\t\t\t
          • Kozie\u0142 Barbara;
          • \r\n\t\t\t\t\t
          • Koz\u0142owska Anna;
          • \r\n\t\t\t\t\t
          • Krug Pamela;
          • \r\n\r\n\t\t\t\t\t
          • Krzosek Jakub;
          • \r\n\t\t\t\t\t
          • Luba\u015b Micha\u0142;
          • \r\n\t\t\t\t\t
          • Masewicz Natalia;
          • \r\n\t\t\t\t\t
          • Mastalerz Agnieszka;
          • \r\n\t\t\t\t\t
          • Modelska Marta;
          • \r\n\t\t\t\t\t
          • Nowak Aleksandra;
          • \r\n\r\n\t\t\t\t\t
          • Pabian Agnieszka;
          • \r\n\t\t\t\t\t
          • Paszkowska Aleksandra;
          • \r\n\t\t\t\t\t
          • Pielat Zofia;
          • \r\n\t\t\t\t\t
          • Poniecka Agnieszka;
          • \r\n\t\t\t\t\t
          • Pytlak Urszula;
          • \r\n\t\t\t\t\t
          • Rosa Karolina;
          • \r\n\r\n\t\t\t\t\t
          • Smyczy\u0144ska Kamila;
          • \r\n\t\t\t\t\t
          • Stoli\u0144ska Barbara;
          • \r\n\t\t\t\t\t
          • Szyma\u0144ska Katarzyna;
          • \r\n\t\t\t\t\t
          • \u015acibior Ewa;
          • \r\n\t\t\t\t\t
          • Witczak Magda;
          • \r\n\t\t\t\t\t
          • Witkowska Justyna;
          • \r\n\r\n\t\t\t\t\t
          • Wyrzykowska Jowita;
          • \r\n\t\t\t\t\t
          • Zi\u00f3\u0142kowska Adrianna.
          • \r\n\t\t\t\t
          \r\n\t\t\t
        7. \r\n\t \r\n\t
        \r\n", - "title_ru": "\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0437\u043d\u0430\u043d\u0438\u0439", - "title_it": null - } - }, - { - "pk": 3, - "model": "infopages.infopage", - "fields": { - "title_de": "\u00dcber das Projekt", - "left_column_uk": "\ufeff{% load reporting_stats %}\r\n\r\n

        Wolne Lektury \u0446\u0435 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0430 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0430 24 \u0433\u043e\u0434\u0438\u043d\u0438 \u043d\u0430 \u0434\u043e\u0431\u0443, 365 \u0434\u043d\u0456\u0432 \u0432 \u0440\u043e\u0446\u0456 \u0456 \u043f\u043e\u0432\u043d\u0456\u0441\u0442\u044e \u0431\u0435\u0437\u043a\u043e\u0448\u0442\u043e\u0432\u043d\u0430. \u0412 \u0457\u0457 \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0457 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f {% count_books %} \u0442\u0432\u043e\u0440\u0456\u0432, \u0432 \u0442\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0456 \u0431\u0430\u0433\u0430\u0442\u043e \u0448\u043a\u0456\u043b\u044c\u043d\u043e\u0457 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0438, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043e\u0457 \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u043e\u043c \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u043e\u0441\u0432\u0456\u0442\u0438, \u044f\u043a\u0430 \u0443\u0432\u0456\u0439\u0448\u043b\u0430 \u0432\u0436\u0435 \u0434\u043e \u0441\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0434\u0431\u0430\u043d\u043d\u044f. \u0423\u0441\u0456 \u0442\u0432\u043e\u0440\u0438 \u0441\u0442\u0430\u0440\u0430\u043d\u043d\u043e \u043e\u043f\u0440\u0430\u0446\u044c\u043e\u0432\u0430\u043d\u0456 - \u0434\u043e \u043d\u0438\u0445 \u0434\u043e\u0434\u0430\u044e\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0438, \u043c\u043e\u0442\u0438\u0432\u0438 \u0456 \u043d\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u0432 \u0434\u0435\u043a\u0456\u043b\u044c\u043a\u043e\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 - HTML , TXT , PDF, EPUB, MOBI. \u0423 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 \u043c\u043e\u0436\u043d\u0430 \u0442\u0430\u043a\u043e\u0436 \u0437\u043d\u0430\u0439\u0442\u0438 \u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u043e\u0442\u0435\u043d\u044c \u0430\u0443\u0434\u0456\u043e\u043a\u043d\u0438\u0433 \u0443 \u0432\u0438\u043a\u043e\u043d\u0430\u043d\u043d\u0456 \u0442\u0430\u043a\u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u0456\u0432 \u044f\u043a: \u0414\u0430\u043d\u0443\u0442\u0430 \u0421\u0442\u0435\u043d\u043a\u0430, \u042f\u043d \u041f\u0435\u0448\u0435\u043a \u0447\u0438 \u0410\u043d\u0434\u0436\u0435\u0439 \u0425\u0438\u0440\u0430. \u041c\u043e\u0436\u043d\u0430 \u0457\u0445 \u0441\u043b\u0443\u0445\u0430\u0442\u0438 \u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 MP3 i Ogg Vorbis. \u0410\u0443\u0434\u0456\u043e\u043a\u043d\u0438\u0433\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0456 \u0442\u0430\u043a\u043e\u0436 \u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0456 DAISY , \u044f\u043a\u0438\u0439 \u043f\u0440\u0438\u0441\u0442\u043e\u0441\u043e\u0432\u0430\u043d\u0438\u0439 \u0434\u043b\u044f \u0441\u043b\u0430\u0431\u043e\u0437\u043e\u0440\u0438\u0445 \u0442\u0430 \u0441\u043b\u0456\u043f\u0438\u0445 \u043e\u0441\u0456\u0431, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0434\u043b\u044f \u0442\u0438\u0445, \u0445\u0442\u043e \u043c\u0430\u0454 \u0442\u0440\u0443\u0434\u043d\u043e\u0449\u0456 \u0437 \u0447\u0438\u0442\u0430\u043d\u043d\u044f\u043c.

        \r\n\r\n

        \u0411\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0430 Wolne Lektury \u0442\u0430\u043a\u043e\u0436 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0445 \u0430\u043f\u043b\u0456\u043a\u0430\u0446\u0456\u0439 \u2013 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0456 Android, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0456 iOS.

        \r\n\r\n

        \u0423\u0441\u0456 \u0442\u0432\u043e\u0440\u0438 \u0440\u043e\u0437\u043c\u0456\u0449\u0435\u043d\u0456 \u0443 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 Wolne Lektury \u043c\u043e\u0436\u043d\u0430 \u043b\u0435\u0433\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0430\u0442\u0438, \u0441\u043b\u0443\u0445\u0430\u0442\u0438, \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0443\u0432\u0430\u0442\u0438 \u043d\u0430 \u0432\u043b\u0430\u0441\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u2019\u044e\u0442\u0435\u0440, \u043d\u0430\u0434\u0430\u0432\u0430\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u043d\u0438\u0445 \u0456\u043d\u0448\u0438\u043c \u0442\u0430 \u0446\u0438\u0442\u0443\u0432\u0430\u0442\u0438.

        \r\n", - "main_page": 1, - "right_column_pl": "

        Wolne Lektury to projekt fundacji Nowoczesna Polska realizowany pro publico bono, we wsp\u00f3\u0142pracy z Bibliotek\u0105 Narodow\u0105, Bibliotek\u0105 \u015alask\u0105 oraz Bibliotek\u0105 Elbl\u0105sk\u0105 pod patronatem Ministerstwa Edukacji Narodowej, Ministerstwa Kultury i Dziedzictwa Narodowego oraz Stowarzyszenia Pisarzy Polskich. W Komitecie Honorowym Wolnych Lektur zasiadaj\u0105: prof. Maria Janion, prof. Gra\u017cyna Borkowska, prof. Przemys\u0142aw Czapli\u0144ski, prof. Mieczys\u0142aw D\u0105browski, prof. Ewa Kraskowska, prof. Ma\u0142gorzata Czermi\u0144ska, prof. Jerzy Jarz\u0119bski i prof. Piotr \u015aliwi\u0144ski.

        \r\n\r\n

        Wi\u0119kszo\u015b\u0107 utwor\u00f3w w bibliotece nie jest chroniona prawem autorskim i znajduje si\u0119 w domenie publicznej, co oznacza \u017ce mo\u017cna je swobodnie publikowa\u0107 i rozpowszechnia\u0107. Je\u015bli utw\u00f3r opatrzony jest dodatkowymi materia\u0142ami (przypisy, motywy literackie etc.), kt\u00f3re podlegaj\u0105 prawu autorskiemu, to te dodatkowe materia\u0142y udost\u0119pnione s\u0105 na licencji Uznanie autorstwa-Na tych samych warunkach 3.0. Publikujemy r\u00f3wnie\u017c kilka utwor\u00f3w, kt\u00f3re autorzy lub spadkobiercy praw udost\u0119pnili na wolnej licencji Uznanie autorstwa-Na tych samych warunkach 3.0.

        \r\n\r\nKontakt: wolnelektury@nowoczesnapolska.org.pl", - "right_column_lt": "\ufeff\r\n

        Wolne Lektury - tai fondo \u0160iuolaikin\u0117 Lenkija \u012fgyvendinamas pro publico bono projektas, bendradarbiaujant su Nacionaline biblioteka, Silezijos biblioteka bei Elbingo biblioteka ir remiamas Nacionalinio \u0161vietimo ministerijos, Kult\u016bros ir nacionalinio paveldo ministerijos bei Lenkijos ra\u0161ytoj\u0173 asociacijos. Wolne Lektury Garb\u0117s komiteto nariai: prof. Maria Janion, prof. Gra\u017cyna Borkowska, prof. Przemys\u0142aw Czapli\u0144ski, prof. Mieczys\u0142aw D\u0105browski, prof. Ewa Kraskowska, prof. Ma\u0142gorzata Czermi\u0144ska, prof. Jerzy Jarz\u0119bski ir prof. Piotr \u015aliwi\u0144ski.

        \r\n\r\n

        Dauguma \u0161ios bibliotekos k\u016brini\u0173 n\u0117ra autorini\u0173 teisi\u0173 saugomi ir yra vie\u0161ai prieinami, tai rei\u0161kia, kad gali b\u016bti laisvai naudojami bei platinami. Jei su k\u016briniu yra pateikiamos bet kokios papildomos autorini\u0173 teisi\u0173 saugomos med\u017eiagos (kaip pastabos, motyvai ir t.t.), tai \u0161ios med\u017eiagos yra prieinamos pagal licencj\u0105 Autoryst\u0117s pripa\u017einimas \u2013 pagal tas pa\u010dias s\u0105lygas 3.0. Publikuojami taip pat keli k\u016briniai, autori\u0173 ir teisi\u0173 \u012fp\u0117dini\u0173 pateikti pagal laisv\u0105 licencij\u0105 Autoryst\u0117s pripa\u017einimas \u2013 pagal tas pa\u010dias s\u0105lygas 3.0.

        \r\n\r\nKontaktas: wolnelektury@nowoczesnapolska.org.pl\r\n\r\n", - "left_column_lt": "\ufeff{% load reporting_stats %}\r\n\t\r\n

        Wolne Lektury tai visi\u0161kai nemokama internetin\u0117 biblioteka dirbanti 24 valandas per par\u0105, 365 dienas per metus. Jos rinkinyje yra {% count_books %} k\u016brinys/iai/i\u0173, tarp j\u0173 daug privalomos literat\u016bros knyg\u0173 Lenkijos Nacionalinio \u0161vietimo ministerijos (MEN) rekomenduojam\u0173, kurios jau yra vie\u0161ai prieinamos. Visi k\u016briniai yra tinkamai apra\u0161yti (pateikiamos i\u0161na\u0161os, motyvai) ir prieinami keliais formatais - HTML , TXT , PDF, EPUB, MOBI. Bibliotekoje yra keli \u0161imtai audio knyg\u0173, aktori\u0173, toki\u0173 kaip Danuta Stenka, Jan Peszek bei Andrzej Chyra, skaitom\u0173. Galima jas klausytis MP3 ir Ogg Vorbis formatais. Audio knygos yra taip pat prieinamos DAISY formatu, silpno reg\u0117jimo \u017emon\u0117ms, akliesiems bei skaitymo problem\u0173 turintiems \u017emon\u0117ms pritaikomu.

        \r\n\r\n

        Biblioteka Wolne Lektury yra prieinama naudojant mobili\u0105sias programas skirtas operacinei sistemai Android bei sistemai iOS.

        \r\n\r\n\r\n

        Visus internetin\u0117je bibliotekoje Wolne Lektury esan\u010dius k\u016brinius galima pagal teis\u0119 nemokamai per\u017ei\u016br\u0117ti, klausytis, atsisi\u0173sti bei bendrinti kitiems ir cituoti.

        \r\n\r\n\t\r\n", - "title_fr": "Sur le projet", - "right_column_ru": "\ufeff

        Wolne Lektury \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c pro publico bono \u0424\u043e\u043d\u0434\u0430 Nowoczesna Polska. \u041c\u044b \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u043c \u0441 \u041d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439, \u0421\u0438\u043b\u0435\u0437\u0441\u043a\u043e\u0439 \u0411\u0438\u0431\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0430 \u0442\u0430\u043a\u0436\u0435 \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0433\u043e\u0440\u043e\u0434\u0430 \u0415\u043b\u044c\u0431\u043b\u043e\u043d\u0433\u0430. \u041f\u043e\u0434 \u044d\u0433\u0438\u0434\u043e\u0439 \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u044b \u0438 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u041e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439. \u0412 \u041f\u043e\u0447\u0435\u0442\u043d\u043e\u043c \u043a\u043e\u043c\u0438\u0442\u0435\u0442\u0435 \u0444\u043e\u043d\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f: \u043f\u0440\u043e\u0444. \u041c\u0430\u0440\u0438\u044f \u042f\u043d\u0435\u043d, \u043f\u0440\u043e\u0444. \u0413\u0440\u0430\u0436\u0438\u043d\u0430 \u0411\u043e\u0440\u043a\u043e\u0432\u0441\u043a\u0430, \u043f\u0440\u043e\u0444. \u041f\u0448\u0435\u043c\u044b\u0441\u043b\u0430\u0432 \u0427\u0430\u043f\u043b\u0438\u043d\u044c\u0441\u043a\u0438, \u043f\u0440\u043e\u0444. \u041c\u0435\u0447\u044b\u0441\u043b\u0430\u0432 \u0414\u043e\u043c\u0431\u0440\u043e\u0432\u0441\u043a\u0438, \u043f\u0440\u043e\u0444. \u0415\u0432\u0430 \u041a\u0440\u0430\u0441\u043a\u043e\u0432\u0441\u043a\u0430, \u043f\u0440\u043e\u0444. \u041c\u0430\u043b\u0433\u043e\u0436\u0430\u0442\u0430 \u0427\u0435\u0440\u043c\u0438\u043d\u044c\u0441\u043a\u0430, \u043f\u0440\u043e\u0444. \u0415\u0436\u0438 \u042f\u0436\u0435\u043c\u0431\u0441\u043a\u0438, \u043f\u0440\u043e\u0444. \u041f\u0435\u0442\u0440 \u0421\u043b\u0438\u0432\u0438\u043d\u044c\u0441\u043a\u0438.

        \r\n\r\n

        \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043a\u043e\u043d\u043e\u043c \u043e\u0431 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0430\u0445 \u0438 \u043e\u043d\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u043a \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u0434\u043e\u043c\u0435\u043d\u0443. \r\n\u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043d\u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b (\u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0435 \u043c\u043e\u0442\u0438\u0432\u044b, \u0438 \u0442.\u0434.), \r\n\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \r\n \u041f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 - 3.0. \r\n\u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043e\u0442 \u0441\u0430\u043c\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 \u0438\u0445 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0435\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439. \u041f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 3.0.

        \r\n\r\n\u041a\u043e\u043d\u0442\u0430\u043a\u0442: : wolnelektury@nowoczesnapolska.org.pl\r\n", - "left_column_fr": "{% load reporting_stats %}\r\n\r\n

        Wolne Lektury (Lectures Libres) c'est une biblioth\u00e8que en ligne ouverte 24 heures sur 24, 365 jours par an et compl\u00e8tement gratuite. Dans la collection de la biblioth\u00e8que il y a {% count_books %} ouvrages, y compris beaucoup de lectures scolaires recommand\u00e9es par le Minist\u00e8re de l'\u00c9ducation nationale polonais et appartenant d\u00e9j\u00e0 au domaine public. Tous les ouvrages sont convenablement r\u00e9dig\u00e9s; ils sont accompagn\u00e9s de plusieurs annotations et motifs litt\u00e9raires et sont accessibles aux quelques formats: HTML , TXT , PDF, EPUB, MOBI. Dans la biblioth\u00e8que il y a aussi quelques centaines de livres audio lus par les acteurs connus comme, par exemple: Danuta Stenka, Jan Peszek ou Andrzej Chyra. On peut les \u00e9couter aux formats: MP3 et Ogg Vorbis. Les livres audio sont aussi accessibles au format DAISY appropri\u00e9 \u00e0 des non voyants et \u00e0 des malvoyants et \u00e0 des personnes qui ont des difficult\u00e9s \u00e0 lire.

        \r\n\r\n

        La biblioth\u00e8que Wolne Lektury est accessible par l'interm\u00e9diaire des applications mobiles sur le syst\u00e8me Android et sur le syst\u00e8me iOS.

        \r\n\r\n

        Tous les ouvrages publi\u00e9s sur le site de la biblioth\u00e8que Wolne Lektury peuvent \u00eatre - conform\u00e9ment \u00e0 la loi polonaise - feuillet\u00e9s, \u00e9cout\u00e9s et t\u00e9l\u00e9charg\u00e9s sur votre ordinateur gratuitement. Il est aussi permis de les rendre accessibles \u00e0 d'autres personnes et de les citer.

        \r\n", - "title": "About the project", - "title_lt": "\ufeffApie projekt\u0105", - "right_column": "

        Wolne Lektury is a pro bono project developed by the Modern Poland Foundation in cooperation with Polish libraries \u2013 the National Library, the Library of Silesia and the Library of Elbl\u0105g, under the Ministry of Culture and National Heritage and the Assocciation of Polish Writers auspices. The honorary committee members are: Prof. Maria Janion, Prof. Gra\u017cyna Borkowska, Prof. Przemys\u0142aw Czapli\u0144ski, Prof. Mieczys\u0142aw D\u0105browski, Prof. Ewa Kraskowska, Prof. Ma\u0142gorzata Czermi\u0144ska, Prof. Jerzy Jarz\u0119bski and Prof. Piotr \u015aliwi\u0144ski.

        \r\n\r\n

        The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence Creative Commons Attribution-ShareAlike. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence Creative Commons Attribution-ShareAlike.

        \r\n\r\nContact: wolnelektury@nowoczesnapolska.org.pl", - "right_column_es": "

        Wolne Lektury es un proyecto creado por la Fundaci\u00f3n Polonia Moderna, realizado pro publico bono en colaboraci\u00f3n con la Biblioteca Nacional, la Biblioteca de Silesia y la Biblioteca de Elblag bajo los auspicios del Ministerio de Cultura y Patrimonio Nacional y la Adociaci\u00f3n de Escritores Polacos. El Comit\u00e9 de Honor de Wolne Lektury re\u00fane a los profesores: Maria Janion, Gra\u017cyna Borkowska, Przemys\u0142aw Czapli\u0144ski, Mieczys\u0142aw D\u0105browski, Ewa Kraskowska, Ma\u0142gorzata Czermi\u0144ska, Jerzy Jarz\u0119bski y Piotr \u015aliwi\u0144ski.

        \r\n\r\n

        La mayor\u00eda de los textos de la Biblioteca est\u00e1n libres de derechos de autor y son de dominio p\u00fablico, por lo tanto se pueden publicar y difundir libremente. Si un texto tiene materiales adicionales (notas a pie de p\u00e1gina, temas literarios, etc.), que no est\u00e9n libres de derechos de autor, dichos materiales est\u00e1n publicados bajo la licencia Reconocimiento-Compartir bajo la misma licencia 3.0.Tambi\u00e9n publicamos algunos textos legados a el dominio p\u00fablico por los autores o heredores bajo la licencia Reconocimiento-Compartir bajo la misma licencia 3.0.

        \r\n\r\nContacto: wolnelektury@nowoczesnapolska.org.pl \r\n", - "right_column_en": "

        Wolne Lektury is a pro bono project developed by the Modern Poland Foundation in cooperation with Polish libraries \u2013 the National Library, the Library of Silesia and the Library of Elbl\u0105g, under the Ministry of Culture and National Heritage and the Assocciation of Polish Writers auspices. The honorary committee members are: Prof. Maria Janion, Prof. Gra\u017cyna Borkowska, Prof. Przemys\u0142aw Czapli\u0144ski, Prof. Mieczys\u0142aw D\u0105browski, Prof. Ewa Kraskowska, Prof. Ma\u0142gorzata Czermi\u0144ska, Prof. Jerzy Jarz\u0119bski and Prof. Piotr \u015aliwi\u0144ski.

        \r\n\r\n

        The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence Creative Commons Attribution-ShareAlike. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence Creative Commons Attribution-ShareAlike.

        \r\n\r\nContact: wolnelektury@nowoczesnapolska.org.pl", - "left_column_de": "{% load reporting_stats %}\r\n\r\n

        Wolne Lektury ist eine Internetbibliothek, die 24 Stunden zug\u00e4nglich ist, 365 Tage im Jahr, dazu v\u00f6llig kostenlos. Sie beinh\u00e4lt {% count_books %} Werke, darunter viele Schullekt\u00fcren, die durch das polnische Bildungsministerium empfohlen werden und die zur Gemeinfreiheit geh\u00f6ren. Alle Werke werden entsprechend bearbeitet - mit Fu\u00dfnoten und Motiven versehen sowie in verschiedenen Formaten zug\u00e4nglich - HTML , TXT, PDF, EPUB, MOBI. In der Bibliothek befinden sich auch einige hundert von H\u00f6rb\u00fcchern, die von bekannten polnischen Schauspielern wie Danuta Stenka, Jan Peszek oder Andrzej Chyra vorgelesen werden. Es ist m\u00f6glich sie in folgenden Formaten abzuspielen: MP3 und Ogg Vorbis. H\u00f6rb\u00fccher sind auch im Format DAISY zug\u00e4nglich, die f\u00fcr Bed\u00fcrfnisse von Schwachsehenden, Blinden und Personen mit Lesenschwierigkeiten geeignet sind.

        \r\n\r\n

        Wolne Lektury-Bibliothek ist auch f\u00fcr Nutzer der mobilen Ger\u00e4te zug\u00e4nglich \u0096 f\u00fcr das System Android und f\u00fcr das System iOS. zug\u00e4nglich

        \r\n\r\n

        Alle in der Wolne Lektury-Bibliothek ver\u00f6ffentlichten Werke kann man rechtsm\u00e4\u00dfig kostenlos durchsehen, h\u00f6ren, auf eigenen Computer herunterladen; \u00fcberdies ist ihre Weitervermittlung und Anf\u00fchrung erlaubt.

        ", - "title_uk": "\ufeff\u041f\u0440\u043e \u043f\u0440\u043e\u0435\u043a\u0442", - "right_column_it": "

        Wolne Lektury \u00e8 un progetto della fondazione Polonia Moderna realizzato pro bono publico in collaborazione con la Biblioteca Nazionale, la Biblioteca Silesiana e la Biblioteca di Elbl\u0105g sotto gli auspici del Ministero dell\u2019Istruzione, Ministero della Cultura, del Patrimonio Nazionale e dell\u2019Associazione degli Scrittori Polacchi. Nel Comitato d\u2019Onore delle Letture Libere ci sono: prof. Maria Janion, prof. Gra\u017cyna Borkowska, prof. Przemys\u0142aw Czapli\u0144ski, prof. Mieczys\u0142aw D\u0105browski, prof. Ewa Kraskowska, prof. Ma\u0142gorzata Czermi\u0144ska, prof. Jerzy Jarz\u0119bski e prof. Piotr \u015aliwi\u0144ski.

        \r\n\r\n

        La maggior parte delle opere nella biblioteca non \u00e8 protetta dal diritto d\u2019autore ed \u00e8 di dominio pubblico, il che significa che si pu\u00f2 pubblicare e distribuire le opere liberamente. Se l\u2019opera viene apposta dai materiali aggiuntivi (dalle note, dai motivi letterari ecc) che sono protetti dal copyright, questi materiali sono disponibili sulla licenza di\r\nL'attribuzione si svolge nelle stesse condizioni 3.0. Pubblichiamo anche le opere che sono rese accessibili dagli autori o eredi legittimi L'attribuzione si svolge alle stesse condizioni 3.0.

        \r\n\r\nContatti: wolnelektury@nowoczesnapolska.org.pl\r\n\r\n", - "title_pl": "O projekcie", - "left_column": "{% load reporting_stats %}\r\n\r\n

        Wolne Lektury is a free online library open 24 hours a day, 365 days a year. It archives books{% count_books %}, including set readings recommended by the Ministry of National Education which have already fallen in the public domain. All the texts are adequately edited - annotated with footnotes and motifs - and are available in several formats - HTML , TXT , PDF, EPUB, MOBI. The library also contains a few hundred audiobooks read by famous actors like: Danuta Stenka, Jan Peszek or Andrzej Chyra. The audiobooks can be used in MP3 and Ogg Vorbis formats. They are also available in DAISY format suiting the needs of people with poor vision, the blind, and those having reading difficulties.

        \r\n\r\n

        The Wolne Lektury library is available through digital applications - in Android and iOS systems.

        \r\n\r\n

        You are allowed to browse, listen to, and download all the items in Wolne Lektury, as well as share and cite them, entirely free of charge.

        ", - "right_column_uk": "\ufeff

        Wolne Lektury \u0446\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0424\u043e\u043d\u0434\u0443 \u0421\u0443\u0447\u0430\u0441\u043d\u0430 \u041f\u043e\u043b\u044c\u0449\u0430 (Fundacja Nowoczesna Polska), \u0440\u0435\u0430\u043b\u0456\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0437 \u043d\u0435\u043a\u043e\u043c\u0435\u0440\u0446\u0456\u0439\u043d\u043e\u044e \u043c\u0435\u0442\u043e\u044e, \u0443 \u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u0456 \u0437 \u041d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u044e \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u044e, \u0421\u0456\u043b\u0435\u0437\u044c\u043a\u043e\u044e \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u044e \u0442\u0430 \u0415\u043b\u044c\u0431\u043b\u043e\u043d\u0437\u044c\u043a\u043e\u044e \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u044e \u043f\u0456\u0434 \u043f\u0430\u0442\u0440\u043e\u043d\u0430\u0442\u043e\u043c \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u043e\u0441\u0432\u0456\u0442\u0438, \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0438 \u0442\u0430 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u0441\u043f\u0430\u0434\u0449\u0438\u043d\u0438, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0421\u043f\u0456\u043b\u043a\u0438 \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u0445 \u043f\u0438\u0441\u044c\u043c\u0435\u043d\u043d\u0438\u043a\u0456\u0432. \u0412 \u041f\u043e\u0447\u0435\u0441\u043d\u043e\u043c\u0443 \u043a\u043e\u043c\u0456\u0442\u0435\u0442\u0456 \u043f\u0440\u043e\u0435\u043a\u0442\u0443 Wolne Lektury \u0437\u0430\u0441\u0456\u0434\u0430\u044e\u0442\u044c \u043f\u0440\u043e\u0444. \u041c\u0430\u0440\u0456\u044f \u042f\u043d\u0456\u043e\u043d, \u043f\u0440\u043e\u0444. \u0490\u0440\u0430\u0436\u0438\u043d\u0430 \u0411\u043e\u0440\u043a\u043e\u0432\u0441\u044c\u043a\u0430, \u043f\u0440\u043e\u0444. \u041f\u0448\u0435\u043c\u0438\u0441\u043b\u0430\u0432 \u0427\u0430\u043f\u043b\u0456\u043d\u0441\u044c\u043a\u0438\u0439, \u043f\u0440\u043e\u0444. \u041c\u0454\u0447\u0438\u0441\u043b\u0430\u0432 \u0414\u043e\u043c\u0431\u0440\u043e\u0432\u0441\u044c\u043a\u0438\u0439, \u043f\u0440\u043e\u0444. \u0415\u0432\u0430 \u041a\u0440\u0430\u0441\u043a\u043e\u0432\u0441\u044c\u043a\u0430, \u043f\u0440\u043e\u0444. \u041c\u0430\u043b\u0491\u043e\u0436\u0430\u0442\u0430 \u0427\u0435\u0440\u043c\u0456\u043d\u0441\u044c\u043a\u0430, \u043f\u0440\u043e\u0444. \u0404\u0436\u0438 \u042f\u0436\u0435\u043c\u0431\u0441\u044c\u043a\u0438\u0439 \u0442\u0430 \u043f\u0440\u043e\u0444. \u041f\u0456\u043e\u0442\u0440 \u0421\u043b\u0456\u0432\u0456\u043d\u0441\u044c\u043a\u0438\u0439.

        \r\n\r\n

        \u0411\u0456\u043b\u044c\u0448\u0456\u0441\u0442\u044c \u0442\u0432\u043e\u0440\u0456\u0432 \u0443 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 \u043d\u0435 \u043e\u0445\u043e\u0440\u043e\u043d\u044f\u044e\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c \u0456 \u044f\u0432\u043b\u044f\u044e\u0442\u044c\u0441\u044f \u0447\u0430\u0441\u0442\u0438\u043d\u043e\u044e \u0441\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0434\u0431\u0430\u043d\u043d\u044f, \u0442\u043e\u043c\u0443 \u0457\u0445 \u043c\u043e\u0436\u043d\u0430 \u0432\u0456\u043b\u044c\u043d\u043e \u043f\u0443\u0431\u043b\u0456\u043a\u0443\u0432\u0430\u0442\u0438 \u0442\u0430 \u0440\u043e\u0437\u043f\u043e\u0432\u0441\u044e\u0434\u0436\u0443\u0432\u0430\u0442\u0438. \u042f\u043a\u0449\u043e \u0442\u0435\u043a\u0441\u0442\u0438 \u0441\u0443\u043f\u0440\u043e\u0432\u043e\u0434\u0436\u0443\u044e\u0442\u044c\u0441\u044f \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u043c\u0438 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0430\u043c\u0438 (\u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0430\u043c\u0438, \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u043c\u0438 \u043c\u043e\u0442\u0438\u0432\u0430\u043c\u0438 \u0442\u043e\u0449\u043e), \u044f\u043a\u0456 \u043e\u0445\u043e\u0440\u043e\u043d\u044f\u044e\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c, \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0446\u0438\u0445 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0456\u0432 \u043d\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u043c\u043e\u0432\u0430\u0445 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 \u0406\u0437 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0456\u043c\u0435\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0430 \u2013 \u041d\u0430 \u0442\u0438\u0445 \u0436\u0435 \u0443\u043c\u043e\u0432\u0430\u0445 3.0. \u0422\u0430\u043a\u043e\u0436 \u043c\u0438 \u043f\u0443\u0431\u043b\u0456\u043a\u0443\u0454\u043c\u043e \u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0442\u0432\u043e\u0440\u0456\u0432, \u0434\u043e \u044f\u043a\u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u0438 \u0430\u0431\u043e \u0441\u043f\u0430\u0434\u043a\u043e\u0454\u043c\u0446\u0456 \u043f\u0440\u0430\u0432 \u043d\u0430\u0434\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u043f\u0456\u0434\u0441\u0442\u0430\u0432\u0456 \u0432\u0456\u043b\u044c\u043d\u043e\u0457 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 \u0406\u0437 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0456\u043c\u0435\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0430 \u2013 \u041d\u0430 \u0442\u0438\u0445 \u0436\u0435 \u0443\u043c\u043e\u0432\u0430\u0445 3.0.

        \r\n\r\n\u041a\u043e\u043d\u0442\u0430\u043a\u0442: wolnelektury@nowoczesnapolska.org.pl\r\n", - "title_en": "About the project", - "left_column_pl": "\ufeff{% load reporting_stats %}\r\n\r\n

        Wolne Lektury to biblioteka internetowa czynna 24 godziny na dob\u0119, 365 dni w roku i ca\u0142kowicie darmowa. W jej zbiorach znajduje si\u0119 {% count_books %} utwor\u00f3w, w tym wiele lektur szkolnych zalecanych do u\u017cytku przez Ministerstwo Edukacji Narodowej, kt\u00f3re trafi\u0142y ju\u017c do domeny publicznej. Wszystkie dzie\u0142a s\u0105 odpowiednio opracowane - opatrzone przypisami, motywami i udost\u0119pnione w kilku formatach - HTML, TXT, PDF, EPUB, MOBI. W bibliotece znajduje si\u0119 r\u00f3wnie\u017c kilkaset audiobook\u00f3w, czytanych przez takich aktor\u00f3w jak: Danuta Stenka, Jan Peszek czy Andrzej Chyra. Mo\u017cna ich s\u0142ucha\u0107 w formatach MP3 i Ogg Vorbis. Audiobooki s\u0105 r\u00f3wnie\u017c dost\u0119pne w formacie DAISYdostosowanym do potrzeb os\u00f3b s\u0142abowidz\u0105cych, niewidomych oraz os\u00f3b maj\u0105cych trudno\u015bci z czytaniem.

        \r\n\r\n

        Biblioteka Wolne Lektury dost\u0119pna jest za po\u015brednictwem aplikacji mobilnych \u2013 na system Android oraz na system iOS.

        \r\n\r\n

        Wszystkie utwory zamieszczone w bibliotece Wolne Lektury mo\u017cna zgodnie z prawem bezp\u0142atnie przegl\u0105da\u0107, s\u0142ucha\u0107, \u015bci\u0105ga\u0107 na sw\u00f3j komputer, a tak\u017ce udost\u0119pnia\u0107 innym i cytowa\u0107.

        \r\n", - "left_column_it": "{% load reporting_stats %}\r\n\r\n

        Wolne Lektury (Le letture Libere) \u00e8 una biblioteca online aperta 24 ore al giorno, 365 giorni all'anno ed \u00e8 completamente gratuita. Nella sua collezione si trovano {% count_books %} opere, tra cui molte letture scolastiche raccomandate dal Ministero dell'Istruzione polacco facenti parte del dominio pubblico. Tutte le opere sono adeguatamente elaborate \u2013 con le note, i motivi e sono disponibili in diversi formati - HTML, TXT, PDF, EPUB, MOBI. La biblioteca dispone inoltre di centinaia di libri che vengono letti da diversi attori tra cui: Danuta Stenka, Jan Peszek o Andrzej Chyra. E' possibile ascoltarli nei formati MP3 e Ogg Vorbis. Gli audiolibri sono disponibili anche in formato DAISY adattato alle esigenze delle persone ipovedenti, non vedenti e che hanno difficolta con la lettura.

        \r\n\r\n

        La biblioteca Wolne Lektury \u00e8 disponibile tramite le applicazioni mobili \u2013 per il sistema Android e il sistema iOS.

        \r\n\r\n

        Secondo la legge tutte le opere della biblioteca Wolne Lektury possono essere gratuitamente lette, ascoltate, scaricate sul pc, quotate e rese accessibili agli altri.

        \r\n\r\n", - "title_es": "Sobre el proyecto", - "left_column_ru": "{% load reporting_stats %}\r\n\r\n

        Wolne Lektury \u044d\u0442\u043e \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u043a\u0440\u0443\u0433\u043b\u044b\u0435 \u0441\u0443\u0442\u043a\u0438, 365 \u0434\u043d\u0435\u0439 \u0432 \u0433\u043e\u0434\u0443, \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e . \u0421\u043e\u0432\u043c\u0435\u0449\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e {% count_books %} \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043c\u043d\u043e\u0433\u043e\u0435 \u0438\u0437 \u0448\u043a\u043e\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \r\n\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u043e\u043c \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \r\n\u0412\u0441\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u0438 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u043c\u0438 \u043c\u043e\u0442\u0438\u0432\u0430\u043c\u0438. \r\n\r\n\u041e\u043d\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 - HTML , TXT , PDF, EPUB, \r\nMOBI. \r\n\u0412 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u0442\u043d\u0438 \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 MP3 \u0438 Ogg Vorbis, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0438\u0442\u0430\u044e\u0442 \u0430\u043a\u0442\u0435\u0440\u044b: \u0414\u0430\u043d\u0443\u0442\u0430 \u0421\u0442\u0435\u043d\u043a\u0430, \u042f\u043d \u041f\u0435\u0448\u0435\u043a, \u0410\u043d\u0434\u0436\u0435\u0439 \u0425\u044b\u0440\u0430. \r\n\r\n\u0410\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u0430\u043a\u0436\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 DAISY , \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u043c \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439 \u0441 \u043f\u043b\u043e\u0445\u0438\u043c \u0437\u0440\u0435\u043d\u0438\u0435\u043c, \u043f\u043b\u043e\u0445\u043e \u0432\u0438\u0434\u044f\u0449\u0438\u0445 \u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0447\u0442\u0435\u043d\u0438\u0435\u043c.

        \r\n\r\n\r\n

        \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Wolne Lektury \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u2013 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 Android \u0438 iOS.

        \r\n\r\n\r\n

        \u0412\u0441\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438\u0437 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Wolne Lektury \u043f\u043e \u0437\u0430\u043a\u043e\u043d\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c, \u0441\u043b\u0443\u0448\u0430\u0442\u044c, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u0446\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445.

        \r\n", - "slug": "o-projekcie", - "right_column_de": "

        Wolne Lektury ist ein pro bono Projekt der Fundation Nowoczesna Polska (Modernes Polen), in Zusammenarbeit mit der Nationalbibliothek, der Schlesischen Bibliothek und der Elblinger Bibliothek unter dem Patronat des polnischen Bildungsministeriums und des Verbandes polnischer Schrifsteller (Stowarzyszenie Pisarzy Polskich). Im Ehrenkomitee von Wolne Lektury sind Prof. Maria Janion, Prof. Gra\u017cyna Borkowska, Prof. Przemys\u0142aw Czapli\u00f1ski, Prof. Mieczys\u0142aw D\u0105browski, Prof. Ewa Kraskowska, Prof. Ma\u0142gorzata Czermi\u00f1ska, Prof. Jerzy Jarz\u00eabski und Prof. Piotr \u015aliwi\u00f1ski t\u00e4tig.

        \r\n\r\n

        Die Mehrheit von Bibliothekwerken steht nicht unter dem Schutz des Urheberrechts und geh\u00f6rt zu dem Gemeinfreiheitsbereich, was bedeutet, dass man sie frei ver\u00f6ffentlichen und vermitteln darf. Sollte das Werk mit zus\u00e4tzlichen Angaben versehen werden (F\u00fc\u00dfnoten und literarischen Motiven), die dem Urheberrechtsschutz unterliegen, sind diese zus\u00e4tzlichen Angaben unter der Lizenz Urheberschaftanerkennung unter gleichen Bedigungen 3.0 verf\u00fcgbar. Wir ver\u00f6ffentlichen auch Werke, die Verfasser oder Rechtsnachfolger unter der freien Lizenz Urheberschaftanerkennung unter gleichen Bedigungen 3.0.

        herausgegeben haben. \r\n\r\nKontakt: wolnelektury@nowoczesnapolska.org.pl", - "left_column_es": "\ufeff{% load reporting_stats %}\r\n\r\n

        Wolne Lektury es una biblioteca virtual de 24 horas, 365 d\u00edas al a\u00f1o y completamente gratuita. La colecci\u00f3n consta de {% count_books %} obras, incluso muchas de lectura obligatoria recomendadas por el Ministerio de Educaci\u00f3n Nacional y que ya forman parte del dominio p\u00fablico. Todos los textos est\u00e1n adecuadamente preparados \u2013 con notas a pie de p\u00e1gina, temas literarios, y est\u00e1n disponibles en varios formatos - HTML , TXT , PDF, EPUB, MOBI.\r\nLa biblioteca contiene tambi\u00e9n centenares de audiolibros, leidos por autores como Danuta Stenka, Jan Peszek o Andrzej Chyra. Se los puede escuchar en los formatos MP3 y Ogg Vorbis. Los audiolibros se pueden conseguir tambi\u00e9n en el formato DAISY , adaptado a las necesidades de las personas con baja visi\u00f3n, invidentes, incluso las que tienen dificultades para leer.

        \r\n\r\n

        La Biblioteca Wolne Lektury est\u00e1 disponible por medio de aplicaciones m\u00f3viles para los sistemas Android e iOS.

        \r\n\r\n\r\n

        Todos los textos publicados en la Biblioteca Wolne Lektury est\u00e1n preparados para hojear, escuchar, descargar, para ponerlos a la disposici\u00f3n de otros y citar, todo esto de acuerdo con la ley.

        \r\n", - "left_column_en": "{% load reporting_stats %}\r\n\r\n

        Wolne Lektury is a free online library open 24 hours a day, 365 days a year. It archives books{% count_books %}, including set readings recommended by the Ministry of National Education which have already fallen in the public domain. All the texts are adequately edited - annotated with footnotes and motifs - and are available in several formats - HTML , TXT , PDF, EPUB, MOBI. The library also contains a few hundred audiobooks read by famous actors like: Danuta Stenka, Jan Peszek or Andrzej Chyra. The audiobooks can be used in MP3 and Ogg Vorbis formats. They are also available in DAISY format suiting the needs of people with poor vision, the blind, and those having reading difficulties.

        \r\n\r\n

        The Wolne Lektury library is available through digital applications - in Android and iOS systems.

        \r\n\r\n

        You are allowed to browse, listen to, and download all the items in Wolne Lektury, as well as share and cite them, entirely free of charge.

        ", - "right_column_fr": "

        Wolne Lektury c'est un projet de la fondation Nowoczesna Polska (Pologne Moderne) r\u00e9alis\u00e9 pro publico bono avec la coop\u00e9ration de la Biblioth\u00e8que nationale polonaise, Biblioth\u00e8que de Sil\u00e9sie et Biblioth\u00e8que d'Elbl\u0105g, sous le patronage du Minist\u00e8re de l'\u00c9ducation nationale, Minist\u00e8re de la Culture et du Patrimoine national et de l'Association des \u00c9crivains polonais. Le Comit\u00e9 Honoraire de Wolne Lektury est compos\u00e9 de: prof. Maria Janion, prof. Gra\u017cyna Borkowska, prof. Przemys\u0142aw Czapli\u0144ski, prof. Mieczys\u0142aw D\u0105browski, prof. Ewa Kraskowska, prof. Ma\u0142gorzata Czermi\u0144ska, prof. Jerzy Jarz\u0119bski et prof. Piotr \u015aliwi\u0144ski.

        \r\n\r\n

        La plupart des ouvrages sur le site de la biblioth\u00e8que ne sont pas prot\u00e9g\u00e9s par le droit d'auteur et appartiennent au domaine public; c'est-\u00e0-dire qu'ils peuvent \u00eatre publi\u00e9s et divulgu\u00e9s librement. Si un ouvrage est accompagn\u00e9 des mat\u00e9riaux suppl\u00e9mentaires (annotations, motifs litt\u00e9raires, etc.) soumis au droit d'auteur, ces derniers sont donc distribu\u00e9s sous la licence: Paternit\u00e9 - Partage \u00e0 l'Identique 3.0 non transpos\u00e9. On publie aussi quelques ouvrages qui \u00e9taient distribu\u00e9s par leurs auteurs ou h\u00e9ritiers sous la licence libre: Paternit\u00e9 - Partage \u00e0 l'Identique 3.0 non transpos\u00e9.

        \r\nContact: wolnelektury@nowoczesnapolska.org.pl\r\n", - "title_ru": "\ufeff\u041f\u0440\u043e\u0435\u043a\u0442", - "title_it": "Sul progetto" - } - }, - { - "pk": 7, - "model": "infopages.infopage", - "fields": { - "title_de": "Rechts", - "left_column_uk": "

        \u0411\u0456\u043b\u044c\u0448\u0456\u0441\u0442\u044c \u0442\u0432\u043e\u0440\u0456\u0432 \u0443 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 \u043d\u0435 \u043e\u0445\u043e\u0440\u043e\u043d\u044f\u044e\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c \u0456 \u044f\u0432\u043b\u044f\u044e\u0442\u044c\u0441\u044f \u0447\u0430\u0441\u0442\u0438\u043d\u043e\u044e \u0441\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0434\u0431\u0430\u043d\u043d\u044f, \u0442\u043e\u043c\u0443 \u0457\u0445 \u043c\u043e\u0436\u043d\u0430 \u0432\u0456\u043b\u044c\u043d\u043e \u043f\u0443\u0431\u043b\u0456\u043a\u0443\u0432\u0430\u0442\u0438 \u0442\u0430 \u0440\u043e\u0437\u043f\u043e\u0432\u0441\u044e\u0434\u0436\u0443\u0432\u0430\u0442\u0438. \u042f\u043a\u0449\u043e \u0442\u0435\u043a\u0441\u0442\u0438 \u0441\u0443\u043f\u0440\u043e\u0432\u043e\u0434\u0436\u0443\u044e\u0442\u044c\u0441\u044f \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u043c\u0438 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0430\u043c\u0438 (\u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0430\u043c\u0438, \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u043c\u0438 \u043c\u043e\u0442\u0438\u0432\u0430\u043c\u0438 \u0442\u043e\u0449\u043e), \u044f\u043a\u0456 \u043e\u0445\u043e\u0440\u043e\u043d\u044f\u044e\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c, \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0446\u0438\u0445 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0456\u0432 \u043d\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u043c\u043e\u0432\u0430\u0445 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 \u0406\u0437 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0456\u043c\u0435\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0430 \u2013 \u041d\u0430 \u0442\u0438\u0445 \u0436\u0435 \u0443\u043c\u043e\u0432\u0430\u0445 3.0. \u0422\u0430\u043a\u043e\u0436 \u043c\u0438 \u043f\u0443\u0431\u043b\u0456\u043a\u0443\u0454\u043c\u043e \u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0442\u0432\u043e\u0440\u0456\u0432, \u0434\u043e \u044f\u043a\u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u0438 \u0430\u0431\u043e \u0441\u043f\u0430\u0434\u043a\u043e\u0454\u043c\u0446\u0456 \u043f\u0440\u0430\u0432 \u043d\u0430\u0434\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u043f\u0456\u0434\u0441\u0442\u0430\u0432\u0456 \u0432\u0456\u043b\u044c\u043d\u043e\u0457 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 \u0406\u0437 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0456\u043c\u0435\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0430 \u2013 \u041d\u0430 \u0442\u0438\u0445 \u0436\u0435 \u0443\u043c\u043e\u0432\u0430\u0445 3.0.

        ", - "main_page": 2, - "right_column_pl": "", - "right_column_lt": "", - "left_column_lt": "

        Dauguma \u0161ios bibliotekos k\u016brini\u0173 n\u0117ra autorini\u0173 teisi\u0173 saugomi ir yra vie\u0161ai prieinami, tai rei\u0161kia, kad gali b\u016bti laisvai naudojami bei platinami. Jei su k\u016briniu yra pateikiamos bet kokios papildomos autorini\u0173 teisi\u0173 saugomos med\u017eiagos (kaip pastabos, motyvai ir t.t.), tai \u0161ios med\u017eiagos yra prieinamos pagal licencj\u0105 Autoryst\u0117s pripa\u017einimas \u2013 pagal tas pa\u010dias s\u0105lygas 3.0. Publikuojami taip pat keli k\u016briniai, autori\u0173 ir teisi\u0173 \u012fp\u0117dini\u0173 pateikti pagal laisv\u0105 licencij\u0105 Autoryst\u0117s pripa\u017einimas \u2013 pagal tas pa\u010dias s\u0105lygas 3.0.

        ", - "title_fr": "", - "right_column_ru": "", - "left_column_fr": "

        La plupart des ouvrages sur le site de la biblioth\u00e8que ne sont pas prot\u00e9g\u00e9s par le droit d'auteur et appartiennent au domaine public; c'est-\u00e0-dire qu'ils peuvent \u00eatre publi\u00e9s et divulgu\u00e9s librement. Si un ouvrage est accompagn\u00e9 des mat\u00e9riaux suppl\u00e9mentaires (annotations, motifs litt\u00e9raires, etc.) soumis au droit d'auteur, ces derniers sont donc distribu\u00e9s sous la licence: Paternit\u00e9 - Partage \u00e0 l'Identique 3.0 non transpos\u00e9. On publie aussi quelques ouvrages qui \u00e9taient distribu\u00e9s par leurs auteurs ou h\u00e9ritiers sous la licence libre: Paternit\u00e9 - Partage \u00e0 l'Identique 3.0 non transpos\u00e9.

        ", - "title": "Rights", - "title_lt": "", - "right_column": "

        The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence Creative Commons Attribution-ShareAlike. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence Creative Commons Attribution-ShareAlike.

        \r\n\r\nContact: wolnelektury@nowoczesnapolska.org.pl", - "right_column_es": "", - "right_column_en": "

        The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence Creative Commons Attribution-ShareAlike. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence Creative Commons Attribution-ShareAlike.

        \r\n\r\nContact: wolnelektury@nowoczesnapolska.org.pl", - "left_column_de": "

        Die Mehrheit von Bibliothekwerken steht nicht unter dem Schutz des Urheberrechts und geh\u00f6rt zu dem Gemeinfreiheitsbereich, was bedeutet, dass man sie frei ver\u00f6ffentlichen und vermitteln darf. Sollte das Werk mit zus\u00e4tzlichen Angaben versehen werden (F\u00fc\u00dfnoten und literarischen Motiven), die dem Urheberrechtsschutz unterliegen, sind diese zus\u00e4tzlichen Angaben unter der Lizenz Urheberschaftanerkennung unter gleichen Bedigungen 3.0 verf\u00fcgbar. Wir ver\u00f6ffentlichen auch Werke, die Verfasser oder Rechtsnachfolger unter der freien Lizenz Urheberschaftanerkennung unter gleichen Bedigungen 3.0.

        herausgegeben haben. ", - "title_uk": "", - "right_column_it": null, - "title_pl": "Prawa", - "left_column": "

        The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence Attribution + Noncommercial + ShareAlike. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence Attribution + Noncommercial + ShareAlike.

        ", - "right_column_uk": "", - "title_en": "Rights", - "left_column_pl": "

        Wi\u0119kszo\u015b\u0107 utwor\u00f3w w bibliotece nie jest chroniona prawem autorskim i znajduje si\u0119 w domenie publicznej, co oznacza, \u017ce mo\u017cna je swobodnie publikowa\u0107 i rozpowszechnia\u0107. Je\u015bli utw\u00f3r opatrzony jest dodatkowymi materia\u0142ami (przypisy, motywy literackie etc.), kt\u00f3re podlegaj\u0105 prawu autorskiemu, to te dodatkowe materia\u0142y udost\u0119pnione s\u0105 na licencji Uznanie autorstwa-Na tych samych warunkach 3.0. Publikujemy r\u00f3wnie\u017c kilka utwor\u00f3w, kt\u00f3re autorzy lub spadkobiercy praw udost\u0119pnili na wolnej licencji Uznanie autorstwa-Na tych samych warunkach 3.0.

        ", - "left_column_it": null, - "title_es": "Derechos", - "left_column_ru": "

        \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043a\u043e\u043d\u043e\u043c \u043e\u0431 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0430\u0445 \u0438 \u043e\u043d\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u043a \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u0434\u043e\u043c\u0435\u043d\u0443. \r\n\u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043d\u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b (\u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0435 \u043c\u043e\u0442\u0438\u0432\u044b, \u0438 \u0442.\u0434.), \r\n\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \r\n \u041f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 - 3.0. \r\n\u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043e\u0442 \u0441\u0430\u043c\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 \u0438\u0445 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0435\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439. \u041f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 3.0.

        ", - "slug": "prawa", - "right_column_de": "", - "left_column_es": "

        La mayor\u00eda de los textos de la Biblioteca est\u00e1n libres de derechos de autor y son de dominio p\u00fablico, por lo tanto se pueden publicar y difundir libremente. Si un texto tiene materiales adicionales (notas a pie de p\u00e1gina, temas literarios, etc.), que no est\u00e9n libres de derechos de autor, dichos materiales est\u00e1n publicados bajo la licencia Reconocimiento-Compartir bajo la misma licencia 3.0.Tambi\u00e9n publicamos algunos textos legados a el dominio p\u00fablico por los autores o heredores bajo la licencia Reconocimiento-Compartir bajo la misma licencia 3.0.

        ", - "left_column_en": "

        The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence Attribution + Noncommercial + ShareAlike. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence Attribution + Noncommercial + ShareAlike.

        ", - "right_column_fr": "", - "title_ru": "", - "title_it": null - } - }, - { - "pk": 4, - "model": "infopages.infopage", - "fields": { - "title_de": "Unser Team", - "left_column_uk": "\ufeff

        \u041c\u0430\u0491\u0434\u0430\u043b\u0435\u043d\u0430 \u0411\u2019\u0454\u0440\u043d\u0430\u0442 \u2013 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u043a\u0435\u0440\u0443\u044e\u0447\u0438\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440 \u0424\u043e\u043d\u0434\u0443 \u0421\u0443\u0447\u0430\u0441\u043d\u0430 \u041f\u043e\u043b\u044c\u0449\u0430 (Fundacja Nowoczesna Polska). \u0421\u043e\u0446\u0456\u043e\u043b\u043e\u0433, \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u044f \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u0442\u0430 \u0411\u0440\u044e\u0441\u0441\u0435\u043b\u044c\u0441\u044c\u043a\u043e\u0433\u043e \u0432\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u0421\u043f\u0435\u0446\u0456\u0430\u043b\u0456\u0441\u0442 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043d\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0456\u0432. \u041a\u0435\u0440\u0443\u0432\u0430\u043b\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u00ab\u041a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0438 2009\u00bb \u0442\u0430 \u00ab\u042f \u043c\u0430\u044e \u043f\u0440\u0430\u0432\u043e \u0437\u043d\u0430\u0442\u0438\u00bb \u0443 \u0410\u0441\u043e\u0446\u0456\u0430\u0446\u0456\u0457 61. \u041f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0443 \u0431\u0430\u0433\u0430\u0442\u044c\u043e\u0445 \u0441\u043e\u0446\u0456\u0430\u043b\u044c\u043d\u0438\u0445 \u0434\u043e\u0441\u043b\u0456\u0434\u0436\u0435\u043d\u043d\u044f\u0445, \u044f\u043a\u0456 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044f \u0433\u0440\u043e\u043c\u0430\u0434\u0441\u044c\u043a\u0438\u043c\u0438 \u043e\u0440\u0433\u0430\u043d\u0456\u0437\u0430\u0446\u0456\u044f\u043c\u0438 \u0442\u0430 \u0434\u043e\u0441\u043b\u0456\u0434\u043d\u0438\u0446\u044c\u043a\u0438\u043c\u0438 \u0444\u0456\u0440\u043c\u0430\u043c\u0438.

        \r\n\r\n

        \u0420\u0430\u0434\u043e\u0441\u043b\u0430\u0432 \u0427\u0430\u0439\u043a\u0430 \u2013 \u0433\u043e\u043b\u043e\u0432\u043d\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442, \u0432\u0438\u0432\u0447\u0430\u0432 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0443 \u043d\u0430 \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0456 \u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438, \u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0438 \u0442\u0430 \u041c\u0435\u0445\u0430\u043d\u0456\u043a\u0438 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u0412\u043e\u043b\u043e\u0434\u0456\u0454 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u043c\u0438 \u043c\u043e\u0432\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0430 \u0442\u0435\u0433\u0456\u0432: Python, XHTML, Javascript, CSS, LaTeX, SQL. \u041c\u0430\u0454 \u0434\u043e\u0441\u0432\u0456\u0434 \u0443 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u0445 Django, Jquery, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0443 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0443\u0432\u0430\u043d\u043d\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0456\u0432 XML (XSLT), \u0443 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0438\u0445 \u043a\u043d\u0438\u0433 \u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 PDF \u0442\u0430 EPUB \u0456 \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0445 \u0430\u043f\u043b\u0456\u043a\u0430\u0446\u0456\u0439 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0438 Android \u0442\u0430 iOS.

        \r\n\r\n

        \u041c\u0430\u0440\u0446\u0456\u043d \u041a\u043e\u0437\u0454\u0439 \u2013 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442. \u0412\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u041f\u043e\u043b\u0456\u0442\u0435\u0445\u043d\u0456\u0447\u043d\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u0442\u0430 \u0430\u0441\u043f\u0456\u0440\u0430\u043d\u0442 \u0432 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u0424\u0456\u043b\u043e\u0441\u043e\u0444\u0456\u0457 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u0414\u0456\u044f\u0447 \u041c\u043e\u043a\u043e\u0442\u043e\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u041f\u0440\u043e\u0434\u043e\u0432\u043e\u043b\u044c\u0447\u043e\u0433\u043e \u041a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0443. \u041c\u0430\u043d\u0434\u0440\u0456\u0432\u043d\u0438\u043a, \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0438\u0441\u0442, \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c \u0443\u0441\u0456\u043b\u044f\u043a\u0438\u0445 \u0431\u0430\u043d\u043a\u0435\u0442\u0456\u0432. Homo ludens.

        \r\n\r\n

        \u041c\u0430\u0440\u0442\u0430 \u041d\u0454\u0434\u0437\u044f\u043b\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u2013 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u044f \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u0437\u043d\u0430\u0432\u0441\u0442\u0432\u0430 \u0442\u0430 \u043d\u0430\u0443\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 \u043c\u0430\u0433\u0456\u0441\u0442\u0440\u0430\u0442\u0443\u0440\u0438 \u043d\u0430 \u0441\u043f\u0435\u0446\u0456\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0456 Public Policy and Administration \u0443 Collegium Civitas.

        \r\n\r\n", - "main_page": 3, - "right_column_pl": "

        Dorota A. Kowalska \u2013 redaktorka literacka, j\u0119zykoznawca, polonistka i slawistka, doktor nauk humanistycznych, adiunkt w Pracowni Polszczyzny Kresowej IJP PAN, gdzie zajmuje si\u0119 histori\u0105 i wsp\u00f3\u0142czesno\u015bci\u0105 j\u0119zyka polskiego na Ukrainie. Hobbystycznie \u015bpiewa archaiczne pie\u015bni ukrai\u0144skie i rosyjskie, cyklistka.

        \r\n\r\n

        Aleksandra Seku\u0142a \u2013 redaktorka literacka, historyczka literatury, doktor nauk humanistycznych, absolwentka Wydzia\u0142u Polonistyki Uniwersytetu Warszawskiego i Szko\u0142y Nauk Spo\u0142ecznych przy IFiS PAN. Zawodowo i naukowo zajmuje si\u0119 polskim romantyzmem, histori\u0105 idei i teori\u0105 kultury.

        \r\n\r\n

        Pawe\u0142 Kozio\u0142 \u2013 redaktor literacki. Ur. 1979, doktor nauk humanistycznych specjalizuj\u0105cy si\u0119 w literaturze dawnej, absolwent Wydzia\u0142u Polonistyki Uniwersytetu Warszawskiego oraz Dulwich College w Londynie. Poeta, krytyk literacki, stypendysta Ministerstwa Kultury i Dziedzictwa Narodowego (2010).

        \r\n\r\n

        Paulina Choroma\u0144ska \u2013 redaktorka techniczna, studentka II roku studi\u00f3w magisterskich w Instytucie Informacji Naukowej i Studi\u00f3w Bibliologicznych UW. Pracuje r\u00f3wnie\u017c w Pracowni Dokumentacji Teatru w Instytucie Teatralnym im. Z. Raszewskiego w Warszawie.

        \r\n\r\n

        Aneta Rawska - redaktorka techniczna, studentka II roku studi\u00f3w magisterskich w Instytucie Informacji Naukowej i Studi\u00f3w Bibliologicznych UW, mi\u0142o\u015bniczka wypiek\u00f3w i dobrej kuchni. Od 2009 roku prowadzi serwis ko\u0142a PZW nr 21 w Wo\u0142ominie.

        \r\n", - "right_column_lt": "\ufeff

        Dorota A. Kowalska \u2013 literat\u016bros redaktor\u0117, lingvist\u0117, polonist\u0117, slavist\u0117, humanitarini\u0173 moksl\u0173 daktar\u0117, Lenkijos moksl\u0173 akademijos Lenk\u0173 kalbos instituto adjunkt\u0117, kur atlieka darbus, susijusius su istorija ir dabartine lenk\u0173 kalba Ukrainoje. Laisvalaikiu dainuoja archaji\u0161kas ukrainie\u010di\u0173 ir rus\u0173 dainas, dviratinink\u0117.

        \r\n\r\n

        Aleksandra Seku\u0142a \u2013 literat\u016bros redaktor\u0117, literat\u016bros istorik\u0117, humanitarini\u0173 moksl\u0173 daktar\u0117, Var\u0161uvos universiteto Polonistikos fakulteto bei Lenkijos moksl\u0173 akademijos Filosofijos ir sociologijos instituto Socialini\u0173 moksl\u0173 mokyklos absolvent\u0117. Profesionaliai u\u017esiima lenk\u0173 romantizmu, id\u0117jos istorija ir kult\u016bros teorija.

        \r\n\r\n

        Pawe\u0142 Kozio\u0142 \u2013 literat\u016bros redaktorius, gim\u0119s 1979 m., humanitarini\u0173 moksl\u0173 daktaras besispecializuojantis senojoje literat\u016broje, Var\u0161uvos universiteto Polonistikos fakulteto bei Dulwich College Londone absolventas. Poetas, literat\u016bros kritikas, Kult\u016bros ir nacionalinio paveldo ministerijos stipendininkas (2010).

        \r\n\r\n

        Paulina Choroma\u0144ska \u2013 technin\u0117 redaktor\u0117, Var\u0161uvos universiteto Bibliotekininkyst\u0117s ir informatikos instituto magistrant\u016bros studij\u0173 antro kurso student\u0117. Taip pat dirba Z. Raszewski Teatro instituto Teatro dokumentacijos skyriuje Var\u0161uvoje.\r\n\r\n

        Aneta Rawska \u2013 technin\u0117 redaktor\u0117, Var\u0161uvos universiteto Bibliotekininkyst\u0117s ir informatikos instituto magistrant\u016bros studij\u0173 antro kurso student\u0117, kepini\u0173 ir skanios virtuv\u0117s gerb\u0117ja. Nuo 2009 m. pri\u017ei\u016bri PZW (Lenk\u0173 \u017evej\u0173 s\u0105junga) nr. 21 interneto svetain\u0119 Wo\u0142omin mieste.\r\n", - "left_column_lt": "\ufeff

        Magdalena Biernat \u2013 projekto koordinator\u0117, fondo \u0160iuolaikin\u0117 Lenkija valdan\u010dioji direktor\u0117. Sociolog\u0117, Var\u0161uvos universiteto ir L\u2019Universit\u00e9 libre de Bruxelles absolvent\u0117. Internetini\u0173 projekt\u0173 specialist\u0117. Koordinavo Kandydaci 2009 ir Mam Prawo Wiedzie\u0107 Asocijacijos 61 projektus. Dirbo prie socialini\u0173 tyrim\u0173, nevyriausybini\u0173 organizacij\u0173 ir tyrim\u0173 \u012fstaig\u0173 \u012fgyvendinam\u0173.

        \r\n\r\n

        Rados\u0142aw Czajka \u2013 pagrindinis programuotojas, studijavo Informacini\u0173 technologij\u0173 specialyb\u0119 Matematikos, informatikos ir mechanikos fakultete. Python, XHTML, Javascript, CSS, LaTeX, SQL programavimo kalb\u0173 ir \u017eymi\u0173 ekspertas. Turi patirties su frameworks\u2019ais Django, Jquery, patirtis su XML (XSLT) dokument\u0173 transformavimu, PDF ir EPUB formatu e-knyg\u0173 gamyba bei su mobili\u0173j\u0173 program\u0173 skiriam\u0173 operacinei sistemai Android ir iOS k\u016brim\u0173.

        \r\n\r\n

        Marcin Koziej \u2013 programuotojas, Var\u0161uvos technikos universiteto absolventas ir Var\u0161uvos universiteto Filosofijos instituto doktorantas. Mokotovo maisto kooperatyvo (Mokotowska Kooperatywa Spo\u017cywcza) aktyvistas. Keliautojas, dviratininkas, puotautojas. Homo ludens.

        \r\n\r\n\t\r\n

        Marta Niedzia\u0142kowska \u2013 technin\u0117 redaktor\u0117, Var\u0161uvos universiteto Bibliotekininkyst\u0117s ir informatikos absolvent\u0117. Universiteto Collegium Civitas Public Policy and Administration magistrant\u016bros studij\u0173 student\u0117.

        \r\n", - "title_fr": "Notre \u00e9quipe", - "right_column_ru": "\ufeff

        \u0414\u043e\u0440\u043e\u0442\u0430 A. \u041a\u043e\u0432\u0430\u043b\u044c\u0441\u043a\u0430 \u2013 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u044f\u0437\u044b\u043a\u043e\u0432\u0435\u0434, \u0444\u0438\u043b\u043e\u043b\u043e\u0433 \u0438 \u0441\u043b\u0430\u0432\u0438\u0441\u0442\u043a\u0430, \u0434\u043e\u043a\u0442\u043e\u0440 \u0433\u0443\u043c\u0430\u043d\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043d\u0430\u0443\u043a, \u0430\u0434\u044a\u044e\u043d\u043a\u0442 \u0432 \u043d\u0430\u0443\u0447\u043d\u043e\u0439 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u041f\u043e\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043e\u043a\u0440\u0430\u0438\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0418\u0419\u041f \u041f\u0410\u041d, \u0433\u0434\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0441\u043a\u0438\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u0432 \u0423\u043a\u0440\u0430\u0438\u043d\u0435. \u0415\u0435 \u0445\u043e\u0431\u0431\u0438 \u044d\u0442\u043e \u0430\u0440\u0445\u0430\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0435 \u0438 \u0440\u0443\u0441\u0441\u043a\u0438\u0435 \u043d\u0430\u0440\u043e\u0434\u043d\u044b\u0435 \u043f\u0435\u0441\u043d\u0438.

        \r\n\r\n

        \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u0421\u0435\u043a\u0443\u043b\u0430 \u2013 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0438\u0441\u0442\u043e\u0440\u0438\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b, \u0434\u043e\u043a\u0442\u043e\u0440 \u0433\u0443\u043c\u0430\u043d\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043d\u0430\u0443\u043a, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u0430 \u0424\u0438\u043b\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0444\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u0438 \u0428\u043a\u043e\u043b\u044b \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u0443\u043a \u043f\u0440\u0438 \u0418\u0444\u0438\u0421 \u041f\u0410\u041d. \u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0438 \u043d\u0430\u0443\u0447\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0441\u043a\u0438\u043c \u0440\u043e\u043c\u0430\u043d\u0442\u0438\u0437\u043c\u043e\u043c, \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0438\u0434\u0435\u0438 \u0438 \u0442\u0435\u043e\u0440\u0438\u0435\u0439 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u044b.

        \r\n\r\n

        \u041f\u0430\u0432\u0435\u043b \u041a\u043e\u0437\u0435\u043b\u2013 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440. 1979 \u0433.\u0440., \u0434\u043e\u043a\u0442\u043e\u0440 \u0433\u0443\u043c\u0430\u043d\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043d\u0430\u0443\u043a, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u043f\u043e \u0434\u0440\u0435\u0432\u043d\u0435\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0435, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0424\u0438\u043b\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u0438 Dulwich College \u0432 \u041b\u043e\u043d\u0434\u043e\u043d\u0435. \u041f\u043e\u044d\u0442, \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u043a\u0440\u0438\u0442\u0438\u043a, \u0441\u0442\u0438\u043f\u0435\u043d\u0434\u0438\u0430\u0442 \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u044b \u0438 \u043d\u0430\u0440\u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0430 (2010).

        \r\n\r\n

        \u041f\u0430\u0443\u043b\u0438\u043d\u0430 \u0425\u043e\u0440\u043e\u043c\u0430\u043d\u044c\u0441\u043a\u0430 \u2013 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 II \u043a\u0443\u0440\u0441\u0430 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0430 \u041d\u0430\u0443\u0447\u043d\u043e\u0439 \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0412\u0423. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u0432 \u041d\u0430\u0443\u0447\u043d\u043e\u0439 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0442\u0435\u0430\u0442\u0440\u0430, \u0432 \u0422\u0435\u0430\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u043c \u0438\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0435 \u0438\u043c. \u0417. \u0420\u0430\u0448\u0435\u0432\u0441\u043ao\u0433\u043e \u0432 \u0412\u0430\u0440\u0448\u0430\u0432\u0435.

        \r\n\r\n

        \u0410\u043d\u0435\u0442\u0430 \u0420\u0430\u0432\u0441\u043a\u0430 - \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 II \u043a\u0443\u0440\u0441\u0430 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0430 \u041d\u0430\u0443\u0447\u043d\u043e\u0439 \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0412\u0423, \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u043d\u0438\u0446\u0430 \u0432\u044b\u043f\u0435\u043a\u0430\u043d\u0438\u044f \u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043a\u0443\u0445\u043d\u0438. \u0421 2009 \u0433. \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u043a\u0440\u0443\u0436\u043a\u0430 \u041f\u0417\u0412 \u043d\u043e.21 \u0432 \u0412\u043e\u043b\u043e\u043c\u0438\u043d\u0435.

        \r\n", - "left_column_fr": "

        Magdalena Biernat \u2013 coordinatrice du projet et directrice administrative de la fondation Nowoczesna Polska, sociologue, gradu\u00e9e de l'Universit\u00e9 de Varsovie et l\u2019Universit\u00e9 libre de Bruxelles, sp\u00e9cialiste des projets Internet; elle a coordonn\u00e9 les projets Kandydaci 2009 et Mam Prawo Wiedzie\u0107 pour Stowarzyszenie 61 (l'Assocciation 61). Elle a particip\u00e9 aux travaux de recherches sociales r\u00e9alis\u00e9s par les organisations non gouvernementales et soci\u00e9t\u00e9s de recherche.

        \r\n\r\n

        Rados\u0142aw Czajka \u2013 programmeur principal du projet, il a \u00e9tudi\u00e9 l'informatique \u00e0 MIMUW (l'Univerist\u00e9 de Varsovie, D\u00e9partement de Math\u00e9matique, Informatique et G\u00e9nie M\u00e9canique). Il est un expert dans les langages de programmation tels que Python, XHTML, Javascript, CSS, LaTeX, SQL. Il a de l'exp\u00e9rience dans les frameworks Django et Jquery, de l'exp\u00e9rience dans l'\u00e9dition de documents XML (XSLT), dans la production de livres num\u00e9riques aux formats PDF et EPUB et dans la cr\u00e9ation d'applications mobiles pour Android et iOS.

        \r\n\r\n

        Marcin Koziej \u2013 programmeur, amateur infatigable de philosophie, informaticien, voyageur, cycliste et banqueteur. Homo ludens.

        \r\n\r\n

        Marta Niedzia\u0142kowska \u2013 r\u00e9dactrice technique, gradu\u00e9e en Bibliothecologie et Sciences de l'Information de l'Universit\u00e9 de Varsovie. Une \u00e9tudiante d'\u00e9tudes secondaires en Public Policy and Administration au Collegium Civitas.

        \r\n\r\n", - "title": "The team", - "title_lt": "\ufeffM\u016bs\u0173 komanda", - "right_column": "\ufeff\r\n

        Dorota A. Kowalska \u2013 literary editor, linguist, specialist in the field of Polish studies, Slavist, PhD holder. She is an assistant professor in Pracownia Polszczyzny Kresowej at the Institute of the Polish Language, Polish Academy of Sciences, where she works on the history and the present of the Polish language in Ukraine. As a hobby, she sings Ukrainian and Russian archaic songs and cycles.

        \r\n\r\n

        Aleksandra Seku\u0142a \u2013 literary editor, literary historian, PhD holder. She is a graduate of the Faculty of Polish Studies, Warsaw University and the Graduate School for Social Research at the Institute of Philosophy and Sociology, Polish Academy of Sciences. Her research interests include Polish Romanticism, the history of ideas and the theory of culture.

        \r\n\r\n

        Pawe\u0142 Kozio\u0142 \u2013 literary editor. B. 1979, he is a PhD holder specializing in classic literature and graduate of the Faculty of Polish Studies, Warsaw University and Dulwich College in London. A poet, literary critic, the Ministry of Culture and National Heritage scholarship holder (2010).

        \r\n\r\n

        Paulina Choroma\u0144ska \u2013 production editor, undergraduate student of Information and Book Studies at Warsaw University. She also works in the Theatre Documentation Office of the Zbigniew Raszewski Theatrical Institute in Warsaw.

        \r\n\r\n

        Aneta Rawska - production editor, undergraduate student of Information and Book Studies at Warsaw University, fan of pastries and good cuisine. Since 2009 she has been administering the portal of PZW (Polish Angling Association) group no. 21 in Wo\u0142omin.

        ", - "right_column_es": "

        Dorota A. Kowalska \u2013 redactora literaria, ling\u00fcista, licenciada en filolog\u00eda polaca y eslava, doctorada en humanidades, profesora adjunta en el Laboratorio de Idioma Polaco de la Zona Fronteriza, donde se ocupa de la historia y presente del idioma polaco en Ucrania. Su pasatiempo favorito es cantar canciones arcaicas ucranianas y rusas. Ciclista.

        \r\n\r\n

        Aleksandra Seku\u0142a \u2013 redactora literaria, historiadora de literatura, doctorada en humanidades, licenciada por la Facultad de Filolog\u00eda Polaca por la Escuela de Ciencias Sociales del IFIS PAN (el Instituto de Filosof\u00eda y Sociolog\u00eda de la Academia Polaca de Ciencias). Se ocupa de el romanticismo polaco, historia de la idea y teor\u00eda de cultura.

        \r\n\r\n

        Pawe\u0142 Kozio\u0142 \u2013 redactor literario. Naci\u00f3 en 1979, doctorado en humanidades, especializado en literatura antigua. Licenciado por la Facultad de Filolog\u00eda Polaca de la Universidad de Varsovia y por Dulwich College en Londres. Poeta y cr\u00edtico literario, becario de el Ministerio de Cultura y Patrimonio Nacional (2010).

        \r\n\r\n

        Paulina Choroma\u0144ska \u2013 redactora t\u00e9cnica, estudiante de segundo curso de licenciatura en el Instituto de Informaci\u00f3n Cient\u00edfica y Bibliotecolog\u00eda de la Universidad de Varsovia. Aparte, trabaja en el Centro de Documentaci\u00f3n de Teatro en el Instituto de Teatro de Zbigniew Raszewski en Varsovia.

        \r\n\r\n

        Aneta Rawska - redactora t\u00e9cnica, estudiante de segundo curso de licenciatura en el Instituto de Ciencias de la Informaci\u00f3n y Bibliotecolog\u00eda de la Universidad de Varsovia, amante de la pasteler\u00eda y la buena cocina. Desde 2009 est\u00e1 a cargo de la p\u00e1gina web de PZW (Asociaci\u00f3n Polaca de Pesca) n\u00famero 21 en Wolomin.

        \r\n", - "right_column_en": "\ufeff\r\n

        Dorota A. Kowalska \u2013 literary editor, linguist, specialist in the field of Polish studies, Slavist, PhD holder. She is an assistant professor in Pracownia Polszczyzny Kresowej at the Institute of the Polish Language, Polish Academy of Sciences, where she works on the history and the present of the Polish language in Ukraine. As a hobby, she sings Ukrainian and Russian archaic songs and cycles.

        \r\n\r\n

        Aleksandra Seku\u0142a \u2013 literary editor, literary historian, PhD holder. She is a graduate of the Faculty of Polish Studies, Warsaw University and the Graduate School for Social Research at the Institute of Philosophy and Sociology, Polish Academy of Sciences. Her research interests include Polish Romanticism, the history of ideas and the theory of culture.

        \r\n\r\n

        Pawe\u0142 Kozio\u0142 \u2013 literary editor. B. 1979, he is a PhD holder specializing in classic literature and graduate of the Faculty of Polish Studies, Warsaw University and Dulwich College in London. A poet, literary critic, the Ministry of Culture and National Heritage scholarship holder (2010).

        \r\n\r\n

        Paulina Choroma\u0144ska \u2013 production editor, undergraduate student of Information and Book Studies at Warsaw University. She also works in the Theatre Documentation Office of the Zbigniew Raszewski Theatrical Institute in Warsaw.

        \r\n\r\n

        Aneta Rawska - production editor, undergraduate student of Information and Book Studies at Warsaw University, fan of pastries and good cuisine. Since 2009 she has been administering the portal of PZW (Polish Angling Association) group no. 21 in Wo\u0142omin.

        ", - "left_column_de": "

        Magdalena Biernat - Projektkoordinator, Verwaltungsleiterin der Stiftung Modernes Polen. Soziologin, Absolventin der Universit\u00e4t Warschau und der Universit\u00e9 libre de Bruxelles. Spezialistin f\u00fcr Internetprojekte. Sie hat die Projekte Kandydaci 2009 (Kandidaten 2009) und Mam Prawo Wiedzie\u00e6 (Ich habe Recht zu wissen) in Verein 61 (Stowarzyszenie 61) koordiniert. Sie hat an vielen Gesellschaftsstudien gearbeitet, die von Nichtregierungsorganisationen und Forschungsanstalten durchgef\u00fchrt wurden.

        \r\n\r\n

        Rados\u0142aw Czajka - Hauptprogrammierer, studierte Informatik an der Fakult\u00e4t f\u00fcr Mathematik, Informatik und Maschinen an der Universit\u00e4t Warschau. Gewandt in Programmierersprachen und Datenbanken: Python, XHTML, Javascript, CSS, LaTeX, SQL. Er besitz Erfahrung in Frameworks: Django, Jquery, den Transformationen XML-Dateien (XSLT), der Herstellung von E-books in PDF und EPUB und Generierung von Mobilanwendungen f\u00fcr das Android- und iOS-System.

        \r\n\r\n

        Marcin Koziej - Programmierer, Absolvent der Technischen Universit\u00e4t Warschau und Doktorand im Institut f\u00fcr Philosophie an Universit\u00e4t. T\u00e4tig im Konsumverein von Mokot\u00f3w (Mokotowska Kooperatywa Spo\u017cywcza). Reisender und Radfahrer. Homo ludens.

        \r\n\r\n

        Marta Niedzia\u0142kowska - Textbearbeiterin, Absolventin der Wissenschaftsinformation und Bibliothekwissenschaft an der Universit\u00e4t Warschau. Masterstudium: Collegium Civitas, Fakult\u00e4t: Public Policy and Administration.

        \r\n\r\n", - "title_uk": "\ufeff\u041a\u043e\u043c\u0430\u043d\u0434\u0430", - "right_column_it": "

        Dorota A. Kowalska \u2013 redattrice letteraria, linguista, ha studiato lingua e letteratura polacca e slava, ha conseguito il dottorato in discipline umanistiche, inoltre \u00e8 docente presso Pracownia Polszczyzny Kresowej IJP PAN, dove \u00e8 esperta di storia e contemporaneit\u00e0 della lingua polacca in Ucraina. Nel tempo libero canta canzoni arcaiche ucraine e russe, ed \u00e8 una ciclista.

        \r\n\r\n

        Aleksandra Seku\u0142a \u2013 redattrice letteraria, storica della letteratura, ha conseguito il dottorato in discipline umanistiche, laureata in lingua e letteratura polacca presso l\u2019Universit\u00e0 di Varsavia e di Szko\u0142a Nauk Spo\u0142ecznych (Scuola delle Scienze Sociali) presso IFiS PAN.In ambito professionale si occupa del romanticismo polacco, della storia dell'idea e della teoria della cultura

        \r\n\r\n

        Pawe\u0142 Kozio\u0142 \u2013 redattore letterario. Nato nel 1979, dottore di ricerca in discipline umanistiche specializzato in letteratura antica, laureato in lingua e letteratura polacca presso l\u2019Universit\u00e0 di Varsavia e del Dulwich College di Londra.E' poeta, critico letterario e borsista del Ministero della Cultura e del Patrimonio Nazionale (2010).

        \r\n\r\n

        Paulina Choroma\u0144ska \u2013 redattrice tecnica, studentessa del secondo anno dell\u2019Istituto di Informazione Scientifica e Biblioteconomia dell\u2019Universit\u00e0 di Varsavia. Lavora anche nel Laboratorio di Documentazione del Teatro presso l\u2019Istituto Teatrale im. Z. Raszewskiego a Varsavia.

        \r\n\r\n

        Aneta Rawska \u2013 redattrice tecnica, studentessa del secondo anno dell\u2019Istituto di Informazione Scientifica e Biblioteconomia dell\u2019Universit\u00e0 di Varsavia, appassionata di cucina e dolci. Dal 2009 gestisce il circolo PZW nr 21 a Wo\u0142omin.

        \r\n\r\n", - "title_pl": "Zesp\u00f3\u0142", - "left_column": "

        Magdalena Biernat - Project Coordinator, Managing Director of the Modern Poland Foundation. She is a sociologist, graduate of Warsaw University and L'Universit\u00e9 libre de Bruxelles, and a web-based project specialist. She coordinated projects \"Kandydaci 2009\" and \"Mam Prawo Wiedzie\u0107\" in Stowarzyszenie 61. She has been working on social research carried out by non-governmental organizations and research companies.

        \r\n\r\n

        Rados\u0142aw Czajka - chief programmer, he studied informatics at the Faculty of Mathematics, Informatics and Mechanics, Warsaw University. Proficient in programming languages, Python, XHTML, Javascript, CSS, LaTeX, SQL markup. He has experience in working with Django framework, Jquery, converting XML (XSLT) documents, creating e-books in PDF and EPUB formats and creating mobile applications for Android and iOS systems.

        \r\n\r\n

        Marcin Koziej - programmer. He is an indefatigable enthusiast of philosophy, IT specialist, traveller, cyclist and reveller. Homo Ludens.

        \r\n\r\n

        Marta Niedzia\u0142kowska - production editor, graduate of the Information and Book Studies at Warsaw University. She is an undergraduate student of Public Policy and Administration at Collegium Civitas in Warsaw.

        ", - "right_column_uk": "\ufeff

        \u0414\u043e\u0440\u043e\u0442\u0430 \u0410. \u041a\u043e\u0432\u0430\u043b\u044c\u0441\u044c\u043a\u0430 \u2013 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u043c\u043e\u0432\u043e\u0437\u043d\u0430\u0432\u0435\u0446\u044c, \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0444\u0456\u043b\u043e\u043b\u043e\u0433 \u0442\u0430 \u0441\u043b\u0430\u0432\u0456\u0441\u0442, \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u0433\u0443\u043c\u0430\u043d\u0456\u0442\u0430\u0440\u043d\u0438\u0445 \u043d\u0430\u0443\u043a, \u0430\u0434'\u044e\u043d\u043a\u0442 \u0443 \u0412\u0456\u0434\u0434\u0456\u043b\u0456 \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u043c\u043e\u0432\u0438 \u041a\u0440\u0435\u0441\u0456\u0432 \u0432 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u043c\u043e\u0432\u0438 \u0432 \u041f\u043e\u043b\u044c\u0441\u044c\u043a\u0456\u0439 \u0410\u043a\u0430\u0434\u0435\u043c\u0456\u0457 \u041d\u0430\u0443\u043a, \u0434\u0435 \u0437\u0430\u0439\u043c\u0430\u0454\u0442\u044c\u0441\u044f \u0456\u0441\u0442\u043e\u0440\u0456\u0454\u044e \u0442\u0430 \u0441\u0443\u0447\u0430\u0441\u043d\u0456\u0441\u0442\u044e \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u043c\u043e\u0432\u0438 \u0432 \u0423\u043a\u0440\u0430\u0457\u043d\u0456. \u0407\u0457 \u0445\u043e\u0431\u0456 - \u0441\u043f\u0456\u0432\u0430\u0442\u0438 \u0430\u0440\u0445\u0430\u0457\u0447\u043d\u0456 \u0443\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0456 \u0442\u0430 \u0440\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0456 \u043f\u0456\u0441\u043d\u0456; \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0438\u0441\u0442\u043a\u0430.

        \r\n\r\n

        \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u0421\u0435\u043a\u0443\u043b\u0430 \u2013 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0456\u0441\u0442\u043e\u0440\u0438\u043a \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0438, \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u0433\u0443\u043c\u0430\u043d\u0456\u0442\u0430\u0440\u043d\u0438\u0445 \u043d\u0430\u0443\u043a, \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u044f \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0443 \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0444\u0456\u043b\u043e\u043b\u043e\u0433\u0456\u0457 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u0442\u0430 \u0428\u043a\u043e\u043b\u0438 \u0421\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u0438\u0445 \u041d\u0430\u0443\u043a \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0443 \u0444\u0456\u043b\u043e\u0441\u043e\u0444\u0456\u0457 \u0442\u0430 \u0441\u043e\u0446\u0456\u043e\u043b\u043e\u0433\u0456\u0457 \u041f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0430\u043a\u0430\u0434\u0435\u043c\u0456\u0457 \u043d\u0430\u0443\u043a. \u041f\u0440\u043e\u0444\u0435\u0441\u0456\u0439\u043d\u043e \u0442\u0430 \u043d\u0430\u0443\u043a\u043e\u0432\u043e \u0437\u0430\u0439\u043c\u0430\u0454\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u043c \u0440\u043e\u043c\u0430\u043d\u0442\u0438\u0437\u043c\u043e\u043c, \u0456\u0441\u0442\u043e\u0440\u0456\u0454\u044e \u0456\u0434\u0435\u0457 \u0442\u0430 \u0442\u0435\u043e\u0440\u0456\u0454\u044e \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0438.

        \r\n\r\n

        \u041f\u0430\u0432\u0435\u043b \u041a\u043e\u0437\u0456\u043e\u043b \u2013 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u043d\u0430\u0440\u043e\u0434\u0436\u0435\u043d\u0438\u0439 \u0443 1979, \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u0433\u0443\u043c\u0430\u043d\u0456\u0442\u0430\u0440\u043d\u0438\u0445 \u043d\u0430\u0443\u043a, \u044f\u043a\u0438\u0439 \u0441\u043f\u0435\u0446\u0456\u0430\u043b\u0456\u0437\u0443\u0454\u0442\u044c\u0441\u044f \u0443 \u0434\u0430\u0432\u043d\u0456\u0439 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0456, \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0443 \u041f\u043e\u043b\u043e\u043d\u0456\u0441\u0442\u0438\u043a\u0438 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u0442\u0430 \u0414\u0430\u043b\u0456\u0434\u0436-\u041a\u043e\u043b\u0435\u0434\u0436\u0443 \u0443 \u041b\u043e\u043d\u0434\u043e\u043d\u0456. \u041f\u043e\u0435\u0442, \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0439 \u043a\u0440\u0438\u0442\u0438\u043a, \u0441\u0442\u0438\u043f\u0435\u043d\u0434\u0438\u0441\u0442 \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0438 \u0442\u0430 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u0441\u043f\u0430\u0434\u0449\u0438\u043d\u0438 (2010).

        \r\n\r\n

        \u041f\u0430\u0443\u043b\u0456\u043d\u0430 \u0425\u043e\u0440\u043e\u043c\u0430\u043d\u0441\u044c\u043a\u0430 \u2013 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 \u0406\u0406 \u043a\u0443\u0440\u0441\u0443 \u043c\u0430\u0433\u0456\u0441\u0442\u0440\u0430\u0442\u0443\u0440\u0438 \u0432 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u043d\u0430\u0443\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0442\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u0437\u043d\u0430\u0432\u0441\u0442\u0432\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u041f\u0440\u0430\u0446\u044e\u0454 \u0442\u0430\u043a\u043e\u0436 \u0443 \u0412\u0456\u0434\u0434\u0456\u043b\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0456\u0457 \u0442\u0435\u0430\u0442\u0440\u0443 \u0432 \u0422\u0435\u0430\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u0456\u043c. \u0417. \u0420\u0430\u0448\u0435\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443 \u0412\u0430\u0440\u0448\u0430\u0432\u0456.

        \r\n\r\n

        \u0410\u043d\u0435\u0442\u0430 \u0420\u0430\u0432\u0441\u044c\u043a\u0430 - \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 \u0406\u0406 \u043a\u0443\u0440\u0441\u0443 \u043c\u0430\u0433\u0456\u0441\u0442\u0440\u0430\u0442\u0443\u0440\u0438 \u0432 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u043d\u0430\u0443\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0442\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u0437\u043d\u0430\u0432\u0441\u0442\u0432\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443, \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u043a\u0430 \u0432\u0438\u043f\u0456\u0447\u043a\u0438 \u0442\u0430 \u0434\u043e\u0431\u0440\u043e\u0457 \u043a\u0443\u0445\u043d\u0456. \u0417 2009 \u0440\u043e\u043a\u0443 \u0437\u0430\u0439\u043c\u0430\u0454\u0442\u044c\u0441\u044f \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043d\u043e\u044e \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u043e\u044e \u0433\u0443\u0440\u0442\u043a\u0430 \u041f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0441\u043f\u0456\u043b\u043a\u0438 \u0440\u0438\u0431\u0430\u043b\u043e\u043a \u2116 21 \u0443 \u0412\u043e\u043b\u043e\u043c\u0456\u043d\u0456.

        \r\n", - "title_en": "The team", - "left_column_pl": "

        Magdalena Biernat \u2013 koordynatorka projektu, dyrektor zarz\u0105dzaj\u0105ca fundacji Nowoczesna Polska. Socjolo\u017cka, absolwentka Uniwersytetu Warszawskiego i L\u2019Universit\u00e9 libre de Bruxelles. Specjalistka od projekt\u00f3w internetowych. Koordynowa\u0142a projekty Kandydaci 2009 i Mam Prawo Wiedzie\u0107 w Stowarzyszeniu 61. Pracowa\u0142a przy wielu badaniach spo\u0142ecznych realizowanych przez organizacje pozarz\u0105dowe i firmy badawcze.

        \r\n\r\n

        Rados\u0142aw Czajka \u2013 g\u0142\u00f3wny programista, studiowa\u0142 informatyk\u0119 na MIMUW. Bieg\u0142y w j\u0119zykach programowania, znacznik\u00f3w: Python, XHTML, Javascript, CSS, LaTeX, SQL. Posiada do\u015bwiadczenie z frameworkami Django, Jquery, do\u015bwiadczenie w przekszta\u0142ceniach dokument\u00f3w XML (XSLT), w produkcji ebook\u00f3w w formatach PDF i EPUB oraz w tworzeniu aplikacji mobilnych na system Android i iOS.

        \r\n\r\n

        Marcin Koziej \u2013 programista. Absolwent Politechniki Warszawskiej i doktorant w Instytucie Filozofii Uniwersytetu Warszawskiego. Dzia\u0142acz Mokotowskiej Kooperatywy Spo\u017cywczej. Podr\u00f3\u017cnik, rowerzysta i biesiadnik. Homo ludens.

        \r\n\r\n

        Marta Niedzia\u0142kowska \u2013 redaktorka techniczna, absolwentka bibliotekoznawstwa i informacji naukowej UW. Studentka studi\u00f3w magisterskich Public Policy and Administration na Collegium Civitas.

        \r\n\r\n", - "left_column_it": "

        Magdalena Biernat \u2013 coordinatrice del progetto, direttrice della fondazione Polonia Moderna. Si \u00e8 laureata in sociologia presso l\u2019Universit\u00e0 di Varsavia e L\u2019Universit\u00e9 libre de Bruxelles.Esperto di web design, ha coordinato i progetti Candidati 2009 e Ho Diritto di Sapere in Associazione 61. Ha lavorato su molte ricerche sociali svolte dalle organizzazioni non governative e di ricerca.

        \r\n\r\n

        Rados\u0142aw Czajka \u2013 programmatore principale, ha studiato informatica al MIMUW (Dipartimento di Matematica, Informatica e Meccanica dell\u2019Universit\u00e0 di Varsavia). Conosce bene i linguaggi di programmazione, tag: Python, XHTML, Javascript, CSS, LaTeX, SQL. Ha esperienza con framework Django, Jquery, nella trasformazione di documenti XML (XSLT), nella produzione di e-books in formato PDF e EPUB e nella creazione di applicazioni mobili per il sistema Android e iOS.

        \r\n\r\n

        Marcin Koziej \u2013 programmatore. Laureato presso Politechnika Warszawska (Universit\u00e0 della Tecnologia di Varsavia), ha conseguito il dottorato di ricerca presso l\u2019Istituto di Filosofia dell\u2019Universit\u00e0 di Varsavia. Attivista di Mokotowska Kooperatywa Spo\u017cywcza.E' inoltre viaggiatore, ciclista e homo ludens.

        \r\n\r\n

        Marta Niedzia\u0142kowska \u2013 redattrice tecnica, laureata all\u2019Istituto di Informazione Scientifica e Biblioteconomia dell\u2019Universit\u00e0 di Varsavia. Studentessa di Public Policy and Administration in Collegium Civitas.

        \r\n\r\n\r\n", - "title_es": "El equipo", - "left_column_ru": "\ufeff

        \u041c\u0430\u0433\u0434\u0430\u043b\u0435\u043d\u0430 \u0411\u0435\u0440\u043d\u0430\u0442 \u2013 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440 \u0424\u043e\u043d\u0434\u0430 Nowoczesna Polska. \u0421\u043e\u0446\u0438\u043e\u043b\u043e\u0433, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u0438 L\u2019Universit\u00e9 libre de Bruxelles. \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u00ab\u041a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u044b 2009\u00bb \u0438 \u00ab\u0423 \u043c\u0435\u043d\u044f \u043f\u0440\u0430\u0432\u043e \u0437\u043d\u0430\u0442\u044c\u00bb \u0432 \u041e\u0431\u0449\u0435\u0441\u0442\u0432\u0435 61. \u0420\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043d\u0430\u0434 \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u0438 \u043e\u043f\u0440\u043e\u0441\u043d\u044b\u043c\u0438 \u0444\u0438\u0440\u043c\u0430\u043c\u0438.

        \r\n\r\n

        \u0420\u0430\u0434\u043e\u0441\u043b\u0430\u0432 \u0427\u0430\u0439\u043a\u0430 \u2013 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0438 \u0432 \u041c\u0418\u041c\u0412\u0423. \u0411\u0435\u0433\u043b\u043e \u0437\u043d\u0430\u0435\u0442 \u044f\u0437\u044b\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: Python, XHTML, Javascript, CSS, LaTeX, SQL. \u0418\u043c\u0435\u0435\u0442 \u043e\u043f\u044b\u0442 \u0441 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c\u0438 \u0442\u0438\u043f\u0430: Django, Jquery; \u043e\u043f\u044b\u0442 \u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 XML (XSLT), \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 PDF \u0438 EPUB, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 Android \u0438 Ios.

        \r\n\r\n

        \u041c\u0430\u0440\u0447\u0438\u043d \u041a\u043e\u0437\u0435\u0439 \u2013 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u0412\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u041f\u043e\u043b\u0438\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0430 \u0438 \u0434\u043e\u043a\u0442\u043e\u0440\u0430\u043d\u0442 \u0432 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0435 \u0424\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u0438 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430. \u0414\u0435\u044f\u0442\u0435\u043b\u044c \u041c\u043e\u043a\u043e\u0442\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0430. \u041f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a, \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0438\u0441\u0442 \u0438 \u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0439. Homo ludens.

        \r\n\r\n

        \u041c\u0430\u0440\u0442\u0430 \u041d\u0435\u0434\u044f\u043b\u043a\u043e\u0432\u0441\u043a\u0430 \u2013 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u0430 \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u0443\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0412\u0423. \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 Public Policy and Administration \u0432 Collegium Civitas.

        \r\n\r\n", - "slug": "zespol", - "right_column_de": "

        Dorota A. Kowalska - Bearbeiterin im Literaturbereich, Sprachwissenschaftlerin, Polonistin und Slavistin, Doktortitel in Geisteswissenschaften, Mitarbeiterin in Pracownia Polszczyzny Kresowej IJP PAN, wo sie sich mit der Geschichte und dem heutigen Stand der polnischen Sprache in der Ukraine besch\u00e4ftigt. Sein Steckenpferd ist das Singen von alten russischen und ukrainischen Liedern. Radfahrerin.

        \r\n\r\n

        Aleksandra Seku\u0142a - Bearbeiterin im Literaturbereich, Literaturgeschichtsforscherin, Doktortitel in Geisteswissenschaften, Absolventin der Polonistik an der Universit\u00e4t Warschau und der Gesellschaftswissenschaftsschule bei IFiS PAN. Beruflich und wissenschaftlich befasst sie sich mit der polnischen Romantik, Ideengeschichte und Kulturtheorie.

        \r\n \r\n

        Pawe\u0142 Kozio\u0142 - Bearbeiter im Literaturbereich. 1979 geboren, Doktortitel in Geisteswissenschaften, Spezialisierung f\u00fcr die alte Literatur, Absolvent der Polonistik an der Universit\u00e4t Warschau und des Dulwich Colleges in London. Dichter, Literaturkritiker, Stipendiat des Ministeriums f\u00fcr Kultur und Nationale Erbe (2010).

        \r\n\r\n

        Paulina Choroma\u0144ska - Textbearbeiterin, Studentin im 4. Semester des Masterstudiums im Insitut f\u00fcr Wissenschaftsinformation und Bibliothekwissenschaft an der Universit\u00e4t Warschau. Sie arbeitet auch in der Forschungsst\u00e4tte f\u00fcr Theaterdokumentation im Zbigniew-Raszewski-Theaterinsitut in Warschau.

        \r\n\r\n

        Aneta Rawska - Textbearbeiterin, Studentin im 4. Semester des Masterstudiums im Insitut f\u00fcr Wissenschaftsinformation und Bibliothekwissenschaft. Sie mag gute K\u00fcche und ist Backenliebhaberin. Ab 2009 f\u00fchrt sie den Service des Polnischen Anglervereins Nr. 21 in Wo\u0142omin.

        \r\n", - "left_column_es": "

        Magdalena Biernat \u2013 la coordinadora del proyecto, directora ejecutiva de la Fundaci\u00f3n Polonia Moderna. Soci\u00f3loga, licenciada por la Universidad de Varsovia y de L\u2019Universit\u00e9 libre de Bruxelles. Especializada en proyectos de Internet. Coordin\u00f3 los proyectos \u2018Candidatos 2009\u2019 y \u2018Tengo el Derecho de Saber\u2019 en la Asociaci\u00f3n 61. Ha trabajado en varias investigaciones sociales realizadas por organizaciones no gubernamentales y empresas investigadoras.

        \r\n\r\n

        Rados\u0142aw Czajka \u2013 programador principal. Estudi\u00f3 inform\u00e1tica en MIM UW (La Facultad de Matem\u00e1ticas, Inform\u00e1tica y Mec\u00e1nica de la Universidad de Varsovia). Conoce los lenguajes de programaci\u00f3n y los marcados: Python, XHTML, Javascript, CSS, LaTex, SQL. Tiene experiencia en los frameworks Django, Jquery; en la transformaci\u00f3n de los archivos XML (XSLT), en la producci\u00f3n de libros electr\u00f3nicos en los formatos PDF y EPUB, incluso tambi\u00e9n en la creaci\u00f3n de aplicaciones m\u00f3viles para los sistema Android e iOS.

        \r\n\r\n

        Marcin Koziej \u2013 programador. El incansable amateur de filosof\u00eda, inform\u00e1tico, viajero, ciclista y juerguista. Homo ludens.

        \r\n\r\n

        Marta Niedzia\u0142kowska \u2013 redactora t\u00e9cnica, licenciada en Ciencias de la Informaci\u00f3n y Bibliotecolog\u00eda de la Universidad de Varsovia. Estudiante de segundo curso de licenciatura de Public Policy and Administration en el Collegium Civitas.

        \r\n", - "left_column_en": "

        Magdalena Biernat - Project Coordinator, Managing Director of the Modern Poland Foundation. She is a sociologist, graduate of Warsaw University and L'Universit\u00e9 libre de Bruxelles, and a web-based project specialist. She coordinated projects \"Kandydaci 2009\" and \"Mam Prawo Wiedzie\u0107\" in Stowarzyszenie 61. She has been working on social research carried out by non-governmental organizations and research companies.

        \r\n\r\n

        Rados\u0142aw Czajka - chief programmer, he studied informatics at the Faculty of Mathematics, Informatics and Mechanics, Warsaw University. Proficient in programming languages, Python, XHTML, Javascript, CSS, LaTeX, SQL markup. He has experience in working with Django framework, Jquery, converting XML (XSLT) documents, creating e-books in PDF and EPUB formats and creating mobile applications for Android and iOS systems.

        \r\n\r\n

        Marcin Koziej - programmer. He is an indefatigable enthusiast of philosophy, IT specialist, traveller, cyclist and reveller. Homo Ludens.

        \r\n\r\n

        Marta Niedzia\u0142kowska - production editor, graduate of the Information and Book Studies at Warsaw University. She is an undergraduate student of Public Policy and Administration at Collegium Civitas in Warsaw.

        ", - "right_column_fr": "

        Dorota A. Kowalska \u2013 r\u00e9dactrice litt\u00e9raire, linguiste, poloniste et slaviste, docteure en Lettres, conf\u00e9renci\u00e8re dans le Laboratoire de la Langue polonaise des Confins de l'INP PAN (l'Institut de la Langue polonaise de l'Acad\u00e9mie polonaise des Sciences) o\u00f9 elle s'occupe de l'histoire et contemporan\u00e9it\u00e9 de la langue polonaise en Ukraine. Pour son plaisir, elle chante des chansons archa\u00efque ukrainiennes et russes. Elle est aussi cycliste.

        \r\n\r\n

        Aleksandra Seku\u0142a \u2013 r\u00e9dactrice litt\u00e9raire, historienne de la litt\u00e9rature, docteur \u00e8s lettres, gradu\u00e9e en D\u00e9partement de Langue polonaise de l'Universit\u00e9 de Varsovie et en \u00c9cole des Sciences Sociales de IFiS PAN (l'Institut de Philosophie et Sociologie de l'Acad\u00e9mie polonaise des Sciences). Professionnellement, elle s'occupe du romantisme polonais, histoire des id\u00e9es et th\u00e9orie de la culture.

        \r\n\r\n

        Pawe\u0142 Kozio\u0142 \u2013 r\u00e9dacteur litt\u00e9raire, n\u00e9 en 1979, docteur en Lettres qui se sp\u00e9cialise en litt\u00e9rature ancienne, gradu\u00e9 en D\u00e9partement de Langue polonaise de l'Universit\u00e9 de Varsovie et en Dulwich College \u00e0 Londres. Il est aussi po\u00e8te, critique litt\u00e9raire, boursier du Minist\u00e8re de la Culture et du Patrimoine national (2010).

        \r\n\r\n

        Paulina Choroma\u0144ska \u2013 r\u00e9dactrice technique, \u00e9tudiante de la deuxi\u00e8me ann\u00e9e d'\u00e9tudes secondaires Bibliothecologie et Sciences de l'Information de l'Universit\u00e9 de Varsovie. Elle travaille aussi dans le Centre de Documentation de Th\u00e9\u00e2tre de l'Institut th\u00e9\u00e2tral de Z. Raszewski \u00e0 Varsovie.

        \r\n\r\n

        Aneta Rawska - r\u00e9dactrice technique, \u00e9tudiante de la deuxi\u00e8me ann\u00e9e d'\u00e9tudes secondaires en Bibliothecologie et Sciences de l'Information de l'Universit\u00e9 de Varsovie, amateure des fourn\u00e9es et bonne cuisine. Depuis 2009 elle administre le site du cercle 21 de l'Association polonaise de P\u00eache \u00e0 Wo\u0142omin.

        \r\n", - "title_ru": "\ufeff\u041a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430", - "title_it": "Il nostro staff" - } - }, - { - "pk": 6, - "model": "infopages.infopage", - "fields": { - "title_de": "Arbeite zusammen", - "left_column_uk": "\ufeff
          \r\n
        • \u0421\u0442\u0430\u043d\u044c \u043d\u0430\u0448\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442\u043e\u043c \u0430\u0431\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0430\u0447\u0435\u043c
        • \r\n
        • \u0417\u0434\u043e\u0431\u0443\u0434\u044c \u043d\u043e\u0432\u0456 \u0443\u043c\u0456\u043d\u043d\u044f \u0442\u0430 \u0434\u043e\u0441\u0432\u0456\u0434
        • \r\n
        • \u0412\u0456\u0437\u044c\u043c\u0438 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0456 \u0442\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0436\u0438 \u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u0456\u043d\u043d\u043e\u0432\u0430\u0446\u0456\u0439\u043d\u0443 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0443
        • \r\n
        \r\n\r\n

        \u0417\u0430\u043f\u0440\u043e\u0448\u0443\u0454\u043c\u043e \u0443\u0441\u0456\u0445, \u0445\u0442\u043e \u0445\u043e\u0447\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0443 \u043d\u0430\u0448\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0456. \u0421\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454\u043c\u043e \u0437\u0456 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c\u0438, \u0432\u0447\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u0442\u0430 \u0443\u0441\u0456\u043c\u0430, \u0445\u0442\u043e \u0446\u0456\u043a\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u044e, \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f\u043c \u0442\u0435\u043a\u0441\u0442\u0456\u0432 \u0442\u0430 \u043a\u043e\u043c\u043f\u2019\u044e\u0442\u0435\u0440\u043d\u0438\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438. \u041c\u0438 \u043f\u0440\u043e\u043f\u043e\u043d\u0443\u0454\u043c\u043e \u043f\u0440\u043e\u0444\u0435\u0441\u0456\u0439\u043d\u0456 \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0438 \u0442\u0430 \u043f\u043e\u0441\u0442\u0456\u0439\u043d\u0443 \u0437\u043c\u0456\u0441\u0442\u043e\u0432\u043d\u0443 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0443. \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438 \u043c\u043e\u0436\u0443\u0442\u044c \u043f\u0440\u0430\u0446\u044e\u0432\u0430\u0442\u0438 \u0432 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u043c\u0443 \u0440\u0435\u0436\u0438\u043c\u0456 \u0430\u0431\u043e \u0432 \u043e\u0444\u0456\u0441\u0456 \u0424\u043e\u043d\u0434\u0443.

        \r\n

        \u0422\u0430\u043a\u043e\u0436 \u043c\u0438 \u043e\u0440\u0433\u0430\u043d\u0456\u0437\u0443\u0454\u043c\u043e \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0441\u044c\u043a\u0456 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 - \u0440\u043e\u0437\u043f\u043e\u0447\u0430\u043b\u0438 \u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e \u0437 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u043e\u043c \u043d\u0430\u0443\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0442\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u0437\u043d\u0430\u0432\u0447\u0438\u0445 \u0434\u043e\u0441\u043b\u0456\u0434\u0436\u0435\u043d\u044c \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443, \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u0441\u044c\u043a\u0438\u043c \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0437\u0430\u0439\u043d\u044f\u0442\u043e\u0441\u0442\u0456 \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u041a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u0430 \u0421\u0442\u0435\u0444\u0430\u043d\u0430 \u0412\u0438\u0448\u0438\u043d\u0441\u044c\u043a\u043e\u0433\u043e \u0442\u0430 \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u043e\u043c \u0424\u0456\u0437\u0438\u043a\u0438 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443.

        \r\n\r\n

        \u042f\u043a \u0434\u043e \u043d\u0430\u0441 \u043f\u0440\u0438\u0454\u0434\u043d\u0430\u0442\u0438\u0441\u044f?

        \r\n

        \u0423\u0441\u0456\u0445 \u0437\u0430\u0446\u0456\u043a\u0430\u0432\u043b\u0435\u043d\u0438\u0445 \u043f\u0440\u043e\u0441\u0438\u043c\u043e \u0432\u0438\u0441\u043b\u0430\u0442\u0438 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0443 marta.niedzialkowska@nowoczesnapolska.org.pl.

        \r\n\r\n\r\n\r\n", - "main_page": 4, - "right_column_pl": "

        Kogo szukamy?

        \r\n\r\n

        Redaktor\u00f3w technicznych (sk\u0142ad tekstu)

        \r\n

        Sk\u0142ad jest pierwszym etapem pracy nad tekstem. Za pomoc\u0105 znacznik\u00f3w j\u0119zyka WL-XML nadajemy tekstowi po\u017c\u0105dan\u0105 form\u0119 i umo\u017cliwiamy wy\u015bwietlenie go na stronie internetowej. Redakcje techniczna dokonywana jest na Platformie Redakcyjnej, kt\u00f3ra pozwala na zautomatyzowanie du\u017cej cz\u0119\u015bci pracy.

        \r\n\r\n

        Kto mo\u017ce zosta\u0107 redaktorem technicznym?

        \r\n
          \r\n
        • Ka\u017cdy \u2013 po kr\u00f3tkim szkoleniu.
        • \r\n
        \r\n\r\n

        Wi\u0119cej informacji o redakcji technicznej znajdziecie na stronie redakcji Wolnych Lektur

        \r\n\r\n
        \r\n\r\n

        Redaktor\u00f3w literackich (merytorycznych)

        \r\n

        Redakcja literacka obejmuje korekt\u0119, uwsp\u00f3\u0142cze\u015bnienia oraz dodawanie przypis\u00f3w i motyw\u00f3w literackich. To unikalna mo\u017cliwo\u015b\u0107 zdobycia do\u015bwiadczenia w cyfrowej edycji tekst\u00f3w.

        \r\n\r\n

        Kto mo\u017ce zosta\u0107 redaktorem literackim?

        \r\n
          \r\n
        • Osoby, kt\u00f3re maj\u0105 do\u015bwiadczenie w redakcji tekst\u00f3w literackich,
        • \r\n
        • Studenci i absolwenci studi\u00f3w humanistycznych, kt\u00f3rzy chc\u0105 takie do\u015bwiadczenie zdoby\u0107.
        • \r\n
        \r\n

        Wi\u0119cej informacji o redakcji merytorycznej znajdziecie na stronie redakcji Wolnych Lektur

        \r\n
        \r\n\r\n

        T\u0142umaczy

        \r\n

        Strona WolneLektury.pl jest dost\u0119pna w siedmiu j\u0119zykach obcych \u2013 angielskim, francuskim, niemieckim, hiszpa\u0144skim, litewskim, rosyjskim oraz ukrai\u0144skim. U\u017cytkownikami biblioteki jest ponad 200 tysi\u0119cy os\u00f3b z zagranicy, a ju\u017c nied\u0142ugo nasze zbiory obejm\u0105 r\u00f3wnie\u017c dzie\u0142a w j\u0119zykach obcych. Dlatego potrzebujemy na bie\u017c\u0105co t\u0142umaczy\u0107 nowe informacje pojawiaj\u0105ce si\u0119 na stronie.

        \r\n

        Kto mo\u017ce pom\u00f3c w t\u0142umaczeniach?

        \r\n
          \r\n
        • Ka\u017cdy, kto dobrze zna co najmniej jeden z powy\u017cszych j\u0119zyk\u00f3w.
        • \r\n
        \r\n\r\n
        \r\n\r\n

        Programist\u00f3w

        \r\n

        Poza sam\u0105 stron\u0105 Wolnych Lektur tworzymy r\u00f3wnie\u017c:

        \r\n
          \r\n
        • narz\u0119dzia redakcyjne,
        • \r\n
        • konwertery do r\u00f3\u017cnych format\u00f3w e-book\u00f3w,
        • \r\n
        • aplikacje mobile u\u0142atwiaj\u0105ce dost\u0119p do naszych zasob\u00f3w.
        • \r\n
        \r\n\r\n

        U\u017cywamy takich technologii jak: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nTworzone przez nas oprogramowanie udost\u0119pniamy na wolnej licencji.

        \r\n

        Kto mo\u017ce pom\u00f3c w pracach programistycznych?

        \r\n
          \r\n
        • Ka\u017cdy, kto umie i chcia\u0142by zdoby\u0107 punkty do karmy za udzia\u0142 w otwartym projekcie programistycznym. ;)
        • \r\n
        \r\n", - "right_column_lt": "\ufeff

        Koki\u0173 \u017emoni\u0173 ie\u0161kome?

        \r\n

        Technini\u0173 redaktori\u0173 (teksto sudarymas)

        \r\n

        Teksto sudarymas tai pirmas etapas dirbant su tekstu. Naudojant kalbos WL-XML \u017eymes, galima sukurti pageidaujam\u0105 teksto form\u0105 ir parodyti j\u012f interneto svetain\u0117je. Techninis redagavimas yra atliekamas Redakcin\u0117je Platformoje , leid\u017eiant automatin\u012f darbo atlikim\u0105.

        \r\n

        Kas gali tapti techniniu redaktoriumi?

        \r\n
          \r\n
        • Kiekvienas, baig\u0119s trump\u0105 mokym\u0105.
        • \r\n
        \r\n

        Papildomos informacijos apie technin\u012f redagavim\u0105\r\ninterneto svetain\u0117s Wolne Lektury redakcijos tinklalapyje.

        \r\n
        \r\n\r\n

        Literat\u016bros redaktori\u0173 (esmini\u0173)

        \r\n

        Literat\u016bros redagavimas apima teksto taisym\u0105, i\u0161na\u0161\u0173 ir motyv\u0173 prid\u0117jim\u0105. Tai unikali galimyb\u0117 \u012fgyti patirties teksto skaitmeninioje leidyboje.

        \r\n\r\n

        Kas gali tapti literat\u016bros redaktoriumi?

        \r\n
          \r\n
        • Asmenys turintys patirties literat\u016bros tekst\u0173 redagavimo srityje,
        • \r\n
        • Studentai bei absolventai humanitarini\u0173 moksl\u0173 studij\u0173 norinys igyti tokios patirties.
        • \r\n
        \r\n

        Papildomos informacijos apie esmin\u012f redagavim\u0105\r\ninterneto svetain\u0117s Wolne Lektury redakcijos tinklalapyje.

        \r\n
        \r\n\r\n

        Vert\u0117j\u0173

        \r\n

        Interneto svetain\u0117 WolneLektury.pl yra prieinama septyniomis u\u017esienio kalbomis \u2013 angl\u0173, pranc\u016bz\u0173, vokie\u010di\u0173, ispan\u0173, lietuvi\u0173, rus\u0173 bei ukrainie\u010di\u0173. \u0160ios bibliotekos u\u017esienio vartotoj\u0173 kiekis tai 200 t\u016bks., be to m\u016bs\u0173 i\u0161tekliai netrukus apims u\u017esienio kalb\u0173 k\u016brinius. D\u0117l to yra reikalingas \u0161ios interneto svetain\u0117s nauj\u0173 informacij\u0173 nuolatinis vertimas.

        \r\n

        Kas gali pad\u0117ti versti?

        \r\n
          \r\n
        • Kiekvienas gerai mokantys bent vien\u0105 i\u0161 anks\u010diau i\u0161vardyt\u0173 kalb\u0173.
        • \r\n
        \r\n
        \r\n\r\n

        Programuotoj\u0173

        \r\n

        I\u0161skyrus interneto svetain\u0119 Wolne Lektury, taip pat kuriame:

        \r\n
          \r\n
        • redagavimo \u012frankius,
        • \r\n
        • \u012fvairi\u0173 format\u0173 e-knyg\u0173 konverterius,
        • \r\n\r\n
        • mobili\u0105sias programas lengvinan\u010dias prieig\u0105 prie m\u016bs\u0173 i\u0161tekli\u0173.
        • \r\n
        \r\n

        Naudojame tokias technologijas kaip: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nM\u016bs\u0173 kuriama programin\u0117 \u012franga yra prieinama pagal laisv\u0105 licencij\u0105.

        \r\n

        Kas gali pad\u0117ti programavimo darbuose?

        \r\n
          \r\n\r\n
        • Kiekvienas galintis ir norintis \u012fgauti patirties dalyvaudamas programavimo atvirame projekte. ;)
        • \r\n
        ", - "left_column_lt": "\ufeff
          \r\n
        • Tapkite m\u016bs\u0173 redaktoriumi, programuotoju, arba vert\u0117ju
        • \r\n
        • \u012egykite \u012fg\u016bd\u017ei\u0173 ir patirties
        • \r\n
        • Dalyvaukite atvirame projekte ir kurkite naujovi\u0161k\u0105 internetin\u0119 bibliotek\u0105
        • \r\n
        \r\n\r\n

        Kvie\u010diame visus norin\u010dius prisid\u0117ti prie m\u016bs\u0173 projekto. Bendradarbiaujame su studentais, mokytojais ir su visais susidom\u0117jusiais literat\u016bra, teksto redagavimu ir informaciniais projektais. Si\u016blome profesional\u0173 mokym\u0105 ir nuolatin\u0119 esmin\u0119 pagalb\u0105.\r\nSavanoriai gali dirbti nuotoliniu b\u016bdu arba fondo b\u016bstin\u0117je.

        \r\n

        Taip pat organizuojame student\u0173 praktikas \u2013 bendradarbiaujame su Var\u0161uvos universiteto Mokslin\u0117s informacijos bei bibliologijos studij\u0173 institutu, Kardinolo Stefano Vi\u0161inskio universiteto Karjer\u0173 skyriumi bei su Var\u0161uvos universiteto Fizikos fakultetu.

        \r\n\r\n\r\n

        Kaip galite prane\u0161ti apie save?

        \r\nVisus susidom\u0117jusius pra\u0161ome ra\u0161yti adresumarta.niedzialkowska@nowoczesnapolska.org.pl.

        \r\n", - "title_fr": "Engagez-vous dans le travail", - "right_column_ru": "\ufeff

        \u041a\u043e\u0433\u043e \u043c\u044b \u0438\u0449\u0435\u043c?

        \r\n\r\n

        \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u0432 (\u043d\u0430\u0431\u043e\u0440 \u0442\u0435\u043a\u0441\u0442\u043e\u0432).

        \r\n

        \u041d\u0430\u0431\u043e\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0434 \u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e WL-XML \u044f\u0437\u044b\u043a\u0430 \u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435. \r\n\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0420\u0435\u0434\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043d\u0430\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b.

        \r\n\r\n

        \u041a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c?

        \r\n
          \r\n
        • \u041b\u044e\u0431\u043e\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u2013 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f.
        • \r\n
        \r\n\r\n

        \u0411\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Wolnych Lektur

        \r\n\r\n
        \r\n\r\n

        \u041b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 (\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u043d\u0442)

        \r\n

        \u041b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0430\u044f \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0443\u0440\u0443, \u043e\u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0439 \u0438 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432. \r\n\u042d\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u043e\u043f\u044b\u0442 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432.

        \r\n\r\n

        \u041a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c?

        \r\n
          \r\n
        • \u041b\u0438\u0446\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u044b\u0442 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439.
        • \r\n
        • \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u044b \u0438 \u0430\u0431\u0438\u0442\u0443\u0440\u0438\u0435\u043d\u0442\u044b \u0433\u0443\u043c\u0430\u043d\u0438\u0442\u0430\u0440\u043d\u044b\u0445 \u0443\u0447\u0435\u0431\u043d\u044b\u0445 \u0437\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u044f\u0442 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u0442\u0430\u043a\u043e\u0439 \u043e\u043f\u044b\u0442.
        • \r\n
        \r\n

        \u0411\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u0441\u0447\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Wolnych Lektur

        \r\n
        \r\n\r\n

        \u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u043e\u0432

        \r\n

        \u0421\u0430\u0439\u0442 WolneLektury.pl \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043d\u0430 7 \u0438\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u2013 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c, \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u043e\u043c, \u043d\u0435\u043c\u0435\u0446\u043a\u043e\u043c, \u0438\u0441\u043f\u0430\u043d\u0441\u043a\u043e\u043c, \u043b\u0438\u0442\u043e\u0432\u0441\u043a\u043e\u043c, \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u0438 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u043e\u043c. \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 200 \u0442\u044b\u0441\u044f\u0447 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0438\u0437 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043a\u043d\u0438\u0436\u043d\u044b\u0439 \u0444\u043e\u043d\u0434 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u0442 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0430 \u0438\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445. \r\n\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0449\u0435\u0439\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.

        \r\n

        \u041a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b?

        \r\n
          \r\n
        • \u041a\u0430\u0436\u0434\u044b\u0439, \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u044b\u0448\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432.
        • \r\n
        \r\n\r\n
        \r\n\r\n

        \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b.

        \r\n

        \u041a\u0440\u043e\u043c\u0435 \u0441\u0430\u0439\u0442\u0430 Woln\u0435Lektur\u0443 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0430\u043a\u0436\u0435:

        \r\n
          \r\n
        • narz\u0119dzia redakcyjne,
        • \r\n
        • \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433
        • \r\n
        • \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0449\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0444\u043e\u043d\u0434\u0443.
        • \r\n
        \r\n\r\n

        \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e: : Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\n\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u043d\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438.

        \r\n

        \u041a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c?

        \r\n
          \r\n
        • \u041a\u0430\u0436\u0434\u044b\u0439, \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442 \u043a\u0430\u043a, \u0438 \u043a\u0442\u043e \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u00ab\u043d\u0430\u0431\u0440\u0430\u0442\u044c \u043e\u0447\u043a\u043e\u0432\u00bb \u0432 \u0441\u0432\u043e\u044e \u00ab\u043a\u0430\u0440\u043c\u0443\u00bb \u0434\u043b\u044f \u0432\u0430\u0441 \u043e\u0442\u043a\u0440\u044b\u0442 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442. ;)
        • \r\n
        \r\n", - "left_column_fr": "
          \r\n
        • Devenez notre r\u00e9dacteur, programmeur ou traducteur!
        • \r\n
        • Acqu\u00e9rez de nouvelles comp\u00e9tences et exp\u00e9rience!
        • \r\n
        • Prenez part \u00e0 un projet ouvert et cr\u00e9ez une biblioth\u00e8que en ligne innovative!
        • \r\n
        \r\n\r\n

        Nous invitons toutes les personnes qui sont int\u00e9ress\u00e9es par la participation \u00e0 notre projet. Nous coop\u00e9rons avec les \u00e9tudiants, professeurs et tous ceux qui s'int\u00e9ressent \u00e0 la litt\u00e9rature, \u00e0 la r\u00e9daction de textes ou aux projets informatiques. Nous offrons des instructions professionnelles et une aide substantielle constante. Les b\u00e9n\u00e9voles peuvent travailler chez eux ou bien dans le si\u00e8ge de la fondation.

        \r\n

        Nous organisons aussi des stages \u00e9tudiants - nous coop\u00e9rons avec l'Institut d'Information Scientifique et d'\u00c9tudes Bibliologiques de l'Universit\u00e9 de Varsovie, le Bureau des Carri\u00e8res de l'Universit\u00e9 Cardinal Stefan Wyszy\u0144ski \u00e0 Varsovie et la Facult\u00e9 de Physique de l'Universit\u00e9 de Varsovie.

        \r\n\r\n

        Comment nous contacter?

        \r\n

        Si vous \u00eates int\u00e9ress\u00e9s par notre projet, veuillez nous envoyer un courriel \u00e0 l'adresse suivante: marta.niedzialkowska@nowoczesnapolska.org.pl.

        \r\n", - "title": "Join in the work", - "title_lt": "Dalyvaukite projekte", - "right_column": "

        Who are we looking for?

        \r\n\r\n

        Production editors (text composition)

        \r\n

        Text composition is the first stage in editing. By means of WL-XML markup we create a desired text format and display it on the webpage. Production editing takes place on Editorial Platform, which enables us to automate a great deal of work.

        \r\n\r\n

        Who can become a production editor?

        \r\n
          \r\n
        • Anyone - after a short training.
        • \r\n
        \r\n\r\n

        You will find more information on production editing on editorial page of Wolne Lektury

        \r\n\r\n
        \r\n\r\n

        Literary editors

        \r\n

        Literary editing includes proofreading, updating and adding literary motifs. It is a unique opportunity to gain experience in digital text editing.

        \r\n\r\n

        Who can become a literary editor?

        \r\n
          \r\n
        • Those who have experience in literary text editing,
        • \r\n
        • Students and graduates of the humanities, who wants to gain such experience.
        • \r\n
        \r\n

        You will find more information on literary editing on editorial page of Wolne Lektury

        \r\n
        \r\n\r\n

        Translators

        \r\n

        WolneLektury.pl is available in 7 languages - English, French, German, Spanish, Lithuanian, Russian, and Ukrainian. The library is used by over 200 000 readers outside of Poland, and soon our collection will also include books written in foreign (non-Polish) languages. That is why we need to translate new pieces of information systematically, as they appear on the website.

        \r\n

        Who can help us translate?

        \r\n
          \r\n
        • Anyone with a good command of at least one of the languages listed above.
        • \r\n
        \r\n\r\n
        \r\n\r\n

        Programmers

        \r\n

        Apart from the website Wolne Lektury we also create:

        \r\n
          \r\n
        • editorial tools,
        • \r\n
        • converters for various e-book formats,
        • \r\n
        • mobile applications facilitating access to our pages.
        • \r\n
        \r\n\r\n

        We use technologies like: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nOur software is made available under the free license.

        \r\n

        Who can help us with the programming?

        \r\n
          \r\n
        • Those who can do it and would like to gain experience by participating in an open programming project.
        • ", - "right_column_es": "\ufeff

          \u00bfA qui\u00e9n buscamos?

          \r\n\r\n\r\n

          Redactores t\u00e9cnicos (composici\u00f3n tipogr\u00e1fica)

          \r\n

          La composici\u00f3n tipogr\u00e1fica es la primera etapa del trabajo con el texto. Por medio de los marcados del idioma WL-XML le damos la forma deseada al texto y facilitamos su visualizaci\u00f3n en la p\u00e1gina web. La redacci\u00f3n t\u00e9cnica est\u00e1 realizada en la Plataforma Editorial, que permite automatizar una gran parte del trabajo.

          \r\n\r\n

          \u00bfQui\u00e9n puede ser redactor t\u00e9cnico?

          \r\n
            \r\n
          • Cualquiera- despu\u00e9s de una breve formaci\u00f3n.
          • \r\n
          \r\n\r\n

          Encontrar\u00e9is m\u00e1s informaci\u00f3n sobre la redacci\u00f3n t\u00e9cnica en la p\u00e1gina web de Wolne Lektury

          \r\n\r\n
          \r\n\r\n

          Redactores literarios

          \r\n

          La redacci\u00f3n literaria incluye la correcci\u00f3n de pruebas, adaptaci\u00f3n e inclusi\u00f3n de las notas a pie de p\u00e1gina , as\u00ed como el tratamiento de los temas literarios. Es una oportunidad \u00fanica de ganar experiencia en la edici\u00f3n digital de textos.

          \r\n\r\n

          \u00bfQui\u00e9n puede ser redactor literario?

          \r\n
            \r\n
          • Las personas que tengan experiencia en la redacci\u00f3n de textos literarios,
          • \r\n
          • estudiantes y licenciados en humanidades que desean obtener esta experiencia.
          • \r\n
          \r\n\r\n

          Encontrar\u00e9is m\u00e1s informaci\u00f3n sobre la redacci\u00f3n literaria en la p\u00e1gina web de Wolne Lektury

          \r\n\r\n

          Traductores

          \r\n

          La p\u00e1gina web de Wolne Lektury.pl viene en 7 idiomas: ingl\u00e9s, franc\u00e9s, alem\u00e1n, espa\u00f1ol, lituano, ruso y ucraniano. Hay m\u00e1s de 200.000 usuarios del extranjero, adem\u00e1s, dentro de poco nuestra colecci\u00f3n incluir\u00e1 obras en otros idiomas. De ah\u00ed que necesitemos traducir sistem\u00e1ticamente nuevos contenidos que aparezcan en la p\u00e1gina.

          \r\n

          \u00bfQui\u00e9n puede ayudarnos con las traducciones?

          \r\n
            \r\n
          • Cualquiera que conozca bien por lo menos alguno de los idiomas anteriores.
          • \r\n
          \r\n\r\n
          \r\n\r\n

          Programadores

          \r\n

          Aparte de la p\u00e1gina creamos tambi\u00e9n:

          \r\n
            \r\n
          • herramientas editoriales,
          • \r\n
          • convertidores para varios formatos de libros electr\u00f3nicos,
          • \r\n
          • aplicaciones m\u00f3viles que facilitan el acceso a nuestra colecci\u00f3n
          • \r\n
          \r\n\r\n

          Usamos las siguientes tecnolog\u00edas: Python, Django, XHTML, JavaScript, jQuery, LaTex, Java. \r\nEl software creado por nosotros es libre.

          \r\n

          \u00bfQui\u00e9n puede ayudar en las tareas programadores?

          \r\n
            \r\n
          • Cualquiera que sepa y quiera ganar puntos para su karma por la participaci\u00f3n en un proyecto de programaci\u00f3n abierto. ;)
          • \r\n
          \r\n\r\n", - "right_column_en": "

          Who are we looking for?

          \r\n\r\n

          Production editors (text composition)

          \r\n

          Text composition is the first stage in editing. By means of WL-XML markup we create a desired text format and display it on the webpage. Production editing takes place on Editorial Platform, which enables us to automate a great deal of work.

          \r\n\r\n

          Who can become a production editor?

          \r\n
            \r\n
          • Anyone - after a short training.
          • \r\n
          \r\n\r\n

          You will find more information on production editing on editorial page of Wolne Lektury

          \r\n\r\n
          \r\n\r\n

          Literary editors

          \r\n

          Literary editing includes proofreading, updating and adding literary motifs. It is a unique opportunity to gain experience in digital text editing.

          \r\n\r\n

          Who can become a literary editor?

          \r\n
            \r\n
          • Those who have experience in literary text editing,
          • \r\n
          • Students and graduates of the humanities, who wants to gain such experience.
          • \r\n
          \r\n

          You will find more information on literary editing on editorial page of Wolne Lektury

          \r\n
          \r\n\r\n

          Translators

          \r\n

          WolneLektury.pl is available in 7 languages - English, French, German, Spanish, Lithuanian, Russian, and Ukrainian. The library is used by over 200 000 readers outside of Poland, and soon our collection will also include books written in foreign (non-Polish) languages. That is why we need to translate new pieces of information systematically, as they appear on the website.

          \r\n

          Who can help us translate?

          \r\n
            \r\n
          • Anyone with a good command of at least one of the languages listed above.
          • \r\n
          \r\n\r\n
          \r\n\r\n

          Programmers

          \r\n

          Apart from the website Wolne Lektury we also create:

          \r\n
            \r\n
          • editorial tools,
          • \r\n
          • converters for various e-book formats,
          • \r\n
          • mobile applications facilitating access to our pages.
          • \r\n
          \r\n\r\n

          We use technologies like: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nOur software is made available under the free license.

          \r\n

          Who can help us with the programming?

          \r\n
            \r\n
          • Those who can do it and would like to gain experience by participating in an open programming project.
          • ", - "left_column_de": "
              \r\n
            • Werde unser Bearbeiter, Programmierer oder \u00dcbersetzter
            • \r\n
            • Erwirb neue F\u00e4higkeiten und Erfahrung
            • \r\n
            • Nimm an dem offenen Projekt teil und bilde eine innovative Internetbibliothek
            • \r\n
            \r\n\r\n

            Wir laden alle Personen ein, die das Projekt mitgestalten m\u00f6chten. Wir arbeiten mit Studenten, Lehrern und Allen, die sich f\u00fcr Literatur, Textbearbeitung und informatische Projekte interessieren. Wir bieten professionelle Schulungen und st\u00e4ndige Sachhilfe. Volont\u00e4re k\u00f6nnen fern oder im Stiftungssitz arbeiten.

            \r\n

            Wir organisieren auch das Studentenpraktikum - wir arbeiten mit dem Institut f\u00fcr Wissenschaftsinformation und Bibliothekwissenschaft an der Universit\u00e4t Warschau, demKarriereb\u00fcro der Kardinal-Stefan-Wyszy\u00f1ski-Universit\u00e4t Warschau und der Fakult\u00e4t f\u00fcr Physik zusammen.

            \r\n\r\n

            Wie kann man sich bei uns melden?

            \r\n

            Alle Interessierten bitten wir um eine Mail an folgende Adresse marta.niedzialkowska@nowoczesnapolska.org.pl.

            \r\n\r\n\r\n\r\n", - "title_uk": "\ufeff\u0412\u0456\u0437\u044c\u043c\u0456\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u043d\u0430\u0448\u0456\u0439 \u0434\u0456\u044f\u043b\u044c\u043d\u043e\u0441\u0442\u0456", - "right_column_it": "

            Chi stiamo cercando?

            \r\n\r\n

            Redattori tecnici (composizione)

            \r\n

            La composizione e la prima fase di lavoro sul testo. Utilizzando i tag di lingua WL-XML il testo ottiene una forma corretta e pu\u00f2 essere visualizzato sul sito web. La supervisione tecnica viene effettuata sulla Piattaforma Editoriale che consente di automatizzare gran parte del lavoro.

            \r\n\r\n

            Chi puo diventare redattore tecnico?

            \r\n
              \r\n
            • Ognuno-dopo un breve corso di formazione.
            • \r\n
            \r\n\r\n

            Per maggiori informazioni sulla redazione tecnica andate sul sito web di Wolne Lektury (Letture Libere)

            \r\n\r\n
            \r\n\r\n

            Redattori letterari

            \r\n

            Tale redazione include correzione, modernizzazione e aggiunta delle note e dei motivi letterari. E' l\u2019unica occasione di acquisire esperienza nell\u2019edizione digitale dei testi.

            \r\n\r\n

            Chi pu\u00f2 diventare redattore letterario?

            \r\n
              \r\n
            • Le persone che hanno esperienza nella redazione dei testi letterari,< li>\r\n
            • Studenti e laureati in discipline umanistiche che vogliono acqusire tale esperienza.
            • \r\n
            \r\n

            Per maggiori informazioni sulla redazione letteraria andate sul sito web di Wolne Lektury

            \r\n
            \r\n\r\n

            Traduttori

            \r\n

            Pagina WolneLektury.pl \u00e8 disponibile in sette lingue - inglese, francese, tedesco, spagnolo, lituano, russo e ucraino. Ci sono piu di 200 mila utenti della biblioteca provenienti dall'estero e tra poco le nostre collezioni comprenderanno anche le opere in lingue straniere.Per questo, dobbiamo continuare a tradurre le nuove informazioni che appaiono sul sito.

            \r\n\r\n

            Chi pu\u00f2 aiutare nelle traduzioni?

            \r\n
              \r\n
            • Ognuno che conosce bene almeno una di queste lingue.
            • \r\n
            \r\n\r\n
            \r\n

            Programmatori

            \r\n

            Oltre al sito web di Letture Libere stiamo creando:

            \r\n
              \r\n
            • strumenti editoriali,
            • \r\n
            • convertitori per diversi formati di e-books,
            • \r\n
            • applicazioni mobili che facilitino l\u2019accesso alle nostre risorse.
            • \r\n
            \r\n\r\n

            Usiamo le tecnologie: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nIl nostro software \u00e8 disponibile su licenza libera.

            \r\n

            Chi pu\u00f2 aiutare nei lavori di software?

            \r\n
              \r\n
            • Ognuno che sa farlo e che vorrebbe ottenere i punti per Karma grazie alla partecipazione al progetto aperto di programmazione. ;)
            • \r\n
            \r\n\r\n", - "title_pl": "W\u0142\u0105cz si\u0119 w prace", - "left_column": "
              \r\n
            • Become our editor, programmer or traslator
            • \r\n
            • Gain new skills and experience
            • \r\n
            • Take part in an open project and create an innovative online library
            • \r\n
            \r\n\r\n

            We invite every person to contribute to our project. We collaborate with students, teachers and anyone interested in literature, text editing and computer projects. We offer professional training courses and constant factual help. Volunteers can work at home or in our office.

            \r\n

            We also organize student trainings - we have established cooperation with the Institute of Information and Book Studies, Warsaw University (UW), the Careers Service at Cardinal Stefan Wyszy\u0144ski University in Warsaw, and with the Faculty of Physics, UW.

            \r\n\r\n

            How to contact us?

            \r\n

            We invite all the people interested to email us atmarta.niedzialkowska@nowoczesnapolska.org.pl.

            ", - "right_column_uk": "\ufeff

            \u041a\u043e\u0433\u043e \u043c\u0438 \u0448\u0443\u043a\u0430\u0454\u043c\u043e?

            \r\n\r\n

            \u0422\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0456\u0432 (\u0432\u0435\u0440\u0441\u0442\u043a\u0430)

            \r\n

            \u0412\u0435\u0440\u0441\u0442\u043a\u0430 - \u0446\u0435 \u043f\u0435\u0440\u0448\u0438\u0439 \u0435\u0442\u0430\u043f \u043f\u0440\u0430\u0446\u0456 \u043d\u0430\u0434 \u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u0417\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0442\u0435\u0433\u0456\u0432 \u043c\u043e\u0432\u0438 WL-XML \u043d\u0430\u0434\u0430\u0454\u043c\u043e \u0442\u0435\u043a\u0441\u0442\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u0432\u0438\u0433\u043b\u044f\u0434 \u0442\u0430 \u0440\u043e\u0431\u0438\u043c\u043e \u043c\u043e\u0436\u043b\u0438\u0432\u0438\u043c \u0457\u0445 \u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u044e \u043d\u0430 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0456. \u0422\u0435\u0445\u043d\u0456\u0447\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0438\u043a\u043e\u043d\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u0420\u0435\u0434\u0430\u043a\u0446\u0456\u0439\u043d\u0456\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0456, \u044f\u043a\u0430 \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0443\u0432\u0430\u0442\u0438 \u0432\u0435\u043b\u0438\u043a\u0443 \u0447\u0430\u0441\u0442\u0438\u043d\u0443 \u043f\u0440\u0430\u0446\u0456.

            \r\n\r\n

            \u0425\u0442\u043e \u043c\u043e\u0436\u0435 \u0441\u0442\u0430\u0442\u0438 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c?

            \r\n
              \r\n
            • \u041a\u043e\u0436\u0435\u043d - \u043f\u0456\u0441\u043b\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0443.
            • \r\n
            \r\n\r\n

            \u0411\u0456\u043b\u044c\u0448\u0435 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u043f\u0440\u043e \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0456 \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0457 Wolne Lektury

            \r\n\r\n
            \r\n\r\n

            \u041b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0456\u0432

            \r\n

            \u041b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0454 \u0432 \u0441\u0435\u0431\u0435 \u043a\u043e\u0440\u0435\u043a\u0442\u0443, \u043e\u0441\u0443\u0447\u0430\u0441\u043d\u0435\u043d\u043d\u044f \u0442\u0435\u043a\u0441\u0442\u0443, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u043f\u0440\u0438\u043c\u0456\u0442\u043e\u043a \u0442\u0430 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432. \u0426\u0435 \u0443\u043d\u0456\u043a\u0430\u043b\u044c\u043d\u0430 \u043c\u043e\u0436\u043b\u0438\u0432\u0456\u0441\u0442\u044c \u0437\u0434\u043e\u0431\u0443\u0442\u0438 \u0434\u043e\u0441\u0432\u0456\u0434 \u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u0456\u0439 \u043e\u0431\u0440\u043e\u0431\u0446\u0456 \u0442\u0435\u043a\u0441\u0442\u0456\u0432.

            \r\n\r\n

            \u0425\u0442\u043e \u043c\u043e\u0436\u0435 \u0441\u0442\u0430\u0442\u0438 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c?

            \r\n
              \r\n
            • \u0422\u043e\u0439, \u0445\u0442\u043e \u043c\u0430\u0454 \u0434\u043e\u0441\u0432\u0456\u0434 \u0443 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u0456 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u0456\u0432,
            • \r\n
            • \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u0438 \u0442\u0430 \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u043a\u0438 \u0433\u0443\u043c\u0430\u043d\u0456\u0442\u0430\u0440\u043d\u0438\u0445 \u0444\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0456\u0432, \u044f\u043a\u0456 \u0445\u043e\u0447\u0443\u0442\u044c \u0437\u0434\u043e\u0431\u0443\u0442\u0438 \u0442\u0430\u043a\u0438\u0439 \u0434\u043e\u0441\u0432\u0456\u0434.
            • \r\n
            \r\n

            \u0411\u0456\u043b\u044c\u0448\u0435 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u043f\u0440\u043e \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0456 \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0457 Wolne Lektury

            \r\n
            \r\n\r\n

            \u041f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0430\u0447\u0456\u0432

            \r\n

            \u0421\u0430\u0439\u0442 WolneLektury.pl \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u043d\u0430 \u0441\u0435\u043c\u0438 \u0456\u043d\u043e\u0437\u0435\u043c\u043d\u0438\u0445 \u043c\u043e\u0432\u0430\u0445 \u2013 \u0430\u043d\u0433\u043b\u0456\u0439\u0441\u044c\u043a\u0456\u0439, \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0456\u0439, \u043d\u0456\u043c\u0435\u0446\u044c\u043a\u0456\u0439, \u0456\u0441\u043f\u0430\u043d\u0441\u044c\u043a\u0456\u0439, \u043b\u0438\u0442\u043e\u0432\u0441\u044c\u043a\u0456\u0439, \u0440\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0456\u0439 \u0442\u0430 \u0443\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0456\u0439. \u0411\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u044e \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0454\u0442\u044c\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043d\u0456\u0436 200 \u0442\u0438\u0441\u044f\u0447 \u0437\u0430\u043a\u043e\u0440\u0434\u043e\u043d\u043d\u0438\u0445 \u0432\u0456\u0434\u0432\u0456\u0447\u0443\u0432\u0430\u0447\u0456\u0432, \u0430 \u043d\u0435\u0437\u0430\u0431\u0430\u0440\u043e\u043c \u0443 \u043d\u0430\u0448\u0456\u0439 \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0439 \u0437\u043d\u0430\u0439\u0434\u0443\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u043e\u0436 \u0442\u0432\u043e\u0440\u0438 \u043d\u0430 \u0456\u043d\u043e\u0437\u0435\u043c\u043d\u0438\u0445 \u043c\u043e\u0432\u0430\u0445. \u0422\u043e\u043c\u0443 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0430\u0442\u0438 \u043d\u043e\u0432\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e, \u044f\u043a\u0430 \u0437\u2019\u044f\u0432\u043b\u044f\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0456.

            \r\n

            \u0425\u0442\u043e \u043c\u043e\u0436\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0443 \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0430\u0445?

            \r\n
              \r\n
            • \u041a\u043e\u0436\u043d\u0438\u0439, \u0445\u0442\u043e \u0434\u043e\u0431\u0440\u0435 \u0432\u043e\u043b\u043e\u0434\u0456\u0454 \u043f\u0440\u0438\u043d\u0430\u0439\u043c\u043d\u0456 \u043e\u0434\u043d\u0456\u0454\u044e \u0437 \u0432\u0438\u0449\u0435\u0437\u0433\u0430\u0434\u0430\u043d\u0438\u0445 \u043c\u043e\u0432.
            • \r\n
            \r\n\r\n
            \r\n\r\n

            \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442\u0456\u0432

            \r\n

            \u041a\u0440\u0456\u043c \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0443 Wolne Lektury \u043c\u0438 \u0442\u0432\u043e\u0440\u0438\u043c\u043e \u0442\u0430\u043a\u043e\u0436:

            \r\n
              \r\n
            • \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0439\u043d\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438,
            • \r\n
            • \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u0438 \u0434\u043b\u044f \u0440\u0456\u0437\u043d\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0456\u0432 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0438\u0445 \u043a\u043d\u0438\u0433,
            • \r\n
            • \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0456 \u0430\u043f\u043b\u0456\u043a\u0430\u0446\u0456\u0457, \u044f\u043a\u0456 \u0440\u043e\u0431\u043b\u044f\u0442\u044c \u043c\u043e\u0436\u043b\u0438\u0432\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u043d\u0430\u0448\u0438\u0445 \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0439.
            • \r\n
            \r\n\r\n

            \u041c\u0438 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0454\u043c\u043e\u0441\u044f \u0442\u0430\u043a\u0438\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0456\u044f\u043c\u0438, \u044f\u043a Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\n\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043d\u0435 \u0437\u0430\u0431\u0435\u0437\u043f\u0435\u0447\u0435\u043d\u043d\u044f, \u044f\u043a\u0435 \u0441\u0442\u0432\u043e\u0440\u044e\u0454\u043c\u043e, \u043d\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u0456\u043b\u044c\u043d\u0456\u0439 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457.

            \r\n

            \u0425\u0442\u043e \u043c\u043e\u0436\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0443\u0432\u0430\u043d\u043d\u0456?

            \r\n
              \r\n
            • \u041a\u043e\u0436\u0435\u043d, \u0445\u0442\u043e \u0432\u043c\u0456\u0454 \u0456 \u0445\u043e\u0447\u0435 \u0437\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442\u0438\u0447\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0456 \u0437\u0434\u043e\u0431\u0443\u0442\u0438 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0456 \u0431\u0430\u043b\u0438 \u0434\u043e \u043a\u0430\u0440\u043c\u0438. ;)
            • \r\n
            \r\n", - "title_en": "Join in the work", - "left_column_pl": "
              \r\n
            • Zosta\u0144 naszym redaktorem, programist\u0105 lub t\u0142umaczem
            • \r\n
            • Zdob\u0105d\u017a nowe umiej\u0119tno\u015bci i do\u015bwiadczenie
            • \r\n
            • We\u017a udzia\u0142 w otwartym projekcie i tw\u00f3rz innowacyjn\u0105 bibliotek\u0119 internetow\u0105
            • \r\n
            \r\n\r\n

            Zapraszamy wszystkie osoby, kt\u00f3re chc\u0105 wsp\u00f3\u0142tworzy\u0107 nasz projekt. Wsp\u00f3\u0142pracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi literatur\u0105, redagowaniem tekst\u00f3w i projektami informatycznymi. Oferujemy profesjonalne szkolenia i sta\u0142\u0105 pomoc merytoryczn\u0105. Wolontariusze mog\u0105 pracowa\u0107 zdalnie lub w siedzibie Fundacji.

            \r\n

            Organizujemy r\u00f3wnie\u017c praktyki studenckie \u2013 nawi\u0105zali\u015bmy wsp\u00f3\u0142prac\u0119 z Instytutem Informacji Naukowej i Studi\u00f3w Bibliologicznych UW, Biurem Karier UKSW oraz Wydzia\u0142em Fizyki UW.

            \r\n\r\n

            Jak si\u0119 do nas zg\u0142osi\u0107?

            \r\n

            Wszystkie zainteresowane osoby prosimy o przys\u0142anie maila na adres marta.niedzialkowska@nowoczesnapolska.org.pl.

            \r\n\r\n\r\n\r\n", - "left_column_it": "
              \r\n
            • Diventa il nostro redattore, programmatore o traduttore
            • \r\n
            • Acquisisci nuove capacit\u00e0 ed esperienze
            • \r\n
            • Prendi parte al progetto aperto e crea una biblioteca innovativa online
            • \r\n
            \r\n\r\n

            Invitiamo tutte le persone volenterose a collaborare al nostro progetto. Lavoriamo con studenti, insegnanti e tutti gli interessati alla letteratura, stesura dei testi e ai progetti IT. Offriamo i corsi di formazione professionali e il sostegno. I volontari possono lavorare a distanza oppure presso la sede della Fondazione.

            \r\n\r\n

            Organizziamo anche i tirocini \u2013 collaboriamo con Instytut Informacji Naukowej i Studi\u00f3w Bibliologicznych (l\u2019Istituto di Informazione Scientifica e Biblioteconomia) dell\u2019Universit\u00e0 di Varsavia, Biuro Karier UKSW (Ufficio di carriera dell\u2019Universit\u00e0 del Cardinale Stefan Wyszy\u0144ski) e con il Dipartimento di Fisica dell\u2019Universit\u00e0 di Varsavia

            \r\n\r\n

            Come contattarci? ?

            \r\n

            Invitiamo Tutte le persone interessate ad inviarci un'e-mail all'indirizzo marta.niedzialkowska@nowoczesnapolska.org.pl.

            \r\n", - "title_es": "Colabora", - "left_column_ru": "\ufeff
              \r\n
            • \u0421\u0442\u0430\u043d\u044c \u043d\u0430\u0448\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u043e\u043c
            • \r\n
            • \u041f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0438 \u043d\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u043d\u0438\u044f \u0438 \u043e\u043f\u044b\u0442
            • \r\n
            • \u041f\u0440\u0438\u043c\u0438 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439 \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443
            • \r\n
            \r\n\r\n

            \u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0441\u0435\u0445, \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u043c \u0441\u043e \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c\u0438, \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0438 \u0432\u0441\u0435\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u0439, \r\n\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0443\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443. \r\n\u0414\u043e\u0431\u0440\u043e\u0432\u043e\u043b\u044c\u0446\u044b \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0438\u043b\u0438 \u0432 \u0448\u0442\u0430\u0431-\u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0435 \u0424\u043e\u043d\u0434\u0430.

            \r\n\r\n

            \u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u0443\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0442\u0430\u0436\u0438\u0440\u043e\u0432\u043a\u0438 - \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u043c \u0441 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u043e\u043c \u043d\u0430\u0443\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0411\u0438\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0412\u0423, \r\n\u0441 \u0411\u044e\u0440\u043e \u043a\u0430\u0440\u044c\u0435\u0440\u044b \u0423\u041a\u0421\u0412 \u0438 \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u043e\u043c \u0424\u0438\u0437\u0438\u043a\u0438 \u0412\u0423.

            \r\n\r\n

            \u041a\u0430\u043a \u043a \u043d\u0430\u043c \u043f\u043e\u043f\u0430\u0441\u0442\u044c?

            \r\n

            \u0412\u0441\u0435 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435-mail \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443: marta.niedzialkowska@nowoczesnapolska.org.pl.

            \r\n\r\n\r\n\r\n", - "slug": "wlacz-sie-w-prace", - "right_column_de": "

            Wen suchen wir?

            \r\n\r\n

            Textbearbeiter (Textbearbeitung)

            \r\n

            In der ersten Phase wird der Text gesetzt. Mithilfe der WL-XML-Sprache gestalten wir den Text und erm\u00f6glichen seine Ver\u00f6ffentlichung auf der Internetseite. Textbearbeitung wird auf der Redaktionsplatrormdurchgef\u00fchrt, die einen gro\u00dfen Arbeitsteil automatisieren l\u00e4sst.

            \r\n\r\n

            Wer kann Textbearbeiter werden

            \r\n
              \r\n
            • Jeder - nach einer kurzen Schulung.
            • \r\n
            \r\n\r\n

            Mehr Infos \u00fcber Textbearbeitungauf der Impressumseite von Wolne Lektury

            \r\n\r\n
            \r\n\r\n

            Bearbeiter im Literaturbereich (Sachbearbeiter)

            \r\n

            Literarische Bearbeitung umfasst die Korrektur, Sprachmodernisierung und Erg\u00e4nzung von F\u00fc\u00dfnoten und literarischen Motiven. Das ist eine einzigartige M\u00f6glichkeit, die Kenntnis der Digitalverarbeitung von Texten zu erwerben.

            \r\n\r\n

            Wer kann Bearbeiter im Literaturbereich werden

            \r\n
              \r\n
            • Personen, die Erfahrung in der Bearbeitung von literarischen Texten besitzen,
            • \r\n
            • Studenten und Absolventen der Geisteswissenschaften, die solche Erfahrung gewinnen m\u00f6chten.
            • \r\n
            \r\n

            Mehr Infos \u00fcber literarische Bearbeitungauf der Impressumseite von Wolne Lektury

            \r\n
            \r\n\r\n

            \u00dcbersetzer

            \r\n

            Die Internetseite WolneLektury.pl ist in sieben Spracheversionen zug\u00e4nglich - im Englischen, Franz\u00f6sichen, Deutschen, Spanischen, Lituanischen, Russischen und Ukrainischen. Bibliotheksbenutzer sind \u00fcber 200.000 Ausl\u00e4nder. Bald wird die Bibliothek mit fremdsprachigen Versionen bereichert. Deswegen brauchen wir auf dem Laufenden, die neu auf der Seite erschienen Infos zu \u00fcbersetzen.

            \r\n

            Wer kann bei \u00dcbersetzungen helfen?

            \r\n
              \r\n
            • Jeder, der mindestenst eine aus den oben genannten Sprachen beherrscht.
            • \r\n
            \r\n\r\n
            \r\n\r\n

            Programmierer

            \r\n

            Au\u00dfer der Internetseite von Wolne Lektury allein errichten wir:

            \r\n
              \r\n
            • Bearbeitungsmittel,
            • \r\n
            • Konvertierungsprogramme zu den verschiedenen E-books-Formaten,
            • \r\n
            • Mobilanwendungen, die Zugang zu B\u00fcchern erleichtern.
            • \r\n
            \r\n\r\n

            Wir machen Gebrauch von solchen Technologien wie: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nDie von uns entwickelte Software machen wird aufunter der freien Lizenz verf\u00fcgbar.

            \r\n

            Wer kann bei der Programmierung helfen?

            \r\n
              \r\n
            • Jeder, der dies kann und will Karmapunkte f\u00fcr die Teilnahme an dem offenen Programmierungsprojekt gewinnen . ;)
            • \r\n
            \r\n", - "left_column_es": "\ufeff
              \r\n
            • Hazte nuestro redactor, programador o traductor
            • \r\n
            • Adquiere nuevas aptitudes y experiencia
            • \r\n
            • Participa en un proyecto abierto y crea una innovadora biblioteca virtual
            • \r\n
            \r\n\r\n

            Todos los que quieran participar en nuestro proyecto ser\u00e1n bienvenidos. Colaboramos con estudiantes, maestros, profesores y todos aquellos interesados en literatura, edici\u00f3n de textos y proyectos inform\u00e1ticos. Les ofrecemos aprendizaje profesional y constante ayuda en cuanto a el contenido. Los voluntarios pueden trabajar a distancia o en la oficina principal de la Fundaci\u00f3n.

            \r\n

            Tambi\u00e9n organizamos practicas para los estudiantes \u2013 hemos establecido cooperaci\u00f3n con el Instituto de Informaci\u00f3n Cient\u00edfica y Bibliotecolog\u00eda de la Universidad de Varsovia, el Servicio de Orientaci\u00f3n Profesional de la Universidad de Cardenal Stefan Wyszynski y la Facultad de F\u00edsica de la Universidad de Varsovia.

            \r\n\r\n

            \u00bfC\u00f3mo contactar?

            \r\n

            A todos los interesados les invitamos a mandar un e-mail a marta.niedzialkowska@nowoczesnapolska.org.pl.

            \r\n", - "left_column_en": "
              \r\n
            • Become our editor, programmer or traslator
            • \r\n
            • Gain new skills and experience
            • \r\n
            • Take part in an open project and create an innovative online library
            • \r\n
            \r\n\r\n

            We invite every person to contribute to our project. We collaborate with students, teachers and anyone interested in literature, text editing and computer projects. We offer professional training courses and constant factual help. Volunteers can work at home or in our office.

            \r\n

            We also organize student trainings - we have established cooperation with the Institute of Information and Book Studies, Warsaw University (UW), the Careers Service at Cardinal Stefan Wyszy\u0144ski University in Warsaw, and with the Faculty of Physics, UW.

            \r\n\r\n

            How to contact us?

            \r\n

            We invite all the people interested to email us atmarta.niedzialkowska@nowoczesnapolska.org.pl.

            ", - "right_column_fr": "

            Qui cherchons-nous?

            \r\n\r\n

            R\u00e9dacteurs techniques (composition de texte)

            \r\n

            La composition est une premi\u00e8re \u00e9tape du travail sur un texte. \u00c0 l'aide des balises du langage WL-XML on forme un texte et l'affiche sur le site. La r\u00e9daction est ex\u00e9cut\u00e9e sur la Plateforme de R\u00e9daction qui permet d'automatiser la grande majorit\u00e9 du travail.

            \r\n\r\n

            Qui peut devenir r\u00e9dacteur technique?

            \r\n
              \r\n
            • Chacun(e) - apr\u00e8s une courte instruction.
            • \r\n
            \r\n\r\n

            Si vous voulez trouver plus d'informations sur la r\u00e9daction technique, visitez le site de la r\u00e9daction de Wolne Lektury

            \r\n\r\n
            \r\n\r\n

            R\u00e9dacteurs litt\u00e9raires

            \r\n

            La r\u00e9daction litt\u00e9raire se compose de la correction des \u00e9preuves, r\u00e9actualisation et addition des annotations et motifs litt\u00e9raires. C'est une opportunit\u00e9 unique d'acqu\u00e9rir de l'exp\u00e9rience dans le domaine de l'\u00e9dition num\u00e9rique.

            \r\n\r\n

            Qui peut devenir r\u00e9dacteur litt\u00e9raire?

            \r\n
              \r\n
            • Personnes qui ont d\u00e9j\u00e0 une exp\u00e9rience dans la r\u00e9daction des textes litt\u00e9raires,
            • \r\n
            • \u00c9tudiants et gradu\u00e9s d'\u00e9tudes humanistes qui souhaitent acqu\u00e9rir une telle exp\u00e9rience.
            • \r\n
            \r\n

            Si vous voulez trouver plus d'informations sur la r\u00e9daction litt\u00e9raire, visitez le site de la r\u00e9daction de Wolne Lektury

            \r\n
            \r\n\r\n

            Traducteurs

            \r\n

            Le site WolneLektury.pl est accessible en sept langues \u00e9trang\u00e8res - anglaise, fran\u00e7aise, allemande, espagnole, lithuanienne, russe et ukrainienne. Plus de 200 mille d'\u00e9trangers utilisent notre biblioth\u00e8que et comme prochainement notre collection contiendra aussi des ouvrages en langues \u00e9trang\u00e8res, il est essentiel de traduire de nouvelles informations et de les mettre r\u00e9guli\u00e8rement sur le site.

            \r\n

            Qui peut aider \u00e0 la pr\u00e9paration des traductions?

            \r\n
              \r\n
            • Chacun(e) qui conna\u00eet au moins une des cettes langues.
            • \r\n
            \r\n\r\n
            \r\n\r\n

            Programmeurs

            \r\n

            \u00c0 part le site de Wolne Lektury on cr\u00e9e aussi:

            \r\n
              \r\n
            • des outils de r\u00e9daction,
            • \r\n
            • des convertisseurs de formats divers des livres audio,
            • \r\n
            • des applications mobiles qui facilitent l'acc\u00e8s \u00e0 notre collection.
            • \r\n
            \r\n\r\n

            On utilise les technologies telles que Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nLes logiciels que l'on cr\u00e9e sont accessibles sous une licence libre.

            \r\n

            Qui peut aider aux travaux de programmation?

            \r\n
              \r\n
            • Chacun(e) qui sait programmer et voudrait accumuler les points de karma pour participer \u00e0 un projet ouvert de programmation ;)
            • \r\n
            \r\n\r\n \r\n", - "title_ru": "\ufeff\u0412\u043a\u043b\u044e\u0447\u0438\u0441\u044c \u0432 \u0440\u0430\u0431\u043e\u0442\u0443", - "title_it": "Prendi parte all'iniziativa" - } - }, - { - "pk": 5, - "model": "infopages.infopage", - "fields": { - "title_de": "Unterst\u00fctze uns", - "left_column_uk": "\ufeff

            \u041f\u0435\u0440\u0435\u043a\u0430\u0436\u0456\u0442\u044c 1% \u043f\u043e\u0434\u0430\u0442\u043a\u0443 \u043d\u0430 Wolne Lektury

            \r\n

            \u0424\u043e\u043d\u0434 \u0421\u0443\u0447\u0430\u0441\u043d\u0430 \u041f\u043e\u043b\u044c\u0449\u0430 (Fundacja Nowoczesna Polska) \u043c\u0430\u0454 \u0441\u0442\u0430\u0442\u0443\u0441 \u041e\u0440\u0433\u0430\u043d\u0456\u0437\u0430\u0446\u0456\u0457 \u0441\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0457 \u043a\u043e\u0440\u0438\u0441\u0442\u0456, \u0442\u043e\u043c\u0443 \u043d\u0430 \u0440\u043e\u0437\u0432\u0438\u0442\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 Wolne Lektury \u043c\u043e\u0436\u043d\u0430 \u043f\u0435\u0440\u0435\u043a\u0430\u0437\u0430\u0442\u0438 1% \u0441\u0432\u043e\u0433\u043e \u043f\u043e\u0434\u0430\u0442\u043a\u0443. \u0414\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0437\u0430\u043f\u043e\u0432\u043d\u0438\u0442\u0438 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u0435 \u043f\u043e\u043b\u0435 \u0443 \u0440\u0456\u0447\u043d\u0456\u0439 \u043f\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0456\u0439 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0456\u0457 (PIT-36, PIT-37 \u0430\u0431\u043e PIT-28). \u0423 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0456\u0457 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0432\u043a\u0430\u0437\u0430\u0442\u0438 \u043d\u0430\u0437\u0432\u0443 \u0424\u043e\u043d\u0434\u0443:

            \r\nFundacja Nowoczesna Polska
            \r\n\u0442\u0430 \u043d\u043e\u043c\u0435\u0440 \u0437 \u041d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0421\u0443\u0434\u043e\u0432\u043e\u0433\u043e \u0420\u0435\u0454\u0441\u0442\u0440\u0443 (KRS) 0000070056
            \r\n", - "main_page": 5, - "right_column_pl": "

            Przeka\u017c darowizn\u0119 na Wolne Lektury

            \r\n

            Ka\u017cda wp\u0142acona kwota zostanie przeznaczona na rozw\u00f3j zasob\u00f3w naszej biblioteki. Wystarczy dokona\u0107 przelewu na konto:

            \r\n\r\nFundacja Nowoczesna Polska
            \r\nul. Marsza\u0142kowska 84/92 lok. 125
            \r\n00-514 Warszawa
            \r\nNr konta: PKO BP 46 10201097 0000 7502 0001 6766
            \r\nTytu\u0142 przelewu: Darowizna na Wolne Lektury
            ", - "right_column_lt": "\ufeff

            Paremkite finansi\u0161kai Wolne Lektury interneto svetain\u0119

            \r\n

            Sumok\u0117ti pinigai bus paskirti m\u016bs\u0173 bibliotekos i\u0161tekli\u0173 raidai. \r\nU\u017etenka atlikti banko pavedim\u0105 \u012f s\u0105skait\u0105:

            \r\n\r\nFundacja Nowoczesna Polska
            \r\nul. Marsza\u0142kowska 84/92 lok. 125
            \r\n00-514 Warszawa
            \r\nS\u0105skaitos numeris: PKO BP 46 10201097 0000 7502 0001 6766
            \r\nPavedimo pavadinimas: Darowizna na Wolne Lektury
            \r\n", - "left_column_lt": "\ufeff

            Skirkite 1% pajam\u0173 mokes\u010dio Wolne Lektury interneto svetainei

            \r\n

            Fondas \u0160iuolaikin\u0117 Lenkija turi komunalini\u0173 paslaug\u0173 \u012fstaigos status\u0105, d\u0117l to galima paskirti 1% pajam\u0173 mokes\u010dio projekto Wolne Lektury raidai. \u0160iuo tikslu reikia u\u017epildyti atitinkam\u0105 langel\u012f metin\u0117je pajam\u0173 mokes\u010dio deklaracijoje (PIT-36, PIT-37 lub PIT-28) ir pateikti \u017eemiau esant\u012f pavadinim\u0105:

            \r\nFundacja Nowoczesna Polska
            \r\nbei Nacionalinio teism\u0173 registro (KRS) numer\u012f 0000070056
            \r\n\r\n\r\n", - "title_fr": "Aidez-nous", - "right_column_ru": "\ufeff

            \u041f\u0435\u0440\u0435\u0448\u043b\u0438 \u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043b\u044f Wolne Lektury

            \r\n

            \u0412\u0441\u0435 \u0434\u0435\u043d\u0435\u0436\u043d\u044b\u0435 \u0432\u0437\u043d\u043e\u0441\u044b \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043a\u043d\u0438\u0436\u043d\u043e\u0433\u043e \u0444\u043e\u043d\u0434\u0430 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0434\u0435\u043d\u044c\u0433\u0438 \u043d\u0430 \u0441\u0447\u0435\u0442:

            \r\n\r\nFundacja Nowoczesna Polska
            \r\nul. Marsza\u0142kowska 84/92 lok. 125
            \r\n00-514 Warszawa
            \r\n\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0435\u0442\u0430: PKO BP 46 10201097 0000 7502 0001 6766
            \r\n\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f: Darowizna na Wolne Lektury
            \r\n", - "left_column_fr": "

            Transf\u00e9rez 1% de vos imp\u00f4ts pour Wolne Lektury

            \r\n

            La fondation Nowoczesna Polska est une organisation d'utilit\u00e9 publique et alors 1% de vos imp\u00f4ts peut \u00eatre transf\u00e9r\u00e9 pour le d\u00e9veloppement du projet Wolne Lektury. Pour le faire il faut remplir la rubrique convenable dans la d\u00e9claration annuelle des imp\u00f4ts (PIT-36, PIT-37 ou PIT-28). Dans la d\u00e9claration il faut donner le nom:

            \r\nFundacja Nowoczesna Polska
            \r\net le num\u00e9ro KRS (Registre National Juridique): 0000070056
            \r\n", - "title": "Support us", - "title_lt": "Paremkite mus", - "right_column": "

            Donate to Wolne Lektury

            \r\n

            Every donation will be allocated for developing the library collection. Just transfer the money to:

            \r\n\r\nFundacja Nowoczesna Polska
            \r\nul. Marsza\u0142kowska 84/92 lok. 125
            \r\n00-514 Warszawa
            \r\nBank account number: PKO BP 46 10201097 0000 7502 0001 6766
            \r\nTitle of payment: Darowizna na Wolne Lektury
            ", - "right_column_es": "

            Haz un donativo a Wolne Lektury

            \r\n

            Cada aporte ser\u00e1 destinado al incremento del fondo de nuestra biblioteca. Basta con hacer una transferencia a nuestra cuenta:

            \r\n\r\nFundacja Nowoczesna Polska
            \r\nUl. Marsza\u0142kowska84/92 lok. 125
            \r\n00-514 Warszawa
            \r\nEl numero de la cuenta: PKO BP 46 10201097 0000 7502 0001 6766
            \r\nEl titulo de la transferencia: Darowizna na Wolne Lektury
            \r\n", - "right_column_en": "

            Donate to Wolne Lektury

            \r\n

            Every donation will be allocated for developing the library collection. Just transfer the money to:

            \r\n\r\nFundacja Nowoczesna Polska
            \r\nul. Marsza\u0142kowska 84/92 lok. 125
            \r\n00-514 Warszawa
            \r\nBank account number: PKO BP 46 10201097 0000 7502 0001 6766
            \r\nTitle of payment: Darowizna na Wolne Lektury
            ", - "left_column_de": "

            \u00dcbergeben Sie 1 % von Ihrer Steuer an Wolne Lektury

            \r\n

            Die Stiftung Modernes Polen besitzt den Status einer Non-Profit-Organisation. Infolgedessen kann man 1 % seiner Steuer an die Entwicklung des Projektes Wolne Lektury \u00fcberreichen. Um dies zu tun, sollte man eine bestimmte Rubrik in der Jahressteuererkl\u00e4rung (Einkommenstuer-36, Einkommensteuer-37 oder Einkommensteuer-28) erf\u00fcllen. In der Erkl\u00e4rung ist die:

            \r\nBezeichnung Stiftung Modernes Polen
            \r\nsowie die Nummer aus dem Landesgerichtsregister (KRS) 0000070056
            einzutragen.", - "title_uk": "\ufeff\u041f\u0456\u0434\u0442\u0440\u0438\u043c\u0430\u0439\u0442\u0435 \u043d\u0430\u0441", - "right_column_it": "

            Fai una donazione a Wolne Lektury

            \r\n

            Ogni somma versata sar\u00e0 utilizzata per lo sviluppo delle nostre risorse bibliotecarie. Basta fare un versamento sul conto:

            \r\n\r\nFundacja Nowoczesna Polska
            \r\nul. Marsza\u0142kowska 84/92 lok. 125
            \r\n00-514 Warszawa
            \r\nNr konta: PKO BP 46 10201097 0000 7502 0001 6766
            \r\nTytu\u0142 przelewu (Titolo del versamento): Darowizna na Wolne Lektury
            \r\n\r\n", - "title_pl": "Wesprzyj nas", - "left_column": "

            Support Wolne Lektury with 1% of income tax

            \r\n

            The Modern Poland Foundation has the status of a public benefit organization (Pol. organizacja po\u017cytku publicznego) thanks to which Wolne Lektury can receive 1% of income tax from individuals. To help us in this way, it is necessary to fill in the correct space in the annual tax return (PIT-36, PIT-37 or PIT-28), providing the name:

            \r\nFundacja Nowoczesna Polska
            \r\nand the National Court Register number - Krajowy Rejestr S\u0105dowy (KRS) 0000070056
            ", - "right_column_uk": "\ufeff

            \u0417\u0440\u043e\u0431\u0456\u0442\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0456\u0439\u043d\u0438\u0439 \u0432\u043d\u0435\u0441\u043e\u043a \u043d\u0430 Wolne Lektury

            \r\n

            \u0423\u0441\u0456 \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u0456 \u043a\u043e\u0448\u0442\u0438 \u0431\u0443\u0434\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043e \u0434\u043b\u044f \u0440\u043e\u0437\u0432\u0438\u0442\u043a\u0443 \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0457 \u043d\u0430\u0448\u043e\u0457 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438. \u0404\u0434\u0438\u043d\u0435, \u0449\u043e \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0437\u0440\u043e\u0431\u0438\u0442\u0438, \u0446\u0435 \u043f\u0435\u0440\u0435\u0440\u0430\u0445\u0443\u0432\u0430\u0442\u0438 \u043a\u043e\u0448\u0442\u0438 \u043d\u0430 \u0440\u0430\u0445\u0443\u043d\u043e\u043a:

            \r\n\r\nFundacja Nowoczesna Polska
            \r\nul. Marsza\u0142kowska 84/92 lok. 125
            \r\n00-514 Warszawa
            \r\n\u041d\u043e\u043c\u0435\u0440 \u0431\u0430\u043d\u043a\u0456\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0440\u0430\u0445\u0443\u043d\u043a\u0443: PKO BP 46 10201097 0000 7502 0001 6766
            \r\n\u041f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u043f\u043b\u0430\u0442\u0435\u0436\u0443: \u0411\u043b\u0430\u0433\u043e\u0434\u0456\u0439\u043d\u0438\u0439 \u0432\u043d\u0435\u0441\u043e\u043a \u043d\u0430 Wolne Lektury
            \r\n", - "title_en": "Support us", - "left_column_pl": "

            Przeka\u017c 1% podatku na Wolne Lektury

            \r\n

            Fundacja Nowoczesna Polska posiada status Organizacji Po\u017cytku Publicznego dzi\u0119ki czemu na rozw\u00f3j projektu Wolne Lektury mo\u017cna przekaza\u0107 1% swojego podatku. W tym celu nale\u017cy wype\u0142ni\u0107 odpowiedni\u0105 rubryk\u0119 w rocznym zeznaniu podatkowym (PIT-36, PIT-37 lub PIT-28). W zeznaniu nale\u017cy poda\u0107 nazw\u0119:

            \r\nFundacja Nowoczesna Polska
            \r\noraz numer z Krajowego Rejestru S\u0105dowego (KRS) 0000070056
            \r\n", - "left_column_it": "

            Dona l'1% delle tue tasse a Wolne Lektury

            \r\n

            Fundacja Nowoczesna Polska (Fondazione Polonia Moderna) ha lo status dell'Organizzazione del Beneficio Pubblico grazie a cui si pu\u00f2 donare l'1% delle proprie tasse. Per fare questo bisogna compilare l\u2019apposita casella nella dichiarazione annuale dei redditi (PIT-36, PIT-37 o PIT-28). Nella dichiarazione bisogna indicare il nome:

            Fundacja Nowoczesna Polska
            e il numero del Krajowy Rejestr S\u0105dowy (KRS) \u2013 (Nazionale Registro Giudiziario) 0000070056
            \r\n", - "title_es": "Ap\u00f3yanos", - "left_column_ru": "\ufeff

            \u041f\u0435\u0440\u0435\u0434\u0430\u0439 1% \u0441\u0432\u043e\u0435\u0433\u043e \u043d\u0430\u043b\u043e\u0433\u0430 \u0434\u043b\u044f Wolne Lektury

            \r\n\r\n\r\n

            \u0424\u043e\u043d\u0434 Nowoczesna Polska \u0438\u043c\u0435\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0447\u0435\u043c\u0443 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Wolne Lektury \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c 1% \r\n\u043e\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u043d\u0430\u043b\u043e\u0433\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0440\u0443\u0431\u0440\u0438\u043a\u0443 \u0432 \u043b\u0438\u0447\u043d\u043e\u0439 \u0433\u043e\u0434\u043e\u0432\u043e\u0439 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438 \u043e \u0434\u043e\u0445\u043e\u0434\u0430\u0445 (PIT-36, PIT-37 \u0438 PIT-28), \r\n\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435:

            \r\nFundacja Nowoczesna Polska
            \r\n\r\n\u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u043e\u043c\u0435\u0440 \u0438\u0437 \u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0421\u0443\u0434\u0435\u0431\u043d\u043e\u0433\u043e \u0420\u0435\u0435\u0441\u0442\u0440\u0430 (KRS) 0000070056
            \r\n", - "slug": "wesprzyj-nas", - "right_column_de": "

            \u00dcbergeben Sie eine Spende an Wolne Lektury

            \r\n

            Jede eingezahlte Summe wird f\u00fcr die Erweiterung der B\u00fccheranzahl in der Bibiothek \u00fcbermittelt. Es reicht nur eine \u00dcberweisung aufs Konto:

            \r\n\r\nFundacja Nowoczesna Polska (Stiftung Modernes Polen)
            \r\nStra\u00dfe: Marsza\u00b3kowska 84/92, Wohnungsnummer 125
            \r\nPostleitzahl und Stadt: 00-514 Warszawa
            \r\nKontonummer: PKO BP 46 10201097 0000 7502 0001 6766
            \r\n\u00dcberweisungstitel: \"Spende an Wolne Lektury\" oder \"Darowizna na Wolne Lektury\"
            ", - "left_column_es": "

            Dona 1% de tu impuesto a Wolne Lektury

            \r\n

            La Fundaci\u00f3n Polonia Modera tiene car\u00e1cter de organizaci\u00f3n no gubernamental, por lo tanto se puede donar 1% de impuesto para el desarrollo del proyecto Wolne Lektury. Para este prop\u00f3sito hay que rellenar el espacio en blanco apropriado en la declaraci\u00f3n de la renta anual (PIT-36, PIT-37 o PIT-28). Se deber\u00eda poner el nombre:

            \r\nFundacja Nowoczesna Polska
            \r\ny el numero de el Registro Judicial Nacional (KRS) 0000070056
            \r\n\r\n", - "left_column_en": "

            Support Wolne Lektury with 1% of income tax

            \r\n

            The Modern Poland Foundation has the status of a public benefit organization (Pol. organizacja po\u017cytku publicznego) thanks to which Wolne Lektury can receive 1% of income tax from individuals. To help us in this way, it is necessary to fill in the correct space in the annual tax return (PIT-36, PIT-37 or PIT-28), providing the name:

            \r\nFundacja Nowoczesna Polska
            \r\nand the National Court Register number - Krajowy Rejestr S\u0105dowy (KRS) 0000070056
            ", - "right_column_fr": "

            Faites une donation au projet Wolne Lektury

            \r\n

            Chaque somme donn\u00e9e servira au d\u00e9veloppement de notre biblioth\u00e8que. Il suffit de verser l'argent sur le compte:

            \r\n\r\nFundacja Nowoczesna Polska
            \r\nul. Marsza\u0142kowska 84/92 lok. 125
            \r\n00-514 Warszawa
            \r\nLe num\u00e9ro de compte: PKO BP 46 10201097 0000 7502 0001 6766
            \r\nLe libell\u00e9 de virement: Darowizna na Wolne Lektury
            \r\n", - "title_ru": "\ufeff\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438 \u043d\u0430\u0441!", - "title_it": "Sostienici" - } - } -] \ No newline at end of file diff --git a/apps/infopages/locale/de/LC_MESSAGES/django.mo b/apps/infopages/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index 80a39d9e6..000000000 Binary files a/apps/infopages/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/infopages/locale/de/LC_MESSAGES/django.po b/apps/infopages/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 5d8ff58e9..000000000 --- a/apps/infopages/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,1217 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: \n" -"Last-Translator: Kamil \n" -"Language-Team: de \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 -msgid "main page priority" -msgstr "" - -#: models.py:12 -msgid "slug" -msgstr "" - -#: models.py:13 -msgid "title" -msgstr "" - -#: models.py:14 -msgid "left column" -msgstr "" - -#: models.py:15 -msgid "right column" -msgstr "" - -#: models.py:19 -msgid "info page" -msgstr "" - -#: models.py:20 -msgid "info pages" -msgstr "" - -#~ msgid "Wolontariat dla wiedzy" -#~ msgstr "Volontariat für Wissen" - -#~ msgid "" -#~ "

            Wolontariat

            \r\n" -#~ "\t

            \r\n" -#~ "\t\tBiogramy pisarzy oraz definicje epok i gatunków literackich w\r\n" -#~ "\t\tbibliotece internetowej Wolne Lektury napisali uczniowie\r\n" -#~ "\t\tczterech szkół podczas warsztatów „Wolontariat dla wiedzy”.\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t\tUczniowie pracowali wspólnie pod merytorycznym nadzorem\r\n" -#~ "\t\tnauczycieli i specjalistów – literaturoznawców na\r\n" -#~ "\t\t\r\n" -#~ "\r\n" -#~ "\t\t\tplatformie internetowej wiki\r\n" -#~ "\t\tprzygotowanej przez zespół\r\n" -#~ "\t\t2ia. Praca nad notami była " -#~ "jednocześnie nauką wykorzystywania\r\n" -#~ "\t\tkomputerów i internetu do wyszukiwania informacji, a także\r\n" -#~ "\t\tweryfikowania ich wiarygodności.\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t\tProjekt \"Wolontariat dla wiedzy\" został zrealizowany dzięki\r\n" -#~ "\t\twsparciu\r\n" -#~ "\t\t\r\n" -#~ "\t\t\tMinisterstwa Edukacji Narodowej. Nagrody dla uczniów ufundowali" -#~ "\r\n" -#~ "\t\t\r\n" -#~ "\r\n" -#~ "\t\t\tWydawnictwo Nasza Księgarnia\r\n" -#~ "\t\ti\r\n" -#~ "\t\tWydawnictwo Helion. Noty " -#~ "zweryfikowano w serwisie\r\n" -#~ "\t\t\r\n" -#~ "\t\t\tPlagiat.pl.\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t\tRaport z realizacji projektu " -#~ "„Wolontariat dla wiedzy\".\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t" -#~ "\r\n" -#~ "\t\r\n" -#~ "\t\r\n" -#~ " " -#~ "\r\n" -#~ " " -#~ "\r\n" -#~ "\t

            \r\n" -#~ msgstr "" -#~ "

            Volontariat

            \r\n" -#~ "\t

            \r\n" -#~ "\t\tSchriftsteller-Biographien und Definitionen von Epochen und " -#~ "Literaturgattungen\r\n" -#~ " in der Internetbibliothek Freie Lektüren haben unsere Schüler aus vier" -#~ "\r\n" -#~ " Schulen während Workshops \"Volontariat für Wissen\" geschrieben.\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t\tDie Schüler haben gemeinsam unter Aufsicht der Lehrer\r\n" -#~ "\t\tund Spezialisten -Literaturwissenschaftler - gearbeitet\r\n" -#~ "\t\t\r\n" -#~ "\r\n" -#~ "\t\t\tauf \"wiki\" Internetplattform\r\n" -#~ "\t\tvorbereitet von unserem Team\r\n" -#~ "\t\t2ia. Der Einsatz von Computer und " -#~ "Internet wurde\r\n" -#~ "\t\t- während der Arbeiten an Noten - für die Informationssuche und " -#~ "Informationsprüfung genutzt\r\n" -#~ "\t\tund gleichzeitig als notwendiges Werkzeug in den Lernprozess " -#~ "einbezogen.\r\n" -#~ "\t

            \r\n" -#~ " \r\n" -#~ "\t

            \r\n" -#~ "\t\tDas Projekt \"Volontariat für Wissen\" wurde dank der Unterstützung " -#~ "umgesetzt, von\r\n" -#~ "\t\t\r\n" -#~ "\t\t\tMinisterium für Bildung. Preise für Schüler spendeten\r\n" -#~ "\t\t\r\n" -#~ "\r\n" -#~ "\t\t\tVerlag unsere Buchhandlung\r\n" -#~ "\t\tund\r\n" -#~ "\t\tWydawnictwo Helion. Noten wurden im " -#~ "Service verifiziert\r\n" -#~ "\t\t\r\n" -#~ "\t\t\tPlagiat.pl.\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t\tder Bericht über das Projekt " -#~ "\"Volontariat für Wissen\".\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t" -#~ "\r\n" -#~ "\t\r\n" -#~ "\t\r\n" -#~ " " -#~ "\r\n" -#~ " " -#~ "\r\n" -#~ "\t

            \r\n" - -#~ msgid "" -#~ "\t

            Autorzy

            \r\n" -#~ "\r\n" -#~ "\t
              \r\n" -#~ "\t\t
            1. \r\n" -#~ "\t\t\t

              \r\n" -#~ "\t\t\t\tGimnazjum nr 40 z Oddziałami Integracyjnymi w Zespole\r\n" -#~ "\t\t\t\tSzkół nr 69 im. Armii Krajowej Grupy Bojowej „KRYBAR”,\r\n" -#~ "\t\t\t\tul. Drewniana 8, 00-345 Warszawa; klasa druga pod opieką\r\n" -#~ "\t\t\t\tAnny Budziarek-Friedrich:\r\n" -#~ "\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t
                \r\n" -#~ "\t\t\t\t
              • Burdon Filip;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Dębski Bartek;
              • \r\n" -#~ "\t\t\t\t
              • Jackowicz Kamil;
              • \r\n" -#~ "\t\t\t\t
              • Kurek Paweł;
              • \r\n" -#~ "\t\t\t\t
              • Makles Bartosz;
              • \r\n" -#~ "\t\t\t\t
              • Markiewicz Jeremiasz;
              • \r\n" -#~ "\t\t\t\t
              • Migdał Katarzyna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Mioduszewski Michał;
              • \r\n" -#~ "\t\t\t\t
              • Pfeiffer Ida;
              • \r\n" -#~ "\t\t\t\t
              • Płaskowicka Karolina;
              • \r\n" -#~ "\t\t\t\t
              • Sailer Ewa.
              • \r\n" -#~ "\t\t\t
              \r\n" -#~ "\t\t
            2. \r\n" -#~ "\r\n" -#~ "\t\t
            3. \r\n" -#~ "\t\t\t

              \r\n" -#~ "\t\t\t\tXXXIII Liceum Ogólnokształcące im. Mikołaja Kopernika,\r\n" -#~ "\t\t\t\tul. Bema 76, 01-225 Warszawa; klasa pierwsza o profilu\r\n" -#~ "\t\t\t\tbiologiczno-chemicznym pod opieką Elżbiety Konkowskiej:\r\n" -#~ "\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t
                \r\n" -#~ "\t\t\t\t
              • Chwil Bartłomiej;
              • \r\n" -#~ "\t\t\t\t
              • Czarnecka Natalia;
              • \r\n" -#~ "\t\t\t\t
              • Gawrońska Iga;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Grabarczyk Marta;
              • \r\n" -#~ "\t\t\t\t
              • Jastrząb Katarzyna;
              • \r\n" -#~ "\t\t\t\t
              • Krawczak Olga;
              • \r\n" -#~ "\t\t\t\t
              • Krawczyk Marianna;
              • \r\n" -#~ "\t\t\t\t
              • Kur Natalia;
              • \r\n" -#~ "\t\t\t\t
              • Kwiatek Marta;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Laśkiewicz Joanna;
              • \r\n" -#~ "\t\t\t\t
              • Machczyńska Daria;
              • \r\n" -#~ "\t\t\t\t
              • Miecznikowska Izabela;
              • \r\n" -#~ "\t\t\t\t
              • Moczulska Karolina;
              • \r\n" -#~ "\t\t\t\t
              • Mościcka Aneta;
              • \r\n" -#~ "\t\t\t\t
              • Narloch Sabina;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Przybysz Paweł;
              • \r\n" -#~ "\t\t\t\t
              • Puchta Marek;
              • \r\n" -#~ "\t\t\t\t
              • Ryska Cezary;
              • \r\n" -#~ "\t\t\t\t
              • Sandomierski Bartłomiej;
              • \r\n" -#~ "\t\t\t\t
              • Sławiński Tomasz;
              • \r\n" -#~ "\t\t\t\t
              • Słowik Olga;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Starzycka Katarzyna;
              • \r\n" -#~ "\t\t\t\t
              • Strzelczak Karolina;
              • \r\n" -#~ "\t\t\t\t
              • Szafran Danuta;
              • \r\n" -#~ "\t\t\t\t
              • Szmigielska Magdalena;
              • \r\n" -#~ "\t\t\t\t
              • Szulkowska Alicja;
              • \r\n" -#~ "\t\t\t\t
              • Ślusarczyk Anna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Tytkowska Anna.
              • \r\n" -#~ "\t\t\t
              \r\n" -#~ "\t\t\t
            4. \r\n" -#~ "\t\t\t\t

              \r\n" -#~ "\t\t\t\t\tAutorskie Niepubliczne Liceum Ogólnokształcące nr\r\n" -#~ "\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; klasa pierwsza\r\n" -#~ "\t\t\t\t\to profilu ogólnym pod opieką Michała Friedricha:\r\n" -#~ "\t\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t\t
                \r\n" -#~ "\t\t\t\t\t
              • Baraniecka Marta;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Gołaszewska Ewa;
              • \r\n" -#~ "\t\t\t\t\t
              • Kwiatkowski Michał;
              • \r\n" -#~ "\t\t\t\t\t
              • Machnikowska Monika;
              • \r\n" -#~ "\t\t\t\t\t
              • Pietrzak Bartosz;
              • \r\n" -#~ "\t\t\t\t\t
              • Przespolewski Przemysław;
              • \r\n" -#~ "\t\t\t\t\t
              • Rosińska Zuzanna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Sibiga Magdalena.
              • \r\n" -#~ "\t\t\t\t
              \r\n" -#~ "\t\t\t
            5. \r\n" -#~ "\t\t\t
            6. \r\n" -#~ "\t\t\t\t

              \r\n" -#~ "\t\t\t\t\tLXIV Liceum Ogólnokształcące im. St. I. Witkiewicza,\r\n" -#~ "\t\t\t\t\tul. Elbląska 51, 01-737 Warszawa; klasa pierwsza o\r\n" -#~ "\t\t\t\t\tprofilu ogólnym pod opieką Daniela Zycha:\r\n" -#~ "\t\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t\t
                \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Andrzejczak Kamil;
              • \r\n" -#~ "\t\t\t\t\t
              • Czubaj Konrad;
              • \r\n" -#~ "\t\t\t\t\t
              • Drągowska Katarzyna;
              • \r\n" -#~ "\t\t\t\t\t
              • Gajewska Magdalena;
              • \r\n" -#~ "\t\t\t\t\t
              • Głowacki Jan;
              • \r\n" -#~ "\t\t\t\t\t
              • Grad Paweł;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Hnatowski Bartek;
              • \r\n" -#~ "\t\t\t\t\t
              • Karwowski Marcin;
              • \r\n" -#~ "\t\t\t\t\t
              • Kłos Aneta;
              • \r\n" -#~ "\t\t\t\t\t
              • Kozieł Barbara;
              • \r\n" -#~ "\t\t\t\t\t
              • Kozłowska Anna;
              • \r\n" -#~ "\t\t\t\t\t
              • Krug Pamela;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Krzosek Jakub;
              • \r\n" -#~ "\t\t\t\t\t
              • Lubaś Michał;
              • \r\n" -#~ "\t\t\t\t\t
              • Masewicz Natalia;
              • \r\n" -#~ "\t\t\t\t\t
              • Mastalerz Agnieszka;
              • \r\n" -#~ "\t\t\t\t\t
              • Modelska Marta;
              • \r\n" -#~ "\t\t\t\t\t
              • Nowak Aleksandra;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Pabian Agnieszka;
              • \r\n" -#~ "\t\t\t\t\t
              • Paszkowska Aleksandra;
              • \r\n" -#~ "\t\t\t\t\t
              • Pielat Zofia;
              • \r\n" -#~ "\t\t\t\t\t
              • Poniecka Agnieszka;
              • \r\n" -#~ "\t\t\t\t\t
              • Pytlak Urszula;
              • \r\n" -#~ "\t\t\t\t\t
              • Rosa Karolina;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Smyczyńska Kamila;
              • \r\n" -#~ "\t\t\t\t\t
              • Stolińska Barbara;
              • \r\n" -#~ "\t\t\t\t\t
              • Szymańska Katarzyna;
              • \r\n" -#~ "\t\t\t\t\t
              • Ścibior Ewa;
              • \r\n" -#~ "\t\t\t\t\t
              • Witczak Magda;
              • \r\n" -#~ "\t\t\t\t\t
              • Witkowska Justyna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Wyrzykowska Jowita;
              • \r\n" -#~ "\t\t\t\t\t
              • Ziółkowska Adrianna.
              • \r\n" -#~ "\t\t\t\t
              \r\n" -#~ "\t\t\t
            7. \r\n" -#~ "\t \r\n" -#~ "\t
            \r\n" -#~ msgstr "" -#~ "\t

            Autoren

            \r\n" -#~ "\r\n" -#~ "\t
              \r\n" -#~ "\t\t
            1. \r\n" -#~ "\t\t\t

              \r\n" -#~ "\t\t\t\tGymnasium Nr. 40 mit Integrationsabteilungen \r\n" -#~ "\t\t\t\tSchulverbund Nr. 69 Schulname: Armii Krajowej Grupy Bojowej " -#~ "„KRYBAR”, \r\n" -#~ "\t\t\t\tStr. Drewniana 8, 00-345 Warszawa; 2. Klasse\r\n" -#~ "\t\t\t\tKlassenlehrerin: Anna Budziarek-Friedrich:\r\n" -#~ "\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t
                \r\n" -#~ "\t\t\t\t
              • Burdon Filip;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Dębski Bartek;
              • \r\n" -#~ "\t\t\t\t
              • Jackowicz Kamil;
              • \r\n" -#~ "\t\t\t\t
              • Kurek Paweł;
              • \r\n" -#~ "\t\t\t\t
              • Makles Bartosz;
              • \r\n" -#~ "\t\t\t\t
              • Markiewicz Jeremiasz;
              • \r\n" -#~ "\t\t\t\t
              • Migdał Katarzyna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Mioduszewski Michał;
              • \r\n" -#~ "\t\t\t\t
              • Pfeiffer Ida;
              • \r\n" -#~ "\t\t\t\t
              • Płaskowicka Karolina;
              • \r\n" -#~ "\t\t\t\t
              • Sailer Ewa.
              • \r\n" -#~ "\t\t\t
              \r\n" -#~ "\t\t
            2. \r\n" -#~ "\r\n" -#~ "\t\t
            3. \r\n" -#~ "\t\t\t

              \r\n" -#~ "\t\t\t\tXXXIII Kopernikus Oberschule,\r\n" -#~ "\t\t\t\tStr. Bema 76, 01-225 Warszawa; 1. Klasse; \r\n" -#~ "\t\t\t\tFachbereiche: Biologie-Chemie; Klassenlehrerin: Elżbieta " -#~ "Konkowska:\r\n" -#~ "\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t
                \r\n" -#~ "\t\t\t\t
              • Chwil Bartłomiej;
              • \r\n" -#~ "\t\t\t\t
              • Czarnecka Natalia;
              • \r\n" -#~ "\t\t\t\t
              • Gawrońska Iga;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Grabarczyk Marta;
              • \r\n" -#~ "\t\t\t\t
              • Jastrząb Katarzyna;
              • \r\n" -#~ "\t\t\t\t
              • Krawczak Olga;
              • \r\n" -#~ "\t\t\t\t
              • Krawczyk Marianna;
              • \r\n" -#~ "\t\t\t\t
              • Kur Natalia;
              • \r\n" -#~ "\t\t\t\t
              • Kwiatek Marta;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Laśkiewicz Joanna;
              • \r\n" -#~ "\t\t\t\t
              • Machczyńska Daria;
              • \r\n" -#~ "\t\t\t\t
              • Miecznikowska Izabela;
              • \r\n" -#~ "\t\t\t\t
              • Moczulska Karolina;
              • \r\n" -#~ "\t\t\t\t
              • Mościcka Aneta;
              • \r\n" -#~ "\t\t\t\t
              • Narloch Sabina;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Przybysz Paweł;
              • \r\n" -#~ "\t\t\t\t
              • Puchta Marek;
              • \r\n" -#~ "\t\t\t\t
              • Ryska Cezary;
              • \r\n" -#~ "\t\t\t\t
              • Sandomierski Bartłomiej;
              • \r\n" -#~ "\t\t\t\t
              • Sławiński Tomasz;
              • \r\n" -#~ "\t\t\t\t
              • Słowik Olga;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Starzycka Katarzyna;
              • \r\n" -#~ "\t\t\t\t
              • Strzelczak Karolina;
              • \r\n" -#~ "\t\t\t\t
              • Szafran Danuta;
              • \r\n" -#~ "\t\t\t\t
              • Szmigielska Magdalena;
              • \r\n" -#~ "\t\t\t\t
              • Szulkowska Alicja;
              • \r\n" -#~ "\t\t\t\t
              • Ślusarczyk Anna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Tytkowska Anna.
              • \r\n" -#~ "\t\t\t
              \r\n" -#~ "\t\t\t
            4. \r\n" -#~ "\t\t\t\t

              \r\n" -#~ "\t\t\t\t\tPrivate Oberschule Nr 42,\r\n" -#~ "\t\t\t\t\tStr. Iwicka 47 B, 00-735 Warszawa; 1. Klasse\r\n" -#~ "\t\t\t\t\tFachbereich: Allgemeinbildung; Klassenlehrer: Michał Friedrich:" -#~ "\r\n" -#~ "\t\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t\t
                \r\n" -#~ "\t\t\t\t\t
              • Baraniecka Marta;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Gołaszewska Ewa;
              • \r\n" -#~ "\t\t\t\t\t
              • Kwiatkowski Michał;
              • \r\n" -#~ "\t\t\t\t\t
              • Machnikowska Monika;
              • \r\n" -#~ "\t\t\t\t\t
              • Pietrzak Bartosz;
              • \r\n" -#~ "\t\t\t\t\t
              • Przespolewski Przemysław;
              • \r\n" -#~ "\t\t\t\t\t
              • Rosińska Zuzanna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Sibiga Magdalena.
              • \r\n" -#~ "\t\t\t\t
              \r\n" -#~ "\t\t\t
            5. \r\n" -#~ "\t\t\t
            6. \r\n" -#~ "\t\t\t\t

              \r\n" -#~ "\t\t\t\t\tLXIV Witkiewicz Oberschule,\r\n" -#~ "\t\t\t\t\tStr. Elbląska 51, 01-737 Warszawa; 1. Klasse, \r\n" -#~ "\t\t\t\t\tFachbereich: Allgemeinbildung; Klassenlehrer: Daniel Zych:\r\n" -#~ "\t\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t\t
                \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Andrzejczak Kamil;
              • \r\n" -#~ "\t\t\t\t\t
              • Czubaj Konrad;
              • \r\n" -#~ "\t\t\t\t\t
              • Drągowska Katarzyna;
              • \r\n" -#~ "\t\t\t\t\t
              • Gajewska Magdalena;
              • \r\n" -#~ "\t\t\t\t\t
              • Głowacki Jan;
              • \r\n" -#~ "\t\t\t\t\t
              • Grad Paweł;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Hnatowski Bartek;
              • \r\n" -#~ "\t\t\t\t\t
              • Karwowski Marcin;
              • \r\n" -#~ "\t\t\t\t\t
              • Kłos Aneta;
              • \r\n" -#~ "\t\t\t\t\t
              • Kozieł Barbara;
              • \r\n" -#~ "\t\t\t\t\t
              • Kozłowska Anna;
              • \r\n" -#~ "\t\t\t\t\t
              • Krug Pamela;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Krzosek Jakub;
              • \r\n" -#~ "\t\t\t\t\t
              • Lubaś Michał;
              • \r\n" -#~ "\t\t\t\t\t
              • Masewicz Natalia;
              • \r\n" -#~ "\t\t\t\t\t
              • Mastalerz Agnieszka;
              • \r\n" -#~ "\t\t\t\t\t
              • Modelska Marta;
              • \r\n" -#~ "\t\t\t\t\t
              • Nowak Aleksandra;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Pabian Agnieszka;
              • \r\n" -#~ "\t\t\t\t\t
              • Paszkowska Aleksandra;
              • \r\n" -#~ "\t\t\t\t\t
              • Pielat Zofia;
              • \r\n" -#~ "\t\t\t\t\t
              • Poniecka Agnieszka;
              • \r\n" -#~ "\t\t\t\t\t
              • Pytlak Urszula;
              • \r\n" -#~ "\t\t\t\t\t
              • Rosa Karolina;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Smyczyńska Kamila;
              • \r\n" -#~ "\t\t\t\t\t
              • Stolińska Barbara;
              • \r\n" -#~ "\t\t\t\t\t
              • Szymańska Katarzyna;
              • \r\n" -#~ "\t\t\t\t\t
              • Ścibior Ewa;
              • \r\n" -#~ "\t\t\t\t\t
              • Witczak Magda;
              • \r\n" -#~ "\t\t\t\t\t
              • Witkowska Justyna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Wyrzykowska Jowita;
              • \r\n" -#~ "\t\t\t\t\t
              • Ziółkowska Adrianna.
              • \r\n" -#~ "\t\t\t\t
              \r\n" -#~ "\t\t\t
            7. \r\n" -#~ "\t \r\n" -#~ "\t
            \r\n" - -#~ msgid "Możesz nam pomóc" -#~ msgstr "Du kannst uns helfen" - -#~ msgid "" -#~ "

            Wolontariat w Wolnych Lekturach

            \r\n" -#~ "
              \r\n" -#~ "
            • Zostań naszym redaktorem, programistą lub tłumaczem – wolontariuszem." -#~ "
            • \r\n" -#~ "
            • Zdobądź nowe umiejętności i doświadczenie.
            • \r\n" -#~ "
            • Weź udział w otwartym projekcie i twórz innowacyjną bibliotekę " -#~ "internetową.
            • \r\n" -#~ "
            \r\n" -#~ "

            Dzięki pracy naszych wolontariuszy opublikowaliśmy już ponad 1500 " -#~ "lektur, z których skorzystały ponad 3 miliony czytelników z " -#~ "całego świata.

            \r\n" -#~ "

            Zapraszamy wszystkie osoby, które chcą współtworzyć nasz projekt. " -#~ "Współpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " -#~ "literaturą, redagowaniem tekstów i projektami informatycznymi. Oferujemy " -#~ "profesjonalne szkolenia i stałą pomoc merytoryczną. Wolontariusze mogą " -#~ "pracować zdalnie lub w siedzibie Fundacji.

            \r\n" -#~ "

            Organizujemy również praktyki studenckie – nawiązaliśmy współpracę z " -#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " -#~ "Karier UKSW oraz Wydziałem Fizyki UW.

            \r\n" -#~ "\r\n" -#~ "

            Jak się do nas zgłosić?

            \r\n" -#~ "

            Wszystkie zainteresowane osoby prosimy o przysłanie maila na adres marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.

            \r\n" -#~ msgstr "" -#~ "

            Volontariat

            \r\n" -#~ "\r\n" -#~ "

            Wir sind stets bemüht, unseren Bibliothekbestand ständig um " -#~ "neue Werke zu erweitern. Dies ist nur \r\n" -#~ " dank der Hilfe unserer Volontäre möglich.

            \r\n" -#~ "\r\n" -#~ "

            Wir laden herzlich alle Menschen ein, die sich an der " -#~ "Mitgestaltung unserer Internet-Schulbibliothek beteiligen wollen.

            \r\n" -#~ " \r\n" -#~ " \r\n" -#~ " \r\n" -#~ "

            Allen Volontären bieten wir Schulungen und Praktikum im " -#~ "Bereich der Textverarbeitung an: \r\n" -#~ " technische und sachliche Redaktion. Volontäre können mehr über " -#~ "Probleme und Möglichkeiten erfahren, \r\n" -#~ " die mit der Veröffentlichung von Internetpublikationen verbunden " -#~ "sind. Unsere Volontäre beteiligen \r\n" -#~ " sich zudem an der Organisation von Schulungen und Konferenzen, " -#~ "helfen bei der Vorbereitung \r\n" -#~ " von Hörtexten (sog. Audiobooks). Wir stellen Verträge und " -#~ "Bescheinigungen unseren Volontären \r\n" -#~ " bezüglich der Art der Tätigkeit und deren Zeitrahmen aus. " -#~ "Schulungen, Verlagspraktikum sowie \r\n" -#~ " während des Volontariats erworbene Erfahrungen und Kompetenzen " -#~ "können ganz gewiss zum beruflichen Aufstieg verhelfen.

            \r\n" -#~ " \r\n" -#~ " \r\n" -#~ "

            Was zu tun ist?

            \r\n" -#~ " \r\n" -#~ "

            Der Großteil der Arbeit liegt in der Vorbereitung der Lektüren " -#~ "zur Veröffentlichung. Die Texte, die wir \r\n" -#~ " von der Nationalbibliothek bekommen, müssen auf Tipp- und andere " -#~ "mechanische Fehler überprüft werden. \r\n" -#~ " Die Anmerkungen müssen in den Text eingefügt werden. Es sei zu " -#~ "bedenken, dass unsere Zielgruppe Schüler sind, \r\n" -#~ " so müssen dementsprechend die Wörter und Wendungen an diese " -#~ "Altersgruppe angepasst werden. Ältere Ausgaben \r\n" -#~ " (hier gilt das strenge Uhrheberrecht) werden stets in Hinblick " -#~ "auf Rechtsschreibung und Flexion an die \r\n" -#~ " Gegenwartssprache angepasst und zwar unter gleichzeitiger " -#~ "Beachtung der Einheit von Form und literarischen Stilen. \r\n" -#~ " Das Aussuchen von literarischen Motiven und Themen, die uns " -#~ "helfen sollen, Literaturinhalte tiefgreifend zu verstehen, \r\n" -#~ " schließen unsere Projektarbeiten ab. Bei allen diesen " -#~ "Unternehmungen helfen uns Volontäre - Lehrer sowie Schüller - \r\n" -#~ " die uns mit eigenen Ratschlägen und Bemerkungen bei der " -#~ "Entscheidungsfindung unterstützen.

            \r\n" -#~ " \r\n" -#~ " \r\n" -#~ "

            Wie Sie uns erreichen?

            \r\n" -#~ " \r\n" -#~ "

            Personen, die an der Zusammenarbeit interessiert sind, bitten " -#~ "wir um eine E-Mail an folgende Adresse zu richten: fundacja@nowoczesnapolska.org.pl.\r\n" -#~ "\r\n" -#~ "

            Wir laden Sie auch ein unter Redaktonseite der Freien Lektüren, auf unserer Hompage finden Sie nützliche Informationen rund um das " -#~ "Thema Redaktionsarbeit.

            \r\n" - -#~ msgid "" -#~ "

            Kogo szukamy?

            \r\n" -#~ "\r\n" -#~ "

            Redaktorów technicznych (skład tekstu)

            \r\n" -#~ "

            Skład jest pierwszym etapem pracy nad tekstem. Za pomocą znaczników " -#~ "języka WL-XML nadajemy tekstowi pożądaną formę i umożliwiamy wyświetlenie " -#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na Platformie Redakcyjnej, " -#~ "która pozwala na zautomatyzowanie dużej części pracy.

            \r\n" -#~ "\r\n" -#~ "

            Kto może zostać redaktorem technicznym?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy – po krótkim szkoleniu.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Więcej informacji o redakcji technicznej znajdziecie na stronie redakcji " -#~ "Wolnych Lektur

            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Redaktorów literackich (merytorycznych)

            \r\n" -#~ "

            Redakcja literacka obejmuje korektę, uwspółcześnienia oraz dodawanie " -#~ "przypisów i motywów literackich. To unikalna możliwość zdobycia " -#~ "doświadczenia w cyfrowej edycji tekstów.

            \r\n" -#~ "\r\n" -#~ "

            Kto może zostać redaktorem literackim?

            \r\n" -#~ "
              \r\n" -#~ "
            • Osoby, które mają doświadczenie w redakcji tekstów literackich,
            • " -#~ "\r\n" -#~ "
            • Studenci i absolwenci studiów humanistycznych, którzy chcą takie " -#~ "doświadczenie zdobyć.
            • \r\n" -#~ "
            \r\n" -#~ "

            Więcej informacji o redakcji merytorycznej znajdziecie na stronie redakcji " -#~ "Wolnych Lektur

            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Tłumaczy

            \r\n" -#~ "

            Strona WolneLektury.pl jest dostępna w siedmiu językach obcych – " -#~ "angielskim, francuskim, niemieckim, hiszpańskim, litewskim, rosyjskim " -#~ "oraz ukraińskim. Użytkownikami biblioteki jest ponad 200 tysięcy osób z " -#~ "zagranicy, a już niedługo nasze zbiory obejmą również dzieła w językach " -#~ "obcych. Dlatego potrzebujemy na bieżąco tłumaczyć nowe informacje " -#~ "pojawiające się na stronie.

            \r\n" -#~ "

            Kto może pomóc w tłumaczeniach?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy, kto dobrze zna co najmniej jeden z powyższych języków.
            • " -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Programistów

            \r\n" -#~ "

            Poza samą stroną Wolnych Lektur tworzymy również:

            \r\n" -#~ "
              \r\n" -#~ "
            • narzędzia redakcyjne,
            • \r\n" -#~ "
            • konwertery do różnych formatów e-booków,
            • \r\n" -#~ "
            • aplikacje mobile ułatwiające dostęp do naszych zasobów.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " -#~ "jQuery, LaTeX, Java.\r\n" -#~ "Tworzone przez nas oprogramowanie udostępniamy na wolnej licencji.

            \r\n" -#~ "

            Kto może pomóc w pracach programistycznych?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy, kto umie i chciałby zdobyć punkty do karmy za udział w " -#~ "otwartym projekcie programistycznym. ;)
            • \r\n" -#~ "
            \r\n" -#~ msgstr "" -#~ "

            Wohlverdiente Volontäre

            \r\n" -#~ "\r\n" -#~ "\t

            Agatapaszkowska (Mitarbeit seit 15. März 2008)

            \r\n" -#~ "\r\n" -#~ "

            bearbeitete u.a. \"Durch Wüste und Wildnis\" von Sienkiewicz; " -#~ "s. auf unserer Website die \"Benutzerbeiträge\": http://wiki." -#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

            \r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\t

            AgnieszkaKappa (Mitarbeit seit 16. März 2008)

            \r\n" -#~ "\r\n" -#~ "

            arbeitete u.a. an der Erstellung der Liste und Beschreibung " -#~ "der literarischen Themen und Motive;bearbeitete Texten von Sienkiewicz " -#~ "( Der Leuchtturmwärter, Janko der Musikant, Quo vadis);s. auf unserer " -#~ "Website die \"Benutzerbeiträge\": http://wiki.wolnepodreczniki.pl/index.php?" -#~ "title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

            " -#~ "\r\n" -#~ "\r\n" -#~ "\r\n" -#~ " \r\n" -#~ " \r\n" -#~ "\r\n" -#~ "

            Anerys (Mitarbeit seit 5. Juli 2007)

            \r\n" -#~ "\r\n" -#~ "

            arbeitete u.a. an der Erstellung der Liste und Beschreibung " -#~ "der literarischen Themen und Motive;nahm an der Diskussion über " -#~ "Literaturgattungen teil, bearbeitete folgende Werke: Bogurodzica, " -#~ "\"Spruchgedichte\" und \"Klagelieder\" von Kochanowski; Gedichte von " -#~ "Slowacki ( Agamemnons Grab), \"Tartuffe oder der Betrüger\" von Moliere, " -#~ "ob Poesien von Kasprowicz (u.a. eine Hymne \"Dies Irae\"); s. auf " -#~ "unserer Website die \"Benutzerbeiträge\": http://wiki." -#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

            \r\n" -#~ " \r\n" -#~ "\r\n" -#~ "\t

            EmiliaZdankiewicz (Mitarbeit seit 17. März 2008)

            \r\n" -#~ "\r\n" -#~ "

            nahm u.a. an der Diskussion und Beschreibung literarischer " -#~ "Motive teil, Słowacki, Kordian; Konopnicka, Unsere Mähre; Mickiewicz, " -#~ "Totenfeier Teil III; s. auf unserer Website die \"Benutzerbeiträge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/" -#~ "EmiliaZdankiewicz

            \r\n" -#~ "\r\n" -#~ " \r\n" -#~ "\t\r\n" -#~ "\t

            Ewa_Serafin (Mitarbeit seit 15. März 2008)

            \r\n" -#~ "\r\n" -#~ "

            arbeitete u.a. an der Erstellung der Liste und Beschreibung " -#~ "der literarischen Themen und Motive, bearbeitete Kasprowicz Gedichte („Z " -#~ "wichrów i hal”, „Nad przepaściami”, „W ciemności schodzi moja dusza” oraz " -#~ "„Nad Niemnem” Orzeszkowej; s. auf unserer Website die \"Benutzerbeiträge" -#~ "\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/" -#~ "Ewa_Serafin

            \r\n" -#~ "\r\n" -#~ "\r\n" -#~ " \t

            Hanna_Golab (Mitarbeit seit 15. März 2008)

            \r\n" -#~ "\r\n" -#~ "

            bearbeitete \" König Ödipus\" von Sophokles sowie \"Dusiołek" -#~ "\" von Lesmian; s. auf unserer Website die \"Benutzerbeiträge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\t

            Ingene (Mitarbeit seit 16. Juli 2008)

            \r\n" -#~ "\r\n" -#~ "

            bearbeitete u.a. „Siłaczka” von Żeromski, „Quo vadis” von " -#~ "Sienkiewicz sowie „Klagelieder” von Kochanowski; s. auf unserer Website " -#~ "die \"Benutzerbeiträge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk" -#~ "%C5%82ad/Ingene

            \r\n" -#~ " \r\n" -#~ "\t

            Jmyszkowska (Mitarbeit seit 26. März 2008)

            \r\n" -#~ "\r\n" -#~ "

            bearbeitete u.a. „Giaur” von Byron sowie „Quo vadis” von " -#~ "Sienkiewicz; s. auf unserer Website die \"Benutzerbeiträge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\r\n" -#~ "\r\n" -#~ "\r\n" -#~ "

            Marysiabailey (Mitarbeit seit 1. Oktober 2007)

            \r\n" -#~ "\r\n" -#~ "

            arbeitete u.a. an der Erstellung der Liste und Beschreibung " -#~ "der literarischen Themen und Motive sowie deren Benutzung; bearbeitete " -#~ "folgende Werke: \"Die Bauern\" von Reymont, \"Die Puppe\" von Prus, \"Un-" -#~ "göttliche Komödie\" von Krasinski, \"Märchens\" und \"Satire\" von " -#~ "Krasickiego, \"Antigone\" von Sophokles sowie Werke von Kochanowski, " -#~ "Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman, Kasprowicz; s. auf " -#~ "unserer Website die \"Benutzerbeiträge“: http://wiki.wolnepodreczniki.pl/" -#~ "index.php?title=Specjalna:Wk%C5%82ad&limit=500&" -#~ "target=Marysiabailey\r\n" -#~ "\r\n" -#~ "\r\n" -#~ "

            Olga_Wojtczak (Mitarbeit seit 21. Oktober 2008)

            \r\n" -#~ "\r\n" -#~ "

            bearbeitete u.a. Romane von Sienkiewicz ( Die Trilogie), " -#~ "Reymont, Żeromski und Dramen von Shakespeare; s. auf unserer Website die " -#~ "\"Benutzerbeiträge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk" -#~ "%C5%82ad/Olga_Wojtczak

            \r\n" -#~ "\r\n" -#~ "

            Renataml (Mitarbeit seit 30. Juni 2007)

            \r\n" -#~ "\r\n" -#~ "

            nahm an der Diskussion über Motivlisten teil, als erfahrene " -#~ "Lehrerin unterstützte sie uns mit vielen Ratschlägen, bearbeitete " -#~ "folgende Werke: \"Die Puppe\" von Prus, \"Balladyna\" von Slowacki, " -#~ "\"Siłaczka\" Żeromski.\r\n" -#~ "\r\n" -#~ " http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

            \r\n" - -#~ msgid "O projekcie" -#~ msgstr "Über das Projekt" - -#~ msgid "" -#~ "{% load reporting_stats %}\r\n" -#~ "\r\n" -#~ "

            Wolne Lektury to biblioteka internetowa czynna 24 godziny na " -#~ "dobę, 365 dni w roku i całkowicie darmowa. W jej zbiorach " -#~ "znajduje się {% count_books %} utworów, w tym wiele " -#~ "lektur szkolnych zalecanych do użytku przez Ministerstwo Edukacji " -#~ "Narodowej, które trafiły już do domeny publicznej. Wszystkie dzieła są " -#~ "odpowiednio opracowane - opatrzone przypisami, motywami i udostępnione w " -#~ "kilku formatach - HTML , TXT , " -#~ "PDF, EPUB, MOBI. W " -#~ "bibliotece znajduje się również kilkaset audiobooków, czytanych przez " -#~ "takich aktorów jak: Danuta Stenka, Jan Peszek czy Andrzej Chyra. Można " -#~ "ich słuchać w formatach MP3 i Ogg Vorbis. Audiobooki są również dostępne w formacie DAISY dostosowanym do potrzeb osób słabowidzących, niewidomych oraz osób " -#~ "mających trudności z czytaniem.

            \r\n" -#~ "\r\n" -#~ "

            Biblioteka Wolne Lektury dostępna jest za pośrednictwem aplikacji " -#~ "mobilnych – na system Android oraz na system iOS.

            \r\n" -#~ "\r\n" -#~ "

            Wszystkie utwory zamieszczone w bibliotece Wolne Lektury można " -#~ "zgodnie z prawem bezpłatnie przeglądać, słuchać, ściągać na swój " -#~ "komputer, a także udostępniać innym i cytować.

            " -#~ msgstr "" -#~ "{% load reporting_stats %}\r\n" -#~ "\r\n" -#~ "

            Wolne Lektury ist eine Internetbibliothek, die 24 Stunden " -#~ "zugänglich ist, 365 Tage im Jahr, dazu völlig kostenlos. Sie " -#~ "beinhält {% count_books %} Werke, darunter viele " -#~ "Schullektüren, die durch das polnische Bildungsministerium empfohlen " -#~ "werden und die zur Gemeinfreiheit gehören. Alle Werke werden entsprechend " -#~ "bearbeitet - mit Fußnoten und Motiven versehen sowie in verschiedenen " -#~ "Formaten zugänglich - HTML , TXT, " -#~ "PDF, EPUB, MOBI. In " -#~ "der Bibliothek befinden sich auch einige hundert von Hörbüchern, die von " -#~ "bekannten polnischen Schauspielern wie Danuta Stenka, Jan Peszek oder " -#~ "Andrzej Chyra vorgelesen werden. Es ist möglich sie in folgenden Formaten " -#~ "abzuspielen: MP3 und Ogg Vorbis. " -#~ "Hörbücher sind auch im Format DAISY zugänglich, die für " -#~ "Bedürfnisse von Schwachsehenden, Blinden und Personen mit " -#~ "Lesenschwierigkeiten geeignet sind.

            \r\n" -#~ "\r\n" -#~ "

            Wolne Lektury-Bibliothek ist auch für Nutzer der mobilen Geräte " -#~ "zugänglich – für das System Android und für das System iOS. " -#~ "zugänglich

            \r\n" -#~ "\r\n" -#~ "

            Alle in der Wolne Lektury-Bibliothek veröffentlichten Werke " -#~ "kann man rechtsmäßig kostenlos durchsehen, hören, auf eigenen Computer " -#~ "herunterladen; überdies ist ihre Weitervermittlung und Anführung erlaubt." -#~ "

            " - -#~ msgid "" -#~ "

            Wolne Lektury to projekt fundacji Nowoczesna Polska realizowany pro " -#~ "publico bono, we współpracy z Biblioteką Narodową, Biblioteką Ślaską oraz " -#~ "Biblioteką Elbląską pod patronatem Ministerstwa Edukacji Narodowej, " -#~ "Ministerstwa Kultury i Dziedzictwa Narodowego oraz Stowarzyszenia Pisarzy " -#~ "Polskich. W Komitecie Honorowym Wolnych Lektur zasiadają: prof. Maria " -#~ "Janion, prof. Grażyna Borkowska, prof. Przemysław Czapliński, prof. " -#~ "Mieczysław Dąbrowski, prof. Ewa Kraskowska, prof. Małgorzata Czermińska, " -#~ "prof. Jerzy Jarzębski i prof. Piotr Śliwiński.

            \r\n" -#~ "\r\n" -#~ "

            Większość utworów w bibliotece nie jest chroniona prawem autorskim i " -#~ "znajduje się w domenie publicznej, co oznacza że można je swobodnie " -#~ "publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi " -#~ "materiałami (przypisy, motywy literackie etc.), które podlegają prawu " -#~ "autorskiemu, to te dodatkowe materiały udostępnione są na licencji Uznanie " -#~ "autorstwa-Na tych samych warunkach 3.0. Publikujemy również kilka " -#~ "utworów, które autorzy lub spadkobiercy praw udostępnili na wolnej " -#~ "licencji Uznanie autorstwa-Na tych samych warunkach 3.0.

            \r\n" -#~ "\r\n" -#~ "Kontakt: wolnelektury@nowoczesnapolska.org.pl" -#~ msgstr "" -#~ "

            Wolne Lektury ist ein pro bono Projekt der Stiftung Nowoczesna Polska " -#~ "(Modernes Polen), in Zusammenarbeit mit der Nationalbibliothek, der " -#~ "Schlesischen Bibliothek und der Elblinger Bibliothek unter dem Patronat " -#~ "des polnischen Bildungsministeriums und des Verbandes polnischer " -#~ "Schrifsteller (Stowarzyszenie Pisarzy Polskich). Im Ehrenkomitee von " -#~ "Wolne Lektury sind Prof. Maria Janion, Prof. Grażyna Borkowska, Prof. " -#~ "Przemysław Czapliñski, Prof. Mieczysław Dąbrowski, Prof. Ewa Kraskowska, " -#~ "Prof. Małgorzata Czermiñska, Prof. Jerzy Jarzêbski und Prof. Piotr " -#~ "Śliwiñski tätig.

            \r\n" -#~ "\r\n" -#~ "

            Die Mehrheit von Bibliothekwerken steht nicht unter dem Schutz des " -#~ "Urheberrechts und gehört zu dem Gemeinfreiheitsbereich, was bedeutet, " -#~ "dass man sie frei veröffentlichen und vermitteln darf. Sollte das Werk " -#~ "mit zusätzlichen Angaben versehen werden (Füßnoten und literarischen " -#~ "Motiven), die dem Urheberrechtsschutz unterliegen, sind diese " -#~ "zusätzlichen Angaben unter der Lizenz Urheberschaftanerkennung unter gleichen " -#~ "Bedigungen 3.0 verfügbar. Wir veröffentlichen auch Werke, die " -#~ "Verfasser oder Rechtsnachfolger unter der freien Lizenz Urheberschaftanerkennung " -#~ "unter gleichen Bedigungen 3.0.

            herausgegeben haben. \r\n" -#~ "\r\n" -#~ "Kontakt: wolnelektury@nowoczesnapolska.org.pl" - -#~ msgid "Zespół" -#~ msgstr "Unser Team" - -#~ msgid "" -#~ "

            Magdalena Biernat – koordynatorka projektu, dyrektor " -#~ "zarządzająca fundacji Nowoczesna Polska. Socjolożka, absolwentka " -#~ "Uniwersytetu Warszawskiego i L’Université libre de Bruxelles. " -#~ "Specjalistka od projektów internetowych. Koordynowała projekty Kandydaci " -#~ "2009 i Mam Prawo Wiedzieć w Stowarzyszeniu 61. Pracowała przy wielu " -#~ "badaniach społecznych realizowanych przez organizacje pozarządowe i firmy " -#~ "badawcze.

            \r\n" -#~ "\r\n" -#~ "

            Radosław Czajka – główny programista, studiował " -#~ "informatykę na MIMUW. Biegły w językach programowania, znaczników: " -#~ "Python, XHTML, Javascript, CSS, LaTeX, SQL. Posiada doświadczenie z " -#~ "frameworkami Django, Jquery, doświadczenie w przekształceniach dokumentów " -#~ "XML (XSLT), w produkcji ebooków w formatach PDF i EPUB oraz w tworzeniu " -#~ "aplikacji mobilnych na system Android i iOS.

            \r\n" -#~ "\r\n" -#~ "

            Marcin Koziej – programista. Absolwent Politechniki " -#~ "Warszawskiej i doktorant w Instytucie Filozofii Uniwersytetu " -#~ "Warszawskiego. Działacz Mokotowskiej Kooperatywy Spożywczej. Podróżnik, " -#~ "rowerzysta i biesiadnik. Homo ludens.

            \r\n" -#~ "\r\n" -#~ "

            Marta Niedziałkowska – redaktorka techniczna, " -#~ "absolwentka bibliotekoznawstwa i informacji naukowej UW. Studentka " -#~ "studiów magisterskich Public Policy and Administration na Collegium " -#~ "Civitas.

            \r\n" -#~ "\r\n" -#~ msgstr "" -#~ "

            Magdalena Biernat - Projektkoordinator, " -#~ "Verwaltungsleiterin der Stiftung Modernes Polen. Soziologin, Absolventin " -#~ "der Universität Warschau und der Université libre de Bruxelles. " -#~ "Spezialistin für Internetprojekte. Sie hat die Projekte Kandydaci 2009 " -#~ "(Kandidaten 2009) und Mam Prawo Wiedzieæ (Ich habe Recht zu wissen) in " -#~ "Verein 61 (Stowarzyszenie 61) koordiniert. Sie hat an vielen " -#~ "Gesellschaftsstudien gearbeitet, die von Nichtregierungsorganisationen " -#~ "und Forschungsanstalten durchgeführt wurden.

            \r\n" -#~ "\r\n" -#~ "

            Radosław Czajka - Hauptprogrammierer, studierte " -#~ "Informatik an der Fakultät für Mathematik, Informatik und Maschinen an " -#~ "der Universität Warschau. Gewandt in Programmierersprachen und " -#~ "Datenbanken: Python, XHTML, Javascript, CSS, LaTeX, SQL. Er besitz " -#~ "Erfahrung in Frameworks: Django, Jquery, den Transformationen XML-Dateien " -#~ "(XSLT), der Herstellung von E-books in PDF und EPUB und Generierung von " -#~ "Mobilanwendungen für das Android- und iOS-System.

            \r\n" -#~ "\r\n" -#~ "

            Marcin Koziej - Programmierer, Absolvent der " -#~ "Technischen Universität Warschau und Doktorand im Institut für " -#~ "Philosophie an Universität. Tätig im Konsumverein von Mokotów (Mokotowska " -#~ "Kooperatywa Spożywcza). Reisender und Radfahrer. Homo ludens.

            \r\n" -#~ "\r\n" -#~ "

            Marta Niedziałkowska - Textbearbeiterin, Absolventin " -#~ "der Wissenschaftsinformation und Bibliothekwissenschaft an der " -#~ "Universität Warschau. Masterstudium: Collegium Civitas, Fakultät: Public " -#~ "Policy and Administration.

            \r\n" -#~ "\r\n" - -#~ msgid "" -#~ "

            Dorota A. Kowalska – redaktorka literacka, " -#~ "językoznawca, polonistka i slawistka, doktor nauk humanistycznych, " -#~ "adiunkt w Pracowni Polszczyzny Kresowej IJP PAN, gdzie zajmuje się " -#~ "historią i współczesnością języka polskiego na Ukrainie. Hobbystycznie " -#~ "śpiewa archaiczne pieśni ukraińskie i rosyjskie, cyklistka.

            \r\n" -#~ "\r\n" -#~ "

            Aleksandra Sekuła – redaktorka literacka, historyczka " -#~ "literatury, doktor nauk humanistycznych, absolwentka Wydziału Polonistyki " -#~ "Uniwersytetu Warszawskiego i Szkoły Nauk Społecznych przy IFiS PAN. " -#~ "Zawodowo i naukowo zajmuje się polskim romantyzmem, historią idei i " -#~ "teorią kultury.

            \r\n" -#~ "\r\n" -#~ "

            Paweł Kozioł – redaktor literacki. Ur. 1979, doktor " -#~ "nauk humanistycznych specjalizujący się w literaturze dawnej, absolwent " -#~ "Wydziału Polonistyki Uniwersytetu Warszawskiego oraz Dulwich College w " -#~ "Londynie. Poeta, krytyk literacki, stypendysta Ministerstwa Kultury i " -#~ "Dziedzictwa Narodowego (2010).

            \r\n" -#~ "\r\n" -#~ "

            Paulina Choromańska – redaktorka techniczna, " -#~ "studentka II roku studiów magisterskich w Instytucie Informacji Naukowej " -#~ "i Studiów Bibliologicznych UW. Pracuje również w Pracowni Dokumentacji " -#~ "Teatru w Instytucie Teatralnym im. Z. Raszewskiego w Warszawie.

            \r\n" -#~ "\r\n" -#~ "

            Aneta Rawska - redaktorka techniczna, studentka II " -#~ "roku studiów magisterskich w Instytucie Informacji Naukowej i Studiów " -#~ "Bibliologicznych UW, miłośniczka wypieków i dobrej kuchni. Od 2009 roku " -#~ "prowadzi serwis koła PZW nr 21 w Wołominie.

            \r\n" -#~ msgstr "" -#~ "

            Dorota A. Kowalska - Bearbeiterin im " -#~ "Literaturbereich, Sprachwissenschaftlerin, Polonistin und Slavistin, " -#~ "Doktortitel in Geisteswissenschaften, Mitarbeiterin in Pracownia " -#~ "Polszczyzny Kresowej IJP PAN, wo sie sich mit der Geschichte und dem " -#~ "heutigen Stand der polnischen Sprache in der Ukraine beschäftigt. Sein " -#~ "Steckenpferd ist das Singen von alten russischen und ukrainischen " -#~ "Liedern. Radfahrerin.

            \r\n" -#~ "\r\n" -#~ "

            Aleksandra Sekuła - Bearbeiterin im Literaturbereich, " -#~ "Literaturgeschichtsforscherin, Doktortitel in Geisteswissenschaften, " -#~ "Absolventin der Polonistik an der Universität Warschau und der " -#~ "Gesellschaftswissenschaftsschule bei IFiS PAN. Beruflich und " -#~ "wissenschaftlich befasst sie sich mit der polnischen Romantik, " -#~ "Ideengeschichte und Kulturtheorie.

            \r\n" -#~ " \r\n" -#~ "

            Paweł Kozioł - Bearbeiter im Literaturbereich. 1979 " -#~ "geboren, Doktortitel in Geisteswissenschaften, Spezialisierung für die " -#~ "alte Literatur, Absolvent der Polonistik an der Universität Warschau und " -#~ "des Dulwich Colleges in London. Dichter, Literaturkritiker, Stipendiat " -#~ "des Ministeriums für Kultur und Nationale Erbe (2010).

            \r\n" -#~ "\r\n" -#~ "

            Paulina Choromańska - Textbearbeiterin, Studentin im " -#~ "4. Semester des Masterstudiums im Insitut für Wissenschaftsinformation " -#~ "und Bibliothekwissenschaft an der Universität Warschau. Sie arbeitet auch " -#~ "in der Forschungsstätte für Theaterdokumentation im Zbigniew-Raszewski-" -#~ "Theaterinsitut in Warschau.

            \r\n" -#~ "\r\n" -#~ "

            Aneta Rawska - Textbearbeiterin, Studentin im 4. " -#~ "Semester des Masterstudiums im Insitut für Wissenschaftsinformation und " -#~ "Bibliothekwissenschaft. Sie mag gute Küche und ist Backenliebhaberin. Ab " -#~ "2009 führt sie den Service des Polnischen Anglervereins Nr. 21 in Wołomin." -#~ "

            \r\n" - -#~ msgid "Wesprzyj nas" -#~ msgstr "Unterstütze uns" - -#~ msgid "" -#~ "

            Przekaż 1% podatku na Wolne Lektury

            \r\n" -#~ "

            Fundacja Nowoczesna Polska posiada status Organizacji Pożytku " -#~ "Publicznego dzięki czemu na rozwój projektu Wolne Lektury można przekazać " -#~ "1% swojego podatku. W tym celu należy wypełnić odpowiednią rubrykę w " -#~ "rocznym zeznaniu podatkowym (PIT-36, PIT-37 lub PIT-28). W zeznaniu " -#~ "należy podać nazwę:

            \r\n" -#~ "Fundacja Nowoczesna Polska
            \r\n" -#~ "oraz numer z Krajowego Rejestru Sądowego (KRS) 0000070056
            " -#~ msgstr "" -#~ "

            Übergeben Sie 1 % von Ihrer Steuer an Wolne Lektury\r\n" -#~ "

            Die Stiftung Modernes Polen besitzt den Status einer Non-Profit-" -#~ "Organisation. Infolgedessen kann man 1 % seiner Steuer an die Entwicklung " -#~ "des Projektes Wolne Lektury überreichen. Um dies zu tun, sollte man eine " -#~ "bestimmte Rubrik in der Jahressteuererklärung (Einkommenstuer-36, " -#~ "Einkommensteuer-37 oder Einkommensteuer-28) erfüllen. In der Erklärung " -#~ "ist die:

            \r\n" -#~ "Bezeichnung Stiftung Modernes Polen
            \r\n" -#~ "sowie die Nummer aus dem Landesgerichtsregister (KRS) 0000070056
            " -#~ "einzutragen." - -#~ msgid "" -#~ "

            Przekaż darowiznę na Wolne Lektury

            \r\n" -#~ "

            Każda wpłacona kwota zostanie przeznaczona na rozwój zasobów naszej " -#~ "biblioteki. Wystarczy dokonać przelewu na konto:

            \r\n" -#~ "\r\n" -#~ "Fundacja Nowoczesna Polska
            \r\n" -#~ "ul. Marszałkowska 84/92 lok. 125
            \r\n" -#~ "00-514 Warszawa
            \r\n" -#~ "Nr konta: PKO BP 46 10201097 0000 7502 0001 6766
            \r\n" -#~ "Tytuł przelewu: Darowizna na Wolne Lektury
            " -#~ msgstr "" -#~ "

            Übergeben Sie eine Spende an Wolne Lektury

            \r\n" -#~ "

            Jede eingezahlte Summe wird für die Erweiterung der Bücheranzahl in " -#~ "der Bibiothek übermittelt. Es reicht nur eine Überweisung aufs Konto:

            " -#~ "\r\n" -#~ "\r\n" -#~ "Fundacja Nowoczesna Polska (Stiftung Modernes Polen)
            \r\n" -#~ "Straße: Marsza³kowska 84/92, Wohnungsnummer 125
            \r\n" -#~ "Postleitzahl und Stadt: 00-514 Warszawa
            \r\n" -#~ "Kontonummer: PKO BP 46 10201097 0000 7502 0001 6766
            \r\n" -#~ "Überweisungstitel: \"Spende an Wolne Lektury\" oder \"Darowizna na Wolne " -#~ "Lektury\"
            " - -#~ msgid "Włącz się w prace" -#~ msgstr "Arbeite zusammen" - -#~ msgid "" -#~ "
              \r\n" -#~ "
            • Zostań naszym redaktorem, programistą lub tłumaczem
            • \r\n" -#~ "
            • Zdobądź nowe umiejętności i doświadczenie
            • \r\n" -#~ "
            • Weź udział w otwartym projekcie i twórz innowacyjną bibliotekę " -#~ "internetową
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Zapraszamy wszystkie osoby, które chcą współtworzyć nasz projekt. " -#~ "Współpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " -#~ "literaturą, redagowaniem tekstów i projektami informatycznymi. Oferujemy " -#~ "profesjonalne szkolenia i stałą pomoc merytoryczną. Wolontariusze mogą " -#~ "pracować zdalnie lub w siedzibie Fundacji.

            \r\n" -#~ "

            Organizujemy również praktyki studenckie – nawiązaliśmy współpracę z " -#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " -#~ "Karier UKSW oraz Wydziałem Fizyki UW.

            \r\n" -#~ "\r\n" -#~ "

            Jak się do nas zgłosić?

            \r\n" -#~ "

            Wszystkie zainteresowane osoby prosimy o przysłanie maila na adres marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.

            \r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\r\n" -#~ msgstr "" -#~ "
              \r\n" -#~ "
            • Werde unser Bearbeiter, Programmierer oder Übersetzter
            • \r\n" -#~ "
            • Erwirb neue Fähigkeiten und Erfahrung
            • \r\n" -#~ "
            • Nimm an dem offenen Projekt teil und bilde eine innovative " -#~ "Internetbibliothek
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Wir laden alle Personen ein, die das Projekt mitgestalten möchten. Wir " -#~ "arbeiten mit Studenten, Lehrern und Allen, die sich für Literatur, " -#~ "Textbearbeitung und informatische Projekte interessieren. Wir bieten " -#~ "professionelle Schulungen und ständige Sachhilfe. Volontäre können fern " -#~ "oder im Stiftungssitz arbeiten.

            \r\n" -#~ "

            Wir organisieren auch das Studentenpraktikum - wir arbeiten mit dem " -#~ "Institut für Wissenschaftsinformation und Bibliothekwissenschaft an der " -#~ "Universität Warschau, demKarrierebüro der Kardinal-Stefan-Wyszyñski-" -#~ "Universität Warschau und der Fakultät für Physik zusammen.

            \r\n" -#~ "\r\n" -#~ "

            Wie kann man sich bei uns melden?

            \r\n" -#~ "

            Alle Interessierten bitten wir um eine Mail an folgende Adresse marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.

            \r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\r\n" - -#~ msgid "" -#~ "

            Kogo szukamy?

            \r\n" -#~ "\r\n" -#~ "

            Redaktorów technicznych (skład tekstu)

            \r\n" -#~ "

            Skład jest pierwszym etapem pracy nad tekstem. Za pomocą znaczników " -#~ "języka WL-XML nadajemy tekstowi pożądaną formę i umożliwiamy wyświetlenie " -#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na Platformie Redakcyjnej, " -#~ "która pozwala na zautomatyzowanie dużej części pracy.

            \r\n" -#~ "\r\n" -#~ "

            Kto może zostać redaktorem technicznym?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy – po krótkim szkoleniu.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Więcej informacji o redakcji technicznej znajdziecie na stronie redakcji Wolnych Lektur

            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Redaktorów literackich (merytorycznych)

            \r\n" -#~ "

            Redakcja literacka obejmuje korektę, uwspółcześnienia oraz dodawanie " -#~ "przypisów i motywów literackich. To unikalna możliwość zdobycia " -#~ "doświadczenia w cyfrowej edycji tekstów.

            \r\n" -#~ "\r\n" -#~ "

            Kto może zostać redaktorem literackim?

            \r\n" -#~ "
              \r\n" -#~ "
            • Osoby, które mają doświadczenie w redakcji tekstów literackich,
            • " -#~ "\r\n" -#~ "
            • Studenci i absolwenci studiów humanistycznych, którzy chcą takie " -#~ "doświadczenie zdobyć.
            • \r\n" -#~ "
            \r\n" -#~ "

            Więcej informacji o redakcji merytorycznej znajdziecie na stronie redakcji Wolnych Lektur

            \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Tłumaczy

            \r\n" -#~ "

            Strona WolneLektury.pl jest dostępna w siedmiu językach obcych – " -#~ "angielskim, francuskim, niemieckim, hiszpańskim, litewskim, rosyjskim " -#~ "oraz ukraińskim. Użytkownikami biblioteki jest ponad 200 tysięcy osób z " -#~ "zagranicy, a już niedługo nasze zbiory obejmą również dzieła w językach " -#~ "obcych. Dlatego potrzebujemy na bieżąco tłumaczyć nowe informacje " -#~ "pojawiające się na stronie.

            \r\n" -#~ "

            Kto może pomóc w tłumaczeniach?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy, kto dobrze zna co najmniej jeden z powyższych języków.
            • " -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Programistów

            \r\n" -#~ "

            Poza samą stroną Wolnych Lektur tworzymy również:

            \r\n" -#~ "
              \r\n" -#~ "
            • narzędzia redakcyjne,
            • \r\n" -#~ "
            • konwertery do różnych formatów e-booków,
            • \r\n" -#~ "
            • aplikacje mobile ułatwiające dostęp do naszych zasobów.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " -#~ "jQuery, LaTeX, Java.\r\n" -#~ "Tworzone przez nas oprogramowanie udostępniamy na wolnej licencji.

            \r\n" -#~ "

            Kto może pomóc w pracach programistycznych?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy, kto umie i chciałby zdobyć punkty do karmy za udział w " -#~ "otwartym projekcie programistycznym. ;)
            • \r\n" -#~ "
            \r\n" -#~ msgstr "" -#~ "

            Wen suchen wir?

            \r\n" -#~ "\r\n" -#~ "

            Textbearbeiter (Textbearbeitung)

            \r\n" -#~ "

            In der ersten Phase wird der Text gesetzt. Mithilfe der WL-XML-" -#~ "Sprache gestalten wir den Text und ermöglichen seine Veröffentlichung auf " -#~ "der Internetseite. Textbearbeitung wird auf der Redaktionsplatrormdurchgeführt, die einen großen " -#~ "Arbeitsteil automatisieren lässt.

            \r\n" -#~ "\r\n" -#~ "

            Wer kann Textbearbeiter werden

            \r\n" -#~ "
              \r\n" -#~ "
            • Jeder - nach einer kurzen Schulung.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Mehr Infos über Textbearbeitungauf der Impressumseite von Wolne Lektury

            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Bearbeiter im Literaturbereich (Sachbearbeiter)

            \r\n" -#~ "

            Literarische Bearbeitung umfasst die Korrektur, Sprachmodernisierung " -#~ "und Ergänzung von Füßnoten und literarischen Motiven. Das ist eine " -#~ "einzigartige Möglichkeit, die Kenntnis der Digitalverarbeitung von Texten " -#~ "zu erwerben.

            \r\n" -#~ "\r\n" -#~ "

            Wer kann Bearbeiter im Literaturbereich werden

            \r\n" -#~ "
              \r\n" -#~ "
            • Personen, die Erfahrung in der Bearbeitung von literarischen Texten " -#~ "besitzen,
            • \r\n" -#~ "
            • Studenten und Absolventen der Geisteswissenschaften, die solche " -#~ "Erfahrung gewinnen möchten.
            • \r\n" -#~ "
            \r\n" -#~ "

            Mehr Infos über literarische Bearbeitungauf der Impressumseite von Wolne Lektury

            \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Übersetzer

            \r\n" -#~ "

            Die Internetseite WolneLektury.pl ist in sieben Spracheversionen " -#~ "zugänglich - im Englischen, Französichen, Deutschen, Spanischen, " -#~ "Lituanischen, Russischen und Ukrainischen. Bibliotheksbenutzer sind über " -#~ "200.000 Ausländer. Bald wird die Bibliothek mit fremdsprachigen Versionen " -#~ "bereichert. Deswegen brauchen wir auf dem Laufenden, die neu auf der " -#~ "Seite erschienen Infos zu übersetzen.

            \r\n" -#~ "

            Wer kann bei Übersetzungen helfen?

            \r\n" -#~ "
              \r\n" -#~ "
            • Jeder, der mindestenst eine aus den oben genannten Sprachen " -#~ "beherrscht.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Programmierer

            \r\n" -#~ "

            Außer der Internetseite von Wolne Lektury allein errichten wir:

            " -#~ "\r\n" -#~ "
              \r\n" -#~ "
            • Bearbeitungsmittel,
            • \r\n" -#~ "
            • Konvertierungsprogramme zu den verschiedenen E-books-Formaten,
            • " -#~ "\r\n" -#~ "
            • Mobilanwendungen, die Zugang zu Büchern erleichtern.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Wir machen Gebrauch von solchen Technologien wie: Python, Django, " -#~ "XHTML, JavaScript, jQuery, LaTeX, Java.\r\n" -#~ "Die von uns entwickelte Software machen wird aufunter der freien Lizenz verfügbar.

            \r\n" -#~ "

            Wer kann bei der Programmierung helfen?

            \r\n" -#~ "
              \r\n" -#~ "
            • Jeder, der dies kann und will Karmapunkte für die Teilnahme an dem " -#~ "offenen Programmierungsprojekt gewinnen . ;)
            • \r\n" -#~ "
            \r\n" - -#~ msgid "Prawa" -#~ msgstr "Rechts" - -#~ msgid "" -#~ "

            Większość utworów w bibliotece nie jest chroniona prawem autorskim i " -#~ "znajduje się w domenie publicznej, co oznacza, że można je swobodnie " -#~ "publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi " -#~ "materiałami (przypisy, motywy literackie etc.), które podlegają prawu " -#~ "autorskiemu, to te dodatkowe materiały udostępnione są na licencji Uznanie " -#~ "autorstwa-Na tych samych warunkach 3.0. Publikujemy również kilka " -#~ "utworów, które autorzy lub spadkobiercy praw udostępnili na wolnej " -#~ "licencji Uznanie autorstwa-Na tych samych warunkach 3.0.

            " -#~ msgstr "" -#~ "

            Die Mehrheit von Bibliothekwerken steht nicht unter dem Schutz des " -#~ "Urheberrechts und gehört zu dem Gemeinfreiheitsbereich, was bedeutet, " -#~ "dass man sie frei veröffentlichen und vermitteln darf. Sollte das Werk " -#~ "mit zusätzlichen Angaben versehen werden (Füßnoten und literarischen " -#~ "Motiven), die dem Urheberrechtsschutz unterliegen, sind diese " -#~ "zusätzlichen Angaben unter der Lizenz Urheberschaftanerkennung unter gleichen " -#~ "Bedigungen 3.0 verfügbar. Wir veröffentlichen auch Werke, die " -#~ "Verfasser oder Rechtsnachfolger unter der freien Lizenz Urheberschaftanerkennung " -#~ "unter gleichen Bedigungen 3.0.

            herausgegeben haben. " diff --git a/apps/infopages/locale/es/LC_MESSAGES/django.mo b/apps/infopages/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index d87aa7da3..000000000 Binary files a/apps/infopages/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/infopages/locale/es/LC_MESSAGES/django.po b/apps/infopages/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index 09b64835c..000000000 --- a/apps/infopages/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,1126 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: \n" -"Last-Translator: KG \n" -"Language-Team: es \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 -msgid "main page priority" -msgstr "" - -#: models.py:12 -msgid "slug" -msgstr "" - -#: models.py:13 -msgid "title" -msgstr "" - -#: models.py:14 -msgid "left column" -msgstr "" - -#: models.py:15 -msgid "right column" -msgstr "" - -#: models.py:19 -msgid "info page" -msgstr "" - -#: models.py:20 -msgid "info pages" -msgstr "" - -#~ msgid "Wolontariat dla wiedzy" -#~ msgstr "Voluntariado para el conocimiento" - -#~ msgid "" -#~ "

            Wolontariat

            \r\n" -#~ "\t

            \r\n" -#~ "\t\tBiogramy pisarzy oraz definicje epok i gatunków literackich w\r\n" -#~ "\t\tbibliotece internetowej Wolne Lektury napisali uczniowie\r\n" -#~ "\t\tczterech szkół podczas warsztatów „Wolontariat dla wiedzy”.\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t\tUczniowie pracowali wspólnie pod merytorycznym nadzorem\r\n" -#~ "\t\tnauczycieli i specjalistów – literaturoznawców na\r\n" -#~ "\t\t\r\n" -#~ "\r\n" -#~ "\t\t\tplatformie internetowej wiki\r\n" -#~ "\t\tprzygotowanej przez zespół\r\n" -#~ "\t\t2ia. Praca nad notami była " -#~ "jednocześnie nauką wykorzystywania\r\n" -#~ "\t\tkomputerów i internetu do wyszukiwania informacji, a także\r\n" -#~ "\t\tweryfikowania ich wiarygodności.\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t\tProjekt \"Wolontariat dla wiedzy\" został zrealizowany dzięki\r\n" -#~ "\t\twsparciu\r\n" -#~ "\t\t\r\n" -#~ "\t\t\tMinisterstwa Edukacji Narodowej. Nagrody dla uczniów ufundowali" -#~ "\r\n" -#~ "\t\t\r\n" -#~ "\r\n" -#~ "\t\t\tWydawnictwo Nasza Księgarnia\r\n" -#~ "\t\ti\r\n" -#~ "\t\tWydawnictwo Helion. Noty " -#~ "zweryfikowano w serwisie\r\n" -#~ "\t\t\r\n" -#~ "\t\t\tPlagiat.pl.\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t\tRaport z realizacji projektu " -#~ "„Wolontariat dla wiedzy\".\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t" -#~ "\r\n" -#~ "\t\r\n" -#~ "\t\r\n" -#~ " " -#~ "\r\n" -#~ " " -#~ "\r\n" -#~ "\t

            \r\n" -#~ msgstr "" -#~ "

            Voluntariado

            \r\n" -#~ "\t

            \r\n" -#~ "\t\tLas biografías de los escritores y las descripciones de las épocas y " -#~ "los géneros literarios en \r\n" -#~ "\t\tla biblioteca virtual de Wolne Lektury han elaborado los alumnos\r\n" -#~ "\t\tde cuatro escuelas durante los talleres “Voluntariado para el " -#~ "conocimiento”.\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t\tLos alumnos han trabajado juntos bajo la supervisión \r\n" -#~ "\t\tde profesores y teóricos de la literatura\r\n" -#~ "\t\t\r\n" -#~ "\r\n" -#~ "\t\t\tplataforma virtual wiki \r\n" -#~ "\t\tpreparada por el equipo\r\n" -#~ "\t\t2ia. Al mismo tiempo los alumnos " -#~ "estaban aprendiendo a utilizar\r\n" -#~ "\t\tlos ordenadores e internet para buscar informaciones y \r\n" -#~ "\t\tverificar su credibilidad.\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t\tEl proyecto \"Voluntariado para el conocimiento\" se ha realizado " -#~ "gracias al \r\n" -#~ "\t\apoyo de\r\n" -#~ "l\t\t\r\n" -#~ "\t\t\tMinisterio de Educación Nacional. Los premios para los alumnos " -#~ "han sido fundados por\r\n" -#~ "\t\t\r\n" -#~ "\r\n" -#~ "\t\t\tEditorial Nasza Księgarnia\r\n" -#~ "\t\ty\r\n" -#~ "\t\tEditorial Helion. Los textos han " -#~ "sido verificados en la página\r\n" -#~ "\t\t\r\n" -#~ "\t\t\tPlagiat.pl.\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t\t El informe de la realización del " -#~ "proyecto “Voluntariado para el conocimiento”.\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t" -#~ "\r\n" -#~ "\t\r\n" -#~ "\t\r\n" -#~ " " -#~ "\r\n" -#~ " " -#~ "\r\n" -#~ "\t

            \r\n" - -#~ msgid "" -#~ "\t

            Autorzy

            \r\n" -#~ "\r\n" -#~ "\t
              \r\n" -#~ "\t\t
            1. \r\n" -#~ "\t\t\t

              \r\n" -#~ "\t\t\t\tGimnazjum nr 40 z Oddziałami Integracyjnymi w Zespole\r\n" -#~ "\t\t\t\tSzkół nr 69 im. Armii Krajowej Grupy Bojowej „KRYBAR”,\r\n" -#~ "\t\t\t\tul. Drewniana 8, 00-345 Warszawa; klasa druga pod opieką\r\n" -#~ "\t\t\t\tAnny Budziarek-Friedrich:\r\n" -#~ "\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t
                \r\n" -#~ "\t\t\t\t
              • Burdon Filip;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Dębski Bartek;
              • \r\n" -#~ "\t\t\t\t
              • Jackowicz Kamil;
              • \r\n" -#~ "\t\t\t\t
              • Kurek Paweł;
              • \r\n" -#~ "\t\t\t\t
              • Makles Bartosz;
              • \r\n" -#~ "\t\t\t\t
              • Markiewicz Jeremiasz;
              • \r\n" -#~ "\t\t\t\t
              • Migdał Katarzyna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Mioduszewski Michał;
              • \r\n" -#~ "\t\t\t\t
              • Pfeiffer Ida;
              • \r\n" -#~ "\t\t\t\t
              • Płaskowicka Karolina;
              • \r\n" -#~ "\t\t\t\t
              • Sailer Ewa.
              • \r\n" -#~ "\t\t\t
              \r\n" -#~ "\t\t
            2. \r\n" -#~ "\r\n" -#~ "\t\t
            3. \r\n" -#~ "\t\t\t

              \r\n" -#~ "\t\t\t\tXXXIII Liceum Ogólnokształcące im. Mikołaja Kopernika,\r\n" -#~ "\t\t\t\tul. Bema 76, 01-225 Warszawa; klasa pierwsza o profilu\r\n" -#~ "\t\t\t\tbiologiczno-chemicznym pod opieką Elżbiety Konkowskiej:\r\n" -#~ "\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t
                \r\n" -#~ "\t\t\t\t
              • Chwil Bartłomiej;
              • \r\n" -#~ "\t\t\t\t
              • Czarnecka Natalia;
              • \r\n" -#~ "\t\t\t\t
              • Gawrońska Iga;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Grabarczyk Marta;
              • \r\n" -#~ "\t\t\t\t
              • Jastrząb Katarzyna;
              • \r\n" -#~ "\t\t\t\t
              • Krawczak Olga;
              • \r\n" -#~ "\t\t\t\t
              • Krawczyk Marianna;
              • \r\n" -#~ "\t\t\t\t
              • Kur Natalia;
              • \r\n" -#~ "\t\t\t\t
              • Kwiatek Marta;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Laśkiewicz Joanna;
              • \r\n" -#~ "\t\t\t\t
              • Machczyńska Daria;
              • \r\n" -#~ "\t\t\t\t
              • Miecznikowska Izabela;
              • \r\n" -#~ "\t\t\t\t
              • Moczulska Karolina;
              • \r\n" -#~ "\t\t\t\t
              • Mościcka Aneta;
              • \r\n" -#~ "\t\t\t\t
              • Narloch Sabina;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Przybysz Paweł;
              • \r\n" -#~ "\t\t\t\t
              • Puchta Marek;
              • \r\n" -#~ "\t\t\t\t
              • Ryska Cezary;
              • \r\n" -#~ "\t\t\t\t
              • Sandomierski Bartłomiej;
              • \r\n" -#~ "\t\t\t\t
              • Sławiński Tomasz;
              • \r\n" -#~ "\t\t\t\t
              • Słowik Olga;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Starzycka Katarzyna;
              • \r\n" -#~ "\t\t\t\t
              • Strzelczak Karolina;
              • \r\n" -#~ "\t\t\t\t
              • Szafran Danuta;
              • \r\n" -#~ "\t\t\t\t
              • Szmigielska Magdalena;
              • \r\n" -#~ "\t\t\t\t
              • Szulkowska Alicja;
              • \r\n" -#~ "\t\t\t\t
              • Ślusarczyk Anna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Tytkowska Anna.
              • \r\n" -#~ "\t\t\t
              \r\n" -#~ "\t\t\t
            4. \r\n" -#~ "\t\t\t\t

              \r\n" -#~ "\t\t\t\t\tAutorskie Niepubliczne Liceum Ogólnokształcące nr\r\n" -#~ "\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; klasa pierwsza\r\n" -#~ "\t\t\t\t\to profilu ogólnym pod opieką Michała Friedricha:\r\n" -#~ "\t\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t\t
                \r\n" -#~ "\t\t\t\t\t
              • Baraniecka Marta;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Gołaszewska Ewa;
              • \r\n" -#~ "\t\t\t\t\t
              • Kwiatkowski Michał;
              • \r\n" -#~ "\t\t\t\t\t
              • Machnikowska Monika;
              • \r\n" -#~ "\t\t\t\t\t
              • Pietrzak Bartosz;
              • \r\n" -#~ "\t\t\t\t\t
              • Przespolewski Przemysław;
              • \r\n" -#~ "\t\t\t\t\t
              • Rosińska Zuzanna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Sibiga Magdalena.
              • \r\n" -#~ "\t\t\t\t
              \r\n" -#~ "\t\t\t
            5. \r\n" -#~ "\t\t\t
            6. \r\n" -#~ "\t\t\t\t

              \r\n" -#~ "\t\t\t\t\tLXIV Liceum Ogólnokształcące im. St. I. Witkiewicza,\r\n" -#~ "\t\t\t\t\tul. Elbląska 51, 01-737 Warszawa; klasa pierwsza o\r\n" -#~ "\t\t\t\t\tprofilu ogólnym pod opieką Daniela Zycha:\r\n" -#~ "\t\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t\t
                \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Andrzejczak Kamil;
              • \r\n" -#~ "\t\t\t\t\t
              • Czubaj Konrad;
              • \r\n" -#~ "\t\t\t\t\t
              • Drągowska Katarzyna;
              • \r\n" -#~ "\t\t\t\t\t
              • Gajewska Magdalena;
              • \r\n" -#~ "\t\t\t\t\t
              • Głowacki Jan;
              • \r\n" -#~ "\t\t\t\t\t
              • Grad Paweł;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Hnatowski Bartek;
              • \r\n" -#~ "\t\t\t\t\t
              • Karwowski Marcin;
              • \r\n" -#~ "\t\t\t\t\t
              • Kłos Aneta;
              • \r\n" -#~ "\t\t\t\t\t
              • Kozieł Barbara;
              • \r\n" -#~ "\t\t\t\t\t
              • Kozłowska Anna;
              • \r\n" -#~ "\t\t\t\t\t
              • Krug Pamela;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Krzosek Jakub;
              • \r\n" -#~ "\t\t\t\t\t
              • Lubaś Michał;
              • \r\n" -#~ "\t\t\t\t\t
              • Masewicz Natalia;
              • \r\n" -#~ "\t\t\t\t\t
              • Mastalerz Agnieszka;
              • \r\n" -#~ "\t\t\t\t\t
              • Modelska Marta;
              • \r\n" -#~ "\t\t\t\t\t
              • Nowak Aleksandra;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Pabian Agnieszka;
              • \r\n" -#~ "\t\t\t\t\t
              • Paszkowska Aleksandra;
              • \r\n" -#~ "\t\t\t\t\t
              • Pielat Zofia;
              • \r\n" -#~ "\t\t\t\t\t
              • Poniecka Agnieszka;
              • \r\n" -#~ "\t\t\t\t\t
              • Pytlak Urszula;
              • \r\n" -#~ "\t\t\t\t\t
              • Rosa Karolina;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Smyczyńska Kamila;
              • \r\n" -#~ "\t\t\t\t\t
              • Stolińska Barbara;
              • \r\n" -#~ "\t\t\t\t\t
              • Szymańska Katarzyna;
              • \r\n" -#~ "\t\t\t\t\t
              • Ścibior Ewa;
              • \r\n" -#~ "\t\t\t\t\t
              • Witczak Magda;
              • \r\n" -#~ "\t\t\t\t\t
              • Witkowska Justyna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Wyrzykowska Jowita;
              • \r\n" -#~ "\t\t\t\t\t
              • Ziółkowska Adrianna.
              • \r\n" -#~ "\t\t\t\t
              \r\n" -#~ "\t\t\t
            7. \r\n" -#~ "\t \r\n" -#~ "\t
            \r\n" -#~ msgstr "" -#~ "\t

            Autores

            \r\n" -#~ "\r\n" -#~ "\t
              \r\n" -#~ "\t\t
            1. \r\n" -#~ "\t\t\t

              \r\n" -#~ "\t\t\t\tGimnazjum nr 40 z Oddziałami Integracyjnymi w Zespole\r\n" -#~ "\t\t\t\tSzkół nr 69 im. Armii Krajowej Grupy Bojowej „KRYBAR”,\r\n" -#~ "\t\t\t\tul. Drewniana 8, 00-345 Varsovia; segundo curso bajo la " -#~ "supervisión de\r\n" -#~ "\t\t\t\tAnna Budziarek-Friedrich:\r\n" -#~ "\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t\t
                \r\n" -#~ "\t\t\t\t
              • Burdon Filip;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Dębski Bartek;
              • \r\n" -#~ "\t\t\t\t
              • Jackowicz Kamil;
              • \r\n" -#~ "\t\t\t\t
              • Kurek Paweł;
              • \r\n" -#~ "\t\t\t\t
              • Makles Bartosz;
              • \r\n" -#~ "\t\t\t\t
              • Markiewicz Jeremiasz;
              • \r\n" -#~ "\t\t\t\t
              • Migdał Katarzyna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Mioduszewski Michał;
              • \r\n" -#~ "\t\t\t\t
              • Pfeiffer Ida;
              • \r\n" -#~ "\t\t\t\t
              • Płaskowicka Karolina;
              • \r\n" -#~ "\t\t\t\t
              • Sailer Ewa.
              • \r\n" -#~ "\t\t\t
              \r\n" -#~ "\t\t
            2. \r\n" -#~ "\r\n" -#~ "\t\t
            3. \r\n" -#~ "\t\t\t

              \r\n" -#~ "\t\t\t\tXXXIII Liceum Ogólnokształcące im. Mikołaja Kopernika,\r\n" -#~ "\t\t\t\tul.Bema 76, 01-225 Varsovia; primer curso de\r\n" -#~ "\t\t\t

              perfil biológico-químico bajo la supervisión de Elżbieta " -#~ "Konkowska\r\n" -#~ "\t\t\t
                \r\n" -#~ "\r\n" -#~ "\t\t\t
                  \r\n" -#~ "\t\t\t\t
                • Chwil Bartłomiej;
                • \r\n" -#~ "\t\t\t\t
                • Czarnecka Natalia;
                • \r\n" -#~ "\t\t\t\t
                • Gawrońska Iga;
                • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
                • Grabarczyk Marta;
                • \r\n" -#~ "\t\t\t\t
                • Jastrząb Katarzyna;
                • \r\n" -#~ "\t\t\t\t
                • Krawczak Olga;
                • \r\n" -#~ "\t\t\t\t
                • Krawczyk Marianna;
                • \r\n" -#~ "\t\t\t\t
                • Kur Natalia;
                • \r\n" -#~ "\t\t\t\t
                • Kwiatek Marta;
                • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
                • Laśkiewicz Joanna;
                • \r\n" -#~ "\t\t\t\t
                • Machczyńska Daria;
                • \r\n" -#~ "\t\t\t\t
                • Miecznikowska Izabela;
                • \r\n" -#~ "\t\t\t\t
                • Moczulska Karolina;
                • \r\n" -#~ "\t\t\t\t
                • Mościcka Aneta;
                • \r\n" -#~ "\t\t\t\t
                • Narloch Sabina;
                • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
                • Przybysz Paweł;
                • \r\n" -#~ "\t\t\t\t
                • Puchta Marek;
                • \r\n" -#~ "\t\t\t\t
                • Ryska Cezary;
                • \r\n" -#~ "\t\t\t\t
                • Sandomierski Bartłomiej;
                • \r\n" -#~ "\t\t\t\t
                • Sławiński Tomasz;
                • \r\n" -#~ "\t\t\t\t
                • Słowik Olga;
                • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
                • Starzycka Katarzyna;
                • \r\n" -#~ "\t\t\t\t
                • Strzelczak Karolina;
                • \r\n" -#~ "\t\t\t\t
                • Szafran Danuta;
                • \r\n" -#~ "\t\t\t\t
                • Szmigielska Magdalena;
                • \r\n" -#~ "\t\t\t\t
                • Szulkowska Alicja;
                • \r\n" -#~ "\t\t\t\t
                • Ślusarczyk Anna;
                • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
                • Tytkowska Anna.
                • \r\n" -#~ "\t\t\t
                \r\n" -#~ "\t\t\t
              • \r\n" -#~ "\t\t\t\t

                \r\n" -#~ "\t\t\t\t\tAutorskie Niepubliczne Liceum Ogólnokształcące nr\r\n" -#~ "\t\t\t\t\t42, ul.Iwicka 47 B, 00-735 Varsovia; primer curso\r\n" -#~ "\t\t\t\t\tbajo la supervisión de Michał Friedrich:\r\n" -#~ "\t\t\t\t

                \r\n" -#~ "\r\n" -#~ "\t\t\t\t
                  \r\n" -#~ "\t\t\t\t\t
                • Baraniecka Marta;
                • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
                • Gołaszewska Ewa;
                • \r\n" -#~ "\t\t\t\t\t
                • Kwiatkowski Michał;
                • \r\n" -#~ "\t\t\t\t\t
                • Machnikowska Monika;
                • \r\n" -#~ "\t\t\t\t\t
                • Pietrzak Bartosz;
                • \r\n" -#~ "\t\t\t\t\t
                • Przespolewski Przemysław;
                • \r\n" -#~ "\t\t\t\t\t
                • Rosińska Zuzanna;
                • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
                • Sibiga Magdalena.
                • \r\n" -#~ "\t\t\t\t
                \r\n" -#~ "\t\t\t
              • \r\n" -#~ "\t\t\t
              • \r\n" -#~ "\t\t\t\t

                \r\n" -#~ "\t\t\t\t\tLXIV Liceum Ogólnokształcące im. St. I. Witkiewicza,\r\n" -#~ "\t\t\t\t\tul.Elbląska 51, 01-737 Varsovia; primer curso bajo la " -#~ "supervisión de Daniel Zych:\r\n" -#~ "\t\t\t\t

                \r\n" -#~ "\r\n" -#~ "\t\t\t\t
                  \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
                • Andrzejczak Kamil;
                • \r\n" -#~ "\t\t\t\t\t
                • Czubaj Konrad;
                • \r\n" -#~ "\t\t\t\t\t
                • Drągowska Katarzyna;
                • \r\n" -#~ "\t\t\t\t\t
                • Gajewska Magdalena;
                • \r\n" -#~ "\t\t\t\t\t
                • Głowacki Jan;
                • \r\n" -#~ "\t\t\t\t\t
                • Grad Paweł;
                • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
                • Hnatowski Bartek;
                • \r\n" -#~ "\t\t\t\t\t
                • Karwowski Marcin;
                • \r\n" -#~ "\t\t\t\t\t
                • Kłos Aneta;
                • \r\n" -#~ "\t\t\t\t\t
                • Kozieł Barbara;
                • \r\n" -#~ "\t\t\t\t\t
                • Kozłowska Anna;
                • \r\n" -#~ "\t\t\t\t\t
                • Krug Pamela;
                • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
                • Krzosek Jakub;
                • \r\n" -#~ "\t\t\t\t\t
                • Lubaś Michał;
                • \r\n" -#~ "\t\t\t\t\t
                • Masewicz Natalia;
                • \r\n" -#~ "\t\t\t\t\t
                • Mastalerz Agnieszka;
                • \r\n" -#~ "\t\t\t\t\t
                • Modelska Marta;
                • \r\n" -#~ "\t\t\t\t\t
                • Nowak Aleksandra;
                • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
                • Pabian Agnieszka;
                • \r\n" -#~ "\t\t\t\t\t
                • Paszkowska Aleksandra;
                • \r\n" -#~ "\t\t\t\t\t
                • Pielat Zofia;
                • \r\n" -#~ "\t\t\t\t\t
                • Poniecka Agnieszka;
                • \r\n" -#~ "\t\t\t\t\t
                • Pytlak Urszula;
                • \r\n" -#~ "\t\t\t\t\t
                • Rosa Karolina;
                • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
                • Smyczyńska Kamila;
                • \r\n" -#~ "\t\t\t\t\t
                • Stolińska Barbara;
                • \r\n" -#~ "\t\t\t\t\t
                • Szymańska Katarzyna;
                • \r\n" -#~ "\t\t\t\t\t
                • Ścibior Ewa;
                • \r\n" -#~ "\t\t\t\t\t
                • Witczak Magda;
                • \r\n" -#~ "\t\t\t\t\t
                • Witkowska Justyna;
                • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
                • Wyrzykowska Jowita;
                • \r\n" -#~ "\t\t\t\t\t
                • Ziółkowska Adrianna.
                • \r\n" -#~ "\t\t\t\t
                \r\n" -#~ "\t\t\t
              • \r\n" -#~ "\t \r\n" -#~ "\t
            \r\n" - -#~ msgid "Możesz nam pomóc" -#~ msgstr "Puedes ayudarnos" - -#~ msgid "" -#~ "

            Wolontariat w Wolnych Lekturach

            \r\n" -#~ "
              \r\n" -#~ "
            • Zostań naszym redaktorem, programistą lub tłumaczem – wolontariuszem." -#~ "
            • \r\n" -#~ "
            • Zdobądź nowe umiejętności i doświadczenie.
            • \r\n" -#~ "
            • Weź udział w otwartym projekcie i twórz innowacyjną bibliotekę " -#~ "internetową.
            • \r\n" -#~ "
            \r\n" -#~ "

            Dzięki pracy naszych wolontariuszy opublikowaliśmy już ponad 1500 " -#~ "lektur, z których skorzystały ponad 3 miliony czytelników z " -#~ "całego świata.

            \r\n" -#~ "

            Zapraszamy wszystkie osoby, które chcą współtworzyć nasz projekt. " -#~ "Współpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " -#~ "literaturą, redagowaniem tekstów i projektami informatycznymi. Oferujemy " -#~ "profesjonalne szkolenia i stałą pomoc merytoryczną. Wolontariusze mogą " -#~ "pracować zdalnie lub w siedzibie Fundacji.

            \r\n" -#~ "

            Organizujemy również praktyki studenckie – nawiązaliśmy współpracę z " -#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " -#~ "Karier UKSW oraz Wydziałem Fizyki UW.

            \r\n" -#~ "\r\n" -#~ "

            Jak się do nas zgłosić?

            \r\n" -#~ "

            Wszystkie zainteresowane osoby prosimy o przysłanie maila na adres marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.

            \r\n" -#~ msgstr "" -#~ "

            Voluntariado en Wolne Lektury

            \r\n" -#~ "
              \r\n" -#~ "
            • Hazte nuestro voluntario como redactor, programador o traductor
            • " -#~ "\r\n" -#~ "
            • Adquiere nuevas habilidades y gana experiencia.
            • \r\n" -#~ "
            • Participa en un proyecto abierto y crea una innovadora biblioteca " -#~ "virtual.
            • \r\n" -#~ "
            \r\n" -#~ "

            Gracias al trabajo de nuestros voluntarios hemos logrado publicar más " -#~ "de 1500 libros que ha usado ya más de 3 millones de " -#~ "lectores del mundo.

            \r\n" -#~ "

            Todos los que quieran participar en nuestro proyecto estarán " -#~ "bienvenidos. Colaboramos con estudiantes, docentes y todos los que " -#~ "est'an interesados y aficionados en literatura, redacción de textos o en " -#~ "proyectos informáticos. Les ofrecemos adiestramiento y ayuda en cuanto al " -#~ "contenido. Los voluntarios pueden trabajar a distancia o en la oficina " -#~ "principal de la Fundación.

            \r\n" -#~ "

            Organizamos también prácticas para estudiantes: colaboramos con el " -#~ "Instituto de Información Científica y Bibliología de la Universidad de " -#~ "Varsovia, el Servicio de Orientación Profesional de la Universidad de " -#~ "Cardenal Stefan Wyszynski y la Facultad de Física de la Universidad de " -#~ "Varsovia.

            \r\n" -#~ "\r\n" -#~ "

            ¿Cómo contactar con nosotros?

            \r\n" -#~ "

            A todos los interesados les invitamos a mandarnos un e-mail a marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.

            \r\n" - -#~ msgid "" -#~ "

            Kogo szukamy?

            \r\n" -#~ "\r\n" -#~ "

            Redaktorów technicznych (skład tekstu)

            \r\n" -#~ "

            Skład jest pierwszym etapem pracy nad tekstem. Za pomocą znaczników " -#~ "języka WL-XML nadajemy tekstowi pożądaną formę i umożliwiamy wyświetlenie " -#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na Platformie Redakcyjnej, " -#~ "która pozwala na zautomatyzowanie dużej części pracy.

            \r\n" -#~ "\r\n" -#~ "

            Kto może zostać redaktorem technicznym?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy – po krótkim szkoleniu.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Więcej informacji o redakcji technicznej znajdziecie na stronie redakcji " -#~ "Wolnych Lektur

            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Redaktorów literackich (merytorycznych)

            \r\n" -#~ "

            Redakcja literacka obejmuje korektę, uwspółcześnienia oraz dodawanie " -#~ "przypisów i motywów literackich. To unikalna możliwość zdobycia " -#~ "doświadczenia w cyfrowej edycji tekstów.

            \r\n" -#~ "\r\n" -#~ "

            Kto może zostać redaktorem literackim?

            \r\n" -#~ "
              \r\n" -#~ "
            • Osoby, które mają doświadczenie w redakcji tekstów literackich,
            • " -#~ "\r\n" -#~ "
            • Studenci i absolwenci studiów humanistycznych, którzy chcą takie " -#~ "doświadczenie zdobyć.
            • \r\n" -#~ "
            \r\n" -#~ "

            Więcej informacji o redakcji merytorycznej znajdziecie na stronie redakcji " -#~ "Wolnych Lektur

            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Tłumaczy

            \r\n" -#~ "

            Strona WolneLektury.pl jest dostępna w siedmiu językach obcych – " -#~ "angielskim, francuskim, niemieckim, hiszpańskim, litewskim, rosyjskim " -#~ "oraz ukraińskim. Użytkownikami biblioteki jest ponad 200 tysięcy osób z " -#~ "zagranicy, a już niedługo nasze zbiory obejmą również dzieła w językach " -#~ "obcych. Dlatego potrzebujemy na bieżąco tłumaczyć nowe informacje " -#~ "pojawiające się na stronie.

            \r\n" -#~ "

            Kto może pomóc w tłumaczeniach?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy, kto dobrze zna co najmniej jeden z powyższych języków.
            • " -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Programistów

            \r\n" -#~ "

            Poza samą stroną Wolnych Lektur tworzymy również:

            \r\n" -#~ "
              \r\n" -#~ "
            • narzędzia redakcyjne,
            • \r\n" -#~ "
            • konwertery do różnych formatów e-booków,
            • \r\n" -#~ "
            • aplikacje mobile ułatwiające dostęp do naszych zasobów.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " -#~ "jQuery, LaTeX, Java.\r\n" -#~ "Tworzone przez nas oprogramowanie udostępniamy na wolnej licencji.

            \r\n" -#~ "

            Kto może pomóc w pracach programistycznych?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy, kto umie i chciałby zdobyć punkty do karmy za udział w " -#~ "otwartym projekcie programistycznym. ;)
            • \r\n" -#~ "
            \r\n" -#~ msgstr "" -#~ "

            ¿A quién buscamos?

            \r\n" -#~ "\r\n" -#~ "

            Redactores técnicos (composición tipográfica)

            \r\n" -#~ "

            La composición tipográfica es la primera etapa del trabajo con el " -#~ "texto. Por medio de los marcados del idioma WL-XML le damos la forma " -#~ "deseada al texto y facilitamos su visualización en la página web. La " -#~ "redacción técnica se realiza en la Plataforma Editorial, que permite automatizar gran parte del " -#~ "trabajo.

            \r\n" -#~ "\r\n" -#~ "

            ¿Quién puede ser redactor técnico?

            \r\n" -#~ "
              \r\n" -#~ "
            • Cualquiera, después de una breve formación.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Más información sobre la redacción técnica en la página web de Wolne Lektury

            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Redactores literarios

            \r\n" -#~ "

            La redacción literaria incluye la corrección de pruebas, adaptación e " -#~ "inclusión de las notas a pie de página , así como el tratamiento de los " -#~ "temas literarios. Es una oportunidad única de ganar experiencia en la " -#~ "edición digital de textos.

            \r\n" -#~ "\r\n" -#~ "

            ¿Quién puede ser redactor literario?

            \r\n" -#~ "
              \r\n" -#~ "
            • Las personas que tengan experiencia en la redacción de textos " -#~ "literarios,
            • \r\n" -#~ "
            • Los estudiantes y licenciados en humanidades que deseen obtener esta " -#~ "experiencia.
            • \r\n" -#~ "
            \r\n" -#~ "

            Más información sobre la redacción literaria en la página web de Wolne Lektury

            \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Traductores

            \r\n" -#~ "

            La página web de Wolne Lektury.pl está traducida a 7 idiomas: inglés, " -#~ "francés, alemán, español, lituano, ruso y ucraniano. Hay más de 200 mil " -#~ "de usuarios del extranjero, además, dentro de poco nuestra colección " -#~ "incluirá también obras en otros idiomas. De ahí que necesitemos traducir " -#~ "sistemáticamente nuevos contenidos que aparezcan en la página.

            \r\n" -#~ "

            ¿Quién puede ayudarnos con las traducciones?

            \r\n" -#~ "
              \r\n" -#~ "
            • Cualquiera que domine bien por lo menos uno de los idiomas " -#~ "mencionados anteriormente.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Programadores

            \r\n" -#~ "

            Aparte de la página web creamos también:

            \r\n" -#~ "
              \r\n" -#~ "
            • herramientas editoriales,
            • \r\n" -#~ "
            • convertidores para varios formatos de libros electrónicos,
            • \r\n" -#~ "
            • aplicaciones móviles que facilitan el acceso a nuestra colección
            • " -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Usamos las siguientes tecnologías: Python, Django, XHTML, JavaScript, " -#~ "jQuery, LaTex, Java. \r\n" -#~ "El software creado por nosotros lo ponemos a su disposición en libre.

            \r\n" -#~ "

            ¿Quién puede ayudar en las tareas relacionadas con la programación?" -#~ "

            \r\n" -#~ "
              \r\n" -#~ "
            • Cualquiera que sepa y quiera ganar puntos para su karma por la " -#~ "participación en un proyecto de programación abierto. ;)
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" - -#~ msgid "O projekcie" -#~ msgstr "Sobre el proyecto" - -#~ msgid "" -#~ "{% load reporting_stats %}\r\n" -#~ "\r\n" -#~ "

            Wolne Lektury to biblioteka internetowa czynna 24 godziny na " -#~ "dobę, 365 dni w roku i całkowicie darmowa. W jej zbiorach " -#~ "znajduje się {% count_books %} utworów, w tym wiele " -#~ "lektur szkolnych zalecanych do użytku przez Ministerstwo Edukacji " -#~ "Narodowej, które trafiły już do domeny publicznej. Wszystkie dzieła są " -#~ "odpowiednio opracowane - opatrzone przypisami, motywami i udostępnione w " -#~ "kilku formatach - HTML , TXT , " -#~ "PDF, EPUB, MOBI. W " -#~ "bibliotece znajduje się również kilkaset audiobooków, czytanych przez " -#~ "takich aktorów jak: Danuta Stenka, Jan Peszek czy Andrzej Chyra. Można " -#~ "ich słuchać w formatach MP3 i Ogg Vorbis. Audiobooki są również dostępne w formacie DAISY dostosowanym do potrzeb osób słabowidzących, niewidomych oraz osób " -#~ "mających trudności z czytaniem.

            \r\n" -#~ "\r\n" -#~ "

            Biblioteka Wolne Lektury dostępna jest za pośrednictwem aplikacji " -#~ "mobilnych – na system Android oraz na system iOS.

            \r\n" -#~ "\r\n" -#~ "

            Wszystkie utwory zamieszczone w bibliotece Wolne Lektury można " -#~ "zgodnie z prawem bezpłatnie przeglądać, słuchać, ściągać na swój " -#~ "komputer, a także udostępniać innym i cytować.

            \r\n" -#~ msgstr "" -#~ "{% load reporting_stats %}\r\n" -#~ "\r\n" -#~ "

            Wolne Lektury es una biblioteca virtual de 24 horas, 365 días " -#~ "al año y completamente gratuita. La colección consta de " -#~ "{% count_books %} obras, incluso muchas de lectura obligatoria " -#~ "recomendadas por el Ministerio de Educación Nacional y que ya forman " -#~ "parte del dominio público. Todos los textos están adecuadamente " -#~ "preparados – con notas a pie de página, temas literarios, y están " -#~ "disponibles en varios formatos - HTML , TXT , PDF, EPUB, MOBI.\r\n" -#~ " La biblioteca contiene también centenares de audiolibros, leídos por " -#~ "autores como Danuta Stenka, Jan Peszek o Andrzej Chyra. Se los puede " -#~ "escuchar en los formatos MP3 y Ogg Vorbis. Los audiolibros se pueden conseguir también en el formato " -#~ "DAISY , adaptado a las necesidades de las personas con " -#~ "baja visión, invidentes, incluso las que tienen dificultades para leer.\r\n" -#~ "\r\n" -#~ "

            La Biblioteca Wolne Lektury está disponible por medio de aplicaciones " -#~ "móviles para los sistemas Android e iOS.

            \r\n" -#~ "\r\n" -#~ "

            Todos los textos publicados en la Biblioteca Wolne Lektury " -#~ "están preparados para hojear, escuchar, descargar, para ponerlos a la " -#~ "disposición de otros y citar, todo esto de acuerdo con la ley. \r\n" - -#~ msgid "" -#~ "

            Wolne Lektury to projekt fundacji Nowoczesna Polska realizowany pro " -#~ "publico bono, we współpracy z Biblioteką Narodową, Biblioteką Ślaską oraz " -#~ "Biblioteką Elbląską pod patronatem Ministerstwa Edukacji Narodowej, " -#~ "Ministerstwa Kultury i Dziedzictwa Narodowego oraz Stowarzyszenia Pisarzy " -#~ "Polskich. W Komitecie Honorowym Wolnych Lektur zasiadają: prof. Maria " -#~ "Janion, prof. Grażyna Borkowska, prof. Przemysław Czapliński, prof. " -#~ "Mieczysław Dąbrowski, prof. Ewa Kraskowska, prof. Małgorzata Czermińska, " -#~ "prof. Jerzy Jarzębski i prof. Piotr Śliwiński.

            \r\n" -#~ "\r\n" -#~ "

            Większość utworów w bibliotece nie jest chroniona prawem autorskim i " -#~ "znajduje się w domenie publicznej, co oznacza że można je swobodnie " -#~ "publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi " -#~ "materiałami (przypisy, motywy literackie etc.), które podlegają prawu " -#~ "autorskiemu, to te dodatkowe materiały udostępnione są na licencji Uznanie " -#~ "autorstwa-Na tych samych warunkach 3.0. Publikujemy również kilka " -#~ "utworów, które autorzy lub spadkobiercy praw udostępnili na wolnej " -#~ "licencji Uznanie autorstwa-Na tych samych warunkach 3.0.

            \r\n" -#~ "\r\n" -#~ "Kontakt: wolnelektury@nowoczesnapolska.org.pl\r\n" -#~ msgstr "" -#~ "

            Wolne Lektury es un proyecto creado por la Fundación Polonia Moderna, " -#~ "realizado pro publico bono en colaboración con la Biblioteca Nacional, la " -#~ "Biblioteca de Silesia y la Biblioteca de Elblag bajo los auspicios del " -#~ "Ministerio de Cultura y Patrimonio Nacional y la Adociación de Escritores " -#~ "Polacos. El Comité de Honor de Wolne Lektury reúne a los profesores: " -#~ "Maria Janion, Grażyna Borkowska, Przemysław Czapliński, Mieczysław " -#~ "Dąbrowski, Ewa Kraskowska, Małgorzata Czermińska, Jerzy Jarzębski y Piotr " -#~ "Śliwiński.

            \r\n" -#~ "\r\n" -#~ "

            La mayoría de los textos de la Biblioteca están libres de derechos de " -#~ "autor y son de dominio público, por lo tanto se pueden publicar y " -#~ "difundir libremente. Si un texto tiene materiales adicionales (notas a " -#~ "pie de página, temas literarios, etc.), que no están libres de derechos " -#~ "de autor, dichos materiales están publicados bajo la licencia Reconocimiento-" -#~ "Compartir bajo la misma licencia 3.0.También publicamos algunos " -#~ "textos legados al dominio público por los autores o herederos bajo la " -#~ "licencia Reconocimiento-Compartir bajo la misma licencia 3.0.

            \r\n" -#~ "\r\n" -#~ "Contacto: wolnelektury@nowoczesnapolska.org.pl \r\n" - -#~ msgid "Zespół" -#~ msgstr "El equipo" - -#~ msgid "" -#~ "

            Magdalena Biernat – koordynatorka projektu, dyrektor " -#~ "zarządzająca fundacji Nowoczesna Polska. Socjolożka, absolwentka " -#~ "Uniwersytetu Warszawskiego i L’Université libre de Bruxelles. " -#~ "Specjalistka od projektów internetowych. Koordynowała projekty Kandydaci " -#~ "2009 i Mam Prawo Wiedzieć w Stowarzyszeniu 61. Pracowała przy wielu " -#~ "badaniach społecznych realizowanych przez organizacje pozarządowe i firmy " -#~ "badawcze.

            \r\n" -#~ "\r\n" -#~ "

            Radosław Czajka – główny programista, studiował " -#~ "informatykę na MIMUW. Biegły w językach programowania, znaczników: " -#~ "Python, XHTML, Javascript, CSS, LaTeX, SQL. Posiada doświadczenie z " -#~ "frameworkami Django, Jquery, doświadczenie w przekształceniach dokumentów " -#~ "XML (XSLT), w produkcji ebooków w formatach PDF i EPUB oraz w tworzeniu " -#~ "aplikacji mobilnych na system Android i iOS.

            \r\n" -#~ "\r\n" -#~ "

            Marcin Koziej – programista. Absolwent Politechniki " -#~ "Warszawskiej i doktorant w Instytucie Filozofii Uniwersytetu " -#~ "Warszawskiego. Działacz Mokotowskiej Kooperatywy Spożywczej. Podróżnik, " -#~ "rowerzysta i biesiadnik. Homo ludens.

            \r\n" -#~ "\r\n" -#~ "

            Marta Niedziałkowska – redaktorka techniczna, " -#~ "absolwentka bibliotekoznawstwa i informacji naukowej UW. Studentka " -#~ "studiów magisterskich Public Policy and Administration na Collegium " -#~ "Civitas.

            \r\n" -#~ "\r\n" -#~ msgstr "" -#~ "

            Magdalena Biernat – la coordinadora del proyecto, " -#~ "directora ejecutiva de la Fundación Polonia Moderna. Socióloga, " -#~ "licenciada por la Universidad de Varsovia y de L’Université libre de " -#~ "Bruxelles. Especializada en proyectos de Internet. Coordinó los proyectos " -#~ "‘Candidatos 2009’ y ‘Tengo el Derecho de Saber’ en la Asociación 61. Ha " -#~ "trabajado en varias investigaciones sociales realizadas por " -#~ "organizaciones no gubernamentales y empresas investigadoras.

            \r\n" -#~ "\r\n" -#~ "

            Radosław Czajka – programador principal. Estudió " -#~ "informática en MIM UW (La Facultad de Matemáticas, Informática y Mecánica " -#~ "de la Universidad de Varsovia). Conoce los lenguajes de programación y " -#~ "los marcados: Python, XHTML, Javascript, CSS, LaTex, SQL. Tiene " -#~ "experiencia en los frameworks Django, Jquery; en la transformación de los " -#~ "archivos XML (XSLT), en la producción de libros electrónicos en los " -#~ "formatos PDF y EPUB, asimismo en la creación de aplicaciones móviles para " -#~ "los sistema Android e iOS.

            \r\n" -#~ "\r\n" -#~ "

            Marcin Koziej – programador. El incansable amateur " -#~ "de filosofía, informático, viajero, ciclista y juerguista. Homo ludens.\r\n" -#~ "\r\n" -#~ "

            Marta Niedziałkowska – redactora técnica, licenciada " -#~ "en Ciencias de la Información y Bibliotecología de la Universidad de " -#~ "Varsovia. Estudiante de segundo curso de licenciatura de Public Policy " -#~ "and Administration en el Collegium Civitas.

            \r\n" - -#~ msgid "" -#~ "

            Dorota A. Kowalska – redaktorka literacka, " -#~ "językoznawca, polonistka i slawistka, doktor nauk humanistycznych, " -#~ "adiunkt w Pracowni Polszczyzny Kresowej IJP PAN, gdzie zajmuje się " -#~ "historią i współczesnością języka polskiego na Ukrainie. Hobbystycznie " -#~ "śpiewa archaiczne pieśni ukraińskie i rosyjskie, cyklistka.

            \r\n" -#~ "\r\n" -#~ "

            Aleksandra Sekuła – redaktorka literacka, historyczka " -#~ "literatury, doktor nauk humanistycznych, absolwentka Wydziału Polonistyki " -#~ "Uniwersytetu Warszawskiego i Szkoły Nauk Społecznych przy IFiS PAN. " -#~ "Zawodowo i naukowo zajmuje się polskim romantyzmem, historią idei i " -#~ "teorią kultury.

            \r\n" -#~ "\r\n" -#~ "

            Paweł Kozioł – redaktor literacki. Ur. 1979, doktor " -#~ "nauk humanistycznych specjalizujący się w literaturze dawnej, absolwent " -#~ "Wydziału Polonistyki Uniwersytetu Warszawskiego oraz Dulwich College w " -#~ "Londynie. Poeta, krytyk literacki, stypendysta Ministerstwa Kultury i " -#~ "Dziedzictwa Narodowego (2010).

            \r\n" -#~ "\r\n" -#~ "

            Paulina Choromańska – redaktorka techniczna, " -#~ "studentka II roku studiów magisterskich w Instytucie Informacji Naukowej " -#~ "i Studiów Bibliologicznych UW. Pracuje również w Pracowni Dokumentacji " -#~ "Teatru w Instytucie Teatralnym im. Z. Raszewskiego w Warszawie.

            \r\n" -#~ "\r\n" -#~ "

            Aneta Rawska - redaktorka techniczna, studentka II " -#~ "roku studiów magisterskich w Instytucie Informacji Naukowej i Studiów " -#~ "Bibliologicznych UW, miłośniczka wypieków i dobrej kuchni. Od 2009 roku " -#~ "prowadzi serwis koła PZW nr 21 w Wołominie.

            \r\n" -#~ msgstr "" -#~ "

            Dorota A. Kowalska – redactora literaria, lingüista, " -#~ "licenciada en filología polaca y eslava, doctorada en humanidades, " -#~ "profesora adjunta en el Laboratorio de Idioma Polaco de la Zona " -#~ "Fronteriza, donde se ocupa de la historia y presente del idioma polaco en " -#~ "Ucrania. Su pasatiempo favorito es cantar canciones arcaicas ucranianas y " -#~ "rusas. Ciclista.

            \r\n" -#~ "\r\n" -#~ "

            Aleksandra Sekuła – redactora literaria, historiadora " -#~ "de literatura, doctorada en humanidades, licenciada por la Facultad de " -#~ "Filología Polaca por la Escuela de Ciencias Sociales del IFIS PAN (el " -#~ "Instituto de Filosofía y Sociología de la Academia Polaca de Ciencias). " -#~ "Se ocupa del romanticismo polaco, historia de la idea y teoría de cultura." -#~ "

            \r\n" -#~ "\r\n" -#~ "

            Paweł Kozioł – redactor literario. Nació en 1979, " -#~ "doctorado en humanidades, especializado en literatura antigua. Licenciado " -#~ "por la Facultad de Filología Polaca de la Universidad de Varsovia y por " -#~ "Dulwich College en Londres. Poeta y crítico literario, becario de el " -#~ "Ministerio de Cultura y Patrimonio Nacional (2010).

            \r\n" -#~ "\r\n" -#~ "

            Paulina Choromańska – redactora técnica, estudiante " -#~ "de segundo curso de licenciatura en el Instituto de Información " -#~ "Científica y Bibliotecología de la Universidad de Varsovia. Aparte, " -#~ "trabaja en el Centro de Documentación de Teatro en el Instituto de " -#~ "Teatro de Zbigniew Raszewski en Varsovia.

            \r\n" -#~ "\r\n" -#~ "

            Aneta Rawska - redactora técnica, estudiante de " -#~ "segundo curso de licenciatura en el Instituto de Ciencias de la " -#~ "Información y Bibliotecología de la Universidad de Varsovia, amante de la " -#~ "pastelería y la buena cocina. Desde 2009 está a cargo de la página web de " -#~ "PZW (Asociación Polaca de Pesca) número 21 en Wolomin.

            \r\n" - -#~ msgid "Wesprzyj nas" -#~ msgstr "Apóyanos" - -#~ msgid "" -#~ "

            Przekaż 1% podatku na Wolne Lektury

            \r\n" -#~ "

            Fundacja Nowoczesna Polska posiada status Organizacji Pożytku " -#~ "Publicznego dzięki czemu na rozwój projektu Wolne Lektury można przekazać " -#~ "1% swojego podatku. W tym celu należy wypełnić odpowiednią rubrykę w " -#~ "rocznym zeznaniu podatkowym (PIT-36, PIT-37 lub PIT-28). W zeznaniu " -#~ "należy podać nazwę:

            \r\n" -#~ "Fundacja Nowoczesna Polska
            \r\n" -#~ "oraz numer z Krajowego Rejestru Sądowego (KRS) 0000070056
            " -#~ msgstr "" -#~ "

            Dona 1% de tu impuesto a Wolne Lektury

            \r\n" -#~ "

            La Fundación Polonia Modera tiene carácter de organización no " -#~ "gubernamental, por lo tanto se puede donar 1% de impuesto para el " -#~ "desarrollo del proyecto Wolne Lektury. Para este propósito hay que " -#~ "rellenar la casilla adecuada en la declaración de la renta anual (PIT-36, " -#~ "PIT-37 o PIT-28). Se debería poner el nombre:

            \r\n" -#~ "Fundacja Nowoczesna Polska
            \r\n" -#~ "y el numero de el Registro Judicial Nacional (KRS) 0000070056
            " - -#~ msgid "" -#~ "

            Przekaż darowiznę na Wolne Lektury

            \r\n" -#~ "

            Każda wpłacona kwota zostanie przeznaczona na rozwój zasobów naszej " -#~ "biblioteki. Wystarczy dokonać przelewu na konto:

            \r\n" -#~ "\r\n" -#~ "Fundacja Nowoczesna Polska
            \r\n" -#~ "ul. Marszałkowska 84/92 lok. 125
            \r\n" -#~ "00-514 Warszawa
            \r\n" -#~ "Nr konta: PKO BP 46 10201097 0000 7502 0001 6766
            \r\n" -#~ "Tytuł przelewu: Darowizna na Wolne Lektury
            \r\n" -#~ msgstr "" -#~ "

            Haz un donativo a Wolne Lektury

            \r\n" -#~ "

            Cada aporte será destinado al incremento d los fondos de nuestra " -#~ "biblioteca. Basta con hacer una transferencia a nuestra cuenta:

            \r\n" -#~ "\r\n" -#~ "Fundacja Nowoczesna Polska
            \r\n" -#~ "Ul. Marszałkowska84/92 lok. 125
            \r\n" -#~ "00-514 Warszawa
            \r\n" -#~ "El numero de la cuenta: PKO BP 46 10201097 0000 7502 0001 6766
            \r\n" -#~ "El titulo de la transferencia: Darowizna na Wolne Lektury
            \r\n" - -#~ msgid "Włącz się w prace" -#~ msgstr "Colabora" - -#~ msgid "" -#~ "
              \r\n" -#~ "
            • Zostań naszym redaktorem, programistą lub tłumaczem
            • \r\n" -#~ "
            • Zdobądź nowe umiejętności i doświadczenie
            • \r\n" -#~ "
            • Weź udział w otwartym projekcie i twórz innowacyjną bibliotekę " -#~ "internetową
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Zapraszamy wszystkie osoby, które chcą współtworzyć nasz projekt. " -#~ "Współpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " -#~ "literaturą, redagowaniem tekstów i projektami informatycznymi. Oferujemy " -#~ "profesjonalne szkolenia i stałą pomoc merytoryczną. Wolontariusze mogą " -#~ "pracować zdalnie lub w siedzibie Fundacji.

            \r\n" -#~ "

            Organizujemy również praktyki studenckie – nawiązaliśmy współpracę z " -#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " -#~ "Karier UKSW oraz Wydziałem Fizyki UW.

            \r\n" -#~ "\r\n" -#~ "

            Jak się do nas zgłosić?

            \r\n" -#~ "

            Wszystkie zainteresowane osoby prosimy o przysłanie maila na adres marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.

            \r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\r\n" -#~ msgstr "" -#~ "
              \r\n" -#~ "
            • Hazte nuestro voluntario como redactor, programador o traductor
            • " -#~ "\r\n" -#~ "
            • Adquiere nuevas habilidades y gana experiencia
            • \r\n" -#~ "
            • Participa en un proyecto abierto y crea una innovadora biblioteca " -#~ "virtual
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Todos los que quieran participar en nuestro proyecto estarán " -#~ "bienvenidos. Colaboramos con estudiantes, docentes y todos los que están " -#~ "interesados y aficionados en literatura, redacción de textos o en " -#~ "proyectos informáticos. Les ofrecemos adiestramiento y ayuda en cuanto al " -#~ "contenido. Los voluntarios pueden trabajar a distancia o en la oficina " -#~ "principal de la Fundación.

            \r\n" -#~ "

            Organizamos también prácticas para estudiantes: colaboramos con el " -#~ "Instituto de Información Científica y Bibliología de la Universidad de " -#~ "Varsovia, el Servicio de Orientación Profesional de la Universidad de " -#~ "Cardenal Stefan Wyszynski y la Facultad de Física de la Universidad de " -#~ "Varsovia.

            \r\n" -#~ "\n" -#~ "\r\n" -#~ "

            ¿Cómo contactar con nosotros?

            \r\n" -#~ "

            A todos los interesados les invitamos a mandarnos un e-mail a marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.

            \r\n" - -#~ msgid "" -#~ "

            Kogo szukamy?

            \r\n" -#~ "\r\n" -#~ "

            Redaktorów technicznych (skład tekstu)

            \r\n" -#~ "

            Skład jest pierwszym etapem pracy nad tekstem. Za pomocą znaczników " -#~ "języka WL-XML nadajemy tekstowi pożądaną formę i umożliwiamy wyświetlenie " -#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na Platformie Redakcyjnej, " -#~ "która pozwala na zautomatyzowanie dużej części pracy.

            \r\n" -#~ "\r\n" -#~ "

            Kto może zostać redaktorem technicznym?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy – po krótkim szkoleniu.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Więcej informacji o redakcji technicznej znajdziecie na stronie redakcji Wolnych Lektur

            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Redaktorów literackich (merytorycznych)

            \r\n" -#~ "

            Redakcja literacka obejmuje korektę, uwspółcześnienia oraz dodawanie " -#~ "przypisów i motywów literackich. To unikalna możliwość zdobycia " -#~ "doświadczenia w cyfrowej edycji tekstów.

            \r\n" -#~ "\r\n" -#~ "

            Kto może zostać redaktorem literackim?

            \r\n" -#~ "
              \r\n" -#~ "
            • Osoby, które mają doświadczenie w redakcji tekstów literackich,
            • " -#~ "\r\n" -#~ "
            • Studenci i absolwenci studiów humanistycznych, którzy chcą takie " -#~ "doświadczenie zdobyć.
            • \r\n" -#~ "
            \r\n" -#~ "

            Więcej informacji o redakcji merytorycznej znajdziecie na stronie redakcji Wolnych Lektur

            \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Tłumaczy

            \r\n" -#~ "

            Strona WolneLektury.pl jest dostępna w siedmiu językach obcych – " -#~ "angielskim, francuskim, niemieckim, hiszpańskim, litewskim, rosyjskim " -#~ "oraz ukraińskim. Użytkownikami biblioteki jest ponad 200 tysięcy osób z " -#~ "zagranicy, a już niedługo nasze zbiory obejmą również dzieła w językach " -#~ "obcych. Dlatego potrzebujemy na bieżąco tłumaczyć nowe informacje " -#~ "pojawiające się na stronie.

            \r\n" -#~ "

            Kto może pomóc w tłumaczeniach?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy, kto dobrze zna co najmniej jeden z powyższych języków.
            • " -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Programistów

            \r\n" -#~ "

            Poza samą stroną Wolnych Lektur tworzymy również:

            \r\n" -#~ "
              \r\n" -#~ "
            • narzędzia redakcyjne,
            • \r\n" -#~ "
            • konwertery do różnych formatów e-booków,
            • \r\n" -#~ "
            • aplikacje mobile ułatwiające dostęp do naszych zasobów.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " -#~ "jQuery, LaTeX, Java.\r\n" -#~ "Tworzone przez nas oprogramowanie udostępniamy na wolnej licencji.

            \r\n" -#~ "

            Kto może pomóc w pracach programistycznych?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy, kto umie i chciałby zdobyć punkty do karmy za udział w " -#~ "otwartym projekcie programistycznym. ;)
            • \r\n" -#~ "
            \r\n" -#~ msgstr "" -#~ "

            ¿A quién buscamos?

            \r\n" -#~ "\r\n" -#~ "

            Redactores técnicos (composición tipográfica)

            \r\n" -#~ "

            La composición tipográfica es la primera etapa del trabajo con el " -#~ "texto. Por medio de los marcados del idioma WL-XML le damos la forma " -#~ "deseada al texto y facilitamos su visualización en la página web. La " -#~ "redacción técnica se realiza en la Plataforma Editorial, que permite automatizar gran parte del " -#~ "trabajo.

            \r\n" -#~ "\r\n" -#~ "

            ¿Quién puede ser redactor técnico?

            \r\n" -#~ "
              \r\n" -#~ "
            • Cualquiera, después de una breve formación.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Más información sobre la redacción técnica en la página web de Wolne Lektury

            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Redactores literarios

            \r\n" -#~ "

            La redacción literaria incluye la corrección de pruebas, adaptación e " -#~ "inclusión de las notas a pie de página , así como el tratamiento de los " -#~ "temas literarios. Es una oportunidad única de ganar experiencia en la " -#~ "edición digital de textos.

            \r\n" -#~ "\r\n" -#~ "

            ¿Quién puede ser redactor literario?

            \r\n" -#~ "
              \r\n" -#~ "
            • Las personas que tengan experiencia en la redacción de textos " -#~ "literarios,
            • \r\n" -#~ "
            • Los estudiantes y licenciados en humanidades que deseen obtener esta " -#~ "experiencia.
            • \r\n" -#~ "
            \r\n" -#~ "

            Más información sobre la redacción literaria en la página web de Wolne Lektury

            \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Traductores

            \r\n" -#~ "

            La página web de Wolne Lektury.pl está traducida a 7 idiomas: inglés, " -#~ "francés, alemán, español, lituano, ruso y ucraniano. Hay más de 200 mil " -#~ "de usuarios del extranjero, además, dentro de poco nuestra colección " -#~ "incluirá también obras en otros idiomas. De ahí que necesitemos traducir " -#~ "sistemáticamente nuevos contenidos que aparezcan en la página.

            \r\n" -#~ "

            ¿Quién puede ayudarnos con las traducciones?

            \r\n" -#~ "
              \r\n" -#~ "
            • Cualquiera que domine bien por lo menos uno de los idiomas " -#~ "mencionados anteriormente.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Programadores

            \r\n" -#~ "

            Aparte de la página web creamos también:

            \r\n" -#~ "
              \r\n" -#~ "
            • herramientas editoriales,
            • \r\n" -#~ "
            • convertidores para varios formatos de libros electrónicos,
            • \r\n" -#~ "
            • aplicaciones móviles que facilitan el acceso a nuestra colección
            • " -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Usamos las siguientes tecnologías: Python, Django, XHTML, JavaScript, " -#~ "jQuery, LaTex, Java. \r\n" -#~ "El software creado por nosotros lo ponemos a su disposición en libre.

            \r\n" -#~ "

            ¿Quién puede ayudar en las tareas relacionadas con la programación?" -#~ "

            \r\n" -#~ "
              \r\n" -#~ "
            • Cualquiera que sepa y quiera ganar puntos para su karma por la " -#~ "participación en un proyecto de programación abierto. ;)
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" - -#~ msgid "Prawa" -#~ msgstr "Derechos" - -#~ msgid "" -#~ "

            Większość utworów w bibliotece nie jest chroniona prawem autorskim i " -#~ "znajduje się w domenie publicznej, co oznacza, że można je swobodnie " -#~ "publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi " -#~ "materiałami (przypisy, motywy literackie etc.), które podlegają prawu " -#~ "autorskiemu, to te dodatkowe materiały udostępnione są na licencji Uznanie " -#~ "autorstwa-Na tych samych warunkach 3.0. Publikujemy również kilka " -#~ "utworów, które autorzy lub spadkobiercy praw udostępnili na wolnej " -#~ "licencji Uznanie autorstwa-Na tych samych warunkach 3.0.

            " -#~ msgstr "" -#~ "

            La mayoría de los textos de la Biblioteca son libres de derechos de " -#~ "autor y son de dominio público, por lo tanto se pueden publicar y " -#~ "difundir libremente. Si un texto tiene materiales adicionales (notas a " -#~ "pie de página, temas literarios, etc.), que no están libres de derechos " -#~ "de autor, dichos materiales están publicados bajo la licencia Reconocimiento-" -#~ "Compartir bajo la misma licencia 3.0.También publicamos algunos " -#~ "textos legados al dominio público por los autores o herederos bajo la " -#~ "licencia Reconocimiento-Compartir bajo la misma licencia 3.0.

            " diff --git a/apps/infopages/locale/pl/LC_MESSAGES/django.mo b/apps/infopages/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 0310e4668..000000000 Binary files a/apps/infopages/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/infopages/locale/pl/LC_MESSAGES/django.po b/apps/infopages/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index ceb4d08fe..000000000 --- a/apps/infopages/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,47 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-01-27 16:38+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \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%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2)\n" - -#: models.py:11 -msgid "main page priority" -msgstr "kolejność na stronie głównej" - -#: models.py:12 -msgid "slug" -msgstr "slug" - -#: models.py:13 -msgid "title" -msgstr "tytuł" - -#: models.py:14 -msgid "left column" -msgstr "lewa kolumna" - -#: models.py:15 -msgid "right column" -msgstr "prawa kolumna" - -#: models.py:19 -msgid "info page" -msgstr "strona informacyjna" - -#: models.py:20 -msgid "info pages" -msgstr "strony informacyjne" diff --git a/apps/infopages/locale/uk/LC_MESSAGES/django.mo b/apps/infopages/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index fe58f78b4..000000000 Binary files a/apps/infopages/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/infopages/locale/uk/LC_MESSAGES/django.po b/apps/infopages/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index 0ff6832e8..000000000 --- a/apps/infopages/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,1265 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: \n" -"Last-Translator: Natalia Kertyczak \n" -"Language-Team: uk \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 -msgid "main page priority" -msgstr "" - -#: models.py:12 -msgid "slug" -msgstr "" - -#: models.py:13 -msgid "title" -msgstr "" - -#: models.py:14 -msgid "left column" -msgstr "" - -#: models.py:15 -msgid "right column" -msgstr "" - -#: models.py:19 -msgid "info page" -msgstr "" - -#: models.py:20 -msgid "info pages" -msgstr "" - -#~ msgid "Wolontariat dla wiedzy" -#~ msgstr "Волонтерство в освіті" - -#~ msgid "" -#~ "

            Wolontariat

            \r\n" -#~ "\t

            \r\n" -#~ "\t\tBiogramy pisarzy oraz definicje epok i gatunków literackich w\r\n" -#~ "\t\tbibliotece internetowej Wolne Lektury napisali uczniowie\r\n" -#~ "\t\tczterech szkół podczas warsztatów „Wolontariat dla wiedzy”.\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t\tUczniowie pracowali wspólnie pod merytorycznym nadzorem\r\n" -#~ "\t\tnauczycieli i specjalistów – literaturoznawców na\r\n" -#~ "\t\t\r\n" -#~ "\r\n" -#~ "\t\t\tplatformie internetowej wiki\r\n" -#~ "\t\tprzygotowanej przez zespół\r\n" -#~ "\t\t2ia. Praca nad notami była " -#~ "jednocześnie nauką wykorzystywania\r\n" -#~ "\t\tkomputerów i internetu do wyszukiwania informacji, a także\r\n" -#~ "\t\tweryfikowania ich wiarygodności.\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t\tProjekt \"Wolontariat dla wiedzy\" został zrealizowany dzięki\r\n" -#~ "\t\twsparciu\r\n" -#~ "\t\t\r\n" -#~ "\t\t\tMinisterstwa Edukacji Narodowej. Nagrody dla uczniów ufundowali" -#~ "\r\n" -#~ "\t\t\r\n" -#~ "\r\n" -#~ "\t\t\tWydawnictwo Nasza Księgarnia\r\n" -#~ "\t\ti\r\n" -#~ "\t\tWydawnictwo Helion. Noty " -#~ "zweryfikowano w serwisie\r\n" -#~ "\t\t\r\n" -#~ "\t\t\tPlagiat.pl.\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t\tRaport z realizacji projektu " -#~ "„Wolontariat dla wiedzy\".\r\n" -#~ "\t

            \r\n" -#~ "\r\n" -#~ "\t

            \r\n" -#~ "\t" -#~ "\r\n" -#~ "\t\r\n" -#~ "\t\r\n" -#~ " " -#~ "\r\n" -#~ " " -#~ "\r\n" -#~ "\t

            \r\n" -#~ msgstr "" -#~ "

            Волонтерство

            \r\n" -#~ "               

            \r\n" -#~ "                               Біограми письменників та дефініції епох та " -#~ "літературних жанрів в інтернет-бібліотеці написані учнями чотирьох шкіл " -#~ "підчас майстер-класів “Волонтерство в освіті”.\r\n" -#~ "               

            \r\n" -#~ "\r\n" -#~ "               

            \r\n" -#~ "                               Учні спільно працювали від доглядом " -#~ "вчителів та спеціалістів — літературознавців на \r\n" -#~ "\r\n" -#~ "                                               інтернетовій вікі-" -#~ "платформі\r\n" -#~ "                               встановленій командою\r\n" -#~ "                               2ia. Робота " -#~ "над цими текстами була водночас наукою користуватися комп’ютером та " -#~ "інтернетом для пошуку інформації, а також перевірки її вірогідності.\r\n" -#~ "               

            \r\n" -#~ "\r\n" -#~ "               

            \r\n" -#~ "                               Проект \"Волонтерство в освіті\" здійснено " -#~ "завдяки підтримці \r\n" -#~ "                               \r\n" -#~ "                                               Міністерства національної " -#~ "освіти. Призи для учнів приготували              \r\n" -#~ "\r\n" -#~ "                                               Видавництво Nasza " -#~ "Księgarnia\r\n" -#~ "                               та\r\n" -#~ "                               Видавництво " -#~ "Helion. Тексти перевірено в ресурсі \r\n" -#~ "                                               Plagiat.pl.\r\n" -#~ "               

            \r\n" -#~ "\r\n" -#~ "               

            \r\n" -#~ "                               Звіт з " -#~ "реалізації проекту \"Волонтерство в освіті\".\r\n" -#~ "               

            \r\n" -#~ "\r\n" -#~ "               

            \r\n" -#~ "                \r\n" -#~ "                \r\n" -#~ "                \r\n" -#~ "    " -#~ "\r\n" -#~ "    " -#~ "\r\n" -#~ "               

            \r\n" - -#~ msgid "" -#~ "\t

            Autorzy

            \r\n" -#~ "\r\n" -#~ "\t
              \r\n" -#~ "\t\t
            1. \r\n" -#~ "\t\t\t

              \r\n" -#~ "\t\t\t\tGimnazjum nr 40 z Oddziałami Integracyjnymi w Zespole\r\n" -#~ "\t\t\t\tSzkół nr 69 im. Armii Krajowej Grupy Bojowej „KRYBAR”,\r\n" -#~ "\t\t\t\tul. Drewniana 8, 00-345 Warszawa; klasa druga pod opieką\r\n" -#~ "\t\t\t\tAnny Budziarek-Friedrich:\r\n" -#~ "\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t
                \r\n" -#~ "\t\t\t\t
              • Burdon Filip;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Dębski Bartek;
              • \r\n" -#~ "\t\t\t\t
              • Jackowicz Kamil;
              • \r\n" -#~ "\t\t\t\t
              • Kurek Paweł;
              • \r\n" -#~ "\t\t\t\t
              • Makles Bartosz;
              • \r\n" -#~ "\t\t\t\t
              • Markiewicz Jeremiasz;
              • \r\n" -#~ "\t\t\t\t
              • Migdał Katarzyna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Mioduszewski Michał;
              • \r\n" -#~ "\t\t\t\t
              • Pfeiffer Ida;
              • \r\n" -#~ "\t\t\t\t
              • Płaskowicka Karolina;
              • \r\n" -#~ "\t\t\t\t
              • Sailer Ewa.
              • \r\n" -#~ "\t\t\t
              \r\n" -#~ "\t\t
            2. \r\n" -#~ "\r\n" -#~ "\t\t
            3. \r\n" -#~ "\t\t\t

              \r\n" -#~ "\t\t\t\tXXXIII Liceum Ogólnokształcące im. Mikołaja Kopernika,\r\n" -#~ "\t\t\t\tul. Bema 76, 01-225 Warszawa; klasa pierwsza o profilu\r\n" -#~ "\t\t\t\tbiologiczno-chemicznym pod opieką Elżbiety Konkowskiej:\r\n" -#~ "\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t
                \r\n" -#~ "\t\t\t\t
              • Chwil Bartłomiej;
              • \r\n" -#~ "\t\t\t\t
              • Czarnecka Natalia;
              • \r\n" -#~ "\t\t\t\t
              • Gawrońska Iga;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Grabarczyk Marta;
              • \r\n" -#~ "\t\t\t\t
              • Jastrząb Katarzyna;
              • \r\n" -#~ "\t\t\t\t
              • Krawczak Olga;
              • \r\n" -#~ "\t\t\t\t
              • Krawczyk Marianna;
              • \r\n" -#~ "\t\t\t\t
              • Kur Natalia;
              • \r\n" -#~ "\t\t\t\t
              • Kwiatek Marta;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Laśkiewicz Joanna;
              • \r\n" -#~ "\t\t\t\t
              • Machczyńska Daria;
              • \r\n" -#~ "\t\t\t\t
              • Miecznikowska Izabela;
              • \r\n" -#~ "\t\t\t\t
              • Moczulska Karolina;
              • \r\n" -#~ "\t\t\t\t
              • Mościcka Aneta;
              • \r\n" -#~ "\t\t\t\t
              • Narloch Sabina;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Przybysz Paweł;
              • \r\n" -#~ "\t\t\t\t
              • Puchta Marek;
              • \r\n" -#~ "\t\t\t\t
              • Ryska Cezary;
              • \r\n" -#~ "\t\t\t\t
              • Sandomierski Bartłomiej;
              • \r\n" -#~ "\t\t\t\t
              • Sławiński Tomasz;
              • \r\n" -#~ "\t\t\t\t
              • Słowik Olga;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Starzycka Katarzyna;
              • \r\n" -#~ "\t\t\t\t
              • Strzelczak Karolina;
              • \r\n" -#~ "\t\t\t\t
              • Szafran Danuta;
              • \r\n" -#~ "\t\t\t\t
              • Szmigielska Magdalena;
              • \r\n" -#~ "\t\t\t\t
              • Szulkowska Alicja;
              • \r\n" -#~ "\t\t\t\t
              • Ślusarczyk Anna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t
              • Tytkowska Anna.
              • \r\n" -#~ "\t\t\t
              \r\n" -#~ "\t\t\t
            4. \r\n" -#~ "\t\t\t\t

              \r\n" -#~ "\t\t\t\t\tAutorskie Niepubliczne Liceum Ogólnokształcące nr\r\n" -#~ "\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; klasa pierwsza\r\n" -#~ "\t\t\t\t\to profilu ogólnym pod opieką Michała Friedricha:\r\n" -#~ "\t\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t\t
                \r\n" -#~ "\t\t\t\t\t
              • Baraniecka Marta;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Gołaszewska Ewa;
              • \r\n" -#~ "\t\t\t\t\t
              • Kwiatkowski Michał;
              • \r\n" -#~ "\t\t\t\t\t
              • Machnikowska Monika;
              • \r\n" -#~ "\t\t\t\t\t
              • Pietrzak Bartosz;
              • \r\n" -#~ "\t\t\t\t\t
              • Przespolewski Przemysław;
              • \r\n" -#~ "\t\t\t\t\t
              • Rosińska Zuzanna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Sibiga Magdalena.
              • \r\n" -#~ "\t\t\t\t
              \r\n" -#~ "\t\t\t
            5. \r\n" -#~ "\t\t\t
            6. \r\n" -#~ "\t\t\t\t

              \r\n" -#~ "\t\t\t\t\tLXIV Liceum Ogólnokształcące im. St. I. Witkiewicza,\r\n" -#~ "\t\t\t\t\tul. Elbląska 51, 01-737 Warszawa; klasa pierwsza o\r\n" -#~ "\t\t\t\t\tprofilu ogólnym pod opieką Daniela Zycha:\r\n" -#~ "\t\t\t\t

              \r\n" -#~ "\r\n" -#~ "\t\t\t\t
                \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Andrzejczak Kamil;
              • \r\n" -#~ "\t\t\t\t\t
              • Czubaj Konrad;
              • \r\n" -#~ "\t\t\t\t\t
              • Drągowska Katarzyna;
              • \r\n" -#~ "\t\t\t\t\t
              • Gajewska Magdalena;
              • \r\n" -#~ "\t\t\t\t\t
              • Głowacki Jan;
              • \r\n" -#~ "\t\t\t\t\t
              • Grad Paweł;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Hnatowski Bartek;
              • \r\n" -#~ "\t\t\t\t\t
              • Karwowski Marcin;
              • \r\n" -#~ "\t\t\t\t\t
              • Kłos Aneta;
              • \r\n" -#~ "\t\t\t\t\t
              • Kozieł Barbara;
              • \r\n" -#~ "\t\t\t\t\t
              • Kozłowska Anna;
              • \r\n" -#~ "\t\t\t\t\t
              • Krug Pamela;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Krzosek Jakub;
              • \r\n" -#~ "\t\t\t\t\t
              • Lubaś Michał;
              • \r\n" -#~ "\t\t\t\t\t
              • Masewicz Natalia;
              • \r\n" -#~ "\t\t\t\t\t
              • Mastalerz Agnieszka;
              • \r\n" -#~ "\t\t\t\t\t
              • Modelska Marta;
              • \r\n" -#~ "\t\t\t\t\t
              • Nowak Aleksandra;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Pabian Agnieszka;
              • \r\n" -#~ "\t\t\t\t\t
              • Paszkowska Aleksandra;
              • \r\n" -#~ "\t\t\t\t\t
              • Pielat Zofia;
              • \r\n" -#~ "\t\t\t\t\t
              • Poniecka Agnieszka;
              • \r\n" -#~ "\t\t\t\t\t
              • Pytlak Urszula;
              • \r\n" -#~ "\t\t\t\t\t
              • Rosa Karolina;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Smyczyńska Kamila;
              • \r\n" -#~ "\t\t\t\t\t
              • Stolińska Barbara;
              • \r\n" -#~ "\t\t\t\t\t
              • Szymańska Katarzyna;
              • \r\n" -#~ "\t\t\t\t\t
              • Ścibior Ewa;
              • \r\n" -#~ "\t\t\t\t\t
              • Witczak Magda;
              • \r\n" -#~ "\t\t\t\t\t
              • Witkowska Justyna;
              • \r\n" -#~ "\r\n" -#~ "\t\t\t\t\t
              • Wyrzykowska Jowita;
              • \r\n" -#~ "\t\t\t\t\t
              • Ziółkowska Adrianna.
              • \r\n" -#~ "\t\t\t\t
              \r\n" -#~ "\t\t\t
            7. \r\n" -#~ "\t \r\n" -#~ "\t
            \r\n" -#~ msgstr "" -#~ "

            Автори

            \r\n" -#~ "\r\n" -#~ "               
              \r\n" -#~ "                              
            1. \r\n" -#~ "                                              

              \r\n" -#~ "                                                               Гімназія " -#~ "№40 з інтеграційними відділами в Комплексі шкіл № 69 імені Армії Крайової " -#~ "Бойової Групи “КРИБАР”,\r\n" -#~ "                                                               вул. " -#~ "Древняна 8, 00-345 Варшава; другий клас під опікою Анни Будзярек-Фрідріх:" -#~ "\r\n" -#~ "                                              

              \r\n" -#~ "\r\n" -#~ "                                              
                \r\n" -#~ "                                                              
              • Бурдон " -#~ "Філіп;
              • \r\n" -#~ "\r\n" -#~ "                                                               " -#~ "
              • Дембські Бартек;
              • \r\n" -#~ "                                                               " -#~ "
              • Яцковіч Каміл;
              • \r\n" -#~ "                                                              
              • Курек " -#~ "Павел;
              • \r\n" -#~ "                                                              
              • Маклес " -#~ "Бартош;
              • \r\n" -#~ "                                                               " -#~ "
              • Маркевіч Єремяш;
              • \r\n" -#~ "                                                              
              • Мігдал " -#~ "Катажина;
              • \r\n" -#~ "\r\n" -#~ "                                                               " -#~ "
              • Міодушевські Міхал;
              • \r\n" -#~ "                                                              
              • Файфер " -#~ "Іда;
              • \r\n" -#~ "                                                               " -#~ "
              • Пласковіцька Кароліна;
              • \r\n" -#~ "                                                              
              • Сайлер " -#~ "Ева.
              • \r\n" -#~ "                                              
              \r\n" -#~ "                              
            2. \r\n" -#~ "\r\n" -#~ "                              
            3. \r\n" -#~ "                                              

              \r\n" -#~ "                                                               XXXIII " -#~ "Загальноосвітний ліцей імені Миколая Коперника,\r\n" -#~ "                                                               вул. Бема " -#~ "76, 01-225 Варшава; перший клас біологічно-хімічного профілю під опікою " -#~ "Ельжбєти Конковської :\r\n" -#~ "                                              

              \r\n" -#~ "\r\n" -#~ "                                              
                \r\n" -#~ "                                                              
              • Хвіл " -#~ "Бартломєй;
              • \r\n" -#~ "                                                               " -#~ "
              • Чарнецька Наталія ;
              • \r\n" -#~ "                                                               " -#~ "
              • Ґавронська Іґа ;
              • \r\n" -#~ "\r\n" -#~ "                                                               " -#~ "
              • Ґрабарчик Марта;
              • \r\n" -#~ "                                                               " -#~ "
              • Яастжомб Катажина;
              • \r\n" -#~ "                                                               " -#~ "
              • Кравчак Ольга;
              • \r\n" -#~ "                                                               " -#~ "
              • Кравчик Маріанна ;
              • \r\n" -#~ "                                                              
              • Кур " -#~ "Наталія;
              • \r\n" -#~ "                                                              
              • Квятек " -#~ "Марта;
              • \r\n" -#~ "\r\n" -#~ "                                                               " -#~ "
              • Ласькевич Йоанна;
              • \r\n" -#~ "                                                               " -#~ "
              • Махчинська Дарія;
              • \r\n" -#~ "                                                               " -#~ "
              • Мєчніковська Ізабеля;
              • \r\n" -#~ "                                                               " -#~ "
              • Мочулська Кароліна;
              • \r\n" -#~ "                                                               " -#~ "
              • Мосьціцка Анета;
              • \r\n" -#~ "                                                              
              • Нарлох " -#~ "Сабіна;
              • \r\n" -#~ "\r\n" -#~ "                                                              
              • Пшибиш " -#~ "Павел;
              • \r\n" -#~ "                                                              
              • Пухта " -#~ "Марек;
              • \r\n" -#~ "                                                              
              • Риска " -#~ "Цезари;
              • \r\n" -#~ "                                                               " -#~ "
              • Сандомєрські Барломєй;
              • \r\n" -#~ "                                                               " -#~ "
              • Славінські Томаш;
              • \r\n" -#~ "                                                              
              • Словік " -#~ "Ольга;
              • \r\n" -#~ "\r\n" -#~ "                                                               " -#~ "
              • Стажицька Катажина;
              • \r\n" -#~ "                                                               " -#~ "
              • Стжелчак Кароліна;
              • \r\n" -#~ "                                                              
              • Шафран " -#~ "Данута;
              • \r\n" -#~ "                                                               " -#~ "
              • Шміґєльська Маґдалена;
              • \r\n" -#~ "                                                               " -#~ "
              • Шулковаська Аліція;
              • \r\n" -#~ "                                                               " -#~ "
              • Сьлусарчик Анна;
              • \r\n" -#~ "\r\n" -#~ "                                                               " -#~ "
              • Титковська  Анна.
              • \r\n" -#~ "                                              
              \r\n" -#~ "                                              
            4. \r\n" -#~ "                                                              

              \r\n" -#~ "                                                                              " -#~ "Авторський Непублічний Загальноосвітній Ліцей № " -#~ "                                                               42, вул. " -#~ "Івіцька 47 B, 00-735 Варшава; перший клас загального профілю під опікою " -#~ "Міхала Фрідріха:\r\n" -#~ "                                                              

              \r\n" -#~ "\r\n" -#~ "                                                              
                \r\n" -#~ "                                                                              " -#~ "
              • Баранєцька Марта;
              • \r\n" -#~ "\r\n" -#~ "                                                                              " -#~ "
              • Ґолашевська Ева;
              • \r\n" -#~ "                                                                              " -#~ "
              • Квятковські Міхал;
              • \r\n" -#~ "                                                                              " -#~ "
              • Махніковська Моніка;
              • \r\n" -#~ "                               " -#~ "                                              
              • Пєтжак Бартош;
              • \r\n" -#~ "                                                                              " -#~ "
              • Пшесполевські Пшемислав;
              • \r\n" -#~ "                                                                              " -#~ "
              • Росінська Зузанна;
              • \r\n" -#~ "\r\n" -#~ "                                                                              " -#~ "
              • Сібіґа Маґдалена.
              • \r\n" -#~ "                                                              
              \r\n" -#~ "                                              
            5. \r\n" -#~ "                                              
            6. \r\n" -#~ "                                                              

              \r\n" -#~ "                                                                              " -#~ "LXIV Загальноосвітній Ліцей імені Ст.І. Віткєвіча,\r\n" -#~ "                                                                              " -#~ "вул. Ельблонзька 51, 01-737 Варшава; перший клас загального профілю під " -#~ "опікою Данєла Зиха:\r\n" -#~ "                                                              

              \r\n" -#~ "\r\n" -#~ "                                                              
                \r\n" -#~ "\r\n" -#~ "                                                                              " -#~ "
              • Анджейчак Каміл;
              • \r\n" -#~ "                                                                              " -#~ "
              • Чубай Конрад;
              • \r\n" -#~ "                                                                              " -#~ "
              • Дронґовська Катажина;
              • \r\n" -#~ "                                                                              " -#~ "
              • Ґаєвська Маґдалена;
              • \r\n" -#~ "                                                                              " -#~ "
              • Ґловацькі Ян;
              • \r\n" -#~ "                               " -#~ "                                              
              • Ґрад  Павел;
              • \r\n" -#~ "\r\n" -#~ "                                                                              " -#~ "
              • Гнатовські Бартек;
              • \r\n" -#~ "                                                                              " -#~ "
              • Карвовські Марцін;
              • \r\n" -#~ "                                                                              " -#~ "
              • Клос Анета;
              • \r\n" -#~ "                                                                              " -#~ "
              • Козєл Барбара;
              • \r\n" -#~ "                                                                              " -#~ "
              • Козловська Анна;
              • \r\n" -#~ "                                                                              " -#~ "
              • Круґ Памела;
              • \r\n" -#~ "\r\n" -#~ "                                                                              " -#~ "
              • Кжосек Якуб;
              • \r\n" -#~ "                                                                              " -#~ "
              • Лубась Міхал;
              • \r\n" -#~ "                                                                              " -#~ "
              • Масевіч Наталія;
              • \r\n" -#~ "                                                                              " -#~ "
              • Масталеж Аґнєшка;
              • \r\n" -#~ "                                                                              " -#~ "
              • Модельська Марта;
              • \r\n" -#~ "                                                                              " -#~ "
              • Новак Александра;
              • \r\n" -#~ "\r\n" -#~ "                                                                              " -#~ "
              • Пабян Аґнєшка;
              • \r\n" -#~ "                                                                              " -#~ "
              • Пашковська Александра;
              • \r\n" -#~ "                                                                              " -#~ "
              • Пєлат Зофія;
              • \r\n" -#~ "                                                                              " -#~ "
              • Понєцька Аґнєшка;
              • \r\n" -#~ "                                                                              " -#~ "
              • Питлак Уршуля;
              • \r\n" -#~ "                                                                              " -#~ "
              • Роса Кароліна;
              • \r\n" -#~ "\r\n" -#~ "                                                                              " -#~ "
              • Смчинська Каміля;
              • \r\n" -#~ "                                                                              " -#~ "
              • Столінська Барбара;
              • \r\n" -#~ "                                                                              " -#~ "
              • Шиманська Катажина;
              • \r\n" -#~ "                                                                              " -#~ "
              • Сьцібор Ева;
              • \r\n" -#~ "                                                                              " -#~ "
              • Вітчак Маґда;
              • \r\n" -#~ "                                                                              " -#~ "
              • Вітковська Юстина;
              • \r\n" -#~ "\r\n" -#~ "                                                                              " -#~ "
              • Вижиковська Йовіта;
              • \r\n" -#~ "                                                                              " -#~ "
              • Зюлковська Адріанна.
              • \r\n" -#~ "                                                              
              \r\n" -#~ "                                              
            7. \r\n" -#~ "                  \r\n" -#~ "                 
            \r\n" - -#~ msgid "Możesz nam pomóc" -#~ msgstr "Можете нам допомогти" - -#~ msgid "" -#~ "

            Wolontariat w Wolnych Lekturach

            \r\n" -#~ "
              \r\n" -#~ "
            • Zostań naszym redaktorem, programistą lub tłumaczem – wolontariuszem." -#~ "
            • \r\n" -#~ "
            • Zdobądź nowe umiejętności i doświadczenie.
            • \r\n" -#~ "
            • Weź udział w otwartym projekcie i twórz innowacyjną bibliotekę " -#~ "internetową.
            • \r\n" -#~ "
            \r\n" -#~ "

            Dzięki pracy naszych wolontariuszy opublikowaliśmy już ponad 1500 " -#~ "lektur, z których skorzystały ponad 3 miliony czytelników z " -#~ "całego świata.

            \r\n" -#~ "

            Zapraszamy wszystkie osoby, które chcą współtworzyć nasz projekt. " -#~ "Współpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " -#~ "literaturą, redagowaniem tekstów i projektami informatycznymi. Oferujemy " -#~ "profesjonalne szkolenia i stałą pomoc merytoryczną. Wolontariusze mogą " -#~ "pracować zdalnie lub w siedzibie Fundacji.

            \r\n" -#~ "

            Organizujemy również praktyki studenckie – nawiązaliśmy współpracę z " -#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " -#~ "Karier UKSW oraz Wydziałem Fizyki UW.

            \r\n" -#~ "\r\n" -#~ "

            Jak się do nas zgłosić?

            \r\n" -#~ "

            Wszystkie zainteresowane osoby prosimy o przysłanie maila na adres marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.

            \r\n" -#~ msgstr "" -#~ "

            Волонтерство

            \r\n" -#~ "\r\n" -#~ "

            Ми намагаємося якомога краще підготувати твори, які поступово " -#~ "додаються до нашої бібліотеки. Це можливо тільки завдяки нашим волонтерам." -#~ "

            \r\n" -#~ "\r\n" -#~ "

            Запрошуємо усіх, хто хоче допомогти у творенні шкільної інтернет-" -#~ "бібліотеки Wolne Lektury.

            \r\n" -#~ "\r\n" -#~ "

            Всім волонтерам ми пропонуємо тренінги і практичний досвід обробки " -#~ "тексту: змістовне та технічне редагування. Волонтери можуть ознайомитися " -#~ "з проблемами та можливостями, пов’язаними з інтернет-публікаціями.\r\n" -#~ "\r\n" -#~ "Спільно з нами волонтери організують тренінги та конференції, допомагають " -#~ "в підготовленні текстів для слухання (так званих аудіо-книг). Ми " -#~ "підписуємо з волонтерами угоди та надаємо їм посвідчення про це коли і " -#~ "які праці виконував для нашого фонду волонтер. Тренінги, досвід " -#~ "редагування та сертифікати, які це засвідчують, можуть бути цінними в " -#~ "процесі підвищення кваліфікацій і професійній кар'єрі.

            \r\n" -#~ "\r\n" -#~ "

            Що можна робити?

            \r\n" -#~ "\r\n" -#~ "

            Найбільше роботи присвячується підготовленню тексту для публікації. В " -#~ "тексті, який ми отримуємо від Національної бібліотеки треба виправити " -#~ "орфографічні та інші механічні помилки, а потім додати в тексті примітки, " -#~ "пам’ятаючи про це, що наша пропозиція скерована перш за все до учнів, для " -#~ "яких багато слів та фраз звучатиме анахронічно. Давніші публікації (все " -#~ "залежить тут від авторського права) піддаються необхідному мовному " -#~ "осучасненню, на приклад щодо правопису чи флексії, при чому ми дбаємо про " -#~ "це щоб не порушувати артистичного характеру тексту. Останнім етапом є " -#~ "пошук літературних мотивів та тем, які мають допомогти в глибинному " -#~ "пізнанні літератури. В усіх цих працях нас підтримують волонтери - " -#~ "вчителі та студенти - які часто допомагають також порадою та зауваженнями " -#~ "при прийнятті важливих рішень.

            \r\n" -#~ "\r\n" -#~ "

            Як до нас зголоситися?

            \r\n" -#~ "\r\n" -#~ "

            Усіх зацікавлених просимо вислати листа на адресу fundacja@nowoczesnapolska.org.pl.\r\n" -#~ "\r\n" -#~ "

            Запрошуємо також на сайт редакції Wolne Lektury, де можна знайти " -#~ "усю необхідну інформацію про це, як залучитись у редакційну роботу.

            " -#~ "\r\n" - -#~ msgid "" -#~ "

            Kogo szukamy?

            \r\n" -#~ "\r\n" -#~ "

            Redaktorów technicznych (skład tekstu)

            \r\n" -#~ "

            Skład jest pierwszym etapem pracy nad tekstem. Za pomocą znaczników " -#~ "języka WL-XML nadajemy tekstowi pożądaną formę i umożliwiamy wyświetlenie " -#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na Platformie Redakcyjnej, " -#~ "która pozwala na zautomatyzowanie dużej części pracy.

            \r\n" -#~ "\r\n" -#~ "

            Kto może zostać redaktorem technicznym?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy – po krótkim szkoleniu.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Więcej informacji o redakcji technicznej znajdziecie na stronie redakcji " -#~ "Wolnych Lektur

            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Redaktorów literackich (merytorycznych)

            \r\n" -#~ "

            Redakcja literacka obejmuje korektę, uwspółcześnienia oraz dodawanie " -#~ "przypisów i motywów literackich. To unikalna możliwość zdobycia " -#~ "doświadczenia w cyfrowej edycji tekstów.

            \r\n" -#~ "\r\n" -#~ "

            Kto może zostać redaktorem literackim?

            \r\n" -#~ "
              \r\n" -#~ "
            • Osoby, które mają doświadczenie w redakcji tekstów literackich,
            • " -#~ "\r\n" -#~ "
            • Studenci i absolwenci studiów humanistycznych, którzy chcą takie " -#~ "doświadczenie zdobyć.
            • \r\n" -#~ "
            \r\n" -#~ "

            Więcej informacji o redakcji merytorycznej znajdziecie na stronie redakcji " -#~ "Wolnych Lektur

            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Tłumaczy

            \r\n" -#~ "

            Strona WolneLektury.pl jest dostępna w siedmiu językach obcych – " -#~ "angielskim, francuskim, niemieckim, hiszpańskim, litewskim, rosyjskim " -#~ "oraz ukraińskim. Użytkownikami biblioteki jest ponad 200 tysięcy osób z " -#~ "zagranicy, a już niedługo nasze zbiory obejmą również dzieła w językach " -#~ "obcych. Dlatego potrzebujemy na bieżąco tłumaczyć nowe informacje " -#~ "pojawiające się na stronie.

            \r\n" -#~ "

            Kto może pomóc w tłumaczeniach?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy, kto dobrze zna co najmniej jeden z powyższych języków.
            • " -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Programistów

            \r\n" -#~ "

            Poza samą stroną Wolnych Lektur tworzymy również:

            \r\n" -#~ "
              \r\n" -#~ "
            • narzędzia redakcyjne,
            • \r\n" -#~ "
            • konwertery do różnych formatów e-booków,
            • \r\n" -#~ "
            • aplikacje mobile ułatwiające dostęp do naszych zasobów.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " -#~ "jQuery, LaTeX, Java.\r\n" -#~ "Tworzone przez nas oprogramowanie udostępniamy na wolnej licencji.

            \r\n" -#~ "

            Kto może pomóc w pracach programistycznych?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy, kto umie i chciałby zdobyć punkty do karmy za udział w " -#~ "otwartym projekcie programistycznym. ;)
            • \r\n" -#~ "
            \r\n" -#~ msgstr "" -#~ "

            Найбільш заслужені волонтери

            \r\n" -#~ "\r\n" -#~ "\t

            Agatapaszkowska (співпрацює з нами від 15 березня 2008)

            \r\n" -#~ "\r\n" -#~ "

            між іншими, опрацювала «В пустелі і в джунглях» Сенкевича; " -#~ "дивись також на нашому сайті «вклад користувача»: http://wiki." -#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

            \r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\t

            AgnieszkaKappa (співпрацює з нами від 16 березня 2008)

            \r\n" -#~ "\r\n" -#~ "

            між іншими, брала участь в творенні списку та опису " -#~ "використання літературних мотивів та тем; опрацювала тексти Сенкевича " -#~ "(Latarnik, Янко Музикант, Quo vadis); дивись також на нашому сайті «вклад " -#~ "користувача»: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk" -#~ "%C5%82ad&limit=500&target=AgnieszkaKappa

            \r\n" -#~ "\r\n" -#~ "\r\n" -#~ "

            Anerys (співпрацює з нами від 5 липня 2007)

            \r\n" -#~ "\r\n" -#~ "

            між іншими, брала участь в творенні списку літературних " -#~ "мотивів та тем, дискусії на тему літературних жанрів, опрацювала гімн " -#~ "Богородиця, «Фрашки» та «Трени» Кохановського; вірші Словацького (Grób " -#~ "Agamemnona), «Тартюфа» Мольєра, та поезії Каспровіча (в цьому числі гімн " -#~ "„Dies Irae”); дивись також на нашому сайті «вклад користувача»: http://" -#~ "wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

            \r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\t

            EmiliaZdankiewicz (співпрацює з нами від 17 березня 2008)

            \r\n" -#~ "\r\n" -#~ "

            між іншими, літературні мотиви — дискусія та опис, Словацький, " -#~ "Кордіан; Конопніцька, Nasza szkapa; Міцкевич, Дзяди ч. III; дивись також " -#~ "на нашому сайті «вклад користувача»: http://wiki." -#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

            \r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\t

            Ewa_Serafin (співпрацює з нами від 15 березня 2008)

            \r\n" -#~ "\r\n" -#~ "

            між іншими, брала участь в творенні списку та опису " -#~ "використання літературних мотивів та тем, опрацювала поезії Каспровіча " -#~ "(“Z wichrów i hal”, “Nad przepaściami”, “W ciemności schodzi moja " -#~ "dusza”), а також “Nad Niemnem” Елізи Ожешко; дивись також на нашому сайті " -#~ "«вклад користувача»: http://wiki.wolnepodreczniki.pl/Specjalna:Wk" -#~ "%C5%82ad/Ewa_Serafin

            \r\n" -#~ "\r\n" -#~ "\r\n" -#~ " \t

            Hanna_Golab (співпрацює з нами від 15 березня 2008)

            \r\n" -#~ "\r\n" -#~ "

            опрацювала “Царя Едіпа” Софокла та вірш “Dusiołek” Лесьмяна; " -#~ "дивись також на нашому сайті «вклад користувача»: http://wiki." -#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

            \r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\t

            Ingene (співпрацює з нами від 16 липня 2008)

            \r\n" -#~ "\r\n" -#~ "

            між іншими, опрацювала оповідання “Siłaczka” Жеромського, " -#~ "“Quo vadis” Сенкевича та “Трени” Кохановського; дивись також на нашому " -#~ "сайті «вклад користувача»: http://wiki.wolnepodreczniki.pl/Specjalna:Wk" -#~ "%C5%82ad/Ingene

            \r\n" -#~ " \r\n" -#~ "\t

            Jmyszkowska (співпрацює з нами від 26 березня 2008)

            \r\n" -#~ "\r\n" -#~ "

            між іншими, опрацювала “Гяура” Байрона та “Quo vadis” " -#~ "Сенкевича; дивись також на нашому сайті «вклад користувача»: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\r\n" -#~ "\r\n" -#~ "\r\n" -#~ "

            Marysiabailey (співпрацює з нами від 1 жовтня 2007)

            \r\n" -#~ "\r\n" -#~ "

            між іншими, брала участь у творенні списку літературних тем та " -#~ "описі їх застосування; опрацювала твори: “Селяни” Реймонта , “Lalka” " -#~ "Пруса, “Nie-Boska komedia” Красінського, „Bajki” та „Satyry” Красіцького, " -#~ "“Антигона” Софокла, а також твори Кохановського, Морштина, Міцкевича, " -#~ "Ґете, Оппмана, Каспровіча; дивись також на нашому сайті «вклад " -#~ "користувача»: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk" -#~ "%C5%82ad&limit=500&target=Marysiabailey; крім того, " -#~ "підготувала і провела тренінг для волонтерів 15 березня 2008; заямалася " -#~ "такод коректою, а на даний момент працює над аудіо-книгами.

            \r\n" -#~ "\r\n" -#~ "\r\n" -#~ "

            Olga_Wojtczak (співпрацює з нами від 21 жовтня 2008)

            \r\n" -#~ "\r\n" -#~ "

            між іншими, опрацювала романи Сенкевича (Трилогія), Реймонта, " -#~ "Жеромського, драми Шекспіра; дивись також на нашому сайті «вклад " -#~ "користувача»: http://wiki.wolnepodreczniki.pl/Specjalna:Wk" -#~ "%C5%82ad/Olga_Wojtczak

            \r\n" -#~ "\r\n" -#~ "\r\n" -#~ "

            Renataml (співпрацює з нами від 30 червня 2007)

            \r\n" -#~ "\r\n" -#~ "

            брала участь в дискусії на тему списку мотивів; як досвідчена " -#~ "вчителька, надавала підтримку та поради, редагувала роман «Lalka» Пруса, " -#~ "драму «Балладина» Словацького, оповідання «Siłaczka» Жеромського.\r\n" -#~ "\r\n" -#~ " http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

            \r\n" - -#~ msgid "O projekcie" -#~ msgstr "Про проект" - -#~ msgid "" -#~ "{% load reporting_stats %}\r\n" -#~ "\r\n" -#~ "

            Wolne Lektury to biblioteka internetowa czynna 24 godziny na " -#~ "dobę, 365 dni w roku i całkowicie darmowa. W jej zbiorach " -#~ "znajduje się {% count_books %} utworów, w tym wiele " -#~ "lektur szkolnych zalecanych do użytku przez Ministerstwo Edukacji " -#~ "Narodowej, które trafiły już do domeny publicznej. Wszystkie dzieła są " -#~ "odpowiednio opracowane - opatrzone przypisami, motywami i udostępnione w " -#~ "kilku formatach - HTML , TXT , " -#~ "PDF, EPUB, MOBI. W " -#~ "bibliotece znajduje się również kilkaset audiobooków, czytanych przez " -#~ "takich aktorów jak: Danuta Stenka, Jan Peszek czy Andrzej Chyra. Można " -#~ "ich słuchać w formatach MP3 i Ogg Vorbis. Audiobooki są również dostępne w formacie DAISY dostosowanym do potrzeb osób słabowidzących, niewidomych oraz osób " -#~ "mających trudności z czytaniem.

            \r\n" -#~ "\r\n" -#~ "

            Biblioteka Wolne Lektury dostępna jest za pośrednictwem aplikacji " -#~ "mobilnych – na system Android oraz na system iOS.

            \r\n" -#~ "\r\n" -#~ "

            Wszystkie utwory zamieszczone w bibliotece Wolne Lektury można " -#~ "zgodnie z prawem bezpłatnie przeglądać, słuchać, ściągać na swój " -#~ "komputer, a także udostępniać innym i cytować.

            \r\n" -#~ msgstr "" -#~ "{% load reporting_stats %}\r\n" -#~ "\r\n" -#~ "

            Wolne Lektury це електронна бібліотека відкрита 24 години на " -#~ "добу, 365 днів в році і повністю безкоштовна. В її колекції " -#~ "знаходиться {% count_books %} творів, в тому числі " -#~ "багато шкільної літератури, рекомендованої Міністерством національної " -#~ "освіти, яка увійшла вже до суспільного надбання. Усі твори старанно " -#~ "опрацьовані - до них додаються примітки, мотиви і надається доступ в " -#~ "декількох форматах - HTML , TXT , " -#~ "PDF, EPUB, MOBI. У " -#~ "бібліотеці можна також знайти кілька сотень аудіокниг у виконанні таких " -#~ "авторів як: Данута Стенка, Ян Пешек чи Анджей Хира. Можна їх слухати у " -#~ "форматах MP3 i Ogg Vorbis. Аудіокниги " -#~ "доступні також у форматі DAISY , який пристосований для " -#~ "слабозорих та сліпих осіб, а також для тих, хто має труднощі з читанням.\r\n" -#~ "\r\n" -#~ "

            Бібліотека Wolne Lektury також доступна за допомогою мобільних " -#~ "аплікацій – в системі Android, а також в системі iOS.

            \r\n" -#~ "\r\n" -#~ "

            Усі твори розміщені у бібліотеці Wolne Lektury можна легально " -#~ "переглядати, слухати, завантажувати на власний комп’ютер, надавати доступ " -#~ "до них іншим та цитувати.

            \r\n" - -#~ msgid "" -#~ "

            Wolne Lektury to projekt fundacji Nowoczesna Polska realizowany pro " -#~ "publico bono, we współpracy z Biblioteką Narodową, Biblioteką Ślaską oraz " -#~ "Biblioteką Elbląską pod patronatem Ministerstwa Edukacji Narodowej, " -#~ "Ministerstwa Kultury i Dziedzictwa Narodowego oraz Stowarzyszenia Pisarzy " -#~ "Polskich. W Komitecie Honorowym Wolnych Lektur zasiadają: prof. Maria " -#~ "Janion, prof. Grażyna Borkowska, prof. Przemysław Czapliński, prof. " -#~ "Mieczysław Dąbrowski, prof. Ewa Kraskowska, prof. Małgorzata Czermińska, " -#~ "prof. Jerzy Jarzębski i prof. Piotr Śliwiński.

            \r\n" -#~ "\r\n" -#~ "

            Większość utworów w bibliotece nie jest chroniona prawem autorskim i " -#~ "znajduje się w domenie publicznej, co oznacza że można je swobodnie " -#~ "publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi " -#~ "materiałami (przypisy, motywy literackie etc.), które podlegają prawu " -#~ "autorskiemu, to te dodatkowe materiały udostępnione są na licencji Uznanie " -#~ "autorstwa-Na tych samych warunkach 3.0. Publikujemy również kilka " -#~ "utworów, które autorzy lub spadkobiercy praw udostępnili na wolnej " -#~ "licencji Uznanie autorstwa-Na tych samych warunkach 3.0.

            \r\n" -#~ "\r\n" -#~ "Kontakt: wolnelektury@nowoczesnapolska.org.pl\r\n" -#~ msgstr "" -#~ "

            Wolne Lektury це проект Фонду Сучасна Польща (Fundacja Nowoczesna " -#~ "Polska), реалізований з некомерційною метою, у співпраці з Національною " -#~ "бібліотекою, Сілезькою бібліотекою та Ельблонзькою бібліотекою під " -#~ "патронатом Міністерства національної освіти, Міністерства культури та " -#~ "національної спадщини, а також Спілки польських письменників. В Почесному " -#~ "комітеті проекту Wolne Lektury засідають проф. Марія Яніон, проф. Ґражина " -#~ "Борковська, проф. Пшемислав Чаплінський, проф. Мєчислав Домбровський, " -#~ "проф. Ева Красковська, проф. Малґожата Чермінська, проф. Єжи Яжембський " -#~ "та проф. Піотр Слівінський.

            \r\n" -#~ "\r\n" -#~ "

            Більшість творів у бібліотеці не охороняються авторським правом і " -#~ "являються частиною суспільного надбання, тому їх можна вільно публікувати " -#~ "та розповсюджувати. Якщо тексти супроводжуються додатковими матеріалами " -#~ "(примітками, літературними мотивами тощо), які охороняються авторським " -#~ "правом, доступ до цих додаткових матеріалів надається на умовах ліцензії " -#~ "Із " -#~ "зазначенням імені автора – На тих же умовах 3.0. Також ми публікуємо " -#~ "декілька творів, до яких автори або спадкоємці прав надали доступ на " -#~ "підставі вільної ліцензії Із зазначенням імені автора – На тих же умовах 3.0.

            \r\n" -#~ "\r\n" -#~ "Контакт: wolnelektury@nowoczesnapolska.org.pl\r\n" - -#~ msgid "Zespół" -#~ msgstr "Команда" - -#~ msgid "" -#~ "

            Magdalena Biernat – koordynatorka projektu, dyrektor " -#~ "zarządzająca fundacji Nowoczesna Polska. Socjolożka, absolwentka " -#~ "Uniwersytetu Warszawskiego i L’Université libre de Bruxelles. " -#~ "Specjalistka od projektów internetowych. Koordynowała projekty Kandydaci " -#~ "2009 i Mam Prawo Wiedzieć w Stowarzyszeniu 61. Pracowała przy wielu " -#~ "badaniach społecznych realizowanych przez organizacje pozarządowe i firmy " -#~ "badawcze.

            \r\n" -#~ "\r\n" -#~ "

            Radosław Czajka – główny programista, studiował " -#~ "informatykę na MIMUW. Biegły w językach programowania, znaczników: " -#~ "Python, XHTML, Javascript, CSS, LaTeX, SQL. Posiada doświadczenie z " -#~ "frameworkami Django, Jquery, doświadczenie w przekształceniach dokumentów " -#~ "XML (XSLT), w produkcji ebooków w formatach PDF i EPUB oraz w tworzeniu " -#~ "aplikacji mobilnych na system Android i iOS.

            \r\n" -#~ "\r\n" -#~ "

            Marcin Koziej – programista. Absolwent Politechniki " -#~ "Warszawskiej i doktorant w Instytucie Filozofii Uniwersytetu " -#~ "Warszawskiego. Działacz Mokotowskiej Kooperatywy Spożywczej. Podróżnik, " -#~ "rowerzysta i biesiadnik. Homo ludens.

            \r\n" -#~ "\r\n" -#~ "

            Marta Niedziałkowska – redaktorka techniczna, " -#~ "absolwentka bibliotekoznawstwa i informacji naukowej UW. Studentka " -#~ "studiów magisterskich Public Policy and Administration na Collegium " -#~ "Civitas.

            \r\n" -#~ "\r\n" -#~ msgstr "" -#~ "

            Маґдалена Б’єрнат – координатор проекту, керуючий " -#~ "директор Фонду Сучасна Польща (Fundacja Nowoczesna Polska). Соціолог, " -#~ "випускниця Варшавського університету та Брюссельського вільного " -#~ "університету. Спеціаліст інтернетних проектів. Керувала проектами " -#~ "«Кандидати 2009» та «Я маю право знати» у Асоціації 61. Працювала у " -#~ "багатьох соціальних дослідженнях, які проводилися громадськими " -#~ "організаціями та дослідницькими фірмами.

            \r\n" -#~ "\r\n" -#~ "

            Радослав Чайка – головний програміст, вивчав " -#~ "інформатику на Факультеті Математики, Інформатики та Механіки " -#~ "Варшавського Університету. Володіє наступними мовами програмування та " -#~ "тегів: Python, XHTML, Javascript, CSS, LaTeX, SQL. Має досвід у " -#~ "фреймворках Django, Jquery, а також у трансформуванні документів XML " -#~ "(XSLT), у творенні електронних книг у форматах PDF та EPUB і мобільних " -#~ "аплікацій на системи Android та iOS.

            \r\n" -#~ "\r\n" -#~ "

            Марцін Козєй – програміст. Випускник Варшавського " -#~ "Політехнічного Університету та аспірант в Інституті Філософії " -#~ "Варшавського Університету. Діяч Мокотовського Продовольчого Кооперативу. " -#~ "Мандрівник, велосипедист, любитель усіляких банкетів. Homo ludens.

            \r\n" -#~ "\r\n" -#~ "

            Марта Нєдзялковська – технічний редактор, випускниця " -#~ "бібліотекознавства та наукової інформації Варшавського університету. " -#~ "Студентка магістратури на спеціальності Public Policy and Administration " -#~ "у Collegium Civitas.

            \r\n" -#~ "\r\n" - -#~ msgid "" -#~ "

            Dorota A. Kowalska – redaktorka literacka, " -#~ "językoznawca, polonistka i slawistka, doktor nauk humanistycznych, " -#~ "adiunkt w Pracowni Polszczyzny Kresowej IJP PAN, gdzie zajmuje się " -#~ "historią i współczesnością języka polskiego na Ukrainie. Hobbystycznie " -#~ "śpiewa archaiczne pieśni ukraińskie i rosyjskie, cyklistka.

            \r\n" -#~ "\r\n" -#~ "

            Aleksandra Sekuła – redaktorka literacka, historyczka " -#~ "literatury, doktor nauk humanistycznych, absolwentka Wydziału Polonistyki " -#~ "Uniwersytetu Warszawskiego i Szkoły Nauk Społecznych przy IFiS PAN. " -#~ "Zawodowo i naukowo zajmuje się polskim romantyzmem, historią idei i " -#~ "teorią kultury.

            \r\n" -#~ "\r\n" -#~ "

            Paweł Kozioł – redaktor literacki. Ur. 1979, doktor " -#~ "nauk humanistycznych specjalizujący się w literaturze dawnej, absolwent " -#~ "Wydziału Polonistyki Uniwersytetu Warszawskiego oraz Dulwich College w " -#~ "Londynie. Poeta, krytyk literacki, stypendysta Ministerstwa Kultury i " -#~ "Dziedzictwa Narodowego (2010).

            \r\n" -#~ "\r\n" -#~ "

            Paulina Choromańska – redaktorka techniczna, " -#~ "studentka II roku studiów magisterskich w Instytucie Informacji Naukowej " -#~ "i Studiów Bibliologicznych UW. Pracuje również w Pracowni Dokumentacji " -#~ "Teatru w Instytucie Teatralnym im. Z. Raszewskiego w Warszawie.

            \r\n" -#~ "\r\n" -#~ "

            Aneta Rawska - redaktorka techniczna, studentka II " -#~ "roku studiów magisterskich w Instytucie Informacji Naukowej i Studiów " -#~ "Bibliologicznych UW, miłośniczka wypieków i dobrej kuchni. Od 2009 roku " -#~ "prowadzi serwis koła PZW nr 21 w Wołominie.

            \r\n" -#~ msgstr "" -#~ "

            Дорота А. Ковальська – літературний редактор, " -#~ "мовознавець, польський філолог та славіст, кандидат гуманітарних наук, " -#~ "ад'юнкт у Відділі польської мови Кресів в Інституті польської мови в " -#~ "Польській Академії Наук, де займається історією та сучасністю польської " -#~ "мови в Україні. Її хобі - співати архаїчні українські та російські пісні; " -#~ "велосипедистка.

            \r\n" -#~ "\r\n" -#~ "

            Александра Секула – літературний редактор, історик " -#~ "літератури, кандидат гуманітарних наук, випускниця Факультету польської " -#~ "філології Варшавського університету та Школи Суспільних Наук Інституту " -#~ "філософії та соціології Польської академії наук. Професійно та науково " -#~ "займається польським романтизмом, історією ідеї та теорією культури.

            " -#~ "\r\n" -#~ "\r\n" -#~ "

            Павел Козіол – літературний редактор, народжений у " -#~ "1979, кандидат гуманітарних наук, який спеціалізується у давній " -#~ "літературі, випускник Факультету Полоністики Варшавського університету та " -#~ "Далідж-Коледжу у Лондоні. Поет, літературний критик, стипендист " -#~ "Міністерства культури та національної спадщини (2010).

            \r\n" -#~ "\r\n" -#~ "

            Пауліна Хороманська – технічний редактор, студентка " -#~ "ІІ курсу магістратури в Інституті наукової інформації та " -#~ "бібліотекознавства Варшавського Університету. Працює також у Відділі " -#~ "документації театру в Театральному Інституті ім. З. Рашевського у Варшаві." -#~ "

            \r\n" -#~ "\r\n" -#~ "

            Анета Равська - технічний редактор, студентка ІІ " -#~ "курсу магістратури в Інституті наукової інформації та бібліотекознавства " -#~ "Варшавського Університету, любителька випічки та доброї кухні. З 2009 " -#~ "року займається інтернетною сторінкою гуртка Польської спілки рибалок № " -#~ "21 у Воломіні.

            \r\n" - -#~ msgid "Wesprzyj nas" -#~ msgstr "Підтримайте нас" - -#~ msgid "" -#~ "

            Przekaż 1% podatku na Wolne Lektury

            \r\n" -#~ "

            Fundacja Nowoczesna Polska posiada status Organizacji Pożytku " -#~ "Publicznego dzięki czemu na rozwój projektu Wolne Lektury można przekazać " -#~ "1% swojego podatku. W tym celu należy wypełnić odpowiednią rubrykę w " -#~ "rocznym zeznaniu podatkowym (PIT-36, PIT-37 lub PIT-28). W zeznaniu " -#~ "należy podać nazwę:

            \r\n" -#~ "Fundacja Nowoczesna Polska
            \r\n" -#~ "oraz numer z Krajowego Rejestru Sądowego (KRS) 0000070056
            \r\n" -#~ msgstr "" -#~ "

            Перекажіть 1% податку на Wolne Lektury

            \r\n" -#~ "

            Фонд Сучасна Польща (Fundacja Nowoczesna Polska) має статус " -#~ "Організації суспільної користі, тому на розвиток проекту Wolne Lektury " -#~ "можна переказати 1% свого податку. Для цього потрібно заповнити " -#~ "відповідне поле у річній податковій декларації (PIT-36, PIT-37 або " -#~ "PIT-28). У декларації потрібно вказати назву Фонду:

            \r\n" -#~ "Fundacja Nowoczesna Polska
            \r\n" -#~ "та номер з Національного Судового Реєстру (KRS) 0000070056
            \r\n" - -#~ msgid "" -#~ "

            Przekaż darowiznę na Wolne Lektury

            \r\n" -#~ "

            Każda wpłacona kwota zostanie przeznaczona na rozwój zasobów naszej " -#~ "biblioteki. Wystarczy dokonać przelewu na konto:

            \r\n" -#~ "\r\n" -#~ "Fundacja Nowoczesna Polska
            \r\n" -#~ "ul. Marszałkowska 84/92 lok. 125
            \r\n" -#~ "00-514 Warszawa
            \r\n" -#~ "Nr konta: PKO BP 46 10201097 0000 7502 0001 6766
            \r\n" -#~ "Tytuł przelewu: Darowizna na Wolne Lektury
            \r\n" -#~ msgstr "" -#~ "

            Зробіть благодійний внесок на Wolne Lektury

            \r\n" -#~ "

            Усі отримані кошти буде використано для розвитку колекції нашої " -#~ "бібліотеки. Єдине, що потрібно зробити, це перерахувати кошти на рахунок:" -#~ "

            \r\n" -#~ "\r\n" -#~ "Fundacja Nowoczesna Polska
            \r\n" -#~ "ul. Marszałkowska 84/92 lok. 125
            \r\n" -#~ "00-514 Warszawa
            \r\n" -#~ "Номер банківського рахунку: PKO BP 46 10201097 0000 7502 0001 6766
            " -#~ "\r\n" -#~ "Призначення платежу: Благодійний внесок на Wolne Lektury
            \r\n" - -#~ msgid "Włącz się w prace" -#~ msgstr "Візьміть участь у нашій діяльності" - -#~ msgid "" -#~ "
              \r\n" -#~ "
            • Zostań naszym redaktorem, programistą lub tłumaczem
            • \r\n" -#~ "
            • Zdobądź nowe umiejętności i doświadczenie
            • \r\n" -#~ "
            • Weź udział w otwartym projekcie i twórz innowacyjną bibliotekę " -#~ "internetową
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Zapraszamy wszystkie osoby, które chcą współtworzyć nasz projekt. " -#~ "Współpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " -#~ "literaturą, redagowaniem tekstów i projektami informatycznymi. Oferujemy " -#~ "profesjonalne szkolenia i stałą pomoc merytoryczną. Wolontariusze mogą " -#~ "pracować zdalnie lub w siedzibie Fundacji.

            \r\n" -#~ "

            Organizujemy również praktyki studenckie – nawiązaliśmy współpracę z " -#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " -#~ "Karier UKSW oraz Wydziałem Fizyki UW.

            \r\n" -#~ "\r\n" -#~ "

            Jak się do nas zgłosić?

            \r\n" -#~ "

            Wszystkie zainteresowane osoby prosimy o przysłanie maila na adres marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.

            \r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\r\n" -#~ msgstr "" -#~ "
              \r\n" -#~ "
            • Стань нашим редактором, програмістом або перекладачем
            • \r\n" -#~ "
            • Здобудь нові уміння та досвід
            • \r\n" -#~ "
            • Візьми участь у відкритому проекті та допоможи творити інноваційну " -#~ "інтернет-бібліотеку
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Запрошуємо усіх, хто хоче допомогти у нашому проекті. Співпрацюємо зі " -#~ "студентами, вчителями та усіма, хто цікавиться літературою, редагуванням " -#~ "текстів та комп’ютерними проектами. Ми пропонуємо професійні тренінги та " -#~ "постійну змістовну підтримку. Волонтери можуть працювати в електронному " -#~ "режимі або в офісі Фонду.

            \r\n" -#~ "

            Також ми організуємо студентські практики - розпочали співпрацю з " -#~ "Інститутом наукової інформації та бібліотекознавчих досліджень " -#~ "Варшавського Університету, Студентським центром зайнятості Університету " -#~ "Кардинала Стефана Вишинського та Факультетом Фізики Варшавського " -#~ "Університету.

            \r\n" -#~ "\r\n" -#~ "

            Як до нас приєднатися?

            \r\n" -#~ "

            Усіх зацікавлених просимо вислати повідомлення на адресу marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.

            \r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\r\n" - -#~ msgid "" -#~ "

            Kogo szukamy?

            \r\n" -#~ "\r\n" -#~ "

            Redaktorów technicznych (skład tekstu)

            \r\n" -#~ "

            Skład jest pierwszym etapem pracy nad tekstem. Za pomocą znaczników " -#~ "języka WL-XML nadajemy tekstowi pożądaną formę i umożliwiamy wyświetlenie " -#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na Platformie Redakcyjnej, " -#~ "która pozwala na zautomatyzowanie dużej części pracy.

            \r\n" -#~ "\r\n" -#~ "

            Kto może zostać redaktorem technicznym?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy – po krótkim szkoleniu.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Więcej informacji o redakcji technicznej znajdziecie na stronie redakcji Wolnych Lektur

            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Redaktorów literackich (merytorycznych)

            \r\n" -#~ "

            Redakcja literacka obejmuje korektę, uwspółcześnienia oraz dodawanie " -#~ "przypisów i motywów literackich. To unikalna możliwość zdobycia " -#~ "doświadczenia w cyfrowej edycji tekstów.

            \r\n" -#~ "\r\n" -#~ "

            Kto może zostać redaktorem literackim?

            \r\n" -#~ "
              \r\n" -#~ "
            • Osoby, które mają doświadczenie w redakcji tekstów literackich,
            • " -#~ "\r\n" -#~ "
            • Studenci i absolwenci studiów humanistycznych, którzy chcą takie " -#~ "doświadczenie zdobyć.
            • \r\n" -#~ "
            \r\n" -#~ "

            Więcej informacji o redakcji merytorycznej znajdziecie na stronie redakcji Wolnych Lektur

            \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Tłumaczy

            \r\n" -#~ "

            Strona WolneLektury.pl jest dostępna w siedmiu językach obcych – " -#~ "angielskim, francuskim, niemieckim, hiszpańskim, litewskim, rosyjskim " -#~ "oraz ukraińskim. Użytkownikami biblioteki jest ponad 200 tysięcy osób z " -#~ "zagranicy, a już niedługo nasze zbiory obejmą również dzieła w językach " -#~ "obcych. Dlatego potrzebujemy na bieżąco tłumaczyć nowe informacje " -#~ "pojawiające się na stronie.

            \r\n" -#~ "

            Kto może pomóc w tłumaczeniach?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy, kto dobrze zna co najmniej jeden z powyższych języków.
            • " -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Programistów

            \r\n" -#~ "

            Poza samą stroną Wolnych Lektur tworzymy również:

            \r\n" -#~ "
              \r\n" -#~ "
            • narzędzia redakcyjne,
            • \r\n" -#~ "
            • konwertery do różnych formatów e-booków,
            • \r\n" -#~ "
            • aplikacje mobile ułatwiające dostęp do naszych zasobów.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " -#~ "jQuery, LaTeX, Java.\r\n" -#~ "Tworzone przez nas oprogramowanie udostępniamy na wolnej licencji.

            \r\n" -#~ "

            Kto może pomóc w pracach programistycznych?

            \r\n" -#~ "
              \r\n" -#~ "
            • Każdy, kto umie i chciałby zdobyć punkty do karmy za udział w " -#~ "otwartym projekcie programistycznym. ;)
            • \r\n" -#~ "
            \r\n" -#~ msgstr "" -#~ "

            Кого ми шукаємо?

            \r\n" -#~ "\r\n" -#~ "

            Технічних редакторів (верстка)

            \r\n" -#~ "

            Верстка - це перший етап праці над текстом. За допомогою тегів мови " -#~ "WL-XML надаємо текстам потрібний вигляд та робимо можливим їх публікацію " -#~ "на веб-сайті. Технічне редагування виконується на Редакційній платформі, яка дозволяє " -#~ "автоматизувати велику частину праці.

            \r\n" -#~ "\r\n" -#~ "

            Хто може стати технічним редактором?

            \r\n" -#~ "
              \r\n" -#~ "
            • Кожен - після короткого тренінгу.
            • \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Більше інформації про технічне редагування знайдете на сайті редакції Wolne Lektury

            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Літературних редакторів

            \r\n" -#~ "

            Літературне редагування включає в себе коректу, осучаснення тексту, а " -#~ "також додавання приміток та літературних мотивів. Це унікальна можливість " -#~ "здобути досвід у цифровій обробці текстів.

            \r\n" -#~ "\r\n" -#~ "

            Хто може стати літературним редактором?

            \r\n" -#~ "
              \r\n" -#~ "
            • Той, хто має досвід у редагуванні літературних текстів,
            • \r\n" -#~ "
            • Студенти та випускники гуманітарних факультетів, які хочуть здобути " -#~ "такий досвід.
            • \r\n" -#~ "
            \r\n" -#~ "

            Більше інформації про літературне редагування знайдете на сайті редакції Wolne Lektury

            \r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Перекладачів

            \r\n" -#~ "

            Сайт WolneLektury.pl доступний на семи іноземних мовах – англійській, " -#~ "французькій, німецькій, іспанській, литовській, російській та " -#~ "українській. Бібліотекою користується більше ніж 200 тисяч закордонних " -#~ "відвічувачів, а незабаром у нашій колекцій знайдуться також твори на " -#~ "іноземних мовах. Тому нам потрібно систематично перекладати нову " -#~ "інформацію, яка з’являється на сайті.

            \r\n" -#~ "

            Хто може допомогти у перекладах?

            \r\n" -#~ "
              \r\n" -#~ "
            • Кожний, хто добре володіє принаймні однією з вищезгаданих мов.
            • " -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Програмістів

            \r\n" -#~ "

            Крім самого сайту Wolne Lektury ми творимо також:

            \r\n" -#~ "
              \r\n" -#~ "
            • редакційні інструменти,
            • \r\n" -#~ "
            • конвертери для різних форматів електронних книг,
            • \r\n" -#~ "
            • мобільні аплікації, які роблять можливим доступ до наших колекцій.\r\n" -#~ "
            \r\n" -#~ "\r\n" -#~ "

            Ми користуємося такими технологіями, як Python, Django, XHTML, " -#~ "JavaScript, jQuery, LaTeX, Java.\r\n" -#~ "Програмне забезпечення, яке створюємо, надається на вільній ліцензії.

            \r\n" -#~ "

            Хто може допомогти у програмуванні?

            \r\n" -#~ "
              \r\n" -#~ "
            • Кожен, хто вміє і хоче за участь у відкритому програмістичному " -#~ "проекті здобути додаткові бали до карми. ;)
            • \r\n" -#~ "
            \r\n" - -#~ msgid "Prawa" -#~ msgstr "Права" - -#~ msgid "" -#~ "

            Większość utworów w bibliotece nie jest chroniona prawem autorskim i " -#~ "znajduje się w domenie publicznej, co oznacza, że można je swobodnie " -#~ "publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi " -#~ "materiałami (przypisy, motywy literackie etc.), które podlegają prawu " -#~ "autorskiemu, to te dodatkowe materiały udostępnione są na licencji Uznanie " -#~ "autorstwa-Na tych samych warunkach 3.0. Publikujemy również kilka " -#~ "utworów, które autorzy lub spadkobiercy praw udostępnili na wolnej " -#~ "licencji Uznanie autorstwa-Na tych samych warunkach 3.0.

            " -#~ msgstr "" -#~ "

            Більшість творів у бібліотеці не охороняються авторським правом і " -#~ "являються частиною суспільного надбання, тому їх можна вільно публікувати " -#~ "та розповсюджувати. Якщо тексти супроводжуються додатковими матеріалами " -#~ "(примітками, літературними мотивами тощо), які охороняються авторським " -#~ "правом, доступ до цих додаткових матеріалів надається на умовах ліцензії " -#~ "Із " -#~ "зазначенням імені автора – На тих же умовах 3.0. Також ми публікуємо " -#~ "декілька творів, до яких автори або спадкоємці прав надали доступ на " -#~ "підставі вільної ліцензії Із зазначенням імені автора – На тих же умовах 3.0.

            " diff --git a/apps/infopages/migrations/0001_initial.py b/apps/infopages/migrations/0001_initial.py deleted file mode 100644 index 2c3f4f07a..000000000 --- a/apps/infopages/migrations/0001_initial.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='InfoPage', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('main_page', models.IntegerField(null=True, verbose_name='main page priority', blank=True)), - ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), - ('title', models.CharField(max_length=120, verbose_name='Title', blank=True)), - ('title_de', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('title_en', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('title_es', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('title_fr', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('title_it', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('title_lt', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('title_pl', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('title_ru', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('title_uk', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('left_column', models.TextField(verbose_name='left column', blank=True)), - ('left_column_de', models.TextField(null=True, verbose_name='left column', blank=True)), - ('left_column_en', models.TextField(null=True, verbose_name='left column', blank=True)), - ('left_column_es', models.TextField(null=True, verbose_name='left column', blank=True)), - ('left_column_fr', models.TextField(null=True, verbose_name='left column', blank=True)), - ('left_column_it', models.TextField(null=True, verbose_name='left column', blank=True)), - ('left_column_lt', models.TextField(null=True, verbose_name='left column', blank=True)), - ('left_column_pl', models.TextField(null=True, verbose_name='left column', blank=True)), - ('left_column_ru', models.TextField(null=True, verbose_name='left column', blank=True)), - ('left_column_uk', models.TextField(null=True, verbose_name='left column', blank=True)), - ('right_column', models.TextField(verbose_name='right column', blank=True)), - ('right_column_de', models.TextField(null=True, verbose_name='right column', blank=True)), - ('right_column_en', models.TextField(null=True, verbose_name='right column', blank=True)), - ('right_column_es', models.TextField(null=True, verbose_name='right column', blank=True)), - ('right_column_fr', models.TextField(null=True, verbose_name='right column', blank=True)), - ('right_column_it', models.TextField(null=True, verbose_name='right column', blank=True)), - ('right_column_lt', models.TextField(null=True, verbose_name='right column', blank=True)), - ('right_column_pl', models.TextField(null=True, verbose_name='right column', blank=True)), - ('right_column_ru', models.TextField(null=True, verbose_name='right column', blank=True)), - ('right_column_uk', models.TextField(null=True, verbose_name='right column', blank=True)), - ], - options={ - 'ordering': ('main_page', 'slug'), - 'verbose_name': 'info page', - 'verbose_name_plural': 'info pages', - }, - bases=(models.Model,), - ), - ] diff --git a/apps/infopages/migrations/0002_auto_20151221_1225.py b/apps/infopages/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index d5755e7ef..000000000 --- a/apps/infopages/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('infopages', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='infopage', - name='slug', - field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), - ), - migrations.AlterField( - model_name='infopage', - name='title', - field=models.CharField(max_length=120, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_de', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_en', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_es', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_fr', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_it', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_lt', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_pl', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_ru', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_uk', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - ] diff --git a/apps/infopages/migrations/__init__.py b/apps/infopages/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/infopages/models.py b/apps/infopages/models.py deleted file mode 100644 index cf9e9bf66..000000000 --- a/apps/infopages/models.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.db import models -from django.utils.translation import ugettext_lazy as _ - -class InfoPage(models.Model): - """An InfoPage is used to display a two-column flatpage.""" - - main_page = models.IntegerField(_('main page priority'), null=True, blank=True) - slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True) - title = models.CharField(_('title'), max_length=120, blank=True) - left_column = models.TextField(_('left column'), blank=True) - right_column = models.TextField(_('right column'), blank=True) - - class Meta: - ordering = ('main_page', 'slug',) - verbose_name = _('info page') - verbose_name_plural = _('info pages') - - def __unicode__(self): - return self.title - - @models.permalink - def get_absolute_url(self): - return ('infopage', [self.slug]) diff --git a/apps/infopages/templates/infopages/infopage.html b/apps/infopages/templates/infopages/infopage.html deleted file mode 100755 index 75dae0850..000000000 --- a/apps/infopages/templates/infopages/infopage.html +++ /dev/null @@ -1,23 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block titleextra %}{{ page.title }}{% endblock %} - -{% block metadescription %}{{ left_column|striptags|truncatewords:10 }}{% endblock %} - -{% block body %} -

            {{ page.title }}

            - - {% autoescape off %} -
            -
            - {{ left_column }} -
            -
            -
            -
            - {{ right_column }} -
            -
            - {% endautoescape %} -{% endblock %} diff --git a/apps/infopages/templates/infopages/on_main.html b/apps/infopages/templates/infopages/on_main.html deleted file mode 100755 index 5d80dad57..000000000 --- a/apps/infopages/templates/infopages/on_main.html +++ /dev/null @@ -1,3 +0,0 @@ -{% for page in objects %} -
          • {{ page.title }}
          • -{% endfor %} diff --git a/apps/infopages/templatetags/__init__.py b/apps/infopages/templatetags/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/infopages/templatetags/infopages_tags.py b/apps/infopages/templatetags/infopages_tags.py deleted file mode 100755 index d7c93ca8f..000000000 --- a/apps/infopages/templatetags/infopages_tags.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import template -from infopages.models import InfoPage - -register = template.Library() - - -@register.inclusion_tag('infopages/on_main.html') -def infopages_on_main(): - objects = InfoPage.objects.exclude(main_page=None) - return {"objects": objects} diff --git a/apps/infopages/translation.py b/apps/infopages/translation.py deleted file mode 100644 index e002482a3..000000000 --- a/apps/infopages/translation.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# - -from modeltranslation.translator import translator, TranslationOptions -from infopages.models import InfoPage - -class InfoPageTranslationOptions(TranslationOptions): - fields = ('title', 'left_column', 'right_column') - -translator.register(InfoPage, InfoPageTranslationOptions) diff --git a/apps/infopages/urls.py b/apps/infopages/urls.py deleted file mode 100755 index 206f7cbf9..000000000 --- a/apps/infopages/urls.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - - -urlpatterns = patterns('infopages.views', - url(r'^(?P[a-zA-Z0-9_-]+)/$', 'infopage', name='infopage'), -) - diff --git a/apps/infopages/views.py b/apps/infopages/views.py deleted file mode 100644 index d5dee7630..000000000 --- a/apps/infopages/views.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.shortcuts import render_to_response, get_object_or_404 -from django.template import RequestContext, Template, TemplateSyntaxError - -from infopages.models import InfoPage - - -def infopage(request, slug): - page = get_object_or_404(InfoPage, slug=slug) - rc = RequestContext(request) - try: - left_column = Template(page.left_column).render(rc) - except TemplateSyntaxError: - left_column = '' - - try: - right_column = Template(page.right_column).render(rc) - except TemplateSyntaxError: - left_column = '' - - return render_to_response('infopages/infopage.html', locals(), - context_instance=RequestContext(request)) diff --git a/apps/lesmianator/__init__.py b/apps/lesmianator/__init__.py deleted file mode 100644 index 54eee5b94..000000000 --- a/apps/lesmianator/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# - -# Leśmianator do działania wymaga pliku dictionary.p w katalogu aplikacji -# plik ten powinien zawierać słownik postaci: -# <3-znakowy ciąg> => => diff --git a/apps/lesmianator/locale/pl/LC_MESSAGES/django.mo b/apps/lesmianator/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index a072a55da..000000000 Binary files a/apps/lesmianator/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/lesmianator/locale/pl/LC_MESSAGES/django.po b/apps/lesmianator/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 959b77882..000000000 --- a/apps/lesmianator/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,47 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-01-27 16:38+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \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%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2)\n" - -#: models.py:26 -msgid "slug" -msgstr "slug" - -#: models.py:27 -msgid "text" -msgstr "tekst" - -#: models.py:29 -msgid "extra information" -msgstr "dodatkowe informacje" - -#: models.py:30 -msgid "creation date" -msgstr "data utworzenia" - -#: models.py:31 -msgid "last view date" -msgstr "data ostatniego obejrzenia" - -#: models.py:32 -msgid "view count" -msgstr "licznik obejrzeń" - -#: models.py:104 -msgid "Continuations file" -msgstr "plik kontynuacji" diff --git a/apps/lesmianator/management/__init__.py b/apps/lesmianator/management/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/lesmianator/management/commands/__init__.py b/apps/lesmianator/management/commands/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/lesmianator/management/commands/lesmianator.py b/apps/lesmianator/management/commands/lesmianator.py deleted file mode 100644 index b2341ab31..000000000 --- a/apps/lesmianator/management/commands/lesmianator.py +++ /dev/null @@ -1,101 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import re -from cPickle import dump -from optparse import make_option - -from django.core.management.base import BaseCommand -from django.core.management.color import color_style -from django.conf import settings - -from catalogue.models import Book, Tag - -# extract text from text file -re_text = re.compile(r'\n{3,}(.*?)\n*-----\n', re.S).search - - -class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-t', '--tags', dest='tags', metavar='SLUG,...', - help='Use only books tagged with this tags'), - make_option('-i', '--include', dest='include', metavar='SLUG,...', - help='Include specific books by slug'), - make_option('-e', '--exclude', dest='exclude', metavar='SLUG,...', - help='Exclude specific books by slug') - ) - help = 'Prepare data for Lesmianator.' - - def handle(self, *args, **options): - self.style = color_style() - verbose = int(options.get('verbosity')) - tags = options.get('tags') - include = options.get('include') - exclude = options.get('exclude') - - try: - path = settings.LESMIANATOR_PICKLE - except: - print self.style.ERROR('LESMIANATOR_PICKLE not set in the settings.') - return - - books = [] - - if include: - books += list(Book.objects.filter(slug__in=include.split(',')).only('slug', 'txt_file')) - - if tags: - books += list(Book.tagged.with_all(Tag.objects.filter(slug__in=tags.split(','))).only('slug', 'txt_file')) - elif not include: - books = list(Book.objects.all().only('slug', 'txt_file')) - - if exclude: - books = [book for book in books if book.slug not in exclude.split(',')] - - books = set(books) - - lesmianator = {} - processed = skipped = 0 - for book in books: - if verbose >= 2: - print 'Parsing', book.slug - if not book.txt_file: - if verbose >= 1: - print self.style.NOTICE('%s has no TXT file' % book.slug) - skipped += 1 - continue - f = open(book.txt_file.path) - m = re_text(f.read()) - if not m: - print self.style.ERROR("Unknown text format: %s" % book.slug) - skipped += 1 - continue - - processed += 1 - last_word = '' - text = unicode(m.group(1), 'utf-8').lower() - for letter in text: - mydict = lesmianator.setdefault(last_word, {}) - mydict.setdefault(letter, 0) - mydict[letter] += 1 - last_word = last_word[-2:] + letter - f.close() - - if not processed: - if skipped: - print self.style.ERROR("No books with TXT files found") - else: - print self.style.ERROR("No books found") - return - - try: - dump(lesmianator, open(path, 'w')) - except: - print self.style.ERROR("Couldn't write to $s" % path) - return - - dump(lesmianator, open(path, 'w')) - if verbose >= 1: - print "%d processed, %d skipped" % (processed, skipped) - print "Results dumped to %s" % path diff --git a/apps/lesmianator/migrations/0001_initial.py b/apps/lesmianator/migrations/0001_initial.py deleted file mode 100644 index 17627e682..000000000 --- a/apps/lesmianator/migrations/0001_initial.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import jsonfield.fields -from django.conf import settings - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('contenttypes', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Continuations', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('pickle', models.FileField(upload_to=b'lesmianator', verbose_name='Continuations file')), - ('object_id', models.PositiveIntegerField()), - ('content_type', models.ForeignKey(to='contenttypes.ContentType')), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Poem', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('slug', models.SlugField(max_length=120, verbose_name='Slug')), - ('text', models.TextField(verbose_name='text')), - ('created_from', jsonfield.fields.JSONField(null=True, verbose_name='Additional information', blank=True)), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date')), - ('seen_at', models.DateTimeField(auto_now_add=True, verbose_name='last view date')), - ('view_count', models.IntegerField(default=1, verbose_name='view count')), - ('created_by', models.ForeignKey(to=settings.AUTH_USER_MODEL, null=True)), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.AlterUniqueTogether( - name='continuations', - unique_together=set([('content_type', 'object_id')]), - ), - ] diff --git a/apps/lesmianator/migrations/0002_auto_20151221_1225.py b/apps/lesmianator/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index 29a33a85c..000000000 --- a/apps/lesmianator/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models -import jsonfield.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('lesmianator', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='poem', - name='created_from', - field=jsonfield.fields.JSONField(null=True, verbose_name='extra information', blank=True), - ), - migrations.AlterField( - model_name='poem', - name='slug', - field=models.SlugField(max_length=120, verbose_name='slug'), - ), - ] diff --git a/apps/lesmianator/migrations/__init__.py b/apps/lesmianator/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/lesmianator/models.py b/apps/lesmianator/models.py deleted file mode 100644 index 5db02c2ae..000000000 --- a/apps/lesmianator/models.py +++ /dev/null @@ -1,178 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import cPickle -from datetime import datetime -from random import randint -from StringIO import StringIO - -from django.core.files.base import ContentFile -from django.db import models -from django.utils.timezone import utc -from django.utils.translation import ugettext_lazy as _ -from django.core.urlresolvers import reverse -from django.contrib.auth.models import User -from django.contrib.contenttypes.models import ContentType -from django.contrib.contenttypes.fields import GenericForeignKey -from django.conf import settings - -from jsonfield import JSONField -from catalogue.models import Book, Tag - - -class Poem(models.Model): - slug = models.SlugField(_('slug'), max_length=120, db_index=True) - text = models.TextField(_('text')) - created_by = models.ForeignKey(User, null=True) - created_from = JSONField(_('extra information'), null=True, blank=True) - created_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False) - seen_at = models.DateTimeField(_('last view date'), auto_now_add=True, editable=False) - view_count = models.IntegerField(_('view count'), default=1) - - try: - f = open(settings.LESMIANATOR_PICKLE) - global_dictionary = cPickle.load(f) - f.close() - except: - global_dictionary = {} - - def visit(self): - self.view_count += 1 - self.seen_at = datetime.utcnow().replace(tzinfo=utc) - self.save() - - def __unicode__(self): - return "%s (%s...)" % (self.slug, self.text[:20]) - - @staticmethod - def choose_letter(word, continuations): - if word not in continuations: - return u'\n' - - choices = sum((continuations[word][letter] - for letter in continuations[word])) - r = randint(0, choices - 1) - - for letter in continuations[word]: - r -= continuations[word][letter] - if r < 0: - return letter - - @classmethod - def write(cls, continuations=None, length=3, min_lines=2, maxlen=1000): - if continuations is None: - continuations = cls.global_dictionary - if not continuations: - return '' - - letters = [] - word = u'' - - finished_stanza_verses = 0 - current_stanza_verses = 0 - verse_start = True - - char_count = 0 - - # do `min_lines' non-empty verses and then stop, - # but let Lesmianator finish his last stanza. - while finished_stanza_verses < min_lines and char_count < maxlen: - letter = cls.choose_letter(word, continuations) - letters.append(letter) - word = word[-length + 1:] + letter - char_count += 1 - - if letter == u'\n': - if verse_start: - finished_stanza_verses += current_stanza_verses - current_stanza_verses = 0 - else: - current_stanza_verses += 1 - verse_start = True - else: - verse_start = False - - return ''.join(letters).strip() - - def get_absolute_url(self): - return reverse('get_poem', kwargs={'poem': self.slug}) - - -class Continuations(models.Model): - pickle = models.FileField(_('Continuations file'), upload_to='lesmianator') - content_type = models.ForeignKey(ContentType) - object_id = models.PositiveIntegerField() - content_object = GenericForeignKey('content_type', 'object_id') - - class Meta: - unique_together = (('content_type', 'object_id'), ) - - def __unicode__(self): - return "Continuations for: %s" % unicode(self.content_object) - - @staticmethod - def join_conts(a, b): - for pre in b: - a.setdefault(pre, {}) - for post in b[pre]: - a[pre].setdefault(post, 0) - a[pre][post] += b[pre][post] - return a - - @classmethod - def for_book(cls, book, length=3): - # count from this book only - output = StringIO() - wldoc = book.wldocument(parse_dublincore=False) - output = wldoc.as_text(('raw-text',)).get_string() - del wldoc - - conts = {} - last_word = '' - for letter in output.decode('utf-8').strip().lower(): - mydict = conts.setdefault(last_word, {}) - mydict.setdefault(letter, 0) - mydict[letter] += 1 - last_word = last_word[-length+1:] + letter - # add children - return reduce(cls.join_conts, - (cls.get(child) for child in book.children.all().iterator()), - conts) - - @classmethod - def for_set(cls, tag): - books = Book.tagged_top_level([tag]) - cont_tabs = (cls.get(b) for b in books.iterator()) - return reduce(cls.join_conts, cont_tabs) - - @classmethod - def get(cls, sth): - object_type = ContentType.objects.get_for_model(sth) - should_keys = set([sth.id]) - if isinstance(sth, Tag): - should_keys = set(b.pk for b in Book.tagged.with_any((sth,)).iterator()) - try: - obj = cls.objects.get(content_type=object_type, object_id=sth.id) - if not obj.pickle: - raise cls.DoesNotExist - f = open(obj.pickle.path) - keys, conts = cPickle.load(f) - f.close() - if set(keys) != should_keys: - raise cls.DoesNotExist - return conts - except cls.DoesNotExist: - if isinstance(sth, Book): - conts = cls.for_book(sth) - elif isinstance(sth, Tag): - conts = cls.for_set(sth) - else: - raise NotImplementedError('Lesmianator continuations: only Book and Tag supported') - - c, created = cls.objects.get_or_create(content_type=object_type, object_id=sth.id) - c.pickle.save(sth.slug+'.p', ContentFile(cPickle.dumps((should_keys, conts)))) - c.save() - return conts - - diff --git a/apps/lesmianator/templates/lesmianator/lesmianator.html b/apps/lesmianator/templates/lesmianator/lesmianator.html deleted file mode 100644 index cc7decbc7..000000000 --- a/apps/lesmianator/templates/lesmianator/lesmianator.html +++ /dev/null @@ -1,60 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} - -{% block titleextra %}Leśmianator{% endblock %} - -{% block metadescription %}Stwórz własny wierszmiks z utworów znajdujących się na Wolnych Lekturach.{% endblock %} - -{% block bodyid %}lesmianator{% endblock %} - -{% block body %} -

            Leśmianator

            - -
            -
            -

            Leśmianator tworzy wierszmiksy – dzięki niemu - napiszesz wiersz jednym kliknięciem. - W nowej odsłonie nowe możliwości zabawy – teraz możesz zdecydować, co wrzucasz do miksera, - a swoimi dziełami podzielić się z przyjaciółmi!

            -

            Przygotowaliśmy kilka propozycji na start – możesz wybrać jedną z nich, - albo ułożyć sobie własną, niepowtarzalną mieszankę.

            -
            -
            - -
            -
            -

            Miksuj utwory

            -

            Możesz zmiksować całą lirykę w naszej bibliotece - albo tylko jeden konkretny utwór. Jak? Wejdź na - stronę utworu, - kliknij w link „miksuj ten utwór” – i gotowe!

            - -

            Miksuj półki

            -

            Załóż konto, poukładaj swoje ulubione książki na półkach i miksuj - w dowolnych konfiguracjach. Nic prostszego, niż zmieszać - Leśmiana z - Tetmajerem, - a Żeromskiego z - Sienkiewiczem - – wystarczy wrzucić ich utwory na półkę i kliknąć - w link „miksuj utwory z tej półki”.

            - -

            Dziel się z innymi

            -

            Wyszedł Ci wyjątkowo udany wierszmiks? Znajdziesz pod nim link, przy pomocy - którego możesz się nim podzielić z przyjaciółmi.

            - -

            Miłej zabawy!

            - -
            -
            -{% endblock %} diff --git a/apps/lesmianator/templates/lesmianator/poem.html b/apps/lesmianator/templates/lesmianator/poem.html deleted file mode 100644 index 4c4726f0f..000000000 --- a/apps/lesmianator/templates/lesmianator/poem.html +++ /dev/null @@ -1,65 +0,0 @@ -{% extends "catalogue/viewer_base.html" %} -{% load i18n %} - - -{% block title %}Leśmianator{% endblock %} - - -{% block menu %} -
          • Wolne Lektury przepuszczone przez mikser.
          • - {% if shelf or not books %} - {# shelf or global mixing #} -
          • Twórzże się jeszcze raz!
          • - {% else %}{% if book %} -
          • Twórzże się jeszcze raz!
          • - {% endif %}{% endif %} -{% endblock menu %} - - - -{% block main-text %} -
            -

            - Leśmianator - *** -

            - {{ poem.text|linebreaksbr }} -
            -

            O utworze

            -

            - Aby pokazać innym ten utwór, użyj linku:
            - -

            -
            - {% if book %} -

            Tekst powstał przez zmiksowanie utworu - {{ book.title }}.
            - Zmiksuj go ponownie - albo zobacz, co jeszcze możesz zamieszać.

            - {% else %}{% if books %} -

            Tekst powstał przez zmiksowanie utworów:

            - - {% if shelf %} -

            - Zmiksuj - półkę {{ shelf.name }} - jeszcze raz, albo - zobacz, co jeszcze możesz zamieszać.

            - {% else %} -

            Zobacz, - jak łatwo możesz stworzyć własny wierszmiks.

            - {% endif %} - {% else %} -

            Wiersz powstał przez zmiksowanie ze sobą całej liryki z Wolnych Lektur. - Spróbuj jeszcze raz, albo - zobacz, co jeszcze możesz zamieszać.

            - {% endif %}{% endif %} -
            -
            -
            -
            -{% endblock main-text %} diff --git a/apps/lesmianator/urls.py b/apps/lesmianator/urls.py deleted file mode 100644 index 1770140b9..000000000 --- a/apps/lesmianator/urls.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import url, patterns - -urlpatterns = patterns('lesmianator.views', - url(r'^$', 'main_page', name='lesmianator'), - url(r'^wiersz/$', 'new_poem', name='new_poem'), - url(r'^lektura/(?P[a-z0-9-]+)/$', 'poem_from_book', name='poem_from_book'), - url(r'^polka/(?P[a-zA-Z0-9-]+)/$', 'poem_from_set', name='poem_from_set'), - url(r'^wiersz/(?P[a-zA-Z0-9-]+)/$', 'get_poem', name='get_poem'), -) - diff --git a/apps/lesmianator/views.py b/apps/lesmianator/views.py deleted file mode 100644 index 1ef4397b3..000000000 --- a/apps/lesmianator/views.py +++ /dev/null @@ -1,78 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.shortcuts import render_to_response, get_object_or_404 -from django.template import RequestContext -from django.views.decorators import cache - -from catalogue.utils import get_random_hash -from catalogue.models import Book, Tag -from lesmianator.models import Poem, Continuations - - -def main_page(request): - last = Poem.objects.all().order_by('-created_at')[:10] - shelves = Tag.objects.filter(user__username='lesmianator') - - return render_to_response('lesmianator/lesmianator.html', - {"last": last, "shelves": shelves}, - context_instance=RequestContext(request)) - - -@cache.never_cache -def new_poem(request): - user = request.user if request.user.is_authenticated() else None - text = Poem.write() - p = Poem(slug=get_random_hash(text), text=text, created_by=user) - p.save() - - return render_to_response('lesmianator/poem.html', - {"poem": p}, - context_instance=RequestContext(request)) - - -@cache.never_cache -def poem_from_book(request, slug): - book = get_object_or_404(Book, slug=slug) - user = request.user if request.user.is_authenticated() else None - text = Poem.write(Continuations.get(book)) - p = Poem(slug=get_random_hash(text), text=text, created_by=user) - p.created_from = [book.id] - p.save() - - return render_to_response('lesmianator/poem.html', - {"poem": p, "books": [book], "book": book}, - context_instance=RequestContext(request)) - - -@cache.never_cache -def poem_from_set(request, shelf): - user = request.user if request.user.is_authenticated() else None - tag = get_object_or_404(Tag, category='set', slug=shelf) - text = Poem.write(Continuations.get(tag)) - p = Poem(slug=get_random_hash(text), text=text, created_by=user) - books = Book.tagged.with_any((tag,)) - p.created_from = [b.id for b in books] - p.save() - - book = books[0] if len(books) == 1 else None - - return render_to_response('lesmianator/poem.html', - {"poem": p, "shelf": tag, "books": books, "book": book}, - context_instance=RequestContext(request)) - -def get_poem(request, poem): - p = get_object_or_404(Poem, slug=poem) - p.visit() - if p.created_from: - books = Book.objects.filter(id__in=p.created_from) - book = books[0] if len(books) == 1 else None - else: - books = book = None - - return render_to_response('lesmianator/poem.html', - {"poem": p, "books": books, "book": book}, - context_instance=RequestContext(request)) - - diff --git a/apps/libraries/__init__.py b/apps/libraries/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/libraries/admin.py b/apps/libraries/admin.py deleted file mode 100644 index 5629e93a0..000000000 --- a/apps/libraries/admin.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin - -from libraries.models import Library, Catalog - - -admin.site.register(Catalog) -admin.site.register(Library) diff --git a/apps/libraries/locale/pl/LC_MESSAGES/django.mo b/apps/libraries/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 8772f1aae..000000000 Binary files a/apps/libraries/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/libraries/locale/pl/LC_MESSAGES/django.po b/apps/libraries/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 58df7be76..000000000 --- a/apps/libraries/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,60 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \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%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" - -#: models.py:8 models.py:26 -msgid "name" -msgstr "nazwa" - -#: models.py:9 models.py:27 -msgid "slug" -msgstr "" - -#: models.py:12 -msgid "catalog" -msgstr "katalog" - -#: models.py:13 -msgid "catalogs" -msgstr "katalogi" - -#: models.py:29 -msgid "url" -msgstr "url" - -#: models.py:30 -msgid "description" -msgstr "opis" - -#: models.py:33 -msgid "library" -msgstr "biblioteka" - -#: models.py:34 -msgid "libraries" -msgstr "biblioteki" - -#: templates/libraries/catalog_view.html:4 -msgid "Libraries directory" -msgstr "Katalog bibliotek" - -#: templates/libraries/main_view.html:4 templates/libraries/main_view.html:8 -msgid "Library directories" -msgstr "Katalogi bibliotek" diff --git a/apps/libraries/migrations/0001_initial.py b/apps/libraries/migrations/0001_initial.py deleted file mode 100644 index 4b210f8b7..000000000 --- a/apps/libraries/migrations/0001_initial.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Catalog', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=120, verbose_name='name')), - ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), - ], - options={ - 'verbose_name': 'catalog', - 'verbose_name_plural': 'catalogs', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Library', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=120, verbose_name='name', blank=True)), - ('slug', models.SlugField(max_length=120, unique=True, null=True, verbose_name='Slug')), - ('url', models.CharField(max_length=120, verbose_name='url', blank=True)), - ('description', models.TextField(verbose_name='Description', blank=True)), - ('catalog', models.ForeignKey(related_name=b'libraries', on_delete=django.db.models.deletion.PROTECT, to='libraries.Catalog')), - ], - options={ - 'verbose_name': 'library', - 'verbose_name_plural': 'libraries', - }, - bases=(models.Model,), - ), - ] diff --git a/apps/libraries/migrations/0002_auto_20151221_1225.py b/apps/libraries/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index 123580d91..000000000 --- a/apps/libraries/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('libraries', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='catalog', - name='slug', - field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), - ), - migrations.AlterField( - model_name='library', - name='description', - field=models.TextField(verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='library', - name='slug', - field=models.SlugField(max_length=120, unique=True, null=True, verbose_name='slug'), - ), - ] diff --git a/apps/libraries/migrations/__init__.py b/apps/libraries/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/libraries/models.py b/apps/libraries/models.py deleted file mode 100644 index c83afbbba..000000000 --- a/apps/libraries/models.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.db import models -from django.utils.translation import ugettext_lazy as _ - - -class Catalog(models.Model): - """Represents a dictionary of libraries""" - - name = models.CharField(_('name'), max_length=120, null=False) - slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True) - - class Meta: - verbose_name = _('catalog') - verbose_name_plural = _('catalogs') - - def __unicode__(self): - return self.name - - @models.permalink - def get_absolute_url(self): - return ('libraries_catalog_view', [self.slug]) - - -class Library(models.Model): - """Represent a single library in the libraries dictionary""" - - name = models.CharField(_('name'), max_length=120, blank=True) - slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True, null=True) - catalog = models.ForeignKey(Catalog, null=False, related_name='libraries', on_delete=models.PROTECT) - url = models.CharField(_('url'), max_length=120, blank=True) - description = models.TextField(_('description'), blank=True) - - class Meta: - verbose_name = _('library') - verbose_name_plural = _('libraries') - - def __unicode__(self): - return self.name - - @models.permalink - def get_absolute_url(self): - return ('libraries_library_view', [self.catalog.slug, self.slug]) diff --git a/apps/libraries/templates/libraries/catalog_view.html b/apps/libraries/templates/libraries/catalog_view.html deleted file mode 100644 index 5d35fd973..000000000 --- a/apps/libraries/templates/libraries/catalog_view.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block titleextra %}{% trans 'Libraries directory' %}{% endblock %} - - -{% block body %} -

            {{ catalog.name }}

            -
            -
            -
              - {% for library in catalog.libraries.all %} -
            • {{library.name}}
            • - {% endfor %} -
            -
            -
            - -{% endblock %} \ No newline at end of file diff --git a/apps/libraries/templates/libraries/library_view.html b/apps/libraries/templates/libraries/library_view.html deleted file mode 100644 index a97282987..000000000 --- a/apps/libraries/templates/libraries/library_view.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block titleextra %}{{ library.name }}{% endblock %} - - -{% block body %} -

            {{ library.name }}

            -
            -

            Adres strony www: {{library.url}}

            - {% autoescape off %}{{library.description}}{% endautoescape%} -
            -{% endblock %} \ No newline at end of file diff --git a/apps/libraries/templates/libraries/main_view.html b/apps/libraries/templates/libraries/main_view.html deleted file mode 100644 index 55e5f0249..000000000 --- a/apps/libraries/templates/libraries/main_view.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block titleextra %}{% trans 'Library directories' %}{% endblock %} - - -{% block body %} -

            {% trans 'Library directories' %}

            -
            -
            -
              - {% for catalog in catalogs %} -
            • {{catalog}}
            • - {% endfor %} -
            -
            -
            - -{% endblock %} \ No newline at end of file diff --git a/apps/libraries/urls.py b/apps/libraries/urls.py deleted file mode 100644 index 754b17e44..000000000 --- a/apps/libraries/urls.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - - -urlpatterns = patterns('libraries.views', - url(r'^$', 'main_view', name='libraries_main_view'), - url(r'^(?P[a-zA-Z0-9_-]+)$', 'catalog_view', name='libraries_catalog_view'), - url(r'^(?P[a-zA-Z0-9_-]+)/(?P[a-zA-Z0-9_-]+)$', 'library_view', name='libraries_library_view'), -) diff --git a/apps/libraries/views.py b/apps/libraries/views.py deleted file mode 100644 index 7e245adbd..000000000 --- a/apps/libraries/views.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.shortcuts import render_to_response, get_object_or_404 -from django.template import RequestContext - -from libraries.models import Catalog, Library - - -def main_view(request): - context = RequestContext(request) - context['catalogs'] = Catalog.objects.all() - return render_to_response('libraries/main_view.html', context_instance=context) - -def catalog_view(request, slug): - context = RequestContext(request) - context['catalog'] = get_object_or_404(Catalog.objects.filter(slug=slug).select_related()) - return render_to_response('libraries/catalog_view.html', context_instance=context) - -def library_view(request, catalog_slug, slug): - context = RequestContext(request) - context['library'] = get_object_or_404(Library.objects.filter(slug=slug).filter(catalog__slug=catalog_slug)) - return render_to_response('libraries/library_view.html', context_instance=context) diff --git a/apps/newtagging/__init__.py b/apps/newtagging/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/newtagging/admin.py b/apps/newtagging/admin.py deleted file mode 100644 index 57a76d5d4..000000000 --- a/apps/newtagging/admin.py +++ /dev/null @@ -1,67 +0,0 @@ -# -*- coding: utf-8 -*- -from django.contrib import admin -from django import forms -from django.utils.safestring import mark_safe -from django.utils.translation import ugettext_lazy as _ - - -class FilteredSelectMultiple(forms.SelectMultiple): - """ - A SelectMultiple with a JavaScript filter interface. - - Note that the resulting JavaScript assumes that the SelectFilter2.js - library and its dependencies have been loaded in the HTML page. - """ - def _media(self): - from django.conf import settings - js = ['js/SelectBox.js' , 'js/SelectFilter2.js'] - return forms.Media(js=['%sadmin/%s' % (settings.STATIC_URL, url) for url in js]) - media = property(_media) - - def __init__(self, verbose_name, is_stacked, attrs=None, choices=()): - self.verbose_name = verbose_name - self.is_stacked = is_stacked - super(FilteredSelectMultiple, self).__init__(attrs, choices) - - def render(self, name, value, attrs=None, choices=()): - from django.conf import settings - output = [super(FilteredSelectMultiple, self).render(name, value, attrs, choices)] - output.append(u'\n' % \ - (name, self.verbose_name.replace('"', '\\"'), int(self.is_stacked), settings.STATIC_URL + "admin/")) - return mark_safe(u''.join(output)) - - -class TaggableModelForm(forms.ModelForm): - tags = forms.MultipleChoiceField(label=_('tags').capitalize(), required=False, widget=FilteredSelectMultiple(_('tags'), False)) - - def __init__(self, *args, **kwargs): - if 'instance' in kwargs: - if 'initial' not in kwargs: - kwargs['initial'] = {} - kwargs['initial']['tags'] = [tag.id for tag in self.tag_model.objects.get_for_object(kwargs['instance'])] - super(TaggableModelForm, self).__init__(*args, **kwargs) - self.fields['tags'].choices = [(tag.id, tag.name) for tag in self.tag_model.objects.all()] - - def save(self, commit): - obj = super(TaggableModelForm, self).save() - tag_ids = self.cleaned_data['tags'] - tags = self.tag_model.objects.filter(pk__in=tag_ids) - self.tag_model.objects.update_tags(obj, tags) - return obj - - def save_m2m(self): - # TODO: Shouldn't be needed - pass - - -class TaggableModelAdmin(admin.ModelAdmin): - form = TaggableModelForm - - def get_form(self, request, obj=None): - form = super(TaggableModelAdmin, self).get_form(request, obj) - form.tag_model = self.tag_model - return form - diff --git a/apps/newtagging/locale/de/LC_MESSAGES/django.mo b/apps/newtagging/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index a3ba8feae..000000000 Binary files a/apps/newtagging/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/de/LC_MESSAGES/django.po b/apps/newtagging/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 01dcf5fa3..000000000 --- a/apps/newtagging/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,50 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-13 12:19+0100\n" -"Last-Translator: xxx \n" -"Language-Team: \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: admin.py:38 -msgid "tags" -msgstr "Tags" - -#: models.py:531 -msgid "tag" -msgstr "Tag" - -#: models.py:532 -msgid "content type" -msgstr "Inhaltstyp" - -#: models.py:533 -msgid "object id" -msgstr "Objekt-ID" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "tagged_object_list must be called with a queryset or a model." - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "tagged_object_list must be called with a tag model." - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "tagged_object_list must be called with a tag." - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "Keine entsprechende Tags zu \"%s\" gefunden" diff --git a/apps/newtagging/locale/en/LC_MESSAGES/django.mo b/apps/newtagging/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index 571ac5d62..000000000 Binary files a/apps/newtagging/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/en/LC_MESSAGES/django.po b/apps/newtagging/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index a2b36bea6..000000000 --- a/apps/newtagging/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,50 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 20:05+0100\n" -"Last-Translator: xxx \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: admin.py:38 -msgid "tags" -msgstr "tags" - -#: models.py:531 -msgid "tag" -msgstr "tag" - -#: models.py:532 -msgid "content type" -msgstr "content type" - -#: models.py:533 -msgid "object id" -msgstr "object id" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "tagged_object_list must be defined with a queryset or a model" - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "tagged_object_list must be defined with a tag model" - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "tagged_object_list must be defined with a tag" - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "No tag found matching \"%s\"." diff --git a/apps/newtagging/locale/es/LC_MESSAGES/django.mo b/apps/newtagging/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index 0e3ceedeb..000000000 Binary files a/apps/newtagging/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/es/LC_MESSAGES/django.po b/apps/newtagging/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index 06accc8c0..000000000 --- a/apps/newtagging/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,51 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-28 12:01+0100\n" -"Last-Translator: Aneta \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: admin.py:38 -msgid "tags" -msgstr "tags" - -#: models.py:531 -msgid "tag" -msgstr "tag" - -#: models.py:532 -msgid "content type" -msgstr "tipo de contenido" - -#: models.py:533 -msgid "object id" -msgstr "id de objeto" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "" -"lista_de_objetos_agregados debe ser llamada con un queryset o un modelo." - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "lista_de_objetos_agregados debe ser nombrada con un modelo de tag." - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "lista_de_objetos_agregados debe ser nombrada con un tag." - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "No se han encontrado tags correspondientes \"%s\"." diff --git a/apps/newtagging/locale/fr/LC_MESSAGES/django.mo b/apps/newtagging/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index 87ec8c5d3..000000000 Binary files a/apps/newtagging/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/fr/LC_MESSAGES/django.po b/apps/newtagging/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index 9368f459a..000000000 --- a/apps/newtagging/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,50 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-23 17:28+0100\n" -"Last-Translator: Ela Janota \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: admin.py:38 -msgid "tags" -msgstr "étiquettes" - -#: models.py:531 -msgid "tag" -msgstr "étiquette" - -#: models.py:532 -msgid "content type" -msgstr "type du contenu" - -#: models.py:533 -msgid "object id" -msgstr "Identifiant de l'objet" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "tagged_object_list doit être appelé avec un queryset ou un modèle." - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "tagged_object_list doit être appelé avec un modèle d'étiquette." - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "tagged_object_list doit être appelé avec une étiquette." - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "Aucune étiquette correspondant à \"%s\" trouvée." diff --git a/apps/newtagging/locale/it/LC_MESSAGES/django.mo b/apps/newtagging/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index bc4994c9e..000000000 Binary files a/apps/newtagging/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/it/LC_MESSAGES/django.po b/apps/newtagging/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index fd1d8bc72..000000000 --- a/apps/newtagging/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,53 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-18 13:41+0100\n" -"Last-Translator: xxx\n" -"Language-Team: LANGUAGE \n" -"Language: \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.py:38 -msgid "tags" -msgstr "i tag" - -#: models.py:531 -msgid "tag" -msgstr "tag" - -#: models.py:532 -msgid "content type" -msgstr "tipo di contenuto" - -#: models.py:533 -msgid "object id" -msgstr "oggetto id" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "" -"L’elenco degli oggetti taggati deve essere chiamato con un queryset oppure " -"un modello. " - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "L’elenco degli oggetti taggati deve essere chiamato con un modello tag" - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "L’elenco degli oggetti taggati deve essere chiamato con un tag." - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "Nessun tag corrispondente a \"%s\" è stato trovato." diff --git a/apps/newtagging/locale/jp/LC_MESSAGES/django.mo b/apps/newtagging/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index c9739db34..000000000 Binary files a/apps/newtagging/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/jp/LC_MESSAGES/django.po b/apps/newtagging/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index 7ea964955..000000000 --- a/apps/newtagging/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,51 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: admin.py:38 -msgid "tags" -msgstr "" - -#: models.py:531 -msgid "tag" -msgstr "" - -#: models.py:532 -msgid "content type" -msgstr "" - -#: models.py:533 -msgid "object id" -msgstr "" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "" - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "" - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "" - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "" diff --git a/apps/newtagging/locale/lt/LC_MESSAGES/django.mo b/apps/newtagging/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index c10c450bd..000000000 Binary files a/apps/newtagging/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/lt/LC_MESSAGES/django.po b/apps/newtagging/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index a98ffc79b..000000000 --- a/apps/newtagging/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,51 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-01 16:13+0100\n" -"Last-Translator: Aneta\n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: admin.py:38 -msgid "tags" -msgstr "žymės" - -#: models.py:531 -msgid "tag" -msgstr "žymė" - -#: models.py:532 -msgid "content type" -msgstr "turinio tipas" - -#: models.py:533 -msgid "object id" -msgstr "objekto ID" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "tagged_object_list must be called with a queryset or a model." - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "tagged_object_ list must be called with a tag model." - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "tagged_object_ list turi must be called with a tag." - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "Nerasta atitinkančių žymių \"%s\"." diff --git a/apps/newtagging/locale/pl/LC_MESSAGES/django.mo b/apps/newtagging/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index e6610193e..000000000 Binary files a/apps/newtagging/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/pl/LC_MESSAGES/django.po b/apps/newtagging/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index a2e61d98b..000000000 --- a/apps/newtagging/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,51 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2010-05-19 16:20\n" -"Last-Translator: \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: admin.py:38 -msgid "tags" -msgstr "tagi" - -#: models.py:531 -msgid "tag" -msgstr "tag" - -#: models.py:532 -msgid "content type" -msgstr "typ zawartości" - -#: models.py:533 -msgid "object id" -msgstr "id obiektu" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "" - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "" - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "" - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "" diff --git a/apps/newtagging/locale/ru/LC_MESSAGES/django.mo b/apps/newtagging/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 6f5130fa2..000000000 Binary files a/apps/newtagging/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/ru/LC_MESSAGES/django.po b/apps/newtagging/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index 5090f89e2..000000000 --- a/apps/newtagging/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,51 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 22:11+0100\n" -"Last-Translator: xxx \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: admin.py:38 -msgid "tags" -msgstr "таги" - -#: models.py:531 -msgid "tag" -msgstr "таг" - -#: models.py:532 -msgid "content type" -msgstr "тип содержания" - -#: models.py:533 -msgid "object id" -msgstr "ID объекта" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "" -"список таг-объектов должен сочетаться с набором вопросов или с моделью." - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "список таг-объектов дожен сочетаться с таг-моделью." - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "список таг-объектов должен сочетаться с тагом." - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "Никакой таг не соответствует \"%s\"." diff --git a/apps/newtagging/locale/uk/LC_MESSAGES/django.mo b/apps/newtagging/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index fd066609c..000000000 Binary files a/apps/newtagging/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/uk/LC_MESSAGES/django.po b/apps/newtagging/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index 392d1bfab..000000000 --- a/apps/newtagging/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,50 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-29 23:08+0100\n" -"Last-Translator: Anna Vasiutynska \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: admin.py:38 -msgid "tags" -msgstr "теґи" - -#: models.py:531 -msgid "tag" -msgstr "теґ" - -#: models.py:532 -msgid "content type" -msgstr "тип змісту" - -#: models.py:533 -msgid "object id" -msgstr "ID об'єкту" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "tagged_object_list must be called with a queryset or a model." - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "tagged_object_list must be called with a tag model." - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "tagged_object_list must be called with a tag." - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "Не знайдено теґів відповідаючих \"%s\"." diff --git a/apps/newtagging/managers.py b/apps/newtagging/managers.py deleted file mode 100644 index 0bfec5413..000000000 --- a/apps/newtagging/managers.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Custom managers for Django models registered with the tagging -application. -""" -from django.contrib.contenttypes.models import ContentType -from django.db import models - - -class ModelTagManager(models.Manager): - """ - A manager for retrieving tags for a particular model. - """ - def __init__(self, tag_model): - super(ModelTagManager, self).__init__() - self.tag_model = tag_model - - def get_queryset(self): - content_type = ContentType.objects.get_for_model(self.model) - return self.tag_model.objects.filter( - items__content_type__pk=content_type.pk).distinct() - - def related(self, tags, *args, **kwargs): - return self.tag_model.objects.related_for_model(tags, self.model, *args, **kwargs) - - def usage(self, *args, **kwargs): - return self.tag_model.objects.usage_for_model(self.model, *args, **kwargs) - - -class ModelTaggedItemManager(models.Manager): - """ - A manager for retrieving model instances based on their tags. - """ - def __init__(self, tag_model): - super(ModelTaggedItemManager, self).__init__() - self.intermediary_table_model = tag_model.objects.intermediary_table_model - - def related_to(self, obj, queryset=None): - if queryset is None: - return self.intermediary_table_model.objects.get_related( - obj, self.model) - else: - return self.intermediary_table_model.objects.get_related( - obj, queryset) - - def with_all(self, tags, queryset=None): - if queryset is None: - return self.intermediary_table_model.objects.get_by_model(self.model, tags) - else: - return self.intermediary_table_model.objects.get_by_model(queryset, tags) - - def with_any(self, tags, queryset=None): - if queryset is None: - return self.intermediary_table_model.objects.get_union_by_model(self.model, tags) - else: - return self.intermediary_table_model.objects.get_union_by_model(queryset, tags) - - -class TagDescriptor(object): - """ - A descriptor which provides access to a ``ModelTagManager`` for - model classes and simple retrieval, updating and deletion of tags - for model instances. - """ - def __init__(self, tag_model): - self.tag_model = tag_model - - def __get__(self, instance, owner): - if not instance: - tag_manager = ModelTagManager(self.tag_model) - tag_manager.model = owner - return tag_manager - else: - return self.tag_model.objects.get_for_object(instance) - - def __set__(self, instance, value): - self.tag_model.objects.update_tags(instance, value) - - def __del__(self, instance): - self.tag_model.objects.update_tags(instance, []) - diff --git a/apps/newtagging/models.py b/apps/newtagging/models.py deleted file mode 100644 index 694f5b868..000000000 --- a/apps/newtagging/models.py +++ /dev/null @@ -1,259 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Models and managers for generic tagging. -""" - -from django.contrib.contenttypes.fields import GenericForeignKey -from django.contrib.contenttypes.models import ContentType -from django.db import connection, models -from django.utils.translation import ugettext_lazy as _ -from django.db.models.base import ModelBase -from django.core.exceptions import ObjectDoesNotExist -from django.dispatch import Signal - -qn = connection.ops.quote_name - - -tags_updated = Signal(providing_args=["affected_tags"]) - -def get_queryset_and_model(queryset_or_model): - """ - Given a ``QuerySet`` or a ``Model``, returns a two-tuple of - (queryset, model). - - If a ``Model`` is given, the ``QuerySet`` returned will be created - using its default manager. - """ - try: - return queryset_or_model, queryset_or_model.model - except AttributeError: - return queryset_or_model._default_manager.all(), queryset_or_model - - -############ -# Managers # -############ -class TagManager(models.Manager): - def __init__(self, intermediary_table_model): - super(TagManager, self).__init__() - self.intermediary_table_model = intermediary_table_model - models.signals.pre_delete.connect(self.target_deleted) - - def target_deleted(self, instance, **kwargs): - """ clear tag relations before deleting an object """ - try: - int(instance.pk) - except ValueError: - return - - self.update_tags(instance, []) - - def update_tags(self, obj, tags): - """ - Update tags associated with an object. - """ - content_type = ContentType.objects.get_for_model(obj) - current_tags = list(self.filter(items__content_type__pk=content_type.pk, - items__object_id=obj.pk)) - updated_tags = self.model.get_tag_list(tags) - - # Remove tags which no longer apply - tags_for_removal = [tag for tag in current_tags \ - if tag not in updated_tags] - if len(tags_for_removal): - self.intermediary_table_model._default_manager.filter(content_type__pk=content_type.pk, - object_id=obj.pk, - tag__in=tags_for_removal).delete() - # Add new tags - tags_to_add = [tag for tag in updated_tags - if tag not in current_tags] - for tag in tags_to_add: - if tag not in current_tags: - self.intermediary_table_model._default_manager.create(tag=tag, content_object=obj) - - tags_updated.send(sender=type(obj), instance=obj, affected_tags=tags_to_add + tags_for_removal) - - def remove_tag(self, obj, tag): - """ - Remove tag from an object. - """ - content_type = ContentType.objects.get_for_model(obj) - self.intermediary_table_model._default_manager.filter(content_type__pk=content_type.pk, - object_id=obj.pk, tag=tag).delete() - - def get_for_object(self, obj): - """ - Create a queryset matching all tags associated with the given - object. - """ - ctype = ContentType.objects.get_for_model(obj) - return self.filter(items__content_type__pk=ctype.pk, - items__object_id=obj.pk) - - def usage_for_model(self, model, counts=False, filters=None): - """ - Obtain a list of tags associated with instances of the given - Model class. - - If ``counts`` is True, a ``count`` attribute will be added to - each tag, indicating how many times it has been used against - the Model class in question. - - To limit the tags (and counts, if specified) returned to those - used by a subset of the Model's instances, pass a dictionary - of field lookups to be applied to the given Model as the - ``filters`` argument. - """ - # TODO: Do we really need this filters stuff? - if filters is None: filters = {} - - queryset = model._default_manager.filter() - for f in filters.items(): - queryset.query.add_filter(f) - usage = self.usage_for_queryset(queryset, counts) - return usage - - def usage_for_queryset(self, queryset, counts=False): - """ - Obtain a list of tags associated with instances of a model - contained in the given queryset. - - If ``counts`` is True, a ``count`` attribute will be added to - each tag, indicating how many times it has been used against - the Model class in question. - """ - usage = self.model._default_manager.filter( - items__content_type=ContentType.objects.get_for_model(queryset.model), - items__object_id__in=queryset - ) - if counts: - usage = usage.annotate(count=models.Count('id')) - else: - usage = usage.distinct() - return usage - - def related_for_model(self, tags, model, counts=False): - """ - Obtain a list of tags related to a given list of tags - that - is, other tags used by items which have all the given tags. - - If ``counts`` is True, a ``count`` attribute will be added to - each tag, indicating the number of items which have it in - addition to the given list of tags. - """ - objs = self.model.intermediary_table_model.objects.get_by_model(model, tags) - qs = self.usage_for_queryset(objs, counts) - qs = qs.exclude(pk__in=[tag.pk for tag in tags]) - return qs - - -class TaggedItemManager(models.Manager): - def __init__(self, tag_model): - super(TaggedItemManager, self).__init__() - self.tag_model = tag_model - - def get_by_model(self, queryset_or_model, tags): - """ - Create a ``QuerySet`` containing instances of the specified - model associated with a given tag or list of tags. - """ - queryset, model = get_queryset_and_model(queryset_or_model) - tags = self.tag_model.get_tag_list(tags) - if not tags: - # No existing tags were given - return queryset.none() - - # TODO: presumes reverse generic relation - # Multiple joins are WAY faster than having-count, at least on Postgres 9.1. - for tag in tags: - queryset = queryset.filter(tag_relations__tag=tag) - return queryset - - def get_union_by_model(self, queryset_or_model, tags): - """ - Create a ``QuerySet`` containing instances of the specified - model associated with *any* of the given list of tags. - """ - queryset, model = get_queryset_and_model(queryset_or_model) - tags = self.tag_model.get_tag_list(tags) - if not tags: - return queryset.none() - # TODO: presumes reverse generic relation - return queryset.filter(tag_relations__tag__in=tags).distinct() - - def get_related(self, obj, queryset_or_model): - """ - Retrieve a list of instances of the specified model which share - tags with the model instance ``obj``, ordered by the number of - shared tags in descending order. - """ - queryset, model = get_queryset_and_model(queryset_or_model) - # TODO: presumes reverse generic relation. - # Do we know it's 'tags'? - return queryset.filter(tag_relations__tag__in=obj.tags).annotate( - count=models.Count('pk')).order_by('-count').exclude(pk=obj.pk) - - -########## -# Models # -########## -def create_intermediary_table_model(model): - """Create an intermediary table model for the specific tag model""" - name = model.__name__ + 'Relation' - - class Meta: - db_table = '%s_relation' % model._meta.db_table - unique_together = (('tag', 'content_type', 'object_id'),) - app_label = model._meta.app_label - - def obj_unicode(self): - try: - return u'%s [%s]' % (self.content_type.get_object_for_this_type(pk=self.object_id), self.tag) - except ObjectDoesNotExist: - return u' [%s]' % self.tag - - # Set up a dictionary to simulate declarations within a class - attrs = { - '__module__': model.__module__, - 'Meta': Meta, - 'tag': models.ForeignKey(model, verbose_name=_('tag'), related_name='items'), - 'content_type': models.ForeignKey(ContentType, verbose_name=_('content type')), - 'object_id': models.PositiveIntegerField(_('object id'), db_index=True), - 'content_object': GenericForeignKey('content_type', 'object_id'), - '__unicode__': obj_unicode, - } - - return type(name, (models.Model,), attrs) - - -class TagMeta(ModelBase): - "Metaclass for tag models (models inheriting from TagBase)." - def __new__(mcs, name, bases, attrs): - model = super(TagMeta, mcs).__new__(mcs, name, bases, attrs) - if not model._meta.abstract: - # Create an intermediary table and register custom managers for concrete models - model.intermediary_table_model = create_intermediary_table_model(model) - TagManager(model.intermediary_table_model).contribute_to_class(model, 'objects') - TaggedItemManager(model).contribute_to_class(model.intermediary_table_model, 'objects') - return model - - -class TagBase(models.Model): - """Abstract class to be inherited by model classes.""" - __metaclass__ = TagMeta - - class Meta: - abstract = True - - @staticmethod - def get_tag_list(tag_list): - """ - Utility function for accepting tag input in a flexible manner. - - You should probably override this method in your subclass. - """ - if isinstance(tag_list, TagBase): - return [tag_list] - else: - return tag_list - diff --git a/apps/newtagging/views.py b/apps/newtagging/views.py deleted file mode 100644 index 867686d3c..000000000 --- a/apps/newtagging/views.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tagging related views. -""" -from django.http import Http404 -from django.utils.translation import ugettext as _ -from django.views.generic import ListView - - -def tagged_object_list(request, queryset_or_model=None, tag_model=None, tags=None, - related_tags=False, related_tag_counts=True, **kwargs): - """ - A thin wrapper around - ``django.views.generic.list_detail.object_list`` which creates a - ``QuerySet`` containing instances of the given queryset or model - tagged with the given tag. - - In addition to the context variables set up by ``object_list``, a - ``tag`` context variable will contain the ``Tag`` instance for the - tag. - - If ``related_tags`` is ``True``, a ``related_tags`` context variable - will contain tags related to the given tag for the given model. - Additionally, if ``related_tag_counts`` is ``True``, each related - tag will have a ``count`` attribute indicating the number of items - which have it in addition to the given tag. - """ - # Check attributes - if queryset_or_model is None: - raise AttributeError(_('tagged_object_list must be called with a queryset or a model.')) - if tag_model is None: - raise AttributeError(_('tagged_object_list must be called with a tag model.')) - if tags is None: - raise AttributeError(_('tagged_object_list must be called with a tag.')) - - tag_instances = tag_model.get_tag_list(tags) - if tag_instances is None: - raise Http404(_('No tags found matching "%s".') % tags) - queryset = tag_model.intermediary_table_model.objects.get_by_model(queryset_or_model, tag_instances) - if not kwargs.has_key('extra_context'): - kwargs['extra_context'] = {} - kwargs['extra_context']['tags'] = tag_instances - if related_tags: - kwargs['extra_context']['related_tags'] = \ - tag_model.objects.related_for_model(tag_instances, queryset_or_model, - counts=related_tag_counts) - return ListView.as_view(queryset=queryset)(request, **kwargs) - diff --git a/apps/oai/__init__.py b/apps/oai/__init__.py deleted file mode 100644 index 8b1378917..000000000 --- a/apps/oai/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/oai/handlers.py b/apps/oai/handlers.py deleted file mode 100644 index d9699f9fe..000000000 --- a/apps/oai/handlers.py +++ /dev/null @@ -1,238 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from oaipmh import server, common, metadata, error -from catalogue.models import Book, Tag -from api.models import Deleted -from api.handlers import WL_BASE -from librarian import WLURI -from django.contrib.contenttypes.models import ContentType -from datetime import datetime -from lxml import etree -from django.conf import settings -from django.contrib.sites.models import Site -from django.utils import timezone - - -make_time_naive = lambda d: timezone.localtime(d).replace(tzinfo=None) - -WL_DC_READER_XPATH = '(.|*)/rdf:RDF/rdf:Description/%s/text()' -wl_dc_reader = metadata.MetadataReader( - fields={ - 'title': ('textList', WL_DC_READER_XPATH % 'dc:title'), - 'creator': ('textList', WL_DC_READER_XPATH % 'dc:creator'), - 'subject': ('textList', (WL_DC_READER_XPATH + ' | ' + WL_DC_READER_XPATH + ' | ' + WL_DC_READER_XPATH) % - ('dc:subject.period', 'dc:subject.type', 'dc:subject.genre')), - 'description': ('textList', WL_DC_READER_XPATH % 'dc:description'), - 'publisher': ('textList', WL_DC_READER_XPATH % 'dc:publisher'), - 'contributor': ('textList', (WL_DC_READER_XPATH + ' | ' + WL_DC_READER_XPATH + ' | ' + WL_DC_READER_XPATH) % - ('dc:contributor.editor', 'dc:contributor.translator', 'dc:contributor.technical_editor')), - 'date': ('textList', WL_DC_READER_XPATH % 'dc:date'), - 'type': ('textList', WL_DC_READER_XPATH % 'dc:type'), - 'format': ('textList', WL_DC_READER_XPATH % 'dc:format'), - 'identifier': ('textList', WL_DC_READER_XPATH % 'dc:identifier.url'), - 'source': ('textList', WL_DC_READER_XPATH % 'dc:source'), - 'language': ('textList', WL_DC_READER_XPATH % 'dc:language'), - #'isPartOf': ('textList', 'rdf:RDF/rdf:Description/dc:relation.isPartOf/text()'), - 'hasPart': ('textList', WL_DC_READER_XPATH % 'dc:relation.hasPart'), - # 'relation': ('textList', 'rdf:RDF/rdf:Description/dc:relation/text()'), - # 'coverage': ('textList', 'rdf:RDF/rdf:Description/dc:coverage/text()'), - 'rights': ('textList', WL_DC_READER_XPATH % 'dc:rights') - }, - namespaces={ - 'dc': 'http://purl.org/dc/elements/1.1/', - 'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'} - ) - - -NS_DCTERMS = "http://purl.org/dc/terms/" - - -def nsdcterms(name): - return '{%s}%s' % (NS_DCTERMS, name) - - -class Catalogue(common.ResumptionOAIPMH): - TAG_CATEGORIES = ['author', 'epoch', 'kind', 'genre'] - - def __init__(self, metadata_registry): - super(Catalogue, self).__init__() - self.metadata_registry = metadata_registry - - self.oai_id = "oai:" + Site.objects.get_current().domain + ":%s" - - # earliest change - year_zero = timezone.make_aware(datetime(1990, 1, 1, 0, 0, 0), timezone.utc) - - try: - earliest_change = \ - Book.objects.order_by('changed_at')[0].changed_at - except: earliest_change = year_zero - - try: - earliest_delete = \ - Deleted.objects.exclude(slug__exact=u'').ordery_by('deleted_at')[0].deleted_at - except: earliest_delete = year_zero - - self.earliest_datestamp = earliest_change <= earliest_delete and \ - earliest_change or earliest_delete - - def metadata(self, book): - try: - xml = etree.parse(book.xml_file) - finally: - book.xml_file.close() - md = wl_dc_reader(xml) - m = md.getMap() - if book.parent: - m['isPartOf'] = [str(WLURI.from_slug(book.parent.slug))] - return m - - def record_for_book(self, book, headers_only=False): - meta = None - identifier = self.slug_to_identifier(book.slug) - if isinstance(book, Book): - # setSpec = map(self.tag_to_setspec, book.tags.filter(category__in=self.TAG_CATEGORIES)) - header = common.Header(identifier, make_time_naive(book.changed_at), [], False) - if not headers_only: - meta = common.Metadata(self.metadata(book)) - about = None - elif isinstance(book, Deleted): - header = common.Header(identifier, make_time_naive(book.deleted_at), [], True) - if not headers_only: - meta = common.Metadata({}) - about = None - if headers_only: - return header - return header, meta, about - - def identify(self, **kw): - ident = common.Identify( - 'Wolne Lektury', # generate - '%s/oaipmh' % unicode(WL_BASE), # generate - '2.0', # version - [m[1] for m in settings.MANAGERS], # adminEmails - make_time_naive(self.earliest_datestamp), # earliest datestamp of any change - 'persistent', # deletedRecord - 'YYYY-MM-DDThh:mm:ssZ', # granularity - ['identity'], # compression - [] # descriptions - ) - return ident - - def books(self, tag, from_, until): - if tag: - # we do not support sets, since they are problematic for deleted books. - raise error.NoSetHierarchyError("Wolne Lektury does not support sets.") - # books = Book.tagged.with_all([tag]) - else: - books = Book.objects.all() - deleted = Deleted.objects.exclude(slug__exact=u'') - - books = books.order_by('changed_at') - deleted = deleted.order_by('deleted_at') - if from_: - books = books.filter(changed_at__gte=from_) - deleted = deleted.filter(deleted_at__gte=from_) - if until: - books = books.filter(changed_at__lte=until) - deleted = deleted.filter(deleted_at__lte=until) - return list(books) + list(deleted) - - @staticmethod - def tag_to_setspec(tag): - return "%s:%s" % (tag.category, tag.slug) - - @staticmethod - def setspec_to_tag(s): - if not s: return None - cs = s.split(':') - if len(cs) == 2: - if not cs[0] in Catalogue.TAG_CATEGORIES: - raise error.NoSetHierarchyError("No category part in set") - tag = Tag.objects.get(slug=cs[1], category=cs[0]) - return tag - raise error.NoSetHierarchyError("Setspec should have two components: category:slug") - - def getRecord(self, **kw): - """ -Returns (header, metadata, about) for given record. - """ - slug = self.identifier_to_slug(kw['identifier']) - try: - book = Book.objects.get(slug=slug) - return self.record_for_book(book) - except Book.DoesNotExist: - book_type = ContentType.objects.get_for_model(Book) - try: - deleted_book = Deleted.objects.get(content_type=book_type, - slug=slug) - except: - raise error.IdDoesNotExistError("No item for this identifier") - return self.record_for_book(deleted_book) - - def validate_kw(self, kw): - if 'resumptionToken' in kw: - raise error.BadResumptionTokenError("No resumption token support at this point") - if 'metadataPrefix' in kw and not self.metadata_registry.hasWriter(kw['metadataPrefix']): - raise error.CannotDisseminateFormatError("This format is not supported") - - def identifier_to_slug(self, ident): - return ident.split(':')[-1] - - def slug_to_identifier(self, slug): - return self.oai_id % slug - - def listIdentifiers(self, **kw): - self.validate_kw(kw) - records = [self.record_for_book(book, headers_only=True) for - book in self.books(None, - kw.get('from_', None), - kw.get('until', None))] - return records, None - - def listRecords(self, **kw): - """ -can get a resumptionToken kw. -returns result, token - """ - self.validate_kw(kw) - records = [self.record_for_book(book) for - book in self.books(None, - kw.get('from_', None), - kw.get('until', None))] - - return records, None - - def listMetadataFormats(self, **kw): - formats = [ - ('oai_dc', - 'http://www.openarchives.org/OAI/2.0/oai_dc.xsd', - server.NS_OAIDC), - ('qdc', - 'http://dublincore.org/schemas/xmls/qdc/2006/01/06/dcterms.xsd', - NS_DCTERMS)] - if 'identifier' in kw: - slug = self.identifier_to_slug(kw['identifier']) - try: - b = Book.objects.get(slug=slug) - return formats - except: - try: - d = Deleted.objects.get(slug=slug) - return [] - except: - raise error.IdDoesNotExistError("This id does not exist") - else: - return formats - - def listSets(self, **kw): - raise error.NoSetHierarchyError("Wolne Lektury does not support sets.") - # tags = [] - # for category in Catalogue.TAG_CATEGORIES: - # for tag in Tag.objects.filter(category=category): - # tags.append(("%s:%s" % (tag.category, tag.slug), - # tag.name, - # tag.description)) - # return tags, None diff --git a/apps/oai/tests/__init__.py b/apps/oai/tests/__init__.py deleted file mode 100644 index 561ef604a..000000000 --- a/apps/oai/tests/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from oai.tests.oaipmhapi import * diff --git a/apps/oai/tests/files/antygona.xml b/apps/oai/tests/files/antygona.xml deleted file mode 100755 index f5244c4b4..000000000 --- a/apps/oai/tests/files/antygona.xml +++ /dev/null @@ -1,2981 +0,0 @@ - - - - -Sofokles -Antygona -Sekuła, Aleksandra -Morawski, Kazimierz -Gałecki, Dariusz -Fundacja Nowoczesna Polska -Starożytność -Dramat -Tragedia -Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez Bibliotekę Narodową z egzemplarza pochodzącego ze zbiorów BN. -http://wolnelektury.pl/katalog/lektura/antygona -http://www.polona.pl/Content/3768 -Sofokles, Antygona, tłum. Kazimierz Morawski, wyd. 7, Wydawnictwo Zakładu Narodowego imienia Ossolińskich, Lwów 1939 -Domena publiczna - tłumacz Kazimierz Morawski zm. 1925 -1925 -xml -text -text -2007-08-30 -G -pol - - - - - - - - - -Sofokles - -Antygona - - - -OSOBY DRAMATU -ANTYGONA, córka Edypa -ISMENA, jej siostrasynowica --- bratanica, córka brata. -CHÓR TEBANSKICH STARCÓW -KREON, król Teb -STRAŻNIK -HAJMON, syn Kreona -TYREZJASZ, wróżbita -POSŁANIEC. -EURYDYKA, żona Kreona -POSŁANIEC drugi - - -Rzecz dzieje się przed dworcem królewskim w Tebach - - - - - - - - - -ANTYGONA - - - -O ukochana siostro ma, Ismeno,/ -Czy ty nie widzisz, że z klęsk Edypowych/ -Żadnej za życia los nam nie oszczędza?/ -Bo nie ma cierpień i nie ma ohydy,/ -Nie ma niesławy i hańby, które by/ -Nas pośród nieszczęść pasma nie dotknęły./ -Cóż bo za rozkaz znów obwieścił miastu/ -Ten, który teraz władzę w ręku dzierży?/ -Czyś zasłyszała? Czy uszło twej wiedzy,/ -Że znów wrogowie godzą w naszych miłych? - - - - -ISMENA - - - -O Antygono, żadna wieść nie doszła/ -Do mnie, ni słodka, ni goryczy pełna,/ -Od dnia, gdy braci straciłyśmy obu,/ -W bratnim zabitych razem pojedynku./ -Odkąd tej nocy odeszły Argiwów/ -HufceArgiwów hufce --- Polinik zebrał swe zastępy w Argolidzie, czyli w Argosie., niczego więcej nie zaznałam/ -Ni ku pociesze, ni ku większej trosce. - - - - -ANTYGONA - - - -Lecz mnie wieść doszła, i dlatego z domu/ -Cię wywołałam, by rzecz ci powierzyć. - - - - -ISMENA - -Cóż to? Ty jakieś ciężkie ważysz słowa. - - -Obowiązek, RodzinaANTYGONA - - - -O tak! Czyż nie wiesz, że z poległych braci/ -Kreon jednemu wręcz odmówił grobu?/ -Że Eteokla, jak czynić przystoi,/ -Pogrzebał w ziemi wśród umarłych rzeszy,/ -A zaś obwieścił, aby Polinika/ -Nieszczęsne zwłoki bez czci pozostały,/ -By nikt ich płakać, nikt grześć się nie ważył;/ -Mają wiec leżeć bez łez i bez grobu,/ -Na pastwę ptakom żarłocznym i strawę./ -Słychać, że Kreon czcigodny dla ciebie,/ -Co mówię, dla mnie też wydał ten ukaz/ -I że tu przyjdzie, by tym go ogłosić,/ -Co go nie znają, nie na wiatr zaiste/ -Rzecz tę stanowiąc, lecz grożąc zarazem/ -Kamienowaniem ukazu przestępcom./ -Tak się ma sprawa, teraz wraz ukażesz,/ -Czyś godną rodu, czy wyrodną córą. - - - - -ISMENA - - - -Gdy taka dola, to cóż, o nieszczęsna,/ -Prując czy snując bym mogła tu przydać? - - - - -ANTYGONA - -Patrz, byś wspomogła i poparła siostrę. - - -ISMENA - -W jakimże dziele? Dokąd myśl twa mierzy? - - -ANTYGONA - -Ze mną masz zwłoki opatrzyć braterskie. - - -ISMENA - -Więc ty zamierzasz grzebać wbrew ukazom? - - -ANTYGONA - - - -Tak! brata mego, a dodam... i twego;/ -Bo wiarołomstwem nie myślę się kalać. - - - - -ISMENA - -Niczym dla ciebie więc zakaz Kreona? - - -ANTYGONA - -Niczym, on nie ma nad moimi prawa. - - -ISMENA - - - -Biada! o rozważ, siostro, jak nam ojciec/ -Zginął wśród sromu i pośród niesławy,/ -Kiedy się jemu błędy ujawniły,/ -A on się targnął na własne swe oczy;/ -Żona i matkaŻona i matka --- odnosi się do Jokasty, matki i żony Edypa, która po odkryciu swego położenia z rozpaczy się powiesiła. --- dwuznaczne to miano ---/ -Splecionym węzłem swe życie ukróca;/ -Wreszcie i bracia przy jednym dnia słońcu/ -Godzą na siebie i morderczą ręką/ -Jeden drugiemu śmierć srogą zadaje./ -BezsilnośćZważ więc, że teraz i my pozostałe/ -Zginiemy marnie, jeżeli wbrew prawu/ -Złamiemy wolę i rozkaz tyrana./ -Baczyć to trzeba, że my przecie słabe,/ -Do walk z mężczyzną niezdolne niewiasty;/ -Że nam ulegać silniejszym należy,/ -Tych słuchać, nawet i sroższych rozkazów;/ -Ja więc, błagając o wyrozumienie/ -Zmarłych, że muszę tak ulec przemocy,/ -Posłuszna będę władcom tego świata,/ -Bo próżny opór urąga rozwadze. - - - - -ANTYGONA - - - -Miłość silniejsza niż śmierćJa ci nie każę niczego, ni, choćbyś/ -Pomóc mi chciała, wdzięczne by mi było,/ -Lecz stój przy twojej myśli, a ja tego/ -Pogrzebię sama, potem zginę z chlubą./ -Niechaj się zbratam z mym kochanym w śmierci/ -Po świętej zbrodni; a dłużej mi zmarłym/ -Miłą być trzeba, niż ziemi mieszkańcom,/ -Bo tam zostanę na wieki; tymczasem/ -Ty tu znieważaj święte prawa bogów. - - - - -ISMENA - - - -Ja nie znieważam ich, nie będąc w mocy/ -Działać na przekór stanowieniom władców. - - - - -ANTYGONA - - - -Rób po twej myśli; ja zaś wnet podążę,/ -By kochanemu bratu grób usypać. - - - - -ISMENA - -O ty nieszczęsna! serce drży o ciebie. - - -ANTYGONA - -Nie troszcz się o mnie; nad twoim radź losem. - - -ISMENA - - - -Ale nie zdradzaj twej myśli nikomu,/ -Kryj twe zamiary, ja też je zataję. - - - - -ANTYGONA - - - -O nie! mów głośno, bo ciężkie ty kaźnie/ -Ściągnąć byś mogła milczeniem na siebie. - - - - -ISMENA - -Z żarów twej duszy mroźne mieciesz słowa. - - -ANTYGONA - -Lecz miła jestem tym, o których stoję. - - -ISMENA - -Jeśli podołasz w trudnych mar pościgu. - - -ANTYGONA - -Jak nie podołam, to zaniecham dzieła. - - -ISMENA - -Nie trza się z góry porywać na mary. - - -ANTYGONA - - - -Kiedy tak mówisz, wstręt budzisz w mym sercu/ -I słusznie zmierzisz się także zmarłemu;/ -Śmierć bohaterskaPozwól, bym ja wraz z moim zaślepieniem/ -Spojrzała w oczy grozie; bo ta groza/ -Chlubnej mi śmierci przenigdy nie wydrze. - - - - -ISMENA - - - -Jeśli tak mniemasz, idź, lecz wiedz zarazem,/ -Żeś nierozważna, choć miłym tyś miła. - - - - -CHÓR - - - -O słońca grocie, coś jasno znów TebomWersy 99-160: liczba wierszy w ten sposób podana odnosi się do wierszy tekstu oryginalnego./ -Błysnął po trudach i znoju,/ -Złote dnia oko, przyświecasz ty niebom/ -I w DirkiDirke --- źródło na północny zachód od Teb. nurzasz się zdroju./ -Witaj! Tyś sprawił, że wrogów mych krocie/ -W dzikim pierzchnęły odwrocie. - - - -Bo Polinika gniewny spór/ -Krwawy zażegł w ziemi bój,/ -Z chrzęstem zapadł, z szumem piór/ -Śnieżnych orłów lotny rój,/ -I zbroice liczne błysły,/ -I z szyszaków pióra trysły. - - - -I wróg już wieńcem dzid groźnych otoczył/ -Siedmiu bram miasta gardziele,/ -Lecz pierzchł, nim w mojej krwi strugach się zbroczył,/ -Zanim HefajstosHefajstos --- bóg ognia, tu w znaczeniu: pożar. ognisty w popiele/ -Pogrążył mury, bo z tyłu nawałem/ -Runął na smokana smoka --- bo Adrastos, najprzedniejszy wśród najeźdźców, miał smoka wyrzeźbionego na tarczy. Ares z wojny szałem. - - - -Bo Zeus nie cierpi dumnych głów,/ -A widząc ich wyniosły lot/ -I złota chrzęst, i pychę słów,/ -Wypuścił swój piorunny grotpiorunny grot --- jeden z siedmiu książąt, którzy najechali Teby, olbrzymi Kapaneus, runął rażony od gromu Zeusa./ -I w zwycięstwa samym progu/ -Skarcił butę w dumnym wrogu. - - - -A ugodzony wznak na ziemię runie/ -Ten, który w namiętnym gniewie/ -Miasto pogrzebać chciał w ognia całunie/ -I jak wicher dął w zarzewie./ -Legł on od Zeusa gromu powalony,/ -Innym znów Ares inne znaczy zgony. - - - -Bo siedmiu --- siedmiu strzegło wrót,/ -Na męża mąż wymierzył dłoń,/ -Dziś w stosach lśni za zwycięstw trud/ -Ku Zeusa czci pobitych broń./ -Ale przy jednej miasta bramie/ -Nie błyszczy żaden chwały łup,/ -Gdzie brat na brata podniósł ramię,/ -Tam obok trupa poległ trup. - - - -Więc teraz Nike,Nike --- bogini zwycięstwa, także: samo zwycięstwo. czci syta i sławy,/ -Zwraca ku Tebom radosne swe oczy,/ -Po twardym znoju i po walce krwawej/ -Rzezi wspomnienie niech serca nie mroczy;/ -Idźmy do świątyń, a niechaj na przedzie/ -Teb skoczny BakchusBakchus urodził się rzekomo w Tebach z matki Semeli, dlatego nazywano go tebańskim bogiem. korowody wiedzie. - - - -Lecz otóż widzę, jak do nas tu zdąża/ -Kreon, co ziemią tą włada,/ -Nowy bóstw wyrok go w myślach pogrąża,/ -Ważne on plany waży i układa./ -Widno, że zbadać chciałby nasze zdanie,/ -Skoro tu starców wezwał na zebranie. - - - - -KREON - - - -O Tebańczycy, nareszcie bogowie/ -Z burzy i wstrząśnień wyrwali to miasto;/ -A jam was zwołał tutaj przed innymi,/ -Boście wy byli podporami tronu/ -Za Laiosa i Edypa rządów,/ -I po Edypa zgonie młodzieniaszkom/ -Pewną swą radą służyliście chętnie./ -Kiedy zaś oni za losu wyrokiem/ -Polegli obaj w bratobójczej walce,/ -Krwią pokajawszy braterskie prawice,/ -Wtedy ja władzę i tron ten objąłem,/ -Który mi z prawa po zmarłych przypada./ -WładzaTrudno jest duszę przeniknąć człowieka,/ -Jego zamysły i pragnienia, zanim/ -On ich na szerszym nie odsłoni polu./ -Ja tedy władcę, co by, rządząc miastem,/ -Wnet się najlepszych nie imał zamysłów/ -I śmiało woli swej nie śmiał ujawnić,/ -Za najgorszego uważałbym pana./ -A gdyby wyżej nad dobro publiczne/ -Kładł zysk przyjaciół, za nic bym go ważył./ -I nie milczałbym, klnę się na Jowisza/ -Wszechwidzącego, gdybym spostrzegł zgubę/ -Zamiast zbawienia kroczącą ku miastu./ -Nigdy też wroga nie chciałbym ojczyzny/ -Mieć przyjacielem, o tym przeświadczony,/ -Że nasze szczęście w szczęściu miasta leży,/ -I jego dobro przyjaciół ma raić./ -Przez te zasady podnoszę to miasto/ -I tym zasadom wierny obwieściłem/ -Ukaz ostatni na Edypa synów./ -Aby dzielnego w walce Eteokla./ -Który w obronie poległ tego miasta,/ -W grobie pochować i uczcić ofiarą,/ -Która w kraj zmarłych za zacnymi idzie;/ -Brata zaś jego, Polinika mniemam,/ -Który to bogów i ziemię ojczystą/ -Naszedł z wygnania i ognia pożogą/ -Zamierzał zniszczyć, i swoich rodaków/ -Krwią się napoić, a w pęta wziąć drugich,/ -Wydałem rozkaz, by chować ni płakać/ -Nikt się nie ważył, lecz zostawił ciało/ -Przez psy i ptaki w polu poszarpane./ -Taka ma wola, a nie ścierpię nigdy,/ -By źli w nagrodzie wyprzedzili prawych./ -Kto za to miastu temu dobrze życzy,/ -W zgonie i w życiu dozna mej opieki. - - - - -CHÓR - - - -Tak więc, Kreonie, raczysz rozporządzać/ -Ty co do wrogów i przyjaciół grodu,/ -A wszelka władza zaprawdę ci służy,/ -I nad zmarłymi, i nami, co żyjem. - - - - -KREON - -A więc czuwajcie nad mymi rozkazy. - - -CHÓR - -Poleć młodszemu straż nad tym i pieczę. - - -KREON - -Przecież tam stoją straże w pogotowiu. - - -CHÓR - -Czegóż byś tedy od nas jeszcze żądał? - - -KREON - -Byście niesfornym stanęli oporem. - - -CHÓR - -Głupi ten, kto by na śmierć się narażał. - - -KREON - - - -Tak, śmierć go czeka! Lecz wielu do zguby/ -Popchnęła żądza i zysku rachuby. - - - - -STRAŻNIK - - - -O najjaśniejszy, nie powiem, że w biegu/ -Spiesząc ja tutaj tak się zadyszałem,/ -Bom ja raz po raz przystawał po drodze/ -I chciałem na zad zawrócić z powrotem,/ -A dusza tak mi mówiła co chwila:/ -Czemuż to, głupi, ty karku nadstawiasz?/ -Czemuż tak lecisz? przecież może inny/ -Donieść to księciu; na cóż ty masz skomleć?/ -Tak sobie myśląc, spieszyłem powolnie,/ -A krótka droga wraz mi się wzdłużała./ -Na koniec myślę: niech będzie, co będzie,/ -I staję, książę, przed tobą i powiem,/ -Choć tak po prawdzie sam nie wiem zbyt wiele./ -A zresztą tuszę, że nic mnie nie czeka,/ -Chyba, co w górze było mi pisane. - - - - -KREON - -Cóż więc nadmierną przejmuje cię trwogą? - - -STRAŻNIK - - - -Zacznę od siebie, żem nie zrobił tego,/ -Co się zdarzyło, anim widział sprawcy,/ -Żem więc na żadną nie zarobił karę. - - - - -KREON - - - -Dzielnie warujesz i wałujesz sprawę,/ -Lecz jasne, że coś przynosisz nowego. - - - - -STRAŻNIK - -Bo to niesporo na plac ze złą wieścią. - - -KREON - -Lecz mów już w końcu i wynoś się potem. - - -STRAŻNIK - - - -A więc już powiem. Trupa ktoś co tylko/ -Pogrzebał skrycie i wyniósł się chyłkiem,/ -Rzucił garść ziemi i uczcił to ciało. - - - - -KREON - -Co mówisz? Któż był tak bardzo bezczelny? - - -STRAŻNIK - - - -Tego ja nie wiem, bo żadnego znaku/ -Ani topora, motyki nie było./ -Ziemia wokoło była gładka, zwarta,/ -Ani w niej stopy, ni żadnej kolei,/ -Lecz, krótko mówiąc, sprawca znikł bez śladu./ -Skoro też jeden ze straży rzecz wskazał,/ -Zaraz nam w myśli, że w tym jakieś licho./ -Trup znikł, a leżał nie pod grubą zaspą,/ -Lecz przyprószony, jak czynią, co winy/ -Się wobec zmarłych strachają; i zwierza/ -Lub psów szarpiących trupy ani śladu./ -Więc zaczął jeden wyrzekać na drugich,/ -Jeden drugiego winować, i było/ -Blisko już bójki, bo któż by ich zgodził?/ -W każdym ze straży wietrzyliśmy sprawcę,/ -Lecz tak na oślep, bo nikt się nie przyznał./ -I my gotowi: i żary brać w ręce,/ -I w ogień skoczyć, i przysiąc na bogów,/ -Że nie my winni, ani byli w spółce/ -Z tym, co obmyślił tę rzecz i wykonał./ -Więc koniec końcem, gdy dalej tak nie szło,/ -Jeden rzekł słowo, które wszystkim oczy/ -Zaryło w ziemię; bośmy nie wiedzieli,/ -Co na to odrzec, a strach nas zdjął wielki,/ -Co z tego będzie. Rzekł więc na ten sposób,/ -Że tobie wszystko to donieść należy./ -I tak stanęło, a mnie nieszczęsnemu/ -Los kazał zażyć tej przyjemnej służby./ -Więc po niewoli sobie i wam staję./ -Bo nikt nie lubi złych nowin zwiastuna. - - - - -CHÓR - - - -O panie, mnie już od dawna się roi,/ -Że się bez bogów przy tym nie obeszło. - - - - -KREON - - - -Milcz, jeśli nie chcesz wzbudzić mego gniewu,/ -I prócz starości ukazać głupoty./ -Bo brednie pleciesz, mówiąc, że bogowie/ -O tego trupa na ziemi się troszczą./ -Czyżby z szacunku, jako dobroczyńcę,/ -Jego pogrzebli, jego, co tu wtargnął,/ -Aby świątynie i ofiarne dary/ -Zburzyć, spustoszyć ich ziemię i prawa?/ -Czyż, według ciebie, bóstwa czczą zbrodniarzy?/ -O nie, przenigdy! Lecz tego tu miasta/ -Ludzie już dawno przeciw mnie szemrając/ -Głową wstrząsali i jarzmem ukrycie/ -Przeciw mym rządom i mojej osobie./ -Wiem ja to dobrze, że za ich pieniądze/ -Straże się tego dopuściły czynu./ -Bo nie ma gorszej dla ludzi potęgi,/ -Jak pieniądz: on to i miasta rozburzą,/ -On to wypiera ze zagród i domu,/ -On prawe dusze krzywi i popycha/ -Do szpetnych kroków i nieprawych czynów./ -Zbrodni on wszelkiej ludzkości jest mistrzem/ -I drogowskazem we wszelkiej sromocie./ -A ci, co czyn ten za pieniądz spełnili,/ -Wreszcie spóźnione wywołali kaźnie./ -Bo jeśli dotąd Zeusowi hołd składam,/ -Miarkuj to dobrze, a klnę się przysięgą,/ -Jeśli wy zaraz schwytanego sprawcy/ -Nie dostawicie przed moje oblicze,/ -To jednej śmierci nie będzie wam dosyć,/ -Lecz wprzódy wisząc będziecie zeznawać,/ -Byście w przyszłości wiedzieli, skąd grabić/ -I ciągnąć zyski, i mieli naukę,/ -Że nie na wszelki zysk godzić należy./ -Bo to jest pewne, że brudne dorobki/ -Częściej do zguby prowadzą, niż szczęścia. - - - - -STRAŻNIK - -Wolnoż mi mówić? czy pójść mam w milczeniu? - - -KREON - -Czyż nie wiesz jeszcze, jak głos twój mi wstrętny? - - -STRAŻNIK - -Uszy ci rani, czy też duszę twoją? - - -KREON - -Cóż to? chcesz badać, skąd idą me gniewy? - - -STRAŻNIK - -Sprawca ci duszę, a ja uszy trapię. - - -KREON - -Cóż to za urwisz z niego jest wierutny! - - -STRAŻNIK - -A przecież nie ja czyn ten popełniłem. - - -KREON - -Ty! --- swoją duszą frymarcząc w dodatku. - - -STRAŻNIK - - - -O nie!/ -Próżne to myśli, próżniejsze domysły. - - - - -KREON - - - -Zmyślne twe słowa, lecz jeżeli winnych/ -Mi nie stawicie, to wnet wam zaświta,/ -Że brudne zyski sprowadzają kaźnie. - - - - -STRAŻNIK - - - -O, niech go ujmą, owszem, lecz cokolwiek/ -Teraz się stanie za dopustem losu;/ -Ty mnie już tutaj nie zobaczysz więcej;/ -Bo już i teraz dziękuję ja bogom,/ -Żem wbrew nadziei stąd wyszedł bez szwanku. - - - - -CHÓR - - - -Siła jest dziwów, lecz nad wszystkie sięga/ -Dziwy człowieka potęga./ -Bo on prze śmiało poza sine morze,/ -Gdy toń się wzdyma i kłębi./ -I z roku na rok swym lemieszem porze/ -Matkę-ziemicę do głębi. - - - -Lotny ród ptaków i stepu zwierzęta/ -I dzieci fali usidla on w pęta,/ -Wszystko rozumem zwycięży./ -Dzikiego zwierza z gór ściągnie na błonie,/ -Krnąbrny kark tura i grzywiaste konie/ -Ujarzmi w swojej uprzęży. - - - -Wynalazł mowę i myśli dal skrzydła/ -I życie ujął w porządku prawidła,/ -Od mroźnych wichrów na deszcze i gromy/ -Zbudował sobie schroniska i domy,/ -Na wszystko z radą on gotów./ -Lecz choćby śmiało patrzał w wiek daleki./ -Choć ma na bóle i cierpienia leki./ -Śmierci nie ujdzie on grotów. - - - -A sił potęgę, które w duszy tleją,/ -Popchnie on zbrodni lub cnoty koleją;/ -Jeżeli prawa i bogów cześć wyzna./ -To hołd mu odda ojczyzna;/ -A będzie jej wrogiem ten, który nie z bogiem/ -Na cześć i prawość się ciska./ -Niechajby on sromu mi nie wniósł do domu./ -Nie skalał mego ogniska. - - - -Lecz jakiż widok uderza me oczy?/ -Czyż ja zdołałbym wbrew prawdzie zaprzeczyć,/ -Że to dzieweczka idzie Antygona?/ -O ty nieszczęsna, równie nieszczęsnego/ -Edypa córo!/ -Cóż-że się stało? czy cię na przestępstwie/ -Ukazu króla schwytano, i teraz/ -Wskutek tej zbrodni prowadzą jak brankę? - - - - -STRAŻNIK - - - -Oto jest dziewka, co to popełniła./ -Tę schwytaliśmy. Lecz gdzieżeż jest Kreon? - - - - -CHÓR - -Wychodzi oto z domu w samą porę. - - -KREON - -Cóż to? jakież tu zeszedłem zdarzenie? - - -STRAŻNIK - - - -Niczego, panie, nie trza się odrzekać,/ -Bo myśl późniejsza kłam zada zamysłom;/ -Ja bo dopiero kląłem, że już nigdy/ -Nie stanę tutaj po groźbach, coś miotał,/ -Ale ta nowa, wielka niespodzianka/ -Nie da się zmierzyć z nijaką radością;/ -Idę wiec, chociaż tak się zaklinałem,/ -Wiodąc tę dziewkę, którą przychwytano,/ -Gdy grób gładziła; żaden los tym razem/ -Mnie tu nie przywiódł, lecz własne odkrycie./ -Sądź ją i badaj; jam sobie zasłużył,/ -Bym z tych opałów wydostał się wreszcie. - - - - -KREON - -Jakim sposobem i gdzieżeś ją schwytał? - - -STRAŻNIK - -Trupa pogrzebiąc. W dwóch słowach masz wszystko. - - -KREON - -Czy pewny jesteś tego, co tu głosisz? - - -STRAŻNIK - - - -Na własne oczy przecież ją widziałem/ -Grzebiącą trupa; chyba jasno mówię. - - - - -KREON - -Więc na gorącym zszedłeś ją uczynku? - - -STRAŻNIK - - - -Tak się rzecz miała: kiedyśmy tam przyszli,/ -Groźbami twymi srodze przepłoszeni,/ -Zmietliśmy z trupa ziemię i znów nagie/ -I już nadpsute zostawiwszy ciało/ -Na bliskim wzgórzu siedliśmy, to bacząc,/ -By nam wiatr nie niósł wstrętnego zaduchu./ -A jeden beształ drugiego słowami,/ -By się nie lenić i nie zaspać sprawy./ -To trwało chwilę; a potem na niebie/ -Zabłysnął w środku ognisty krąg słońca/ -I grzać poczęło; aż nagle się z ziemi/ -Wicher poderwał i wśród strasznej trąby/ -Wył po równinie, drąc liście i korę/ -Z drzew, i zapełnił kurzawą powietrze;/ -Przymknąwszy oczy, drżeliśmy od strachu./ -A kiedy wreszcie ten szturm się uciszył,/ -Widzimy dziewkę, która tak boleśnie/ -Jak ptak zawodzi, gdy znajdzie swe gniazdo/ -Obrane z piskląt i opustoszałe./ -Tak ona, trupa dojrzawszy nagiego,/ -Zaczyna jęczeć i przekleństwa miotać/ -Na tych, co brata obnażyli ciało./ -I wnet przynosi garść suchego piasku,/ -A potem z wiadra, co dźwiga na głowie,/ -Potrójnym płynem martwe skrapia zwłokiPotrójnym płynem martwe skrapia zwłoki --- Antygona skropiła ciało płynem zmieszanym z wina, mleka i oliwy../ -My wiec rzucimy się na nią i dziewkę/ -Chwytamy, ona zaś nic się nie lęka./ -Badamy dawne i świeże jej winy./ -Ona zaś żadnej nie zaprzecza zbrodni,/ -Co dla mnie miłe, lecz i przykre było./ -Bo że z opałów sam się wydostałem,/ -Było mi słodkie, lecz żem w nie pogrążył/ -Znajomych, przykre. Chociaż ostatecznie,/ -Skórom ja cały, resztę lekko ważę. - - - - -KonfliktKREON - - - -Lecz ty, co głowę tak skłaniasz ku ziemi,/ -Mów, czy to prawda, czy donos kłamliwy? - - - - -ANTYGONA - -Jam to spełniła, zaprzeczyć nie myślę. - - -KREON - - - -Ty więc się wynoś, gdzie ci się podoba,/ -Wolny od winy i ciężkich podejrzeń./ -A ty odpowiedz mi teraz w dwóch słowach,/ -Czyżeś wiedziała o moim zakazie? - - - - -ANTYGONA - -Wiedziałam dobrze. Wszakże nie był tajny. - - -KREON - -I śmiałaś wbrew tym stanowieniom działać? - - -ANTYGONA - - - -Przecież nie Jowisz obwieścił to prawo,/ -Ni wola DikiDike, bogini sprawiedliwości, córka Jowisza, siedząca na tronie obok niego. Inne wyobrażenie wyznaczało jej tron w podziemiach, tam, gdzie się na ludzi wymierza sprawiedliwość. podziemnych bóstw siostry,/ -Taka ród ludzki związała ustawą./ -A nie mniemałam, by ukaz twój ostry/ -Tyle miał wagi i siły w człowieku,/ -Aby mógł łamać święte prawa boże,/ -Które są wieczne i trwają od wieku,/ -Że ich początku nikt zbadać nie może./ -Ja więc nie chciałam ulęknąć się człeka/ -I za złamanie praw tych kiedyś bogom/ -Zdawać tam sprawę. Bom śmierci ja pewna/ -Nawet bez twego ukazu; a jeśli/ -Wcześniej śmierć przyjdzie, za zysk to poczytam./ -Bo komu przyszło żyć wśród nieszczęść tylu,/ -Jakże by w śmierci zysku nie dopatrzył?/ -Tak więc nie mierzi mnie śmierci ta groźba,/ -Lecz mierziłoby mnie braterskie ciało/ -Niepogrzebane. Tak, śmierć mnie nie straszy,/ -A jeśli głupio działać ci się zdaję,/ -Niech mój nierozum za nierozum staje. - - - - -CHÓR - - - -Krnąbrne po krnąbrnym dziewczyna ma ojcu/ -Obejście, grozie nie ustąpi łatwo. - - - - -KREON - - - -Lecz wiedz, że często zamysły zbył harde/ -Spadają nisko, że często się widzi./ -Jako żelazo najtwardsze wśród ognia/ -Gnie się i mimo swej twardości pęka;/ -Wiem też, że drobne wędzidło rumaki/ -Dzikie poskramia. Bo tym nieprzystojna/ -Wyniosłość, którzy u innych w niewoli./ -Dziewka ta jedną splamiła się winą/ -Rozkazy dane obchodząc i łamiąc,/ -Teraz przed drugim nie sroma się gwałtem,/ -Z czynu się chełpi i nadto urąga./ -Lecz nie ja mężem, lecz ona by była,/ -Gdyby postępek ten jej uszedł płazem./ -Ale czy z siostry, czy choćby i bliższej/ -Krwią mi istoty ona pochodziła,/ -Ona i siostra nie ujdą przenigdy/ -Śmierci straszliwej; bo i siostrę skarcę,/ -Że jej spólniczką była w tym pogrzebie./ -Wołać mi tamtą, którą co dopiero/ -Widziałem w domu zmieszaną, szaloną./ -Tak duch zazwyczaj tych zdradza, co tajnie/ -Się dopuścili jakiegoś występku./ -Wstręt zaś ja czuję przeciw tym złoczyńcom,/ -Którzy swe grzechy chcą polem upiększać. - - - - -ANTYGONA - -Chceszli co więcej, czyli śmierć mi zadać? - - -KREON - -O! nie! w tym jednym zawiera się wszystko. - - -ANTYGONA - - - -Więc na cóż zwlekać?. Jako twoje słowa/ -Mierżą, i oby zawsze mnie mierziły,/ -Tak wstrętne tobie wszelkie me postępki./ -A jednak, skąd bym piękniejszą ja sławę/ -Uszczknęła, jako z brata pogrzebania./ -I ci tu wszyscy rzecz by pochwalili,/ -Gdyby im trwoga nie zawarła mowy./ -Ale tyranów los ze wszech miar błogi,/ -Wolno im czynić, co zechcą, i mówić. - - - - -KREON - -Sama tak sądzisz pośród Kadinejczyków. - - -ANTYGONA - -I ci tak sądzą, lecz stulają wargi. - - -KREON - -Nie wstyd ci, jeśli od tych się wyróżniasz? - - -ANTYGONA - -Czcić swe rodzeństwo nie przynosi wstydu. - - -KREON - -Nic był ci bratem ten, co poległ drugi? - - -ANTYGONA - -Z jednego ojca i matki zrodzonym. - - -KREON - -Czemuż więc niesiesz cześć, co jemu wstrętna? - - -ANTYGONA - -Zmarły nie rzuci mi skargi tej w oczy. - - -KREON - -Jeśli na równi z nim uczcisz złoczyńcę? - - -ANTYGONA - -Nie jak niewolnik, lecz jak brat on zginął. - - -KKEON - -On, co pustoszył kraj, gdy tamten bronił? - - -ANTYGONA - -A jednak Hades pożąda praw równych. - - -KREON - -Dzielnemu równość ze złym nie przystoi. - - -ANTYGONA - -Któż wie, czy takie wśród zmarłych są prawa? - - -KREON - -Wróg i po śmierci nie stanie się miłym. - - -ANTYGONA - -Współkochać przyszłam, nie współnienawidzić. - - -KREON - - - -Jeśli chcesz kochać, kochaj ich w Hadesie,/ -U mnie nie będzie przewodzić kobieta. - - - - -CHÓR - - - -Lecz otóż wiodą Ismenę, o panie,/ -Widać jej boleść i słychać jej łkanie./ -A jakaś chmura przesłania jej oczy/ -I piękną dziewki twarz mroczy. - - - - -KREON - - - -O ty, co w domu przypięłaś się do mnie/ -Jak wąż podstępnie, żem wiedzieć wręcz nie mógł./ -Iż na mą zgubę dwa wyrodki żywię,/ -Nuże, mów teraz, czyś była wspólniczką/ -W tym pogrzebaniu, lub wyprzyj się winy. - - - - -SiostraISMENA - - - -Winna ja jestem, jak stwierdzi to siostra,/ -I biorę na się tej zbrodni połowę. - - - - -ANTYGONA - - - -Lecz sprawiedliwość przeczy twym twierdzeniom;/ -Aniś ty chciała, ni jać przypuściłam. - - - - -ISMENA - - - -Jednak w niedoli twojej nie omieszkam/ -Wziąć na się cząstkę twych cierpień i kaźni. - - - - -ANTYGONA - - - -Hades i zmarli wiedzą, kto to zdziałał./ -MiłośćSłowami świadczyć miłość --- to nie miłość. - - - - -ISMENA - - - -O, nie zabraniaj mi, siostro, choć w śmierci/ -Z tobą się złączyć i uczcić zmarłego. - - - - -ANTYGONA - - - -Nie chcę twej śmierci, a nie zwij twym dziełem/ -Coś nie sprawiła; mój zgon starczy bratu. - - - - -ISMENA - -Lecz jakiż żywot mnie czeka bez ciebie? - - -ANTYGONA - -Pytaj Kreona! Zwykłaś nań ty baczyć. - - -ISMENA - -Po cóż mnie dręczysz bez żadnej potrzeby? - - -ANTYGONA - -Cierpię ja, że mi śmiać przyszło się z ciebie. - - -ISMENA - -W czym bym choć teraz ci przydać się mogła? - - -ANTYGONA - -Myśl o ratunku, ja go nie zawiszczę. - - -ISMENA - -O, ja nieszczęsna! więc chcesz mnie porzucić? - - -ANTYGONA - -Wybrałaś życie --- ja życia ofiarę. - - -ISMENA - -Skąd wiesz, co na dnie słów moich się kryje? - - -ANTYGONA - -W słowach ty rady, ja szukałam w czynie. - - -ISMENA - -A jednak wina ta sama nas łączy. - - -ANTYGONA - - - -Bądź zdrowa, żyjesz, --- a moja już dusza/ -W krainie śmierci... zmarłym świadczyć może. - - - - -KREON - - - -Z dziewcząt się jednej teraz zwichnął rozum,/ -Druga od młodu wciąż była szalona. - - - - -ISMENA - - - -O władco, w ludziach zgnębionych nieszczęściem/ -Umysł się chwieje pod ciosów obuchem. - - - - -KREON - -W tobie zaiste, co łączysz się z zbrodnią, - - -ISMENA - -Bo cóż mi życie warte bez mej siostry? - - -KREON - -Jej nie nazywaj --- bo ona już zmarła. - - -ISMENA - -Więc narzeczoną chcesz zabić ty syna? - - -KREON - -Są inne łany dla jego posiewu. - - -ISMENA - -Lecz on był dziwnie do niej dostrojony. - - -KREON - -Złymi dla synów niewiasty się brzydzę. - - -ISMENA - -Drogi Hajmonie, jak ojciec cię krzywdzi! - - -KREON - -Twój głos i swadźby zbyt mierżą mnie twoje. - - -CHÓR - -A więc chcesz wydrzeć kochankę synowi? - - -KREON - -Hades posłaniem będzie tej miłości. - - -CHÓR - -Taka więc wola, że ta umrzeć musi? - - -KREON - - - -Twoja i moja; lecz dosyć tych zwlekań;/ -Wiedźcie je, sługi, w dom, bo odtąd mają/ -Żyć jak niewiasty, nie według swej woli./ -Toć i zbyt śmiałe ulękną się serca,/ -Gdy widmo śmierci zaglądnie im w oczy. - - - - -CHÓR - - - -Szczęśliwy, kogo w życiu klęski nie dosięgły,/ -Bo skoro bóg potrząśnie domowymi węgły,/ -Z jednego gromu cały szereg nieci,/ -Po ojcach godzi i w dzieci./ -Tak jako fale na morzu się piętrzą,/ -Gdy wicher trackiwicher tracki --- morze na wybrzeżach Tracji uchodziło za bardzo burzliwe. do głębiny wpadnie/ -I ryje iły drzemiące gdzieś na dnie,/ -Aż brzeżne skały od burzy zajęczą: --- - - - -Tak już od wieków w Labdakidów domy/ -Po dawnych gromach nowe godzą gromy,/ -Bóle minionych pokoleń/ -Nie niosą ulg i wyzwoleń./ -I ledwie słońce promienie rozpostrze/ -Ponad ostatnią odnogą rodzeństwa,/ -A już bóstw krwawych podcina ją ostrze,/ -Obłęd i szału przekleństwa. - - - -O Zeusie, któż się z twą potęgą zmierzy?/ -Ciebie ni czasu odwieczne miesiące,/ -Ni sen nie zmoże wśród swoich obierzy./ -Ty, co Olimpu szczyty jaśniejące/ -Przez wieki dzierżysz promienny,/ -Równy w swej sile, niezmienny./ -A wieczne prawo gniecie ziemi syny,/ -Że nikt żywota nie przejdzie bez winy. - - - -Nadzieja złudna, bo jednym da skrzydła,/ -Drugich omota w swe sidła;/ -Żądz lotnych wzbudzi w nich ognie./ -Aż życie pióra te pognie./ -A wieczną prawda, że w przystępie dumy/ -Mienią dobrymi ci nieprawe czyny./ -Którym bóg zmieszał rozumy!/ -Nikt się na ziemi nie ustrzeże winy./ - - - -Lecz otóż Hajmon, z twojego potomstwa/ -Wiekiem najmłodszy; widocznie boleje/ -Nad ciężkim losem swej umiłowanej/ -I po swym szczęściu łzy leje. - - - - -KREON - - - -Wkrótce przejrzymy jaśniej od wróżbitów./ -O synu! czyż ty przybywasz tu gniewny/ -Wskutek wyroku na twą narzeczoną,/ -Czy w każdej doli zachowasz mnie miłość? - - - - -HAJMON - - - -Twoim ja, ojcze! Skoro mądrze radzisz,/ -Idę ja chętnie za twoim przewodem;/ -I żaden związek nie będzie mi droższy/ -Ponad wskazówki z ust twoich rozumnych. - - - - -KREON - - - -O! tak, mój synu, być zawsze powinno,/ -Zdanie ojcowskie ponad wszystkim ważyć./ -Przecież dlatego błagają ojcowie,/ -Aby powolnych synów dom im chował,/ -Którzy by krzywdy od wrogów pomścili,/ -A równo z ojcem uczcili przyjaciół./ -Kto by zaś płodził potomstwo nic warte,/ -Cóż by on chował, jak troski dla siebie,/ -A wobec wrogów wstyd i pośmiewisko?/ -Synu, nie folguj wiec żądzy, nie porzuć/ -Dla marnej dziewki rozsądku, wiedz dobrze,/ -Że nie ma bardziej mroźnego uścisku,/ -Jak w złej kobiety ramionach; bo trudno/ -O większą klęskę, jako zły przyjaciel./ -Przeto ze wstrętem ty porzuć tę dziewkę,/ -Aby w Hadesie innemu się dała./ -Bo skorom poznał, że z całego miasta/ -Ona jedyna, oparła się prawu,/ -Nie myślę stanąć wszem wobec jak kłamca,/ -Ale ją stracę; rodzinnego ZeusaZeus rodzinny --- Zeus opiekuńczy nad rodziną./ -Niechby błagała; Dom, Państwojeśli wśród rodziny/ -Nie będzie ładu, jak obcych poskromię?/ -Bo kto w swym domu potrafi się rządzić,/ -Ten sterem państwa pokieruje dobrze;/ -Kto zaś zuchwale przeciw prawu działa/ -I tym, co rządzą, narzucać chce wolę,/ -Ten nie doczeka się mego uznania./ -Wybrańcom ludu posłusznym być trzeba/ -W dobrych i słusznych, nawet w innych sprawach./ -Takiego męża rządom bym zaufał,/ -Po takim służby wyglądał ochotnej,/ -Taki by w starciu oszczepów i w walce/ -Wytrwał na miejscu jak dzielny towarzysz./ -Nie ma zaś większej klęski od nierządu,/ -On gubi miasta, on domy rozburza,/ -On wśród szeregów roznieca ucieczkę./ -Zaś pośród mężów powolnych rozkazom/ -Za życia puklerz stanie posłuszeństwo./ -Tak więc wypada strzec prawa i władzy/ -I nie ulegać niewiast samowoli./ -Jeżeli upaść, to z ręki paść męskiej,/ -Bo hańba doznać od niewiasty klęski. - - - - -CHÓR - - - -Nam, jeśli starość rozumu nie tłumi,/ -Zdajesz się mówić o tym bardzo trafnie. - - - - -HAJMON - - - -Ojcze, najwyższym darem łaski bogów/ -Jest niewątpliwie u człowieka rozum./ -A ja słuszności twoich słów zaprzeczyć/ -Ani bym umiał, ani chciałbym zdołać./ -Ale sąd zdrowy mógłbym mieć też inny./ -Mam ja tę wyższość nad tobą, że mogę/ -Poznać, co ludzie mówią, czynią, ganią,/ -Bo na twój widok zdejmuje ich trwoga,/ -I słowo, ciebie rażące, zamiera./ -A więc cichaczem przyszło mi wysłuchać,/ -Jak miasto nad tą się żali dziewicą,/ -Że ze wszech niewiast najmniej ona winna,/ -Po najzacniejszym czynie marnie kończy./ -Czyż bo ta, co w swym nie przeniosła sercu,/ -By brat jej leżał martwy bez pogrzebu,/ -Psom na pożarcie i ptactwu dzikiemu,/ -Raczej nagrody nie godna jest złotej?/ -Takie się głosy odzywają z cicha./ -Ja zaś, o ojcze, niczego nie pragnę,/ -Jak by się tobie dobrze powodziło./ -Bo jestli większy skarb nad dobre imię/ -Ojca dla dzieci, lub dzieci dla ojca?/ -Nie żyw więc tego, ojcze, przeświadczenia,/ -Że tylko twoje coś warte jest zdanie;/ -Bo kto jedynie sam sobie zawierzy,/ -Na swojej mowie polega i duszy,/ -Gdy go odsłonią, pustym się okaże./ -Choćby był mądry, przystoi mężowi/ -Ciągle się uczyć, a niezbyt upierać./ -Widzisz przy rwących strumieniach, jak drzewo,/ -Które się nagnie, zachowa konary,/ -A zbyt oporne z korzeniami runie./ -Także i żeglarz, który zbyt naciągnie/ -Żagle i folgi nie daje, przewróci/ -Łódź i osiądzie bez ławic na desce./ -Ustąp ty przeto i zaniechaj gniewu,/ -Bo jeśli wolno sądzić mnie młodszemu,/ -Mniemam, że taki człowiek najprzedniejszy,/ -Który opływa w rozum z przyrodzenia;/ -Jeśli tak nie jest --- a i to się zdarzy, ---/ -Niechaj rad dobrych zbyt lekko nie waży. - - - - -CHÓR - - - -O panie, słuchaj, jeśli w porę mówi,/ -A ty znów ojca; obaj mądrze prawią. - - - - -KREON - - - -A więc w mym wieku mam mądrości szukać/ -I brać nauki u tego młokosa? - - - - -HAJMON - - - -Nie w nieprawości; a jeśli ja młody,/ -To na rzecz raczej, niż wiek, baczyć trzeba. - - - - -KREON - -Na rzecz, niesfornym która cześć oddaje? - - -HAJMON - -Ni słowem śmiałbym cześć taką zalecać. - - -KREON - -A czyż nie w takie popadła ta błędy? - - -HAJMON - -Przeczy głos ludu, co mieszka w Teb grodzie. - - -KREON - -Więc lud mi wskaże, co ja mam zarządzać? - - -HAJMON - -Niemal jak młodzian porywczy przemawiasz. - - -Państwo, WładzaKREON - -Sobie czy innym gwoli ja tu rządzę? - - -HAJMON - -Marne to państwo, co li panu służy. - - -KREON - -Czyż nie do władcy więc państwo należy? - - -HAJMON - -Pięknie byś wtedy rządził... na pustyni. - - -KREON - -Ten, jak się zdaje, z tamtą dziewką trzyma. - - -HAJMON - -Jeśli ty dziewką; o ciebie się troskam. - - -KREON - -Z ojcem się swarząc, o przewrotny synu? - - -HAJMON - -Bo widzę, że ty z drogi zbaczasz prawej. - - -KREON - -Błądzęż ja strzegąc godności mej władzy? - - -HAJMON - -Nie strzeżesz --- władzą pomiatając bogów. - - -KREON - -O niski duchu, na służbie kobiety! - - -HAJMON - -Bo w służbie złego nie znajdziesz minie nigdy. - - -KREON - -Cała twa mowa jej sprawy ma bronić. - - -HAJMON - -Twej sprawy, mojej i podziemnych bogów. - - -KREON - -Nigdy już żywcem ty jej nie poślubisz. - - -HAJMON - -Zginie --- to śmiercią sprowadzi zgon inny. - - -KREON - -A więc już groźbą śmiesz we mnie ty godzić? - - -HAJMON - -Cóż warta groźba, gdzie puste zamysły? - - -KREON - -Wnet pożałujesz twych nauk, młokosie! - - -HAJMON - -Nie byłbyś ojcem, rzekłbym, żeś niemądry. - - -KREON - -Niewiast służalcze, przestań się uprzykrzać! - - -HAJMON - -Chcesz więc ty mówić, a drugich nie słuchać? - - -KREON - - - -Doprawdy? Ale, na Olimp, wiedz o tym,/ -Że cię twe drwiny o zgubę przyprawią./ -Wiedźcie tu dziewkę; niechajże wyrodna/ -W oczach kochanka tu ginie natychmiast. - - - - -HAJMON - - - -Nie umrze ona przy mnie! nie marz o tym./ -Nie ujrzę tego! raczej ty nie ujrzysz/ -Więcej mojego oblicza, jeżeli/ -W szale na bliskich porywać się myślisz. - - - - -CHÓR - - - -Uniesion gniewem wypadł on, o władco./ -A w młodej głowie rozpacz złym doradcą. - - - - -KREON - - - -Niech myśli, czyny knuje on zuchwałe/ -Ale tych dziewek nie wyrwie on śmierci, - - - - -CHÓR - -Jak to? czyż obie ty zgładzić zamyślasz? - - -KREON - -Niewinna ujdzie: słusznie mnie strofujesz. - - -CHÓR - -A jakiż tamtej gotujesz ty koniec? - - -KREON - - - -Gdzieś na bezludnym zamknę ją pustkowiu./ -W skalistym lochu zostawię żyjącą,/ -Strawy przydając jej tyle, by kaźnię/ -Pozbawić grozy i klątwy nie ściągnąć,/ -A tam jej Hades, którego jedynie/ -Z bogów uwielbia, może da zbawienie, ---/ -Lub pozna wreszcie, jeśli marnie zginie,/ -Że próżną służbą czcić Hadesu cienie. - - - - -CHÓR - - - -Miłości, któż się wyrwie z twych obierzy,/ -Miłości, która runiesz na ofiary,/ -W gładkich dziew licach gdy rozniecisz czary./ -Kroczysz po morzu i wśród chat pasterzy,/ -Ni bóg nie ujdzie przed twoim nawałem,/ -Ani śmiertelny. Kim władasz, wre szałem. - - - -Za twym podmuchem, do winy/ -Zboczy i prawy wraz człowiek;/ -Spory ty szerzysz wśród jednej rodziny./ -Urok wystrzela zwycięsko spod powiek/ -Dziewicy, sięgnie i praw majestatu/ -Moc Afrodyty, co przewodzi światu. - - - -A i ja nawet, chociaż wiernie służę,/ -Prawie się w duszy na ukazy burzę,/ -A boleść serce mi rani,/ -Bo straszny widok uderza me oczy:/ -Do wszechchłonącej Antygona kroczy/ -Ciemnej Hadesu przystani. - - - - -Miłość, Rozpacz, ŚmierćANTYGONA - - - -Patrzcie, o patrzcie, wy ziemi tej dzieci,/ -Na mnie, kroczącą w smutne śmierci cienie,/ -Oglądającą ostatnie promienie/ -Słońca, co nigdy już mi nie zaświeci,/ -Bo mnie Hadesa dziś ręka śmiertelna/ -Do AcherontuAcheront --- rzeka Tartaru. bladych wiedzie włości./ -Ani zaznałam miłości,/ -Ani mi zabrzmi żadna pieśń weselna;/ -Ale na zimne Acherontu łoże/ -Ciało nieszczęsne me złożę. - - - - -CHÓRCzy to przypadkiem nie kwestia Przewodnika Chóru? Tak podejrzewam, trzeba by porównać z innnymi wydaniami. DG - - - -Pieśni ty godna, i w chwały rozkwicie/ -W kraj śmierci niesiesz twe życie./ -Ani cię chorób przygnębiło brzemię,/ -Ni miecza ostrze zwaliło na ziemię,/ -Lecz własnowolna, nie dobiegłszy kresu,/ -Żywa w kraj stąpasz Hadesu. - - - - -ANTYGONA - - - -Słyszałam niegdyś o frygijskiej Niobie,/ -Córce Tantala, i jej strasznym zgonie./ -Że skamieniała w swej niemej żałobieNiobe, która miała sześciu synów i sześć córek, urągała Latonie, która miała tylko Apollina i Artemidę. Gniew tych bogów zabił jej dzieci, a ona skamieniała z boleści./ -I odtąd ciągle we łzach bólu tonie./ -Skała owiła ją jak bujne bluszcze./ -A na jej szczytach śnieg miecie, deszcz pluszcze;/ -Rozpaczy łkaniem zroszone jej łono, ---/ -Mnie też kamienną pościel przeznaczono. - - - - -CHÓR - - - -Lecz ona przecież z krwi bogów jest rodem,/ -My śmiertelnego pokolenia płodem./ -Hołd jednak temu, kto choć w śmierci progu/ -Dorówna bogu. - - - - -ANTYGONA - - - -Urągasz biednej. Czemuż obelżywą/ -Mową mnie ranisz, pókim jeszcze żywą?/ -Miasto i męże, dzierżący te grody./ -Wzywam was, zwróćcie litosne swe oczy,/ -I wy, Teb gaje i dirkejskie wody,/ -Na mnie, co idę ku ciemnej pomroczy,/ -Nie opłakana przez przyjaciół żale,/ -Do niezwykłego grobowca gdzieś w skale./ -O, ja nieszczęsna!/ -Anim ja zmarła, ani też przy życiu,/ -Śmierć mnie już trzyma w swym mroźnym spowiciu. - - - - -CHÓR - - - -W nadmiarze pychy zuchwałej/ -Z tronem się Diki twe myśli i mowy/ -Zderzyły w locie, złamały./ -Zły duch cię ściga rodowy. - - - - -ANTYGONA - - - -Mowa ta głębią mego serca targa;/ -Dotknąłeś ojca ty sromu,/ -I w słowach twoich rozbrzmiała znów skarga/ -Nad nieszczęściami Labdakidów domu./ -Straszna ja pomnę łożnicę,/ -W której syn z matką zdrożne śluby wiąże./ -Nieszczęśni moi rodzice!/ -Klątwą brzemienna dziś do was podążę,/ -Dziewiczość niosąc wam serca./ -O drogi bracie, złowrogie twe ślubyzłowrogie twe śluby --- śluby Polinika z córką Adrastosa, które ułatwiły wyprawę Siedmiu na Teby./ -Były początkiem pogromu i zguby;/ -Tyś --- choć zmarły --- mój morderca. - - - - -CHOR - - - -Zmarłych czcić --- czcigodny czyn,/ -Ale godny kaźni błąd/ -Łamać prawo, walić rząd./ -Tyś zginęła z własnych win. - - - - -ANTYGONA - - - -Bez łez, przyjaciół, weselnego pienia/ -Kroczę już, biedna, ku śmiertelnej toni,/ -Wnet już nie ujrzę ni słońca promienia,/ -Nikł łzy nad moją dolą nie uroni. - - - - -KREON - - - -Czyżby kto ustał w przedzgonnych tych skargach/ -Gdyby mu dano się żalić bez końca?/ -Bierzcie stąd dziewkę i w ciemnym ją grobie/ -Zawrzyjcie zaraz, jak już nakazałem./ -Tam ją zostawcie samotną, by zmarła,/ -Albo też żywa pędziła dni marne;/ -Tak wobec dziewki zostaniem bez winy,/ -A nie ścierpimy, aby wśród nas żyła. - - - - -Miłość, Rozpacz, ŚmierćANTYGONA - - - -Grobie, ty mojej łożnico miłości,/ -Mieszkanie wieczne, ciemnico sklepiona!/ -Idę do moich, których tylu gości/ -W pozgonnych domach boska PersefonaPersefona --- małżonka Iladesa, pana podziemi../ -Za wami idę ja, co w życia wiośnie -Zginęłam, prawie nie zaznawszy świata./ -A tuszę, że mnie tam przyjmą radośnie,/ -Ty, ojcze, matko, i miła dłoń brata,/ -Bom tu z miłosną służbą wasze ciała/ -Własną obmyła, namaściła ręką;/ -Żem bratnie zwłoki uczciwie grzebała,/ -Taką mnie darzą podzięką!/ -Mam u szlachetnych ludzi cześć i chwałę,/ -Lecz potępienie ze strony Kreona,/ -Bo on me czyny uznał za zuchwałe./ -Ręką więc teraz jego uwięziona,/ -Ani zaznawszy słodyczy wesela,/ -Ni uczuć maiki, ni dziatek pieszczoty,/ -Schodzę tak sama i bez przyjaciela,/ -Nieszczęsna, żywa do grobowej groty./ -Jakież to bogów złamałam ustawy?/ -Jakże do bogów podnosić mam modły,/ -Wołać o pomoc, jeżeli czyn prawy,/ -Który spełniłam, uznano za podły?/ -Lecz jeśli z bogów to zrządzenia płynie,/ -Trzeba mi winnej znieść w ciszy cierpienia./ -Jeśli ci błądzą, niech sięgnie ich w winie/ -Kaźń równa z bogów ramienia! - - - - -CHÓR - - - -Te same burze i te same jeszcze/ -Duszą tej dziewki wciąż miotają dreszcze. - - - - -KREON - - - -Pachołki, którym wieść ją nakazałem,/ -Swoją powolność ciężko mi... odpłaczą. - - - - -ANTYGONA - - - -Biada! ta mowa grożąca/ -Bliskiego wróżbą mi końca. - - - - -CHÓR - - - -A ja odwagi nie śmiałbym dodawać,/ -Że się te srogie ukazy odwloką. - - - - -ANTYGONA - - - -Ziemi tebańskiej ojczysty ty grodzie,/ -I wy bogowie rodowi,/ -Oto mnie wiodą w bezzwłocznym pochodzie/ -Ku samotnemu grobowi./ -Patrzcie na księżnę ostatnią z Teb królów,/ -W ręce siepaczy ujętą,/ -Ile mąk ona, ile zniosła bólów/ -Za wierną służbę i świętą. - - - - -CHÓR - - - -Tak i Danae jasnego dnia zorze/ -Zmienić musiała na loch w miedź obity,/ -W grobowej skryta komorzeDanae została zamknięta przez ojca Akryzjosa w podziemnym lochu, by nie urodziła złowróżbnego syna. Tu ją jednak zapłodnił złotym deszczem Zeus i urodziła słynnego Perseusza../ -A przecież ród jej zapewniał zaszczyty/ -I Zeus deszcz złoty na łono jej roni./ -Straszne przeznaczeń obierze!/ -Pieniądz, ni siła, ni warowne wieże,/ -Ni morski żagiel przed nimi nie chroni./ - - - -Hedonów króla Likurga też bucie,/ -Że hardym słowem na boga się miota,/ -Bakchus kamienne zgotował okucie,/ -Gdzie zła wykipi ochotaLikurg, baśniowy król Hedonów w Tracji, oparł się kultowi Bakchusa, wyszydzał jego towarzyszki, szalone bachantki i muzy; za to zamknął go bóg w skalnej czeluści../ -Rozpoznał on tam za późno swe zbrodnie/ -I pożałował słów gniewu./ -Chciał bo szał boski tłumić i pochodnie,/ -Urągał muzom wśród śpiewu./ - - - -Gdzie z mórz strzelają kyanejskie progikyanejskie progi (łac. Cyaneae) --- skaliste wyspy na Morzu Czarnym przy Bosforze.,/ -Kraj SalmidesuSalmy-dessus --- wybrzeże i miasto na trackim brzegu Morza Czarnego., dla przybyszów wrogi,/ -Gdzie brzeg Bosforu bałwany roztrąca,/ -Tam widział Ares, jak dzikością wrąca/ -Żona Fineusa pasierby swe nęka./ -Nie mieczem srogim wymierza im cięgi,/ -Lecz krwawą rękę załapią w ócz kręgi,/ -Ostrzem je łupi czółenkaKról Fineus ze Salmidesu ożenił się z Kleopatrą, córką Boreasza, księżniczką z krwi attyckiej. Potem ją porzucił, aby poślubić nimfę nazwiskiem Idaea. Przewrotnej Idaei wydał Fineus swe dzieci z Kleopatry; macocha je oślepiła i następnie zamknęła żywcem w grobowcu. Także ich matka, Kleopatra, zawarta została w kamiennej niewoli../ - - - -Ujęci oni kamienną niewolą,/ -Płaczą nad matki i swoją niedolą./ -Przecież jej przodki z ErechtydówErechtydzi --- Ateńczycy; nazwa ta pochodzi od Erechteusa, bohatera ateńskiego rodu.,/ -Ojcem Boreasz; pośród skał i głogów/ -I burz pędziła dni swoje od młodu,/ -Na chyżych koniach --- prawe dziecię bogów./ -Jednak, choć w dali, i tu jej dosięga/ -Odwiecznej MojryMojra --- bogini przeznaczenia. potęga. - - - - -TYREZJASZ - -[wiedziony przez chłopca ukazuje się na scenie] - - - -O, Teb starszyzno, wspólnym my tu krokiem/ -I wspólnym wzrokiem zdążamy, bo ciemnym/ -Za oko staje przewodnika ręka. - - - - -KREON - -Cóż tam nowego, Tyrezjaszu stary? - - -TYREZJASZ - -Ja rzeknę, ty zaś posłuchaj wróżbiarza. - - -KREON - -Nigdy twoimi nie wzgardziłem słowy. - - -TYREZJASZ - -Przeto szczęśliwie sterujesz tą nawą. - - -KREON - -Przyświadczyć mogę, doznawszy korzyści. - - -TYREZJASZ - -Zważ teraz, znowu stoisz na przełomie. - - -KREON - -Co mówisz? trwogą przejmują twe słowa. - - -TYREZJASZ - - - -Poznasz ty prawdę, ze znaków mej sztuki./ -Siadłem na starej wróżbity siedzibie,/ -Gdzie wszelkie ptactwo kieruje swe loty,/ -Aż naraz słyszę, jak niezwykłe głosy/ -Wydają ptaki, szalone i dzikie;/ -I wnet poznałem, że szarpią się szpony,/ -Bo łopot skrzydeł to stwierdzał dobitnie./ -Przejęty trwogą, próbuję ofiary/ -Na płomienistym ołtarzu, lecz ogień/ -Nie chce wystrzelać ku górze, a sączy/ -Ciecz z mięs ofiarnych, wsiąkając w popioły,/ -Kipi i syczy, żółć bryzga w powietrze,/ -I spoza tłuszczu, co spłynął stopiony,/ -Uda wyjrzały na ołtarzu nagie./ -Od tego chłopca wnet się dowiedziałem,/ -Że takie marne szły z ofiary znaki,/ -Bo on przewodzi mnie, a ja znów innym./ -Tak więc chorzeje miasto z twojej winy./ -Bo wsze ołtarze i ofiarne stoły/ -Psy pokalały i ptactwo, co ciałem/ -Edypowego się żywiło syna./ -Więc nie przyjmują już ofiarnych modłów/ -Bogowie od nas, ni ofiarnych dymów./ -A ptak, co żłopał krew trupa zastygłą,/ -Już nie wydaje głosów dobrej wróżby./ -Rozważ to synu: bo wszystkich jest ludzi/ -Błądzić udziałem i z prostej zejść drogi;/ -Lecz mąż, co zbłądził, nie jest pozbawiony/ -Czci i rozwagi, jeżeli wśród nieszczęść/ -Szuka lekarstwa i nie trwa w uporze./ -Upór jest zawsze nierozumu znakiem;/ -Ustąp ty śmierci i nie drażń zmarłego/ -Cóż bo za chwała nad trupem się znęcać?/ -Życzliwość moja tą radą ci służy,/ -Dobrze jej słuchać, gdy korzyści wróży. - - - - -KREON - - - -Starcze, wy wszyscy jak łucznik do celu/ -Mierzycie we mnie: teraz i wróżbiarstwo/ -Sidła zastawia, a krewni mą myślą/ -Kupczą, frymarczą z dawna jak towarem;/ -Nuże, gromadźcie wy sardyjskie skarby,/ -Wskażcie mi górę indyjskiego złotasardyjskie skarby... indyjskie złoto --- Sardes, stolica Lidii, słynęła ze swych skarbów, Indie ze swego złota.,/ -Na pogrzeb tego jednak nie zezwolę./ -I choćby orły Zeusowe porwały/ -Trupa i przed tron Zeusowy zaniosły,/ -Ja się takiego nie ulęknę sromu,/ -Grześć nie pozwolę; wiem bo ja zbyt dobrze:/ -Bogów zbezcześcić nie zdoła śmiertelny./ -Potknąć się mogą i ludzie przemądrzy,/ -Starcze, haniebnie, kiedy szpetne myśli/ -Ubiorą w słowa barwiste... dla zysku. - - - - -TYREZJASZ - - - -Biada!/ -Czyż wie to człowiek, czy rozważa sobie... - - - - -KREON - -Cóż, z jakim znowu na plac ogólnikiem? - - -TYREZJASZ - -Ile rozsądek góruje nad skarby? - - -KREON - -O ile klęską największą nierozum. - - -TYREZJASZ - -Ciężko ty na tę zapadłeś chorobę. - - -KREON - -Nie chciałbym ciężkim obrazić cię słowem. - - -TYREZJASZ - -Czynisz to, kiedy mi kłamstwo zarzucasz. - - -KREON - -Bo cech wasz cały łapczywy na zyski. - - -TYREZJASZ - -A ród tyranów w mętach chciwie łowi. - - -KREON - -Wiesz, że ty pana twojego obrażasz? - - -TYREZJASZ - - -Wiem, bo ja tobie gród ten zachowałemTyrezjasz zachował Teby, gdy podczas najazdu Siedmiu na miasto poradził Kreonowi, aby tenże własnego syna (zapewne Megarcusa) poświęcił, a tą śmiercią okupił wybawienie.. - - - -KREON - -Mądry ty wróżbiarz, lecz oddany złemu. - - -TYREZJASZ - -Tyś gotów wydrzeć mi z wnętrza tajniki. - - -KREON - -Wyrusz ty z nimi, byle nie dla zysku. - - -TYREZJASZ - -Że ty stąd zysku nie uszczkniesz, to myślę. - - -KREON - -Bacz, że zamysłów moich nie stargujesz. - - -TYREZJASZ - - - -Wiedz więc stanowczo, że nim słońce tobie/ -Wielu dokona kołowych obrotów,/ -Płód z twoich własnych poczęty wnętrzności/ -Jak trupa oddasz w zamianę za trupy,/ -Za to, że z światła strąciłeś do nocy,/ -Zamknąłeś życie haniebnie w grobowcu,/ -A tu na ziemi zmarłe trzymasz ciało,/ -Które się bóstwom należy podziemnym./ -Nie masz żadnego ty nad zmarłym prawa,/ -Ni światła bogi, którym gwałt zadajesz./ -Za to czyhają Hadesa i bogów/ -Mściwe i zgubą grożące ErynieErynie --- boginie podziemi, mszczące zbrodnie ludzi.,/ -By cię w podobnym pogrążyć nieszczęściu./ -Poznasz ty wkrótce, czy ja przekupiony/ -Tak mówię, w krótkim pokażą to czasie/ -Mężczyzn i niewiast w twoim domu jęki./ -A wszelkie miasto przeciw tobie stanie,/ -W którym psy strzępy zbezcześciły trupów,/ -Zwierzęta dzikie i ptactwo, roznosząc/ -Wstrętne po świętych zaduchy ogniskach./ -Takimi strzały ja, ciężko zelżony,/ -Godzę jak łucznik z gniewem w twoje serce/ -I tak celuję, że ostrze poczujesz./ -O chłopcze, wiedźże mnie teraz do domu,/ -By on na młodszych swe gniewy upuścił,/ -A lepiej odtąd miarkował się w słowie/ -I myśl mu lepsza zajaśniała w głowie. - - - - -CHÓR - - - -O, władco, poszedł on po wróżbie strasznej./ -A wiem to, odkąd mi czarne siwizną/ -Starość na głowie posrebrzyła włosy:/ -Fałszu on nigdy nie zwiastował miastu. - - - - -KREON - - - -Ja też wiem o tym, i trwoga mną miota./ -Ustąpić ciężko, a jeśli się oprę,/ -To łatwo klęska roztrąci mą czelność. - - - - -CHÓR - -Synu Menojka, rozwagi ci trzeba. - - -KREON - -Cóż tedy czynić? Mów, pójdę za radą. - - -CHÓR - - - -Idź i wyprowadź dziewkę z ciemnej groty,/ -A grób przygotuj dla ciała, co leży. - - - - -KREON - -Radzisz i mniemasz, że ja mam ustąpić? - - -CHÓR - - - -O, jak najprędzej, mój książę, bo chyżo/ -Kaźń bogów ludzki pochwyci nierozum. - - - - -KREON - - - -Ciężkie to, ale każę milczeć sercu./ -Cofnę się, trudno z koniecznością walczyć. - - - - -CHÓR - -Idź, sam to uczyń, nie zwalaj na innych. - -KREON - - - -Idę sam zaraz, a wy, moi słudzy,/ -Wziąwszy topory pospieszcie pospołem/ -Na miejsce widne, gdzie nagi trup leży./ -Ja, że zmieniłem me dawne zamysły,/ -Com sam namotał, sam teraz rozwiążę./ -Najlepiej może działa, kto do zgonu/ -Praw istniejących przestrzega zakonu. - - - - -CHÓR - - - -WieloimiennyWieloimiennym nazywa się tu Bakchusa, bo w rozmaitych miejscach czcią się cieszył pod rozmaitymi przydomkami., coś z Kadmosa domu/ -Przysporzył chwały dziewczynie,/ -Synu ty Zeusa, pana burz i gromu!/ -W italskiej ziemi twoje imię słynieW Italii, szczególnie południowej, w której winnic było wiele, kult Bakchusa był szczególnie popularny.,/ -A i w Eleuzys, o, synu Semeli,/ -Roje cię sławią czcicieli./ -Bakchusie, w Tebach ty dzierżysz stolicęW położonych nad rzeką Ismenem Tebach, założonych przez Kadmosa, z dawien dawna Bakchus wielkiej czci zażywał. W jego otoczeniu są szalejące dziewice, zwane bakchami, tyjadami, lub menadami. Występują one w szałem opanowanych obchodach i pochodach (thiasoi) Bakchusa, a Teby brzmią wtedy pieśniami.,/ -Kędy Ismenos ciche wody toczy;/ -Szalem twym tchnące pląsają dziewice,/ -Pienieni rozbrzmiewa gród smoczygród smoczy --- w Tebach Kadmos zabił smoka, służącego Aresowi../ -Widnyś ty w łunie jarzących kagańców,/ -Gdzie ParnasTakże i góra Parnassos w Focydzie była sławna jako siedziba Bakchusa i jego orszaku. szczytem dwugłowym wystrzela,/ -Gdzie zdrój KastaliiŹródło Kastalia, przynoszące natchnienia poetom, znajdowało się w bliskości. i swawolnych tańców/ -KorykuKorykijska grota leżała u południowego stoku Parnasu. nimfy zawodzą wesela./ -W górach nysejskiej EubeiNysa, miejscowość Eubei. W Nysie pono nimfy piastowały młodziutkiego Bakchusa. Stąd wyprowadzano jego drugą nazwę: Dionysos./ -W spowitej bluszczem mkniesz kniei,/ -Potem z tych brzegów, gdzie bujne winnice,/ -Pieśni cię chwały wiodą przez ulice/ -I brzmią radośnie ku niebom. - - - -Gród ten nad wszystkie czcisz grody na świecie/ -Wraz z matką twoją ciężarną od gromu;/ -Kiedy więc brzemię nieszczęścia nas gniecie/ -Pełnego cierpień i sromu,/ -Przybądź z Parnasu ku naszej obronie,/ -Lub przez wyjące mórz tonie. - - - -Ty, co przodujesz wśród gwiazd korowoduTy, co przodujesz wśród gwiazd... --- gwiazdy zdają się tańczyć wśród obchodów Bakchusa, które się odbywają nocną porą.,/ -Pieśniom przewodzisz wśród mroczy,/ -Zawitaj, synu Zeusowego rodu!/ -Niechaj cię zastęp naksyjskichWyspa Naksos była ogniskiem kultu Bakchusa. Legenda umieszczała także i na niej urodzenie boga, a wiadomo, że miejsc roszczących sobie prawa do tego zaszczytu było wiele. otoczy/ -Tyjad, co w szale od zmierzchu do rana/ -Tańczą i w tobie czczą pana. - - - - -POSŁANIEC - - - -O, Kadma grodu, domów AmfionaDomy Amfiona znajdują się w Tebach. Amfion, bliźniak Zethosa, był drugim założycielem Teb. Bo podczas gdy Kadmos zbudował fortecę miasta, Kadmeę, on dźwiękami swej lutni ułożył mury gród okalające./ -Mieszkańcy! życia człowieka nie śmiałbym/ -Ani wysławiać, ni ganić przenigdy,/ -Bo los podnosi i los znów pogrąża/ -Bez przerwy w szczęście ludzi i w nieszczęścia,/ -A nikt przyszłości wywróżyć nie zdolny./ -Tak Kreon zdawał się godnym podziwu,/ -On, co wyzwolił tę ziemię od wrogów/ -I jako władca jedyny nad krajem/ -Rządził, potomstwem ciesząc się kwitnącym/ -A dziś to wszystko --- stracone. Bo radość/ -Jeśli W człowieku przygaśnie, to trzymam,/ -Że on nie żyje, lecz żywym jest trupem;/ -Gromadź bogactwa do woli w twym domu,/ -Świeć jako tyran na zewnątrz: gdy cieszyć/ -Tym się nie można, to reszty tych skarbów/ -Ja bym nie nabył za dymu cień marny. - - - - -CHÓR - -Jakąż ty znowu wieść niesiesz złą księciu? - - -POSŁANIEC - -Skończyli... Śmierci ich winni, co żyją. - - -CHÓR - -Któż to mordercą, któż poległ, o rzeknij! - - -POSŁANIEC - -Hajmon nie żyje, we własnej krwi broczy. - - -CHÓR - -Z ojca czy z własnej zginąłże on ręki? - - -POSŁANIEC - -W gniewie na ojca mordy sam się zabił. - - -CHÓR - -Wróżbito, jakżeś czyn trafnie określił! - - -POSŁANIEC - -W tym rzeczy stanie dalszej trza narady. - - -CHÓR - - - -Lecz otóż widzę biedną Eurydykę,/ -Żonę Kreona; albo się przypadkiem/ -Pojawia, albo słyszała o synu. - - - - -EURYDYKA - - - -Starcy, rozmowy waszej dosłyszałam/ -Właśnie, gdym z domu wybiec zamierzała,/ -By do Pallady z modłami się zwrócić./ -I właśnie odrzwi odmykam zasuwki,/ -By je roztworzyć, gdy nagle nieszczęsna/ -Wieść uszy rani; więc padłam, zemdlona/ -Z trwogi, w objęcia mych wiernych służebnic./ -Powtórzcie tedy, co ta wieść przynosi;/ -W złym doświadczona, wysłucham słów waszych. - - - - -SamobójstwoPOSŁANIEC - - - -Ja, miłościwa pani, byłem przy tym,/ -Powiem więc wszystko, jak się wydarzyło;/ -Cóż bo ukrywać, by potem na kłamcę/ -Wyjść; --- przecie prawda zawsze fałsz przemoże./ -Ja tedy wiodłem twojego małżonka/ -Na ten pagórek, gdzie biedne leżało/ -Przez psy podarte ciało Polinika./ -Wnet do HekatyHekate --- bóstwo podobne do Artemidy i Persefony; głównie czczona jako bogini podziemna lub strasząca po drogach w otoczeniu dusz ludzi zmarłych, a niepogrzebanych, lub przedwcześnie zgasłych. zanieśliśmy modły/ -I do Plutona, by gniew ich złagodzić;/ -Obmywszy potem ciało w świętej wodzie,/ -Palimy szczątki na stosie z gałęzi/ -I grób z ojczystej sypiemy im ziemi./ -To uczyniwszy, zaraz do kamiennej/ -Ślubnogrobowej łożnicy dziewczyny/ -Spieszymy; z dala ktoś jęki usłyszał,/ -Od strony lochu, co za grób miał służyć,/ -Choć nie święciły go żadne obrzędy./ -Wraz więc donosi panu, co zasłyszał./ -Tego dochodzą zaś, kiedy się zbliżył,/ -Łkania żałosne, a pierś mu wybucha/ -Głosem rozpaczy: «O, ja nieszczęśliwy,/ -Czyż ja wróżbitą? czyż nie kroczę teraz/ -Drogą największej w żywocie mym klęski?/ -Syna wołanie mnie mrozi. O, słudzy,/ -Spieszcie wy naprzód, zbliżcie się do grobu,/ -I przez szczelinę głazem zawaloną/ -Wszedłszy do wnętrza, baczcie, czy Hajmona/ -Głosy ja słyszę, czy bogi mnie durzą». ---/ -Posłuszni woli zwątpiałego pana,/ -Idziem na zwiady, a w grobowca głębi/ -Dojrzym wnet dziewki, wiszącej za gardło/ -Ściśnięte węzłem muślinowej chusty,/ -Podczas gdy młodzian uchwycił ją wpoły,/ -Boleśnie jęcząc nad szczęścia utratą,/ -Nad czynem ojca, nieszczęsnymi śluby./ -Kreon, zoczywszy to, ciężko zajęknął,/ -Rzuca się naprzód i wśród łkania woła:/ -«O, ty nieszczęsny! cóżeś ty uczynił!/ -Czy szał cię jaki opętał złowrogi?/ -Wychodź, o synu, błagalnie cię proszę!»/ -Lecz syn na niego dzikim łysnął wzrokiem/ -I twarz przekrzywił, a słowa nie rzekłszy/ -Ima się miecza; wraz ojciec ucieczką/ -Uszedł zamachu; natenczas nieszczęsny/ -W gniewie na siebie nad ostrzem się schyla/ -I miecz w bok wraża; lecz jeszcze w konaniu/ -Drętwym ramieniem do zmarłej się tuli,/ -A z ust dyszących wytryska mu struga/ -Krwawa na blade kochanki policzki. - - -[Eurydyka wybiega za scenę] - - -Trup dziś przy trupie, osiągnął on śluby,/ -W domu Hadesa złożony przy lubej./ -Nieszczęściem dowiódł, że wśród ludzi tłumu/ -Największe klęski płyną z nierozumu. - - - - -CHÓR - - - -A cóż stąd wróżysz, że znikła niewiasta,/ -Nie rzekłszy złego lub dobrego słowa? - - - -POSŁANIEC - - - -I ja się dziwię, lecz żywię nadzieję,/ -Że posłyszawszy o ciosie, nie chciała/ -Żałości swojej pospólstwu okazać,/ -Lecz się cofnęła do wnętrza domostwa,/ -By wśród sług wiernych wylewać łzy gorzkie./ -Toć jej rozwaga nie dopuści zbrodni. - - - - -CHÓR - - - -Nic nie wiem, ale milczenie uporne,/ -Jak i zbyt głośne jęki, zło mi wróżą. - - - - -POSŁANIEC - - - -Wnet się dowiemy, czy w głębiach rozpaczy/ -Nie kryje ona tajnego zamysłu./ -Idźmy do domu, bo dobrze ty mówisz:/ -Nadmierna cisza jest głosem złowrogim. - - - - -[Wchodzi Kreon, dźwigając ciało syna] - - -CHÓR - - - -Lecz otóż książę tu właśnie nadchodzi;/ -O! znak wymowny ujął on ramiony,/ -Nie cudzej zbrodni, jeśli rzec się godzi,/ -Lecz własnej winy szalonej. - - - - -Rozpacz, Wyrzuty sumieniaKREON - - - -Klnę moich myśli śmierciodajne winy,/ -Co zatwardziły mi serce!/ -Widzicie teraz wśród jednej rodziny/ -Ofiary, ofiar mordercę./ -Słowo dziś moje me czyny przeklina;/ -W samym, o! życia rozkwicie/ -Przedwczesne losy porwały mi syna,/ -Mój obłęd zmiażdżył to życie. - - - - -CHÓR - -Późno się zdajesz poznawać, co słuszne. - - -KREON - - - -Biada mi!/ -Przejrzałem biedny: jakiś bóg złowrogi/ -Zwalił na głowę swe brzemię,/ -Na szału popełniał mnie drogi,/ -Szczęście me zdeptał, wbił w ziemię./ -O biada! do zguby/ -Wiodą śmiertelnych rachuby. - - - - -POSŁANIEC DRUGI - - - -Panie! Ty nieszczęść masz wielkie zasoby./ -Bo jedne dźwigasz w twych rękach nieszczęsnych/ -A drugie ujrzysz niebawem w twym domu. - - - - -KREON - -Czyż ja nie na dnie już nieszczęścia głębi? - - -SamobójstwoPOSŁANIEC DRUGI - - - -Nie masz już żony; syna twego matka/ -Właśnie na swoje targnęła się życie. - - - - -KREON - - - -Nieubłagana przystani, Hadesie,/ -Gdzież koniec moich boleści?/ -O! znowu nowe len niesie/ -Godzące w serce mi wieści./ -W męża, co legł już, wtórym godzisz ciosem,/ -Złowrogim słowami i głosem./ -Biada! Nieszczęście z nieszczęścia się sączy,/ -Z synem śmierć żonę mi łączy. - - - - -CHOR - -Widzieć to możesz, dom stoi otworem. - - -KREON - - - -Złe się jak burza nade mną zerwało,/ -Nie widzę końca mej męce:/ -Syna zmarłego dźwigałem ja w ręce,/ -A teraz żony martwe widzę ciało./ -O biada! matczyna/ -Rozpacz dognała już syna. - - - - -POSŁANIEC DRUGI - - - -Zranionej ciężko nocą zaszły oczy,/ -U stóp ołtarza zajękła nad zgonem/ -Niegdyś chwalebnym syna Megareusa/ -I nad Hajmonem, a wreszcie przekleństwa/ -Tobie rzuciła ciężkie, dzieciobójcy. - - - - -KREON - - - -Groza mną trzęsie. Przecz mieczem nikt w łono/ -Ciosu mi śmierci nie zada?/ -O, ja nieszczęsny! O, biada mi! biada!/ -W toń nieszczęść sunę spienioną. - - - - -POSŁANIEC DRUGI - - - -W konaniu jeszcze za te wszystkie zgony/ -Na twoją głowę miotała przekleństwa. - - - - -KREON - -Jakimże ona skończyła sposobem? - - -POSŁANIEC DRUGI - - - -Żelazo w własnej utopiła piersi,/ -Słysząc o syna opłakanym końcu. - - - - -KREON - - - -O, biada! win mi nie ujmie nikt inny,/ -Nie ujmie męki ni kaźni./ -Ja bo nieszczęsny, ja twej śmierci winny./ -Nuże, o słudzy, wiedźcie mnie co raźniej,/ -Uwodźcie mnie stad; niech moim obliczem/ -Nie mierżę, ja, co mniej jestem, jak niczym! - - - - -CHÓR - - - -Zysku ty szukasz, jestli zysk w nieszczęściu,/ -Bo lżejsza klęska, co nie gnębi długo. - - - - -RozpaczKREON - - - -Błogosławiony dzień ów, który nędzy/ -Kres już ostatni położy,/ -Przybądź, o przybądź co prędzej,/ -Niechbym nie ujrzał jutrzejszej ja zorzy! - - - - -CHÓR - - - -To rzecz przyszłości, dla obecnej chwili/ -Trza działać; tamto obmyślić --- rzecz bogów. - - - - -KREON - -Wszystkie pragnienia w tym jednym zawarłem - - -CHÓR - - - -O nic nie błagaj, bo próżne marzenia,/ -By człowiek uszedł swego przeznaczenia. - - - - -KREON - - - -Wiedźcie mnie, sługi, uchodźcie stąd ze mną,/ -Mnie, który syna zabiłem wbrew woli/ -I tamtą. Biada! aż w oczach mi ciemno./ -Dokąd się zwrócić, gdzie spojrzeć w niedoli?/ -Wszystko mi łamie się w ręku,/ -Los mnie powalił, pełen burz i lęku. - - - - -CHÓR - - - -Nad szczęścia błysk, co złudą mar,/ -Najwyższy skarb rozumu dar./ -A wyzwie ten niechybny sąd,/ -Kto bogów lży i wali rząd./ -I ześlą oni swą zemstę i kary/ -Na pychę słowa w człowieku,/ -I w klęsk odmęcie rozumu i miary/ -W późnym nauczą go wieku. - - - - - - - - - - - - \ No newline at end of file diff --git a/apps/oai/tests/files/lubie-kiedy-kobieta.xml b/apps/oai/tests/files/lubie-kiedy-kobieta.xml deleted file mode 100755 index 7ea6f44b0..000000000 --- a/apps/oai/tests/files/lubie-kiedy-kobieta.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - -Przerwa-Tetmajer, Kazimierz -Lubię, kiedy kobieta... -Kozioł, Paweł -Niedziałkowska, Marta -Fundacja Nowoczesna Polska -Modernizm -Liryka -Wiersz -Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez Bibliotekę Śląską z egzemplarza pochodzącego ze zbiorów BŚ. -http://wolnelektury.pl/katalog/lektura/lubie-kiedy-kobieta -Kazimierz Przerwa-Tetmajer, Wybór poezji, nakł. Gebethnera i Wolffa, Warszawa-Kraków 1897 -Domena publiczna - Kazimierz Przerwa-Tetmajer zm. 1940 -1940 -xml -text -text -2010-10-12 -L -pol - - - - -Kazimierz Przerwa-Tetmajer - -Lubię, kiedy kobieta... - -Lubię, kiedy kobieta omdlewa w objęciu,/ -Kiedy w lubieżnym zwisa przez ramię przegięciu,/ -PożądanieGdy jej oczy zachodzą mgłą, twarz cała blednie,/ -I wargi się wilgotne rozchylą bezwiednie. - - - -Lubię, kiedy ją rozkosz i żądza oniemi,/ -Gdy wpija się w ramiona palcami drżącemi,/ -Gdy krótkim, urywanym oddycha oddechem,/ -I oddaje się cała z mdlejącym uśmiechem. - - - -WstydI lubię ten wstyd, co się kobiecie zabrania/ -Przyznać, że czuje rozkosz, że moc pożądania/ -Zwalcza ją, a sycenie żądzy oszaleniaoszaleniać (neol.) --- czynić szalonym.,/ -Gdy szuka ust, a lęka się słów i spojrzenia. - - - -Poeta, MizoginiaLubię to --- i tę chwilę lubię, gdy koło mnie/ -Wyczerpana, zmęczona leży nieprzytomnie,/ -A myśl moja już od niej wybiega skrzydlata/ -W nieskończone przestrzenie nieziemskiego świata. - - - - - - - - \ No newline at end of file diff --git a/apps/oai/tests/oaipmhapi.py b/apps/oai/tests/oaipmhapi.py deleted file mode 100644 index db57bc18b..000000000 --- a/apps/oai/tests/oaipmhapi.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from catalogue.test_utils import WLTestCase -from catalogue import models -from oai.handlers import * -from oaipmh.server import * -from os import path -from oaipmh.metadata import MetadataRegistry -from lxml import etree - - -class BookMetadataTest(WLTestCase): - def setUp(self): - super(BookMetadataTest, self).setUp() - xml = path.join(path.dirname(__file__), 'files/lubie-kiedy-kobieta.xml') - self.book = models.Book.from_xml_file(xml) - - xml = path.join(path.dirname(__file__), 'files/antygona.xml') - self.book2 = models.Book.from_xml_file(xml) - - mr = MetadataRegistry() - self.catalogue = Catalogue(mr) - - mr.registerWriter('oai_dc', oai_dc_writer) - nsmap = {'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI} - self.xml = XMLTreeServer(self.catalogue, mr, nsmap) - - def test_get_record(self): - self.xml.getRecord(identifier='lubie-kiedy-kobieta', - metadataPrefix='oai_dc') - self.xml.listRecords(metadataPrefix='oai_dc') - - def test_selecting(self): - records, token = self.catalogue.listRecords(**{'set': 'epoch:starozytnosc'}) diff --git a/apps/oai/urls.py b/apps/oai/urls.py deleted file mode 100644 index 13ea9f12a..000000000 --- a/apps/oai/urls.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - -urlpatterns = patterns('oai.views', - url(r'^$', 'oaipmh', name='oaipmh')) diff --git a/apps/oai/views.py b/apps/oai/views.py deleted file mode 100644 index 5bb902508..000000000 --- a/apps/oai/views.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from oai.handlers import Catalogue, NS_DCTERMS, nsdcterms -from oaipmh.server import ServerBase, NS_OAIDC, NS_DC, NS_XSI, nsoaidc, nsdc -from oaipmh.metadata import MetadataRegistry -from django.http import HttpResponse -from django.utils.functional import SimpleLazyObject -from lxml.etree import SubElement - - - -#ns_map = {'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI } - - -def fbc_oai_dc_writer(element, metadata): - """FBC notified us that original writer does not output all necessary namespace declarations. - """ - e_dc = SubElement(element, nsoaidc('dc'), - nsmap={'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI}) - e_dc.set('{%s}schemaLocation' % NS_XSI, - '%s http://www.openarchives.org/OAI/2.0/oai_dc.xsd' % NS_OAIDC) - map = metadata.getMap() - for name in [ - 'title', 'creator', 'subject', 'description', 'publisher', - 'contributor', 'date', 'type', 'format', 'identifier', - 'source', 'language', 'relation', 'coverage', 'rights', - ]: - for value in map.get(name, []): - e = SubElement(e_dc, nsdc(name)) - e.text = value - - -def qdc_writer(element, metadata): - """FBC notified us that original writer does not output all necessary namespace declarations. - """ - nsmap = {'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI, 'dcterms': NS_DCTERMS} - map = metadata.getMap() - for name in [ - 'title', 'creator', 'subject', 'description', 'publisher', - 'contributor', 'date', 'type', 'format', 'identifier', - 'source', 'language', 'relation', 'coverage', 'rights', - ]: - for value in map.get(name, []): - e = SubElement(element, nsdc(name), nsmap=nsmap) - e.text = value - - for name in ['hasPart', 'isPartOf']: - for value in map.get(name, []): - e = SubElement(element, nsdcterms(name), nsmap=nsmap) - e.text = value - - - -metadata_registry = MetadataRegistry() -metadata_registry.registerWriter('oai_dc', fbc_oai_dc_writer) -metadata_registry.registerWriter('qdc', qdc_writer) - - -server = SimpleLazyObject(lambda: - ServerBase(Catalogue(metadata_registry), metadata_registry, - {'topxsi': NS_XSI}) - ) - - -def oaipmh(request): - resp = server.handleRequest(request.GET) - return HttpResponse(resp, content_type='application/xml') diff --git a/apps/opds/__init__.py b/apps/opds/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/opds/tests/__init__.py b/apps/opds/tests/__init__.py deleted file mode 100755 index b1399aee7..000000000 --- a/apps/opds/tests/__init__.py +++ /dev/null @@ -1,66 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from unittest import skipIf -from lxml import etree -from django.conf import settings -from django.core.files.base import ContentFile -import catalogue -from catalogue.test_utils import (BookInfoStub, PersonStub, info_args, - WLTestCase, get_fixture) -from catalogue.models import Book -from librarian import WLURI, XMLNamespace -from search.index import Index, Search - -AtomNS = XMLNamespace("http://www.w3.org/2005/Atom") - - -@skipIf(getattr(settings, 'NO_SEARCH_INDEX', False), - u'Requires search server and NO_SEARCH_INDEX=False.') -class OpdsSearchTests(WLTestCase): - """Tests search feed in OPDS..""" - def setUp(self): - WLTestCase.setUp(self) - index = Index() - index.index.delete_all() - index.index.commit() - - self.do_doktora = Book.from_xml_file( - get_fixture('do-doktora.xml')) - self.do_anusie = Book.from_xml_file( - get_fixture('fraszka-do-anusie.xml', catalogue)) - - def assert_finds(self, query, books): - """Takes a query and tests against books expected to be found.""" - tree = etree.fromstring( - self.client.get('/opds/search/?%s' % query).content) - elem_ids = tree.findall('.//%s/%s' % (AtomNS('entry'), AtomNS('id'))) - slugs = [WLURI(elem.text).slug for elem in elem_ids] - self.assertEqual(set(slugs), set(b.slug for b in books), - u"OPDS search '%s' failed." % query) - - def test_opds_search_simple(self): - """Do a simple q= test, also emulate dumb OPDS clients.""" - both = set([self.do_doktora, self.do_anusie]) - self.assert_finds('q=fraszka', both) - self.assert_finds('q=fraszka&author={opds:author}', both) - - def test_opds_search_title(self): - """Search by title.""" - both = set([self.do_doktora, self.do_anusie]) - self.assert_finds('title=fraszka', both) - self.assert_finds('title=fraszka', both) - self.assert_finds('q=title:doktora', [self.do_doktora]) - - def test_opds_search_author(self): - """Search by author.""" - self.assert_finds('q=fraszka&author=Kochanowski', [self.do_doktora]) - self.assert_finds('q=fraszka+author:Kochanowski', [self.do_doktora]) - self.assert_finds('q=Kochanowski', [self.do_doktora]) - - def test_opds_search_translator(self): - """Search by translator.""" - self.assert_finds('q=fraszka&translator=Fikcyjny', [self.do_doktora]) - self.assert_finds('q=fraszka+translator:Fikcyjny', [self.do_doktora]) - self.assert_finds('q=Fikcyjny', [self.do_doktora]) diff --git a/apps/opds/tests/files/do-doktora.xml b/apps/opds/tests/files/do-doktora.xml deleted file mode 100644 index 53c172430..000000000 --- a/apps/opds/tests/files/do-doktora.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - -Kochanowski, Jan -Do doktora (Fraszka a doktor — to są dwie rzeczy przeciwne...) -http://wolnelektury.pl/lektura/fraszki-ksiegi-trzecie -Krzyżanowski, Julian -Otwinowska, Barbara -Sekuła, Aleksandra -Sutkowska, Olga -Gałecki, Dariusz -Fikcyjny, Tłumacz -Fundacja Nowoczesna Polska -Renesans -Liryka -Fraszka -Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez Bibliotekę Narodową z egzemplarza pochodzącego ze zbiorów BN. -http://wolnelektury.pl/katalog/lektura/fraszki-ksiegi-trzecie-do-doktora-fraszka-a-doktor-to-sa-dwi -http://www.polona.pl/dlibra/doccontent2?id=1499&from=editionindex&dirids=1 -Jan Kochanowski, Dzieła polskie, tom 1, Państwowy Instytut Wydawniczy, wyd. 8, Warszawa, 1976 -Domena publiczna - Jan Kochanowski zm. 1584 -1584 -xml -text -text -2007-09-07 -SP2 -G -L -pol -http://redakcja.wolnelektury.pl/media/dynamic/cover/image/607.jpg -Artondra Hall@Flickr, CC BY 2.0 -http://redakcja.wolnelektury.pl/cover/image/607 - - - - -Jan Kochanowski - -Fraszki, Księgi wtóre - -Do doktoraŻartobliwy ton każe przypuszczać, iż adresatem wierszyka jest Jakub Montanus (por. przyp. do fr. II 49). - - - -Fraszka a doktor --- to są dwie rzeczy przeciwne;/ -Przeto u mnie, doktorze, twe żądanie dziwne,/ -Że do mnie ślesz po fraszki, tak daleko k'temu;/ -Ja jednak dosyć czynię rozkazaniu twemu./ -Ty strzeż swojej powagi, nie baw się fraszkami,/ -Ale mi je odeśli prędkimi nogami,/ -A nie dziwuj się, że je tak drogo szacuję,/ -Bo chocia fraszki, przedsię w nich doktory czuję. - - - \ No newline at end of file diff --git a/apps/opds/urls.py b/apps/opds/urls.py deleted file mode 100644 index 00831f0b3..000000000 --- a/apps/opds/urls.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url -from opds.views import RootFeed, ByCategoryFeed, ByTagFeed, UserFeed, UserSetFeed, SearchFeed - - -urlpatterns = patterns('opds.views', - url(r'^$', RootFeed(), name="opds_authors"), - url(r'^search/$', SearchFeed(), name="opds_search"), - url(r'^user/$', UserFeed(), name="opds_user"), - url(r'^set/(?P[a-zA-Z0-9-]+)/$', UserSetFeed(), name="opds_user_set"), - url(r'^(?P[a-zA-Z0-9-]+)/$', ByCategoryFeed(), name="opds_by_category"), - url(r'^(?P[a-zA-Z0-9-]+)/(?P[a-zA-Z0-9-]+)/$', ByTagFeed(), name="opds_by_tag"), -) diff --git a/apps/opds/views.py b/apps/opds/views.py deleted file mode 100644 index c529e0272..000000000 --- a/apps/opds/views.py +++ /dev/null @@ -1,436 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import os.path -from urlparse import urljoin - -from django.contrib.syndication.views import Feed -from django.core.urlresolvers import reverse -from django.shortcuts import get_object_or_404 -from django.utils.feedgenerator import Atom1Feed -from django.conf import settings -from django.http import Http404 -from django.contrib.sites.models import Site -from django.utils.functional import lazy - -from basicauth import logged_in_or_basicauth, factory_decorator -from catalogue.models import Book, Tag - -from search.views import Search -import operator -import logging -import re - -log = logging.getLogger('opds') - -from stats.utils import piwik_track - -_root_feeds = ( - { - u"category": u"", - u"link": u"opds_user", - u"link_args": [], - u"title": u"Moje półki", - u"description": u"Półki użytkownika dostępne po zalogowaniu" - }, - { - u"category": u"author", - u"link": u"opds_by_category", - u"link_args": [u"author"], - u"title": u"Autorzy", - u"description": u"Utwory wg autorów" - }, - { - u"category": u"kind", - u"link": u"opds_by_category", - u"link_args": [u"kind"], - u"title": u"Rodzaje", - u"description": u"Utwory wg rodzajów" - }, - { - u"category": u"genre", - u"link": u"opds_by_category", - u"link_args": [u"genre"], - u"title": u"Gatunki", - u"description": u"Utwory wg gatunków" - }, - { - u"category": u"epoch", - u"link": u"opds_by_category", - u"link_args": [u"epoch"], - u"title": u"Epoki", - u"description": u"Utwory wg epok" - }, -) - - -current_domain = lazy(lambda: Site.objects.get_current().domain, str)() -def full_url(url): - return urljoin("http://%s" % current_domain, url) - - -class OPDSFeed(Atom1Feed): - link_rel = u"subsection" - link_type = u"application/atom+xml" - - _book_parent_img = lazy(lambda: full_url(os.path.join(settings.STATIC_URL, "img/book-parent.png")), str)() - try: - _book_parent_img_size = unicode(os.path.getsize(os.path.join(settings.STATIC_ROOT, "img/book-parent.png"))) - except: - _book_parent_img_size = '' - - _book_img = lazy(lambda: full_url(os.path.join(settings.STATIC_URL, "img/book.png")), str)() - try: - _book_img_size = unicode(os.path.getsize(os.path.join(settings.STATIC_ROOT, "img/book.png"))) - except: - _book_img_size = '' - - - def add_root_elements(self, handler): - super(OPDSFeed, self).add_root_elements(handler) - handler.addQuickElement(u"link", None, - {u"href": reverse("opds_authors"), - u"rel": u"start", - u"type": u"application/atom+xml"}) - handler.addQuickElement(u"link", None, - {u"href": full_url(os.path.join(settings.STATIC_URL, "opensearch.xml")), - u"rel": u"search", - u"type": u"application/opensearchdescription+xml"}) - - - def add_item_elements(self, handler, item): - """ modified from Atom1Feed.add_item_elements """ - handler.addQuickElement(u"title", item['title']) - - # add a OPDS Navigation link if there's no enclosure - if item['enclosure'] is None: - handler.addQuickElement(u"link", u"", {u"href": item['link'], u"rel": u"subsection", u"type": u"application/atom+xml"}) - # add a "green book" icon - handler.addQuickElement(u"link", '', - {u"rel": u"http://opds-spec.org/thumbnail", - u"href": self._book_parent_img, - u"length": self._book_parent_img_size, - u"type": u"image/png"}) - if item['pubdate'] is not None: - # FIXME: rfc3339_date is undefined, is this ever run? - handler.addQuickElement(u"updated", rfc3339_date(item['pubdate']).decode('utf-8')) - - # Author information. - if item['author_name'] is not None: - handler.startElement(u"author", {}) - handler.addQuickElement(u"name", item['author_name']) - if item['author_email'] is not None: - handler.addQuickElement(u"email", item['author_email']) - if item['author_link'] is not None: - handler.addQuickElement(u"uri", item['author_link']) - handler.endElement(u"author") - - # Unique ID. - if item['unique_id'] is not None: - unique_id = item['unique_id'] - else: - # FIXME: get_tag_uri is undefined, is this ever run? - unique_id = get_tag_uri(item['link'], item['pubdate']) - handler.addQuickElement(u"id", unique_id) - - # Summary. - # OPDS needs type=text - if item['description'] is not None: - handler.addQuickElement(u"summary", item['description'], {u"type": u"text"}) - - # Enclosure as OPDS Acquisition Link - if item['enclosure'] is not None: - handler.addQuickElement(u"link", '', - {u"rel": u"http://opds-spec.org/acquisition", - u"href": item['enclosure'].url, - u"length": item['enclosure'].length, - u"type": item['enclosure'].mime_type}) - # add a "red book" icon - handler.addQuickElement(u"link", '', - {u"rel": u"http://opds-spec.org/thumbnail", - u"href": self._book_img, - u"length": self._book_img_size, - u"type": u"image/png"}) - - # Categories. - for cat in item['categories']: - handler.addQuickElement(u"category", u"", {u"term": cat}) - - # Rights. - if item['item_copyright'] is not None: - handler.addQuickElement(u"rights", item['item_copyright']) - - -class AcquisitionFeed(Feed): - feed_type = OPDSFeed - link = u'http://www.wolnelektury.pl/' - item_enclosure_mime_type = "application/epub+zip" - author_name = u"Wolne Lektury" - author_link = u"http://www.wolnelektury.pl/" - - def item_title(self, book): - return book.title - - def item_description(self): - return u'' - - def item_link(self, book): - return book.get_absolute_url() - - def item_author_name(self, book): - try: - return book.tags.filter(category='author')[0].name - except KeyError: - return u'' - - def item_author_link(self, book): - try: - return book.tags.filter(category='author')[0].get_absolute_url() - except KeyError: - return u'' - - def item_enclosure_url(self, book): - return full_url(book.epub_file.url) if book.epub_file else None - - def item_enclosure_length(self, book): - return book.epub_file.size if book.epub_file else None - -@piwik_track -class RootFeed(Feed): - feed_type = OPDSFeed - title = u'Wolne Lektury' - link = u'http://wolnelektury.pl/' - description = u"Spis utworów na stronie http://WolneLektury.pl" - author_name = u"Wolne Lektury" - author_link = u"http://wolnelektury.pl/" - - def items(self): - return _root_feeds - - def item_title(self, item): - return item['title'] - - def item_link(self, item): - return reverse(item['link'], args=item['link_args']) - - def item_description(self, item): - return item['description'] - -@piwik_track -class ByCategoryFeed(Feed): - feed_type = OPDSFeed - link = u'http://wolnelektury.pl/' - description = u"Spis utworów na stronie http://WolneLektury.pl" - author_name = u"Wolne Lektury" - author_link = u"http://wolnelektury.pl/" - - def get_object(self, request, category): - feed = [feed for feed in _root_feeds if feed['category'] == category] - if feed: - feed = feed[0] - else: - raise Http404 - - return feed - - def title(self, feed): - return feed['title'] - - def items(self, feed): - return Tag.objects.filter(category=feed['category']).exclude(items=None) - - def item_title(self, item): - return item.name - - def item_link(self, item): - return reverse("opds_by_tag", args=[item.category, item.slug]) - - def item_description(self): - return u'' - -@piwik_track -class ByTagFeed(AcquisitionFeed): - def link(self, tag): - return tag.get_absolute_url() - - def title(self, tag): - return tag.name - - def description(self, tag): - return u"Spis utworów na stronie http://WolneLektury.pl" - - def get_object(self, request, category, slug): - return get_object_or_404(Tag, category=category, slug=slug) - - def items(self, tag): - return Book.tagged_top_level([tag]) - - -@factory_decorator(logged_in_or_basicauth()) -@piwik_track -class UserFeed(Feed): - feed_type = OPDSFeed - link = u'http://www.wolnelektury.pl/' - description = u"Półki użytkownika na stronie http://WolneLektury.pl" - author_name = u"Wolne Lektury" - author_link = u"http://wolnelektury.pl/" - - def get_object(self, request): - return request.user - - def title(self, user): - return u"Półki użytkownika %s" % user.username - - def items(self, user): - return Tag.objects.filter(category='set', user=user).exclude(items=None) - - def item_title(self, item): - return item.name - - def item_link(self, item): - return reverse("opds_user_set", args=[item.slug]) - - def item_description(self): - return u'' - - -@factory_decorator(logged_in_or_basicauth()) -@piwik_track -class UserSetFeed(AcquisitionFeed): - def link(self, tag): - return tag.get_absolute_url() - - def title(self, tag): - return tag.name - - def description(self, tag): - return u"Spis utworów na stronie http://WolneLektury.pl" - - def get_object(self, request, slug): - return get_object_or_404(Tag, category='set', slug=slug, user=request.user) - - def items(self, tag): - return Book.tagged.with_any([tag]) - - -@piwik_track -class SearchFeed(AcquisitionFeed): - description = u"Wyniki wyszukiwania na stronie WolneLektury.pl" - title = u"Wyniki wyszukiwania" - - QUOTE_OR_NOT = r'(?:(?=["])"([^"]+)"|([^ ]+))' - INLINE_QUERY_RE = re.compile( - r"author:" + QUOTE_OR_NOT + - "|translator:" + QUOTE_OR_NOT + - "|title:" + QUOTE_OR_NOT + - "|categories:" + QUOTE_OR_NOT + - "|description:" + QUOTE_OR_NOT + - "|text:" + QUOTE_OR_NOT - ) - MATCHES = { - 'author': (0, 1), - 'translator': (2, 3), - 'title': (4, 5), - 'categories': (6, 7), - 'description': (8, 9), - 'text': (10, 11), - } - - PARAMS_TO_FIELDS = { - 'author': 'authors', - 'translator': 'translators', - # 'title': 'title', - 'categories': 'tag_name_pl', - 'description': 'text', - # 'text': 'text', - } - - ATOM_PLACEHOLDER = re.compile(r"^{(atom|opds):\w+}$") - - def get_object(self, request): - """ - For OPDS 1.1 We should handle a query for search terms - and criteria provided either as opensearch or 'inline' query. - OpenSearch defines fields: atom:author, atom:contributor (treated as translator), - atom:title. Inline query provides author, title, categories (treated as book tags), - description (treated as content search terms). - - if search terms are provided, we shall search for books - according to Hint information (from author & contributror & title). - - but if search terms are empty, we should do a different search - (perhaps for is_book=True) - - """ - - query = request.GET.get('q', '') - - inline_criteria = re.findall(self.INLINE_QUERY_RE, query) - if inline_criteria: - remains = re.sub(self.INLINE_QUERY_RE, '', query) - remains = re.sub(r'[ \t]+', ' ', remains) - - def get_criteria(criteria, name): - for c in criteria: - for p in self.MATCHES[name]: - if c[p]: - if p % 2 == 0: - return c[p].replace('+', ' ') - return c[p] - return None - - criteria = dict(map( - lambda cn: (cn, get_criteria(inline_criteria, cn)), - ['author', 'translator', 'title', 'categories', - 'description', 'text'])) - query = remains - # empty query and text set case? - log.debug("Inline query = [%s], criteria: %s" % (query, criteria)) - else: - def remove_dump_data(val): - """Some clients don't get opds placeholders and just send them.""" - if self.ATOM_PLACEHOLDER.match(val): - return '' - return val - - criteria = dict([(cn, remove_dump_data(request.GET.get(cn, ''))) - for cn in self.MATCHES.keys()]) - # query is set above. - log.debug("Inline query = [%s], criteria: %s" % (query, criteria)) - - srch = Search() - - book_hit_filter = srch.index.Q(book_id__any=True) - filters = [book_hit_filter] + [srch.index.Q( - **{self.PARAMS_TO_FIELDS.get(cn, cn): criteria[cn]} - ) for cn in self.MATCHES.keys() if cn in criteria - if criteria[cn]] - - if query: - q = srch.index.query( - reduce(operator.or_, - [srch.index.Q(**{self.PARAMS_TO_FIELDS.get(cn, cn): query}) - for cn in self.MATCHES.keys()], - srch.index.Q())) - else: - q = srch.index.query(srch.index.Q()) - - q = srch.apply_filters(q, filters).field_limit(score=True, fields=['book_id']) - results = q.execute() - - book_scores = dict([(r['book_id'], r['score']) for r in results]) - books = Book.objects.filter(id__in=set([r['book_id'] for r in results])) - books = list(books) - books.sort(reverse=True, key=lambda book: book_scores[book.id]) - return books - - def get_link(self, query): - return "%s?q=%s" % (reverse('search'), query) - - def items(self, books): - try: - return books - except ValueError: - # too short a query - return [] diff --git a/apps/pdcounter/__init__.py b/apps/pdcounter/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/pdcounter/admin.py b/apps/pdcounter/admin.py deleted file mode 100644 index e2e3fc310..000000000 --- a/apps/pdcounter/admin.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin - -from pdcounter.models import BookStub, Author - - -class BookStubAdmin(admin.ModelAdmin): - list_display = ('title', 'author', 'slug', 'pd') - search_fields = ('title', 'author') - ordering = ('title',) - - prepopulated_fields = {'slug': ('title',)} - -class AuthorAdmin(admin.ModelAdmin): - list_display = ('name', 'slug', 'death') - search_fields = ('name',) - ordering = ('sort_key', 'name') - - prepopulated_fields = {'slug': ('name',), 'sort_key': ('name',),} - - -admin.site.register(BookStub, BookStubAdmin) -admin.site.register(Author, AuthorAdmin) diff --git a/apps/pdcounter/fixtures/lista.json b/apps/pdcounter/fixtures/lista.json deleted file mode 100644 index b73b5433e..000000000 --- a/apps/pdcounter/fixtures/lista.json +++ /dev/null @@ -1,9699 +0,0 @@ -[ - { - "pk": 1, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "amiel", - "slug": "irit-amiel", - "gazeta_link": "", - "name": "Irit Amiel" - } - }, - { - "pk": 2, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "anczyc", - "slug": "wladyslaw-anczyc", - "gazeta_link": "", - "name": "W\u0142adys\u0142aw Anczyc" - } - }, - { - "pk": 3, - "model": "pdcounter.author", - "fields": { - "death": 1944, - "description": "", - "wiki_link": "", - "sort_key": "baczynski", - "slug": "krzysztof-kamil-baczynski", - "gazeta_link": "", - "name": "Krzysztof Kamil Baczy\u0144ski" - } - }, - { - "pk": 4, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "balucki", - "slug": "michal-balucki", - "gazeta_link": "", - "name": "Micha\u0142 Ba\u0142ucki" - } - }, - { - "pk": 5, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "baranczak", - "slug": "stanislaw-baranczak", - "gazeta_link": "", - "name": "Stanis\u0142aw Bara\u0144czak" - } - }, - { - "pk": 6, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "bedier", - "slug": "joseph-bedier", - "gazeta_link": "", - "name": "Joseph B\u00e9dier" - } - }, - { - "pk": 7, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "belza", - "slug": "wladyslaw-belza", - "gazeta_link": "", - "name": "W\u0142adys\u0142aw Be\u0142za" - } - }, - { - "pk": 8, - "model": "pdcounter.author", - "fields": { - "death": 1983, - "description": "", - "wiki_link": "", - "sort_key": "bialoszewski", - "slug": "miron-bialoszewski", - "gazeta_link": "", - "name": "Miron Bia\u0142oszewski" - } - }, - { - "pk": 9, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "bielowski", - "slug": "august-bielowski", - "gazeta_link": "", - "name": "August Bielowski" - } - }, - { - "pk": 10, - "model": "pdcounter.author", - "fields": { - "death": 2009, - "description": "", - "wiki_link": "", - "sort_key": "blonski", - "slug": "jan-blonski", - "gazeta_link": "", - "name": "Jan B\u0142o\u0144ski" - } - }, - { - "pk": 11, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "bordkiewicz", - "slug": "stefan-bordkiewicz", - "gazeta_link": "", - "name": "Stefan Bordkiewicz" - } - }, - { - "pk": 12, - "model": "pdcounter.author", - "fields": { - "death": 1951, - "description": "", - "wiki_link": "", - "sort_key": "borowski", - "slug": "tadeusz-borowski", - "gazeta_link": "", - "name": "Tadeusz Borowski" - } - }, - { - "pk": 13, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "bracia", - "slug": "grimm-bracia", - "gazeta_link": "", - "name": "Grimm Bracia" - } - }, - { - "pk": 14, - "model": "pdcounter.author", - "fields": { - "death": 1966, - "description": "", - "wiki_link": "", - "sort_key": "brzechwa", - "slug": "jan-brzechwa", - "gazeta_link": "", - "name": "Jan Brzechwa" - } - }, - { - "pk": 15, - "model": "pdcounter.author", - "fields": { - "death": 1940, - "description": "", - "wiki_link": "", - "sort_key": "bulhakow", - "slug": "michal-bulhakow", - "gazeta_link": "", - "name": "Micha\u0142 Bu\u0142hakow" - } - }, - { - "pk": 16, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "burnett", - "slug": "frances-hodgson-burnett", - "gazeta_link": "", - "name": "Frances Hodgson Burnett" - } - }, - { - "pk": 17, - "model": "pdcounter.author", - "fields": { - "death": 1960, - "description": "", - "wiki_link": "", - "sort_key": "camus", - "slug": "albert-camus", - "gazeta_link": "", - "name": "Albert Camus" - } - }, - { - "pk": 18, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "cervantes", - "slug": "miguel-cervantes", - "gazeta_link": "", - "name": "Miguel Cervantes" - } - }, - { - "pk": 19, - "model": "pdcounter.author", - "fields": { - "death": 1976, - "description": "", - "wiki_link": "", - "sort_key": "christie", - "slug": "agatha-christie", - "gazeta_link": "", - "name": "Agatha Christie" - } - }, - { - "pk": 20, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "chwin", - "slug": "stefan-chwin", - "gazeta_link": "", - "name": "Stefan Chwin" - } - }, - { - "pk": 21, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "collodi", - "slug": "carlo-collodi", - "gazeta_link": "", - "name": "Carlo Collodi" - } - }, - { - "pk": 22, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "conrad", - "slug": "joseph-conrad", - "gazeta_link": "", - "name": "Joseph Conrad" - } - }, - { - "pk": 23, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "czechowicz", - "slug": "jozef-czechowicz", - "gazeta_link": "", - "name": "J\u00f3zef Czechowicz" - } - }, - { - "pk": 24, - "model": "pdcounter.author", - "fields": { - "death": 1965, - "description": "", - "wiki_link": "", - "sort_key": "dabrowska", - "slug": "maria-dabrowska", - "gazeta_link": "", - "name": "Maria D\u0105browska" - } - }, - { - "pk": 25, - "model": "pdcounter.author", - "fields": { - "death": 1990, - "description": "", - "wiki_link": "", - "sort_key": "dahl", - "slug": "ronald-dahl", - "gazeta_link": "", - "name": "Ronald Dahl" - } - }, - { - "pk": 26, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "dennhoff-czarnocki", - "slug": "waclaw-dennhoff-czarnocki", - "gazeta_link": "", - "name": "Wac\u0142aw Dennhoff-Czarnocki" - } - }, - { - "pk": 27, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "dmowski", - "slug": "roman-dmowski", - "gazeta_link": "", - "name": "Roman Dmowski" - } - }, - { - "pk": 28, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "dolega-mostowicz", - "slug": "tadeusz-dolega-mostowicz", - "gazeta_link": "", - "name": "Tadeusz Do\u0142\u0119ga-Mostowicz" - } - }, - { - "pk": 29, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "dostojewski", - "slug": "fiodor-dostojewski", - "gazeta_link": "", - "name": "Fiodor Dostojewski" - } - }, - { - "pk": 30, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "eco", - "slug": "umberto-eco", - "gazeta_link": "", - "name": "Umberto Eco" - } - }, - { - "pk": 31, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "erynbergh", - "slug": "gustawa-erynbergh", - "gazeta_link": "", - "name": "Gustawa Erynbergh" - } - }, - { - "pk": 32, - "model": "pdcounter.author", - "fields": { - "death": 1985, - "description": "", - "wiki_link": "", - "sort_key": "fiedler", - "slug": "arkady-fiedler", - "gazeta_link": "", - "name": "Arkady Fiedler" - } - }, - { - "pk": 33, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "fink", - "slug": "ida-fink", - "gazeta_link": "", - "name": "Ida Fink" - } - }, - { - "pk": 34, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "flaubert", - "slug": "gustaw-flaubert", - "gazeta_link": "", - "name": "Gustaw Flaubert" - } - }, - { - "pk": 35, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "fredro", - "slug": "aleksander-fredro", - "gazeta_link": "", - "name": "Aleksander Fredro" - } - }, - { - "pk": 36, - "model": "pdcounter.author", - "fields": { - "death": 1953, - "description": "", - "wiki_link": "", - "sort_key": "galczynski", - "slug": "konstanty-ildefons-galczynski", - "gazeta_link": "", - "name": "Konstanty Ildefons Ga\u0142czy\u0144ski" - } - }, - { - "pk": 37, - "model": "pdcounter.author", - "fields": { - "death": 1969, - "description": "", - "wiki_link": "", - "sort_key": "gombrowicz", - "slug": "witold-gombrowicz", - "gazeta_link": "", - "name": "Witold Gombrowicz" - } - }, - { - "pk": 38, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "gomulicki", - "slug": "wiktor-gomulicki", - "gazeta_link": "", - "name": "Wiktor Gomulicki" - } - }, - { - "pk": 39, - "model": "pdcounter.author", - "fields": { - "death": 1977, - "description": "", - "wiki_link": "", - "sort_key": "goscinny", - "slug": "rene-goscinny", - "gazeta_link": "", - "name": "Ren\u00e9 Goscinny" - } - }, - { - "pk": 40, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "grabinski", - "slug": "stefan-grabinski", - "gazeta_link": "", - "name": "Stefan Grabi\u0144ski" - } - }, - { - "pk": 41, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "grass", - "slug": "guenter-grass", - "gazeta_link": "", - "name": "G\u00fcnter Grass" - } - }, - { - "pk": 42, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "grynberg", - "slug": "henryk-grynberg", - "gazeta_link": "", - "name": "Henryk Grynberg" - } - }, - { - "pk": 43, - "model": "pdcounter.author", - "fields": { - "death": 1998, - "description": "", - "wiki_link": "", - "sort_key": "herbert", - "slug": "zbigniew-herbert", - "gazeta_link": "", - "name": "Zbigniew Herbert" - } - }, - { - "pk": 44, - "model": "pdcounter.author", - "fields": { - "death": 2000, - "description": "", - "wiki_link": "", - "sort_key": "herling-grudzinski", - "slug": "gustaw-herling-grudzinski", - "gazeta_link": "", - "name": "Gustaw Herling-Grudzi\u0144ski" - } - }, - { - "pk": 45, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "homer", - "slug": "homer", - "gazeta_link": "", - "name": "Homer" - } - }, - { - "pk": 46, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "horacy", - "slug": "horacy", - "gazeta_link": "", - "name": "Horacy" - } - }, - { - "pk": 47, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "huelle", - "slug": "pawel-huelle", - "gazeta_link": "", - "name": "Pawe\u0142 Huelle" - } - }, - { - "pk": 48, - "model": "pdcounter.author", - "fields": { - "death": 1980, - "description": "", - "wiki_link": "", - "sort_key": "iwaszkiewicz", - "slug": "jaroslaw-iwaszkiewicz", - "gazeta_link": "", - "name": "Jaros\u0142aw Iwaszkiewicz" - } - }, - { - "pk": 49, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "jachowicz", - "slug": "stanislaw-jachowicz", - "gazeta_link": "", - "name": "Stanis\u0142aw Jachowicz" - } - }, - { - "pk": 50, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "janion", - "slug": "maria-janion", - "gazeta_link": "", - "name": "Maria Janion" - } - }, - { - "pk": 51, - "model": "pdcounter.author", - "fields": { - "death": 1983, - "description": "", - "wiki_link": "", - "sort_key": "jastrun", - "slug": "mieczyslaw-jastrun", - "gazeta_link": "", - "name": "Mieczys\u0142aw Jastrun" - } - }, - { - "pk": 52, - "model": "pdcounter.author", - "fields": { - "death": 2003, - "description": "", - "wiki_link": "", - "sort_key": "jurgielewiczowa", - "slug": "irena-jurgielewiczowa", - "gazeta_link": "", - "name": "Irena Jurgielewiczowa" - } - }, - { - "pk": 53, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "kafka", - "slug": "franz-kafka", - "gazeta_link": "", - "name": "Franz Kafka" - } - }, - { - "pk": 54, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "kakolewski", - "slug": "krzysztof-kakolewski", - "gazeta_link": "", - "name": "Krzysztof K\u0105kolewski" - } - }, - { - "pk": 55, - "model": "pdcounter.author", - "fields": { - "death": 1978, - "description": "", - "wiki_link": "", - "sort_key": "kaminski", - "slug": "aleksander-kaminski", - "gazeta_link": "", - "name": "Aleksander Kami\u0144ski" - } - }, - { - "pk": 56, - "model": "pdcounter.author", - "fields": { - "death": 2007, - "description": "", - "wiki_link": "", - "sort_key": "kapuscinski", - "slug": "ryszard-kapuscinski", - "gazeta_link": "", - "name": "Ryszard Kapu\u015bci\u0144ski" - } - }, - { - "pk": 57, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "karpinski", - "slug": "franciszek-karpinski", - "gazeta_link": "", - "name": "Franciszek Karpi\u0144ski" - } - }, - { - "pk": 58, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "kasdepke", - "slug": "grzegorz-kasdepke", - "gazeta_link": "", - "name": "Grzegorz Kasdepke" - } - }, - { - "pk": 59, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "kasprowicz", - "slug": "jan-kasprowicz", - "gazeta_link": "", - "name": "Jan Kasprowicz" - } - }, - { - "pk": 60, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "kochanowski", - "slug": "jan-kochanowski", - "gazeta_link": "", - "name": "Jan Kochanowski" - } - }, - { - "pk": 61, - "model": "pdcounter.author", - "fields": { - "death": 2009, - "description": "", - "wiki_link": "", - "sort_key": "kolakowski", - "slug": "leszek-kolakowski", - "gazeta_link": "", - "name": "Leszek Ko\u0142akowski" - } - }, - { - "pk": 62, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "kolberg", - "slug": "oskar-kolberg", - "gazeta_link": "", - "name": "Oskar Kolberg" - } - }, - { - "pk": 63, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "konopnicka", - "slug": "maria-konopnicka", - "gazeta_link": "", - "name": "Maria Konopnicka" - } - }, - { - "pk": 64, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "konwicki", - "slug": "tadeusz-konwicki", - "gazeta_link": "", - "name": "Tadeusz Konwicki" - } - }, - { - "pk": 65, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "kowalski", - "slug": "franciszek-kowalski", - "gazeta_link": "", - "name": "Franciszek Kowalski" - } - }, - { - "pk": 66, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "kozakiewicz", - "slug": "jan-kozakiewicz", - "gazeta_link": "", - "name": "Jan Kozakiewicz" - } - }, - { - "pk": 67, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "krall", - "slug": "hanna-krall", - "gazeta_link": "", - "name": "Hanna Krall" - } - }, - { - "pk": 68, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "krasicki", - "slug": "ignacy-krasicki", - "gazeta_link": "", - "name": "Ignacy Krasicki" - } - }, - { - "pk": 69, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "krasinski", - "slug": "zygmunt-krasinski", - "gazeta_link": "", - "name": "Zygmunt Krasi\u0144ski" - } - }, - { - "pk": 70, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "kraszewski", - "slug": "ignacy-kraszewski", - "gazeta_link": "", - "name": "Ignacy Kraszewski" - } - }, - { - "pk": 71, - "model": "pdcounter.author", - "fields": { - "death": 2004, - "description": "", - "wiki_link": "", - "sort_key": "kubiak", - "slug": "zygmunt-kubiak", - "gazeta_link": "", - "name": "Zygmunt Kubiak" - } - }, - { - "pk": 72, - "model": "pdcounter.author", - "fields": { - "death": 1989, - "description": "", - "wiki_link": "", - "sort_key": "kuncewiczowa", - "slug": "maria-kuncewiczowa", - "gazeta_link": "", - "name": "Maria Kuncewiczowa" - } - }, - { - "pk": 73, - "model": "pdcounter.author", - "fields": { - "death": 1993, - "description": "", - "wiki_link": "", - "sort_key": "kusniewicz", - "slug": "andrzej-kusniewicz", - "gazeta_link": "", - "name": "Andrzej Ku\u015bniewicz" - } - }, - { - "pk": 74, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "le-guin", - "slug": "ursula-le-guin", - "gazeta_link": "", - "name": "Ursula Le Guin" - } - }, - { - "pk": 75, - "model": "pdcounter.author", - "fields": { - "death": 1956, - "description": "", - "wiki_link": "", - "sort_key": "lechon", - "slug": "jan-lechon", - "gazeta_link": "", - "name": "Jan Lecho\u0144" - } - }, - { - "pk": 76, - "model": "pdcounter.author", - "fields": { - "death": 2006, - "description": "", - "wiki_link": "", - "sort_key": "lem", - "slug": "stanislaw-lem", - "gazeta_link": "", - "name": "Stanis\u0142aw Lem" - } - }, - { - "pk": 77, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "lenartowicz", - "slug": "teofil-lenartowicz", - "gazeta_link": "", - "name": "Teofil Lenartowicz" - } - }, - { - "pk": 78, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "lesmian", - "slug": "boleslaw-lesmian", - "gazeta_link": "", - "name": "Boles\u0142aw Le\u015bmian" - } - }, - { - "pk": 79, - "model": "pdcounter.author", - "fields": { - "death": 1963, - "description": "", - "wiki_link": "", - "sort_key": "lewis", - "slug": "clive-staples-lewis", - "gazeta_link": "", - "name": "Clive Staples Lewis" - } - }, - { - "pk": 80, - "model": "pdcounter.author", - "fields": { - "death": 2002, - "description": "", - "wiki_link": "", - "sort_key": "lindgren", - "slug": "astrid-lindgren", - "gazeta_link": "", - "name": "Astrid Lindgren" - } - }, - { - "pk": 81, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "lipska", - "slug": "ewa-lipska", - "gazeta_link": "", - "name": "Ewa Lipska" - } - }, - { - "pk": 82, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "lubinski", - "slug": "ludwik-pomian-lubinski", - "gazeta_link": "", - "name": "Ludwik Pomian \u0141ubi\u0144ski" - } - }, - { - "pk": 83, - "model": "pdcounter.author", - "fields": { - "death": 1985, - "description": "", - "wiki_link": "", - "sort_key": "mackiewicz", - "slug": "jozef-mackiewicz", - "gazeta_link": "", - "name": "J\u00f3zef Mackiewicz" - } - }, - { - "pk": 84, - "model": "pdcounter.author", - "fields": { - "death": 1953, - "description": "", - "wiki_link": "", - "sort_key": "makuszynski", - "slug": "kornel-makuszynski", - "gazeta_link": "", - "name": "Kornel Makuszy\u0144ski" - } - }, - { - "pk": 85, - "model": "pdcounter.author", - "fields": { - "death": 1955, - "description": "", - "wiki_link": "", - "sort_key": "mann", - "slug": "thomas-mann", - "gazeta_link": "", - "name": "Thomas Mann" - } - }, - { - "pk": 86, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "marquez", - "slug": "gabriel-garcia-marquez", - "gazeta_link": "", - "name": "Gabriel Garcia Marquez" - } - }, - { - "pk": 87, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "mickiewicz", - "slug": "adam-mickiewicz", - "gazeta_link": "", - "name": "Adam Mickiewicz" - } - }, - { - "pk": 88, - "model": "pdcounter.author", - "fields": { - "death": 2004, - "description": "", - "wiki_link": "", - "sort_key": "milosz", - "slug": "czeslaw-milosz", - "gazeta_link": "", - "name": "Czes\u0142aw Mi\u0142osz" - } - }, - { - "pk": 89, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "minkowski", - "slug": "aleksander-minkowski", - "gazeta_link": "", - "name": "Aleksander Minkowski" - } - }, - { - "pk": 90, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "moliere", - "slug": "moliere", - "gazeta_link": "", - "name": "Moli\u00e8re" - } - }, - { - "pk": 91, - "model": "pdcounter.author", - "fields": { - "death": 1952, - "description": "", - "wiki_link": "", - "sort_key": "molnar", - "slug": "ferenc-molnar", - "gazeta_link": "", - "name": "Ferenc Moln\u00e1r" - } - }, - { - "pk": 92, - "model": "pdcounter.author", - "fields": { - "death": 1942, - "description": "", - "wiki_link": "", - "sort_key": "montgomery", - "slug": "lucy-maud-montgomery", - "gazeta_link": "", - "name": "Lucy Maud Montgomery" - } - }, - { - "pk": 93, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "morsztyn", - "slug": "jan-andrzej-morsztyn", - "gazeta_link": "", - "name": "Jan Andrzej Morsztyn" - } - }, - { - "pk": 94, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "morsztyn", - "slug": "zbigniew-morsztyn", - "gazeta_link": "", - "name": "Zbigniew Morsztyn" - } - }, - { - "pk": 95, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "mrozek", - "slug": "slawomir-mrozek", - "gazeta_link": "", - "name": "S\u0142awomir Mro\u017cek" - } - }, - { - "pk": 96, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "musierowicz", - "slug": "malgorzata-musierowicz", - "gazeta_link": "", - "name": "Ma\u0142gorzata Musierowicz" - } - }, - { - "pk": 97, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "mysliwski", - "slug": "wieslaw-mysliwski", - "gazeta_link": "", - "name": "Wies\u0142aw My\u015bliwski" - } - }, - { - "pk": 98, - "model": "pdcounter.author", - "fields": { - "death": 1977, - "description": "", - "wiki_link": "", - "sort_key": "nabokov", - "slug": "vladimir-nabokov", - "gazeta_link": "", - "name": "Vladimir Nabokov" - } - }, - { - "pk": 99, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "naborowski", - "slug": "daniel-naborowski", - "gazeta_link": "", - "name": "Daniel Naborowski" - } - }, - { - "pk": 100, - "model": "pdcounter.author", - "fields": { - "death": 1954, - "description": "", - "wiki_link": "", - "sort_key": "nalkowska", - "slug": "zofia-nalkowska", - "gazeta_link": "", - "name": "Zofia Na\u0142kowska" - } - }, - { - "pk": 101, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "niemcewicz", - "slug": "julian-ursyn-niemcewicz", - "gazeta_link": "", - "name": "Julian Ursyn Niemcewicz" - } - }, - { - "pk": 102, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "niziurski", - "slug": "edmund-niziurski", - "gazeta_link": "", - "name": "Edmund Niziurski" - } - }, - { - "pk": 103, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "norwid", - "slug": "cyprian-kamil-norwid", - "gazeta_link": "", - "name": "Cyprian Kamil Norwid" - } - }, - { - "pk": 104, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "nowakowski", - "slug": "marek-nowakowski", - "gazeta_link": "", - "name": "Marek Nowakowski" - } - }, - { - "pk": 105, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "olech", - "slug": "joanna-olech", - "gazeta_link": "", - "name": "Joanna Olech" - } - }, - { - "pk": 106, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "onichimowska", - "slug": "anna-onichimowska", - "gazeta_link": "", - "name": "Anna Onichimowska" - } - }, - { - "pk": 107, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "oppman", - "slug": "artur-oppman", - "gazeta_link": "", - "name": "Artur Oppman" - } - }, - { - "pk": 108, - "model": "pdcounter.author", - "fields": { - "death": 1950, - "description": "", - "wiki_link": "", - "sort_key": "orwell", - "slug": "george-orwell", - "gazeta_link": "", - "name": "George Orwell" - } - }, - { - "pk": 109, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "orzeszkowa", - "slug": "eliza-orzeszkowa", - "gazeta_link": "", - "name": "Eliza Orzeszkowa" - } - }, - { - "pk": 110, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "ostrowska", - "slug": "bronislawa-ostrowska", - "gazeta_link": "", - "name": "Bronis\u0142awa Ostrowska" - } - }, - { - "pk": 111, - "model": "pdcounter.author", - "fields": { - "death": 1978, - "description": "", - "wiki_link": "", - "sort_key": "parandowski", - "slug": "jan-parandowski", - "gazeta_link": "", - "name": "Jan Parandowski" - } - }, - { - "pk": 112, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "pasek", - "slug": "jan-chryzostom-pasek", - "gazeta_link": "", - "name": "Jan Chryzostom Pasek" - } - }, - { - "pk": 113, - "model": "pdcounter.author", - "fields": { - "death": 1945, - "description": "", - "wiki_link": "", - "sort_key": "pawlikowska-jasnorzewska", - "slug": "maria-pawlikowska-jasnorzewska", - "gazeta_link": "", - "name": "Maria Pawlikowska-Jasnorzewska" - } - }, - { - "pk": 114, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "pilch", - "slug": "jerzy-pilch", - "gazeta_link": "", - "name": "Jerzy Pilch" - } - }, - { - "pk": 115, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "platon", - "slug": "platon", - "gazeta_link": "", - "name": "Platon" - } - }, - { - "pk": 116, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "pol", - "slug": "wincenty-pol", - "gazeta_link": "", - "name": "Wincenty Pol" - } - }, - { - "pk": 117, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "potocki", - "slug": "waclaw-potocki", - "gazeta_link": "", - "name": "Wac\u0142aw Potocki" - } - }, - { - "pk": 118, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "prus", - "slug": "boleslaw-prus", - "gazeta_link": "", - "name": "Boles\u0142aw Prus" - } - }, - { - "pk": 119, - "model": "pdcounter.author", - "fields": { - "death": 1940, - "description": "", - "wiki_link": "", - "sort_key": "przerwa-tetmajer", - "slug": "kazimierz-przerwa-tetmajer", - "gazeta_link": "", - "name": "Kazimierz Przerwa-Tetmajer" - } - }, - { - "pk": 120, - "model": "pdcounter.author", - "fields": { - "death": 1970, - "description": "", - "wiki_link": "", - "sort_key": "przybos", - "slug": "julian-przybos", - "gazeta_link": "", - "name": "Julian Przybo\u015b" - } - }, - { - "pk": 121, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "rej", - "slug": "mikolaj-rej", - "gazeta_link": "", - "name": "Miko\u0142aj Rej" - } - }, - { - "pk": 122, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "reymont", - "slug": "wladyslaw-stanislaw-reymont", - "gazeta_link": "", - "name": "W\u0142adys\u0142aw Stanis\u0142aw Reymont" - } - }, - { - "pk": 123, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "rozewicz", - "slug": "tadeusz-rozewicz", - "gazeta_link": "", - "name": "Tadeusz R\u00f3\u017cewicz" - } - }, - { - "pk": 124, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "rymkiewicz", - "slug": "jaroslaw-rymkiewicz", - "gazeta_link": "", - "name": "Jaros\u0142aw Rymkiewicz" - } - }, - { - "pk": 125, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "rzewuski", - "slug": "henryk-rzewuski", - "gazeta_link": "", - "name": "Henryk Rzewuski" - } - }, - { - "pk": 126, - "model": "pdcounter.author", - "fields": { - "death": 1944, - "description": "", - "wiki_link": "", - "sort_key": "saint-exupery", - "slug": "antoine-de-saint-exupery", - "gazeta_link": "", - "name": "Antoine de Saint Exup\u00e9ry" - } - }, - { - "pk": 127, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "sapkowski", - "slug": "andrzej-sapkowski", - "gazeta_link": "", - "name": "Andrzej Sapkowski" - } - }, - { - "pk": 128, - "model": "pdcounter.author", - "fields": { - "death": 1942, - "description": "", - "wiki_link": "", - "sort_key": "schulz", - "slug": "bruno-schulz", - "gazeta_link": "", - "name": "Bruno Schulz" - } - }, - { - "pk": 129, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "sempe", - "slug": "jean-jacques-sempe", - "gazeta_link": "", - "name": "Jean-Jacques Semp\u00e9" - } - }, - { - "pk": 130, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "shakespeare", - "slug": "william-shakespeare", - "gazeta_link": "", - "name": "William Shakespeare" - } - }, - { - "pk": 131, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "sienkiewicz", - "slug": "henryk-sienkiewicz", - "gazeta_link": "", - "name": "Henryk Sienkiewicz" - } - }, - { - "pk": 132, - "model": "pdcounter.author", - "fields": { - "death": 1991, - "description": "", - "wiki_link": "", - "sort_key": "singer", - "slug": "isaac-bashevis-singer", - "gazeta_link": "", - "name": "Isaac Bashevis Singer" - } - }, - { - "pk": 133, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "skalkowski", - "slug": "marceli-skalkowski", - "gazeta_link": "", - "name": "Marceli Ska\u0142kowski" - } - }, - { - "pk": 134, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "skarga", - "slug": "piotr-skarga", - "gazeta_link": "", - "name": "Piotr Skarga" - } - }, - { - "pk": 135, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "slowacki", - "slug": "juliusz-slowacki", - "gazeta_link": "", - "name": "Juliusz S\u0142owacki" - } - }, - { - "pk": 136, - "model": "pdcounter.author", - "fields": { - "death": 1957, - "description": "", - "wiki_link": "", - "sort_key": "staff", - "slug": "leopold-staff", - "gazeta_link": "", - "name": "Leopold Staff" - } - }, - { - "pk": 137, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "staszic", - "slug": "stanislaw-staszic", - "gazeta_link": "", - "name": "Stanis\u0142aw Staszic" - } - }, - { - "pk": 138, - "model": "pdcounter.author", - "fields": { - "death": 1968, - "description": "", - "wiki_link": "", - "sort_key": "steinbeck", - "slug": "john-steinbeck", - "gazeta_link": "", - "name": "John Steinbeck" - } - }, - { - "pk": 139, - "model": "pdcounter.author", - "fields": { - "death": 1969, - "description": "", - "wiki_link": "", - "sort_key": "stempowski", - "slug": "jerzy-stempowski", - "gazeta_link": "", - "name": "Jerzy Stempowski" - } - }, - { - "pk": 140, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "stevenson", - "slug": "robert-louis-stevenson", - "gazeta_link": "", - "name": "Robert Louis Stevenson" - } - }, - { - "pk": 141, - "model": "pdcounter.author", - "fields": { - "death": 1966, - "description": "", - "wiki_link": "", - "sort_key": "stryjkowski", - "slug": "julian-stryjkowski", - "gazeta_link": "", - "name": "Julian Stryjkowski" - } - }, - { - "pk": 142, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "suchodolski", - "slug": "rajnold-suchodolski", - "gazeta_link": "", - "name": "Rajnold Suchodolski" - } - }, - { - "pk": 143, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "swietochowski", - "slug": "aleksander-swietochowski", - "gazeta_link": "", - "name": "Aleksander \u015awi\u0119tochowski" - } - }, - { - "pk": 144, - "model": "pdcounter.author", - "fields": { - "death": 1992, - "description": "", - "wiki_link": "", - "sort_key": "szklarski", - "slug": "alfred-szklarski", - "gazeta_link": "", - "name": "Alfred Szklarski" - } - }, - { - "pk": 145, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "szymborska", - "slug": "wislawa-szymborska", - "gazeta_link": "", - "name": "Wis\u0142awa Szymborska" - } - }, - { - "pk": 146, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "tarnowski", - "slug": "wladyslaw-tarnowski", - "gazeta_link": "", - "name": "W\u0142adys\u0142aw Tarnowski" - } - }, - { - "pk": 147, - "model": "pdcounter.author", - "fields": { - "death": 2004, - "description": "", - "wiki_link": "", - "sort_key": "terakowska", - "slug": "dorota-terakowska", - "gazeta_link": "", - "name": "Dorota Terakowska" - } - }, - { - "pk": 148, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "thackeray", - "slug": "william-makepeace-thackeray", - "gazeta_link": "", - "name": "William Makepeace Thackeray" - } - }, - { - "pk": 149, - "model": "pdcounter.author", - "fields": { - "death": 2000, - "description": "", - "wiki_link": "", - "sort_key": "tischner", - "slug": "jozef-tischner", - "gazeta_link": "", - "name": "J\u00f3zef Tischner" - } - }, - { - "pk": 150, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "tokarczuk", - "slug": "olga-tokarczuk", - "gazeta_link": "", - "name": "Olga Tokarczuk" - } - }, - { - "pk": 151, - "model": "pdcounter.author", - "fields": { - "death": 1973, - "description": "", - "wiki_link": "", - "sort_key": "tolkien", - "slug": "john-ronald-reuel-tolkien", - "gazeta_link": "", - "name": "John Ronald Reuel Tolkien" - } - }, - { - "pk": 152, - "model": "pdcounter.author", - "fields": { - "death": 1953, - "description": "", - "wiki_link": "", - "sort_key": "tuwim", - "slug": "julian-tuwim", - "gazeta_link": "", - "name": "Julian Tuwim" - } - }, - { - "pk": 153, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "twain", - "slug": "mark-twain", - "gazeta_link": "", - "name": "Mark Twain" - } - }, - { - "pk": 154, - "model": "pdcounter.author", - "fields": { - "death": 2006, - "description": "", - "wiki_link": "", - "sort_key": "twardowski", - "slug": "jan-twardowski", - "gazeta_link": "", - "name": "Jan Twardowski" - } - }, - { - "pk": 155, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "tyrtajos", - "slug": "tyrtajos", - "gazeta_link": "", - "name": "Tyrtajos" - } - }, - { - "pk": 156, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "verne", - "slug": "jules-gabriel-verne", - "gazeta_link": "", - "name": "Jules Gabriel Verne" - } - }, - { - "pk": 157, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "wasilewski", - "slug": "edmund-wasilewski", - "gazeta_link": "", - "name": "Edmund Wasilewski" - } - }, - { - "pk": 158, - "model": "pdcounter.author", - "fields": { - "death": 1969, - "description": "", - "wiki_link": "", - "sort_key": "wierzynski", - "slug": "kazimierz-wierzynski", - "gazeta_link": "", - "name": "Kazimierz Wierzy\u0144ski" - } - }, - { - "pk": 159, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "witcher", - "slug": "moony-witcher", - "gazeta_link": "", - "name": "Moony Witcher" - } - }, - { - "pk": 160, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "witkiewicz", - "slug": "stanislaw-ignacy-witkiewicz", - "gazeta_link": "", - "name": "Stanis\u0142aw Ignacy Witkiewicz" - } - }, - { - "pk": 161, - "model": "pdcounter.author", - "fields": { - "death": 1976, - "description": "", - "wiki_link": "", - "sort_key": "wittlin", - "slug": "jozef-wittlin", - "gazeta_link": "", - "name": "J\u00f3zef Wittlin" - } - }, - { - "pk": 162, - "model": "pdcounter.author", - "fields": { - "death": 2005, - "description": "", - "wiki_link": "", - "sort_key": "wojtyla", - "slug": "karol-wojtyla", - "gazeta_link": "", - "name": "Karol Wojty\u0142a" - } - }, - { - "pk": 163, - "model": "pdcounter.author", - "fields": { - "death": 1975, - "description": "", - "wiki_link": "", - "sort_key": "wyka", - "slug": "kazimierz-wyka", - "gazeta_link": "", - "name": "Kazimierz Wyka" - } - }, - { - "pk": 164, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "wyspianski", - "slug": "stanislaw-wyspianski", - "gazeta_link": "", - "name": "Stanis\u0142aw Wyspia\u0144ski" - } - }, - { - "pk": 165, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "zagajewski", - "slug": "adam-zagajewski", - "gazeta_link": "", - "name": "Adam Zagajewski" - } - }, - { - "pk": 166, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "zeromski", - "slug": "stefan-zeromski", - "gazeta_link": "", - "name": "Stefan \u017beromski" - } - }, - { - "pk": 167, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "zola", - "slug": "emil-zola", - "gazeta_link": "", - "name": "Emil Zola" - } - }, - { - "pk": 168, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "zygmunt", - "slug": "gloger-zygmunt", - "gazeta_link": "", - "name": "Gloger Zygmunt" - } - }, - { - "pk": 622, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jules Gabriel Verne", - "slug": "20-000-mil-podmorskiej-zeglugi", - "pd": 0, - "title": "20 000 mil podmorskiej \u017ceglugi" - } - }, - { - "pk": 629, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "a-coz-z-ta-dziecina", - "pd": 0, - "title": "A c\u00f3\u017c z t\u0105 dziecin\u0105" - } - }, - { - "pk": 437, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "abc", - "pd": 0, - "title": "ABC" - } - }, - { - "pk": 356, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "ach-juz-w-mym-rodzicielskim-domu", - "pd": 0, - "title": "Ach, ju\u017c w mym rodzicielskim domu" - } - }, - { - "pk": 110, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Brzechwa", - "slug": "akademia-pana-kleksa", - "pd": 2037, - "title": "Akademia Pana Kleksa" - } - }, - { - "pk": 3, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "albatros", - "pd": 0, - "title": "Albatros" - } - }, - { - "pk": 388, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Lucy Maud Montgomery", - "slug": "ania-z-zielonego-wzgorza", - "pd": null, - "title": "Ania z Zielonego Wzg\u00f3rza" - } - }, - { - "pk": 528, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "aniol-ognisty-moj-aniol-lewy", - "pd": 0, - "title": "Anio\u0142 ognisty \u2014 m\u00f3j anio\u0142 lewy" - } - }, - { - "pk": 529, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "anioly-stoja-na-rodzinnych-polach", - "pd": 0, - "title": "Anio\u0142y stoj\u0105 na rodzinnych polach" - } - }, - { - "pk": 301, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ignacy Krasicki", - "slug": "antymonachomachia", - "pd": 0, - "title": "Antymonachomachia" - } - }, - { - "pk": 83, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "apokalipsa-sw-jana", - "pd": 0, - "title": "Apokalipsa \u015bw. Jana" - } - }, - { - "pk": 609, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Julian Stryjkowski", - "slug": "austeria", - "pd": 2037, - "title": "Austeria" - } - }, - { - "pk": 105, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "bajka-o-szesciu-slugach", - "pd": 0, - "title": "Bajka o sze\u015bciu s\u0142ugach" - } - }, - { - "pk": 309, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Lem", - "slug": "bajki-robotow", - "pd": 2077, - "title": "Bajki robot\u00f3w" - } - }, - { - "pk": 4, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "balkon", - "pd": 0, - "title": "Balkon" - } - }, - { - "pk": 649, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Marceli Ska\u0142kowski", - "slug": "bartoszu-bartoszu-czyli-krakowiak-kosciuszki", - "pd": 0, - "title": "Bartoszu, Bartoszu, czyli krakowiak Ko\u015bciuszki" - } - }, - { - "pk": 5, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "beatrycze", - "pd": 0, - "title": "Beatrycze" - } - }, - { - "pk": 530, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "beniowski", - "pd": 0, - "title": "Beniowski" - } - }, - { - "pk": 119, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "bieg-bez-nadziei", - "pd": 0, - "title": "Bieg bez nadziei" - } - }, - { - "pk": 120, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "bildur-baldur-i-czas", - "pd": 0, - "title": "Bildur, Baldur i czas" - } - }, - { - "pk": 189, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "G\u00fcnter Grass", - "slug": "blaszany-bebenek", - "pd": null, - "title": "Blaszany b\u0119benek" - } - }, - { - "pk": 106, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "blekitny-ognik", - "pd": 0, - "title": "B\u0142\u0119kitny ognik" - } - }, - { - "pk": 6, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "blogoslawienstwo", - "pd": 0, - "title": "B\u0142ogos\u0142awie\u0144stwo" - } - }, - { - "pk": 456, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Bronis\u0142awa Ostrowska", - "slug": "bohaterski-mis", - "pd": 0, - "title": "Bohaterski mi\u015b" - } - }, - { - "pk": 1, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Dante Alighieri", - "slug": "boska-komedia", - "pd": 0, - "title": "Boska komedia" - } - }, - { - "pk": 650, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Alojzy Feli\u0144ski, Antoni G\u00f3recki", - "slug": "boze-cos-polske", - "pd": 0, - "title": "Bo\u017ce, co\u015b Polsk\u0119" - } - }, - { - "pk": 313, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "boze-pelen-w-niebie-chwaly", - "pd": 0, - "title": "Bo\u017ce, pe\u0142en w niebie chwa\u0142y" - } - }, - { - "pk": 287, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Franciszek Karpi\u0144ski", - "slug": "bog-sie-rodzi", - "pd": 0, - "title": "B\u00f3g si\u0119 rodzi" - } - }, - { - "pk": 350, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Astrid Lindgren", - "slug": "bracia-lwie-serce", - "pd": 2081, - "title": "Bracia Lwie Serce" - } - }, - { - "pk": 630, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "bracia-patrzcie-jana", - "pd": 0, - "title": "Bracia, patrzcie Jana" - } - }, - { - "pk": 84, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "brat-i-siostra", - "pd": 0, - "title": "Brat i siostra" - } - }, - { - "pk": 397, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "brulion-bebe-b", - "pd": null, - "title": "Brulion Bebe B." - } - }, - { - "pk": 279, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jaros\u0142aw Iwaszkiewicz", - "slug": "brzezina", - "pd": 2051, - "title": "Brzezina" - } - }, - { - "pk": 488, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "burza", - "pd": 0, - "title": "Burza" - } - }, - { - "pk": 438, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "cham", - "pd": 0, - "title": "Cham" - } - }, - { - "pk": 172, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ronald Dahl", - "slug": "charlie-i-fabryka-czekolady", - "pd": null, - "title": "Charlie i fabryka czekolady" - } - }, - { - "pk": 611, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander \u015awi\u0119tochowski", - "slug": "chawa-rubin", - "pd": 0, - "title": "Chawa Rubin" - } - }, - { - "pk": 387, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ferenc Moln\u00e1r", - "slug": "chlopcy-z-placu-broni", - "pd": null, - "title": "Ch\u0142opcy z Placu Broni" - } - }, - { - "pk": 311, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Teofil Lenartowicz", - "slug": "chodzil-senek-i-drzemota", - "pd": 0, - "title": "Chodzi\u0142 Senek i Drzemota" - } - }, - { - "pk": 280, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Jachowicz", - "slug": "chory-kotek", - "pd": 0, - "title": "Chory kotek" - } - }, - { - "pk": 531, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "chor-duchow-izraelskich", - "pd": 0, - "title": "Ch\u00f3r duch\u00f3w izraelskich" - } - }, - { - "pk": 314, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "cialo-me-wyklete", - "pd": 0, - "title": "Cia\u0142o me, wykl\u0119te" - } - }, - { - "pk": 631, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "cicha-noc", - "pd": 0, - "title": "Cicha noc" - } - }, - { - "pk": 466, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "cienie", - "pd": 0, - "title": "Cienie" - } - }, - { - "pk": 7, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "co-powiesz-w-ten-zmierzch", - "pd": 0, - "title": "Co Powiesz W Ten Zmierzch" - } - }, - { - "pk": 532, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "corka-cerery", - "pd": 0, - "title": "C\u00f3rka Cerery" - } - }, - { - "pk": 402, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "corka-robrojka", - "pd": null, - "title": "C\u00f3rka Robrojka" - } - }, - { - "pk": 306, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Maria Kuncewiczowa", - "slug": "cudzoziemka", - "pd": 2060, - "title": "Cudzoziemka" - } - }, - { - "pk": 408, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "czarna-polewka", - "pd": null, - "title": "Czarna polewka" - } - }, - { - "pk": 353, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Thomas Mann", - "slug": "czarodziejska-gora", - "pd": 2026, - "title": "Czarodziejska g\u00f3ra" - } - }, - { - "pk": 357, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "czaty", - "pd": 0, - "title": "Czaty" - } - }, - { - "pk": 85, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "czerwony-kapturek", - "pd": 0, - "title": "Czerwony Kapturek" - } - }, - { - "pk": 8, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "czlowiek-i-morze", - "pd": 0, - "title": "Cz\u0142owiek I Morze" - } - }, - { - "pk": 432, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Anna Onichimowska", - "slug": "daleki-rejs", - "pd": null, - "title": "Daleki rejs" - } - }, - { - "pk": 612, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander \u015awi\u0119tochowski", - "slug": "damian-cepenko", - "pd": 0, - "title": "Damian Cepenko" - } - }, - { - "pk": 9, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "danse-macabre", - "pd": 0, - "title": "Danse Macabre" - } - }, - { - "pk": 10, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "de-profundis-clamavi", - "pd": 0, - "title": "De Profundis Clamavi" - } - }, - { - "pk": 205, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "djanie-i-apollinowi", - "pd": 0, - "title": "Djanie i Apollinowi" - } - }, - { - "pk": 578, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do", - "pd": 0, - "title": "Do ***" - } - }, - { - "pk": 206, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-albiusa-tibulla", - "pd": 0, - "title": "Do Albiusa Tibulla" - } - }, - { - "pk": 412, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Daniel Naborowski", - "slug": "do-anny", - "pd": 0, - "title": "Do Anny" - } - }, - { - "pk": 207, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-antoniusa", - "pd": 0, - "title": "Do Antoniusa" - } - }, - { - "pk": 208, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-apollina", - "pd": 0, - "title": "Do Apollina" - } - }, - { - "pk": 209, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-aristiusa-fuska", - "pd": 0, - "title": "Do Aristiusa Fuska" - } - }, - { - "pk": 210, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-asteryi", - "pd": 0, - "title": "Do Asteryi" - } - }, - { - "pk": 211, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-augusta", - "pd": 0, - "title": "Do Augusta" - } - }, - { - "pk": 212, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-bakchusa", - "pd": 0, - "title": "Do Bakchusa" - } - }, - { - "pk": 213, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-bariny", - "pd": 0, - "title": "Do Bariny" - } - }, - { - "pk": 214, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-cezara-augusta", - "pd": 0, - "title": "Do Cezara Augusta" - } - }, - { - "pk": 215, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-chciwych-na-pieniadz", - "pd": 0, - "title": "Do chciwych na pieni\u0105dz" - } - }, - { - "pk": 216, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-chloe", - "pd": 0, - "title": "Do Chloe" - } - }, - { - "pk": 217, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-chlorydy", - "pd": 0, - "title": "Do Chlorydy" - } - }, - { - "pk": 218, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-chorego-mecenasa", - "pd": 0, - "title": "Do chorego Mecenasa" - } - }, - { - "pk": 219, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-cilniusa-mecenasa", - "pd": 0, - "title": "Do Cilniusa Mecenasa" - } - }, - { - "pk": 33, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "do-czytelnika", - "pd": 0, - "title": "Do Czytelnika" - } - }, - { - "pk": 358, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "do-d-d", - "pd": 0, - "title": "Do D* D*" - } - }, - { - "pk": 276, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-djany", - "pd": 0, - "title": "Do Djany" - } - }, - { - "pk": 221, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-dzbanka", - "pd": 0, - "title": "Do dzbanka" - } - }, - { - "pk": 222, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-eliusa-lamii", - "pd": 0, - "title": "Do Eliusa Lamii" - } - }, - { - "pk": 220, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-elljusa", - "pd": 0, - "title": "Do Elljusa" - } - }, - { - "pk": 223, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-fauna", - "pd": 0, - "title": "Do Fauna" - } - }, - { - "pk": 224, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-festjusa", - "pd": 0, - "title": "Do Festjusa" - } - }, - { - "pk": 225, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-fihdyli", - "pd": 0, - "title": "Do Fihdyli" - } - }, - { - "pk": 226, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-fortuny", - "pd": 0, - "title": "Do Fortuny" - } - }, - { - "pk": 533, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-franciszka-szemiotha", - "pd": 0, - "title": "Do Franciszka Szemiotha" - } - }, - { - "pk": 227, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-fyllidy", - "pd": 0, - "title": "Do Fyllidy" - } - }, - { - "pk": 228, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-galatei", - "pd": 0, - "title": "Do Galatei" - } - }, - { - "pk": 229, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-glycery", - "pd": 0, - "title": "Do Glycery" - } - }, - { - "pk": 534, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-hrabiego-gustawa-podziekowanie", - "pd": 0, - "title": "Do hrabiego Gustawa podzi\u0119kowanie" - } - }, - { - "pk": 230, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-ikciusa", - "pd": 0, - "title": "Do Ikciusa" - } - }, - { - "pk": 231, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-kajusa-asiniusa-polliona", - "pd": 0, - "title": "Do Kajusa Asiniusa Polliona" - } - }, - { - "pk": 232, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-kalliopy", - "pd": 0, - "title": "Do Kalliopy" - } - }, - { - "pk": 194, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-kanidii-trucicielki", - "pd": 0, - "title": "Do Kanidii trucicielki" - } - }, - { - "pk": 233, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-kochanka-lalagi", - "pd": 0, - "title": "Do kochanka Lalagi" - } - }, - { - "pk": 11, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "do-kreolki", - "pd": 0, - "title": "Do Kreolki" - } - }, - { - "pk": 234, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-ksantiasa-focejczyka", - "pd": 0, - "title": "Do Ksantiasa Focejczyka" - } - }, - { - "pk": 235, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-kwinktiliusa-warusa", - "pd": 0, - "title": "Do Kwinktiliusa Warusa" - } - }, - { - "pk": 236, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-kwinktiusa-hirpina", - "pd": 0, - "title": "Do Kwinktiusa Hirpina" - } - }, - { - "pk": 568, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-laury", - "pd": 0, - "title": "Do Laury" - } - }, - { - "pk": 237, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-leukonoe", - "pd": 0, - "title": "Do Leukonoe" - } - }, - { - "pk": 238, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-liciniusa-mureny", - "pd": 0, - "title": "Do Liciniusa Mureny" - } - }, - { - "pk": 239, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-ligurina", - "pd": 0, - "title": "Do Ligurina" - } - }, - { - "pk": 195, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-lubieznej-staruszki", - "pd": 0, - "title": "Do lubie\u017cnej staruszki" - } - }, - { - "pk": 196, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-ludu-rzymskiego", - "pd": 0, - "title": "Do ludu rzymskiego" - } - }, - { - "pk": 535, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-ludwiki-bobrowny", - "pd": 0, - "title": "Do Ludwiki Bobr\u00f3wny" - } - }, - { - "pk": 240, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-lutni", - "pd": 0, - "title": "Do lutni" - } - }, - { - "pk": 241, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-lyce", - "pd": 0, - "title": "Do Lyce" - } - }, - { - "pk": 242, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-lyhdyi", - "pd": 0, - "title": "Do Lyhdyi" - } - }, - { - "pk": 12, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "do-madonny", - "pd": 0, - "title": "Do Madonny" - } - }, - { - "pk": 243, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-manliusa-torkwata", - "pd": 0, - "title": "Do Manliusa Torkwata" - } - }, - { - "pk": 244, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-marciusa-cenzorina", - "pd": 0, - "title": "Do Marciusa Cenzorina" - } - }, - { - "pk": 245, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-marka-lolljusa", - "pd": 0, - "title": "Do Marka Lolljusa" - } - }, - { - "pk": 246, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-marka-wipsaniusa-agrippy", - "pd": 0, - "title": "Do Marka Wipsaniusa Agrippy" - } - }, - { - "pk": 359, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "do-maryi-putkamerowej", - "pd": 0, - "title": "Do Maryi Putkamerowej" - } - }, - { - "pk": 536, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-matki", - "pd": 0, - "title": "Do matki" - } - }, - { - "pk": 360, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "do-matki-polki", - "pd": 0, - "title": "Do Matki Polki" - } - }, - { - "pk": 197, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-mecenasa", - "pd": 0, - "title": "Do Mecenasa" - } - }, - { - "pk": 247, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-melpomeny", - "pd": 0, - "title": "Do Melpomeny" - } - }, - { - "pk": 248, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-merkuryusza", - "pd": 0, - "title": "Do Merkuryusza" - } - }, - { - "pk": 198, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-mewiusa-poety", - "pd": 0, - "title": "Do Mewiusa poety" - } - }, - { - "pk": 249, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-miasta-rzymu", - "pd": 0, - "title": "Do miasta Rzymu" - } - }, - { - "pk": 250, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-mlodego-slugi", - "pd": 0, - "title": "Do m\u0142odego s\u0142ugi" - } - }, - { - "pk": 251, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-mlodziezy", - "pd": 0, - "title": "Do m\u0142odzie\u017cy" - } - }, - { - "pk": 252, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-munaciusa-pianka", - "pd": 0, - "title": "Do Munaciusa Pianka" - } - }, - { - "pk": 199, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-neery", - "pd": 0, - "title": "Do Neery" - } - }, - { - "pk": 253, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-neobuli", - "pd": 0, - "title": "Do Neobuli" - } - }, - { - "pk": 361, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "do-niemna", - "pd": 0, - "title": "Do Niemna" - } - }, - { - "pk": 254, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-okretu-majacego-zawiesc-wirgiljusa-do-aten", - "pd": 0, - "title": "Do okr\u0119tu maj\u0105cego zawie\u015b\u0107 Wirgiljusa do Aten" - } - }, - { - "pk": 537, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-pani-joanny-bobrowej", - "pd": 0, - "title": "Do pani Joanny Bobrowej" - } - }, - { - "pk": 538, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-pastereczki", - "pd": 0, - "title": "Do pastereczki" - } - }, - { - "pk": 200, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-pettiusa", - "pd": 0, - "title": "Do Pettiusa" - } - }, - { - "pk": 256, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-pompejusa", - "pd": 0, - "title": "Do Pompejusa" - } - }, - { - "pk": 255, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-pompejusa-grosfa", - "pd": 0, - "title": "Do Pompejusa Grosfa" - } - }, - { - "pk": 257, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-postumiusa", - "pd": 0, - "title": "Do Postumiusa" - } - }, - { - "pk": 13, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "do-przechodzacej", - "pd": 0, - "title": "Do Przechodz\u0105cej" - } - }, - { - "pk": 201, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-przyjaciol", - "pd": 0, - "title": "Do przyjaci\u00f3\u0142" - } - }, - { - "pk": 258, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-przyjaciolki", - "pd": 0, - "title": "Do przyjaci\u00f3\u0142ki" - } - }, - { - "pk": 260, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-pyrry", - "pd": 0, - "title": "Do Pyrry" - } - }, - { - "pk": 261, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-rzeczypospolitej", - "pd": 0, - "title": "Do Rzeczypospolitej" - } - }, - { - "pk": 262, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-rzymian", - "pd": 0, - "title": "Do Rzymian" - } - }, - { - "pk": 263, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-sallustiusa-krispa", - "pd": 0, - "title": "Do Sallustiusa Krispa" - } - }, - { - "pk": 264, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-septimiusa", - "pd": 0, - "title": "Do Septimiusa" - } - }, - { - "pk": 265, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-siebie-samego", - "pd": 0, - "title": "Do siebie samego" - } - }, - { - "pk": 266, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-skapca", - "pd": 0, - "title": "Do sk\u0105pca" - } - }, - { - "pk": 202, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-starej-rozpustnicy", - "pd": 0, - "title": "Do starej rozpustnicy" - } - }, - { - "pk": 632, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "do-szopy-hej-pasterze", - "pd": 0, - "title": "Do szopy, hej pasterze" - } - }, - { - "pk": 267, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-taliarcha", - "pd": 0, - "title": "Do Taliarcha" - } - }, - { - "pk": 268, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-telefa", - "pd": 0, - "title": "Do Telefa" - } - }, - { - "pk": 539, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-teofila-januszewskiego", - "pd": 0, - "title": "Do Teofila Januszewskiego" - } - }, - { - "pk": 269, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-tyndarydy", - "pd": 0, - "title": "Do Tyndarydy" - } - }, - { - "pk": 270, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-walgiusa-rufusa", - "pd": 0, - "title": "Do Walgiusa Rufusa" - } - }, - { - "pk": 271, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-wenery", - "pd": 0, - "title": "Do Wenery" - } - }, - { - "pk": 272, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-wergiliusa", - "pd": 0, - "title": "Do Wergiliusa" - } - }, - { - "pk": 273, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-wirgiliusa-marona", - "pd": 0, - "title": "Do Wirgiliusa Marona" - } - }, - { - "pk": 274, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-wspolbiesiadnikow", - "pd": 0, - "title": "Do wsp\u00f3\u0142biesiadnik\u00f3w" - } - }, - { - "pk": 203, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-zlosliwca", - "pd": 0, - "title": "Do z\u0142o\u015bliwca" - } - }, - { - "pk": 540, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-zygmunta", - "pd": 0, - "title": "Do Zygmunta" - } - }, - { - "pk": 275, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-zrodla-banduzyi", - "pd": 0, - "title": "Do \u017ar\u00f3d\u0142a Banduzyi" - } - }, - { - "pk": 439, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "dobra-pani", - "pd": 0, - "title": "Dobra Pani" - } - }, - { - "pk": 385, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander Minkowski", - "slug": "dolina-swiatla", - "pd": null, - "title": "Dolina \u015awiat\u0142a" - } - }, - { - "pk": 121, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "dom-swietego-kazimierza", - "pd": 0, - "title": "Dom \u015bwi\u0119tego Kazimierza" - } - }, - { - "pk": 14, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "don-juan-w-piekle", - "pd": 0, - "title": "Don Juan W Piekle" - } - }, - { - "pk": 114, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Miguel Cervantes", - "slug": "don-kichote", - "pd": 2045, - "title": "Don Kichote" - } - }, - { - "pk": 315, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "dreszcze-nasze-u-warg-sie-spotkaly", - "pd": 0, - "title": "Dreszcze nasze u warg si\u0119 spotka\u0142y" - } - }, - { - "pk": 351, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Mackiewicz", - "slug": "droga-donikad", - "pd": 2056, - "title": "Droga donik\u0105d" - } - }, - { - "pk": 431, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Anna Onichimowska", - "slug": "duch-starej-kamienicy", - "pd": null, - "title": "Duch starej kamienicy" - } - }, - { - "pk": 362, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "dudasz", - "pd": 0, - "title": "Dudasz" - } - }, - { - "pk": 541, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "duma-o-waclawie-rzewuskim", - "pd": 0, - "title": "Duma o Wac\u0142awie Rzewuskim" - } - }, - { - "pk": 613, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander \u015awi\u0119tochowski", - "slug": "dumania-pesymisty", - "pd": 0, - "title": "Dumania pesymisty" - } - }, - { - "pk": 542, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "dusza-sie-moja-zamysla-gleboko", - "pd": 0, - "title": "Dusza si\u0119 moja zamy\u015bla g\u0142\u0119boko" - } - }, - { - "pk": 15, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "dusza-wina", - "pd": 0, - "title": "Dusza Wina" - } - }, - { - "pk": 86, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "dwie-ksiezniczki", - "pd": 0, - "title": "Dwie ksi\u0119\u017cniczki" - } - }, - { - "pk": 430, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Joanna Olech", - "slug": "dynastia-miziolkow", - "pd": null, - "title": "Dynastia Mizio\u0142k\u00f3w" - } - }, - { - "pk": 180, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Arkady Fiedler", - "slug": "dywizjon-303", - "pd": 2056, - "title": "Dywizjon 303" - } - }, - { - "pk": 304, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ignacy Kraszewski", - "slug": "dziad-i-baba", - "pd": 0, - "title": "Dziad i baba" - } - }, - { - "pk": 400, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "dziecko-piatku", - "pd": null, - "title": "Dziecko pi\u0105tku" - } - }, - { - "pk": 316, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "dziejba-lesna", - "pd": 0, - "title": "Dziejba le\u015bna" - } - }, - { - "pk": 68, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Joseph B\u00e9dier", - "slug": "dzieje-tristana-i-izoldy", - "pd": 2012, - "title": "Dzieje Tristana i Izoldy" - } - }, - { - "pk": 625, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Moony Witcher", - "slug": "dziewczynka-z-szostego-ksiezyca", - "pd": null, - "title": "Dziewczynka z sz\u00f3stego ksi\u0119\u017cyca" - } - }, - { - "pk": 633, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "dzisiaj-w-betlejem", - "pd": 0, - "title": "Dzisiaj w Betlejem" - } - }, - { - "pk": 440, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "dziurdziowie", - "pd": 0, - "title": "Dziurdziowie" - } - }, - { - "pk": 489, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "dziwna-opowiesc", - "pd": 0, - "title": "Dziwna opowie\u015b\u0107" - } - }, - { - "pk": 113, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Albert Camus", - "slug": "dzuma", - "pd": 2080, - "title": "D\u017cuma" - } - }, - { - "pk": 480, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Kazimierz Przerwa-Tetmajer", - "slug": "e-viva-larte", - "pd": 2011, - "title": "E viva l'arte" - } - }, - { - "pk": 682, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stefan \u017beromski", - "slug": "echa-lesne", - "pd": 0, - "title": "Echa le\u015bne" - } - }, - { - "pk": 467, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "echa-muzyczne", - "pd": 0, - "title": "Echa muzyczne" - } - }, - { - "pk": 122, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "elegia-czwarta", - "pd": 0, - "title": "Elegia czwarta" - } - }, - { - "pk": 123, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "elegia-zalu", - "pd": 0, - "title": "Elegia \u017calu" - } - }, - { - "pk": 391, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Zbigniew Morsztyn", - "slug": "emblemata", - "pd": 0, - "title": "Emblemata" - } - }, - { - "pk": 193, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "epody", - "pd": 0, - "title": "Epody" - } - }, - { - "pk": 462, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Platon", - "slug": "fajdros", - "pd": 0, - "title": "Fajdros" - } - }, - { - "pk": 543, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "fantazy", - "pd": 0, - "title": "Fantazy" - } - }, - { - "pk": 363, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "farys", - "pd": 0, - "title": "Farys" - } - }, - { - "pk": 184, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Johann Goethe", - "slug": "faust", - "pd": 0, - "title": "Faust" - } - }, - { - "pk": 185, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Witold Gombrowicz", - "slug": "ferdydurke", - "pd": 2040, - "title": "Ferdydurke" - } - }, - { - "pk": 490, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "fermenty", - "pd": 0, - "title": "Fermenty" - } - }, - { - "pk": 468, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "filozof-i-prostak", - "pd": 0, - "title": "Filozof i prostak" - } - }, - { - "pk": 491, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "franek", - "pd": 0, - "title": "Franek" - } - }, - { - "pk": 124, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "front", - "pd": 0, - "title": "Front" - } - }, - { - "pk": 545, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "gdy-noc-gleboka-wszystko-uspi-i-oniemi", - "pd": 0, - "title": "Gdy noc g\u0142\u0119boka wszystko u\u015bpi i oniemi" - } - }, - { - "pk": 634, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "gdy-sie-chrystus-rodzi", - "pd": 0, - "title": "Gdy si\u0119 Chrystus rodzi" - } - }, - { - "pk": 635, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "gdy-sliczna-panna", - "pd": 0, - "title": "Gdy \u015bliczna panna" - } - }, - { - "pk": 364, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "gdy-tu-moj-trup", - "pd": 0, - "title": "Gdy tu m\u00f3j trup" - } - }, - { - "pk": 365, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "geby-za-lud-krzyczace", - "pd": 0, - "title": "G\u0119by za lud krzycz\u0105ce" - } - }, - { - "pk": 87, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "gesiareczka", - "pd": 0, - "title": "G\u0119siareczka" - } - }, - { - "pk": 16, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "glos", - "pd": 0, - "title": "G\u0142os" - } - }, - { - "pk": 546, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "godzina-mysli", - "pd": 0, - "title": "Godzina my\u015bli" - } - }, - { - "pk": 651, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Micha\u0142 Ba\u0142ucki", - "slug": "goralu-czy-ci-nie-zal", - "pd": 0, - "title": "G\u00f3ralu, czy ci nie \u017cal" - } - }, - { - "pk": 17, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "gra", - "pd": 0, - "title": "Gra" - } - }, - { - "pk": 416, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Zofia Na\u0142kowska", - "slug": "granica", - "pd": 2025, - "title": "Granica" - } - }, - { - "pk": 366, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "grazyna", - "pd": 0, - "title": "Gra\u017cyna" - } - }, - { - "pk": 522, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Henryk Sienkiewicz", - "slug": "hania", - "pd": 0, - "title": "Hania" - } - }, - { - "pk": 18, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "harmonia-wieczorna", - "pd": 0, - "title": "Harmonia Wieczorna" - } - }, - { - "pk": 19, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "heautonimoroumenos", - "pd": 0, - "title": "Heautonimoroumenos" - } - }, - { - "pk": 652, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "hej-hej-ulani", - "pd": 0, - "title": "Hej, hej, u\u0142ani" - } - }, - { - "pk": 653, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Anczyc", - "slug": "hej-strzelcy-w-las", - "pd": 0, - "title": "Hej, strzelcy w las" - } - }, - { - "pk": 636, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "hej-w-dzien-narodzenia", - "pd": 0, - "title": "Hej, w dzie\u0144 narodzenia" - } - }, - { - "pk": 619, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "John Ronald Reuel Tolkien", - "slug": "hobbit-czyli-tam-i-z-powrotem", - "pd": 2055, - "title": "Hobbit, czyli tam i z powrotem" - } - }, - { - "pk": 547, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "hymn-bogarodzico-dziewico", - "pd": 0, - "title": "Hymn (Bogarodzico, Dziewico!)" - } - }, - { - "pk": 654, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ignacy Krasicki", - "slug": "hymn-do-milosci-ojczyzny", - "pd": 0, - "title": "Hymn do mi\u0142o\u015bci ojczyzny" - } - }, - { - "pk": 481, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Kazimierz Przerwa-Tetmajer", - "slug": "hymn-do-nirwany", - "pd": 2011, - "title": "Hymn do nirwany" - } - }, - { - "pk": 656, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "hymn-narodowy", - "pd": 0, - "title": "Hymn narodowy" - } - }, - { - "pk": 71, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "hymn-sw-pawla-o-milosci", - "pd": 0, - "title": "Hymn \u015bw. Paw\u0142a o mi\u0142o\u015bci" - } - }, - { - "pk": 125, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "i-kompozycja", - "pd": 0, - "title": "I kompozycja" - } - }, - { - "pk": 126, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "i-wigilia-co-splywa-ku-nam", - "pd": 0, - "title": "I Wigilia co sp\u0142ywa ku nam" - } - }, - { - "pk": 395, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "ida-sierpniowa", - "pd": null, - "title": "Ida sierpniowa" - } - }, - { - "pk": 20, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "ideal", - "pd": 0, - "title": "Idea\u0142" - } - }, - { - "pk": 191, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Homer", - "slug": "iliada", - "pd": 0, - "title": "Iliada" - } - }, - { - "pk": 403, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "imieniny", - "pd": null, - "title": "Imieniny" - } - }, - { - "pk": 179, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Umberto Eco", - "slug": "imie-rozy", - "pd": null, - "title": "Imi\u0119 r\u00f3\u017cy" - } - }, - { - "pk": 190, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Gustaw Herling-Grudzi\u0144ski", - "slug": "inny-swiat", - "pd": 2071, - "title": "Inny \u015bwiat" - } - }, - { - "pk": 127, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "inwokacja", - "pd": 0, - "title": "Inwokacja" - } - }, - { - "pk": 128, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "jablko-zycia", - "pd": 0, - "title": "Jab\u0142ko \u017cycia" - } - }, - { - "pk": 317, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "jak-niewiele-ma-znakow", - "pd": 0, - "title": "Jak niewiele ma znak\u00f3w" - } - }, - { - "pk": 657, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Tarnowski", - "slug": "jak-to-na-wojence-ladnie", - "pd": 0, - "title": "Jak to na wojence \u0142adnie" - } - }, - { - "pk": 510, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "jak-wam-sie-podoba", - "pd": 0, - "title": "Jak wam sie podoba" - } - }, - { - "pk": 318, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "jam-nie-osjan", - "pd": 0, - "title": "Jam \u2014 nie osjan" - } - }, - { - "pk": 548, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "jan-bielecki", - "pd": 0, - "title": "Jan Bielecki" - } - }, - { - "pk": 88, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "jas-i-malgosia", - "pd": 0, - "title": "Ja\u015b i Ma\u0142gosia" - } - }, - { - "pk": 115, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Joseph Conrad", - "slug": "jadro-ciemnosci", - "pd": 2014, - "title": "J\u0105dro ciemno\u015bci" - } - }, - { - "pk": 129, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "je-le-sois", - "pd": 0, - "title": "Je le sois" - } - }, - { - "pk": 469, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "jeden-z-wielu", - "pd": 0, - "title": "Jeden z wielu" - } - }, - { - "pk": 130, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "jesienia", - "pd": 0, - "title": "Jesieni\u0105" - } - }, - { - "pk": 131, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "jeszcze-pejzaz-modlitwa-zalobna", - "pd": 0, - "title": "Jeszcze pejza\u017c modlitwa \u017ca\u0142obna" - } - }, - { - "pk": 637, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "jezus-malusienki", - "pd": 0, - "title": "Jezus malusie\u0144ki" - } - }, - { - "pk": 549, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "jezeli-ci-pan-nie-zbuduje-domu", - "pd": 0, - "title": "Je\u017celi ci Pan nie zbuduje domu" - } - }, - { - "pk": 550, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "jezeli-kiedy-w-tej-mojej-krainie", - "pd": 0, - "title": "Je\u017celi kiedy w tej mojej krainie" - } - }, - { - "pk": 406, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "jezyk-trolli", - "pd": null, - "title": "J\u0119zyk Trolli" - } - }, - { - "pk": 511, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "juliusz-cezar", - "pd": 0, - "title": "Juliusz Cezar" - } - }, - { - "pk": 405, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "kalamburka", - "pd": null, - "title": "Kalamburka" - } - }, - { - "pk": 285, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander Kami\u0144ski", - "slug": "kamienie-na-szaniec", - "pd": 2049, - "title": "Kamienie na szaniec" - } - }, - { - "pk": 173, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Tadeusz Do\u0142\u0119ga-Mostowicz", - "slug": "kariera-nikodema-dyzmy", - "pd": 0, - "title": "Kariera Nikodema Dyzmy" - } - }, - { - "pk": 312, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Teofil Lenartowicz", - "slug": "kasia", - "pd": 0, - "title": "Kasia" - } - }, - { - "pk": 69, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Be\u0142za", - "slug": "katechizm-polskiego-dziecka", - "pd": 0, - "title": "Katechizm polskiego dziecka" - } - }, - { - "pk": 526, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Piotr Skarga", - "slug": "kazania-sejmowe", - "pd": 0, - "title": "Kazania sejmowe" - } - }, - { - "pk": 551, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "kiedy-prawdziwie-polacy-powstana", - "pd": 0, - "title": "Kiedy prawdziwie Polacy powstan\u0105" - } - }, - { - "pk": 441, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "kilka-slow-o-kobietach", - "pd": 0, - "title": "Kilka s\u0142\u00f3w o kobietach" - } - }, - { - "pk": 442, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "kilka-uwag-nad-powiescia", - "pd": 0, - "title": "Kilka uwag nad powie\u015bci\u0105" - } - }, - { - "pk": 319, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "klechdy-polskie", - "pd": 0, - "title": "Klechdy polskie" - } - }, - { - "pk": 320, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "klechdy-sezamowe", - "pd": 0, - "title": "Klechdy sezamowe" - } - }, - { - "pk": 21, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "klejnoty", - "pd": 0, - "title": "Klejnoty" - } - }, - { - "pk": 420, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "kleopatra-i-cezar", - "pd": 0, - "title": "Kleopatra i Cezar" - } - }, - { - "pk": 614, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander \u015awi\u0119tochowski", - "slug": "klub-szachistow", - "pd": 0, - "title": "Klub szachist\u00f3w" - } - }, - { - "pk": 393, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "klamczucha", - "pd": null, - "title": "K\u0142amczucha" - } - }, - { - "pk": 132, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "knajpa", - "pd": 0, - "title": "Knajpa" - } - }, - { - "pk": 187, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stefan Grabi\u0144ski", - "slug": "kochanka-szamoty", - "pd": 0, - "title": "Kochanka Szamoty" - } - }, - { - "pk": 117, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "kolysanki", - "pd": 0, - "title": "Ko\u0142ysanki" - } - }, - { - "pk": 133, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "kolysanki-pedem", - "pd": 0, - "title": "Ko\u0142ysanki p\u0119dem" - } - }, - { - "pk": 421, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "komedia", - "pd": 0, - "title": "Komedia" - } - }, - { - "pk": 492, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "komediantka", - "pd": 0, - "title": "Komediantka" - } - }, - { - "pk": 493, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "komurasaki", - "pd": 0, - "title": "Komurasaki" - } - }, - { - "pk": 134, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "koniec-rewolucji", - "pd": 0, - "title": "Koniec rewolucji" - } - }, - { - "pk": 482, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Kazimierz Przerwa-Tetmajer", - "slug": "koniec-wieku", - "pd": 2011, - "title": "Koniec wieku" - } - }, - { - "pk": 107, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "kopciuszek", - "pd": 0, - "title": "Kopciuszek" - } - }, - { - "pk": 89, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "kot-w-butach", - "pd": 0, - "title": "Kot w butach" - } - }, - { - "pk": 22, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "koty", - "pd": 0, - "title": "Koty" - } - }, - { - "pk": 321, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "krajobraz-utracony", - "pd": 0, - "title": "Krajobraz utracony" - } - }, - { - "pk": 681, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Gloger Zygmunt", - "slug": "krakowiaczek-jeden", - "pd": 0, - "title": "Krakowiaczek jeden" - } - }, - { - "pk": 658, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Kozakiewicz", - "slug": "krew-nasza-dlugo-leja-katy", - "pd": 0, - "title": "Krew nasz\u0105 d\u0142ugo lej\u0105 katy" - } - }, - { - "pk": 299, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Tadeusz Konwicki", - "slug": "kronika-wypadkow-milosnych", - "pd": null, - "title": "Kronika wypadk\u00f3w mi\u0142osnych" - } - }, - { - "pk": 90, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "krol-drozdobrody", - "pd": 0, - "title": "Kr\u00f3l Drozdobrody" - } - }, - { - "pk": 512, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "krol-lear", - "pd": 0, - "title": "Kr\u00f3l Lear" - } - }, - { - "pk": 91, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "krolewna-sniezka", - "pd": 0, - "title": "Kr\u00f3lewna \u015anie\u017cka" - } - }, - { - "pk": 486, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Miko\u0142aj Rej", - "slug": "krotka-rozprawa-miedzy-panem-wojtem-i-plebanem", - "pd": 0, - "title": "Kr\u00f3tka rozprawa mi\u0119dzy panem, w\u00f3jtem i plebanem" - } - }, - { - "pk": 413, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Daniel Naborowski", - "slug": "krotkosc-zywota", - "pd": 0, - "title": "Kr\u00f3tko\u015b\u0107 \u017cywota" - } - }, - { - "pk": 108, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "krysztalowa-kula", - "pd": 0, - "title": "Kryszta\u0142owa kula" - } - }, - { - "pk": 494, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "krzyk", - "pd": 0, - "title": "Krzyk" - } - }, - { - "pk": 322, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "krzywda", - "pd": 0, - "title": "Krzywda" - } - }, - { - "pk": 521, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Henryk Sienkiewicz", - "slug": "krzyzacy", - "pd": 0, - "title": "Krzy\u017cacy" - } - }, - { - "pk": 82, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "ksiega-hioba", - "pd": 0, - "title": "Ksi\u0119ga Hioba" - } - }, - { - "pk": 73, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "ksiega-rodzaju", - "pd": 0, - "title": "Ksi\u0119ga Rodzaju" - } - }, - { - "pk": 291, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Kasprowicz", - "slug": "ksiega-ubogich", - "pd": 0, - "title": "Ksi\u0119ga ubogich" - } - }, - { - "pk": 552, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "ksiezyc", - "pd": 0, - "title": "Ksi\u0119\u017cyc" - } - }, - { - "pk": 464, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Wac\u0142aw Potocki", - "slug": "kto-mocniejszy-ten-lepszy", - "pd": 0, - "title": "Kto mocniejszy, ten lepszy" - } - }, - { - "pk": 553, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "kulik", - "pd": 0, - "title": "Kulik" - } - }, - { - "pk": 394, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "kwiat-kalafiora", - "pd": null, - "title": "Kwiat kalafiora" - } - }, - { - "pk": 135, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "kwiecien-tych-co-bez-troski", - "pd": 0, - "title": "Kwiecie\u0144 tych co bez troski" - } - }, - { - "pk": 554, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "lambro", - "pd": 0, - "title": "Lambro" - } - }, - { - "pk": 308, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "lament-swietokrzyski", - "pd": 0, - "title": "Lament \u015bwi\u0119tokrzyski" - } - }, - { - "pk": 659, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Wincenty Pol", - "slug": "lecieliscie-z-drzewa", - "pd": 0, - "title": "Lecieli\u015bcie z drzewa" - } - }, - { - "pk": 136, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "legie-der-trauer", - "pd": 0, - "title": "Legie der Trauer" - } - }, - { - "pk": 660, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "legun-na-wojence", - "pd": 0, - "title": "Legun na wojence" - } - }, - { - "pk": 23, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "leta", - "pd": 0, - "title": "Leta" - } - }, - { - "pk": 349, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Clive Staples Lewis", - "slug": "lew-czarownica-i-stara-szafa", - "pd": null, - "title": "Lew, czarownica i stara szafa" - } - }, - { - "pk": 544, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "lilia-weneda", - "pd": 0, - "title": "Lilia Weneda" - } - }, - { - "pk": 137, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "liryka", - "pd": 0, - "title": "Liryka" - } - }, - { - "pk": 435, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Artur Oppman", - "slug": "lis-i-kurka", - "pd": 0, - "title": "Lis i kurka" - } - }, - { - "pk": 204, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "listy", - "pd": 0, - "title": "Listy" - } - }, - { - "pk": 303, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Zygmunt Krasi\u0144ski", - "slug": "krasinski-listy", - "pd": 0, - "title": "Listy" - } - }, - { - "pk": 24, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "litanie-do-szatana", - "pd": 0, - "title": "Litanie Do Szatana" - } - }, - { - "pk": 25, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "lola-de-valence", - "pd": 0, - "title": "Lola De Valence" - } - }, - { - "pk": 411, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Vladimir Nabokov", - "slug": "lolita", - "pd": null, - "title": "Lolita" - } - }, - { - "pk": 555, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "los-mie-juz-zaden-nie-moze-zatrwozyc", - "pd": 0, - "title": "Los mi\u0119 ju\u017c \u017caden nie mo\u017ce zatrwo\u017cy\u0107" - } - }, - { - "pk": 483, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Kazimierz Przerwa-Tetmajer", - "slug": "ludzie-miotaja-sie", - "pd": 2011, - "title": "Ludzie miotaj\u0105 si\u0119" - } - }, - { - "pk": 638, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "lulajze-jezuniu", - "pd": 0, - "title": "Lulaj\u017ce Jezuniu" - } - }, - { - "pk": 26, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "labedz", - "pd": 0, - "title": "\u0141ab\u0119d\u017a" - } - }, - { - "pk": 177, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Fiodor Dostojewski", - "slug": "lagodna", - "pd": 2049, - "title": "\u0141agodna" - } - }, - { - "pk": 513, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "makbet", - "pd": 0, - "title": "Makbet" - } - }, - { - "pk": 182, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander Fredro", - "slug": "malpa-w-kapieli", - "pd": 0, - "title": "Ma\u0142pa w k\u0105pieli" - } - }, - { - "pk": 509, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Antoine de Saint Exup\u00e9ry", - "slug": "maly-ksiaze", - "pd": null, - "title": "Ma\u0142y ksi\u0105\u017c\u0119" - } - }, - { - "pk": 290, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grzegorz Kasdepke", - "slug": "mam-prawo-czyli-nieomal-wszystko-co-powinniscie-wiedziec-o-prawach-dziecka-a-nie-macie-kogo-zapytac", - "pd": null, - "title": "Mam prawo! Czyli nieomal wszystko, co powinni\u015bcie wiedzie\u0107 o prawach dziecka, a nie macie kogo zapyta\u0107" - } - }, - { - "pk": 443, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "maria", - "pd": 0, - "title": "Maria" - } - }, - { - "pk": 414, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Daniel Naborowski", - "slug": "marnosc", - "pd": 0, - "title": "Marno\u015b\u0107" - } - }, - { - "pk": 444, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "marta", - "pd": 0, - "title": "Marta" - } - }, - { - "pk": 27, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "marzenie-ciekawego", - "pd": 0, - "title": "Marzenie Ciekawego" - } - }, - { - "pk": 626, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Ignacy Witkiewicz", - "slug": "matka", - "pd": 0, - "title": "Matka" - } - }, - { - "pk": 661, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Wincenty Pol", - "slug": "mazur", - "pd": 0, - "title": "Mazur" - } - }, - { - "pk": 655, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "mazurek-dabrowskiego", - "pd": 0, - "title": "Mazurek D\u0105browskiego" - } - }, - { - "pk": 445, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "meir-ezofowicz", - "pd": 0, - "title": "Meir Ezofowicz" - } - }, - { - "pk": 639, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stefan Bordkiewicz", - "slug": "medrcy-swiata", - "pd": 0, - "title": "M\u0119drcy \u015bwiata" - } - }, - { - "pk": 433, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ren\u00e9 Goscinny, Jean-Jacques Semp\u00e9", - "slug": "mikolajek", - "pd": null, - "title": "Miko\u0142ajek" - } - }, - { - "pk": 470, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "milknace-glosy", - "pd": 0, - "title": "Milkn\u0105ce g\u0142osy" - } - }, - { - "pk": 323, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "milosc-stroskana", - "pd": 0, - "title": "Milo\u015b\u0107 stroskana" - } - }, - { - "pk": 297, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Maria Konopnicka", - "slug": "milosierdzie-gminy", - "pd": 0, - "title": "Mi\u0142osierdzie gminy" - } - }, - { - "pk": 28, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "milosc-klamstwa", - "pd": 0, - "title": "Mi\u0142o\u015b\u0107 K\u0142amstwa" - } - }, - { - "pk": 446, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "mirtala", - "pd": 0, - "title": "Mirtala" - } - }, - { - "pk": 111, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Micha\u0142 Bu\u0142hakow", - "slug": "mistrz-i-malgorzata", - "pd": null, - "title": "Mistrz i Ma\u0142gorzata" - } - }, - { - "pk": 640, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Teofil Lenartowicz", - "slug": "mizerna-cicha", - "pd": 0, - "title": "Mizerna, cicha" - } - }, - { - "pk": 29, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "modlitwa-do-szatana", - "pd": 0, - "title": "Modlitwa Do Szatana" - } - }, - { - "pk": 30, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "moesta-et-errabunda", - "pd": 0, - "title": "Moesta Et Errabunda" - } - }, - { - "pk": 422, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "moja-ojczyzna", - "pd": 0, - "title": "Moja ojczyzna" - } - }, - { - "pk": 138, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "moje-zaduszki", - "pd": 0, - "title": "Moje Zaduszki" - } - }, - { - "pk": 302, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ignacy Krasicki", - "slug": "monachomachia", - "pd": 0, - "title": "Monachomachia" - } - }, - { - "pk": 556, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "moj-adamito-widzisz-jak-to-trudne", - "pd": 0, - "title": "M\u00f3j Adamito \u2014 widzisz, jak to trudne" - } - }, - { - "pk": 31, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "muzyka", - "pd": 0, - "title": "Muzyka" - } - }, - { - "pk": 92, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "muzykanci-z-bremy", - "pd": 0, - "title": "Muzykanci z Bremy" - } - }, - { - "pk": 457, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Bronis\u0142awa Ostrowska", - "slug": "myszka", - "pd": 0, - "title": "Myszka" - } - }, - { - "pk": 507, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Roman Dmowski", - "slug": "mysli-nowoczesnego-polaka", - "pd": 0, - "title": "My\u015bli nowoczesnego Polaka" - } - }, - { - "pk": 557, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "na-drzewie-zawisl-waz", - "pd": 0, - "title": "Na drzewie zawis\u0142 w\u0105\u017c" - } - }, - { - "pk": 615, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander \u015awi\u0119tochowski", - "slug": "na-pogrzebie", - "pd": 0, - "title": "Na pogrzebie" - } - }, - { - "pk": 558, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "na-sprowadzenie-prochow-napoleona", - "pd": 0, - "title": "Na sprowadzenie proch\u00f3w Napoleona" - } - }, - { - "pk": 471, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "na-wakacjach", - "pd": 0, - "title": "Na wakacjach" - } - }, - { - "pk": 662, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Edmund Wasilewski", - "slug": "na-wawel-na-wawel", - "pd": 0, - "title": "Na Wawel, na Wawel" - } - }, - { - "pk": 607, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "John Steinbeck", - "slug": "na-wschod-od-edenu", - "pd": 2056, - "title": "Na wsch\u00f3d od Edenu" - } - }, - { - "pk": 139, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "na-wsi", - "pd": 0, - "title": "Na wsi" - } - }, - { - "pk": 367, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "nad-woda-wielka-i-czysta", - "pd": 0, - "title": "Nad wod\u0105 wielk\u0105 i czyst\u0105" - } - }, - { - "pk": 389, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Andrzej Morsztyn", - "slug": "nagrobek-kusiowi", - "pd": 0, - "title": "Nagrobek Kusiowi" - } - }, - { - "pk": 680, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Emil Zola", - "slug": "nana", - "pd": 2046, - "title": "Nana" - } - }, - { - "pk": 627, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Ignacy Witkiewicz", - "slug": "narkotyki", - "pd": 0, - "title": "Narkotyki" - } - }, - { - "pk": 559, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "narodzie-moj", - "pd": 0, - "title": "Narodzie m\u00f3j" - } - }, - { - "pk": 560, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "nastal-moj-mily-wiek-eschylesowy", - "pd": 0, - "title": "Nasta\u0142, m\u00f3j mi\u0142y, wiek Eschylesowy" - } - }, - { - "pk": 472, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "nawrocony", - "pd": 0, - "title": "Nawr\u00f3cony" - } - }, - { - "pk": 140, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "nic-wiecej", - "pd": 0, - "title": "Nic wi\u0119cej" - } - }, - { - "pk": 561, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "nie-wiadomo-co-czyli-romantycznosc", - "pd": 0, - "title": "Nie wiadomo co, czyli Romantyczno\u015b\u0107" - } - }, - { - "pk": 484, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Kazimierz Przerwa-Tetmajer", - "slug": "nie-wierze-w-nic", - "pd": 2011, - "title": "Nie wierz\u0119 w nic" - } - }, - { - "pk": 562, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "niedawno-jeszcze-kiedym-spoczywal-uspiony", - "pd": 0, - "title": "Niedawno jeszcze \u2014 kiedym spoczywa\u0142 u\u015bpiony" - } - }, - { - "pk": 563, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "niedawno-jeszcze-wasze-mogily", - "pd": 0, - "title": "Niedawno jeszcze wasze mogi\u0142y" - } - }, - { - "pk": 324, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "niegdys-dom-moj-ochoczy", - "pd": 0, - "title": "Niegdy\u015b dom m\u00f3j ochoczy" - } - }, - { - "pk": 281, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Jachowicz", - "slug": "niegrzeczna-andzia", - "pd": 0, - "title": "Niegrzeczna Andzia" - } - }, - { - "pk": 141, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "nienazwane-niejasne", - "pd": 0, - "title": "Nienazwane niejasne" - } - }, - { - "pk": 368, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "niepewnosc", - "pd": 0, - "title": "Niepewno\u015b\u0107" - } - }, - { - "pk": 32, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "niepowodzenie", - "pd": 0, - "title": "Niepowodzenie" - } - }, - { - "pk": 465, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Wac\u0142aw Potocki", - "slug": "nierzadem-polska-stoi", - "pd": 0, - "title": "Nierz\u0105dem Polska stoi" - } - }, - { - "pk": 418, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Edmund Niziurski", - "slug": "niewiarygodne-przygody-marka-piegusa", - "pd": null, - "title": "Niewiarygodne przygody Marka Piegusa" - } - }, - { - "pk": 485, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Kazimierz Przerwa-Tetmajer", - "slug": "niewierny", - "pd": 2011, - "title": "Niewierny" - } - }, - { - "pk": 458, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Bronis\u0142awa Ostrowska", - "slug": "niezapominajka", - "pd": 0, - "title": "Niezapominajka" - } - }, - { - "pk": 307, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Milan Kundera", - "slug": "nieznosna-lekkosc-bytu", - "pd": null, - "title": "Niezno\u015bna lekko\u015b\u0107 bytu" - } - }, - { - "pk": 676, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Wyspia\u0144ski", - "slug": "noc-listopadowa", - "pd": 0, - "title": "Noc listopadowa" - } - }, - { - "pk": 423, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "noc-tysiaczna-druga", - "pd": 0, - "title": "Noc tysi\u0105czna druga" - } - }, - { - "pk": 398, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "noelka", - "pd": null, - "title": "Noelka" - } - }, - { - "pk": 142, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "nuta-na-dzwony", - "pd": 0, - "title": "Nuta na dzwony" - } - }, - { - "pk": 401, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "nutria-i-nerwus", - "pd": null, - "title": "Nutria i Nerwus" - } - }, - { - "pk": 93, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "o-diable-z-trzema-zlotymi-wlosami", - "pd": 0, - "title": "O Diable z trzema z\u0142otymi w\u0142osami" - } - }, - { - "pk": 94, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "o-dzielnym-krawczyku", - "pd": 0, - "title": "O dzielnym krawczyku" - } - }, - { - "pk": 298, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Maria Konopnicka", - "slug": "o-krasnoludkach-i-sierotce-marysi", - "pd": 0, - "title": "O krasnoludkach i sierotce Marysi" - } - }, - { - "pk": 95, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "o-mlodziencu-ktory-nie-znal-strachu", - "pd": 0, - "title": "O m\u0142odzie\u0144cu, kt\u00f3ry nie zna\u0142 strachu" - } - }, - { - "pk": 355, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "o-morze-zjawisk", - "pd": 0, - "title": "O morze zjawisk" - } - }, - { - "pk": 663, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Wac\u0142aw Dennhoff-Czarnocki", - "slug": "o-moj-rozmarynie", - "pd": 0, - "title": "O m\u00f3j rozmarynie" - } - }, - { - "pk": 144, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "o-niebie", - "pd": 0, - "title": "O niebie" - } - }, - { - "pk": 447, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "o-powiesciach-t-t-jeza", - "pd": 0, - "title": "O powie\u015bciach T. T. Je\u017ca" - } - }, - { - "pk": 143, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "o-swierszczach", - "pd": 0, - "title": "O \u015bwierszczach" - } - }, - { - "pk": 434, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Artur Oppman", - "slug": "o-warsie-i-sawie", - "pd": 0, - "title": "O Warsie i Sawie" - } - }, - { - "pk": 96, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "o-wilku-i-siedmiu-kozlatkach", - "pd": 0, - "title": "O wilku i siedmiu ko\u017al\u0105tkach" - } - }, - { - "pk": 325, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "o-zmierzchu", - "pd": 0, - "title": "O zmierzchu" - } - }, - { - "pk": 564, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "o-nieszczesliwa-o-uciemiezona", - "pd": 0, - "title": "O! nieszcz\u0119\u015bliwa! o! uciemi\u0119\u017cona" - } - }, - { - "pk": 145, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "obloki", - "pd": 0, - "title": "Ob\u0142oki" - } - }, - { - "pk": 463, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Platon", - "slug": "obrona-sokratesa", - "pd": 0, - "title": "Obrona Sokratesa" - } - }, - { - "pk": 146, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "od-dnia-do-dna", - "pd": 0, - "title": "Od dnia do dna" - } - }, - { - "pk": 565, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "oda-do-wolnosci", - "pd": 0, - "title": "Oda do wolno\u015bci" - } - }, - { - "pk": 34, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "oddzwieki", - "pd": 0, - "title": "Odd\u017awi\u0119ki" - } - }, - { - "pk": 147, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "odpowiedz", - "pd": 0, - "title": "Odpowied\u017a" - } - }, - { - "pk": 192, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Homer", - "slug": "odyseja", - "pd": 0, - "title": "Odyseja" - } - }, - { - "pk": 641, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "oj-maluski-maluski", - "pd": 0, - "title": "Oj, maluski, malu\u015bki" - } - }, - { - "pk": 566, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "ojciec-zadzumionych", - "pd": 0, - "title": "Ojciec zad\u017cumionych" - } - }, - { - "pk": 35, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "olbrzymka", - "pd": 0, - "title": "Olbrzymka" - } - }, - { - "pk": 36, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "opetanie", - "pd": 0, - "title": "Op\u0119tanie" - } - }, - { - "pk": 72, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "opis-stworzenia-swiata-i-czlowieka", - "pd": 0, - "title": "Opis stworzenia \u015bwiata i cz\u0142owieka" - } - }, - { - "pk": 396, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "opium-w-rosole", - "pd": null, - "title": "Opium w rosole" - } - }, - { - "pk": 148, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "opowiadanie", - "pd": 0, - "title": "Opowiadanie" - } - }, - { - "pk": 2, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Irit Amiel", - "slug": "osmaleni", - "pd": null, - "title": "Osmaleni" - } - }, - { - "pk": 664, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ludwik Pomian \u0141ubi\u0144ski", - "slug": "ostatni-mazur", - "pd": 0, - "title": "Ostatni mazur" - } - }, - { - "pk": 567, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "ostatnie-wspomnienie", - "pd": 0, - "title": "Ostatnie wspomnienie" - } - }, - { - "pk": 37, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "otchlan", - "pd": 0, - "title": "Otch\u0142a\u0144" - } - }, - { - "pk": 514, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "otello", - "pd": 0, - "title": "Otello" - } - }, - { - "pk": 569, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "oto-bog-ktory-lona-tajemnic-odmyka", - "pd": 0, - "title": "Oto B\u00f3g, kt\u00f3ry \u0142ona tajemnic odmyka" - } - }, - { - "pk": 508, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Henryk Rzewuski", - "slug": "pamiatki-soplicy", - "pd": 0, - "title": "Pami\u0105tki Soplicy" - } - }, - { - "pk": 70, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Miron Bia\u0142oszewski", - "slug": "pamietnik-z-powstania-warszawskiego", - "pd": 2054, - "title": "Pami\u0119tnik z powstania warszawskiego" - } - }, - { - "pk": 460, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Chryzostom Pasek", - "slug": "pamietniki", - "pd": 0, - "title": "Pami\u0119tniki" - } - }, - { - "pk": 181, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Gustaw Flaubert", - "slug": "pani-bovary", - "pd": 2062, - "title": "Pani Bovary" - } - }, - { - "pk": 369, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "pani-czy-dziewczyna", - "pd": 0, - "title": "Pani czy dziewczyna" - } - }, - { - "pk": 448, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "pani-luiza", - "pd": 0, - "title": "Pani Luiza" - } - }, - { - "pk": 449, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "panna-antonina", - "pd": 0, - "title": "Panna Antonina" - } - }, - { - "pk": 450, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "panna-roza", - "pd": 0, - "title": "Panna R\u00f3\u017ca" - } - }, - { - "pk": 278, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jaros\u0142aw Iwaszkiewicz", - "slug": "panny-z-wilka", - "pd": 2051, - "title": "Panny z Wilka" - } - }, - { - "pk": 570, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "paryz", - "pd": 0, - "title": "Pary\u017c" - } - }, - { - "pk": 293, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Kochanowski", - "slug": "paslterz-dawidow", - "pd": 0, - "title": "Pas\u0142terz Dawid\u00f3w" - } - }, - { - "pk": 183, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander Fredro", - "slug": "pawel-i-gawel", - "pd": 0, - "title": "Pawe\u0142 i Gawe\u0142" - } - }, - { - "pk": 149, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "paysage-nocturne", - "pd": 0, - "title": "Paysage nocturne" - } - }, - { - "pk": 38, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "pekniety-dzwon", - "pd": 0, - "title": "P\u0119kni\u0119ty Dzwon" - } - }, - { - "pk": 618, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Makepeace Thackeray", - "slug": "pierscien-i-roza", - "pd": 0, - "title": "Pier\u015bcie\u0144 i r\u00f3\u017ca" - } - }, - { - "pk": 424, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "pierscien-wielkiej-damy-czyli-ex-machina-durejko", - "pd": 0, - "title": "Pier\u015bcie\u0144 Wielkiej Damy, czyli Ex-machina Durejko" - } - }, - { - "pk": 81, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "piesn-nad-piesniami", - "pd": 0, - "title": "Pie\u015b\u0144 nad pie\u015bniami" - } - }, - { - "pk": 150, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "piesn-o-niedobrej-burzy", - "pd": 0, - "title": "Pie\u015b\u0144 o niedobrej burzy" - } - }, - { - "pk": 461, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "piesn-o-rolandzie", - "pd": 2012, - "title": "Pie\u015b\u0144 o Rolandzie" - } - }, - { - "pk": 288, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Franciszek Karpi\u0144ski", - "slug": "piesn-poranna", - "pd": 0, - "title": "Pie\u015b\u0144 poranna" - } - }, - { - "pk": 390, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Andrzej Morsztyn", - "slug": "piesn-w-obozie-wojskowym-pod-zwancem", - "pd": 0, - "title": "Pie\u015b\u0144 w obozie wojskowym pod \u017bwa\u0144cem" - } - }, - { - "pk": 289, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Franciszek Karpi\u0144ski", - "slug": "piesn-wieczorna", - "pd": 0, - "title": "Pie\u015b\u0144 wieczorna" - } - }, - { - "pk": 39, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "piekno", - "pd": 0, - "title": "Pi\u0119kno" - } - }, - { - "pk": 40, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "piekny-statek", - "pd": 0, - "title": "Pi\u0119kny Statek" - } - }, - { - "pk": 116, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Carlo Collodi", - "slug": "pinokio", - "pd": null, - "title": "Pinokio" - } - }, - { - "pk": 151, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "piosenka-czeski-domek", - "pd": 0, - "title": "Piosenka czeski domek" - } - }, - { - "pk": 152, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "plan-akacji", - "pd": 0, - "title": "Plan akacji" - } - }, - { - "pk": 473, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "plesn-swiata", - "pd": 0, - "title": "Ple\u015b\u0144 \u015bwiata" - } - }, - { - "pk": 624, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Edmund Wasilewski", - "slug": "plynie-wisla-plynie", - "pd": 0, - "title": "P\u0142ynie Wis\u0142a, p\u0142ynie" - } - }, - { - "pk": 259, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "po-pyrrusa", - "pd": 0, - "title": "Po Pyrrusa" - } - }, - { - "pk": 665, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Wincenty Pol", - "slug": "pobudka", - "pd": 0, - "title": "Pobudka" - } - }, - { - "pk": 153, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "pod-dworcem-glownym-w-warszawie", - "pd": 0, - "title": "Pod Dworcem G\u0142\u00f3wnym w Warszawie" - } - }, - { - "pk": 41, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "podroz", - "pd": 0, - "title": "Podr\u00f3\u017c" - } - }, - { - "pk": 42, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "podroz-na-cytere", - "pd": 0, - "title": "Podr\u00f3\u017c Na Cyter\u0119" - } - }, - { - "pk": 286, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ryszard Kapu\u015bci\u0144ski", - "slug": "podroze-z-herodotem", - "pd": 2078, - "title": "Podr\u00f3\u017ce z Herodotem" - } - }, - { - "pk": 571, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "poeta-i-natchnienie", - "pd": 0, - "title": "Poeta i Natchnienie" - } - }, - { - "pk": 326, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "pogrzeb", - "pd": 0, - "title": "Pogrzeb" - } - }, - { - "pk": 327, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "pogrzeb-don-zuana", - "pd": 0, - "title": "Pogrzeb don \u017cuana" - } - }, - { - "pk": 572, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "pogrzeb-kapitana-meyznera", - "pd": 0, - "title": "Pogrzeb kapitana Meyznera" - } - }, - { - "pk": 154, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "polacy", - "pd": 0, - "title": "Polacy" - } - }, - { - "pk": 370, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "polaly-sie-lzy", - "pd": 0, - "title": "Pola\u0142y si\u0119 \u0142zy" - } - }, - { - "pk": 573, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "polska-polska-o-krolowa", - "pd": 0, - "title": "Polska! Polska! o! kr\u00f3lowa" - } - }, - { - "pk": 574, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "polsko-moja-tys-pierwsza-swiatu", - "pd": 0, - "title": "Polsko moja! ty\u015b pierwsza \u015bwiatu" - } - }, - { - "pk": 328, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "poludnie", - "pd": 0, - "title": "Po\u0142udnie" - } - }, - { - "pk": 371, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "popas-w-upicie", - "pd": 0, - "title": "Popas w Upicie" - } - }, - { - "pk": 451, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "porcelanka", - "pd": 0, - "title": "Porcelanka" - } - }, - { - "pk": 515, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "poskromienie-zlosnicy", - "pd": 0, - "title": "Poskromienie z\u0142o\u015bnicy" - } - }, - { - "pk": 43, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "poswiecam-ci-te-wiersze", - "pd": 0, - "title": "Po\u015bwi\u0119cam Ci Te Wiersze" - } - }, - { - "pk": 329, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "powrot", - "pd": 0, - "title": "Powr\u00f3t" - } - }, - { - "pk": 417, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Julian Ursyn Niemcewicz", - "slug": "powrot-posla", - "pd": 0, - "title": "Powr\u00f3t pos\u0142a" - } - }, - { - "pk": 666, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "pozegnanie", - "pd": 0, - "title": "Po\u017cegnanie" - } - }, - { - "pk": 628, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Ignacy Witkiewicz", - "slug": "pozegnanie-jesieni", - "pd": 0, - "title": "Po\u017cegnanie jesieni" - } - }, - { - "pk": 642, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "pojdzmy-wszyscy-do-stajenki", - "pd": 0, - "title": "P\u00f3jd\u017amy wszyscy do stajenki" - } - }, - { - "pk": 643, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "polnoc", - "pd": 0, - "title": "P\u00f3\u0142noc" - } - }, - { - "pk": 425, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "praca", - "pd": 0, - "title": "Praca" - } - }, - { - "pk": 284, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Franz Kafka", - "slug": "proces", - "pd": 2013, - "title": "Proces" - } - }, - { - "pk": 174, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Tadeusz Do\u0142\u0119ga-Mostowicz", - "slug": "profesor-wilczur", - "pd": 0, - "title": "Profesor Wilczur" - } - }, - { - "pk": 575, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "proroctwo", - "pd": 0, - "title": "Proroctwo" - } - }, - { - "pk": 330, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "prosba", - "pd": 0, - "title": "Pro\u015bba" - } - }, - { - "pk": 576, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "prowadzil-mnie-na-bardzo-ciemne-wezowisko", - "pd": 0, - "title": "Prowadzi\u0142 mnie na bardzo ciemne w\u0119\u017cowisko" - } - }, - { - "pk": 474, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "przed-kopernikiem", - "pd": 0, - "title": "Przed Kopernikiem" - } - }, - { - "pk": 495, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "przed-switem", - "pd": 0, - "title": "Przed \u015bwitem" - } - }, - { - "pk": 155, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "przedswit", - "pd": 0, - "title": "Przed\u015bwit" - } - }, - { - "pk": 577, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "przeklestwo", - "pd": 0, - "title": "Przekl\u0119stwo" - } - }, - { - "pk": 606, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Staszic", - "slug": "przestrogi-dla-polski", - "pd": 0, - "title": "Przestrogi dla Polski" - } - }, - { - "pk": 156, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "przez-kresy", - "pd": 0, - "title": "Przez kresy" - } - }, - { - "pk": 644, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "przybiezeli-do-betlejem", - "pd": 0, - "title": "Przybie\u017celi do Betlejem" - } - }, - { - "pk": 459, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Parandowski", - "slug": "przygody-odyseusza", - "pd": 2049, - "title": "Przygody Odyseusza" - } - }, - { - "pk": 331, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "przygody-sindbada-zeglarza", - "pd": 0, - "title": "Przygody Sindbada \u017beglarza" - } - }, - { - "pk": 620, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Mark Twain", - "slug": "przygody-tomka-sawyera", - "pd": 2054, - "title": "Przygody Tomka Sawyera" - } - }, - { - "pk": 74, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "przypowiesc-o-milosiernym-samarytaninie", - "pd": 0, - "title": "Przypowie\u015b\u0107 o mi\u0142osiernym Samarytaninie" - } - }, - { - "pk": 75, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "przypowiesc-o-pannach-roztropnych", - "pd": 0, - "title": "Przypowie\u015b\u0107 o pannach roztropnych" - } - }, - { - "pk": 76, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "przypowiesc-o-robotnikach-w-winnicy", - "pd": 0, - "title": "Przypowie\u015b\u0107 o robotnikach w winnicy" - } - }, - { - "pk": 77, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "przypowiesc-o-siewcy", - "pd": 0, - "title": "Przypowie\u015b\u0107 o siewcy" - } - }, - { - "pk": 78, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "przypowiesc-o-synu-marnotrawnym", - "pd": 0, - "title": "Przypowie\u015b\u0107 o synu marnotrawnym" - } - }, - { - "pk": 79, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "przypowiesc-o-talentach", - "pd": 0, - "title": "Przypowie\u015b\u0107 o talentach" - } - }, - { - "pk": 80, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "przypowiesc-o-ziarnku-gorczycy", - "pd": 0, - "title": "Przypowie\u015b\u0107 o ziarnku gorczycy" - } - }, - { - "pk": 399, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "pulpecja", - "pd": null, - "title": "Pulpecja" - } - }, - { - "pk": 332, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "puscila-po-stole-swawolacy-wianek", - "pd": 0, - "title": "Pu\u015bci\u0142a po stole swawol\u0105cy wianek" - } - }, - { - "pk": 372, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "renegat-ballada-turecka", - "pd": 0, - "title": "Renegat (ballada turecka)" - } - }, - { - "pk": 415, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Daniel Naborowski", - "slug": "respons-niespodziewany", - "pd": 0, - "title": "Respons niespodziewany" - } - }, - { - "pk": 436, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "George Orwell", - "slug": "rok-1984", - "pd": 2074, - "title": "Rok 1984" - } - }, - { - "pk": 44, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "romantyczny-zachod-slonca", - "pd": 0, - "title": "Romantyczny Zach\u00f3d S\u0142o\u0144ca" - } - }, - { - "pk": 109, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "roszpunka", - "pd": 0, - "title": "Roszpunka" - } - }, - { - "pk": 667, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Maria Konopnicka", - "slug": "rota", - "pd": 0, - "title": "Rota" - } - }, - { - "pk": 579, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "rozlaczenie", - "pd": 0, - "title": "Roz\u0142\u0105czenie" - } - }, - { - "pk": 668, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "August Bielowski", - "slug": "bielowski-rozlaczenie", - "pd": 0, - "title": "Roz\u0142\u0105czenie" - } - }, - { - "pk": 527, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "rozmowa-z-piramidami", - "pd": 0, - "title": "Rozmowa z piramidami" - } - }, - { - "pk": 157, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "rymy-pobozne", - "pd": 0, - "title": "Rymy pobo\u017cne" - } - }, - { - "pk": 516, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "ryszard-ii", - "pd": 0, - "title": "Ryszard II" - } - }, - { - "pk": 621, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Tyrtajos", - "slug": "rzecz-to-piekna", - "pd": 0, - "title": "Rzecz to pi\u0119kna" - } - }, - { - "pk": 580, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "rzym", - "pd": 0, - "title": "Rzym" - } - }, - { - "pk": 277, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "satyry", - "pd": 0, - "title": "Satyry" - } - }, - { - "pk": 496, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "seans", - "pd": 0, - "title": "Seans" - } - }, - { - "pk": 45, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "sed-non-satiata", - "pd": 0, - "title": "Sed Non Satiata" - } - }, - { - "pk": 523, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Henryk Sienkiewicz", - "slug": "selim-mirza", - "pd": 0, - "title": "Selim Mirza" - } - }, - { - "pk": 158, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "sen", - "pd": 0, - "title": "Sen" - } - }, - { - "pk": 475, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "prus-sen", - "pd": 0, - "title": "Sen" - } - }, - { - "pk": 517, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "sen-nocy-letniej", - "pd": 0, - "title": "Sen nocy letniej" - } - }, - { - "pk": 159, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "sen-sielski", - "pd": 0, - "title": "Sen sielski" - } - }, - { - "pk": 333, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "sen-wiejski", - "pd": 0, - "title": "Sen wiejski" - } - }, - { - "pk": 497, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "senne-dzieje", - "pd": 0, - "title": "Senne dzieje" - } - }, - { - "pk": 677, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Wyspia\u0144ski", - "slug": "sedziowie", - "pd": 0, - "title": "S\u0119dziowie" - } - }, - { - "pk": 46, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "skargi-jakiegos-ikara", - "pd": 0, - "title": "Skargi Jakiego\u015b Ikara" - } - }, - { - "pk": 386, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Moli\u00e8re", - "slug": "skapiec", - "pd": 0, - "title": "Sk\u0105piec" - } - }, - { - "pk": 520, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Bruno Schulz", - "slug": "sklepy-cynamonowe", - "pd": 2013, - "title": "Sklepy cynamonowe" - } - }, - { - "pk": 334, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "skonczonosc", - "pd": 0, - "title": "Sko\u0144czono\u015b\u0107" - } - }, - { - "pk": 335, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "skrzeble", - "pd": 0, - "title": "Skrzeble" - } - }, - { - "pk": 373, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "slowiczku-moj", - "pd": 0, - "title": "S\u0142owiczku m\u00f3j" - } - }, - { - "pk": 374, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "snuc-milosc", - "pd": 0, - "title": "Snu\u0107 mi\u0142o\u015b\u0107" - } - }, - { - "pk": 582, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "snycerz-byl-zatrudniony-dyjany-lepieniem", - "pd": 0, - "title": "Snycerz by\u0142 zatrudniony Dyjany lepieniem" - } - }, - { - "pk": 426, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "socjalizm", - "pd": 0, - "title": "Socjalizm" - } - }, - { - "pk": 310, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Lem", - "slug": "solaris", - "pd": 2077, - "title": "Solaris" - } - }, - { - "pk": 519, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "sonety", - "pd": 0, - "title": "Sonety" - } - }, - { - "pk": 375, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "sonety-odeskie", - "pd": 0, - "title": "Sonety odeskie" - } - }, - { - "pk": 583, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "sowinski-w-okopach-woli", - "pd": 0, - "title": "Sowi\u0144ski w okopach Woli" - } - }, - { - "pk": 47, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "spleen-i", - "pd": 0, - "title": "Spleen I" - } - }, - { - "pk": 48, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "spleen-ii", - "pd": 0, - "title": "Spleen II" - } - }, - { - "pk": 419, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Edmund Niziurski", - "slug": "sposob-na-alcybiadesa", - "pd": null, - "title": "Spos\u00f3b na Alcybiadesa" - } - }, - { - "pk": 336, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "spotykam-go-codziennie", - "pd": 0, - "title": "Spotykam go codziennie" - } - }, - { - "pk": 498, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "sprawiedliwie", - "pd": 0, - "title": "Sprawiedliwie" - } - }, - { - "pk": 409, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "sprezyna", - "pd": null, - "title": "Spr\u0119\u017cyna" - } - }, - { - "pk": 118, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "srebrne-nitki", - "pd": 0, - "title": "Srebrne nitki" - } - }, - { - "pk": 605, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "sroczka-kaszke-wazyla", - "pd": null, - "title": "Sroczka kaszk\u0119 wa\u017cy\u0142a" - } - }, - { - "pk": 305, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ignacy Kraszewski", - "slug": "stara-basn", - "pd": 0, - "title": "Stara Ba\u015b\u0144" - } - }, - { - "pk": 49, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "staruszeczki", - "pd": 0, - "title": "Staruszeczki" - } - }, - { - "pk": 294, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Oskar Kolberg", - "slug": "stary-niedzwiedz", - "pd": 0, - "title": "Stary nied\u017awied\u017a" - } - }, - { - "pk": 524, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Henryk Sienkiewicz", - "slug": "stary-sluga", - "pd": 0, - "title": "Stary s\u0142uga" - } - }, - { - "pk": 354, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Gabriel Garcia Marquez", - "slug": "sto-lat-samotnosci", - "pd": null, - "title": "Sto lat samotno\u015bci" - } - }, - { - "pk": 97, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "stoliczku-nakryj-sie", - "pd": 0, - "title": "Stoliczku nakryj si\u0119" - } - }, - { - "pk": 499, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "suka", - "pd": 0, - "title": "Suka" - } - }, - { - "pk": 50, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "sygnaly", - "pd": 0, - "title": "Sygna\u0142y" - } - }, - { - "pk": 160, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "synteza", - "pd": 0, - "title": "Synteza" - } - }, - { - "pk": 683, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stefan \u017beromski", - "slug": "syzyfowe-prace", - "pd": 0, - "title": "Syzyfowe prace" - } - }, - { - "pk": 352, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Kornel Makuszy\u0144ski", - "slug": "szatan-z-siodmej-klasy", - "pd": 2024, - "title": "Szatan z si\u00f3dmej klasy" - } - }, - { - "pk": 337, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "szczescie", - "pd": 0, - "title": "Szcz\u0119\u015bcie" - } - }, - { - "pk": 98, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "szesc-labedzi", - "pd": 0, - "title": "Sze\u015b\u0107 \u0142ab\u0119dzi" - } - }, - { - "pk": 669, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Gustawa Erynbergh", - "slug": "szlachta-w-roku-1831", - "pd": 0, - "title": "Szlachta w roku 1831" - } - }, - { - "pk": 392, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "szosta-klepka", - "pd": null, - "title": "Sz\u00f3sta klepka" - } - }, - { - "pk": 525, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Isaac Bashevis Singer", - "slug": "sztukmistrz-z-lublina", - "pd": null, - "title": "Sztukmistrz z Lublina" - } - }, - { - "pk": 161, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "smierc", - "pd": 0, - "title": "\u015amier\u0107" - } - }, - { - "pk": 500, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "reymont-smierc", - "pd": 0, - "title": "\u015amier\u0107" - } - }, - { - "pk": 338, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "smierc-buddy", - "pd": 0, - "title": "\u015amier\u0107 buddy" - } - }, - { - "pk": 51, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "smierc-kochankow", - "pd": 0, - "title": "\u015amier\u0107 Kochank\u00f3w" - } - }, - { - "pk": 52, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "smierc-nedzarzy", - "pd": 0, - "title": "\u015amier\u0107 N\u0119dzarzy" - } - }, - { - "pk": 339, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "smierc-wtora", - "pd": 0, - "title": "\u015amier\u0107 wt\u00f3ra" - } - }, - { - "pk": 584, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "smierc-co-trzynascie-lat-stala-kolo-mnie", - "pd": 0, - "title": "\u015amier\u0107, co trzyna\u015bcie \u0142at sta\u0142a ko\u0142o mnie" - } - }, - { - "pk": 581, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "sni-mi-sie-jakas-wielka-a-przez-wieki-idaca", - "pd": 0, - "title": "\u015ani mi si\u0119 jaka\u015b wielka a przez wieki id\u0105ca" - } - }, - { - "pk": 376, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "snila-sie-zima", - "pd": 0, - "title": "\u015ani\u0142a si\u0119 zima" - } - }, - { - "pk": 99, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "spiaca-krolewna", - "pd": 0, - "title": "\u015api\u0105ca kr\u00f3lewna" - } - }, - { - "pk": 670, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Rajnold Suchodolski", - "slug": "spiew", - "pd": 0, - "title": "\u015apiew" - } - }, - { - "pk": 162, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "spiewny-pocalunek", - "pd": 0, - "title": "\u015apiewny poca\u0142unek" - } - }, - { - "pk": 452, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "swiatlo-w-ruinach", - "pd": 0, - "title": "\u015awiat\u0142o w ruinach" - } - }, - { - "pk": 53, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "swit", - "pd": 0, - "title": "\u015awit" - } - }, - { - "pk": 163, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "ta-chwila", - "pd": 0, - "title": "Ta chwila" - } - }, - { - "pk": 178, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Artur Conan Doyle", - "slug": "tajemnica-baskervilleow", - "pd": 0, - "title": "Tajemnica Baskerville'\u00f3w" - } - }, - { - "pk": 112, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Frances Hodgson Burnett", - "slug": "tajemniczy-ogrod", - "pd": 2014, - "title": "Tajemniczy ogr\u00f3d" - } - }, - { - "pk": 585, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "tak-mi-boze-dopomoz", - "pd": 0, - "title": "Tak mi, Bo\u017ce, dopom\u00f3\u017c" - } - }, - { - "pk": 340, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "tango", - "pd": 0, - "title": "Tango" - } - }, - { - "pk": 283, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Irena Jurgielewiczowa", - "slug": "ten-obcy", - "pd": 2074, - "title": "Ten obcy" - } - }, - { - "pk": 586, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "ten-sam-duchowi-plomienny-szlak", - "pd": 0, - "title": "Ten sam duchowi p\u0142omienny szlak" - } - }, - { - "pk": 100, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "titelitury", - "pd": 0, - "title": "Titelitury" - } - }, - { - "pk": 164, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "to-wiem", - "pd": 0, - "title": "To wiem" - } - }, - { - "pk": 101, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "tomcio-paluszek", - "pd": 0, - "title": "Tomcio paluszek" - } - }, - { - "pk": 610, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Alfred Szklarski", - "slug": "tomek-w-krainie-kangurow", - "pd": 2063, - "title": "Tomek w krainie kangur\u00f3w" - } - }, - { - "pk": 165, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "torun", - "pd": 0, - "title": "Toru\u0144" - } - }, - { - "pk": 410, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Wies\u0142aw My\u015bliwski", - "slug": "traktat-o-luskaniu-fasoli", - "pd": null, - "title": "Traktat o \u0142uskaniu fasoli" - } - }, - { - "pk": 645, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "triumfy-krola-niebieskiego", - "pd": 0, - "title": "Triumfy Kr\u00f3la Niebieskiego" - } - }, - { - "pk": 282, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Karol Wojty\u0142a", - "slug": "tryptyk-rzymski", - "pd": 2076, - "title": "Tryptyk Rzymski" - } - }, - { - "pk": 377, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "trzech-budrysow", - "pd": 0, - "title": "Trzech Budrys\u00f3w" - } - }, - { - "pk": 671, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "trzeci-maj-litwina", - "pd": 0, - "title": "Trzeci Maj Litwina" - } - }, - { - "pk": 341, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "tu-jestem", - "pd": 0, - "title": "Tu jestem" - } - }, - { - "pk": 378, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "tukaj", - "pd": 0, - "title": "Tukaj" - } - }, - { - "pk": 616, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander \u015awi\u0119tochowski", - "slug": "twingo", - "pd": 0, - "title": "Twingo" - } - }, - { - "pk": 342, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "twoj-portret", - "pd": 0, - "title": "Tw\u00f3j portret" - } - }, - { - "pk": 587, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "ty-glos-cierpiacy-podnies-i-niech-w-tobie", - "pd": 0, - "title": "Ty g\u0142os cierpi\u0105cy podnie\u015b \u2014 i niech w tobie" - } - }, - { - "pk": 404, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "tygrys-i-roza", - "pd": null, - "title": "Tygrys i R\u00f3\u017ca" - } - }, - { - "pk": 379, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "uciec-z-dusza-na-listek", - "pd": 0, - "title": "Uciec z dusz\u0105 na listek" - } - }, - { - "pk": 380, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "ucieczka", - "pd": 0, - "title": "Ucieczka" - } - }, - { - "pk": 672, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Franciszek Kowalski", - "slug": "ulan-i-dziewczyna", - "pd": 0, - "title": "U\u0142an i dziewczyna" - } - }, - { - "pk": 588, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "uspokojenie", - "pd": 0, - "title": "Uspokojenie" - } - }, - { - "pk": 343, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "usta-i-oczy", - "pd": 0, - "title": "Usta i oczy" - } - }, - { - "pk": 623, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jules Gabriel Verne", - "slug": "w-80-dni-dokola-swiata", - "pd": 0, - "title": "W 80 dni doko\u0142a \u015bwiata" - } - }, - { - "pk": 590, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "w-albumie-e-hr-krasinskiej", - "pd": 0, - "title": "W albumie E. hr. Krasi\u0144skiej" - } - }, - { - "pk": 166, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "w-boju", - "pd": 0, - "title": "W boju" - } - }, - { - "pk": 188, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stefan Grabi\u0144ski", - "slug": "w-domu-sary", - "pd": 0, - "title": "W domu Sary" - } - }, - { - "pk": 591, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "w-dziecinne-moje-cudne-lata", - "pd": 0, - "title": "W dziecinne moje cudne lata" - } - }, - { - "pk": 381, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "w-imienniku-celiny-szymanowskiej", - "pd": 0, - "title": "W imienniku Celiny Szymanowskiej" - } - }, - { - "pk": 476, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "w-ogrodzie-saskim", - "pd": 0, - "title": "W Ogrodzie Saskim" - } - }, - { - "pk": 592, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "w-ostatni-dzien-w-ostatni-dzien", - "pd": 0, - "title": "W ostatni dzie\u0144 \u2014 w ostatni dzie\u0144" - } - }, - { - "pk": 501, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "w-palarni-opium", - "pd": 0, - "title": "W palarni opium" - } - }, - { - "pk": 593, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "w-pamietniku-zofii-bobrowny", - "pd": 0, - "title": "W pami\u0119tniku Zofii Bobr\u00f3wny" - } - }, - { - "pk": 594, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "w-sztambuchu-marii-wodzinskiej", - "pd": 0, - "title": "W sztambuchu Marii Wodzi\u0144skiej" - } - }, - { - "pk": 589, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "w-szwajcarii", - "pd": 0, - "title": "W Szwajcarii" - } - }, - { - "pk": 428, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "w-weronie", - "pd": 0, - "title": "W Weronie" - } - }, - { - "pk": 453, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "w-zimowy-wieczor", - "pd": 0, - "title": "W zimowy wiecz\u00f3r" - } - }, - { - "pk": 646, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Piotr Skarga", - "slug": "w-zlobie-lezy", - "pd": 0, - "title": "W \u017c\u0142obie le\u017cy" - } - }, - { - "pk": 595, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "waclaw", - "pd": 0, - "title": "Wac\u0142aw" - } - }, - { - "pk": 502, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "wampir", - "pd": 0, - "title": "Wampir" - } - }, - { - "pk": 427, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "wanda", - "pd": 0, - "title": "Wanda" - } - }, - { - "pk": 673, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "warszawianka", - "pd": 0, - "title": "Warszawianka" - } - }, - { - "pk": 678, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Wyspia\u0144ski", - "slug": "wyspianski-warszawianka", - "pd": 0, - "title": "Warszawianka" - } - }, - { - "pk": 674, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "warszawianka-1831", - "pd": 0, - "title": "Warszawianka 1831" - } - }, - { - "pk": 675, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "warszawianka-1905", - "pd": 0, - "title": "Warszawianka 1905" - } - }, - { - "pk": 344, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "wczesnym-rankiem", - "pd": 0, - "title": "Wczesnym rankiem" - } - }, - { - "pk": 503, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "we-mglach", - "pd": 0, - "title": "We mg\u0142ach" - } - }, - { - "pk": 518, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "wesole-kumoszki-z-windsoru", - "pd": 0, - "title": "Weso\u0142e kumoszki z Windsoru" - } - }, - { - "pk": 54, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "wesoly-zmarly", - "pd": 0, - "title": "Weso\u0142y Zmar\u0142y" - } - }, - { - "pk": 167, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "westchnienie", - "pd": 0, - "title": "Westchnienie" - } - }, - { - "pk": 55, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "widmo", - "pd": 0, - "title": "Widmo" - } - }, - { - "pk": 168, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "widzenie", - "pd": 0, - "title": "Widzenie" - } - }, - { - "pk": 477, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "widziadla", - "pd": 0, - "title": "Widziad\u0142a" - } - }, - { - "pk": 596, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "wielcysmy-byli-i-smiesznismy-byli", - "pd": 0, - "title": "Wielcy\u015bmy byli i \u015bmieszni\u015bmy byli" - } - }, - { - "pk": 102, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "wierny-jan", - "pd": 0, - "title": "Wierny Jan" - } - }, - { - "pk": 345, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "wiersz-konny", - "pd": 0, - "title": "Wiersz konny" - } - }, - { - "pk": 169, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "wiersz-o-smierci", - "pd": 0, - "title": "Wiersz o \u015bmierci" - } - }, - { - "pk": 597, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "wierze", - "pd": 0, - "title": "Wierz\u0119" - } - }, - { - "pk": 598, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "wiesz-panie-i-zem-zbiegal-swiat-szeroki", - "pd": 0, - "title": "Wiesz, Panie, i \u017cem zbiega\u0142 \u015bwiat szeroki" - } - }, - { - "pk": 170, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "wiezien-milosci", - "pd": 0, - "title": "Wi\u0119zie\u0144 mi\u0142o\u015bci" - } - }, - { - "pk": 56, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "wino-galganiarzy", - "pd": 0, - "title": "Wino Ga\u0142ganiarzy" - } - }, - { - "pk": 57, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "wino-mordercy", - "pd": 0, - "title": "Wino Mordercy" - } - }, - { - "pk": 58, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "wino-samotnika", - "pd": 0, - "title": "Wino Samotnika" - } - }, - { - "pk": 295, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Oskar Kolberg", - "slug": "wlazl-kotek-na-plotek", - "pd": 0, - "title": "Wlaz\u0142 kotek na p\u0142otek" - } - }, - { - "pk": 617, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Dorota Terakowska", - "slug": "wladca-lewawu", - "pd": 2075, - "title": "W\u0142adca Lewawu" - } - }, - { - "pk": 59, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "wrog", - "pd": 0, - "title": "Wr\u00f3g" - } - }, - { - "pk": 186, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Wiktor Gomulicki", - "slug": "wspomnienia-niebieskiego-mundurka", - "pd": 0, - "title": "Wspomnienia niebieskiego mundurka" - } - }, - { - "pk": 599, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "wspomnienie-pani-de-st-marcel-z-domu-chauveaux", - "pd": 0, - "title": "Wspomnienie pani de St Marcel z domu Chauveaux" - } - }, - { - "pk": 600, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "wstal-anhelli-z-grobu-za-nim-wszystkie-duchy", - "pd": 0, - "title": "Wsta\u0142 Anhelli z grobu \u2014 za nim wszystkie duchy" - } - }, - { - "pk": 647, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "wsrod-nocnej-ciszy", - "pd": 0, - "title": "W\u015br\u00f3d nocnej ciszy" - } - }, - { - "pk": 601, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "wyjdzie-stu-robotnikow", - "pd": 0, - "title": "Wyjdzie stu robotnik\u00f3w" - } - }, - { - "pk": 346, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "wyruszyla-dusza-w-droge", - "pd": 0, - "title": "Wyruszy\u0142a dusza w drog\u0119" - } - }, - { - "pk": 60, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "wyrzut-posmiertny", - "pd": 0, - "title": "Wyrzut Po\u015bmiertny" - } - }, - { - "pk": 608, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Robert Louis Stevenson", - "slug": "wyspa-skarbow", - "pd": 0, - "title": "Wyspa skarb\u00f3w" - } - }, - { - "pk": 679, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Wyspia\u0144ski", - "slug": "wyzwolenie", - "pd": 0, - "title": "Wyzwolenie" - } - }, - { - "pk": 61, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "wzlot", - "pd": 0, - "title": "Wzlot" - } - }, - { - "pk": 478, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "z-bielan", - "pd": 0, - "title": "Z Bielan" - } - }, - { - "pk": 292, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Kasprowicz", - "slug": "z-chalupy", - "pd": 0, - "title": "Z cha\u0142upy" - } - }, - { - "pk": 602, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "z-listu-do-ksiegarza", - "pd": 0, - "title": "Z listu do ksi\u0119garza" - } - }, - { - "pk": 648, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "z-narodzenia-pana", - "pd": 0, - "title": "Z narodzenia Pana" - } - }, - { - "pk": 504, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "z-pamietnika", - "pd": 0, - "title": "Z pami\u0119tnika" - } - }, - { - "pk": 505, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "z-wedrowek-haruna-al-reszyda", - "pd": 0, - "title": "Z w\u0119dr\u00f3wek Haruna al Reszyda" - } - }, - { - "pk": 479, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "z-wypracowan-malego-frania", - "pd": 0, - "title": "Z wypracowa\u0144 ma\u0142ego Frania" - } - }, - { - "pk": 429, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "za-kulisami", - "pd": 0, - "title": "Za kulisami" - } - }, - { - "pk": 506, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "zabilem", - "pd": 0, - "title": "Zabi\u0142em" - } - }, - { - "pk": 347, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "zachod", - "pd": 0, - "title": "Zach\u00f3d" - } - }, - { - "pk": 603, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "zachwycenie", - "pd": 0, - "title": "Zachwycenie" - } - }, - { - "pk": 62, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "zapach-egzotyczny", - "pd": 0, - "title": "Zapach Egzotyczny" - } - }, - { - "pk": 63, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "zaproszenie-do-podrozy", - "pd": 0, - "title": "Zaproszenie Do Podr\u00f3\u017cy" - } - }, - { - "pk": 296, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Oskar Kolberg", - "slug": "zasiali-gorale", - "pd": 0, - "title": "Zasiali g\u00f3rale" - } - }, - { - "pk": 348, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "zboj", - "pd": 0, - "title": "Zb\u00f3j" - } - }, - { - "pk": 176, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Fiodor Dostojewski", - "slug": "zbrodnia-i-kara", - "pd": 2027, - "title": "Zbrodnia i kara" - } - }, - { - "pk": 382, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "zdania-i-uwagi", - "pd": 0, - "title": "Zdania i uwagi" - } - }, - { - "pk": 300, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Hanna Krall", - "slug": "zdazyc-przed-panem-bogiem", - "pd": null, - "title": "Zd\u0105\u017cy\u0107 przed Panem Bogiem" - } - }, - { - "pk": 454, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "zefirek", - "pd": 0, - "title": "Zefirek" - } - }, - { - "pk": 64, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "zegar", - "pd": 0, - "title": "Zegar" - } - }, - { - "pk": 383, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "zima-w-miescie", - "pd": 0, - "title": "Zima w mie\u015bcie" - } - }, - { - "pk": 103, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "zlodziej-nad-zlodziejami", - "pd": 0, - "title": "Z\u0142odziej nad z\u0142odziejami" - } - }, - { - "pk": 455, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "zlota-nitka", - "pd": 0, - "title": "Z\u0142ota nitka" - } - }, - { - "pk": 175, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Tadeusz Do\u0142\u0119ga-Mostowicz", - "slug": "znachor", - "pd": 0, - "title": "Znachor" - } - }, - { - "pk": 65, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "zniszczenie", - "pd": 0, - "title": "Zniszczenie" - } - }, - { - "pk": 66, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "zwloki", - "pd": 0, - "title": "Zw\u0142oki" - } - }, - { - "pk": 407, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "zaba", - "pd": null, - "title": "\u017baba" - } - }, - { - "pk": 104, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "zabi-krol", - "pd": 0, - "title": "\u017babi kr\u00f3l" - } - }, - { - "pk": 171, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "zal", - "pd": 0, - "title": "\u017bal" - } - }, - { - "pk": 384, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "zeglarz", - "pd": 0, - "title": "\u017beglarz" - } - }, - { - "pk": 604, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "zmija", - "pd": 0, - "title": "\u017bmija" - } - }, - { - "pk": 67, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "zywa-pochodnia", - "pd": 0, - "title": "\u017bywa Pochodnia" - } - }, - { - "pk": 487, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Miko\u0142aj Rej", - "slug": "zywot-czlowieka-poczciwego", - "pd": 0, - "title": "\u017bywot cz\u0142owieka poczciwego" - } - } -] \ No newline at end of file diff --git a/apps/pdcounter/locale/de/LC_MESSAGES/django.mo b/apps/pdcounter/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index 690e38b09..000000000 Binary files a/apps/pdcounter/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/de/LC_MESSAGES/django.po b/apps/pdcounter/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 89dcf4e0a..000000000 --- a/apps/pdcounter/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,144 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-04-15 13:43+0100\n" -"Last-Translator: Kamil \n" -"Language-Team: \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" - -#: models.py:13 -msgid "name" -msgstr "Name" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "Slug" - -#: models.py:15 -msgid "sort key" -msgstr "Sortierschlüssel" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "Beschreibung" - -#: models.py:17 -msgid "year of death" -msgstr "Todesjahr" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "Autor" - -#: models.py:24 -#, fuzzy -msgid "authors" -msgstr "Autoren" - -#: models.py:62 -msgid "title" -msgstr "Titel" - -#: models.py:64 -msgid "goes to public domain" -msgstr "Gehe zu Public Domain" - -#: models.py:66 -msgid "translator" -msgstr "Übersetzer" - -#: models.py:70 -msgid "book stub" -msgstr "Buchvorschau" - -#: models.py:71 -msgid "book stubs" -msgstr "Buchvorschauen" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "Lesen Sie mehr über diesem Werk bei Lektury.Gazeta.pl" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "Lesen Sie einen Artikel über diesem Autor in Wikipedia" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "Die Urheberrechte für dieses Werk werden geschützt." - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"Find out why Internet libraries can't publish this author's works." -msgstr "" -"Erfahren " -"Sie warum Internetbibliotheken die Werke dieses Autors nicht publizieren " -"dürfen." - -#: templates/pdcounter/author_detail.html:40 -#, fuzzy -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" -"Die Werke dieses Autors sind in Public Domain und werden in Internet-" -"Schulbibliothek von Wolne Lektury bald publiziert." - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" -"Die Werke des Autors werden in Public Domain sein und werden unbegrenzt " -"publeziert werden dürfen in" - -#: templates/pdcounter/book_stub_detail.html:17 -#, fuzzy -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" -"Dieses Werk ist in Public Domain und wird in Internet Schulbibliothek von " -"Wolne Lektury bald publiziert." - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" -"Die Werke des Autors werden in Public Domain sein und werden unbegrenzt " -"publeziert werden dürfen in" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"Find out why Internet libraries can't publish this work." -msgstr "" -"Erfahren " -"Sie warum Internetbibliotheken dieses Werk nicht publizieren dürfen." - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "Dieses Werk wird durch das Urheberrecht geschützt." - -#~ msgid "year of translator's death" -#~ msgstr "Todesjahr des Übersetzers" diff --git a/apps/pdcounter/locale/en/LC_MESSAGES/django.mo b/apps/pdcounter/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index 18f7c61b7..000000000 Binary files a/apps/pdcounter/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/en/LC_MESSAGES/django.po b/apps/pdcounter/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index 7190a6c56..000000000 --- a/apps/pdcounter/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,130 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 20:05+0100\n" -"Last-Translator: xxx \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" -"Plural-Forms: nplurals=2; plural=n != 1\n" - -#: models.py:13 -msgid "name" -msgstr "name" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "Slug" - -#: models.py:15 -msgid "sort key" -msgstr "Sort key" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "Description" - -#: models.py:17 -msgid "year of death" -msgstr "Year of death" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "author" - -#: models.py:24 -#, fuzzy -msgid "authors" -msgstr "author" - -#: models.py:62 -msgid "title" -msgstr "Title" - -#: models.py:64 -msgid "goes to public domain" -msgstr "Goes to public domain" - -#: models.py:66 -msgid "translator" -msgstr "Translator" - -#: models.py:70 -msgid "book stub" -msgstr "Book stub" - -#: models.py:71 -msgid "book stubs" -msgstr "Book stubs" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "" - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"Find out why Internet libraries can't publish this author's works." -msgstr "" - -#: templates/pdcounter/author_detail.html:40 -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:17 -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"Find out why Internet libraries can't publish this work." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "" - -#~ msgid "year of translator's death" -#~ msgstr "Year of translator's death" diff --git a/apps/pdcounter/locale/es/LC_MESSAGES/django.mo b/apps/pdcounter/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index 21f9745a7..000000000 Binary files a/apps/pdcounter/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/es/LC_MESSAGES/django.po b/apps/pdcounter/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index a04dc78b7..000000000 --- a/apps/pdcounter/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,143 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-05-17 22:05+0100\n" -"Last-Translator: KG \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" - -#: models.py:13 -msgid "name" -msgstr "nombre" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "slug" - -#: models.py:15 -msgid "sort key" -msgstr "clave de clasificación" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "descripción" - -#: models.py:17 -msgid "year of death" -msgstr "año de muerte" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "autor" - -#: models.py:24 -msgid "authors" -msgstr "autores" - -#: models.py:62 -msgid "title" -msgstr "título" - -#: models.py:64 -msgid "goes to public domain" -msgstr "pasa al dominio público" - -#: models.py:66 -msgid "translator" -msgstr "traductor" - -#: models.py:70 -msgid "book stub" -msgstr "vista previa del libro" - -#: models.py:71 -msgid "book stubs" -msgstr "vista previa de libros" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "Lea el estudio sobre las obras de este autor en Lektury.Gazeta.pl" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "Lea el artículo sobre este autor en Wikipedia" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "Las obras de este autor tienen todos los derechos de autor reservados." - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"Find out why Internet libraries can't publish this author's works." -msgstr "" -"Find out el porqué las bibliotecas virtuales no pueden publicar las obras de este " -"autor." - -#: templates/pdcounter/author_detail.html:40 -#, fuzzy -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" -"Las obras de este autor son de dominio público y pronto serán publicadas en " -"Biblioteca virtual de Wolne Lektury." - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" -"Las obras de este autor van a ser parte de dominio público y pronto serán " -"publicadas sin restricciones en" - -#: templates/pdcounter/book_stub_detail.html:17 -#, fuzzy -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" -"Esta obra es de dominio público y pronto será publicada en Biblioteca " -"virtual de Wolne Lektury." - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" -"Esta obra va a ser parte de dominio público y pronto será publicada sin " -"restricciones en" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"Find out why Internet libraries can't publish this work." -msgstr "" -"Find out el porqué las bibliotecas virtuales no pueden publicar esta obra." - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "Esta obra tiene todos los derechos de autor reservados." - -#~ msgid "year of translator's death" -#~ msgstr "año de la muerte del traductor" diff --git a/apps/pdcounter/locale/fr/LC_MESSAGES/django.mo b/apps/pdcounter/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index c6e982cc8..000000000 Binary files a/apps/pdcounter/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/fr/LC_MESSAGES/django.po b/apps/pdcounter/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index 6171e494f..000000000 --- a/apps/pdcounter/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,127 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-22 20:58+0100\n" -"Last-Translator: Ela Janota \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:13 -msgid "name" -msgstr "nom" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "ébauche" - -#: models.py:15 -msgid "sort key" -msgstr "critère de tri" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "description" - -#: models.py:17 -msgid "year of death" -msgstr "année de la mort" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "auteur" - -#: models.py:24 -msgid "authors" -msgstr "auteurs" - -#: models.py:62 -msgid "title" -msgstr "titre" - -#: models.py:64 -msgid "goes to public domain" -msgstr "entre dans le domaine public" - -#: models.py:66 -msgid "translator" -msgstr "traducteur" - -#: models.py:70 -msgid "book stub" -msgstr "ébauche du livre" - -#: models.py:71 -msgid "book stubs" -msgstr "ébauches des livres" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "" - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"Find out why Internet libraries can't publish this author's works." -msgstr "" - -#: templates/pdcounter/author_detail.html:40 -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:17 -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"Find out why Internet libraries can't publish this work." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "" - -#~ msgid "year of translator's death" -#~ msgstr "année de la mort du traducteur" diff --git a/apps/pdcounter/locale/it/LC_MESSAGES/django.mo b/apps/pdcounter/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index fc0347069..000000000 Binary files a/apps/pdcounter/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/it/LC_MESSAGES/django.po b/apps/pdcounter/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index e7a083ee4..000000000 --- a/apps/pdcounter/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,152 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-21 17:06+0100\n" -"Last-Translator: xxx\n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: models.py:13 -msgid "name" -msgstr "" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "" - -#: models.py:15 -msgid "sort key" -msgstr "" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "" - -#: models.py:17 -msgid "year of death" -msgstr "" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "" - -#: models.py:24 -msgid "authors" -msgstr "" - -#: models.py:62 -msgid "title" -msgstr "" - -#: models.py:64 -msgid "goes to public domain" -msgstr "" - -#: models.py:66 -msgid "translator" -msgstr "" - -#: models.py:70 -msgid "book stub" -msgstr "" - -#: models.py:71 -msgid "book stubs" -msgstr "" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "" - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"Find out why Internet libraries can't publish this author's works." -msgstr "" - -#: templates/pdcounter/author_detail.html:40 -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:17 -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"Find out why Internet libraries can't publish this work." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "" - -#~ msgid "tags" -#~ msgstr "i tag" - -#~ msgid "tag" -#~ msgstr "tag" - -#~ msgid "content type" -#~ msgstr "tipo di contenuto" - -#~ msgid "object id" -#~ msgstr "oggetto id" - -#~ msgid "tagged_object_list must be called with a queryset or a model." -#~ msgstr "" -#~ "L'elenco degli oggetti taggati deve essere chiamato con un queryset o un " -#~ "modello." - -#~ msgid "tagged_object_list must be called with a tag model." -#~ msgstr "" -#~ "L’elenco degli oggetti taggati deve essere chiamato con un modello tag." - -#~ msgid "tagged_object_list must be called with a tag." -#~ msgstr "L’elenco degli oggetti taggati deve essere chiamato con un tag." - -#~ msgid "No tags found matching \"%s\"." -#~ msgstr "Non sono stati trovati tag corrispondenti \"%s\"." diff --git a/apps/pdcounter/locale/jp/LC_MESSAGES/django.mo b/apps/pdcounter/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index c9739db34..000000000 Binary files a/apps/pdcounter/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/jp/LC_MESSAGES/django.po b/apps/pdcounter/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index 358d71aa2..000000000 --- a/apps/pdcounter/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,125 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:13 -msgid "name" -msgstr "" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "" - -#: models.py:15 -msgid "sort key" -msgstr "" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "" - -#: models.py:17 -msgid "year of death" -msgstr "" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "" - -#: models.py:24 -msgid "authors" -msgstr "" - -#: models.py:62 -msgid "title" -msgstr "" - -#: models.py:64 -msgid "goes to public domain" -msgstr "" - -#: models.py:66 -msgid "translator" -msgstr "" - -#: models.py:70 -msgid "book stub" -msgstr "" - -#: models.py:71 -msgid "book stubs" -msgstr "" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "" - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"Find out why Internet libraries can't publish this author's works." -msgstr "" - -#: templates/pdcounter/author_detail.html:40 -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:17 -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"Find out why Internet libraries can't publish this work." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "" diff --git a/apps/pdcounter/locale/lt/LC_MESSAGES/django.mo b/apps/pdcounter/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index dc721cf69..000000000 Binary files a/apps/pdcounter/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/lt/LC_MESSAGES/django.po b/apps/pdcounter/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index cedd34657..000000000 --- a/apps/pdcounter/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,146 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-04-03 18:01+0100\n" -"Last-Translator: Karolina Zuber \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: models.py:13 -msgid "name" -msgstr "pavadinimas" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "slug" - -#: models.py:15 -msgid "sort key" -msgstr "rikiavimo raktas" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "aprašas" - -#: models.py:17 -msgid "year of death" -msgstr "mirties metai" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "autorius" - -#: models.py:24 -msgid "authors" -msgstr "autoriai" - -#: models.py:62 -msgid "title" -msgstr "pavadinimas" - -#: models.py:64 -msgid "goes to public domain" -msgstr "į viešąją sritį" - -#: models.py:66 -msgid "translator" -msgstr "vertėjas" - -#: models.py:70 -msgid "book stub" -msgstr "book stub" - -#: models.py:71 -msgid "book stubs" -msgstr "book stubs" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "" -"Skaitykite šio autoriaus kūrinio aprašymą interneto svetainėje Lektury." -"Gazeta.pl" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "Skaitykite straipsnį apie šį autorių Vikipedijoje" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "Šio autoriaus kūriniai yra autorinių teisių saugomi." - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"Find out why Internet libraries can't publish this author's works." -msgstr "" -"Sužinokite kodėl šio autoriaus kūriniai negali būti " -"publikuojami internetinėje bibliotekoje." - -#: templates/pdcounter/author_detail.html:40 -#, fuzzy -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" -"Šio autoriaus kūriniai yra viešai prieinami ir netrukus bus publikuoti " -"interneto svetainės Wolne Lektury internetinėje bibliotekoje. " - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" -"Šio autoriaus kūriniai netrukus bus viešai prieinami ir galės būti " -"publikuojami be apribojimų" - -#: templates/pdcounter/book_stub_detail.html:17 -#, fuzzy -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" -"Šis kūrinys yra viešai prieinamas ir netrukus bus publikuotas interneto " -"svetainės Wolne Lektury internetinėje bibliotekoje." - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" -"Šis kūrinys netrukus bus viešai prieinamas ir galės būti publikuojamas be " -"apribojimų" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"Find out why Internet libraries can't publish this work." -msgstr "" -"Sužinokite kodėl šis kūrinys negali būti publikuojamas " -"internetinėje bibliotekoje." - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "Šis kūrinis yra autorinių teisių saugomas." - -#~ msgid "year of translator's death" -#~ msgstr "vertėjo mirimo metai" diff --git a/apps/pdcounter/locale/pl/LC_MESSAGES/django.mo b/apps/pdcounter/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 8716191fe..000000000 Binary files a/apps/pdcounter/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/pl/LC_MESSAGES/django.po b/apps/pdcounter/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 18cd84d7a..000000000 --- a/apps/pdcounter/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,142 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-06-11 15:47+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" -"X-Generator: Poedit 1.5.4\n" - -#: models.py:13 -msgid "name" -msgstr "nazwa" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "slug" - -#: models.py:15 -msgid "sort key" -msgstr "klucz sortowania" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "opis" - -#: models.py:17 -msgid "year of death" -msgstr "rok śmierci" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "autor" - -#: models.py:24 -msgid "authors" -msgstr "autorzy" - -#: models.py:62 -msgid "title" -msgstr "tytuł" - -#: models.py:64 -msgid "goes to public domain" -msgstr "trafia do domeny publicznej" - -#: models.py:66 -msgid "translator" -msgstr "tłumacz" - -#: models.py:70 -msgid "book stub" -msgstr "zapowiedź książki" - -#: models.py:71 -msgid "book stubs" -msgstr "zapowiedzi książek" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "Licznik domeny publicznej" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "Przeczytaj omówienia utworów autora w serwisie Lektury.Gazeta.pl" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "Przeczytaj artykuł o autorze w Wikipedii" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "Dzieła tego autora objęte są prawem autorskim." - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"Find out why Internet libraries can't publish this author's works." -msgstr "" -"Dowiedz " -"się, dlaczego biblioteki internetowe nie mogą udostępniać dzieł tego " -"autora." - -#: templates/pdcounter/author_detail.html:40 -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" -"Dzieła tego autora znajdują się w domenie publicznej i niedługo zostaną " -"opublikowane w bibliotece internetowej Wolne Lektury." - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" -"Dzieła tego autora przejdą do zasobów domeny publicznej i będą mogły być " -"publikowane bez żadnych ograniczeń za" - -#: templates/pdcounter/book_stub_detail.html:17 -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" -"Ten utwór znajduje się w domenie publicznej i niedługo zostanie opublikowany " -"w bibliotece internetowej Wolne Lektury." - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" -"Ten utwór przejdzie do zasobów domeny publicznej i będzie mógł być " -"publikowany bez żadnych ograniczeń za" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"Find out why Internet libraries can't publish this work." -msgstr "" -"Dowiedz " -"się, dlaczego biblioteki internetowe nie mogą udostępniać tego utworu." - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "Ten utwór objęty jest prawem autorskim." - -#~ msgid "year of translator's death" -#~ msgstr "rok śmierci tłumacza" diff --git a/apps/pdcounter/locale/ru/LC_MESSAGES/django.mo b/apps/pdcounter/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 9e6a2e2a4..000000000 Binary files a/apps/pdcounter/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/ru/LC_MESSAGES/django.po b/apps/pdcounter/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index e6ed8e13b..000000000 --- a/apps/pdcounter/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,128 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 22:11+0100\n" -"Last-Translator: xxx \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" - -#: models.py:13 -msgid "name" -msgstr "название" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "slug" - -#: models.py:15 -msgid "sort key" -msgstr "ключ сортировки " - -#: models.py:16 models.py:42 -msgid "description" -msgstr "описание" - -#: models.py:17 -msgid "year of death" -msgstr "год смерти" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "автор" - -#: models.py:24 -msgid "authors" -msgstr "авторы" - -#: models.py:62 -msgid "title" -msgstr "заглавие" - -#: models.py:64 -msgid "goes to public domain" -msgstr "идёт к публичной домене" - -#: models.py:66 -msgid "translator" -msgstr "переводчик" - -#: models.py:70 -msgid "book stub" -msgstr "анонс книги" - -#: models.py:71 -msgid "book stubs" -msgstr "анонсы книги" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "" - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"Find out why Internet libraries can't publish this author's works." -msgstr "" - -#: templates/pdcounter/author_detail.html:40 -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:17 -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"Find out why Internet libraries can't publish this work." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "" - -#~ msgid "year of translator's death" -#~ msgstr "год смерти переводчика" diff --git a/apps/pdcounter/locale/uk/LC_MESSAGES/django.mo b/apps/pdcounter/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index 539ff49a7..000000000 Binary files a/apps/pdcounter/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/uk/LC_MESSAGES/django.po b/apps/pdcounter/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index bb7bd4f6c..000000000 --- a/apps/pdcounter/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,143 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-05-28 14:18+0100\n" -"Last-Translator: Natalia Kertyczak \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:13 -msgid "name" -msgstr "назва" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "slug" - -#: models.py:15 -msgid "sort key" -msgstr "ключ сортування" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "опис" - -#: models.py:17 -msgid "year of death" -msgstr "дата смерті" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "автор" - -#: models.py:24 -msgid "authors" -msgstr "автори" - -#: models.py:62 -msgid "title" -msgstr "заголовок" - -#: models.py:64 -msgid "goes to public domain" -msgstr "входить у суспільне надбання" - -#: models.py:66 -msgid "translator" -msgstr "перекладач" - -#: models.py:70 -msgid "book stub" -msgstr "заготовка книжки" - -#: models.py:71 -msgid "book stubs" -msgstr "заготовки книжок" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "Прочитати обговорення твору автора на Lektury.Gazeta.pl" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "Прочитати статтю про автора у Вікіпедії" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "Твори цього автора охороняються авторським правом." - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"Find out why Internet libraries can't publish this author's works." -msgstr "" -"Дізнайтеся, чому електронні бібліотеки не можуть " -"опублікувати творів цього автора." - -#: templates/pdcounter/author_detail.html:40 -#, fuzzy -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" -"Твори цього автора є частиною суспільного надбання і скоро будуть " -"опубліковані у шкільній електронній бібліотеці Wolne Lektury." - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" -"Твори цього автора стануть частиною суспільного надбання і можна буде їх " -"вільно публікувати у" - -#: templates/pdcounter/book_stub_detail.html:17 -#, fuzzy -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" -"Цей твір є частиною суспільного надбання і скоро буде опублікований у " -"шкільній електронній бібліотеці Wolne Lektury." - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" -"Цей твір стане частиною суспільного надбання і можна буде його вільно " -"публікувати у" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"Find out why Internet libraries can't publish this work." -msgstr "" -"Дізнайтеся, чому електронні бібліотеки не можуть " -"опублікувати цього твору." - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "Цей твір охороняється авторським правом." - -#~ msgid "year of translator's death" -#~ msgstr "рік смерті перекладача" diff --git a/apps/pdcounter/migrations/0001_initial.py b/apps/pdcounter/migrations/0001_initial.py deleted file mode 100644 index fdd0a8e9b..000000000 --- a/apps/pdcounter/migrations/0001_initial.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Author', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=50, verbose_name='name', db_index=True)), - ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), - ('sort_key', models.CharField(max_length=120, verbose_name='Sort key', db_index=True)), - ('description', models.TextField(verbose_name='Description', blank=True)), - ('death', models.IntegerField(null=True, verbose_name='Year of death', blank=True)), - ('gazeta_link', models.CharField(max_length=240, blank=True)), - ('wiki_link', models.CharField(max_length=240, blank=True)), - ], - options={ - 'ordering': ('sort_key',), - 'verbose_name': 'author', - 'verbose_name_plural': 'authors', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='BookStub', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('title', models.CharField(max_length=120, verbose_name='Title')), - ('author', models.CharField(max_length=120, verbose_name='author')), - ('pd', models.IntegerField(null=True, verbose_name='Goes to public domain', blank=True)), - ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), - ('translator', models.TextField(verbose_name='Translator', blank=True)), - ], - options={ - 'ordering': ('title',), - 'verbose_name': 'Book stub', - 'verbose_name_plural': 'Book stubs', - }, - bases=(models.Model,), - ), - ] diff --git a/apps/pdcounter/migrations/0002_auto_20151221_1225.py b/apps/pdcounter/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index 6447cc1d4..000000000 --- a/apps/pdcounter/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('pdcounter', '0001_initial'), - ] - - operations = [ - migrations.AlterModelOptions( - name='bookstub', - options={'ordering': ('title',), 'verbose_name': 'book stub', 'verbose_name_plural': 'book stubs'}, - ), - migrations.AlterField( - model_name='author', - name='death', - field=models.IntegerField(null=True, verbose_name='year of death', blank=True), - ), - migrations.AlterField( - model_name='author', - name='description', - field=models.TextField(verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='author', - name='slug', - field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), - ), - migrations.AlterField( - model_name='author', - name='sort_key', - field=models.CharField(max_length=120, verbose_name='sort key', db_index=True), - ), - migrations.AlterField( - model_name='bookstub', - name='pd', - field=models.IntegerField(null=True, verbose_name='goes to public domain', blank=True), - ), - migrations.AlterField( - model_name='bookstub', - name='slug', - field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), - ), - migrations.AlterField( - model_name='bookstub', - name='title', - field=models.CharField(max_length=120, verbose_name='title'), - ), - migrations.AlterField( - model_name='bookstub', - name='translator', - field=models.TextField(verbose_name='translator', blank=True), - ), - ] diff --git a/apps/pdcounter/migrations/__init__.py b/apps/pdcounter/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/pdcounter/models.py b/apps/pdcounter/models.py deleted file mode 100644 index 7c10f1e59..000000000 --- a/apps/pdcounter/models.py +++ /dev/null @@ -1,100 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django.db import models -from django.db.models import permalink -from django.utils.translation import ugettext_lazy as _ -from datetime import datetime -from django.db.models.signals import post_save, post_delete - -class Author(models.Model): - name = models.CharField(_('name'), max_length=50, db_index=True) - slug = models.SlugField(_('slug'), max_length=120, db_index=True, unique=True) - sort_key = models.CharField(_('sort key'), max_length=120, db_index=True) - description = models.TextField(_('description'), blank=True) - death = models.IntegerField(_(u'year of death'), blank=True, null=True) - gazeta_link = models.CharField(blank=True, max_length=240) - wiki_link = models.CharField(blank=True, max_length=240) - - class Meta: - ordering = ('sort_key',) - verbose_name = _('author') - verbose_name_plural = _('authors') - - @property - def category(self): - return "author" - - def __unicode__(self): - return self.name - - def __repr__(self): - return "Author(slug=%r)" % self.slug - - @permalink - def get_absolute_url(self): - return ('catalogue.views.tagged_object_list', [self.url_chunk]) - - def has_description(self): - return len(self.description) > 0 - has_description.short_description = _('description') - has_description.boolean = True - - def alive(self): - return self.death is None - - def in_pd(self): - """ tests whether an author is in public domain """ - return self.death is not None and self.goes_to_pd() <= datetime.now().year - - def goes_to_pd(self): - """ calculates the year of public domain entry for an author """ - return self.death + 71 if self.death is not None else None - - @property - def url_chunk(self): - return '/'.join(('autor', self.slug)) - - -class BookStub(models.Model): - title = models.CharField(_('title'), max_length=120) - author = models.CharField(_('author'), max_length=120) - pd = models.IntegerField(_('goes to public domain'), null=True, blank=True) - slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True) - translator = models.TextField(_('translator'), blank=True) - - class Meta: - ordering = ('title',) - verbose_name = _('book stub') - verbose_name_plural = _('book stubs') - - def __unicode__(self): - return self.title - - @permalink - def get_absolute_url(self): - return ('catalogue.views.book_detail', [self.slug]) - - def in_pd(self): - return self.pd is not None and self.pd <= datetime.now().year - - @property - def name(self): - return self.title - - def pretty_title(self, html_links=False): - return ', '.join((self.author, self.title)) - - -if not settings.NO_SEARCH_INDEX: - def update_index(sender, instance, **kwargs): - from search.index import Index - idx = Index() - idx.index_tags(instance, remove_only=not 'created' in kwargs) - - post_delete.connect(update_index, Author) - post_delete.connect(update_index, BookStub) - post_save.connect(update_index, Author) - post_save.connect(update_index, BookStub) diff --git a/apps/pdcounter/static/pdcounter/pdcounter.js b/apps/pdcounter/static/pdcounter/pdcounter.js deleted file mode 100755 index a1ff53736..000000000 --- a/apps/pdcounter/static/pdcounter/pdcounter.js +++ /dev/null @@ -1,41 +0,0 @@ -(function($) { - $(function() { - - $('.countdown').each(function() { - var $this = $(this); - - var serverTime = function() { - var time = null; - $.ajax({url: '/zegar/', - async: false, dataType: 'text', - success: function(text) { - time = new Date(text); - }, error: function(http, message, exc) { - time = new Date(); - }}); - return time; - } - - if (LANGUAGE_CODE != 'en') { - $.countdown.setDefaults($.countdown.regional[LANGUAGE_CODE]); - } - else { - $.countdown.setDefaults($.countdown.regional['']); - } - - var options = { - until: new Date($this.attr('data-until')), - format: 'ydHMS', - serverSync: serverTime, - onExpiry: function(){location.reload()}, // TODO: no reload - }; - if ($this.hasClass('inline')) { - options.layout = '{d<}{dn} {dl} {d>}{hnn}{sep}{mnn}{sep}{snn}'; - } - - $this.countdown(options); - }); - - - }); -})(jQuery); diff --git a/apps/pdcounter/templates/pdcounter/author_detail.html b/apps/pdcounter/templates/pdcounter/author_detail.html deleted file mode 100644 index 50eef63fb..000000000 --- a/apps/pdcounter/templates/pdcounter/author_detail.html +++ /dev/null @@ -1,56 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load time_tags %} - -{% block titleextra %}{{ author.name }}{% endblock %} - -{% block metadescription %}{% trans "Public domain counter" %}: {{author.name}}.{% endblock %} - -{% block bodyid %}author-detail{% endblock %} - -{% block body %} - -
            -

            {{ author.name }}

            -
            - {% if author.has_description %} -
            -
            {{ author.description|safe }}
            -
            {{ author.description|safe|truncatewords_html:30 }}
            -
            -
            -

            - {% endif %} - {% if author.gazeta_link %} -

            - {% trans "Read work's study of this author on Lektury.Gazeta.pl" %} -

            - {% endif %} - {% if author.wiki_link %} -

            - {% trans "Read article about this author on Wikipedia" %} -

            - {% endif %} - - {% if author.alive %} -

            {% trans "This author's works are copyrighted." %} - {% trans "Find out why Internet libraries can't publish this author's works." %}

            - {% else %} - {% if author.in_pd %} -

            {% trans "This author's works are in public domain and will be published on Internet library of Wolne Lektury soon." %}

            - {% else %} -
            -

            {% trans "This author's works will become part of public domain and will be allowed to be published without restrictions in" %}

            -
            -

            {% trans "Find out why Internet libraries can't publish this author's works." %}

            -
            - {% endif %} - {% endif %} - {% include "info/join_us.html" %} -
            -
            - -
            - {% include "publishing_suggest.html" %} -
            -{% endblock %} diff --git a/apps/pdcounter/templates/pdcounter/book_stub_detail.html b/apps/pdcounter/templates/pdcounter/book_stub_detail.html deleted file mode 100644 index 640d68ebe..000000000 --- a/apps/pdcounter/templates/pdcounter/book_stub_detail.html +++ /dev/null @@ -1,35 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load time_tags %} - -{% block titleextra %}{{ book.title }}{% endblock %} - -{% block metadescription %}{% trans "Public domain counter" %}: {{ book.title }}.{% endblock %} - -{% block bodyid %}book-stub-detail{% endblock %} - -{% block body %} -
            -

            {{ book.author }}, {{ book.title }}

            -
            - - {% if book.in_pd %} -

            {% trans "This work is in public domain and will be published on Internet library of Wolne Lektury soon." %}

            - {% else %} - {% if book.pd %} -

            {% trans "This work will become part of public domain and will be allowed to be published without restrictions in" %}

            -
            -

            {% trans "Find out why Internet libraries can't publish this work." %}

            - {% else %} -

            {% trans "This work is copyrighted." %} - {% trans "Find out why Internet libraries can't publish this work." %}

            - {% endif %} - {% endif %} - {% include "info/join_us.html" %} -
            -
            - -
            - {% include "publishing_suggest.html" %} -
            -{% endblock %} diff --git a/apps/pdcounter/templatetags/__init__.py b/apps/pdcounter/templatetags/__init__.py deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/pdcounter/templatetags/time_tags.py b/apps/pdcounter/templatetags/time_tags.py deleted file mode 100755 index 7ea5c6055..000000000 --- a/apps/pdcounter/templatetags/time_tags.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import datetime -import pytz -from django.conf import settings -from django import template -from django.utils import timezone - - -register = template.Library() - -@register.filter -def date_to_utc(date, day_end=False): - """ Converts a datetime.date to UTC datetime. - - The datetime represents the start (or end) of the given day in - the server's timezone. - """ - if day_end: - date += datetime.timedelta(1) - localtime = datetime.datetime.combine(date, datetime.time(0, 0)) - return timezone.utc.normalize( - pytz.timezone(settings.TIME_ZONE).localize(localtime) - ) - - -@register.filter -def utc_for_js(dt): - return dt.strftime('%Y/%m/%d %H:%M:%S UTC') diff --git a/apps/pdcounter/views.py b/apps/pdcounter/views.py deleted file mode 100644 index e5b4421ce..000000000 --- a/apps/pdcounter/views.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from datetime import datetime -from django.template import RequestContext -from django.shortcuts import render_to_response, get_object_or_404 -from django.views.decorators import cache -from suggest.forms import PublishingSuggestForm -from . import models - - -@cache.never_cache -def book_stub_detail(request, slug): - book = get_object_or_404(models.BookStub, slug=slug) - if book.pd and not book.in_pd(): - pd_counter = datetime(book.pd, 1, 1) - - form = PublishingSuggestForm( - initial={"books": u"%s — %s, \n" % (book.author, book.title)}) - - return render_to_response('pdcounter/book_stub_detail.html', locals(), - context_instance=RequestContext(request)) - - -@cache.never_cache -def author_detail(request, slug): - author = get_object_or_404(models.Author, slug=slug) - if not author.alive(): - pd_counter = datetime(author.goes_to_pd(), 1, 1) - - form = PublishingSuggestForm(initial={"books": author.name + ", \n"}) - - return render_to_response('pdcounter/author_detail.html', locals(), - context_instance=RequestContext(request)) diff --git a/apps/picture/__init__.py b/apps/picture/__init__.py deleted file mode 100644 index 8b1378917..000000000 --- a/apps/picture/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/picture/admin.py b/apps/picture/admin.py deleted file mode 100644 index f107d3196..000000000 --- a/apps/picture/admin.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin -from picture.models import Picture -from sorl.thumbnail.admin import AdminImageMixin - -class PictureAdmin(AdminImageMixin, admin.ModelAdmin): - pass - -admin.site.register(Picture, PictureAdmin) diff --git a/apps/picture/engine.py b/apps/picture/engine.py deleted file mode 100644 index 574e5a889..000000000 --- a/apps/picture/engine.py +++ /dev/null @@ -1,57 +0,0 @@ -from sorl.thumbnail.engines import pil_engine -from sorl.thumbnail import parsers - -# -# Class developed by -# http://timmyomahony.com/blog/custom-cropping-engine-sorl-thumbnail/ -# -class CustomCroppingEngine(pil_engine.Engine): - """ - A custom sorl.thumbnail engine (using PIL) that first crops an image - according to 4 pixel/percentage values in the source image, then scales - that crop down to the size specified in the geometry. This is in contrast - to sorl.thumbnails default engine which first scales the image down to the - specified geometry and applies the crop afterward. - """ - def create(self, image, geometry, options): - image = self.orientation(image, geometry, options) - image = self.colorspace(image, geometry, options) - image = self.crop(image, geometry, options) - image = self.scale(image, geometry, options) - return image - - def _crop_parse(self, crop, xy_image, xy_window): - """ - Conver the crop string passed by the user to accurate cropping values - (This is adapter from the default sorl.thumbnail.parsers.parse_crop) - """ - crops = crop.split(' ') - if len(crops) != 4: - raise parsers.ThumbnailParseError('Unrecognized crop option: %s' % crop) - x1, y1, x2, y2 = crops - - def get_offset(crop, epsilon): - m = parsers.bgpos_pat.match(crop) - if not m: - raise parsers.ThumbnailParseError('Unrecognized crop option: %s' % crop) - value = int(m.group('value')) # we only take ints in the regexp - unit = m.group('unit') - if unit == '%': - value = epsilon * value / 100.0 - return int(max(0, min(value, epsilon))) - x1 = get_offset(x1, xy_image[0]) - y1 = get_offset(y1, xy_image[1]) - x2 = get_offset(x2, xy_image[0]) - y2 = get_offset(y2, xy_image[1]) - return x1, y1, x2, y2 - - def crop(self, image, geometry, options): - crop = options['crop'] - if not crop or crop == 'noop': - return image - x_image, y_image = self.get_image_size(image) - x1,y1,x2,y2 = self._crop_parse(crop, (x_image, y_image), geometry) - return self._crop(image, x1, y1, x2, y2) - - def _crop(self, image, x1, y1, x2, y2): - return image.crop((x1, y1, x2, y2)) diff --git a/apps/picture/forms.py b/apps/picture/forms.py deleted file mode 100644 index 2ad47b0b8..000000000 --- a/apps/picture/forms.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import forms -from django.utils.translation import ugettext_lazy as _ -from picture.models import Picture - - -class PictureImportForm(forms.Form): - picture_xml_file = forms.FileField(required=False) - picture_xml = forms.CharField(required=False) - picture_image_file = forms.FileField(required=False) - picture_image_data = forms.CharField(required=False) - - def clean(self): - from base64 import b64decode - from django.core.files.base import ContentFile - - if not self.cleaned_data['picture_xml_file']: - if self.cleaned_data['picture_xml']: - self.cleaned_data['picture_xml_file'] = \ - ContentFile(self.cleaned_data['picture_xml'].encode('utf-8')) - else: - raise forms.ValidationError(_("Please supply an XML.")) - - if not self.cleaned_data['picture_image_file']: - if self.cleaned_data['picture_image_data']: - self.cleaned_data['picture_image_file'] = \ - ContentFile(b64decode( - self.cleaned_data['picture_image_data'])) - else: - raise forms.ValidationError(_("Please supply an image.")) - - return super(PictureImportForm, self).clean() - - def save(self, commit=True, **kwargs): - return Picture.from_xml_file(self.cleaned_data['picture_xml_file'], image_file=self.cleaned_data['picture_image_file'], - overwrite=True, **kwargs) diff --git a/apps/picture/locale/de/LC_MESSAGES/django.mo b/apps/picture/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index 2ac6a07fc..000000000 Binary files a/apps/picture/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/de/LC_MESSAGES/django.po b/apps/picture/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 7ed1f2669..000000000 --- a/apps/picture/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,205 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/locale/en/LC_MESSAGES/django.mo b/apps/picture/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index c9739db34..000000000 Binary files a/apps/picture/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/en/LC_MESSAGES/django.po b/apps/picture/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index b62ffd4bb..000000000 --- a/apps/picture/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,204 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/locale/es/LC_MESSAGES/django.mo b/apps/picture/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index 2ac6a07fc..000000000 Binary files a/apps/picture/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/es/LC_MESSAGES/django.po b/apps/picture/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index 7ed1f2669..000000000 --- a/apps/picture/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,205 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/locale/fr/LC_MESSAGES/django.mo b/apps/picture/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index 147f51a44..000000000 Binary files a/apps/picture/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/fr/LC_MESSAGES/django.po b/apps/picture/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index d196b01da..000000000 --- a/apps/picture/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,205 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/locale/it/LC_MESSAGES/django.mo b/apps/picture/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index 2ac6a07fc..000000000 Binary files a/apps/picture/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/it/LC_MESSAGES/django.po b/apps/picture/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index 7ed1f2669..000000000 --- a/apps/picture/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,205 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/locale/jp/LC_MESSAGES/django.mo b/apps/picture/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index c9739db34..000000000 Binary files a/apps/picture/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/jp/LC_MESSAGES/django.po b/apps/picture/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index b62ffd4bb..000000000 --- a/apps/picture/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,204 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/locale/lt/LC_MESSAGES/django.mo b/apps/picture/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index 0be4a8ced..000000000 Binary files a/apps/picture/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/lt/LC_MESSAGES/django.po b/apps/picture/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index 4ef094735..000000000 --- a/apps/picture/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,206 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \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" -"%100<10 || n%100>=20) ? 1 : 2);\n" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/locale/pl/LC_MESSAGES/django.mo b/apps/picture/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index f3bc162ca..000000000 Binary files a/apps/picture/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/pl/LC_MESSAGES/django.po b/apps/picture/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 63546c20d..000000000 --- a/apps/picture/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,219 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-10-24 11:44+0200\n" -"PO-Revision-Date: 2014-10-24 11:48+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \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%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.5.4\n" - -#: forms.py:25 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:33 -msgid "Please supply an image." -msgstr "" - -#: models.py:35 -msgid "area" -msgstr "obszar" - -#: models.py:36 -msgid "kind" -msgstr "typ" - -#: models.py:38 -msgid "thing" -msgstr "przedmiot" - -#: models.py:39 -msgid "theme" -msgstr "motyw" - -#: models.py:75 -msgid "title" -msgstr "tytuł" - -#: models.py:76 -msgid "slug" -msgstr "slug" - -#: models.py:77 -msgid "sort key" -msgstr "klucz sortowania" - -#: models.py:78 -#, fuzzy -msgid "sort key by author" -msgstr "klucz sortowania" - -#: models.py:79 models.py:80 -msgid "creation date" -msgstr "data stworzenia" - -#: models.py:82 -msgid "image_file" -msgstr "" - -#: models.py:84 -msgid "picture areas JSON" -msgstr "obszary w JSON" - -#: models.py:85 -msgid "extra information" -msgstr "dodatkowa informacja" - -#: models.py:105 -msgid "picture" -msgstr "obraz" - -#: models.py:106 -msgid "pictures" -msgstr "obrazy" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Image" -msgstr "Obraz" - -#: templates/admin/picture/picture/change_list.html:9 -msgid "Import picture" -msgstr "Importuj obraz" - -#: templates/picture/picture_detail.html:21 -msgid "See also" -msgstr "Zobacz też" - -#: templates/picture/picture_list_thumb.html:9 -#: templates/picture/picture_list_thumb.html:13 -msgctxt "gallery" -msgid "Listing of all works" -msgstr "Spis wszystkich dzieł" - -#: templates/picture/picture_short.html:40 -msgid "Epoch" -msgstr "Rodzaj" - -#: templates/picture/picture_short.html:48 -msgid "Kind" -msgstr "Typ" - -#: templates/picture/picture_short.html:56 -msgid "Genre" -msgstr "Gatunek" - -#: templates/picture/picture_short.html:71 -msgid "View online" -msgstr "Zobacz online" - -#: templates/picture/picture_short.html:74 -msgid "download original" -msgstr "pobierz oryginał" - -#: templates/picture/picture_viewer.html:36 -#: templates/picture/picture_wide.html:64 -msgid "Objects" -msgstr "Obiekty" - -#: templates/picture/picture_viewer.html:37 -msgid "Themes" -msgstr "Motywy" - -#: templates/picture/picture_viewer.html:41 -msgid "Infobox" -msgstr "Informacja" - -#: templates/picture/picture_wide.html:19 -msgid "Style" -msgstr "Styl" - -#: templates/picture/picture_wide.html:29 -msgid "Medium" -msgstr "Technika" - -#: templates/picture/picture_wide.html:36 -msgid "Dimensions" -msgstr "Wymiary pracy" - -#: templates/picture/picture_wide.html:42 -msgid "Date" -msgstr "Czas powstania" - -#: templates/picture/picture_wide.html:53 -msgid "Motifs, themes and objects" -msgstr "Motywy i obiekty" - -#: templates/picture/picture_wide.html:56 -msgid "Motifs and themes" -msgstr "Motywy" - -#: templates/picture/picture_wide.html:82 -msgid "See" -msgstr "Zobacz" - -#: templates/picture/picture_wide.html:85 -msgid "Source" -msgstr "Źródło" - -#: templates/picture/picture_wide.html:85 -msgid "of the picture" -msgstr "obrazu" - -#: templates/picture/picture_wide.html:87 -msgid "Source XML file" -msgstr "Źródło XML" - -#: templates/picture/picture_wide.html:89 -msgid "Picture on" -msgstr "Obraz na" - -#: templates/picture/picture_wide.html:89 -msgid "Editor's Platform" -msgstr "platformie edytorskiej" - -#: templates/picture/picture_wide.html:92 -msgid "Picture description on Wikipedia" -msgstr "Opis w Wikipedii" - -#: views.py:91 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:92 -msgid "Picture imported successfully" -msgstr "Obraz został zimportowany" - -#: views.py:94 -#, python-format -msgid "Error importing file: %r" -msgstr "Błąd importu pliku: %r" - -#~ msgid "Download" -#~ msgstr "Pobierz" - -#~ msgid "original" -#~ msgstr "oryginał" - -#~ msgid "Edit. note" -#~ msgstr "Nota edytorska" - -#~ msgid "Picture's page" -#~ msgstr "Strona obrazu" - -#~ msgid "Picture description on Lektury.Gazeta.pl" -#~ msgstr "Opis na Lektury.Gazeta.pl" diff --git a/apps/picture/locale/ru/LC_MESSAGES/django.mo b/apps/picture/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 714a042c1..000000000 Binary files a/apps/picture/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/ru/LC_MESSAGES/django.po b/apps/picture/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index 0bb775710..000000000 --- a/apps/picture/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,206 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/locale/uk/LC_MESSAGES/django.mo b/apps/picture/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index 714a042c1..000000000 Binary files a/apps/picture/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/uk/LC_MESSAGES/django.po b/apps/picture/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index 0bb775710..000000000 --- a/apps/picture/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,206 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/migrations/0001_initial.py b/apps/picture/migrations/0001_initial.py deleted file mode 100644 index 59dbff64f..000000000 --- a/apps/picture/migrations/0001_initial.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from os.path import join -from django.conf import settings -from django.db import models, migrations -import sorl.thumbnail.fields -import jsonfield.fields -import django.core.files.storage -from django.utils.encoding import force_bytes - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Picture', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('title', models.CharField(max_length=120, verbose_name='Title')), - ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), - ('sort_key', models.CharField(verbose_name='Sort key', max_length=120, editable=False, db_index=True)), - ('sort_key_author', models.CharField(default='', verbose_name='sort key by author', max_length=120, editable=False, db_index=True)), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)), - ('changed_at', models.DateTimeField(auto_now=True, verbose_name='creation date', db_index=True)), - ('xml_file', models.FileField(upload_to=b'xml', storage=django.core.files.storage.FileSystemStorage(base_url=b'/media/pictures/', location=join(force_bytes(settings.MEDIA_ROOT), b'pictures')), verbose_name=b'xml_file')), - ('image_file', sorl.thumbnail.fields.ImageField(upload_to=b'images', storage=django.core.files.storage.FileSystemStorage(base_url=b'/media/pictures/', location=join(force_bytes(settings.MEDIA_ROOT), b'pictures')), verbose_name='image_file')), - ('html_file', models.FileField(upload_to=b'html', storage=django.core.files.storage.FileSystemStorage(base_url=b'/media/pictures/', location=join(force_bytes(settings.MEDIA_ROOT), b'pictures')), verbose_name=b'html_file')), - ('areas_json', jsonfield.fields.JSONField(default={}, verbose_name='picture areas JSON', editable=False)), - ('extra_info', jsonfield.fields.JSONField(default={}, verbose_name='Additional information')), - ('culturepl_link', models.CharField(max_length=240, blank=True)), - ('wiki_link', models.CharField(max_length=240, blank=True)), - ('_related_info', jsonfield.fields.JSONField(null=True, editable=False, blank=True)), - ('width', models.IntegerField(null=True)), - ('height', models.IntegerField(null=True)), - ], - options={ - 'ordering': ('sort_key',), - 'verbose_name': 'picture', - 'verbose_name_plural': 'pictures', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='PictureArea', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('area', jsonfield.fields.JSONField(default={}, verbose_name='area', editable=False)), - ('kind', models.CharField(db_index=True, max_length=10, verbose_name='form', choices=[(b'thing', 'thing'), (b'theme', 'motif')])), - ('picture', models.ForeignKey(related_name=b'areas', to='picture.Picture')), - ], - options={ - }, - bases=(models.Model,), - ), - ] diff --git a/apps/picture/migrations/0002_remove_picture__related_info.py b/apps/picture/migrations/0002_remove_picture__related_info.py deleted file mode 100644 index 10542c85b..000000000 --- a/apps/picture/migrations/0002_remove_picture__related_info.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('picture', '0001_initial'), - ] - - operations = [ - migrations.RemoveField( - model_name='picture', - name='_related_info', - ), - ] diff --git a/apps/picture/migrations/0003_auto_20140924_1559.py b/apps/picture/migrations/0003_auto_20140924_1559.py deleted file mode 100644 index 4e257d809..000000000 --- a/apps/picture/migrations/0003_auto_20140924_1559.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('picture', '0002_remove_picture__related_info'), - ] - - operations = [ - migrations.AlterField( - model_name='picture', - name='title', - field=models.CharField(max_length=255, verbose_name='Title'), - ), - ] diff --git a/apps/picture/migrations/0004_auto_20141016_1337.py b/apps/picture/migrations/0004_auto_20141016_1337.py deleted file mode 100644 index 88d124934..000000000 --- a/apps/picture/migrations/0004_auto_20141016_1337.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('picture', '0003_auto_20140924_1559'), - ] - - operations = [ - migrations.AlterField( - model_name='picture', - name='title', - field=models.CharField(max_length=32767, verbose_name='Title'), - ), - ] diff --git a/apps/picture/migrations/0005_auto_20141022_1001.py b/apps/picture/migrations/0005_auto_20141022_1001.py deleted file mode 100644 index 677877eae..000000000 --- a/apps/picture/migrations/0005_auto_20141022_1001.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.core.files.base import ContentFile -from django.db import models, migrations -from django.template.loader import render_to_string - - -def rebuild_extra_info(apps, schema_editor): - Picture = apps.get_model("picture", "Picture") - from librarian.picture import PictureInfo - from librarian import dcparser - for pic in Picture.objects.all(): - info = dcparser.parse(pic.xml_file.path, PictureInfo) - pic.extra_info = info.to_dict() - areas_json = pic.areas_json - for field in areas_json[u'things'].values(): - field[u'object'] = field[u'object'].capitalize() - pic.areas_json = areas_json - html_text = unicode(render_to_string('picture/picture_info.html', { - 'things': pic.areas_json['things'], - 'themes': pic.areas_json['themes'], - })) - pic.html_file.save("%s.html" % pic.slug, ContentFile(html_text)) - pic.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('picture', '0004_auto_20141016_1337'), - ] - - operations = [ - migrations.RunPython(rebuild_extra_info), - ] diff --git a/apps/picture/migrations/0006_auto_20151221_1225.py b/apps/picture/migrations/0006_auto_20151221_1225.py deleted file mode 100644 index 2f03ce591..000000000 --- a/apps/picture/migrations/0006_auto_20151221_1225.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models -import jsonfield.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('picture', '0005_auto_20141022_1001'), - ] - - operations = [ - migrations.AlterField( - model_name='picture', - name='extra_info', - field=jsonfield.fields.JSONField(default={}, verbose_name='extra information'), - ), - migrations.AlterField( - model_name='picture', - name='slug', - field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), - ), - migrations.AlterField( - model_name='picture', - name='sort_key', - field=models.CharField(verbose_name='sort key', max_length=120, editable=False, db_index=True), - ), - migrations.AlterField( - model_name='picture', - name='title', - field=models.CharField(max_length=32767, verbose_name='title'), - ), - migrations.AlterField( - model_name='picturearea', - name='kind', - field=models.CharField(db_index=True, max_length=10, verbose_name='kind', choices=[(b'thing', 'thing'), (b'theme', 'theme')]), - ), - ] diff --git a/apps/picture/migrations/__init__.py b/apps/picture/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/picture/models.py b/apps/picture/models.py deleted file mode 100644 index 5aabe3c89..000000000 --- a/apps/picture/models.py +++ /dev/null @@ -1,342 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.db import models, transaction -import catalogue.models -from django.db.models import permalink -from sorl.thumbnail import ImageField -from django.conf import settings -from django.contrib.contenttypes.fields import GenericRelation -from django.core.files.storage import FileSystemStorage -from django.utils.datastructures import SortedDict -from fnpdjango.utils.text.slughifi import slughifi -from ssify import flush_ssi_includes -from picture import tasks -from StringIO import StringIO -import jsonfield -import itertools -import logging - -from PIL import Image - -from django.utils.translation import ugettext_lazy as _ -from newtagging import managers -from os import path - - -picture_storage = FileSystemStorage(location=path.join( - settings.MEDIA_ROOT, 'pictures'), - base_url=settings.MEDIA_URL + "pictures/") - - -class PictureArea(models.Model): - picture = models.ForeignKey('picture.Picture', related_name='areas') - area = jsonfield.JSONField(_('area'), default={}, editable=False) - kind = models.CharField(_('kind'), max_length=10, blank=False, - null=False, db_index=True, - choices=(('thing', _('thing')), - ('theme', _('theme')))) - - objects = models.Manager() - tagged = managers.ModelTaggedItemManager(catalogue.models.Tag) - tags = managers.TagDescriptor(catalogue.models.Tag) - tag_relations = GenericRelation(catalogue.models.Tag.intermediary_table_model) - - short_html_url_name = 'picture_area_short' - - @classmethod - def rectangle(cls, picture, kind, coords): - pa = PictureArea() - pa.picture = picture - pa.kind = kind - pa.area = coords - return pa - - def flush_includes(self, languages=True): - if not languages: - return - if languages is True: - languages = [lc for (lc, _ln) in settings.LANGUAGES] - flush_ssi_includes([ - template % (self.pk, lang) - for template in [ - '/katalog/pa/%d/short.%s.html', - ] - for lang in languages - ]) - - -class Picture(models.Model): - """ - Picture resource. - - """ - title = models.CharField(_('title'), max_length=32767) - slug = models.SlugField(_('slug'), max_length=120, db_index=True, unique=True) - sort_key = models.CharField(_('sort key'), max_length=120, db_index=True, editable=False) - sort_key_author = models.CharField(_('sort key by author'), max_length=120, db_index=True, editable=False, default=u'') - created_at = models.DateTimeField(_('creation date'), auto_now_add=True, db_index=True) - changed_at = models.DateTimeField(_('creation date'), auto_now=True, db_index=True) - xml_file = models.FileField('xml_file', upload_to="xml", storage=picture_storage) - image_file = ImageField(_('image_file'), upload_to="images", storage=picture_storage) - html_file = models.FileField('html_file', upload_to="html", storage=picture_storage) - areas_json = jsonfield.JSONField(_('picture areas JSON'), default={}, editable=False) - extra_info = jsonfield.JSONField(_('extra information'), default={}) - culturepl_link = models.CharField(blank=True, max_length=240) - wiki_link = models.CharField(blank=True, max_length=240) - - width = models.IntegerField(null=True) - height = models.IntegerField(null=True) - - objects = models.Manager() - tagged = managers.ModelTaggedItemManager(catalogue.models.Tag) - tags = managers.TagDescriptor(catalogue.models.Tag) - tag_relations = GenericRelation(catalogue.models.Tag.intermediary_table_model) - - short_html_url_name = 'picture_short' - - class AlreadyExists(Exception): - pass - - class Meta: - ordering = ('sort_key',) - - verbose_name = _('picture') - verbose_name_plural = _('pictures') - - def save(self, force_insert=False, force_update=False, **kwargs): - from sortify import sortify - - self.sort_key = sortify(self.title)[:120] - - try: - author = self.tags.filter(category='author')[0].sort_key - except IndexError: - author = u'' - self.sort_key_author = author - - ret = super(Picture, self).save(force_insert, force_update) - - return ret - - def __unicode__(self): - return self.title - - @permalink - def get_absolute_url(self): - return ('picture.views.picture_detail', [self.slug]) - - @classmethod - def from_xml_file(cls, xml_file, image_file=None, image_store=None, overwrite=False): - """ - Import xml and it's accompanying image file. - If image file is missing, it will be fetched by librarian.picture.ImageStore - which looks for an image file in the same directory the xml is, with extension matching - its mime type. - """ - from sortify import sortify - from django.core.files import File - from librarian.picture import WLPicture, ImageStore - close_xml_file = False - close_image_file = False - - - if image_file is not None and not isinstance(image_file, File): - image_file = File(open(image_file)) - close_image_file = True - - if not isinstance(xml_file, File): - xml_file = File(open(xml_file)) - close_xml_file = True - - with transaction.atomic(): - # use librarian to parse meta-data - if image_store is None: - image_store = ImageStore(picture_storage.path('images')) - picture_xml = WLPicture.from_file(xml_file, image_store=image_store) - - picture, created = Picture.objects.get_or_create(slug=picture_xml.slug[:120]) - if not created and not overwrite: - raise Picture.AlreadyExists('Picture %s already exists' % picture_xml.slug) - - picture.areas.all().delete() - picture.title = unicode(picture_xml.picture_info.title) - picture.extra_info = picture_xml.picture_info.to_dict() - - picture_tags = set(catalogue.models.Tag.tags_from_info(picture_xml.picture_info)) - motif_tags = set() - thing_tags = set() - - area_data = {'themes':{}, 'things':{}} - - # Treat all names in picture XML as in default language. - lang = settings.LANGUAGE_CODE - - for part in picture_xml.partiter(): - if picture_xml.frame: - c = picture_xml.frame[0] - part['coords'] = [[p[0] - c[0], p[1] - c[1]] for p in part['coords']] - if part.get('object', None) is not None: - _tags = set() - for objname in part['object'].split(','): - objname = objname.strip().capitalize() - tag, created = catalogue.models.Tag.objects.get_or_create(slug=slughifi(objname), category='thing') - if created: - tag.name = objname - setattr(tag, 'name_%s' % lang, tag.name) - tag.sort_key = sortify(tag.name) - tag.save() - #thing_tags.add(tag) - area_data['things'][tag.slug] = { - 'object': objname, - 'coords': part['coords'], - } - - _tags.add(tag) - area = PictureArea.rectangle(picture, 'thing', part['coords']) - area.save() - area.tags = _tags - else: - _tags = set() - for motifs in part['themes']: - for motif in motifs.split(','): - tag, created = catalogue.models.Tag.objects.get_or_create(slug=slughifi(motif), category='theme') - if created: - tag.name = motif - tag.sort_key = sortify(tag.name) - tag.save() - #motif_tags.add(tag) - _tags.add(tag) - area_data['themes'][tag.slug] = { - 'theme': motif, - 'coords': part['coords'] - } - - logging.debug("coords for theme: %s" % part['coords']) - area = PictureArea.rectangle(picture, 'theme', part['coords']) - area.save() - area.tags = _tags.union(picture_tags) - - picture.tags = picture_tags.union(motif_tags).union(thing_tags) - picture.areas_json = area_data - - if image_file is not None: - img = image_file - else: - img = picture_xml.image_file() - - modified = cls.crop_to_frame(picture_xml, img) - modified = cls.add_source_note(picture_xml, modified) - - picture.width, picture.height = modified.size - - modified_file = StringIO() - modified.save(modified_file, format='JPEG', quality=95) - # FIXME: hardcoded extension - detect from DC format or orginal filename - picture.image_file.save(path.basename(picture_xml.image_path), File(modified_file)) - - picture.xml_file.save("%s.xml" % picture.slug, File(xml_file)) - picture.save() - tasks.generate_picture_html(picture.id) - - if close_xml_file: - xml_file.close() - if close_image_file: - image_file.close() - - return picture - - @classmethod - def crop_to_frame(cls, wlpic, image_file): - img = Image.open(image_file) - if wlpic.frame is None or wlpic.frame == [[0, 0], [-1, -1]]: - return img - img = img.crop(itertools.chain(*wlpic.frame)) - return img - - @staticmethod - def add_source_note(wlpic, img): - from PIL import ImageDraw, ImageFont - from librarian import get_resource - - annotated = Image.new(img.mode, - (img.size[0], img.size[1] + 40), - (255, 255, 255) - ) - annotated.paste(img, (0, 0)) - annotation = Image.new('RGB', (img.size[0] * 3, 120), (255, 255, 255)) - ImageDraw.Draw(annotation).text( - (30, 15), - wlpic.picture_info.source_name, - (0, 0, 0), - font=ImageFont.truetype(get_resource("fonts/DejaVuSerif.ttf"), 75) - ) - annotated.paste(annotation.resize((img.size[0], 40), Image.ANTIALIAS), (0, img.size[1])) - return annotated - - @classmethod - def picture_list(cls, filter=None): - """Generates a hierarchical listing of all pictures - Pictures are optionally filtered with a test function. - """ - - pics = cls.objects.all().order_by('sort_key')\ - .only('title', 'slug', 'image_file') - - if filter: - pics = pics.filter(filter).distinct() - - pics_by_author = SortedDict() - orphans = [] - for tag in catalogue.models.Tag.objects.filter(category='author'): - pics_by_author[tag] = [] - - for pic in pics.iterator(): - authors = list(pic.tags.filter(category='author')) - if authors: - for author in authors: - pics_by_author[author].append(pic) - else: - orphans.append(pic) - - return pics_by_author, orphans - - @property - def info(self): - if not hasattr(self, '_info'): - from librarian import dcparser - from librarian import picture - info = dcparser.parse(self.xml_file.path, picture.PictureInfo) - self._info = info - return self._info - - def pretty_title(self, html_links=False): - picture = self - names = [(tag.name, tag.get_absolute_url()) - for tag in self.tags.filter(category='author')] - names.append((self.title, self.get_absolute_url())) - - if html_links: - names = ['%s' % (tag[1], tag[0]) for tag in names] - else: - names = [tag[0] for tag in names] - return ', '.join(names) - - def related_themes(self): - return catalogue.models.Tag.objects.usage_for_queryset( - self.areas.all(), counts=True).filter(category__in=('theme', 'thing')) - - def flush_includes(self, languages=True): - if not languages: - return - if languages is True: - languages = [lc for (lc, _ln) in settings.LANGUAGES] - flush_ssi_includes([ - template % (self.pk, lang) - for template in [ - '/katalog/p/%d/short.%s.html', - '/katalog/p/%d/mini.%s.html', - ] - for lang in languages - ]) diff --git a/apps/picture/tasks.py b/apps/picture/tasks.py deleted file mode 100644 index fc9eafa7a..000000000 --- a/apps/picture/tasks.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from celery.task import task -from django.core.files.base import ContentFile -from django.template.loader import render_to_string - - -@task -def generate_picture_html(picture_id): - import picture.models - pic = picture.models.Picture.objects.get(pk=picture_id) - - html_text = unicode(render_to_string('picture/picture_info.html', { - 'things': pic.areas_json['things'], - 'themes': pic.areas_json['themes'], - })) - pic.html_file.save("%s.html" % pic.slug, ContentFile(html_text)) - diff --git a/apps/picture/templates/admin/picture/picture/change_list.html b/apps/picture/templates/admin/picture/picture/change_list.html deleted file mode 100755 index 05566c0ab..000000000 --- a/apps/picture/templates/admin/picture/picture/change_list.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends "admin/change_list.html" %} -{% load i18n %} - -{% block content %} -
            - {% csrf_token %} -

            XML:
            - {% trans "Image" %}:
            -

            -
            - {{ block.super }} -{% endblock content %} diff --git a/apps/picture/templates/picture/collection.html b/apps/picture/templates/picture/collection.html deleted file mode 100644 index f794fbfeb..000000000 --- a/apps/picture/templates/picture/collection.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "picture/picture_list_thumb.html" %} -{% load i18n %} - -{% block titleextra %}{{ context.collection.title }}{% endblock %} - -{% block book_list_header %}{{ context.collection.title }}{% endblock %} - -{% block book_list_info %} -{{ context.collection.description|safe }} -{% endblock %} diff --git a/apps/picture/templates/picture/picture_detail.html b/apps/picture/templates/picture/picture_detail.html deleted file mode 100644 index 514f8c3e8..000000000 --- a/apps/picture/templates/picture/picture_detail.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load picture_tags catalogue_tags pagination_tags %} -{% load thumbnail %} -{% load build_absolute_uri from fnp_common %} - - -{% block ogimage %}{% thumbnail picture.image_file "535" upscale="false" as thumb %}{{ thumb.url|build_absolute_uri:request }}{% endthumbnail %}{% endblock %} - - -{% block titleextra %}{{ picture.title }}{% endblock %} - -{% block bodyid %}picture-detail{% endblock %} - -{% block body %} - {% picture_wide picture %} - -{% spaceless %} - -
            -

            {% trans "See also" %}:

            -{% related_books picture %} -
            -{% endspaceless %} - -{% endblock %} diff --git a/apps/picture/templates/picture/picture_info.html b/apps/picture/templates/picture/picture_info.html deleted file mode 100644 index c2d2c9aaa..000000000 --- a/apps/picture/templates/picture/picture_info.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - diff --git a/apps/picture/templates/picture/picture_list_thumb.html b/apps/picture/templates/picture/picture_list_thumb.html deleted file mode 100644 index adfc25eb5..000000000 --- a/apps/picture/templates/picture/picture_list_thumb.html +++ /dev/null @@ -1,30 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} -{% load static %} -{% load ssi_include from ssify %} - -{% block bodyid %}picture-list{% endblock %} - -{% block titleextra %}{% trans "Listing of all works" context "gallery" %}{% endblock %} - - -{% block body %} -

            {% block book_list_header %}{% trans "Listing of all works" context "gallery" %}{% endblock %}

            - -
            - {% block book_list_info %} - {% ssi_include 'chunk' key='picture-list' %} - {% endblock %} -
            - -
            - - - -{% work_list book_list %} - - - - -{% endblock %} diff --git a/apps/picture/templates/picture/picture_mini_box.html b/apps/picture/templates/picture/picture_mini_box.html deleted file mode 100644 index d8ebbf77b..000000000 --- a/apps/picture/templates/picture/picture_mini_box.html +++ /dev/null @@ -1,23 +0,0 @@ -{% spaceless %} - -{% load thumbnail %} - - - -{% endspaceless %} \ No newline at end of file diff --git a/apps/picture/templates/picture/picture_short.html b/apps/picture/templates/picture/picture_short.html deleted file mode 100644 index 1bd70a11b..000000000 --- a/apps/picture/templates/picture/picture_short.html +++ /dev/null @@ -1,84 +0,0 @@ -{% load i18n %} -{% load thumbnail %} -{% load catalogue_tags social_tags %} -{% load picture_tags %} -
            -
            - -
            - -
            -
            - {% for tag in tags.author %} - {{ tag }}{% if not forloop.last %}, - {% endif %}{% endfor %} -
            - -
            - - - -
            - {% block picture-view %} - {% if main_link %}{% endif %} - {% thumbnail picture.image_file "216x288" crop="center" as thumb %} - - {% endthumbnail %} - {% if main_link %}{% endif %} - {% endblock %} - {# what about licensing icons here #} -
            - -
            - {% spaceless %} - - - {% trans "Epoch" %}:  - {% for tag in tags.epoch %} - {{ tag }} - {% if not forloop.last %}, {% endif %} - {% endfor %} - - - - {% trans "Kind" %}:  - {% for tag in tags.kind %} - {{ tag }} - {% if not forloop.last %}, {% endif %} - {% endfor %} - - - - {% trans "Genre" %}:  - {% for tag in tags.genre %} - {{ tag }} - {% if not forloop.last %}, {% endif %} - {% endfor %} - - - {% block extra_categories %} - {% endblock %} - - {% endspaceless %} -
            -
            - - {% block book-box-extra-info %}{% endblock %} - {% block box-append %} - {% endblock %} - {% block right-column %} - {% endblock %} -
            -
            -
            diff --git a/apps/picture/templates/picture/picture_viewer.html b/apps/picture/templates/picture/picture_viewer.html deleted file mode 100644 index e169dbe0f..000000000 --- a/apps/picture/templates/picture/picture_viewer.html +++ /dev/null @@ -1,88 +0,0 @@ -{% extends "catalogue/viewer_base.html" %} -{% load i18n %} -{% load static from staticfiles %} -{% load catalogue_tags %} -{% load thumbnail %} - - -{% block title %}{{ picture.pretty_title }}{% endblock %} - - -{% block body-id %}picture-viewer{% endblock %} - - -{% block js-dependencies %} - -{% endblock %} - - -{% block no-menu-extra %} -
          • +
          • -
          • -{% endblock %} - - -{% block menu %} -
          • +-
          • - - -
          • - {{ picture.pretty_title }} -
          • - - -
          • {% trans "Objects" %}
          • -
          • {% trans "Themes" %}
          • - - - - -
          • - {% for sponsor in sponsors %} - {% thumbnail sponsor.logo "80x200" as logo %} - {{ sponsor.name }} - {% endthumbnail %} - {% endfor %} -
          • - -{% endblock %} - -{% block main %} -
            - {% thumbnail picture.image_file "700x500" as pic %} -
            -
            - {% endthumbnail %} -
            -{% endblock %} - - -{% block footer %} -{{ picture.html_file.read|safe }} - -
            -
            - Wolne Lektury - - {% for sponsor in sponsors %} - {% thumbnail sponsor.logo "220x220" as logo %} - {{ sponsor.name }} - {% endthumbnail %} - {% endfor %} -
            - - {% book_info picture %} -
            - -
            - {{ picture.short_html }} -
            - -{% endblock %} diff --git a/apps/picture/templates/picture/picture_wide.html b/apps/picture/templates/picture/picture_wide.html deleted file mode 100644 index 9f47c7baa..000000000 --- a/apps/picture/templates/picture/picture_wide.html +++ /dev/null @@ -1,112 +0,0 @@ -{% extends "picture/picture_short.html" %} -{% load i18n %} -{% load picture_tags thumbnail %} - - -{% block box-class %}book-wide-box{% endblock %} - -{% block picture-view %} - -{% thumbnail picture.image_file "535" upscale=0 as thumb %} - -{% endthumbnail %} -{% endblock %} - - -{% block extra_categories %} -{% if picture.extra_info.styles %} - - {% trans "Style" %}:  - {% for tag in picture.extra_info.styles %} - {{ tag }} - {% if not forloop.last %}, {% endif %} - {% endfor %} - -{% endif %} - -{% if picture.extra_info.medium %} - - {% trans "Medium" %}:  - {{ picture.extra_info.medium }} - -{% endif %} - -{% if picture.extra_info.original_dimensions %} - - {% trans "Dimensions" %}:  - {{ picture.extra_info.original_dimensions }} - -{% endif %} - - - {% trans "Date" %}:  - {{ picture.extra_info.created_at }} - - -{% endblock %} - - -{% block book-box-extra-info %} -{% if themes or things%} -
            -

            {% trans "Motifs, themes and objects" %}

            -
            - {% if themes %} -

            {% trans "Motifs and themes" %}

            -
              - {% for theme in themes %} -
            • {{ theme }}
            • - {% endfor %} -
            - {% endif %} - {% if things %} -

            {% trans "Objects" %}

            -
              - {% for thing in things %} -
            • {{ thing }}
            • - {% endfor %} -
            - {% endif %} -
            -
            -{% else %} -

             

            -{% endif %} -{% endblock %} - - -{% block right-column %} -
            -
            -

            {% trans "See" %}

            - -
            - - {% comment %} -
            -

            {% trans "Download" %}

            -
              -
            • - {% if related.media.mp3 or related.media.ogg or related.media.daisy %} - {% trans "Download all audiobooks for this book" %}: - {% download_audio book %}. - {% endif %} -
            • - {% custom_pdf_link_li book %} -
            -
            - {% endcomment %} -
            -{% endblock %} diff --git a/apps/picture/templates/picture/picturearea_short.html b/apps/picture/templates/picture/picturearea_short.html deleted file mode 100644 index 4fa97817d..000000000 --- a/apps/picture/templates/picture/picturearea_short.html +++ /dev/null @@ -1,17 +0,0 @@ -{% load i18n %} -{% load picture_tags %} -{% load catalogue_tags %} - -
            -
            - -
            - {% with area.picture as picture %} -
            -
            - {% book_title_html picture %} -
            -
            -
            - {% endwith %} -
            diff --git a/apps/picture/templatetags/__init__.py b/apps/picture/templatetags/__init__.py deleted file mode 100644 index 8b1378917..000000000 --- a/apps/picture/templatetags/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/picture/templatetags/picture_tags.py b/apps/picture/templatetags/picture_tags.py deleted file mode 100644 index 02d80b005..000000000 --- a/apps/picture/templatetags/picture_tags.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import logging -from random import randint -from django import template -from django.core.urlresolvers import reverse -from django.utils.cache import add_never_cache_headers -import sorl.thumbnail.default -from ssify import ssi_variable -from catalogue.utils import split_tags -from ..engine import CustomCroppingEngine -from ..models import Picture - - -register = template.Library() - -cropper = CustomCroppingEngine() - -@register.inclusion_tag('picture/picture_wide.html', takes_context=True) -def picture_wide(context, picture): - context.update({ - 'picture': picture, - 'main_link': reverse('picture_viewer', args=[picture.slug]), - 'request': context.get('request'), - 'tags': split_tags(picture.tags), - }) - return context - - -@register.simple_tag() -def area_thumbnail_url(area, geometry): - def to_square(coords): - w = coords[1][0] - coords[0][0] - h = coords[1][1] - coords[0][1] - if w == h: - return coords - elif w > h: - return [[coords[0][0] + w/2 - h/2, coords[0][1]], - [coords[1][0] - w/2 + h/2, coords[1][1]]] - else: - return [[coords[0][0], coords[0][1] + h/2 - w/2], - [coords[1][0], coords[1][1] - h/2 + w/2, ]] - - # so much for sorl extensibility. - # what to do about this? - _engine = sorl.thumbnail.default.engine - sorl.thumbnail.default.engine = cropper - coords = to_square(area.area) - - try: - th = sorl.thumbnail.default.backend.get_thumbnail( - area.picture.image_file, - geometry, - crop="%dpx %dpx %dpx %dpx" % tuple(map(lambda d: max(0, d), tuple(coords[0] + coords[1])))) - except Exception, e: - logging.exception("Error creating a thumbnail for PictureArea") - return '' - - sorl.thumbnail.default.engine = _engine - - return th.url - - -@ssi_variable(register, patch_response=[add_never_cache_headers]) -def picture_random_picture(request, exclude_ids, unless=None): - if unless: - return None - queryset = Picture.objects.exclude(pk__in=exclude_ids).exclude(image_file='') - count = queryset.count() - if count: - return queryset[randint(0, count - 1)].pk - else: - return None diff --git a/apps/picture/tests/__init__.py b/apps/picture/tests/__init__.py deleted file mode 100644 index b2e50b00f..000000000 --- a/apps/picture/tests/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from picture.tests.picture_import import * diff --git a/apps/picture/tests/files/kandinsky-composition-viii.png b/apps/picture/tests/files/kandinsky-composition-viii.png deleted file mode 100644 index a809eb5c4..000000000 Binary files a/apps/picture/tests/files/kandinsky-composition-viii.png and /dev/null differ diff --git a/apps/picture/tests/files/kandinsky-composition-viii.xml b/apps/picture/tests/files/kandinsky-composition-viii.xml deleted file mode 100644 index d9e79cbed..000000000 --- a/apps/picture/tests/files/kandinsky-composition-viii.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - Kandinsky, Vasily - composition 8 - Fundacja Nowoczesna Polska - Sekuła, Aleksandra - Kwiatkowska, Katarzyna - Trzeciak, Weronika - Modernizm - Obraz - Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez Bibliotekę Narodową z egzemplarza pochodzącego ze zbiorów BN. - 55 1/8 x 79 1/8 inches - Olej na płótnie - http://wolnelektury.pl/katalog/obraz/kandinsky-composition-viii - http://www.ibiblio.org/wm/paint/auth/kandinsky/kandinsky.comp-8.jpg - Muzeum Narodowe, inw. 00000001. - Domena publiczna - Vasily Kandinsky zm. ? - 1940 - Image - image/png - 1090 x 755 px - 122b590510ce70cc80e617557f82048ce20f1d7b - 1923 - eng - - - - -
            - - -
            - - - diff --git a/apps/picture/tests/picture_import.py b/apps/picture/tests/picture_import.py deleted file mode 100644 index 1e17289c3..000000000 --- a/apps/picture/tests/picture_import.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from __future__ import with_statement - -from os import path -from picture.models import Picture -from catalogue.test_utils import WLTestCase - - -class PictureTest(WLTestCase): - - def test_import(self): - picture = Picture.from_xml_file(path.join(path.dirname(__file__), "files/kandinsky-composition-viii.xml")) - - themes = set() - for area in picture.areas.all(): - themes.update([(tag.category, tag.name) - for tag in area.tags if tag.category in (u'theme', u'thing')]) - assert themes == set([(u'theme', u'nieporządek'), (u'thing', u'Kosmos')]), \ - 'Bad themes on Picture areas: %s' % themes - - pic_themes = set([tag.name for tag in picture.tags if tag.category in ('theme', 'thing')]) - assert not pic_themes, 'Unwanted themes set on Pictures: %s' % pic_themes - - picture.delete() - - def test_import_with_explicit_image(self): - picture = Picture.from_xml_file(path.join(path.dirname(__file__), "files/kandinsky-composition-viii.xml"), - path.join(path.dirname(__file__), "files/kandinsky-composition-viii.png")) - - picture.delete() - - - def test_import_2(self): - picture = Picture.from_xml_file(path.join(path.dirname(__file__), "files/kandinsky-composition-viii.xml"), - path.join(path.dirname(__file__), "files/kandinsky-composition-viii.png"), - overwrite=True) - cats = set([t.category for t in picture.tags]) - assert 'epoch' in cats - assert 'kind' in cats - diff --git a/apps/picture/views.py b/apps/picture/views.py deleted file mode 100644 index 1f8738650..000000000 --- a/apps/picture/views.py +++ /dev/null @@ -1,128 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from collections import OrderedDict -from django.contrib.auth.decorators import permission_required -from django.shortcuts import render_to_response, get_object_or_404, render -from django.template import RequestContext -from picture.models import Picture, PictureArea -from catalogue.utils import split_tags -from ssify import ssi_included -from sponsors.models import Sponsor - -# was picture/picture_list.html list (without thumbs) -def picture_list(request, filter=None, get_filter=None, template_name='catalogue/picture_list.html', cache_key=None, context=None): - """ generates a listing of all books, optionally filtered with a test function """ - - if get_filter: - filt = get_filter() - pictures_by_author, orphans = Picture.picture_list(filt) - books_nav = OrderedDict() - for tag in pictures_by_author: - if pictures_by_author[tag]: - books_nav.setdefault(tag.sort_key[0], []).append(tag) - - return render_to_response(template_name, locals(), - context_instance=RequestContext(request)) - - -def picture_list_thumb(request, filter=None, get_filter=None, template_name='picture/picture_list_thumb.html', cache_key=None, context=None): - book_list = Picture.objects.all() - if filter: - book_list = book_list.filter(filter) - if get_filter: - book_list = book_list.filter(get_filter()) - book_list = book_list.order_by('sort_key_author') - book_list = list(book_list) - return render_to_response(template_name, locals(), - context_instance=RequestContext(request)) - -def picture_detail(request, slug): - picture = get_object_or_404(Picture, slug=slug) - - theme_things = split_tags(picture.related_themes()) - - # categories = SortedDict() - # for tag in picture.tags.iterator(): - # categories.setdefault(tag.category, []).append(tag) - - themes = theme_things.get('theme', []) - things = theme_things.get('thing', []) - - extra_info = picture.extra_info - - return render_to_response("picture/picture_detail.html", locals(), - context_instance=RequestContext(request)) - - -def picture_viewer(request, slug): - picture = get_object_or_404(Picture, slug=slug) - sponsors = [] - for sponsor in picture.extra_info.get('sponsors', []): - have_sponsors = Sponsor.objects.filter(name=sponsor) - if have_sponsors.exists(): - sponsors.append(have_sponsors[0]) - return render_to_response("picture/picture_viewer.html", locals(), - context_instance=RequestContext(request)) - - -# ========= -# = Admin = -# ========= -@permission_required('picture.add_picture') -def import_picture(request): - """docstring for import_book""" - from django.http import HttpResponse - from picture.forms import PictureImportForm - from django.utils.translation import ugettext as _ - - import_form = PictureImportForm(request.POST, request.FILES) - if import_form.is_valid(): - try: - import_form.save() - except: - import sys - import pprint - import traceback - info = sys.exc_info() - exception = pprint.pformat(info[1]) - tb = '\n'.join(traceback.format_tb(info[2])) - return HttpResponse(_("An error occurred: %(exception)s\n\n%(tb)s") % {'exception':exception, 'tb':tb}, mimetype='text/plain') - return HttpResponse(_("Picture imported successfully")) - else: - return HttpResponse(_("Error importing file: %r") % import_form.errors) - - -@ssi_included -def picture_mini(request, pk, with_link=True): - picture = get_object_or_404(Picture, pk=pk) - author_str = ", ".join(tag.name - for tag in picture.tags.filter(category='author')) - return render(request, 'picture/picture_mini_box.html', { - 'picture': picture, - 'author_str': author_str, - 'with_link': with_link, - }) - - -@ssi_included -def picture_short(request, pk): - picture = get_object_or_404(Picture, pk=pk) - - return render(request, 'picture/picture_short.html', { - 'picture': picture, - 'main_link': picture.get_absolute_url(), - 'request': request, - 'tags': split_tags(picture.tags), - }) - - -@ssi_included -def picturearea_short(request, pk): - area = get_object_or_404(PictureArea, pk=pk) - theme = area.tags.filter(category='theme') - theme = theme and theme[0] or None - thing = area.tags.filter(category='thing') - thing = thing and thing[0] or None - return render(request, 'picture/picturearea_short.html', locals()) diff --git a/apps/polls/__init__.py b/apps/polls/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/polls/admin.py b/apps/polls/admin.py deleted file mode 100644 index 235e8f3c2..000000000 --- a/apps/polls/admin.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin - -from .models import Poll, PollItem - - -class PollItemInline(admin.TabularInline): - model = PollItem - extra = 0 - readonly_fields = ('vote_count',) - - -class PollAdmin(admin.ModelAdmin): - inlines = [PollItemInline] - - -class PollItemAdmin(admin.ModelAdmin): - readonly_fields = ('vote_count',) - - -admin.site.register(Poll, PollAdmin) -admin.site.register(PollItem, PollItemAdmin) diff --git a/apps/polls/forms.py b/apps/polls/forms.py deleted file mode 100644 index 20d53fe33..000000000 --- a/apps/polls/forms.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import forms - - -class PollForm(forms.Form): - vote = forms.ChoiceField(widget=forms.RadioSelect) - - def __init__(self, *args, **kwargs): - poll = kwargs.pop('poll', None) - super(PollForm, self).__init__(*args, **kwargs) - self.fields['vote'].choices = [(item.id, item.content) for item in poll.items.all()] diff --git a/apps/polls/locale/pl/LC_MESSAGES/django.mo b/apps/polls/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index b4fa6ec6b..000000000 Binary files a/apps/polls/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/polls/locale/pl/LC_MESSAGES/django.po b/apps/polls/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 7334f63c4..000000000 --- a/apps/polls/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,69 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \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%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" - -#: models.py:12 -msgid "question" -msgstr "Pytanie" - -#: models.py:13 -msgid "slug" -msgstr "slug" - -#: models.py:14 -msgid "open" -msgstr "otwarta" - -#: models.py:17 -msgid "Poll" -msgstr "Ankieta" - -#: models.py:18 -msgid "Polls" -msgstr "Ankiety" - -#: models.py:22 -msgid "Slug of an open poll needs to be unique" -msgstr "Slug otwartej ankiety musi być unikalny" - -#: models.py:42 -msgid "content" -msgstr "treść" - -#: models.py:43 -msgid "vote count" -msgstr "licznik głosów" - -#: models.py:46 -msgid "vote item" -msgstr "Pozycja ankiety" - -#: models.py:47 -msgid "vote items" -msgstr "Pozycje ankiety" - -#: templates/polls/poll.html:11 -msgid "Thanks for voting! You can see current results below." -msgstr "" -"Dziękujemy za oddanie głosu w ankiecie! Poniżej znajdują się bieżące wyniki." - -#: templates/polls/tags/poll.html:23 -msgid "Submit" -msgstr "Wyślij" diff --git a/apps/polls/migrations/0001_initial.py b/apps/polls/migrations/0001_initial.py deleted file mode 100644 index 91c68aa00..000000000 --- a/apps/polls/migrations/0001_initial.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Poll', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('question', models.TextField(verbose_name='question')), - ('slug', models.SlugField(verbose_name='Slug')), - ('open', models.BooleanField(default=False, verbose_name='open')), - ], - options={ - 'verbose_name': 'Poll', - 'verbose_name_plural': 'Polls', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='PollItem', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('content', models.TextField(verbose_name='content')), - ('vote_count', models.IntegerField(default=0, verbose_name='vote count')), - ('poll', models.ForeignKey(related_name=b'items', to='polls.Poll')), - ], - options={ - 'verbose_name': 'vote item', - 'verbose_name_plural': 'vote items', - }, - bases=(models.Model,), - ), - ] diff --git a/apps/polls/migrations/0002_auto_20151221_1225.py b/apps/polls/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index e75948893..000000000 --- a/apps/polls/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('polls', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='poll', - name='slug', - field=models.SlugField(verbose_name='slug'), - ), - ] diff --git a/apps/polls/migrations/__init__.py b/apps/polls/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/polls/models.py b/apps/polls/models.py deleted file mode 100644 index 8e356683e..000000000 --- a/apps/polls/models.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.db import models -from django.utils.translation import ugettext_lazy as _ -from django.core.exceptions import ValidationError -from django.core.urlresolvers import reverse - - -USED_POLLS_KEY = 'used_polls' - - -class Poll(models.Model): - - question = models.TextField(_('question')) - slug = models.SlugField(_('slug')) - open = models.BooleanField(_('open'), default=False) - - class Meta: - verbose_name = _('Poll') - verbose_name_plural = _('Polls') - - def clean(self): - if self.open and Poll.objects.exclude(pk=self.pk).filter(slug=self.slug).exists(): - raise ValidationError(_('Slug of an open poll needs to be unique')) - return super(Poll, self).clean() - - def __unicode__(self): - return self.question[:100] + ' (' + self.slug + ')' - - def get_absolute_url(self): - return reverse('poll', args=[self.slug]) - - @property - def vote_count(self): - return self.items.all().aggregate(models.Sum('vote_count'))['vote_count__sum'] - - def voted(self, session): - return self.id in session.get(USED_POLLS_KEY, []) - - -class PollItem(models.Model): - - poll = models.ForeignKey(Poll, related_name='items') - content = models.TextField(_('content')) - vote_count = models.IntegerField(_('vote count'), default=0) - - class Meta: - verbose_name = _('vote item') - verbose_name_plural = _('vote items') - - def __unicode__(self): - return self.content + ' @ ' + unicode(self.poll) - - @property - def vote_ratio(self): - return (float(self.vote_count) / self.poll.vote_count) * 100 if self.poll.vote_count else 0 - - def vote(self, session): - self.vote_count = self.vote_count + 1 - self.save() - session.setdefault(USED_POLLS_KEY, []).append(self.poll.id) - session.save() diff --git a/apps/polls/templates/polls/poll.html b/apps/polls/templates/polls/poll.html deleted file mode 100644 index edb14cf7b..000000000 --- a/apps/polls/templates/polls/poll.html +++ /dev/null @@ -1,15 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load polls_tags %} - -{% block titleextra %}{{poll.question}}{% endblock %} - - -{% block body %} -
            - {% if voted_already %} -

            {% trans "Thanks for voting! You can see current results below." %}

            - {% endif %} - {% poll poll %} -
            -{% endblock %} \ No newline at end of file diff --git a/apps/polls/templates/polls/tags/poll.html b/apps/polls/templates/polls/tags/poll.html deleted file mode 100644 index 4c4d2b50d..000000000 --- a/apps/polls/templates/polls/tags/poll.html +++ /dev/null @@ -1,28 +0,0 @@ -{% load i18n %} -{% load ssi_csrf_token from ssify %} - -{% if poll %} - {% if voted_already %} - {% if show_results %} -
            -

            {{poll.question}}

            -
              - {% for item in poll.items.all %} -
            • - {{item.content}} -
              -
            • - {% endfor %} -
            -
            - {% endif %} - {% else %} -
            -

            {{poll.question}}

            -
            {% ssi_csrf_token %} - {{ form.vote }} - -
            -
            - {% endif %} -{% endif %} \ No newline at end of file diff --git a/apps/polls/templatetags/__init__.py b/apps/polls/templatetags/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/polls/templatetags/polls_tags.py b/apps/polls/templatetags/polls_tags.py deleted file mode 100644 index 38619c108..000000000 --- a/apps/polls/templatetags/polls_tags.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import template -from ..forms import PollForm - - -register = template.Library() - -@register.inclusion_tag('polls/tags/poll.html', takes_context=True) -def poll(context, poll, show_results=True, redirect_to=''): - form = None - voted_already = poll.voted(context.get('request').session) - if not voted_already: - form = PollForm(poll=poll, initial=dict(redirect_to=redirect_to)) - return dict(poll=poll, - form=form, - voted_already=voted_already, - vote_count=poll.vote_count, - show_results=show_results, - request=context.get('request'), - ) diff --git a/apps/polls/urls.py b/apps/polls/urls.py deleted file mode 100644 index fcd0ac6b7..000000000 --- a/apps/polls/urls.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - - -urlpatterns = patterns('polls.views', - url(r'^(?P[^/]+)$', 'poll', name='poll'), -) diff --git a/apps/polls/views.py b/apps/polls/views.py deleted file mode 100644 index 79540c66a..000000000 --- a/apps/polls/views.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.core.urlresolvers import reverse -from django.shortcuts import get_object_or_404, redirect, render_to_response -from django.template import RequestContext -from django.views.decorators import cache -from django.views.decorators.http import require_http_methods - -from .models import Poll, PollItem -from .forms import PollForm - - -@cache.never_cache -@require_http_methods(['GET', 'POST']) -def poll(request, slug): - - poll = get_object_or_404(Poll, slug=slug, open=True) - - if request.method == 'POST': - redirect_to = reverse('poll', args = [slug]) - form = PollForm(request.POST, poll = poll) - if form.is_valid(): - if not poll.voted(request.session): - try: - poll_item = PollItem.objects.filter(pk=form.cleaned_data['vote'], poll=poll).get() - except PollItem.DoesNotExist: - pass - else: - poll_item.vote(request.session) - return redirect(redirect_to) - elif request.method == 'GET': - context = RequestContext(request) - context['poll'] = poll - context['voted_already'] = poll.voted(request.session) - return render_to_response('polls/poll.html', context) diff --git a/apps/reporting/__init__.py b/apps/reporting/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/reporting/locale/pl/LC_MESSAGES/django.mo b/apps/reporting/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index c09f3f0f1..000000000 Binary files a/apps/reporting/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/reporting/locale/pl/LC_MESSAGES/django.po b/apps/reporting/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index b811e0d91..000000000 --- a/apps/reporting/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,23 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-01-27 16:40+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \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%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2)\n" - -#: templates/reporting/main.html:5 -msgid "Reports" -msgstr "Raporty" diff --git a/apps/reporting/models.py b/apps/reporting/models.py deleted file mode 100644 index 740b9276e..000000000 --- a/apps/reporting/models.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# - - -# import views here, so that signals are attached correctly -from reporting.views import catalogue_pdf diff --git a/apps/reporting/templates/reporting/catalogue.csv b/apps/reporting/templates/reporting/catalogue.csv deleted file mode 100755 index eb2ebd982..000000000 --- a/apps/reporting/templates/reporting/catalogue.csv +++ /dev/null @@ -1 +0,0 @@ -{% load catalogue_tags %}{% book_tree_texml "" orphans books_by_parent %}{% for author, group in books_by_author.items %}{% if group %}{% book_tree_csv author group books_by_parent %}{% endif %}{% endfor %} diff --git a/apps/reporting/templates/reporting/catalogue.texml b/apps/reporting/templates/reporting/catalogue.texml deleted file mode 100755 index cb4a78f23..000000000 --- a/apps/reporting/templates/reporting/catalogue.texml +++ /dev/null @@ -1,118 +0,0 @@ -{% load catalogue_tags %} - - - \documentclass[a4paper, oneside, 11pt]{book} - -\usepackage[MeX]{polski} - -\usepackage[xetex]{graphicx} -\usepackage{xltxtra} -\usepackage{xunicode} - -\usepackage{scalefnt} -\usepackage[colorlinks=true,linkcolor=black,setpagesize=false,urlcolor=black,xetex]{hyperref} - -\usepackage{longtable} - -\setmainfont [ -%ExternalLocation, -UprightFont = JunicodeWL-Regular, -ItalicFont = JunicodeWL-Italic, -BoldFont = JunicodeWL-Regular, -BoldItalicFont = JunicodeWL-Italic, -SmallCapsFont = JunicodeWL-Regular, -SmallCapsFeatures = {Letters={SmallCaps,UppercaseSmallCaps}}, -Numbers=OldStyle, -Scale=1.04, -LetterSpace=-1.0 -] {JunicodeWL} - -\pagestyle{plain} -\usepackage{fancyhdr} - -\makeatletter - -\usepackage{color} -\definecolor{note}{gray}{.3} - -\setlength{\hoffset}{-1cm} -\setlength{\oddsidemargin}{0pt} -\setlength{\marginparsep}{0pt} -\setlength{\marginparwidth}{0pt} - -\setlength{\voffset}{0pt} -\setlength{\topmargin}{0pt} -\setlength{\headheight}{0pt} -\setlength{\headsep}{0pt} -\setlength{\leftmargin}{0em} -\setlength{\rightmargin}{0em} -\setlength{\textheight}{24cm} -\setlength{\textwidth}{17.5cm} - - -\pagestyle{fancy} -\fancyhf{} -\renewcommand{\headrulewidth}{0pt} -\renewcommand{\footrulewidth}{0pt} -\lfoot{\footnotesize Katalog biblioteki internetowej WolneLektury.pl, \today} -\cfoot{} -\rfoot{\footnotesize \thepage} - -\clubpenalty=100000 -\widowpenalty=100000 - - -% see http://osdir.com/ml/tex.xetex/2005-10/msg00003.html -\newsavebox{\ximagebox}\newlength{\ximageheight} -\newsavebox{\xglyphbox}\newlength{\xglyphheight} -\newcommand{\xbox}[1] -{\savebox{\ximagebox}{#1}\settoheight{\ximageheight}{\usebox {\ximagebox}}% -\savebox{\xglyphbox}{\char32}\settoheight{\xglyphheight}{\usebox {\xglyphbox}}% -\raisebox{\ximageheight}[0pt][0pt]{%\raisebox{-\xglyphheight}[0pt] [0pt]{% -\makebox[0pt][l]{\usebox{\xglyphbox}}}%}% -\usebox{\ximagebox}% -\raisebox{0pt}[0pt][0pt]{\makebox[0pt][r]{\usebox{\xglyphbox}}}} - - -\newcommand{\name}[1]{% -\\ -\Large{#1}% -} - -\newcommand{\note}[1]{% -\small{\color{note}{#1}}% -} - - -\begin{document} - - \noindent \begin{minipage}[t]{.35\textwidth}\vspace{0pt} - \href{http://www.wolnelektury.pl}{\xbox{\includegraphics[width=\textwidth]{wl-logo.png}}} - \end{minipage} - - \begin{minipage}[t]{.65\textwidth}\vspace{0pt} - \begin{flushright} - \section*{Katalog biblioteki internetowej - \href{http://www.wolnelektury.pl/}{WolneLektury.pl}.} - stan na \today - \end{flushright} - \end{minipage} - - \begin{longtable}{p{9.5cm} p{5.5cm}r p{2cm}} - - - {% book_tree_texml orphans books_by_parent %} - {% for author, group in books_by_author.items %} - {% if group %} - {{ author }} - - - {% book_tree_texml group books_by_parent %} - {% endif %} - {% endfor %} - - - \end{longtable} - \end{document} - - \ No newline at end of file diff --git a/apps/reporting/templates/reporting/main.html b/apps/reporting/templates/reporting/main.html deleted file mode 100755 index 46d49c9ea..000000000 --- a/apps/reporting/templates/reporting/main.html +++ /dev/null @@ -1,48 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load reporting_stats catalogue_tags %} - -{% block titleextra %}{% trans "Reports" %}{% endblock %} - -{% block bodyid %}reports-stats{% endblock %} - - -{% block body %} -

            Statystyka

            - -
            - -

            Audiobooki

            - - - - - - - - - - {% for mt in media_types %} - - - - - - {% endfor %} -
            Utwory
            Utwory:{% count_books %}
            Niezależne książki:{% count_books_root %}
            Utwory nadrzędne:{% count_books_parent %}
            Wszystkie utwory:{% count_books_all %}
            MediaLiczbaRozmiarDo wymiany
            {{ mt.type }}:{{ mt.count }}{{ mt.size|filesizeformat }}{{ mt.deprecated }} - {% for m in mt.deprecated_files %} -
            {% book_title m.book %}: {{ m }} - {% endfor %} -
            - -

            Licencje

            -
              - {% for license, license_description in licenses %} -
            • {{ license }} ({{ license_description }})
            • - {% endfor %} -
            - - -
            - -{% endblock %} diff --git a/apps/reporting/templatetags/__init__.py b/apps/reporting/templatetags/__init__.py deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/reporting/templatetags/reporting_stats.py b/apps/reporting/templatetags/reporting_stats.py deleted file mode 100755 index 7bbe23d03..000000000 --- a/apps/reporting/templatetags/reporting_stats.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from functools import wraps -from django import template -from catalogue.models import Book - - -register = template.Library() - -class StatsNode(template.Node): - def __init__(self, value, varname=None): - self.value = value - self.varname = varname - - def render(self, context): - if self.varname: - context[self.varname] = self.value - return '' - else: - return self.value - - -def register_counter(f): - """Turns a simple counting function into a registered counter tag. - - You can run a counter tag as a simple {% tag_name %} tag, or - as {% tag_name var_name %} to store the result in a variable. - - """ - @wraps(f) - def wrapped(parser, token): - try: - tag_name, args = token.contents.split(None, 1) - except ValueError: - args = None - return StatsNode(f(), args) - - return register.tag(wrapped) - - -@register_counter -def count_books_all(): - return Book.objects.all().count() - -@register_counter -def count_books(): - return Book.objects.filter(children=None).count() - -@register_counter -def count_books_parent(): - return Book.objects.exclude(children=None).count() - -@register_counter -def count_books_root(): - return Book.objects.filter(parent=None).count() diff --git a/apps/reporting/urls.py b/apps/reporting/urls.py deleted file mode 100755 index e78f961b2..000000000 --- a/apps/reporting/urls.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - - -urlpatterns = patterns('reporting.views', - url(r'^$', 'stats_page', name='reporting_stats'), - url(r'^katalog.pdf$', 'catalogue_pdf', name='reporting_catalogue_pdf'), - url(r'^katalog.csv$', 'catalogue_csv', name='reporting_catalogue_csv'), -) - diff --git a/apps/reporting/utils.py b/apps/reporting/utils.py deleted file mode 100755 index 8ecb9b045..000000000 --- a/apps/reporting/utils.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from errno import ENOENT -import os -import os.path -from django.conf import settings -import logging -from django.http import HttpResponse - -logger = logging.getLogger(__name__) - - -def render_to_pdf(output_path, template, context=None, add_files=None): - """Renders a TeXML document into a PDF file. - - :param str output_path: is where the PDF file should go - :param str template: is a TeXML template path - :param context: is context for rendering the template - :param dict add_files: a dictionary of additional files XeTeX will need - """ - - from StringIO import StringIO - import shutil - from tempfile import mkdtemp - import subprocess - import Texml.processor - from django.template.loader import render_to_string - - rendered = render_to_string(template, context) - texml = StringIO(rendered.encode('utf-8')) - tempdir = mkdtemp(prefix="render_to_pdf-") - tex_path = os.path.join(tempdir, "doc.tex") - with open(tex_path, 'w') as tex_file: - Texml.processor.process(texml, tex_file, encoding="utf-8") - - if add_files: - for add_name, src_file in add_files.items(): - add_path = os.path.join(tempdir, add_name) - if hasattr(src_file, "read"): - with open(add_path, 'w') as add_file: - add_file.write(add_file.read()) - else: - shutil.copy(src_file, add_path) - - cwd = os.getcwd() - os.chdir(tempdir) - try: - subprocess.check_call(['xelatex', '-interaction=batchmode', tex_path], - stdout=subprocess.PIPE, stderr=subprocess.PIPE) - try: - os.makedirs(os.path.dirname(output_path)) - except: - pass - shutil.move(os.path.join(tempdir, "doc.pdf"), output_path) - finally: - os.chdir(cwd) - shutil.rmtree(tempdir) - - -def render_to_csv(output_path, template, context=None, add_files=None): - """Renders a TeXML document into a PDF file. - - :param str output_path: is where the PDF file should go - :param str template: is a TeXML template path - :param context: is context for rendering the template - :param dict add_files: a dictionary of additional files XeTeX will need - """ - - from django.template.loader import render_to_string - - try: - os.makedirs(os.path.dirname(output_path)) - except: - pass - - rendered = render_to_string(template, context) - with open(output_path, 'w') as csv_file: - csv_file.write(rendered.encode('utf-8')) - - -def read_chunks(f, size=8192): - chunk = f.read(size) - while chunk: - yield chunk - chunk = f.read(size) - - -def generated_file_view(file_name, mime_type, send_name=None, signals=None): - file_path = os.path.join(settings.MEDIA_ROOT, file_name) - if send_name is None: - send_name = os.path.basename(file_name) - - def signal_handler(*args, **kwargs): - try: - os.unlink(file_path) - except OSError as oe: - if oe.errno != ENOENT: - raise oe - - if signals: - for signal in signals: - signal.connect(signal_handler, weak=False) - - def decorator(func): - def view(request, *args, **kwargs): - if not os.path.exists(file_path): - func(file_path, *args, **kwargs) - - if hasattr(send_name, "__call__"): - name = send_name() - else: - name = send_name - - response = HttpResponse(content_type=mime_type) - response['Content-Disposition'] = 'attachment; filename=%s' % name - with open(file_path) as f: - for chunk in read_chunks(f): - response.write(chunk) - return response - return view - return decorator diff --git a/apps/reporting/views.py b/apps/reporting/views.py deleted file mode 100644 index 8cb2715d5..000000000 --- a/apps/reporting/views.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import os.path -from datetime import date -from django.conf import settings -from django.contrib.admin.views.decorators import staff_member_required -from django.db.models import Count -from django.shortcuts import render_to_response -from django.template import RequestContext - -from catalogue.models import Book, BookMedia -from reporting.utils import render_to_pdf, render_to_csv, generated_file_view - - -@staff_member_required -def stats_page(request): - media = BookMedia.objects.count() - media_types = BookMedia.objects.values('type').\ - annotate(count=Count('type')).\ - order_by('type') - for mt in media_types: - mt['size'] = sum(b.file.size for b in BookMedia.objects.filter(type=mt['type']).iterator()) - if mt['type'] in ('mp3', 'ogg'): - deprecated = BookMedia.objects.filter( - type=mt['type'], source_sha1=None) - mt['deprecated'] = deprecated.count() - mt['deprecated_files'] = deprecated.order_by('book', 'name') - else: - mt['deprecated'] = '-' - - licenses = set(((b.extra_info.get('license'), b.extra_info.get('license_description')) - for b in Book.objects.all().iterator() if b.extra_info.get('license'))) - - return render_to_response('reporting/main.html', - locals(), context_instance=RequestContext(request)) - - -@generated_file_view('reports/katalog.pdf', 'application/pdf', - send_name=lambda: 'wolnelektury_%s.pdf' % date.today(), - signals=[Book.published]) -def catalogue_pdf(path): - books_by_author, orphans, books_by_parent = Book.book_list() - render_to_pdf(path, 'reporting/catalogue.texml', locals(), { - "wl-logo.png": os.path.join(settings.STATIC_ROOT, "img/logo-big.png"), - }) - - -@generated_file_view('reports/katalog.csv', 'application/csv', - send_name=lambda: 'wolnelektury_%s.csv' % date.today(), - signals=[Book.published]) -def catalogue_csv(path): - books_by_author, orphans, books_by_parent = Book.book_list() - render_to_csv(path, 'reporting/catalogue.csv', locals()) diff --git a/apps/search/__init__.py b/apps/search/__init__.py deleted file mode 100644 index d38412449..000000000 --- a/apps/search/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# diff --git a/apps/search/context_processors.py b/apps/search/context_processors.py deleted file mode 100644 index 3cb9256c6..000000000 --- a/apps/search/context_processors.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.core.urlresolvers import reverse -from search.forms import SearchForm - - -def search_form(request): - return { 'search_form': SearchForm(reverse('search.views.hint'), request.GET) } diff --git a/apps/search/custom.py b/apps/search/custom.py deleted file mode 100644 index b3b704d0b..000000000 --- a/apps/search/custom.py +++ /dev/null @@ -1,191 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from sunburnt import sunburnt -from lxml import etree -import urllib -import warnings -from sunburnt import search -import copy -from httplib2 import socket -import re - - -class TermVectorOptions(search.Options): - def __init__(self, schema, original=None): - self.schema = schema - if original is None: - self.fields = set() - self.positions = False - else: - self.fields = copy.copy(original.fields) - self.positions = copy.copy(original.positions) - - def update(self, positions=False, fields=None): - if fields is None: - fields = [] - if isinstance(fields, basestring): - fields = [fields] - self.schema.check_fields(fields, {"stored": True}) - self.fields.update(fields) - self.positions = positions - - def options(self): - opts = {} - if self.positions or self.fields: - opts['tv'] = 'true' - if self.positions: - opts['tv.positions'] = 'true' - if self.fields: - opts['tv.fl'] = ','.join(sorted(self.fields)) - return opts - - -class CustomSolrConnection(sunburnt.SolrConnection): - def __init__(self, *args, **kw): - super(CustomSolrConnection, self).__init__(*args, **kw) - self.analysis_url = self.url + "analysis/field/" - - def analyze(self, params): - qs = urllib.urlencode(params) - url = "%s?%s" % (self.analysis_url, qs) - if len(url) > self.max_length_get_url: - warnings.warn("Long query URL encountered - POSTing instead of " - "GETting. This query will not be cached at the HTTP layer") - url = self.analysis_url - kwargs = dict( - method="POST", - body=qs, - headers={"Content-Type": "application/x-www-form-urlencoded"}, - ) - else: - kwargs = dict(method="GET") - r, c = self.request(url, **kwargs) - if r.status != 200: - raise sunburnt.SolrError(r, c) - return c - - -# monkey patching sunburnt SolrSearch -search.SolrSearch.option_modules += ('term_vectorer',) - - -def __term_vector(self, positions=False, fields=None): - newself = self.clone() - newself.term_vectorer.update(positions, fields) - return newself -setattr(search.SolrSearch, 'term_vector', __term_vector) - - -def __patched__init_common_modules(self): - __original__init_common_modules(self) - self.term_vectorer = TermVectorOptions(self.schema) -__original__init_common_modules = search.SolrSearch._init_common_modules -setattr(search.SolrSearch, '_init_common_modules', __patched__init_common_modules) - - -class CustomSolrInterface(sunburnt.SolrInterface): - # just copied from parent and SolrConnection -> CustomSolrConnection - def __init__(self, url, schemadoc=None, http_connection=None, mode='', retry_timeout=-1, max_length_get_url=sunburnt.MAX_LENGTH_GET_URL): - self.conn = CustomSolrConnection(url, http_connection, retry_timeout, max_length_get_url) - self.schemadoc = schemadoc - if 'w' not in mode: - self.writeable = False - elif 'r' not in mode: - self.readable = False - try: - self.init_schema() - except socket.error, e: - raise socket.error, "Cannot connect to Solr server, and search indexing is enabled (%s)" % str(e) - - def _analyze(self, **kwargs): - if not self.readable: - raise TypeError("This Solr instance is only for writing") - args = { - 'analysis_showmatch': True - } - if 'field' in kwargs: args['analysis_fieldname'] = kwargs['field'] - if 'text' in kwargs: args['analysis_fieldvalue'] = kwargs['text'] - if 'q' in kwargs: args['q'] = kwargs['q'] - if 'query' in kwargs: args['q'] = kwargs['q'] - - params = map(lambda (k, v): (k.replace('_', '.'), v), sunburnt.params_from_dict(**args)) - - content = self.conn.analyze(params) - doc = etree.fromstring(content) - return doc - - def highlight(self, **kwargs): - doc = self._analyze(**kwargs) - analyzed = doc.xpath("//lst[@name='index']/arr[last()]/lst[bool/@name='match']") - matches = set() - for wrd in analyzed: - start = int(wrd.xpath("int[@name='start']")[0].text) - end = int(wrd.xpath("int[@name='end']")[0].text) - matches.add((start, end)) - - if matches: - return self.substring(kwargs['text'], matches, - margins=kwargs.get('margins', 30), - mark=kwargs.get('mark', ("", ""))) - else: - return None - - def analyze(self, **kwargs): - doc = self._analyze(**kwargs) - terms = doc.xpath("//lst[@name='index']/arr[last()]/lst/str[1]") - terms = map(lambda n: unicode(n.text), terms) - return terms - - def expand_margins(self, text, start, end): - totlen = len(text) - - def is_boundary(x): - ws = re.compile(r"\W", re.UNICODE) - return bool(ws.match(x)) - - while start > 0: - if is_boundary(text[start - 1]): - break - start -= 1 - - while end < totlen - 1: - if is_boundary(text[end + 1]): - break - end += 1 - - return (start, end) - - def substring(self, text, matches, margins=30, mark=("", "")): - start = None - end = None - totlen = len(text) - matches_margins = map(lambda (s, e): - ((s, e), - (max(0, s - margins), min(totlen, e + margins))), - matches) - matches_margins = map(lambda (m, (s, e)): - (m, self.expand_margins(text, s, e)), - matches_margins) - - # lets start with first match - (start, end) = matches_margins[0][1] - matches = [matches_margins[0][0]] - - for (m, (s, e)) in matches_margins[1:]: - if end < s or start > e: - continue - start = min(start, s) - end = max(end, e) - matches.append(m) - - snip = text[start:end] - matches.sort(lambda a, b: cmp(b[0], a[0])) - - for (s, e) in matches: - off = - start - snip = snip[:e + off] + mark[1] + snip[e + off:] - snip = snip[:s + off] + mark[0] + snip[s + off:] - - return snip diff --git a/apps/search/fields.py b/apps/search/fields.py deleted file mode 100755 index 45d8b7ecf..000000000 --- a/apps/search/fields.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import forms -from django.forms.widgets import flatatt -from django.utils.encoding import smart_unicode -from django.utils.safestring import mark_safe -from json import dumps - - -class JQueryAutoCompleteWidget(forms.TextInput): - def __init__(self, options, *args, **kwargs): - self.options = dumps(options) - super(JQueryAutoCompleteWidget, self).__init__(*args, **kwargs) - - def render_js(self, field_id, options): - return u'$(\'#%s\').autocomplete(%s).result(autocomplete_result_handler);' % (field_id, options) - - def render(self, name, value=None, attrs=None): - final_attrs = self.build_attrs(attrs, name=name) - if value: - final_attrs['value'] = smart_unicode(value) - - if not self.attrs.has_key('id'): - final_attrs['id'] = 'id_%s' % name - - html = u''' - - ''' % { - 'attrs': flatatt(final_attrs), - 'js' : self.render_js(final_attrs['id'], self.options), - } - - return mark_safe(html) - - -class JQueryAutoCompleteSearchWidget(JQueryAutoCompleteWidget): - def __init__(self, *args, **kwargs): - super(JQueryAutoCompleteSearchWidget, self).__init__(*args, **kwargs) - - def render_js(self, field_id, options): - return u"" - - -class JQueryAutoCompleteField(forms.CharField): - def __init__(self, source, options={}, *args, **kwargs): - if 'widget' not in kwargs: - options['source'] = source - kwargs['widget'] = JQueryAutoCompleteWidget(options) - - super(JQueryAutoCompleteField, self).__init__(*args, **kwargs) - - -class JQueryAutoCompleteSearchField(forms.CharField): - def __init__(self, options={}, *args, **kwargs): - if 'widget' not in kwargs: - kwargs['widget'] = JQueryAutoCompleteSearchWidget(options) - - super(JQueryAutoCompleteSearchField, self).__init__(*args, **kwargs) diff --git a/apps/search/forms.py b/apps/search/forms.py deleted file mode 100755 index 9e0a07880..000000000 --- a/apps/search/forms.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import forms -from django.utils.translation import ugettext_lazy as _ - -from search.fields import JQueryAutoCompleteSearchField - - -class SearchForm(forms.Form): - q = JQueryAutoCompleteSearchField(label=_('Search')) # {'minChars': 2, 'selectFirst': True, 'cacheLength': 50, 'matchContains': "word"}) - - def __init__(self, source, *args, **kwargs): - kwargs['auto_id'] = False - super(SearchForm, self).__init__(*args, **kwargs) - self.fields['q'].widget.attrs['id'] = 'search' - self.fields['q'].widget.attrs['autocomplete'] = 'off' - self.fields['q'].widget.attrs['data-source'] = source - if not 'q' in self.data: - self.fields['q'].widget.attrs['placeholder'] = _('title, author, theme/topic, epoch, kind, genre, phrase') diff --git a/apps/search/index.py b/apps/search/index.py deleted file mode 100644 index 31417ca87..000000000 --- a/apps/search/index.py +++ /dev/null @@ -1,946 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings - -import os -import re -import errno -from librarian import dcparser -from librarian.parser import WLDocument -from lxml import etree -import catalogue.models -from pdcounter.models import Author as PDCounterAuthor, BookStub as PDCounterBook -from itertools import chain -import traceback -import logging -log = logging.getLogger('search') -import sunburnt -import custom -import operator - -log = logging.getLogger('search') - -class SolrIndex(object): - def __init__(self, mode=None): - self.index = custom.CustomSolrInterface(settings.SOLR, mode=mode) - - -class Snippets(object): - """ - This class manages snippet files for indexed object (book) - the snippets are concatenated together, and their positions and - lengths are kept in lucene index fields. - """ - SNIPPET_DIR = "snippets" - - def __init__(self, book_id, revision=None): - try: - os.makedirs(os.path.join(settings.SEARCH_INDEX, self.SNIPPET_DIR)) - except OSError as exc: - if exc.errno == errno.EEXIST: - pass - else: raise - self.book_id = book_id - self.revision = revision - self.file = None - - @property - def path(self): - if self.revision: fn = "%d.%d" % (self.book_id, self.revision) - else: fn = "%d" % self.book_id - - return os.path.join(settings.SEARCH_INDEX, self.SNIPPET_DIR, fn) - - def open(self, mode='r'): - """ - Open the snippet file. Call .close() afterwards. - """ - if not 'b' in mode: - mode += 'b' - - if 'w' in mode: - if os.path.exists(self.path): - self.revision = 1 - while True: - if not os.path.exists(self.path): - break - self.revision += 1 - - self.file = open(self.path, mode) - self.position = 0 - return self - - def add(self, snippet): - """ - Append a snippet (unicode) to the snippet file. - Return a (position, length) tuple - """ - txt = snippet.encode('utf-8') - l = len(txt) - self.file.write(txt) - pos = (self.position, l) - self.position += l - return pos - - def get(self, pos): - """ - Given a tuple of (position, length) return an unicode - of the snippet stored there. - """ - self.file.seek(pos[0], 0) - txt = self.file.read(pos[1]).decode('utf-8') - return txt - - def close(self): - """Close snippet file""" - if self.file: - self.file.close() - - def remove(self): - self.revision = None - try: - os.unlink(self.path) - self.revision = 0 - while True: - self.revision += 1 - os.unlink(self.path) - except OSError: - pass - - -class Index(SolrIndex): - """ - Class indexing books. - """ - def __init__(self): - super(Index, self).__init__(mode='rw') - - def delete_query(self, *queries): - """ - index.delete(queries=...) doesn't work, so let's reimplement it - using deletion of list of uids. - """ - uids = set() - for q in queries: - if isinstance(q, sunburnt.search.LuceneQuery): - q = self.index.query(q) - q.field_limiter.update(['uid']) - st = 0 - rows = 100 - while True: - ids = q.paginate(start=st, rows=rows).execute() - if not len(ids): - break - for res in ids: - uids.add(res['uid']) - st += rows - if uids: - self.index.delete(uids) - return True - else: - return False - - def index_tags(self, *tags, **kw): - """ - Re-index global tag list. - Removes all tags from index, then index them again. - Indexed fields include: id, name (with and without polish stems), category - """ - log.debug("Indexing tags") - remove_only = kw.get('remove_only', False) - # first, remove tags from index. - if tags: - tag_qs = [] - for tag in tags: - q_id = self.index.Q(tag_id=tag.id) - - if isinstance(tag, PDCounterAuthor): - q_cat = self.index.Q(tag_category='pd_author') - elif isinstance(tag, PDCounterBook): - q_cat = self.index.Q(tag_category='pd_book') - else: - q_cat = self.index.Q(tag_category=tag.category) - - q_id_cat = self.index.Q(q_id & q_cat) - tag_qs.append(q_id_cat) - self.delete_query(*tag_qs) - else: # all - q = self.index.Q(tag_id__any=True) - self.delete_query(q) - - if not remove_only: - # then add them [all or just one passed] - if not tags: - tags = chain(catalogue.models.Tag.objects.exclude(category='set'), \ - PDCounterAuthor.objects.all(), \ - PDCounterBook.objects.all()) - - for tag in tags: - if isinstance(tag, PDCounterAuthor): - doc = { - "tag_id": int(tag.id), - "tag_name": tag.name, - "tag_name_pl": tag.name, - "tag_category": 'pd_author', - "is_pdcounter": True, - "uid": "tag%d_pd_a" % tag.id - } - elif isinstance(tag, PDCounterBook): - doc = { - "tag_id": int(tag.id), - "tag_name": tag.title, - "tag_name_pl": tag.title, - "tag_category": 'pd_book', - "is_pdcounter": True, - "uid": "tag%d_pd_b" % tag.id - } - else: - doc = { - "tag_id": int(tag.id), - "tag_name": tag.name, - "tag_name_pl": tag.name, - "tag_category": tag.category, - "is_pdcounter": False, - "uid": "tag%d" % tag.id - } - self.index.add(doc) - - def create_book_doc(self, book): - """ - Create a lucene document referring book id. - """ - doc = { - 'book_id': int(book.id), - } - if book.parent is not None: - doc["parent_id"] = int(book.parent.id) - return doc - - def remove_book(self, book_or_id, remove_snippets=True): - """Removes a book from search index. - book - Book instance.""" - if isinstance(book_or_id, catalogue.models.Book): - book_id = book_or_id.id - else: - book_id = book_or_id - - self.delete_query(self.index.Q(book_id=book_id)) - - if remove_snippets: - snippets = Snippets(book_id) - snippets.remove() - - def index_book(self, book, book_info=None, overwrite=True): - """ - Indexes the book. - Creates a lucene document for extracted metadata - and calls self.index_content() to index the contents of the book. - """ - if overwrite: - # we don't remove snippets, since they might be still needed by - # threads using not reopened index - self.remove_book(book, remove_snippets=False) - - book_doc = self.create_book_doc(book) - meta_fields = self.extract_metadata(book, book_info, dc_only=['source_name', 'authors', 'translators', 'title']) - # let's not index it - it's only used for extracting publish date - if 'source_name' in meta_fields: - del meta_fields['source_name'] - - for n, f in meta_fields.items(): - book_doc[n] = f - - book_doc['uid'] = "book%s" % book_doc['book_id'] - self.index.add(book_doc) - del book_doc - book_fields = { - 'title': meta_fields['title'], - 'authors': meta_fields['authors'], - 'published_date': meta_fields['published_date'] - } - - if 'translators' in meta_fields: - book_fields['translators'] = meta_fields['translators'] - - self.index_content(book, book_fields=book_fields) - - master_tags = [ - 'opowiadanie', - 'powiesc', - 'dramat_wierszowany_l', - 'dramat_wierszowany_lp', - 'dramat_wspolczesny', 'liryka_l', 'liryka_lp', - 'wywiad', - ] - - ignore_content_tags = [ - 'uwaga', 'extra', - 'zastepnik_tekstu', 'sekcja_asterysk', 'separator_linia', 'zastepnik_wersu', - 'didaskalia', - 'naglowek_aktu', 'naglowek_sceny', 'naglowek_czesc', - ] - - footnote_tags = ['pa', 'pt', 'pr', 'pe'] - - skip_header_tags = ['autor_utworu', 'nazwa_utworu', 'dzielo_nadrzedne', '{http://www.w3.org/1999/02/22-rdf-syntax-ns#}RDF'] - - published_date_re = re.compile("([0-9]+)[\]. ]*$") - - def extract_metadata(self, book, book_info=None, dc_only=None): - """ - Extract metadata from book and returns a map of fields keyed by fieldname - """ - fields = {} - - if book_info is None: - book_info = dcparser.parse(open(book.xml_file.path)) - - fields['slug'] = book.slug - fields['tags'] = [t.name for t in book.tags] - fields['is_book'] = True - - # validator, name - for field in dcparser.BookInfo.FIELDS: - if dc_only and field.name not in dc_only: - continue - if hasattr(book_info, field.name): - if not getattr(book_info, field.name): - continue - # since no type information is available, we use validator - type_indicator = field.validator - if type_indicator == dcparser.as_unicode: - s = getattr(book_info, field.name) - if field.multiple: - s = ', '.join(s) - fields[field.name] = s - elif type_indicator == dcparser.as_person: - p = getattr(book_info, field.name) - if isinstance(p, dcparser.Person): - persons = unicode(p) - else: - persons = ', '.join(map(unicode, p)) - fields[field.name] = persons - elif type_indicator == dcparser.as_date: - dt = getattr(book_info, field.name) - fields[field.name] = dt - - # get published date - pd = None - if hasattr(book_info, 'source_name') and book_info.source_name: - match = self.published_date_re.search(book_info.source_name) - if match is not None: - pd = str(match.groups()[0]) - if not pd: pd = "" - fields["published_date"] = pd - - return fields - - # def add_gaps(self, fields, fieldname): - # """ - # Interposes a list of fields with gap-fields, which are indexed spaces and returns it. - # This allows for doing phrase queries which do not overlap the gaps (when slop is 0). - # """ - # def gap(): - # while True: - # yield Field(fieldname, ' ', Field.Store.NO, Field.Index.NOT_ANALYZED) - # return reduce(lambda a, b: a + b, zip(fields, gap()))[0:-1] - - def get_master(self, root): - """ - Returns the first master tag from an etree. - """ - for master in root.iter(): - if master.tag in self.master_tags: - return master - - def index_content(self, book, book_fields={}): - """ - Walks the book XML and extract content from it. - Adds parts for each header tag and for each fragment. - """ - wld = WLDocument.from_file(book.xml_file.path, parse_dublincore=False) - root = wld.edoc.getroot() - - master = self.get_master(root) - if master is None: - return [] - - def walker(node, ignore_tags=[]): - - if node.tag not in ignore_tags: - yield node, None, None - if node.text is not None: - yield None, node.text, None - for child in list(node): - for b, t, e in walker(child): - yield b, t, e - yield None, None, node - - if node.tail is not None: - yield None, node.tail, None - return - - def fix_format(text): - # separator = [u" ", u"\t", u".", u";", u","] - if isinstance(text, list): - # need to join it first - text = filter(lambda s: s is not None, content) - text = u' '.join(text) - # for i in range(len(text)): - # if i > 0: - # if text[i][0] not in separator\ - # and text[i - 1][-1] not in separator: - # text.insert(i, u" ") - - return re.sub("(?m)/$", "", text) - - def add_part(snippets, **fields): - doc = self.create_book_doc(book) - for n, v in book_fields.items(): - doc[n] = v - - doc['header_index'] = fields["header_index"] - doc['header_span'] = 'header_span' in fields and fields['header_span'] or 1 - doc['header_type'] = fields['header_type'] - - doc['text'] = fields['text'] - - # snippets - snip_pos = snippets.add(fields["text"]) - - doc['snippets_position'] = snip_pos[0] - doc['snippets_length'] = snip_pos[1] - if snippets.revision: - doc["snippets_revision"] = snippets.revision - - if 'fragment_anchor' in fields: - doc["fragment_anchor"] = fields['fragment_anchor'] - - if 'themes' in fields: - doc['themes'] = fields['themes'] - doc['uid'] = "part%s%s%s" % (doc['header_index'], - doc['header_span'], - doc.get('fragment_anchor', '')) - return doc - - def give_me_utf8(s): - if isinstance(s, unicode): - return s.encode('utf-8') - else: - return s - - fragments = {} - snippets = Snippets(book.id).open('w') - try: - for header, position in zip(list(master), range(len(master))): - - if header.tag in self.skip_header_tags: - continue - if header.tag is etree.Comment: - continue - - # section content - content = [] - footnote = [] - - def all_content(text): - for frag in fragments.values(): - frag['text'].append(text) - content.append(text) - handle_text = [all_content] - - for start, text, end in walker(header, ignore_tags=self.ignore_content_tags): - # handle footnotes - if start is not None and start.tag in self.footnote_tags: - footnote = [] - - def collect_footnote(t): - footnote.append(t) - - handle_text.append(collect_footnote) - elif end is not None and footnote is not [] and end.tag in self.footnote_tags: - handle_text.pop() - doc = add_part(snippets, header_index=position, header_type=header.tag, - text=u''.join(footnote), - is_footnote=True) - self.index.add(doc) - footnote = [] - - # handle fragments and themes. - if start is not None and start.tag == 'begin': - fid = start.attrib['id'][1:] - fragments[fid] = {'text': [], 'themes': [], 'start_section': position, 'start_header': header.tag} - - # themes for this fragment - elif start is not None and start.tag == 'motyw': - fid = start.attrib['id'][1:] - handle_text.append(None) - if start.text is not None: - fragments[fid]['themes'] += map(unicode.strip, map(unicode, (start.text.split(',')))) - elif end is not None and end.tag == 'motyw': - handle_text.pop() - - elif start is not None and start.tag == 'end': - fid = start.attrib['id'][1:] - if fid not in fragments: - continue # a broken node, skip it - frag = fragments[fid] - if frag['themes'] == []: - continue # empty themes list. - del fragments[fid] - - doc = add_part(snippets, - header_type=frag['start_header'], - header_index=frag['start_section'], - header_span=position - frag['start_section'] + 1, - fragment_anchor=fid, - text=fix_format(frag['text']), - themes=frag['themes']) - self.index.add(doc) - - # Collect content. - - if text is not None and handle_text is not []: - hdl = handle_text[-1] - if hdl is not None: - hdl(text) - - # in the end, add a section text. - doc = add_part(snippets, header_index=position, - header_type=header.tag, text=fix_format(content)) - - self.index.add(doc) - - finally: - snippets.close() - - -class SearchResult(object): - def __init__(self, doc, how_found=None, query=None, query_terms=None): - # self.search = search - self.boost = 1.0 - self._hits = [] - self._processed_hits = None # processed hits - self.snippets = [] - self.query_terms = query_terms - - if 'score' in doc: - self._score = doc['score'] - else: - self._score = 0 - - self.book_id = int(doc["book_id"]) - - try: - self.published_date = int(doc.get("published_date")) - except ValueError: - self.published_date = 0 - - # content hits - header_type = doc.get("header_type", None) - # we have a content hit in some header of fragment - if header_type is not None: - sec = (header_type, int(doc["header_index"])) - header_span = doc['header_span'] - header_span = header_span is not None and int(header_span) or 1 - fragment = doc.get("fragment_anchor", None) - snippets_pos = (doc['snippets_position'], doc['snippets_length']) - snippets_rev = doc.get('snippets_revision', None) - - hit = (sec + (header_span,), fragment, self._score, { - 'how_found': how_found, - 'snippets_pos': snippets_pos, - 'snippets_revision': snippets_rev, - 'themes': doc.get('themes', []), - 'themes_pl': doc.get('themes_pl', []) - }) - - self._hits.append(hit) - - def __unicode__(self): - return u"" % \ - (self.book_id, len(self._hits), self._processed_hits and len(self._processed_hits) or -1, self._score, len(self.snippets)) - - def __str__(self): - return unicode(self).encode('utf-8') - - @property - def score(self): - return self._score * self.boost - - def merge(self, other): - if self.book_id != other.book_id: - raise ValueError("this search result is or book %d; tried to merge with %d" % (self.book_id, other.book_id)) - self._hits += other._hits - if other.score > self.score: - self._score = other._score - return self - - def get_book(self): - if hasattr(self, '_book'): - return self._book - self._book = catalogue.models.Book.objects.get(id=self.book_id) - return self._book - - book = property(get_book) - - POSITION = 0 - FRAGMENT = 1 - POSITION_INDEX = 1 - POSITION_SPAN = 2 - SCORE = 2 - OTHER = 3 - - @property - def hits(self): - if self._processed_hits is not None: - return self._processed_hits - - # to sections and fragments - frags = filter(lambda r: r[self.FRAGMENT] is not None, self._hits) - - sect = filter(lambda r: r[self.FRAGMENT] is None, self._hits) - - # sections not covered by fragments - sect = filter(lambda s: 0 == len(filter( - lambda f: s[self.POSITION][self.POSITION_INDEX] >= f[self.POSITION][self.POSITION_INDEX] - and s[self.POSITION][self.POSITION_INDEX] < f[self.POSITION][self.POSITION_INDEX] + f[self.POSITION][self.POSITION_SPAN], - frags)), sect) - - hits = [] - - def remove_duplicates(lst, keyfn, compare): - els = {} - for e in lst: - eif = keyfn(e) - if eif in els: - if compare(els[eif], e) >= 1: - continue - els[eif] = e - return els.values() - - # remove fragments with duplicated fid's and duplicated snippets - frags = remove_duplicates(frags, lambda f: f[self.FRAGMENT], lambda a, b: cmp(a[self.SCORE], b[self.SCORE])) - # frags = remove_duplicates(frags, lambda f: f[OTHER]['snippet_pos'] and f[OTHER]['snippet_pos'] or f[FRAGMENT], - # lambda a, b: cmp(a[SCORE], b[SCORE])) - - # remove duplicate sections - sections = {} - - for s in sect: - si = s[self.POSITION][self.POSITION_INDEX] - # skip existing - if si in sections: - if sections[si]['score'] >= s[self.SCORE]: - continue - - m = {'score': s[self.SCORE], - 'section_number': s[self.POSITION][self.POSITION_INDEX] + 1, - } - m.update(s[self.OTHER]) - sections[si] = m - - hits = sections.values() - - for f in frags: - try: - frag = catalogue.models.Fragment.objects.get(anchor=f[self.FRAGMENT], book__id=self.book_id) - except catalogue.models.Fragment.DoesNotExist: - # stale index - continue - # Figure out if we were searching for a token matching some word in theme name. - themes = frag.tags.filter(category='theme') - themes_hit = set() - if self.query_terms is not None: - for i in range(0, len(f[self.OTHER]['themes'])): - tms = f[self.OTHER]['themes'][i].split(r' +') + f[self.OTHER]['themes_pl'][i].split(' ') - tms = map(unicode.lower, tms) - for qt in self.query_terms: - if qt in tms: - themes_hit.add(f[self.OTHER]['themes'][i]) - break - - def theme_by_name(n): - th = filter(lambda t: t.name == n, themes) - if th: - return th[0] - else: - return None - themes_hit = filter(lambda a: a is not None, map(theme_by_name, themes_hit)) - - m = {'score': f[self.SCORE], - 'fragment': frag, - 'section_number': f[self.POSITION][self.POSITION_INDEX] + 1, - 'themes': themes, - 'themes_hit': themes_hit - } - m.update(f[self.OTHER]) - hits.append(m) - - hits.sort(lambda a, b: cmp(a['score'], b['score']), reverse=True) - - self._processed_hits = hits - - return hits - - @staticmethod - def aggregate(*result_lists): - books = {} - for rl in result_lists: - for r in rl: - if r.book_id in books: - books[r.book_id].merge(r) - else: - books[r.book_id] = r - return books.values() - - def __cmp__(self, other): - c = cmp(self.score, other.score) - if c == 0: - # this is inverted, because earlier date is better - return cmp(other.published_date, self.published_date) - else: - return c - - def __len__(self): - return len(self.hits) - - def snippet_pos(self, idx=0): - return self.hits[idx]['snippets_pos'] - - def snippet_revision(self, idx=0): - try: - return self.hits[idx]['snippets_revision'] - except: - return None - - -class Search(SolrIndex): - """ - Search facilities. - """ - def __init__(self, default_field="text"): - super(Search, self).__init__(mode='r') - - - def make_term_query(self, query, field='text', modal=operator.or_): - """ - Returns term queries joined by boolean query. - modal - applies to boolean query - fuzzy - should the query by fuzzy. - """ - if query is None: query = '' - q = self.index.Q() - q = reduce(modal, map(lambda s: self.index.Q(**{field: s}), - query.split(r" ")), q) - - return q - - def search_phrase(self, searched, field='text', book=False, - filters=None, - snippets=False): - if filters is None: filters = [] - if book: filters.append(self.index.Q(is_book=True)) - - q = self.index.query(**{field: searched}) - q = self.apply_filters(q, filters).field_limit(score=True, all_fields=True) - res = q.execute() - return [SearchResult(found, how_found=u'search_phrase') for found in res] - - def search_some(self, searched, fields, book=True, - filters=None, snippets=True, query_terms=None): - assert isinstance(fields, list) - if filters is None: filters = [] - if book: filters.append(self.index.Q(is_book=True)) - - query = self.index.Q() - - for fld in fields: - query = self.index.Q(query | self.make_term_query(searched, fld)) - - query = self.index.query(query) - query = self.apply_filters(query, filters).field_limit(score=True, all_fields=True) - res = query.execute() - return [SearchResult(found, how_found='search_some', query_terms=query_terms) for found in res] - - - def search_everywhere(self, searched, query_terms=None): - """ - Tries to use search terms to match different fields of book (or its parts). - E.g. one word can be an author survey, another be a part of the title, and the rest - are some words from third chapter. - """ - books = [] - # content only query : themes x content - q = self.make_term_query(searched, 'text') - q_themes = self.make_term_query(searched, 'themes_pl') - - query = self.index.query(q).query(q_themes).field_limit(score=True, all_fields=True) - res = query.execute() - - for found in res: - books.append(SearchResult(found, how_found='search_everywhere_themesXcontent', query_terms=query_terms)) - - # query themes/content x author/title/tags - in_content = self.index.Q() - in_meta = self.index.Q() - - for fld in ['themes_pl', 'text']: - in_content |= self.make_term_query(searched, field=fld) - - for fld in ['tags', 'authors', 'title']: - in_meta |= self.make_term_query(searched, field=fld) - - q = in_content & in_meta - res = self.index.query(q).field_limit(score=True, all_fields=True).execute() - - for found in res: - books.append(SearchResult(found, how_found='search_everywhere', query_terms=query_terms)) - - return books - - def get_snippets(self, searchresult, query, field='text', num=1): - """ - Returns a snippet for found scoreDoc. - """ - maxnum = len(searchresult) - if num is None or num < 0 or num > maxnum: - num = maxnum - book_id = searchresult.book_id - revision = searchresult.snippet_revision() - snippets = Snippets(book_id, revision=revision) - snips = [None] * maxnum - try: - snippets.open() - idx = 0 - while idx < maxnum and num > 0: - position, length = searchresult.snippet_pos(idx) - if position is None or length is None: - continue - text = snippets.get((int(position), - int(length))) - snip = self.index.highlight(text=text, field=field, q=query) - snips[idx] = snip - if snip: - num -= 1 - idx += 1 - - except IOError, e: - log.error("Cannot open snippet file for book id = %d [rev=%s], %s" % (book_id, revision, e)) - return [] - finally: - snippets.close() - - # remove verse end markers.. - snips = map(lambda s: s and s.replace("/\n", "\n"), snips) - - searchresult.snippets = snips - - return snips - - def hint_tags(self, query, pdcounter=True, prefix=True): - """ - Return auto-complete hints for tags - using prefix search. - """ - q = self.index.Q() - query = query.strip() - for field in ['tag_name', 'tag_name_pl']: - if prefix: - q |= self.index.Q(**{field: query + "*"}) - else: - q |= self.make_term_query(query, field=field) - qu = self.index.query(q) - - return self.search_tags(qu, pdcounter=pdcounter) - - def search_tags(self, query, filters=None, pdcounter=False): - """ - Search for Tag objects using query. - """ - if not filters: filters = [] - if not pdcounter: - filters.append(~self.index.Q(is_pdcounter=True)) - res = self.apply_filters(query, filters).execute() - - tags = [] - pd_tags = [] - - for doc in res: - is_pdcounter = doc.get('is_pdcounter', False) - category = doc.get('tag_category') - try: - if is_pdcounter == True: - if category == 'pd_author': - tag = PDCounterAuthor.objects.get(id=doc.get('tag_id')) - elif category == 'pd_book': - tag = PDCounterBook.objects.get(id=doc.get('tag_id')) - tag.category = 'pd_book' # make it look more lik a tag. - else: - print ("Warning. cannot get pdcounter tag_id=%d from db; cat=%s" % (int(doc.get('tag_id')), category)).encode('utf-8') - pd_tags.append(tag) - else: - tag = catalogue.models.Tag.objects.get(id=doc.get("tag_id")) - tags.append(tag) - - except catalogue.models.Tag.DoesNotExist: pass - except PDCounterAuthor.DoesNotExist: pass - except PDCounterBook.DoesNotExist: pass - - tags_slugs = set(map(lambda t: t.slug, tags)) - tags = tags + filter(lambda t: not t.slug in tags_slugs, pd_tags) - - log.debug('search_tags: %s' % tags) - - return tags - - def hint_books(self, query, prefix=True): - """ - Returns auto-complete hints for book titles - Because we do not index 'pseudo' title-tags. - Prefix search. - """ - q = self.index.Q() - query = query.strip() - if prefix: - q |= self.index.Q(title=query + "*") - else: - q |= self.make_term_query(query, field='title') - qu = self.index.query(q) - only_books = self.index.Q(is_book=True) - return self.search_books(qu, [only_books]) - - def search_books(self, query, filters=None, max_results=10): - """ - Searches for Book objects using query - """ - bks = [] - bks_found = set() - query = query.query(is_book=True) - res = self.apply_filters(query, filters).field_limit(['book_id']) - for r in res: - try: - bid = r['book_id'] - if not bid in bks_found: - bks.append(catalogue.models.Book.objects.get(id=bid)) - bks_found.add(bid) - except catalogue.models.Book.DoesNotExist: pass - return bks - - - @staticmethod - def apply_filters(query, filters): - """ - Apply filters to a query - """ - if filters is None: filters = [] - filters = filter(lambda x: x is not None, filters) - for f in filters: - query = query.query(f) - return query - - -if getattr(settings, 'SEARCH_MOCK', False): - from .mock_search import Search diff --git a/apps/search/locale/de/LC_MESSAGES/django.mo b/apps/search/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index 831e52ac6..000000000 Binary files a/apps/search/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/de/LC_MESSAGES/django.po b/apps/search/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 6e98c6275..000000000 --- a/apps/search/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,30 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-09 11:35+0100\n" -"Last-Translator: xxx \n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "Suchen" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "Titel, Autor, Thema, Epoche, Art, Gattung, Satz" - -#: views.py:100 -msgid "book" -msgstr "Buch" diff --git a/apps/search/locale/en/LC_MESSAGES/django.mo b/apps/search/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index 30dabdcd3..000000000 Binary files a/apps/search/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/en/LC_MESSAGES/django.po b/apps/search/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index 05b74586c..000000000 --- a/apps/search/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,29 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-10 13:31+0100\n" -"Last-Translator: Kamil \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "Search" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "title, author, theme/topic, period, form, genre, phrase" - -#: views.py:100 -msgid "book" -msgstr "book" diff --git a/apps/search/locale/es/LC_MESSAGES/django.mo b/apps/search/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index 6b996266e..000000000 Binary files a/apps/search/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/es/LC_MESSAGES/django.po b/apps/search/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index c08ead943..000000000 --- a/apps/search/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,30 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-05-17 23:20+0100\n" -"Last-Translator: KG \n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "Buscar" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "título, autor, tema, época , género, subgénero, frase" - -#: views.py:100 -msgid "book" -msgstr "libro" diff --git a/apps/search/locale/fr/LC_MESSAGES/django.mo b/apps/search/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index 96e747616..000000000 Binary files a/apps/search/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/fr/LC_MESSAGES/django.po b/apps/search/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index 70b0d42dd..000000000 --- a/apps/search/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,30 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: 2\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 20:25+0100\n" -"Last-Translator: xxx \n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "Rechercher" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "titre, auteur, thème/sujet, époque, type, genre" - -#: views.py:100 -msgid "book" -msgstr "le livre" diff --git a/apps/search/locale/it/LC_MESSAGES/django.mo b/apps/search/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index 348bf827a..000000000 Binary files a/apps/search/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/it/LC_MESSAGES/django.po b/apps/search/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index 07c8c7a17..000000000 --- a/apps/search/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,31 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "" - -#: views.py:100 -msgid "book" -msgstr "" diff --git a/apps/search/locale/jp/LC_MESSAGES/django.mo b/apps/search/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index c9739db34..000000000 Binary files a/apps/search/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/jp/LC_MESSAGES/django.po b/apps/search/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index d991f75d4..000000000 --- a/apps/search/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,30 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "" - -#: views.py:100 -msgid "book" -msgstr "" diff --git a/apps/search/locale/lt/LC_MESSAGES/django.mo b/apps/search/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index d012e915a..000000000 Binary files a/apps/search/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/lt/LC_MESSAGES/django.po b/apps/search/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index 8b9b64e3d..000000000 --- a/apps/search/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,31 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-02 18:24+0100\n" -"Last-Translator: Karolina Zuber \n" -"Language-Team: LANGUAGE \n" -"Language: \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" -"%100<10 || n%100>=20) ? 1 : 2)\n" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "Ieškoti" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "pavadinimas, autorius, motyvas/tema, epocha, rūšis, žanras, citata" - -#: views.py:100 -msgid "book" -msgstr "knyga" diff --git a/apps/search/locale/pl/LC_MESSAGES/django.mo b/apps/search/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 208692a08..000000000 Binary files a/apps/search/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/pl/LC_MESSAGES/django.po b/apps/search/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 1d89f7ca9..000000000 --- a/apps/search/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,35 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-01-27 16:41+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \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%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2)\n" - -#: forms.py:12 templates/newsearch/search.html:16 -#, fuzzy -msgid "Search" -msgstr "szukaj" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "tytuł, autor, motyw/temat, epoka, rodzaj, gatunek, cytat" - -#: views.py:100 -msgid "book" -msgstr "utwór" - -#~ msgid "off" -#~ msgstr "wył." diff --git a/apps/search/locale/ru/LC_MESSAGES/django.mo b/apps/search/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 1f7051309..000000000 Binary files a/apps/search/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/ru/LC_MESSAGES/django.po b/apps/search/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index 868db0581..000000000 --- a/apps/search/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,30 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 22:11+0100\n" -"Last-Translator: xxx \n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "Поиск" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "название, автор, тема/сюжет, епоха, вид, жанр, фраза" - -#: views.py:100 -msgid "book" -msgstr "книга" diff --git a/apps/search/locale/uk/LC_MESSAGES/django.mo b/apps/search/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index 8e2b10c72..000000000 Binary files a/apps/search/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/uk/LC_MESSAGES/django.po b/apps/search/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index b24b885b7..000000000 --- a/apps/search/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,31 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-04-10 22:12+0100\n" -"Last-Translator: Natalia Kertyczak \n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "Пошук" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "назва, автор, тема/мотив, епоха, рід, жанр, фраза" - -#: views.py:100 -msgid "book" -msgstr "книжка" diff --git a/apps/search/management/__init__.py b/apps/search/management/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/search/management/commands/__init__.py b/apps/search/management/commands/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/search/management/commands/reindex.py b/apps/search/management/commands/reindex.py deleted file mode 100755 index 4941354ce..000000000 --- a/apps/search/management/commands/reindex.py +++ /dev/null @@ -1,88 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import sys -from django.core.management.base import BaseCommand - -from optparse import make_option - -def query_yes_no(question, default="yes"): - """Ask a yes/no question via raw_input() and return their answer. - - "question" is a string that is presented to the user. - "default" is the presumed answer if the user just hits . - It must be "yes" (the default), "no" or None (meaning - an answer is required of the user). - - The "answer" return value is one of "yes" or "no". - """ - valid = {"yes":True, "y":True, "ye":True, - "no":False, "n":False} - if default == None: - prompt = " [y/n] " - elif default == "yes": - prompt = " [Y/n] " - elif default == "no": - prompt = " [y/N] " - else: - raise ValueError("invalid default answer: '%s'" % default) - - while True: - sys.stdout.write(question + prompt) - choice = raw_input().lower() - if default is not None and choice == '': - return valid[default] - elif choice in valid: - return valid[choice] - else: - sys.stdout.write("Please respond with 'yes' or 'no' "\ - "(or 'y' or 'n').\n") - -class Command(BaseCommand): - help = 'Reindex everything.' - args = '' - - option_list = BaseCommand.option_list + ( - make_option('-n', '--book-id', action='store_true', dest='book_id', default=False, - help='book id instead of slugs'), - make_option('-t', '--just-tags', action='store_true', dest='just_tags', default=False, - help='just reindex tags'), - ) - def handle(self, *args, **opts): - from catalogue.models import Book - from search.index import Index - idx = Index() - - if not opts['just_tags']: - if args: - books = [] - for a in args: - if opts['book_id']: - books += Book.objects.filter(id=int(a)).all() - else: - books += Book.objects.filter(slug=a).all() - else: - books = list(Book.objects.all()) - - while books: - try: - b = books[0] - print b.title - idx.index_book(b) - idx.index.commit() - books.pop(0) - except Exception, e: - print "Error occured: %s" % e - try: - # we might not be able to rollback - idx.index.rollback() - except: - pass - retry = query_yes_no("Retry?") - if not retry: - break - - print 'Reindexing tags.' - idx.index_tags() - idx.index.commit() diff --git a/apps/search/management/commands/snippets.py b/apps/search/management/commands/snippets.py deleted file mode 100755 index 40310eda1..000000000 --- a/apps/search/management/commands/snippets.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.core.management.base import BaseCommand - -from glob import glob -from optparse import make_option -from os import path -from sys import stdout -from django.conf import settings - -class Command(BaseCommand): - help = 'Reindex everything.' - args = '' - - option_list = BaseCommand.option_list + ( - make_option('-C', '--check-just-read', action='store_true', dest='check', default=False, - help='Check snippets utf-8'), - make_option('-c', '--check', action='store_true', dest='check2', default=False, - help='Check snippets utf-8 by walking through index'), - ) - - - def handle(self, *args, **opts): - from catalogue.models import Book - from search.index import Search - - if opts['check']: - sfn = glob(settings.SEARCH_INDEX+'snippets/*') - print sfn - for fn in sfn: - print fn - bkid = int(path.basename(fn)) - with open(fn) as f: - cont = f.read() - try: - uc = cont.decode('utf-8') - except UnicodeDecodeError, ude: - print "error in snippets %d" % bkid - if opts['check2']: - s = Search() - reader = s.searcher.getIndexReader() - numdocs = reader.numDocs() - for did in range(numdocs): - doc = reader.document(did) - if doc and doc.get('book_id'): - bkid = int(doc.get('book_id')) - #import pdb; pdb.set_trace() - stdout.write("\r%d / %d" % (did, numdocs)) - stdout.flush() - ss = doc.get('snippet_position') - sl = doc.get('snippet_length') - if ss and sl: - snips = Snippets(bkid) - try: - txt = snips.get((ss,sl)) - assert len(txt) == sl - except UnicodeDecodeError, ude: - stdout.write("\nerror in snippets %d\n" % bkid) - raise ude - - stdout.write("\ndone.\n") - diff --git a/apps/search/mock_search.py b/apps/search/mock_search.py deleted file mode 100644 index 253c277a8..000000000 --- a/apps/search/mock_search.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from mock import Mock -from catalogue.models import Book, Tag -from random import randint, choice - - -class Search(Mock): - """ - Search mock for development without setting up Solr. - - Instead of connecting to an actual search server, it returns - some random results for any query. - """ - class MockIndex(Mock): - def analyze(*args, **kwargs): - return [] - - index = MockIndex() - - @staticmethod - def _find_some_books(snippets=False, query_terms=None, max_results=20): - from .index import SearchResult - - qs = Book.objects.order_by('?') - if snippets: - qs = qs.exclude(fragments=None) - results = [] - for book in qs[:randint(1, max_results)]: - doc = { - 'score': randint(0, 100), - 'book_id': book.pk, - 'published_date': randint(1000, 1920), - } - if snippets: - fragment = book.fragments.order_by('?')[0] - doc.update({ - 'header_type': choice(['strofa', 'akap']), - 'header_index': randint(100, 200), - 'header_span': randint(100, 200), - 'fragment_anchor': fragment.anchor, - 'snippets_position': randint(100, 200), - 'snippets_length': randint(100, 200), - 'snippets_revision': randint(1, 100), - 'themes_pl': fragment.tags.filter(category='theme'), - }) - res = SearchResult(doc, how_found='mock', query_terms=query_terms) - if snippets: - res.snippets = [fragment.short_text] - results.append(res) - return results - - def search_phrase(self, searched, field='text', book=False, - filters=None, snippets=False): - return self._find_some_books(snippets) - - def search_some(self, searched, fields, book=True, filters=None, snippets=True, query_terms=None): - return self._find_some_books(snippets, query_terms) - - def search_books(self, query, filters=None, max_results=10): - return self._find_some_books(snippets, max_results=max_results) - - def search_everywhere(self, searched, query_terms=None): - return [] - - def hint_tags(self, query, pdcounter=True, prefix=True): - return Tag.objects.exclude(category='set').order_by('?')[:randint(1, 10)] - - def hint_books(self, prefix): - return Book.objects.order_by('?')[:randint(1, 10)] diff --git a/apps/search/templates/newsearch/search.html b/apps/search/templates/newsearch/search.html deleted file mode 100644 index 0b0fad49d..000000000 --- a/apps/search/templates/newsearch/search.html +++ /dev/null @@ -1,58 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} - -{% block title %}Search{% endblock %} - -{% block metadescription %}{% endblock %} - -{% block bodyid %}newsearch{% endblock %} - -{% block body %} -

            Search

            -
            -

            - - -
            - fuzzy. -

            -
            - {% if did_you_mean %} - Czy miałeś na mysli {{did_you_mean}}? - {% endif %} - - -
            -
              - {% for result in results %} -
            1. -

              {{result.book.pretty_title}} (id: {{result.book_id}}, score: {{result.score}})

              -
                - {% for snip in hit.snippets %} -
              • - {{snip|safe}}
                -
              • - {% endfor %} - - {% for part in result.parts %} - {% if part.header %} -
              • W {{part.header}} nr {{part.position}}
              • - {% else %} - {% if part.fragment %} -
              • -
                Tagi/Motywy: {% for tag in part.fragment.tags %}{{tag.name}} {% endfor %}
                - {{part.fragment.short_html|safe}} -
              • - {% endif %} - {% endif %} - {% endfor %} -
              -
            2. - {% empty %} -

              No results.

              - {% endfor %} -
            -
            - -{% endblock %} diff --git a/apps/search/templatetags/__init__.py b/apps/search/templatetags/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/search/templatetags/search_tags.py b/apps/search/templatetags/search_tags.py deleted file mode 100644 index 8dbad9dae..000000000 --- a/apps/search/templatetags/search_tags.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -# import feedparser -# import datetime - -from django import template -# from django.contrib.auth.forms import UserCreationForm, AuthenticationForm -# from django.db.models import Q -# from django.utils.translation import ugettext as _ -from catalogue.models import Book -import re -# from catalogue.forms import SearchForm -# from catalogue.utils import split_tags - - -register = template.Library() - - -@register.inclusion_tag('catalogue/book_searched.html', takes_context=True) -def book_searched(context, result): - book = Book.objects.get(pk=result.book_id) - - # snippets = [] - # for hit in result.hits: - # if hit['snippets']: - # snippets.append(hit['snippets']) - # elif hit['fragment']: - # snippets.append(hit['fragment'].short_text) - - # We don't need hits which lead to sections but do not have - # snippets. - hits = filter(lambda (idx, h): - result.snippets[idx] is not None - or 'fragment' in h, enumerate(result.hits)) - # print "[tmpl: from %d hits selected %d]" % (len(result.hits), len(hits)) - - for (idx, hit) in hits: - # currently we generate one snipper per hit though. - if result.snippets[idx] is None: - continue - snip = result.snippets[idx] - # fix some formattting - snip = re.subn(r"(^[ \t\n]+|[ \t\n]+$)", u"", - re.subn(r"[ \t\n]*\n[ \t\n]*", u"\n", snip)[0])[0] - - snip = snip.replace("\n", "
            ").replace('---', '—') - hit['snippet'] = snip - - return { - 'request': context['request'], - 'book': book, - 'hits': hits and zip(*hits)[1] or [] - } diff --git a/apps/search/tests/__init__.py b/apps/search/tests/__init__.py deleted file mode 100644 index 80c974e58..000000000 --- a/apps/search/tests/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from search.tests.index import * diff --git a/apps/search/tests/index.py b/apps/search/tests/index.py deleted file mode 100644 index b8d44726f..000000000 --- a/apps/search/tests/index.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from unittest import skipIf -from django.conf import settings -from django.test.utils import override_settings -from catalogue.test_utils import WLTestCase, get_fixture -from os import path -import tempfile -from catalogue.models import Book, Tag -from search.index import Index, Search, SearchResult -import catalogue -import opds - - -@override_settings( - SEARCH_INDEX = tempfile.mkdtemp(prefix='djangotest_search_'), -) -@skipIf(getattr(settings, 'NO_SEARCH_INDEX', False), - u'Requires search server and NO_SEARCH_INDEX=False.') -class BookSearchTests(WLTestCase): - def setUp(self): - WLTestCase.setUp(self) - - index = Index() - self.search = Search() - index.delete_query(self.search.index.query(uid="*")) - index.index.commit() - - self.do_doktora = Book.from_xml_file( - get_fixture('do-doktora.xml', opds)) - self.do_anusie = Book.from_xml_file( - get_fixture('fraszka-do-anusie.xml', catalogue)) - - def test_search_perfect_book_author(self): - books = self.search.search_books(self.search.index.query(authors=u"sęp szarzyński")) - assert len(books) == 1 - assert books[0].id == self.do_anusie.id - - # here we lack slop functionality as well - def test_search_perfect_book_title(self): - books = self.search.search_books(self.search.index.query(title=u"fraszka do anusie")) - assert len(books) == 1 - assert books[0].id == self.do_anusie.id - - # TODO: Add slop option to sunburnt - # def test_search_perfect_parts(self): - # books = self.search.search_phrase(u"Jakoż hamować") - # assert len(books) == 2 - # for b in books: - # b.book_id == self.book.id - # a = SearchResult.aggregate(books) - # # just one fragment hit. - # assert len(a[0].hits) == 1 - diff --git a/apps/search/urls.py b/apps/search/urls.py deleted file mode 100644 index d77d7220a..000000000 --- a/apps/search/urls.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - -urlpatterns = patterns('search.views', - url(r'^$', 'main', name='search'), - url(r'^hint/$', 'hint', name='search_hint'), -) - diff --git a/apps/search/views.py b/apps/search/views.py deleted file mode 100644 index f7aa77cd9..000000000 --- a/apps/search/views.py +++ /dev/null @@ -1,255 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django.shortcuts import render_to_response, get_object_or_404 -from django.template import RequestContext -from django.views.decorators import cache -from django.http import HttpResponse, HttpResponseRedirect, Http404, HttpResponsePermanentRedirect, JsonResponse -from django.utils.translation import ugettext as _ - -from catalogue.utils import split_tags -from catalogue.models import Book, Tag, Fragment -from pdcounter.models import Author as PDCounterAuthor, BookStub as PDCounterBook -from search.index import Search, SearchResult -from suggest.forms import PublishingSuggestForm -import re -#import enchant -import json - - -def match_word_re(word): - if 'sqlite' in settings.DATABASES['default']['ENGINE']: - return r"\b%s\b" % word - elif 'mysql' in settings.DATABASES['default']['ENGINE']: - return "[[:<:]]%s[[:>:]]" % word - - -query_syntax_chars = re.compile(r"[\\/*:(){}]") - - -def remove_query_syntax_chars(query, replace=' '): - return query_syntax_chars.sub(' ', query) - - -def did_you_mean(query, tokens): - return query - # change = {} - # for t in tokens: - # authors = Tag.objects.filter(category='author', name__iregex=match_word_re(t)) - # if len(authors) > 0: - # continue - - # if False: - # if not dictionary.check(t): - # try: - # change_to = dictionary.suggest(t)[0].lower() - # if change_to != t.lower(): - # change[t] = change_to - # except IndexError: - # pass - - # if change == {}: - # return None - - # for frm, to in change.items(): - # query = query.replace(frm, to) - - # return query - - -@cache.never_cache -def hint(request): - prefix = request.GET.get('term', '') - if len(prefix) < 2: - return JsonResponse([], safe=False) - - prefix = remove_query_syntax_chars(prefix) - - search = Search() - # tagi beda ograniczac tutaj - # ale tagi moga byc na ksiazce i na fragmentach - # jezeli tagi dot tylko ksiazki, to wazne zeby te nowe byly w tej samej ksiazce - # jesli zas dotycza themes, to wazne, zeby byly w tym samym fragmencie. - - def is_dupe(tag): - if isinstance(tag, PDCounterAuthor): - if filter(lambda t: t.slug == tag.slug and t != tag, tags): - return True - elif isinstance(tag, PDCounterBook): - if filter(lambda b: b.slug == tag.slug, tags): - return True - return False - - def category_name(c): - if c.startswith('pd_'): - c = c[len('pd_'):] - return _(c) - - try: - limit = int(request.GET.get('max', '')) - except ValueError: - limit = -1 - else: - if limit < 1: - limit = -1 - - data = [] - - tags = search.hint_tags(prefix, pdcounter=True) - tags = filter(lambda t: not is_dupe(t), tags) - for t in tags: - if not limit: - break - limit -= 1 - data.append({ - 'label': t.name, - 'category': category_name(t.category), - 'id': t.id, - 'url': t.get_absolute_url() - }) - if limit: - books = search.hint_books(prefix) - for b in books: - if not limit: - break - limit -= 1 - data.append({ - 'label': b.title, - 'category': _('book'), - 'id': b.id, - 'url': b.get_absolute_url() - }) - - callback = request.GET.get('callback', None) - if callback: - return HttpResponse("%s(%s);" % (callback, json.dumps(data)), - content_type="application/json; charset=utf-8") - else: - return JsonResponse(data, safe=False) - - -@cache.never_cache -def main(request): - results = {} - - results = None - query = None - - query = request.GET.get('q', '') - - if len(query) < 2: - return render_to_response('catalogue/search_too_short.html', - {'prefix': query}, - context_instance=RequestContext(request)) - - query = remove_query_syntax_chars(query) - - search = Search() - - theme_terms = search.index.analyze(text=query, field="themes_pl") \ - + search.index.analyze(text=query, field="themes") - - # change hints - tags = search.hint_tags(query, pdcounter=True, prefix=False) - tags = split_tags(tags) - - author_results = search.search_phrase(query, 'authors', book=True) - translator_results = search.search_phrase(query, 'translators', book=True) - - title_results = search.search_phrase(query, 'title', book=True) - - # Boost main author/title results with mixed search, and save some of its results for end of list. - # boost author, title results - author_title_mixed = search.search_some(query, ['authors', 'translators', 'title', 'tags'], query_terms=theme_terms) - author_title_rest = [] - - for b in author_title_mixed: - also_in_mixed = filter(lambda ba: ba.book_id == b.book_id, author_results + translator_results + title_results) - for b2 in also_in_mixed: - b2.boost *= 1.1 - if also_in_mixed is []: - author_title_rest.append(b) - - # Do a phrase search but a term search as well - this can give us better snippets then search_everywhere, - # Because the query is using only one field. - text_phrase = SearchResult.aggregate( - search.search_phrase(query, 'text', snippets=True, book=False), - search.search_some(query, ['text'], snippets=True, book=False, query_terms=theme_terms)) - - everywhere = search.search_everywhere(query, query_terms=theme_terms) - - def already_found(results): - def f(e): - for r in results: - if e.book_id == r.book_id: - e.boost = 0.9 - results.append(e) - return True - return False - return f - f = already_found(author_results + translator_results + title_results + text_phrase) - everywhere = filter(lambda x: not f(x), everywhere) - - author_results = SearchResult.aggregate(author_results) - translator_results = SearchResult.aggregate(translator_results) - title_results = SearchResult.aggregate(title_results) - - everywhere = SearchResult.aggregate(everywhere, author_title_rest) - - for field, res in [('authors', author_results), - ('translators', translator_results), - ('title', title_results), - ('text', text_phrase), - ('text', everywhere)]: - res.sort(reverse=True) - for r in res: - search.get_snippets(r, query, field, 3) - - suggestion = u'' - - def ensure_exists(r): - try: - return r.book - except Book.DoesNotExist: - return False - - author_results = filter(ensure_exists, author_results) - translator_results = filter(ensure_exists, translator_results) - title_results = filter(ensure_exists, title_results) - text_phrase = filter(ensure_exists, text_phrase) - everywhere = filter(ensure_exists, everywhere) - - results = author_results + translator_results + title_results + text_phrase + everywhere - # ensure books do exists & sort them - for res in (author_results, translator_results, title_results, text_phrase, everywhere): - res.sort(reverse=True) - - # We don't want to redirect to book text, but rather display result page even with one result. - # if len(results) == 1: - # fragment_hits = filter(lambda h: 'fragment' in h, results[0].hits) - # if len(fragment_hits) == 1: - # #anchor = fragment_hits[0]['fragment'] - # #frag = Fragment.objects.get(anchor=anchor) - # return HttpResponseRedirect(fragment_hits[0]['fragment'].get_absolute_url()) - # return HttpResponseRedirect(results[0].book.get_absolute_url()) - if len(results) == 0: - form = PublishingSuggestForm(initial={"books": query + ", "}) - return render_to_response('catalogue/search_no_hits.html', - {'tags': tags, - 'prefix': query, - "form": form, - 'did_you_mean': suggestion}, - context_instance=RequestContext(request)) - - return render_to_response('catalogue/search_multiple_hits.html', - {'tags': tags, - 'prefix': query, - 'results': {'author': author_results, - 'translator': translator_results, - 'title': title_results, - 'content': text_phrase, - 'other': everywhere}, - 'did_you_mean': suggestion}, - context_instance=RequestContext(request)) diff --git a/apps/social/__init__.py b/apps/social/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/social/admin.py b/apps/social/admin.py deleted file mode 100755 index 3da4ae8c0..000000000 --- a/apps/social/admin.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin -from django.utils.translation import ugettext_lazy as _ - -from social.models import Cite - - -class CiteAdmin(admin.ModelAdmin): - list_display = ['nonempty_text', 'sticky', 'vip', 'small', 'has_image'] - fieldsets = ( - (None, {'fields': ('book', 'text', 'small', 'vip', 'link', 'sticky')}), - ( - _('Background'), - {'fields': ('image', 'image_shift', 'image_title', 'image_author', - 'image_link', 'image_license', 'image_license_link') - } - ) - ) - - def nonempty_text(self, cite): - if cite.text.strip(): - return cite.text - return "(%s)" % (cite.image_title.strip() or cite.link) - nonempty_text.short_description = _('text') - - def has_image(self, cite): - return bool(cite.image) - has_image.short_description = _('image') - has_image.boolean = True - - -admin.site.register(Cite, CiteAdmin) diff --git a/apps/social/forms.py b/apps/social/forms.py deleted file mode 100755 index 5834ffa24..000000000 --- a/apps/social/forms.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import forms -from django.utils.translation import ugettext_lazy as _ - -from catalogue.models import Tag -from catalogue import utils -from social.utils import get_set, set_sets - - -class UserSetsForm(forms.Form): - def __init__(self, book, user, *args, **kwargs): - super(UserSetsForm, self).__init__(*args, **kwargs) - self.fields['set_ids'] = forms.ChoiceField( - choices=[(tag.id, tag.name) for tag in - Tag.objects.filter(category='set', user=user).iterator()], - ) - - -class ObjectSetsForm(forms.Form): - tags = forms.CharField(label=_('Tags (comma-separated)'), required=False, - widget=forms.Textarea()) - - def __init__(self, obj, user, *args, **kwargs): - self._obj = obj - self._user = user - data = kwargs.setdefault('data', {}) - if 'tags' not in data and user.is_authenticated(): - data['tags'] = ', '.join(t.name - for t in obj.tags.filter(category='set', user=user).iterator() if t.name) - super(ObjectSetsForm, self).__init__(*args, **kwargs) - - def save(self, request): - tags = [get_set(self._user, tag_name.strip()) - for tag_name in self.cleaned_data['tags'].split(',')] - set_sets(self._user, self._obj, tags) - return {"like": True} - - -class NewSetForm(forms.Form): - name = forms.CharField(max_length=50, required=True) - - def __init__(self, *args, **kwargs): - super(NewSetForm, self).__init__(*args, **kwargs) - self.fields['name'].widget.attrs['title'] = _('Name of the new shelf') - - def save(self, user, commit=True): - name = self.cleaned_data['name'] - new_set = Tag(name=name, slug=utils.get_random_hash(name), sort_key=name.lower(), - category='set', user=user) - - new_set.save() - return new_set diff --git a/apps/social/locale/pl/LC_MESSAGES/django.mo b/apps/social/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 8b72b7b4c..000000000 Binary files a/apps/social/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/social/locale/pl/LC_MESSAGES/django.po b/apps/social/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index a3053f7fe..000000000 --- a/apps/social/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,127 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-01-24 10:06+0100\n" -"PO-Revision-Date: 2014-01-24 10:06+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \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%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.5.4\n" - -#: admin.py:16 -msgid "Background" -msgstr "Obraz tła" - -#: admin.py:25 models.py:22 -msgid "image" -msgstr "obraz" - -#: forms.py:23 -msgid "Tags (comma-separated)" -msgstr "Tagi (rozdzielone przecinkami)" - -#: forms.py:47 -msgid "Name of the new shelf" -msgstr "Nazwa nowej półki" - -#: models.py:13 -msgid "book" -msgstr "książka" - -#: models.py:14 -msgid "text" -msgstr "tekst" - -#: models.py:15 -msgid "small" -msgstr "mały" - -#: models.py:16 -msgid "Make this cite display smaller." -msgstr "Sprawia, że cytat wyświetla się mniejszym fontem." - -#: models.py:17 -msgid "VIP" -msgstr "VIP" - -#: models.py:18 models.py:31 -msgid "link" -msgstr "odnośnik" - -#: models.py:19 -msgid "sticky" -msgstr "przyklejony" - -#: models.py:20 -msgid "Sticky cites will take precedense." -msgstr "Przyklejone cytaty mają pierwszeństwo." - -#: models.py:24 -msgid "Best image is exactly 975px wide and weights under 100kB." -msgstr "Najlepszy obraz ma szerokość 975px i waży poniżej 100kB." - -#: models.py:25 -msgid "shift" -msgstr "przesunięcie" - -#: models.py:26 -msgid "" -"Vertical shift, in percents. 0 means top, 100 is bottom. Default is 50%." -msgstr "" -"Przesunięcie w pionie, w procentach. 0 to wyrównanie do górnej krawędzi, 100 " -"do dolnej. Domyślne jest 50%." - -#: models.py:27 -msgid "title" -msgstr "tytuł" - -#: models.py:29 -msgid "author" -msgstr "autor" - -#: models.py:32 -msgid "license name" -msgstr "nazwa licencji" - -#: models.py:34 -msgid "license link" -msgstr "adres licencji" - -#: models.py:38 -msgid "cite" -msgstr "cytat" - -#: models.py:39 -msgid "cites" -msgstr "cytaty" - -#: templates/social/cite_promo.html:6 -msgid "recommends" -msgstr "poleca" - -#: templates/social/my_shelf.html:5 templates/social/my_shelf.html.py:11 -msgid "My shelf" -msgstr "Moja półka" - -#: templates/social/my_shelf.html:16 -msgid "" -"Add works to your shelf by clicking on the star on the page of the work. The " -"work will then show up on My shelf page." -msgstr "" -"Aby dodać pozycję do swojej półki, należy zaznaczyć gwiazdkę znajdującą się " -"na stronie utworu. Po jej zaznaczeniu publikacja pojawi się w zakładce Moja " -"półka." - -#: templates/social/sets_form.html:7 -msgid "Remove from my shelf" -msgstr "Usuń z mojej półki" diff --git a/apps/social/migrations/0001_initial.py b/apps/social/migrations/0001_initial.py deleted file mode 100644 index 2ad4a681d..000000000 --- a/apps/social/migrations/0001_initial.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Cite', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('text', models.TextField(verbose_name='text')), - ('small', models.BooleanField(default=False, help_text='Make this cite display smaller.', verbose_name='small')), - ('vip', models.CharField(max_length=128, null=True, verbose_name='VIP', blank=True)), - ('link', models.URLField(verbose_name='link')), - ('sticky', models.BooleanField(default=False, help_text='Sticky cites will take precedense.', db_index=True, verbose_name='sticky')), - ('image', models.ImageField(help_text='Best image is exactly 975px wide and weights under 100kB.', upload_to=b'social/cite', null=True, verbose_name='image', blank=True)), - ('image_shift', models.IntegerField(help_text='Vertical shift, in percents. 0 means top, 100 is bottom. Default is 50%.', null=True, verbose_name='shift', blank=True)), - ('image_title', models.CharField(max_length=255, null=True, verbose_name='Title', blank=True)), - ('image_author', models.CharField(max_length=255, null=True, verbose_name='author', blank=True)), - ('image_link', models.URLField(null=True, verbose_name='link', blank=True)), - ('image_license', models.CharField(max_length=255, null=True, verbose_name='license name', blank=True)), - ('image_license_link', models.URLField(null=True, verbose_name='license link', blank=True)), - ('book', models.ForeignKey(verbose_name='book', blank=True, to='catalogue.Book', null=True)), - ], - options={ - 'ordering': ('vip', 'text'), - 'verbose_name': 'cite', - 'verbose_name_plural': 'cites', - }, - bases=(models.Model,), - ), - ] diff --git a/apps/social/migrations/0002_auto_20151221_1225.py b/apps/social/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index f26e4f8fc..000000000 --- a/apps/social/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('social', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='cite', - name='image_title', - field=models.CharField(max_length=255, null=True, verbose_name='title', blank=True), - ), - ] diff --git a/apps/social/migrations/__init__.py b/apps/social/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/social/models.py b/apps/social/models.py deleted file mode 100644 index 890280774..000000000 --- a/apps/social/models.py +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.db import models -from django.utils.translation import ugettext_lazy as _ -from django.conf import settings -from django.core.urlresolvers import reverse -from ssify import flush_ssi_includes -from catalogue.models import Book - - -class Cite(models.Model): - book = models.ForeignKey(Book, verbose_name=_('book'), null=True, blank=True) - text = models.TextField(_('text')) - small = models.BooleanField(_('small'), default=False, - help_text=_('Make this cite display smaller.')) - vip = models.CharField(_('VIP'), max_length=128, null=True, blank=True) - link = models.URLField(_('link')) - sticky = models.BooleanField(_('sticky'), default=False, db_index=True, - help_text=_('Sticky cites will take precedense.')) - - image = models.ImageField(_('image'), upload_to='social/cite', - null=True, blank=True, - help_text=_('Best image is exactly 975px wide and weights under 100kB.')) - image_shift = models.IntegerField(_('shift'), null=True, blank=True, - help_text=_(u'Vertical shift, in percents. 0 means top, 100 is bottom. Default is 50%.')) - image_title = models.CharField(_('title'), max_length=255, - null=True, blank=True) - image_author = models.CharField(_('author'), - max_length=255, blank=True, null=True) - image_link = models.URLField(_('link'), blank=True, null=True) - image_license = models.CharField(_('license name'), - max_length=255, blank=True, null=True) - image_license_link = models.URLField(_('license link'), blank=True, null=True) - - class Meta: - ordering = ('vip', 'text') - verbose_name = _('cite') - verbose_name_plural = _('cites') - - def __unicode__(self): - return u"%s: %s…" % (self.vip, self.text[:60]) - - def get_absolute_url(self): - """This is used for testing.""" - return "%s?choose_cite=%d" % (reverse('main_page'), self.id) - - def save(self, *args, **kwargs): - ret = super(Cite, self).save(*args, **kwargs) - self.flush_includes() - return ret - - def flush_includes(self): - flush_ssi_includes([ - template % (self.pk, lang) - for template in [ - '/ludzie/cite/%s.%s.html', - '/ludzie/cite_main/%s.%s.html', - ] - for lang in [lc for (lc, _ln) in settings.LANGUAGES]] + - ['/ludzie/cite_info/%s.html' % self.pk]) diff --git a/apps/social/templates/social/cite_info.html b/apps/social/templates/social/cite_info.html deleted file mode 100644 index 8f8e16d11..000000000 --- a/apps/social/templates/social/cite_info.html +++ /dev/null @@ -1,19 +0,0 @@ -{% spaceless %} - -{% if cite.image %} - {% if cite.image_link %}{% endif %} - {% if cite.image_title %} - {{ cite.image_title }}{% else %} - untitled{% endif %}{% if cite.image_link %}{% endif %}{% if cite.image_author %}, - {{ cite.image_author }}{% endif %}{% if cite.image_license %}, - {% if cite.image_license_link %}{% endif %} - {{ cite.image_license }} - {% if cite.image_license_link %}{% endif %} - {% endif %} -{% else %} - books about architecture, - saikofish@Flickr, - CC BY NC SA. -{% endif %} - -{% endspaceless %} diff --git a/apps/social/templates/social/cite_promo.html b/apps/social/templates/social/cite_promo.html deleted file mode 100755 index 15786cf3b..000000000 --- a/apps/social/templates/social/cite_promo.html +++ /dev/null @@ -1,30 +0,0 @@ -{% spaceless %} - -{% load i18n %} - -{% if main %} -
            -{% endif %} - -{% if cite %} - - - {% if cite.vip %} -

            {{ cite.vip }} {% trans "recommends" %}:

            - {% endif %} -
            - {{ cite.text|linebreaksbr|safe }} -
            - {% if cite.book %} -

            {{ cite.book.pretty_title }}

            - {% endif %} -
            - -{% endif %} - - -{% if main %} -
            -{% endif %} - -{% endspaceless %} \ No newline at end of file diff --git a/apps/social/templates/social/my_shelf.html b/apps/social/templates/social/my_shelf.html deleted file mode 100755 index f448ad220..000000000 --- a/apps/social/templates/social/my_shelf.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} - -{% block titleextra %}{% trans "My shelf" %}{% endblock %} - -{% block logout %}/{% endblock %} - -{% block body %} - -

            {% trans "My shelf" %}

            - - {% work_list books %} - - {% if not books %} - {% trans "Add works to your shelf by clicking on the star on the page of the work. The work will then show up on My shelf page." %} - {# trans "Aby dodać pozycję do swojej półki, należy zaznaczyć gwiazdkę znajdującą się na stronie utworu. Po jej zaznaczeniu publikacja pojawi się w zakładce Moja półka" #} - {% endif %} -{% endblock %} diff --git a/apps/social/templates/social/sets_form.html b/apps/social/templates/social/sets_form.html deleted file mode 100755 index 5974a2a71..000000000 --- a/apps/social/templates/social/sets_form.html +++ /dev/null @@ -1,19 +0,0 @@ -{% load i18n %} -{% load ssi_csrf_token from ssify %} -

            {{ title }}

            - -
            -{% ssi_csrf_token %} - -
            - -
            -{% ssi_csrf_token %} -
              -
              - {{ form.as_ul }} -
            1. -
            -
            diff --git a/apps/social/templates/social/shelf_tags.html b/apps/social/templates/social/shelf_tags.html deleted file mode 100755 index 2baa0f007..000000000 --- a/apps/social/templates/social/shelf_tags.html +++ /dev/null @@ -1,9 +0,0 @@ -{% spaceless %} - - - -{% endspaceless %} \ No newline at end of file diff --git a/apps/social/templatetags/__init__.py b/apps/social/templatetags/__init__.py deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/social/templatetags/social_tags.py b/apps/social/templatetags/social_tags.py deleted file mode 100755 index 7065467b4..000000000 --- a/apps/social/templatetags/social_tags.py +++ /dev/null @@ -1,78 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from random import randint -from django.db.models import Q -from django import template -from django.utils.functional import lazy -from django.utils.cache import add_never_cache_headers -from catalogue.models import Book, Tag -from ssify import ssi_variable -from ssify.utils import ssi_vary_on_cookie -from social.models import Cite -from social.utils import likes, cites_for_tags - -register = template.Library() - - -@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) -def likes_book(request, book_id): - return likes(request.user, Book.objects.get(pk=book_id), request) - - -def choose_cite(request, book_id=None, tag_ids=None): - """Choose a cite for main page, for book or for set of tags.""" - try: - assert request.user.is_staff - assert 'choose_cite' in request.GET - cite = Cite.objects.get(pk=request.GET['choose_cite']) - except (AssertionError, Cite.DoesNotExist): - if book_id is not None: - cites = Cite.objects.filter(Q(book=book_id) | Q(book__ancestor=book_id)) - elif tag_ids is not None: - tags = Tag.objects.filter(pk__in=tag_ids) - cites = cites_for_tags(tags) - else: - cites = Cite.objects.all() - stickies = cites.filter(sticky=True) - count = stickies.count() - if count: - cite = stickies[randint(0, count - 1)] - else: - count = cites.count() - if count: - cite = cites[randint(0, count - 1)] - else: - cite = None - return cite - - -@ssi_variable(register, name='choose_cite', patch_response=[add_never_cache_headers]) -def choose_cite_tag(request, book_id=None, tag_ids=None): - cite = choose_cite(request, book_id, tag_ids) - return cite.pk if cite is not None else None - - -@register.inclusion_tag('social/cite_promo.html') -def render_cite(cite): - return { - 'cite': cite, - } - - -@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) -def book_shelf_tags(request, book_id): - if not request.user.is_authenticated(): - return None - book = Book.objects.get(pk=book_id) - lks = likes(request.user, book, request) - def get_value(): - if not lks: - return '' - tags = book.tags.filter(category='set', user=request.user).exclude(name='') - if not tags: - return '' - ctx = {'tags': tags} - return template.loader.render_to_string('social/shelf_tags.html', ctx) - return lazy(get_value, unicode)() diff --git a/apps/social/urls.py b/apps/social/urls.py deleted file mode 100755 index 3642d91da..000000000 --- a/apps/social/urls.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url -from django.views.decorators.cache import never_cache -from social.views import ObjectSetsFormView - -urlpatterns = patterns('social.views', - url(r'^lektura/(?P[a-z0-9-]+)/lubie/$', 'like_book', name='social_like_book'), - url(r'^lektura/(?P[a-z0-9-]+)/nie_lubie/$', 'unlike_book', name='social_unlike_book'), - url(r'^lektura/(?P[a-z0-9-]+)/polki/$', never_cache(ObjectSetsFormView()), name='social_book_sets'), - url(r'^polka/$', 'my_shelf', name='social_my_shelf'), - - # Includes - url(r'^cite/(?P\d+)\.(?P.+)\.html$', 'cite', name='social_cite'), - url(r'^cite_main/(?P\d+)\.(?P.+)\.html$', 'cite', {'main': True}, name='social_cite_main'), - url(r'^cite_info/(?P\d+).html$', 'cite_info', name='social_cite_info'), - - #~ url(r'^polki/(?P[a-zA-Z0-9-]+)/formaty/$', 'shelf_book_formats', name='shelf_book_formats'), - #~ url(r'^polki/(?P[a-zA-Z0-9-]+)/(?P%s)/usun$' % SLUG, 'remove_from_shelf', name='remove_from_shelf'), - #~ url(r'^polki/$', 'user_shelves', name='user_shelves'), - #~ url(r'^polki/(?P[a-zA-Z0-9-]+)/usun/$', 'delete_shelf', name='delete_shelf'), - #~ url(r'^polki/(?P[a-zA-Z0-9-]+)\.zip$', 'download_shelf', name='download_shelf'), - #~ url(r'^polki/nowa/$', 'new_set', name='new_set'), -) diff --git a/apps/social/utils.py b/apps/social/utils.py deleted file mode 100755 index bf1c24229..000000000 --- a/apps/social/utils.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from collections import defaultdict -from django.contrib.contenttypes.models import ContentType -from django.db.models import Q -from django.utils.functional import lazy -from catalogue.models import Book, Tag -from catalogue import utils -from catalogue.tasks import touch_tag -from social.models import Cite - - -def likes(user, work, request=None): - if not user.is_authenticated(): - return False - - if request is None: - return work.tags.filter(category='set', user=user).exists() - - if not hasattr(request, 'social_likes'): - # tuple: unchecked, checked, liked - request.social_likes = defaultdict(lambda:(set(), set(), set())) - - ct = ContentType.objects.get_for_model(type(work)) - likes_t = request.social_likes[ct.pk] - if work.pk in likes_t[1]: - return work.pk in likes_t[2] - else: - likes_t[0].add(work.pk) - def _likes(): - if likes_t[0]: - ids = tuple(likes_t[0]) - likes_t[0].clear() - likes_t[2].update(Tag.intermediary_table_model.objects.filter( - content_type_id=ct.pk, tag__user_id=user.pk, - object_id__in=ids - ).distinct().values_list('object_id', flat=True)) - likes_t[1].update(ids) - return work.pk in likes_t[2] - return lazy(_likes, bool)() - - -def get_set(user, name): - """Returns a tag for use by the user. Creates it, if necessary.""" - try: - tag = Tag.objects.get(category='set', user=user, name=name) - except Tag.DoesNotExist: - tag = Tag.objects.create(category='set', user=user, name=name, - slug=utils.get_random_hash(name), sort_key=name.lower()) - return tag - - -def set_sets(user, work, sets): - """Set tags used for given work by a given user.""" - - old_sets = list(work.tags.filter(category='set', user=user)) - - work.tags = sets + list( - work.tags.filter(~Q(category='set') | ~Q(user=user))) - - for shelf in [shelf for shelf in old_sets if shelf not in sets]: - touch_tag(shelf) - for shelf in [shelf for shelf in sets if shelf not in old_sets]: - touch_tag(shelf) - - # delete empty tags - Tag.objects.filter(category='set', user=user, items=None).delete() - - -def cites_for_tags(tags): - """Returns a QuerySet with all Cites for books with given tags.""" - return Cite.objects.filter(book__in=Book.tagged.with_all(tags)) diff --git a/apps/social/views.py b/apps/social/views.py deleted file mode 100644 index 49c9b708a..000000000 --- a/apps/social/views.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.shortcuts import render, get_object_or_404, redirect -from django.http import HttpResponseForbidden, JsonResponse -from django.contrib.auth.decorators import login_required -from django.views.decorators.http import require_POST - -from ajaxable.utils import AjaxableFormView - -from catalogue.models import Book -from ssify import ssi_included -from social import forms -from .models import Cite -from social.utils import get_set, likes, set_sets - - -# ==================== -# = Shelf management = -# ==================== - - -@require_POST -def like_book(request, slug): - if not request.user.is_authenticated(): - return HttpResponseForbidden('Login required.') - book = get_object_or_404(Book, slug=slug) - if not likes(request.user, book): - tag = get_set(request.user, '') - set_sets(request.user, book, [tag]) - - if request.is_ajax(): - return JsonResponse({"success": True, "msg": "ok", "like": True}) - else: - return redirect(book) - - -@login_required -def my_shelf(request): - books = Book.tagged.with_any(request.user.tag_set.all()) - return render(request, 'social/my_shelf.html', locals()) - - -class ObjectSetsFormView(AjaxableFormView): - form_class = forms.ObjectSetsForm - placeholdize = True - template = 'social/sets_form.html' - ajax_redirect = True - POST_login = True - - def get_object(self, request, slug): - return get_object_or_404(Book, slug=slug) - - def context_description(self, request, obj): - return obj.pretty_title() - - def form_args(self, request, obj): - return (obj, request.user), {} - - -@require_POST -def unlike_book(request, slug): - if not request.user.is_authenticated(): - return HttpResponseForbidden('Login required.') - book = get_object_or_404(Book, slug=slug) - if likes(request.user, book): - set_sets(request.user, book, []) - - if request.is_ajax(): - return JsonResponse({"success": True, "msg": "ok", "like": False}) - else: - return redirect(book) - - -@ssi_included -def cite(request, pk, main=False): - cite = get_object_or_404(Cite, pk=pk) - return render(request, 'social/cite_promo.html', { - 'main': main, - 'cite': cite, - }) - - -@ssi_included(use_lang=False) -def cite_info(request, pk): - cite = get_object_or_404(Cite, pk=pk) - return render(request, 'social/cite_info.html', { - 'cite': cite, - }) diff --git a/apps/sponsors/__init__.py b/apps/sponsors/__init__.py deleted file mode 100644 index f6a851dc5..000000000 --- a/apps/sponsors/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -__author__ = u'Marek Stępniowski, ' -__version__ = '0.1' diff --git a/apps/sponsors/admin.py b/apps/sponsors/admin.py deleted file mode 100644 index 274fe901e..000000000 --- a/apps/sponsors/admin.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin -from jsonfield import JSONField -from sponsors import models -from sponsors import widgets - - -class SponsorAdmin(admin.ModelAdmin): - list_display = ('name',) - search_fields = ('name',) - ordering = ('name',) - - -class SponsorPageAdmin(admin.ModelAdmin): - formfield_overrides = { - JSONField: {'widget': widgets.SponsorPageWidget}, - } - list_display = ('name',) - search_fields = ('name',) - ordering = ('name',) - - -admin.site.register(models.Sponsor, SponsorAdmin) -admin.site.register(models.SponsorPage, SponsorPageAdmin) diff --git a/apps/sponsors/locale/de/LC_MESSAGES/django.mo b/apps/sponsors/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index f6cebe39b..000000000 Binary files a/apps/sponsors/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/de/LC_MESSAGES/django.po b/apps/sponsors/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 1b8dc02d9..000000000 --- a/apps/sponsors/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,37 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2010-06-23 11:48+0100\n" -"Last-Translator: Iwona Fiałkowska \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "Name" - -#: models.py:22 -msgid "description" -msgstr "Beschreibung" - -#: models.py:23 -msgid "logo" -msgstr "Logo" - -#: models.py:24 -msgid "url" -msgstr "URL" - -#: models.py:38 -msgid "sponsors" -msgstr "Sponsoren" diff --git a/apps/sponsors/locale/en/LC_MESSAGES/django.mo b/apps/sponsors/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index 158ec2c73..000000000 Binary files a/apps/sponsors/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/en/LC_MESSAGES/django.po b/apps/sponsors/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index 48676958f..000000000 --- a/apps/sponsors/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,37 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 20:05+0100\n" -"Last-Translator: xxx \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "name" - -#: models.py:22 -msgid "description" -msgstr "description" - -#: models.py:23 -msgid "logo" -msgstr "logo" - -#: models.py:24 -msgid "url" -msgstr "url" - -#: models.py:38 -msgid "sponsors" -msgstr "sponsors" diff --git a/apps/sponsors/locale/es/LC_MESSAGES/django.mo b/apps/sponsors/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index 3e9d45667..000000000 Binary files a/apps/sponsors/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/es/LC_MESSAGES/django.po b/apps/sponsors/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index 624e3f620..000000000 --- a/apps/sponsors/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,37 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-28 12:01+0100\n" -"Last-Translator: Aneta \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "nombre" - -#: models.py:22 -msgid "description" -msgstr "descripción" - -#: models.py:23 -msgid "logo" -msgstr "logotipo" - -#: models.py:24 -msgid "url" -msgstr "url" - -#: models.py:38 -msgid "sponsors" -msgstr "patrocinadores" diff --git a/apps/sponsors/locale/fr/LC_MESSAGES/django.mo b/apps/sponsors/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index 640e20521..000000000 Binary files a/apps/sponsors/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/fr/LC_MESSAGES/django.po b/apps/sponsors/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index d30e7605a..000000000 --- a/apps/sponsors/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,37 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-22 21:00+0100\n" -"Last-Translator: Ela Janota \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "nom" - -#: models.py:22 -msgid "description" -msgstr "description" - -#: models.py:23 -msgid "logo" -msgstr "logo" - -#: models.py:24 -msgid "url" -msgstr "url" - -#: models.py:38 -msgid "sponsors" -msgstr "sponsors" diff --git a/apps/sponsors/locale/it/LC_MESSAGES/django.mo b/apps/sponsors/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index 1f8c95660..000000000 Binary files a/apps/sponsors/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/it/LC_MESSAGES/django.po b/apps/sponsors/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index d93d9fe79..000000000 --- a/apps/sponsors/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,38 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-21 17:43+0100\n" -"Last-Translator: xxxx\n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "nome" - -#: models.py:22 -msgid "description" -msgstr "descrizione" - -#: models.py:23 -msgid "logo" -msgstr "logo" - -#: models.py:24 -msgid "url" -msgstr "url" - -#: models.py:38 -msgid "sponsors" -msgstr "gli sponsor" diff --git a/apps/sponsors/locale/jp/LC_MESSAGES/django.mo b/apps/sponsors/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index c9739db34..000000000 Binary files a/apps/sponsors/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/jp/LC_MESSAGES/django.po b/apps/sponsors/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index 9ecfa8db2..000000000 --- a/apps/sponsors/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,38 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "" - -#: models.py:22 -msgid "description" -msgstr "" - -#: models.py:23 -msgid "logo" -msgstr "" - -#: models.py:24 -msgid "url" -msgstr "" - -#: models.py:38 -msgid "sponsors" -msgstr "" diff --git a/apps/sponsors/locale/lt/LC_MESSAGES/django.mo b/apps/sponsors/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index d6b7271df..000000000 Binary files a/apps/sponsors/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/lt/LC_MESSAGES/django.po b/apps/sponsors/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index cf009fe85..000000000 --- a/apps/sponsors/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,38 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-01 16:13+0100\n" -"Last-Translator: Aneta\n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "pavadinimas" - -#: models.py:22 -msgid "description" -msgstr "aprašymas" - -#: models.py:23 -msgid "logo" -msgstr "logotipas" - -#: models.py:24 -msgid "url" -msgstr "url" - -#: models.py:38 -msgid "sponsors" -msgstr "rėmėjai" diff --git a/apps/sponsors/locale/pl/LC_MESSAGES/django.mo b/apps/sponsors/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 7776cb4e1..000000000 Binary files a/apps/sponsors/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/pl/LC_MESSAGES/django.po b/apps/sponsors/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 54ae8ca3c..000000000 --- a/apps/sponsors/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,38 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2010-05-19 16:18\n" -"Last-Translator: \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "nazwa" - -#: models.py:22 -msgid "description" -msgstr "opis" - -#: models.py:23 -msgid "logo" -msgstr "logo" - -#: models.py:24 -msgid "url" -msgstr "url" - -#: models.py:38 -msgid "sponsors" -msgstr "sponsorzy" diff --git a/apps/sponsors/locale/ru/LC_MESSAGES/django.mo b/apps/sponsors/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 0a1946f76..000000000 Binary files a/apps/sponsors/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/ru/LC_MESSAGES/django.po b/apps/sponsors/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index cd162751b..000000000 --- a/apps/sponsors/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,37 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 22:11+0100\n" -"Last-Translator: xxx \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "Ф.И.О./название" - -#: models.py:22 -msgid "description" -msgstr "описание" - -#: models.py:23 -msgid "logo" -msgstr "логотип" - -#: models.py:24 -msgid "url" -msgstr "url" - -#: models.py:38 -msgid "sponsors" -msgstr "покровители" diff --git a/apps/sponsors/locale/uk/LC_MESSAGES/django.mo b/apps/sponsors/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index 8236e6024..000000000 Binary files a/apps/sponsors/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/uk/LC_MESSAGES/django.po b/apps/sponsors/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index aaf57266b..000000000 --- a/apps/sponsors/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,37 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 17:30+0100\n" -"Last-Translator: xxx \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "назва" - -#: models.py:22 -msgid "description" -msgstr "опис" - -#: models.py:23 -msgid "logo" -msgstr "логотип" - -#: models.py:24 -msgid "url" -msgstr "url" - -#: models.py:38 -msgid "sponsors" -msgstr "спонсори" diff --git a/apps/sponsors/migrations/0001_initial.py b/apps/sponsors/migrations/0001_initial.py deleted file mode 100644 index d672e846a..000000000 --- a/apps/sponsors/migrations/0001_initial.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import jsonfield.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Sponsor', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=120, verbose_name='name')), - ('_description', models.CharField(max_length=255, verbose_name='Description', blank=True)), - ('logo', models.ImageField(upload_to=b'sponsorzy/sponsor/logo', verbose_name='logo')), - ('url', models.URLField(verbose_name='url', blank=True)), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='SponsorPage', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=120, verbose_name='name')), - ('sponsors', jsonfield.fields.JSONField(default={}, verbose_name='sponsors')), - ('_html', models.TextField(editable=False, blank=True)), - ('sprite', models.ImageField(upload_to=b'sponsorzy/sprite', blank=True)), - ], - options={ - }, - bases=(models.Model,), - ), - ] diff --git a/apps/sponsors/migrations/0002_auto_20151221_1225.py b/apps/sponsors/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index 0110a8896..000000000 --- a/apps/sponsors/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('sponsors', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='sponsor', - name='_description', - field=models.CharField(max_length=255, verbose_name='description', blank=True), - ), - ] diff --git a/apps/sponsors/migrations/__init__.py b/apps/sponsors/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/sponsors/models.py b/apps/sponsors/models.py deleted file mode 100644 index 0565b9744..000000000 --- a/apps/sponsors/models.py +++ /dev/null @@ -1,107 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import json -import time -from StringIO import StringIO -from django.db import models -from django.utils.translation import ugettext_lazy as _ -from django.template.loader import render_to_string -from PIL import Image - -from jsonfield import JSONField -from django.core.files.base import ContentFile -from ssify import flush_ssi_includes - -THUMB_WIDTH = 120 -THUMB_HEIGHT = 120 - - -class Sponsor(models.Model): - name = models.CharField(_('name'), max_length=120) - _description = models.CharField(_('description'), blank=True, max_length=255) - logo = models.ImageField(_('logo'), upload_to='sponsorzy/sponsor/logo') - url = models.URLField(_('url'), blank=True) - - def __unicode__(self): - return self.name - - def description(self): - if len(self._description): - return self._description - else: - return self.name - - -class SponsorPage(models.Model): - name = models.CharField(_('name'), max_length=120) - sponsors = JSONField(_('sponsors'), default={}) - _html = models.TextField(blank=True, editable=False) - sprite = models.ImageField(upload_to='sponsorzy/sprite', blank=True) - - def populated_sponsors(self): - result = [] - offset = 0 - for column in self.sponsors: - result_group = {'name': column['name'], 'sponsors': []} - sponsor_objects = Sponsor.objects.in_bulk(column['sponsors']) - for sponsor_pk in column['sponsors']: - try: - result_group['sponsors'].append((offset, sponsor_objects[sponsor_pk])) - offset -= THUMB_HEIGHT - except KeyError: - pass - result.append(result_group) - return result - - def render_sprite(self): - sponsor_ids = [] - for column in self.sponsors: - sponsor_ids.extend(column['sponsors']) - sponsors = Sponsor.objects.in_bulk(sponsor_ids) - sprite = Image.new('RGBA', (THUMB_WIDTH, len(sponsors) * THUMB_HEIGHT)) - for i, sponsor_id in enumerate(sponsor_ids): - simg = Image.open(sponsors[sponsor_id].logo.path) - if simg.size[0] > THUMB_WIDTH or simg.size[1] > THUMB_HEIGHT: - size = ( - min(THUMB_WIDTH, - simg.size[0] * THUMB_HEIGHT / simg.size[1]), - min(THUMB_HEIGHT, - simg.size[1] * THUMB_WIDTH / simg.size[0]) - ) - simg = simg.resize(size, Image.ANTIALIAS) - sprite.paste(simg, ( - (THUMB_WIDTH - simg.size[0]) / 2, - i * THUMB_HEIGHT + (THUMB_HEIGHT - simg.size[1]) / 2, - )) - imgstr = StringIO() - sprite.save(imgstr, 'png') - - if self.sprite: - self.sprite.delete(save=False) - self.sprite.save('sponsorzy/sprite/%s-%d.png' % (self.name, time.time()), ContentFile(imgstr.getvalue()), save=False) - - def html(self): - return self._html - html = property(fget=html) - - def save(self, *args, **kwargs): - if isinstance(self.sponsors, basestring): - # Walkaround for weird jsonfield 'no-decode' optimization. - self.sponsors = json.loads(self.sponsors) - self.render_sprite() - self._html = render_to_string('sponsors/page.html', { - 'sponsors': self.populated_sponsors(), - 'page': self - }) - ret = super(SponsorPage, self).save(*args, **kwargs) - self.flush_includes() - return ret - - def flush_includes(self): - flush_ssi_includes(['/sponsors/page/%s.html' % self.name]) - - def __unicode__(self): - return self.name - diff --git a/apps/sponsors/static/sponsors/css/footer_admin.css b/apps/sponsors/static/sponsors/css/footer_admin.css deleted file mode 100644 index fe19d30c9..000000000 --- a/apps/sponsors/static/sponsors/css/footer_admin.css +++ /dev/null @@ -1,73 +0,0 @@ -.sponsors { - display: block; - clear: both; - margin-top: 5px; -} - -.sponsors .sponsors-sponsor-group { - float: left; - width: 180px; - border: 1px solid #CCC; - margin: 2px 2px 0 0; -} - -.sponsors .sponsors-sponsor-group-name { - border-bottom: 1px solid #CCC; - padding: 2px 2px 2px 4px; - margin: 0; - color: #FFF; - background-color: #7CA0C7; - font-weight: bold; - height: 15px; -} - -.sponsors .sponsors-sponsor-group-name input { - margin: -2px -2px -2px -4px; - padding: 0; - height: 15px; - width: 160px; -} - -.sponsors .sponsors-remove-sponsor-group { - float: right; - background-color: #CC3434; - color: #FFF; - width: 10px; - height: 15px; - padding: 2px; - text-align: center; - font-weight: bold; - display: block; - cursor: default; -} - -.sponsors .sponsors-remove-sponsor-group:hover { - color: #CC3434; - background-color: white; -} - -.sponsors .sponsors-unused-sponsor-group-name { - background-color: #FFF; - color: #666; -} - -.sponsors .sponsors-sponsor-group-list { - margin: 0; - padding: 2px; - list-style: none; - min-height: 400px; -} - -.sponsors-sponsor { - margin: 0 40px 2px 0; - width: 120px; - height: 120px; - border: 1px solid #CCC; - background-color: #EEE; - cursor: default; -} - -.sponsors-sponsor img { - max-width: 120px; - max-height: 120px; -} diff --git a/apps/sponsors/static/sponsors/css/sponsors.css b/apps/sponsors/static/sponsors/css/sponsors.css deleted file mode 100644 index f35e56dd7..000000000 --- a/apps/sponsors/static/sponsors/css/sponsors.css +++ /dev/null @@ -1,24 +0,0 @@ -.sponsors-page { - background: white; - margin-top: 1em; -} - -.sponsors-column { - float: left; - width: 150px; -} - -.sponsor-logos { - height: 130px; -} - -.sponsors-page img { - float: left; -} - -.sponsors-page a { - display: block; - width: 120px; - height: 120px; - background-repeat: no-repeat; -} diff --git a/apps/sponsors/static/sponsors/js/footer_admin.js b/apps/sponsors/static/sponsors/js/footer_admin.js deleted file mode 100644 index 33c794a3d..000000000 --- a/apps/sponsors/static/sponsors/js/footer_admin.js +++ /dev/null @@ -1,131 +0,0 @@ -(function($) { - $.fn.sponsorsFooter = function(options) { - var settings = { - sponsors: [] - }; - $.extend(settings, options); - - var input = $(this).hide(); - - var container = $('
            ').appendTo(input.parent()); - var groups = $.evalJSON(input.val()); - - var unusedDiv = $('
            ') - .appendTo(container) - .append('

            dostępni sponsorzy

            '); - var unusedList = $('
              ') - .appendTo(unusedDiv) - .sortable({ - connectWith: '.sponsors-sponsor-group-list' - }); - - // Edit group name inline - function editNameInline(name) { - name.unbind('click.sponsorsFooter'); - var inlineInput = $('').val(name.html()); - name.html(''); - - function endEditing() { - name.html(inlineInput.val()); - inlineInput.remove(); - name.bind('click.sponsorsFooter', function() { - editNameInline($(this)); - }); - input.parents('form').unbind('submit.sponsorsFooter', endEditing); - return false; - } - - inlineInput.appendTo(name).focus().blur(endEditing); - input.parents('form').bind('submit.sponsorsFooter', endEditing); - } - - // Remove sponsor with passed id from sponsors array and return it - function popSponsor(id) { - for (var i=0; i < settings.sponsors.length; i++) { - if (settings.sponsors[i].id == id) { - var s = settings.sponsors[i]; - settings.sponsors.splice(i, 1); - return s; - } - } - return null; - } - - // Create sponsor group and bind events - function createGroup(name, sponsors) { - if (!sponsors) { - sponsors = []; - } - - var groupDiv = $('
              '); - - $('X') - .click(function() { - groupDiv.fadeOut('slow', function() { - $('.sponsors-sponsor', groupDiv).hide().appendTo(unusedList).fadeIn(); - groupDiv.remove(); - }); - }).appendTo(groupDiv); - - $('

              ' + name + '

              ') - .bind('click.sponsorsFooter', function() { - editNameInline($(this)); - }).appendTo(groupDiv); - - var groupList = $('
                ') - .appendTo(groupDiv) - .sortable({ - connectWith: '.sponsors-sponsor-group-list' - }); - - - for (var i = 0; i < sponsors.length; i++) { - $('
              1. ' + sponsors[i].name + '
              2. ') - .data('obj_id', sponsors[i].id) - .appendTo(groupList); - } - return groupDiv; - } - - // Create groups from data in input value - for (var i = 0; i < groups.length; i++) { - var group = groups[i]; - var sponsors = []; - - for (var j = 0; j < group.sponsors.length; j++) { - var s = popSponsor(group.sponsors[j]); - if (s) { - sponsors.push(s); - } - } - createGroup(group.name, sponsors).appendTo(container); - } - - // Serialize input value before submiting form - input.parents('form').submit(function(event) { - var groups = []; - $('.sponsors-sponsor-group', container).not('.sponsors-unused-sponsor-group').each(function() { - var group = {name: $('.sponsors-sponsor-group-name', this).html(), sponsors: []}; - $('.sponsors-sponsor', this).each(function() { - group.sponsors.push($(this).data('obj_id')); - }); - groups.push(group); - }); - input.val($.toJSON(groups)); - }); - - for (i = 0; i < settings.sponsors.length; i++) { - $('
              3. ' + settings.sponsors[i].name + '
              4. ') - .data('obj_id', settings.sponsors[i].id) - .appendTo(unusedList); - } - - $('') - .click(function() { - var newGroup = createGroup('').appendTo(container); - editNameInline($('.sponsors-sponsor-group-name', newGroup)); - }).prependTo(input.parent()); - - input.parent().append('
                '); - }; -})(jQuery); diff --git a/apps/sponsors/static/sponsors/js/jquery.json.min.js b/apps/sponsors/static/sponsors/js/jquery.json.min.js deleted file mode 100644 index bad4a0afa..000000000 --- a/apps/sponsors/static/sponsors/js/jquery.json.min.js +++ /dev/null @@ -1,31 +0,0 @@ - -(function($){$.toJSON=function(o) -{if(typeof(JSON)=='object'&&JSON.stringify) -return JSON.stringify(o);var type=typeof(o);if(o===null) -return"null";if(type=="undefined") -return undefined;if(type=="number"||type=="boolean") -return o+"";if(type=="string") -return $.quoteString(o);if(type=='object') -{if(typeof o.toJSON=="function") -return $.toJSON(o.toJSON());if(o.constructor===Date) -{var month=o.getUTCMonth()+1;if(month<10)month='0'+month;var day=o.getUTCDate();if(day<10)day='0'+day;var year=o.getUTCFullYear();var hours=o.getUTCHours();if(hours<10)hours='0'+hours;var minutes=o.getUTCMinutes();if(minutes<10)minutes='0'+minutes;var seconds=o.getUTCSeconds();if(seconds<10)seconds='0'+seconds;var milli=o.getUTCMilliseconds();if(milli<100)milli='0'+milli;if(milli<10)milli='0'+milli;return'"'+year+'-'+month+'-'+day+'T'+ -hours+':'+minutes+':'+seconds+'.'+milli+'Z"';} -if(o.constructor===Array) -{var ret=[];for(var i=0;i.sponsors-page a{background-image:url({{ page.sprite.url }});} -
                - {% for column in sponsors %} -
                -

                {{ column.name|default:" " }}

                - -
                - {% endfor %} -
                -
                -{% endspaceless %} diff --git a/apps/sponsors/urls.py b/apps/sponsors/urls.py deleted file mode 100644 index 6da6186c3..000000000 --- a/apps/sponsors/urls.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - -urlpatterns = patterns('sponsors.views', - url(r'^page/(?P.+)\.html$', 'page', name='sponsor_page'), -) diff --git a/apps/sponsors/views.py b/apps/sponsors/views.py deleted file mode 100644 index 9a340895c..000000000 --- a/apps/sponsors/views.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.http import HttpResponse -from ssify import ssi_included -from .models import SponsorPage - - -@ssi_included(use_lang=False) -def page(request, name): - try: - page = SponsorPage.objects.get(name=name) - except SponsorPage.DoesNotExist: - return HttpResponse(u'') - return HttpResponse(page.html) diff --git a/apps/sponsors/widgets.py b/apps/sponsors/widgets.py deleted file mode 100644 index 0ddab3809..000000000 --- a/apps/sponsors/widgets.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django import forms -from django.utils.safestring import mark_safe - -from sponsors import models - - -class SponsorPageWidget(forms.Textarea): - class Media: - js = ( - 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js', - 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/jquery-ui.min.js', - settings.STATIC_URL + 'sponsors/js/jquery.json.min.js', - settings.STATIC_URL + 'sponsors/js/footer_admin.js', - ) - css = { - 'all': (settings.STATIC_URL + 'sponsors/css/footer_admin.css',), - } - - def render(self, name, value, attrs=None): - output = [super(SponsorPageWidget, self).render(name, value, attrs)] - sponsors = [(unicode(obj), obj.pk, obj.logo.url) for obj in models.Sponsor.objects.all().iterator()] - sponsors_js = ', '.join('{name: "%s", id: %d, image: "%s"}' % sponsor for sponsor in sponsors) - output.append(u'\n' % - (name, sponsors_js)) - return mark_safe(u''.join(output)) diff --git a/apps/stats/__init__.py b/apps/stats/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/stats/models.py b/apps/stats/models.py deleted file mode 100644 index 8b1378917..000000000 --- a/apps/stats/models.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/stats/tasks.py b/apps/stats/tasks.py deleted file mode 100644 index dcd0a4bd7..000000000 --- a/apps/stats/tasks.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from celery.task import task -from django.conf import settings -import httplib -import logging -import urlparse - -logger = logging.getLogger(__name__) - - -PIWIK_API_VERSION = 1 - -# Retrieve piwik information -try: - _host = urlparse.urlsplit(settings.PIWIK_URL).netloc -except AttributeError: - logger.debug("PIWIK_URL not configured.") - _host = None - - -@task(ignore_result=True) -def track_request(piwik_args): - piwik_url = "%s%s%s" % (settings.PIWIK_URL, u"/piwik.php?", piwik_args) - conn = httplib.HTTPConnection(_host) - conn.request('GET', piwik_url) - conn.close() diff --git a/apps/stats/utils.py b/apps/stats/utils.py deleted file mode 100644 index 474d1b59a..000000000 --- a/apps/stats/utils.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from datetime import datetime -import logging -from functools import update_wrapper -import urllib -from random import random -from inspect import isclass -from .tasks import track_request - -logger = logging.getLogger(__name__) - - -def piwik_url(request): - return urllib.urlencode(dict( - idsite=getattr(settings, 'PIWIK_SITE_ID', '0'), - rec=1, - url='http://%s%s' % (request.META['HTTP_HOST'], request.path), - rand=int(random() * 0x10000), - apiv=PIWIK_API_VERSION, - urlref=request.META.get('HTTP_REFERER', ''), - ua=request.META.get('HTTP_USER_AGENT', ''), - lang=request.META.get('HTTP_ACCEPT_LANGUAGE', ''), - token_auth=getattr(settings, 'PIWIK_TOKEN', ''), - cip=request.META['REMOTE_ADDR'], - cdt=datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S") - )) - -PIWIK_API_VERSION = 1 - - -def piwik_track(klass_or_method): - """Track decorated class or method using Piwik (according to configuration in settings and django-piwik) - Works for handler classes (executed by __call__) or handler methods. Expects request to be the first parameter - """ - if not getattr(settings, 'PIWIK_SITE_ID', 0): - return klass_or_method - - # get target method - if isclass(klass_or_method): - klass = klass_or_method - call_func = klass.__call__ - else: - call_func = klass_or_method - - def wrap(self, request, *args, **kw): - if getattr(request, 'piwik_track', True): - track_request.delay(piwik_url(request)) - return call_func(self, request, *args, **kw) - - # and wrap it - update_wrapper(wrap, call_func) - - if isclass(klass_or_method): - klass.__call__ = wrap - return klass - else: - return wrap diff --git a/apps/suggest/__init__.py b/apps/suggest/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/suggest/admin.py b/apps/suggest/admin.py deleted file mode 100644 index b5fcb5cf2..000000000 --- a/apps/suggest/admin.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin - -from suggest.models import Suggestion, PublishingSuggestion - -class SuggestionAdmin(admin.ModelAdmin): - list_display = ('created_at', 'contact', 'user', 'description') - -admin.site.register(Suggestion, SuggestionAdmin) - - -class PublishingSuggestionAdmin(admin.ModelAdmin): - list_display = ('created_at', 'contact', 'user', 'books', 'audiobooks') - -admin.site.register(PublishingSuggestion, PublishingSuggestionAdmin) diff --git a/apps/suggest/forms.py b/apps/suggest/forms.py deleted file mode 100644 index b98e0ae4a..000000000 --- a/apps/suggest/forms.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import forms -from django.contrib.sites.models import Site -from django.core.exceptions import ValidationError -from django.core.mail import send_mail, mail_managers -from django.core.urlresolvers import reverse -from django.core.validators import validate_email -from django.utils.translation import ugettext_lazy as _ -from django.utils.translation import ugettext -from suggest.models import PublishingSuggestion, Suggestion - - -class SuggestForm(forms.Form): - contact = forms.CharField(label=_('Contact'), max_length=120, required=False) - description = forms.CharField(label=_('Description'), widget=forms.Textarea, required=True) - - def save(self, request): - contact = self.cleaned_data['contact'] - description = self.cleaned_data['description'] - - suggestion = Suggestion(contact=contact, - description=description, ip=request.META['REMOTE_ADDR']) - if request.user.is_authenticated(): - suggestion.user = request.user - suggestion.save() - - mail_managers(u'Nowa sugestia na stronie WolneLektury.pl', u'''\ -Zgłoszono nową sugestię w serwisie WolneLektury.pl. -http://%(site)s%(url)s - -Użytkownik: %(user)s -Kontakt: %(contact)s - -%(description)s''' % { - 'site': Site.objects.get_current().domain, - 'url': reverse('admin:suggest_suggestion_change', args=[suggestion.id]), - 'user': str(request.user) if request.user.is_authenticated() else '', - 'contact': contact, - 'description': description, - }, fail_silently=True) - - try: - validate_email(contact) - except ValidationError: - pass - else: - send_mail(u'[WolneLektury] ' + - ugettext(u'Thank you for your suggestion.'), - ugettext(u"""\ -Thank you for your comment on WolneLektury.pl. -The suggestion has been referred to the project coordinator.""") + -u""" - --- -""" + ugettext(u'''Message sent automatically. Please do not reply.'''), - 'no-reply@wolnelektury.pl', [contact], fail_silently=True) - - -class PublishingSuggestForm(forms.Form): - contact = forms.CharField(label=_('Contact'), max_length=120, required=False) - books = forms.CharField(label=_('books'), widget=forms.Textarea, required=False) - audiobooks = forms.CharField(label=_('audiobooks'), widget=forms.Textarea, required=False) - - def clean(self, *args, **kwargs): - if not self.cleaned_data['books'] and not self.cleaned_data['audiobooks']: - msg = ugettext(u"One of these fields is required.") - self._errors["books"] = self.error_class([msg]) - self._errors["audiobooks"] = self.error_class([msg]) - return super(PublishingSuggestForm, self).clean(*args, **kwargs) - - def save(self, request): - contact = self.cleaned_data['contact'] - books = self.cleaned_data['books'] - audiobooks = self.cleaned_data['audiobooks'] - - suggestion = PublishingSuggestion(contact=contact, books=books, - audiobooks=audiobooks, ip=request.META['REMOTE_ADDR']) - if request.user.is_authenticated(): - suggestion.user = request.user - suggestion.save() - - mail_managers(u'Konsultacja planu wydawniczego na WolneLektury.pl', u'''\ -Zgłoszono nową sugestię nt. planu wydawniczego w serwisie WolneLektury.pl. -%(url)s - -Użytkownik: %(user)s -Kontakt: %(contact)s - -Książki: -%(books)s - -Audiobooki: -%(audiobooks)s''' % { - 'url': request.build_absolute_uri(reverse('admin:suggest_suggestion_change', args=[suggestion.id])), - 'user': str(request.user) if request.user.is_authenticated() else '', - 'contact': contact, - 'books': books, - 'audiobooks': audiobooks, - }, fail_silently=True) - - try: - validate_email(contact) - except ValidationError: - pass - else: - send_mail(u'[WolneLektury] ' + - ugettext(u'Thank you for your suggestion.'), - ugettext(u"""\ -Thank you for your comment on WolneLektury.pl. -The suggestion has been referred to the project coordinator.""") + -u""" - --- -""" + ugettext(u'''Message sent automatically. Please do not reply.'''), - 'no-reply@wolnelektury.pl', [contact], fail_silently=True) diff --git a/apps/suggest/locale/de/LC_MESSAGES/django.mo b/apps/suggest/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index 2531a86b7..000000000 Binary files a/apps/suggest/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/de/LC_MESSAGES/django.po b/apps/suggest/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index e96c86b0e..000000000 --- a/apps/suggest/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,106 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-08 11:33+0100\n" -"Last-Translator: \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "Kontakt" - -#: forms.py:17 -msgid "Description" -msgstr "Beschreibung" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "Vielen Dank für Ihren Vorschlag." - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"Vielen Dank für Ihren Kommentar zu WolneLekturz.pl\n" -"Ihr Kommentar ist an den Projekt - Koordinator weitergeleitet worden. " - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "" -"Diese Nachricht wird automatisch generiert. Bitte sie nicht beantworten." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "Bücher" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "Audiobücher" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "Erfüllen Sie bitte ein von diesen Feldern. " - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "Kontakt" - -#: models.py:11 -msgid "description" -msgstr "Beschreibung" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "Erstellungsdatum" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "IP-Adresse" - -#: models.py:18 -msgid "suggestion" -msgstr "Vorschlag" - -#: models.py:19 -msgid "suggestions" -msgstr "Vorschläge" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "Vorschlag publizieren" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "Vorschläge publizieren" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "Melden Sie einen Bug oder einen Vorschlag" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "Der Bericht wurde erfolgreich gesendet." - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "Bericht senden" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "Hast Du kein Buch gefunden? Mach einen Vorschlag." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl these…" -msgstr "Ich würde gerne auf WolneLektury ... finden." diff --git a/apps/suggest/locale/en/LC_MESSAGES/django.mo b/apps/suggest/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index 69b20d038..000000000 Binary files a/apps/suggest/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/en/LC_MESSAGES/django.po b/apps/suggest/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index 20bd3bb0a..000000000 --- a/apps/suggest/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,106 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-10 13:06+0100\n" -"Last-Translator: Kamil \n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "Contact" - -#: forms.py:17 -msgid "Description" -msgstr "Description" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "Thank you for your suggestion." - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"Thank you for your suggestion concerning WolneLektury.pl \n" -"Your suggestion was sent to the project coordinator." - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "This message was sent automatically. Please do not reply." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "books" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "audiobooks" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "One of these fields is required." - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "Contact" - -#: models.py:11 -msgid "description" -msgstr "description" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "creation date" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "IP address" - -#: models.py:18 -msgid "suggestion" -msgstr "suggestion" - -#: models.py:19 -msgid "suggestions" -msgstr "suggestions" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "publishing suggestion" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "publishing suggestions" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "Report an error or make a suggestion" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "publishing suggestion" - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "send a suggestion" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "Didn't find a book? Make a suggestion." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl these…" -msgstr "I would like to find the following items on WolneLektury.pl:" diff --git a/apps/suggest/locale/es/LC_MESSAGES/django.mo b/apps/suggest/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index 11f8aa62a..000000000 Binary files a/apps/suggest/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/es/LC_MESSAGES/django.po b/apps/suggest/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index 67e142599..000000000 --- a/apps/suggest/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,105 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-18 13:20+0100\n" -"Last-Translator: Anna Jopp \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "Contacto" - -#: forms.py:17 -msgid "Description" -msgstr "Descripción" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "Gracias por tu sugerencia" - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"Gracias por tu comentario en WolneLektury.pl La sugerencia ha sido remitida " -"a el coordinador del proyecto" - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "La mensaje enviado automaticamente. No conteste por favor." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "libros" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "audiolibros" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "Uno de estos campos es requerido" - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "Contacto" - -#: models.py:11 -msgid "description" -msgstr "Descripción" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "Fecha de creación" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "Dirección IP" - -#: models.py:18 -msgid "suggestion" -msgstr "sugerencia" - -#: models.py:19 -msgid "suggestions" -msgstr "sugerencias" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "Sugerencia de publicación" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "Sugerencias de publicación" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "Reporta un error o una sugerencia" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "la noticia ha sido enviada con éxito " - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "Envia un report" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "No encontraste un libro? Haz una sugerencia." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl these…" -msgstr "Me gustaría encontrar estos en WolneLektury.pl" diff --git a/apps/suggest/locale/fr/LC_MESSAGES/django.mo b/apps/suggest/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index 04716bcac..000000000 Binary files a/apps/suggest/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/fr/LC_MESSAGES/django.po b/apps/suggest/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index 3b95f4739..000000000 --- a/apps/suggest/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,105 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-23 17:55+0100\n" -"Last-Translator: Ela Janota \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "Contact" - -#: forms.py:17 -msgid "Description" -msgstr "Description" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "Merci pour votre suggestion." - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"Merci pour votre commentaire sur Wolne Lektury.pl.\n" -"Votre suggestion a été adressée au coordinateur du projet." - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "Message envoyé automatiquement. Merci de n'y pas répondre." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "livres" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "livres audio" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "L'une des ces rubriques est obligatoire." - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "contact" - -#: models.py:11 -msgid "description" -msgstr "description" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "date de création" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "adresse IP" - -#: models.py:18 -msgid "suggestion" -msgstr "suggestion" - -#: models.py:19 -msgid "suggestions" -msgstr "suggestions" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "suggestion sur publication" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "suggestions sur publication" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "Rapportez une erreur ou faites une suggestion" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "Votre rapport a été envoyé" - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "Envoyez un rapport" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "Vous n'avez pas trouvé un livre? Faites une suggestion." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl these…" -msgstr "J'aimerais trouver dans Wolne Lektury.pl:..." diff --git a/apps/suggest/locale/it/LC_MESSAGES/django.mo b/apps/suggest/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index 38cbcb47f..000000000 Binary files a/apps/suggest/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/it/LC_MESSAGES/django.po b/apps/suggest/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index 70f0c346b..000000000 --- a/apps/suggest/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,107 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-21 17:57+0100\n" -"Last-Translator: xxx\n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "Contatto" - -#: forms.py:17 -msgid "Description" -msgstr "Descrizione" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "Grazie per la sua proposta" - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"Grazie per il commento su WolneLektury.pl. La sua proposta è stata inviata " -"al coordinatore del progetto. // " - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "" -"Il messaggio è stato inviato automaticamente. Si prega di non rispondere." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "libri" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "audiolibri" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "E' richiesto uno di questi campi. " - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "contatto" - -#: models.py:11 -msgid "description" -msgstr "descrizione" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "data di creazione" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "Indirizzo IP" - -#: models.py:18 -msgid "suggestion" -msgstr "proposta" - -#: models.py:19 -msgid "suggestions" -msgstr "proposte" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "pubblica la proposta" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "pubblica le proposte" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr " Segnala un'errore o un proposta" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "La notifica è stata inviata con successo." - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "Invia una notifica" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "Non hai trovato il libro?Fai una proposta." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl these…" -msgstr "Vorrei trovare in WolneLektury.pl questo..." diff --git a/apps/suggest/locale/jp/LC_MESSAGES/django.mo b/apps/suggest/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index c9739db34..000000000 Binary files a/apps/suggest/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/jp/LC_MESSAGES/django.po b/apps/suggest/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index b02e371d3..000000000 --- a/apps/suggest/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,104 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "" - -#: forms.py:17 -msgid "Description" -msgstr "" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "" - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "" - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "" - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "" - -#: models.py:11 -msgid "description" -msgstr "" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "" - -#: models.py:18 -msgid "suggestion" -msgstr "" - -#: models.py:19 -msgid "suggestions" -msgstr "" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "" - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "" - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl these…" -msgstr "" diff --git a/apps/suggest/locale/lt/LC_MESSAGES/django.mo b/apps/suggest/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index 0dbad8e48..000000000 Binary files a/apps/suggest/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/lt/LC_MESSAGES/django.po b/apps/suggest/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index 25759b3d7..000000000 --- a/apps/suggest/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,105 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-02 18:19+0100\n" -"Last-Translator: Karolina Zuber \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "Kontaktas" - -#: forms.py:17 -msgid "Description" -msgstr "Aprašymas" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "Ačiū už jūsų pasiūlymą." - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"Ačiū už jūsų komentarą WolneLektury.pl interneto svetainėje \n" -"Pasiūlymas buvo pateiktas projekto koordinatoriui." - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "Tai automatiškai sugeneruotas laiškas. Prašome į jį neatsakyti." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "knygas" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "audio knygas" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "Vienas iš šių laukelių yra reikalaujamas." - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "kontaktas" - -#: models.py:11 -msgid "description" -msgstr "aprašymas" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "sukūrimo data" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "IP adresas" - -#: models.py:18 -msgid "suggestion" -msgstr "pasiūlymas" - -#: models.py:19 -msgid "suggestions" -msgstr "pasiūlymai" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "publikavimo pasiūlymas" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "publikavimo pasiūlymai" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "Praneškite apie klaidą arba teikite pasiūlymus" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "Pranešimas sėkmingai išsiųstas." - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "Siųsti pranešimą" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "Neradote knygos? Teikite pasiūlymus." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl these…" -msgstr "Interneto svetainėje WolneLektury.pl norėčiau rasti šias..." diff --git a/apps/suggest/locale/pl/LC_MESSAGES/django.mo b/apps/suggest/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index b2dcabd83..000000000 Binary files a/apps/suggest/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/pl/LC_MESSAGES/django.po b/apps/suggest/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index b5bfc9eae..000000000 --- a/apps/suggest/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,106 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2011-06-09 13:06+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "Kontakt" - -#: forms.py:17 -msgid "Description" -msgstr "Opis" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "Dziękujemy za zgłoszenie." - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"Dziękujemy za zgłoszenie uwag do serwisu Wolne Lektury.\n" -"Sugestia została przekazana koordynatorce projektu." - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "Wiadomość wysłana automatycznie. Proszę nie odpowiadać." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "książki" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "audiobooki" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "Proszę wypełnić co najmniej jedno z tych pól." - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "kontakt" - -#: models.py:11 -msgid "description" -msgstr "opis" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "data utworzenia" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "adres IP" - -#: models.py:18 -msgid "suggestion" -msgstr "sugestia" - -#: models.py:19 -msgid "suggestions" -msgstr "sugestie" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "sugestia publikacji" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "sugestie publikacji" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "Zgłoś błąd lub sugestię" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "Zgłoszenie zostało wysłane." - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "Wyślij zgłoszenie" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "Nie znalazłeś utworu na stronie? Zgłoś sugestię." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl these…" -msgstr "Chciałabym/chciałbym znaleźć w bibliotece Wolne Lektury następujące" diff --git a/apps/suggest/locale/ru/LC_MESSAGES/django.mo b/apps/suggest/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 0b7fe0c82..000000000 Binary files a/apps/suggest/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/ru/LC_MESSAGES/django.po b/apps/suggest/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index b6ba0f15e..000000000 --- a/apps/suggest/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,105 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 22:11+0100\n" -"Last-Translator: xxx \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "Контакт" - -#: forms.py:17 -msgid "Description" -msgstr "Описание" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "Спасибо за Ваше предложение." - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"Спасибо за Ваш комментарий на WolneLektury.pl. \n" -"Предложение было передано координатору проекта." - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "Сообщение отправлено автоматически. Пожалуйста, не отвечайте." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "книги" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "аудиокниги" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "Требуется одно из этих полей." - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "контакт" - -#: models.py:11 -msgid "description" -msgstr "описание" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "дата создания" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "IP-адрес" - -#: models.py:18 -msgid "suggestion" -msgstr "предложение" - -#: models.py:19 -msgid "suggestions" -msgstr "предложения" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "издательское предложение" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "издательские предложения" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "Сообщитe об ошибке или предложении" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "Отчет отправлен успешно." - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "Отправить отчет" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "Вы не нашли книгу? Сделайте предложение." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl these…" -msgstr "Я хотел/а бы найти на сайте WolneLektury.pl этих..." diff --git a/apps/suggest/locale/uk/LC_MESSAGES/django.mo b/apps/suggest/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index 8e7f71016..000000000 Binary files a/apps/suggest/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/uk/LC_MESSAGES/django.po b/apps/suggest/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index 5aaed2577..000000000 --- a/apps/suggest/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,106 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 17:31+0100\n" -"Last-Translator: xxx \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "Контакт" - -#: forms.py:17 -msgid "Description" -msgstr "Опис" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "Дякуємо за Ваші пропозиції." - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"Дякуємо за Ваш коментар на WolneLektury.pl.\n" -"Вашу пропозицію передано координатору проекту." - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "Повідомлення надіслано автоматично. Просимо не відповідати." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "книжки" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "аудіокниги" - -#: forms.py:64 -#, fuzzy -msgid "One of these fields is required." -msgstr "Одне з цих полів є обов'язковим." - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "контакт" - -#: models.py:11 -msgid "description" -msgstr "опис" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "дата створення" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "IP-адреса" - -#: models.py:18 -msgid "suggestion" -msgstr "пропозиція" - -#: models.py:19 -msgid "suggestions" -msgstr "пропозиції" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "пропозиція публікації" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "пропозиції публікацій" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "Повідомити про помилку або надіслати пропозицію" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "Ваше повідомлення надіслано успішно." - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "Вислати повідомлення" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "Не знайшли книжки, якої шукали? Вишліть свої пропозиції." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl these…" -msgstr "Я хотів би/хотіла би знайти на сайті WolneLektury.pl наступні..." diff --git a/apps/suggest/migrations/0001_initial.py b/apps/suggest/migrations/0001_initial.py deleted file mode 100644 index b02889762..000000000 --- a/apps/suggest/migrations/0001_initial.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -from django.conf import settings - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='PublishingSuggestion', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('contact', models.CharField(max_length=120, verbose_name='Contact', blank=True)), - ('books', models.TextField(null=True, verbose_name='Books', blank=True)), - ('audiobooks', models.TextField(null=True, verbose_name='audiobooks', blank=True)), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date')), - ('ip', models.GenericIPAddressField(verbose_name='IP address')), - ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)), - ], - options={ - 'ordering': ('-created_at',), - 'verbose_name': 'publishing suggestion', - 'verbose_name_plural': 'publishing suggestions', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Suggestion', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('contact', models.CharField(max_length=120, verbose_name='Contact', blank=True)), - ('description', models.TextField(verbose_name='Description', blank=True)), - ('created_at', models.DateTimeField(auto_now=True, verbose_name='creation date')), - ('ip', models.GenericIPAddressField(verbose_name='IP address')), - ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)), - ], - options={ - 'ordering': ('-created_at',), - 'verbose_name': 'suggestion', - 'verbose_name_plural': 'suggestions', - }, - bases=(models.Model,), - ), - ] diff --git a/apps/suggest/migrations/0002_auto_20151221_1225.py b/apps/suggest/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index 126808b68..000000000 --- a/apps/suggest/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('suggest', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='publishingsuggestion', - name='books', - field=models.TextField(null=True, verbose_name='books', blank=True), - ), - migrations.AlterField( - model_name='publishingsuggestion', - name='contact', - field=models.CharField(max_length=120, verbose_name='contact', blank=True), - ), - migrations.AlterField( - model_name='suggestion', - name='contact', - field=models.CharField(max_length=120, verbose_name='contact', blank=True), - ), - migrations.AlterField( - model_name='suggestion', - name='description', - field=models.TextField(verbose_name='description', blank=True), - ), - ] diff --git a/apps/suggest/migrations/__init__.py b/apps/suggest/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/suggest/models.py b/apps/suggest/models.py deleted file mode 100644 index c0f8658f5..000000000 --- a/apps/suggest/models.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.db import models -from django.contrib.auth.models import User -from django.utils.translation import ugettext_lazy as _ - -class Suggestion(models.Model): - contact = models.CharField(_('contact'), blank=True, max_length=120) - description = models.TextField(_('description'), blank=True) - created_at = models.DateTimeField(_('creation date'), auto_now=True) - ip = models.GenericIPAddressField(_('IP address')) - user = models.ForeignKey(User, blank=True, null=True) - - class Meta: - ordering = ('-created_at',) - verbose_name = _('suggestion') - verbose_name_plural = _('suggestions') - - def __unicode__(self): - return unicode(self.created_at) - - -class PublishingSuggestion(models.Model): - contact = models.CharField(_('contact'), blank=True, max_length=120) - books = models.TextField(_('books'), null=True, blank=True) - audiobooks = models.TextField(_('audiobooks'), null=True, blank=True) - created_at = models.DateTimeField(_('creation date'), auto_now_add=True) - ip = models.GenericIPAddressField(_('IP address')) - user = models.ForeignKey(User, blank=True, null=True) - - class Meta: - ordering = ('-created_at',) - verbose_name = _('publishing suggestion') - verbose_name_plural = _('publishing suggestions') - - def __unicode__(self): - return unicode(self.created_at) diff --git a/apps/suggest/templates/publishing_suggest.html b/apps/suggest/templates/publishing_suggest.html deleted file mode 100755 index 2ac0ec245..000000000 --- a/apps/suggest/templates/publishing_suggest.html +++ /dev/null @@ -1,21 +0,0 @@ -{% load i18n %} -{% load honeypot %} -{% load ssi_csrf_token from ssify %} - -

                {% trans "Didn't find a book? Make a suggestion." %}

                - -
                -{% ssi_csrf_token %} -{% render_honeypot_field %} -
                  -
                1. {{ form.contact.errors }} {{ form.contact }}
                2. - -
                3. {% trans "I'd like to find in WolneLektury.pl these…" %}
                4. - -
                5. {{ form.books.errors }} {{ form.books }}
                6. - -
                7. {{ form.audiobooks.errors }} {{ form.audiobooks }}
                8. - -
                9. -
                -
                diff --git a/apps/suggest/urls.py b/apps/suggest/urls.py deleted file mode 100644 index 2f7017213..000000000 --- a/apps/suggest/urls.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url -from suggest import views - -urlpatterns = patterns('', - url(r'^$', views.SuggestionFormView(), name='suggest'), - url(r'^plan/$', views.PublishingSuggestionFormView(), name='suggest_publishing'), -) - diff --git a/apps/suggest/views.py b/apps/suggest/views.py deleted file mode 100644 index 035074d0a..000000000 --- a/apps/suggest/views.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.utils.translation import ugettext_lazy as _ - -from ajaxable.utils import AjaxableFormView -from suggest import forms - - -class PublishingSuggestionFormView(AjaxableFormView): - form_class = forms.PublishingSuggestForm - title = _('Report a bug or suggestion') - template = "publishing_suggest.html" - success_message = _('Report was sent successfully.') - honeypot = True - - -class SuggestionFormView(AjaxableFormView): - form_class = forms.SuggestForm - title = _('Report a bug or suggestion') - submit = _('Send report') - success_message = _('Report was sent successfully.') - honeypot = True diff --git a/apps/waiter/__init__.py b/apps/waiter/__init__.py deleted file mode 100644 index 9c83ee36e..000000000 --- a/apps/waiter/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -""" -Celery waiter. - -Takes orders for files generated by async Celery tasks. -Serves the file when ready. Kindly asks the user to wait if not. - -Author: Radek Czajka -""" diff --git a/apps/waiter/locale/pl/LC_MESSAGES/django.mo b/apps/waiter/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index dc750957f..000000000 Binary files a/apps/waiter/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/waiter/locale/pl/LC_MESSAGES/django.po b/apps/waiter/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 28008ee37..000000000 --- a/apps/waiter/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,70 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-22 15:54+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \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%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2)\n" - -#: templates/waiter/wait.html:7 templates/waiter/wait.html.py:33 -msgid "The file is ready for download!" -msgstr "Plik jest gotowy do pobrania!" - -#: templates/waiter/wait.html:10 templates/waiter/wait.html.py:43 -msgid "Your file is being prepared, please wait." -msgstr "Plik jest generowany, proszę czekać." - -#: templates/waiter/wait.html:12 templates/waiter/wait.html.py:52 -msgid "Something went wrong." -msgstr "Coś poszło nie tak." - -#: templates/waiter/wait.html:36 -#, python-format -msgid "" -"Your file is ready!\n" -" If the download doesn't start in a few seconds,\n" -" feel free to use this direct link." -msgstr "" -"Twój plik jest gotowy!\n" -"Jeśli pobieranie nie zacznie się w ciągu kilku sekund,\n" -"skorzystaj z tego bezpośredniego linku." - -#: templates/waiter/wait.html:42 -msgid "Please wait" -msgstr "" - -#: templates/waiter/wait.html:46 -#, python-format -msgid "The file you requested was: %(d)s." -msgstr "Zamówiony plik to: %(d)s." - -#: templates/waiter/wait.html:48 -msgid "" -"Be aware: Generating the file can take a while.\n" -" Please be patient, or bookmark this page and come back later.

                " -msgstr "" -"Uwaga: Generowanie pliku może trwać dłuższą chwilę.\n" -"Poczekaj cierpliwie, albo dodaj tę stronę do zakładek i wróć później.

                " - -#: templates/waiter/wait.html:56 -#, python-format -msgid "" -"Something seems to have gone wrong while generating your file.\n" -" Please order it again or complain to us about it." -msgstr "" -"Wygląda na to, że coś poszło źle podczas generowania Twojego pliku.\n" -"Spróbuj zamówić go jeszcze raz albo napisz do nas." diff --git a/apps/waiter/migrations/0001_initial.py b/apps/waiter/migrations/0001_initial.py deleted file mode 100644 index a579d6efb..000000000 --- a/apps/waiter/migrations/0001_initial.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import picklefield.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='WaitedFile', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('path', models.CharField(unique=True, max_length=255, db_index=True)), - ('task_id', models.CharField(db_index=True, max_length=128, null=True, blank=True)), - ('task', picklefield.fields.PickledObjectField(null=True, editable=False)), - ('description', models.CharField(max_length=255, null=True, blank=True)), - ], - options={ - }, - bases=(models.Model,), - ), - ] diff --git a/apps/waiter/migrations/__init__.py b/apps/waiter/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/waiter/models.py b/apps/waiter/models.py deleted file mode 100644 index bffaf7f8a..000000000 --- a/apps/waiter/models.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from os.path import join, isfile -from django.core.urlresolvers import reverse -from django.db import models -from waiter.settings import WAITER_URL, WAITER_MAX_QUEUE -from waiter.utils import check_abspath -from picklefield import PickledObjectField - - -class WaitedFile(models.Model): - path = models.CharField(max_length=255, unique=True, db_index=True) - task_id = models.CharField(max_length=128, db_index=True, null=True, blank=True) - task = PickledObjectField(null=True, editable=False) - description = models.CharField(max_length=255, null=True, blank=True) - - @classmethod - def exists(cls, path): - """Returns opened file or None. - - `path` is relative to WAITER_ROOT. - Won't open a path leading outside of WAITER_ROOT. - """ - abs_path = check_abspath(path) - # Pre-fetch objects for deletion to avoid minor race condition - relevant = [o.id for o in cls.objects.filter(path=path)] - if isfile(abs_path): - cls.objects.filter(id__in=relevant).delete() - return True - else: - return False - - @classmethod - def can_order(cls, path): - return (cls.objects.filter(path=path).exists() or - cls.exists(path) or - cls.objects.count() < WAITER_MAX_QUEUE - ) - - @classmethod - def order(cls, path, task_creator, description=None): - """ - Returns an URL for the user to follow. - If the file is ready, returns download URL. - If not, starts preparing it and returns waiting URL. - - task_creator: function taking a path and generating the file; - description: a string or string proxy with a description for user; - """ - already = cls.exists(path) - if not already: - waited, created = cls.objects.get_or_create(path=path) - if created or waited.is_stale(): - waited.task = task_creator(check_abspath(path), waited.pk) - waited.task_id = waited.task.task_id - waited.description = description - waited.save() - return reverse("waiter", args=[path]) - return join(WAITER_URL, path) diff --git a/apps/waiter/settings.py b/apps/waiter/settings.py deleted file mode 100644 index aaa9f03b3..000000000 --- a/apps/waiter/settings.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from os.path import abspath, join -from django.conf import settings - -try: - WAITER_ROOT = abspath(settings.WAITER_ROOT) -except AttributeError: - WAITER_ROOT = abspath(join(settings.MEDIA_ROOT, 'waiter')) - -try: - WAITER_URL = settings.WAITER_URL -except AttributeError: - WAITER_URL = join(settings.MEDIA_URL, 'waiter') - -try: - WAITER_MAX_QUEUE = settings.WAITER_MAX_QUEUE -except AttributeError: - WAITER_MAX_QUEUE = 20 - diff --git a/apps/waiter/tasks.py b/apps/waiter/tasks.py deleted file mode 100644 index 89db402a3..000000000 --- a/apps/waiter/tasks.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from celery.signals import task_postrun -from waiter.models import WaitedFile - - -def task_delete_after(task_id=None, **kwargs): - WaitedFile.objects.filter(task_id=task_id).delete() -task_postrun.connect(task_delete_after) diff --git a/apps/waiter/templates/waiter/wait.html b/apps/waiter/templates/waiter/wait.html deleted file mode 100644 index 6ef1b7751..000000000 --- a/apps/waiter/templates/waiter/wait.html +++ /dev/null @@ -1,93 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load static from staticfiles %} - -{% block titleextra %} -{% if file_url %} - {% trans "The file is ready for download!" %} -{% else %} - {% if waiting %} - {% trans "Your file is being prepared, please wait." %} - {% else %} - {% trans "Something went wrong." %} - {% endif %} -{% endif %} -{% endblock %} - - -{% block extrahead %} -{% if file_url %} - -{% else %} - {% if waiting %} - - {% endif %} -{% endif %} -{% endblock %} - - -{% block body %} -{% if file_url %} -

                {% trans "The file is ready for download!" %}

                - -
                -

                {% blocktrans %}Your file is ready! - If the download doesn't start in a few seconds, - feel free to use this direct link.{% endblocktrans %}

                -
                -{% else %} - {% if waiting %} -

                {% trans 'Please wait' %} - {% trans "Your file is being prepared, please wait." %}

                - -
                -

                {% blocktrans with d=waiting.description %}The file you requested was: {{d}}.{% endblocktrans %}

                - -

                {% blocktrans %}Be aware: Generating the file can take a while. - Please be patient, or bookmark this page and come back later.

                {% endblocktrans %} -
                - {% else %} -

                {% trans "Something went wrong." %}

                - -
                - {% url 'suggest' as s %} -

                {% blocktrans %}Something seems to have gone wrong while generating your file. - Please order it again or complain to us about it.{% endblocktrans %}

                -
                - {% endif %} -{% endif %} - -{% endblock %} - -{% block extrabody %} -{% if waiting %} - -{% endif %} -{% endblock %} diff --git a/apps/waiter/urls.py b/apps/waiter/urls.py deleted file mode 100644 index 21352c786..000000000 --- a/apps/waiter/urls.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - -urlpatterns = patterns('waiter.views', - url(r'^(?P.*)$', 'wait', name='waiter'), -) diff --git a/apps/waiter/utils.py b/apps/waiter/utils.py deleted file mode 100644 index 68d21bd79..000000000 --- a/apps/waiter/utils.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from os.path import abspath, join, exists -from shutil import rmtree -from waiter.settings import WAITER_ROOT - - -def check_abspath(path): - abs_path = abspath(join(WAITER_ROOT, path)) - if not abs_path.startswith(WAITER_ROOT): - raise ValueError('Path not inside WAITER_ROOT.') - return abs_path - - -def clear_cache(path): - abs_path = check_abspath(path) - if exists(abs_path): - rmtree(abs_path) diff --git a/apps/waiter/views.py b/apps/waiter/views.py deleted file mode 100644 index b951cc4c8..000000000 --- a/apps/waiter/views.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from os.path import join -from waiter.models import WaitedFile -from waiter.settings import WAITER_URL -from django.shortcuts import render, get_object_or_404 -from django.http import HttpResponse -from django.views.decorators.cache import never_cache - - -@never_cache -def wait(request, path): - if WaitedFile.exists(path): - file_url = join(WAITER_URL, path) - else: - file_url = "" - waiting = get_object_or_404(WaitedFile, path=path) - - if request.is_ajax(): - return HttpResponse(file_url) - else: - return render(request, "waiter/wait.html", locals()) diff --git a/apps/wolnelektury_core/__init__.py b/apps/wolnelektury_core/__init__.py deleted file mode 100644 index 56037a03e..000000000 --- a/apps/wolnelektury_core/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -default_app_config = 'wolnelektury_core.apps.WLCoreConfig' diff --git a/apps/wolnelektury_core/apps.py b/apps/wolnelektury_core/apps.py deleted file mode 100644 index 996ccaec6..000000000 --- a/apps/wolnelektury_core/apps.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.apps import AppConfig - -class WLCoreConfig(AppConfig): - name = 'wolnelektury_core' - - def ready(self): - from . import signals diff --git a/apps/wolnelektury_core/context_processors.py b/apps/wolnelektury_core/context_processors.py deleted file mode 100644 index 5885e039b..000000000 --- a/apps/wolnelektury_core/context_processors.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings - -def extra_settings(request): - return { - 'STATIC_URL': settings.STATIC_URL, - 'FULL_STATIC_URL': request.build_absolute_uri(settings.STATIC_URL) - } diff --git a/apps/wolnelektury_core/locale/de/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index 2a83addfe..000000000 Binary files a/apps/wolnelektury_core/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/de/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index df2e21286..000000000 --- a/apps/wolnelektury_core/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,1126 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Einloggen" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "Eingeloggt als User %(user)s" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "Registrieren" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "Sie müssen eingeloggt sein, um fortzusetzen." - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Die gewünschte Webseite existiert nicht" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "Seite nicht gefunden." - -#: templates/404.html:14 -msgid "" -"We are sorry, but this page does not exist. Please check if you entered " -"correct address or go to " -msgstr "" -"Die gesuchte Seite existiert leider nicht mehr. Überprüfen Sie bitte, ob Sie " -"sich bei der Eingabe der URL in der Adresszeile des Browsers vertippt haben " -"oder gehen Sie zur Startseite" - -#: templates/404.html:14 -msgid "main page" -msgstr "Startseite" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "Serverfehler" - -#: templates/500.html:19 -msgid "" -"

                The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"blog.

                Inform our administrators about the " -"error.

                " -msgstr "" -"

                Wolnelektury.pl ist zurzeit nicht verfügbar. Besuchen Sie unsere " -"Startseite Blog . " -"Informieren Sie uns " -"Administratoren über den Fehler. " - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "Service nicht verfügbar" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "Wolnelektury.pl wegen Wartungsarbeiten momentan nicht verfügbar." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "Internetbibliothek WolneLektury.pl" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "Was Neues?" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "Letzte Publikationen" - -#: templates/main_page.html:41 -msgid "News" -msgstr "News" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "Leistungen" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "Melden Sie einen Bug oder Vorschlag." - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "Der Katalog als PDF-Datei herunterladen." - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "Widget" - -#: templates/main_page.html:59 -#, fuzzy -msgid "Missing a book?" -msgstr "Brauchen Sie ein Buch?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "Plan der Veröffentlichung" - -#: templates/main_page.html:71 -#, fuzzy -msgid "Information" -msgstr "Format öffnen" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "das genutzte Bild" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "in WolneLektury.pl" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" %(c)s free reading you have right to\n" -" " -msgid_plural "" -"\n" -" %(c)s free readings you have right to\n" -" " -msgstr[0] "" -"\n" -"Sie haben %(c)s freies Werk zur " -"Verfügung\n" -" " -msgstr[1] "" -"\n" -"Sie haben %(c)s freie Werke zur " -"Verfügung\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "Willkommen" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "Password" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "E-Mail" - -#: templates/superbase.html:74 templates/user.html:14 -#, fuzzy -msgid "Social accounts" -msgstr "oder melde dich an:" - -#: templates/superbase.html:77 -#, fuzzy -msgid "My shelf" -msgstr "Mein Bücherregal" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "Administration" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "Ausloggen" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "Suchen" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "Sprachversionen" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" -"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" -"\t\t\t\tHosting: ICM.\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tWolne Lektury ist das Projekt derStiftung Modernes Polen.\n" -"\t\t\t\tDigitalisierung wird von der Natonalbibliothek ausgeführt, Exemplare aus dem Bücherbestand der " -"NB. \n" -"\t\t\t\tHosting EO Networks.\n" -"\t\t\t\t" - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\t Stiftung Modernes Polen, 00-514 Warschau, Marszałkowska 84/92, " -"Wohnungsnummer 125, Telefon/Fax: +48 (22) 621-30-17\n" -" E-Mail: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "Schließen" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "Laden" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "User" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Webseite-Administration" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "Übersetzungen" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "fortgeschritten" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "vereinfacht " - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "Buch importieren" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "Password vergessen?" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -#, fuzzy -msgid "Sign in using:" -msgstr "Einloggen" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "oder Registrieren" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgstr[0] "" -"\n" -"Wir haben eine Arbeit in Wolne Lektury veröffentlicht!\n" -"Hilfen Sie uns bei der Entwicklung der Bibliothek und bereite neue Titel " -"frei von\n" -"Ünterstütze uns " -"vor\n" -"oder mit einer Überweisung 1% Ihrer Einkommensteuer .\n" -msgstr[1] "" -"\n" -"Wir haben %(c)s Arbeiten in Wolne Lektury veröffentlicht!\n" -"Hilfen Sie uns bei der Entwicklung der Bibliothek und bereite neue Titel " -"frei von\n" -"Ünterstütze uns " -"vor\n" -"oder mit einer Überweisung 1% Ihrer Einkommensteuer .\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" -"Werde Redakteur/in bei Wolne Lektury! Schau, ob wir gerade an der " -"Veröffentlichung der Schullektüre arbeiten, die du ausgesucht hast. Um " -"eigene Texte zu veröffentlichen, musst du vorher auf unserer redaktionellen " -"Online-Plattform eingeloggt sein. " - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "Mehr..." - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "OpenID registrieren" - -#: templates/openid/login.html:27 -#, fuzzy -msgid "Sign In" -msgstr "Einloggen" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "zurück" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "weiter" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "Den Zugang zu Wolne Lektury authorisieren" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user %(user)s." -msgstr "" -"Bitte bestätigen Sie den Zugang zu Wolne Lektury %(user)s." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Konto-Beziehungen" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "Sie können mithilfe folgenden fremden Accounts registrieren." - -#: templates/socialaccount/connections.html:36 -#, fuzzy -msgid "Remove" -msgstr "löschen" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "Sie haben noch kein Social-Networt-Konto mit diesem Konto verbunden." - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "Füge ein fremdes Konto hinzu" - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "Login annulliert" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" -"Sie haben entschieden, sich in dieser Seite nicht mit erschafftn Kontos " -"einzuloggen. Wenn es aus Versehen passiert ist, gehen Sie bitte Registrieren voran." - -#~ msgid "Listing of all audiobooks" -#~ msgstr "Audiobücherverzeichnis" - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "MP3-Werkverzeichnis" - -#, fuzzy -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "Werkverzeichnis" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "Die Audiothek der Schulbücher der Stiftung Nowoczesna Polska.\n" -#~ "Sie können diese Audiothek kostenlos und unbeschränkt nutzen.\n" -#~ "Die Audiobücher werden von bekannten Schauspielerinnen und Schauspielern, " -#~ "u. a. von Danuta Stenka und Jan Peszek, aufgenommen." - -#~ msgid "See also" -#~ msgstr "Sehe auch" - -#~ msgid "Theme" -#~ msgstr "Motiv" - -#~ msgid "in work " -#~ msgstr "im Werk" - -#~ msgid "This work is licensed under:" -#~ msgstr "Das Werk ist unter der Lizenz verfügbar" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " Creative Commons Attribution-ShareAlike 3.0\n" -#~ " license." -#~ msgstr "" -#~ "Dieses Werk ist nicht urheberrechtlich geschützt, dass sie frei benutzt " -#~ "werden kann, vervielfältigt und veröffentlicht. Wenn es irgendwelche " -#~ "zusätzlichen ürheberrechtlich geschützten Materialien an diesem Werk gibt " -#~ "(Anmerkungen, Motive), sind sie unter der Lizenz http://creativecommons." -#~ "org/licenses/by-sa/3.0/ verfügbar." - -#~ msgid "Text prepared based on:" -#~ msgstr "Der vorbereitete Text basiert auf:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Herausgegeben und mit Anmerkungen versehen von:" - -#~ msgid "Listing of all works" -#~ msgstr "Werkverzeichnis" - -#~ msgid "Table of Content" -#~ msgstr "Inhaltsverzeichnis" - -#~ msgid "↑ top ↑" -#~ msgstr "nach oben" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Leg das Buch aufs Regal ab!" - -#~ msgid "Create new shelf" -#~ msgstr "Neues Bücherregal erstellen" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Keine neue Bücherregale vorhanden. Wenn du willst, kannst du ein neues " -#~ "Bücherregal erstellen." - -#~ msgid "Put on the shelf!" -#~ msgstr "Leg aufs Regal ab!" - -#~ msgid "Epoch" -#~ msgstr "Epoche" - -#~ msgid "Kind" -#~ msgstr "Art" - -#~ msgid "Genre" -#~ msgstr "Gattung" - -#~ msgid "Read online" -#~ msgstr "Online lesen" - -#~ msgid "Download" -#~ msgstr "Herunterladen" - -#~ msgid "to print" -#~ msgstr "Drucken" - -#~ msgid "for an e-book reader" -#~ msgstr "für E-Book-Reader" - -#~ msgid "for Kindle" -#~ msgstr "für Kindle" - -#, fuzzy -#~ msgid "for advanced usage" -#~ msgstr "fortgeschritten" - -#~ msgid "Listen" -#~ msgstr "Hören" - -#~ msgid "Table of contents" -#~ msgstr "Inhalt" - -#~ msgid "Themes" -#~ msgstr "Motive" - -#~ msgid "Edit. note" -#~ msgstr "Edit. note" - -#~ msgid "Infobox" -#~ msgstr "Infobox" - -#~ msgid "Book's page" -#~ msgstr "Buchseite" - -#, fuzzy -#~ msgid "for a reader" -#~ msgstr "zum Lesen" - -#, fuzzy -#~ msgid "for advanced usege" -#~ msgstr "fortgeschritten" - -#, fuzzy -#~ msgid "Download a custom PDF" -#~ msgstr "PDF-Datei herunterladen" - -#~ msgid "Motifs and themes" -#~ msgstr "Motive und Themen" - -#~ msgid "See" -#~ msgstr "Siehe" - -#~ msgid "Source" -#~ msgstr "Quelle" - -#, fuzzy -#~ msgid "of the book" -#~ msgstr "Buchquelle" - -#~ msgid "Source XML file" -#~ msgstr "Quelle der XML-Datei" - -#~ msgid "Book on" -#~ msgstr "Buch über" - -#~ msgid "Editor's Platform" -#~ msgstr "Die Plattform des Editors" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "Buchbeschreibung in Lektury.Gazeta.pl" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "Buchbeschreibung in Wikipedia" - -#~ msgid "Mix this book" -#~ msgstr "Mische dieses Buch" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "Alle Audiobücher zu diesem Buch herunterladen" - -#~ msgid "Catalogue" -#~ msgstr "Katalog" - -#~ msgid "Authors" -#~ msgstr "Autoren" - -#~ msgid "Kinds" -#~ msgstr "Arten" - -#~ msgid "Genres" -#~ msgstr "Gattungen" - -#~ msgid "Epochs" -#~ msgstr "Epochen" - -#~ msgid "Themes and topics" -#~ msgstr "Motive und Themen" - -#, fuzzy -#~ msgid "Listing of all DAISY files" -#~ msgstr "Werkverzeichnis" - -#, fuzzy -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "Werkverzeichnis" - -#~ msgid "" -#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" -#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -#~ "ograniczeń." -#~ msgstr "" -#~ "DAISY-System ist ein weltweit populäres Format, Bücher zur Verfügung zu " -#~ "stellen \n" -#~ "Es ist angepasst an Bedüfnisse von Sehbehinderten, Blinden und anderen " -#~ "Menschen, die Leseprobleme haben.\n" -#~ "Sie können die Sammlung kostenlos und ohne Beschränkugen nutzen." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "" -#~ "Die Kriterien sind zweitdeutig. Bitte wählen Sie eine der folgenden " -#~ "Möglichkeiten." - -#~ msgid "Shelves containing fragment" -#~ msgstr "Regale mit Buchauszügen" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Keine neue Bücherregale vorhanden. Wenn du willst, kannst du ein neues " -#~ "Bücherregal erstellen." - -#~ msgid "Save all shelves" -#~ msgstr "Alle Bücherregale speichern" - -#~ msgid "Expand fragment" -#~ msgstr "Buchauszug aufklappen" - -#~ msgid "Hide fragment" -#~ msgstr "Buchauszug zuklappen" - -#~ msgid "See full category" -#~ msgstr "Alle Kategorien ansehen" - -#, fuzzy -#~ msgid "All books" -#~ msgstr "Alle Bücher" - -#~ msgid "Audiobooks" -#~ msgstr "Audiobücher" - -#~ msgid "DAISY" -#~ msgstr "DAISY" - -#~ msgid "Work is licensed under " -#~ msgstr "Das Werk ist unter der Lizenz verfügbar" - -#~ msgid "Based on" -#~ msgstr "Basiert auf" - -#~ msgid "Details" -#~ msgstr "Einzelheiten" - -#~ msgid "Author" -#~ msgstr "Autor" - -#~ msgid "Other resources" -#~ msgstr "Andere Ressourcen" - -#, fuzzy -#~ msgid "Source of the image" -#~ msgstr "Bildquelle" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "Image auf dem Platform des Editors" - -#~ msgid "View XML source" -#~ msgstr "Siehe die XML-Quelle" - -#~ msgid "Work's themes " -#~ msgstr "Werkmotive" - -#, fuzzy -#~ msgid "Listing of all pictures" -#~ msgstr "Abbildungenverzeichnis" - -#~ msgid "Download as" -#~ msgstr "Herunterladen als" - -#~ msgid "Artist" -#~ msgstr "Schriftsteller" - -#~ msgid "Director" -#~ msgstr "Regisseur" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "Audiobücher wurden als Teil der folgenden Projekte vorbereitet:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "%(cs)s, gestiftet von %(fb)s" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "Audiobücher wurden als Teil des Projektes %(cs)s, finanziert von: %(fb)s." - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "Audiobücher wurden als Teil des Projektes %(cs)s vorbereitet." - -#~ msgid "Did you mean" -#~ msgstr "Meinten Sie" - -#~ msgid "Results by authors" -#~ msgstr "Ergebnisse von Autoren" - -#~ msgid "Results by title" -#~ msgstr "Ergebnisse von Titeln" - -#~ msgid "Results in text" -#~ msgstr "Ergebnisse im Text" - -#, fuzzy -#~ msgid "Other results" -#~ msgstr "Andere Ergebnisse" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "Sorry! Die Suche ergab leider keine Treffer." - -#~ msgid "" -#~ "Search engine supports following criteria: title, author, theme/topic, " -#~ "epoch, kind and genre.\n" -#~ "\t\tAs for now we do not support full text search." -#~ msgstr "" -#~ "Die Suchemaschine berücksichtigt folgende Kriterien: Titel, Autor, Motiv/" -#~ "Thema, Epoche, Literaturgattung und Gattungsart. \n" -#~ "\t\tDie Suche nach Text-Phrasen wird momentan nicht unterstützt." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "Ihre Suchanfrage muss mindestens zwei Zeichen enthalten." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "in Lektury.Gazeta.pl" - -#~ msgid "in Wikipedia" -#~ msgstr "in Wikipedia" - -#~ msgid "Your shelves with books" -#~ msgstr "Deine Bücherregale" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "Keine neuen Bücherregale vorhanden. Wenn du willst, kannst du ein neues " -#~ "Bücherregal erstellen." - -#~ msgid "Create shelf" -#~ msgstr "Bücherregal erstellen" - -#~ msgid "author" -#~ msgstr "Autor" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "Lehrmaterialien" - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "Lese Werkanalyse dieses Autors in Lektury.Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "Lese den Beitrag über diesen Autor in Wikipedia" - -#~ msgid "This author's works are copyrighted." -#~ msgstr "Die Werke dieses Autors sind urheberrechtlich geschützt." - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "Finde " -#~ "heraus, warum Internet-Bibliotheken dürfen Werke dieses Autors nicht " -#~ "zugänglich machen." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "Dieses Werk ist zur öffentlichen Nutzung vorgesehen und wird bald in der " -#~ "Internetbibliothek Wolne Lektury veröffentlicht sein." - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "Die Werke dieses Autors werden bald zur öffentlichen Nutzung freigestellt " -#~ "und können in der Zukunft ohne weitere Einschränkungen veröffentlicht " -#~ "werden." - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "Dieses Werk ist zur öffentlichen Nutzung vorgesehen und wird bald in der " -#~ "Internetbibliothek Wolne Lektury veröffentlicht sein." - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "Dieses Werk wird bald zur öffentlichen Nutzung freigestellt und kann in " -#~ "der Zukunft ohne weitere Einschränkungen veröffentlicht werden" - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this work." -#~ msgstr "" -#~ "Finde " -#~ "heraus, warum Internet-Bibliotheken die Werke dieses Autors nicht " -#~ "veröffentlichen dürfen." - -#~ msgid "This work is copyrighted." -#~ msgstr "Dieses Werk ist urheberrechtlich geschützt." - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "Einloggen in WolneLektury.pl" - -#~ msgid "Login" -#~ msgstr "Login" - -#~ msgid "" -#~ "Internet Explorer cannot display this site properly. Click here to read " -#~ "more..." -#~ msgstr "" -#~ "Diese Seite kann nicht richtig im Internet Explorer angezeigt werden. " -#~ "Klicken Sie hier, um mehr zu lesen..." - -#~ msgid "Your shelves" -#~ msgstr "Deine Bücherregale" - -#~ msgid "Register on" -#~ msgstr "Registrieren" - -#~ msgid "or" -#~ msgstr "oder" - -#~ msgid "return to main page" -#~ msgstr "Zur Startseite wechseln" - -#, fuzzy -#~ msgid "Listing of all audiobooks on WolneLektury.pl" -#~ msgstr "Werkverzeichnis unter WolneLektury.pl" - -#~ msgid "Put a book" -#~ msgstr "Buch ablegen" - -#~ msgid "on the shelf!" -#~ msgstr "aufs Regal!" - -#~ msgid "and printing using" -#~ msgstr "drucken mit" - -#~ msgid "Download EPUB" -#~ msgstr "EPUB-Datei herunterladen" - -#~ msgid "Download TXT" -#~ msgstr "TXT-Datei herunterladen" - -#~ msgid "on small displays, for example mobile phones" -#~ msgstr "auf kleines Display, z. B. Handy" - -#~ msgid "Download ODT" -#~ msgstr "ODT-Datei herunterladen" - -#~ msgid "and editing using" -#~ msgstr "bearbeiten mit" - -#~ msgid "Book on project's wiki" -#~ msgstr "Schullektüre auf WikiProjekt" - -#~ msgid "on" -#~ msgstr "auf" - -#~ msgid "See description" -#~ msgstr "Beschreibung ansehen" - -#~ msgid "Listing of all works on WolneLektury.pl" -#~ msgstr "Werkverzeichnis unter WolneLektury.pl" - -#~ msgid "Jump to" -#~ msgstr "Überspringen" - -#~ msgid "Categories" -#~ msgstr "Kategorien" - -#, fuzzy -#~ msgid "Listing of all DAISY files on WolneLektury.pl" -#~ msgstr "Werkverzeichnis unter WolneLektury.pl" - -#~ msgid "Show full category" -#~ msgstr "Alle Kategorien anzeigen" - -#~ msgid "Hide" -#~ msgstr "weniger" - -#~ msgid "Browse books by categories" -#~ msgstr "Bücher nach ausgewählten Kategorien ansehen" - -#~ msgid "delete" -#~ msgstr "löschen" - -#~ msgid "" -#~ "Create your own book set. You can share it with friends by sending them " -#~ "link to your shelf." -#~ msgstr "" -#~ "Erstelle dein eigenes Bücherregal. Du kannst es später mal mit deinen " -#~ "Freunden teilen, indem du den Link an sie verschickst." - -#~ msgid "You need to " -#~ msgstr "Um deine Bücherregale zu verwalten " - -#~ msgid "sign in" -#~ msgstr "musst du angemeldet sein" - -#~ msgid "to manage your shelves." -#~ msgstr "Bücherregale verwalten" - -#~ msgid "" -#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." -#~ msgstr "" -#~ "Unterrichtsszenarien und andere Ideen für die Verwendung von Wolnelektury." -#~ "pl für das Unterricht" - -#~ msgid "" -#~ "are professional recordings of literary texts from our repository, " -#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " -#~ "DAISY system." -#~ msgstr "" -#~ "sind professionelle Aufnahmen literarischer Texte aus unserer Sammlung, " -#~ "die unter freier Lizenz in folgenden Formaten verfügbar sind: MP3-und Ogg-" -#~ "Vorbis-Formate sowie im DAISY-System." - -#~ msgid "Themes groups" -#~ msgstr "Motivketten" - -#~ msgid "See our blog" -#~ msgstr "Siehe unseren Blog" - -#~ msgid "You can help us!" -#~ msgstr "Du kannst uns helfen!" - -#~ msgid "" -#~ "We try our best to elaborate works appended to our library. It is " -#~ "possible only due to support of our volunteers." -#~ msgstr "" -#~ "Wir sind stets bemüht, unseren Bibliothekbestand ständig um neue Werke zu " -#~ "erweitern. Dies ist nur dank der Hilfe unserer Volontäre möglich." - -#~ msgid "" -#~ "We invite people who want to take part in developing Internet school " -#~ "library Wolne Lektury." -#~ msgstr "" -#~ "Wir laden herzlich alle Personen ein, die sich an der Mitgestaltung " -#~ "unserer Internet-Schulbibliothek beteiligen wollen." - -#~ msgid "About us" -#~ msgstr "Über das Projekt" - -#~ msgid "" -#~ "\n" -#~ "\t\t\tInternet library with school readings “Wolne Lektury” (www.wolnelektury.pl) is a project made by " -#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " -#~ "which are recommended by Ministry of National Education and are in public " -#~ "domain.\n" -#~ "\t\t\t" -#~ msgstr "" -#~ "\n" -#~ "\t\t\tSchulbücher “Wolne Lektury” in der Internetbibliothek(www.wolnelektury.pl) ist ein Projekt, das " -#~ "von der Stiftung Modernes Polen gefördert wird. Die Stiftung ist seit " -#~ "2007 tätig und hat bisher viele Schulbücher aus dem Bibliothekbestand zur " -#~ "öffentlichen Nutzung freigestellt. Die Schulbücher werden ausdrücklich " -#~ "vom Bildungsministerium empfohlen.\n" -#~ "\t\t\t" - -#~ msgid "Searching in" -#~ msgstr "Suchen in" - -#~ msgid "More than one result matching the criteria found." -#~ msgstr "Es wurden mehrere Treffer in dieser Kategorie gefunden." - -#~ msgid "Search in WolneLektury.pl" -#~ msgstr "Suche unter WolneLektury.pl" - -#~ msgid "Your shelf is empty" -#~ msgstr "Dein Bücherregal ist leer" - -#~ msgid "" -#~ "You can put a book on a shelf by entering page of the reading and " -#~ "clicking 'Put on the shelf'." -#~ msgstr "" -#~ "Du kannst das Buch aufs Regal ablegen, indem du \" aufs Regal!\" - Button " -#~ "anklickst." - -#~ msgid "Choose books' formats which you want to download:" -#~ msgstr "Wähle Buchformate aus, die du herunterladen möchtest:" - -#~ msgid "for listening" -#~ msgstr "zum Hören" - -#~ msgid "on favourite MP3 player" -#~ msgstr "auf Lieblings-MP3-Player" - -#~ msgid "Xiph.org Foundation" -#~ msgstr "Xiph.org Stiftung" - -#~ msgid "Updating list of books' formats on the shelf" -#~ msgstr "Liste der Buchformate auf dem Regal aktualisieren" - -#~ msgid "cancel" -#~ msgstr "löschen" - -#~ msgid "Share this shelf" -#~ msgstr "Teile dieses Bücherregal" - -#~ msgid "" -#~ "Copy this link and share it with other people to let them see your shelf." -#~ msgstr "" -#~ "Kopiere diesen Link und verschicke an Personen, mit denen du dein " -#~ "Bücherregal teilen willst." - -#, fuzzy -#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Lies Werkanalyse dieses Autors unter Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Lies Werkanalyse dieses Autors unter Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Lies Werkanalyse dieses Autors unter Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read related study on Lektury.Gazeta.pl" -#~ msgstr "Lies Werkanalyse dieses Autors unter Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" -#~ msgstr "Lies den Beitrag über diesen Autor auf Wikipedia" - -#, fuzzy -#~ msgid "Read article about kind %(last_tag)s on Wikipedia" -#~ msgstr "Lies den Beitrag über diesen Autor auf Wikipedia" - -#, fuzzy -#~ msgid "Read article about genre %(last_tag)s on Wikipedia" -#~ msgstr "Lies den Beitrag über diesen Autor auf Wikipedia" - -#, fuzzy -#~ msgid "Read related article on Wikipedia" -#~ msgstr "Lies den Beitrag über diesen Autor auf Wikipedia" - -#~ msgid "Delete" -#~ msgstr "Löschen" - -#~ msgid "return to the main page" -#~ msgstr "zur Startseite wechseln" - -#~ msgid "return to list of materials" -#~ msgstr "zurück zur Materialienliste" - -#~ msgid "Hand-outs for teachers on " -#~ msgstr "Lehrmaterialien" - -#, fuzzy -#~ msgid "" -#~ "Download TXT - for reading on small displays, for example mobile phones" -#~ msgstr "auf kleines Display, z. B. Handy" - -#~ msgid "Download MP3" -#~ msgstr "MP3-Datei herunterladen" - -#~ msgid "Download Ogg Vorbis" -#~ msgstr "Ogg Vorbis-Datei herunterladen" - -#~ msgid "Download DAISY" -#~ msgstr "DAISY10-Datei herunterladen" - -#~ msgid "check list of books" -#~ msgstr "Siehe Bücherliste" - -#~ msgid "in our repository" -#~ msgstr "in unserer Sammlung" - -#~ msgid "Polish" -#~ msgstr "Polnisch" - -#~ msgid "German" -#~ msgstr "Deutsch" - -#~ msgid "English" -#~ msgstr "Englisch" - -#~ msgid "Lithuanian" -#~ msgstr "Litauisch" - -#~ msgid "French" -#~ msgstr "Französisch" - -#~ msgid "Russian" -#~ msgstr "Russisch" - -#~ msgid "Spanish" -#~ msgstr "Spanisch" - -#~ msgid "Ukrainian" -#~ msgstr "Ukrainisch" - -#~ msgid "Choose your interface language: " -#~ msgstr "Wählen Sie Ihre Sprache:" - -#~ msgid "Choose language" -#~ msgstr "Sprache wählen" - -#~ msgid "Hide description" -#~ msgstr "Beschreibung ausblenden" - -#~ msgid "Read study of epoch" -#~ msgstr "Lies Epochenanalyse" - -#~ msgid "Read article about epoch" -#~ msgstr "Lies den Beitrag aus dieser Epoche" diff --git a/apps/wolnelektury_core/locale/en/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index 54c22ef01..000000000 Binary files a/apps/wolnelektury_core/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/en/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index d5cfb827e..000000000 --- a/apps/wolnelektury_core/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,796 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \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:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Sign in" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "Register" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "You have to be logged in to continue" - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Page does not exist" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "Page not found" - -#: templates/404.html:14 -msgid "" -"We are sorry, but this page does not exist. Please check if you entered " -"correct address or go to " -msgstr "" -"We are sorry, but this page does not exist. Please check if the address you " -"entered is correct you entered or go to " - -#: templates/404.html:14 -msgid "main page" -msgstr "main page" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "Server error" - -#: templates/500.html:19 -msgid "" -"

                The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"blog.

                Inform our administrators about the " -"error.

                " -msgstr "" -"

                Wolnelektury.pl is currently unavailable. Meanwhile, visit our website.

                Inform our administrators about the " -"error.

                " - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "Service unavailable" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "" -"The website Wolnelektury.pl is currently unavailable due to maintainance." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "Wolne Lektury Internet library" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "Latest publications" - -#: templates/main_page.html:41 -msgid "News" -msgstr "News" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "Tools" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "Report an error or make a suggestion" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "Download the catalogue in PDF format." - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "Widget" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "Missing a book?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "Publishing plan" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "Information" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "Image used:" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" %(c)s free reading you have right to\n" -" " -msgid_plural "" -"\n" -" %(c)s free readings you have right to\n" -" " -msgstr[0] "" -"\n" -" %(c)s free reading you have right to\n" -" " -msgstr[1] "" -"\n" -" %(c)s free readings you have right to\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "Welcome" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "" - -#: templates/superbase.html:74 templates/user.html:14 -#, fuzzy -msgid "Social accounts" -msgstr "or join accounts:" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "My shelf" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "Administration" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "Logout" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "Search" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "Language versions" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" -"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" -"\t\t\t\tHosting: ICM.\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tWolne Lektury is a project carried out by the Modern Poland Foundation.\n" -"\t\t\t\tDigital reproductions are made by The National Library, the " -"Silesian Library and the " -"Library of Elbląg, based on NL, US and LE resources.\n" -"\t\t\t\tHosting: ICM.\n" -"\t\t\t\t\"" - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "Close" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "Loading" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Site administration" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "Translations" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "advanced" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "simplified" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "Import book" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -#, fuzzy -msgid "Sign in using:" -msgstr "Sign in" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "or register" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgstr[0] "" -"\n" -"We have %(c)s works published at Wolne Lektury!\n" -"Help us expand our library and set new readings free by\n" -"making a donation\n" -"or donating 1% your income tax.\n" -msgstr[1] "" -"\n" -"We have %(c)s works published at Wolne Lektury!\n" -"Help us expand our library and set new readings free by\n" -"making a donation\n" -"or donating 1% of your income tax.\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" -"Become an editor of Wolne Lektury! Find out if\n" -"we are currently working on a reading you are looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "More..." - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "" - -#: templates/openid/login.html:27 -#, fuzzy -msgid "Sign In" -msgstr "Sign in" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "previous" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "next" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "Authorize access to Wolne Lektury" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user %(user)s." -msgstr "" -"Confirm to authorize access to Wolne Lektury as %(user)s." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: templates/socialaccount/connections.html:36 -#, fuzzy -msgid "Remove" -msgstr "remove" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "" - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" - -#~ msgid "Listing of all audiobooks" -#~ msgstr "List of the audiobooks" - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "Latest MP3 audiobooks" - -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "Latest Ogg Vorbis audiobooks" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "Audio library of required readings of Modern Poland Foundation.\n" -#~ "It is free of charge and you can use it without any limits. \n" -#~ "Audiobooks are recorded with the participation of famous Polish actors " -#~ "like Danuta Stenka or Jan Peszek." - -#~ msgid "See also" -#~ msgstr "See also" - -#~ msgid "Theme" -#~ msgstr "Theme" - -#~ msgid "in work " -#~ msgstr "in work " - -#~ msgid "This work is licensed under:" -#~ msgstr "This work is licensed under:" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " Creative Commons Attribution-ShareAlike 3.0\n" -#~ " license." -#~ msgstr "" -#~ "This work is not covered by copyright and is a part of the\n" -#~ " public domain, which means that it can be used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " Creative Commons Attribution-ShareAlike 3.0\n" -#~ " license." - -#~ msgid "Text prepared based on:" -#~ msgstr "Text based on:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Edited and annotated by:" - -#~ msgid "Listing of all works" -#~ msgstr "List of all works" - -#~ msgid "Table of Content" -#~ msgstr "Table of Contents" - -#~ msgid "↑ top ↑" -#~ msgstr "↑ top ↑" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Put this book on the shelf!" - -#~ msgid "Create new shelf" -#~ msgstr "Create new shelf" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "You do not have any shelves. You can create one below, if you want to." - -#~ msgid "Put on the shelf!" -#~ msgstr "Put on the shelf!" - -#~ msgid "Epoch" -#~ msgstr "Period" - -#~ msgid "Kind" -#~ msgstr "Form" - -#~ msgid "Genre" -#~ msgstr "Genre" - -#~ msgid "Read online" -#~ msgstr "Read online" - -#~ msgid "Download" -#~ msgstr "Download" - -#~ msgid "to print" -#~ msgstr "to print" - -#~ msgid "for an e-book reader" -#~ msgstr "for an e-book reader" - -#~ msgid "for Kindle" -#~ msgstr "for Kindle" - -#, fuzzy -#~ msgid "for advanced usage" -#~ msgstr "advanced" - -#~ msgid "Listen" -#~ msgstr "Listen" - -#~ msgid "Table of contents" -#~ msgstr "Table of contents" - -#~ msgid "Themes" -#~ msgstr "Themes" - -#~ msgid "Edit. note" -#~ msgstr "Edit. note" - -#~ msgid "Infobox" -#~ msgstr "Infobox" - -#~ msgid "Book's page" -#~ msgstr "Book's page" - -#~ msgid "for a reader" -#~ msgstr "for a reader" - -#, fuzzy -#~ msgid "for advanced usege" -#~ msgstr "advanced" - -#~ msgid "Download a custom PDF" -#~ msgstr "Download a custom PDF" - -#~ msgid "Motifs and themes" -#~ msgstr "Motifs and themes" - -#~ msgid "See" -#~ msgstr "See" - -#~ msgid "Source" -#~ msgstr "Source" - -#~ msgid "of the book" -#~ msgstr "of the book" - -#~ msgid "Source XML file" -#~ msgstr "Source XML file" - -#~ msgid "Book on" -#~ msgstr "Book on" - -#~ msgid "Editor's Platform" -#~ msgstr "Editor's Platform" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "Book description on Lektury.Gazeta.pl" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "Book description on Wikipedia" - -#~ msgid "Mix this book" -#~ msgstr "Mix this book" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "Download all audiobooks for this book" - -#~ msgid "Catalogue" -#~ msgstr "Catalogue" - -#~ msgid "Authors" -#~ msgstr "Authors" - -#~ msgid "Kinds" -#~ msgstr "Forms" - -#~ msgid "Genres" -#~ msgstr "Genres" - -#~ msgid "Epochs" -#~ msgstr "Periods" - -#~ msgid "Themes and topics" -#~ msgstr "Motifs and themes" - -#~ msgid "Listing of all DAISY files" -#~ msgstr "List of all DAISY files" - -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "Latest DAISY audiobooks" - -#~ msgid "" -#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" -#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -#~ "ograniczeń." -#~ msgstr "" -#~ "The internationally recognized DAISY book format \n" -#~ "provides the best possible standardized access to books for people who " -#~ "are \n" -#~ "partially sighted, blind or are dyslexic. It is free of charge and you " -#~ "can use it without any limits." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "" -#~ "The criteria are ambiguous. Please select one of the following options:" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Shelves containing fragment" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "You do not own any shelves. You can create one below, if you want to." - -#~ msgid "Save all shelves" -#~ msgstr "Save all shelves" - -#~ msgid "Expand fragment" -#~ msgstr "Expand fragment" - -#~ msgid "Hide fragment" -#~ msgstr "Hide fragment" - -#~ msgid "See full category" -#~ msgstr "See full category" - -#~ msgid "All books" -#~ msgstr "All books" - -#~ msgid "Audiobooks" -#~ msgstr "Audiobooks" - -#~ msgid "DAISY" -#~ msgstr "DAISY" - -#~ msgid "Work is licensed under " -#~ msgstr "Work is licensed under " - -#~ msgid "Based on" -#~ msgstr "Based on" - -#~ msgid "Details" -#~ msgstr "Details" - -#~ msgid "Author" -#~ msgstr "Author" - -#~ msgid "Other resources" -#~ msgstr "Other sources" - -#~ msgid "Source of the image" -#~ msgstr "Source of the image" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "Image on the Editor's Platform" - -#~ msgid "View XML source" -#~ msgstr "View XML source" - -#~ msgid "Work's themes " -#~ msgstr "Work's themes " - -#~ msgid "Listing of all pictures" -#~ msgstr "List of all pictures" - -#~ msgid "Download as" -#~ msgstr "Download as" - -#~ msgid "Artist" -#~ msgstr "Reader" - -#~ msgid "Director" -#~ msgstr "Director" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "Audiobooks were prepared as a part of the following projects:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "%(cs)s, funded by %(fb)s" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "Audiobooks were prepared as a part of the %(cs)s project." - -#~ msgid "Did you mean" -#~ msgstr "Did you mean" - -#~ msgid "Results by authors" -#~ msgstr "Results by authors" - -#~ msgid "Results by title" -#~ msgstr "Results by title" - -#~ msgid "Results in text" -#~ msgstr "Results in text" - -#~ msgid "Other results" -#~ msgstr "Other results" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "Sorry! Search cirteria did not match any resources." - -#~ msgid "" -#~ "Search engine supports following criteria: title, author, theme/topic, " -#~ "epoch, kind and genre.\n" -#~ "\t\tAs for now we do not support full text search." -#~ msgstr "" -#~ "Search engine supports following criteria: title, author, theme/topic, " -#~ "period, form and genre.\n" -#~ "\t\tAs for now we do not support full text search." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "Sorry! Search query must have at least two characters." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "in Lektury.Gazeta.pl" - -#~ msgid "in Wikipedia" -#~ msgstr "in Wikipedia" - -#~ msgid "Your shelves with books" -#~ msgstr "Your shelves with books" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "You do not own any shelves. You can create one below if you want to" - -#~ msgid "Create shelf" -#~ msgstr "Create shelf" - -#~ msgid "author" -#~ msgstr "author" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "Handouts for teachers" - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "Read work's study of this author on Lektury.Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "Read article about this author on Wikipedia" - -#~ msgid "This author's works are copyrighted." -#~ msgstr "This author's works are copyrighted." - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "Find " -#~ "out why Internet libraries cannot publish this author's works." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet library of Wolne Lektury soon." - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "This author's works will become part of public domain and will be " -#~ "published without restrictions in" - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "This work is in public domain and will be published on Internet library " -#~ "of Wolne Lektury soon." - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "This work will become part of public domain and will be published without " -#~ "restrictions in" - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this work." -#~ msgstr "" -#~ "Find " -#~ "out why Internet libraries cannot publish this work." - -#~ msgid "This work is copyrighted." -#~ msgstr "This work is copyrighted." - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "Login to Wolne Lektury" - -#~ msgid "Login" -#~ msgstr "Login" diff --git a/apps/wolnelektury_core/locale/es/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index b00c569b3..000000000 Binary files a/apps/wolnelektury_core/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/es/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index e60b97811..000000000 --- a/apps/wolnelektury_core/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,1105 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Iniciar sesión" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "Ya has iniciado sesión como usuario %(user)s" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "Registrarse" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "Tienes que iniciar sesión para continuar" - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Página no existe" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "Página no encontrada" - -#: templates/404.html:14 -msgid "" -"We are sorry, but this page does not exist. Please check if you entered " -"correct address or go to " -msgstr "" -"Lo sentimos, esta página no existe. Compruebue si la dirección es correcta o " -"pase a" - -#: templates/404.html:14 -msgid "main page" -msgstr "página principal" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "Error del servidor" - -#: templates/500.html:19 -msgid "" -"

                The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"blog.

                Inform our administrators about the " -"error.

                " -msgstr "" -"

                La página Wolnelektury.pl actualmente no está disponible. Mientras tanto " -"visita nuestro blog.

                " -"

                Informa a nuestros administradores sobre el error.

                " - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "Servicio no está disponible" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "La página Wolnelektury.pl no está disponible debido al mantenimiento." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "La biblioteca virtual WolneLektury.pl" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "Novedades" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "Publicaciones recientes" - -#: templates/main_page.html:41 -msgid "News" -msgstr "Noticias" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "Herramientas" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "Reporta un error o una sugerencia" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "Descarga el catálogo en el formato PDF" - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "Widget" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "¿Falta un libro?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "Plan de publicación" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "Información" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "La imagen usada:" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "Regístrate en WolneLektury.pl" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" %(c)s free reading you have right to\n" -" " -msgid_plural "" -"\n" -" %(c)s free readings you have right to\n" -" " -msgstr[0] "" -"\n" -" %(c)s tienes lecturas libres right to\n" -" " -msgstr[1] "" -"\n" -" %(c)s free readings you have right to\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "Bienvenido" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "Contraseña" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "Correo electrónico" - -#: templates/superbase.html:74 templates/user.html:14 -msgid "Social accounts" -msgstr "Cuentas sociales" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "Mi estante" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "Administración" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "Cerrar sesión" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "Buscar" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "Versiones de idiomas" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" -"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" -"\t\t\t\tHosting: ICM.\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tWolne Lektury es un proyecto dirigido por la Fundación Polonia Moderna.\n" -"\t\t\t\tReproducciones digitales están preparadas por La Biblioteca Nacional, en base de los recursos de la BN. \n" -"\t\t\t\tHosting EO Networks.\n" -"\t\t\t\t " - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tFundación Polonia Moderna, c/ Marszałkowska 84/92, lok. 125, 00-514 " -"Varsovia, tel/fax: +48 (22) 621-30-17\n" -" e-mail: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "Cerrar" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "Cargando" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "Usuario" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Administración de la página" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "Traducciones" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "avanzado" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "simplificado" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "Importar libro" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "¿Olvidaste tu contraseña?" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -msgid "Sign in using:" -msgstr "Iniciar sesión con:" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "o registrarse" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgstr[0] "" -"\n" -"Tenemos %(c)s obras publicadas en Wolne Lektury!Ayúdanos ampliar la " -"biblioteca y libera lecturas nuevas \n" -" - haz una " -"donación \n" -" o dona 1 porcentaje de tu impuesto .\n" -msgstr[1] "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" -"Hazte el editor de Wolne Lektury! Averigua si\n" -"actualmente estamos preparando la lectura que te interesa y prepara\n" -"una publicación por ti mismo/a inscribiéndote en la Plataforma Editorial." - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "Más..." - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "Iniciar sesión con OpenID " - -#: templates/openid/login.html:27 -#, fuzzy -msgid "Sign In" -msgstr "Iniciar sesión" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "anterior" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "siguiente" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "Autoriza el acceso a Wolne Lektury" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user %(user)s." -msgstr "" -"Confirma para autorizar el acceso a Wolne Lektury como el usuario " -"%(user)s." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Conexiones de la cuenta de usuario" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"Puede iniciar sesión en su cuenta de usuario a través de cualquiera de las " -"siguientes cuentas de terceros:" - -#: templates/socialaccount/connections.html:36 -msgid "Remove" -msgstr "Borrar" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "" -"Actualmente no tiene ninguna cuenta social relacionada con esta cuenta de " -"usuario." - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "Agrega una cuenta de terceros" - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "Inicio de sesión cancelado" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" -"Ha decidido anular lo de iniciar sesión en nuestra página usando una de sus " -"cuentas de usuario existentes. Si se ha equivocado, pase asign in, por favor." - -#~ msgid "Listing of all audiobooks" -#~ msgstr "Lista de todos los audiolibros" - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "Los últimos audiolibros en el formato MP3" - -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "Los últimos audiolibros en el formato Ogg" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "Colección de grabaciones de libros de lectura obligatoria de la Fundación " -#~ "Polonia Moderna.Es gratuita y libre.Los audiolibros están grabados por " -#~ "actores y actrices conocidos/as, como Danuta Stenka y Jan Peszek." - -#~ msgid "See also" -#~ msgstr "Ve también" - -#~ msgid "Theme" -#~ msgstr "Tema" - -#~ msgid "in work " -#~ msgstr "de la obra" - -#~ msgid "This work is licensed under:" -#~ msgstr "Esta obra se distribuye bajo licencia" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " Creative Commons Attribution-ShareAlike 3.0\n" -#~ " license." -#~ msgstr "" -#~ "Esta obra está libre de derechos de autor y es de dominio público, por " -#~ "ende se puede usar,publicar y difundir libremente. Si esta obra tiene " -#~ "materiales adicionales (como notas a pie de pá gina, temas lutrarios, " -#~ "etc.), que no esten libres de derechos de autor, dichos materiales están " -#~ "publicados bajo la \n" -#~ "Creative " -#~ "Commons Attribution-ShareAlike 3.0\n" -#~ " licencia." - -#~ msgid "Text prepared based on:" -#~ msgstr "Texto preparado basado en:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Editado y anotado por:" - -#~ msgid "Listing of all works" -#~ msgstr "Lista de las obras" - -#~ msgid "Table of Content" -#~ msgstr "Índice" - -#~ msgid "↑ top ↑" -#~ msgstr "↑ la cabeza de página ↑" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "¡Poner un libro en el estante!" - -#~ msgid "Create new shelf" -#~ msgstr "Crear un estante nuevo" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "No tienes ningún estante. Puedes crear uno abajo si quieres." - -#~ msgid "Put on the shelf!" -#~ msgstr "¡Poner en el estante!" - -#~ msgid "Epoch" -#~ msgstr "Época" - -#~ msgid "Kind" -#~ msgstr "Género" - -#~ msgid "Genre" -#~ msgstr "Subgénero" - -#~ msgid "Read online" -#~ msgstr "Leer online" - -#~ msgid "Download" -#~ msgstr "Descargar" - -#~ msgid "to print" -#~ msgstr "imprimir" - -#~ msgid "for an e-book reader" -#~ msgstr "para los usuarios de e-libros" - -#~ msgid "for Kindle" -#~ msgstr "para Kindle" - -#~ msgid "for advanced usage" -#~ msgstr "para el uso avanzado" - -#~ msgid "Listen" -#~ msgstr "Escucha" - -#~ msgid "Table of contents" -#~ msgstr "Índice" - -#~ msgid "Themes" -#~ msgstr "Temas" - -#~ msgid "Edit. note" -#~ msgstr "Editar nota" - -#~ msgid "Infobox" -#~ msgstr "Infobox" - -#~ msgid "Book's page" -#~ msgstr "volver a la página del libro" - -#~ msgid "for a reader" -#~ msgstr "para el lector" - -#, fuzzy -#~ msgid "for advanced usege" -#~ msgstr "avanzado" - -#~ msgid "Download a custom PDF" -#~ msgstr "Descarga un PDF personalisado" - -#~ msgid "Motifs and themes" -#~ msgstr "Temas" - -#~ msgid "See" -#~ msgstr "Ve" - -#~ msgid "Source" -#~ msgstr "Fuente" - -#~ msgid "of the book" -#~ msgstr "del libro" - -#~ msgid "Source XML file" -#~ msgstr "Archivo XML fuente" - -#~ msgid "Book on" -#~ msgstr "Libro en" - -#~ msgid "Editor's Platform" -#~ msgstr "La plataforma de redactor" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "Descripción del libro en Lektury.Gazeta.pl" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "Descripción del libro en Wikipedia" - -#~ msgid "Mix this book" -#~ msgstr "Mezcla est elibro" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "Descarga todos los audiolibros de este libro" - -#~ msgid "Catalogue" -#~ msgstr "Catálogo" - -#~ msgid "Authors" -#~ msgstr "Autores" - -#~ msgid "Kinds" -#~ msgstr "Géneros" - -#~ msgid "Genres" -#~ msgstr "Subgéneros" - -#~ msgid "Epochs" -#~ msgstr "Épocas" - -#~ msgid "Themes and topics" -#~ msgstr "Temas y motivos" - -#~ msgid "Listing of all DAISY files" -#~ msgstr "Lista de todos los archivos DAISY" - -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "Los últimos audiolibros en el formato DAISY" - -#~ msgid "" -#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" -#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -#~ "ograniczeń." -#~ msgstr "" -#~ "El sistema DAISY es un formato multimedio que permite acceder a los " -#~ "libros, adaptado para las necesidades de personas con baja visión, " -#~ "invidentes o las que tienes problemas para leer. Los podeis usar de " -#~ "manera gratuita y libre." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "" -#~ "Estos criterios son ambiguous. Por favor, selecta una de las siguientes " -#~ "opciones:" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Estentes que contienen este fragmento" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "No tienes ningún estante. Puedes crear uno abajo si quieres." - -#~ msgid "Save all shelves" -#~ msgstr "Guardar todos los estantes" - -#~ msgid "Expand fragment" -#~ msgstr "Ampliar este fragmento" - -#~ msgid "Hide fragment" -#~ msgstr "Esconder este fragmento" - -#~ msgid "See full category" -#~ msgstr "Ver toda la categoría" - -#~ msgid "All books" -#~ msgstr "Todos los libros" - -#~ msgid "Audiobooks" -#~ msgstr "Audiolibros" - -#~ msgid "DAISY" -#~ msgstr "DAISY" - -#~ msgid "Work is licensed under " -#~ msgstr "Las obras se distribuyen bajo licencia" - -#~ msgid "Based on" -#~ msgstr "Basado en" - -#~ msgid "Details" -#~ msgstr "Detalles" - -#~ msgid "Author" -#~ msgstr "Autor" - -#~ msgid "Other resources" -#~ msgstr "Otros recursos" - -#~ msgid "Source of the image" -#~ msgstr "Fuente de la imagen" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "La imagen en la Plataforma de el Editor" - -#~ msgid "View XML source" -#~ msgstr "Ver XML fuente" - -#~ msgid "Work's themes " -#~ msgstr "Temas de la obra" - -#~ msgid "Listing of all pictures" -#~ msgstr "Lista de todas la imagenes" - -#~ msgid "Download as" -#~ msgstr "Descarga como" - -#~ msgid "Artist" -#~ msgstr "Artista" - -#~ msgid "Director" -#~ msgstr "Director" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "Los audiolibros fueron preparados como la parte de los proyectos:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "%(cs)s, financiado por %(fb)s" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "Los audiolibros fueron preparados como parte del %(cs)s proyecto fundado " -#~ "por %(fb)s." - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "Los audiolibros fueron preparados como parte del %(cs)s proyecto" - -#~ msgid "Did you mean" -#~ msgstr "Quizás quisiste decir" - -#~ msgid "Results by authors" -#~ msgstr "Resultados por autores" - -#~ msgid "Results by title" -#~ msgstr "Resultados por el título" - -#~ msgid "Results in text" -#~ msgstr "Resultados en el texto" - -#~ msgid "Other results" -#~ msgstr "Otros resultados" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "" -#~ "Lo sentimos, no hay resultados que corresponden con los criterios de la " -#~ "búsqueda." - -#~ msgid "" -#~ "Search engine supports following criteria: title, author, theme/topic, " -#~ "epoch, kind and genre.\n" -#~ "\t\tAs for now we do not support full text search." -#~ msgstr "" -#~ "El buscador admite los criterios siguientes: título, autor, tema/motivo, " -#~ "época, género y subgénero.\n" -#~ "\t\tActualmente no admitimos la búsqueda de texto entero." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "¡Perdón! La pregunta debe tener por lo menos dos letras." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "en Lektury.Gazeta.pl" - -#~ msgid "in Wikipedia" -#~ msgstr "en Wikipedia" - -#~ msgid "Your shelves with books" -#~ msgstr "Tus estantes con libros" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "No tienes ningún estante. Puedes crear uno abajo si quieres." - -#~ msgid "Create shelf" -#~ msgstr "Crear un estante" - -#~ msgid "author" -#~ msgstr "autor" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "Materiales para los profesores" - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "Leer el artículo sobre este autor en Wikipedia" - -#~ msgid "This author's works are copyrighted." -#~ msgstr "Las obras de este autor están protegidas por los derechos de autor." - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "Entérate por qué las bibliotecas virtuales no pueden " -#~ "publicar las obras de este autor." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "Las obras de este autor se encuentran en el dominio público y pronto " -#~ "serán publicadas en la biblioteca virtual de Wolne Lektury." - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "Las obras de este autor entrarán en los recursos del dominio público y " -#~ "podrán ser publicadas sin restricciones en " - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "Esta obra se encuentra en el dominio público y pronto será publicada en " -#~ "la biblioteca electrónica de Wolne Lektury." - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "Esta obra entrará en los recursos del dominio público y podrá ser " -#~ "publicada sin restricciones en" - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this work." -#~ msgstr "" -#~ "Entérate por qué las bibliotecas virtuales no pueden " -#~ "publicar esta obra." - -#~ msgid "This work is copyrighted." -#~ msgstr "Esta obra está protegida por los derechos de autor." - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "Registrate en WolneLektury.pl" - -#~ msgid "Login" -#~ msgstr "Login" - -#~ msgid "" -#~ "Internet Explorer cannot display this site properly. Click here to read " -#~ "more..." -#~ msgstr "" -#~ "Internet Explorer no puede mostrar esta página correctamente. Haz clic " -#~ "aquí para saber más..." - -#~ msgid "Your shelves" -#~ msgstr "Tus estantes" - -#~ msgid "Register on" -#~ msgstr "Registrarse en" - -#~ msgid "or" -#~ msgstr "o" - -#~ msgid "return to main page" -#~ msgstr "volver a la página principal" - -#, fuzzy -#~ msgid "Listing of all audiobooks on WolneLektury.pl" -#~ msgstr "Lista de las obras en WolneLektury.pl" - -#~ msgid "Put a book" -#~ msgstr "¡Poner un libro" - -#~ msgid "on the shelf!" -#~ msgstr "en el estante!" - -#~ msgid "and printing using" -#~ msgstr "e imprimir" - -#~ msgid "Download EPUB" -#~ msgstr "Descargar EPUB" - -#~ msgid "Download TXT" -#~ msgstr "Descargar TXT" - -#~ msgid "on small displays, for example mobile phones" -#~ msgstr "en pantallas pequeñas como las de teléfonos móviles" - -#~ msgid "Download ODT" -#~ msgstr "Descargar ODT" - -#~ msgid "and editing using" -#~ msgstr "y editar" - -#~ msgid "Book on project's wiki" -#~ msgstr "Libro en wiki del proyecto" - -#~ msgid "on" -#~ msgstr "en" - -#~ msgid "See description" -#~ msgstr "Ver la descripción" - -#~ msgid "Listing of all works on WolneLektury.pl" -#~ msgstr "Lista de las obras en WolneLektury.pl" - -#~ msgid "Jump to" -#~ msgstr "Saltar a" - -#~ msgid "Categories" -#~ msgstr "Categorías" - -#, fuzzy -#~ msgid "Listing of all DAISY files on WolneLektury.pl" -#~ msgstr "Lista de las obras en WolneLektury.pl" - -#~ msgid "Show full category" -#~ msgstr "Mostrar toda la categoría" - -#~ msgid "Hide" -#~ msgstr "Esconder" - -#~ msgid "Browse books by categories" -#~ msgstr "Mirar los libros según categoría" - -#~ msgid "delete" -#~ msgstr "borrar" - -#~ msgid "" -#~ "Create your own book set. You can share it with friends by sending them " -#~ "link to your shelf." -#~ msgstr "" -#~ "Crea tu propia colección de libros. Puedes compartirla con tus amigos " -#~ "enviándoles el enlace a tu estante." - -#~ msgid "You need to " -#~ msgstr "Tienes que" - -#~ msgid "sign in" -#~ msgstr "iniciar la sesión" - -#~ msgid "to manage your shelves." -#~ msgstr "para organizar tus estantes." - -#~ msgid "" -#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." -#~ msgstr "" -#~ "Esquemas de clases y otras ideas para usar WolneLektury.pl en la " -#~ "enseñanza." - -#~ msgid "" -#~ "are professional recordings of literary texts from our repository, " -#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " -#~ "DAISY system." -#~ msgstr "" -#~ "son grabaciones profesionales de textos literarios de nuestro depósito. " -#~ "Están disponibles gratis en formatos MP3, Ogg Vorbis y en el sistema " -#~ "DAISY. " - -#~ msgid "Themes groups" -#~ msgstr "Grupos de temas" - -#~ msgid "See our blog" -#~ msgstr "Ver nuestro blog" - -#~ msgid "You can help us!" -#~ msgstr "¡Puedes ayudarnos!" - -#~ msgid "" -#~ "We try our best to elaborate works appended to our library. It is " -#~ "possible only due to support of our volunteers." -#~ msgstr "" -#~ "Hacemos todo lo posible para elaborar las obras de nuestra biblioteca con " -#~ "la mayor perfección. Esto es posible sólo gracias al apoyo de nuestros " -#~ "voluntarios." - -#~ msgid "" -#~ "We invite people who want to take part in developing Internet school " -#~ "library Wolne Lektury." -#~ msgstr "" -#~ "Invitamos a todos quienes quieren formar parte en el desarrollo de la " -#~ "biblioteca virtual de Wolne Lektury." - -#~ msgid "About us" -#~ msgstr "Sobre nosotros" - -#~ msgid "" -#~ "\n" -#~ "\t\t\tInternet library with school readings “Wolne Lektury” (www.wolnelektury.pl) is a project made by " -#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " -#~ "which are recommended by Ministry of National Education and are in public " -#~ "domain.\n" -#~ "\t\t\t" -#~ msgstr "" -#~ "\n" -#~ "\t\t\tLa biblioteca virtual con lecturas “Wolne Lektury” (www.wolnelektury.pl)es un proyecto creado " -#~ "por la Fundación Polonia Moderna. Había comenzado su actividad en el año " -#~ "2007 y está compartiendo las lecturas recomendadas por el Ministerio de " -#~ "la Educación Nacional y que son del dominio público.\n" -#~ "\t\t\t" - -#~ msgid "Searching in" -#~ msgstr "Buscando en" - -#~ msgid "More than one result matching the criteria found." -#~ msgstr "" -#~ "Se ha encontrado más que un resultado que corresponde a tus criterios." - -#~ msgid "Search in WolneLektury.pl" -#~ msgstr "Buscar en WolneLektury.pl" - -#~ msgid "Your shelf is empty" -#~ msgstr "Tu estante está vacío" - -#~ msgid "" -#~ "You can put a book on a shelf by entering page of the reading and " -#~ "clicking 'Put on the shelf'." -#~ msgstr "" -#~ "Puedes poner un libro en el estante entrando en la página de aquella " -#~ "lectura y haciendo clic en \"Poner en el estante\"." - -#~ msgid "Choose books' formats which you want to download:" -#~ msgstr "Elige formatos de los libros que quieres descargar:" - -#~ msgid "for listening" -#~ msgstr "para escuchar" - -#~ msgid "on favourite MP3 player" -#~ msgstr "en tu reproductor de MP3 favorito." - -#~ msgid "Xiph.org Foundation" -#~ msgstr "Fundación Xiph.org" - -#~ msgid "Updating list of books' formats on the shelf" -#~ msgstr "Actualizando la lista de formatos de los libros en el estante" - -#~ msgid "cancel" -#~ msgstr "cancelar" - -#~ msgid "Share this shelf" -#~ msgstr "Compartir este estante" - -#~ msgid "" -#~ "Copy this link and share it with other people to let them see your shelf." -#~ msgstr "" -#~ "Copia este enlace y compártelo con otros para que puedan ver tu estante. " - -#, fuzzy -#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read related study on Lektury.Gazeta.pl" -#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" -#~ msgstr "Leer el artículo sobre este autor en Wikipedia" - -#, fuzzy -#~ msgid "Read article about kind %(last_tag)s on Wikipedia" -#~ msgstr "Leer el artículo sobre este autor en Wikipedia" - -#, fuzzy -#~ msgid "Read article about genre %(last_tag)s on Wikipedia" -#~ msgstr "Leer el artículo sobre este autor en Wikipedia" - -#, fuzzy -#~ msgid "Read related article on Wikipedia" -#~ msgstr "Leer el artículo sobre este autor en Wikipedia" - -#~ msgid "Delete" -#~ msgstr "Borrar" - -#~ msgid "return to the main page" -#~ msgstr "volver a la página principal" - -#~ msgid "return to list of materials" -#~ msgstr "volver a la lista de los materiales" - -#~ msgid "Hand-outs for teachers on " -#~ msgstr "Materiales para los profesores en" - -#, fuzzy -#~ msgid "" -#~ "Download TXT - for reading on small displays, for example mobile phones" -#~ msgstr "en pantallas pequeñas como las de teléfonos móviles" - -#~ msgid "Download MP3" -#~ msgstr "Descargar MP3" - -#~ msgid "Download Ogg Vorbis" -#~ msgstr "Descargar Ogg Vorbis" - -#~ msgid "Download DAISY" -#~ msgstr "Descargar DAISY" - -#~ msgid "check list of books" -#~ msgstr "Verificar la lista de libros" - -#~ msgid "in our repository" -#~ msgstr "en nuestra colección" - -#~ msgid "Polish" -#~ msgstr "polaco" - -#~ msgid "German" -#~ msgstr "alemán" - -#~ msgid "English" -#~ msgstr "inglés" - -#~ msgid "Lithuanian" -#~ msgstr "lituano" - -#~ msgid "French" -#~ msgstr "francés" - -#~ msgid "Russian" -#~ msgstr "ruso" - -#~ msgid "Spanish" -#~ msgstr "español" - -#~ msgid "Ukrainian" -#~ msgstr "ucraniano" - -#~ msgid "Choose your interface language: " -#~ msgstr "Elige el idioma de la interfaz:" - -#~ msgid "Choose language" -#~ msgstr "Elige el idioma" - -#~ msgid "Hide description" -#~ msgstr "Esconder la descripción" - -#~ msgid "Read study of epoch" -#~ msgstr "Leer el estudio sobre esta época" - -#~ msgid "Read article about epoch" -#~ msgstr "Leer el artículo sobre esta época" diff --git a/apps/wolnelektury_core/locale/fr/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index cb1d1c608..000000000 Binary files a/apps/wolnelektury_core/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/fr/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index aed8199d8..000000000 --- a/apps/wolnelektury_core/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,805 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \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:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Connexion" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "Inscrivez-vous" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "Vous devez être connecter pour continuer" - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Site n'existe pas" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "Composant non trouvé" - -#: templates/404.html:14 -msgid "" -"We are sorry, but this page does not exist. Please check if you entered " -"correct address or go to " -msgstr "" -"Désolé, cette page n'existe pas. Vérifiez si vous avez introduit l'adresse " -"correcte ou allez à" - -#: templates/404.html:14 -msgid "main page" -msgstr "accueil" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "Erreur du serveur" - -#: templates/500.html:19 -msgid "" -"

                The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"blog.

                Inform our administrators about the " -"error.

                " -msgstr "" -"

                Le site Wolnelektury.pl est temporairement inaccessible. En attendant, " -"visitez notre blog.

                " -"Informez nos " -"administrateurs de l'erreur.

                " - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "Site inaccessible" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "" -"Le site Wolnelektury.pl est temporairement inaccessible en raison " -"d'opérations de maintenance." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "Wolne Lektury - la bibliothèque en ligne" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "Publications récentes" - -#: templates/main_page.html:41 -msgid "News" -msgstr "Actualités" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "Outils" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "Rapportez une erreur ou faites une suggestion" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "Téléchargez le catalogue au format PDF" - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "Widget" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "Il vous manque un livre?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "Plan de publication" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "Informations" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "L'image utilisé:" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "Wolne Lektury (Lectures Libres)" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" %(c)s free reading you have right to\n" -" " -msgid_plural "" -"\n" -" %(c)s free readings you have right to\n" -" " -msgstr[0] "" -"\n" -" %(c)s lecture gratuite auxquelles vous avez droit\n" -" " -msgstr[1] "" -"\n" -" %(c)s lectures gratuites auxquelles vous avez droit\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "Bienvenue" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "" - -#: templates/superbase.html:74 templates/user.html:14 -#, fuzzy -msgid "Social accounts" -msgstr "ou utilisez votre compte" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "Mon étagère" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "Administration" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "Déconnexion" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "Rechercher" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "Version linguistique" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" -"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" -"\t\t\t\tHosting: ICM.\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tLectures Libres est un projet réalisé par la Fondation Pologne Moderne .\n" -"\t\t\t\tReproductions numériques sont préparées par laBibliothèque nationale, Bibliothèque de Silésie et Bibliothèque d'Elbląg et basées sur leurs ressources. \n" -"\t\t\t\tHosting: ICM.\n" -"\t\t\t\t" - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\t Fondation Pologne Moderne, 00-514 Warszawa (Varsovie), ul. " -"Marszałkowska 84/92 lok. 125, tél./fax: (+48) (22) 621-30-17\n" -" e-mail: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "Fermer" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "Chargement en cours" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Site de l'administrateur" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "Traductions" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "avancé(e)" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "simplifié(e)" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "Importez le livre" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -#, fuzzy -msgid "Sign in using:" -msgstr "Connexion" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "ou inscrivez-vous" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgstr[0] "" -"\n" -"Nous avons %(c)s d'ouvrages publiés sur Wolne Lektury!\n" -"Aidez-nous à élargir la bibliothèque et libérez des nouvelles lectures par\n" -"faire une donation\n" -"ou transférer 1% de vos impôts.\n" -msgstr[1] "" -"\n" -"Nous avons %(c)s d'ouvrages publiés sur Wolne Lektury!\n" -"Aidez-nous à élargir la bibliothèque et libérez des nouvelles lectures par\n" -"faire une donation\n" -"ou transférer 1% de vos impôts.\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" -"Devenez un éditeur de Wolne Lektury! Vérifiez si\n" -"nous sommes en train de préparer un texte que vous cherchez et rédigez\n" -"une publication vous-mêmes en se connectant sur la Plateforme des éditeurs." - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "Plus..." - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "" - -#: templates/openid/login.html:27 -#, fuzzy -msgid "Sign In" -msgstr "Connexion" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "précédent(e)" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "suivant(e)" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "Autorisez l'accès à Wolne Lektury" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user %(user)s." -msgstr "" -"Confirmez pour autoriser l'accès à Wolne Lektury comme l'utilisateur " -"%(user)s." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: templates/socialaccount/connections.html:36 -#, fuzzy -msgid "Remove" -msgstr "supprimer" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "" - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" - -#~ msgid "Listing of all audiobooks" -#~ msgstr "Liste des tous les livres audio" - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "Les plus nouveaux livres audio MP3" - -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "Les plus nouveaux livres audio Ogg Vorbis" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "Audiothèque des lectures scolaires de la Fondation Pologne Moderne.\n" -#~ "Vous pouvez l'utiliser gratuitement et sans limites. \n" -#~ "Les livres audio sont lus par les acteurs connus, comme par exemple: " -#~ "Danuta Stenka et Jan Peszek." - -#~ msgid "See also" -#~ msgstr "Voir aussi" - -#~ msgid "Theme" -#~ msgstr "Thème" - -#~ msgid "in work " -#~ msgstr "dans l'oeuvre" - -#~ msgid "This work is licensed under:" -#~ msgstr "Cet oeuvre est publié sous la licence" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " Creative Commons Attribution-ShareAlike 3.0\n" -#~ " license." -#~ msgstr "" -#~ "Cet ouvrage n'est pas protégé par le droit d'auteur et appartiennent au\n" -#~ "domaine public; c'est-à-dire qu'il peut être publié et divulgué " -#~ "librement.\n" -#~ "Si l'ouvrage est accompagné des matériaux supplémentaires (annotations, " -#~ "motifs littéraires, etc.),\n" -#~ "ces derniers sont donc distribués sous la licence:\n" -#~ "Paternité - Partage à l'Identique 3.0 non transposé." - -#~ msgid "Text prepared based on:" -#~ msgstr "Préparation du texte basée sur:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Les éditions et annotations par:" - -#~ msgid "Listing of all works" -#~ msgstr "Liste des tous les ouvrages" - -#~ msgid "Table of Content" -#~ msgstr "Table des matières" - -#~ msgid "↑ top ↑" -#~ msgstr "↑ top ↑" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Mettre un livre sur l'étagère!" - -#~ msgid "Create new shelf" -#~ msgstr "Créez une nouvelle étagère" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une au-dessous, si " -#~ "vous voulez." - -#~ msgid "Put on the shelf!" -#~ msgstr "Mettre sur l'étagère!" - -#~ msgid "Epoch" -#~ msgstr "Époque" - -#~ msgid "Kind" -#~ msgstr "Type" - -#~ msgid "Genre" -#~ msgstr "Genre" - -#~ msgid "Read online" -#~ msgstr "Lisez en ligne" - -#~ msgid "Download" -#~ msgstr "Téléchargez" - -#~ msgid "to print" -#~ msgstr "pour imprimer" - -#~ msgid "for an e-book reader" -#~ msgstr "pour un lecteur des livres numeriques" - -#~ msgid "for Kindle" -#~ msgstr "pour Kindle" - -#~ msgid "for advanced usage" -#~ msgstr "pour l’utilisation avancée" - -#~ msgid "Listen" -#~ msgstr "Écoutez" - -#~ msgid "Table of contents" -#~ msgstr "Table des matières" - -#~ msgid "Themes" -#~ msgstr "Thèmes" - -#~ msgid "Edit. note" -#~ msgstr "Note d'éditeur" - -#~ msgid "Infobox" -#~ msgstr "Infobox" - -#~ msgid "Book's page" -#~ msgstr "Site du livre" - -#~ msgid "for a reader" -#~ msgstr "pour un lecteur" - -#, fuzzy -#~ msgid "for advanced usege" -#~ msgstr "avancé(e)" - -#~ msgid "Download a custom PDF" -#~ msgstr "Téléchargez un PDF pérsonnalisé" - -#~ msgid "Motifs and themes" -#~ msgstr "Motifs et thèmes" - -#~ msgid "See" -#~ msgstr "Voir" - -#~ msgid "Source" -#~ msgstr "Source" - -#~ msgid "of the book" -#~ msgstr "du livre" - -#~ msgid "Source XML file" -#~ msgstr "Fichier source XML" - -#~ msgid "Book on" -#~ msgstr "Livre sur" - -#~ msgid "Editor's Platform" -#~ msgstr "Plateforme d'éditeur" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "Description du livre sur Lektury.Gazeta.pl" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "Description du livre sur Wikipédia" - -#~ msgid "Mix this book" -#~ msgstr "Mixez ce livre" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "Téléchargez tous les livres audio pour ce livre" - -#~ msgid "Catalogue" -#~ msgstr "Catalogue" - -#~ msgid "Authors" -#~ msgstr "Auteurs" - -#~ msgid "Kinds" -#~ msgstr "Types" - -#~ msgid "Genres" -#~ msgstr "Genres" - -#~ msgid "Epochs" -#~ msgstr "Époques" - -#~ msgid "Themes and topics" -#~ msgstr "Thèmes et sujets" - -#~ msgid "Listing of all DAISY files" -#~ msgstr "Liste des tous les livres audio DAISY" - -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "Le plus nouveaux livres audio DAISY" - -#~ msgid "" -#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" -#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -#~ "ograniczeń." -#~ msgstr "" -#~ "DAISY est un système pour rendre les livres accessibles, apprécié autour " -#~ "du monde, \n" -#~ "approprié à des non voyants et à des malvoyants et à des personnes \n" -#~ "qui ont des difficultés à lire. Vous pouvez l'utiliser gratuitement et " -#~ "sans limites." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "Les critères sont ambigus. Choisissez parmi les options ci-dessous:" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Étagères qui contiennent l'extrait" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une au-dessous, si " -#~ "vous voulez." - -#~ msgid "Save all shelves" -#~ msgstr "Enregistrer toutes les étagères" - -#~ msgid "Expand fragment" -#~ msgstr "Montrer l'extrait" - -#~ msgid "Hide fragment" -#~ msgstr "Cacher l'extrait" - -#~ msgid "See full category" -#~ msgstr "Voir catégorie entière" - -#~ msgid "All books" -#~ msgstr "Tous les livres" - -#~ msgid "Audiobooks" -#~ msgstr "Livres audio" - -#~ msgid "DAISY" -#~ msgstr "DAISY" - -#~ msgid "Work is licensed under " -#~ msgstr "Ouvrage sous la licence" - -#~ msgid "Based on" -#~ msgstr "Basé sur" - -#~ msgid "Details" -#~ msgstr "Détails" - -#~ msgid "Author" -#~ msgstr "Auteur" - -#~ msgid "Other resources" -#~ msgstr "Autres ressources" - -#~ msgid "Source of the image" -#~ msgstr "Source d'image" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "L'image sur la Plateforme d'éditeur" - -#~ msgid "View XML source" -#~ msgstr "Voir source XML" - -#~ msgid "Work's themes " -#~ msgstr "Les thèmes de l'oeuvre" - -#~ msgid "Listing of all pictures" -#~ msgstr "Liste de tous les images" - -#~ msgid "Download as" -#~ msgstr "Téléchargez comme" - -#~ msgid "Artist" -#~ msgstr "Artiste" - -#~ msgid "Director" -#~ msgstr "Metteur en scène" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "Livres audios ont été préparés comme une part des projets:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "%(cs)s, sponsorisé par %(fb)s" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "Livres audios ont été préparés comme une part du projet %(cs)s sponsorisé " -#~ "par %(fb)s." - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "Livres audios ont été préparés comme une part du projet %(cs)s." - -#~ msgid "Did you mean" -#~ msgstr "Est-ce que vous cherchez" - -#~ msgid "Results by authors" -#~ msgstr "Résultats par l'auteur" - -#~ msgid "Results by title" -#~ msgstr "Résultats par le titre" - -#~ msgid "Results in text" -#~ msgstr "Résultats dans le texte" - -#~ msgid "Other results" -#~ msgstr "Autres résultats" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "" -#~ "Nous sommes désolés, aucune ressource ne répond aux critères de recherche." - -#~ msgid "" -#~ "Search engine supports following criteria: title, author, theme/topic, " -#~ "epoch, kind and genre.\n" -#~ "\t\tAs for now we do not support full text search." -#~ msgstr "" -#~ "Le moteur de recherche permet de chercher selon le titre, auteur, sujet/" -#~ "thème, époque, type et genre.\n" -#~ "\t\tPour le moment nous n'assurons pas la recherche en plein texte." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "" -#~ "Nous sommes désolés, pour effectuer la recherche il faut entrer au moins " -#~ "deux caractères." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "sur Lektury.Gazeta.pl" - -#~ msgid "in Wikipedia" -#~ msgstr "sur Wikipédia" - -#~ msgid "Your shelves with books" -#~ msgstr "Vos étagères avec les livres" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une en-dessus, si " -#~ "vous voulez." - -#~ msgid "Create shelf" -#~ msgstr "Créez une étagère" - -#~ msgid "author" -#~ msgstr "auteur" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "Fiches pour les enseignants" - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "Lisez une élaboration d'oeuvres de cet auteur sur Lektury.Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "Lisez un article sur cet auteur sur Wikipédia." - -#~ msgid "This author's works are copyrighted." -#~ msgstr "Les oeuvres de cet auteur sont protégées par le droit d'auteur." - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "Apprenez pourquoi les bibliothèques en ligne ne peuvent " -#~ "pas publier les oeuvres de cet auteur." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "Les oeuvres de cet auteur appartiennent au domaine public et seront " -#~ "prochainement publiées dans la bibliothèque en ligne Wolne Lektury." - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "Les oeuvres de cet auteur entreront dans le domaine public et il sera " -#~ "possible de les publier sans restrictions" - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "Cette oeuvre appartient au domaine public et sera prochainement publiée " -#~ "dans la bibliothèque en ligne Wolne Lektury." - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "Cette oeuvre entrera dans le domaine public et il sera possible de la " -#~ "publier sans restrictions " - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this work." -#~ msgstr "" -#~ "Apprenez pourquoi les bibliothèques en ligne ne peuvent " -#~ "pas publier cette oeuvre." - -#~ msgid "This work is copyrighted." -#~ msgstr "Cette oeuvre est protégée par le droit d'auteur" - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "Se connecter à Wolne Lektury" - -#~ msgid "Login" -#~ msgstr "Connexion" diff --git a/apps/wolnelektury_core/locale/it/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index 5e5748cb2..000000000 Binary files a/apps/wolnelektury_core/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/it/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index 38d521eb1..000000000 --- a/apps/wolnelektury_core/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,787 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \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:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Accedi" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "Registrati" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr " Per poter continuare devi essere loggato" - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Questa pagina non esiste" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "La pagina non è stata trovata" - -#: templates/404.html:14 -msgid "" -"We are sorry, but this page does not exist. Please check if you entered " -"correct address or go to " -msgstr "" -"Siamo spiacenti, ma questa pagina non esiste. Si prega di verificare se " -"l'indirizzo è stato inserito correttamente oppure andare su" - -#: templates/404.html:14 -msgid "main page" -msgstr "pagina principale" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "Errore del server" - -#: templates/500.html:19 -msgid "" -"

                The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"blog.

                Inform our administrators about the " -"error.

                " -msgstr "" -"

                il sito di Wolnelektury.pl non è disponibile al momento. Nel frattempo " -"si prega di visitare il nostro blog.

                Si prega di informare i nostri amministratori sull'errore.

                " - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "Servizio non disponibile" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "" -"A causa di lavori di manutenzione il sito WolneLektury.pl non è " -"momentaneamente disponibile." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "Wolne Lektury biblioteca online" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "" - -#: templates/main_page.html:41 -msgid "News" -msgstr "" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "Segnala un'errore o una proposta" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "Scarica il catalogo nel formato PDF." - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "Widget" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "Manca un libro?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "Programma editoriale" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "Immagine usata" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" %(c)s free reading you have right to\n" -" " -msgid_plural "" -"\n" -" %(c)s free readings you have right to\n" -" " -msgstr[0] "" -"\n" -" %(c)s hai una lettura libera right to\n" -" " -msgstr[1] "" -"\n" -" %(c)s hai le letture libere right to\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "Benvenuti" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "" - -#: templates/superbase.html:74 templates/user.html:14 -msgid "Social accounts" -msgstr "" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "Il mio scaffale" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "Amministrazione" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "Esci" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "Cerca" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "Versioni in altre lingue" - -#: templates/superbase.html:165 -#, fuzzy -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" -"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" -"\t\t\t\tHosting: ICM.\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tWolne Lektury è il progetto condotto da Modern Poland Foundation.\n" -"\t\t\t\t Le riproduzioni digitali vengono fatte da Biblioteca Nazionale, Biblioteka ĹšlÄ…ska and Biblioteka ElblÄ…ska, sulla base di raccolte di BN, BĹš e BE.\n" -"\t\t\t\tHosting: ICM.\n" -"\t\t\t\t" - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tFondazione Polonia Moderna, 00-514 Varsavia, ul. Marszałkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "Chiudi" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "Caricamento" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Amministrazione del sito" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "Traduzioni" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "avanzato" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "semplificato" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "Importa un libro" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -#, fuzzy -msgid "Sign in using:" -msgstr "Accedi" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "oppure registrati" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgstr[0] "" -"\n" -"Abbiamo %(c)s dell'opera pubblicata in Wolne Lektury!\n" -"Aiutaci ad espandere la biblioteca e aggiungere nuove letture gratuite da\n" -"facendo una " -"donazione\n" -"oppure con un trasferimento 1% della tua imposta sul reddito.\n" -msgstr[1] "" -"\n" -"Abbiamo %(c)s dell'opera pubblicata in Wolne Lektury!\n" -"Aiutaci ad espandere la biblioteca e aggiungere nuove letture gratuite da\n" -"facendo una " -"donazione\n" -"oppure con un trasferimento 1% della tua imposta sul reddito.\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "Più" - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "" - -#: templates/openid/login.html:27 -#, fuzzy -msgid "Sign In" -msgstr "Accedi" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "precedente" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "seguente" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "Autorizza accesso a Wolne Lektury" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user %(user)s." -msgstr "" -"Conferma l'accesso autorizzato a Wolne Lektury come utente %(user)s." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: templates/socialaccount/connections.html:36 -#, fuzzy -msgid "Remove" -msgstr "elimina" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "" - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" - -#~ msgid "Listing of all audiobooks" -#~ msgstr "Elenco di tutti gli audiolibri " - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "Ultimi audiolibri MP3" - -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "Ultimi audiolibri Ogg Vorbis" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "MoĹĽecie z niej korzystać bezpĹ‚atnie i bez ograniczeĹ„.\n" -#~ "Audiobooki nagrywajÄ… znani aktorzy, wĹ›rĂłd nich Danuta Stenka i Jan " -#~ "Peszek." -#~ msgstr "" -#~ "Audioteca dei testi scolastici della Fondazione Nowoczesna Polska. \n" -#~ " Potete utilizzarla gratuitamente e senza limiti.\n" -#~ "Gli audiolibri vengono registrati da famosi attori, tra cui Danuta Stenka " -#~ "e Jan Peszek." - -#~ msgid "See also" -#~ msgstr "Vedi anche" - -#~ msgid "Theme" -#~ msgstr "tema" - -#~ msgid "in work " -#~ msgstr "in corso" - -#~ msgid "This work is licensed under:" -#~ msgstr "Questa opera è pubblicata su licenza:" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " Creative Commons Attribution-ShareAlike 3.0\n" -#~ " license." -#~ msgstr "" -#~ "Questa opera non è sotto il diritto d'autore e fa parte del\n" -#~ "pubblico dominio, il che significa che è possibile pubblicarla \n" -#~ "e distribuirla liberamente. Se un'opera è completata con i materiali " -#~ "aggiuntivi \n" -#~ "(le annotazioni, i motivi letterari ecc.) che sono protette dal diritto " -#~ "d'autore, quei\n" -#~ "materiali aggiuntivi sono disponibili secondo la \n" -#~ " Creative " -#~ "Commons Attribution-ShareAlike 3.0\n" -#~ "licenza." - -#~ msgid "Text prepared based on:" -#~ msgstr "Il testo preparato e basato su:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Curato ed elaborato da:" - -#~ msgid "Listing of all works" -#~ msgstr "Elenco di tutte le opere" - -#~ msgid "Table of Content" -#~ msgstr "Indice" - -#~ msgid "↑ top ↑" -#~ msgstr "↑ su ↑" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Metti il libro sullo scaffale" - -#~ msgid "Create new shelf" -#~ msgstr "Crea un nuovo scaffale" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "Non hai nessuno scaffale. se vuoi puoi crearne uno, qui sotto." - -#~ msgid "Put on the shelf!" -#~ msgstr "Metti sullo scaffale!" - -#~ msgid "Epoch" -#~ msgstr "Epoca" - -#~ msgid "Kind" -#~ msgstr "Categoria" - -#~ msgid "Genre" -#~ msgstr "Genere" - -#~ msgid "Read online" -#~ msgstr "Leggi online" - -#~ msgid "Download" -#~ msgstr "Scarica" - -#~ msgid "Listen" -#~ msgstr "Ascolta" - -#~ msgid "Table of contents" -#~ msgstr "Indice" - -#~ msgid "Themes" -#~ msgstr "Temi" - -#~ msgid "Edit. note" -#~ msgstr "Modifica. nota" - -#~ msgid "Infobox" -#~ msgstr "Infobox" - -#~ msgid "Book's page" -#~ msgstr "Pagina del libro" - -#~ msgid "Download a custom PDF" -#~ msgstr " Scarica un PDF personalizzato" - -#~ msgid "Motifs and themes" -#~ msgstr "Motivi e temi" - -#~ msgid "See" -#~ msgstr "Vedi" - -#~ msgid "Source" -#~ msgstr "Fonte" - -#~ msgid "of the book" -#~ msgstr "del libro" - -#~ msgid "Source XML file" -#~ msgstr "File di fonte XML" - -#~ msgid "Book on" -#~ msgstr "Libro su" - -#~ msgid "Editor's Platform" -#~ msgstr " Piattaforma del editore" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "Descrizione del libro su Lektury.Gazeta.pl" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "Descrizione del libro su Wikipedia" - -#~ msgid "Mix this book" -#~ msgstr "Combina questo libro" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "Scarica tutti gli audiolibri per questo libro." - -#~ msgid "Catalogue" -#~ msgstr "Catalogo" - -#~ msgid "Authors" -#~ msgstr "Autori" - -#~ msgid "Kinds" -#~ msgstr "Categorie" - -#~ msgid "Genres" -#~ msgstr "Generi" - -#~ msgid "Epochs" -#~ msgstr "Epoche" - -#~ msgid "Themes and topics" -#~ msgstr "temi e argomenti" - -#~ msgid "Listing of all DAISY files" -#~ msgstr "Elenco di tutti i file DAISY " - -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "Ultimi audiolibri DAISY" - -#~ msgid "" -#~ "System DAISY to uznany na caĹ‚ym Ĺ›wiecie format udostÄ™pniania ksiÄ…" -#~ "ĹĽek\n" -#~ "dostosowany do potrzeb osĂłb sĹ‚abowidzÄ…cych, niewidomych oraz innych " -#~ "osĂłb\n" -#~ "majÄ…cych trudnoĹ›ci z czytaniem. MoĹĽecie z nich korzystać bezpĹ‚atnie " -#~ "i bez ograniczeĹ„." -#~ msgstr "" -#~ "Il sistema DAISY è un formato conosciuto nel mondo che serve a fornire i " -#~ "libri\n" -#~ "adeguato ai bisogni delle persone non vedenti, ipovedenti \n" -#~ "e con difficoltà nel leggere. Potete usufruirne gratuitamente e senza " -#~ "limiti." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "" -#~ "Questi criteri sono ambigui. Si prega di selezionare una delle seguenti " -#~ "opzioni:" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Gli scaffali che contengono il frammento" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "Non hai nessuno scaffale. Se vuoi puoi crearne uno, qui sotto." - -#~ msgid "Save all shelves" -#~ msgstr "Salva tutti gli scaffali" - -#~ msgid "Expand fragment" -#~ msgstr "Espandi il frammento" - -#~ msgid "Hide fragment" -#~ msgstr "Nascondi il frammento" - -#~ msgid "See full category" -#~ msgstr "Vedi tutta la categoria" - -#~ msgid "All books" -#~ msgstr "Tutti i libri" - -#~ msgid "Audiobooks" -#~ msgstr "Audiolibri" - -#~ msgid "DAISY" -#~ msgstr "DAISY" - -#~ msgid "Work is licensed under " -#~ msgstr "L'opera è su licenza di" - -#~ msgid "Based on" -#~ msgstr "Basato su" - -#~ msgid "Details" -#~ msgstr "Dettagli" - -#~ msgid "Author" -#~ msgstr "Autore" - -#~ msgid "Other resources" -#~ msgstr "Altre fonti" - -#~ msgid "Source of the image" -#~ msgstr "Fonte dell'immagine" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "Immagine sulla piattaforma del editore" - -#~ msgid "View XML source" -#~ msgstr "Visualizza la fonte XML" - -#~ msgid "Work's themes " -#~ msgstr "Temi dell'opera" - -#~ msgid "Listing of all pictures" -#~ msgstr "Elenco di tutte le immagini" - -#~ msgid "Artist" -#~ msgstr "Artista" - -#~ msgid "Director" -#~ msgstr "Direttore" - -#~ msgid "Download as" -#~ msgstr "Scarica come" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "" -#~ "Gli audilobri sono stati preparati come parte dei seguenti progetti:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "%(cs)s, creato da %(fb)s // %(cs)s, finanziato da %(fb)s" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "Gli audiollibri sono stati preparati come parte del progetto %(cs)s, " -#~ "finanziato da %(fb)s" - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "Gli audiolibri sono stati preparati come parte di progetto %(cs)s." - -#~ msgid "Did you mean" -#~ msgstr "Volevi dire" - -#~ msgid "Results by authors" -#~ msgstr "Risultati per autore" - -#~ msgid "Results by title" -#~ msgstr "Risultati per titolo" - -#~ msgid "Results in text" -#~ msgstr "Risultati nel testo" - -#~ msgid "Other results" -#~ msgstr "Altri risultati" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "" -#~ "Siamo spiacenti!I criteri di ricerca non corrispondono alle risorse." - -#~ msgid "" -#~ "Search engine supports following criteria: title, author, theme/topic, " -#~ "epoch, kind and genre.\n" -#~ "\t\tAs for now we do not support full text search." -#~ msgstr "" -#~ "Il motore di ricerca supporta i seguenti criteri: titolo, autore, tema, " -#~ "epoca, genere.\n" -#~ "\t\t Per il momento non supportiamo i criteri del testo intero." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "" -#~ "Siamo spiacenti! La ricerca viene effettuata su parole con almeno due " -#~ "caratteri." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "su Lektury.Gazeta.pl" - -#~ msgid "in Wikipedia" -#~ msgstr "su Wikipedia" - -#~ msgid "Your shelves with books" -#~ msgstr "I tuoi scaffali con i libri" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "Non hai nessuno scaffale. se vuoi puoi crearne uno, qui sotto." - -#~ msgid "Create shelf" -#~ msgstr "Crea uno scaffale" - -#~ msgid "author" -#~ msgstr "autore" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "Materiali per gli insegnanti // " - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "Leggi lo studio dell'opera di questo autore su Lektury.Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "Leggi l'articolo di questo autore su Wikipedia" - -#~ msgid "This author's works are copyrighted." -#~ msgstr " Le opere di questo autore sono protette dai diritti d'autore." - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "Scopri perche le biblioteche online non possono pubblicare opere di questo " -#~ "autore." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "Le opere di questo autore sono di pubblico dominio e fra poco saranno " -#~ "pubblicate nella biblioteca scolastica di Wolne Lektury. " - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "Le opere di questo autore saranno di pubblico dominio e sarà possibile " -#~ "pubblicarle senza le restrizioni su" - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "Questa opera è di pubblico dominio e fra poco sarà pubblicata nella " -#~ "biblioteca scolastica di Wolne Lektury." - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "Questa opera sarà di pubblico dominio e sarà possibile pubblicarla senza " -#~ "le restrizioni su" - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this work." -#~ msgstr "" -#~ "Scopri perché le librerie online non possono pubblicare le opere di questo " -#~ "autore." - -#~ msgid "This work is copyrighted." -#~ msgstr "Quest'opera è protetta dal diritto d'autore." - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "Loggati in Wolne Lektury" - -#~ msgid "Login" -#~ msgstr "Login" diff --git a/apps/wolnelektury_core/locale/jp/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index 6b700daec..000000000 Binary files a/apps/wolnelektury_core/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/jp/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index c2d5e8fd9..000000000 --- a/apps/wolnelektury_core/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,345 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-07 15:50+0100\n" -"Last-Translator: Marcin Koziej \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Zaloguj" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "" - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "" - -#: templates/404.html:14 -msgid "" -"We are sorry, but this page does not exist. Please check if you entered " -"correct address or go to " -msgstr "" - -#: templates/404.html:14 -msgid "main page" -msgstr "" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "" - -#: templates/500.html:19 -msgid "" -"

                The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"blog.

                Inform our administrators about the " -"error.

                " -msgstr "" - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "" - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "" - -#: templates/main_page.html:41 -msgid "News" -msgstr "" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "" - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" %(c)s free reading you have right to\n" -" " -msgid_plural "" -"\n" -" %(c)s free readings you have right to\n" -" " -msgstr[0] "" -msgstr[1] "" - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "" - -#: templates/superbase.html:74 templates/user.html:14 -msgid "Social accounts" -msgstr "" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" -"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" -"\t\t\t\tHosting: ICM.\n" -"\t\t\t\t" -msgstr "" - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" -msgstr "" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -#, fuzzy -msgid "Sign in using:" -msgstr "Zaloguj" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgstr[0] "" -msgstr[1] "" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "" - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "" - -#: templates/openid/login.html:27 -#, fuzzy -msgid "Sign In" -msgstr "Zaloguj" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user %(user)s." -msgstr "" - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: templates/socialaccount/connections.html:36 -msgid "Remove" -msgstr "" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "" - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" diff --git a/apps/wolnelektury_core/locale/lt/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index 5d1dfb986..000000000 Binary files a/apps/wolnelektury_core/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/lt/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index 99e0dfa8e..000000000 --- a/apps/wolnelektury_core/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,1136 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\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" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Prisijungti " - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "Jau esate prisijungęs kaip vartotojas %(user)s" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "Registruotis " - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "Norėdami tęsti, turite būti prisijungę" - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Tinklalapis neegzistuoja" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "Puslapis nerastas" - -#: templates/404.html:14 -msgid "" -"We are sorry, but this page does not exist. Please check if you entered " -"correct address or go to " -msgstr "" -"Atsiprašome, bet šis tinklalapis neegzistuoja. Prašome patvirtinti ar " -"įvedėte teisingą adresą arba eikite į" - -#: templates/404.html:14 -msgid "main page" -msgstr "pagrindinį puslapį" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "Serverio klaida" - -#: templates/500.html:19 -msgid "" -"

                The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"blog.

                Inform our administrators about the " -"error.

                " -msgstr "" -"

                Interneto svetainė yra laikinai neprieinama. Aplankykite mūsų blogą.

                Praneškiteadministratoriams apie " -"klaidą.

                \"" - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "Paslauga neprieinama" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "" -"Interneto svetainė Wolnelektury.pl šiuo metu yra neprieinama dėl atliekamų " -"remonto darbų." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "Wolne Lektury internetinė biblioteka" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "Kas naujo?" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "Naujos publikacijos" - -#: templates/main_page.html:41 -msgid "News" -msgstr "Naujienos" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "Priemonės" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "Praneškite apie klaidą arba teikite pasiūlymus" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "Atsisiųsti katalogą PDF formatu." - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "Valdiklis" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "Neradote knygos?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "Publikavimo planas" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "Informacija" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "Panaudotas paveikslėlis:" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" %(c)s free reading you have right to\n" -" " -msgid_plural "" -"\n" -" %(c)s free readings you have right to\n" -" " -msgstr[0] "" -"\n" -" %(c)s nemokamas kūrinys į kurį turite teisę\n" -" " -msgstr[1] "" -"\n" -" %(c)s nemokami kūriniai į kuriuos turite teisę\n" -" " -msgstr[2] "" -"\n" -" %(c)s nemokamų kūrinių į kuriuos turite teisę\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "Sveiki atvykę" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "Slaptažodis" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "El- paštas" - -#: templates/superbase.html:74 templates/user.html:14 -msgid "Social accounts" -msgstr "Socialinės paskyros" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "Mano lentyna" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "Administracija " - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "Atsijungti" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "Ieškoti" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "Kalbų versijos" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" -"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" -"\t\t\t\tHosting: ICM.\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tProjektas Wolne Lektury yra fondo Šiuolaikinė Lenkija vadovaujamas.\n" -"\t\t\t\tSkaitmeninės reprodukcijos yra " -"Nacionalinės bibliotekos, Silezijos bibliotekos ir Elbingo bibliotekos paruoštos, remiantis šių bibliotekų ištekliais.\n" -"\t\t\t\tPriegloba: ICM.\n" -"\t\t\t\t" - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tFondas Šiuolaikinė Lenkija, 00-514 Warszawa, ul. Marszałkowska 84/92 " -"lok. 125, tel/faksas: (22) 621-30-17\n" -" el. paštas: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "Uždaryti" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "Kraunasi" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "Vartotojas" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Interneto svetainės administracija" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "Vertimai" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "papildomas" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "supaprastintas" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "Importuoti knygą" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "Pamiršote slaptažodį?" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -msgid "Sign in using:" -msgstr "Prisijungti naudojant:" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "arba registruotis " - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgstr[0] "" -"\n" -"Turime %(c)s kūrinį publikuotą Wolne Lektury interneto svetainėje!\n" -"Padėkite mums plėtoti biblioteką ir nemokamai bendrinti naujus kūrinius\n" -"remdami mus " -"finansiškai\n" -"arba skirdami 1% jūsų pajamų mokesčio.\n" -msgstr[1] "" -"\n" -"Turime %(c)s kūrinius publikuotus Wolne Lektury interneto svetainėje!\n" -"Padėkite mums plėtoti biblioteką ir nemokamai bendrinti naujus kūrinius\n" -"remdami mus " -"finansiškai\n" -"arba skirdami 1% jūsų pajamų mokesčio.\n" -msgstr[2] "" -"\n" -"Turime %(c)s kūrinių publikuotų Wolne Lektury interneto svetainėje!\n" -"Padėkite mums plėtoti biblioteką ir nemokamai bendrinti naujus kūrinius\n" -"remdami mus " -"finansiškai\n" -"arba skirdami 1% jūsų pajamų mokesčio.\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" -"Tapkite redaktoriumi Wolne Lektury interneto svetainės! Sužinokite ar\n" -"šiuo metu dirbame su jūsų ieškomu kūriniu ir paruoškite\n" -"jūsų leidinį prisijungdami prie Redakcinės Platformos." - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "Daugiau..." - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "OpenID Prisijungti" - -#: templates/openid/login.html:27 -msgid "Sign In" -msgstr "Prisijungti " - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "ankstėsnis" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "sekantis " - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "Leisti prieigą prie Wolne Lektury interneto svetainės" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user %(user)s." -msgstr "" -"Patvirtinkite, kad leistute prieigą prie Wolne Lektury interneto svetainės " -"kaip vartotojas %(user)s." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Paskyros jungtys" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"Galite prisijungti prie jūsų paskyros naudodamiesi šiomis third party " -"paskyromis:" - -#: templates/socialaccount/connections.html:36 -msgid "Remove" -msgstr "Pašalinti" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "Neturite socialinio tinklo paskyrų prijungtų prie šios paskyros." - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "Pridėti 3rd Party Paskyrą" - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "Prisijungimas atšauktas" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" -"Nusprendėte atšaukti prisijungimą prie mūsų interneto svetainės naudodamiesi " -"viena iš jūsų egzistuojančių paskyrų. Jei įvyko klaida, prašome pradėti čia " -"sign in." - -#~ msgid "Listing of all audiobooks" -#~ msgstr "Visų audio knygų sąrašas" - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "Naujosios MP3 audio knygos" - -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "Naujosios Ogg Vorbis audio knygos" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "Fondo Šiuolaikinė Lenkija privalomos literatūros audio knygų rinkinys.\n" -#~ "Galite juo naudotis nemokamai ir be apribojimų.\n" -#~ "Audio knygos yra garsių aktorių įrašomos, tokių kaip Danuta Stenka ir Jan " -#~ "Peszek." - -#~ msgid "See also" -#~ msgstr "Žiūrėti daugiau" - -#~ msgid "Theme" -#~ msgstr "Motyvas" - -#~ msgid "in work " -#~ msgstr "kūrinyje" - -#~ msgid "This work is licensed under:" -#~ msgstr "Šis kūrinys yra licencijuotas pagal:" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " Creative Commons Attribution-ShareAlike 3.0\n" -#~ " license." -#~ msgstr "" -#~ "Šio visuomenės srities kūrinio autorių teisė neapima,\n" -#~ "tai reiškia, kad gali būti laisvai naudojamas bei\n" -#~ "platinamas. Jei su šiuo kūriniu yra pateikiamos bet kokios\n" -#~ "papildomos autorinių teisių saugomos medžiagos (kaip pastabos, motyvai ir " -#~ "t.t.), šios\n" -#~ "medžiagos yra licencijuotos pagal\n" -#~ "Creative " -#~ "Commons Attribution-ShareAlike 3.0\n" -#~ "licenciją." - -#~ msgid "Text prepared based on:" -#~ msgstr "Tekstas paruoštas remiantis:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Redagavimas ir pastabos:" - -#~ msgid "Listing of all works" -#~ msgstr "Visų kūrinių sąrašas" - -#~ msgid "Table of Content" -#~ msgstr "Turinys" - -#~ msgid "↑ top ↑" -#~ msgstr "↑į viršų↑" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Padėkite knygą į lentyną!" - -#~ msgid "Create new shelf" -#~ msgstr "Sukurti naują lentyną" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naują lentyną " -#~ "žemiau." - -#~ msgid "Put on the shelf!" -#~ msgstr "Padėkite į lentyną!" - -#~ msgid "Epoch" -#~ msgstr "Epocha" - -#~ msgid "Kind" -#~ msgstr "Rūšis " - -#~ msgid "Genre" -#~ msgstr "Žanras" - -#~ msgid "Read online" -#~ msgstr "Skaityti online" - -#~ msgid "Download" -#~ msgstr "Atsisiųsti" - -#~ msgid "to print" -#~ msgstr "Spausdinti" - -#~ msgid "for an e-book reader" -#~ msgstr "e-knygos skaitytojui" - -#~ msgid "for Kindle" -#~ msgstr "skaityklei Kindle" - -#~ msgid "for advanced usage" -#~ msgstr "išplėstiniam naudojimui" - -#~ msgid "Listen" -#~ msgstr "Klausytis" - -#~ msgid "Table of contents" -#~ msgstr "Turinys" - -#~ msgid "Themes" -#~ msgstr "Motyvai" - -#~ msgid "Edit. note" -#~ msgstr "Redaguoti pastabą" - -#~ msgid "Infobox" -#~ msgstr "Infobox" - -#~ msgid "Book's page" -#~ msgstr "Knygos puslapis" - -#~ msgid "for a reader" -#~ msgstr "skaitytojui" - -#, fuzzy -#~ msgid "for advanced usege" -#~ msgstr "papildomas" - -#~ msgid "Download a custom PDF" -#~ msgstr "Atsisiųsti PDF failą" - -#~ msgid "Motifs and themes" -#~ msgstr "Motyvai ir temos" - -#~ msgid "See" -#~ msgstr "Žiūrėti" - -#~ msgid "Source" -#~ msgstr "Knygos" - -#~ msgid "of the book" -#~ msgstr "šaltinis" - -#~ msgid "Source XML file" -#~ msgstr "Šaltinio XML failas" - -#~ msgid "Book on" -#~ msgstr "Knyga " - -#~ msgid "Editor's Platform" -#~ msgstr "Redaktoriaus Platformoje" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "Knygos aprašymas Lektury.Gazeta.pl interneto svetainėje" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "Knygos aprašymas Vikipedijoje" - -#~ msgid "Mix this book" -#~ msgstr "Maišyti šią knygą" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "Atsisiųsti visas šios knygos audio knygas" - -#~ msgid "Catalogue" -#~ msgstr "Katalogas" - -#~ msgid "Authors" -#~ msgstr "Autoriai" - -#~ msgid "Kinds" -#~ msgstr "Rūšys" - -#~ msgid "Genres" -#~ msgstr "Žanrai" - -#~ msgid "Epochs" -#~ msgstr "Epochos" - -#~ msgid "Themes and topics" -#~ msgstr "Motyvai ir temos" - -#~ msgid "Listing of all DAISY files" -#~ msgstr "Visų DAISY failų sąrašas" - -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "Naujosios DAISY audio knygos" - -#~ msgid "" -#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" -#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -#~ "ograniczeń." -#~ msgstr "" -#~ "DAISY sistema yra visame pasaulyje pripažintas knygų bendrinimo formatas\n" -#~ "pritaikytas silpnesnio regėjimo žmonėms, akliesiems bei kitiems skaitymo " -#~ "problemų turintiems žmonėms.Galite jomis naudotis nemokamai ir be " -#~ "apribojimų." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "" -#~ "Paieškos kriterijai nėra tikslūs. Prašome išrinkti vieną iš žemiau " -#~ "nurodytų galimybių:" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Lentynos turinčios fragmentus " - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naują lentyną " -#~ "žemiau." - -#~ msgid "Save all shelves" -#~ msgstr "Įrašyti visas lentynas" - -#~ msgid "Expand fragment" -#~ msgstr "Išplėsti fragmentą" - -#~ msgid "Hide fragment" -#~ msgstr "Slėpti fragmentą" - -#~ msgid "See full category" -#~ msgstr "Žiūrėti visą kategoriją" - -#~ msgid "All books" -#~ msgstr "Visos knygos" - -#~ msgid "Audiobooks" -#~ msgstr "Audio knygos" - -#~ msgid "DAISY" -#~ msgstr "DAISY" - -#~ msgid "Work is licensed under " -#~ msgstr "Kūrinys yra licencijuotas pagal:" - -#~ msgid "Based on" -#~ msgstr "Remiantis" - -#~ msgid "Details" -#~ msgstr "Detalės " - -#~ msgid "Author" -#~ msgstr "Autorius" - -#~ msgid "Other resources" -#~ msgstr "Kiti ištekliai" - -#~ msgid "Source of the image" -#~ msgstr "Paveikslėlio šaltinis" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "Paveikslėlis Redaktoriaus Platformoje" - -#~ msgid "View XML source" -#~ msgstr "Žiūrėti XML šaltinį" - -#~ msgid "Work's themes " -#~ msgstr "Kūrinio motyvai" - -#~ msgid "Listing of all pictures" -#~ msgstr "Visų vaizdų sąrašas" - -#~ msgid "Download as" -#~ msgstr "Atsisiųsti kaip" - -#~ msgid "Artist" -#~ msgstr "Artistas" - -#~ msgid "Director" -#~ msgstr "Režisierus" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "Audio knygos buvo paruoštos kaip projektų dalis:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "\"%(cs)s, %(fb)s finansuotų" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "Audio knygos buvo paruoštos kaip dalis %(fb)s. finansuoto %(cs)s projekto." - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "Audio knygos buvo paruoštos kaip dalis %(cs)s projekto." - -#~ msgid "Did you mean" -#~ msgstr "Gal turėjote omenyje" - -#~ msgid "Results by authors" -#~ msgstr "Rezultatai pagal autorius" - -#~ msgid "Results by title" -#~ msgstr "Rezultatai pagal pavadinimą" - -#~ msgid "Results in text" -#~ msgstr "Rezultatai tekste" - -#~ msgid "Other results" -#~ msgstr "Kiti rezultatai" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "Atsiprašome! Rezultatų, atitinkančių paieškos kriterijus nėra." - -#~ msgid "" -#~ "Search engine supports following criteria: title, author, theme/topic, " -#~ "epoch, kind and genre.\n" -#~ "\t\tAs for now we do not support full text search." -#~ msgstr "" -#~ "Paieškos sistema palaiko nurodytus kriterijus: pavadinimas, autorius, " -#~ "tema, epocha, rūšis ir žanras.\n" -#~ "\t\t Kol kas negalima atlikti viso teksto paieškos." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "" -#~ "Atsiprašome! Paieškos užklausa turi susidėti mažiausiai iš dviejų " -#~ "simbolių." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "Lektury.Gazeta.pl interneto svetainėje" - -#~ msgid "in Wikipedia" -#~ msgstr "Vikipedijoje" - -#~ msgid "Your shelves with books" -#~ msgstr "Tavo lentynos su knygomis" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naują lentyną " -#~ "žemiau." - -#~ msgid "Create shelf" -#~ msgstr "Sukurti lentyną" - -#~ msgid "author" -#~ msgstr "autorius" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "Dalijamoji medžiaga mokytojams" - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "" -#~ "Skaitykite šio autoriaus kūrinio aprašymą interneto svetainėje Lektury." -#~ "Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "Skaitykite straipsnį apie šį autorių Vikipedijoje" - -#~ msgid "This author's works are copyrighted." -#~ msgstr "Šio autoriaus kūriniai yra autorinių teisių saugomi ." - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "Sužinokite kodėl šio autoriaus kūriniai negali būti " -#~ "publikuojami internetinėje bibliotekoje." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "Šio autoriaus kūriniai yra viešai prieinami ir netrukus bus publikuoti " -#~ "interneto svetainės Wolne Lektury internetinėje bibliotekoje. " - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "Šio autoriaus kūriniai netrukus bus viešai prieinami ir galės būti " -#~ "publikuojami be apribojimų" - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "Šis kūrinys yra viešai prieinamas ir netrukus bus publikuotas interneto " -#~ "svetainės Wolne Lektury internetinėje bibliotekoje." - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "Šis kūrinys netrukus bus viešai prieinamas ir galės būti publikuojamas be " -#~ "apribojimų" - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this work." -#~ msgstr "" -#~ "Sužinokite kodėl šis kūrinys negali būti publikuojamas " -#~ "internetinėje bibliotekoje." - -#~ msgid "This work is copyrighted." -#~ msgstr "Šis kūrinis yra autorinių teisių saugomas." - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "Prisijungti prie Wolne Lektury interneto svetainės" - -#~ msgid "Login" -#~ msgstr "Prisijungti" - -#~ msgid "" -#~ "Internet Explorer cannot display this site properly. Click here to read " -#~ "more..." -#~ msgstr "" -#~ "Internet Explorer nie sugeba teisingai parodyti šio tinklapio. Paspausti " -#~ "čia, kad sužinoti daugiau..." - -#~ msgid "Your shelves" -#~ msgstr "Tavo lentynos" - -#~ msgid "Register on" -#~ msgstr "Registruotis į" - -#~ msgid "or" -#~ msgstr "arba" - -#~ msgid "return to main page" -#~ msgstr "gryžk į pagrindinį puslapį" - -#, fuzzy -#~ msgid "Listing of all audiobooks on WolneLektury.pl" -#~ msgstr "Kūriniu sąrašas LaisvojiLiteratura.lt" - -#~ msgid "Put a book" -#~ msgstr "Prijung literatūrą" - -#~ msgid "on the shelf!" -#~ msgstr "į lentyną!" - -#~ msgid "for reading" -#~ msgstr "į skaitimą" - -#~ msgid "and printing using" -#~ msgstr "ir spausdinti su pagalbą" - -#~ msgid "Download EPUB" -#~ msgstr "atsisiųsk EPUB failą" - -#~ msgid "Download TXT" -#~ msgstr "atsisiųsk TXT failą" - -#~ msgid "on small displays, for example mobile phones" -#~ msgstr "ant displėjaus, pvz. mobilaus telefono " - -#~ msgid "Download ODT" -#~ msgstr "atsisiųsk ODT failą" - -#~ msgid "and editing using" -#~ msgstr "ir edituoti su pagalbą " - -#~ msgid "Book on project's wiki" -#~ msgstr "Sukurk straipsnį apie knygą vikiprojekte" - -#~ msgid "on" -#~ msgstr "ant" - -#~ msgid "See description" -#~ msgstr "Aprašymas" - -#, fuzzy -#~ msgid "Listing of all works on WolneLektury.pl" -#~ msgstr "Kūriniu sąrašas LaisvojiLiteratura.lt" - -#~ msgid "Jump to" -#~ msgstr "Santrumpa" - -#~ msgid "Categories" -#~ msgstr "Kūrinio kategorija " - -#, fuzzy -#~ msgid "Listing of all DAISY files on WolneLektury.pl" -#~ msgstr "Kūriniu sąrašas LaisvojiLiteratura.lt" - -#~ msgid "Show full category" -#~ msgstr "Apžiūrek visą kategoriją" - -#~ msgid "Hide" -#~ msgstr "Suvyniok" - -#~ msgid "Browse books by categories" -#~ msgstr "Peržiurinek literaturą pagal išrinktą kategoriją" - -#~ msgid "delete" -#~ msgstr "pašalink" - -#~ msgid "" -#~ "Create your own book set. You can share it with friends by sending them " -#~ "link to your shelf." -#~ msgstr "" -#~ "Sukurk savo knygų rinkiny. Gali juo veliau pasidalinti su kitais, " -#~ "persiūsk jiems nuorodą i tavo lentyną." - -#~ msgid "You need to " -#~ msgstr "Gali" - -#~ msgid "sign in" -#~ msgstr "Prisijungti " - -#~ msgid "to manage your shelves." -#~ msgstr "Kad valdti savo lentynom." - -#~ msgid "" -#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." -#~ msgstr "" -#~ "Pamokų scenarijai ir kiti sumanymai kaip panaudoti servisą " -#~ "LaisvojiLiteratura.lt mokslui." - -#~ msgid "" -#~ "are professional recordings of literary texts from our repository, " -#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " -#~ "DAISY system." -#~ msgstr "" -#~ "Tai profesjonalus literaturinių tekstų garso įrašai, mūsų rinkinių " -#~ "laisvai prieinami šiuose įrašymo formatouse: MP3, Ogg Vorbis ir sistema " -#~ "DAISY." - -#~ msgid "Themes groups" -#~ msgstr "Motyvų grupė" - -#~ msgid "See our blog" -#~ msgstr "Aplankyk mūsų blogą" - -#~ msgid "You can help us!" -#~ msgstr "Gali mums padėti!" - -#~ msgid "" -#~ "We try our best to elaborate works appended to our library. It is " -#~ "possible only due to support of our volunteers." -#~ msgstr "" -#~ "Dėka savanorių apršymai kūriniu, kurie yra prijungemi i mūsų biblioteką " -#~ "yra kiekvieną kartą kruopščiai paruošti" - -#~ msgid "" -#~ "We invite people who want to take part in developing Internet school " -#~ "library Wolne Lektury." -#~ msgstr "" -#~ "Kviečiame visus, kurie nori kartu su mumi kurti mokykline internetine " -#~ "biblioteką Laisvoji Literatura." - -#~ msgid "About us" -#~ msgstr "Apie projektą" - -#~ msgid "" -#~ "\n" -#~ "\t\t\tInternet library with school readings “Wolne Lektury” (www.wolnelektury.pl) is a project made by " -#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " -#~ "which are recommended by Ministry of National Education and are in public " -#~ "domain.\n" -#~ "\t\t\t" -#~ msgstr "" -#~ "\n" -#~ "\t\t\tInternetine biblioteka \"Laisvoji Literatura\" (www." -#~ "laisvojiliteratura.lt) siūlanti mokyklinę literaturą - tai " -#~ "Šiuolaikines Lenkijos Fondasto projektas. Fondas veike nou 2007 metų ir " -#~ "savo rinkinuose turi mokyklinę literaturą, kuri yra " -#~ "rekomenduojama per Švietimo ir Mokslo Ministeriją ir kuri jau\tpateko į " -#~ "viešią Interneto svetainę.\n" -#~ "\t\t\t" - -#~ msgid "Searching in" -#~ msgstr "Ieškoimas" - -#~ msgid "More than one result matching the criteria found." -#~ msgstr "Surasta daugiau nei vienas paješku rezultatas" - -#~ msgid "Search in WolneLektury.pl" -#~ msgstr "Ieškok šiame tinklapyje LasvojiLiteratura.lt " - -#~ msgid "Your shelf is empty" -#~ msgstr "Tavo lentyna yra tuščia" - -#~ msgid "" -#~ "You can put a book on a shelf by entering page of the reading and " -#~ "clicking 'Put on the shelf'." -#~ msgstr "" -#~ "Gali įmesti knygą į lentyną, įeik į knygos tinklapį ir išrink \"Į lentyną" -#~ "\". " - -#~ msgid "Choose books' formats which you want to download:" -#~ msgstr "Pasirink knygos persiuntimo formatą:" - -#~ msgid "for listening" -#~ msgstr "klausyti" - -#~ msgid "on favourite MP3 player" -#~ msgstr "numylėtam MP3 grotuve" - -#~ msgid "open format" -#~ msgstr "atviras formatas" - -#~ msgid "Xiph.org Foundation" -#~ msgstr "Fondo Xiph.Org" - -#~ msgid "Updating list of books' formats on the shelf" -#~ msgstr "Atnaujinti knygų formatų sąrašą lentynose. " - -#~ msgid "cancel" -#~ msgstr "anuliuoti" - -#~ msgid "Share this shelf" -#~ msgstr "Pasidalink šią lentyną." - -#~ msgid "" -#~ "Copy this link and share it with other people to let them see your shelf." -#~ msgstr "" -#~ "Sukopijuok šią nuorodą ir persiusk ją tiems, su kuriais noru pasidalinti " -#~ "savo lentyną." - -#, fuzzy -#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Perskaityk šio autoriaus aprašymą tinklapį Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Perskaityk šio autoriaus aprašymą tinklapį Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Perskaityk šio autoriaus aprašymą tinklapį Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read related study on Lektury.Gazeta.pl" -#~ msgstr "Perskaityk šio autoriaus aprašymą tinklapį Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" -#~ msgstr "Perskaityk straipsnį apie autorių Wikipedijoje" - -#, fuzzy -#~ msgid "Read article about kind %(last_tag)s on Wikipedia" -#~ msgstr "Perskaityk straipsnį apie autorių Wikipedijoje" - -#, fuzzy -#~ msgid "Read article about genre %(last_tag)s on Wikipedia" -#~ msgstr "Perskaityk straipsnį apie autorių Wikipedijoje" - -#, fuzzy -#~ msgid "Read related article on Wikipedia" -#~ msgstr "Perskaityk straipsnį apie autorių Wikipedijoje" - -#~ msgid "Delete" -#~ msgstr "pašalinti " - -#~ msgid "return to the main page" -#~ msgstr "sugryžk į pagrindinį puslapį " - -#~ msgid "return to list of materials" -#~ msgstr "gryžk i medžiagų sarašą" - -#~ msgid "Hand-outs for teachers on " -#~ msgstr "Pagalbinės medžiagos mokytojams" - -#, fuzzy -#~ msgid "" -#~ "Download TXT - for reading on small displays, for example mobile phones" -#~ msgstr "ant displėjaus, pvz. mobilaus telefono " - -#~ msgid "Polish" -#~ msgstr "Lenkų" - -#~ msgid "German" -#~ msgstr "Vokiečių" - -#~ msgid "English" -#~ msgstr "Anglų " - -#~ msgid "Lithuanian" -#~ msgstr "Lietuvių" - -#~ msgid "French" -#~ msgstr "Prancūzų" - -#~ msgid "Russian" -#~ msgstr "Rusų" - -#~ msgid "Spanish" -#~ msgstr "Ispanų" - -#~ msgid "Ukrainian" -#~ msgstr "Ukrainiečių" - -#~ msgid "Choose your interface language: " -#~ msgstr "Pasirink sąsajos kalbą:" - -#~ msgid "Choose language" -#~ msgstr "Pasirink kalbą" - -#~ msgid "Hide description" -#~ msgstr "Suvyniok aprašymą " - -#~ msgid "Download MP3" -#~ msgstr "atsisiųsk MP3 failą" - -#~ msgid "Download Ogg Vorbis" -#~ msgstr "atsisiųsk Ogg Vorbis failą" - -#~ msgid "Download DAISY" -#~ msgstr "atsisiųsk DAISY failą" - -#~ msgid "check list of books" -#~ msgstr "patikrink knygų sąrašą" - -#~ msgid "in our repository" -#~ msgstr "mūsų knygų rinkiny" - -#~ msgid "Read study of epoch" -#~ msgstr "Perskaityk gadynės aprašymą" - -#~ msgid "Read article about epoch" -#~ msgstr "Perskaityk straipsnį apie gadynę " diff --git a/apps/wolnelektury_core/locale/pl/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index b6919642f..000000000 Binary files a/apps/wolnelektury_core/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/pl/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 6a6ad3450..000000000 --- a/apps/wolnelektury_core/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,1207 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: WolneLektury\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: pl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" -"X-Poedit-Language: Polish\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2)\n" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Zaloguj się" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "Zalogowano jako %(user)s" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "Załóż konto" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "Zaloguj się, aby kontynuować" - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Podana strona nie istnieje" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "Strona nie znaleziona" - -#: templates/404.html:14 -msgid "" -"We are sorry, but this page does not exist. Please check if you entered " -"correct address or go to " -msgstr "" -"Przepraszamy, ale ta strona nie istnieje. Sprawdź czy podałeś dobry adres, " -"lub przejdź do" - -#: templates/404.html:14 -msgid "main page" -msgstr "strony głównej" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "Błąd serwera" - -#: templates/500.html:19 -msgid "" -"

                The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"blog.

                Inform our administrators about the " -"error.

                " -msgstr "" -"

                Serwis Wolnelektury.pl jest chwilowo niedostępny. Odwiedź naszego bloga

                \n" -"

                Powiadom administratorów o błędzie.

                " - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "Serwis niedostępny" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "" -"Serwis Wolnelektury.pl jest obecnie niedostępny z powodu prac " -"konserwacyjnych." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "Biblioteka internetowa Wolne Lektury" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "Co nowego?" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "Ostatnie publikacje" - -#: templates/main_page.html:41 -msgid "News" -msgstr "Aktualności" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "Narzędzia" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "Zgłoś błąd lub sugestię" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "Pobierz katalog w formacie PDF." - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "Widget" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "Nie znalazłeś/-aś utworu?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "Plan publikacji" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "Informacje" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "Polityka prywatności" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "Użyto obrazu:" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" %(c)s free reading you have right to\n" -" " -msgid_plural "" -"\n" -" %(c)s free readings you have right to\n" -" " -msgstr[0] "" -"\n" -" %(c)s darmowy utwór do której masz prawo\n" -" " -msgstr[1] "" -"\n" -" %(c)s darmowe utwory do których masz prawo\n" -" " -msgstr[2] "" -"\n" -" %(c)s darmowych utworów do których " -"masz prawo\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "Witaj" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "Hasło" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "E-mail" - -#: templates/superbase.html:74 templates/user.html:14 -msgid "Social accounts" -msgstr "Konta społecznościowe" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "Moja półka" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "Administracja" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "Wyloguj" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "Szukaj" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "Wersje językowe" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" -"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" -"\t\t\t\tHosting: ICM.\n" -"\t\t\t\t" -msgstr "" -"\n" -"Wolne Lektury to projekt prowadzony przez fundację Nowoczesna Polska. \n" -"Reprodukcje cyfrowe wykonane przez Bibliotekę Narodową, Bibliotekę Śląską i Bibliotekę Elbląską z egzemplarzy pochodzących ze zbiorów BN, BŚ i " -"BE.\n" -"Hosting: ICM." - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" -msgstr "" -"\n" -"Fundacja Nowoczesna Polska, 00-514 Warszawa, ul. Marszałkowska 84/92 lok. " -"125, tel/fax: (22) 621-30-17, e-mail: fundacja@nowoczesnapolska.org.pl" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "Zamknij" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "Ładowanie" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "Użytkownik" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Administracja stroną" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "Tłumaczenia" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "zaawansowane" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "uproszczone" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "Importuj książkę" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "Nie pamiętasz hasła?" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -msgid "Sign in using:" -msgstr "Zaloguj się używając:" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "albo załóż konto" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgstr[0] "" -"\n" -"W serwisie Wolne Lektury już teraz opublikowany jest %(c)s utwór! Pomóż w " -"rozwijaniu biblioteki i uwalnianiu nowych lektur przekazując nam darowiznę lub 1% " -"podatku.\n" -msgstr[1] "" -"\n" -"W serwisie Wolne Lektury już teraz opublikowane są %(c)s utwory! Pomóż w " -"rozwijaniu biblioteki i uwalnianiu nowych lektur przekazując nam darowiznę lub 1% " -"podatku.\n" -msgstr[2] "" -"\n" -"W serwisie Wolne Lektury już teraz opublikowanych jest %(c)s utworów! Pomóż " -"w rozwijaniu biblioteki i uwalnianiu nowych lektur przekazując nam darowiznę lub 1% " -"podatku.\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" -"Zostań redaktorem lub redaktorką Wolnych Lektur! Sprawdź, czy obecnie " -"pracujemy nad publikacją wyszukiwanej przez ciebie lektury i samodzielnie " -"przygotuj publikację logując się na Platformie Redakcyjnej." - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "Więcej..." - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "Logowanie przez OpenID" - -#: templates/openid/login.html:27 -msgid "Sign In" -msgstr "Zaloguj się" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "poprzedni" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "następny" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "Zezwól na dostęp do Wolnych Lektur" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user %(user)s." -msgstr "" -"Potwierdź dostęp do Wolnych Lektur jako użytkownik %(user)s." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Powiązania konta" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"Możesz się zalogować na swoje konto używając następujących kont zewnętrznych:" - -#: templates/socialaccount/connections.html:36 -msgid "Remove" -msgstr "Usuń" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "Aktualnie do Twojego konta nie są podłączone żadne konta zewnętrzne." - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "Dodaj konto zewnętrzne" - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "Anulowano logowanie" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" -"Logowanie przy użyciu zewnętrznego konta zostało anulowane. Jeśli był to " -"błąd, przejdź do strony logowania." - -#~ msgid "Listing of all audiobooks" -#~ msgstr "Spis wszystkich audiobooków" - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "Ostatnio dodane audiobooki w formacie MP3" - -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "Ostatnio dodane audiobooki w formacie Ogg Vorbis" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." - -#~ msgid "See also" -#~ msgstr "Zobacz też" - -#~ msgid "Theme" -#~ msgstr "Motyw" - -#~ msgid "in work " -#~ msgstr "w utworze" - -#~ msgid "This work is licensed under:" -#~ msgstr "Utwór jest udostępniony na licencji:" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " Creative Commons Attribution-ShareAlike 3.0\n" -#~ " license." -#~ msgstr "" -#~ "Ten utwór nie jest chroniony prawem autorskim i znajduje się w " -#~ "domenie publicznej, co oznacza że możesz go swobodnie wykorzystywać, " -#~ "publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi " -#~ "materiałami (przypisy, motywy literackie etc.), które podlegają prawu " -#~ "autorskiemu, to te dodatkowe materiały udostępnione są na licencji Uznanie " -#~ "autorstwa-Na tych samych warunkach 3.0." - -#~ msgid "Text prepared based on:" -#~ msgstr "Tekst opracowany na podstawie:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Opracowanie redakcyjne i przypisy:" - -#~ msgid "Listing of all works" -#~ msgstr "Spis wszystkich utworów" - -#~ msgid "Table of Content" -#~ msgstr "Spis treści" - -#~ msgid "↑ top ↑" -#~ msgstr "↑ góra ↑" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Wrzuć lekturę na półkę!" - -#~ msgid "Create new shelf" -#~ msgstr "Utwórz nową półkę" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć nową półkę " -#~ "poniżej." - -#~ msgid "Put on the shelf!" -#~ msgstr "Wrzuć na półkę" - -#~ msgid "Epoch" -#~ msgstr "Epoka" - -#~ msgid "Kind" -#~ msgstr "Rodzaj" - -#~ msgid "Genre" -#~ msgstr "Gatunek" - -#~ msgid "Read online" -#~ msgstr "Czytaj online" - -#~ msgid "Download" -#~ msgstr "Pobierz" - -#~ msgid "to print" -#~ msgstr "do druku" - -#~ msgid "for an e-book reader" -#~ msgstr "na czytnik e-booków" - -#~ msgid "for Kindle" -#~ msgstr "na Kindle" - -#~ msgid "for advanced usage" -#~ msgstr "do zadań specjalnych" - -#~ msgid "Listen" -#~ msgstr "Słuchaj" - -#~ msgid "Table of contents" -#~ msgstr "Spis treści" - -#~ msgid "Themes" -#~ msgstr "Motywy" - -#~ msgid "Edit. note" -#~ msgstr "Nota red." - -#~ msgid "Infobox" -#~ msgstr "Informacje" - -#~ msgid "Book's page" -#~ msgstr "Strona utworu" - -#~ msgid "for a reader" -#~ msgstr "na czytnik" - -#~ msgid "Download a custom PDF" -#~ msgstr "Stwórz własny plik PDF" - -#~ msgid "Motifs and themes" -#~ msgstr "Motywy i tematy" - -#~ msgid "See" -#~ msgstr "Zobacz" - -#~ msgid "Source" -#~ msgstr "Źródło" - -#~ msgid "of the book" -#~ msgstr "utworu" - -#~ msgid "Source XML file" -#~ msgstr "Źródłowy plik XML" - -#~ msgid "Book on" -#~ msgstr "Utwór na" - -#~ msgid "Editor's Platform" -#~ msgstr "Platformie Redakcyjnej" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "Opis lektury w Lektury.Gazeta.pl" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "Opis lektury w Wikipedii" - -#~ msgid "Mix this book" -#~ msgstr "Miksuj treść utworu" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "Pobierz wszystkie audiobooki tego utworu" - -#~ msgid "Catalogue" -#~ msgstr "Katalog" - -#~ msgid "Authors" -#~ msgstr "Autorzy" - -#~ msgid "Kinds" -#~ msgstr "Rodzaje" - -#~ msgid "Genres" -#~ msgstr "Gatunki" - -#~ msgid "Epochs" -#~ msgstr "Epoki" - -#~ msgid "Themes and topics" -#~ msgstr "Motywy i tematy" - -#~ msgid "Listing of all DAISY files" -#~ msgstr "Spis wszystkich plików DAISY" - -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "Ostatnio dodane audiobooki w formacie DAISY" - -#~ msgid "" -#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" -#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -#~ "ograniczeń." -#~ msgstr "" -#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" -#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -#~ "ograniczeń." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "" -#~ "Podane kryteria są niejednoznaczne. Proszę wybrać jedną z następujących " -#~ "możliwości:" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Półki zawierające fragment" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć nową półkę " -#~ "poniżej." - -#~ msgid "Save all shelves" -#~ msgstr "Zapisz półki" - -#~ msgid "Expand fragment" -#~ msgstr "Rozwiń fragment" - -#~ msgid "Hide fragment" -#~ msgstr "Zwiń fragment" - -#~ msgid "See full category" -#~ msgstr "Zobacz całą kategorię" - -#~ msgid "All books" -#~ msgstr "Wszystkie utwory" - -#~ msgid "Audiobooks" -#~ msgstr "Audiobooki" - -#~ msgid "DAISY" -#~ msgstr "DAISY" - -#~ msgid "Work is licensed under " -#~ msgstr "Utwór jest udostępniony na licencji" - -#~ msgid "Based on" -#~ msgstr "Na podstawie" - -#~ msgid "Details" -#~ msgstr "O utworze" - -#~ msgid "Author" -#~ msgstr "Autor" - -#~ msgid "Other resources" -#~ msgstr "W innych miejscach" - -#~ msgid "Source of the image" -#~ msgstr "Źródło obrazu" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "Obraz na Platformie Redakcyjnej" - -#~ msgid "View XML source" -#~ msgstr "Źródłowy plik XML" - -#~ msgid "Work's themes " -#~ msgstr "Motywy w utworze" - -#~ msgid "Listing of all pictures" -#~ msgstr "Spis wszystkich obrazów" - -#~ msgid "Download as" -#~ msgstr "Pobierz jako" - -#~ msgid "Artist" -#~ msgstr "Czyta" - -#~ msgid "Director" -#~ msgstr "Reżyseruje" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "Audiobooki przygotowane w ramach projektów:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "%(cs)s, finansowanego przez %(fb)s" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "Audiobooki przygotowane w ramach projektu %(cs)s finansowanego przez %(fb)" -#~ "s." - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "Audiobooki przygotowane w ramach projektu %(cs)s." - -#~ msgid "Did you mean" -#~ msgstr "Czy chodziło Ci o" - -#~ msgid "Results by authors" -#~ msgstr "Znalezieni autorzy" - -#~ msgid "Results by title" -#~ msgstr "Znalezione w tytułach" - -#~ msgid "Results in text" -#~ msgstr "Znalezione w treści" - -#~ msgid "Other results" -#~ msgstr "Inne wyniki" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "" -#~ "Przepraszamy! Brak wyników spełniających kryteria podane w zapytaniu." - -#~ msgid "" -#~ "Search engine supports following criteria: title, author, theme/topic, " -#~ "epoch, kind and genre.\n" -#~ "\t\tAs for now we do not support full text search." -#~ msgstr "" -#~ "Wyszukiwarka obsługuje takie kryteria jak tytuł, autor, motyw/temat, " -#~ "epoka, rodzaj i gatunek utworu. Obecnie nie obsługujemy wyszukiwania fraz " -#~ "w tekstach utworów." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "Przepraszamy! Zapytanie musi zawierać co najmniej dwa znaki." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "w serwisie Lektury.Gazeta.pl" - -#~ msgid "in Wikipedia" -#~ msgstr "w Wikipedii" - -#~ msgid "Your shelves with books" -#~ msgstr "Twoje półki z lekturami" - -#~ msgid "remove" -#~ msgstr "usuń" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć półkę poniżej." - -#~ msgid "Create shelf" -#~ msgstr "Utwórz półkę" - -#~ msgid "author" -#~ msgstr "autor" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "Materiały pomocnicze dla nauczycieli" - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "Przeczytaj omówienia utworów autora w serwisie Lektury.Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "Przeczytaj artykuł o autorze w Wikipedii" - -#~ msgid "This author's works are copyrighted." -#~ msgstr "Dzieła tego autora objęte są prawem autorskim." - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "Dowiedz " -#~ "się, dlaczego biblioteki internetowe nie mogą udostępniać dzieł tego " -#~ "autora." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "Dzieła tego autora znajdują się w domenie publicznej i niedługo zostaną " -#~ "opublikowane w szkolnej bibliotece internetowej Wolne Lektury." - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "Dzieła tego autora przejdą do zasobów domeny publicznej i będą mogły być " -#~ "publikowane bez żadnych ograniczeń za" - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "To dzieło znajduje się w domenie publicznej i niedługo zostanie " -#~ "opublikowane w szkolnej bibliotece internetowej Wolne Lektury." - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "To dzieło przejdzie do zasobów domeny publicznej i będzie mogło być " -#~ "publikowane bez żadnych ograniczeń za" - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this work." -#~ msgstr "" -#~ "Dowiedz " -#~ "się, dlaczego biblioteki internetowe nie mogą udostępniać tego dzieła." - -#~ msgid "This work is copyrighted." -#~ msgstr "To dzieło objęte jest prawem autorskim." - -#, fuzzy -#~ msgid "for advanced usege" -#~ msgstr "zaawansowane" - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "Zaloguj się do Wolnych Lektur" - -#~ msgid "Login" -#~ msgstr "Zaloguj się" - -#~ msgid "Mobile app" -#~ msgstr "Aplikacja mobilna" - -#~ msgid "See description" -#~ msgstr "Zobacz opis" - -#~ msgid "of the book " -#~ msgstr "utworu" - -#~ msgid "" -#~ "Internet Explorer cannot display this site properly. Click here to read " -#~ "more..." -#~ msgstr "" -#~ "Internet Explorer nie potrafi poprawnie wyświetlić tej strony. Kliknij " -#~ "tutaj, aby dowiedzieć się więcej..." - -#~ msgid "Your shelves" -#~ msgstr "Twoje półki" - -#~ msgid "Didn't find a book? Make a suggestion." -#~ msgstr "Nie znalazłeś utworu na stronie? Zgłoś sugestię." - -#~ msgid "Register on" -#~ msgstr "Zarejestruj się w" - -#~ msgid "or" -#~ msgstr "lub" - -#~ msgid "return to main page" -#~ msgstr "wróć do strony głównej" - -#~ msgid "Listing of all audiobooks on WolneLektury.pl" -#~ msgstr "Spis wszystkich audiobooków w WolneLektury.pl" - -#~ msgid "on WolneLektury.pl" -#~ msgstr "w WolneLektury.pl" - -#~ msgid "Put a book" -#~ msgstr "Wrzuć lekturę" - -#~ msgid "on the shelf!" -#~ msgstr "na półkę!" - -#~ msgid "and printing using" -#~ msgstr "i drukowania przy pomocy" - -#~ msgid "Download EPUB" -#~ msgstr "Pobierz plik EPUB" - -#~ msgid "on mobile devices" -#~ msgstr "na urządzeniach mobilnych" - -#~ msgid "Download TXT" -#~ msgstr "Pobierz plik TXT" - -#~ msgid "on small displays, for example mobile phones" -#~ msgstr "na małych ekranach, np. na komórce" - -#~ msgid "Download ODT" -#~ msgstr "Pobierz plik ODT" - -#~ msgid "and editing using" -#~ msgstr "i edytowania przy pomocy" - -#~ msgid "on" -#~ msgstr "w" - -#~ msgid "Listing of all works on WolneLektury.pl" -#~ msgstr "Spis wszystkich utworów w WolneLektury.pl" - -#~ msgid "audiobooks" -#~ msgstr "audiobooki" - -#~ msgid "Jump to" -#~ msgstr "Na skróty" - -#~ msgid "Categories" -#~ msgstr "Utwór w kategoriach" - -#~ msgid "Listing of all DAISY files on WolneLektury.pl" -#~ msgstr "Spis wszystkich plików DAISY w WolneLektury.pl" - -#~ msgid "Show full category" -#~ msgstr "Zobacz całą kategorię" - -#~ msgid "Hide" -#~ msgstr "Zwiń" - -#~ msgid "" -#~ "\n" -#~ "%(c)s book from public domain or " -#~ "under\n" -#~ "a free " -#~ "license.\n" -#~ msgid_plural "" -#~ "\n" -#~ "%(c)s books from public domain " -#~ "or under\n" -#~ "a free " -#~ "license.\n" -#~ msgstr[0] "" -#~ "\n" -#~ "%(c)s lektura z domeny publicznej\n" -#~ "lub na wolnej licencji.\n" -#~ msgstr[1] "" -#~ "\n" -#~ "%(c)s lektury z domeny publicznej\n" -#~ "i na wolnej licencji.\n" -#~ msgstr[2] "" -#~ "\n" -#~ "%(c)s lektur z domeny publicznej\n" -#~ "i na wolnej licencji.\n" - -#~ msgid "Browse books by categories" -#~ msgstr "Przeglądaj lektury według wybranych kategorii" - -#~ msgid "Books for every school level" -#~ msgstr "Lektury na każdy poziom edukacji" - -#~ msgid "primary school" -#~ msgstr "szkoła podstawowa" - -#~ msgid "gymnasium" -#~ msgstr "gimnazjum" - -#~ msgid "high school" -#~ msgstr "szkoła średnia" - -#~ msgid "delete" -#~ msgstr "usuń" - -#~ msgid "" -#~ "Create your own book set. You can share it with friends by sending them " -#~ "link to your shelf." -#~ msgstr "" -#~ "Stwórz własny zestaw lektur. Możesz się nim później podzielić z innymi, " -#~ "przesyłając im link do Twojej półki." - -#~ msgid "You need to " -#~ msgstr "Aby zarządzać swoimi półkami, musisz się" - -#~ msgid "sign in" -#~ msgstr "zalogować" - -#~ msgid "to manage your shelves." -#~ msgstr "." - -#~ msgid "" -#~ "Place our widget - search engine for Wolne Lektury which gives access to " -#~ "free books and audiobooks - on your homepage! Just copy the HTML code " -#~ "below onto your page:" -#~ msgstr "" -#~ "Umieść widżet – wyszukiwarkę Wolnych Lektur umożliwiającą dostęp do " -#~ "darmowych lektur i audiobooków – na swojej stronie WWW! Po prostu skopiuj " -#~ "poniższy kod HTML na swoją stronę:" - -#~ msgid "Insert this element in place where you want display the widget" -#~ msgstr "Umieść ten element w miejscu gdzie chcesz wyświetlić widżet" - -#~ msgid "Place this element just before closing body tag: </body>" -#~ msgstr "Umieść ten element tuż przed zamknięciem taga body: </body>" - -#~ msgid "" -#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." -#~ msgstr "" -#~ "Scenariusze lekcji i inne pomysły na wykorzytanie serwisu WolneLektury.pl " -#~ "podczas nauczania." - -#~ msgid "Themes groups" -#~ msgstr "Rodziny motywów" - -#~ msgid "See our blog" -#~ msgstr "Zobacz nasz blog" - -#~ msgid "You can help us!" -#~ msgstr "Możesz nam pomóc!" - -#~ msgid "Become a volunteer – an editor, developer or translator." -#~ msgstr "" -#~ "Zostań naszym redaktorem, programistą lub tłumaczem – wolontariuszem." - -#~ msgid "Gain new skills and experience." -#~ msgstr "Zdobądź nowe umiejętności i doświadczenie." - -#~ msgid "Join an open project of creating an innovative online library." -#~ msgstr "" -#~ "Weź udział w otwartym projekcie i twórz innowacyjną bibliotekę " -#~ "internetową." - -#~ msgid "About us" -#~ msgstr "O projekcie" - -#~ msgid "" -#~ "\n" -#~ "\t\t\tInternet library with school readings “Wolne Lektury” (www.wolnelektury.pl) is a project made by " -#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " -#~ "which are recommended by Ministry of National Education and are in public " -#~ "domain.\n" -#~ "\t\t\t" -#~ msgstr "" -#~ "\n" -#~ "Biblioteka internetowa z lekturami szkolnymi „Wolne Lektury” (www.wolnelektury.pl) to projekt " -#~ "realizowany przez fundację Nowoczesna Polska. Działa od 2007 roku i " -#~ "udostępnia w swoich zbiorach lektury szkolne, które są zalecane do użytku " -#~ "przez Ministerstwo Edukacji Narodowej i które trafiły już do domeny " -#~ "publicznej." - -#~ msgid "" -#~ "\n" -#~ "Portions of this page are modifications based on work created and shared by Google and used\n" -#~ "according to terms described in the Creative Commons\n" -#~ "3.0 Attribution License.\n" -#~ msgstr "" -#~ "\n" -#~ "Strona zawiera zmodyfikowane logo Androida, stworzone i udostępnione przez Google\n" -#~ "na warunkach licencji Creative Commons 3.0 Uznanie Autorstwa.\n" - -#~ msgid "return to the main page" -#~ msgstr "wróć do strony głównej" - -#~ msgid "Searching in" -#~ msgstr "Wyszukiwanie w" - -#~ msgid "More than one result matching the criteria found." -#~ msgstr "Znaleziono więcej niż jeden wynik wyszukiwania." - -#~ msgid "Search in WolneLektury.pl" -#~ msgstr "Wyszukiwanie w WolneLektury.pl" - -#~ msgid "Your shelf is empty" -#~ msgstr "Twoja półka jest pusta" - -#~ msgid "" -#~ "You can put a book on a shelf by entering page of the reading and " -#~ "clicking 'Put on the shelf'." -#~ msgstr "" -#~ "Możesz wrzucić książkę na półkę, wchodząc na stronę danej lektury i " -#~ "klikając na przycisk „Na półkę!”." - -#~ msgid "Choose books' formats which you want to download:" -#~ msgstr "Wybierz formaty książek, które chcesz pobrać:" - -#~ msgid "for listening" -#~ msgstr "do słuchania" - -#~ msgid "on favourite MP3 player" -#~ msgstr "w ulubionym odtwarzaczu MP3" - -#~ msgid "Xiph.org Foundation" -#~ msgstr "fundacji Xiph.Org" - -#~ msgid "Updating list of books' formats on the shelf" -#~ msgstr "Uaktualnianie listy formatów książek na półce." - -#~ msgid "cancel" -#~ msgstr "anuluj" - -#~ msgid "Share this shelf" -#~ msgstr "Podziel się tą półką" - -#~ msgid "" -#~ "Copy this link and share it with other people to let them see your shelf." -#~ msgstr "" -#~ "Skopiuj ten link i przekaż go osobom, z którymi chcesz się podzielić tą " -#~ "półką." - -#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "" -#~ "Przeczytaj omówienia z epoki %(last_tag)s w serwisie Lektury.Gazeta.pl" - -#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "" -#~ "Przeczytaj omówienia z rodzaju %(last_tag)s w serwisie Lektury.Gazeta.pl" - -#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "" -#~ "Przeczytaj omówienia z gatunku %(last_tag)s w serwisie Lektury.Gazeta.pl" - -#~ msgid "Read related study on Lektury.Gazeta.pl" -#~ msgstr "Przeczytaj powiązane omówienia w serwisie Lektury.Gazeta.pl" - -#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" -#~ msgstr "Przeczytaj artykuł o epoce %(last_tag)s w Wikipedii" - -#~ msgid "Read article about kind %(last_tag)s on Wikipedia" -#~ msgstr "Przeczytaj artykuł o rodzaju %(last_tag)s w Wikipedii" - -#~ msgid "Read article about genre %(last_tag)s on Wikipedia" -#~ msgstr "Przeczytaj artykuł o gatunku %(last_tag)s w Wikipedii" - -#~ msgid "Read related article on Wikipedia" -#~ msgstr "Przeczytaj powiązany artykuł w Wikipedii" - -#~ msgid "Delete" -#~ msgstr "Usuń" - -#~ msgid "Hand-outs for teachers on " -#~ msgstr "Materiały pomocnicze dla nauczycieli w " - -#~ msgid "" -#~ "We try our best to elaborate works appended to our library. It is " -#~ "possible only due to support of our volunteers." -#~ msgstr "" -#~ "Utwory włączane sukcesywnie do naszej biblioteki staramy się opracowywać " -#~ "jak najdokładniej. Jest to możliwe tylko dzięki współpracującym z nami " -#~ "wolontariuszom." - -#~ msgid "" -#~ "We invite people who want to take part in developing Internet school " -#~ "library Wolne Lektury." -#~ msgstr "" -#~ "Zapraszamy wszystkie osoby, które chcą współtworzyć szkolną bibliotekę " -#~ "internetową Wolne Lektury." - -#~ msgid "Latest audiobooks - all formats" -#~ msgstr "Ostatnio dodane audiobooki - wszystkie formaty" - -#~ msgid "return to list of materials" -#~ msgstr "wróć do listy materiałów" - -#~ msgid "Book on project's wiki" -#~ msgstr "Lektura na wiki projektu" - -#~ msgid "daisy" -#~ msgstr "daisy" - -#~ msgid "" -#~ "are professional recordings of literary texts from our repository, " -#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " -#~ "DAISY system." -#~ msgstr "" -#~ "to profesjonalne nagrania tekstów literackich z naszego zbioru dostępne " -#~ "na wolnej licencji w formatach MP3, Ogg Vorbis oraz w systemie DAISY." - -#~ msgid "Download MP3" -#~ msgstr "Pobierz plik MP3" - -#~ msgid "Download Ogg Vorbis" -#~ msgstr "Pobierz plik Ogg Vorbis" - -#~ msgid "Download DAISY" -#~ msgstr "Pobierz plik DAISY" - -#~ msgid "check list of books" -#~ msgstr "zobacz spis utworów" - -#~ msgid "in our repository" -#~ msgstr "w naszym zbiorze" - -#~ msgid "Polish" -#~ msgstr "polski" - -#~ msgid "German" -#~ msgstr "niemiecki" - -#~ msgid "English" -#~ msgstr "angielski" - -#~ msgid "Lithuanian" -#~ msgstr "litewski" - -#~ msgid "French" -#~ msgstr "francuski" - -#~ msgid "Russian" -#~ msgstr "rosyjski" - -#~ msgid "Spanish" -#~ msgstr "hiszpański" - -#~ msgid "Ukrainian" -#~ msgstr "ukraiński" - -#~ msgid "Choose your interface language: " -#~ msgstr "Wybierz język interfejsu:" - -#~ msgid "Choose language" -#~ msgstr "Wybierz język" - -#~ msgid "Hide description" -#~ msgstr "Zwiń opis" diff --git a/apps/wolnelektury_core/locale/ru/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 55de36919..000000000 Binary files a/apps/wolnelektury_core/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/ru/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index f7eb548b3..000000000 --- a/apps/wolnelektury_core/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,1122 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\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" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Вход" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "Зарегистроваться" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "Вы должны войти, чтобы продолжaть" - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Сайт не существует" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "Сайт не найден" - -#: templates/404.html:14 -msgid "" -"We are sorry, but this page does not exist. Please check if you entered " -"correct address or go to " -msgstr "" -"Извините! Этот сайт не существует. Проверьте, пожалуйста, набрали ли вы " -"хороший адрес или зайдите на" - -#: templates/404.html:14 -msgid "main page" -msgstr "главную страницу" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "Ошибка сервера" - -#: templates/500.html:19 -msgid "" -"

                The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"blog.

                Inform our administrators about the " -"error.

                " -msgstr "" -"

                The Wolnelektury.pl временно не работает. Тем времeнем зайдите на blog.

                Сообщите нашим администраторам об " -"ошибке.

                " - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "Сервис недоступен" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "" -"По поводу технической поддрежки сайт The Wolnelektury.pl временно не " -"работает." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "WolneLektury интернет библиотека" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "Последние публикации" - -#: templates/main_page.html:41 -msgid "News" -msgstr "Новости" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "Утилиты" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "Сообщить об ошибке или предложении" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "Скачать каталог в PDF формате." - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "Виджет" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "Потеряли книгу?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "Издательский план" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "Информация" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "Используемые изображения:" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "на WolneLektury.pl" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" %(c)s free reading you have right to\n" -" " -msgid_plural "" -"\n" -" %(c)s free readings you have right to\n" -" " -msgstr[0] "" -"\n" -" %(c)s бесплатное чтение, котором Вы " -"вправе пользоваться\n" -" " -msgstr[1] "" -"\n" -" %(c)s бесплатные чтения, которыми Вы " -"вправе пользоваться \n" -" " -msgstr[2] "" -"\n" -" %(c)s бесплатных чтений, которыми Вы " -"вправе пользоваться \n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "Добро пожаловать" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "" - -#: templates/superbase.html:74 templates/user.html:14 -#, fuzzy -msgid "Social accounts" -msgstr "или присоединитесь к пользователям" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "Создать полку" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "Администрация" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "Выход" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "Поиск" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "Языковые версии" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" -"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" -"\t\t\t\tHosting: ICM.\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tWolne Lektury - это проект под управлением Фонда Молодой Польши .\n" -"\t\t\t\t Цифровые копии создаются " -"Народная Библиотека , Силезская " -"Библиотека and Эльблонгская Библиотека, основанные на ресурсах TNL. \n" -"\t\t\t\tHosting EO Networks.\n" -"\t\t\t\t" - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tФонд Молодой Польши, 00-514 Варшава, ul. Marszałkowska 84/92 lok. " -"125, tel/fax: (22) 621-30-17\n" -" e-mail: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "Закройте" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "Погрузка" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Сайт администрации" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "Перевод" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "продвинутый" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "упрощенный" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "Импорт книги" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -#, fuzzy -msgid "Sign in using:" -msgstr "Вход" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "или зарегистрироваться" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgstr[0] "" -"\n" -"У нас %(c)s произведение опубликованное на Wolne Lektury\n" -"Помогите нам распространить библиотеку и поместить новые бесплатные чтения\n" -"при помощи денежного пожертвования\n" -"или перевода 1% вашего подоходного налога.\n" -msgstr[1] "" -"\n" -"У нас %(c)s произведения опубликованные на Wolne Lektury\n" -"Помогите нам распространить библиотеку и поместить новые бесплатные чтения\n" -"при помощи денежного пожертвования\n" -"или перевода 1% вашего подоходного налога.\n" -msgstr[2] "" -"\n" -"У нас %(c)s произведений опубликованных на Wolne Lektury\n" -"Помогите нам распространить библиотеку и поместить новые бесплатные чтения\n" -"при помощи денежного пожертвования\n" -"или перевода 1% вашего подоходного налога.\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" -"Станьте редактором Wolne Lektury! Узанйте работаем ли\n" -"мы сейчас над чтением, которoе вы ищите и сами подготовьте\n" -"публикацию, входя в платформу редактировки." - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "Подробнее..." - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "" - -#: templates/openid/login.html:27 -#, fuzzy -msgid "Sign In" -msgstr "Вход" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "предыдущая" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "следующая" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "Авторизация доступа к Wolne Lektury" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user %(user)s." -msgstr "" -"Подтверждение для авторизации доступа к Wolne Lektury как пользователь " -"%(user)s ." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: templates/socialaccount/connections.html:36 -#, fuzzy -msgid "Remove" -msgstr "убрать" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "" - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" - -#~ msgid "Listing of all audiobooks" -#~ msgstr "Список работ" - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "Последние MP3 аудиокниги" - -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "Последние Ogg Vorbis аудиокниги" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "Аудиотека школьных чтений Фонда Nowoczesna Polska.\n" -#~ ". Можете использовать ее бесплатно и без ограничений. \n" -#~ "Аудиокниги записывают известные актеры, в том числе Данута Стенка и Ян " -#~ "Пешек." - -#~ msgid "See also" -#~ msgstr "Подробнее" - -#~ msgid "Theme" -#~ msgstr "Мотив" - -#~ msgid "in work " -#~ msgstr "в труде" - -#~ msgid "This work is licensed under:" -#~ msgstr "Разрешение на работу со стороны" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " Creative Commons Attribution-ShareAlike 3.0\n" -#~ " license." -#~ msgstr "" -#~ "Этот труд не защищен авторским правом и является частью \n" -#~ "         общественного домена, что обозначает, нем можно свободно " -#~ "спользоваться, публиковать и \n" -#~ "         распространять. Если есть какие-либо дополнительные материалы, " -#~ "защищенные авторскими правами \n" -#~ "         предоставленные с этой работой (например, аннотации, мотивы и т." -#~ "д.), эти \n" -#~ "         материалы доступны по лицензией \n" -#~ "         " -#~ "Creative Commons Attribution-ShareAlike 3.0 " - -#~ msgid "Text prepared based on:" -#~ msgstr "Текст подготовлен на основе:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Под редакцией и с комментариями:" - -#~ msgid "Listing of all works" -#~ msgstr "Список работ" - -#~ msgid "Table of Content" -#~ msgstr "Оглавление" - -#~ msgid "↑ top ↑" -#~ msgstr "↑ топ ↑" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Поставьте книгу на полку!" - -#~ msgid "Create new shelf" -#~ msgstr "Создать новую полку" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "У вас нет никаких полок. Если вы хотите, вы можете создать одну ниже." - -#~ msgid "Put on the shelf!" -#~ msgstr "Поставьте на полку!" - -#~ msgid "Epoch" -#~ msgstr "эпоха" - -#~ msgid "Kind" -#~ msgstr "форма" - -#~ msgid "Genre" -#~ msgstr "жанр" - -#~ msgid "Read online" -#~ msgstr "Читать онлайн" - -#~ msgid "Download" -#~ msgstr "Скачать" - -#~ msgid "to print" -#~ msgstr "печатать" - -#~ msgid "for an e-book reader" -#~ msgstr "для читателя электронной книги" - -#~ msgid "for Kindle" -#~ msgstr "для Киндле" - -#~ msgid "for advanced usage" -#~ msgstr "продвинутое использование" - -#~ msgid "Listen" -#~ msgstr "Послушайте" - -#~ msgid "Table of contents" -#~ msgstr "Оглавление" - -#~ msgid "Themes" -#~ msgstr "Мотивы" - -#~ msgid "Edit. note" -#~ msgstr "Изменить примечание" - -#~ msgid "Infobox" -#~ msgstr "Инфобокс" - -#~ msgid "Book's page" -#~ msgstr "Возратитесь на сайт книги" - -#~ msgid "for a reader" -#~ msgstr "для читателя" - -#, fuzzy -#~ msgid "for advanced usege" -#~ msgstr "продвинутый" - -#~ msgid "Download a custom PDF" -#~ msgstr "Скачать PDF" - -#~ msgid "Motifs and themes" -#~ msgstr "Мотивы и темы" - -#~ msgid "See" -#~ msgstr "Посмотрите" - -#~ msgid "Source" -#~ msgstr "Источник" - -#~ msgid "of the book" -#~ msgstr "данной книги" - -#~ msgid "Source XML file" -#~ msgstr "Исходный файл" - -#~ msgid "Book on" -#~ msgstr "Книга на" - -#~ msgid "Editor's Platform" -#~ msgstr "Платформа редакторов" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "Описание книги на Lektury.Gazeta.pl" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "Описание книги на Wikipedia" - -#~ msgid "Mix this book" -#~ msgstr "данной книги" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "Скачать все книги с этой полки" - -#~ msgid "Catalogue" -#~ msgstr "Каталог" - -#~ msgid "Authors" -#~ msgstr "Авторы" - -#~ msgid "Kinds" -#~ msgstr "Формы" - -#~ msgid "Genres" -#~ msgstr "Жанры" - -#~ msgid "Epochs" -#~ msgstr "Эпохи" - -#~ msgid "Themes and topics" -#~ msgstr "Мотивы и темы" - -#~ msgid "Listing of all DAISY files" -#~ msgstr "Список всех DAISY файлов" - -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "Последние DAISY аудиокниги" - -#~ msgid "" -#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" -#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -#~ "ograniczeń." -#~ msgstr "" -#~ "Система DAISY это известный во всем мире формат записи книг\n" -#~ ", предназначен для людей с плохим зрением, плохо видящих и других лиц\n" -#~ ", имеющих проблемы с чтением. Книгами можно пользоваться бесплатно и без " -#~ "ограничений." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "" -#~ "Критерия являются неоднозначными. Пожалуйста, выберите один из следующих " -#~ "вариантов:" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Полки с фрагментом" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "У вас нет никакой полки. Если вы хотите, вы можете создать одну ниже." - -#~ msgid "Save all shelves" -#~ msgstr "Сохранить все полки" - -#~ msgid "Expand fragment" -#~ msgstr "Растянуть фрагмент" - -#~ msgid "Hide fragment" -#~ msgstr "Скрыть фрагмент" - -#~ msgid "See full category" -#~ msgstr "Вся категория" - -#~ msgid "All books" -#~ msgstr "Все книги" - -#~ msgid "Audiobooks" -#~ msgstr "Аудиокниги" - -#~ msgid "DAISY" -#~ msgstr "Даисы" - -#~ msgid "Work is licensed under " -#~ msgstr "Разрешение на работу со стороны" - -#~ msgid "Based on" -#~ msgstr "Основанный на" - -#~ msgid "Details" -#~ msgstr "Подробнее" - -#~ msgid "Author" -#~ msgstr "Автор" - -#~ msgid "Other resources" -#~ msgstr "другие ресурсы" - -#~ msgid "Source of the image" -#~ msgstr "Источник книги" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "Изображение на платформе редакторов" - -#~ msgid "View XML source" -#~ msgstr "Просмотр XML-источник" - -#~ msgid "Work's themes " -#~ msgstr "Темы труда" - -#~ msgid "Listing of all pictures" -#~ msgstr "Список работ" - -#~ msgid "Download as" -#~ msgstr "Скачать" - -#~ msgid "Artist" -#~ msgstr "Артист" - -#~ msgid "Director" -#~ msgstr "режиссер" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "Аудиокниги были подготовлены в рамках проекта:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "%(cs)s, финансируемого %(fb)s" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "Аудиокниги были подготовлены в рамках %(cs)s проектa, финансируемого %(fb)" -#~ "s." - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "Аудиокниги были подготовлены в рамках %(cs)s проектa." - -#~ msgid "Did you mean" -#~ msgstr "Вы имели в виду" - -#~ msgid "Results by authors" -#~ msgstr "Результаты по авторам" - -#~ msgid "Results by title" -#~ msgstr "Результаты по заглавиям" - -#~ msgid "Results in text" -#~ msgstr "Результаты в текстах" - -#~ msgid "Other results" -#~ msgstr "другие ресурсы" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "Извините! Критерий поиска не соответствует никаким ресурсам." - -#~ msgid "" -#~ "Search engine supports following criteria: title, author, theme/topic, " -#~ "epoch, kind and genre.\n" -#~ "\t\tAs for now we do not support full text search." -#~ msgstr "" -#~ "Искать поддержку двигателя используя критерии: заглавие, автор, тема/" -#~ "сюжет, эпоха, форма и жанр.\n" -#~ "\t\tПока мы не поддерживаем поиска всего текста." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "" -#~ "Извините! У искаемого вопроса должны быть по крайней мере два свойства." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "на Lektury.Gazeta.pl" - -#~ msgid "in Wikipedia" -#~ msgstr "в Википедии" - -#~ msgid "Your shelves with books" -#~ msgstr "Ваши книжные полки" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "У вас нет никаких полок. Если хотите, вы можете создать одну ниже." - -#~ msgid "Create shelf" -#~ msgstr "Создать полку" - -#~ msgid "author" -#~ msgstr "автор" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "Хендауты для учителей" - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "Читать очерк произведения данного автора на Lektury.Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "Прочитайте статью об авторе в Википедии" - -#~ msgid "This author's works are copyrighted." -#~ msgstr "На работы этого автора распространяется авторское право." - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "Узнайте, почему интернет-библиотеки не могут издать работ " -#~ "этого автора." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "Работы данного автора находятся в публичной области и скоро будут изданы " -#~ "в школьной библиотеке Интернета." - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "Труды данного автора будут частью публичной области и возможным будет их " -#~ "издание без ограничений на" - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "Этот труд находится в публичной области. Мы скоро поместим его в школьной " -#~ "библиотеке Wolne Lektury." - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "Этот труд будет частью публичной сферы. Его издание будет разрешено без " -#~ "ограничений" - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this work." -#~ msgstr "" -#~ "Узнайте, почему интернет-библиотеки не могут издать этого " -#~ "труда." - -#~ msgid "This work is copyrighted." -#~ msgstr "На эту работу распространяется авторское право." - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "Войти на WolneLektury.pl" - -#~ msgid "Login" -#~ msgstr "Войти" - -#~ msgid "" -#~ "Internet Explorer cannot display this site properly. Click here to read " -#~ "more..." -#~ msgstr "" -#~ "Internet Explorer не может хорошо показать сайта. Щелкните здесь, чтобы " -#~ "прочитать больше..." - -#~ msgid "Your shelves" -#~ msgstr "Ваши полки" - -#~ msgid "Register on" -#~ msgstr "Регистрация на" - -#~ msgid "or" -#~ msgstr "или" - -#~ msgid "return to main page" -#~ msgstr "возврат на главную страницу" - -#, fuzzy -#~ msgid "Listing of all audiobooks on WolneLektury.pl" -#~ msgstr "Список работ на WolneLektury.pl" - -#~ msgid "Put a book" -#~ msgstr "Поставьте книгу" - -#~ msgid "on the shelf!" -#~ msgstr "на полку" - -#~ msgid "and printing using" -#~ msgstr "и для печатки" - -#~ msgid "Download EPUB" -#~ msgstr "Скачать EPUB" - -#~ msgid "Download TXT" -#~ msgstr "Скачать TXT" - -#~ msgid "on small displays, for example mobile phones" -#~ msgstr "на маленьких дисплеях, напр. мобильных телефонов" - -#~ msgid "Download ODT" -#~ msgstr "Скачать ODT" - -#~ msgid "and editing using" -#~ msgstr "и для редактирования" - -#~ msgid "Book on project's wiki" -#~ msgstr "Книга по проекту вики" - -#~ msgid "on" -#~ msgstr "на" - -#~ msgid "See description" -#~ msgstr "Посмотрите описание" - -#~ msgid "Listing of all works on WolneLektury.pl" -#~ msgstr "Список работ на WolneLektury.pl" - -#~ msgid "Jump to" -#~ msgstr "Перейдите на" - -#~ msgid "Categories" -#~ msgstr "Категории" - -#, fuzzy -#~ msgid "Listing of all DAISY files on WolneLektury.pl" -#~ msgstr "Список работ на WolneLektury.pl" - -#~ msgid "Show full category" -#~ msgstr "Показать всю категорию" - -#~ msgid "Hide" -#~ msgstr "Скрыть" - -#~ msgid "Browse books by categories" -#~ msgstr "Просматривать книги по категориям" - -#~ msgid "delete" -#~ msgstr "удалить" - -#~ msgid "" -#~ "Create your own book set. You can share it with friends by sending them " -#~ "link to your shelf." -#~ msgstr "" -#~ "Создать собственный набор книг. Вы можете делиться ими со своими " -#~ "друзьями, посылая ссылку на свою полку." - -#~ msgid "You need to " -#~ msgstr "Вам необходимо" - -#~ msgid "sign in" -#~ msgstr "Войти в систему," - -#~ msgid "to manage your shelves." -#~ msgstr "чтобы управлять своими полками" - -#~ msgid "" -#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." -#~ msgstr "" -#~ "Конспекты уроков и другие идеи использования Wolnelektury.pl учителями." - -#~ msgid "" -#~ "are professional recordings of literary texts from our repository, " -#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " -#~ "DAISY system." -#~ msgstr "" -#~ "- это профессиональные записи литературных текстов из нашего хранилища. " -#~ "Они доступны по бесплатному разрешению ? в форматах MP3 и Ogg Vorbis, а " -#~ "также в системе DAISY." - -#~ msgid "Themes groups" -#~ msgstr "Тематические группы" - -#~ msgid "See our blog" -#~ msgstr "Посмотрите наш блог" - -#~ msgid "You can help us!" -#~ msgstr "Вы можете нам помочь!" - -#~ msgid "" -#~ "We try our best to elaborate works appended to our library. It is " -#~ "possible only due to support of our volunteers." -#~ msgstr "" -#~ "Мы стремимся тщательно разрабатывать труды, прибавляемые в нашу " -#~ "библиотеку. Это является возможным только благодаря помощи наших " -#~ "волонтеров." - -#~ msgid "" -#~ "We invite people who want to take part in developing Internet school " -#~ "library Wolne Lektury." -#~ msgstr "" -#~ "Мы приглашаем людей, которые хотят принять участие в развитии школьной " -#~ "библиотеки Интернета Wolne Lektury." - -#~ msgid "About us" -#~ msgstr "О нас" - -#~ msgid "" -#~ "\n" -#~ "\t\t\tInternet library with school readings “Wolne Lektury” (www.wolnelektury.pl) is a project made by " -#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " -#~ "which are recommended by Ministry of National Education and are in public " -#~ "domain.\n" -#~ "\t\t\t" -#~ msgstr "" -#~ "\n" -#~ "\t\t\tИнтернет-библиотека со школьными чтениями “Wolne Lektury” (www.wolnelektury.pl) является проектом, " -#~ "созданным фондом Современной Польши. Действуя с 2007 г., библиотека " -#~ "делает доступными школьные чтения публичного домена, предлагаемые " -#~ "министром народного образования. \n" -#~ "\t\t\t" - -#~ msgid "Searching in" -#~ msgstr "Искать в" - -#~ msgid "More than one result matching the criteria found." -#~ msgstr "Больше чем один критерий соответствует найденным критериям." - -#~ msgid "Search in WolneLektury.pl" -#~ msgstr "Искать в WolneLektury.pl" - -#~ msgid "Your shelf is empty" -#~ msgstr "У тебя пустая полка" - -#~ msgid "" -#~ "You can put a book on a shelf by entering page of the reading and " -#~ "clicking 'Put on the shelf'." -#~ msgstr "" -#~ "Вы можете поставить книгу на полку, заходя на сайт произведения или " -#~ "щелкнув 'Поставить на полку'." - -#~ msgid "Choose books' formats which you want to download:" -#~ msgstr "Выбрать формат книг, которые вы хотите скачать:" - -#~ msgid "for listening" -#~ msgstr "для слушания" - -#~ msgid "on favourite MP3 player" -#~ msgstr "на любимом MP3-плейере" - -#~ msgid "Xiph.org Foundation" -#~ msgstr "Фонд Xiph.org" - -#~ msgid "Updating list of books' formats on the shelf" -#~ msgstr "Обновить список форматов книг на полке" - -#~ msgid "cancel" -#~ msgstr "Отменить" - -#~ msgid "Share this shelf" -#~ msgstr "Делить эту полку" - -#~ msgid "" -#~ "Copy this link and share it with other people to let them see your shelf." -#~ msgstr "" -#~ "Копировать эту ссылку и делить с другими пользователями, чтобы они могли " -#~ "увидеть вашу полку." - -#, fuzzy -#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Читать очерк произведения данного автора на Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Читать очерк произведения данного автора на Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Читать очерк произведения данного автора на Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read related study on Lektury.Gazeta.pl" -#~ msgstr "Читать очерк произведения данного автора на Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" -#~ msgstr "Прочитайте статью об авторе в Википедии" - -#, fuzzy -#~ msgid "Read article about kind %(last_tag)s on Wikipedia" -#~ msgstr "Прочитайте статью об авторе в Википедии" - -#, fuzzy -#~ msgid "Read article about genre %(last_tag)s on Wikipedia" -#~ msgstr "Прочитайте статью об авторе в Википедии" - -#, fuzzy -#~ msgid "Read related article on Wikipedia" -#~ msgstr "Прочитайте статью об авторе в Википедии" - -#~ msgid "Delete" -#~ msgstr "Удалить" - -#~ msgid "return to the main page" -#~ msgstr "возвратитесь на главную страницу" - -#~ msgid "return to list of materials" -#~ msgstr "возвратитесь к списку материалов" - -#~ msgid "Hand-outs for teachers on " -#~ msgstr "хендауты для учителей на" - -#, fuzzy -#~ msgid "" -#~ "Download TXT - for reading on small displays, for example mobile phones" -#~ msgstr "на маленьких дисплеях, напр. мобильных телефонов" - -#~ msgid "Download MP3" -#~ msgstr "скачать MP3" - -#~ msgid "Download Ogg Vorbis" -#~ msgstr "Скачать Ogg Vorbis" - -#~ msgid "Download DAISY" -#~ msgstr "Скачать DAISY" - -#~ msgid "check list of books" -#~ msgstr "проверить список книг" - -#~ msgid "in our repository" -#~ msgstr "в нашем хранилище" - -#~ msgid "Polish" -#~ msgstr "польский" - -#~ msgid "German" -#~ msgstr "немецкий" - -#~ msgid "English" -#~ msgstr "английский" - -#~ msgid "Lithuanian" -#~ msgstr "литовский" - -#~ msgid "French" -#~ msgstr "французский" - -#~ msgid "Russian" -#~ msgstr "русский" - -#~ msgid "Spanish" -#~ msgstr "испанский" - -#~ msgid "Ukrainian" -#~ msgstr "украинский" - -#~ msgid "Choose your interface language: " -#~ msgstr "Выберите язык интерфейса" - -#~ msgid "Choose language" -#~ msgstr "Выберите язык" - -#~ msgid "Hide description" -#~ msgstr "Скрыть описание" - -#~ msgid "Read study of epoch" -#~ msgstr "Прочитайте очерк эпохи" - -#~ msgid "Read article about epoch" -#~ msgstr "Прочитайте статью об эпохе" diff --git a/apps/wolnelektury_core/locale/uk/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index a49a72656..000000000 Binary files a/apps/wolnelektury_core/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/uk/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index e6f50aaff..000000000 --- a/apps/wolnelektury_core/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,1092 +0,0 @@ -# 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. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: LANGUAGE \n" -"Language: \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" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Увійти" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "Ви вже увійшли як користувач %(user)s" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "Зареєструватися" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "Щоб продовжити, увійдіть в свій акаунт." - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Сторінка не існує" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "Сторінку не знайдено" - -#: templates/404.html:14 -msgid "" -"We are sorry, but this page does not exist. Please check if you entered " -"correct address or go to " -msgstr "" -"На жаль, ця сторінка не існує. Будь ласка, перевірте правильність адреси або " -"перейдіть на" - -#: templates/404.html:14 -msgid "main page" -msgstr "головна сторінка" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "Помилка сервера" - -#: templates/500.html:19 -msgid "" -"

                The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"blog.

                Inform our administrators about the " -"error.

                " -msgstr "" -"

                Сторінка Wolnelektury.pl тимчасово недоступна. В міжчасі, увійдіть на наш " -"блог.

                Повідомте наших адміністраторів про " -"помилку.

                " - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "Послуга недоступна" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "" -"У зв'язку з технічними роботами сервіс Wolnelektury.pl тимчасово недоступний." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "Електронна бібліотека WolneLektury.pl" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "Що нового?" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "останні публікації" - -#: templates/main_page.html:41 -msgid "News" -msgstr "Новості" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "утиліти" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "Повідомити про помилку або надіслати свої пропозиції" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "Завантажити каталог у форматі PDF." - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "Віджет" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "Не знайшли книжки?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "План публікації" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "інформація" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "Використано графіку:" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" %(c)s free reading you have right to\n" -" " -msgid_plural "" -"\n" -" %(c)s free readings you have right to\n" -" " -msgstr[0] "" -"\n" -" %(c)s безкоштовний текст, до якого " -"маєш право\n" -" " -msgstr[1] "" -"\n" -" %(c)s безкоштовні тексти, до яких " -"маєш право\n" -" " -msgstr[2] "" -"\n" -" %(c)s безкоштовні тексти, до яких " -"маєш право\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "Ласкаво просимо" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "Пароль" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "Електронна адреса" - -#: templates/superbase.html:74 templates/user.html:14 -msgid "Social accounts" -msgstr "Облікові записи в соціальних мережах" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "Моя полиця" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "Адміністрація" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "Вийти " - -#: templates/superbase.html:111 -msgid "Search" -msgstr "Пошук" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "Мовні версії" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" -"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" -"\t\t\t\tHosting: ICM.\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tWolne Lektury це проект Фонду Сучасна Польща (Fundacja Nowoczesna Polska).\n" -"\t\t\t\tЦифрові репродукції виконані Національною Бібліотекою, Сілезькою бібліотекою та Ельблонзькою бібліотекою, на основі їх засобів.\n" -"\t\t\t\tХостинг: ICM.\n" -"\t\t\t\t" - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tFundacja Nowoczesna Polska (Фонд Сучасна Польща), 00-514 Warszawa, " -"ul. Marszałkowska 84/92 lok. 125, тел/факс: (22) 621-30-17\n" -" eлектронна пошта: fundacja@nowoczesnapolska.org.pl\n" -"\t\t\t\t" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "Закрити" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "Завантажується" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "Користувач" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Адміністрація сайту" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "Переклади" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "розширений" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "спрощений" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "Імпортувати книжку" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "Забули пароль?" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -msgid "Sign in using:" -msgstr "Увійти за допомогою:" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "або зареєструватися" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"making a donation\n" -"or transferring 1% of your income tax.\n" -msgstr[0] "" -"\n" -"На сайті Wolne Lektury опубліковано вже %(c)s твір!\n" -"Допоможіть нам розвивати бібліотеку і надавати доступ до нових творів - \n" -"перекажіть нам " -"благодійний внесок\n" -"або 1% вашого податку на прибуток..\n" -msgstr[1] "" -"\n" -"На сайті Wolne Lektury опубліковано вже %(c)s творів!\n" -"Допоможіть нам розвивати бібліотеку і надавати доступ до нових творів - \n" -"перекажіть нам " -"благодійний внесок\n" -"або 1% вашого податку на прибуток..\n" -msgstr[2] "" -"\n" -"На сайті Wolne Lektury опубліковано вже %(c)s твір!\n" -"Допоможіть нам розвивати бібліотеку і надавати доступ до нових творів - \n" -"перекажіть нам " -"благодійний внесок\n" -"або 1% вашого податку на прибуток..\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" -"Стань редактором Wolne Lektury! Дізнайся чи\n" -"ми вже працюємо над текстом, якого шукаєш та сам підготуй\n" -"публікацію, реєструючись на Редакторській платформі." - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "Більше..." - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "Увійти за допомогою OpenID" - -#: templates/openid/login.html:27 -msgid "Sign In" -msgstr "Увійти" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "попередня" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "наступна" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "Авторизувати доступ до Wolne Lektury" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user %(user)s." -msgstr "" -"Підтвердити, щоб авторизувати доступ до Wolne Lektury від імені користувача " -"%(user)s." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Пов'язані акаунти" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"Можете увійти у Ваш акаунт за допомогою інших облікових записів таких, як:" - -#: templates/socialaccount/connections.html:36 -msgid "Remove" -msgstr "Видалити" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "У Вас немає зараз жодних облікових записів пов'язаних з цим акаунтом." - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "Додати інший обліковий запис " - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "Реєстрацію скасовано" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" -"Реєстрацію на сайті за допомогою існуючого облікового запису було скасовано. " -"Якщо це помилка, перейдіть до сторінки реєстрації." - -#~ msgid "Listing of all audiobooks" -#~ msgstr "Список усіх аудіокниг" - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "Останні аудіокниги MP3" - -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "Останні аудіокниги Ogg Vorbis" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" -#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "Аудіотека шкільної літератури Фонду Сучасна Польща (Fundacja Nowoczesna " -#~ "Polska).\n" -#~ "Можна нею користуватися безкоштовно і без обмежень.\n" -#~ "Аудіокниги зачитують відомі актори, серед яких Данута Стенка та Ян Пешек." - -#~ msgid "See also" -#~ msgstr "Дивитись також" - -#~ msgid "Theme" -#~ msgstr "Тема" - -#~ msgid "in work " -#~ msgstr "у творі" - -#~ msgid "This work is licensed under:" -#~ msgstr "Цей твір доступний на умовах ліцензії:" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " Creative Commons Attribution-ShareAlike 3.0\n" -#~ " license." -#~ msgstr "" -#~ "Цей твір не охороняється авторським правом і є частиною\n" -#~ " суспільного надбання, тому його можна використовувати без " -#~ "обмежень, публікувати, та\n" -#~ " розповсюджувати. Якщо твір містить додаткові матеріали, котрі " -#~ "охороняються авторським правом\n" -#~ " (наприклад примітки, мотиви, тощо), доступ до цих\n" -#~ " додаткових матеріалів надається на умовах ліцензії \n" -#~ " Creative Commons Із зазначенням імені автора – На тих же умовах 3.0\n" -#~ " ." - -#~ msgid "Text prepared based on:" -#~ msgstr "Текст підготовлено на основі:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Редагування та примітки:" - -#~ msgid "Listing of all works" -#~ msgstr "Список усіх творів" - -#~ msgid "Table of Content" -#~ msgstr "Зміст" - -#~ msgid "↑ top ↑" -#~ msgstr "↑ вгору ↑" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Покласти книжку на полицю!" - -#~ msgid "Create new shelf" -#~ msgstr "Створити нову полицю" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "В вас немає жодних полиць. Нижче ви можете створити полицю, якщо бажаєте." - -#~ msgid "Put on the shelf!" -#~ msgstr "Покласти на полицю!" - -#~ msgid "Epoch" -#~ msgstr "Епоха" - -#~ msgid "Kind" -#~ msgstr "Рід" - -#~ msgid "Genre" -#~ msgstr "Жанр" - -#~ msgid "Read online" -#~ msgstr "Читати онлайн" - -#~ msgid "Download" -#~ msgstr "Завантажити" - -#~ msgid "to print" -#~ msgstr "друкувати" - -#~ msgid "for an e-book reader" -#~ msgstr "для інтернетного читача" - -#~ msgid "for Kindle" -#~ msgstr "для Kindle" - -#~ msgid "for advanced usage" -#~ msgstr "для досвіченого користувача" - -#~ msgid "Listen" -#~ msgstr "Слухати" - -#~ msgid "Table of contents" -#~ msgstr "Зміст" - -#~ msgid "Themes" -#~ msgstr "Теми" - -#~ msgid "Edit. note" -#~ msgstr "Коментар редактора" - -#~ msgid "Infobox" -#~ msgstr "Інфобокс" - -#~ msgid "Book's page" -#~ msgstr "Сторінка книжки" - -#~ msgid "for a reader" -#~ msgstr "для читача" - -#, fuzzy -#~ msgid "for advanced usege" -#~ msgstr "розширений" - -#~ msgid "Download a custom PDF" -#~ msgstr "Завантажити PDF" - -#~ msgid "Motifs and themes" -#~ msgstr "Мотиви та теми" - -#~ msgid "See" -#~ msgstr "Дивитись" - -#~ msgid "Source" -#~ msgstr "Джерело" - -#~ msgid "of the book" -#~ msgstr "книжки" - -#~ msgid "Source XML file" -#~ msgstr "Вихідний файл XML" - -#~ msgid "Book on" -#~ msgstr "Книжка на" - -#~ msgid "Editor's Platform" -#~ msgstr "Редакторська платформа" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "Опис книжки на Lektury.Gazeta.pl" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "Опис книжки у Вікіпедії" - -#~ msgid "Mix this book" -#~ msgstr "Міксувати цю книжку" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "Завантажити всі аудіокниги для цієї книжки" - -#~ msgid "Catalogue" -#~ msgstr "Каталог" - -#~ msgid "Authors" -#~ msgstr "Автори" - -#~ msgid "Kinds" -#~ msgstr "Роди" - -#~ msgid "Genres" -#~ msgstr "Жанри" - -#~ msgid "Epochs" -#~ msgstr "Епохи" - -#~ msgid "Themes and topics" -#~ msgstr "Теми та мотиви" - -#~ msgid "Listing of all DAISY files" -#~ msgstr "Список усіх файлів DAISY" - -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "Останні аудіокниги DAISY" - -#~ msgid "" -#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" -#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" -#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " -#~ "ograniczeń." -#~ msgstr "" -#~ "Система DAISY це визнаний у всьому світі формат надавання доступу до " -#~ "книжок,\n" -#~ "котрий відповідає потребам осіб слабозорих, сліпих, а також інших осіб,\n" -#~ "які мають труднощі з читанням. Можете ними користуватися безкоштовно і " -#~ "без обмежень." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "Вибрані критерії неоднозначні. Виберіть один з наступних варіантів:" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Полиці, які містять фрагмент" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "У вас немає жодних полиць. Нижче ви можете створити полицю, якщо бажаєте." - -#~ msgid "Save all shelves" -#~ msgstr "Зберегти всі полиці" - -#~ msgid "Expand fragment" -#~ msgstr "Показати фрагмент" - -#~ msgid "Hide fragment" -#~ msgstr "Сховати фрагмент" - -#~ msgid "See full category" -#~ msgstr "Дивитись всю категорію" - -#~ msgid "All books" -#~ msgstr "Всі книжки" - -#~ msgid "Audiobooks" -#~ msgstr "Аудіокниги" - -#~ msgid "DAISY" -#~ msgstr "DAISY" - -#~ msgid "Work is licensed under " -#~ msgstr "Твір на умовах ліцензії" - -#~ msgid "Based on" -#~ msgstr "На основі" - -#~ msgid "Details" -#~ msgstr "Подробиці" - -#~ msgid "Author" -#~ msgstr "Автор" - -#~ msgid "Other resources" -#~ msgstr "Інші засоби" - -#~ msgid "Source of the image" -#~ msgstr "Джерело графіки" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "Графіка на Редакторській платформі" - -#~ msgid "View XML source" -#~ msgstr "Дивитись вихідний XML" - -#~ msgid "Work's themes " -#~ msgstr "Теми твору" - -#~ msgid "Listing of all pictures" -#~ msgstr "Список всіх графік" - -#~ msgid "Download as" -#~ msgstr "Завантажити як" - -#~ msgid "Artist" -#~ msgstr "Митець" - -#~ msgid "Director" -#~ msgstr "Режисер" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "Аудіокниги виготовлено в рамах проектів:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "%(cs)s, фінансованого з коштів %(fb)s" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "Аудіокниги виготовлено в рамах проекту %(cs)s, фінансованого з коштів " -#~ "%(fb)s." - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "Аудіокниги виготовлено в рамах проекту %(cs)s." - -#~ msgid "Did you mean" -#~ msgstr "Чи йдеться про" - -#~ msgid "Results by authors" -#~ msgstr "Результати за автором" - -#~ msgid "Results by title" -#~ msgstr "Результати за заголовком" - -#~ msgid "Results in text" -#~ msgstr "Результати в тексті" - -#~ msgid "Other results" -#~ msgstr "Інші результати" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "На жаль, критеріям пошуку не відповідає жоден результат." - -#~ msgid "" -#~ "Search engine supports following criteria: title, author, theme/topic, " -#~ "epoch, kind and genre.\n" -#~ "\t\tAs for now we do not support full text search." -#~ msgstr "" -#~ "В пошуковій системі можливий пошук за критеріями: автор, тема/мотив, " -#~ "епоха, рід та жанр.\n" -#~ "\t\tПоки що неможливий пошук в цілому тексті." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "На жаль, для пошуку потрібно ввести щонайменше два знаки." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "на Lektury.Gazeta.pl" - -#~ msgid "in Wikipedia" -#~ msgstr "у Вікіпедії" - -#~ msgid "Your shelves with books" -#~ msgstr "Ваші полиці з книжками" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "У вас немає жодних полиць. Нижче ви можете створити полицю, якщо бажаєте" - -#~ msgid "Create shelf" -#~ msgstr "Створити полицю" - -#~ msgid "author" -#~ msgstr "автор" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "Матеріали для вчителів" - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "Прочитати обговорення цього автора на Lektury.Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "Прочитати статтю про цього автора у Вікіпедії" - -#~ msgid "This author's works are copyrighted." -#~ msgstr "Твори цього автора охороняються авторським правом." - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "Дізнатися чому електронні бібліотеки не можуть " -#~ "опублікувати творів цього автора." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "Твори цього автора є частиною суспільного надбання і незабаром будуть " -#~ "опубліковані на Wolne Lektury." - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "Твори цього автора стануть частиною суспільного надбання і можна буде їх " -#~ "публікувати без обмежень в" - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "Цей твір є частиною суспільного надбання і незабаром буде опублікований " -#~ "на Wolne Lektury" - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "Цей твір стане частиною суспільного надбання і можна буде його " -#~ "публікувати без обмежень у" - -#~ msgid "" -#~ "Find " -#~ "out why Internet libraries can't publish this work." -#~ msgstr "" -#~ "Дізнатися, чому електронні бібліотеки не можуть " -#~ "опублікувати цього твору" - -#~ msgid "This work is copyrighted." -#~ msgstr "Цей твір охороняється авторським правом" - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "Увійти у WolneLektury.pl" - -#~ msgid "Login" -#~ msgstr "Увійти" - -#~ msgid "" -#~ "Internet Explorer cannot display this site properly. Click here to read " -#~ "more..." -#~ msgstr "" -#~ "Інтернет Експолорер не може правильно відобразити цієї сторінки. " -#~ "Натисніть, щоб дізнатися більше..." - -#~ msgid "Your shelves" -#~ msgstr "Ваші полиці" - -#~ msgid "Register on" -#~ msgstr "Реєстрація на" - -#~ msgid "or" -#~ msgstr "або" - -#~ msgid "return to main page" -#~ msgstr "повернення на головну сторінку" - -#, fuzzy -#~ msgid "Listing of all audiobooks on WolneLektury.pl" -#~ msgstr "Алфавітний список творів на WolneLektury.pl" - -#~ msgid "Put a book" -#~ msgstr "Покласти книжку" - -#~ msgid "on the shelf!" -#~ msgstr "на полицю!" - -#~ msgid "and printing using" -#~ msgstr "та друку з використанням" - -#~ msgid "Download EPUB" -#~ msgstr "Завантажити EPUB" - -#~ msgid "Download TXT" -#~ msgstr "Завантажити TXT" - -#~ msgid "on small displays, for example mobile phones" -#~ msgstr "на невеликих екранах, на приклад на мобільному телефоні" - -#~ msgid "Download ODT" -#~ msgstr "Завантажити ODT" - -#~ msgid "and editing using" -#~ msgstr "та едиції з використанням" - -#~ msgid "Book on project's wiki" -#~ msgstr "Книжка на вікі проекту" - -#~ msgid "on" -#~ msgstr "на" - -#~ msgid "See description" -#~ msgstr "Дивитись опис" - -#~ msgid "Jump to" -#~ msgstr "Перейти до" - -#~ msgid "Categories" -#~ msgstr "Категорії" - -#, fuzzy -#~ msgid "Listing of all DAISY files on WolneLektury.pl" -#~ msgstr "Алфавітний список творів на WolneLektury.pl" - -#~ msgid "Show full category" -#~ msgstr "Показати всю категорію" - -#~ msgid "Hide" -#~ msgstr "Сховати" - -#~ msgid "Browse books by categories" -#~ msgstr "Переглядати книжки за категоріями" - -#~ msgid "delete" -#~ msgstr "видалити" - -#~ msgid "" -#~ "Create your own book set. You can share it with friends by sending them " -#~ "link to your shelf." -#~ msgstr "" -#~ "Створити свій вибір книжок. Ви можете поділитися ним з друзями висилаючи " -#~ "їм посилання на вашу полицю." - -#~ msgid "You need to " -#~ msgstr "Вам треба" - -#~ msgid "sign in" -#~ msgstr "увійти в акаунт" - -#~ msgid "to manage your shelves." -#~ msgstr "щоб управляти своїми полицями" - -#~ msgid "" -#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." -#~ msgstr "" -#~ "Плани уроків та інші ідеї як користуватися Wolnelektury.pl в навчанні" - -#~ msgid "" -#~ "are professional recordings of literary texts from our repository, " -#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " -#~ "DAISY system." -#~ msgstr "" -#~ "це професійні записи текстів літератури з нашої бази, доступні на вільній " -#~ "ліцензії у форматах MP3 та Ogg Vorbis, а також в системі DAISY." - -#~ msgid "Themes groups" -#~ msgstr "Групи мотивів" - -#~ msgid "See our blog" -#~ msgstr "Дивитись наш блог" - -#~ msgid "You can help us!" -#~ msgstr "Можете нам допомогти!" - -#~ msgid "" -#~ "We try our best to elaborate works appended to our library. It is " -#~ "possible only due to support of our volunteers." -#~ msgstr "" -#~ "Ми намагаємося якомога краще підготувати твори, які додаються до нашої " -#~ "бібліотеки. Це можливо тільки завдяки нашим волонтерам." - -#~ msgid "" -#~ "We invite people who want to take part in developing Internet school " -#~ "library Wolne Lektury." -#~ msgstr "" -#~ "Запрошуємо всіх, хто хоче брати участь у творенні шкільної інтернет-" -#~ "бібліотеки Wolne Lektury." - -#~ msgid "About us" -#~ msgstr "Про нас" - -#~ msgid "" -#~ "\n" -#~ "\t\t\tInternet library with school readings “Wolne Lektury” (www.wolnelektury.pl) is a project made by " -#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " -#~ "which are recommended by Ministry of National Education and are in public " -#~ "domain.\n" -#~ "\t\t\t" -#~ msgstr "" -#~ "\n" -#~ "\t\t\tІнтернет-бібліотека шкільної літератури “Wolne Lektury” (www.wolnelektury.pl) це проект " -#~ "реалізований Фондом Модерна Польща. Проект стартував у 2007 році та надає " -#~ "доступ до літератури, рекомендованої Міністерством національної освіти, " -#~ "яка є частиною суспільного надбання.\n" -#~ "\t\t\t" - -#~ msgid "Searching in" -#~ msgstr "Пошук в" - -#~ msgid "More than one result matching the criteria found." -#~ msgstr "Більше ніж один результат відповідає критеріям." - -#~ msgid "Search in WolneLektury.pl" -#~ msgstr "Пошук в WolneLektury.pl" - -#~ msgid "Your shelf is empty" -#~ msgstr "Ваша полиця порожня" - -#~ msgid "" -#~ "You can put a book on a shelf by entering page of the reading and " -#~ "clicking 'Put on the shelf'." -#~ msgstr "" -#~ "Щоб покласти книжку на полицю, увійдіть на сторінку книжки та натисніть " -#~ "\"Покласти на полицю\"." - -#~ msgid "Choose books' formats which you want to download:" -#~ msgstr "Вибрати формат, в якому хочете завантажити книжку:" - -#~ msgid "for listening" -#~ msgstr "для слухання" - -#~ msgid "on favourite MP3 player" -#~ msgstr "на улюбленому плеєрі MP3" - -#~ msgid "Xiph.org Foundation" -#~ msgstr "Фонд Xiph.org" - -#~ msgid "Updating list of books' formats on the shelf" -#~ msgstr "Оновити список форматів книжок, які на полиці" - -#~ msgid "cancel" -#~ msgstr "відхилити" - -#~ msgid "Share this shelf" -#~ msgstr "Поділитися цією полицею" - -#~ msgid "" -#~ "Copy this link and share it with other people to let them see your shelf." -#~ msgstr "Копіювати це посилання, щоб вислати іншим, та поділитися полицею." - -#, fuzzy -#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Прочитати обговорення цього автора на Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Прочитати обговорення цього автора на Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Прочитати обговорення цього автора на Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read related study on Lektury.Gazeta.pl" -#~ msgstr "Прочитати обговорення цього автора на Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" -#~ msgstr "Прочитати статтю про цього автора на Вікіпедії" - -#, fuzzy -#~ msgid "Read article about kind %(last_tag)s on Wikipedia" -#~ msgstr "Прочитати статтю про цього автора на Вікіпедії" - -#, fuzzy -#~ msgid "Read article about genre %(last_tag)s on Wikipedia" -#~ msgstr "Прочитати статтю про цього автора на Вікіпедії" - -#, fuzzy -#~ msgid "Read related article on Wikipedia" -#~ msgstr "Прочитати статтю про цього автора на Вікіпедії" - -#~ msgid "Delete" -#~ msgstr "Видалити" - -#~ msgid "return to the main page" -#~ msgstr "повернення на головну" - -#~ msgid "return to list of materials" -#~ msgstr "повернення до списку матеріалів" - -#~ msgid "Hand-outs for teachers on " -#~ msgstr "Матеріали для вчителів у" - -#, fuzzy -#~ msgid "" -#~ "Download TXT - for reading on small displays, for example mobile phones" -#~ msgstr "на невеликих екранах, на приклад на мобільному телефоні" - -#~ msgid "Choose your interface language: " -#~ msgstr "Вибрати мову інтерфейсу" - -#~ msgid "Choose language" -#~ msgstr "Вибрати мову" - -#~ msgid "Hide description" -#~ msgstr "Сховати опис" - -#~ msgid "Download MP3" -#~ msgstr "Завантажити MP3" - -#~ msgid "Download Ogg Vorbis" -#~ msgstr "Завантажити Ogg Vorbis" - -#~ msgid "Download DAISY" -#~ msgstr "Завантажити DAISY" - -#~ msgid "Alphabetical listing of works" -#~ msgstr "Алфавітний список творів" - -#~ msgid "check list of books" -#~ msgstr "перевірити список книжок" - -#~ msgid "in our repository" -#~ msgstr "в нашій базі" - -#~ msgid "Read study of epoch" -#~ msgstr "Прочитати обговорення епохи" - -#~ msgid "Read article about epoch" -#~ msgstr "Прочитати статтю про цю епоху" diff --git a/apps/wolnelektury_core/management/__init__.py b/apps/wolnelektury_core/management/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/wolnelektury_core/management/commands/__init__.py b/apps/wolnelektury_core/management/commands/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/wolnelektury_core/management/commands/localepack.py b/apps/wolnelektury_core/management/commands/localepack.py deleted file mode 100644 index bd631928c..000000000 --- a/apps/wolnelektury_core/management/commands/localepack.py +++ /dev/null @@ -1,243 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from optparse import make_option -from django.conf import settings -from django.core.management.base import BaseCommand -from django.core.management import call_command -from .translation2po import get_languages - -import os -import shutil -import tempfile -import sys - -import allauth - -ROOT = os.path.dirname(settings.PROJECT_DIR) - - -def is_our_app(mod): - return mod.__path__[0].startswith(ROOT) - - -class Locale(object): - def save(self, output_directory, languages): - pass - - def generate(self, languages): - pass - -def copy_f(frm, to): - "I can create a necessary dest directiories, yey!" - if not os.path.exists(os.path.dirname(to)): - os.makedirs(os.path.dirname(to)) - shutil.copyfile(frm, to) - -class AppLocale(Locale): - def __init__(self, appmod): - self.app = appmod - if not os.path.exists(os.path.join(self.path, 'locale')): - raise LookupError('No locale for app %s' % appmod) - - @property - def path(self): - return self.app.__path__[0] - - @property - def name(self): - return self.app.__name__ - - def save(self, output_directory, languages): - for lc in languages: - lc = lc[0] - if os.path.exists(os.path.join(self.path, 'locale', lc)): - copy_f(os.path.join(self.path, 'locale', lc, 'LC_MESSAGES', 'django.po'), - os.path.join(output_directory, lc, self.name + '.po')) - - - def load(self, input_directory, languages): - for lc in zip(*languages)[0]: - if os.path.exists(os.path.join(input_directory, lc, self.name + '.po')): - out = os.path.join(self.path, 'locale', lc, 'LC_MESSAGES', 'django.po') - if not os.path.exists(os.path.dirname(out)): - os.makedirs(os.path.dirname(out)) - copy_f(os.path.join(input_directory, lc, self.name + '.po'), - out) - - wd = os.getcwd() - os.chdir(self.path) - try: - call_command('compilemessages', settings='wolnelektury.settings') - except: - pass - finally: - os.chdir(wd) - - - def generate(self, languages): - wd = os.getcwd() - os.chdir(self.path) - try: - call_command('makemessages', all=True) - except: - pass - finally: - os.chdir(wd) - - -class ModelTranslation(Locale): - def __init__(self, appname, poname=None): - self.appname = appname - self.poname = poname and poname or appname - - def save(self, output_directory, languages): - call_command('translation2po', self.appname, directory=output_directory, poname=self.poname) - - def load(self, input_directory, languages): - call_command('translation2po', self.appname, directory=input_directory, - load=True, lang=','.join(zip(*languages)[0]), poname=self.poname, keep_running=True) - - -class CustomLocale(Locale): - def __init__(self, app_dir, - config=os.path.join(ROOT, "babel.cfg"), - out_file=os.path.join(ROOT, 'wolnelektury/locale-contrib/django.pot'), - name=None): - self.app_dir = app_dir - self.config = config - self.out_file = out_file - self.name = name - - def generate(self, languages): - os.system('pybabel extract -F "%s" -o "%s" "%s"' % (self.config, self.out_file, self.app_dir)) - os.system('pybabel update -D django -i %s -d %s' % (self.out_file, os.path.dirname(self.out_file))) - - def po_file(self, language): - d = os.path.dirname(self.out_file) - n = os.path.basename(self.out_file).split('.')[0] - return os.path.join(d, language, 'LC_MESSAGES', n + '.po') - - def save(self, output_directory, languages): - for lc in zip(*languages)[0]: - if os.path.exists(self.po_file(lc)): - copy_f(self.po_file(lc), - os.path.join(output_directory, lc, self.name + '.po')) - - def load(self, input_directory, languages): - for lc in zip(*languages)[0]: - copy_f(os.path.join(input_directory, lc, self.name + '.po'), - self.po_file(lc)) - os.system('pybabel compile -D django -d %s' % os.path.dirname(self.out_file)) - - -SOURCES = [] - -for appn in settings.INSTALLED_APPS: - app = __import__(appn) - if is_our_app(app): - try: - SOURCES.append(AppLocale(app)) - except LookupError, e: - print "no locales in %s" % app.__name__ - -SOURCES.append(ModelTranslation('infopages', 'infopages_db')) -SOURCES.append(CustomLocale(os.path.dirname(allauth.__file__), name='contrib')) - - -class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-l', '--load', help='load locales back to source', action='store_true', dest='load', default=False), - make_option('-L', '--lang', help='load just one language', dest='lang', default=None), - make_option('-d', '--directory', help='load from this directory', dest='directory', default=None), - make_option('-o', '--outfile', help='Resulting zip file', dest='outfile', default='./wl-locale.zip'), - make_option('-m', '--merge', help='Use git to merge. Please use with clean working directory.', action='store_true', dest='merge', default=False), - make_option('-M', '--message', help='commit message', dest='message', default='New locale'), - - ) - help = 'Make a locale pack' - args = '' - - def current_rev(self): - return os.popen('git rev-parse HEAD').read() - - def current_branch(self): - return os.popen("git branch |grep '^[*]' | cut -c 3-").read() - - def save(self, options): - packname = options.get('outfile') - packname_b = os.path.basename(packname).split('.')[0] - fmt = '.'.join(os.path.basename(packname).split('.')[1:]) - - if fmt != 'zip': - raise NotImplementedError('Sorry. Only zip format supported at the moment.') - - tmp_dir = tempfile.mkdtemp('-wl-locale') - out_dir = os.path.join(tmp_dir, packname_b) - os.mkdir(out_dir) - - try: - for lang in settings.LANGUAGES: - os.mkdir(os.path.join(out_dir, lang[0])) - - for src in SOURCES: - src.generate(settings.LANGUAGES) - src.save(out_dir, settings.LANGUAGES) - # src.save(settings.LANGUAGES) - - # write out revision - rev = self.current_rev() - rf = open(os.path.join(out_dir, '.revision'), 'w') - rf.write(rev) - rf.close() - - - cwd = os.getcwd() - try: - os.chdir(os.path.dirname(out_dir)) - self.system('zip -r %s %s' % (os.path.join(cwd, packname_b+'.zip'), os.path.basename(out_dir))) - finally: - os.chdir(cwd) - # shutil.make_archive(packname_b, fmt, root_dir=os.path.dirname(out_dir), base_dir=os.path.basename(out_dir)) - finally: - shutil.rmtree(tmp_dir, ignore_errors=True) - - def load(self, options): - langs = get_languages(options['lang']) - - for src in SOURCES: - src.load(options['directory'], langs) - - def handle(self, *a, **options): - if options['load']: - if not options['directory'] or not os.path.exists(options['directory']): - print "Directory not provided or does not exist, please use -d" - sys.exit(1) - - if options['merge']: self.merge_setup(options['directory']) - self.load(options) - if options['merge']: self.merge_finish(options['message']) - else: - self.save(options) - - merge_branch = 'wl-locale-merge' - last_branch = None - - def merge_setup(self, directory): - self.last_branch = self.current_branch() - rev = open(os.path.join(directory, '.revision')).read() - - self.system('git checkout -b %s %s' % (self.merge_branch, rev)) - - def merge_finish(self, message): - self.system('git commit -a -m "%s"' % message.replace('"', '\\"')) - self.system('git checkout %s' % self.last_branch) - self.system('git merge -s recursive -X theirs %s' % self.merge_branch) - self.system('git branch -d %s' % self.merge_branch) - - def system(self, fmt, *args): - code = os.system(fmt % args) - if code != 0: - raise OSError('Command %s returned with exit code %d' % (fmt % args, code)) - return code diff --git a/apps/wolnelektury_core/management/commands/translation2po.py b/apps/wolnelektury_core/management/commands/translation2po.py deleted file mode 100644 index 6220006fe..000000000 --- a/apps/wolnelektury_core/management/commands/translation2po.py +++ /dev/null @@ -1,135 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import os -import time -from optparse import make_option -from django.conf import settings -from django.core.management.base import BaseCommand -from django.core.management.color import color_style -from django.db import models - -import polib -import modeltranslation.models -from modeltranslation.translator import translator, NotRegistered - - -def metadata(language=''): - "get metadata for PO, given language code" - t = time.strftime('%Y-%m-%d %H:%M%z') - - return { - 'Project-Id-Version': '1.0', - 'Report-Msgid-Bugs-To': settings.CONTACT_EMAIL, - 'POT-Creation-Date': '%s' % t, - 'PO-Revision-Date': '%s' % t, - 'Last-Translator': 'you ', - 'Language-Team': '%s' % dict(settings.LANGUAGES).get(language, language), - 'MIME-Version': '1.0', - 'Content-Type': 'text/plain; charset=utf-8', - 'Content-Transfer-Encoding': '8bit', - } - - -def make_po(language=''): - "Create new POFile object for language code" - po = polib.POFile() - po.metadata = metadata(language) - return po - - -def get_languages(langs): - if not langs: return settings.LANGUAGES - langs = langs.split(',') - lm = dict(settings.LANGUAGES) - return map(lambda l: (l, lm.get(l, l)), langs) - - -class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-d', '--directory', help='Specify which directory should hold generated PO files', dest='directory', default=''), - make_option('-l', '--load', help='load locales back to source', action='store_true', dest='load', default=False), - make_option('-L', '--language', help='locales to load', dest='lang', default=None), - make_option('-n', '--poname', help='name of the po file [no extension]', dest='poname', default=None), - make_option('-k', '--keep-running', help='keep running even when missing an input file', dest='keep_running', default=False, action='store_true'), - ) - help = 'Export models from app to po files' - args = 'app' - - def get_models(self, app): - for mdname in dir(app.models): - if mdname[0] == '_': continue - md = getattr(app.models, mdname) - try: - assert issubclass(md, models.Model) - except (AssertionError, TypeError): - continue - - try: - opts = translator.get_options_for_model(md) - except NotRegistered: - continue - else: - yield (md, opts) - - def handle(self, appname, **options): - if not options['poname']: options['poname'] = appname - app = __import__(appname) - - if options['load']: - objects = {} - modmod = {} - for md, opts in self.get_models(app): - if not md.__name__ in objects: - objects[md.__name__] = {} - modmod['model'] = md - - languages = get_languages(options['lang']) - - for lng in zip(*languages)[0]: - pofile = os.path.join(options['directory'], lng, options['poname'] + '.po') - if not os.path.exists(pofile): - if options['keep_running']: - continue - else: - raise OSError('%s po file: %s not found' % (appname, pofile)) - po = polib.pofile(pofile) - for entry in po: - loc, _ignored = entry.occurrences[0] - _appname, modelname, fieldname, pk = loc.split('/') - try: - obj = objects[modelname][pk] - except KeyError: - obj = modmod['model'].objects.get(pk=pk) - objects[modelname][pk] = obj - setattr(obj, fieldname, entry.msgstr) - - for mod, objcs in objects.items(): - for o in objcs.values(): - o.save() - - else: - pofiles = {} - for md, opts in self.get_models(app): - for obj in md.objects.all().order_by('pk'): - for fld, locflds in opts.local_fields.items(): - k = getattr(obj, '%s_%s' % (fld, settings.LANGUAGE_CODE)) or '' - for locfld in locflds: - cur_lang = locfld.language - try: - po = pofiles[cur_lang] - except: - po = make_po(cur_lang) - pofiles[cur_lang] = po - v = locfld.value_from_object(obj) or '' - entry = polib.POEntry( - msgid=k, - msgstr=v, - occurrences=[('%s/%s/%s/%s' % (appname, md.__name__, locfld.name, str(obj.pk)), 0)]) - po.append(entry) - - directory = options['directory'] - for lng, po in pofiles.items(): - os.makedirs(os.path.join(directory, lng)) - po.save(os.path.join(directory, lng, '%s.po' % options['poname'])) diff --git a/apps/wolnelektury_core/management/profile.py b/apps/wolnelektury_core/management/profile.py deleted file mode 100644 index 90e5ec5f5..000000000 --- a/apps/wolnelektury_core/management/profile.py +++ /dev/null @@ -1,17 +0,0 @@ - -import cProfile -import functools -import os - -_object = None - -def profile(meth): - def _wrapper(self, *args, **kwargs): - object = self - setattr(object, "__%s" % meth.__name__, meth) - cProfile.runctx('object.__%s(object, *args, **kwargs)' % (meth.__name__, ), globals(), locals(), - "profile.%d" % os.getpid()) - - functools.update_wrapper(_wrapper, meth) - return _wrapper - diff --git a/apps/wolnelektury_core/signals.py b/apps/wolnelektury_core/signals.py deleted file mode 100644 index 5eb7e8847..000000000 --- a/apps/wolnelektury_core/signals.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django.core.cache import caches -from django.db.models.signals import post_save, post_delete -from django.dispatch import receiver - -from funding.models import Spent -from infopages.models import InfoPage -from libraries.models import Catalog, Library -from pdcounter.models import Author, BookStub - - -@receiver([post_save, post_delete]) -def flush_views_after_manual_change(sender, **kwargs): - """Flushes views cache after changes with some models. - - Changes to those models happen infrequently, so we can afford - to just flush the cache on those instances. - - If changes become too often, relevant bits should be separated - as ssi_included views and flushed individually when needed. - - """ - if sender in (Catalog, Library, InfoPage, Author, BookStub, Spent): - caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() diff --git a/apps/wolnelektury_core/static/css/annoy.css b/apps/wolnelektury_core/static/css/annoy.css deleted file mode 100755 index 7ffa414d5..000000000 --- a/apps/wolnelektury_core/static/css/annoy.css +++ /dev/null @@ -1,52 +0,0 @@ -#annoy-on { - font-size: 13px; - line-height: 1.15em; - - padding: .1em 1em; - background: orange; - z-index: 200; - font-family: Arial, sans-serif; - display: block; - padding: 0 1em; - width: 1em; - text-align:center; - border-radius: 0 0 0 1em; - position: absolute; - top: 0; - right: 0; - color: black; -} - -#annoy { - font-size: 13px; - line-height: 1.15em; - padding: 1em 5em 1em 0; - display: none; - background: orange; - font-family: Arial, sans-serif; - position: relative; - z-index: 200; -} -#annoy p { - margin: 0 0 0 10em;; -} -#annoy a { - color: #4E56C8; -} - -#annoy a#annoy-off { - padding: .5em 1em .5em; - width: 1em; - text-align:center; - font-family: Arial, sans-serif; - display: block; - - border-radius: 0 0 0 1em; - position: absolute; - top: 0; - right: 0; - color: black; -} -#annoy a#annoy-off:hover { - cursor: pointer; -} diff --git a/apps/wolnelektury_core/static/css/jquery.countdown.css b/apps/wolnelektury_core/static/css/jquery.countdown.css deleted file mode 100644 index 3eca47676..000000000 --- a/apps/wolnelektury_core/static/css/jquery.countdown.css +++ /dev/null @@ -1,53 +0,0 @@ -/* jQuery Countdown styles 1.5.7. */ -.hasCountdown { - /*border: 1px solid #ccc; - background-color: #eee;*/ - margin: 1em 0 7em 0; -} -.countdown_rtl { - direction: rtl; -} -.countdown_holding span { - background-color: #ccc; -} -.countdown_row { - clear: both; - width: 100%; - padding: 0px 2px; - text-align: center; -} -.countdown_show1 .countdown_section { - width: 98%; -} -.countdown_show2 .countdown_section { - width: 48%; -} -.countdown_show3 .countdown_section { - width: 32.5%; -} -.countdown_show4 .countdown_section { - width: 24.5%; -} -.countdown_show5 .countdown_section { - width: 19.5%; -} -.countdown_show6 .countdown_section { - width: 16.25%; -} -.countdown_show7 .countdown_section { - width: 14%; -} -.countdown_section { - display: block; - float: left; - font-size: 100%; - text-align: center; -} -.countdown_amount { - font-size: 3.5em; - line-height: 1.4em; -} -.countdown_descr { - display: block; - width: 100%; -} diff --git a/apps/wolnelektury_core/static/css/master.book.css b/apps/wolnelektury_core/static/css/master.book.css deleted file mode 100644 index 29c84765e..000000000 --- a/apps/wolnelektury_core/static/css/master.book.css +++ /dev/null @@ -1,410 +0,0 @@ -body { - font-size: 16px; - font: Georgia, "Times New Roman", serif; - line-height: 1.5em; - margin: 0; -} - -a { - color: blue; - text-decoration: none; -} - -#book-text { - margin: 0 3em; - max-width: 36em; -} - -#other-text #book-text { - width: 36em; -} - -/* ================================== */ -/* = Header with logo and menu = */ -/* ================================== */ -#header { - margin: 3.4em 0 0 1.4em; -} - -img { - border: none; -} - -#logo { - font-size: 1.5em; -} -#logo a { - color: black; -} - -#menu { - position: fixed; - left: 0em; - top: 0em; - width: 100%; - height: 1.5em; - background: #333; - color: #FFF; - opacity: 0.9; - z-index: 99; -} - -#menu ul { - list-style: none; - padding: 0; - margin: 0; -} - -#menu li a { - display: block; - float: left; - height: 1.5em; - margin-left: 0.5em; - text-align: center; - color: #FFF; - padding: 0 1em; -} -#menu li a.menu { - padding-right: 1.5em; -} - -#menu li a.menu:hover, #menu li a.menu:active { - color: #000; - background: #FFF url(/static/img/arrow-down.png) no-repeat center right; -} - -#menu li a.menu.selected { - color: #000; - background: #FFF url(/static/img/arrow-up.png) no-repeat center right; -} -#menu a.menu-link { - display: block; - float: left; - height: 1.5em; - margin-left: 0.5em; - text-align: center; - color: #FFF; -} -#menu span { - color: #888; - font-style: italic; - font-size: .75em; - margin-right: 0.5em; -} - - -#toc, #themes, #nota_red, #info, #other-versions, #objects { - position: fixed; - left: 0em; - top: 1.5em; - width: 37em; - padding: 1.5em; - background: #FFF; - border-bottom: 0.25em solid #DDD; - border-right: 0.25em solid #DDD; - display: none; - height: 16em; - overflow-x: hidden; - overflow-y: auto; - opacity: 0.9; - z-index: 99; -} -#download { - position: fixed; - left: 0em; - top: 1.5em; - width: 37em; - padding: 1.5em; - background: #FFF; - border-bottom: 0.25em solid #DDD; - border-right: 0.25em solid #DDD; - display: none; - height: 10em; - overflow-x: hidden; - overflow-y: auto; - opacity: 0.9; - z-index: 99; -} - -#toc ol, #themes ol, #objects ol { - list-style: none; - padding: 0; - margin: 0; -} - -#toc ol li { - font-weight: bold; -} - -#toc ol ol { - padding: 0 0 1.5em 1.5em; - margin: 0; -} - -#toc ol ol li { - font-weight: normal; -} - -#toc h2 { - display: none; -} - -#toc .anchor { - float: none; - margin: 0; - color: blue; - font-size: 16px; - position: inherit; -} - -#info p { - text-align: justify; - margin: 1.5em 0 0; -} - -/* =================================================== */ -/* = Common elements: headings, paragraphs and lines = */ -/* =================================================== */ -h1 { - font-size: 3em; - margin: 0 0 1.5em 0; - text-align: center; - line-height: 1.5em; - font-weight: bold; -} - -h2 { - font-size: 2em; - margin: 1.5em 0 0; - font-weight: bold; - line-height: 1.5em; -} - -h3 { - font-size: 1.5em; - margin: 1.5em 0 0; - font-weight: normal; - line-height: 1.5em; -} - -h4 { - font-size: 1em; - margin: 1.5em 0 0; - line-height: 1.5em; -} - -p { - margin: 0; -} - -/* ======================== */ -/* = Footnotes and themes = */ -/* ======================== */ -.theme-begin { - border-left: 0.1em solid #DDDDDD; - color: #777; - padding: 0 0.5em; - width: 7.5em; - - font-style: normal; - font-weight: normal; - font-variant: normal; - letter-spacing: 0; - text-transform: none; - text-decoration: none; - - font-size: 16px; - float: right; - margin-right: -9.5em; - margin-bottom: 0.5em; - clear: both; - left: 40em; - line-height: 1.5em; - text-align: left; -} - -.annotation { - font-style: normal; - font-weight: normal; - font-size: 12px; - padding-left: 2px; - position: relative; - top: -4px; -} - -#footnotes { - margin-top: 3em; -} - -#footnotes .annotation { - display: block; - float: left; - width: 2.5em; - clear: both; -} - -#footnotes div { - margin: 1.5em 0 0 0; -} - -#footnotes p, #footnotes ul { - margin-left: 2.5em; - font-size: 0.875em; -} - -#footnotes .permalink { - font-size: .75em; -} - -blockquote { - font-size: 0.875em; -} - -/* ============= */ -/* = Numbering = */ -/* ============= */ -.verse, .paragraph { - position:relative; -} -.anchor { - position: absolute; - margin: -0.25em -0.5em; - left: -3em; - color: #777; - font-size: 12px; - width: 2em; - text-align: center; - padding: 0.25em 0.5em; - line-height: 1.5em; -} - -.anchor:hover, #book-text .anchor:active { - color: #FFF; - background-color: #CCC; -} - -/* =================== */ -/* = Custom elements = */ -/* =================== */ -span.author { - font-size: 0.5em; - display: block; - line-height: 1.5em; - margin-bottom: 0.25em; -} - -span.collection { - font-size: 0.375em; - display: block; - line-height: 1.5em; - margin-bottom: -0.25em; -} - -span.subtitle { - font-size: 0.5em; - display: block; - line-height: 1.5em; - margin-top: -0.25em; -} - -span.translator { - font-size: 0.375em; - display: block; - line-height: 1.5em; - margin-top: 0.25em; -} - -div.didaskalia { - font-style: italic; - margin: 0.5em 0 0 1.5em; -} - -div.kwestia { - margin: 0.5em 0 0; -} - -div.stanza { - margin: 1.5em 0 0; -} - -div.kwestia div.stanza { - margin: 0; -} - -p.paragraph { - text-align: justify; - margin: 1.5em 0 0; -} - -p.motto { - text-align: justify; - font-style: italic; - margin: 1.5em 0 0; -} - -p.motto_podpis { - font-size: 0.875em; - text-align: right; -} - -div.fragment { - border-bottom: 0.1em solid #999; - padding-bottom: 1.5em; -} - -div.note p, div.dedication p, div.note p.paragraph, div.dedication p.paragraph { - text-align: right; - font-style: italic; -} - -hr.spacer { - height: 3em; - visibility: hidden; -} - -hr.spacer-line { - margin: 1.5em 0; - border: none; - border-bottom: 0.1em solid #000; -} - -p.spacer-asterisk { - padding: 0; - margin: 1.5em 0; - text-align: center; -} - -div.person-list ol { - list-style: none; - padding: 0 0 0 1.5em; -} - -p.place-and-time { - font-style: italic; -} - -em.math, em.foreign-word, em.book-title, em.didaskalia { - font-style: italic; -} - -em.author-emphasis { - letter-spacing: 0.1em; -} - -em.person { - font-style: normal; - font-variant: small-caps; -} - -.verse:after { - content: "\feff"; -} - - -/* =================================== */ -/* = Hide some elements for printing = */ -/* =================================== */ - -@media print { - #menu {display: none;} -} diff --git a/apps/wolnelektury_core/static/css/master.picture.css b/apps/wolnelektury_core/static/css/master.picture.css deleted file mode 100644 index 43abda40a..000000000 --- a/apps/wolnelektury_core/static/css/master.picture.css +++ /dev/null @@ -1,60 +0,0 @@ - -#picture-view { - left: 0; - right: 0; - position:absolute; - top: 0; - bottom: 0; - z-index: 10; -} - -#picture-view .picture-wrap { - background-repeat: no-repeat; - margin: 0 auto 0 auto; - display: block; - position: relative; - z-index: 10; -// cursor: move; - -} - -.picture-wrap .mark { - border: 2px solid rgba(200, 200, 200, 0.7); - position: absolute; - display: block; -} - -.picture-wrap .mark .label { - position: absolute; - display: block; - background-color: rgba(200, 200, 200, 0.7); - color: rgba(0,0,0,0.6); - font-size: 0.9rem; -// bottom: -1.5em; -} - -.button.inactive:active, -.button.inactive:link, -.button.inactive:visited -{ - color: #606060 !important; - cursor: not-allowed; -} - -#sponsors { - margin-top: 3em; -} -#sponsors img { - width: 100%; -} - -#spinner { - height: 1em; - z-index:10; -} - -.dropdown-body { - font-size: 0.8rem; - background-color: #444; -} - diff --git a/apps/wolnelektury_core/static/css/new.book.css b/apps/wolnelektury_core/static/css/new.book.css deleted file mode 100644 index a5f4c0676..000000000 --- a/apps/wolnelektury_core/static/css/new.book.css +++ /dev/null @@ -1,275 +0,0 @@ -body { - font-size: 16px; - font-family: Georgia, "Times New Roman", serif; - line-height: 1.5em; - margin: 0; -} - -a { - color: blue; - text-decoration: none; -} - -/* ================================== */ -/* = Header with logo and menu = */ -/* ================================== */ -#toc ol, #themes ol, #objects ol { - list-style: none; - padding: 0; - margin: 0; -} - -#toc ol li { - font-weight: bold; -} - -#toc ol ol { - padding: 0 0 1.5em 1.5em; - margin: 0; -} - -#toc ol ol li { - font-weight: normal; -} - -#toc h2 { - display: none; -} - -#toc .anchor { - float: none; - margin: 0; - color: blue; - font-size: 16px; - position: inherit; -} - -#info p { - margin: 1em 0 0; -} - -#info .sponsors img { - margin-bottom: 1em; -} - - -/* =================================================== */ -/* = Common elements: headings, paragraphs and lines = */ -/* =================================================== */ -h1 { - font-size: 3em; - margin: 1.5em 0; - text-align: center; - line-height: 1.5em; - font-weight: bold; -} - -h2 { - font-size: 2em; - margin: 1.5em 0 0; - font-weight: bold; - line-height: 1.5em; -} - -h3 { - font-size: 1.5em; - margin: 1.5em 0 0; - font-weight: normal; - line-height: 1.5em; -} - -h4 { - font-size: 1em; - margin: 1.5em 0 0; - line-height: 1.5em; -} - -p { - margin: 0; -} - -/* ======================== */ -/* = Footnotes and themes = */ -/* ======================== */ - -.annotation { - font-style: normal; - font-weight: normal; - font-size: .75em; - padding-left: 2px; - position: relative; - top: -4px; -} - -#footnotes { - margin-top: 3em; -} - -#footnotes .annotation { - display: block; - float: left; - width: 2.5em; - clear: both; -} - -#footnotes div { - margin: 1.5em 0 0 0; -} - -#footnotes p, #footnotes ul { - margin-left: 2.5em; - font-size: 0.875em; -} - -#footnotes .permalink { - font-size: .75em; -} - -blockquote { - font-size: 0.875em; -} - -/* ============= */ -/* = Numbering = */ -/* ============= */ -.verse, .paragraph { - position:relative; -} -/*.anchor { - position: absolute; - margin: -0.25em -0.5em; - color: #777; - font-size: 12px; - text-align: center; - padding: 0.25em 0.5em; - line-height: 1.5em; -}*/ - - -/* =================== */ -/* = Custom elements = */ -/* =================== */ -span.author { - font-size: 0.5em; - display: block; - line-height: 1.5em; - margin-bottom: 0.25em; -} - -span.collection { - font-size: 0.375em; - display: block; - line-height: 1.5em; - margin-bottom: -0.25em; -} - -span.subtitle { - font-size: 0.5em; - display: block; - line-height: 1.5em; - margin-top: -0.25em; -} - -span.translator { - font-size: 0.375em; - display: block; - line-height: 1.5em; - margin-top: 0.25em; -} - -div.didaskalia { - font-style: italic; - margin: 0.5em 0 0 1.5em; -} - -div.kwestia { - margin: 0.5em 0 0; -} - -div.stanza { - margin: 1.5em 0; -} - -div.kwestia div.stanza { - margin: 0; -} - -p.paragraph { - text-align: justify; - margin: 0; - text-indent: 1.5em; -} - -.motto { - text-align: justify; - font-style: italic; - margin: 1.5em 0 0; -} - -p.motto_podpis { - font-size: 0.875em; - text-align: right; - margin-bottom: 1.5em; -} - -div.fragment { - border-bottom: 0.1em solid #999; - padding-bottom: 1.5em; -} - -div.note p, div.dedication p, div.note p.paragraph, div.dedication p.paragraph { - text-align: right; - font-style: italic; -} - -hr.spacer { - height: 3em; - visibility: hidden; -} - -hr.spacer-line { - margin: 1.5em 0; - border: none; - border-bottom: 0.1em solid #000; -} - -p.spacer-asterisk { - padding: 0; - margin: 1.5em 0; - text-align: center; -} - -div.person-list ol { - list-style: none; - padding: 0 0 0 1.5em; -} - -p.place-and-time { - font-style: italic; -} - -em.math, em.foreign-word, em.book-title, em.didaskalia { - font-style: italic; -} - -em.author-emphasis { - letter-spacing: 0.1em; -} - -em.person { - font-style: normal; - font-variant: small-caps; -} - -.verse:after { - content: "\feff"; -} - - -/* =================================== */ -/* = Hide some elements for printing = */ -/* =================================== */ - -@media print { - #menu {display: none;} -} diff --git a/apps/wolnelektury_core/static/css/picture_box.css b/apps/wolnelektury_core/static/css/picture_box.css deleted file mode 100644 index a2ab07d1f..000000000 --- a/apps/wolnelektury_core/static/css/picture_box.css +++ /dev/null @@ -1,29 +0,0 @@ -.book-wide-box.picture img.cover { - width: 53.5em; - height: auto; -} - -.picture.book-wide-box .book-box-tools { - margin-left: 50em; // 535px image + 15px margin @ 11pt -} - -.picture li.book-box-download { - width: 15em; -} - - -.Picture-item { - display: inline-block; - vertical-align: top; - float: left; -} - - -.picture.book-wide-box .other-tools { - margin: 5em 0 0 0; -} - - -.picture.book-wide-box #theme-list-wrapper { - margin-left: 55em; -} diff --git a/apps/wolnelektury_core/static/css/simple.css b/apps/wolnelektury_core/static/css/simple.css deleted file mode 100755 index f723889a2..000000000 --- a/apps/wolnelektury_core/static/css/simple.css +++ /dev/null @@ -1,75 +0,0 @@ -/* Legacy simple style for some very old pages. */ - -html { - margin: 0; -} - -body { - margin: 0; - padding: 1em; - color: #2F4110; - background: #FFF url(/static/img/bg.png) repeat-x; - font-size: .75em; - font-family: Verdana,Arial,Helvetica,sans-serif; -} - - - -#body { - margin-top: 2em; -/* - max-width: 900px; - margin:auto; -*/ - margin-left: 400px; -} - -#logo { - float: left; - margin-left: 100px; - margin-top: 4em; -} - -h1 { - font: bold 2.2em Arial,sans-serif; - padding-top: .7em; - margin-bottom: .2em; -} - - -h2 { - font-size: 1.1em; - margin:0; -} - -a { - color: #295158; - text-decoration: none; -} - - -.plain li { - list-style: none; -} - -li { - margin: 1em; -} - -.clr { - clear: both; -} - - -.more { - text-align: right; -} - -table { - margin-top: 1em; -} - -th { - font-weight: normal; - text-align: left; -} diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png deleted file mode 100644 index 954e22dbd..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png deleted file mode 100644 index 64ece5707..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png deleted file mode 100644 index abdc01082..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png deleted file mode 100644 index 9b383f4d2..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png deleted file mode 100644 index a23baad25..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png deleted file mode 100644 index 42ccba269..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png deleted file mode 100644 index 1b1972b56..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png deleted file mode 100644 index f1273672d..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png deleted file mode 100644 index 359397acf..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_222222_256x240.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_222222_256x240.png deleted file mode 100644 index b273ff111..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_222222_256x240.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png deleted file mode 100644 index a641a371a..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png deleted file mode 100644 index 85e63e9f6..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png deleted file mode 100644 index e117effa3..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ffffff_256x240.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ffffff_256x240.png deleted file mode 100644 index 42f8f992c..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ffffff_256x240.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/jquery-ui-1.8.16.custom.css b/apps/wolnelektury_core/static/css/ui-lightness/jquery-ui-1.8.16.custom.css deleted file mode 100644 index da10fff71..000000000 --- a/apps/wolnelektury_core/static/css/ui-lightness/jquery-ui-1.8.16.custom.css +++ /dev/null @@ -1,342 +0,0 @@ -/* - * jQuery UI CSS Framework 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } -/* end clearfix */ -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { cursor: default !important; } - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } - - -/* - * jQuery UI CSS Framework 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - * - * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px - */ - - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } -.ui-widget .ui-widget { font-size: 1em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } -.ui-widget-content a { color: #333333; } -.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } -.ui-widget-header a { color: #ffffff; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } -.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } -.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } -.ui-widget :active { outline: none; } - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } -.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } -.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } - -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-off { background-position: -96px -144px; } -.ui-icon-radio-on { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; } -.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; } -.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } -.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } - -/* Overlays */ -.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } -.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* - * jQuery UI Autocomplete 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Autocomplete#theming - */ -.ui-autocomplete { position: absolute; cursor: default; } - -/* workarounds */ -* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ - -/* - * jQuery UI Menu 1.8.16 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Menu#theming - */ -.ui-menu { - list-style:none; - padding: 2px; - margin: 0; - display:block; - float: left; -} -.ui-menu .ui-menu { - margin-top: -3px; -} -.ui-menu .ui-menu-item { - margin:0; - padding: 0; - zoom: 1; - float: left; - clear: left; - width: 100%; -} -.ui-menu .ui-menu-item a { - text-decoration:none; - display:block; - padding:.2em .4em; - line-height:1.5; - zoom:1; -} -.ui-menu .ui-menu-item a.ui-state-hover, -.ui-menu .ui-menu-item a.ui-state-active { - font-weight: normal; - margin: -1px; -} diff --git a/apps/wolnelektury_core/static/img/1percent-big.png b/apps/wolnelektury_core/static/img/1percent-big.png deleted file mode 100644 index 333413ee6..000000000 Binary files a/apps/wolnelektury_core/static/img/1percent-big.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/android-poster.png b/apps/wolnelektury_core/static/img/android-poster.png deleted file mode 100644 index a518650d4..000000000 Binary files a/apps/wolnelektury_core/static/img/android-poster.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/arrow-down.png b/apps/wolnelektury_core/static/img/arrow-down.png deleted file mode 100644 index 0e32315c0..000000000 Binary files a/apps/wolnelektury_core/static/img/arrow-down.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/arrow-gray.png b/apps/wolnelektury_core/static/img/arrow-gray.png deleted file mode 100644 index b1c590d04..000000000 Binary files a/apps/wolnelektury_core/static/img/arrow-gray.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/arrow-gray.svg b/apps/wolnelektury_core/static/img/arrow-gray.svg deleted file mode 100644 index 02d7075c3..000000000 --- a/apps/wolnelektury_core/static/img/arrow-gray.svg +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/apps/wolnelektury_core/static/img/arrow-teal.png b/apps/wolnelektury_core/static/img/arrow-teal.png deleted file mode 100644 index ce406336b..000000000 Binary files a/apps/wolnelektury_core/static/img/arrow-teal.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/arrow-teal.svg b/apps/wolnelektury_core/static/img/arrow-teal.svg deleted file mode 100644 index 478ed07c2..000000000 --- a/apps/wolnelektury_core/static/img/arrow-teal.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/apps/wolnelektury_core/static/img/arrow-up.png b/apps/wolnelektury_core/static/img/arrow-up.png deleted file mode 100644 index cdf9cf635..000000000 Binary files a/apps/wolnelektury_core/static/img/arrow-up.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/auth/facebook.png b/apps/wolnelektury_core/static/img/auth/facebook.png deleted file mode 100644 index f9b6e7149..000000000 Binary files a/apps/wolnelektury_core/static/img/auth/facebook.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/auth/google.png b/apps/wolnelektury_core/static/img/auth/google.png deleted file mode 100644 index bf7d11240..000000000 Binary files a/apps/wolnelektury_core/static/img/auth/google.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/auth/openid.png b/apps/wolnelektury_core/static/img/auth/openid.png deleted file mode 100644 index 83e97691f..000000000 Binary files a/apps/wolnelektury_core/static/img/auth/openid.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/auth/twitter.png b/apps/wolnelektury_core/static/img/auth/twitter.png deleted file mode 100644 index d2a55029d..000000000 Binary files a/apps/wolnelektury_core/static/img/auth/twitter.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/backdrop/boltron-3212284622.jpg b/apps/wolnelektury_core/static/img/backdrop/boltron-3212284622.jpg deleted file mode 100644 index 7fe148c19..000000000 Binary files a/apps/wolnelektury_core/static/img/backdrop/boltron-3212284622.jpg and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/backdrop/book-drawer2.jpg b/apps/wolnelektury_core/static/img/backdrop/book-drawer2.jpg deleted file mode 100644 index 88a1ee4be..000000000 Binary files a/apps/wolnelektury_core/static/img/backdrop/book-drawer2.jpg and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/backdrop/horiavarlan-4268896468.jpg b/apps/wolnelektury_core/static/img/backdrop/horiavarlan-4268896468.jpg deleted file mode 100644 index acc80b6e7..000000000 Binary files a/apps/wolnelektury_core/static/img/backdrop/horiavarlan-4268896468.jpg and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/bg-header.png b/apps/wolnelektury_core/static/img/bg-header.png deleted file mode 100644 index 4e4cdf9a7..000000000 Binary files a/apps/wolnelektury_core/static/img/bg-header.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/bg.png b/apps/wolnelektury_core/static/img/bg.png deleted file mode 100644 index be7d63a7c..000000000 Binary files a/apps/wolnelektury_core/static/img/bg.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/book-parent.png b/apps/wolnelektury_core/static/img/book-parent.png deleted file mode 100644 index 566859807..000000000 Binary files a/apps/wolnelektury_core/static/img/book-parent.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/book.png b/apps/wolnelektury_core/static/img/book.png deleted file mode 100644 index f26483979..000000000 Binary files a/apps/wolnelektury_core/static/img/book.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/doodle/20110908-android.png b/apps/wolnelektury_core/static/img/doodle/20110908-android.png deleted file mode 100644 index 664b579f5..000000000 Binary files a/apps/wolnelektury_core/static/img/doodle/20110908-android.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/doodle/20110908-logo.png b/apps/wolnelektury_core/static/img/doodle/20110908-logo.png deleted file mode 100644 index f4ab58319..000000000 Binary files a/apps/wolnelektury_core/static/img/doodle/20110908-logo.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/download.png b/apps/wolnelektury_core/static/img/download.png deleted file mode 100644 index 54d1bf904..000000000 Binary files a/apps/wolnelektury_core/static/img/download.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/download.svg b/apps/wolnelektury_core/static/img/download.svg deleted file mode 100644 index cb49aa2ba..000000000 --- a/apps/wolnelektury_core/static/img/download.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/apps/wolnelektury_core/static/img/epub-www.jpg b/apps/wolnelektury_core/static/img/epub-www.jpg deleted file mode 100644 index 84016cf6e..000000000 Binary files a/apps/wolnelektury_core/static/img/epub-www.jpg and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/epub.png b/apps/wolnelektury_core/static/img/epub.png deleted file mode 100644 index 32510fdfb..000000000 Binary files a/apps/wolnelektury_core/static/img/epub.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/favicon.ico b/apps/wolnelektury_core/static/img/favicon.ico deleted file mode 100644 index 3f2aacc37..000000000 Binary files a/apps/wolnelektury_core/static/img/favicon.ico and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/favicon.png b/apps/wolnelektury_core/static/img/favicon.png deleted file mode 100644 index 9794f3588..000000000 Binary files a/apps/wolnelektury_core/static/img/favicon.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/indicator.gif b/apps/wolnelektury_core/static/img/indicator.gif deleted file mode 100644 index 085ccaeca..000000000 Binary files a/apps/wolnelektury_core/static/img/indicator.gif and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/kindle-poster-260.png b/apps/wolnelektury_core/static/img/kindle-poster-260.png deleted file mode 100644 index 1fd435eee..000000000 Binary files a/apps/wolnelektury_core/static/img/kindle-poster-260.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/kindle-poster.png b/apps/wolnelektury_core/static/img/kindle-poster.png deleted file mode 100644 index 63560d273..000000000 Binary files a/apps/wolnelektury_core/static/img/kindle-poster.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/licenses/cc-by-sa.png b/apps/wolnelektury_core/static/img/licenses/cc-by-sa.png deleted file mode 100644 index 7b15bc451..000000000 Binary files a/apps/wolnelektury_core/static/img/licenses/cc-by-sa.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/licenses/cc-by-sa.svg b/apps/wolnelektury_core/static/img/licenses/cc-by-sa.svg deleted file mode 100644 index 140e9b8c6..000000000 --- a/apps/wolnelektury_core/static/img/licenses/cc-by-sa.svg +++ /dev/null @@ -1,482 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/wolnelektury_core/static/img/listen.png b/apps/wolnelektury_core/static/img/listen.png deleted file mode 100644 index 68627221c..000000000 Binary files a/apps/wolnelektury_core/static/img/listen.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/listen.svg b/apps/wolnelektury_core/static/img/listen.svg deleted file mode 100644 index 714768f54..000000000 --- a/apps/wolnelektury_core/static/img/listen.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/apps/wolnelektury_core/static/img/logo-220.png b/apps/wolnelektury_core/static/img/logo-220.png deleted file mode 100644 index 9b15e88a3..000000000 Binary files a/apps/wolnelektury_core/static/img/logo-220.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/logo-bez.png b/apps/wolnelektury_core/static/img/logo-bez.png deleted file mode 100644 index 213c442d4..000000000 Binary files a/apps/wolnelektury_core/static/img/logo-bez.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/logo-big.png b/apps/wolnelektury_core/static/img/logo-big.png deleted file mode 100644 index fae49ea96..000000000 Binary files a/apps/wolnelektury_core/static/img/logo-big.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/logo-fbc.png b/apps/wolnelektury_core/static/img/logo-fbc.png deleted file mode 100644 index c7802d3d3..000000000 Binary files a/apps/wolnelektury_core/static/img/logo-fbc.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/logo-neon.png b/apps/wolnelektury_core/static/img/logo-neon.png deleted file mode 100644 index c729463be..000000000 Binary files a/apps/wolnelektury_core/static/img/logo-neon.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/logo.png b/apps/wolnelektury_core/static/img/logo.png deleted file mode 100644 index 398f45d01..000000000 Binary files a/apps/wolnelektury_core/static/img/logo.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/logo_nck.jpg b/apps/wolnelektury_core/static/img/logo_nck.jpg deleted file mode 100644 index c030f6a9a..000000000 Binary files a/apps/wolnelektury_core/static/img/logo_nck.jpg and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/logo_nck_200horiz_trans.png b/apps/wolnelektury_core/static/img/logo_nck_200horiz_trans.png deleted file mode 100644 index 897a8352b..000000000 Binary files a/apps/wolnelektury_core/static/img/logo_nck_200horiz_trans.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/logo_nck_200trans.png b/apps/wolnelektury_core/static/img/logo_nck_200trans.png deleted file mode 100644 index 2731aacec..000000000 Binary files a/apps/wolnelektury_core/static/img/logo_nck_200trans.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/mobi.png b/apps/wolnelektury_core/static/img/mobi.png deleted file mode 100644 index 1631b896d..000000000 Binary files a/apps/wolnelektury_core/static/img/mobi.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/odt.png b/apps/wolnelektury_core/static/img/odt.png deleted file mode 100644 index c0c2602f1..000000000 Binary files a/apps/wolnelektury_core/static/img/odt.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/payu.png b/apps/wolnelektury_core/static/img/payu.png deleted file mode 100644 index 2e8abf480..000000000 Binary files a/apps/wolnelektury_core/static/img/payu.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/pdf.png b/apps/wolnelektury_core/static/img/pdf.png deleted file mode 100644 index 5fe5bbe23..000000000 Binary files a/apps/wolnelektury_core/static/img/pdf.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/procent.png b/apps/wolnelektury_core/static/img/procent.png deleted file mode 100644 index 3d0f82d81..000000000 Binary files a/apps/wolnelektury_core/static/img/procent.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/progress-pixel.png b/apps/wolnelektury_core/static/img/progress-pixel.png deleted file mode 100644 index 5af1bfdfe..000000000 Binary files a/apps/wolnelektury_core/static/img/progress-pixel.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/read.png b/apps/wolnelektury_core/static/img/read.png deleted file mode 100644 index 1d5ab0e7b..000000000 Binary files a/apps/wolnelektury_core/static/img/read.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/read.svg b/apps/wolnelektury_core/static/img/read.svg deleted file mode 100644 index f3fd5b65c..000000000 --- a/apps/wolnelektury_core/static/img/read.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/apps/wolnelektury_core/static/img/s5/blank.gif b/apps/wolnelektury_core/static/img/s5/blank.gif deleted file mode 100644 index 75b945d25..000000000 Binary files a/apps/wolnelektury_core/static/img/s5/blank.gif and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/s5/bodybg.gif b/apps/wolnelektury_core/static/img/s5/bodybg.gif deleted file mode 100755 index 5f448a16f..000000000 Binary files a/apps/wolnelektury_core/static/img/s5/bodybg.gif and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/s5/iepngfix.htc b/apps/wolnelektury_core/static/img/s5/iepngfix.htc deleted file mode 100644 index bba2db756..000000000 --- a/apps/wolnelektury_core/static/img/s5/iepngfix.htc +++ /dev/null @@ -1,42 +0,0 @@ - - - - - \ No newline at end of file diff --git a/apps/wolnelektury_core/static/img/search.png b/apps/wolnelektury_core/static/img/search.png deleted file mode 100644 index 8f032bf0b..000000000 Binary files a/apps/wolnelektury_core/static/img/search.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/social/bigfacebook.png b/apps/wolnelektury_core/static/img/social/bigfacebook.png deleted file mode 100644 index 630416cf2..000000000 Binary files a/apps/wolnelektury_core/static/img/social/bigfacebook.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/social/biggoogle.png b/apps/wolnelektury_core/static/img/social/biggoogle.png deleted file mode 100644 index 19ad19df5..000000000 Binary files a/apps/wolnelektury_core/static/img/social/biggoogle.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/social/bignk.png b/apps/wolnelektury_core/static/img/social/bignk.png deleted file mode 100644 index c119cd117..000000000 Binary files a/apps/wolnelektury_core/static/img/social/bignk.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/social/bigtwitter.png b/apps/wolnelektury_core/static/img/social/bigtwitter.png deleted file mode 100644 index fafbe6412..000000000 Binary files a/apps/wolnelektury_core/static/img/social/bigtwitter.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/social/f.png b/apps/wolnelektury_core/static/img/social/f.png deleted file mode 100644 index 3261c6d7f..000000000 Binary files a/apps/wolnelektury_core/static/img/social/f.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/social/f.svg b/apps/wolnelektury_core/static/img/social/f.svg deleted file mode 100644 index fd25a0b1e..000000000 --- a/apps/wolnelektury_core/static/img/social/f.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/apps/wolnelektury_core/static/img/social/gplus.png b/apps/wolnelektury_core/static/img/social/gplus.png deleted file mode 100644 index c9a98cca4..000000000 Binary files a/apps/wolnelektury_core/static/img/social/gplus.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/social/gplus.svg b/apps/wolnelektury_core/static/img/social/gplus.svg deleted file mode 100644 index ad8584c48..000000000 --- a/apps/wolnelektury_core/static/img/social/gplus.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/apps/wolnelektury_core/static/img/social/nk.png b/apps/wolnelektury_core/static/img/social/nk.png deleted file mode 100644 index 736918565..000000000 Binary files a/apps/wolnelektury_core/static/img/social/nk.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/social/nk.svg b/apps/wolnelektury_core/static/img/social/nk.svg deleted file mode 100644 index 143701f10..000000000 --- a/apps/wolnelektury_core/static/img/social/nk.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/apps/wolnelektury_core/static/img/speaker.png b/apps/wolnelektury_core/static/img/speaker.png deleted file mode 100644 index 5831f177a..000000000 Binary files a/apps/wolnelektury_core/static/img/speaker.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/turniej-maly.png b/apps/wolnelektury_core/static/img/turniej-maly.png deleted file mode 100644 index b11f0d676..000000000 Binary files a/apps/wolnelektury_core/static/img/turniej-maly.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/txt.png b/apps/wolnelektury_core/static/img/txt.png deleted file mode 100644 index de699ea24..000000000 Binary files a/apps/wolnelektury_core/static/img/txt.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/wiatrak.png b/apps/wolnelektury_core/static/img/wiatrak.png deleted file mode 100644 index e96a0c1a5..000000000 Binary files a/apps/wolnelektury_core/static/img/wiatrak.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/wl_icon_64.png b/apps/wolnelektury_core/static/img/wl_icon_64.png deleted file mode 100644 index a9dded316..000000000 Binary files a/apps/wolnelektury_core/static/img/wl_icon_64.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/zabawnik.png b/apps/wolnelektury_core/static/img/zabawnik.png deleted file mode 100644 index 2a4621693..000000000 Binary files a/apps/wolnelektury_core/static/img/zabawnik.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/js/annoy.js b/apps/wolnelektury_core/static/js/annoy.js deleted file mode 100644 index 3104097a9..000000000 --- a/apps/wolnelektury_core/static/js/annoy.js +++ /dev/null @@ -1,29 +0,0 @@ -(function($) { - $(function() { - - -$("#annoy-on").click(function(e) { - e.preventDefault(); - $("#annoy").slideDown('fast'); - $(this).hide(); - if (Modernizr.localstorage) localStorage.removeItem("annoyed2013"); -}); - -$("#annoy-off").click(function() { - $("#annoy").slideUp('fast'); - $("#annoy-on").show(); - if (Modernizr.localstorage) localStorage["annoyed2013"] = true; -}); - - -if (Modernizr.localstorage) { - if (!localStorage["annoyed2013"]) { - $("#annoy-on").hide(); - $("#annoy").show(); - } -} - - - - }); -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/base.js b/apps/wolnelektury_core/static/js/base.js deleted file mode 100644 index f2a8e262a..000000000 --- a/apps/wolnelektury_core/static/js/base.js +++ /dev/null @@ -1,167 +0,0 @@ -(function($) { - $(function() { - $.fn.toggle_slide = function(p) { - cont = $(this); - short_el = p['short_el'] || $(':first-child', this); - long_el = p['long_el'] || short_el.next(); - button = p['button']; - short_text = p['short_text'], - long_text = p['long_text']; - - var toggle_fun = function(cont, short_el, long_el, button, short_text, long_text) { - var toggle = function() { - if (cont.hasClass('short')) { - cont.animate({"height": long_el.attr("cont_h")+'px'}, {duration: "fast" }).removeClass('short'); - short_el.hide(); - long_el.show(); - if (button && long_text) button.html(long_text); - } else { - cont.animate({"height": short_el.attr("cont_h")+'px'}, {duration: "fast" }).addClass('short'); - long_el.hide(); - short_el.show(); - if (button && short_text) button.html(short_text); - } - return false; - } - return toggle; - } - if (long_el.html().length <= short_el.html().length) - return; - - // ensure long element shown first - long_el.show();short_el.hide(); - long_el.attr("cont_h", $(this).height()).hide(); - short_el.show().attr("cont_h", $(this).height()); - $(this).addClass('short'); - - if (button && short_text) button.html(short_text); - if (button) button.click(toggle_fun(cont, short_el, long_el, button, short_text, long_text)); - }; - - - // Fragments - $('.fragment-with-short').each(function() { - $(this).toggle_slide({ - short_el: $('.fragment-short-text', this), - long_el: $('.fragment-long-text', this), - button: $('.toggle', this) - }) - }); - $('#description').each(function() { - $(this).toggle_slide({ - short_el: $('#description-short', this), - long_el: $('#description-long', this), - button: $(this) - }) - }); - - - - (function() { - var $current = null; - var menu_loaded = false; - $('.hidden-box-wrapper').each(function() { - var $hidden = $('.hidden-box', this); - $('.hidden-box-trigger', this).click(function(event) { - event.preventDefault(); - if ($current == $hidden) { - $current = null; - $hidden.hide('fast'); - } else { - $current && $current.hide('fast'); - $hidden.show('fast'); - $current = $hidden; - if ($(this).hasClass('load-menu') && !menu_loaded) { - $.ajax({ - url: '/katalog/' + LANGUAGE_CODE + '.json', - dataType: "json", - }).done(function(data) { - $.each(data, function(index, value) { - var $menuitem = $('#menu-' + index); - $menuitem.html(value); - var $minisearch = $(""); - $minisearch.keyup(function() { - var s = $(this).val().toLowerCase(); - if (s) { - $("li", $menuitem).each(function() { - if ($("a", this).text().toLowerCase().indexOf(s) != -1) - $(this).show(); - else $(this).hide(); - }); - } - else { - $("li", $menuitem).css("display", ""); - } - }); - $menuitem.prepend($minisearch); - }); - menu_loaded = true; - }); - } - } - }); - }); - /* this kinda breaks the whole page. */ - $('body').click(function(e) { - if ($current == null) return; - var p = $(e.target); - while (p.length) { - if (p == $current) - return; - if (p.hasClass('hidden-box-trigger') - || p.hasClass('simple-toggler') - || p.hasClass('mini-search')) - return; - p = p.parent(); - } - $current.hide('fast'); - $current = null; - }); - })(); - - -$('#show-menu').click(function(event) { - event.preventDefault(); - $('#menu').toggle('slow'); -}); -$('#book-list-nav h2').click(function(event) { - event.preventDefault(); - $('#book-list-nav-index').toggle(); -}); - - -$('#themes-list-toggle').click(function(event) { - event.preventDefault(); - $('#themes-list').toggle('slow'); -}); - - - $('.book-list-index').click(function(){ - $('.book-list-show-index').hide('slow'); - if($(this).parent().next('ul:not(:hidden)').length == 0){ - $(this).parent().next('ul').toggle('slow'); - } - return false; - }); - - $('.hoverclick').click(function() {$(this).closest('.hoverget').toggleClass('hover');}); - - $(function(){ - $("#search").search();}); - - $('body').on('click', '.simple-toggler' , function(ev) { - ev.preventDefault(); - var scope = $(this).closest('.simple-toggler-scope'); - scope.find('.simple-hidden-box').each(function(){ - var $this = $(this); - if ($this.is(':hidden')) { - $this.show(); - } else { - $this.hide(); - } - }); - }); - - }); -})(jQuery); - diff --git a/apps/wolnelektury_core/static/js/book.js b/apps/wolnelektury_core/static/js/book.js deleted file mode 100644 index 72d8174fc..000000000 --- a/apps/wolnelektury_core/static/js/book.js +++ /dev/null @@ -1,64 +0,0 @@ -$(function() { - function scrollToAnchor(anchor) { - if (anchor) { - var anchor_name = anchor.slice(1); - var element = $('a[name="' + anchor_name + '"]'); - if (element.length > 0) { - $.scrollTo(element, 500, {offset: {top: -50, left: 0}}); - foot_elem = $('#footnotes a[name="' + anchor_name + '"]'); - if (foot_elem.length > 0) { - $(element).parent().highlightFade('yellow'); - } - window.location.hash = anchor; - } - } - } - - $.highlightFade.defaults.speed = 3000; - $('#toc').hide(); - if ($('#toc li').length == 0) { - $('#menu li a[href="#toc"]').remove(); - } - if ($('#themes li').length == 0) { - $('#menu li a[href="#themes"]').remove(); - } - if ($('#nota_red').length == 0) { - $('#menu li a[href="#nota_red"]').remove(); - } - - // On page load, scroll to anchor - scrollToAnchor(window.location.hash) - - $('#toc, #themes, #book-text').delegate('click', 'a', function(event) { - event.preventDefault(); - $('#menu li a.selected').click(); - scrollToAnchor($(this).attr('href')); - }); - - $('#menu li a.menu').toggle(function() { - $('#menu li a.selected').click(); - $(this).addClass('selected'); - $($(this).attr('href')).slideDown('fast'); - }, function() { - $(this).removeClass('selected'); - $($(this).attr('href')).slideUp('fast'); - }); - - - if (window.getSelection) { - $('.theme-begin').click(function() { - var selection = window.getSelection(); - selection.removeAllRanges(); - var range = document.createRange(); - - var e = $(".theme-end[fid='" + $(this).attr('fid') + "']")[0]; - - if (e) { - range.setStartAfter(this); - range.setEndBefore(e); - selection.addRange(range); - } - }); - } - -}); diff --git a/apps/wolnelektury_core/static/js/book_text/info.js b/apps/wolnelektury_core/static/js/book_text/info.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/wolnelektury_core/static/js/book_text/menu.js b/apps/wolnelektury_core/static/js/book_text/menu.js deleted file mode 100644 index 5bbc1a8d8..000000000 --- a/apps/wolnelektury_core/static/js/book_text/menu.js +++ /dev/null @@ -1,151 +0,0 @@ -(function($){$(function(){ - - -function hide_menu_boxes() { - /* Closes any open menu boxes. */ - $("#menu .active").each(function() { - $(this).removeClass("active"); - $("#" + $(this).attr("data-box")).hide(); - if ($(this).hasClass('dropdown')) { - $($(this).attr('href')).slideUp('fast'); - } - }); - $("#box-underlay").hide(); -} - -function release_menu() { - /* Exits the menu. It only really disappears on small screens. */ - hide_menu_boxes(); - $("body").removeClass("menu-showed"); -} - -/* Show menu */ -$('#menu-toggle-on').click(function(e) { - e.preventDefault(); - var body = $("body"); - /* Just stop hiding the menu. This way, after narrowing the browser, - * menu will still disappear normally. */ - body.removeClass("menu-hidden"); - /* Menu still not visible? Really open it then. */ - if (!$("#menu").is(":visible")) { - body.addClass("menu-showed"); - } -}); - -/* Hide menu */ -$('#menu-toggle-off').click(function(e) { - e.preventDefault(); - /* Just release the menu. This way, after widening the browser, - * menu will still appear normally. */ - release_menu(); - /* Menu still visible after releasing it? Really hide it then. */ - if ($("#menu").is(":visible")) { - $("body").addClass("menu-hidden"); - } -}); - - -/* Exit menu by clicking anywhere else. */ -$("#box-underlay").click(release_menu); - - -/* Toggle hidden box on click. */ -$("#menu a").each(function() { - var boxid = $(this).attr("data-box"); - if (boxid) { - $("#" + $(this).attr("data-box")).hide(); - - $(this).click(function(e) { - e.preventDefault(); - var showing = $(this).hasClass("active"); - hide_menu_boxes(); - if (!showing) { - $("body").addClass("menu-showed"); - $(this).addClass("active"); - $("#box-underlay").show(); - $("#" + $(this).attr("data-box")).show(); - } - }); - } - else if ($(this).hasClass('dropdown')) { - $(this).click(function(e) { - e.preventDefault(); - var showing = $(this).hasClass("active"); - hide_menu_boxes(); - if (!showing) { - $("body").addClass("menu-showed"); - $("#sponsors:not(:hidden)").fadeOut(); - $(this).addClass("active"); - $($(this).attr('href')).slideDown('fast'); - } - }); - } - else if (!$(this).hasClass('button')) { - $(this).click(release_menu); - } -}); - - -/* Show menu item for other versions of text. - * It's only present if there are any. */ -$("#menu-other").show(); - - -/* Load other version of text. */ -$(".display-other").click(function(e) { - e.preventDefault(); - release_menu(); - - $("#other-text").show(); - $("body").addClass('with-other-text'); - - $.ajax($(this).attr('data-other'), { - success: function(text) { - $("#other-text-body").html(text); - $("#other-text-waiter").hide(); - $("#other-text-body").show(); - loaded_text($("#other-text-body")); - } - }); -}); - - -/* Remove other version of text. */ -$(".other-text-close").click(function(e) { - release_menu(); - e.preventDefault(); - $("#other-text").hide(); - $("body").removeClass('with-other-text'); - $("#other-text-body").html(""); -}); - - -/* Release menu after clicking inside TOC. */ -$("#toc a").click(release_menu); - - -if ($('#nota_red').length > 0) { - $("#menu-nota_red").show(); -} - -/* Show themes menu item, if there are any. */ -if ($('#themes li').length > 0) { - $("#menu-themes").show(); -} - -function loaded_text(text) { - /* Attach events to elements inside book texts here. - * This way they'll work for the other text when it's loaded. */ - - $(".theme-begin", text).click(function(e) { - e.preventDefault(); - if ($(this).css("overflow") == "hidden" || $(this).hasClass('showing')) { - $(this).toggleClass("showing"); - } - }); - -} -loaded_text("#book-text"); - - -})})(jQuery); diff --git a/apps/wolnelektury_core/static/js/book_text/note.js b/apps/wolnelektury_core/static/js/book_text/note.js deleted file mode 100644 index 2f0feaaea..000000000 --- a/apps/wolnelektury_core/static/js/book_text/note.js +++ /dev/null @@ -1,10 +0,0 @@ -(function($){$(function(){ - - -if ($('#nota_red li').length > 0) { - $("#menu-nota_red").show(); -} - - - -})})(jQuery); diff --git a/apps/wolnelektury_core/static/js/book_text/settings.js b/apps/wolnelektury_core/static/js/book_text/settings.js deleted file mode 100644 index e398ba3ed..000000000 --- a/apps/wolnelektury_core/static/js/book_text/settings.js +++ /dev/null @@ -1,12 +0,0 @@ -(function($){$(function(){ - - -$("#menu-settings").show(); - -$(".settings-switch").click(function(e) { - e.preventDefault(); - $("body").toggleClass($(this).attr("data-setting")); -}); - - -})})(jQuery); diff --git a/apps/wolnelektury_core/static/js/book_text/toc.js b/apps/wolnelektury_core/static/js/book_text/toc.js deleted file mode 100644 index 31f4e9ffc..000000000 --- a/apps/wolnelektury_core/static/js/book_text/toc.js +++ /dev/null @@ -1,9 +0,0 @@ -(function($){$(function(){ - - -if ($('#toc li').length > 0) { - $('#menu-toc').show(); -} - - -})})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/ierange-m2.js b/apps/wolnelektury_core/static/js/contrib/ierange-m2.js deleted file mode 100644 index e87738b0c..000000000 --- a/apps/wolnelektury_core/static/js/contrib/ierange-m2.js +++ /dev/null @@ -1,502 +0,0 @@ -/* - DOM Ranges for Internet Explorer (m2) - - Copyright (c) 2009 Tim Cameron Ryan - Released under the MIT/X License - */ - -/* - Range reference: - http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html - http://mxr.mozilla.org/mozilla-central/source/content/base/src/nsRange.cpp - https://developer.mozilla.org/En/DOM:Range - Selection reference: - http://trac.webkit.org/browser/trunk/WebCore/page/DOMSelection.cpp - TextRange reference: - http://msdn.microsoft.com/en-us/library/ms535872.aspx - Other links: - http://jorgenhorstink.nl/test/javascript/range/range.js - http://jorgenhorstink.nl/2006/07/05/dom-range-implementation-in-ecmascript-completed/ - http://dylanschiemann.com/articles/dom2Range/dom2RangeExamples.html -*/ - -//[TODO] better exception support - -(function () { // sandbox - -/* - DOM functions - */ - -var DOMUtils = { - findChildPosition: function (node) { - for (var i = 0; node = node.previousSibling; i++) - continue; - return i; - }, - isDataNode: function (node) { - return node && node.nodeValue !== null && node.data !== null; - }, - isAncestorOf: function (parent, node) { - return !DOMUtils.isDataNode(parent) && - (parent.contains(DOMUtils.isDataNode(node) ? node.parentNode : node) || - node.parentNode == parent); - }, - isAncestorOrSelf: function (root, node) { - return DOMUtils.isAncestorOf(root, node) || root == node; - }, - findClosestAncestor: function (root, node) { - if (DOMUtils.isAncestorOf(root, node)) - while (node && node.parentNode != root) - node = node.parentNode; - return node; - }, - getNodeLength: function (node) { - return DOMUtils.isDataNode(node) ? node.length : node.childNodes.length; - }, - splitDataNode: function (node, offset) { - if (!DOMUtils.isDataNode(node)) - return false; - var newNode = node.cloneNode(false); - node.deleteData(offset, node.length); - newNode.deleteData(0, offset); - node.parentNode.insertBefore(newNode, node.nextSibling); - } -}; - -/* - Text Range utilities - functions to simplify text range manipulation in ie - */ - -var TextRangeUtils = { - convertToDOMRange: function (textRange, document) { - function adoptBoundary(domRange, textRange, bStart) { - // iterate backwards through parent element to find anchor location - var cursorNode = document.createElement('a'), cursor = textRange.duplicate(); - cursor.collapse(bStart); - var parent = cursor.parentElement(); - do { - parent.insertBefore(cursorNode, cursorNode.previousSibling); - cursor.moveToElementText(cursorNode); - } while (cursor.compareEndPoints(bStart ? 'StartToStart' : 'StartToEnd', textRange) > 0 && cursorNode.previousSibling); - - // when we exceed or meet the cursor, we've found the node - if (cursor.compareEndPoints(bStart ? 'StartToStart' : 'StartToEnd', textRange) == -1 && cursorNode.nextSibling) { - // data node - cursor.setEndPoint(bStart ? 'EndToStart' : 'EndToEnd', textRange); - domRange[bStart ? 'setStart' : 'setEnd'](cursorNode.nextSibling, cursor.text.length); - } else { - // element - domRange[bStart ? 'setStartBefore' : 'setEndBefore'](cursorNode); - } - cursorNode.parentNode.removeChild(cursorNode); - } - - // return a DOM range - var domRange = new DOMRange(document); - adoptBoundary(domRange, textRange, true); - adoptBoundary(domRange, textRange, false); - return domRange; - }, - - convertFromDOMRange: function (domRange) { - function adoptEndPoint(textRange, domRange, bStart) { - // find anchor node and offset - var container = domRange[bStart ? 'startContainer' : 'endContainer']; - var offset = domRange[bStart ? 'startOffset' : 'endOffset'], textOffset = 0; - var anchorNode = DOMUtils.isDataNode(container) ? container : container.childNodes[offset]; - var anchorParent = DOMUtils.isDataNode(container) ? container.parentNode : container; - // visible data nodes need a text offset - if (container.nodeType == 3 || container.nodeType == 4) - textOffset = offset; - - // create a cursor element node to position range (since we can't select text nodes) - var cursorNode = domRange._document.createElement('a'); - anchorParent.insertBefore(cursorNode, anchorNode); - var cursor = domRange._document.body.createTextRange(); - cursor.moveToElementText(cursorNode); - cursorNode.parentNode.removeChild(cursorNode); - // move range - textRange.setEndPoint(bStart ? 'StartToStart' : 'EndToStart', cursor); - textRange[bStart ? 'moveStart' : 'moveEnd']('character', textOffset); - } - - // return an IE text range - var textRange = domRange._document.body.createTextRange(); - adoptEndPoint(textRange, domRange, true); - adoptEndPoint(textRange, domRange, false); - return textRange; - } -}; - -/* - DOM Range - */ - -function DOMRange(document) { - // save document parameter - this._document = document; - - // initialize range -//[TODO] this should be located at document[0], document[0] - this.startContainer = this.endContainer = document.body; - this.endOffset = DOMUtils.getNodeLength(document.body); -} -DOMRange.START_TO_START = 0; -DOMRange.START_TO_END = 1; -DOMRange.END_TO_END = 2; -DOMRange.END_TO_START = 3; - -DOMRange.prototype = { - // public properties - startContainer: null, - startOffset: 0, - endContainer: null, - endOffset: 0, - commonAncestorContainer: null, - collapsed: false, - // private properties - _document: null, - - // private methods - _refreshProperties: function () { - // collapsed attribute - this.collapsed = (this.startContainer == this.endContainer && this.startOffset == this.endOffset); - // find common ancestor - var node = this.startContainer; - while (node && node != this.endContainer && !DOMUtils.isAncestorOf(node, this.endContainer)) - node = node.parentNode; - this.commonAncestorContainer = node; - }, - - // range methods -//[TODO] collapse if start is after end, end is before start - setStart: function(container, offset) { - this.startContainer = container; - this.startOffset = offset; - this._refreshProperties(); - }, - setEnd: function(container, offset) { - this.endContainer = container; - this.endOffset = offset; - this._refreshProperties(); - }, - setStartBefore: function (refNode) { - // set start to beore this node - this.setStart(refNode.parentNode, DOMUtils.findChildPosition(refNode)); - }, - setStartAfter: function (refNode) { - // select next sibling - this.setStart(refNode.parentNode, DOMUtils.findChildPosition(refNode) + 1); - }, - setEndBefore: function (refNode) { - // set end to beore this node - this.setEnd(refNode.parentNode, DOMUtils.findChildPosition(refNode)); - }, - setEndAfter: function (refNode) { - // select next sibling - this.setEnd(refNode.parentNode, DOMUtils.findChildPosition(refNode) + 1); - }, - selectNode: function (refNode) { - this.setStartBefore(refNode); - this.setEndAfter(refNode); - }, - selectNodeContents: function (refNode) { - this.setStart(refNode, 0); - this.setEnd(refNode, DOMUtils.getNodeLength(refNode)); - }, - collapse: function (toStart) { - if (toStart) - this.setEnd(this.startContainer, this.startOffset); - else - this.setStart(this.endContainer, this.endOffset); - }, - - // editing methods - cloneContents: function () { - // clone subtree - return (function cloneSubtree(iterator) { - for (var node, frag = document.createDocumentFragment(); node = iterator.next(); ) { - node = node.cloneNode(!iterator.hasPartialSubtree()); - if (iterator.hasPartialSubtree()) - node.appendChild(cloneSubtree(iterator.getSubtreeIterator())); - frag.appendChild(node); - } - return frag; - })(new RangeIterator(this)); - }, - extractContents: function () { - // cache range and move anchor points - var range = this.cloneRange(); - if (this.startContainer != this.commonAncestorContainer) - this.setStartAfter(DOMUtils.findClosestAncestor(this.commonAncestorContainer, this.startContainer)); - this.collapse(true); - // extract range - return (function extractSubtree(iterator) { - for (var node, frag = document.createDocumentFragment(); node = iterator.next(); ) { - iterator.hasPartialSubtree() ? node = node.cloneNode(false) : iterator.remove(); - if (iterator.hasPartialSubtree()) - node.appendChild(extractSubtree(iterator.getSubtreeIterator())); - frag.appendChild(node); - } - return frag; - })(new RangeIterator(range)); - }, - deleteContents: function () { - // cache range and move anchor points - var range = this.cloneRange(); - if (this.startContainer != this.commonAncestorContainer) - this.setStartAfter(DOMUtils.findClosestAncestor(this.commonAncestorContainer, this.startContainer)); - this.collapse(true); - // delete range - (function deleteSubtree(iterator) { - while (iterator.next()) - iterator.hasPartialSubtree() ? deleteSubtree(iterator.getSubtreeIterator()) : iterator.remove(); - })(new RangeIterator(range)); - }, - insertNode: function (newNode) { - // set original anchor and insert node - if (DOMUtils.isDataNode(this.startContainer)) { - DOMUtils.splitDataNode(this.startContainer, this.startOffset); - this.startContainer.parentNode.insertBefore(newNode, this.startContainer.nextSibling); - } else { - this.startContainer.insertBefore(newNode, this.startContainer.childNodes[this.startOffset]); - } - // resync start anchor - this.setStart(this.startContainer, this.startOffset); - }, - surroundContents: function (newNode) { - // extract and surround contents - var content = this.extractContents(); - this.insertNode(newNode); - newNode.appendChild(content); - this.selectNode(newNode); - }, - - // other methods - compareBoundaryPoints: function (how, sourceRange) { - // get anchors - var containerA, offsetA, containerB, offsetB; - switch (how) { - case DOMRange.START_TO_START: - case DOMRange.START_TO_END: - containerA = this.startContainer; - offsetA = this.startOffset; - break; - case DOMRange.END_TO_END: - case DOMRange.END_TO_START: - containerA = this.endContainer; - offsetA = this.endOffset; - break; - } - switch (how) { - case DOMRange.START_TO_START: - case DOMRange.END_TO_START: - containerB = sourceRange.startContainer; - offsetB = sourceRange.startOffset; - break; - case DOMRange.START_TO_END: - case DOMRange.END_TO_END: - containerB = sourceRange.endContainer; - offsetB = sourceRange.endOffset; - break; - } - - // compare - return containerA.sourceIndex < containerB.sourceIndex ? -1 : - containerA.sourceIndex == containerB.sourceIndex ? - offsetA < offsetB ? -1 : offsetA == offsetB ? 0 : 1 - : 1; - }, - cloneRange: function () { - // return cloned range - var range = new DOMRange(this._document); - range.setStart(this.startContainer, this.startOffset); - range.setEnd(this.endContainer, this.endOffset); - return range; - }, - detach: function () { -//[TODO] Releases Range from use to improve performance. - }, - toString: function () { - return TextRangeUtils.convertFromDOMRange(this).text; - }, - createContextualFragment: function (tagString) { - // parse the tag string in a context node - var content = (DOMUtils.isDataNode(this.startContainer) ? this.startContainer.parentNode : this.startContainer).cloneNode(false); - content.innerHTML = tagString; - // return a document fragment from the created node - for (var fragment = this._document.createDocumentFragment(); content.firstChild; ) - fragment.appendChild(content.firstChild); - return fragment; - } -}; - -/* - Range iterator - */ - -function RangeIterator(range) { - this.range = range; - if (range.collapsed) - return; - -//[TODO] ensure this works - // get anchors - var root = range.commonAncestorContainer; - this._next = range.startContainer == root && !DOMUtils.isDataNode(range.startContainer) ? - range.startContainer.childNodes[range.startOffset] : - DOMUtils.findClosestAncestor(root, range.startContainer); - this._end = range.endContainer == root && !DOMUtils.isDataNode(range.endContainer) ? - range.endContainer.childNodes[range.endOffset] : - DOMUtils.findClosestAncestor(root, range.endContainer).nextSibling; -} - -RangeIterator.prototype = { - // public properties - range: null, - // private properties - _current: null, - _next: null, - _end: null, - - // public methods - hasNext: function () { - return !!this._next; - }, - next: function () { - // move to next node - var current = this._current = this._next; - this._next = this._current && this._current.nextSibling != this._end ? - this._current.nextSibling : null; - - // check for partial text nodes - if (DOMUtils.isDataNode(this._current)) { - if (this.range.endContainer == this._current) - (current = current.cloneNode(true)).deleteData(this.range.endOffset, current.length - this.range.endOffset); - if (this.range.startContainer == this._current) - (current = current.cloneNode(true)).deleteData(0, this.range.startOffset); - } - return current; - }, - remove: function () { - // check for partial text nodes - if (DOMUtils.isDataNode(this._current) && - (this.range.startContainer == this._current || this.range.endContainer == this._current)) { - var start = this.range.startContainer == this._current ? this.range.startOffset : 0; - var end = this.range.endContainer == this._current ? this.range.endOffset : this._current.length; - this._current.deleteData(start, end - start); - } else - this._current.parentNode.removeChild(this._current); - }, - hasPartialSubtree: function () { - // check if this node be partially selected - return !DOMUtils.isDataNode(this._current) && - (DOMUtils.isAncestorOrSelf(this._current, this.range.startContainer) || - DOMUtils.isAncestorOrSelf(this._current, this.range.endContainer)); - }, - getSubtreeIterator: function () { - // create a new range - var subRange = new DOMRange(this.range._document); - subRange.selectNodeContents(this._current); - // handle anchor points - if (DOMUtils.isAncestorOrSelf(this._current, this.range.startContainer)) - subRange.setStart(this.range.startContainer, this.range.startOffset); - if (DOMUtils.isAncestorOrSelf(this._current, this.range.endContainer)) - subRange.setEnd(this.range.endContainer, this.range.endOffset); - // return iterator - return new RangeIterator(subRange); - } -}; - -/* - DOM Selection - */ - -//[NOTE] This is a very shallow implementation of the Selection object, based on Webkit's -// implementation and without redundant features. Complete selection manipulation is still -// possible with just removeAllRanges/addRange/getRangeAt. - -function DOMSelection(document) { - // save document parameter - this._document = document; - - // add DOM selection handler - var selection = this; - document.attachEvent('onselectionchange', function () { selection._selectionChangeHandler(); }); -} - -DOMSelection.prototype = { - // public properties - rangeCount: 0, - // private properties - _document: null, - - // private methods - _selectionChangeHandler: function () { - // check if there exists a range - this.rangeCount = this._selectionExists(this._document.selection.createRange()) ? 1 : 0; - }, - _selectionExists: function (textRange) { - // checks if a created text range exists or is an editable cursor - return textRange.compareEndPoints('StartToEnd', textRange) != 0 || - textRange.parentElement().isContentEditable; - }, - - // public methods - addRange: function (range) { - // add range or combine with existing range - var selection = this._document.selection.createRange(), textRange = TextRangeUtils.convertFromDOMRange(range); - if (!this._selectionExists(selection)) - { - // select range - textRange.select(); - } - else - { - // only modify range if it intersects with current range - if (textRange.compareEndPoints('StartToStart', selection) == -1) - if (textRange.compareEndPoints('StartToEnd', selection) > -1 && - textRange.compareEndPoints('EndToEnd', selection) == -1) - selection.setEndPoint('StartToStart', textRange); - else - if (textRange.compareEndPoints('EndToStart', selection) < 1 && - textRange.compareEndPoints('EndToEnd', selection) > -1) - selection.setEndPoint('EndToEnd', textRange); - selection.select(); - } - }, - removeAllRanges: function () { - // remove all ranges - this._document.selection.empty(); - }, - getRangeAt: function (index) { - // return any existing selection, or a cursor position in content editable mode - var textRange = this._document.selection.createRange(); - if (this._selectionExists(textRange)) - return TextRangeUtils.convertToDOMRange(textRange, this._document); - return null; - }, - toString: function () { - // get selection text - return this._document.selection.createRange().text; - } -}; - -/* - scripting hooks - */ - -document.createRange = function () { - return new DOMRange(document); -}; - -var selection = new DOMSelection(document); -window.getSelection = function () { - return selection; -}; - -//[TODO] expose DOMRange/DOMSelection to window.? - -})(); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery-ui-1.8.16.custom.min.js b/apps/wolnelektury_core/static/js/contrib/jquery-ui-1.8.16.custom.min.js deleted file mode 100644 index a9c6fa316..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery-ui-1.8.16.custom.min.js +++ /dev/null @@ -1,149 +0,0 @@ -/*! - * jQuery UI 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI - */ -(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.16", -keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({propAttr:c.fn.prop||c.fn.attr,_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d= -this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this, -"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart": -"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight, -outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a, -"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&& -a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted= -false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); -;/* - * jQuery UI Position 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Position - */ -(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY, -left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+= -k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-= -m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left= -d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+= -a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b), -g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery); -;/* - * jQuery UI Draggable 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Draggables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== -"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b= -this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;if(b.iframeFix)d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('
                ').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options; -this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}); -this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);return true}, -_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b= -false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration, -10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});d.ui.ddmanager&&d.ui.ddmanager.dragStop(this,a);return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle|| -!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&& -a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent= -this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"), -10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"), -10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[a.containment=="document"?0:d(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a.containment=="document"?0:d(window).scrollTop()-this.offset.relative.top-this.offset.parent.top, -(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!= -"hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"), -10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+ -this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&& -!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.leftg[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.topg[3])?h:!(h-this.offset.click.topg[2])?e:!(e-this.offset.click.left=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e
              ").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&& -a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"); -d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&& -b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source= -this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length").data("item.autocomplete",b).append(d("").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, -"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery); -(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", --1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); -this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b, -this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| -this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| -this.first()?":last":":first"))},hasScroll:function(){return this.element.height() 1 && !select.visible() ) { - onChange(0, true); - } - }).bind("search", function() { - // TODO why not just specifying both arguments? - var fn = (arguments.length > 1) ? arguments[1] : null; - function findValueCallback(q, data) { - var result; - if( data && data.length ) { - for (var i=0; i < data.length; i++) { - if( data[i].result.toLowerCase() == q.toLowerCase() ) { - result = data[i]; - break; - } - } - } - if( typeof fn == "function" ) fn(result); - else $input.trigger("result", result && [result.data, result.value]); - } - $.each(trimWords($input.val()), function(i, value) { - request(value, findValueCallback, findValueCallback); - }); - }).bind("flushCache", function() { - cache.flush(); - }).bind("setOptions", function() { - $.extend(options, arguments[1]); - // if we've updated the data, repopulate - if ( "data" in arguments[1] ) - cache.populate(); - }).bind("unautocomplete", function() { - select.unbind(); - $input.unbind(); - $(input.form).unbind(".autocomplete"); - }); - - - function selectCurrent() { - var selected = select.selected(); - if( !selected ) - return false; - - var v = selected.result; - previousValue = v; - - if ( options.multiple ) { - var words = trimWords($input.val()); - if ( words.length > 1 ) { - var seperator = options.multipleSeparator.length; - var cursorAt = $(input).selection().start; - var wordAt, progress = 0; - $.each(words, function(i, word) { - progress += word.length; - if (cursorAt <= progress) { - wordAt = i; - return false; - } - progress += seperator; - }); - words[wordAt] = v; - // TODO this should set the cursor to the right position, but it gets overriden somewhere - //$.Autocompleter.Selection(input, progress + seperator, progress + seperator); - v = words.join( options.multipleSeparator ); - } - v += options.multipleSeparator; - } - - $input.val(v); - hideResultsNow(); - $input.trigger("result", [selected.data, selected.value]); - return true; - } - - function onChange(crap, skipPrevCheck) { - if( lastKeyPressCode == KEY.DEL ) { - select.hide(); - return; - } - - var currentValue = $input.val(); - - if ( !skipPrevCheck && currentValue == previousValue ) - return; - - previousValue = currentValue; - - currentValue = lastWord(currentValue); - if ( currentValue.length >= options.minChars) { - $input.addClass(options.loadingClass); - if (!options.matchCase) - currentValue = currentValue.toLowerCase(); - request(currentValue, receiveData, hideResultsNow); - } else { - stopLoading(); - select.hide(); - } - }; - - function trimWords(value) { - if (!value) - return [""]; - if (!options.multiple) - return [$.trim(value)]; - return $.map(value.split(options.multipleSeparator), function(word) { - return $.trim(value).length ? $.trim(word) : null; - }); - } - - function lastWord(value) { - if ( !options.multiple ) - return value; - var words = trimWords(value); - if (words.length == 1) - return words[0]; - var cursorAt = $(input).selection().start; - if (cursorAt == value.length) { - words = trimWords(value) - } else { - words = trimWords(value.replace(value.substring(cursorAt), "")); - } - return words[words.length - 1]; - } - - // fills in the input box w/the first match (assumed to be the best match) - // q: the term entered - // sValue: the first matching result - function autoFill(q, sValue){ - // autofill in the complete box w/the first match as long as the user hasn't entered in more data - // if the last user key pressed was backspace, don't autofill - if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) { - // fill in the value (keep the case the user has typed) - $input.val($input.val() + sValue.substring(lastWord(previousValue).length)); - // select the portion of the value not typed by the user (so the next character will erase) - $(input).selection(previousValue.length, previousValue.length + sValue.length); - } - }; - - function hideResults() { - clearTimeout(timeout); - timeout = setTimeout(hideResultsNow, 200); - }; - - function hideResultsNow() { - var wasVisible = select.visible(); - select.hide(); - clearTimeout(timeout); - stopLoading(); - if (options.mustMatch) { - // call search and run callback - $input.search( - function (result){ - // if no value found, clear the input box - if( !result ) { - if (options.multiple) { - var words = trimWords($input.val()).slice(0, -1); - $input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") ); - } - else { - $input.val( "" ); - $input.trigger("result", null); - } - } - } - ); - } - }; - - function receiveData(q, data) { - if ( data && data.length && hasFocus ) { - stopLoading(); - select.display(data, q); - autoFill(q, data[0].value); - select.show(); - } else { - hideResultsNow(); - } - }; - - function request(term, success, failure) { - if (!options.matchCase) - term = term.toLowerCase(); - var data = cache.load(term); - // recieve the cached data - if (data && data.length) { - success(term, data); - // if an AJAX url has been supplied, try loading the data now - } else if( (typeof options.url == "string") && (options.url.length > 0) ){ - - var extraParams = { - timestamp: +new Date() - }; - $.each(options.extraParams, function(key, param) { - extraParams[key] = typeof param == "function" ? param() : param; - }); - - $.ajax({ - // try to leverage ajaxQueue plugin to abort previous requests - mode: "abort", - // limit abortion to this input - port: "autocomplete" + input.name, - dataType: options.dataType, - url: options.url, - data: $.extend({ - q: lastWord(term), - limit: options.max - }, extraParams), - success: function(data) { - var parsed = options.parse && options.parse(data) || parse(data); - cache.add(term, parsed); - success(term, parsed); - } - }); - } else { - // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match - select.emptyList(); - failure(term); - } - }; - - function parse(data) { - var parsed = []; - var rows = data.split("\n"); - for (var i=0; i < rows.length; i++) { - var row = $.trim(rows[i]); - if (row) { - row = row.split("|"); - parsed[parsed.length] = { - data: row, - value: row[0], - result: options.formatResult && options.formatResult(row, row[0]) || row[0] - }; - } - } - return parsed; - }; - - function stopLoading() { - $input.removeClass(options.loadingClass); - }; - -}; - -$.Autocompleter.defaults = { - inputClass: "ac_input", - resultsClass: "ac_results", - loadingClass: "ac_loading", - minChars: 1, - delay: 400, - matchCase: false, - matchSubset: true, - matchContains: false, - cacheLength: 10, - max: 100, - mustMatch: false, - extraParams: {}, - selectFirst: true, - formatItem: function(row) { return row[0]; }, - formatMatch: null, - autoFill: false, - width: 0, - multiple: false, - multipleSeparator: ", ", - regex_escape: function(term) { - term = term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1"); - /* no polish diacritics; should be more locale-aware */ - term = term.replace(/a/g, '[aą]') - .replace(/c/g, '[cć]') - .replace(/e/g, '[eę]') - .replace(/l/g, '[lł]') - .replace(/n/g, '[nń]') - .replace(/o/g, '[oó]') - .replace(/s/g, '[sś]') - .replace(/z/g, '[zźż]'); - return term; - }, - highlight: function(value, term) { - term = $.Autocompleter.defaults.regex_escape(term); - return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "$1"); - }, - scroll: true, - scrollHeight: 180 -}; - -$.Autocompleter.Cache = function(options) { - - var data = {}; - var length = 0; - - function matchSubset(s, sub) { - if (!options.matchCase) - s = s.toLowerCase(); - var i = s.indexOf(sub); - if (options.matchContains == "word"){ - query = $.Autocompleter.defaults.regex_escape(sub.toLowerCase()); - i = s.toLowerCase().search("\\b" + query); - } - if (i == -1) return false; - return i == 0 || options.matchContains; - }; - - function add(q, value) { - if (length > options.cacheLength){ - flush(); - } - if (!data[q]){ - length++; - } - data[q] = value; - } - - function populate(){ - if( !options.data ) return false; - // track the matches - var stMatchSets = {}, - nullData = 0; - - // no url was specified, we need to adjust the cache length to make sure it fits the local data store - if( !options.url ) options.cacheLength = 1; - - // track all options for minChars = 0 - stMatchSets[""] = []; - - // loop through the array and create a lookup structure - for ( var i = 0, ol = options.data.length; i < ol; i++ ) { - var rawValue = options.data[i]; - // if rawValue is a string, make an array otherwise just reference the array - rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue; - - var value = options.formatMatch(rawValue, i+1, options.data.length); - if ( value === false ) - continue; - - var firstChar = value.charAt(0).toLowerCase(); - // if no lookup array for this character exists, look it up now - if( !stMatchSets[firstChar] ) - stMatchSets[firstChar] = []; - - // if the match is a string - var row = { - value: value, - data: rawValue, - result: options.formatResult && options.formatResult(rawValue) || value - }; - - // push the current match into the set list - stMatchSets[firstChar].push(row); - - // keep track of minChars zero items - if ( nullData++ < options.max ) { - stMatchSets[""].push(row); - } - }; - - // add the data items to the cache - $.each(stMatchSets, function(i, value) { - // increase the cache size - options.cacheLength++; - // add to the cache - add(i, value); - }); - } - - // populate any existing data - setTimeout(populate, 25); - - function flush(){ - data = {}; - length = 0; - } - - return { - flush: flush, - add: add, - populate: populate, - load: function(q) { - if (!options.cacheLength || !length) - return null; - /* - * if dealing w/local data and matchContains than we must make sure - * to loop through all the data collections looking for matches - */ - if( !options.url && options.matchContains ){ - // track all matches - var csub = []; - // loop through all the data grids for matches - for( var k in data ){ - // don't search through the stMatchSets[""] (minChars: 0) cache - // this prevents duplicates - if( k.length > 0 ){ - var c = data[k]; - $.each(c, function(i, x) { - // if we've got a match, add it to the array - if (matchSubset(x.value, q)) { - csub.push(x); - } - }); - } - } - return csub; - } else - // if the exact item exists, use it - if (data[q]){ - return data[q]; - } else - if (options.matchSubset) { - for (var i = q.length - 1; i >= options.minChars; i--) { - var c = data[q.substr(0, i)]; - if (c) { - var csub = []; - $.each(c, function(i, x) { - if (matchSubset(x.value, q)) { - csub[csub.length] = x; - } - }); - return csub; - } - } - } - return null; - } - }; -}; - -$.Autocompleter.Select = function (options, input, select, config) { - var CLASSES = { - ACTIVE: "ac_over" - }; - - var listItems, - active = -1, - data, - term = "", - needsInit = true, - element, - list; - - // Create results - function init() { - if (!needsInit) - return; - element = $("
              ") - .hide() - .addClass(options.resultsClass) - .css("position", "absolute") - .appendTo(document.body); - - list = $("
                ").appendTo(element).mouseover( function(event) { - if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') { - active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event)); - $(target(event)).addClass(CLASSES.ACTIVE); - } - }).click(function(event) { - $(target(event)).addClass(CLASSES.ACTIVE); - select(); - // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus - input.focus(); - return false; - }).mousedown(function() { - config.mouseDownOnSelect = true; - }).mouseup(function() { - config.mouseDownOnSelect = false; - }); - - if( options.width > 0 ) - element.css("width", options.width); - - needsInit = false; - } - - function target(event) { - var element = event.target; - while(element && element.tagName != "LI") - element = element.parentNode; - // more fun with IE, sometimes event.target is empty, just ignore it then - if(!element) - return []; - return element; - } - - function moveSelect(step) { - listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE); - movePosition(step); - var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE); - if(options.scroll) { - var offset = 0; - listItems.slice(0, active).each(function() { - offset += this.offsetHeight; - }); - if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) { - list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight()); - } else if(offset < list.scrollTop()) { - list.scrollTop(offset); - } - } - }; - - function movePosition(step) { - active += step; - if (active < 0) { - active = listItems.size() - 1; - } else if (active >= listItems.size()) { - active = 0; - } - } - - function limitNumberOfItems(available) { - return options.max && options.max < available - ? options.max - : available; - } - - function fillList() { - list.empty(); - var max = limitNumberOfItems(data.length); - for (var i=0; i < max; i++) { - if (!data[i]) - continue; - var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term); - if ( formatted === false ) - continue; - var li = $("
              • ").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0]; - $.data(li, "ac_data", data[i]); - } - listItems = list.find("li"); - if ( options.selectFirst ) { - listItems.slice(0, 1).addClass(CLASSES.ACTIVE); - active = 0; - } - // apply bgiframe if available - if ( $.fn.bgiframe ) - list.bgiframe(); - } - - return { - display: function(d, q) { - init(); - data = d; - term = q; - fillList(); - }, - next: function() { - moveSelect(1); - }, - prev: function() { - moveSelect(-1); - }, - pageUp: function() { - if (active != 0 && active - 8 < 0) { - moveSelect( -active ); - } else { - moveSelect(-8); - } - }, - pageDown: function() { - if (active != listItems.size() - 1 && active + 8 > listItems.size()) { - moveSelect( listItems.size() - 1 - active ); - } else { - moveSelect(8); - } - }, - hide: function() { - element && element.hide(); - listItems && listItems.removeClass(CLASSES.ACTIVE); - active = -1; - }, - visible : function() { - return element && element.is(":visible"); - }, - current: function() { - return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]); - }, - show: function() { - var offset = $(input).offset(); - element.css({ - width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(), - top: offset.top + input.offsetHeight, - left: offset.left - }).show(); - if(options.scroll) { - list.scrollTop(0); - list.css({ - maxHeight: options.scrollHeight, - overflow: 'auto' - }); - - if($.browser.msie && typeof document.body.style.maxHeight === "undefined") { - var listHeight = 0; - listItems.each(function() { - listHeight += this.offsetHeight; - }); - var scrollbarsVisible = listHeight > options.scrollHeight; - list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight ); - if (!scrollbarsVisible) { - // IE doesn't recalculate width when scrollbar disappears - listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) ); - } - } - - } - }, - selected: function() { - var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE); - return selected && selected.length && $.data(selected[0], "ac_data"); - }, - emptyList: function (){ - list && list.empty(); - }, - unbind: function() { - element && element.remove(); - } - }; -}; - -$.fn.selection = function(start, end) { - if (start !== undefined) { - return this.each(function() { - if( this.createTextRange ){ - var selRange = this.createTextRange(); - if (end === undefined || start == end) { - selRange.move("character", start); - selRange.select(); - } else { - selRange.collapse(true); - selRange.moveStart("character", start); - selRange.moveEnd("character", end); - selRange.select(); - } - } else if( this.setSelectionRange ){ - this.setSelectionRange(start, end); - } else if( this.selectionStart ){ - this.selectionStart = start; - this.selectionEnd = end; - } - }); - } - var field = this[0]; - if ( field.createTextRange ) { - var range = document.selection.createRange(), - orig = field.value, - teststring = "<->", - textLength = range.text.length; - range.text = teststring; - var caretAt = field.value.indexOf(teststring); - field.value = orig; - this.selection(caretAt, caretAt + textLength); - return { - start: caretAt, - end: caretAt + textLength - } - } else if( field.selectionStart !== undefined ){ - return { - start: field.selectionStart, - end: field.selectionEnd - } - } -}; - -})(jQuery); \ No newline at end of file diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-de.js b/apps/wolnelektury_core/static/js/contrib/jquery.countdown-de.js deleted file mode 100644 index 5a3f43d78..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-de.js +++ /dev/null @@ -1,12 +0,0 @@ -/* http://keith-wood.name/countdown.html - German initialisation for the jQuery countdown extension - Written by Keith Wood (kbwood@virginbroadband.com.au) Jan 2008. */ -(function($) { - $.countdown.regional['de'] = { - labels: ['Jahren', 'Monate', 'Wochen', 'Tage', 'Stunden', 'Minuten', 'Sekunden'], - labels1: ['Jahre', 'Monat', 'Woche', 'Tag', 'Stunde', 'Minute', 'Sekunde'], - compactLabels: ['J', 'M', 'W', 'T'], - whichLabels: null, - timeSeparator: ':', isRTL: false}; - $.countdown.setDefaults($.countdown.regional['de']); -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-es.js b/apps/wolnelektury_core/static/js/contrib/jquery.countdown-es.js deleted file mode 100644 index 362f58c7d..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-es.js +++ /dev/null @@ -1,12 +0,0 @@ -/* http://keith-wood.name/countdown.html - * Spanish initialisation for the jQuery countdown extension - * Written by Sergio Carracedo Martinez webmaster@neodisenoweb.com (2008) */ -(function($) { - $.countdown.regional['es'] = { - labels: ['Años', 'Meses', 'Semanas', 'Dias', 'Horas', 'Minutos', 'Segundos'], - labels1: ['Años', 'Meses', 'Semanas', 'Dias', 'Horas', 'Minutos', 'Segundos'], - compactLabels: ['a', 'm', 's', 'g'], - whichLabels: null, - timeSeparator: ':', isRTL: false}; - $.countdown.setDefaults($.countdown.regional['es']); -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-fr.js b/apps/wolnelektury_core/static/js/contrib/jquery.countdown-fr.js deleted file mode 100644 index 70e17def7..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-fr.js +++ /dev/null @@ -1,12 +0,0 @@ -/* http://keith-wood.name/countdown.html - French initialisation for the jQuery countdown extension - Written by Keith Wood (kbwood{at}iinet.com.au) Jan 2008. */ -(function($) { - $.countdown.regional['fr'] = { - labels: ['Années', 'Mois', 'Semaines', 'Jours', 'Heures', 'Minutes', 'Secondes'], - labels1: ['Année', 'Mois', 'Semaine', 'Jour', 'Heure', 'Minute', 'Seconde'], - compactLabels: ['a', 'm', 's', 'j'], - whichLabels: null, - timeSeparator: ':', isRTL: false}; - $.countdown.setDefaults($.countdown.regional['fr']); -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-lt.js b/apps/wolnelektury_core/static/js/contrib/jquery.countdown-lt.js deleted file mode 100644 index ee11c71c5..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-lt.js +++ /dev/null @@ -1,12 +0,0 @@ -/* http://keith-wood.name/countdown.html - * Lithuanian localisation for the jQuery countdown extension - * Written by Moacir P. de Sá Pereira (moacir{at}gmail.com) (2009) */ -(function($) { - $.countdown.regional['lt'] = { - labels: ['Metų', 'Mėnesių', 'Savaičių', 'Dienų', 'Valandų', 'Minučių', 'Sekundžių'], - labels1: ['Metai', 'Mėnuo', 'Savaitė', 'Diena', 'Valanda', 'Minutė', 'Sekundė'], - compactLabels: ['m', 'm', 's', 'd'], - whichLabels: null, - timeSeparator: ':', isRTL: false}; - $.countdown.setDefaults($.countdown.regional['lt']); -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-pl.js b/apps/wolnelektury_core/static/js/contrib/jquery.countdown-pl.js deleted file mode 100644 index 6860a4bab..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-pl.js +++ /dev/null @@ -1,17 +0,0 @@ -/* http://keith-wood.name/countdown.html - * Polish initialisation for the jQuery countdown extension - * Written by Pawel Lewtak lewtak@gmail.com (2008) */ -(function($) { - $.countdown.regional['pl'] = { - labels: ['lat', 'miesięcy', 'tygodni', 'dni', 'godzin', 'minut', 'sekund'], - labels1: ['rok', 'miesiąc', 'tydzień', 'dzień', 'godzina', 'minuta', 'sekunda'], - labels2: ['lata', 'miesiące', 'tygodnie', 'dni', 'godziny', 'minuty', 'sekundy'], - compactLabels: ['l', 'm', 't', 'd'], compactLabels1: ['r', 'm', 't', 'd'], - whichLabels: function(amount) { - var units = amount % 10; - var tens = Math.floor((amount % 100) / 10); - return (amount == 1 ? 1 : (units >= 2 && units <= 4 && tens != 1 ? 2 : 0)); - }, - timeSeparator: ':', isRTL: false}; - $.countdown.setDefaults($.countdown.regional['pl']); -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-ru.js b/apps/wolnelektury_core/static/js/contrib/jquery.countdown-ru.js deleted file mode 100644 index badd3eb01..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-ru.js +++ /dev/null @@ -1,12 +0,0 @@ -/* http://keith-wood.name/countdown.html - * Russian initialisation for the jQuery countdown extension - * Written by Dominus i3rixon@gmail.com (2008) */ -(function($) { - $.countdown.regional['ru'] = { - labels: ['Лет', 'Месяцев', 'Недель', 'Дней', 'Часов', 'Минут', 'Секунд'], - labels1: ['Год', 'Месяц', 'Неделя', 'День', 'Час', 'Минута', 'Секунда'], - compactLabels: ['l', 'm', 'n', 'd'], compactLabels1: ['g', 'm', 'n', 'd'], - whichLabels: null, - timeSeparator: ':', isRTL: false}; - $.countdown.setDefaults($.countdown.regional['ru']); -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-uk.js b/apps/wolnelektury_core/static/js/contrib/jquery.countdown-uk.js deleted file mode 100644 index c98791e53..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-uk.js +++ /dev/null @@ -1,12 +0,0 @@ -/* http://keith-wood.name/countdown.html - * Ukrainian initialisation for the jQuery countdown extension - * Written by Goloborodko M misha.gm@gmail.com (2009) */ -(function($) { - $.countdown.regional['uk'] = { - labels: ['Років', 'Місяців', 'Тижднів', 'Днів', 'Годин', 'Хвилин', 'Секунд'], - labels1: ['Рік', 'Місяць', 'Тиждень', 'День', 'Година', 'Хвилина', 'Секунда'], - compactLabels: ['r', 'm', 't', 'd'], - whichLabels: null, - timeSeparator: ':', isRTL: false}; - $.countdown.setDefaults($.countdown.regional['uk']); -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.countdown.js b/apps/wolnelektury_core/static/js/contrib/jquery.countdown.js deleted file mode 100644 index f9c58d370..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.countdown.js +++ /dev/null @@ -1,759 +0,0 @@ -/* http://keith-wood.name/countdown.html - Countdown for jQuery v1.5.8. - Written by Keith Wood (kbwood{at}iinet.com.au) January 2008. - Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and - MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. - Please attribute the author if you use it. */ - -/* Display a countdown timer. - Attach it with options like: - $('div selector').countdown( - {until: new Date(2009, 1 - 1, 1, 0, 0, 0), onExpiry: happyNewYear}); */ - -(function($) { // Hide scope, no $ conflict - -/* Countdown manager. */ -function Countdown() { - this.regional = []; // Available regional settings, indexed by language code - this.regional[''] = { // Default regional settings - // The display texts for the counters - labels: ['Years', 'Months', 'Weeks', 'Days', 'Hours', 'Minutes', 'Seconds'], - // The display texts for the counters if only one - labels1: ['Year', 'Month', 'Week', 'Day', 'Hour', 'Minute', 'Second'], - compactLabels: ['y', 'm', 'w', 'd'], // The compact texts for the counters - whichLabels: null, // Function to determine which labels to use - timeSeparator: ':', // Separator for time periods - isRTL: false // True for right-to-left languages, false for left-to-right - }; - this._defaults = { - until: null, // new Date(year, mth - 1, day, hr, min, sec) - date/time to count down to - // or numeric for seconds offset, or string for unit offset(s): - // 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds - since: null, // new Date(year, mth - 1, day, hr, min, sec) - date/time to count up from - // or numeric for seconds offset, or string for unit offset(s): - // 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds - timezone: null, // The timezone (hours or minutes from GMT) for the target times, - // or null for client local - serverSync: null, // A function to retrieve the current server time for synchronisation - format: 'dHMS', // Format for display - upper case for always, lower case only if non-zero, - // 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds - layout: '', // Build your own layout for the countdown - compact: false, // True to display in a compact format, false for an expanded one - significant: 0, // The number of periods with values to show, zero for all - description: '', // The description displayed for the countdown - expiryUrl: '', // A URL to load upon expiry, replacing the current page - expiryText: '', // Text to display upon expiry, replacing the countdown - alwaysExpire: false, // True to trigger onExpiry even if never counted down - onExpiry: null, // Callback when the countdown expires - - // receives no parameters and 'this' is the containing division - onTick: null, // Callback when the countdown is updated - - // receives int[7] being the breakdown by period (based on format) - // and 'this' is the containing division - tickInterval: 1 // Interval (seconds) between onTick callbacks - }; - $.extend(this._defaults, this.regional['']); - this._serverSyncs = []; -} - -var PROP_NAME = 'countdown'; - -var Y = 0; // Years -var O = 1; // Months -var W = 2; // Weeks -var D = 3; // Days -var H = 4; // Hours -var M = 5; // Minutes -var S = 6; // Seconds - -$.extend(Countdown.prototype, { - /* Class name added to elements to indicate already configured with countdown. */ - markerClassName: 'hasCountdown', - - /* Shared timer for all countdowns. */ - _timer: setInterval(function() { $.countdown._updateTargets(); }, 980), - /* List of currently active countdown targets. */ - _timerTargets: [], - - /* Override the default settings for all instances of the countdown widget. - @param options (object) the new settings to use as defaults */ - setDefaults: function(options) { - this._resetExtraLabels(this._defaults, options); - extendRemove(this._defaults, options || {}); - }, - - /* Convert a date/time to UTC. - @param tz (number) the hour or minute offset from GMT, e.g. +9, -360 - @param year (Date) the date/time in that timezone or - (number) the year in that timezone - @param month (number, optional) the month (0 - 11) (omit if year is a Date) - @param day (number, optional) the day (omit if year is a Date) - @param hours (number, optional) the hour (omit if year is a Date) - @param mins (number, optional) the minute (omit if year is a Date) - @param secs (number, optional) the second (omit if year is a Date) - @param ms (number, optional) the millisecond (omit if year is a Date) - @return (Date) the equivalent UTC date/time */ - UTCDate: function(tz, year, month, day, hours, mins, secs, ms) { - if (typeof year == 'object' && year.constructor == Date) { - ms = year.getMilliseconds(); - secs = year.getSeconds(); - mins = year.getMinutes(); - hours = year.getHours(); - day = year.getDate(); - month = year.getMonth(); - year = year.getFullYear(); - } - var d = new Date(); - d.setUTCFullYear(year); - d.setUTCDate(1); - d.setUTCMonth(month || 0); - d.setUTCDate(day || 1); - d.setUTCHours(hours || 0); - d.setUTCMinutes((mins || 0) - (Math.abs(tz) < 30 ? tz * 60 : tz)); - d.setUTCSeconds(secs || 0); - d.setUTCMilliseconds(ms || 0); - return d; - }, - - /* Convert a set of periods into seconds. - Averaged for months and years. - @param periods (number[7]) the periods per year/month/week/day/hour/minute/second - @return (number) the corresponding number of seconds */ - periodsToSeconds: function(periods) { - return periods[0] * 31557600 + periods[1] * 2629800 + periods[2] * 604800 + - periods[3] * 86400 + periods[4] * 3600 + periods[5] * 60 + periods[6]; - }, - - /* Retrieve one or more settings values. - @param name (string, optional) the name of the setting to retrieve - or 'all' for all instance settings or omit for all default settings - @return (any) the requested setting(s) */ - _settingsCountdown: function(target, name) { - if (!name) { - return $.countdown._defaults; - } - var inst = $.data(target, PROP_NAME); - return (name == 'all' ? inst.options : inst.options[name]); - }, - - /* Attach the countdown widget to a div. - @param target (element) the containing division - @param options (object) the initial settings for the countdown */ - _attachCountdown: function(target, options) { - var $target = $(target); - if ($target.hasClass(this.markerClassName)) { - return; - } - $target.addClass(this.markerClassName); - var inst = {options: $.extend({}, options), - _periods: [0, 0, 0, 0, 0, 0, 0]}; - $.data(target, PROP_NAME, inst); - this._changeCountdown(target); - }, - - /* Add a target to the list of active ones. - @param target (element) the countdown target */ - _addTarget: function(target) { - if (!this._hasTarget(target)) { - this._timerTargets.push(target); - } - }, - - /* See if a target is in the list of active ones. - @param target (element) the countdown target - @return (boolean) true if present, false if not */ - _hasTarget: function(target) { - return ($.inArray(target, this._timerTargets) > -1); - }, - - /* Remove a target from the list of active ones. - @param target (element) the countdown target */ - _removeTarget: function(target) { - this._timerTargets = $.map(this._timerTargets, - function(value) { return (value == target ? null : value); }); // delete entry - }, - - /* Update each active timer target. */ - _updateTargets: function() { - for (var i = this._timerTargets.length - 1; i >= 0; i--) { - this._updateCountdown(this._timerTargets[i]); - } - }, - - /* Redisplay the countdown with an updated display. - @param target (jQuery) the containing division - @param inst (object) the current settings for this instance */ - _updateCountdown: function(target, inst) { - var $target = $(target); - inst = inst || $.data(target, PROP_NAME); - if (!inst) { - return; - } - $target.html(this._generateHTML(inst)); - $target[(this._get(inst, 'isRTL') ? 'add' : 'remove') + 'Class']('countdown_rtl'); - var onTick = this._get(inst, 'onTick'); - if (onTick) { - var periods = inst._hold != 'lap' ? inst._periods : - this._calculatePeriods(inst, inst._show, this._get(inst, 'significant'), new Date()); - var tickInterval = this._get(inst, 'tickInterval'); - if (tickInterval == 1 || this.periodsToSeconds(periods) % tickInterval == 0) { - onTick.apply(target, [periods]); - } - } - var expired = inst._hold != 'pause' && - (inst._since ? inst._now.getTime() < inst._since.getTime() : - inst._now.getTime() >= inst._until.getTime()); - if (expired && !inst._expiring) { - inst._expiring = true; - if (this._hasTarget(target) || this._get(inst, 'alwaysExpire')) { - this._removeTarget(target); - var onExpiry = this._get(inst, 'onExpiry'); - if (onExpiry) { - onExpiry.apply(target, []); - } - var expiryText = this._get(inst, 'expiryText'); - if (expiryText) { - var layout = this._get(inst, 'layout'); - inst.options.layout = expiryText; - this._updateCountdown(target, inst); - inst.options.layout = layout; - } - var expiryUrl = this._get(inst, 'expiryUrl'); - if (expiryUrl) { - window.location = expiryUrl; - } - } - inst._expiring = false; - } - else if (inst._hold == 'pause') { - this._removeTarget(target); - } - $.data(target, PROP_NAME, inst); - }, - - /* Reconfigure the settings for a countdown div. - @param target (element) the containing division - @param options (object) the new settings for the countdown or - (string) an individual property name - @param value (any) the individual property value - (omit if options is an object) */ - _changeCountdown: function(target, options, value) { - options = options || {}; - if (typeof options == 'string') { - var name = options; - options = {}; - options[name] = value; - } - var inst = $.data(target, PROP_NAME); - if (inst) { - this._resetExtraLabels(inst.options, options); - extendRemove(inst.options, options); - this._adjustSettings(target, inst); - $.data(target, PROP_NAME, inst); - var now = new Date(); - if ((inst._since && inst._since < now) || - (inst._until && inst._until > now)) { - this._addTarget(target); - } - this._updateCountdown(target, inst); - } - }, - - /* Reset any extra labelsn and compactLabelsn entries if changing labels. - @param base (object) the options to be updated - @param options (object) the new option values */ - _resetExtraLabels: function(base, options) { - var changingLabels = false; - for (var n in options) { - if (n != 'whichLabels' && n.match(/[Ll]abels/)) { - changingLabels = true; - break; - } - } - if (changingLabels) { - for (var n in base) { // Remove custom numbered labels - if (n.match(/[Ll]abels[0-9]/)) { - base[n] = null; - } - } - } - }, - - /* Calculate interal settings for an instance. - @param target (element) the containing division - @param inst (object) the current settings for this instance */ - _adjustSettings: function(target, inst) { - var now; - var serverSync = this._get(inst, 'serverSync'); - var serverOffset = 0; - var serverEntry = null; - for (var i = 0; i < this._serverSyncs.length; i++) { - if (this._serverSyncs[i][0] == serverSync) { - serverEntry = this._serverSyncs[i][1]; - break; - } - } - if (serverEntry != null) { - serverOffset = (serverSync ? serverEntry : 0); - now = new Date(); - } - else { - var serverResult = (serverSync ? serverSync.apply(target, []) : null); - now = new Date(); - serverOffset = (serverResult ? now.getTime() - serverResult.getTime() : 0); - this._serverSyncs.push([serverSync, serverOffset]); - } - var timezone = this._get(inst, 'timezone'); - timezone = (timezone == null ? -now.getTimezoneOffset() : timezone); - inst._since = this._get(inst, 'since'); - if (inst._since != null) { - inst._since = this.UTCDate(timezone, this._determineTime(inst._since, null)); - if (inst._since && serverOffset) { - inst._since.setMilliseconds(inst._since.getMilliseconds() + serverOffset); - } - } - inst._until = this.UTCDate(timezone, this._determineTime(this._get(inst, 'until'), now)); - if (serverOffset) { - inst._until.setMilliseconds(inst._until.getMilliseconds() + serverOffset); - } - inst._show = this._determineShow(inst); - }, - - /* Remove the countdown widget from a div. - @param target (element) the containing division */ - _destroyCountdown: function(target) { - var $target = $(target); - if (!$target.hasClass(this.markerClassName)) { - return; - } - this._removeTarget(target); - $target.removeClass(this.markerClassName).empty(); - $.removeData(target, PROP_NAME); - }, - - /* Pause a countdown widget at the current time. - Stop it running but remember and display the current time. - @param target (element) the containing division */ - _pauseCountdown: function(target) { - this._hold(target, 'pause'); - }, - - /* Pause a countdown widget at the current time. - Stop the display but keep the countdown running. - @param target (element) the containing division */ - _lapCountdown: function(target) { - this._hold(target, 'lap'); - }, - - /* Resume a paused countdown widget. - @param target (element) the containing division */ - _resumeCountdown: function(target) { - this._hold(target, null); - }, - - /* Pause or resume a countdown widget. - @param target (element) the containing division - @param hold (string) the new hold setting */ - _hold: function(target, hold) { - var inst = $.data(target, PROP_NAME); - if (inst) { - if (inst._hold == 'pause' && !hold) { - inst._periods = inst._savePeriods; - var sign = (inst._since ? '-' : '+'); - inst[inst._since ? '_since' : '_until'] = - this._determineTime(sign + inst._periods[0] + 'y' + - sign + inst._periods[1] + 'o' + sign + inst._periods[2] + 'w' + - sign + inst._periods[3] + 'd' + sign + inst._periods[4] + 'h' + - sign + inst._periods[5] + 'm' + sign + inst._periods[6] + 's'); - this._addTarget(target); - } - inst._hold = hold; - inst._savePeriods = (hold == 'pause' ? inst._periods : null); - $.data(target, PROP_NAME, inst); - this._updateCountdown(target, inst); - } - }, - - /* Return the current time periods. - @param target (element) the containing division - @return (number[7]) the current periods for the countdown */ - _getTimesCountdown: function(target) { - var inst = $.data(target, PROP_NAME); - return (!inst ? null : (!inst._hold ? inst._periods : - this._calculatePeriods(inst, inst._show, this._get(inst, 'significant'), new Date()))); - }, - - /* Get a setting value, defaulting if necessary. - @param inst (object) the current settings for this instance - @param name (string) the name of the required setting - @return (any) the setting's value or a default if not overridden */ - _get: function(inst, name) { - return (inst.options[name] != null ? - inst.options[name] : $.countdown._defaults[name]); - }, - - /* A time may be specified as an exact value or a relative one. - @param setting (string or number or Date) - the date/time value - as a relative or absolute value - @param defaultTime (Date) the date/time to use if no other is supplied - @return (Date) the corresponding date/time */ - _determineTime: function(setting, defaultTime) { - var offsetNumeric = function(offset) { // e.g. +300, -2 - var time = new Date(); - time.setTime(time.getTime() + offset * 1000); - return time; - }; - var offsetString = function(offset) { // e.g. '+2d', '-4w', '+3h +30m' - offset = offset.toLowerCase(); - var time = new Date(); - var year = time.getFullYear(); - var month = time.getMonth(); - var day = time.getDate(); - var hour = time.getHours(); - var minute = time.getMinutes(); - var second = time.getSeconds(); - var pattern = /([+-]?[0-9]+)\s*(s|m|h|d|w|o|y)?/g; - var matches = pattern.exec(offset); - while (matches) { - switch (matches[2] || 's') { - case 's': second += parseInt(matches[1], 10); break; - case 'm': minute += parseInt(matches[1], 10); break; - case 'h': hour += parseInt(matches[1], 10); break; - case 'd': day += parseInt(matches[1], 10); break; - case 'w': day += parseInt(matches[1], 10) * 7; break; - case 'o': - month += parseInt(matches[1], 10); - day = Math.min(day, $.countdown._getDaysInMonth(year, month)); - break; - case 'y': - year += parseInt(matches[1], 10); - day = Math.min(day, $.countdown._getDaysInMonth(year, month)); - break; - } - matches = pattern.exec(offset); - } - return new Date(year, month, day, hour, minute, second, 0); - }; - var time = (setting == null ? defaultTime : - (typeof setting == 'string' ? offsetString(setting) : - (typeof setting == 'number' ? offsetNumeric(setting) : setting))); - if (time) time.setMilliseconds(0); - return time; - }, - - /* Determine the number of days in a month. - @param year (number) the year - @param month (number) the month - @return (number) the days in that month */ - _getDaysInMonth: function(year, month) { - return 32 - new Date(year, month, 32).getDate(); - }, - - /* Determine which set of labels should be used for an amount. - @param num (number) the amount to be displayed - @return (number) the set of labels to be used for this amount */ - _normalLabels: function(num) { - return num; - }, - - /* Generate the HTML to display the countdown widget. - @param inst (object) the current settings for this instance - @return (string) the new HTML for the countdown display */ - _generateHTML: function(inst) { - // Determine what to show - var significant = this._get(inst, 'significant'); - inst._periods = (inst._hold ? inst._periods : - this._calculatePeriods(inst, inst._show, significant, new Date())); - // Show all 'asNeeded' after first non-zero value - var shownNonZero = false; - var showCount = 0; - var sigCount = significant; - var show = $.extend({}, inst._show); - for (var period = Y; period <= S; period++) { - shownNonZero |= (inst._show[period] == '?' && inst._periods[period] > 0); - show[period] = (inst._show[period] == '?' && !shownNonZero ? null : inst._show[period]); - showCount += (show[period] ? 1 : 0); - sigCount -= (inst._periods[period] > 0 ? 1 : 0); - } - var showSignificant = [false, false, false, false, false, false, false]; - for (var period = S; period >= Y; period--) { // Determine significant periods - if (inst._show[period]) { - if (inst._periods[period]) { - showSignificant[period] = true; - } - else { - showSignificant[period] = sigCount > 0; - sigCount--; - } - } - } - var compact = this._get(inst, 'compact'); - var layout = this._get(inst, 'layout'); - var labels = (compact ? this._get(inst, 'compactLabels') : this._get(inst, 'labels')); - var whichLabels = this._get(inst, 'whichLabels') || this._normalLabels; - var timeSeparator = this._get(inst, 'timeSeparator'); - var description = this._get(inst, 'description') || ''; - var showCompact = function(period) { - var labelsNum = $.countdown._get(inst, - 'compactLabels' + whichLabels(inst._periods[period])); - return (show[period] ? inst._periods[period] + - (labelsNum ? labelsNum[period] : labels[period]) + ' ' : ''); - }; - var showFull = function(period) { - var labelsNum = $.countdown._get(inst, 'labels' + whichLabels(inst._periods[period])); - return ((!significant && show[period]) || (significant && showSignificant[period]) ? - '' + - inst._periods[period] + '
                ' + - (labelsNum ? labelsNum[period] : labels[period]) + '
                ' : ''); - }; - return (layout ? this._buildLayout(inst, show, layout, compact, significant, showSignificant) : - ((compact ? // Compact version - '' + - showCompact(Y) + showCompact(O) + showCompact(W) + showCompact(D) + - (show[H] ? this._minDigits(inst._periods[H], 2) : '') + - (show[M] ? (show[H] ? timeSeparator : '') + - this._minDigits(inst._periods[M], 2) : '') + - (show[S] ? (show[H] || show[M] ? timeSeparator : '') + - this._minDigits(inst._periods[S], 2) : '') : - // Full version - '' + - showFull(Y) + showFull(O) + showFull(W) + showFull(D) + - showFull(H) + showFull(M) + showFull(S)) + '' + - (description ? '' + description + '' : ''))); - }, - - /* Construct a custom layout. - @param inst (object) the current settings for this instance - @param show (string[7]) flags indicating which periods are requested - @param layout (string) the customised layout - @param compact (boolean) true if using compact labels - @param significant (number) the number of periods with values to show, zero for all - @param showSignificant (boolean[7]) other periods to show for significance - @return (string) the custom HTML */ - _buildLayout: function(inst, show, layout, compact, significant, showSignificant) { - var labels = this._get(inst, (compact ? 'compactLabels' : 'labels')); - var whichLabels = this._get(inst, 'whichLabels') || this._normalLabels; - var labelFor = function(index) { - return ($.countdown._get(inst, - (compact ? 'compactLabels' : 'labels') + whichLabels(inst._periods[index])) || - labels)[index]; - }; - var digit = function(value, position) { - return Math.floor(value / position) % 10; - }; - var subs = {desc: this._get(inst, 'description'), sep: this._get(inst, 'timeSeparator'), - yl: labelFor(Y), yn: inst._periods[Y], ynn: this._minDigits(inst._periods[Y], 2), - ynnn: this._minDigits(inst._periods[Y], 3), y1: digit(inst._periods[Y], 1), - y10: digit(inst._periods[Y], 10), y100: digit(inst._periods[Y], 100), - y1000: digit(inst._periods[Y], 1000), - ol: labelFor(O), on: inst._periods[O], onn: this._minDigits(inst._periods[O], 2), - onnn: this._minDigits(inst._periods[O], 3), o1: digit(inst._periods[O], 1), - o10: digit(inst._periods[O], 10), o100: digit(inst._periods[O], 100), - o1000: digit(inst._periods[O], 1000), - wl: labelFor(W), wn: inst._periods[W], wnn: this._minDigits(inst._periods[W], 2), - wnnn: this._minDigits(inst._periods[W], 3), w1: digit(inst._periods[W], 1), - w10: digit(inst._periods[W], 10), w100: digit(inst._periods[W], 100), - w1000: digit(inst._periods[W], 1000), - dl: labelFor(D), dn: inst._periods[D], dnn: this._minDigits(inst._periods[D], 2), - dnnn: this._minDigits(inst._periods[D], 3), d1: digit(inst._periods[D], 1), - d10: digit(inst._periods[D], 10), d100: digit(inst._periods[D], 100), - d1000: digit(inst._periods[D], 1000), - hl: labelFor(H), hn: inst._periods[H], hnn: this._minDigits(inst._periods[H], 2), - hnnn: this._minDigits(inst._periods[H], 3), h1: digit(inst._periods[H], 1), - h10: digit(inst._periods[H], 10), h100: digit(inst._periods[H], 100), - h1000: digit(inst._periods[H], 1000), - ml: labelFor(M), mn: inst._periods[M], mnn: this._minDigits(inst._periods[M], 2), - mnnn: this._minDigits(inst._periods[M], 3), m1: digit(inst._periods[M], 1), - m10: digit(inst._periods[M], 10), m100: digit(inst._periods[M], 100), - m1000: digit(inst._periods[M], 1000), - sl: labelFor(S), sn: inst._periods[S], snn: this._minDigits(inst._periods[S], 2), - snnn: this._minDigits(inst._periods[S], 3), s1: digit(inst._periods[S], 1), - s10: digit(inst._periods[S], 10), s100: digit(inst._periods[S], 100), - s1000: digit(inst._periods[S], 1000)}; - var html = layout; - // Replace period containers: {p<}...{p>} - for (var i = Y; i <= S; i++) { - var period = 'yowdhms'.charAt(i); - var re = new RegExp('\\{' + period + '<\\}(.*)\\{' + period + '>\\}', 'g'); - html = html.replace(re, ((!significant && show[i]) || - (significant && showSignificant[i]) ? '$1' : '')); - } - // Replace period values: {pn} - $.each(subs, function(n, v) { - var re = new RegExp('\\{' + n + '\\}', 'g'); - html = html.replace(re, v); - }); - return html; - }, - - /* Ensure a numeric value has at least n digits for display. - @param value (number) the value to display - @param len (number) the minimum length - @return (string) the display text */ - _minDigits: function(value, len) { - value = '' + value; - if (value.length >= len) { - return value; - } - value = '0000000000' + value; - return value.substr(value.length - len); - }, - - /* Translate the format into flags for each period. - @param inst (object) the current settings for this instance - @return (string[7]) flags indicating which periods are requested (?) or - required (!) by year, month, week, day, hour, minute, second */ - _determineShow: function(inst) { - var format = this._get(inst, 'format'); - var show = []; - show[Y] = (format.match('y') ? '?' : (format.match('Y') ? '!' : null)); - show[O] = (format.match('o') ? '?' : (format.match('O') ? '!' : null)); - show[W] = (format.match('w') ? '?' : (format.match('W') ? '!' : null)); - show[D] = (format.match('d') ? '?' : (format.match('D') ? '!' : null)); - show[H] = (format.match('h') ? '?' : (format.match('H') ? '!' : null)); - show[M] = (format.match('m') ? '?' : (format.match('M') ? '!' : null)); - show[S] = (format.match('s') ? '?' : (format.match('S') ? '!' : null)); - return show; - }, - - /* Calculate the requested periods between now and the target time. - @param inst (object) the current settings for this instance - @param show (string[7]) flags indicating which periods are requested/required - @param significant (number) the number of periods with values to show, zero for all - @param now (Date) the current date and time - @return (number[7]) the current time periods (always positive) - by year, month, week, day, hour, minute, second */ - _calculatePeriods: function(inst, show, significant, now) { - // Find endpoints - inst._now = now; - inst._now.setMilliseconds(0); - var until = new Date(inst._now.getTime()); - if (inst._since) { - if (now.getTime() < inst._since.getTime()) { - inst._now = now = until; - } - else { - now = inst._since; - } - } - else { - until.setTime(inst._until.getTime()); - if (now.getTime() > inst._until.getTime()) { - inst._now = now = until; - } - } - // Calculate differences by period - var periods = [0, 0, 0, 0, 0, 0, 0]; - if (show[Y] || show[O]) { - // Treat end of months as the same - var lastNow = $.countdown._getDaysInMonth(now.getFullYear(), now.getMonth()); - var lastUntil = $.countdown._getDaysInMonth(until.getFullYear(), until.getMonth()); - var sameDay = (until.getDate() == now.getDate() || - (until.getDate() >= Math.min(lastNow, lastUntil) && - now.getDate() >= Math.min(lastNow, lastUntil))); - var getSecs = function(date) { - return (date.getHours() * 60 + date.getMinutes()) * 60 + date.getSeconds(); - }; - var months = Math.max(0, - (until.getFullYear() - now.getFullYear()) * 12 + until.getMonth() - now.getMonth() + - ((until.getDate() < now.getDate() && !sameDay) || - (sameDay && getSecs(until) < getSecs(now)) ? -1 : 0)); - periods[Y] = (show[Y] ? Math.floor(months / 12) : 0); - periods[O] = (show[O] ? months - periods[Y] * 12 : 0); - // Adjust for months difference and end of month if necessary - now = new Date(now.getTime()); - var wasLastDay = (now.getDate() == lastNow); - var lastDay = $.countdown._getDaysInMonth(now.getFullYear() + periods[Y], - now.getMonth() + periods[O]); - if (now.getDate() > lastDay) { - now.setDate(lastDay); - } - now.setFullYear(now.getFullYear() + periods[Y]); - now.setMonth(now.getMonth() + periods[O]); - if (wasLastDay) { - now.setDate(lastDay); - } - } - var diff = Math.floor((until.getTime() - now.getTime()) / 1000); - var extractPeriod = function(period, numSecs) { - periods[period] = (show[period] ? Math.floor(diff / numSecs) : 0); - diff -= periods[period] * numSecs; - }; - extractPeriod(W, 604800); - extractPeriod(D, 86400); - extractPeriod(H, 3600); - extractPeriod(M, 60); - extractPeriod(S, 1); - if (diff > 0 && !inst._since) { // Round up if left overs - var multiplier = [1, 12, 4.3482, 7, 24, 60, 60]; - var lastShown = S; - var max = 1; - for (var period = S; period >= Y; period--) { - if (show[period]) { - if (periods[lastShown] >= max) { - periods[lastShown] = 0; - diff = 1; - } - if (diff > 0) { - periods[period]++; - diff = 0; - lastShown = period; - max = 1; - } - } - max *= multiplier[period]; - } - } - if (significant) { // Zero out insignificant periods - for (var period = Y; period <= S; period++) { - if (significant && periods[period]) { - significant--; - } - else if (!significant) { - periods[period] = 0; - } - } - } - return periods; - } -}); - -/* jQuery extend now ignores nulls! - @param target (object) the object to update - @param props (object) the new settings - @return (object) the updated object */ -function extendRemove(target, props) { - $.extend(target, props); - for (var name in props) { - if (props[name] == null) { - target[name] = null; - } - } - return target; -} - -/* Process the countdown functionality for a jQuery selection. - @param command (string) the command to run (optional, default 'attach') - @param options (object) the new settings to use for these countdown instances - @return (jQuery) for chaining further calls */ -$.fn.countdown = function(options) { - var otherArgs = Array.prototype.slice.call(arguments, 1); - if (options == 'getTimes' || options == 'settings') { - return $.countdown['_' + options + 'Countdown']. - apply($.countdown, [this[0]].concat(otherArgs)); - } - return this.each(function() { - if (typeof options == 'string') { - $.countdown['_' + options + 'Countdown'].apply($.countdown, [this].concat(otherArgs)); - } - else { - $.countdown._attachCountdown(this, options); - } - }); -}; - -/* Initialise the countdown functionality. */ -$.countdown = new Countdown(); // singleton instance - -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.cycle.min.js b/apps/wolnelektury_core/static/js/contrib/jquery.cycle.min.js deleted file mode 100644 index 9311b63fe..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.cycle.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * jQuery Cycle Lite Plugin - * http://malsup.com/jquery/cycle/lite/ - * Copyright (c) 2008 M. Alsup - * Version: 1.0 (06/08/2008) - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * Requires: jQuery v1.2.3 or later - */ -(function(D){var A="Lite-1.0";D.fn.cycle=function(E){return this.each(function(){E=E||{};if(this.cycleTimeout){clearTimeout(this.cycleTimeout)}this.cycleTimeout=0;this.cyclePause=0;var I=D(this);var J=E.slideExpr?D(E.slideExpr,this):I.children();var G=J.get();if(G.length<2){if(window.console&&window.console.log){window.console.log("terminating; too few slides: "+G.length)}return }var H=D.extend({},D.fn.cycle.defaults,E||{},D.metadata?I.metadata():D.meta?I.data():{});H.before=H.before?[H.before]:[];H.after=H.after?[H.after]:[];H.after.unshift(function(){H.busy=0});var F=this.className;H.width=parseInt((F.match(/w:(\d+)/)||[])[1])||H.width;H.height=parseInt((F.match(/h:(\d+)/)||[])[1])||H.height;H.timeout=parseInt((F.match(/t:(\d+)/)||[])[1])||H.timeout;if(I.css("position")=="static"){I.css("position","relative")}if(H.width){I.width(H.width)}if(H.height&&H.height!="auto"){I.height(H.height)}var K=0;J.css({position:"absolute",top:0,left:0}).hide().each(function(M){D(this).css("z-index",G.length-M)});D(G[K]).css("opacity",1).show();if(D.browser.msie){G[K].style.removeAttribute("filter")}if(H.fit&&H.width){J.width(H.width)}if(H.fit&&H.height&&H.height!="auto"){J.height(H.height)}if(H.pause){I.hover(function(){this.cyclePause=1},function(){this.cyclePause=0})}D.fn.cycle.transitions.fade(I,J,H);J.each(function(){var M=D(this);this.cycleH=(H.fit&&H.height)?H.height:M.height();this.cycleW=(H.fit&&H.width)?H.width:M.width()});J.not(":eq("+K+")").css({opacity:0});if(H.cssFirst){D(J[K]).css(H.cssFirst)}if(H.timeout){if(H.speed.constructor==String){H.speed={slow:600,fast:200}[H.speed]||400}if(!H.sync){H.speed=H.speed/2}while((H.timeout-H.speed)<250){H.timeout+=H.speed}}H.speedIn=H.speed;H.speedOut=H.speed;H.slideCount=G.length;H.currSlide=K;H.nextSlide=1;var L=J[K];if(H.before.length){H.before[0].apply(L,[L,L,H,true])}if(H.after.length>1){H.after[1].apply(L,[L,L,H,true])}if(H.click&&!H.next){H.next=H.click}if(H.next){D(H.next).bind("click",function(){return C(G,H,H.rev?-1:1)})}if(H.prev){D(H.prev).bind("click",function(){return C(G,H,H.rev?1:-1)})}if(H.timeout){this.cycleTimeout=setTimeout(function(){B(G,H,0,!H.rev)},H.timeout+(H.delay||0))}})};function B(J,E,I,K){if(E.busy){return }var H=J[0].parentNode,M=J[E.currSlide],L=J[E.nextSlide];if(H.cycleTimeout===0&&!I){return }if(I||!H.cyclePause){if(E.before.length){D.each(E.before,function(N,O){O.apply(L,[M,L,E,K])})}var F=function(){if(D.browser.msie){this.style.removeAttribute("filter")}D.each(E.after,function(N,O){O.apply(L,[M,L,E,K])})};if(E.nextSlide!=E.currSlide){E.busy=1;D.fn.cycle.custom(M,L,E,F)}var G=(E.nextSlide+1)==J.length;E.nextSlide=G?0:E.nextSlide+1;E.currSlide=G?J.length-1:E.nextSlide-1}if(E.timeout){H.cycleTimeout=setTimeout(function(){B(J,E,0,!E.rev)},E.timeout)}}function C(E,F,I){var H=E[0].parentNode,G=H.cycleTimeout;if(G){clearTimeout(G);H.cycleTimeout=0}F.nextSlide=F.currSlide+I;if(F.nextSlide<0){F.nextSlide=E.length-1}else{if(F.nextSlide>=E.length){F.nextSlide=0}}B(E,F,1,I>=0);return false}D.fn.cycle.custom=function(K,H,I,E){var J=D(K),G=D(H);G.css({opacity:0});var F=function(){G.animate({opacity:1},I.speedIn,I.easeIn,E)};J.animate({opacity:0},I.speedOut,I.easeOut,function(){J.css({display:"none"});if(!I.sync){F()}});if(I.sync){F()}};D.fn.cycle.transitions={fade:function(F,G,E){G.not(":eq(0)").css("opacity",0);E.before.push(function(){D(this).show()})}};D.fn.cycle.ver=function(){return A};D.fn.cycle.defaults={timeout:4000,speed:1000,next:null,prev:null,before:null,after:null,height:"auto",sync:1,fit:0,pause:0,delay:0,slideExpr:null}})(jQuery); \ No newline at end of file diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.eventdelegation.js b/apps/wolnelektury_core/static/js/contrib/jquery.eventdelegation.js deleted file mode 100644 index 52fce074a..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.eventdelegation.js +++ /dev/null @@ -1,55 +0,0 @@ -/* - * jQuery Event Delegation Plugin - jquery.eventdelegation.js - * Fast flexible event handling - * - * January 2008 - Randy Morey (http://dev.distilldesign.com/) - */ - -(function ($) { - /* setup list of allowed events for event delegation - * only events that bubble are appropriate - */ - var allowed = {}; - $.each([ - 'click', - 'dblclick', - 'mousedown', - 'mouseup', - 'mousemove', - 'mouseover', - 'mouseout', - 'keydown', - 'keypress', - 'keyup' - ], function(i, eventName) { - allowed[eventName] = true; - }); - - $.fn.extend({ - delegate: function (event, selector, f) { - return $(this).each(function () { - if (allowed[event]) - $(this).bind(event, function (e) { - var el = $(e.target), - result = false; - - while (!$(el).is('body')) { - if ($(el).is(selector)) { - result = f.apply($(el)[0], [e]); - if (result === false) - e.preventDefault(); - return; - } - - el = $(el).parent(); - } - }); - }); - }, - undelegate: function (event) { - return $(this).each(function () { - $(this).unbind(event); - }); - } - }); -})(jQuery); \ No newline at end of file diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.form.js b/apps/wolnelektury_core/static/js/contrib/jquery.form.js deleted file mode 100644 index 36af6b199..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.form.js +++ /dev/null @@ -1,601 +0,0 @@ -/* - * jQuery Form Plugin - * version: 2.12 (06/07/2008) - * @requires jQuery v1.2.2 or later - * - * Examples and documentation at: http://malsup.com/jquery/form/ - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - * Revision: $Id$ - */ -(function($) { - -/* - Usage Note: - ----------- - Do not use both ajaxSubmit and ajaxForm on the same form. These - functions are intended to be exclusive. Use ajaxSubmit if you want - to bind your own submit handler to the form. For example, - - $(document).ready(function() { - $('#myForm').bind('submit', function() { - $(this).ajaxSubmit({ - target: '#output' - }); - return false; // <-- important! - }); - }); - - Use ajaxForm when you want the plugin to manage all the event binding - for you. For example, - - $(document).ready(function() { - $('#myForm').ajaxForm({ - target: '#output' - }); - }); - - When using ajaxForm, the ajaxSubmit function will be invoked for you - at the appropriate time. -*/ - -/** - * ajaxSubmit() provides a mechanism for immediately submitting - * an HTML form using AJAX. - */ -$.fn.ajaxSubmit = function(options) { - // fast fail if nothing selected (http://dev.jquery.com/ticket/2752) - if (!this.length) { - log('ajaxSubmit: skipping submit process - no element selected'); - return this; - } - - if (typeof options == 'function') - options = { success: options }; - - options = $.extend({ - url: this.attr('action') || window.location.toString(), - type: this.attr('method') || 'GET' - }, options || {}); - - // hook for manipulating the form data before it is extracted; - // convenient for use with rich editors like tinyMCE or FCKEditor - var veto = {}; - this.trigger('form-pre-serialize', [this, options, veto]); - if (veto.veto) { - log('ajaxSubmit: submit vetoed via form-pre-serialize trigger'); - return this; - } - - var a = this.formToArray(options.semantic); - if (options.data) { - options.extraData = options.data; - for (var n in options.data) - a.push( { name: n, value: options.data[n] } ); - } - - // give pre-submit callback an opportunity to abort the submit - if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) { - log('ajaxSubmit: submit aborted via beforeSubmit callback'); - return this; - } - - // fire vetoable 'validate' event - this.trigger('form-submit-validate', [a, this, options, veto]); - if (veto.veto) { - log('ajaxSubmit: submit vetoed via form-submit-validate trigger'); - return this; - } - - var q = $.param(a); - - if (options.type.toUpperCase() == 'GET') { - options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q; - options.data = null; // data is null for 'get' - } - else - options.data = q; // data is the query string for 'post' - - var $form = this, callbacks = []; - if (options.resetForm) callbacks.push(function() { $form.resetForm(); }); - if (options.clearForm) callbacks.push(function() { $form.clearForm(); }); - - // perform a load on the target only if dataType is not provided - if (!options.dataType && options.target) { - var oldSuccess = options.success || function(){}; - callbacks.push(function(data) { - $(options.target).html(data).each(oldSuccess, arguments); - }); - } - else if (options.success) - callbacks.push(options.success); - - options.success = function(data, status) { - for (var i=0, max=callbacks.length; i < max; i++) - callbacks[i](data, status, $form); - }; - - // are there files to upload? - var files = $('input:file', this).fieldValue(); - var found = false; - for (var j=0; j < files.length; j++) - if (files[j]) - found = true; - - // options.iframe allows user to force iframe mode - if (options.iframe || found) { - // hack to fix Safari hang (thanks to Tim Molendijk for this) - // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d - if ($.browser.safari && options.closeKeepAlive) - $.get(options.closeKeepAlive, fileUpload); - else - fileUpload(); - } - else - $.ajax(options); - - // fire 'notify' event - this.trigger('form-submit-notify', [this, options]); - return this; - - - // private function for handling file uploads (hat tip to YAHOO!) - function fileUpload() { - var form = $form[0]; - - if ($(':input[@name=submit]', form).length) { - alert('Error: Form elements must not be named "submit".'); - return; - } - - var opts = $.extend({}, $.ajaxSettings, options); - - var id = 'jqFormIO' + (new Date().getTime()); - var $io = $('').css({opacity:0}), -e=function(h){if(ie6)if(h.o)h.o.html('

                ').prepend(i);else if(!$('iframe.jqm',h.w)[0])h.w.prepend(i); f(h);}, -f=function(h){try{$(':input:visible',h.w)[0].focus();}catch(_){}}, -L=function(t){$()[t]("keypress",m)[t]("keydown",m)[t]("mousedown",m);}, -m=function(e){var h=H[A[A.length-1]],r=(!$(e.target).parents('.jqmID'+h.s)[0]);if(r)f(h);return !r;}, -hs=function(w,t,c){return w.each(function(){var s=this._jqm;$(t).each(function() { - if(!this[c]){this[c]=[];$(this).click(function(){for(var i in {jqmShow:1,jqmHide:1})for(var s in this[i])if(H[this[i][s]])H[this[i][s]].w[i](this);return F;});}this[c].push(s);});});}; -})(jQuery); \ No newline at end of file diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.js b/apps/wolnelektury_core/static/js/contrib/jquery.js deleted file mode 100644 index 7c2430802..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.js +++ /dev/null @@ -1,154 +0,0 @@ -/*! - * jQuery JavaScript Library v1.4.2 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Sat Feb 13 22:33:48 2010 -0500 - */ -(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
                a"; -var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, -parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= -false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= -s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, -applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; -else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, -a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== -w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, -cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= -c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); -a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, -function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); -k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), -C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= -e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& -f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; -if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", -e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, -"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, -d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, -e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); -t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| -g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= -h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

                ";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="
                ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= -{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
                ","
                "],thead:[1,"","
                "],tr:[2,"","
                "],td:[3,"","
                "],col:[2,"","
                "],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
                ","
                "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); -return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== -"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
                ").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, -serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), -function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, -global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& -e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? -"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== -false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= -false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", -c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| -d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); -g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== -1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== -"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; -if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== -"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| -c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; -this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= -this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, -e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
                "; -a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); -c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, -d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- -f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": -"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in -e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.scrollto.js b/apps/wolnelektury_core/static/js/contrib/jquery.scrollto.js deleted file mode 100644 index c403ab9df..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.scrollto.js +++ /dev/null @@ -1,194 +0,0 @@ -/** - * jQuery.ScrollTo - * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com - * Dual licensed under MIT and GPL. - * Date: 9/11/2008 - * - * @projectDescription Easy element scrolling using jQuery. - * http://flesler.blogspot.com/2007/10/jqueryscrollto.html - * Tested with jQuery 1.2.6. On FF 2/3, IE 6/7, Opera 9.2/5 and Safari 3. on Windows. - * - * @author Ariel Flesler - * @version 1.4 - * - * @id jQuery.scrollTo - * @id jQuery.fn.scrollTo - * @param {String, Number, DOMElement, jQuery, Object} target Where to scroll the matched elements. - * The different options for target are: - * - A number position (will be applied to all axes). - * - A string position ('44', '100px', '+=90', etc ) will be applied to all axes - * - A jQuery/DOM element ( logically, child of the element to scroll ) - * - A string selector, that will be relative to the element to scroll ( 'li:eq(2)', etc ) - * - A hash { top:x, left:y }, x and y can be any kind of number/string like above. - * @param {Number} duration The OVERALL length of the animation, this argument can be the settings object instead. - * @param {Object,Function} settings Optional set of settings or the onAfter callback. - * @option {String} axis Which axis must be scrolled, use 'x', 'y', 'xy' or 'yx'. - * @option {Number} duration The OVERALL length of the animation. - * @option {String} easing The easing method for the animation. - * @option {Boolean} margin If true, the margin of the target element will be deducted from the final position. - * @option {Object, Number} offset Add/deduct from the end position. One number for both axes or { top:x, left:y }. - * @option {Object, Number} over Add/deduct the height/width multiplied by 'over', can be { top:x, left:y } when using both axes. - * @option {Boolean} queue If true, and both axis are given, the 2nd axis will only be animated after the first one ends. - * @option {Function} onAfter Function to be called after the scrolling ends. - * @option {Function} onAfterFirst If queuing is activated, this function will be called after the first scrolling ends. - * @return {jQuery} Returns the same jQuery object, for chaining. - * - * @desc Scroll to a fixed position - * @example $('div').scrollTo( 340 ); - * - * @desc Scroll relatively to the actual position - * @example $('div').scrollTo( '+=340px', { axis:'y' } ); - * - * @dec Scroll using a selector (relative to the scrolled element) - * @example $('div').scrollTo( 'p.paragraph:eq(2)', 500, { easing:'swing', queue:true, axis:'xy' } ); - * - * @ Scroll to a DOM element (same for jQuery object) - * @example var second_child = document.getElementById('container').firstChild.nextSibling; - * $('#container').scrollTo( second_child, { duration:500, axis:'x', onAfter:function(){ - * alert('scrolled!!'); - * }}); - * - * @desc Scroll on both axes, to different values - * @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } ); - */ -;(function( $ ){ - - var $scrollTo = $.scrollTo = function( target, duration, settings ){ - $(window).scrollTo( target, duration, settings ); - }; - - $scrollTo.defaults = { - axis:'y', - duration:1 - }; - - // Returns the element that needs to be animated to scroll the window. - // Kept for backwards compatibility (specially for localScroll & serialScroll) - $scrollTo.window = function( scope ){ - return $(window).scrollable(); - }; - - // Hack, hack, hack... stay away! - // Returns the real elements to scroll (supports window/iframes, documents and regular nodes) - $.fn.scrollable = function(){ - return this.map(function(){ - // Just store it, we might need it - var win = this.parentWindow || this.defaultView, - // If it's a document, get its iframe or the window if it's THE document - elem = this.nodeName == '#document' ? win.frameElement || win : this, - // Get the corresponding document - doc = elem.contentDocument || (elem.contentWindow || elem).document, - isWin = elem.setInterval; - - return elem.nodeName == 'IFRAME' || isWin && $.browser.safari ? doc.body - : isWin ? doc.documentElement - : this; - }); - }; - - $.fn.scrollTo = function( target, duration, settings ){ - if( typeof duration == 'object' ){ - settings = duration; - duration = 0; - } - if( typeof settings == 'function' ) - settings = { onAfter:settings }; - - settings = $.extend( {}, $scrollTo.defaults, settings ); - // Speed is still recognized for backwards compatibility - duration = duration || settings.speed || settings.duration; - // Make sure the settings are given right - settings.queue = settings.queue && settings.axis.length > 1; - - if( settings.queue ) - // Let's keep the overall duration - duration /= 2; - settings.offset = both( settings.offset ); - settings.over = both( settings.over ); - - return this.scrollable().each(function(){ - var elem = this, - $elem = $(elem), - targ = target, toff, attr = {}, - win = $elem.is('html,body'); - - switch( typeof targ ){ - // A number will pass the regex - case 'number': - case 'string': - if( /^([+-]=)?\d+(px)?$/.test(targ) ){ - targ = both( targ ); - // We are done - break; - } - // Relative selector, no break! - targ = $(targ,this); - case 'object': - // DOMElement / jQuery - if( targ.is || targ.style ) - // Get the real position of the target - toff = (targ = $(targ)).offset(); - } - $.each( settings.axis.split(''), function( i, axis ){ - var Pos = axis == 'x' ? 'Left' : 'Top', - pos = Pos.toLowerCase(), - key = 'scroll' + Pos, - old = elem[key], - Dim = axis == 'x' ? 'Width' : 'Height', - dim = Dim.toLowerCase(); - - if( toff ){// jQuery / DOMElement - attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] ); - - // If it's a dom element, reduce the margin - if( settings.margin ){ - attr[key] -= parseInt(targ.css('margin'+Pos)) || 0; - attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0; - } - - attr[key] += settings.offset[pos] || 0; - - if( settings.over[pos] ) - // Scroll to a fraction of its width/height - attr[key] += targ[dim]() * settings.over[pos]; - }else - attr[key] = targ[pos]; - - // Number or 'number' - if( /^\d+$/.test(attr[key]) ) - // Check the limits - attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max(Dim) ); - - // Queueing axes - if( !i && settings.queue ){ - // Don't waste time animating, if there's no need. - if( old != attr[key] ) - // Intermediate animation - animate( settings.onAfterFirst ); - // Don't animate this axis again in the next iteration. - delete attr[key]; - } - }); - animate( settings.onAfter ); - - function animate( callback ){ - $elem.animate( attr, duration, settings.easing, callback && function(){ - callback.call(this, target, settings); - }); - }; - function max( Dim ){ - var attr ='scroll'+Dim, - doc = elem.ownerDocument; - - return win - ? Math.max( doc.documentElement[attr], doc.body[attr] ) - : elem[attr]; - }; - }).end(); - }; - - function both( val ){ - return typeof val == 'object' ? val : { top:val, left:val }; - }; - -})( jQuery ); \ No newline at end of file diff --git a/apps/wolnelektury_core/static/js/contrib/modernizr.custom.19652.js b/apps/wolnelektury_core/static/js/contrib/modernizr.custom.19652.js deleted file mode 100644 index 7ad5743b9..000000000 --- a/apps/wolnelektury_core/static/js/contrib/modernizr.custom.19652.js +++ /dev/null @@ -1,4 +0,0 @@ -/* Modernizr 2.6.2 (Custom Build) | MIT & BSD - * Build: http://modernizr.com/download/#-input-localstorage - */ -;window.Modernizr=function(a,b,c){function t(a){i.cssText=a}function u(a,b){return t(prefixes.join(a+";")+(b||""))}function v(a,b){return typeof a===b}function w(a,b){return!!~(""+a).indexOf(b)}function x(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:v(f,"function")?f.bind(d||b):f}return!1}function y(){e.input=function(c){for(var d=0,e=c.length;dp;p++)"zIndex"in h[p]&&(l.push(h[p].zIndex),h[p].zIndex<0&&(m[h[p].zIndex]=h[p]));for(l.sort(i);l[j]<0;)if(e=m[l[j++]],n.push(e.apply(d,g)),c)return c=f,n;for(p=0;q>p;p++)if(e=h[p],"zIndex"in e)if(e.zIndex==l[j]){if(n.push(e.apply(d,g)),c)break;do if(j++,e=m[l[j]],e&&n.push(e.apply(d,g)),c)break;while(e)}else m[e.zIndex]=e;else if(n.push(e.apply(d,g)),c)break;return c=f,b=o,n.length?n:null};k._events=j,k.listeners=function(a){var b,c,d,e,h,i,k,l,m=a.split(f),n=j,o=[n],p=[];for(e=0,h=m.length;h>e;e++){for(l=[],i=0,k=o.length;k>i;i++)for(n=o[i].n,c=[n[m[e]],n[g]],d=2;d--;)b=c[d],b&&(l.push(b),p=p.concat(b.f||[]));o=l}return p},k.on=function(a,b){if(a=String(a),"function"!=typeof b)return function(){};for(var c=a.split(f),d=j,e=0,g=c.length;g>e;e++)d=d.n,d=d.hasOwnProperty(c[e])&&d[c[e]]||(d[c[e]]={n:{}});for(d.f=d.f||[],e=0,g=d.f.length;g>e;e++)if(d.f[e]==b)return h;return d.f.push(b),function(a){+a==+a&&(b.zIndex=+a)}},k.f=function(a){var b=[].slice.call(arguments,1);return function(){k.apply(null,[a,null].concat(b).concat([].slice.call(arguments,0)))}},k.stop=function(){c=1},k.nt=function(a){return a?new RegExp("(?:\\.|\\/|^)"+a+"(?:\\.|\\/|$)").test(b):b},k.nts=function(){return b.split(f)},k.off=k.unbind=function(a,b){if(!a)return k._events=j={n:{}},void 0;var c,d,h,i,l,m,n,o=a.split(f),p=[j];for(i=0,l=o.length;l>i;i++)for(m=0;mi;i++)for(c=p[i];c.n;){if(b){if(c.f){for(m=0,n=c.f.length;n>m;m++)if(c.f[m]==b){c.f.splice(m,1);break}!c.f.length&&delete c.f}for(d in c.n)if(c.n[e](d)&&c.n[d].f){var q=c.n[d].f;for(m=0,n=q.length;n>m;m++)if(q[m]==b){q.splice(m,1);break}!q.length&&delete c.n[d].f}}else{delete c.f;for(d in c.n)c.n[e](d)&&c.n[d].f&&delete c.n[d].f}c=c.n}},k.once=function(a,b){var c=function(){return k.unbind(a,c),b.apply(this,arguments)};return k.on(a,c)},k.version=d,k.toString=function(){return"You are running Eve "+d},"undefined"!=typeof module&&module.exports?module.exports=k:"undefined"!=typeof define?define("eve",[],function(){return k}):a.eve=k}(this),function(a,b){"function"==typeof define&&define.amd?define(["eve"],function(c){return b(a,c)}):b(a,a.eve)}(this,function(a,b){function c(a){if(c.is(a,"function"))return u?a():b.on("raphael.DOMload",a);if(c.is(a,V))return c._engine.create[D](c,a.splice(0,3+c.is(a[0],T))).add(a);var d=Array.prototype.slice.call(arguments,0);if(c.is(d[d.length-1],"function")){var e=d.pop();return u?e.call(c._engine.create[D](c,d)):b.on("raphael.DOMload",function(){e.call(c._engine.create[D](c,d))})}return c._engine.create[D](c,arguments)}function d(a){if("function"==typeof a||Object(a)!==a)return a;var b=new a.constructor;for(var c in a)a[z](c)&&(b[c]=d(a[c]));return b}function e(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return a.push(a.splice(c,1)[0])}function f(a,b,c){function d(){var f=Array.prototype.slice.call(arguments,0),g=f.join("␀"),h=d.cache=d.cache||{},i=d.count=d.count||[];return h[z](g)?(e(i,g),c?c(h[g]):h[g]):(i.length>=1e3&&delete h[i.shift()],i.push(g),h[g]=a[D](b,f),c?c(h[g]):h[g])}return d}function g(){return this.hex}function h(a,b){for(var c=[],d=0,e=a.length;e-2*!b>d;d+=2){var f=[{x:+a[d-2],y:+a[d-1]},{x:+a[d],y:+a[d+1]},{x:+a[d+2],y:+a[d+3]},{x:+a[d+4],y:+a[d+5]}];b?d?e-4==d?f[3]={x:+a[0],y:+a[1]}:e-2==d&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[e-2],y:+a[e-1]}:e-4==d?f[3]=f[2]:d||(f[0]={x:+a[d],y:+a[d+1]}),c.push(["C",(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])}return c}function i(a,b,c,d,e){var f=-3*b+9*c-9*d+3*e,g=a*f+6*b-12*c+6*d;return a*g-3*b+3*c}function j(a,b,c,d,e,f,g,h,j){null==j&&(j=1),j=j>1?1:0>j?0:j;for(var k=j/2,l=12,m=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],n=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],o=0,p=0;l>p;p++){var q=k*m[p]+k,r=i(q,a,c,e,g),s=i(q,b,d,f,h),t=r*r+s*s;o+=n[p]*N.sqrt(t)}return k*o}function k(a,b,c,d,e,f,g,h,i){if(!(0>i||j(a,b,c,d,e,f,g,h)o;)m/=2,n+=(i>k?1:-1)*m,k=j(a,b,c,d,e,f,g,h,n);return n}}function l(a,b,c,d,e,f,g,h){if(!(O(a,c)O(e,g)||O(b,d)O(f,h))){var i=(a*d-b*c)*(e-g)-(a-c)*(e*h-f*g),j=(a*d-b*c)*(f-h)-(b-d)*(e*h-f*g),k=(a-c)*(f-h)-(b-d)*(e-g);if(k){var l=i/k,m=j/k,n=+l.toFixed(2),o=+m.toFixed(2);if(!(n<+P(a,c).toFixed(2)||n>+O(a,c).toFixed(2)||n<+P(e,g).toFixed(2)||n>+O(e,g).toFixed(2)||o<+P(b,d).toFixed(2)||o>+O(b,d).toFixed(2)||o<+P(f,h).toFixed(2)||o>+O(f,h).toFixed(2)))return{x:l,y:m}}}}function m(a,b,d){var e=c.bezierBBox(a),f=c.bezierBBox(b);if(!c.isBBoxIntersect(e,f))return d?0:[];for(var g=j.apply(0,a),h=j.apply(0,b),i=O(~~(g/5),1),k=O(~~(h/5),1),m=[],n=[],o={},p=d?0:[],q=0;i+1>q;q++){var r=c.findDotsAtSegment.apply(c,a.concat(q/i));m.push({x:r.x,y:r.y,t:q/i})}for(q=0;k+1>q;q++)r=c.findDotsAtSegment.apply(c,b.concat(q/k)),n.push({x:r.x,y:r.y,t:q/k});for(q=0;i>q;q++)for(var s=0;k>s;s++){var t=m[q],u=m[q+1],v=n[s],w=n[s+1],x=Q(u.x-t.x)<.001?"y":"x",y=Q(w.x-v.x)<.001?"y":"x",z=l(t.x,t.y,u.x,u.y,v.x,v.y,w.x,w.y);if(z){if(o[z.x.toFixed(4)]==z.y.toFixed(4))continue;o[z.x.toFixed(4)]=z.y.toFixed(4);var A=t.t+Q((z[x]-t[x])/(u[x]-t[x]))*(u.t-t.t),B=v.t+Q((z[y]-v[y])/(w[y]-v[y]))*(w.t-v.t);A>=0&&1.001>=A&&B>=0&&1.001>=B&&(d?p++:p.push({x:z.x,y:z.y,t1:P(A,1),t2:P(B,1)}))}}return p}function n(a,b,d){a=c._path2curve(a),b=c._path2curve(b);for(var e,f,g,h,i,j,k,l,n,o,p=d?0:[],q=0,r=a.length;r>q;q++){var s=a[q];if("M"==s[0])e=i=s[1],f=j=s[2];else{"C"==s[0]?(n=[e,f].concat(s.slice(1)),e=n[6],f=n[7]):(n=[e,f,e,f,i,j,i,j],e=i,f=j);for(var t=0,u=b.length;u>t;t++){var v=b[t];if("M"==v[0])g=k=v[1],h=l=v[2];else{"C"==v[0]?(o=[g,h].concat(v.slice(1)),g=o[6],h=o[7]):(o=[g,h,g,h,k,l,k,l],g=k,h=l);var w=m(n,o,d);if(d)p+=w;else{for(var x=0,y=w.length;y>x;x++)w[x].segment1=q,w[x].segment2=t,w[x].bez1=n,w[x].bez2=o;p=p.concat(w)}}}}}return p}function o(a,b,c,d,e,f){null!=a?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function p(){return this.x+H+this.y+H+this.width+" × "+this.height}function q(a,b,c,d,e,f){function g(a){return((l*a+k)*a+j)*a}function h(a,b){var c=i(a,b);return((o*c+n)*c+m)*c}function i(a,b){var c,d,e,f,h,i;for(e=a,i=0;8>i;i++){if(f=g(e)-a,Q(f)e)return c;if(e>d)return d;for(;d>c;){if(f=g(e),Q(f-a)f?c=e:d=e,e=(d-c)/2+c}return e}var j=3*b,k=3*(d-b)-j,l=1-j-k,m=3*c,n=3*(e-c)-m,o=1-m-n;return h(a,1/(200*f))}function r(a,b){var c=[],d={};if(this.ms=b,this.times=1,a){for(var e in a)a[z](e)&&(d[_(e)]=a[e],c.push(_(e)));c.sort(lb)}this.anim=d,this.top=c[c.length-1],this.percents=c}function s(a,d,e,f,g,h){e=_(e);var i,j,k,l,m,n,p=a.ms,r={},s={},t={};if(f)for(v=0,x=ic.length;x>v;v++){var u=ic[v];if(u.el.id==d.id&&u.anim==a){u.percent!=e?(ic.splice(v,1),k=1):j=u,d.attr(u.totalOrigin);break}}else f=+s;for(var v=0,x=a.percents.length;x>v;v++){if(a.percents[v]==e||a.percents[v]>f*a.top){e=a.percents[v],m=a.percents[v-1]||0,p=p/a.top*(e-m),l=a.percents[v+1],i=a.anim[e];break}f&&d.attr(a.anim[a.percents[v]])}if(i){if(j)j.initstatus=f,j.start=new Date-j.ms*f;else{for(var y in i)if(i[z](y)&&(db[z](y)||d.paper.customAttributes[z](y)))switch(r[y]=d.attr(y),null==r[y]&&(r[y]=cb[y]),s[y]=i[y],db[y]){case T:t[y]=(s[y]-r[y])/p;break;case"colour":r[y]=c.getRGB(r[y]);var A=c.getRGB(s[y]);t[y]={r:(A.r-r[y].r)/p,g:(A.g-r[y].g)/p,b:(A.b-r[y].b)/p};break;case"path":var B=Kb(r[y],s[y]),C=B[1];for(r[y]=B[0],t[y]=[],v=0,x=r[y].length;x>v;v++){t[y][v]=[0];for(var D=1,F=r[y][v].length;F>D;D++)t[y][v][D]=(C[v][D]-r[y][v][D])/p}break;case"transform":var G=d._,H=Pb(G[y],s[y]);if(H)for(r[y]=H.from,s[y]=H.to,t[y]=[],t[y].real=!0,v=0,x=r[y].length;x>v;v++)for(t[y][v]=[r[y][v][0]],D=1,F=r[y][v].length;F>D;D++)t[y][v][D]=(s[y][v][D]-r[y][v][D])/p;else{var K=d.matrix||new o,L={_:{transform:G.transform},getBBox:function(){return d.getBBox(1)}};r[y]=[K.a,K.b,K.c,K.d,K.e,K.f],Nb(L,s[y]),s[y]=L._.transform,t[y]=[(L.matrix.a-K.a)/p,(L.matrix.b-K.b)/p,(L.matrix.c-K.c)/p,(L.matrix.d-K.d)/p,(L.matrix.e-K.e)/p,(L.matrix.f-K.f)/p]}break;case"csv":var M=I(i[y])[J](w),N=I(r[y])[J](w);if("clip-rect"==y)for(r[y]=N,t[y]=[],v=N.length;v--;)t[y][v]=(M[v]-r[y][v])/p;s[y]=M;break;default:for(M=[][E](i[y]),N=[][E](r[y]),t[y]=[],v=d.paper.customAttributes[y].length;v--;)t[y][v]=((M[v]||0)-(N[v]||0))/p}var O=i.easing,P=c.easing_formulas[O];if(!P)if(P=I(O).match(Z),P&&5==P.length){var Q=P;P=function(a){return q(a,+Q[1],+Q[2],+Q[3],+Q[4],p)}}else P=nb;if(n=i.start||a.start||+new Date,u={anim:a,percent:e,timestamp:n,start:n+(a.del||0),status:0,initstatus:f||0,stop:!1,ms:p,easing:P,from:r,diff:t,to:s,el:d,callback:i.callback,prev:m,next:l,repeat:h||a.times,origin:d.attr(),totalOrigin:g},ic.push(u),f&&!j&&!k&&(u.stop=!0,u.start=new Date-p*f,1==ic.length))return kc();k&&(u.start=new Date-u.ms*f),1==ic.length&&jc(kc)}b("raphael.anim.start."+d.id,d,a)}}function t(a){for(var b=0;be;e++)for(i=a[e],f=1,h=i.length;h>f;f+=2)c=b.x(i[f],i[f+1]),d=b.y(i[f],i[f+1]),i[f]=c,i[f+1]=d;return a};if(c._g=A,c.type=A.win.SVGAngle||A.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")?"SVG":"VML","VML"==c.type){var sb,tb=A.doc.createElement("div");if(tb.innerHTML='',sb=tb.firstChild,sb.style.behavior="url(#default#VML)",!sb||"object"!=typeof sb.adj)return c.type=G;tb=null}c.svg=!(c.vml="VML"==c.type),c._Paper=C,c.fn=v=C.prototype=c.prototype,c._id=0,c._oid=0,c.is=function(a,b){return b=M.call(b),"finite"==b?!Y[z](+a):"array"==b?a instanceof Array:"null"==b&&null===a||b==typeof a&&null!==a||"object"==b&&a===Object(a)||"array"==b&&Array.isArray&&Array.isArray(a)||W.call(a).slice(8,-1).toLowerCase()==b},c.angle=function(a,b,d,e,f,g){if(null==f){var h=a-d,i=b-e;return h||i?(180+180*N.atan2(-i,-h)/S+360)%360:0}return c.angle(a,b,f,g)-c.angle(d,e,f,g)},c.rad=function(a){return a%360*S/180},c.deg=function(a){return 180*a/S%360},c.snapTo=function(a,b,d){if(d=c.is(d,"finite")?d:10,c.is(a,V)){for(var e=a.length;e--;)if(Q(a[e]-b)<=d)return a[e]}else{a=+a;var f=b%a;if(d>f)return b-f;if(f>a-d)return b-f+a}return b},c.createUUID=function(a,b){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=0|16*N.random(),c="x"==a?b:8|3&b;return c.toString(16)}),c.setWindow=function(a){b("raphael.setWindow",c,A.win,a),A.win=a,A.doc=A.win.document,c._engine.initWin&&c._engine.initWin(A.win)};var ub=function(a){if(c.vml){var b,d=/^\s+|\s+$/g;try{var e=new ActiveXObject("htmlfile");e.write(""),e.close(),b=e.body}catch(g){b=createPopup().document.body}var h=b.createTextRange();ub=f(function(a){try{b.style.color=I(a).replace(d,G);var c=h.queryCommandValue("ForeColor");return c=(255&c)<<16|65280&c|(16711680&c)>>>16,"#"+("000000"+c.toString(16)).slice(-6)}catch(e){return"none"}})}else{var i=A.doc.createElement("i");i.title="Raphaël Colour Picker",i.style.display="none",A.doc.body.appendChild(i),ub=f(function(a){return i.style.color=a,A.doc.defaultView.getComputedStyle(i,G).getPropertyValue("color")})}return ub(a)},vb=function(){return"hsb("+[this.h,this.s,this.b]+")"},wb=function(){return"hsl("+[this.h,this.s,this.l]+")"},xb=function(){return this.hex},yb=function(a,b,d){if(null==b&&c.is(a,"object")&&"r"in a&&"g"in a&&"b"in a&&(d=a.b,b=a.g,a=a.r),null==b&&c.is(a,U)){var e=c.getRGB(a);a=e.r,b=e.g,d=e.b}return(a>1||b>1||d>1)&&(a/=255,b/=255,d/=255),[a,b,d]},zb=function(a,b,d,e){a*=255,b*=255,d*=255;var f={r:a,g:b,b:d,hex:c.rgb(a,b,d),toString:xb};return c.is(e,"finite")&&(f.opacity=e),f};c.color=function(a){var b;return c.is(a,"object")&&"h"in a&&"s"in a&&"b"in a?(b=c.hsb2rgb(a),a.r=b.r,a.g=b.g,a.b=b.b,a.hex=b.hex):c.is(a,"object")&&"h"in a&&"s"in a&&"l"in a?(b=c.hsl2rgb(a),a.r=b.r,a.g=b.g,a.b=b.b,a.hex=b.hex):(c.is(a,"string")&&(a=c.getRGB(a)),c.is(a,"object")&&"r"in a&&"g"in a&&"b"in a?(b=c.rgb2hsl(a),a.h=b.h,a.s=b.s,a.l=b.l,b=c.rgb2hsb(a),a.v=b.b):(a={hex:"none"},a.r=a.g=a.b=a.h=a.s=a.v=a.l=-1)),a.toString=xb,a},c.hsb2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,a=a.h,d=a.o),a*=360;var e,f,g,h,i;return a=a%360/60,i=c*b,h=i*(1-Q(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],zb(e,f,g,d)},c.hsl2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h),(a>1||b>1||c>1)&&(a/=360,b/=100,c/=100),a*=360;var e,f,g,h,i;return a=a%360/60,i=2*b*(.5>c?c:1-c),h=i*(1-Q(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],zb(e,f,g,d)},c.rgb2hsb=function(a,b,c){c=yb(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;return f=O(a,b,c),g=f-P(a,b,c),d=0==g?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=60*((d+360)%6)/360,e=0==g?0:g/f,{h:d,s:e,b:f,toString:vb}},c.rgb2hsl=function(a,b,c){c=yb(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;return g=O(a,b,c),h=P(a,b,c),i=g-h,d=0==i?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=60*((d+360)%6)/360,f=(g+h)/2,e=0==i?0:.5>f?i/(2*f):i/(2-2*f),{h:d,s:e,l:f,toString:wb}},c._path2string=function(){return this.join(",").replace(gb,"$1")},c._preload=function(a,b){var c=A.doc.createElement("img");c.style.cssText="position:absolute;left:-9999em;top:-9999em",c.onload=function(){b.call(this),this.onload=null,A.doc.body.removeChild(this)},c.onerror=function(){A.doc.body.removeChild(this)},A.doc.body.appendChild(c),c.src=a},c.getRGB=f(function(a){if(!a||(a=I(a)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:g};if("none"==a)return{r:-1,g:-1,b:-1,hex:"none",toString:g};!(fb[z](a.toLowerCase().substring(0,2))||"#"==a.charAt())&&(a=ub(a));var b,d,e,f,h,i,j=a.match(X);return j?(j[2]&&(e=ab(j[2].substring(5),16),d=ab(j[2].substring(3,5),16),b=ab(j[2].substring(1,3),16)),j[3]&&(e=ab((h=j[3].charAt(3))+h,16),d=ab((h=j[3].charAt(2))+h,16),b=ab((h=j[3].charAt(1))+h,16)),j[4]&&(i=j[4][J](eb),b=_(i[0]),"%"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),"rgba"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&"%"==i[3].slice(-1)&&(f/=100)),j[5]?(i=j[5][J](eb),b=_(i[0]),"%"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),("deg"==i[0].slice(-3)||"°"==i[0].slice(-1))&&(b/=360),"hsba"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&"%"==i[3].slice(-1)&&(f/=100),c.hsb2rgb(b,d,e,f)):j[6]?(i=j[6][J](eb),b=_(i[0]),"%"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),("deg"==i[0].slice(-3)||"°"==i[0].slice(-1))&&(b/=360),"hsla"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&"%"==i[3].slice(-1)&&(f/=100),c.hsl2rgb(b,d,e,f)):(j={r:b,g:d,b:e,toString:g},j.hex="#"+(16777216|e|d<<8|b<<16).toString(16).slice(1),c.is(f,"finite")&&(j.opacity=f),j)):{r:-1,g:-1,b:-1,hex:"none",error:1,toString:g}},c),c.hsb=f(function(a,b,d){return c.hsb2rgb(a,b,d).hex}),c.hsl=f(function(a,b,d){return c.hsl2rgb(a,b,d).hex}),c.rgb=f(function(a,b,c){return"#"+(16777216|c|b<<8|a<<16).toString(16).slice(1)}),c.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);return b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b})),c.hex},c.getColor.reset=function(){delete this.start},c.parsePathString=function(a){if(!a)return null;var b=Ab(a);if(b.arr)return Cb(b.arr);var d={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},e=[];return c.is(a,V)&&c.is(a[0],V)&&(e=Cb(a)),e.length||I(a).replace(hb,function(a,b,c){var f=[],g=b.toLowerCase();if(c.replace(jb,function(a,b){b&&f.push(+b)}),"m"==g&&f.length>2&&(e.push([b][E](f.splice(0,2))),g="l",b="m"==b?"l":"L"),"r"==g)e.push([b][E](f));else for(;f.length>=d[g]&&(e.push([b][E](f.splice(0,d[g]))),d[g]););}),e.toString=c._path2string,b.arr=Cb(e),e},c.parseTransformString=f(function(a){if(!a)return null;var b=[];return c.is(a,V)&&c.is(a[0],V)&&(b=Cb(a)),b.length||I(a).replace(ib,function(a,c,d){var e=[];M.call(c),d.replace(jb,function(a,b){b&&e.push(+b)}),b.push([c][E](e))}),b.toString=c._path2string,b});var Ab=function(a){var b=Ab.ps=Ab.ps||{};return b[a]?b[a].sleep=100:b[a]={sleep:100},setTimeout(function(){for(var c in b)b[z](c)&&c!=a&&(b[c].sleep--,!b[c].sleep&&delete b[c])}),b[a]};c.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=R(j,3),l=R(j,2),m=i*i,n=m*i,o=k*a+3*l*i*c+3*j*i*i*e+n*g,p=k*b+3*l*i*d+3*j*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,w=j*e+i*g,x=j*f+i*h,y=90-180*N.atan2(q-s,r-t)/S;return(q>s||t>r)&&(y+=180),{x:o,y:p,m:{x:q,y:r},n:{x:s,y:t},start:{x:u,y:v},end:{x:w,y:x},alpha:y}},c.bezierBBox=function(a,b,d,e,f,g,h,i){c.is(a,"array")||(a=[a,b,d,e,f,g,h,i]);var j=Jb.apply(null,a);return{x:j.min.x,y:j.min.y,x2:j.max.x,y2:j.max.y,width:j.max.x-j.min.x,height:j.max.y-j.min.y}},c.isPointInsideBBox=function(a,b,c){return b>=a.x&&b<=a.x2&&c>=a.y&&c<=a.y2},c.isBBoxIntersect=function(a,b){var d=c.isPointInsideBBox;return d(b,a.x,a.y)||d(b,a.x2,a.y)||d(b,a.x,a.y2)||d(b,a.x2,a.y2)||d(a,b.x,b.y)||d(a,b.x2,b.y)||d(a,b.x,b.y2)||d(a,b.x2,b.y2)||(a.xb.x||b.xa.x)&&(a.yb.y||b.ya.y)},c.pathIntersection=function(a,b){return n(a,b)},c.pathIntersectionNumber=function(a,b){return n(a,b,1)},c.isPointInsidePath=function(a,b,d){var e=c.pathBBox(a);return c.isPointInsideBBox(e,b,d)&&1==n(a,[["M",b,d],["H",e.x2+10]],1)%2},c._removedFactory=function(a){return function(){b("raphael.log",null,"Raphaël: you are calling to method “"+a+"” of removed object",a)}};var Bb=c.pathBBox=function(a){var b=Ab(a);if(b.bbox)return d(b.bbox);if(!a)return{x:0,y:0,width:0,height:0,x2:0,y2:0};a=Kb(a);for(var c,e=0,f=0,g=[],h=[],i=0,j=a.length;j>i;i++)if(c=a[i],"M"==c[0])e=c[1],f=c[2],g.push(e),h.push(f);else{var k=Jb(e,f,c[1],c[2],c[3],c[4],c[5],c[6]);g=g[E](k.min.x,k.max.x),h=h[E](k.min.y,k.max.y),e=c[5],f=c[6]}var l=P[D](0,g),m=P[D](0,h),n=O[D](0,g),o=O[D](0,h),p=n-l,q=o-m,r={x:l,y:m,x2:n,y2:o,width:p,height:q,cx:l+p/2,cy:m+q/2};return b.bbox=d(r),r},Cb=function(a){var b=d(a);return b.toString=c._path2string,b},Db=c._pathToRelative=function(a){var b=Ab(a);if(b.rel)return Cb(b.rel);c.is(a,V)&&c.is(a&&a[0],V)||(a=c.parsePathString(a));var d=[],e=0,f=0,g=0,h=0,i=0;"M"==a[0][0]&&(e=a[0][1],f=a[0][2],g=e,h=f,i++,d.push(["M",e,f]));for(var j=i,k=a.length;k>j;j++){var l=d[j]=[],m=a[j];if(m[0]!=M.call(m[0]))switch(l[0]=M.call(m[0]),l[0]){case"a":l[1]=m[1],l[2]=m[2],l[3]=m[3],l[4]=m[4],l[5]=m[5],l[6]=+(m[6]-e).toFixed(3),l[7]=+(m[7]-f).toFixed(3);break;case"v":l[1]=+(m[1]-f).toFixed(3);break;case"m":g=m[1],h=m[2];default:for(var n=1,o=m.length;o>n;n++)l[n]=+(m[n]-(n%2?e:f)).toFixed(3)}else{l=d[j]=[],"m"==m[0]&&(g=m[1]+e,h=m[2]+f);for(var p=0,q=m.length;q>p;p++)d[j][p]=m[p]}var r=d[j].length;switch(d[j][0]){case"z":e=g,f=h;break;case"h":e+=+d[j][r-1];break;case"v":f+=+d[j][r-1];break;default:e+=+d[j][r-2],f+=+d[j][r-1]}}return d.toString=c._path2string,b.rel=Cb(d),d},Eb=c._pathToAbsolute=function(a){var b=Ab(a);if(b.abs)return Cb(b.abs);if(c.is(a,V)&&c.is(a&&a[0],V)||(a=c.parsePathString(a)),!a||!a.length)return[["M",0,0]];var d=[],e=0,f=0,g=0,i=0,j=0;"M"==a[0][0]&&(e=+a[0][1],f=+a[0][2],g=e,i=f,j++,d[0]=["M",e,f]);for(var k,l,m=3==a.length&&"M"==a[0][0]&&"R"==a[1][0].toUpperCase()&&"Z"==a[2][0].toUpperCase(),n=j,o=a.length;o>n;n++){if(d.push(k=[]),l=a[n],l[0]!=bb.call(l[0]))switch(k[0]=bb.call(l[0]),k[0]){case"A":k[1]=l[1],k[2]=l[2],k[3]=l[3],k[4]=l[4],k[5]=l[5],k[6]=+(l[6]+e),k[7]=+(l[7]+f);break;case"V":k[1]=+l[1]+f;break;case"H":k[1]=+l[1]+e;break;case"R":for(var p=[e,f][E](l.slice(1)),q=2,r=p.length;r>q;q++)p[q]=+p[q]+e,p[++q]=+p[q]+f;d.pop(),d=d[E](h(p,m));break;case"M":g=+l[1]+e,i=+l[2]+f;default:for(q=1,r=l.length;r>q;q++)k[q]=+l[q]+(q%2?e:f)}else if("R"==l[0])p=[e,f][E](l.slice(1)),d.pop(),d=d[E](h(p,m)),k=["R"][E](l.slice(-2));else for(var s=0,t=l.length;t>s;s++)k[s]=l[s];switch(k[0]){case"Z":e=g,f=i;break;case"H":e=k[1];break;case"V":f=k[1];break;case"M":g=k[k.length-2],i=k[k.length-1];default:e=k[k.length-2],f=k[k.length-1]}}return d.toString=c._path2string,b.abs=Cb(d),d},Fb=function(a,b,c,d){return[a,b,c,d,c,d]},Gb=function(a,b,c,d,e,f){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*e+h*c,g*f+h*d,e,f]},Hb=function(a,b,c,d,e,g,h,i,j,k){var l,m=120*S/180,n=S/180*(+e||0),o=[],p=f(function(a,b,c){var d=a*N.cos(c)-b*N.sin(c),e=a*N.sin(c)+b*N.cos(c);return{x:d,y:e}});if(k)y=k[0],z=k[1],w=k[2],x=k[3];else{l=p(a,b,-n),a=l.x,b=l.y,l=p(i,j,-n),i=l.x,j=l.y;var q=(N.cos(S/180*e),N.sin(S/180*e),(a-i)/2),r=(b-j)/2,s=q*q/(c*c)+r*r/(d*d);s>1&&(s=N.sqrt(s),c=s*c,d=s*d);var t=c*c,u=d*d,v=(g==h?-1:1)*N.sqrt(Q((t*u-t*r*r-u*q*q)/(t*r*r+u*q*q))),w=v*c*r/d+(a+i)/2,x=v*-d*q/c+(b+j)/2,y=N.asin(((b-x)/d).toFixed(9)),z=N.asin(((j-x)/d).toFixed(9));y=w>a?S-y:y,z=w>i?S-z:z,0>y&&(y=2*S+y),0>z&&(z=2*S+z),h&&y>z&&(y-=2*S),!h&&z>y&&(z-=2*S)}var A=z-y;if(Q(A)>m){var B=z,C=i,D=j;z=y+m*(h&&z>y?1:-1),i=w+c*N.cos(z),j=x+d*N.sin(z),o=Hb(i,j,c,d,e,0,h,C,D,[z,B,w,x])}A=z-y;var F=N.cos(y),G=N.sin(y),H=N.cos(z),I=N.sin(z),K=N.tan(A/4),L=4/3*c*K,M=4/3*d*K,O=[a,b],P=[a+L*G,b-M*F],R=[i+L*I,j-M*H],T=[i,j];if(P[0]=2*O[0]-P[0],P[1]=2*O[1]-P[1],k)return[P,R,T][E](o);o=[P,R,T][E](o).join()[J](",");for(var U=[],V=0,W=o.length;W>V;V++)U[V]=V%2?p(o[V-1],o[V],n).y:p(o[V],o[V+1],n).x;return U},Ib=function(a,b,c,d,e,f,g,h,i){var j=1-i;return{x:R(j,3)*a+3*R(j,2)*i*c+3*j*i*i*e+R(i,3)*g,y:R(j,3)*b+3*R(j,2)*i*d+3*j*i*i*f+R(i,3)*h}},Jb=f(function(a,b,c,d,e,f,g,h){var i,j=e-2*c+a-(g-2*e+c),k=2*(c-a)-2*(e-c),l=a-c,m=(-k+N.sqrt(k*k-4*j*l))/2/j,n=(-k-N.sqrt(k*k-4*j*l))/2/j,o=[b,h],p=[a,g];return Q(m)>"1e12"&&(m=.5),Q(n)>"1e12"&&(n=.5),m>0&&1>m&&(i=Ib(a,b,c,d,e,f,g,h,m),p.push(i.x),o.push(i.y)),n>0&&1>n&&(i=Ib(a,b,c,d,e,f,g,h,n),p.push(i.x),o.push(i.y)),j=f-2*d+b-(h-2*f+d),k=2*(d-b)-2*(f-d),l=b-d,m=(-k+N.sqrt(k*k-4*j*l))/2/j,n=(-k-N.sqrt(k*k-4*j*l))/2/j,Q(m)>"1e12"&&(m=.5),Q(n)>"1e12"&&(n=.5),m>0&&1>m&&(i=Ib(a,b,c,d,e,f,g,h,m),p.push(i.x),o.push(i.y)),n>0&&1>n&&(i=Ib(a,b,c,d,e,f,g,h,n),p.push(i.x),o.push(i.y)),{min:{x:P[D](0,p),y:P[D](0,o)},max:{x:O[D](0,p),y:O[D](0,o)}}}),Kb=c._path2curve=f(function(a,b){var c=!b&&Ab(a);if(!b&&c.curve)return Cb(c.curve);for(var d=Eb(a),e=b&&Eb(b),f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},h=(function(a,b,c){var d,e;if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];switch(!(a[0]in{T:1,Q:1})&&(b.qx=b.qy=null),a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"][E](Hb[D](0,[b.x,b.y][E](a.slice(1))));break;case"S":"C"==c||"S"==c?(d=2*b.x-b.bx,e=2*b.y-b.by):(d=b.x,e=b.y),a=["C",d,e][E](a.slice(1));break;case"T":"Q"==c||"T"==c?(b.qx=2*b.x-b.qx,b.qy=2*b.y-b.qy):(b.qx=b.x,b.qy=b.y),a=["C"][E](Gb(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"][E](Gb(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][E](Fb(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][E](Fb(b.x,b.y,a[1],b.y));break;case"V":a=["C"][E](Fb(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][E](Fb(b.x,b.y,b.X,b.Y))}return a}),i=function(a,b){if(a[b].length>7){a[b].shift();for(var c=a[b];c.length;)a.splice(b++,0,["C"][E](c.splice(0,6)));a.splice(b,1),l=O(d.length,e&&e.length||0)}},j=function(a,b,c,f,g){a&&b&&"M"==a[g][0]&&"M"!=b[g][0]&&(b.splice(g,0,["M",f.x,f.y]),c.bx=0,c.by=0,c.x=a[g][1],c.y=a[g][2],l=O(d.length,e&&e.length||0))},k=0,l=O(d.length,e&&e.length||0);l>k;k++){d[k]=h(d[k],f),i(d,k),e&&(e[k]=h(e[k],g)),e&&i(e,k),j(d,e,f,g,k),j(e,d,g,f,k);var m=d[k],n=e&&e[k],o=m.length,p=e&&n.length;f.x=m[o-2],f.y=m[o-1],f.bx=_(m[o-4])||f.x,f.by=_(m[o-3])||f.y,g.bx=e&&(_(n[p-4])||g.x),g.by=e&&(_(n[p-3])||g.y),g.x=e&&n[p-2],g.y=e&&n[p-1]}return e||(c.curve=Cb(d)),e?[d,e]:d},null,Cb),Lb=(c._parseDots=f(function(a){for(var b=[],d=0,e=a.length;e>d;d++){var f={},g=a[d].match(/^([^:]*):?([\d\.]*)/);if(f.color=c.getRGB(g[1]),f.color.error)return null;f.color=f.color.hex,g[2]&&(f.offset=g[2]+"%"),b.push(f)}for(d=1,e=b.length-1;e>d;d++)if(!b[d].offset){for(var h=_(b[d-1].offset||0),i=0,j=d+1;e>j;j++)if(b[j].offset){i=b[j].offset;break}i||(i=100,j=e),i=_(i);for(var k=(i-h)/(j-d+1);j>d;d++)h+=k,b[d].offset=h+"%"}return b}),c._tear=function(a,b){a==b.top&&(b.top=a.prev),a==b.bottom&&(b.bottom=a.next),a.next&&(a.next.prev=a.prev),a.prev&&(a.prev.next=a.next)}),Mb=(c._tofront=function(a,b){b.top!==a&&(Lb(a,b),a.next=null,a.prev=b.top,b.top.next=a,b.top=a)},c._toback=function(a,b){b.bottom!==a&&(Lb(a,b),a.next=b.bottom,a.prev=null,b.bottom.prev=a,b.bottom=a)},c._insertafter=function(a,b,c){Lb(a,c),b==c.top&&(c.top=a),b.next&&(b.next.prev=a),a.next=b.next,a.prev=b,b.next=a},c._insertbefore=function(a,b,c){Lb(a,c),b==c.bottom&&(c.bottom=a),b.prev&&(b.prev.next=a),a.prev=b.prev,b.prev=a,a.next=b},c.toMatrix=function(a,b){var c=Bb(a),d={_:{transform:G},getBBox:function(){return c}};return Nb(d,b),d.matrix}),Nb=(c.transformPath=function(a,b){return rb(a,Mb(a,b))},c._extractTransform=function(a,b){if(null==b)return a._.transform;b=I(b).replace(/\.{3}|\u2026/g,a._.transform||G);var d=c.parseTransformString(b),e=0,f=0,g=0,h=1,i=1,j=a._,k=new o;if(j.transform=d||[],d)for(var l=0,m=d.length;m>l;l++){var n,p,q,r,s,t=d[l],u=t.length,v=I(t[0]).toLowerCase(),w=t[0]!=v,x=w?k.invert():0;"t"==v&&3==u?w?(n=x.x(0,0),p=x.y(0,0),q=x.x(t[1],t[2]),r=x.y(t[1],t[2]),k.translate(q-n,r-p)):k.translate(t[1],t[2]):"r"==v?2==u?(s=s||a.getBBox(1),k.rotate(t[1],s.x+s.width/2,s.y+s.height/2),e+=t[1]):4==u&&(w?(q=x.x(t[2],t[3]),r=x.y(t[2],t[3]),k.rotate(t[1],q,r)):k.rotate(t[1],t[2],t[3]),e+=t[1]):"s"==v?2==u||3==u?(s=s||a.getBBox(1),k.scale(t[1],t[u-1],s.x+s.width/2,s.y+s.height/2),h*=t[1],i*=t[u-1]):5==u&&(w?(q=x.x(t[3],t[4]),r=x.y(t[3],t[4]),k.scale(t[1],t[2],q,r)):k.scale(t[1],t[2],t[3],t[4]),h*=t[1],i*=t[2]):"m"==v&&7==u&&k.add(t[1],t[2],t[3],t[4],t[5],t[6]),j.dirtyT=1,a.matrix=k}a.matrix=k,j.sx=h,j.sy=i,j.deg=e,j.dx=f=k.e,j.dy=g=k.f,1==h&&1==i&&!e&&j.bbox?(j.bbox.x+=+f,j.bbox.y+=+g):j.dirtyT=1}),Ob=function(a){var b=a[0];switch(b.toLowerCase()){case"t":return[b,0,0];case"m":return[b,1,0,0,1,0,0];case"r":return 4==a.length?[b,0,a[2],a[3]]:[b,0];case"s":return 5==a.length?[b,1,1,a[3],a[4]]:3==a.length?[b,1,1]:[b,1]}},Pb=c._equaliseTransform=function(a,b){b=I(b).replace(/\.{3}|\u2026/g,a),a=c.parseTransformString(a)||[],b=c.parseTransformString(b)||[];for(var d,e,f,g,h=O(a.length,b.length),i=[],j=[],k=0;h>k;k++){if(f=a[k]||Ob(b[k]),g=b[k]||Ob(f),f[0]!=g[0]||"r"==f[0].toLowerCase()&&(f[2]!=g[2]||f[3]!=g[3])||"s"==f[0].toLowerCase()&&(f[3]!=g[3]||f[4]!=g[4]))return;for(i[k]=[],j[k]=[],d=0,e=O(f.length,g.length);e>d;d++)d in f&&(i[k][d]=f[d]),d in g&&(j[k][d]=g[d]) -}return{from:i,to:j}};c._getContainer=function(a,b,d,e){var f;return f=null!=e||c.is(a,"object")?a:A.doc.getElementById(a),null!=f?f.tagName?null==b?{container:f,width:f.style.pixelWidth||f.offsetWidth,height:f.style.pixelHeight||f.offsetHeight}:{container:f,width:b,height:d}:{container:1,x:a,y:b,width:d,height:e}:void 0},c.pathToRelative=Db,c._engine={},c.path2curve=Kb,c.matrix=function(a,b,c,d,e,f){return new o(a,b,c,d,e,f)},function(a){function b(a){return a[0]*a[0]+a[1]*a[1]}function d(a){var c=N.sqrt(b(a));a[0]&&(a[0]/=c),a[1]&&(a[1]/=c)}a.add=function(a,b,c,d,e,f){var g,h,i,j,k=[[],[],[]],l=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],m=[[a,c,e],[b,d,f],[0,0,1]];for(a&&a instanceof o&&(m=[[a.a,a.c,a.e],[a.b,a.d,a.f],[0,0,1]]),g=0;3>g;g++)for(h=0;3>h;h++){for(j=0,i=0;3>i;i++)j+=l[g][i]*m[i][h];k[g][h]=j}this.a=k[0][0],this.b=k[1][0],this.c=k[0][1],this.d=k[1][1],this.e=k[0][2],this.f=k[1][2]},a.invert=function(){var a=this,b=a.a*a.d-a.b*a.c;return new o(a.d/b,-a.b/b,-a.c/b,a.a/b,(a.c*a.f-a.d*a.e)/b,(a.b*a.e-a.a*a.f)/b)},a.clone=function(){return new o(this.a,this.b,this.c,this.d,this.e,this.f)},a.translate=function(a,b){this.add(1,0,0,1,a,b)},a.scale=function(a,b,c,d){null==b&&(b=a),(c||d)&&this.add(1,0,0,1,c,d),this.add(a,0,0,b,0,0),(c||d)&&this.add(1,0,0,1,-c,-d)},a.rotate=function(a,b,d){a=c.rad(a),b=b||0,d=d||0;var e=+N.cos(a).toFixed(9),f=+N.sin(a).toFixed(9);this.add(e,f,-f,e,b,d),this.add(1,0,0,1,-b,-d)},a.x=function(a,b){return a*this.a+b*this.c+this.e},a.y=function(a,b){return a*this.b+b*this.d+this.f},a.get=function(a){return+this[I.fromCharCode(97+a)].toFixed(4)},a.toString=function(){return c.svg?"matrix("+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+")":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()},a.toFilter=function(){return"progid:DXImageTransform.Microsoft.Matrix(M11="+this.get(0)+", M12="+this.get(2)+", M21="+this.get(1)+", M22="+this.get(3)+", Dx="+this.get(4)+", Dy="+this.get(5)+", sizingmethod='auto expand')"},a.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},a.split=function(){var a={};a.dx=this.e,a.dy=this.f;var e=[[this.a,this.c],[this.b,this.d]];a.scalex=N.sqrt(b(e[0])),d(e[0]),a.shear=e[0][0]*e[1][0]+e[0][1]*e[1][1],e[1]=[e[1][0]-e[0][0]*a.shear,e[1][1]-e[0][1]*a.shear],a.scaley=N.sqrt(b(e[1])),d(e[1]),a.shear/=a.scaley;var f=-e[0][1],g=e[1][1];return 0>g?(a.rotate=c.deg(N.acos(g)),0>f&&(a.rotate=360-a.rotate)):a.rotate=c.deg(N.asin(f)),a.isSimple=!(+a.shear.toFixed(9)||a.scalex.toFixed(9)!=a.scaley.toFixed(9)&&a.rotate),a.isSuperSimple=!+a.shear.toFixed(9)&&a.scalex.toFixed(9)==a.scaley.toFixed(9)&&!a.rotate,a.noRotation=!+a.shear.toFixed(9)&&!a.rotate,a},a.toTransformString=function(a){var b=a||this[J]();return b.isSimple?(b.scalex=+b.scalex.toFixed(4),b.scaley=+b.scaley.toFixed(4),b.rotate=+b.rotate.toFixed(4),(b.dx||b.dy?"t"+[b.dx,b.dy]:G)+(1!=b.scalex||1!=b.scaley?"s"+[b.scalex,b.scaley,0,0]:G)+(b.rotate?"r"+[b.rotate,0,0]:G)):"m"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}}(o.prototype);var Qb=navigator.userAgent.match(/Version\/(.*?)\s/)||navigator.userAgent.match(/Chrome\/(\d+)/);v.safari="Apple Computer, Inc."==navigator.vendor&&(Qb&&Qb[1]<4||"iP"==navigator.platform.slice(0,2))||"Google Inc."==navigator.vendor&&Qb&&Qb[1]<8?function(){var a=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:"none"});setTimeout(function(){a.remove()})}:mb;for(var Rb=function(){this.returnValue=!1},Sb=function(){return this.originalEvent.preventDefault()},Tb=function(){this.cancelBubble=!0},Ub=function(){return this.originalEvent.stopPropagation()},Vb=function(a){var b=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,c=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft;return{x:a.clientX+c,y:a.clientY+b}},Wb=function(){return A.doc.addEventListener?function(a,b,c,d){var e=function(a){var b=Vb(a);return c.call(d,a,b.x,b.y)};if(a.addEventListener(b,e,!1),F&&L[b]){var f=function(b){for(var e=Vb(b),f=b,g=0,h=b.targetTouches&&b.targetTouches.length;h>g;g++)if(b.targetTouches[g].target==a){b=b.targetTouches[g],b.originalEvent=f,b.preventDefault=Sb,b.stopPropagation=Ub;break}return c.call(d,b,e.x,e.y)};a.addEventListener(L[b],f,!1)}return function(){return a.removeEventListener(b,e,!1),F&&L[b]&&a.removeEventListener(L[b],e,!1),!0}}:A.doc.attachEvent?function(a,b,c,d){var e=function(a){a=a||A.win.event;var b=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,e=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft,f=a.clientX+e,g=a.clientY+b;return a.preventDefault=a.preventDefault||Rb,a.stopPropagation=a.stopPropagation||Tb,c.call(d,a,f,g)};a.attachEvent("on"+b,e);var f=function(){return a.detachEvent("on"+b,e),!0};return f}:void 0}(),Xb=[],Yb=function(a){for(var c,d=a.clientX,e=a.clientY,f=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,g=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft,h=Xb.length;h--;){if(c=Xb[h],F&&a.touches){for(var i,j=a.touches.length;j--;)if(i=a.touches[j],i.identifier==c.el._drag.id){d=i.clientX,e=i.clientY,(a.originalEvent?a.originalEvent:a).preventDefault();break}}else a.preventDefault();var k,l=c.el.node,m=l.nextSibling,n=l.parentNode,o=l.style.display;A.win.opera&&n.removeChild(l),l.style.display="none",k=c.el.paper.getElementByPoint(d,e),l.style.display=o,A.win.opera&&(m?n.insertBefore(l,m):n.appendChild(l)),k&&b("raphael.drag.over."+c.el.id,c.el,k),d+=g,e+=f,b("raphael.drag.move."+c.el.id,c.move_scope||c.el,d-c.el._drag.x,e-c.el._drag.y,d,e,a)}},Zb=function(a){c.unmousemove(Yb).unmouseup(Zb);for(var d,e=Xb.length;e--;)d=Xb[e],d.el._drag={},b("raphael.drag.end."+d.el.id,d.end_scope||d.start_scope||d.move_scope||d.el,a);Xb=[]},$b=c.el={},_b=K.length;_b--;)!function(a){c[a]=$b[a]=function(b,d){return c.is(b,"function")&&(this.events=this.events||[],this.events.push({name:a,f:b,unbind:Wb(this.shape||this.node||A.doc,a,b,d||this)})),this},c["un"+a]=$b["un"+a]=function(b){for(var d=this.events||[],e=d.length;e--;)d[e].name!=a||!c.is(b,"undefined")&&d[e].f!=b||(d[e].unbind(),d.splice(e,1),!d.length&&delete this.events);return this}}(K[_b]);$b.data=function(a,d){var e=kb[this.id]=kb[this.id]||{};if(0==arguments.length)return e;if(1==arguments.length){if(c.is(a,"object")){for(var f in a)a[z](f)&&this.data(f,a[f]);return this}return b("raphael.data.get."+this.id,this,e[a],a),e[a]}return e[a]=d,b("raphael.data.set."+this.id,this,d,a),this},$b.removeData=function(a){return null==a?kb[this.id]={}:kb[this.id]&&delete kb[this.id][a],this},$b.getData=function(){return d(kb[this.id]||{})},$b.hover=function(a,b,c,d){return this.mouseover(a,c).mouseout(b,d||c)},$b.unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};var ac=[];$b.drag=function(a,d,e,f,g,h){function i(i){(i.originalEvent||i).preventDefault();var j=i.clientX,k=i.clientY,l=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,m=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft;if(this._drag.id=i.identifier,F&&i.touches)for(var n,o=i.touches.length;o--;)if(n=i.touches[o],this._drag.id=n.identifier,n.identifier==this._drag.id){j=n.clientX,k=n.clientY;break}this._drag.x=j+m,this._drag.y=k+l,!Xb.length&&c.mousemove(Yb).mouseup(Zb),Xb.push({el:this,move_scope:f,start_scope:g,end_scope:h}),d&&b.on("raphael.drag.start."+this.id,d),a&&b.on("raphael.drag.move."+this.id,a),e&&b.on("raphael.drag.end."+this.id,e),b("raphael.drag.start."+this.id,g||f||this,i.clientX+m,i.clientY+l,i)}return this._drag={},ac.push({el:this,start:i}),this.mousedown(i),this},$b.onDragOver=function(a){a?b.on("raphael.drag.over."+this.id,a):b.unbind("raphael.drag.over."+this.id)},$b.undrag=function(){for(var a=ac.length;a--;)ac[a].el==this&&(this.unmousedown(ac[a].start),ac.splice(a,1),b.unbind("raphael.drag.*."+this.id));!ac.length&&c.unmousemove(Yb).unmouseup(Zb),Xb=[]},v.circle=function(a,b,d){var e=c._engine.circle(this,a||0,b||0,d||0);return this.__set__&&this.__set__.push(e),e},v.rect=function(a,b,d,e,f){var g=c._engine.rect(this,a||0,b||0,d||0,e||0,f||0);return this.__set__&&this.__set__.push(g),g},v.ellipse=function(a,b,d,e){var f=c._engine.ellipse(this,a||0,b||0,d||0,e||0);return this.__set__&&this.__set__.push(f),f},v.path=function(a){a&&!c.is(a,U)&&!c.is(a[0],V)&&(a+=G);var b=c._engine.path(c.format[D](c,arguments),this);return this.__set__&&this.__set__.push(b),b},v.image=function(a,b,d,e,f){var g=c._engine.image(this,a||"about:blank",b||0,d||0,e||0,f||0);return this.__set__&&this.__set__.push(g),g},v.text=function(a,b,d){var e=c._engine.text(this,a||0,b||0,I(d));return this.__set__&&this.__set__.push(e),e},v.set=function(a){!c.is(a,"array")&&(a=Array.prototype.splice.call(arguments,0,arguments.length));var b=new mc(a);return this.__set__&&this.__set__.push(b),b.paper=this,b.type="set",b},v.setStart=function(a){this.__set__=a||this.set()},v.setFinish=function(){var a=this.__set__;return delete this.__set__,a},v.setSize=function(a,b){return c._engine.setSize.call(this,a,b)},v.setViewBox=function(a,b,d,e,f){return c._engine.setViewBox.call(this,a,b,d,e,f)},v.top=v.bottom=null,v.raphael=c;var bc=function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument,d=c.body,e=c.documentElement,f=e.clientTop||d.clientTop||0,g=e.clientLeft||d.clientLeft||0,h=b.top+(A.win.pageYOffset||e.scrollTop||d.scrollTop)-f,i=b.left+(A.win.pageXOffset||e.scrollLeft||d.scrollLeft)-g;return{y:h,x:i}};v.getElementByPoint=function(a,b){var c=this,d=c.canvas,e=A.doc.elementFromPoint(a,b);if(A.win.opera&&"svg"==e.tagName){var f=bc(d),g=d.createSVGRect();g.x=a-f.x,g.y=b-f.y,g.width=g.height=1;var h=d.getIntersectionList(g,null);h.length&&(e=h[h.length-1])}if(!e)return null;for(;e.parentNode&&e!=d.parentNode&&!e.raphael;)e=e.parentNode;return e==c.canvas.parentNode&&(e=d),e=e&&e.raphael?c.getById(e.raphaelid):null},v.getElementsByBBox=function(a){var b=this.set();return this.forEach(function(d){c.isBBoxIntersect(d.getBBox(),a)&&b.push(d)}),b},v.getById=function(a){for(var b=this.bottom;b;){if(b.id==a)return b;b=b.next}return null},v.forEach=function(a,b){for(var c=this.bottom;c;){if(a.call(b,c)===!1)return this;c=c.next}return this},v.getElementsByPoint=function(a,b){var c=this.set();return this.forEach(function(d){d.isPointInside(a,b)&&c.push(d)}),c},$b.isPointInside=function(a,b){var d=this.realPath=qb[this.type](this);return this.attr("transform")&&this.attr("transform").length&&(d=c.transformPath(d,this.attr("transform"))),c.isPointInsidePath(d,a,b)},$b.getBBox=function(a){if(this.removed)return{};var b=this._;return a?((b.dirty||!b.bboxwt)&&(this.realPath=qb[this.type](this),b.bboxwt=Bb(this.realPath),b.bboxwt.toString=p,b.dirty=0),b.bboxwt):((b.dirty||b.dirtyT||!b.bbox)&&((b.dirty||!this.realPath)&&(b.bboxwt=0,this.realPath=qb[this.type](this)),b.bbox=Bb(rb(this.realPath,this.matrix)),b.bbox.toString=p,b.dirty=b.dirtyT=0),b.bbox)},$b.clone=function(){if(this.removed)return null;var a=this.paper[this.type]().attr(this.attr());return this.__set__&&this.__set__.push(a),a},$b.glow=function(a){if("text"==this.type)return null;a=a||{};var b={width:(a.width||10)+(+this.attr("stroke-width")||1),fill:a.fill||!1,opacity:a.opacity||.5,offsetx:a.offsetx||0,offsety:a.offsety||0,color:a.color||"#000"},c=b.width/2,d=this.paper,e=d.set(),f=this.realPath||qb[this.type](this);f=this.matrix?rb(f,this.matrix):f;for(var g=1;c+1>g;g++)e.push(d.path(f).attr({stroke:b.color,fill:b.fill?b.color:"none","stroke-linejoin":"round","stroke-linecap":"round","stroke-width":+(b.width/c*g).toFixed(3),opacity:+(b.opacity/c).toFixed(3)}));return e.insertBefore(this).translate(b.offsetx,b.offsety)};var cc=function(a,b,d,e,f,g,h,i,l){return null==l?j(a,b,d,e,f,g,h,i):c.findDotsAtSegment(a,b,d,e,f,g,h,i,k(a,b,d,e,f,g,h,i,l))},dc=function(a,b){return function(d,e,f){d=Kb(d);for(var g,h,i,j,k,l="",m={},n=0,o=0,p=d.length;p>o;o++){if(i=d[o],"M"==i[0])g=+i[1],h=+i[2];else{if(j=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6]),n+j>e){if(b&&!m.start){if(k=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),l+=["C"+k.start.x,k.start.y,k.m.x,k.m.y,k.x,k.y],f)return l;m.start=l,l=["M"+k.x,k.y+"C"+k.n.x,k.n.y,k.end.x,k.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!a&&!b)return k=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),{x:k.x,y:k.y,alpha:k.alpha}}n+=j,g=+i[5],h=+i[6]}l+=i.shift()+i}return m.end=l,k=a?n:b?m:c.findDotsAtSegment(g,h,i[0],i[1],i[2],i[3],i[4],i[5],1),k.alpha&&(k={x:k.x,y:k.y,alpha:k.alpha}),k}},ec=dc(1),fc=dc(),gc=dc(0,1);c.getTotalLength=ec,c.getPointAtLength=fc,c.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6)return gc(a,b).end;var d=gc(a,c,1);return b?gc(d,b).end:d},$b.getTotalLength=function(){var a=this.getPath();if(a)return this.node.getTotalLength?this.node.getTotalLength():ec(a)},$b.getPointAtLength=function(a){var b=this.getPath();if(b)return fc(b,a)},$b.getPath=function(){var a,b=c._getPath[this.type];if("text"!=this.type&&"set"!=this.type)return b&&(a=b(this)),a},$b.getSubpath=function(a,b){var d=this.getPath();if(d)return c.getSubpath(d,a,b)};var hc=c.easing_formulas={linear:function(a){return a},"<":function(a){return R(a,1.7)},">":function(a){return R(a,.48)},"<>":function(a){var b=.48-a/1.04,c=N.sqrt(.1734+b*b),d=c-b,e=R(Q(d),1/3)*(0>d?-1:1),f=-c-b,g=R(Q(f),1/3)*(0>f?-1:1),h=e+g+.5;return 3*(1-h)*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a-=1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){return a==!!a?a:R(2,-10*a)*N.sin((a-.075)*2*S/.3)+1},bounce:function(a){var b,c=7.5625,d=2.75;return 1/d>a?b=c*a*a:2/d>a?(a-=1.5/d,b=c*a*a+.75):2.5/d>a?(a-=2.25/d,b=c*a*a+.9375):(a-=2.625/d,b=c*a*a+.984375),b}};hc.easeIn=hc["ease-in"]=hc["<"],hc.easeOut=hc["ease-out"]=hc[">"],hc.easeInOut=hc["ease-in-out"]=hc["<>"],hc["back-in"]=hc.backIn,hc["back-out"]=hc.backOut;var ic=[],jc=a.requestAnimationFrame||a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame||a.msRequestAnimationFrame||function(a){setTimeout(a,16)},kc=function(){for(var a=+new Date,d=0;dh))if(i>h){var q=j(h/i);for(var r in k)if(k[z](r)){switch(db[r]){case T:f=+k[r]+q*i*l[r];break;case"colour":f="rgb("+[lc($(k[r].r+q*i*l[r].r)),lc($(k[r].g+q*i*l[r].g)),lc($(k[r].b+q*i*l[r].b))].join(",")+")";break;case"path":f=[];for(var t=0,u=k[r].length;u>t;t++){f[t]=[k[r][t][0]];for(var v=1,w=k[r][t].length;w>v;v++)f[t][v]=+k[r][t][v]+q*i*l[r][t][v];f[t]=f[t].join(H)}f=f.join(H);break;case"transform":if(l[r].real)for(f=[],t=0,u=k[r].length;u>t;t++)for(f[t]=[k[r][t][0]],v=1,w=k[r][t].length;w>v;v++)f[t][v]=k[r][t][v]+q*i*l[r][t][v];else{var x=function(a){return+k[r][a]+q*i*l[r][a]};f=[["m",x(0),x(1),x(2),x(3),x(4),x(5)]]}break;case"csv":if("clip-rect"==r)for(f=[],t=4;t--;)f[t]=+k[r][t]+q*i*l[r][t];break;default:var y=[][E](k[r]);for(f=[],t=n.paper.customAttributes[r].length;t--;)f[t]=+y[t]+q*i*l[r][t]}o[r]=f}n.attr(o),function(a,c,d){setTimeout(function(){b("raphael.anim.frame."+a,c,d)})}(n.id,n,e.anim)}else{if(function(a,d,e){setTimeout(function(){b("raphael.anim.frame."+d.id,d,e),b("raphael.anim.finish."+d.id,d,e),c.is(a,"function")&&a.call(d)})}(e.callback,n,e.anim),n.attr(m),ic.splice(d--,1),e.repeat>1&&!e.next){for(g in m)m[z](g)&&(p[g]=e.totalOrigin[g]);e.el.attr(p),s(e.anim,e.el,e.anim.percents[0],null,e.totalOrigin,e.repeat-1)}e.next&&!e.stop&&s(e.anim,e.el,e.next,null,e.totalOrigin,e.repeat)}}}c.svg&&n&&n.paper&&n.paper.safari(),ic.length&&jc(kc)},lc=function(a){return a>255?255:0>a?0:a};$b.animateWith=function(a,b,d,e,f,g){var h=this;if(h.removed)return g&&g.call(h),h;var i=d instanceof r?d:c.animation(d,e,f,g);s(i,h,i.percents[0],null,h.attr());for(var j=0,k=ic.length;k>j;j++)if(ic[j].anim==b&&ic[j].el==a){ic[k-1].start=ic[j].start;break}return h},$b.onAnimation=function(a){return a?b.on("raphael.anim.frame."+this.id,a):b.unbind("raphael.anim.frame."+this.id),this},r.prototype.delay=function(a){var b=new r(this.anim,this.ms);return b.times=this.times,b.del=+a||0,b},r.prototype.repeat=function(a){var b=new r(this.anim,this.ms);return b.del=this.del,b.times=N.floor(O(a,0))||1,b},c.animation=function(a,b,d,e){if(a instanceof r)return a;(c.is(d,"function")||!d)&&(e=e||d||null,d=null),a=Object(a),b=+b||0;var f,g,h={};for(g in a)a[z](g)&&_(g)!=g&&_(g)+"%"!=g&&(f=!0,h[g]=a[g]);return f?(d&&(h.easing=d),e&&(h.callback=e),new r({100:h},b)):new r(a,b)},$b.animate=function(a,b,d,e){var f=this;if(f.removed)return e&&e.call(f),f;var g=a instanceof r?a:c.animation(a,b,d,e);return s(g,f,g.percents[0],null,f.attr()),f},$b.setTime=function(a,b){return a&&null!=b&&this.status(a,P(b,a.ms)/a.ms),this},$b.status=function(a,b){var c,d,e=[],f=0;if(null!=b)return s(a,this,-1,P(b,1)),this;for(c=ic.length;c>f;f++)if(d=ic[f],d.el.id==this.id&&(!a||d.anim==a)){if(a)return d.status;e.push({anim:d.anim,status:d.status})}return a?0:e},$b.pause=function(a){for(var c=0;cb;b++)!a[b]||a[b].constructor!=$b.constructor&&a[b].constructor!=mc||(this[this.items.length]=this.items[this.items.length]=a[b],this.length++)},nc=mc.prototype;nc.push=function(){for(var a,b,c=0,d=arguments.length;d>c;c++)a=arguments[c],!a||a.constructor!=$b.constructor&&a.constructor!=mc||(b=this.items.length,this[b]=this.items[b]=a,this.length++);return this},nc.pop=function(){return this.length&&delete this[this.length--],this.items.pop()},nc.forEach=function(a,b){for(var c=0,d=this.items.length;d>c;c++)if(a.call(b,this.items[c],c)===!1)return this;return this};for(var oc in $b)$b[z](oc)&&(nc[oc]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a][D](c,b)})}}(oc));return nc.attr=function(a,b){if(a&&c.is(a,V)&&c.is(a[0],"object"))for(var d=0,e=a.length;e>d;d++)this.items[d].attr(a[d]);else for(var f=0,g=this.items.length;g>f;f++)this.items[f].attr(a,b);return this},nc.clear=function(){for(;this.length;)this.pop()},nc.splice=function(a,b){a=0>a?O(this.length+a,0):a,b=O(0,P(this.length-a,b));var c,d=[],e=[],f=[];for(c=2;cc;c++)e.push(this[a+c]);for(;cc?f[c]:d[c-g];for(c=this.items.length=this.length-=b-g;this[c];)delete this[c++];return new mc(e)},nc.exclude=function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]==a)return this.splice(b,1),!0},nc.animate=function(a,b,d,e){(c.is(d,"function")||!d)&&(e=d||null);var f,g,h=this.items.length,i=h,j=this;if(!h)return this;e&&(g=function(){!--h&&e.call(j)}),d=c.is(d,U)?d:g;var k=c.animation(a,b,d,g);for(f=this.items[--i].animate(k);i--;)this.items[i]&&!this.items[i].removed&&this.items[i].animateWith(f,k,k),this.items[i]&&!this.items[i].removed||h--;return this},nc.insertAfter=function(a){for(var b=this.items.length;b--;)this.items[b].insertAfter(a);return this},nc.getBBox=function(){for(var a=[],b=[],c=[],d=[],e=this.items.length;e--;)if(!this.items[e].removed){var f=this.items[e].getBBox();a.push(f.x),b.push(f.y),c.push(f.x+f.width),d.push(f.y+f.height)}return a=P[D](0,a),b=P[D](0,b),c=O[D](0,c),d=O[D](0,d),{x:a,y:b,x2:c,y2:d,width:c-a,height:d-b}},nc.clone=function(a){a=this.paper.set();for(var b=0,c=this.items.length;c>b;b++)a.push(this.items[b].clone());return a},nc.toString=function(){return"Raphaël‘s set"},nc.glow=function(a){var b=this.paper.set();return this.forEach(function(c){var d=c.glow(a);null!=d&&d.forEach(function(a){b.push(a)})}),b},nc.isPointInside=function(a,b){var c=!1;return this.forEach(function(d){return d.isPointInside(a,b)?(console.log("runned"),c=!0,!1):void 0}),c},c.registerFont=function(a){if(!a.face)return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face["font-family"];for(var d in a.face)a.face[z](d)&&(b.face[d]=a.face[d]);if(this.fonts[c]?this.fonts[c].push(b):this.fonts[c]=[b],!a.svg){b.face["units-per-em"]=ab(a.face["units-per-em"],10);for(var e in a.glyphs)if(a.glyphs[z](e)){var f=a.glyphs[e];if(b.glyphs[e]={w:f.w,k:{},d:f.d&&"M"+f.d.replace(/[mlcxtrv]/g,function(a){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[a]||"M"})+"z"},f.k)for(var g in f.k)f[z](g)&&(b.glyphs[e].k[g]=f.k[g])}}return a},v.getFont=function(a,b,d,e){if(e=e||"normal",d=d||"normal",b=+b||{normal:400,bold:700,lighter:300,bolder:800}[b]||400,c.fonts){var f=c.fonts[a];if(!f){var g=new RegExp("(^|\\s)"+a.replace(/[^\w\d\s+!~.:_-]/g,G)+"(\\s|$)","i");for(var h in c.fonts)if(c.fonts[z](h)&&g.test(h)){f=c.fonts[h];break}}var i;if(f)for(var j=0,k=f.length;k>j&&(i=f[j],i.face["font-weight"]!=b||i.face["font-style"]!=d&&i.face["font-style"]||i.face["font-stretch"]!=e);j++);return i}},v.print=function(a,b,d,e,f,g,h,i){g=g||"middle",h=O(P(h||0,1),-1),i=O(P(i||1,3),1);var j,k=I(d)[J](G),l=0,m=0,n=G;if(c.is(e,"string")&&(e=this.getFont(e)),e){j=(f||16)/e.face["units-per-em"];for(var o=e.face.bbox[J](w),p=+o[0],q=o[3]-o[1],r=0,s=+o[1]+("baseline"==g?q+ +e.face.descent:q/2),t=0,u=k.length;u>t;t++){if("\n"==k[t])l=0,x=0,m=0,r+=q*i;else{var v=m&&e.glyphs[k[t-1]]||{},x=e.glyphs[k[t]];l+=m?(v.w||e.w)+(v.k&&v.k[k[t]]||0)+e.w*h:0,m=1}x&&x.d&&(n+=c.transformPath(x.d,["t",l*j,r*j,"s",j,j,p,s,"t",(a-p)/j,(b-s)/j]))}}return this.path(n).attr({fill:"#000",stroke:"none"})},v.add=function(a){if(c.is(a,"array"))for(var b,d=this.set(),e=0,f=a.length;f>e;e++)b=a[e]||{},x[z](b.type)&&d.push(this[b.type]().attr(b));return d},c.format=function(a,b){var d=c.is(b,V)?[0][E](b):arguments;return a&&c.is(a,U)&&d.length-1&&(a=a.replace(y,function(a,b){return null==d[++b]?G:d[b]})),a||G},c.fullfill=function(){var a=/\{([^\}]+)\}/g,b=/(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g,c=function(a,c,d){var e=d;return c.replace(b,function(a,b,c,d,f){b=b||d,e&&(b in e&&(e=e[b]),"function"==typeof e&&f&&(e=e()))}),e=(null==e||e==d?a:e)+""};return function(b,d){return String(b).replace(a,function(a,b){return c(a,b,d)})}}(),c.ninja=function(){return B.was?A.win.Raphael=B.is:delete Raphael,c},c.st=nc,function(a,b,d){function e(){/in/.test(a.readyState)?setTimeout(e,9):c.eve("raphael.DOMload")}null==a.readyState&&a.addEventListener&&(a.addEventListener(b,d=function(){a.removeEventListener(b,d,!1),a.readyState="complete"},!1),a.readyState="loading"),e()}(document,"DOMContentLoaded"),b.on("raphael.DOMload",function(){u=!0}),function(){if(c.svg){var a="hasOwnProperty",b=String,d=parseFloat,e=parseInt,f=Math,g=f.max,h=f.abs,i=f.pow,j=/[, ]+/,k=c.eve,l="",m=" ",n="http://www.w3.org/1999/xlink",o={block:"M5,0 0,2.5 5,5z",classic:"M5,0 0,2.5 5,5 3.5,3 3.5,2z",diamond:"M2.5,0 5,2.5 2.5,5 0,2.5z",open:"M6,1 1,3.5 6,6",oval:"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z"},p={};c.toString=function(){return"Your browser supports SVG.\nYou are running Raphaël "+this.version};var q=function(d,e){if(e){"string"==typeof d&&(d=q(d));for(var f in e)e[a](f)&&("xlink:"==f.substring(0,6)?d.setAttributeNS(n,f.substring(6),b(e[f])):d.setAttribute(f,b(e[f])))}else d=c._g.doc.createElementNS("http://www.w3.org/2000/svg",d),d.style&&(d.style.webkitTapHighlightColor="rgba(0,0,0,0)");return d},r=function(a,e){var j="linear",k=a.id+e,m=.5,n=.5,o=a.node,p=a.paper,r=o.style,s=c._g.doc.getElementById(k);if(!s){if(e=b(e).replace(c._radial_gradient,function(a,b,c){if(j="radial",b&&c){m=d(b),n=d(c);var e=2*(n>.5)-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&.5!=n&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\s*\-\s*/),"linear"==j){var t=e.shift();if(t=-d(t),isNaN(t))return null;var u=[0,0,f.cos(c.rad(t)),f.sin(c.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=c._parseDots(e);if(!w)return null;if(k=k.replace(/[\(\)\s,\xb0#]/g,"_"),a.gradient&&k!=a.gradient.id&&(p.defs.removeChild(a.gradient),delete a.gradient),!a.gradient){s=q(j+"Gradient",{id:k}),a.gradient=s,q(s,"radial"==j?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:a.matrix.invert()}),p.defs.appendChild(s);for(var x=0,y=w.length;y>x;x++)s.appendChild(q("stop",{offset:w[x].offset?w[x].offset:x?"100%":"0%","stop-color":w[x].color||"#fff"}))}}return q(o,{fill:"url(#"+k+")",opacity:1,"fill-opacity":1}),r.fill=l,r.opacity=1,r.fillOpacity=1,1},s=function(a){var b=a.getBBox(1);q(a.pattern,{patternTransform:a.matrix.invert()+" translate("+b.x+","+b.y+")"})},t=function(d,e,f){if("path"==d.type){for(var g,h,i,j,k,m=b(e).toLowerCase().split("-"),n=d.paper,r=f?"end":"start",s=d.node,t=d.attrs,u=t["stroke-width"],v=m.length,w="classic",x=3,y=3,z=5;v--;)switch(m[v]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":w=m[v];break;case"wide":y=5;break;case"narrow":y=2;break;case"long":x=5;break;case"short":x=2}if("open"==w?(x+=2,y+=2,z+=2,i=1,j=f?4:1,k={fill:"none",stroke:t.stroke}):(j=i=x/2,k={fill:t.stroke,stroke:"none"}),d._.arrows?f?(d._.arrows.endPath&&p[d._.arrows.endPath]--,d._.arrows.endMarker&&p[d._.arrows.endMarker]--):(d._.arrows.startPath&&p[d._.arrows.startPath]--,d._.arrows.startMarker&&p[d._.arrows.startMarker]--):d._.arrows={},"none"!=w){var A="raphael-marker-"+w,B="raphael-marker-"+r+w+x+y;c._g.doc.getElementById(A)?p[A]++:(n.defs.appendChild(q(q("path"),{"stroke-linecap":"round",d:o[w],id:A})),p[A]=1);var C,D=c._g.doc.getElementById(B);D?(p[B]++,C=D.getElementsByTagName("use")[0]):(D=q(q("marker"),{id:B,markerHeight:y,markerWidth:x,orient:"auto",refX:j,refY:y/2}),C=q(q("use"),{"xlink:href":"#"+A,transform:(f?"rotate(180 "+x/2+" "+y/2+") ":l)+"scale("+x/z+","+y/z+")","stroke-width":(1/((x/z+y/z)/2)).toFixed(4)}),D.appendChild(C),n.defs.appendChild(D),p[B]=1),q(C,k);var E=i*("diamond"!=w&&"oval"!=w);f?(g=d._.arrows.startdx*u||0,h=c.getTotalLength(t.path)-E*u):(g=E*u,h=c.getTotalLength(t.path)-(d._.arrows.enddx*u||0)),k={},k["marker-"+r]="url(#"+B+")",(h||g)&&(k.d=c.getSubpath(t.path,g,h)),q(s,k),d._.arrows[r+"Path"]=A,d._.arrows[r+"Marker"]=B,d._.arrows[r+"dx"]=E,d._.arrows[r+"Type"]=w,d._.arrows[r+"String"]=e}else f?(g=d._.arrows.startdx*u||0,h=c.getTotalLength(t.path)-g):(g=0,h=c.getTotalLength(t.path)-(d._.arrows.enddx*u||0)),d._.arrows[r+"Path"]&&q(s,{d:c.getSubpath(t.path,g,h)}),delete d._.arrows[r+"Path"],delete d._.arrows[r+"Marker"],delete d._.arrows[r+"dx"],delete d._.arrows[r+"Type"],delete d._.arrows[r+"String"];for(k in p)if(p[a](k)&&!p[k]){var F=c._g.doc.getElementById(k);F&&F.parentNode.removeChild(F)}}},u={"":[0],none:[0],"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},v=function(a,c,d){if(c=u[b(c).toLowerCase()]){for(var e=a.attrs["stroke-width"]||"1",f={round:e,square:e,butt:0}[a.attrs["stroke-linecap"]||d["stroke-linecap"]]||0,g=[],h=c.length;h--;)g[h]=c[h]*e+(h%2?1:-1)*f;q(a.node,{"stroke-dasharray":g.join(",")})}},w=function(d,f){var i=d.node,k=d.attrs,m=i.style.visibility;i.style.visibility="hidden";for(var o in f)if(f[a](o)){if(!c._availableAttrs[a](o))continue;var p=f[o];switch(k[o]=p,o){case"blur":d.blur(p);break;case"href":case"title":var u=q("title"),w=c._g.doc.createTextNode(p);u.appendChild(w),i.appendChild(u);break;case"target":var x=i.parentNode;if("a"!=x.tagName.toLowerCase()){var u=q("a");x.insertBefore(u,i),u.appendChild(i),x=u}"target"==o?x.setAttributeNS(n,"show","blank"==p?"new":p):x.setAttributeNS(n,o,p);break;case"cursor":i.style.cursor=p;break;case"transform":d.transform(p);break;case"arrow-start":t(d,p);break;case"arrow-end":t(d,p,1);break;case"clip-rect":var z=b(p).split(j);if(4==z.length){d.clip&&d.clip.parentNode.parentNode.removeChild(d.clip.parentNode);var A=q("clipPath"),B=q("rect");A.id=c.createUUID(),q(B,{x:z[0],y:z[1],width:z[2],height:z[3]}),A.appendChild(B),d.paper.defs.appendChild(A),q(i,{"clip-path":"url(#"+A.id+")"}),d.clip=B}if(!p){var C=i.getAttribute("clip-path");if(C){var D=c._g.doc.getElementById(C.replace(/(^url\(#|\)$)/g,l));D&&D.parentNode.removeChild(D),q(i,{"clip-path":l}),delete d.clip}}break;case"path":"path"==d.type&&(q(i,{d:p?k.path=c._pathToAbsolute(p):"M0,0"}),d._.dirty=1,d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1)));break;case"width":if(i.setAttribute(o,p),d._.dirty=1,!k.fx)break;o="x",p=k.x;case"x":k.fx&&(p=-k.x-(k.width||0));case"rx":if("rx"==o&&"rect"==d.type)break;case"cx":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case"height":if(i.setAttribute(o,p),d._.dirty=1,!k.fy)break;o="y",p=k.y;case"y":k.fy&&(p=-k.y-(k.height||0));case"ry":if("ry"==o&&"rect"==d.type)break;case"cy":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case"r":"rect"==d.type?q(i,{rx:p,ry:p}):i.setAttribute(o,p),d._.dirty=1;break;case"src":"image"==d.type&&i.setAttributeNS(n,"href",p);break;case"stroke-width":(1!=d._.sx||1!=d._.sy)&&(p/=g(h(d._.sx),h(d._.sy))||1),d.paper._vbSize&&(p*=d.paper._vbSize),i.setAttribute(o,p),k["stroke-dasharray"]&&v(d,k["stroke-dasharray"],f),d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"stroke-dasharray":v(d,p,f);break;case"fill":var E=b(p).match(c._ISURL);if(E){A=q("pattern");var F=q("image");A.id=c.createUUID(),q(A,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1}),q(F,{x:0,y:0,"xlink:href":E[1]}),A.appendChild(F),function(a){c._preload(E[1],function(){var b=this.offsetWidth,c=this.offsetHeight;q(a,{width:b,height:c}),q(F,{width:b,height:c}),d.paper.safari()})}(A),d.paper.defs.appendChild(A),q(i,{fill:"url(#"+A.id+")"}),d.pattern=A,d.pattern&&s(d);break}var G=c.getRGB(p);if(G.error){if(("circle"==d.type||"ellipse"==d.type||"r"!=b(p).charAt())&&r(d,p)){if("opacity"in k||"fill-opacity"in k){var H=c._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l));if(H){var I=H.getElementsByTagName("stop");q(I[I.length-1],{"stop-opacity":("opacity"in k?k.opacity:1)*("fill-opacity"in k?k["fill-opacity"]:1)})}}k.gradient=p,k.fill="none";break}}else delete f.gradient,delete k.gradient,!c.is(k.opacity,"undefined")&&c.is(f.opacity,"undefined")&&q(i,{opacity:k.opacity}),!c.is(k["fill-opacity"],"undefined")&&c.is(f["fill-opacity"],"undefined")&&q(i,{"fill-opacity":k["fill-opacity"]});G[a]("opacity")&&q(i,{"fill-opacity":G.opacity>1?G.opacity/100:G.opacity});case"stroke":G=c.getRGB(p),i.setAttribute(o,G.hex),"stroke"==o&&G[a]("opacity")&&q(i,{"stroke-opacity":G.opacity>1?G.opacity/100:G.opacity}),"stroke"==o&&d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"gradient":("circle"==d.type||"ellipse"==d.type||"r"!=b(p).charAt())&&r(d,p);break;case"opacity":k.gradient&&!k[a]("stroke-opacity")&&q(i,{"stroke-opacity":p>1?p/100:p});case"fill-opacity":if(k.gradient){H=c._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l)),H&&(I=H.getElementsByTagName("stop"),q(I[I.length-1],{"stop-opacity":p}));break}default:"font-size"==o&&(p=e(p,10)+"px");var J=o.replace(/(\-.)/g,function(a){return a.substring(1).toUpperCase()});i.style[J]=p,d._.dirty=1,i.setAttribute(o,p)}}y(d,f),i.style.visibility=m},x=1.2,y=function(d,f){if("text"==d.type&&(f[a]("text")||f[a]("font")||f[a]("font-size")||f[a]("x")||f[a]("y"))){var g=d.attrs,h=d.node,i=h.firstChild?e(c._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue("font-size"),10):10; -if(f[a]("text")){for(g.text=f.text;h.firstChild;)h.removeChild(h.firstChild);for(var j,k=b(f.text).split("\n"),m=[],n=0,o=k.length;o>n;n++)j=q("tspan"),n&&q(j,{dy:i*x,x:g.x}),j.appendChild(c._g.doc.createTextNode(k[n])),h.appendChild(j),m[n]=j}else for(m=h.getElementsByTagName("tspan"),n=0,o=m.length;o>n;n++)n?q(m[n],{dy:i*x,x:g.x}):q(m[0],{dy:0});q(h,{x:g.x,y:g.y}),d._.dirty=1;var p=d._getBBox(),r=g.y-(p.y+p.height/2);r&&c.is(r,"finite")&&q(m[0],{dy:r})}},z=function(a,b){this[0]=this.node=a,a.raphael=!0,this.id=c._oid++,a.raphaelid=this.id,this.matrix=c.matrix(),this.realPath=null,this.paper=b,this.attrs=this.attrs||{},this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1},!b.bottom&&(b.bottom=this),this.prev=b.top,b.top&&(b.top.next=this),b.top=this,this.next=null},A=c.el;z.prototype=A,A.constructor=z,c._engine.path=function(a,b){var c=q("path");b.canvas&&b.canvas.appendChild(c);var d=new z(c,b);return d.type="path",w(d,{fill:"none",stroke:"#000",path:a}),d},A.rotate=function(a,c,e){if(this.removed)return this;if(a=b(a).split(j),a.length-1&&(c=d(a[1]),e=d(a[2])),a=d(a[0]),null==e&&(c=e),null==c||null==e){var f=this.getBBox(1);c=f.x+f.width/2,e=f.y+f.height/2}return this.transform(this._.transform.concat([["r",a,c,e]])),this},A.scale=function(a,c,e,f){if(this.removed)return this;if(a=b(a).split(j),a.length-1&&(c=d(a[1]),e=d(a[2]),f=d(a[3])),a=d(a[0]),null==c&&(c=a),null==f&&(e=f),null==e||null==f)var g=this.getBBox(1);return e=null==e?g.x+g.width/2:e,f=null==f?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,c,e,f]])),this},A.translate=function(a,c){return this.removed?this:(a=b(a).split(j),a.length-1&&(c=d(a[1])),a=d(a[0])||0,c=+c||0,this.transform(this._.transform.concat([["t",a,c]])),this)},A.transform=function(b){var d=this._;if(null==b)return d.transform;if(c._extractTransform(this,b),this.clip&&q(this.clip,{transform:this.matrix.invert()}),this.pattern&&s(this),this.node&&q(this.node,{transform:this.matrix}),1!=d.sx||1!=d.sy){var e=this.attrs[a]("stroke-width")?this.attrs["stroke-width"]:1;this.attr({"stroke-width":e})}return this},A.hide=function(){return!this.removed&&this.paper.safari(this.node.style.display="none"),this},A.show=function(){return!this.removed&&this.paper.safari(this.node.style.display=""),this},A.remove=function(){if(!this.removed&&this.node.parentNode){var a=this.paper;a.__set__&&a.__set__.exclude(this),k.unbind("raphael.*.*."+this.id),this.gradient&&a.defs.removeChild(this.gradient),c._tear(this,a),"a"==this.node.parentNode.tagName.toLowerCase()?this.node.parentNode.parentNode.removeChild(this.node.parentNode):this.node.parentNode.removeChild(this.node);for(var b in this)this[b]="function"==typeof this[b]?c._removedFactory(b):null;this.removed=!0}},A._getBBox=function(){if("none"==this.node.style.display){this.show();var a=!0}var b={};try{b=this.node.getBBox()}catch(c){}finally{b=b||{}}return a&&this.hide(),b},A.attr=function(b,d){if(this.removed)return this;if(null==b){var e={};for(var f in this.attrs)this.attrs[a](f)&&(e[f]=this.attrs[f]);return e.gradient&&"none"==e.fill&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform,e}if(null==d&&c.is(b,"string")){if("fill"==b&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;if("transform"==b)return this._.transform;for(var g=b.split(j),h={},i=0,l=g.length;l>i;i++)b=g[i],h[b]=b in this.attrs?this.attrs[b]:c.is(this.paper.customAttributes[b],"function")?this.paper.customAttributes[b].def:c._availableAttrs[b];return l-1?h:h[g[0]]}if(null==d&&c.is(b,"array")){for(h={},i=0,l=b.length;l>i;i++)h[b[i]]=this.attr(b[i]);return h}if(null!=d){var m={};m[b]=d}else null!=b&&c.is(b,"object")&&(m=b);for(var n in m)k("raphael.attr."+n+"."+this.id,this,m[n]);for(n in this.paper.customAttributes)if(this.paper.customAttributes[a](n)&&m[a](n)&&c.is(this.paper.customAttributes[n],"function")){var o=this.paper.customAttributes[n].apply(this,[].concat(m[n]));this.attrs[n]=m[n];for(var p in o)o[a](p)&&(m[p]=o[p])}return w(this,m),this},A.toFront=function(){if(this.removed)return this;"a"==this.node.parentNode.tagName.toLowerCase()?this.node.parentNode.parentNode.appendChild(this.node.parentNode):this.node.parentNode.appendChild(this.node);var a=this.paper;return a.top!=this&&c._tofront(this,a),this},A.toBack=function(){if(this.removed)return this;var a=this.node.parentNode;return"a"==a.tagName.toLowerCase()?a.parentNode.insertBefore(this.node.parentNode,this.node.parentNode.parentNode.firstChild):a.firstChild!=this.node&&a.insertBefore(this.node,this.node.parentNode.firstChild),c._toback(this,this.paper),this.paper,this},A.insertAfter=function(a){if(this.removed)return this;var b=a.node||a[a.length-1].node;return b.nextSibling?b.parentNode.insertBefore(this.node,b.nextSibling):b.parentNode.appendChild(this.node),c._insertafter(this,a,this.paper),this},A.insertBefore=function(a){if(this.removed)return this;var b=a.node||a[0].node;return b.parentNode.insertBefore(this.node,b),c._insertbefore(this,a,this.paper),this},A.blur=function(a){var b=this;if(0!==+a){var d=q("filter"),e=q("feGaussianBlur");b.attrs.blur=a,d.id=c.createUUID(),q(e,{stdDeviation:+a||1.5}),d.appendChild(e),b.paper.defs.appendChild(d),b._blur=d,q(b.node,{filter:"url(#"+d.id+")"})}else b._blur&&(b._blur.parentNode.removeChild(b._blur),delete b._blur,delete b.attrs.blur),b.node.removeAttribute("filter");return b},c._engine.circle=function(a,b,c,d){var e=q("circle");a.canvas&&a.canvas.appendChild(e);var f=new z(e,a);return f.attrs={cx:b,cy:c,r:d,fill:"none",stroke:"#000"},f.type="circle",q(e,f.attrs),f},c._engine.rect=function(a,b,c,d,e,f){var g=q("rect");a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);return h.attrs={x:b,y:c,width:d,height:e,r:f||0,rx:f||0,ry:f||0,fill:"none",stroke:"#000"},h.type="rect",q(g,h.attrs),h},c._engine.ellipse=function(a,b,c,d,e){var f=q("ellipse");a.canvas&&a.canvas.appendChild(f);var g=new z(f,a);return g.attrs={cx:b,cy:c,rx:d,ry:e,fill:"none",stroke:"#000"},g.type="ellipse",q(f,g.attrs),g},c._engine.image=function(a,b,c,d,e,f){var g=q("image");q(g,{x:c,y:d,width:e,height:f,preserveAspectRatio:"none"}),g.setAttributeNS(n,"href",b),a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);return h.attrs={x:c,y:d,width:e,height:f,src:b},h.type="image",h},c._engine.text=function(a,b,d,e){var f=q("text");a.canvas&&a.canvas.appendChild(f);var g=new z(f,a);return g.attrs={x:b,y:d,"text-anchor":"middle",text:e,font:c._availableAttrs.font,stroke:"none",fill:"#000"},g.type="text",w(g,g.attrs),g},c._engine.setSize=function(a,b){return this.width=a||this.width,this.height=b||this.height,this.canvas.setAttribute("width",this.width),this.canvas.setAttribute("height",this.height),this._viewBox&&this.setViewBox.apply(this,this._viewBox),this},c._engine.create=function(){var a=c._getContainer.apply(0,arguments),b=a&&a.container,d=a.x,e=a.y,f=a.width,g=a.height;if(!b)throw new Error("SVG container not found.");var h,i=q("svg"),j="overflow:hidden;";return d=d||0,e=e||0,f=f||512,g=g||342,q(i,{height:g,version:1.1,width:f,xmlns:"http://www.w3.org/2000/svg"}),1==b?(i.style.cssText=j+"position:absolute;left:"+d+"px;top:"+e+"px",c._g.doc.body.appendChild(i),h=1):(i.style.cssText=j+"position:relative",b.firstChild?b.insertBefore(i,b.firstChild):b.appendChild(i)),b=new c._Paper,b.width=f,b.height=g,b.canvas=i,b.clear(),b._left=b._top=0,h&&(b.renderfix=function(){}),b.renderfix(),b},c._engine.setViewBox=function(a,b,c,d,e){k("raphael.setViewBox",this,this._viewBox,[a,b,c,d,e]);var f,h,i=g(c/this.width,d/this.height),j=this.top,l=e?"meet":"xMinYMin";for(null==a?(this._vbSize&&(i=1),delete this._vbSize,f="0 0 "+this.width+m+this.height):(this._vbSize=i,f=a+m+b+m+c+m+d),q(this.canvas,{viewBox:f,preserveAspectRatio:l});i&&j;)h="stroke-width"in j.attrs?j.attrs["stroke-width"]:1,j.attr({"stroke-width":h}),j._.dirty=1,j._.dirtyT=1,j=j.prev;return this._viewBox=[a,b,c,d,!!e],this},c.prototype.renderfix=function(){var a,b=this.canvas,c=b.style;try{a=b.getScreenCTM()||b.createSVGMatrix()}catch(d){a=b.createSVGMatrix()}var e=-a.e%1,f=-a.f%1;(e||f)&&(e&&(this._left=(this._left+e)%1,c.left=this._left+"px"),f&&(this._top=(this._top+f)%1,c.top=this._top+"px"))},c.prototype.clear=function(){c.eve("raphael.clear",this);for(var a=this.canvas;a.firstChild;)a.removeChild(a.firstChild);this.bottom=this.top=null,(this.desc=q("desc")).appendChild(c._g.doc.createTextNode("Created with Raphaël "+c.version)),a.appendChild(this.desc),a.appendChild(this.defs=q("defs"))},c.prototype.remove=function(){k("raphael.remove",this),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]="function"==typeof this[a]?c._removedFactory(a):null};var B=c.st;for(var C in A)A[a](C)&&!B[a](C)&&(B[C]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(C))}}(),function(){if(c.vml){var a="hasOwnProperty",b=String,d=parseFloat,e=Math,f=e.round,g=e.max,h=e.min,i=e.abs,j="fill",k=/[, ]+/,l=c.eve,m=" progid:DXImageTransform.Microsoft",n=" ",o="",p={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},q=/([clmz]),?([^clmz]*)/gi,r=/ progid:\S+Blur\([^\)]+\)/g,s=/-?[^,\s-]+/g,t="position:absolute;left:0;top:0;width:1px;height:1px",u=21600,v={path:1,rect:1,image:1},w={circle:1,ellipse:1},x=function(a){var d=/[ahqstv]/gi,e=c._pathToAbsolute;if(b(a).match(d)&&(e=c._path2curve),d=/[clmz]/g,e==c._pathToAbsolute&&!b(a).match(d)){var g=b(a).replace(q,function(a,b,c){var d=[],e="m"==b.toLowerCase(),g=p[b];return c.replace(s,function(a){e&&2==d.length&&(g+=d+p["m"==b?"l":"L"],d=[]),d.push(f(a*u))}),g+d});return g}var h,i,j=e(a);g=[];for(var k=0,l=j.length;l>k;k++){h=j[k],i=j[k][0].toLowerCase(),"z"==i&&(i="x");for(var m=1,r=h.length;r>m;m++)i+=f(h[m]*u)+(m!=r-1?",":o);g.push(i)}return g.join(n)},y=function(a,b,d){var e=c.matrix();return e.rotate(-a,.5,.5),{dx:e.x(b,d),dy:e.y(b,d)}},z=function(a,b,c,d,e,f){var g=a._,h=a.matrix,k=g.fillpos,l=a.node,m=l.style,o=1,p="",q=u/b,r=u/c;if(m.visibility="hidden",b&&c){if(l.coordsize=i(q)+n+i(r),m.rotation=f*(0>b*c?-1:1),f){var s=y(f,d,e);d=s.dx,e=s.dy}if(0>b&&(p+="x"),0>c&&(p+=" y")&&(o=-1),m.flip=p,l.coordorigin=d*-q+n+e*-r,k||g.fillsize){var t=l.getElementsByTagName(j);t=t&&t[0],l.removeChild(t),k&&(s=y(f,h.x(k[0],k[1]),h.y(k[0],k[1])),t.position=s.dx*o+n+s.dy*o),g.fillsize&&(t.size=g.fillsize[0]*i(b)+n+g.fillsize[1]*i(c)),l.appendChild(t)}m.visibility="visible"}};c.toString=function(){return"Your browser doesn’t support SVG. Falling down to VML.\nYou are running Raphaël "+this.version};var A=function(a,c,d){for(var e=b(c).toLowerCase().split("-"),f=d?"end":"start",g=e.length,h="classic",i="medium",j="medium";g--;)switch(e[g]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":h=e[g];break;case"wide":case"narrow":j=e[g];break;case"long":case"short":i=e[g]}var k=a.node.getElementsByTagName("stroke")[0];k[f+"arrow"]=h,k[f+"arrowlength"]=i,k[f+"arrowwidth"]=j},B=function(e,i){e.attrs=e.attrs||{};var l=e.node,m=e.attrs,p=l.style,q=v[e.type]&&(i.x!=m.x||i.y!=m.y||i.width!=m.width||i.height!=m.height||i.cx!=m.cx||i.cy!=m.cy||i.rx!=m.rx||i.ry!=m.ry||i.r!=m.r),r=w[e.type]&&(m.cx!=i.cx||m.cy!=i.cy||m.r!=i.r||m.rx!=i.rx||m.ry!=i.ry),s=e;for(var t in i)i[a](t)&&(m[t]=i[t]);if(q&&(m.path=c._getPath[e.type](e),e._.dirty=1),i.href&&(l.href=i.href),i.title&&(l.title=i.title),i.target&&(l.target=i.target),i.cursor&&(p.cursor=i.cursor),"blur"in i&&e.blur(i.blur),(i.path&&"path"==e.type||q)&&(l.path=x(~b(m.path).toLowerCase().indexOf("r")?c._pathToAbsolute(m.path):m.path),"image"==e.type&&(e._.fillpos=[m.x,m.y],e._.fillsize=[m.width,m.height],z(e,1,1,0,0,0))),"transform"in i&&e.transform(i.transform),r){var y=+m.cx,B=+m.cy,D=+m.rx||+m.r||0,E=+m.ry||+m.r||0;l.path=c.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x",f((y-D)*u),f((B-E)*u),f((y+D)*u),f((B+E)*u),f(y*u)),e._.dirty=1}if("clip-rect"in i){var G=b(i["clip-rect"]).split(k);if(4==G.length){G[2]=+G[2]+ +G[0],G[3]=+G[3]+ +G[1];var H=l.clipRect||c._g.doc.createElement("div"),I=H.style;I.clip=c.format("rect({1}px {2}px {3}px {0}px)",G),l.clipRect||(I.position="absolute",I.top=0,I.left=0,I.width=e.paper.width+"px",I.height=e.paper.height+"px",l.parentNode.insertBefore(H,l),H.appendChild(l),l.clipRect=H)}i["clip-rect"]||l.clipRect&&(l.clipRect.style.clip="auto")}if(e.textpath){var J=e.textpath.style;i.font&&(J.font=i.font),i["font-family"]&&(J.fontFamily='"'+i["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g,o)+'"'),i["font-size"]&&(J.fontSize=i["font-size"]),i["font-weight"]&&(J.fontWeight=i["font-weight"]),i["font-style"]&&(J.fontStyle=i["font-style"])}if("arrow-start"in i&&A(s,i["arrow-start"]),"arrow-end"in i&&A(s,i["arrow-end"],1),null!=i.opacity||null!=i["stroke-width"]||null!=i.fill||null!=i.src||null!=i.stroke||null!=i["stroke-width"]||null!=i["stroke-opacity"]||null!=i["fill-opacity"]||null!=i["stroke-dasharray"]||null!=i["stroke-miterlimit"]||null!=i["stroke-linejoin"]||null!=i["stroke-linecap"]){var K=l.getElementsByTagName(j),L=!1;if(K=K&&K[0],!K&&(L=K=F(j)),"image"==e.type&&i.src&&(K.src=i.src),i.fill&&(K.on=!0),(null==K.on||"none"==i.fill||null===i.fill)&&(K.on=!1),K.on&&i.fill){var M=b(i.fill).match(c._ISURL);if(M){K.parentNode==l&&l.removeChild(K),K.rotate=!0,K.src=M[1],K.type="tile";var N=e.getBBox(1);K.position=N.x+n+N.y,e._.fillpos=[N.x,N.y],c._preload(M[1],function(){e._.fillsize=[this.offsetWidth,this.offsetHeight]})}else K.color=c.getRGB(i.fill).hex,K.src=o,K.type="solid",c.getRGB(i.fill).error&&(s.type in{circle:1,ellipse:1}||"r"!=b(i.fill).charAt())&&C(s,i.fill,K)&&(m.fill="none",m.gradient=i.fill,K.rotate=!1)}if("fill-opacity"in i||"opacity"in i){var O=((+m["fill-opacity"]+1||2)-1)*((+m.opacity+1||2)-1)*((+c.getRGB(i.fill).o+1||2)-1);O=h(g(O,0),1),K.opacity=O,K.src&&(K.color="none")}l.appendChild(K);var P=l.getElementsByTagName("stroke")&&l.getElementsByTagName("stroke")[0],Q=!1;!P&&(Q=P=F("stroke")),(i.stroke&&"none"!=i.stroke||i["stroke-width"]||null!=i["stroke-opacity"]||i["stroke-dasharray"]||i["stroke-miterlimit"]||i["stroke-linejoin"]||i["stroke-linecap"])&&(P.on=!0),("none"==i.stroke||null===i.stroke||null==P.on||0==i.stroke||0==i["stroke-width"])&&(P.on=!1);var R=c.getRGB(i.stroke);P.on&&i.stroke&&(P.color=R.hex),O=((+m["stroke-opacity"]+1||2)-1)*((+m.opacity+1||2)-1)*((+R.o+1||2)-1);var S=.75*(d(i["stroke-width"])||1);if(O=h(g(O,0),1),null==i["stroke-width"]&&(S=m["stroke-width"]),i["stroke-width"]&&(P.weight=S),S&&1>S&&(O*=S)&&(P.weight=1),P.opacity=O,i["stroke-linejoin"]&&(P.joinstyle=i["stroke-linejoin"]||"miter"),P.miterlimit=i["stroke-miterlimit"]||8,i["stroke-linecap"]&&(P.endcap="butt"==i["stroke-linecap"]?"flat":"square"==i["stroke-linecap"]?"square":"round"),i["stroke-dasharray"]){var T={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};P.dashstyle=T[a](i["stroke-dasharray"])?T[i["stroke-dasharray"]]:o}Q&&l.appendChild(P)}if("text"==s.type){s.paper.canvas.style.display=o;var U=s.paper.span,V=100,W=m.font&&m.font.match(/\d+(?:\.\d*)?(?=px)/);p=U.style,m.font&&(p.font=m.font),m["font-family"]&&(p.fontFamily=m["font-family"]),m["font-weight"]&&(p.fontWeight=m["font-weight"]),m["font-style"]&&(p.fontStyle=m["font-style"]),W=d(m["font-size"]||W&&W[0])||10,p.fontSize=W*V+"px",s.textpath.string&&(U.innerHTML=b(s.textpath.string).replace(/"));var X=U.getBoundingClientRect();s.W=m.w=(X.right-X.left)/V,s.H=m.h=(X.bottom-X.top)/V,s.X=m.x,s.Y=m.y+s.H/2,("x"in i||"y"in i)&&(s.path.v=c.format("m{0},{1}l{2},{1}",f(m.x*u),f(m.y*u),f(m.x*u)+1));for(var Y=["x","y","text","font","font-family","font-weight","font-style","font-size"],Z=0,$=Y.length;$>Z;Z++)if(Y[Z]in i){s._.dirty=1;break}switch(m["text-anchor"]){case"start":s.textpath.style["v-text-align"]="left",s.bbx=s.W/2;break;case"end":s.textpath.style["v-text-align"]="right",s.bbx=-s.W/2;break;default:s.textpath.style["v-text-align"]="center",s.bbx=0}s.textpath.style["v-text-kern"]=!0}},C=function(a,f,g){a.attrs=a.attrs||{};var h=(a.attrs,Math.pow),i="linear",j=".5 .5";if(a.attrs.gradient=f,f=b(f).replace(c._radial_gradient,function(a,b,c){return i="radial",b&&c&&(b=d(b),c=d(c),h(b-.5,2)+h(c-.5,2)>.25&&(c=e.sqrt(.25-h(b-.5,2))*(2*(c>.5)-1)+.5),j=b+n+c),o}),f=f.split(/\s*\-\s*/),"linear"==i){var k=f.shift();if(k=-d(k),isNaN(k))return null}var l=c._parseDots(f);if(!l)return null;if(a=a.shape||a.node,l.length){a.removeChild(g),g.on=!0,g.method="none",g.color=l[0].color,g.color2=l[l.length-1].color;for(var m=[],p=0,q=l.length;q>p;p++)l[p].offset&&m.push(l[p].offset+n+l[p].color);g.colors=m.length?m.join():"0% "+g.color,"radial"==i?(g.type="gradientTitle",g.focus="100%",g.focussize="0 0",g.focusposition=j,g.angle=0):(g.type="gradient",g.angle=(270-k)%360),a.appendChild(g)}return 1},D=function(a,b){this[0]=this.node=a,a.raphael=!0,this.id=c._oid++,a.raphaelid=this.id,this.X=0,this.Y=0,this.attrs={},this.paper=b,this.matrix=c.matrix(),this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1},!b.bottom&&(b.bottom=this),this.prev=b.top,b.top&&(b.top.next=this),b.top=this,this.next=null},E=c.el;D.prototype=E,E.constructor=D,E.transform=function(a){if(null==a)return this._.transform;var d,e=this.paper._viewBoxShift,f=e?"s"+[e.scale,e.scale]+"-1-1t"+[e.dx,e.dy]:o;e&&(d=a=b(a).replace(/\.{3}|\u2026/g,this._.transform||o)),c._extractTransform(this,f+a);var g,h=this.matrix.clone(),i=this.skew,j=this.node,k=~b(this.attrs.fill).indexOf("-"),l=!b(this.attrs.fill).indexOf("url(");if(h.translate(1,1),l||k||"image"==this.type)if(i.matrix="1 0 0 1",i.offset="0 0",g=h.split(),k&&g.noRotation||!g.isSimple){j.style.filter=h.toFilter();var m=this.getBBox(),p=this.getBBox(1),q=m.x-p.x,r=m.y-p.y;j.coordorigin=q*-u+n+r*-u,z(this,1,1,q,r,0)}else j.style.filter=o,z(this,g.scalex,g.scaley,g.dx,g.dy,g.rotate);else j.style.filter=o,i.matrix=b(h),i.offset=h.offset();return d&&(this._.transform=d),this},E.rotate=function(a,c,e){if(this.removed)return this;if(null!=a){if(a=b(a).split(k),a.length-1&&(c=d(a[1]),e=d(a[2])),a=d(a[0]),null==e&&(c=e),null==c||null==e){var f=this.getBBox(1);c=f.x+f.width/2,e=f.y+f.height/2}return this._.dirtyT=1,this.transform(this._.transform.concat([["r",a,c,e]])),this}},E.translate=function(a,c){return this.removed?this:(a=b(a).split(k),a.length-1&&(c=d(a[1])),a=d(a[0])||0,c=+c||0,this._.bbox&&(this._.bbox.x+=a,this._.bbox.y+=c),this.transform(this._.transform.concat([["t",a,c]])),this)},E.scale=function(a,c,e,f){if(this.removed)return this;if(a=b(a).split(k),a.length-1&&(c=d(a[1]),e=d(a[2]),f=d(a[3]),isNaN(e)&&(e=null),isNaN(f)&&(f=null)),a=d(a[0]),null==c&&(c=a),null==f&&(e=f),null==e||null==f)var g=this.getBBox(1);return e=null==e?g.x+g.width/2:e,f=null==f?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,c,e,f]])),this._.dirtyT=1,this},E.hide=function(){return!this.removed&&(this.node.style.display="none"),this},E.show=function(){return!this.removed&&(this.node.style.display=o),this},E._getBBox=function(){return this.removed?{}:{x:this.X+(this.bbx||0)-this.W/2,y:this.Y-this.H,width:this.W,height:this.H}},E.remove=function(){if(!this.removed&&this.node.parentNode){this.paper.__set__&&this.paper.__set__.exclude(this),c.eve.unbind("raphael.*.*."+this.id),c._tear(this,this.paper),this.node.parentNode.removeChild(this.node),this.shape&&this.shape.parentNode.removeChild(this.shape);for(var a in this)this[a]="function"==typeof this[a]?c._removedFactory(a):null;this.removed=!0}},E.attr=function(b,d){if(this.removed)return this;if(null==b){var e={};for(var f in this.attrs)this.attrs[a](f)&&(e[f]=this.attrs[f]);return e.gradient&&"none"==e.fill&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform,e}if(null==d&&c.is(b,"string")){if(b==j&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;for(var g=b.split(k),h={},i=0,m=g.length;m>i;i++)b=g[i],h[b]=b in this.attrs?this.attrs[b]:c.is(this.paper.customAttributes[b],"function")?this.paper.customAttributes[b].def:c._availableAttrs[b];return m-1?h:h[g[0]]}if(this.attrs&&null==d&&c.is(b,"array")){for(h={},i=0,m=b.length;m>i;i++)h[b[i]]=this.attr(b[i]);return h}var n;null!=d&&(n={},n[b]=d),null==d&&c.is(b,"object")&&(n=b);for(var o in n)l("raphael.attr."+o+"."+this.id,this,n[o]);if(n){for(o in this.paper.customAttributes)if(this.paper.customAttributes[a](o)&&n[a](o)&&c.is(this.paper.customAttributes[o],"function")){var p=this.paper.customAttributes[o].apply(this,[].concat(n[o]));this.attrs[o]=n[o];for(var q in p)p[a](q)&&(n[q]=p[q])}n.text&&"text"==this.type&&(this.textpath.string=n.text),B(this,n)}return this},E.toFront=function(){return!this.removed&&this.node.parentNode.appendChild(this.node),this.paper&&this.paper.top!=this&&c._tofront(this,this.paper),this},E.toBack=function(){return this.removed?this:(this.node.parentNode.firstChild!=this.node&&(this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),c._toback(this,this.paper)),this)},E.insertAfter=function(a){return this.removed?this:(a.constructor==c.st.constructor&&(a=a[a.length-1]),a.node.nextSibling?a.node.parentNode.insertBefore(this.node,a.node.nextSibling):a.node.parentNode.appendChild(this.node),c._insertafter(this,a,this.paper),this)},E.insertBefore=function(a){return this.removed?this:(a.constructor==c.st.constructor&&(a=a[0]),a.node.parentNode.insertBefore(this.node,a.node),c._insertbefore(this,a,this.paper),this)},E.blur=function(a){var b=this.node.runtimeStyle,d=b.filter;return d=d.replace(r,o),0!==+a?(this.attrs.blur=a,b.filter=d+n+m+".Blur(pixelradius="+(+a||1.5)+")",b.margin=c.format("-{0}px 0 0 -{0}px",f(+a||1.5))):(b.filter=d,b.margin=0,delete this.attrs.blur),this},c._engine.path=function(a,b){var c=F("shape");c.style.cssText=t,c.coordsize=u+n+u,c.coordorigin=b.coordorigin;var d=new D(c,b),e={fill:"none",stroke:"#000"};a&&(e.path=a),d.type="path",d.path=[],d.Path=o,B(d,e),b.canvas.appendChild(c);var f=F("skew");return f.on=!0,c.appendChild(f),d.skew=f,d.transform(o),d},c._engine.rect=function(a,b,d,e,f,g){var h=c._rectPath(b,d,e,f,g),i=a.path(h),j=i.attrs;return i.X=j.x=b,i.Y=j.y=d,i.W=j.width=e,i.H=j.height=f,j.r=g,j.path=h,i.type="rect",i},c._engine.ellipse=function(a,b,c,d,e){var f=a.path();return f.attrs,f.X=b-d,f.Y=c-e,f.W=2*d,f.H=2*e,f.type="ellipse",B(f,{cx:b,cy:c,rx:d,ry:e}),f},c._engine.circle=function(a,b,c,d){var e=a.path();return e.attrs,e.X=b-d,e.Y=c-d,e.W=e.H=2*d,e.type="circle",B(e,{cx:b,cy:c,r:d}),e},c._engine.image=function(a,b,d,e,f,g){var h=c._rectPath(d,e,f,g),i=a.path(h).attr({stroke:"none"}),k=i.attrs,l=i.node,m=l.getElementsByTagName(j)[0];return k.src=b,i.X=k.x=d,i.Y=k.y=e,i.W=k.width=f,i.H=k.height=g,k.path=h,i.type="image",m.parentNode==l&&l.removeChild(m),m.rotate=!0,m.src=b,m.type="tile",i._.fillpos=[d,e],i._.fillsize=[f,g],l.appendChild(m),z(i,1,1,0,0,0),i},c._engine.text=function(a,d,e,g){var h=F("shape"),i=F("path"),j=F("textpath");d=d||0,e=e||0,g=g||"",i.v=c.format("m{0},{1}l{2},{1}",f(d*u),f(e*u),f(d*u)+1),i.textpathok=!0,j.string=b(g),j.on=!0,h.style.cssText=t,h.coordsize=u+n+u,h.coordorigin="0 0";var k=new D(h,a),l={fill:"#000",stroke:"none",font:c._availableAttrs.font,text:g};k.shape=h,k.path=i,k.textpath=j,k.type="text",k.attrs.text=b(g),k.attrs.x=d,k.attrs.y=e,k.attrs.w=1,k.attrs.h=1,B(k,l),h.appendChild(j),h.appendChild(i),a.canvas.appendChild(h);var m=F("skew");return m.on=!0,h.appendChild(m),k.skew=m,k.transform(o),k},c._engine.setSize=function(a,b){var d=this.canvas.style;return this.width=a,this.height=b,a==+a&&(a+="px"),b==+b&&(b+="px"),d.width=a,d.height=b,d.clip="rect(0 "+a+" "+b+" 0)",this._viewBox&&c._engine.setViewBox.apply(this,this._viewBox),this},c._engine.setViewBox=function(a,b,d,e,f){c.eve("raphael.setViewBox",this,this._viewBox,[a,b,d,e,f]);var h,i,j=this.width,k=this.height,l=1/g(d/j,e/k);return f&&(h=k/e,i=j/d,j>d*h&&(a-=(j-d*h)/2/h),k>e*i&&(b-=(k-e*i)/2/i)),this._viewBox=[a,b,d,e,!!f],this._viewBoxShift={dx:-a,dy:-b,scale:l},this.forEach(function(a){a.transform("...")}),this};var F;c._engine.initWin=function(a){var b=a.document;b.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!b.namespaces.rvml&&b.namespaces.add("rvml","urn:schemas-microsoft-com:vml"),F=function(a){return b.createElement("')}}catch(c){F=function(a){return b.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},c._engine.initWin(c._g.win),c._engine.create=function(){var a=c._getContainer.apply(0,arguments),b=a.container,d=a.height,e=a.width,f=a.x,g=a.y;if(!b)throw new Error("VML container not found.");var h=new c._Paper,i=h.canvas=c._g.doc.createElement("div"),j=i.style;return f=f||0,g=g||0,e=e||512,d=d||342,h.width=e,h.height=d,e==+e&&(e+="px"),d==+d&&(d+="px"),h.coordsize=1e3*u+n+1e3*u,h.coordorigin="0 0",h.span=c._g.doc.createElement("span"),h.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",i.appendChild(h.span),j.cssText=c.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",e,d),1==b?(c._g.doc.body.appendChild(i),j.left=f+"px",j.top=g+"px",j.position="absolute"):b.firstChild?b.insertBefore(i,b.firstChild):b.appendChild(i),h.renderfix=function(){},h},c.prototype.clear=function(){c.eve("raphael.clear",this),this.canvas.innerHTML=o,this.span=c._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},c.prototype.remove=function(){c.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]="function"==typeof this[a]?c._removedFactory(a):null;return!0};var G=c.st;for(var H in E)E[a](H)&&!G[a](H)&&(G[H]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(H))}}(),B.was?A.win.Raphael=c:Raphael=c,c}); \ No newline at end of file diff --git a/apps/wolnelektury_core/static/js/dialogs.js b/apps/wolnelektury_core/static/js/dialogs.js deleted file mode 100644 index 3b7553b30..000000000 --- a/apps/wolnelektury_core/static/js/dialogs.js +++ /dev/null @@ -1,199 +0,0 @@ -(function($) { - $(function() { - - // create containers for all ajaxable form links - $('.ajaxable').each(function() { - var $window = $("#ajaxable-window").clone(); - $window.attr("id", this.id + "-window"); - $('body').append($window); - - var $trigger = $(this) - var trigger = '#' + this.id; - - $window.jqm({ - ajax: '@href', - ajaxText: '

                * ' + gettext("Loading") + '

                ', - target: $('.target', $window)[0], - overlay: 60, - trigger: trigger, - onShow: function(hash) { - var offset = $(hash.t).offset(); - var oleft = offset.left - hash.w.width() + $(hash.t).width(); - if (oleft < 0) oleft = 0; - hash.w.css({position: 'absolute', left: oleft, top: offset.top}); - var width = $(hash.t).width(); - width = width > 50 ? width : 50; - $('.header', hash.w).css({width: width}); - hash.w.show(); - }, - onLoad: function(hash) { - $('form', hash.w).ajaxForm({ - dataType: 'json', - target: $('.target', $window), - success: function(response) { - if (response.success) { - $('.target', $window).text(response.message); - setTimeout(function() { $window.jqmHide() }, 1000); - callback = ajaxable_callbacks[$trigger.attr('data-callback')]; - callback && callback($trigger, response); - if (response.redirect) - window.location = response.redirect; - } - else { - $('.error', $window).remove(); - $.each(response.errors, function(id, errors) { - $('#id_' + id, $window).before('' + errors[0] + ''); - }); - $('input[type=submit]', $window).removeAttr('disabled'); - return false; - } - } - }); - } - }); - }); - - - var login_and_retry = function($form) { - var $window = $("#ajaxable-window").clone(); - $window.attr("id", "context-login-window"); - $('body').append($window); - - $window.jqm({ - ajax: '/uzytkownik/zaloguj-utworz/?next=' + escape(window.location), - ajaxText: '

                * ' + gettext("Loading") + '

                ', - target: $('.target', $window)[0], - overlay: 60, - onShow: function(hash) { - var offset = $form.offset(); - hash.w.css({position: 'absolute', left: offset.left - hash.w.width() + $form.width(), top: offset.top}); - var width = $form.width(); - width = width > 50 ? width : 50; - $('.header', hash.w).css({width: width}); - hash.w.show(); - }, - onLoad: function(hash) { - $('form', hash.w).ajaxForm({ - dataType: 'json', - target: $('.target', $window), - success: function(response) { - if (response.success) { - $('.target', $window).text(response.message); - setTimeout(function() { $window.jqmHide() }, 1000); - $form.submit(); - location.reload(); - } - else { - $('.error', $window).remove(); - $.each(response.errors, function(id, errors) { - $('#id_' + id, $window).before('' + errors[0] + ''); - }); - $('input[type=submit]', $window).removeAttr('disabled'); - return false; - } - } - }); - } - }).jqmShow(); - - }; - - - $('.ajax-form').each(function() { - var $form = $(this); - $form.ajaxForm({ - dataType: 'json', - beforeSubmit: function() { - $('input[type=submit]', $form) - .attr('disabled', 'disabled') - .after(''); - }, - error: function(response) { - if (response.status == 403) - login_and_retry($form); - }, - success: function(response) { - if (response.success) { - callback = ajax_form_callbacks[$form.attr('data-callback')]; - callback && callback($form, response); - - } else { - $('span.error', $form).remove(); - $.each(response.errors, function(id, errors) { - $('#id_' + id, $form).before('' + errors[0] + ''); - }); - $('input[type=submit]', $form).removeAttr('disabled'); - $('img', $form).remove(); - } - } - }); - }); - - - var update_star = function($elem, response) { - /* updates the star after successful ajax */ - var $star = $elem.closest('.star'); - if (response.like) { - $star.addClass('like'); - $star.removeClass('unlike'); - } - else { - $star.addClass('unlike'); - $star.removeClass('like'); - } - }; - - var ajax_form_callbacks = { - 'social-like-book': update_star - }; - - var ajaxable_callbacks = { - 'social-book-sets': function() {location.reload();} - }; - - - - // check placeholder browser support - if (!Modernizr.input.placeholder) - { - // set placeholder values - $(this).find('[placeholder]').each(function() - { - $(this).val( $(this).attr('placeholder') ).addClass('placeholder'); - }); - - // focus and blur of placeholders - $('[placeholder]').focus(function() - { - if ($(this).val() == $(this).attr('placeholder')) - { - $(this).val(''); - $(this).removeClass('placeholder'); - } - }).blur(function() - { - if ($(this).val() == '' || $(this).val() == $(this).attr('placeholder')) - { - $(this).val($(this).attr('placeholder')); - $(this).addClass('placeholder'); - } - }); - - // remove placeholders on submit - $('[placeholder]').closest('form').submit(function() - { - $(this).find('[placeholder]').each(function() - { - if ($(this).val() == $(this).attr('placeholder')) - { - $(this).val(''); - } - }) - }); - } - - - - }); -})(jQuery); - diff --git a/apps/wolnelektury_core/static/js/locale.js b/apps/wolnelektury_core/static/js/locale.js deleted file mode 100644 index e4c8f17aa..000000000 --- a/apps/wolnelektury_core/static/js/locale.js +++ /dev/null @@ -1,35 +0,0 @@ -var LOCALE_TEXTS = { - "pl": { - "Loading": "Ładowanie" - }, - "de": { - "Loading": "Herunterladen" - }, - "fr": { - "Loading": "Chargement" - }, - "en": { - "Loading": "Loading" - }, - "ru": { - "Loading": "Загрузка" - }, - "es": { - "Loading": "Cargando" - }, - "lt":{ - "Loading": "Krovimas" - }, - "uk":{ - "Loading": "Завантажується" - }, - "jp":{ - "Loading": "負荷" - }, - "it":{ - "Loading": "caricamento" - }, -} -function gettext(text) { - return LOCALE_TEXTS[LANGUAGE_CODE][text]; -} diff --git a/apps/wolnelektury_core/static/js/picture.js b/apps/wolnelektury_core/static/js/picture.js deleted file mode 100644 index 2464220e4..000000000 --- a/apps/wolnelektury_core/static/js/picture.js +++ /dev/null @@ -1,253 +0,0 @@ - -(function($) { - $.widget('wl.pictureviewer', { - - options: { - step: 20, // step in % of initial image - plus_button: undefined, - minus_button: undefined, - }, - ORIGINAL_LOADING: 0, - ORIGINAL_AVAILABLE: 1, - ORIGINAL_SHOWN: 2, - - _create: function() { - var self = this; - self.initial_size = [ - self.element.data('width'), - self.element.data('height') - ]; - self.original_size = [ - self.element.data('original-width'), - self.element.data('original-height') - ]; - self._zoom = 0; - self._ratio = 1.0; - - self.original = $(''); - - self._original_avaialble = self.ORIGINAL_LOADING; - function original_loaded() { - self._original_avaialble = self.ORIGINAL_AVAILABLE; - self.options.plus_button.removeClass('inactive'); - self.options.minus_button.removeClass('inactive'); - console.log("Original image available, sizes initial: " + self.initial_size + ", original: " + self.original_size); - }; - self.original.load(original_loaded); - - self.element.width(self.initial_size[0]); - self.element.height(self.initial_size[1]); - - if (self.options.plus_button) - self.options.plus_button.click( - function(ev) { self.zoom(1); }); - if (self.options.minus_button) - self.options.minus_button.click( - function(ev) { self.zoom(-1); }); - - self._initial_mark = null; - function clean_initial_mark() { - if (self._initial_mark) { - self._initial_mark.remove(); - self._initial_mark = null; - } - } - var initial_hash = window.location.hash; - if (initial_hash) { - var mk = null, - objectPrefix = '#object-', - themePrefix = '#theme-'; - if (initial_hash.substr(0, objectPrefix.length) === objectPrefix) { - $("[href=#picture-objects]").trigger('click'); - } else if (initial_hash.substr(0, themePrefix.length) === themePrefix) { - $("[href=#picture-themes]").trigger('click'); - } - mk = $("[href=" + initial_hash + "]").eq(0); - self._initial_mark = self.createMark({ - label: mk.text(), - coords: mk.data('coords') - }); - } - - - self.options.areas_links.hover(function() { - clean_initial_mark(); - $this = $(this); - var coords = $this.data("coords"); - this._picture_mark = self.createMark({ -// label: $this.text(), - coords: coords, - }); - }, function() { - $(this._picture_mark).remove(); - this._picture_mark = undefined; - }).click(function(ev) { - ev.preventDefault(); - var $mark = self.element.find('.mark').eq(0); - var markPos = $mark.offset(); - markPos = [markPos.left, markPos.top]; - var markSize = [ $mark.width(), $mark.height() ] - var wSize = [ window.innerWidth, window.innerHeight ]; - window.scrollTo( - markPos[0] + markSize[0]/2 - wSize[0]/2, - markPos[1] + markSize[1]/2 - wSize[1]/2 - ); - - }); - - - - return self; - }, - - currentSize: function() { - return [this.element.width(), this.element.height() ]; - }, - - currentZoom: function() { return this._zoom; }, - - initOriginal: function() { - if (this._original_avaialble > this.ORIGINAL_LOADING && - this._original_avaialble < this.ORIGINAL_SHOWN) { - this.element.css({'background-image': 'url('+ this.original.attr('src')+')', 'background-size': this.initial_size[0]+'px'}); - this._original_avaialble = this.ORIGINAL_SHOWN; - }; - }, - - zoom: function(steps) { - this.initOriginal(); - var t = this._zoom + steps; - return this.zoomTo(t); - }, - - zoomForStep: function(step) { - // 0 => initial - // max_step-1 => max % - if (step < 0) step = 0; - var zoomperc = 100 + step * this.options.step; - if (zoomperc * this.initial_size[0] > this.original_size[0] * 100) { - zoomperc = this.original_size[0] * 100 / this.initial_size[0]; - }; - return zoomperc; - }, - - zoomTo: function(level) { - var ratio = this.zoomForStep(level) / 100; - var new_width = ratio * this.initial_size[0]; - var new_height = ratio * this.initial_size[1]; - var cs = this.currentSize(); - if (new_width == cs[0]) - return; - - var target = { - 'width': new_width + 'px', - 'height': new_height + 'px', - 'background-size': new_width + 'px', - }; - - this._zoom = level; - this._ratio = ratio; - - this.element.css(target); - if (this._initial_mark) { - this._initial_mark = this.redrawMark(this._initial_mark); - } - - }, - - allowedPosition: function(off) { - var x = undefined, fix_x = undefined; - var y = undefined, fix_y = undefined; - var w = this.element.width(); - var h = this.element.height(); - var cw = $(window).width(); - var ch = $(window).height(); - var off = off || this.element.offset(); - - if (w <= cw) { - var x = off.left; - if (x < 0) - fix_x = 0; - if (x + w > cw) - fix_x = cw - w; - } else { - if (x > 0) - fix_x = 0; - if (x + w < cw) - fix_x = cw - w; - } - - if (h <= ch) { - var y = off.top; - if (y < 0) - fix_y = 0; - if (y + h > ch) - fix_y = ch - h; - } else { - if (y > 0) - fix_y = 0; - if (y + h < ch) - fix_y = ch - h; - } - if (fix_x !== undefined || fix_y !== undefined) - return { top: fix_y, left: fix_x }; - return undefined; - - }, - redrawMark: function(mark) { - var $mark = $(mark); - var $newmark = this.createMark($mark.data('mark')); - $mark.remove(); - return $newmark; - }, - // mark - // { - // label: "...", - // coords: [x, y, w, h] - // } - createMark: function(mark) { - if (mark.label === undefined) - mark.label = ''; - var $mark = $('
                ' + - mark.label + '
                '); - var cs = this.currentSize() - var ratio = cs[0] / this.original_size[0]; - var scale = function (v) { - return v * ratio; - } - if (mark.coords[1][0] < 0 || mark.coords[1][1] < 0) { // whole - var s = this.original_size; - if (mark.coords[1][0] < 0) mark.coords[1][0] = s[0]; - if (mark.coords[1][1] < 0) mark.coords[1][1] = s[1]; - } - - var coords = [[scale(mark.coords[0][0]), scale(mark.coords[0][1])], - [scale(mark.coords[1][0]), scale(mark.coords[1][1])]]; - this.element.append($mark); - $mark.width(coords[1][0] - coords[0][0]); - $mark.height(coords[1][1] - coords[0][1]); - $mark.css({left: coords[0][0], top: coords[0][1]}); - - $mark.data('mark', mark); - return $mark.get(0); - }, - }); - - -$(document).ready(function() { - $.highlightFade.defaults.speed = 3000; - - $('#menu .dropdown').each(function() { - $t = $(this); - $($t.attr('href')).hide().insertAfter(this); - }); - - $(".picture-wrap").pictureviewer({ - plus_button: $(".button.plus"), - minus_button: $(".button.minus"), - areas_links: $("#picture-objects a, #picture-themes a"), - }); - -}); - -}(jQuery)); diff --git a/apps/wolnelektury_core/static/js/search.js b/apps/wolnelektury_core/static/js/search.js deleted file mode 100644 index 4d001e0c0..000000000 --- a/apps/wolnelektury_core/static/js/search.js +++ /dev/null @@ -1,49 +0,0 @@ - -var __bind = function (self, fn) { - return function() { fn.apply(self, arguments); }; -}; - -(function($){ - $.widget("wl.search", { - options: { - minLength: 0, - dataType: "json", - host: '', - }, - - _create: function() { - var opts = { - minLength: this.options.minLength, - select: __bind(this, this.enter), - focus: function() { return false; }, - source: this.element.data('source'), - }; - - this.element.autocomplete($.extend(opts, this.options)) - .data("autocomplete")._renderItem = __bind(this, this.render_item); - }, - - enter: function(event, ui) { - if (ui.item.url != undefined) { - location.href = this.options.host+ui.item.url; - } else { - this.element.closest('form').submit(); - } - }, - - render_item: function (ul, item) { - return $("
              • ").data('item.autocomplete', item) - .append(''+item.label+''+ - ''+item.category+'') - .appendTo(ul); - }, - - destroy: function() { - - }, - - - }); - - -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/widget.js b/apps/wolnelektury_core/static/js/widget.js deleted file mode 100644 index 3b680fc7d..000000000 --- a/apps/wolnelektury_core/static/js/widget.js +++ /dev/null @@ -1,8 +0,0 @@ -var WOLNELEKTURY_LOADED; -if (WOLNELEKTURY_LOADED == undefined) { - var iframe = document.createElement('iframe'); - iframe.setAttribute('style', 'width: 100%; height: 140px; border: none; box-shadow: 0 0 .5rem #191919;'); - iframe.setAttribute('src', '//wolnelektury.pl/widget.html'); - document.getElementById('wl').appendChild(iframe); - WOLNELEKTURY_LOADED = true; -} \ No newline at end of file diff --git a/apps/wolnelektury_core/static/js/widget_run.js b/apps/wolnelektury_core/static/js/widget_run.js deleted file mode 100644 index c2453e722..000000000 --- a/apps/wolnelektury_core/static/js/widget_run.js +++ /dev/null @@ -1,26 +0,0 @@ -var s = $('#id_qq'); -var url = s.attr('data-source'); -s.search({ - source: function(req, cb) { - $.ajax({url: url, - dataType: "jsonp", - data: {term: req.term}, - type: "GET", - success: function(data) {cb(data);}, - error: function() {cb([]);} - }); - }, - dataType: "jsonp", - select: function(event, ui) { - if (ui.item.url != undefined) { - window.top.location.href = '//wolnelektury.pl' + ui.item.url; - } else { - $('form').submit(); - } - }, - position: { - my: "center bottom", - at: "center bottom", - of: "#wl a" - }, -}); diff --git a/apps/wolnelektury_core/static/opensearch.xml b/apps/wolnelektury_core/static/opensearch.xml deleted file mode 100644 index 3018db0cd..000000000 --- a/apps/wolnelektury_core/static/opensearch.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - Wolne Lektury - Biblioteka internetowa WolneLektury.pl - UTF-8 - lektury - Fundacja Nowoczesna Polska - pl - fundacja@nowoczesnapolska.org.pl - https://static.wolnelektury.pl/static/img/favicon.ico - https://static.wolnelektury.pl/static/img/wl_icon_64.png - - - - https://wolnelektury.pl/ - - diff --git a/apps/wolnelektury_core/static/scss/book_text.scss b/apps/wolnelektury_core/static/scss/book_text.scss deleted file mode 100644 index 566ee4804..000000000 --- a/apps/wolnelektury_core/static/scss/book_text.scss +++ /dev/null @@ -1,20 +0,0 @@ -@import "tools"; - -@import "book_text/const"; -@import "book_text/body"; -@import "book_text/box"; -@import "book_text/info"; -@import "book_text/menu"; -@import "book_text/note"; -@import "book_text/numbering"; -@import "book_text/other"; -@import "book_text/settings"; -@import "book_text/themes"; -@import "book_text/toc"; - -@import "main/book_box"; -@import "main/picture_box"; -@import "book_text/book_box"; - -@import "main/auth"; -@import "main/dialogs"; diff --git a/apps/wolnelektury_core/static/scss/book_text/body.scss b/apps/wolnelektury_core/static/scss/book_text/body.scss deleted file mode 100644 index 912d55b85..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/body.scss +++ /dev/null @@ -1,144 +0,0 @@ -/* - * #big-pane - * Everything besides the menu. - */ -#big-pane { - justify-content: left; - position: relative; - @include min-screen($W_BOOK_TEXT_MAX) { - justify-content: center; - } -} -@include min-screen($S_MENU) { - #big-pane { - @include size(margin-left, $W_MENU); - } - .menu-hidden { - #big-pane { - margin-left: 0; - } - } -} - -#picture-viewer #big-pane { - @include size(margin-left, $W_NONUMBERS_TINY); - - @include min-screen($S_NONUMBERS_TINY_MAX) { - @include size(margin-left, $W_NONUMBERS); - } - - @include min-screen($S_NUMBERS) { - @include size(margin-left, 44px); - } -} - -@include min-screen($S_MENU) { - #picture-viewer #big-pane { - @include size(margin-left, $W_MENU); - } - .menu-hidden { - #big-pane { - margin-left: 44px; - } - } -} - - - - -/* - * #main-text - * - * This is where the text lives - * together with line numbers, themes and stuff. - */ - -@mixin left-without-numbers { - @include size(padding-left, $W_NONUMBERS_TINY); - @include min-screen($S_NONUMBERS_TINY_MAX) { - @include size(padding-left, $W_NONUMBERS); - } -} - -@mixin right-without-themes { - @include size(padding-right, $W_NOTHEMES_TINY); - @include min-screen($S_NOTHEMES_TINY_MAX) { - @include size(padding-right, $W_NOTHEMES_SMALL); - } - @include min-screen($S_NOTHEMES_SMALL_MAX) { - @include size(padding-right, $W_NOTHEMES); - } -} - -#main-text, #other-text { - @include left-without-numbers; - @include right-without-themes; - @include size(min-width, $W_BOOK_TEXT_MIN); - - /* make room for line numbers */ - @include min-screen($S_NUMBERS) { - @include size(padding-left, $W_NUMBERS); - } - - /* make room for themes */ - @include min-screen($S_THEMES) { - @include size(padding-right, $W_THEMES); - } -} - -.always-hide-line-numbers { - /* Cancel making room for line numbers. */ - #main-text, #other-text { - @include left-without-numbers; - } -} - -@include min-screen($S_THEMES) { - .always-hide-themes { - /* Cancel making room for themes. */ - #main-text, #other-text { - @include right-without-themes; - } - } -} - -.with-other-text { - #big-pane { - display: flex; - flex-direction: row; - } - #main-text, #other-text { - @include right-without-themes; - - @include min-screen($S_THEMES_WOTHER) { - @include size(padding-right, $W_THEMES); - } - } -} - - - - - -#book-text { - @include size(max-width, $W_BOOK_TEXT_MAX); - @include size(margin, 20px auto); - - font-size: .8em; - - @include min-screen($S_SMALL_TEXT_MAX) { - font-size: 1em; - } - - h1 { - margin-top: 0; - } -} -.with-other-text { - #book-text { - font-size: .8em; - @include min-screen($S_SMALL_TEXT_MAX_WOTHER) { - font-size: 1em; - } - } -} diff --git a/apps/wolnelektury_core/static/scss/book_text/book_box.scss b/apps/wolnelektury_core/static/scss/book_text/book_box.scss deleted file mode 100644 index 38550ce74..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/book_box.scss +++ /dev/null @@ -1,15 +0,0 @@ -#book-short { - margin: 0; - padding: 0; - overflow: visible; - max-width: 488px; - - .book-box .book-box-inner { - border: none; - box-shadow: none; - } - - .book-box-read { - opacity: .5; - } -} diff --git a/apps/wolnelektury_core/static/scss/book_text/box.scss b/apps/wolnelektury_core/static/scss/book_text/box.scss deleted file mode 100644 index 7a0423418..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/box.scss +++ /dev/null @@ -1,50 +0,0 @@ -/* TODO: -There should be a JS-less way of seeing at least some of -the hidden boxes (TOC and Themes). -*/ - -.box, #toc, #themes, #nota_red, #objects { - display: none; - - position: fixed; - @include size(left, $W_MENU); - top: 0; - right: 0; - - max-height: 100%; - @include size(max-width, 380px); - @include size(padding, 10px 10px 30px 10px); - margin: 0; - overflow-x: hidden; - overflow-y: auto; - z-index: 100; - - color: black; - background: #fff; - box-shadow: 2px 2px 2px #444; - - @include size(border-width, 0 1px 1px 0); - border-style: solid; - border-color: #444; - - @include size(font-size, 14px); - line-height: 1.2em; - - h2 { - margin-top: 0; - } -} - - - -#box-underlay { - display: none; - position: fixed; - @include size(left, $W_MENU); - top: 0; - bottom: 0; - right: 0; - background:#000; - opacity: .5; - z-index: 99; -} diff --git a/apps/wolnelektury_core/static/scss/book_text/const.scss b/apps/wolnelektury_core/static/scss/book_text/const.scss deleted file mode 100644 index 4c8ab8201..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/const.scss +++ /dev/null @@ -1,26 +0,0 @@ -$W_MENU: 80px; -$S_MENU: 600px; - -$W_BOOK_TEXT_MIN: 160px; -$W_BOOK_TEXT_MAX: 600px; -$S_SMALL_TEXT_MAX: 500px; -$S_SMALL_TEXT_MAX_WOTHER: 1100px; - -$W_NONUMBERS_TINY: 20px; -$S_NONUMBERS_TINY_MAX: 240px; -$W_NONUMBERS: 30px; -$S_NUMBERS: 320px; -$W_NUMBERS: 50px; - -$W_NOTHEMES_TINY: 20px; -$S_NOTHEMES_TINY_MAX: 240px; -$W_NOTHEMES_SMALL: 30px; -$S_NOTHEMES_SMALL_MAX: 320px; -$W_NOTHEMES: 44px; -$S_THEMES: 600px; -$S_THEMES_WOTHER: 1200px; -$W_THEMES: 160px; - -$W_BOOK_SHORT_FULL: 487.5px; -$S_BOOK_SHORT_FULL: $W_BOOK_SHORT_FULL + $W_MENU + 2px; -$S_BOOK_SHORT_MEDIUM: 400px; diff --git a/apps/wolnelektury_core/static/scss/book_text/info.scss b/apps/wolnelektury_core/static/scss/book_text/info.scss deleted file mode 100644 index 8b1378917..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/info.scss +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/wolnelektury_core/static/scss/book_text/menu.scss b/apps/wolnelektury_core/static/scss/book_text/menu.scss deleted file mode 100644 index 1a555733b..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/menu.scss +++ /dev/null @@ -1,128 +0,0 @@ -%menu-toggle { - position: relative; - padding: 0; - &:before { - content: ""; - position: absolute; - top: 8px; - height: 5px; - border-top: 15px double #ddd; - border-bottom: 5px solid #ddd; - } -} - -#no-menu { - @include size(width, $W_NONUMBERS_TINY); - - @include min-screen($S_NONUMBERS_TINY_MAX) { - @include size(width, $W_NONUMBERS); - } - - @include min-screen($S_NUMBERS) { - @include size(width, 44px); - } - - /* Button for showing menu */ - #menu-toggle-on { - @extend %menu-toggle; - display: block; - background: #191919; - color: #ddd; - text-align: center; - z-index: 100; - @include size(height, 44px); - padding: 0; - - &:before { - left: 5px; - right: 5px; - @include min-screen(240px) { - left: 8px; - right: 8px; - } - } - } -} - -#menu-toggle-off { - @extend %menu-toggle; - height: 24px; - &:before { - left: 25px; - right: 25px; - } -} - - -#menu { - display: none; - width: 80px; - height: 100%; -} - -#menu, #no-menu { - z-index: 101; - position: fixed; - top: 0; - left: 0; - text-align: center; - line-height: 1.1em; - background: #191919; - color: #ddd; - - ul { - list-style: none; - margin: 0; - padding: 0; - - li { - - a { - padding: 10px 0; - color: white; - display: block; - text-decoration: none; - - &.active { - background: white; - color: black; - } - - .label { - display: block; - font-size: 12px; - } - } - } - - } -} - -/* body class for showing menu */ -.menu-showed { - #menu { - display: block; - } - #no-menu { - display: none; - } -} - -/* menu showing by default */ -@include min-screen($S_MENU) { - #menu { - display: block; - } - #no-menu { - display: none; - } - /* body class for hiding menu */ - .menu-hidden { - #menu { - display: none; - } - #no-menu { - display: block; - } - } -} diff --git a/apps/wolnelektury_core/static/scss/book_text/note.scss b/apps/wolnelektury_core/static/scss/book_text/note.scss deleted file mode 100644 index 55dd76567..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/note.scss +++ /dev/null @@ -1,3 +0,0 @@ -#menu-nota_red { - display: none; -} diff --git a/apps/wolnelektury_core/static/scss/book_text/numbering.scss b/apps/wolnelektury_core/static/scss/book_text/numbering.scss deleted file mode 100644 index e31b49403..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/numbering.scss +++ /dev/null @@ -1,65 +0,0 @@ -@mixin hide-line-numbers { - float: left; - margin-left: -$W_NONUMBERS_TINY; - - width: $W_NONUMBERS_TINY; - height: 100%; - padding: 0; - overflow: hidden; - - color: white; - text-align: right; - - &:hover, &:active { - color: #ccc; - background-color: #CCC; - } - - &:before { - content: "#"; - display: block; - float: left; - width: $W_NONUMBERS_TINY / 2 - 1px; - height: 100%; - overflow: hidden; - border-right: 1px solid #ccc; - } - - @include min-screen($S_NONUMBERS_TINY_MAX) { - width: $W_NONUMBERS; - margin-left: -$W_NONUMBERS; - - &:before { - width: $W_NONUMBERS / 2 - 1; - } - } -} - - -.anchor { - @include hide-line-numbers; - - @include min-screen($S_NUMBERS) { - /* Show line numbers. */ - font-size: .8em; - margin-left: -$W_NUMBERS; - width: $W_NUMBERS - 4px; - height: auto; - padding: 2px; - text-align: center; - color: #ccc; - - &:before { - display: none; - } - } -} - -@include min-screen($S_NUMBERS) { - .always-hide-line-numbers { - /* Cancel showing line numbers. */ - .anchor { - @include hide-line-numbers; - } - } -} diff --git a/apps/wolnelektury_core/static/scss/book_text/other.scss b/apps/wolnelektury_core/static/scss/book_text/other.scss deleted file mode 100644 index 9ccedd932..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/other.scss +++ /dev/null @@ -1,52 +0,0 @@ -nav #menu-other { - display: none; -} - - -#other { - ul { - list-style: none; - padding: 0; - margin: 1em 0; - - li { - display: inline-block; - - a { - display: block; - } - } - } -} - - -.other-text-close { - background: #000; - color: #ddd; - opacity: .5; - text-align: center; - padding: .5em; - font-weight: bold; -} - - -#other-text { - position: relative; - display: none; - - .other-text-close { - position: absolute; - top: 0; - right: 0; - } -} - -.other-text-close { - display: none; -} - -.with-other-text { - .other-text-close { - display: block; - } -} diff --git a/apps/wolnelektury_core/static/scss/book_text/settings.scss b/apps/wolnelektury_core/static/scss/book_text/settings.scss deleted file mode 100644 index edcb8bfdb..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/settings.scss +++ /dev/null @@ -1,47 +0,0 @@ -@mixin switch-on { - background: #aaa; - border-top-color: #888; - border-left-color: #888; - border-bottom-color: #ddd; - border-right-color: #ddd; - - border-width: 2px; - border-style: solid; - -} -@mixin switch-off { - background: none; - border-color: #aaa; -} -.settings-switch { - display: block; - padding: .5em; - margin: .5em; - //border: 1px solid #aaa; - border-radius: 1em; - color: black; - border-width: 2px; - border-style: solid; -} - -nav #menu-settings { - display: none; -} - -#settings-annotations {@include switch-on;} -.no-annotations { - #settings-annotations {@include switch-off;} - .annotation {display: none;} -} - -#settings-themes {@include switch-on;} -.always-hide-themes { - #settings-themes {@include switch-off;} -} - -#settings-line-numbers {@include switch-on;} -.always-hide-line-numbers { - #settings-line-numbers {@include switch-off;} -} - - diff --git a/apps/wolnelektury_core/static/scss/book_text/themes.scss b/apps/wolnelektury_core/static/scss/book_text/themes.scss deleted file mode 100644 index 26ed14bdb..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/themes.scss +++ /dev/null @@ -1,110 +0,0 @@ -nav #menu-themes { - display: none; -} - -/* Add a missing header. */ -#themes:before { - content: "Motywy"; -} - - -@mixin theme-hidden { - width: 20px; - height: 20px; - overflow: hidden; - margin-right: -20px; - border: none; - padding: 0; - - &:before { - content: "▲"; - color: #ccc; - text-align: center; - display: block; - } - - @include min-screen(240px) { - width: 30px; - margin-right: -30px; - &:before { - font-size: 2em; - } - } - - @include min-screen(320px) { - width: 44px; - margin-right: -44px; - &:before { - font-size: 2.5em; - } - } - - &.showing { - @include theme-showing; - } - -} - -@mixin theme-showing { - @include size(width, 120px); - height: auto; - overflow: visible; - @include size(margin-left, 30px); - @include size(font-size, 14.4px); - text-indent: 0; - - @include size(border-left, 1px solid #DDDDDD); - color: #777; - @include size(padding, 0 0 0 8px); - - &:before { - display: none; - } -} - -.theme-begin { - @include theme-hidden; - - font-size: .9em; - position: relative; - float: right; - margin-bottom: 8px; - clear: both; - line-height: 1.5em; - text-align: left; - z-index: 60; - - font-style: normal; - font-weight: normal; - font-variant: normal; - letter-spacing: 0; - text-transform: none; - text-decoration: none; - - @include min-screen(600px) { - @include theme-showing; - margin-right: -160px; - } - - &.showing { - @include theme-showing; - } -} - - -.always-hide-themes { - .theme-begin { - @include theme-hidden; - } -} - -.with-other-text { - .theme-begin { - @include theme-hidden; - - @include min-screen(1200px) { - @include theme-showing; - margin-right: -160px; - } - } -} diff --git a/apps/wolnelektury_core/static/scss/book_text/toc.scss b/apps/wolnelektury_core/static/scss/book_text/toc.scss deleted file mode 100644 index 18975c760..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/toc.scss +++ /dev/null @@ -1,3 +0,0 @@ -nav #menu-toc { - display: none; -} diff --git a/apps/wolnelektury_core/static/scss/dictionary/dictionary.scss b/apps/wolnelektury_core/static/scss/dictionary/dictionary.scss deleted file mode 100644 index a90059924..000000000 --- a/apps/wolnelektury_core/static/scss/dictionary/dictionary.scss +++ /dev/null @@ -1,9 +0,0 @@ -.dictionary-note { - @include white-box; - @include size(padding, 8px); - @include size(margin, 10px 0); -} -.dictionary-note-source { - @include white-box; - @include size(padding, 8px); -} diff --git a/apps/wolnelektury_core/static/scss/funding/funding.scss b/apps/wolnelektury_core/static/scss/funding/funding.scss deleted file mode 100644 index 3b63e2037..000000000 --- a/apps/wolnelektury_core/static/scss/funding/funding.scss +++ /dev/null @@ -1,224 +0,0 @@ -.funding { - background: orange; - margin: auto; - @include size(padding, 5px 0); - position: relative; - .close { - @include mono; - @include size(font-size, 16px); - position: absolute; - top: 0px; - right: 0; - @include size(padding, 1px 5px 10px 10px); - } - .call-area { - float:left; - @include size(padding-right, 6px); - } - a.call { - @include size(height, 18px); - - @include size(padding, 5.25px 7.5px); - @include size(margin, 7.5px); - display: inline-block; - vertical-align: middle; - text-align: center; - - background: lighten(#018189, .05); - @include size(width, 135px); - - @include min-screen(420px) { - vertical-align: top; - } - } - .learn-more { - text-align: center; - margin: auto; - @include size(font-size, 10px); - padding: .5em; - - @include min-screen(300px) { - display: inline; - } - @include min-screen(420px) { - padding: 0; - display: block; - } - } - .description { - @include size(padding-left, 6px); - - a { - display: block; - color: black; - @include size(padding, 0 3px); - } - } - strong { - @include size(font-size, 15px); - @include size(padding, 3px 0 0); - } - .progress { - .piece { - @include size(font-size, 13px); - @include size(padding, 4px 6px); - } - @include size(margin, 3px 12px 4px 0); - @include size(border-radius, 20px); - background-image: url(/static/img/progress-pixel.png); - background-repeat: repeat-y; - background-color: #F68900; - @include box-shadow(1px 1px 1px #888); - - .progress-collected { - float:left; - &:after { - content: " / "; - } - @include min-screen(500px) { - &:after { - content: none; - } - } - } - .progress-target { - float: left; - padding-left: 0; - @include min-screen(500px) { - float: right; - @include size(padding-left, 6px); - } - } - .progress-extralabel { - display: none; - @include min-screen(500px) { - display: inline; - } - } - .progress-until { - display: inline-block; - margin-right: 0em; - text-align: right; - @include min-screen(500px) { - text-align: center; - } - } - } - .with-button { - clear: left; - @include min-screen(420px) { - clear: none; - @include size(margin-left, 171px); - } - } - - .funding-title { - @include size(font-size, 11px); - display: block; - @include min-screen(640px) { - display: inline; - } - } - .funding-title-strong { - @extend .funding-title; - font-weight: bold; - @include size(font-size, 15px); - } -} - -.funding-top-header { - @extend .funding; - - @include min-screen(1000px) { - @include size(width, 975px); - } -} - - -.wlfund { - width: 100%; - border-spacing:0; - - td { - @include size(padding, 10px 5px 10px); - text-align: center; - @include size(border-top, 10px solid rgba(255, 255, 255, 0)); - @include size(border-bottom, 2px solid #DDDDDD); - - background-clip: padding-box; - -moz-background-clip: padding; - -webkit-background-clip: padding; - } - td.oneline { - white-space: nowrap; - } - - td:last-child { - text-align: right; - } - - .funding-plus td { - background-color: mix(#0D7E85, white, .2); - } - - .funding-minus td { - background-color: white; - } -} - - - -.honking { - background: #018189; - @include size(font-size, 15px); - @include size(padding, 7.5px); - color: white; - border: 0; - @include box-shadow(3px 3px 4.5px #888888); - position: relative; -} -.honking:hover { - @include box-shadow(none); - @include size(top, 1px); - @include size(left, 1px); -} - - - -.share { - a { - @include size(margin-right, 15px); - - img { - vertical-align: middle; - } - } -} - -#funding-closeable { - display: none; -} -#funding-handle { - position: absolute; - top: 0; - right: 0; - z-index: 2; - background: orange; - cursor: pointer; - @include size(padding, 2.6px 13px); - @include size(border-radius, 0 0 0 10px); - @include size(font-size, 13px); -} - -.funding-cover { - float: left; - @include size(margin-right, 10px); -} - -.funding-details-intro { - @include size(padding-top, 10px); - - h3:first-of-type { - margin-top: 0; - } -} diff --git a/apps/wolnelektury_core/static/scss/main.scss b/apps/wolnelektury_core/static/scss/main.scss deleted file mode 100644 index bab1fb46f..000000000 --- a/apps/wolnelektury_core/static/scss/main.scss +++ /dev/null @@ -1,29 +0,0 @@ -@import "tools"; - -@import "main/const"; -@import "main/auth"; -@import "main/base"; -@import "main/book_box"; -@import "main/book_list"; -@import "main/catalogue"; -@import "main/cite"; -@import "main/dialogs"; -@import "main/footer"; -@import "main/form"; -@import "main/fragment"; -@import "main/header"; -@import "main/hidden"; -@import "main/main_content"; -@import "main/main_page"; -@import "main/menu"; -@import "main/picture_box"; -@import "main/search"; -@import "main/tag"; - -@import "dictionary/dictionary"; - -@import "funding/funding"; - -@import "polls/polls"; - -@import "social/shelf_tags"; diff --git a/apps/wolnelektury_core/static/scss/main/auth.scss b/apps/wolnelektury_core/static/scss/main/auth.scss deleted file mode 100755 index 793afe4f4..000000000 --- a/apps/wolnelektury_core/static/scss/main/auth.scss +++ /dev/null @@ -1,47 +0,0 @@ -.email_list { - .verified { - display: inline-block; - margin-left: 2em; - font-style: italic; - } - .unverified { - display: inline-block; - margin-left: 2em; - color: #717171; - font-style: italic; - } - .primary { - display: inline-block; - margin-left: 2em; - font-weight: bold; - } -} - -.socialaccount_provider { - display: inline-block; - background-repeat: no-repeat; - color: transparent; - - @include size(height, 40px); - @include size(width, 40px); - vertical-align: middle; - - &.google { - background-image: url(/static/img/auth/google.png); - } - &.facebook { - background-image: url(/static/img/auth/facebook.png); - } -} - - -.socialaccount_providers { - @include size(margin, 10px 0); - padding: 0; - - li { - display: inline; - list-style: none; - @include size(margin-right, 10px); - } -} diff --git a/apps/wolnelektury_core/static/scss/main/base.scss b/apps/wolnelektury_core/static/scss/main/base.scss deleted file mode 100755 index 1f1021a9f..000000000 --- a/apps/wolnelektury_core/static/scss/main/base.scss +++ /dev/null @@ -1,110 +0,0 @@ -/* Basic layout */ -html, body { - margin: 0; - padding: 0; -} - - -.clearboth { - clear: both; -} - - - -/* Basic colors and fonts */ -body { - font-family: Georgia; - background: #f7f7f7; - color: black; - - @include size(font-size, 13px); -} - -a { - color: #0d7e85; - text-decoration: none; - - img { - border: 0; - } -} - -h1 { - @include size(font-size, 35px); - font-weight: normal; - @include size(margin-top, 14px); - - a { - color: inherit; - } -} - -h2 { - @include size(font-size, 20px); - font-weight: normal; -} - -h3 { - @include size(font-size, 15px); - font-weight: normal; -} - - -.normal-text { - line-height: 1.3em; - @include size(margin, 0 5px); - - @media screen and (min-width: 62.5em) { - margin: 0; - } -} - -.white-box { - @include size(padding, 10px); - @include white-box; -} - - -ul.plain { - list-style:none; - margin: 0; - padding: 0; -} - - -.theme-list-link { - @include mono; - @include size(font-size, 11px); - - &:after { - @include size(padding-left, 11px); - content: url("/static/img/arrow-teal.png"); - vertical-align: middle; - } -} - - -.left-column, .right-column { - @include size(max-width, 600px); -} -@media screen and (min-width: 62.5em) { - .left-column { - @include size(width, 470px); - float: left; - } - .right-column { - @include size(width, 470px); - float:right; - } -} - -.pagination { - display: block; - @include size(font-size, 12px); - @include size(padding, 6px); - text-align:center; -} - -.simple-hidden-initially { - display: none; -} diff --git a/apps/wolnelektury_core/static/scss/main/book_box.scss b/apps/wolnelektury_core/static/scss/main/book_box.scss deleted file mode 100755 index d318fda34..000000000 --- a/apps/wolnelektury_core/static/scss/main/book_box.scss +++ /dev/null @@ -1,543 +0,0 @@ -@mixin inner-box { - display: block; - color: black; - @include size(margin, 1px); - @include size(padding, 8px 10px); - @include white-box; -} - - -.cover-area { - float: left; - @include size(margin-right, 15px); - @include size(margin-bottom, 5px); - - @include min-screen($S_BOOK_SHORT_FULL) { - position: absolute; - top: 0; - left: 0; - margin-right: 0; - } - - img.cover { - @include size(height, 193px / 2); - @include size(width, 139px / 2); - - @include min-screen($S_BOOK_SHORT_MEDIUM) { - @include size(height, 193px); - @include size(width, 139px); - } - } -} - -.book-mini-box { - /* Original design fits 6 boxes horizontally in 975px (162.5px each), - * but we really want to fit 2 boxes on a 320px mobile screen. */ - - @include size(width, 160px); - display: inline-block; - vertical-align: top; - - @include min-screen(350px) { - @include size(width, 162.5px); - } - - .book-mini-box-inner { - @include inner-box; - @include size(height, 271px); - @include size(margin, 1px); - @include size(padding, 8px 9px); - overflow: hidden; - - @include min-screen(350px) { - @include size(padding, 8px 10px); - } - - a { - display: block; - } - } - img.cover { - @include size(height, 193px); - @include size(width, 139px); - @include size(margin-bottom, 18px); - } - .language { - color: #aaa; - float: right; - @include mono; - @include size(font-size, 10px); - text-transform: uppercase; - position: relative; - @include size(top, -20px); - } - .desc { - margin-left: 0; - } - .author { - @include size(font-size, 11px); - @include mono; - color: #6d7877; - display: block; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .title { - @include size(font-size, 14px); - color: #242424; - } -} - - - -.work-list { - margin: 0; - padding: 0; - list-style: none; - - .Book-item { - @include min-screen($S_BOOK_SHORT_FULL) { - display: inline-block; - } - vertical-align: top; - } -} - - -.book-box { - margin: 0; - vertical-align: top; - - /* */ - a { - color: #0D7E85; - } - - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(width, $W_BOOK_SHORT_FULL); - } - - .book-box-inner { - position: relative; - @include inner-box; - @include size(min-height, 197.5px); - } -} - - -.book-wide-box { - margin: 0; - vertical-align: top; - - @media screen and (min-width: 62.5em) { - @include size(width, 975px); - } - - .book-box-inner { - position: relative; - @include size(min-height, 244px); - @include inner-box; - @include size(margin-left, 0); - @include size(margin-right, 0); - - .book-left-column { /* FIXME */ - @media screen and (min-width: 62.5em) { - float: left; - @include size(width, 536px); - } - } - - .license-icon { - display: block; - @include size(margin-top, 5px); - } - - @include min-screen($S_BOOK_SHORT_FULL) { - // Show full title on the work's page. - - .book-box-body { - height: auto; - @include size(min-height, 170px); - - .book-box-head .title { - height: auto; - @include size(min-height, 57.6px); - } - } - } - - .book-box-head, - .tags, - .book-box-tools { - @media screen and (min-width: 62.5em) { - @include size(width, 382px); - } - } - - #theme-list-wrapper { - @include min-screen($S_BOOK_SHORT_MEDIUM) { - @include size(margin-left, 154px); - @include size(width, 300px); - } - margin-bottom: 0; - - p { - @include size(margin-top, 10px); - @include size(margin-bottom, 10px); - } - } - - .right-column { - @include size(margin-top, 16px); - // Eat the padding - @include size(margin-left, -10px); - @include size(margin-right, -10px); - max-width: none; - - @media screen and (min-width: 62.5em) { - @include size(width, 415px); - // Eat the padding - @include size(margin-top, -8px); - } - - .other-tools, - .other-download { - @include size(font-size, 11px); - clear: left; - @include size(margin-top, 25px); - line-height: 1.75em; - @include size(margin-left, 15px); - - h2 { - margin: 0; - @include size(font-size, 11px); - @include mono; - } - - @include min-screen($S_BOOK_SHORT_FULL) { - float: left; - clear: none; - @include size(width, 145px); - @include size(margin-top, 50px); - @include size(margin-right, 0); - @include size(margin-bottom, 0); - @include size(margin-left, 5px); - } - - @include min-screen(1000px) { - @include size(margin-top, 50px); - line-height: 1.2em; - } - } - .other-download { - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(margin-left, 15px); - @include size(width, 220px); - } - } - } - } -} - -@media screen and (min-width: 50em) { - .picture.book-wide-box .right-column { - float: none; - @include size(width, 415px); - top: 0; - @include size(margin-left, 550px); - margin-top: 0em; - } -} - - -.book-box-body { - @include size(margin-bottom, 10px); - @include min-screen($S_BOOK_SHORT_FULL) { - margin-bottom: 0; - @include size(height, 170px); - } - position: relative; - - .book-box-head, - .tags, - .book-box-tools { - @include min-screen($S_BOOK_SHORT_FULL) { - margin-left: 154px; - } - } - - .book-box-head { - @include size(padding-top, 14px); - @include size(margin-bottom, 10px); - - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(min-height, 70px); - } - - a { - color: black; - } - .author { - @include size(font-size, 11px); - @include mono; - @include size(line-height, 13.2px); - @include size(max-height, 26.4px); - overflow: hidden; - - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(max-width, 264px); - } - } - .title { - @include size(font-size, 24px); - line-height: 1.2em; - @include size(margin-top, 7.2px); - @include size(margin-bottom, 12px); - - @include min-screen($S_BOOK_SHORT_FULL) { - margin-bottom: 0; - @include size(height, 57.6px); - overflow: hidden; - } - } - } - - .tags { - @include size(font-size, 11px); - line-height: 1.2em; - margin-bottom: 5px; - - @include min-screen($S_BOOK_SHORT_FULL) { - clear: right; - @include size(max-height, 57.6px); - overflow: hidden; - } - - .category { - display: block; - @include size(margin-top, 6px); - @include size(margin-bottom, 6px); - - @include min-screen($S_BOOK_SHORT_FULL) { - display: inline; - } - - .mono { - @include mono; - } - - .book-box-tag { - @include size(margin-left, 4.4px); - @include size(margin-right, 5.5px); - } - } - } - -} - - - -.book-box-tools { - @include size(font-size, 11px); - margin: 0; - padding: 0; - list-style: none; - - clear: left; - - @include min-screen($S_BOOK_SHORT_MEDIUM) { - clear: none; - @include size(margin-left, 139px + 15px); - } - - li { - @include mono; - margin-top: 1em; - - @include min-screen($S_BOOK_SHORT_FULL) { - display: inline-block; - margin-top: 0; - } - } - - .book-box-read { - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(width, 126.5px); - } - - a { - @include mono; - } - - a:before { - content: url("/static/img/read.png"); - @include size(font-size, 25px); - @include size(margin-right, 3.71px); - vertical-align: middle; - font-weight: normal; - } - } - - .book-box-download { - position: relative; - - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(width, 93.5px); - } - - a { - position: relative; - z-index: 101; - - @mixin downarrow { - color: #0D7E85; - - &:before { - content: url("/static/img/download.png"); - @include size(font-size, 25px); - @include size(margin-right, 3.71px); - vertical-align: middle; - font-weight: normal; - display: inline; - } - } - - &.downarrow { - @include downarrow; - &.hoverclick { - color: black; - &:before { - display: none; - } - - @include min-screen($S_BOOK_SHORT_FULL) { - @include downarrow; - } - } - } - } - - .book-box-formats { - @include size(padding-left, 19px); - - @include min-screen($S_BOOK_SHORT_FULL) { - display: none; - position: absolute; - - @include size(width, 180px); - @include size(padding-top, 38px); - @include size(padding-bottom, 9px); - @include size(padding-left, 19px); - @include size(padding-right, 19px); - - @include white-box; - - z-index: 100; - - @include size(top, -16px); - @include size(left, -19px); - } - - span { - display: block; - @include size(margin-top, 16px); - - a { - &:before { - content: url("/static/img/download.png"); - @include size(font-size, 25px); - @include size(margin-right, 3.71px); - vertical-align: middle; - font-weight: normal; - } - } - - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(margin-top, 0); - - &:first-child { - @include size(margin-top, 16px); - } - a:before { - display:none; - } - } - } - } - - &:hover .book-box-formats, - &.hover .book-box-formats { - display: block; - } - } - - .book-box-audiobook { - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(width, 77px); - } - - a:before { - content: url("/static/img/listen.png"); - @include size(font-size, 25px); - @include size(margin-right, 3.71px); - vertical-align: middle; - font-weight: normal; - } - - } -} - - - - -.star { - @include size(font-size, 22.5px); - @include size(margin-right, 11.25px); - position: absolute; - right: 0; - - button::-moz-focus-inner { - padding: 0; - border: 0 - } - .if-unlike button { - font-size: 1em; - font-family: inherit; - border: 0; - background: none; - margin: 0; - padding: 0; - color: #757575; - } - .if-like a { - display:block; - text-align:right; - padding: 0; - } -} -.like .if-unlike { - display: none; -} -.unlike .if-like { - display: none; -} - - -#book-detail .see-also, -#picture-detail .see-also { - h1 { - @include size(height, 32px); - margin: 0; - @include size(padding-top, 19px); - @include size(padding-left, 10px); - - @include size(font-size, 11px); - @include mono; - font-weight: normal; - - @media screen and (min-width: 33em) { - @include size(padding-left, 19px); - } - } -} diff --git a/apps/wolnelektury_core/static/scss/main/book_list.scss b/apps/wolnelektury_core/static/scss/main/book_list.scss deleted file mode 100755 index d4115dcbb..000000000 --- a/apps/wolnelektury_core/static/scss/main/book_list.scss +++ /dev/null @@ -1,92 +0,0 @@ -/* listing of all books */ - -#book-a-list { - #book-list-nav { - @include size(border-width, 0); - @include size(border-bottom-width, 1px); - border-style: solid; - border-color: #CFCFCF; - @include size(padding, 9.75px); - line-height: 2em; - - @media screen and (min-width: 30em) { - @include size(border-bottom-width, 0px); - @include size(border-left-width, 1px); - float: right; - width: 50%; - } - - @media screen and (min-width: 62.5em) { - line-height: 1.3em; - } - - h2 { - cursor: pointer; - - &:after { - @include size(padding-left, 10px); - content: url("/static/img/arrow-gray.png"); - vertical-align: top; - } - - @media screen and (min-width: 30em) { - font-size: 1em; - margin: 0; - cursor: regular; - - &:after { - display: none; - } - } - } - - #book-list-nav-index { - display: none; - @media screen and (min-width: 30em) { - display: block !important; - } - } - - ul { - list-style-type: none; - @include size(margin, 5px); - padding: 0; - } - .book-list-show-index { - display: none; - } - } - - #book-list { - @include size(padding-left, 5px); - line-height: 2em; - - @media screen and (min-width: 62.5em) { - @include size(padding-left, 50px); - line-height: 1.3em; - } - - ol { - @include size(padding-left, 13px); - @include size(margin, 4px 0 15.6px 0); - list-style: none; - } - h2 { - @include size(font-size, 13px); - margin: 0; - a { - color: black; - } - } - } - - #book-list-up { - display: block; - position: fixed; - @include size(bottom, 50px); - @include size(right, 50px); - @include size(border-left, solid 1px #CFCFCF); - @include size(padding, 20px 10px); - background-color: white; - } -} diff --git a/apps/wolnelektury_core/static/scss/main/catalogue.scss b/apps/wolnelektury_core/static/scss/main/catalogue.scss deleted file mode 100755 index ba30e8271..000000000 --- a/apps/wolnelektury_core/static/scss/main/catalogue.scss +++ /dev/null @@ -1,29 +0,0 @@ -/* listing of all books */ - -.catalogue-catalogue { - ul { - column-width: 25em; - -moz-column-width: 25em; - -webkit-column-width: 25em; - - @include size(padding-left, 10px); - - @media screen and (min-width: 20em) { - @include size(padding-left, 40px); - } - - li { - margin-bottom: 1em; - - @media screen and (min-width: 62.5em) { - margin-bottom: .5em; - } - } - } - - h2 { - @include size(font-size, 26px); - margin: 0; - @include size(padding, 26px); - } -} diff --git a/apps/wolnelektury_core/static/scss/main/cite.scss b/apps/wolnelektury_core/static/scss/main/cite.scss deleted file mode 100755 index eb3a51139..000000000 --- a/apps/wolnelektury_core/static/scss/main/cite.scss +++ /dev/null @@ -1,61 +0,0 @@ -.cite { - display: block; - color: black; - background: white; - @include size(padding, 30px 20px 1px 80px); - - .vip { - margin: 0; - color: #575C63; - @include size(font-size, 11px); - } - - .cite-body { - @include size(font-size, 18px); - line-height: 1.3em; - - h4 { - margin: 0; - } - .didaskalia { - font-style: italic; - } - .verse { - // Cancel any indentation. - padding-left: 0 !important; - } - .person { - font-style: inherit; - } - } - - blockquote { - padding: 0; - margin: 0; - - p { - margin: 0; - } - } - - .source - { - color: #444; - @include mono; - @include size(font-size, 11px); - @include size(margin-top, 16px); - } -} - - - - -.book-wide-box .cite { - background-color: #f7f7f7; - vertical-align: middle; - @include min-screen(1000px) { - @include size(width, 395px); - } - margin: 0; - @include size(padding, 10px); -} diff --git a/apps/wolnelektury_core/static/scss/main/const.scss b/apps/wolnelektury_core/static/scss/main/const.scss deleted file mode 100644 index 2ebc4b81c..000000000 --- a/apps/wolnelektury_core/static/scss/main/const.scss +++ /dev/null @@ -1,3 +0,0 @@ -$S_BOOK_SHORT_MEDIUM: 320px; -$S_BOOK_SHORT_FULL: 512px; -$W_BOOK_SHORT_FULL: 487.5px; diff --git a/apps/wolnelektury_core/static/scss/main/dialogs.scss b/apps/wolnelektury_core/static/scss/main/dialogs.scss deleted file mode 100755 index 2902862fc..000000000 --- a/apps/wolnelektury_core/static/scss/main/dialogs.scss +++ /dev/null @@ -1,138 +0,0 @@ -.dialog-window { - position: absolute; - display: none; - background-color: transparent; - @include size(margin-top, -5px); - @include size(margin-left, 10px); - @include size(width, 200px); - - @media screen and (max-width: 29.999999em) { - left: 0 !important; - right: 0; - @include size(margin-left, 0); - width: auto; - } - - div.header { - @include mono; - @include size(font-size, 11px); - width: 4em; - background-color: #FFF; - padding: 1em; - right: 0; - left: auto; - float: right; - text-align: center; - - @media screen and (min-width: 30em) { - padding-top: 0.5em; - padding-bottom: 0.5em; - border-right: 0.3em solid #DDD; - } - } - - div.target { - background-color: #FFF; - color: black; - border-bottom: 0.3em solid #DDD; - padding: 1em 10px; - clear: both; - - @media screen and (min-width: 30em) { - border-right: 0.3em solid #DDD; - padding-left: 1em; - padding-right: 1em; - } - } - - h1 { - @include size(font-size, 12px); - font-weight: normal; - margin-top: .4em; - } - - textarea, input { - width: 100%; - } -} - - - - - - - -.cuteform { - @include size(font-size, 11px); - - ol, ul { - padding: 0; - margin: 0; - list-style: none; - @include size(font-size, 11px); - - li { - margin-top: 0.7em; - } - } - - label { - display: block; - } - - span.help-text { - display: block; - font-size: 0.8em; - color: #999; - } - - .error { - color: #BF3024; - display: block; - } - - .errorlist { - color: #BF3024; - } -} - - -.jqmOverlay { background-color: #000; } - - - -.hidelabels label { - @include hidden-label; -} - - -@media screen and (min-width: 30em) { - #login-window { - @include size(width, 260px); - } - #register-window { - width: 26em; - } - #context-login-window { - width: 26em; - } - #suggest-window { - width: 26em; - } - #suggest-publishing-window { - width: 29em; - } - #custom-pdf-window { - width: 24em; - } -} - -#suggest-window textarea { - height: 6em; -} -#suggest-publishing-window textarea { - height: 3em; -} -#custom-pdf-window label { - display: inline; -} diff --git a/apps/wolnelektury_core/static/scss/main/footer.scss b/apps/wolnelektury_core/static/scss/main/footer.scss deleted file mode 100755 index 8969a5ad7..000000000 --- a/apps/wolnelektury_core/static/scss/main/footer.scss +++ /dev/null @@ -1,26 +0,0 @@ -#footer-wrapper { - @include size(margin-top, 50px); - @include size(padding-top, 30px); - background: #fff; - color: #767676; - @include size(border-top, 1px solid #ddd); -} - -footer#main { - @include size(font-size, 10px); - @include size(margin-left, 5px); - @include size(margin-right, 5px); - - @media screen and (min-width: 62.5em) { - @include size(width, 975px); - margin: auto; - } - - p { - @include size(margin-top, 2.5px); - @include size(margin-bottom, 2.5px); - margin-left: 0; - margin-right: 0; - } -} - diff --git a/apps/wolnelektury_core/static/scss/main/form.scss b/apps/wolnelektury_core/static/scss/main/form.scss deleted file mode 100755 index 42e867595..000000000 --- a/apps/wolnelektury_core/static/scss/main/form.scss +++ /dev/null @@ -1,26 +0,0 @@ -form table { - th { - vertical-align: top; - text-align: left; - font-weight: normal; - } - td { - padding-bottom: 1em; - } - - .required th:after { - content: " *"; - } - - .errorlist { - color: red; - margin: 0; - padding: 0; - list-style: none; - } - .helptext { - color: #888; - font-size: .9em; - font-style: italic; - } -} diff --git a/apps/wolnelektury_core/static/scss/main/fragment.scss b/apps/wolnelektury_core/static/scss/main/fragment.scss deleted file mode 100755 index 4c765f6fe..000000000 --- a/apps/wolnelektury_core/static/scss/main/fragment.scss +++ /dev/null @@ -1,35 +0,0 @@ -.Fragment-item, .PictureArea-item { - @include size(margin-bottom, 20px); - @include white-box; - - .fragment { - color: black; - display: block; - } - .toggle { - @include size(font-size, 11px); - display: block; - @include size(padding, 5px 0); - } -} - -.area { - display: block; - color: black; - background: white; - @include size(padding, 30px 20px 20px 20px); - position: relative; - clear: both; - - .area-thumbnail { - display:block; - @include size(width, 100px); - float: left; - } - - .area-description { - float: right; - @include size(padding, 10px); - @include size(width, 256px); - } -} diff --git a/apps/wolnelektury_core/static/scss/main/header.scss b/apps/wolnelektury_core/static/scss/main/header.scss deleted file mode 100755 index 63bd8677c..000000000 --- a/apps/wolnelektury_core/static/scss/main/header.scss +++ /dev/null @@ -1,215 +0,0 @@ -$header_bg: #191919; - - -#header-wrapper { - position: relative; - - /* Upper-half both sides dark background */ - &:before { - content: " "; - display: block; - z-index: -1; - position: absolute; - top: 0; - @include size(bottom, 45px); - left: 0; - width: 100%; - background-color: $header_bg; - } - - /* Left-side dark background */ - &:after { - content: " "; - display: block; - z-index: -1; - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 50%; - background-color: $header_bg; - } -} - - -header#main { - @include size(line-height, 20px); /* Make links easier to click when wrapped. */ - background-color: $header_bg; - color: #bbb; - - text-align:center; - - @media screen and (min-width: 62.5em) { - position: relative; - @include size(height, 94px); - @include size(width, 975px); - margin: auto; - } - - a { - color: #17CFDB; - } - - #logo { - display: block; - @include size(height, 94px); - - @media screen and (min-width: 24em) { - @include size(width, 173px); - float: left; - } - } - - #tagline { - margin-top: 0; - @include size(margin-left, 5px); - @include size(margin-right, 5px); - padding-top: 0; - @include size(font-size, 11px); - - @media screen and (min-width: 24em) { - @include size(padding-top, 6px); - @include size(font-size, 13px); - @include size(margin-left, 180px); - text-align: right; - } - - @media screen and (min-width: 62.5em) { - position: absolute; - @include size(top, 10px); - @include size(left, 255px); - @include size(margin-left, 0px); - } - } - - #user-info { - margin-top: 0; - @include size(margin-left, 5px); - @include size(margin-right, 5px); - padding-top: 0; - @include mono; - @include size(font-size, 10px); - position: relative; - - @media screen and (min-width: 24em) { - @include size(padding-top, 15px); - @include size(margin-left, 180px); - text-align: right; - } - @media screen and (min-width: 62.5em) { - position: absolute; - top: 0; - right: 0; - @include size(margin-left, 0); - @include size(margin-right, 0); - } - - /* We want submenu on far left on small screens. */ - .hidden-box-wrapper { - position: static; - @media screen and (min-width: 24em) { - position: relative; - } - } - - #user-menu { - display: none; - - text-align: left; - line-height:1.6em; - left: 0; - right: 0; - top: 2em; - - @media screen and (min-width: 15em) { - right: auto; - width: 15em; - } - - a { - color: #0D7E85; - } - } - } - - form#search-area { - position: relative; - clear: both; - @include size(height, 45px); - background: #444444; - color: white; - - @media screen and (min-width: 62.5em) { - position: absolute; - @include size(top, 49px); - @include size(left, 240px); - @include size(right, 0); - } - - #search-field { - position: absolute; - @include size(top, 5px); - @include size(left, 5px); - @include size(right, 113px); - - label { - @include hidden-label; - } - input#search { - z-index: 200; - position: relative; - @include size(height, 33px); - width: 100%; - padding: 0; - @include size(padding-left, 13px); - @include size(line-height, 32.5px); - - border: none; - @include size(border-radius, 5px); - @include box-shadow(0 0 6.5px #444444 inset); - - font-family: Georgia; - @include size(font-size, 13px); - background-color: white; - color: black; - - /* styling search placeholder */ - &::placeholder - { - font-family: Georgia; - font-style: italic; - color: #767676; - } - &::-webkit-input-placeholder - { - font-family: Georgia; - font-style: italic; - color: #767676; - } - &::-moz-placeholder - { - font-family: Georgia; - font-style: italic; - color: #767676; - } - } - } - button { - display: inline-block; - position: absolute; - top: 0; - right: 0; - @include size(height, 45px); - @include size(width, 94px); - margin: 0; - padding: 0; - - border: none; - - @include mono; - @include size(font-size, 11px); - background: #018189; - color: white; - } - } -} diff --git a/apps/wolnelektury_core/static/scss/main/hidden.scss b/apps/wolnelektury_core/static/scss/main/hidden.scss deleted file mode 100755 index 718525be0..000000000 --- a/apps/wolnelektury_core/static/scss/main/hidden.scss +++ /dev/null @@ -1,53 +0,0 @@ -.hidden-box-wrapper { - position: relative; - - .hidden-box { - position: absolute; - left: 0; - display: none; - @include size(padding, 10px 10px 5px 10px); - @include white-box; - - z-index: 500; - - ul { - list-style: none; - padding: 0; - margin: 0; - @include size(font-size, 11px); - - @include size(column-width, 132px); - @include size(-moz-column-width, 132px); - @include size(-webkit-column-width, 132px); - - @media screen and (min-width: 24em) { - @include size(width, 320px); - } - - @media screen and (min-width: 34em) { - @include size(width, 480px); - } - - @media screen and (min-width: 62.5em) { - @include size(width, 528px); - } - - - - li { - margin-bottom: 1em; - - @media screen and (min-width: 62.5em) { - margin-bottom: .5em; - } - } - } - } -} - -@media screen and (min-width: 24em) { - #menu-collections ul { - @include size(width, 180px); - } -} - diff --git a/apps/wolnelektury_core/static/scss/main/main_content.scss b/apps/wolnelektury_core/static/scss/main/main_content.scss deleted file mode 100755 index 87e140232..000000000 --- a/apps/wolnelektury_core/static/scss/main/main_content.scss +++ /dev/null @@ -1,8 +0,0 @@ -#main-content { - position: relative; - - @media screen and (min-width: 62.5em) { - @include size(width, 975px); - margin: auto; - } -} diff --git a/apps/wolnelektury_core/static/scss/main/main_page.scss b/apps/wolnelektury_core/static/scss/main/main_page.scss deleted file mode 100755 index ddce4fc21..000000000 --- a/apps/wolnelektury_core/static/scss/main/main_page.scss +++ /dev/null @@ -1,256 +0,0 @@ -#big-cite { - background-color: #444; - color: white; - padding: 0; - margin: 0; - background-size: 100%; - background-position: 50% 68%; - background-repeat: repeat-y; - - background-image: url(/static/img/backdrop/book-drawer2.jpg); - - @media screen and (min-width: 62.5em) { - background-image: url(/static/img/backdrop/book-drawer2.jpg); - } - - .cite { - @include size(padding, 46px 10px 48px 0); - background: none; - color: white; - - @media screen and (min-width: 30em) { - @include size(padding-right, 40px); - } - - .vip { - @include size(margin-left, 10px); - @include size(margin-top, 2.5px); - @include size(margin-bottom, 5px); - @include size(font-size, 11px); - - @media screen and (min-width: 16em) { - padding-left: 10%; - @include size(margin-left, -18px); - } - - @media screen and (min-width: 62.5em) { - float: left; - padding-left: 0; - @include size(margin-left, 16px); - text-align: right; - @include size(width, 147px); - } - } - - .cite-body { - @include size(margin, .5px); - @include size(font-size, 20px); - line-height: 1.16em; - - @media screen and (min-width: 30em) { - @include size(font-size, 30px); - } - } - - .source { - @include size(margin-top, 16px); - @include size(margin-bottom, 16px); - @include size(margin-right, 2px); - @include size(font-size, 12px); - } - - /* Make cite body and source slide to the left. */ - .cite-body, .source { - @include size(margin-left, 10px); - - @media screen and (min-width: 16em) { - padding-left: 21.9%; - @include size(margin-left, -38px); - } - - @media screen and (min-width: 62.5em) { - padding-left: 0; - @include size(margin-left, 175px); - } - } - - /* Semi-transparent background. */ - .cite-body span, - .vip span, - .source span { - color: white; - background-color: rgb(0, 0, 0); - background-color: rgba(0, 0, 0, 0.6); - /* For IE 5.5 - 7*/ - filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); - /* For IE 8*/ - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; - } - } - - /* a long cite displays smaller */ - .cite-small .cite-body { - @include size(font-size, 16px); - @media screen and (min-width: 30em) { - @include size(font-size, 20px); - } - } - - h2 { - margin: 0; - @include size(font-size, 11px); - color: #575c63; - } -} - - -#promo-box { - @include size(margin-top, 16px); - - @media screen and (min-width: 33em) { - float: right; - @include size(margin-top, -51px); - @include size(width, 320px); - } - - h1 { - @include size(padding, 20px 5px 0 10px); - @include size(height, 31px); - margin: 0; - background: #191919; - color: white; - @include mono; - @include size(font-size, 13px); - font-weight: normal; - - @media screen and (min-width: 33em) { - @include size(padding-left, 25px); - @include size(padding-right, 25px); - } - } - - #promo-box-body { - @include size(padding, 20px 5px); - @include size(border-bottom, 2px solid #efefef); - background: #efefef; - - @media screen and (min-width: 33em) { - @include size(padding-left, 28px); - @include size(padding-right, 28px); - } - - @media screen and (min-width: 62.5em) { - @include size(height, 300px); - } - - a { - display: block; - color: #6c6c6c; - } - p { - margin-top: 0; - @include size(font-size, 12px); - line-height: 1.55em; - color: #6c6c6c; - } - h2, h3 { - color: #0d777e; - @include size(font-size, 11px); - @include size(height, 27.5px); - margin: 0; - @include mono; - font-weight: normal; - - &:after { - content: " >"; - } - } - } -} - - -#main-last { - h1 { - @include size(height, 32px); - margin: 0; - @include size(padding-top, 19px); - @include size(padding-left, 10px); - - @include size(font-size, 11px); - @include mono; - font-weight: normal; - - @media screen and (min-width: 33em) { - @include size(padding-left, 19px); - } - - a { - color: black; - - &:after { - content: " >"; - } - } - } - .book-mini-box:nth-child(3) { - @media screen and (min-width: 30em) { - margin-right: 3em; - } - @media screen and (min-width: 33em) { - margin-right: 0; - } - } -} - - -.infopages-box { - margin: 0; - @include size(margin-top, 5px); - @include size(padding, 0 5px); - vertical-align: top; - color: #989898; - - @media screen and (min-width: 20em) { - display: inline-block; - @include size(width, 206px); - @include size(padding-left, 17px); - @include size(padding-right, 17px); - } - - h1 { - @include size(height, 28px); - margin: 0; - @include size(padding-top, 25px); - @include size(font-size, 11px); - color: #017e85; - font-weight: normal; - @include mono; - } - - a { - color: black; - } - - ol, ul { - @include size(font-size, 11px); - list-style: none; - padding: 0; - margin: 0; - line-height: 1.45em; - - li { - @include size(margin-bottom, 8px); - @media screen and (min-width: 62.5em) { - @include size(margin-bottom, 2.5px); - } - } - } - - .social-links { - @include size(margin-top, 10px); - - a { - @include size(margin-right, 6px); - } - } -} diff --git a/apps/wolnelektury_core/static/scss/main/menu.scss b/apps/wolnelektury_core/static/scss/main/menu.scss deleted file mode 100755 index 846e4c88c..000000000 --- a/apps/wolnelektury_core/static/scss/main/menu.scss +++ /dev/null @@ -1,177 +0,0 @@ -#nav-line { - background-color: #e2e2e2; - position: relative; - - @media screen and (min-width: 62.5em) { - @include size(width, 975px); - margin: auto; - } - - #show-menu { - display: block; - float: left; - @include size(line-height, 13px); - @include size(padding, 18px 13px); - color: #0c7076; - @include size(font-size, 11px); - @include mono; - - .long { - display: none; - - &:after { - @include size(padding-left, 10px); - content: url("/static/img/arrow-gray.png"); - vertical-align: top; - } - } - - @media screen and (min-width: 20em) { - .long { display: inline; } - .short { display: none; } - } - - @media screen and (min-width: 53em) { - display: none; - } - } - - ul#menu { - list-style: none; - padding: 0; - margin: 0; - - display: none; - position: absolute; - @include size(top, 49px); - left: 0; - @include size(right, 10px); - z-index: 400; - - @media screen and (min-width: 24em) { - right: auto; - } - - @media screen and (min-width: 53em) { - display: block !important; - position: static; - @include size(margin-left, 6px); - } - - li.menu { - background-color: #e2e2e2; - - @media screen and (min-width: 53em) { - float: left; - } - - a.menu { - display: block; - @include size(line-height, 13px); - @include size(padding, 18px 12px 15px); - @include size(border-bottom, 3px solid #e2e2e2); - color: #0c7076; - @include size(font-size, 11px); - @include mono; - } - - a.hidden-box-trigger:hover { - border-bottom-color: white; - } - } - } - - #lang-menu { - display: block; - float: right; - - background: #f7f7f7; - @include mono; - - @media screen and (min-width: 15em) { - position: relative; - } - - #lang-button { - @include size(padding-left, 25px); - @include size(padding-right, 20px); - - display:block; - @include size(line-height, 17px); - @include size(padding-top, 16px); - @include size(padding-bottom, 16px); - - @include size(font-size, 10px); - color: #717171; - - .label { - display: none; - - @media screen and (min-width: 62.5em) { - display: inline; - } - - &:after { - @include size(padding-left, 10px); - content: url("/static/img/arrow-gray.png"); - vertical-align: top; - } - } - - .lang-flag { - @include size(font-size, 13px); - @include size(line-height, 15px); - } - } - - #lang-menu-items { - z-index: 9999; - - button { - @include mono; - display: none; - background: #f7f7f7; - color: #6f6f6f; - cursor: pointer; - width: 100%; - margin: 0; - @include size(padding, 10px 0); - - @media screen and (min-width: 62.5em) { - @include size(padding, 5px 0); - } - - border-width: 0; - @include size(border-bottom, 1px solid #ddd); - - @include size(font-size, 13px); - - &.active { - color: #000; - } - } - } - - &:hover, &.hover { - #lang-menu-items { - position: absolute; - padding: 0; - left: 0; - right: 0; - - @media screen and (min-width: 15em) { - left: auto; - @include size(width, 180px); - @include size(top, 49px); - } - @media screen and (min-width: 62.5em) { - width: 100%; - } - - button { - display: block; - } - } - } - } -} diff --git a/apps/wolnelektury_core/static/scss/main/picture_box.scss b/apps/wolnelektury_core/static/scss/main/picture_box.scss deleted file mode 100644 index 69d34a398..000000000 --- a/apps/wolnelektury_core/static/scss/main/picture_box.scss +++ /dev/null @@ -1,71 +0,0 @@ -.picture { - &.book-wide-box { - .cover-area { - position: static; - @include size(margin-right, 15px); - @media screen and (min-width: 62.5em) { - margin-right: 0; - } - - img.cover { - @include size(width, 535px); - height: auto; - } - } - - .book-box-head, .tags, .book-box-tools { - margin-left: 0; - } - - - @media screen and (min-width: 62.5em) { - .book-box-head, .tags, .book-box-tools { - float: right; - @include size(width, 403px); - } - } - - .other-tools { - margin: 5em 0 0 0; - } - - .book-box-tools, .tags, #theme-list-wrapper { - clear: both; - margin-left: 0; - } - .book-box-body { - height: auto; - margin-bottom: 1em; - } - - @media screen and (min-width: 50em) { - .book-box-body { - height: auto; - @include size(min-height, 170px); - margin-bottom: 0; - } - .book-box-tools, .tags { - clear: right; - } - - #theme-list-wrapper { - clear: right; - @include size(margin-left, 550px); - } - } - } - - li.book-box-download { - width: 15em; - } -} - - -.work-list { - .Picture-item { - @include min-screen($S_BOOK_SHORT_FULL) { - display: inline-block; - } - vertical-align: top; - } -} diff --git a/apps/wolnelektury_core/static/scss/main/search.scss b/apps/wolnelektury_core/static/scss/main/search.scss deleted file mode 100755 index d8a1e0622..000000000 --- a/apps/wolnelektury_core/static/scss/main/search.scss +++ /dev/null @@ -1,109 +0,0 @@ -/* jquery UI overrides us */ -.ui-menu .ui-menu-item a { - color: #0d7e85 !important; - line-height: 1.636em !important; -} - -.ui-widget { - font-family: Georgia !important; - @include size(font-size, 10px !important); -} - -.ui-widget-content { - background: #EEEEEE !important; /* #E2E2E2 ? */ - border-radius: 0px !important; -} - - - -.inline-tag-lists p span:first-child { - color: #281d1c; -} - -/* just on search page */ -.top-tag-list { - @include size(margin-top, 22px); - @include size(margin-bottom, 16px); -} - - -.search-result { - @include size(border, 1px solid #ddd); - @include size(box-shadow, 2px 2px 2px #ddd); - @include size(margin, 1px); - background: white; - - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(width, $W_BOOK_SHORT_FULL -4px); - } - - @media screen and (min-width: 62.5em) { - @include size(width, 965px); - @include size(padding-right, 8px); - } - - .book-box { - display: inline-block; - - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(width, $W_BOOK_SHORT_FULL - 4px); - } - - .book-box-inner { - border: none; - box-shadow: none; - margin: 0; - } - } -} - - - -.book-list-header { - @media screen and (min-width: 62.5em) { - @include size(width, 975px); - } - padding: 0em; - @include size(margin-left, -1px); - - .book-box-inner { - min-height: 1em; - } - - p { - @include size(font-size, 24px); - @include size(margin, 5px); - } -} - -.snippets { - @media screen and (min-width: 62.5em) { - @include size(width, 440px); - float: right; - } - - .snippet-text { - @include size(font-size, 12px); - @include size(margin, 13px 0); - @include size(padding, 12px); - background: #f7f7f7; - } - - .anchor { - display: none; - } -} - - -.search-hint-label { - display: inline-block; - @include size(font-size, 11px); - @include size(width, 275px); - line-height: 1.636em; -} - -.search-hint-category { - @include size(font-size, 11px); - line-height: 1.636em; -} - diff --git a/apps/wolnelektury_core/static/scss/main/tag.scss b/apps/wolnelektury_core/static/scss/main/tag.scss deleted file mode 100755 index d120a3f97..000000000 --- a/apps/wolnelektury_core/static/scss/main/tag.scss +++ /dev/null @@ -1,102 +0,0 @@ -.page-desc { - @include size(margin-left, 15px); -} - -#tagged-object-list { - @media screen and (min-width: 62.5em) { - .left-column, .right-column { - @include size(width, 480px); - } - } - - .see-also, .download { - float: left; - @include size(margin-top, 20px); - @include size(margin-bottom, 20px); - - h2 { - @include mono; - @include size(font-size, 11px); - margin: 0; - } - - ul { - @include size(font-size, 11px); - list-style: none; - padding: 0; - margin: 0; - } - } - - .see-also { - @include size(margin-left, 80px); - @include size(width, 143px); - } - .download { - @include size(margin-left, 20px); - } - - .left-column .see-also { - margin-left: 0; - } -} - -#description { - @include size(margin-bottom, 26px); - cursor: pointer; - - dl { - margin-top: 0; - } - dt { - display: inline; - font-weight: bold; - margin: 0; - } - dd { - display: inline; - margin: 0; - } - p { - margin-top: 0; - } - #description .meta { - list-style: none; - padding: 0; - margin: 0; - } - #description .meta li { - text-align: right; - color: #666; - @include size(font-size, 11.7px); - } -} - -.inline-tag-lists { - @include size(font-size, 11px); - - .inline-header { - @include mono; - display: inline-block; - vertical-align: top; - @include size(width, 77px); - } - - .inline-body { - display: inline-block; - vertical-align: top; - @include size(margin-bottom, 5.5px); - @include size(max-width, 385px); - - ul { - list-style: none; - padding: 0; - margin: 0; - - li { - display: inline-block; - @include size(margin-right, 11px); - } - } - } -} diff --git a/apps/wolnelektury_core/static/scss/polls/polls.scss b/apps/wolnelektury_core/static/scss/polls/polls.scss deleted file mode 100644 index 28cd5a5cf..000000000 --- a/apps/wolnelektury_core/static/scss/polls/polls.scss +++ /dev/null @@ -1,21 +0,0 @@ -.poll { - width: 400px; - ul { - list-style-type: none; - } -} - -.poll-bar { - border: solid 1px #ddd; - height:6px; - margin-bottom: 10px; -} - -.poll-bar-inner { - background: orange; - height: 6px; -} - -.poll-msg { - font-weight: bold; -} \ No newline at end of file diff --git a/apps/wolnelektury_core/static/scss/social/shelf_tags.scss b/apps/wolnelektury_core/static/scss/social/shelf_tags.scss deleted file mode 100644 index f20fba8b6..000000000 --- a/apps/wolnelektury_core/static/scss/social/shelf_tags.scss +++ /dev/null @@ -1,40 +0,0 @@ -.social-shelf-tags { - list-style: none; - padding: 0; - margin: 10px 0; - - @include min-screen($S_BOOK_SHORT_FULL) { - position: absolute; - top: 134px; - left: 152px; - padding: 10px 10px 5px 10px; - margin: 10px 0; - width: 310px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - - &:hover { - overflow: visible; - text-overflow: ellipsis; - white-space: normal; - z-index: 1000; - background: #fff; - box-shadow: 0 0 2px #ddd; - } - } - - li { - display: inline-block; - margin-right: .5em; - margin-bottom: .5em; - - a { - display: block; - padding: .2em .9em; - background: #ABDADE; - color: #08646b; - border-radius: 1em; - } - } -} diff --git a/apps/wolnelektury_core/static/scss/tools.scss b/apps/wolnelektury_core/static/scss/tools.scss deleted file mode 100644 index 76869c40d..000000000 --- a/apps/wolnelektury_core/static/scss/tools.scss +++ /dev/null @@ -1,70 +0,0 @@ -$default-em-size: 16px; - -@mixin size($name, $args) { - $rems: snowflake; - @each $val in $args { - $remval: $val; - @if type-of($val) == number { - @if unit($val) == "px" { - $remval: $val / $default-em-size * 1rem; - } - } - // Workaround for PySCSS issue with appending to empty lists. - @if $rems == snowflake { - $rems: $remval; - } - @else { - $rems: append($rems, $remval); - } - } - #{$name}: $args; - #{$name}: $rems; -} - -@mixin min-screen($size) { - @if unit($size) == "px" { - $size: $size / $default-em-size * 1em; - } - - @media screen and (min-width: $size) { - @content; - } -} - - -@mixin vendors($name, $args) { - @include size(-moz + $name, $args); - @include size(-webkit + $name, $args); - @include size(-moz + $name, $args); -} - -@mixin vendors($names, $args) { - @each $name in $names { - @include size($name, $args); - } -} - -@mixin box-shadow($args) { - @include vendors( - -moz-box-shadow - -webkit-box-shadow - box-shadow, - $args); -} - -@mixin mono { - font-family: "Andale Mono", "Lucida Sans Typewriter", "Courier New"; -} - -@mixin hidden-label { - display: block; - @include size(width, 1px); - @include size(height, 1px); - overflow: hidden; -} - -@mixin white-box { - @include size(border, 1px solid #ddd); - background: #fff; - @include box-shadow(2px 2px 2px #ddd); -} diff --git a/apps/wolnelektury_core/static/scss/widget.scss b/apps/wolnelektury_core/static/scss/widget.scss deleted file mode 100644 index 7d78730ef..000000000 --- a/apps/wolnelektury_core/static/scss/widget.scss +++ /dev/null @@ -1,150 +0,0 @@ -html, body { - padding: 0; - margin: 0; - overflow: hidden; -} - - -#wl { - background-color: #191919; - position:relative; - - a, a:visited, a:hover { - display: block; - line-height: 5.94rem; - border: 0; - - img { - border: 0; - max-width: 100%; - margin: 0; - vertical-align: middle; - } - } - - #wl-form { - background: #444; - color: white; - height: 2.8125rem; - position: relative; - } - #wl-search { - position: absolute; - left: .3125rem; - right: 2.9rem; - right: 22%; - top: .3125rem; - } - - #id_qq { - font-family: Georgia; - font-size: 0.8125rem; - - background-color: #FFFFFF; - border: medium none; - border-radius: 0.3125rem; - box-shadow: 0 0 0.40625rem #444444 inset; - color: #000000; - height: 2.0625rem; - width: 100%; - - line-height: 2.03125rem; - padding: 0 0 0 .8125rem; - position: relative; - box-sizing: border-box; - z-index: 200; - - &::-moz-placeholder { - color: #767676; - font-family: Georgia; - font-style: italic; - } - } - - button { - background: #018189; - border: none; - color: white; - display: inline-block; - font-size: .6875rem; - position: absolute; - right: 0; - top: 0; - width: 2rem; - - width: 20%; - height: 2.8125rem; - margin: 0; - padding: 0; - - img { - max-width: 100%; - } - } - -} - -.ui-menu { - width: 100%; - font-size: 0.7rem; - list-style-type: none; - padding: 0; - margin: 0; - border-style: solid; - border-color: #ddd; - border-width: 1px 0; - - li { - clear: right; - - &:nth-child(odd) { - background-color: rgba(255,255,255,.95); - } - - &:nth-child(even){ - background-color: rgba(238,238,238,.95); - } - - &:hover{ - background-color: #053469; - color:white; - } - - .ui-state-hover { - background-color: #fdf5ce; - } - - .search-hint-label { - line-height: 1.636em; - display: inline-block; - max-width: 80%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } - - .search-hint-category { - display: none; - @media screen and (min-width: 10em) { - display: block; - } - float: right; - font-size: .9em; - } - } - - a:hover { - text-decoration: none; - } -} - -.ui-corner-all { - cursor: pointer; - display:block; - - a { - text-decoration: none; - color: #0D7E85; - padding: 5px; - } -} diff --git a/apps/wolnelektury_core/templates/404.html b/apps/wolnelektury_core/templates/404.html deleted file mode 100644 index f3846aac4..000000000 --- a/apps/wolnelektury_core/templates/404.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - - -{% block titleextra %}404 - {% trans "Page does not exist" %}{% endblock %} - - -{% block body %} - -

                {% trans "Page not found" %}

                - - -

                -{% trans "We are sorry, but this page does not exist. Please check if you entered correct address or go to "%} {% trans "main page" %}. -

                - - - -{% endblock body %} diff --git a/apps/wolnelektury_core/templates/500.html b/apps/wolnelektury_core/templates/500.html deleted file mode 100644 index df74fe42d..000000000 --- a/apps/wolnelektury_core/templates/500.html +++ /dev/null @@ -1,24 +0,0 @@ -{% load i18n %} - - - - - Wolne Lektury :: 500 - {% trans "Server error" %} - - -
                -
                - -
                -
                - -
                -
                -

                {% trans "Server error" %}

                - -{% trans "

                The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our blog.

                Inform our administrators about the error.

                " %} - -
                -
                - - \ No newline at end of file diff --git a/apps/wolnelektury_core/templates/503.html b/apps/wolnelektury_core/templates/503.html deleted file mode 100644 index 47689d122..000000000 --- a/apps/wolnelektury_core/templates/503.html +++ /dev/null @@ -1,24 +0,0 @@ -{% load i18n %} - - - - - Wolne Lektury :: 503 - {% trans "Service unavailable" %} - - -
                -
                - -
                -
                - -
                -
                -

                {% trans "Service unavailable" %}

                -

                -{% trans "The Wolnelektury.pl site is currently unavailable due to maintainance." %} -

                -
                -
                - - diff --git a/apps/wolnelektury_core/templates/account/base.html b/apps/wolnelektury_core/templates/account/base.html deleted file mode 100755 index 6bcdf12cf..000000000 --- a/apps/wolnelektury_core/templates/account/base.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "site_base.html" %} - -{% block body %} -{% block content %} {% endblock %} -{% endblock %} - -{% block extrabody %} -{% block extra_body %} -{% endblock %} -{% endblock %} diff --git a/apps/wolnelektury_core/templates/admin/base_site.html b/apps/wolnelektury_core/templates/admin/base_site.html deleted file mode 100644 index ff381b554..000000000 --- a/apps/wolnelektury_core/templates/admin/base_site.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends "admin/base.html" %} -{% load i18n %} - -{% block title %}{{ title }} | {% trans "Site administration" %} - WolneLektury.pl{% endblock %} - -{% block branding %} -

                {% trans "Site administration" %} - WolneLektury.pl

                -

                - - promobox | - cytaty | - info | - książki | - tagi | - kolekcje | - licznik domeny | - sponsorzy | - sugestie -

                -{% endblock %} - -{% block nav-global %}{% endblock %} \ No newline at end of file diff --git a/apps/wolnelektury_core/templates/admin/catalogue/book/change_form.html b/apps/wolnelektury_core/templates/admin/catalogue/book/change_form.html deleted file mode 100644 index 819ab62fc..000000000 --- a/apps/wolnelektury_core/templates/admin/catalogue/book/change_form.html +++ /dev/null @@ -1,46 +0,0 @@ -{% extends "admin/change_form.html" %} -{% load i18n %} - -{% block content_title %} - {% if change and 'advanced' in request.GET %} -

                {{ title }} — {% trans "advanced" %}

                - {% else %} - {{ block.super }} - {% endif %} -{% endblock %} - - -{# add an "Advanced" button to tools #} - -{% block extrastyle %} - {% if change and not is_popup %} - {{ block.super }} - - {% else %} - {{ block.super }} - {% endif %} -{% endblock %} - -{% block object-tools %} - {% if change and not is_popup %} -
                - {{ block.super }} - -
                - {% else %} - {{ block.super }} - {% endif %} -{% endblock %} - - - - diff --git a/apps/wolnelektury_core/templates/admin/catalogue/book/change_list.html b/apps/wolnelektury_core/templates/admin/catalogue/book/change_list.html deleted file mode 100644 index 9f1b8cbf4..000000000 --- a/apps/wolnelektury_core/templates/admin/catalogue/book/change_list.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "admin/change_list.html" %} -{% load i18n %} - -{% block content %} -
                - {% csrf_token %} -

                -
                - {{ block.super }} -{% endblock content %} diff --git a/apps/wolnelektury_core/templates/annoy.html b/apps/wolnelektury_core/templates/annoy.html deleted file mode 100755 index 890b62d91..000000000 --- a/apps/wolnelektury_core/templates/annoy.html +++ /dev/null @@ -1,18 +0,0 @@ -{% load static %} -1% -
                - - Logo akcji 1% -

                Droga użytkowniczko, drogi użytkowniku!

                -

                Czy wiesz, że biblioteka internetowa Wolne Lektury to jeden z projektów - fundacji Nowoczesna Polska – - organizacji pożytku publicznego działającej na rzecz wolności korzystania - z dóbr kultury? Wesprzyj nasze działania, przeznaczając na nie 1% swojego podatku. - Możesz to zrobić, wpisując w zeznaniu podatkowym numer - KRS 0000070056.

                - -

                Dowiedz się więcej

                - - x -
                -
                diff --git a/apps/wolnelektury_core/templates/auth/login.html b/apps/wolnelektury_core/templates/auth/login.html deleted file mode 100644 index 756b8ad31..000000000 --- a/apps/wolnelektury_core/templates/auth/login.html +++ /dev/null @@ -1,26 +0,0 @@ -{% load i18n %} -{% load ssi_csrf_token from ssify %} - -

                {{ title }}

                - -
                -{% ssi_csrf_token %} -
                  -
                  - {{ form.as_ul }} -
                1. {% trans "Forgot Password?" %}
                2. -
                3. -
                -
                - -

                {% trans "Sign in using:" %}

                - -
                  -{% include "socialaccount/snippets/provider_list.html" %} -
                - -{% include "socialaccount/snippets/login_extra.html" %} - -{% block extra %} -{% endblock %} diff --git a/apps/wolnelektury_core/templates/auth/login_register.html b/apps/wolnelektury_core/templates/auth/login_register.html deleted file mode 100755 index 80d3d232a..000000000 --- a/apps/wolnelektury_core/templates/auth/login_register.html +++ /dev/null @@ -1,24 +0,0 @@ -{% extends "auth/login.html" %} -{% load i18n %} -{% load honeypot %} -{% load ssi_csrf_token from ssify %} - -{% block extra %} - -{{ block.super }} - -

                {% trans "or register" %}:

                - -
                -{% ssi_csrf_token %} -{% render_honeypot_field %} -
                  -
                  - {{ register_form.as_ul }} -
                1. -
                -
                - - -{% endblock %} diff --git a/apps/wolnelektury_core/templates/auth/register.html b/apps/wolnelektury_core/templates/auth/register.html deleted file mode 100644 index 9d2c28363..000000000 --- a/apps/wolnelektury_core/templates/auth/register.html +++ /dev/null @@ -1,15 +0,0 @@ -{% extends "ajaxable/form.html" %} -{% load i18n %} - - -{% block extra %} - -

                {% trans "Sign in using:" %}

                - -
                  -{% include "socialaccount/snippets/provider_list.html" %} -
                - -{% include "socialaccount/snippets/login_extra.html" %} - -{% endblock %} diff --git a/apps/wolnelektury_core/templates/base.html b/apps/wolnelektury_core/templates/base.html deleted file mode 100644 index fac93191c..000000000 --- a/apps/wolnelektury_core/templates/base.html +++ /dev/null @@ -1,4 +0,0 @@ -{% extends "superbase.html" %} - - -{% block ogtitle %}{% block titleextra %}{% endblock %}{% endblock %} diff --git a/apps/wolnelektury_core/templates/info/join_us.html b/apps/wolnelektury_core/templates/info/join_us.html deleted file mode 100644 index 50479e120..000000000 --- a/apps/wolnelektury_core/templates/info/join_us.html +++ /dev/null @@ -1,22 +0,0 @@ -{% load i18n %} -{% load reporting_stats %} - -{% count_books book_count %} -

                -{% blocktrans count book_count as c %} -We have {{c}} work published in Wolne Lektury! -Help us expand the library and set new readings free by -making a donation -or transferring 1% of your income tax. -{% plural %} -We have {{c}} works published in Wolne Lektury! -Help us expand the library and set new readings free by -making a donation -or transferring 1% of your income tax. -{% endblocktrans %} -{% comment %}{% trans "More..." %}{% endcomment %}

                - -

                {% blocktrans %}Become an editor of Wolne Lektury! Find out if -we're currently working on a reading you're looking for and prepare -a publication by yourself by logging into the Editorial Platform.{% endblocktrans %} -{% trans "More..." %}

                diff --git a/apps/wolnelektury_core/templates/latest_blog_posts.html b/apps/wolnelektury_core/templates/latest_blog_posts.html deleted file mode 100644 index 24d486ef1..000000000 --- a/apps/wolnelektury_core/templates/latest_blog_posts.html +++ /dev/null @@ -1,9 +0,0 @@ -{% spaceless %} - -
                  -{% for post in posts %} -
                1. {{ post.title }}
                2. -{% endfor %} -
                - -{% endspaceless %} \ No newline at end of file diff --git a/apps/wolnelektury_core/templates/main_page.html b/apps/wolnelektury_core/templates/main_page.html deleted file mode 100755 index f1450cbd6..000000000 --- a/apps/wolnelektury_core/templates/main_page.html +++ /dev/null @@ -1,88 +0,0 @@ -{% extends "base.html" %} -{% load static from staticfiles %} -{% load i18n catalogue_tags infopages_tags social_tags %} -{% load ssi_include from ssify %} - - -{% block title %}{% trans "Wolne Lektury internet library" %}{% endblock %} -{% block ogtitle %}{% trans "Wolne Lektury internet library" %}{% endblock %} - -{% block body %}{% spaceless %} - - {% choose_cite as cite_pk %} - {{ cite_pk.if }} - {% ssi_include 'social_cite_main' pk=cite_pk %} - {{ cite_pk.endif }} - - - -
                -

                {% trans "What's new?" %}

                -
                - {% ssi_include 'chunk' key='promo' %} -
                -
                - - -
                -

                {% trans "Recent publications" %}

                - {% for book in last_published %} - {% ssi_include 'catalogue_book_mini' pk=book.pk %} - {% endfor %} -
                - -
                - -
                -

                {% trans "News" %}

                - {% ssi_include 'latest_blog_posts' %} -
                - - -
                -

                {% trans "Utilities" %}

                - - -
                - - -
                -

                {% trans "Information" %}

                - - - -
                - - -{% endspaceless %}{% endblock %} - - -{% block add_footer %}{% spaceless %} -{{ cite_pk.if }} -

                {% trans "Image used:" %} - {% ssi_include 'social_cite_info' pk=cite_pk %} -

                -{{ cite_pk.endif }} -{% endspaceless %}{% endblock %} diff --git a/apps/wolnelektury_core/templates/openid/login.html b/apps/wolnelektury_core/templates/openid/login.html deleted file mode 100644 index 41eafa479..000000000 --- a/apps/wolnelektury_core/templates/openid/login.html +++ /dev/null @@ -1,33 +0,0 @@ -{% extends "site_base.html" %} - -{% load i18n %} -{% load uni_form_tags %} - -{% block head_title %}{% trans "OpenID Sign In" %}{% endblock %} - -{% block body %} - -

                {% trans 'OpenID Sign In' %}

                -
                - - - -
                -{% endblock %} diff --git a/apps/wolnelektury_core/templates/pagination/pagination.html b/apps/wolnelektury_core/templates/pagination/pagination.html deleted file mode 100644 index 432cf6954..000000000 --- a/apps/wolnelektury_core/templates/pagination/pagination.html +++ /dev/null @@ -1,26 +0,0 @@ -{% load i18n %} -{% if is_paginated %} - -{% endif %} diff --git a/apps/wolnelektury_core/templates/piston/authorize_token.html b/apps/wolnelektury_core/templates/piston/authorize_token.html deleted file mode 100755 index 87450a20c..000000000 --- a/apps/wolnelektury_core/templates/piston/authorize_token.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block titleextra %}{% trans "Authorize access to Wolne Lektury" %}{% endblock %} - -{% block body %} -

                {% trans "Authorize access to Wolne Lektury" %}

                - -
                -

                {% blocktrans %}Confirm to authorize access to Wolne Lektury as user {{ user}}.{% endblocktrans %}

                - -
                - {% csrf_token %} - {{ form.as_p }} - -
                -
                -{% endblock %} diff --git a/apps/wolnelektury_core/templates/publish_plan.html b/apps/wolnelektury_core/templates/publish_plan.html deleted file mode 100755 index c4c3d6e6a..000000000 --- a/apps/wolnelektury_core/templates/publish_plan.html +++ /dev/null @@ -1,16 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block titleextra %}{% trans "Publishing plan" %}{% endblock titleextra %} - - -{% block body %} -

                {% trans "Publishing plan" %}

                - - - -{% endblock %} diff --git a/apps/wolnelektury_core/templates/site_base.html b/apps/wolnelektury_core/templates/site_base.html deleted file mode 100644 index b0c2ca524..000000000 --- a/apps/wolnelektury_core/templates/site_base.html +++ /dev/null @@ -1,5 +0,0 @@ -{% extends "base.html" %} -{# This is for allauth templates. #} - -{% block bodyid %}auth-page{% endblock %} -{% block titleextra %}{% block head_title %}{% endblock %}{% endblock %} diff --git a/apps/wolnelektury_core/templates/socialaccount/connections.html b/apps/wolnelektury_core/templates/socialaccount/connections.html deleted file mode 100644 index 3df16a8c5..000000000 --- a/apps/wolnelektury_core/templates/socialaccount/connections.html +++ /dev/null @@ -1,57 +0,0 @@ -{% extends "site_base.html" %} - -{% load i18n %} - -{% block head_title %}{% trans "Account Connections" %}{% endblock %} - -{% block body %} -

                {% trans "Account Connections" %}

                - -
                -{% if form.accounts %} -

                {% blocktrans %}You can sign in to your account using any of the following third party accounts:{% endblocktrans %}

                - - -
                -{% csrf_token %} - -
                -{% if form.non_field_errors %} -
                {{form.non_field_errors}}
                -{% endif %} - -{% for base_account in form.accounts %} -{% with base_account.get_provider_account as account %} -
                - -
                -{% endwith %} -{% endfor %} - -
                - -
                - -
                - -
                - -{% else %} -

                {% trans "You currently have no social network accounts connected to this account." %}

                -{% endif %} - -

                {% trans 'Add a 3rd Party Account' %}

                - -
                  -{% include "socialaccount/snippets/provider_list.html" with process="connect" %} -
                - -{% include "socialaccount/snippets/login_extra.html" %} -
                -{% endblock %} - - diff --git a/apps/wolnelektury_core/templates/socialaccount/login_cancelled.html b/apps/wolnelektury_core/templates/socialaccount/login_cancelled.html deleted file mode 100644 index 7e29b65c7..000000000 --- a/apps/wolnelektury_core/templates/socialaccount/login_cancelled.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "base.html" %} - -{% load i18n %} - -{% block head_title %}{% trans "Login Cancelled" %}{% endblock %} - -{% block body %} - -

                {% trans "Login Cancelled" %}

                - -
                -{% url 'socialaccount_login' as login_url %} -{{ login_url }} - -

                {% blocktrans %}You decided to cancel logging in to our site using one of your exisiting accounts. If this was a mistake, please proceed to sign in.{% endblocktrans %}

                -
                - -{% endblock %} - diff --git a/apps/wolnelektury_core/templates/socialaccount/snippets/login_extra.html b/apps/wolnelektury_core/templates/socialaccount/snippets/login_extra.html deleted file mode 100644 index ae067926b..000000000 --- a/apps/wolnelektury_core/templates/socialaccount/snippets/login_extra.html +++ /dev/null @@ -1 +0,0 @@ -{# This file intentionally left empty to disable loading FB JS. #} diff --git a/apps/wolnelektury_core/templates/socialaccount/snippets/provider_list.html b/apps/wolnelektury_core/templates/socialaccount/snippets/provider_list.html deleted file mode 100644 index 80f9c2f2d..000000000 --- a/apps/wolnelektury_core/templates/socialaccount/snippets/provider_list.html +++ /dev/null @@ -1,22 +0,0 @@ -{% load socialaccount %} -{% load static from staticfiles %} - -{% for provider in socialaccount.providers %} - {% if provider.id == "openid" %} - {% for brand in provider.get_brands %} -
              • - {{ brand.name }} -
              • - {% endfor %} - {% endif %} -
              • - {{ provider.name }} -
              • -{% endfor %} diff --git a/apps/wolnelektury_core/templates/superbase.html b/apps/wolnelektury_core/templates/superbase.html deleted file mode 100644 index 08d60a32a..000000000 --- a/apps/wolnelektury_core/templates/superbase.html +++ /dev/null @@ -1,153 +0,0 @@ - -{% spaceless %} - - {% load pipeline i18n %} - {% load static from staticfiles %} - {% load catalogue_tags funding_tags reporting_stats %} - {% load piwik_tags %} - {% load ssi_include ssi_csrf_token from ssify %} - {% load user_username user_is_staff from common_tags %} - - - - - - - - - - {% block ogextra %}{% endblock %} - - {% block title %}{% trans "Wolne Lektury" %} :: {% block titleextra %}{% endblock %}{% endblock %} - - - {% stylesheet "main" %} - {% block extrahead %} - {% endblock %} - - - - {% block bodycontent %} - - {% if not funding_no_show_current %} - {% current_offer as current_offer %} - {{ current_offer.if }} - {% ssi_include 'funding_top_bar' pk=current_offer %} - {{ current_offer.endif }} - {% endif %} - -
                -
                - - -

                - {% user_username as user_username %} - {% user_is_staff as user_is_staff %} - {{ user_username.if }}{% trans "Welcome" %}, - - {{ user_username }} - - - {% trans "Password" %}
                - {% trans "E-mail" %}
                - {% trans "Social accounts" %}
                -
                -
                | {% trans "My shelf" %} - {{ user_username.endif }} - {{ user_is_staff.if }} | {% trans "Administration" %} - {{ user_is_staff.endif }} - {{ user_username.if }} | {% trans "Logout" %} - {{ user_username.else }} - {% trans "Sign in" %} / {% trans "Register" %} - {{ user_username.endif }} -

                - -

                - {% url 'book_list' as b %} - {% url 'infopage' 'prawa' as r %} - {% count_books book_count %} - {% blocktrans count book_count as c %} - {{c}} free reading you have right to - {% plural %} - {{c}} free readings you have right to - {% endblocktrans %} -

                - -
                -
                - - {{search_form.q}} -
                -
                - -
                -
                - - - - - -
                - {% block body %} - {% endblock %} -
                -
                - - - - - - - {# template #} -
                - -
                -

                * {% trans "Loading" %}

                -
                -
                - - - {% endblock bodycontent %} - - - - - {% javascript "base" %} - - {% tracking_code %} - - {% block extrabody %} - {% endblock %} - - - - -{% endspaceless %} diff --git a/apps/wolnelektury_core/templates/user.html b/apps/wolnelektury_core/templates/user.html deleted file mode 100644 index 0ffdd62a9..000000000 --- a/apps/wolnelektury_core/templates/user.html +++ /dev/null @@ -1,17 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - - -{% block titleextra %}{% trans "User" %}{% endblock %} - -{% block body %} - -

                {% trans "User" %}

                - - - -{% endblock %} diff --git a/apps/wolnelektury_core/templates/widget.html b/apps/wolnelektury_core/templates/widget.html deleted file mode 100644 index 444f466ab..000000000 --- a/apps/wolnelektury_core/templates/widget.html +++ /dev/null @@ -1,37 +0,0 @@ -{% spaceless %} - -{% load static from staticfiles %} -{% load pipeline %} - - - - - - - Widget Wolnych Lektur - {% stylesheet 'widget' %} - - -
                - - - - - -
                - - -
                - -
                - -{% javascript 'widget' %} - - - - -{% endspaceless %} diff --git a/apps/wolnelektury_core/templatetags/__init__.py b/apps/wolnelektury_core/templatetags/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/wolnelektury_core/templatetags/common_tags.py b/apps/wolnelektury_core/templatetags/common_tags.py deleted file mode 100644 index ab08a3ee6..000000000 --- a/apps/wolnelektury_core/templatetags/common_tags.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import template -from ssify import ssi_variable -from ssify.utils import ssi_vary_on_cookie - -register = template.Library() - - -@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) -def user_username(request): - return request.user.username - - -@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) -def user_is_staff(request): - return request.user.is_staff diff --git a/apps/wolnelektury_core/templatetags/switch_tag.py b/apps/wolnelektury_core/templatetags/switch_tag.py deleted file mode 100644 index 72476bef0..000000000 --- a/apps/wolnelektury_core/templatetags/switch_tag.py +++ /dev/null @@ -1,135 +0,0 @@ -# Source: http://djangosnippets.org/snippets/967/ -# Author: adurdin -# Posted: August 13, 2008 -# -# -# We can use it based on djangosnippets Terms of Service: -# (http://djangosnippets.org/about/tos/) -# -# 2. That you grant any third party who sees the code you post -# a royalty-free, non-exclusive license to copy and distribute that code -# and to make and distribute derivative works based on that code. You may -# include license terms in snippets you post, if you wish to use -# a particular license (such as the BSD license or GNU GPL), but that -# license must permit royalty-free copying, distribution and modification -# of the code to which it is applied. - -from django import template -from django.template import Library, Node, VariableDoesNotExist - -register = Library() - - -@register.tag(name="switch") -def do_switch(parser, token): - """ - The ``{% switch %}`` tag compares a variable against one or more values in - ``{% case %}`` tags, and outputs the contents of the matching block. An - optional ``{% else %}`` tag sets off the default output if no matches - could be found:: - - {% switch result_count %} - {% case 0 %} - There are no search results. - {% case 1 %} - There is one search result. - {% else %} - Jackpot! Your search found {{ result_count }} results. - {% endswitch %} - - Each ``{% case %}`` tag can take multiple values to compare the variable - against:: - - {% switch username %} - {% case "Jim" "Bob" "Joe" %} - Me old mate {{ username }}! How ya doin? - {% else %} - Hello {{ username }} - {% endswitch %} - """ - bits = token.contents.split() - tag_name = bits[0] - if len(bits) != 2: - raise template.TemplateSyntaxError("'%s' tag requires one argument" % tag_name) - variable = parser.compile_filter(bits[1]) - - class BlockTagList(object): - # This is a bit of a hack, as it embeds knowledge of the behaviour - # of Parser.parse() relating to the "parse_until" argument. - def __init__(self, *names): - self.names = set(names) - def __contains__(self, token_contents): - name = token_contents.split()[0] - return name in self.names - - # Skip over everything before the first {% case %} tag - parser.parse(BlockTagList('case', 'endswitch')) - - cases = [] - token = parser.next_token() - got_case = False - got_else = False - while token.contents != 'endswitch': - nodelist = parser.parse(BlockTagList('case', 'else', 'endswitch')) - - if got_else: - raise template.TemplateSyntaxError("'else' must be last tag in '%s'." % tag_name) - - contents = token.contents.split() - token_name, token_args = contents[0], contents[1:] - - if token_name == 'case': - tests = map(parser.compile_filter, token_args) - case = (tests, nodelist) - got_case = True - else: - # The {% else %} tag - case = (None, nodelist) - got_else = True - cases.append(case) - token = parser.next_token() - - if not got_case: - raise template.TemplateSyntaxError("'%s' must have at least one 'case'." % tag_name) - - return SwitchNode(variable, cases) - -class SwitchNode(Node): - def __init__(self, variable, cases): - self.variable = variable - self.cases = cases - - def __repr__(self): - return "" - - def __iter__(self): - for tests, nodelist in self.cases: - for node in nodelist: - yield node - - def get_nodes_by_type(self, nodetype): - nodes = [] - if isinstance(self, nodetype): - nodes.append(self) - for tests, nodelist in self.cases: - nodes.extend(nodelist.get_nodes_by_type(nodetype)) - return nodes - - def render(self, context): - try: - value_missing = False - value = self.variable.resolve(context, True) - except VariableDoesNotExist: - no_value = True - value_missing = None - - for tests, nodelist in self.cases: - if tests is None: - return nodelist.render(context) - elif not value_missing: - for test in tests: - test_value = test.resolve(context, True) - if value == test_value: - return nodelist.render(context) - else: - return "" diff --git a/apps/wolnelektury_core/views.py b/apps/wolnelektury_core/views.py deleted file mode 100644 index 51371735a..000000000 --- a/apps/wolnelektury_core/views.py +++ /dev/null @@ -1,152 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from datetime import date, datetime -import feedparser - -from django.conf import settings -from django.contrib import auth -from django.contrib.auth.decorators import login_required -from django.contrib.auth.forms import UserCreationForm, AuthenticationForm -from django.core.cache import cache -from django.http import HttpResponse, HttpResponseRedirect -from django.shortcuts import render -from django.utils.http import urlquote_plus -from django.utils.translation import ugettext_lazy as _ -from django.views.decorators.cache import never_cache - -from ajaxable.utils import AjaxableFormView -from ajaxable.utils import placeholdized -from catalogue.models import Book -from ssify import ssi_included - - -def main_page(request): - last_published = Book.objects.exclude(cover_thumb='').filter(parent=None).order_by('-created_at')[:4] - - return render(request, "main_page.html", { - 'last_published': last_published, - }) - - -class LoginFormView(AjaxableFormView): - form_class = AuthenticationForm - template = "auth/login.html" - placeholdize = True - title = _('Sign in') - submit = _('Sign in') - ajax_redirect = True - - def __call__(self, request): - if request.user.is_authenticated(): - return self.redirect_or_refresh(request, '/', - message=_('Already logged in as user %(user)s', ) % - {'user': request.user.username}) - return super(LoginFormView, self).__call__(request) - - def success(self, form, request): - auth.login(request, form.get_user()) - - -class RegisterFormView(AjaxableFormView): - form_class = UserCreationForm - template = "auth/register.html" - placeholdize = True - title = _('Register') - submit = _('Register') - ajax_redirect = True - form_prefix = 'register' - honeypot = True - - def __call__(self, request): - if request.user.is_authenticated(): - return self.redirect_or_refresh(request, '/', - message=_('Already logged in as user %(user)s', ) % - {'user': request.user.username}) - return super(RegisterFormView, self).__call__(request) - - def success(self, form, request): - form.save() - user = auth.authenticate( - username=form.cleaned_data['username'], - password=form.cleaned_data['password1'] - ) - auth.login(request, user) - - -class LoginRegisterFormView(LoginFormView): - template = 'auth/login_register.html' - title = _('You have to be logged in to continue') - - def extra_context(self, request, obj): - return { - "register_form": placeholdized(UserCreationForm(prefix='register')), - "register_submit": _('Register'), - } - - -@never_cache -def logout_then_redirect(request): - auth.logout(request) - return HttpResponseRedirect(urlquote_plus(request.GET.get('next', '/'), safe='/?=')) - - -@never_cache -def clock(request): - """ Provides server UTC time for jquery.countdown, - in a format suitable for Date.parse() - """ - return HttpResponse(datetime.utcnow().strftime('%Y/%m/%d %H:%M:%S UTC')) - - -def publish_plan(request): - cache_key = "publish_plan" - plan = cache.get(cache_key) - - if plan is None: - plan = [] - try: - feed = feedparser.parse(settings.PUBLISH_PLAN_FEED) - except: - pass - else: - for i in range(len(feed['entries'])): - plan.append({ - 'title': feed['entries'][i].title, - 'link': feed['entries'][i].link, - }) - cache.set(cache_key, plan, 1800) - - return render(request, "publish_plan.html", {'plan': plan}) - - -@login_required -def user_settings(request): - return render(request, "user.html") - - -@ssi_included(use_lang=False, timeout=1800) -def latest_blog_posts(request, feed_url=None, posts_to_show=5): - if feed_url is None: - feed_url = settings.LATEST_BLOG_POSTS - try: - feed = feedparser.parse(str(feed_url)) - posts = [] - for i in range(posts_to_show): - pub_date = feed['entries'][i].published_parsed - published = date(pub_date[0], pub_date[1], pub_date[2]) - posts.append({ - 'title': feed['entries'][i].title, - 'summary': feed['entries'][i].summary, - 'link': feed['entries'][i].link, - 'date': published, - }) - except: - posts = [] - return render(request, 'latest_blog_posts.html', {'posts': posts}) - - -@ssi_included(use_lang=False) -def widget(request): - return render(request, 'widget.html') diff --git a/lib/basicauth.py b/lib/basicauth.py deleted file mode 100644 index befcc6fe7..000000000 --- a/lib/basicauth.py +++ /dev/null @@ -1,100 +0,0 @@ -############################################################################# -# from http://djangosnippets.org/snippets/243/ - -from functools import wraps -import base64 - -from django.http import HttpResponse -from django.contrib.auth import authenticate, login - -# -def view_or_basicauth(view, request, test_func, realm = "", *args, **kwargs): - """ - This is a helper function used by 'logged_in_or_basicauth' and - 'has_perm_or_basicauth' (deleted) that does the nitty of determining if they - are already logged in or if they have provided proper http-authorization - and returning the view if all goes well, otherwise responding with a 401. - """ - if test_func(request.user): - # Already logged in, just return the view. - # - return view(request, *args, **kwargs) - - # They are not logged in. See if they provided login credentials - # - if 'HTTP_AUTHORIZATION' in request.META: - auth = request.META['HTTP_AUTHORIZATION'].split() - if len(auth) == 2: - # NOTE: We are only support basic authentication for now. - # - if auth[0].lower() == "basic": - uname, passwd = base64.b64decode(auth[1]).split(':') - user = authenticate(username=uname, password=passwd) - if user is not None: - if user.is_active: - login(request, user) - request.user = user - return view(request, *args, **kwargs) - - # Either they did not provide an authorization header or - # something in the authorization attempt failed. Send a 401 - # back to them to ask them to authenticate. - # - response = HttpResponse() - response.status_code = 401 - response['WWW-Authenticate'] = 'Basic realm="%s"' % realm - return response - - -# -def logged_in_or_basicauth(realm = ""): - """ - A simple decorator that requires a user to be logged in. If they are not - logged in the request is examined for a 'authorization' header. - - If the header is present it is tested for basic authentication and - the user is logged in with the provided credentials. - - If the header is not present a http 401 is sent back to the - requestor to provide credentials. - - The purpose of this is that in several django projects I have needed - several specific views that need to support basic authentication, yet the - web site as a whole used django's provided authentication. - - The uses for this are for urls that are access programmatically such as - by rss feed readers, yet the view requires a user to be logged in. Many rss - readers support supplying the authentication credentials via http basic - auth (and they do NOT support a redirect to a form where they post a - username/password.) - - Use is simple: - - @logged_in_or_basicauth - def your_view: - ... - - You can provide the name of the realm to ask for authentication within. - """ - def view_decorator(func): - def wrapper(request, *args, **kwargs): - return view_or_basicauth(func, request, - lambda u: u.is_authenticated(), - realm, *args, **kwargs) - return wrapper - return view_decorator - - -############################################################################# - - -def factory_decorator(decorator): - """ generates a decorator for a function factory class - if A(*) == f, factory_decorator(D)(A)(*) == D(f) - """ - def fac_dec(func): - @wraps(func) - def wrapper(*args, **kwargs): - return decorator(func(*args, **kwargs)) - return wrapper - return fac_dec diff --git a/lib/pyscss_compiler.py b/lib/pyscss_compiler.py deleted file mode 100644 index b57d59e0b..000000000 --- a/lib/pyscss_compiler.py +++ /dev/null @@ -1,19 +0,0 @@ -from os.path import dirname -from django.conf import settings -from pipeline.compilers import SubProcessCompiler - - -class PySCSSCompiler(SubProcessCompiler): - output_extension = 'css' - - def match_file(self, filename): - return filename.endswith('.scss') - - def compile_file(self, infile, outfile, outdated=False, force=False): - command = "%s %s < %s > %s" % ( - settings.PIPELINE_PYSCSS_BINARY, - settings.PIPELINE_PYSCSS_ARGUMENTS, - infile, - outfile - ) - return self.execute_command(command, cwd=dirname(infile)) diff --git a/lib/sortify.py b/lib/sortify.py deleted file mode 100644 index 642a5403f..000000000 --- a/lib/sortify.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- -import re -from fnpdjango.utils.text.slughifi import char_map - - -# Specifies diacritics order. -# Default order is zero, max is 9 -char_order = { - u'ż': 1, u'Ż': 1, -} - - -def replace_char(m): - char = m.group() - if char_map.has_key(char): - order = char_order.get(char, 0) - return "%s~%d" % (char_map[char], order) - else: - return char - - -def sortify(value): - """ - Turns Unicode into ASCII-sortable str - - Examples : - - >>> sortify('a a') < sortify('aa') < sortify('ą') < sortify('b') - True - - >>> sortify('ź') < sortify('ż') - True - - """ - - if not isinstance(value, unicode): - value = unicode(value, 'utf-8') - - # try to replace chars - value = re.sub('[^a-zA-Z0-9\\s\\-]{1}', replace_char, value) - value = value.lower() - value = re.sub(r'[^a-z0-9~]+', ' ', value) - - return value.encode('ascii', 'ignore') diff --git a/manage.py b/manage.py deleted file mode 100755 index a03a13a7c..000000000 --- a/manage.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python -import os -import sys - -ROOT = os.path.dirname(os.path.abspath(__file__)) -sys.path = [ - os.path.join(ROOT, 'apps'), - os.path.join(ROOT, 'lib'), - os.path.join(ROOT, 'lib/librarian'), -] + sys.path - -if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "wolnelektury.settings") - - from django.core.management import execute_from_command_line - - execute_from_command_line(sys.argv) diff --git a/requirements-dev.txt b/requirements-dev.txt deleted file mode 100644 index 9c428052c..000000000 --- a/requirements-dev.txt +++ /dev/null @@ -1,8 +0,0 @@ --i https://py.mdrn.pl:8443/simple/ - -django-debug-toolbar -polib -BabelDjango -Fabric -sphinx -pyinotify diff --git a/requirements-test.txt b/requirements-test.txt deleted file mode 100644 index 063cd7837..000000000 --- a/requirements-test.txt +++ /dev/null @@ -1,7 +0,0 @@ --i https://py.mdrn.pl:8443/simple/ - -nose>=1.3.7 -django-nose>=1.4.2,<1.5 -nosexcover -polib -mock diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index fcd41c474..000000000 --- a/requirements.txt +++ /dev/null @@ -1,55 +0,0 @@ --i https://py.mdrn.pl:8443/simple/ - -# django -Django>=1.8,<1.9 -fnpdjango>=0.1.15,<0.2 -django-pipeline>=1.6,<1.7 -jsmin -django-pagination>=1.0 -django-maintenancemode>=0.10 -django-piston==0.2.2.1.2 -jsonfield>=1.0.3,<1.1 -django-picklefield -django-modeltranslation>=0.10,<0.11 -django-allauth>=0.24,<0.25 - - -pytz - -django-honeypot -django-uni-form - -python-memcached -django-piwik -python-fb - -# Feedparser -Feedparser>=5.1 - -Pillow -mutagen>=1.17 -sorl-thumbnail>=12.3,<12.4 - -# home-brewed & dependencies -lxml>=2.2.2 -# -e git+git://github.com/fnp/librarian.git@d43d87400dcc19851442#egg=librarian - -# MySQL-python>=1.2,<2.0 - -# celery tasks -celery>=3.1.12,<3.2 -kombu>=3.0.23,<3.1 - -# spell checking -pyenchant - -# OAI-PMH -pyoai - -## egenix-mx-base # Doesn't play nice with mx in dist-packages. -sunburnt - -django-getpaid>=1.7,<1.8 -httplib2 -Texml -django-ssify>=0.2.1,<0.3 diff --git a/requirements/requirements-dev.txt b/requirements/requirements-dev.txt new file mode 100644 index 000000000..9c428052c --- /dev/null +++ b/requirements/requirements-dev.txt @@ -0,0 +1,8 @@ +-i https://py.mdrn.pl:8443/simple/ + +django-debug-toolbar +polib +BabelDjango +Fabric +sphinx +pyinotify diff --git a/requirements/requirements-test.txt b/requirements/requirements-test.txt new file mode 100644 index 000000000..063cd7837 --- /dev/null +++ b/requirements/requirements-test.txt @@ -0,0 +1,7 @@ +-i https://py.mdrn.pl:8443/simple/ + +nose>=1.3.7 +django-nose>=1.4.2,<1.5 +nosexcover +polib +mock diff --git a/requirements/requirements.txt b/requirements/requirements.txt new file mode 100644 index 000000000..fcd41c474 --- /dev/null +++ b/requirements/requirements.txt @@ -0,0 +1,55 @@ +-i https://py.mdrn.pl:8443/simple/ + +# django +Django>=1.8,<1.9 +fnpdjango>=0.1.15,<0.2 +django-pipeline>=1.6,<1.7 +jsmin +django-pagination>=1.0 +django-maintenancemode>=0.10 +django-piston==0.2.2.1.2 +jsonfield>=1.0.3,<1.1 +django-picklefield +django-modeltranslation>=0.10,<0.11 +django-allauth>=0.24,<0.25 + + +pytz + +django-honeypot +django-uni-form + +python-memcached +django-piwik +python-fb + +# Feedparser +Feedparser>=5.1 + +Pillow +mutagen>=1.17 +sorl-thumbnail>=12.3,<12.4 + +# home-brewed & dependencies +lxml>=2.2.2 +# -e git+git://github.com/fnp/librarian.git@d43d87400dcc19851442#egg=librarian + +# MySQL-python>=1.2,<2.0 + +# celery tasks +celery>=3.1.12,<3.2 +kombu>=3.0.23,<3.1 + +# spell checking +pyenchant + +# OAI-PMH +pyoai + +## egenix-mx-base # Doesn't play nice with mx in dist-packages. +sunburnt + +django-getpaid>=1.7,<1.8 +httplib2 +Texml +django-ssify>=0.2.1,<0.3 diff --git a/src/ajaxable/__init__.py b/src/ajaxable/__init__.py new file mode 100644 index 000000000..ffa37881b --- /dev/null +++ b/src/ajaxable/__init__.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +""" +Provides a way to create forms behaving correctly as AJAX forms +as well as standalone forms without any Javascript. +""" diff --git a/src/ajaxable/locale/pl/LC_MESSAGES/django.mo b/src/ajaxable/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..269549eb3 Binary files /dev/null and b/src/ajaxable/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/ajaxable/locale/pl/LC_MESSAGES/django.po b/src/ajaxable/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..7b190fa12 --- /dev/null +++ b/src/ajaxable/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,23 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2012-01-27 16:36+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \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%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2)\n" + +#: utils.py:72 +msgid "Send" +msgstr "Wyślij" diff --git a/src/ajaxable/models.py b/src/ajaxable/models.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/ajaxable/templates/ajaxable/form.html b/src/ajaxable/templates/ajaxable/form.html new file mode 100755 index 000000000..13586ac9d --- /dev/null +++ b/src/ajaxable/templates/ajaxable/form.html @@ -0,0 +1,20 @@ +{% load i18n %} +{% load ssi_csrf_token from ssify %} + +

                {{ title }}

                + +
                +{% ssi_csrf_token %} +{% if honeypot %} + {% load honeypot %} + {% render_honeypot_field %} +{% endif %} +
                  +
                  + {{ form.as_ul }} +
                1. +
                +
                + +{% block extra %}{% endblock %} \ No newline at end of file diff --git a/src/ajaxable/templates/ajaxable/form_on_page.html b/src/ajaxable/templates/ajaxable/form_on_page.html new file mode 100755 index 000000000..61175d507 --- /dev/null +++ b/src/ajaxable/templates/ajaxable/form_on_page.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block titleextra %}{{ title }}{% endblock %} + +{% block body %} + + {% include ajax_template %} + + {% if response_data.message %} +

                {{ response_data.message }}

                + {% endif %} + +{% endblock %} diff --git a/src/ajaxable/templatetags/__init__.py b/src/ajaxable/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/ajaxable/templatetags/ajaxable_tags.py b/src/ajaxable/templatetags/ajaxable_tags.py new file mode 100644 index 000000000..351e9f13d --- /dev/null +++ b/src/ajaxable/templatetags/ajaxable_tags.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import template +from ajaxable.utils import placeholdized +register = template.Library() + + +@register.filter +def placeholdize(form): + return placeholdized(form) + + +@register.filter +def placeholdized_ul(form): + return placeholdized(form).as_ul() diff --git a/src/ajaxable/utils.py b/src/ajaxable/utils.py new file mode 100755 index 000000000..89b56228d --- /dev/null +++ b/src/ajaxable/utils.py @@ -0,0 +1,186 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from functools import wraps + +from django.http import (HttpResponse, HttpResponseRedirect, + HttpResponseForbidden) +from django.shortcuts import render_to_response +from django.template import RequestContext +from django.utils.encoding import force_unicode +from django.utils.functional import Promise +from django.utils.http import urlquote_plus +import json +from django.utils.translation import ugettext_lazy as _ +from django.views.decorators.vary import vary_on_headers +from honeypot.decorators import verify_honeypot_value + + +class LazyEncoder(json.JSONEncoder): + def default(self, obj): + if isinstance(obj, Promise): + return force_unicode(obj) + return obj + + +def method_decorator(function_decorator): + """Converts a function decorator to a method decorator. + + It just makes it ignore first argument. + """ + def decorator(method): + @wraps(method) + def wrapped_method(self, *args, **kwargs): + def function(*fargs, **fkwargs): + return method(self, *fargs, **fkwargs) + return function_decorator(function)(*args, **kwargs) + return wrapped_method + return decorator + + +def require_login(request): + """Return 403 if request is AJAX. Redirect to login page if not.""" + if request.is_ajax(): + return HttpResponseForbidden('Not logged in') + else: + return HttpResponseRedirect('/uzytkownicy/zaloguj')# next?=request.build_full_path()) + + +def placeholdized(form): + for field in form.fields.values(): + field.widget.attrs['placeholder'] = field.label + return form + + +class AjaxableFormView(object): + """Subclass this to create an ajaxable view for any form. + + In the subclass, provide at least form_class. + + """ + form_class = None + placeholdize = False + # override to customize form look + template = "ajaxable/form.html" + submit = _('Send') + + title = '' + success_message = '' + POST_login = False + formname = "form" + form_prefix = None + full_template = "ajaxable/form_on_page.html" + honeypot = False + + @method_decorator(vary_on_headers('X-Requested-With')) + def __call__(self, request, *args, **kwargs): + """A view displaying a form, or JSON if request is AJAX.""" + obj = self.get_object(request, *args, **kwargs) + form_args, form_kwargs = self.form_args(request, obj) + if self.form_prefix: + form_kwargs['prefix'] = self.form_prefix + + if request.method == "POST": + if self.honeypot: + response = verify_honeypot_value(request, None) + if response: + return response + + # do I need to be logged in? + if self.POST_login and not request.user.is_authenticated(): + return require_login(request) + + form_kwargs['data'] = request.POST + form = self.form_class(*form_args, **form_kwargs) + if form.is_valid(): + add_args = self.success(form, request) + response_data = { + 'success': True, + 'message': self.success_message, + 'redirect': request.GET.get('next') + } + if add_args: + response_data.update(add_args) + if not request.is_ajax() and response_data['redirect']: + return HttpResponseRedirect(urlquote_plus( + response_data['redirect'], safe='/?=&')) + elif request.is_ajax(): + # Form was sent with errors. Send them back. + if self.form_prefix: + errors = {} + for key, value in form.errors.items(): + errors["%s-%s" % (self.form_prefix, key)] = value + else: + errors = form.errors + response_data = {'success': False, 'errors': errors} + else: + response_data = None + if request.is_ajax(): + return HttpResponse(LazyEncoder(ensure_ascii=False).encode(response_data)) + else: + if (self.POST_login and not request.user.is_authenticated() + and not request.is_ajax()): + return require_login(request) + + form = self.form_class(*form_args, **form_kwargs) + response_data = None + + title = self.title + if request.is_ajax(): + template = self.template + else: + template = self.full_template + cd = self.context_description(request, obj) + if cd: + title += ": " + cd + if self.placeholdize: + form = placeholdized(form) + context = { + self.formname: form, + "title": title, + "honeypot": self.honeypot, + "placeholdize": self.placeholdize, + "submit": self.submit, + "response_data": response_data, + "ajax_template": self.template, + "view_args": args, + "view_kwargs": kwargs, + } + context.update(self.extra_context(request, obj)) + return render_to_response(template, context, + context_instance=RequestContext(request)) + + def redirect_or_refresh(self, request, path, message=None): + """If the form is AJAX, refresh the page. If not, go to `path`.""" + if request.is_ajax(): + output = "" + if message: + output = "
                " + message + "
                " + output + return HttpResponse(output) + else: + return HttpResponseRedirect(path) + + def get_object(self, request, *args, **kwargs): + """Override to parse view args and get some associated data.""" + return None + + def form_args(self, request, obj): + """Override to parse view args and give additional args to the form.""" + return (), {} + + def extra_context(self, request, obj): + """Override to pass something to template.""" + return {} + + def context_description(self, request, obj): + """Description to appear in standalone form, but not in AJAX form.""" + return "" + + def success(self, form, request): + """What to do when the form is valid. + + By default, just save the form. + + """ + return form.save(request) diff --git a/src/api/__init__.py b/src/api/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/api/emitters.py b/src/api/emitters.py new file mode 100644 index 000000000..2f6f7e75f --- /dev/null +++ b/src/api/emitters.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +""" +Wrappers for piston Emitter classes. + +When outputting a queryset of selected models, instead of returning +XML or JSON stanzas, SSI include statements are returned. + +""" +from django.core.urlresolvers import reverse +from django.db.models.query import QuerySet +from piston.emitters import Emitter, XMLEmitter, JSONEmitter +from catalogue.models import Book, Fragment, Tag +from django.utils.translation import get_language + + +class SsiQS(object): + """A wrapper for QuerySet that won't serialize.""" + + def __init__(self, queryset): + self.queryset = queryset + + def __unicode__(self): + raise TypeError("This is not serializable.") + + def get_ssis(self, emitter_format): + """Yields SSI include statements for the queryset.""" + url_pattern = reverse('api_include', + kwargs={'model': self.queryset.model.__name__.lower(), + 'pk': '0000', + 'emitter_format': emitter_format, + 'lang': get_language(), + }) + for instance in self.queryset: + yield "" % url_pattern.replace('0000', + str(instance.pk)) + + +class SsiEmitterMixin(object): + def construct(self): + if isinstance(self.data, QuerySet) and self.data.model in (Book, + Fragment, Tag): + return SsiQS(self.data) + else: + return super(SsiEmitterMixin, self).construct() + + +class SsiJsonEmitter(SsiEmitterMixin, JSONEmitter): + def render(self, request): + try: + return super(SsiJsonEmitter, self).render(request) + except TypeError: + return '[%s]' % ",".join(self.construct().get_ssis('json')) + +Emitter.register('json', SsiJsonEmitter, 'application/json; charset=utf-8') + + +class SsiXmlEmitter(SsiEmitterMixin, XMLEmitter): + def render(self, request): + try: + return super(SsiXmlEmitter, self).render(request) + except TypeError: + return '\n' \ + '%s' % \ + ''.join(self.construct().get_ssis('xml')) + +Emitter.register('xml', SsiXmlEmitter, 'text/xml; charset=utf-8') + diff --git a/src/api/handlers.py b/src/api/handlers.py new file mode 100644 index 000000000..5fe931e69 --- /dev/null +++ b/src/api/handlers.py @@ -0,0 +1,469 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import json + +from django.contrib.sites.models import Site +from django.core.urlresolvers import reverse +from django.utils.functional import lazy +from piston.handler import AnonymousBaseHandler, BaseHandler +from piston.utils import rc +from sorl.thumbnail import default + +from catalogue.forms import BookImportForm +from catalogue.models import Book, Tag, BookMedia, Fragment, Collection +from picture.models import Picture +from picture.forms import PictureImportForm + +from stats.utils import piwik_track + +from . import emitters # Register our emitters + +API_BASE = WL_BASE = MEDIA_BASE = lazy( + lambda: u'http://' + Site.objects.get_current().domain, unicode)() + + +category_singular = { + 'authors': 'author', + 'kinds': 'kind', + 'genres': 'genre', + 'epochs': 'epoch', + 'themes': 'theme', + 'books': 'book', +} +category_plural = {} +for k, v in category_singular.items(): + category_plural[v] = k + +book_tag_categories = ['author', 'epoch', 'kind', 'genre'] + + + +def read_tags(tags, allowed): + """ Reads a path of filtering tags. + + :param str tags: a path of category and slug pairs, like: authors/an-author/... + :returns: list of Tag objects + :raises: ValueError when tags can't be found + """ + if not tags: + return [], [] + + tags = tags.strip('/').split('/') + real_tags = [] + books = [] + while tags: + category = tags.pop(0) + slug = tags.pop(0) + + try: + category = category_singular[category] + except KeyError: + raise ValueError('Unknown category.') + + if not category in allowed: + raise ValueError('Category not allowed.') + + if category == 'book': + try: + books.append(Book.objects.get(slug=slug)) + except Book.DoesNotExist: + raise ValueError('Unknown book.') + + try: + real_tags.append(Tag.objects.get(category=category, slug=slug)) + except Tag.DoesNotExist: + raise ValueError('Tag not found') + return real_tags, books + + +# RESTful handlers + + +class BookMediaHandler(BaseHandler): + """ Responsible for representing media in Books. """ + + model = BookMedia + fields = ['name', 'type', 'url', 'artist', 'director'] + + @classmethod + def url(cls, media): + """ Link to media on site. """ + + return MEDIA_BASE + media.file.url + + @classmethod + def artist(cls, media): + return media.extra_info.get('artist_name', '') + + @classmethod + def director(cls, media): + return media.extra_info.get('director_name', '') + + +class BookDetails(object): + """Custom fields used for representing Books.""" + + @classmethod + def href(cls, book): + """ Returns an URI for a Book in the API. """ + return API_BASE + reverse("api_book", args=[book.slug]) + + @classmethod + def url(cls, book): + """ Returns Book's URL on the site. """ + + return WL_BASE + book.get_absolute_url() + + @classmethod + def children(cls, book): + """ Returns all children for a book. """ + + return book.children.all() + + @classmethod + def media(cls, book): + """ Returns all media for a book. """ + return book.media.all() + + @classmethod + def cover(cls, book): + return MEDIA_BASE + book.cover.url if book.cover else '' + + @classmethod + def cover_thumb(cls, book): + return MEDIA_BASE + default.backend.get_thumbnail( + book.cover, "139x193").url if book.cover else '' + + + +class BookDetailHandler(BaseHandler, BookDetails): + """ Main handler for Book objects. + + Responsible for single Book details. + """ + allowed_methods = ['GET'] + fields = ['title', 'parent', 'children'] + Book.formats + [ + 'media', 'url', 'cover', 'cover_thumb'] + [ + category_plural[c] for c in book_tag_categories] + + @piwik_track + def read(self, request, book): + """ Returns details of a book, identified by a slug and lang. """ + try: + return Book.objects.get(slug=book) + except Book.DoesNotExist: + return rc.NOT_FOUND + + +class AnonymousBooksHandler(AnonymousBaseHandler, BookDetails): + """ Main handler for Book objects. + + Responsible for lists of Book objects. + """ + allowed_methods = ('GET',) + model = Book + fields = book_tag_categories + ['href', 'title', 'url', 'cover', 'cover_thumb'] + + @classmethod + def genres(cls, book): + """ Returns all media for a book. """ + return book.tags.filter(category='genre') + + @piwik_track + def read(self, request, tags=None, top_level=False, + audiobooks=False, daisy=False, pk=None): + """ Lists all books with given tags. + + :param tags: filtering tags; should be a path of categories + and slugs, i.e.: authors/an-author/epoch/an-epoch/ + :param top_level: if True and a book is included in the results, + it's children are aren't. By default all books matching the tags + are returned. + """ + if pk is not None: + try: + return Book.objects.get(pk=pk) + except Book.DoesNotExist: + return rc.NOT_FOUND + + try: + tags, _ancestors = read_tags(tags, allowed=book_tag_categories) + except ValueError: + return rc.NOT_FOUND + + if tags: + if top_level: + books = Book.tagged_top_level(tags) + return books if books else rc.NOT_FOUND + else: + books = Book.tagged.with_all(tags) + else: + books = Book.objects.all() + + if top_level: + books = books.filter(parent=None) + if audiobooks: + books = books.filter(media__type='mp3').distinct() + if daisy: + books = books.filter(media__type='daisy').distinct() + + if books.exists(): + return books + else: + return rc.NOT_FOUND + + def create(self, request, *args, **kwargs): + return rc.FORBIDDEN + + +class BooksHandler(BookDetailHandler): + allowed_methods = ('GET', 'POST') + model = Book + fields = book_tag_categories + ['href', 'title', 'url', 'cover', 'cover_thumb'] + anonymous = AnonymousBooksHandler + + def create(self, request, *args, **kwargs): + if not request.user.has_perm('catalogue.add_book'): + return rc.FORBIDDEN + + data = json.loads(request.POST.get('data')) + form = BookImportForm(data) + if form.is_valid(): + form.save() + return rc.CREATED + else: + return rc.NOT_FOUND + + +class EBooksHandler(AnonymousBooksHandler): + fields = ('author', 'href', 'title', 'cover') + tuple(Book.ebook_formats) + + +# add categorized tags fields for Book +def _tags_getter(category): + @classmethod + def get_tags(cls, book): + return book.tags.filter(category=category) + return get_tags +def _tag_getter(category): + @classmethod + def get_tag(cls, book): + return ', '.join(tag.name for tag in book.tags.filter(category=category)) + return get_tag +for plural, singular in category_singular.items(): + setattr(BookDetails, plural, _tags_getter(singular)) + setattr(BookDetails, singular, _tag_getter(singular)) + +# add fields for files in Book +def _file_getter(format): + field = "%s_file" % format + @classmethod + def get_file(cls, book): + f = getattr(book, field) + if f: + return MEDIA_BASE + f.url + else: + return '' + return get_file +for format in Book.formats: + setattr(BookDetails, format, _file_getter(format)) + + +class CollectionDetails(object): + """Custom Collection fields.""" + + @classmethod + def href(cls, collection): + """ Returns URI in the API for the collection. """ + + return API_BASE + reverse("api_collection", args=[collection.slug]) + + @classmethod + def url(cls, collection): + """ Returns URL on the site. """ + + return WL_BASE + collection.get_absolute_url() + + @classmethod + def books(cls, collection): + return Book.objects.filter(collection.get_query()) + + + +class CollectionDetailHandler(BaseHandler, CollectionDetails): + allowed_methods = ('GET',) + fields = ['url', 'title', 'description', 'books'] + + @piwik_track + def read(self, request, slug): + """ Returns details of a collection, identified by slug. """ + try: + return Collection.objects.get(slug=slug) + except Collection.DoesNotExist: + return rc.NOT_FOUND + + +class CollectionsHandler(BaseHandler, CollectionDetails): + allowed_methods = ('GET',) + model = Collection + fields = ['url', 'href', 'title'] + + @piwik_track + def read(self, request): + """ Returns all collections. """ + return Collection.objects.all() + + +class TagDetails(object): + """Custom Tag fields.""" + + @classmethod + def href(cls, tag): + """ Returns URI in the API for the tag. """ + + return API_BASE + reverse("api_tag", args=[category_plural[tag.category], tag.slug]) + + @classmethod + def url(cls, tag): + """ Returns URL on the site. """ + + return WL_BASE + tag.get_absolute_url() + + +class TagDetailHandler(BaseHandler, TagDetails): + """ Responsible for details of a single Tag object. """ + + fields = ['name', 'url', 'sort_key', 'description'] + + @piwik_track + def read(self, request, category, slug): + """ Returns details of a tag, identified by category and slug. """ + + try: + category_sng = category_singular[category] + except KeyError, e: + return rc.NOT_FOUND + + try: + return Tag.objects.get(category=category_sng, slug=slug) + except Tag.DoesNotExist: + return rc.NOT_FOUND + + +class TagsHandler(BaseHandler, TagDetails): + """ Main handler for Tag objects. + + Responsible for lists of Tag objects + and fields used for representing Tags. + + """ + allowed_methods = ('GET',) + model = Tag + fields = ['name', 'href', 'url'] + + @piwik_track + def read(self, request, category=None, pk=None): + """ Lists all tags in the category (eg. all themes). """ + if pk is not None: + try: + return Tag.objects.exclude(category='set').get(pk=pk) + except Book.DoesNotExist: + return rc.NOT_FOUND + + try: + category_sng = category_singular[category] + except KeyError, e: + return rc.NOT_FOUND + + tags = Tag.objects.filter(category=category_sng).exclude(items=None) + if tags.exists(): + return tags + else: + return rc.NOT_FOUND + + +class FragmentDetails(object): + """Custom Fragment fields.""" + + @classmethod + def href(cls, fragment): + """ Returns URI in the API for the fragment. """ + + return API_BASE + reverse("api_fragment", + args=[fragment.book.slug, fragment.anchor]) + + @classmethod + def url(cls, fragment): + """ Returns URL on the site for the fragment. """ + + return WL_BASE + fragment.get_absolute_url() + + @classmethod + def themes(cls, fragment): + """ Returns a list of theme tags for the fragment. """ + + return fragment.tags.filter(category='theme') + + +class FragmentDetailHandler(BaseHandler, FragmentDetails): + fields = ['book', 'anchor', 'text', 'url', 'themes'] + + @piwik_track + def read(self, request, book, anchor): + """ Returns details of a fragment, identified by book slug and anchor. """ + try: + return Fragment.objects.get(book__slug=book, anchor=anchor) + except Fragment.DoesNotExist: + return rc.NOT_FOUND + + +class FragmentsHandler(BaseHandler, FragmentDetails): + """ Main handler for Fragments. + + Responsible for lists of Fragment objects + and fields used for representing Fragments. + + """ + model = Fragment + fields = ['book', 'url', 'anchor', 'href'] + allowed_methods = ('GET',) + + categories = set(['author', 'epoch', 'kind', 'genre', 'book', 'theme']) + + @piwik_track + def read(self, request, tags): + """ Lists all fragments with given book, tags, themes. + + :param tags: should be a path of categories and slugs, i.e.: + books/book-slug/authors/an-author/themes/a-theme/ + + """ + try: + tags, ancestors = read_tags(tags, allowed=self.categories) + except ValueError: + return rc.NOT_FOUND + fragments = Fragment.tagged.with_all(tags).select_related('book') + if fragments.exists(): + return fragments + else: + return rc.NOT_FOUND + + +class PictureHandler(BaseHandler): + model = Picture + fields = ('slug', 'title') + allowed_methods = ('POST',) + + def create(self, request): + if not request.user.has_perm('picture.add_picture'): + return rc.FORBIDDEN + + data = json.loads(request.POST.get('data')) + form = PictureImportForm(data) + if form.is_valid(): + form.save() + return rc.CREATED + else: + return rc.NOT_FOUND diff --git a/src/api/helpers.py b/src/api/helpers.py new file mode 100644 index 000000000..62578e7c3 --- /dev/null +++ b/src/api/helpers.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from time import mktime +from piston.resource import Resource + +def timestamp(dtime): + "converts a datetime.datetime object to a timestamp int" + return int(mktime(dtime.timetuple())) + +class CsrfExemptResource(Resource): + """A Custom Resource that is csrf exempt""" + def __init__(self, handler, authentication=None): + super(CsrfExemptResource, self).__init__(handler, authentication) + self.csrf_exempt = getattr(self.handler, 'csrf_exempt', True) diff --git a/src/api/locale/pl/LC_MESSAGES/django.mo b/src/api/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..816c91c7a Binary files /dev/null and b/src/api/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/api/locale/pl/LC_MESSAGES/django.po b/src/api/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..177d4491f --- /dev/null +++ b/src/api/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,158 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2013-06-14 11:45+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \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%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 1.5.4\n" + +#: models.py:15 +msgid "slug" +msgstr "" + +#: templates/api/main.html:5 +msgid "WolneLektury.pl API" +msgstr "API serwisu WolneLektury.pl" + +#: templates/api/main.html:16 +#, python-format +msgid "" +"\n" +"WolneLektury.pl API resides under %(u)s.\n" +"You can use it to access information about books, their fragments and\n" +"their metadata.\n" +msgstr "" +"\n" +"API serwisu WolneLektury.pl znajduje się pod adresem %(u)s.\n" +"Za jego pomocą można uzyskać informacje o utworach, ich fragmentach i " +"metadanych.\n" + +#: templates/api/main.html:24 +msgid "" +"\n" +"Default data serialization format is\n" +"JSON, \n" +"but you can also use XML by appending ?format=xml\n" +"query parameter to each URL.\n" +msgstr "" +"\n" +"Dane domyślnie są serializowane w formacie JSON,\n" +"ale dostępny jest też format XML – wystarczy dodać parametr ?" +"format=xml\n" +"do każdego zapytania.\n" + +#: templates/api/main.html:33 +msgid "" +"\n" +"The URLs in WolneLektury.pl API are:\n" +msgstr "" +"\n" +"API Wolnych Lektur zawiera następujące adresy URL:\n" + +#: templates/api/main.html:40 +msgid "All books" +msgstr "Wszystkie utwory" + +#: templates/api/main.html:42 +msgid "Audiobooks" +msgstr "Audiobooki" + +#: templates/api/main.html:44 +msgid "DAISY" +msgstr "DAISY" + +#: templates/api/main.html:47 +msgid "List of all authors" +msgstr "Lista autorów" + +#: templates/api/main.html:49 +msgid "List of all epochs" +msgstr "Lista epok" + +#: templates/api/main.html:51 +msgid "List of all genres" +msgstr "Lista gatunków literackich" + +#: templates/api/main.html:53 +msgid "List of all kinds" +msgstr "Lista rodzajów literackich" + +#: templates/api/main.html:56 +msgid "List of all themes" +msgstr "Lista motywów i tematów literackich" + +#: templates/api/main.html:58 +msgid "Collections" +msgstr "Kolekcje" + +#: templates/api/main.html:64 +#, python-format +msgid "" +"\n" +"Each element of those lists contains a link (in a \"href\") attibute\n" +"which points to individual resource's details, i.e.:\n" +"%(e1)s or\n" +"%(e2)s.\n" +msgstr "" +"\n" +"Każdy element na tych listach zawiera adres (w atrybucie „href”), pod którym " +"można znaleźć szczegółowe dane, np. %(e1)s czy %(e2)s.\n" + +#: templates/api/main.html:73 +#, python-format +msgid "" +"\n" +"You can combine authors, epochs, genres and kinds to find only books " +"matching\n" +"those criteria. For instance:\n" +"%(e)s.\n" +msgstr "" +"\n" +"Można łączyć autorów, epoki, gatunki i rodzaje, aby wybrać tylko utwory " +"odpowiadające zadanym kryteriom. Na przykład: %(e)s.\n" + +#: templates/api/main.html:81 +#, python-format +msgid "" +"\n" +"If you only want top-level books and not all the children, you can use /" +"parent_books/, as in:\n" +"%(e)s.\n" +msgstr "" +"\n" +"Aby spośród wszystkich pasujących wybrać tylko utwory najwyższego poziomu " +"(pomijając ich podutwory), można użyć zapytania /parent_books/, np.: %(e)s.\n" + +#: templates/api/main.html:89 +#, python-format +msgid "" +"\n" +"The same way, using also books and themes, you can search for a list of " +"fragments:\n" +"%(e)s. \n" +"Again, each entry has a \"href\" attribute which links to the fragment's " +"details, i.e.:\n" +"%(f)s. \n" +msgstr "" +"\n" +"W ten sam sposób, filtrując dodatkowo według lektur lub motywów, można " +"wyszukiwać fragmenty:%(e)s. \n" +"Każdy element uzyskanej listy w atrybucie „href” zawiera link do " +"szczegółowego opisu danego fragmentu, np.:\n" +"%(f)s. \n" diff --git a/src/api/management/__init__.py b/src/api/management/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/src/api/management/commands/__init__.py b/src/api/management/commands/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/src/api/management/commands/mobileinit.py b/src/api/management/commands/mobileinit.py new file mode 100755 index 000000000..57b41aa46 --- /dev/null +++ b/src/api/management/commands/mobileinit.py @@ -0,0 +1,168 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from datetime import datetime +import os +import os.path +import re +import sqlite3 +from django.core.management.base import BaseCommand + +from api.helpers import timestamp +from api.settings import MOBILE_INIT_DB +from catalogue.models import Book, Tag + + +class Command(BaseCommand): + help = 'Creates an initial SQLite file for the mobile app.' + + def handle(self, **options): + # those should be versioned + last_checked = timestamp(datetime.now()) + db = init_db(last_checked) + for b in Book.objects.all(): + add_book(db, b) + for t in Tag.objects.exclude( + category__in=('book', 'set', 'theme')).exclude(items=None): + # only add non-empty tags + add_tag(db, t) + db.commit() + db.close() + current(last_checked) + + +def pretty_size(size): + """ Turns size in bytes into a prettier string. + + >>> pretty_size(100000) + '97 KiB' + """ + if not size: + return None + units = ['B', 'KiB', 'MiB', 'GiB'] + size = float(size) + unit = units.pop(0) + while size > 1000 and units: + size /= 1024 + unit = units.pop(0) + if size < 10: + return "%.1f %s" % (size, unit) + return "%d %s" % (size, unit) + + + if not isinstance(value, unicode): + value = unicode(value, 'utf-8') + + # try to replace chars + value = re.sub('[^a-zA-Z0-9\\s\\-]{1}', replace_char, value) + value = value.lower() + value = re.sub(r'[^a-z0-9{|}]+', '~', value) + + return value.encode('ascii', 'ignore') + + + +def init_db(last_checked): + if not os.path.isdir(MOBILE_INIT_DB): + os.makedirs(MOBILE_INIT_DB) + db = sqlite3.connect(os.path.join(MOBILE_INIT_DB, 'initial.db-%d' % last_checked)) + + schema = """ +CREATE TABLE book ( + id INTEGER PRIMARY KEY, + title VARCHAR, + cover VARCHAR, + html_file VARCHAR, + html_file_size INTEGER, + parent INTEGER, + parent_number INTEGER, + + sort_key VARCHAR, + pretty_size VARCHAR, + authors VARCHAR, + _local BOOLEAN +); +CREATE INDEX IF NOT EXISTS book_title_index ON book (sort_key); +CREATE INDEX IF NOT EXISTS book_title_index ON book (title); +CREATE INDEX IF NOT EXISTS book_parent_index ON book (parent); + +CREATE TABLE tag ( + id INTEGER PRIMARY KEY, + name VARCHAR, + category VARCHAR, + sort_key VARCHAR, + books VARCHAR); +CREATE INDEX IF NOT EXISTS tag_name_index ON tag (name); +CREATE INDEX IF NOT EXISTS tag_category_index ON tag (category); +CREATE INDEX IF NOT EXISTS tag_sort_key_index ON tag (sort_key); + +CREATE TABLE state (last_checked INTEGER); +""" + + db.executescript(schema) + db.execute("INSERT INTO state VALUES (:last_checked)", locals()) + return db + + +def current(last_checked): + target = os.path.join(MOBILE_INIT_DB, 'initial.db') + if os.path.lexists(target): + os.unlink(target) + os.symlink( + 'initial.db-%d' % last_checked, + target, + ) + + + +book_sql = """ + INSERT INTO book + (id, title, cover, html_file, html_file_size, parent, parent_number, sort_key, pretty_size, authors) + VALUES + (:id, :title, :cover, :html_file, :html_file_size, :parent, :parent_number, :sort_key, :size_str, :authors); +""" +book_tag_sql = "INSERT INTO book_tag (book, tag) VALUES (:book, :tag);" +tag_sql = """ + INSERT INTO tag + (id, category, name, sort_key, books) + VALUES + (:id, :category, :name, :sort_key, :book_ids); +""" +categories = {'author': 'autor', + 'epoch': 'epoka', + 'genre': 'gatunek', + 'kind': 'rodzaj', + 'theme': 'motyw' + } + + +def add_book(db, book): + id = book.id + title = book.title + if book.html_file: + html_file = book.html_file.url + html_file_size = book.html_file.size + else: + html_file = html_file_size = None + if book.cover: + cover = book.cover.url + else: + cover = None + parent = book.parent_id + parent_number = book.parent_number + sort_key = book.sort_key + size_str = pretty_size(html_file_size) + authors = ", ".join(t.name for t in book.tags.filter(category='author')) + db.execute(book_sql, locals()) + + +def add_tag(db, tag): + id = tag.id + category = categories[tag.category] + name = tag.name + sort_key = tag.sort_key + + books = Book.tagged_top_level([tag]) + book_ids = ','.join(str(b.id) for b in books) + db.execute(tag_sql, locals()) diff --git a/src/api/migrations/0001_initial.py b/src/api/migrations/0001_initial.py new file mode 100644 index 000000000..4d20304bc --- /dev/null +++ b/src/api/migrations/0001_initial.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Deleted', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('object_id', models.IntegerField()), + ('slug', models.SlugField(max_length=120, verbose_name='Slug', blank=True)), + ('category', models.CharField(db_index=True, max_length=64, null=True, blank=True)), + ('created_at', models.DateTimeField(editable=False, db_index=True)), + ('deleted_at', models.DateTimeField(auto_now_add=True, db_index=True)), + ('content_type', models.ForeignKey(to='contenttypes.ContentType')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.AlterUniqueTogether( + name='deleted', + unique_together=set([('content_type', 'object_id')]), + ), + ] diff --git a/src/api/migrations/0002_auto_20151221_1225.py b/src/api/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..339068ac5 --- /dev/null +++ b/src/api/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='deleted', + name='slug', + field=models.SlugField(max_length=120, verbose_name='slug', blank=True), + ), + ] diff --git a/src/api/migrations/__init__.py b/src/api/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/api/models.py b/src/api/models.py new file mode 100644 index 000000000..5a3d42440 --- /dev/null +++ b/src/api/models.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib.contenttypes.models import ContentType +from django.db import models +from django.db.models.signals import pre_delete +from django.utils.translation import ugettext_lazy as _ + +from catalogue.models import Book, Tag + + +class Deleted(models.Model): + object_id = models.IntegerField() + slug = models.SlugField(_('slug'), max_length=120, blank=True, db_index=True) + content_type = models.ForeignKey(ContentType) + category = models.CharField(max_length=64, null=True, blank=True, db_index=True) + created_at = models.DateTimeField(editable=False, db_index=True) + deleted_at = models.DateTimeField(auto_now_add=True, db_index=True) + + class Meta: + unique_together = (('content_type', 'object_id'),) + + +def _pre_delete_handler(sender, instance, **kwargs): + """ save deleted objects for change history purposes """ + + if sender in (Book, Tag): + if sender == Tag: + if instance.category in ('book', 'set'): + return + else: + category = instance.category + else: + category = None + content_type = ContentType.objects.get_for_model(sender) + Deleted.objects.create(content_type=content_type, object_id=instance.id, + created_at=instance.created_at, category=category, slug=instance.slug) +pre_delete.connect(_pre_delete_handler) diff --git a/src/api/settings.py b/src/api/settings.py new file mode 100644 index 000000000..0802c5453 --- /dev/null +++ b/src/api/settings.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import os.path +from django.conf import settings + + +try: + MOBILE_INIT_DB = settings.API_MOBILE_INIT_DB +except AttributeError: + MOBILE_INIT_DB = os.path.abspath(os.path.join(settings.MEDIA_ROOT, 'api/mobile/initial/')) diff --git a/src/api/templates/api/main.html b/src/api/templates/api/main.html new file mode 100755 index 000000000..04244dc91 --- /dev/null +++ b/src/api/templates/api/main.html @@ -0,0 +1,97 @@ +{% extends "base.html" %} +{% load i18n %} +{% load build_absolute_uri from fnp_common %} + +{% block title %}{% trans "WolneLektury.pl API" %}{% endblock %} + +{% block bodyid %}api{% endblock %} + +{% block body %} + +

                API

                + +
                +

                +{% url "api" as u %} +{% blocktrans with u=u|build_absolute_uri:request %} +WolneLektury.pl API resides under {{ u }}. +You can use it to access information about books, their fragments and +their metadata. +{% endblocktrans %} +

                + +

                +{% blocktrans %} +Default data serialization format is +JSON, +but you can also use XML by appending ?format=xml +query parameter to each URL. +{% endblocktrans %} +

                + +

                +{% blocktrans %} +The URLs in WolneLektury.pl API are: +{% endblocktrans %} +

                + + + +

                +{% url "api_book" "studnia-i-wahadlo" as e1 %} +{% url "api_tag" "authors" "edgar-allan-poe" as e2 %} +{% blocktrans %} +Each element of those lists contains a link (in a "href") attibute +which points to individual resource's details, i.e.: +{{e1}} or +{{e2}}. +{% endblocktrans %} +

                + +

                +{% blocktrans with "/api/authors/adam-mickiewicz/kinds/liryka/books/" as e %} +You can combine authors, epochs, genres and kinds to find only books matching +those criteria. For instance: +{{e}}. +{% endblocktrans %} +

                + +

                +{% blocktrans with "/api/authors/adam-mickiewicz/kinds/liryka/parent_books/" as e %} +If you only want top-level books and not all the children, you can use /parent_books/, as in: +{{e}}. +{% endblocktrans %} +

                + +

                +{% url "api_fragment" "sen-nocy-letniej" "1290526312912-3814598192" as f %} +{% blocktrans with "/api/authors/william-shakespeare/themes/zabawa/fragments/" as e %} +The same way, using also books and themes, you can search for a list of fragments: +{{e}}. +Again, each entry has a "href" attribute which links to the fragment's details, i.e.: +{{f}}. +{% endblocktrans %} +

                +
                +{% endblock %} diff --git a/src/api/templates/oauth/challenge.html b/src/api/templates/oauth/challenge.html new file mode 100755 index 000000000..e69de29bb diff --git a/src/api/tests.py b/src/api/tests.py new file mode 100644 index 000000000..94abe53b5 --- /dev/null +++ b/src/api/tests.py @@ -0,0 +1,95 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from os import path + +from django.core.files.uploadedfile import SimpleUploadedFile +from django.test import TestCase +from django.test.utils import override_settings +import json + +from catalogue.models import Book, Tag +from picture.forms import PictureImportForm +from picture.models import Picture +import picture.tests + + +@override_settings( + NO_SEARCH_INDEX=True, + CACHES={'default': { + 'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}}, + SSIFY_CACHE_ALIASES=['default'], + SSIFY_RENDER=True, +) +class ApiTest(TestCase): + def load_json(self, url): + content = self.client.get(url).content + try: + data = json.loads(content) + except ValueError: + self.fail('No JSON could be decoded:', content) + return data + + +class BookTests(ApiTest): + + def setUp(self): + self.tag = Tag.objects.create(category='author', slug='joe') + self.book = Book.objects.create(title='A Book', slug='a-book') + self.book_tagged = Book.objects.create(title='Tagged Book', slug='tagged-book') + self.book_tagged.tags = [self.tag] + self.book_tagged.save() + + def test_book_list(self): + books = self.load_json('/api/books/') + self.assertEqual(len(books), 2, + 'Wrong book list.') + + def test_tagged_books(self): + books = self.load_json('/api/authors/joe/books/') + + self.assertEqual([b['title'] for b in books], [self.book_tagged.title], + 'Wrong tagged book list.') + + def test_detail(self): + book = self.load_json('/api/books/a-book/') + self.assertEqual(book['title'], self.book.title, + 'Wrong book details.') + + +class TagTests(ApiTest): + + def setUp(self): + self.tag = Tag.objects.create(category='author', slug='joe', name='Joe') + self.book = Book.objects.create(title='A Book', slug='a-book') + self.book.tags = [self.tag] + self.book.save() + + def test_tag_list(self): + tags = self.load_json('/api/authors/') + self.assertEqual(len(tags), 1, + 'Wrong tag list.') + + def test_tag_detail(self): + tag = self.load_json('/api/authors/joe/') + self.assertEqual(tag['name'], self.tag.name, + 'Wrong tag details.') + + +class PictureTests(ApiTest): + def test_publish(self): + slug = "kandinsky-composition-viii" + xml = SimpleUploadedFile('composition8.xml', open(path.join(picture.tests.__path__[0], "files", slug + ".xml")).read()) + img = SimpleUploadedFile('kompozycja-8.png', open(path.join(picture.tests.__path__[0], "files", slug + ".png")).read()) + + import_form = PictureImportForm({}, { + 'picture_xml_file': xml, + 'picture_image_file': img + }) + + assert import_form.is_valid() + if import_form.is_valid(): + import_form.save() + + Picture.objects.get(slug=slug) diff --git a/src/api/urls.py b/src/api/urls.py new file mode 100644 index 000000000..1c2e656d1 --- /dev/null +++ b/src/api/urls.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url +from django.views.decorators.csrf import csrf_exempt +from django.views.generic import TemplateView +from piston.authentication import OAuthAuthentication, oauth_access_token +from piston.resource import Resource +from ssify import ssi_included +from api import handlers +from api.helpers import CsrfExemptResource + +auth = OAuthAuthentication(realm="Wolne Lektury") + +book_list_resource = CsrfExemptResource(handler=handlers.BooksHandler, authentication=auth) +ebook_list_resource = Resource(handler=handlers.EBooksHandler) +#book_list_resource = Resource(handler=handlers.BooksHandler) +book_resource = Resource(handler=handlers.BookDetailHandler) + +collection_resource = Resource(handler=handlers.CollectionDetailHandler) +collection_list_resource = Resource(handler=handlers.CollectionsHandler) + +tag_list_resource = Resource(handler=handlers.TagsHandler) +tag_resource = Resource(handler=handlers.TagDetailHandler) + +fragment_resource = Resource(handler=handlers.FragmentDetailHandler) +fragment_list_resource = Resource(handler=handlers.FragmentsHandler) + +picture_resource = CsrfExemptResource(handler=handlers.PictureHandler, authentication=auth) + + +@ssi_included +def incl(request, model, pk, emitter_format): + resource = { + 'book': book_list_resource, + 'fragment': fragment_list_resource, + 'tag': tag_list_resource, + }[model] + request.piwik_track = False + resp = resource(request, pk=pk, emitter_format=emitter_format) + if emitter_format == 'xml': + # Ugly, but quick way of stripping header and tags. + resp.content = resp.content[49:-11] + return resp + + +urlpatterns = patterns( + 'piston.authentication', + url(r'^oauth/request_token/$', 'oauth_request_token'), + url(r'^oauth/authorize/$', 'oauth_user_auth'), + url(r'^oauth/access_token/$', csrf_exempt(oauth_access_token)), + +) + patterns('', + url(r'^$', TemplateView.as_view(template_name='api/main.html'), name='api'), + url(r'^include/(?Pbook|fragment|tag)/(?P\d+)\.(?P.+)\.(?Pxml|json)$', + incl, name='api_include'), + + # info boxes (used by mobile app) + url(r'book/(?P\d*?)/info\.html$', 'catalogue.views.book_info'), + url(r'tag/(?P\d*?)/info\.html$', 'catalogue.views.tag_info'), + + # books by collections + url(r'^collections/$', collection_list_resource, name="api_collections"), + url(r'^collections/(?P[^/]+)/$', collection_resource, name="api_collection"), + + # objects details + url(r'^books/(?P[a-z0-9-]+)/$', book_resource, name="api_book"), + url(r'^(?P[a-z0-9-]+)/(?P[a-z0-9-]+)/$', + tag_resource, name="api_tag"), + url(r'^books/(?P[a-z0-9-]+)/fragments/(?P[a-z0-9-]+)/$', + fragment_resource, name="api_fragment"), + + # books by tags + url(r'^(?P(?:(?:[a-z0-9-]+/){2}){0,6})books/$', + book_list_resource, name='api_book_list'), + url(r'^(?P(?:(?:[a-z0-9-]+/){2}){0,6})ebooks/$', + ebook_list_resource, name='api_ebook_list'), + url(r'^(?P(?:(?:[a-z0-9-]+/){2}){0,6})parent_books/$', + book_list_resource, {"top_level": True}, name='api_parent_book_list'), + url(r'^(?P(?:(?:[a-z0-9-]+/){2}){0,6})parent_ebooks/$', + ebook_list_resource, {"top_level": True}, name='api_parent_ebook_list'), + url(r'^(?P(?:(?:[a-z0-9-]+/){2}){0,6})audiobooks/$', + book_list_resource, {"audiobooks": True}, name='api_audiobook_list'), + url(r'^(?P(?:(?:[a-z0-9-]+/){2}){0,6})daisy/$', + book_list_resource, {"daisy": True}, name='api_daisy_list'), + + url(r'^pictures/$', picture_resource), + + # fragments by book, tags, themes + # this should be paged + url(r'^(?P(?:(?:[a-z0-9-]+/){2}){1,6})fragments/$', fragment_list_resource), + + # tags by category + url(r'^(?P[a-z0-9-]+)/$', tag_list_resource, name='api_tag_list'), +) diff --git a/src/basicauth.py b/src/basicauth.py new file mode 100644 index 000000000..befcc6fe7 --- /dev/null +++ b/src/basicauth.py @@ -0,0 +1,100 @@ +############################################################################# +# from http://djangosnippets.org/snippets/243/ + +from functools import wraps +import base64 + +from django.http import HttpResponse +from django.contrib.auth import authenticate, login + +# +def view_or_basicauth(view, request, test_func, realm = "", *args, **kwargs): + """ + This is a helper function used by 'logged_in_or_basicauth' and + 'has_perm_or_basicauth' (deleted) that does the nitty of determining if they + are already logged in or if they have provided proper http-authorization + and returning the view if all goes well, otherwise responding with a 401. + """ + if test_func(request.user): + # Already logged in, just return the view. + # + return view(request, *args, **kwargs) + + # They are not logged in. See if they provided login credentials + # + if 'HTTP_AUTHORIZATION' in request.META: + auth = request.META['HTTP_AUTHORIZATION'].split() + if len(auth) == 2: + # NOTE: We are only support basic authentication for now. + # + if auth[0].lower() == "basic": + uname, passwd = base64.b64decode(auth[1]).split(':') + user = authenticate(username=uname, password=passwd) + if user is not None: + if user.is_active: + login(request, user) + request.user = user + return view(request, *args, **kwargs) + + # Either they did not provide an authorization header or + # something in the authorization attempt failed. Send a 401 + # back to them to ask them to authenticate. + # + response = HttpResponse() + response.status_code = 401 + response['WWW-Authenticate'] = 'Basic realm="%s"' % realm + return response + + +# +def logged_in_or_basicauth(realm = ""): + """ + A simple decorator that requires a user to be logged in. If they are not + logged in the request is examined for a 'authorization' header. + + If the header is present it is tested for basic authentication and + the user is logged in with the provided credentials. + + If the header is not present a http 401 is sent back to the + requestor to provide credentials. + + The purpose of this is that in several django projects I have needed + several specific views that need to support basic authentication, yet the + web site as a whole used django's provided authentication. + + The uses for this are for urls that are access programmatically such as + by rss feed readers, yet the view requires a user to be logged in. Many rss + readers support supplying the authentication credentials via http basic + auth (and they do NOT support a redirect to a form where they post a + username/password.) + + Use is simple: + + @logged_in_or_basicauth + def your_view: + ... + + You can provide the name of the realm to ask for authentication within. + """ + def view_decorator(func): + def wrapper(request, *args, **kwargs): + return view_or_basicauth(func, request, + lambda u: u.is_authenticated(), + realm, *args, **kwargs) + return wrapper + return view_decorator + + +############################################################################# + + +def factory_decorator(decorator): + """ generates a decorator for a function factory class + if A(*) == f, factory_decorator(D)(A)(*) == D(f) + """ + def fac_dec(func): + @wraps(func) + def wrapper(*args, **kwargs): + return decorator(func(*args, **kwargs)) + return wrapper + return fac_dec diff --git a/src/catalogue/__init__.py b/src/catalogue/__init__.py new file mode 100644 index 000000000..eaeb7d468 --- /dev/null +++ b/src/catalogue/__init__.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import logging +from django.conf import settings as settings +from catalogue.utils import AppSettings + + +default_app_config = 'catalogue.apps.CatalogueConfig' + + +class Settings(AppSettings): + """Default settings for catalogue app.""" + DEFAULT_LANGUAGE = u'pol' + # PDF needs TeXML + XeLaTeX, MOBI needs Calibre. + DONT_BUILD = set(['pdf', 'mobi']) + FORMAT_ZIPS = { + 'epub': 'wolnelektury_pl_epub', + 'pdf': 'wolnelektury_pl_pdf', + 'mobi': 'wolnelektury_pl_mobi', + 'fb2': 'wolnelektury_pl_fb2', + } + + REDAKCJA_URL = "http://redakcja.wolnelektury.pl" + GOOD_LICENSES = set([r'CC BY \d\.\d', r'CC BY-SA \d\.\d']) + RELATED_RANDOM_PICTURE_CHANCE = .5 + + def _more_DONT_BUILD(self, value): + for format_ in ['cover', 'pdf', 'epub', 'mobi', 'fb2', 'txt']: + attname = 'NO_BUILD_%s' % format_.upper() + if hasattr(settings, attname): + logging.warn("%s is deprecated, " + "use CATALOGUE_DONT_BUILD instead", attname) + if getattr(settings, attname): + value.add(format_) + else: + value.remove(format_) + return value + + def _more_FORMAT_ZIPS(self, value): + for format_ in ['epub', 'pdf', 'mobi', 'fb2']: + attname = 'ALL_%s_ZIP' % format_.upper() + if hasattr(settings, attname): + logging.warn("%s is deprecated, " + "use CATALOGUE_FORMAT_ZIPS[%s] instead", + attname, format_) + value[format_] = getattr(settings, attname) + return value + + +app_settings = Settings('CATALOGUE') diff --git a/src/catalogue/admin.py b/src/catalogue/admin.py new file mode 100644 index 000000000..28cf53c37 --- /dev/null +++ b/src/catalogue/admin.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin +from django import forms + +from newtagging.admin import TaggableModelAdmin, TaggableModelForm +from catalogue.models import Tag, Book, Fragment, BookMedia, Collection, Source + + +class TagAdmin(admin.ModelAdmin): + list_display = ('name', 'slug', 'sort_key', 'category', 'has_description',) + list_filter = ('category',) + search_fields = ('name',) + ordering = ('name',) + + prepopulated_fields = {'slug': ('name',), 'sort_key': ('name',),} + radio_fields = {'category': admin.HORIZONTAL} + + +class MediaInline(admin.TabularInline): + model = BookMedia + readonly_fields = ['source_sha1'] + extra = 0 + + +class BookAdmin(TaggableModelAdmin): + tag_model = Tag + + list_display = ('title', 'slug', 'created_at', 'has_epub_file', 'has_html_file', 'has_description',) + search_fields = ('title',) + ordering = ('title',) + + inlines = [MediaInline] + + def change_view(self, request, object_id, extra_context=None): + if not request.GET.has_key('advanced'): + self.form = forms.ModelForm + self.fields = ('title', 'description', 'gazeta_link', 'wiki_link') + self.readonly_fields = ('title',) + else: + self.form = TaggableModelForm + self.fields = None + self.readonly_fields = () + return super(BookAdmin, self).change_view(request, object_id, + extra_context=extra_context) + + +class FragmentAdmin(TaggableModelAdmin): + tag_model = Tag + + list_display = ('book', 'anchor',) + ordering = ('book', 'anchor',) + + +class CollectionAdmin(admin.ModelAdmin): + prepopulated_fields = {'slug': ('title',)} + + +class SourceAdmin(admin.ModelAdmin): + list_display = ('netloc', 'name') + + +admin.site.register(Tag, TagAdmin) +admin.site.register(Book, BookAdmin) +admin.site.register(Fragment, FragmentAdmin) +admin.site.register(Collection, CollectionAdmin) +admin.site.register(Source, SourceAdmin) diff --git a/src/catalogue/apps.py b/src/catalogue/apps.py new file mode 100644 index 000000000..54bfc8f8b --- /dev/null +++ b/src/catalogue/apps.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.apps import AppConfig + +class CatalogueConfig(AppConfig): + name = 'catalogue' + + def ready(self): + from . import signals diff --git a/src/catalogue/constants.py b/src/catalogue/constants.py new file mode 100644 index 000000000..36f4f5dd3 --- /dev/null +++ b/src/catalogue/constants.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.utils.translation import ugettext_lazy as _ + +LICENSES = { + 'http://creativecommons.org/licenses/by-sa/3.0/': { + 'icon': 'cc-by-sa', + 'description': _('Creative Commons Attribution-ShareAlike 3.0 Unported'), + }, +} +LICENSES['http://creativecommons.org/licenses/by-sa/3.0/deed.pl'] = \ + LICENSES['http://creativecommons.org/licenses/by-sa/3.0/'] + +# Those will be generated only for books with own HTML. +EBOOK_FORMATS_WITHOUT_CHILDREN = ['txt', 'fb2'] +# Those will be generated for all books. +EBOOK_FORMATS_WITH_CHILDREN = ['pdf', 'epub', 'mobi'] +# Those will be generated when inherited cover changes. +EBOOK_FORMATS_WITH_COVERS = ['pdf', 'epub', 'mobi'] + +EBOOK_FORMATS = EBOOK_FORMATS_WITHOUT_CHILDREN + EBOOK_FORMATS_WITH_CHILDREN + +LANGUAGES_3TO2 = { + 'deu': 'de', + 'ger': 'de', + 'eng': 'en', + 'spa': 'es', + 'fra': 'fr', + 'fre': 'fr', + 'ita': 'it', + 'jpn': 'jp', + 'lit': 'lt', + 'pol': 'pl', + 'rus': 'ru', + 'ukr': 'uk', +} diff --git a/src/catalogue/feeds.py b/src/catalogue/feeds.py new file mode 100644 index 000000000..2411d015a --- /dev/null +++ b/src/catalogue/feeds.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib.sites.models import Site +from django.contrib.syndication.views import Feed +from django.core.urlresolvers import reverse + +from catalogue import models + +def absolute_url(url): + return "http://%s%s" % (Site.objects.get_current().domain, url) + + +class AudiobookFeed(Feed): + description = "Audiobooki ostatnio dodane do serwisu Wolne Lektury." + + mime_types = { + 'mp3': 'audio/mpeg', + 'ogg': 'audio/ogg', + 'daisy': 'application/zip', + } + + titles = { + 'all': 'WolneLektury.pl - audiobooki we wszystkich formatach', + 'mp3': 'WolneLektury.pl - audiobooki w formacie MP3', + 'ogg': 'WolneLektury.pl - audiobooki w formacie Ogg Vorbis', + 'daisy': 'WolneLektury.pl - audiobooki w formacie DAISY', + } + + def get_object(self, request, type): + return {'type': type, 'all': 'all' in request.GET} + + def title(self, args): + return self.titles[args['type']] + + def link(self, args): + return reverse('audiobook_feed', args=(args['type'],)) + + def items(self, args): + objects = models.BookMedia.objects.order_by('-uploaded_at') + if type == 'all': + objects = objects.filter(type__in=('mp3', 'ogg', 'daisy')) + else: + objects = objects.filter(type=args['type']) + if not args['all']: + objects = objects[:50] + return objects + + def item_title(self, item): + return item.name + + def item_categories(self, item): + return sorted(set(author.name for author in + item.book.tags.filter(category='author').iterator())) + + def item_description(self, item): + lines = [] + artist = item.extra_info.get('artist_name', None) + if artist is not None: + lines.append(u'Czyta: %s' % artist) + director = item.extra_info.get('artist_name', None) + if director is not None: + lines.append(u'Reżyseruje: %s' % director) + return u'
                \n'.join(lines) + + def item_link(self, item): + return item.book.get_absolute_url() + + def item_guid(self, item): + return absolute_url(item.file.url) + + def item_enclosure_url(self, item): + return absolute_url(item.file.url) + + def item_enclosure_length(self, item): + return item.file.size + + def item_enclosure_mime_type(self, item): + return self.mime_types[item.type] + + def item_pubdate(self, item): + return item.uploaded_at diff --git a/src/catalogue/fields.py b/src/catalogue/fields.py new file mode 100644 index 000000000..0ff2ca9ef --- /dev/null +++ b/src/catalogue/fields.py @@ -0,0 +1,243 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django.core.files import File +from django.db import models +from django.db.models.fields.files import FieldFile +from catalogue import app_settings +from catalogue.constants import LANGUAGES_3TO2 +from catalogue.utils import remove_zip, truncate_html_words +from celery.task import Task, task +from celery.utils.log import get_task_logger +from waiter.utils import clear_cache + +task_logger = get_task_logger(__name__) + + +class EbookFieldFile(FieldFile): + """Represents contents of an ebook file field.""" + + def build(self): + """Build the ebook immediately.""" + return self.field.builder.build(self) + + def build_delay(self): + """Builds the ebook in a delayed task.""" + return self.field.builder.delay(self.instance, self.field.attname) + + +class EbookField(models.FileField): + """Represents an ebook file field, attachable to a model.""" + attr_class = EbookFieldFile + + def __init__(self, format_name, *args, **kwargs): + super(EbookField, self).__init__(*args, **kwargs) + self.format_name = format_name + + def deconstruct(self): + name, path, args, kwargs = super(EbookField, self).deconstruct() + args.insert(0, self.format_name) + return name, path, args, kwargs + + @property + def builder(self): + """Finds a celery task suitable for the format of the field.""" + return BuildEbook.for_format(self.format_name) + + def contribute_to_class(self, cls, name): + super(EbookField, self).contribute_to_class(cls, name) + + def has(model_instance): + return bool(getattr(model_instance, self.attname, None)) + has.__doc__ = None + has.__name__ = str("has_%s" % self.attname) + has.short_description = self.name + has.boolean = True + setattr(cls, 'has_%s' % self.attname, has) + + +class BuildEbook(Task): + formats = {} + + @classmethod + def register(cls, format_name): + """A decorator for registering subclasses for particular formats.""" + def wrapper(builder): + cls.formats[format_name] = builder + return builder + return wrapper + + @classmethod + def for_format(cls, format_name): + """Returns a celery task suitable for specified format.""" + return cls.formats.get(format_name, BuildEbookTask) + + @staticmethod + def transform(wldoc, fieldfile): + """Transforms an librarian.WLDocument into an librarian.OutputFile. + + By default, it just calls relevant wldoc.as_??? method. + + """ + return getattr(wldoc, "as_%s" % fieldfile.field.format_name)() + + def run(self, obj, field_name): + """Just run `build` on FieldFile, can't pass it directly to Celery.""" + task_logger.info("%s -> %s" % (obj.slug, field_name)) + ret = self.build(getattr(obj, field_name)) + obj.flush_includes() + return ret + + def build(self, fieldfile): + book = fieldfile.instance + out = self.transform(book.wldocument(), fieldfile) + fieldfile.save(None, File(open(out.get_filename())), save=False) + if book.pk is not None: + type(book).objects.filter(pk=book.pk).update(**{ + fieldfile.field.attname: fieldfile + }) + if fieldfile.field.format_name in app_settings.FORMAT_ZIPS: + remove_zip(app_settings.FORMAT_ZIPS[fieldfile.field.format_name]) +# Don't decorate BuildEbook, because we want to subclass it. +BuildEbookTask = task(BuildEbook, ignore_result=True) + + +@BuildEbook.register('txt') +@task(ignore_result=True) +class BuildTxt(BuildEbook): + @staticmethod + def transform(wldoc, fieldfile): + return wldoc.as_text() + + +@BuildEbook.register('pdf') +@task(ignore_result=True) +class BuildPdf(BuildEbook): + @staticmethod + def transform(wldoc, fieldfile): + return wldoc.as_pdf(morefloats=settings.LIBRARIAN_PDF_MOREFLOATS, + cover=True) + + def build(self, fieldfile): + BuildEbook.build(self, fieldfile) + clear_cache(fieldfile.instance.slug) + + +@BuildEbook.register('epub') +@task(ignore_result=True) +class BuildEpub(BuildEbook): + @staticmethod + def transform(wldoc, fieldfile): + return wldoc.as_epub(cover=True) + + +@BuildEbook.register('html') +@task(ignore_result=True) +class BuildHtml(BuildEbook): + def build(self, fieldfile): + from django.core.files.base import ContentFile + from fnpdjango.utils.text.slughifi import slughifi + from sortify import sortify + from librarian import html + from catalogue.models import Fragment, Tag + + book = fieldfile.instance + + html_output = self.transform( + book.wldocument(parse_dublincore=False), + fieldfile) + + # Delete old fragments, create from scratch if necessary. + book.fragments.all().delete() + + if html_output: + meta_tags = list(book.tags.filter( + category__in=('author', 'epoch', 'genre', 'kind'))) + + lang = book.language + lang = LANGUAGES_3TO2.get(lang, lang) + if lang not in [ln[0] for ln in settings.LANGUAGES]: + lang = None + + fieldfile.save(None, ContentFile(html_output.get_string()), + save=False) + type(book).objects.filter(pk=book.pk).update(**{ + fieldfile.field.attname: fieldfile + }) + + # Extract fragments + closed_fragments, open_fragments = html.extract_fragments(fieldfile.path) + for fragment in closed_fragments.values(): + try: + theme_names = [s.strip() for s in fragment.themes.split(',')] + except AttributeError: + continue + themes = [] + for theme_name in theme_names: + if not theme_name: + continue + if lang == settings.LANGUAGE_CODE: + # Allow creating themes if book in default language. + tag, created = Tag.objects.get_or_create( + slug=slughifi(theme_name), + category='theme') + if created: + tag.name = theme_name + setattr(tag, "name_%s" % lang, theme_name) + tag.sort_key = sortify(theme_name.lower()) + tag.save() + themes.append(tag) + elif lang is not None: + # Don't create unknown themes in non-default languages. + try: + tag = Tag.objects.get(category='theme', + **{"name_%s" % lang: theme_name}) + except Tag.DoesNotExist: + pass + else: + themes.append(tag) + if not themes: + continue + + text = fragment.to_string() + short_text = truncate_html_words(text, 15) + if text == short_text: + short_text = '' + new_fragment = Fragment.objects.create(anchor=fragment.id, + book=book, text=text, short_text=short_text) + + new_fragment.save() + new_fragment.tags = set(meta_tags + themes) + book.html_built.send(sender=type(self), instance=book) + return True + return False + +@BuildEbook.register('cover_thumb') +@task(ignore_result=True) +class BuildCoverThumb(BuildEbook): + @classmethod + def transform(cls, wldoc, fieldfile): + from librarian.cover import WLCover + return WLCover(wldoc.book_info, height=193).output_file() + + + +class OverwritingFieldFile(FieldFile): + """ + Deletes the old file before saving the new one. + """ + + def save(self, name, content, *args, **kwargs): + leave = kwargs.pop('leave', None) + # delete if there's a file already and there's a new one coming + if not leave and self and (not hasattr(content, 'path') or + content.path != self.path): + self.delete(save=False) + return super(OverwritingFieldFile, self).save( + name, content, *args, **kwargs) + + +class OverwritingFileField(models.FileField): + attr_class = OverwritingFieldFile diff --git a/src/catalogue/fixtures/collection-boy.json b/src/catalogue/fixtures/collection-boy.json new file mode 100644 index 000000000..1328b132b --- /dev/null +++ b/src/catalogue/fixtures/collection-boy.json @@ -0,0 +1,19 @@ +[ + { + "pk": "promo", + "model": "chunks.chunk", + "fields": { + "content": "

                \r\n\r\n\r\nOh Boy!\r\n\r\n\r\n

                \r\n\r\n\r\nBiblioteczka Boya\r\n\r\n\r\n

                \r\n\r\n\r\n

                T\u0142umaczenia literatury francuskiej i nie tylko.

                \r\n\r\n

                Biblioteczka Boya \u21d2

                \r\n\r\n\r\n
                ", + "description": "boks promocyjny na g\u0142\u00f3wnej" + } + }, + { + "pk": "boy", + "model": "catalogue.collection", + "fields": { + "book_slugs": "http://www.wolnelektury.pl/katalog/lektura/piesn-o-rolandzie/\nhttp://www.wolnelektury.pl/katalog/lektura/wielki-testament/\nhttp://www.wolnelektury.pl/katalog/lektura/skapiec/\nhttp://www.wolnelektury.pl/katalog/lektura/mieszczanin-szlachcicem/\nhttp://www.wolnelektury.pl/katalog/lektura/kandyd/\nhttp://www.wolnelektury.pl/katalog/lektura/rozprawa-o-metodzie/\nhttp://www.wolnelektury.pl/katalog/lektura/listy-perskie/\nhttp://www.wolnelektury.pl/katalog/lektura/spowiedz-dzieciecia-wieku/\nhttp://www.wolnelektury.pl/katalog/lektura/ubu-krol/\nhttp://www.wolnelektury.pl/katalog/lektura/legenda-o-tristanie-i-izoldzie/\nhttp://www.wolnelektury.pl/katalog/lektura/boy-swietoszek/\nhttp://www.wolnelektury.pl/katalog/lektura/mizantrop/\nhttp://www.wolnelektury.pl/katalog/lektura/kubus-fatalista-i-jego-pan/\nhttp://www.wolnelektury.pl/katalog/lektura/mysli/\nhttp://www.wolnelektury.pl/katalog/lektura/o-duchu-praw/\nhttp://www.wolnelektury.pl/katalog/lektura/proby/\nhttp://www.wolnelektury.pl/katalog/lektura/w-strone-swanna/\nhttp://www.wolnelektury.pl/katalog/lektura/gargantua-i-pantagruel/", + "description": "", + "title": "Biblioteczka Boya" + } + } +] \ No newline at end of file diff --git a/src/catalogue/forms.py b/src/catalogue/forms.py new file mode 100644 index 000000000..d52310bd3 --- /dev/null +++ b/src/catalogue/forms.py @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import forms +from django.utils.translation import ugettext_lazy as _ + +from catalogue.models import Book +from waiter.models import WaitedFile +from django.core.exceptions import ValidationError +from catalogue.utils import get_customized_pdf_path +from catalogue.tasks import build_custom_pdf + + +class BookImportForm(forms.Form): + book_xml_file = forms.FileField(required=False) + book_xml = forms.CharField(required=False) + + def clean(self): + from django.core.files.base import ContentFile + + if not self.cleaned_data['book_xml_file']: + if self.cleaned_data['book_xml']: + self.cleaned_data['book_xml_file'] = \ + ContentFile(self.cleaned_data['book_xml'].encode('utf-8')) + else: + raise forms.ValidationError(_("Please supply an XML.")) + return super(BookImportForm, self).clean() + + def save(self, commit=True, **kwargs): + return Book.from_xml_file(self.cleaned_data['book_xml_file'], overwrite=True, **kwargs) + + +FORMATS = [(f, f.upper()) for f in Book.ebook_formats] + + +class DownloadFormatsForm(forms.Form): + formats = forms.MultipleChoiceField(required=False, choices=FORMATS, + widget=forms.CheckboxSelectMultiple) + + def __init__(self, *args, **kwargs): + super(DownloadFormatsForm, self).__init__(*args, **kwargs) + + +CUSTOMIZATION_FLAGS = ( + ('nofootnotes', _("Don't show footnotes")), + ('nothemes', _("Don't disply themes")), + ('nowlfont', _("Don't use our custom font")), + ('no-cover', _("Without cover")), + ) +CUSTOMIZATION_OPTIONS = ( + ('leading', _("Leading"), ( + ('', _('Normal leading')), + ('onehalfleading', _('One and a half leading')), + ('doubleleading', _('Double leading')), + )), + ('fontsize', _("Font size"), ( + ('', _('Default')), + ('13pt', _('Big')) + )), +# ('pagesize', _("Paper size"), ( +# ('a4paper', _('A4')), +# ('a5paper', _('A5')), +# )), + ) + + +class CustomPDFForm(forms.Form): + def __init__(self, book, *args, **kwargs): + super(CustomPDFForm, self).__init__(*args, **kwargs) + self.book = book + for name, label in CUSTOMIZATION_FLAGS: + self.fields[name] = forms.BooleanField(required=False, label=label) + for name, label, choices in CUSTOMIZATION_OPTIONS: + self.fields[name] = forms.ChoiceField(choices, required=False, label=label) + + def clean(self): + self.cleaned_data['cust'] = self.customizations + self.cleaned_data['path'] = get_customized_pdf_path(self.book, + self.cleaned_data['cust']) + if not WaitedFile.can_order(self.cleaned_data['path']): + raise ValidationError(_('Queue is full. Please try again later.')) + return self.cleaned_data + + @property + def customizations(self): + c = [] + for name, label in CUSTOMIZATION_FLAGS: + if self.cleaned_data.get(name): + c.append(name) + for name, label, choices in CUSTOMIZATION_OPTIONS: + option = self.cleaned_data.get(name) + if option: + c.append(option) + c.sort() + return c + + def save(self, *args, **kwargs): + if not self.cleaned_data['cust'] and self.book.pdf_file: + # Don't build with default options, just redirect to the standard file. + return {"redirect": self.book.pdf_file.url} + url = WaitedFile.order(self.cleaned_data['path'], + lambda p, waiter_id: build_custom_pdf.delay(self.book.id, + self.cleaned_data['cust'], p, waiter_id), + self.book.pretty_title() + ) + #return redirect(url) + return {"redirect": url} diff --git a/src/catalogue/helpers.py b/src/catalogue/helpers.py new file mode 100644 index 000000000..7ca2cbd3a --- /dev/null +++ b/src/catalogue/helpers.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib.contenttypes.models import ContentType +from django.db.models import Count +from .models import Tag, Book + + +BOOK_CATEGORIES = ('author', 'epoch', 'genre', 'kind') + + +def get_top_level_related_tags(tags=None, categories=BOOK_CATEGORIES): + """ + Finds tags related to given tags through books, and counts their usage. + + Takes ancestry into account: if a tag is applied to a book, its + usage on the book's descendants is ignored. + + This is tested for PostgreSQL 9.1+, and might not work elsewhere. + It particular, it uses raw SQL using WITH clause, which is + supported in SQLite from v. 3.8.3, and is missing in MySQL. + http://bugs.mysql.com/bug.php?id=16244 + + """ + # First, find all tag relations of relevant books. + bct = ContentType.objects.get_for_model(Book) + relations = Tag.intermediary_table_model.objects.filter( + content_type=bct) + if tags is not None: + tagged_books = Book.tagged.with_all(tags).only('pk') + relations = relations.filter( + object_id__in=tagged_books).exclude( + tag_id__in=[tag.pk for tag in tags]) + + rel_sql, rel_params = relations.query.sql_with_params() + + # Exclude those relations between a book and a tag, + # for which there is a relation between the book's ancestor + # and the tag and + + return Tag.objects.raw(''' + WITH AllTagged AS (''' + rel_sql + ''') + SELECT catalogue_tag.*, COUNT(catalogue_tag.id) AS count + FROM catalogue_tag, AllTagged + WHERE catalogue_tag.id=AllTagged.tag_id + AND catalogue_tag.category IN %s + AND NOT EXISTS ( + SELECT AncestorTagged.id + FROM catalogue_book_ancestor Ancestor, + AllTagged AncestorTagged + WHERE Ancestor.from_book_id=AllTagged.object_id + AND AncestorTagged.content_type_id=%s + AND AncestorTagged.object_id=Ancestor.to_book_id + AND AncestorTagged.tag_id=AllTagged.tag_id + ) + GROUP BY catalogue_tag.id + ORDER BY sort_key''', rel_params + (categories, bct.pk)) diff --git a/src/catalogue/import_utils.py b/src/catalogue/import_utils.py new file mode 100644 index 000000000..ca0c6efe5 --- /dev/null +++ b/src/catalogue/import_utils.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from librarian import DocProvider + +class ORMDocProvider(DocProvider): + """Used for getting books' children.""" + + def __init__(self, book): + self.book = book + + def by_slug(self, slug): + if slug == self.book.slug: + return open(self.book.xml_file.path) + else: + return type(self.book).objects.get(slug=slug).xml_file diff --git a/src/catalogue/locale/de/LC_MESSAGES/django.mo b/src/catalogue/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..1cd46613d Binary files /dev/null and b/src/catalogue/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/de/LC_MESSAGES/django.po b/src/catalogue/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..057dc348f --- /dev/null +++ b/src/catalogue/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,874 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2013-04-09 10:38+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "Bitte stellen Sie die XML bereit." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "Zeige die Fußnoten nicht" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "Zeige die Motive nicht " + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "Benutze voreingestellte Schrift nicht" + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "Zeilenabstand" + +#: forms.py:53 +msgid "Normal leading" +msgstr "Normaler Zeilenabstand" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "Zeilenabstand 1,5" + +#: forms.py:55 +msgid "Double leading" +msgstr "Doppelter Zeilenabstand" + +#: forms.py:57 +msgid "Font size" +msgstr "Schriftgröße" + +#: forms.py:58 +msgid "Default" +msgstr "Voreingestellt" + +#: forms.py:59 +msgid "Big" +msgstr "Groß" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"Ein Fehler ist aufgetreten: %(exception)s\n" +"\n" +"%(tb)s" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "Buch wurde erfolgreich importiert" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "Fehler beim Importieren der Datei: %r" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "PDF-Datei herunterladen" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "Herunterladen" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "Titel" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "Sortierschlüssel" + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "Slug" + +#: models/book.py:33 +msgid "language code" +msgstr "Sprachenkode" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "Beschreibung" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "Erstellungsdatum" + +#: models/book.py:38 +msgid "parent number" +msgstr "Elternnummer" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr "zusätzliche Informationen" + +#: models/book.py:44 +msgid "cover" +msgstr "Umschlag" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "Buch" + +#: models/book.py:67 +msgid "books" +msgstr "Bücher" + +#: models/book.py:244 +#, python-format +msgid "Book \"%s\" does not exist." +msgstr "Buch mit dem Slug = \"%s\" ist nicht vorhanden." + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "Buch %s ist bereits vorhanden" + +#: models/book.py:599 models/bookmedia.py:23 +#, python-format +msgid "%s file" +msgstr "%s XML-Datei" + +#: models/bookmedia.py:26 +msgid "type" +msgstr "Typ" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "Name" + +#: models/bookmedia.py:28 +#, fuzzy +msgid "file" +msgstr "XML-Datei" + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "book media" + +#: models/collection.py:16 +msgid "book slugs" +msgstr "Büchervorschau" + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "Art" + +#: models/collection.py:22 +msgid "collection" +msgstr "Sammlung" + +#: models/collection.py:23 +msgid "collections" +msgstr "Sammlungen" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "Auszug" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "Auszüge" + +#: models/tag.py:16 +msgid "author" +msgstr "Autor" + +#: models/tag.py:17 +msgid "epoch" +msgstr "Epoche" + +#: models/tag.py:19 +msgid "genre" +msgstr "Genre" + +#: models/tag.py:20 +msgid "theme" +msgstr "Motiv" + +#: models/tag.py:21 +msgid "set" +msgstr "Buchregal" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "Kategorie" + +#: models/tag.py:40 +msgid "book count" +msgstr "Anzahl der Bücher" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "Tag" + +#: models/tag.py:66 +msgid "tags" +msgstr "Tags" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "Auflistung aller Audiobücher" + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "Neueste MP3-Audiobücher" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "Neueste Ogg-Vorbis-Audiobuch-Dateien" + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +msgstr "" +"Audiothek der Schullektüren, die der Stiftung Nowoczesna Polska gehört. \n" +"Sie können sie kostenlos und ohne Beschränkungen benutzen. \n" +"Audiobücher nehmen bekannte Schauspieler und Schauspielerinnen, darunter " +"Danuta Stenka und Jan Peszek." + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "Siehe auch" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "Motiv" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "Im Werk" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "Dieses Werk steht unter Lizenz" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" Creative " +"Commons Attribution-ShareAlike 3.0\n" +" license." +msgstr "" +"Dieses Werk ist nicht urheberrechtlich geschützt, dass sie frei benutzt " +"werden kann, vervielfältigt und veröffentlicht. Wenn es irgendwelche " +"zusätzlichen ürheberrechtlich geschützten Materialien an diesem Werk gibt " +"(Anmerkungen, Motive), sind sie unter der Lizenz http://creativecommons.org/" +"licenses/by-sa/3.0/ verfügbar." + +#: templates/catalogue/book_info.html:20 +#, fuzzy +msgid "Resource prepared based on:" +msgstr "Der Text basiert auf:" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "Redigiert und kommentiert von:" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "Auflistung von allen Werken" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "Inhaltsverzeichnis" + +#: templates/catalogue/book_list.html:30 +msgid "↑ top ↑" +msgstr "↑ top ↑" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "Epoche" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "Sorte" + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "Gattung" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "Online lesen" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "Drucken" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "Für ein E-Book-Reader" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "für Kindle" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr "für fortgeschrittene Benutzung" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "Hören" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "Inhaltsverzeichnis" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "Motive" + +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "Editieren. Notiz" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "Infobox" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "Bücherseite" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "für ein E-Book-Reader" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "Lade alle Audiobücher von diesem Buch herunter" + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "Motive und Themen" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "Siehe" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "Quelle" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "vom Buch" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "XML-Ursprungsdatei" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "Buch über" + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr "Editor-Plattform" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "Buchbeschreibung in Lektury.Gazeta.pl" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "Buchbeschreibung in Wikipedia" + +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "Passe dieses Buch zusammen" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "Katalog" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "Laden Sie den Katalog als PDF-Datei" + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "Autoren" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "Sorten" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "Gattungen" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "Epochen" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "Themen und Motive" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +#, fuzzy +msgid "Collections" +msgstr "Sammlungen" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "Auflistung aller DAISY-Dateien" + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "Neueste DAISY-Audiobücher" + +#: templates/catalogue/daisy_list.html:15 +msgid "" +"System DAISY to uznany na całym świecie format udostępniania książek\n" +"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +"ograniczeń." +msgstr "" +"DAISY-System ist ein weltweit anerkanntes Buchformatr, \n" +"das an Bedürfnisse der Sehbehinderten, der Blinden und anderen Menschen mit " +"Leseschwierigkeiten. \n" +"Sie können es kostenlos und ohne Beschränkungen benutzen." + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "Die Kriterien sind mehrdeutig. Wählen Sie eine der folgenden Optionen:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "Den ganzen Auszug zeigen" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "Den Auszug verstecken" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "volle Kategorie sehen" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please wait…" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "Alle Bücher" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "Audioücher" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "DAISY" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "Das Werk steht unter Lizenz" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "Basiert auf" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "Details" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "Autor" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "Andere Ressoursen" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "Quelle des Bildes" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "Bild auf dem Editor-Plattform" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "Siehe XML-Quelle" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Motive des Werkes" + +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "Auflistung aller Bilder" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "Herunterladen als" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Künstler" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "Regisseur" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "Audiobücher wurden als Teil der folgenden Projekte vorbereitet:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "%(cs)s, gestiftet von %(fb)s" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" +"Audiobücher wurden als Teil des Projektes %(cs)s vorbereitet, gestiftet von " +"%(fb)s." + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "Audiobücher wurden als Teil des Projektes %(cs)s vorbereitet." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +#, fuzzy +msgid "Recent audiobooks" +msgstr "Neueste MP3-Audiobücher" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +#, fuzzy +msgid "Recent publications" +msgstr "gehe zur Public Domain" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see recent audiobooks\n" +" and recent DAISY files." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "Suchen" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "Haben Sie gemeint" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "Ergebnisse nach Titeln" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "Ergebnisse nach Autoren" + +#: templates/catalogue/search_multiple_hits.html:80 +#, fuzzy +msgid "Results by translators" +msgstr "Ergebnisse nach Autoren" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "Ergebnisse im Text" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "Andere Ergebnisse" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "Sorry! Suchkriterien haben keine Ressourcen erwiesen" + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"Search engine supports following criteria: title, author, theme/topic, " +"epoch, kind and genre.\n" +"\t\tAs for now we do not support full text search." +msgstr "" +"Suchmaschine fördert die folgenden Kriterien: Titel, Autor, Thema/Motiv, " +"Epoche, Art und Genre. \n" +"Die Volltextsuche ist noch nicht möglich." + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "Sorry! Suchfrage muss zumindest zwei Buchstaben enthalten" + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "in Lektury.Gazeta.pl" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "in Wikipedia" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +#, fuzzy +msgid "Download a custom PDF" +msgstr "PDF-Datei herunterladen" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Leg das Buch aufs Regal ab!" + +#~ msgid "Create new shelf" +#~ msgstr "Neues Bücherregal erstellen" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Sie haben kein Bücherregal. Sie können eins unten erschaffen, wenn Sie " +#~ "wollen." + +#~ msgid "Put on the shelf!" +#~ msgstr "Aufs Bücherregal legen!" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Auschnitt aus dem Inhalt der Bücherregale" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Sie besitzen kein Bücherregal. Sie können eins unten erschaffen, wenn Sie " +#~ "wollen." + +#~ msgid "Save all shelves" +#~ msgstr "Alle Bücherregale speichern" + +#~ msgid "Your shelves with books" +#~ msgstr "Ihre Bücherregale" + +#~ msgid "remove" +#~ msgstr "Entfernen" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "Sie haben noch keine Bücherregale. Sie können eins unten erschaffen, wenn " +#~ "Sie wollen." + +#~ msgid "Create shelf" +#~ msgstr "Erschaffe ein Bücherregal" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "Geben Sie eine gültige JSON-Wert ein. Fehler:% s" + +#~ msgid "A4" +#~ msgstr "A4 DIN" + +#~ msgid "A5" +#~ msgstr "A5 DIN" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "Falsche Anpassungsoptionen für PDF-Datei" + +#~ msgid "Bad method" +#~ msgstr "Falsche Methode" + +#~ msgid "title, author, theme/topic, epoch, kind, genre" +#~ msgstr "Titel, Autor, Motiv/Thema, Epoche, Art, Gattung" + +#~ msgid "main page" +#~ msgstr "Startseite" + +#~ msgid "Show tag on main page" +#~ msgstr "Tag für die Startseite anzeigen" + +#~ msgid "year of death" +#~ msgstr "Todesjahr" + +#~ msgid "short HTML" +#~ msgstr "kurze HTML" + +#~ msgid "HTML file" +#~ msgstr "HTML-Datei" + +#~ msgid "PDF file" +#~ msgstr "PDF-Datei" + +#~ msgid "EPUB file" +#~ msgstr "EPUB-Datei" + +#~ msgid "ODT file" +#~ msgstr "ODT-Datei" + +#~ msgid "TXT file" +#~ msgstr "TXT-Datei" + +#~ msgid "MP3 file" +#~ msgstr "MP3-Datei" + +#~ msgid "OGG file" +#~ msgstr "OGG-Datei" + +#~ msgid "translator" +#~ msgstr "Übersetzer" + +#~ msgid "year of translator's death" +#~ msgstr "Todesjahr des Übersetzers" + +#~ msgid "book stub" +#~ msgstr "Buch Vorschau" + +#~ msgid "

                To maintain your shelves you need to be logged in.

                " +#~ msgstr "

                Um die Bücherregale zu verwalten, musst du eingeloggt sein.

                " + +#~ msgid "

                Shelves were sucessfully saved.

                " +#~ msgstr "

                Bücherregale wurden erfolgreich gespeichert.

                " + +#~ msgid "Book was successfully removed from the shelf" +#~ msgstr "Das Buch wurde erfolgreich entfernt" + +#~ msgid "

                Shelf %s was successfully created

                " +#~ msgstr "

                Büchrregal %s wurde erfolgreich erstellt

                " + +#~ msgid "

                Shelf %s was successfully removed

                " +#~ msgstr "

                Bücherregal%s wurde erfolgreich entfernt

                " + +#~ msgid "Today is %(month)s, %(day)s." +#~ msgstr "Heute ist %(month)s, %(day)s." + +#~ msgid "content type" +#~ msgstr "Inhaltstyp" + +#~ msgid "object id" +#~ msgstr "Objekt ID" diff --git a/src/catalogue/locale/en/LC_MESSAGES/django.mo b/src/catalogue/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..89aa2c84b Binary files /dev/null and b/src/catalogue/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/en/LC_MESSAGES/django.po b/src/catalogue/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..f66d1efe0 --- /dev/null +++ b/src/catalogue/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,868 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:38+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "Please supply an XML." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "Don't show footnotes" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "Don't display themes" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "Don't use our custom font" + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "Leading" + +#: forms.py:53 +msgid "Normal leading" +msgstr "Normal leading" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "One and a half leading" + +#: forms.py:55 +msgid "Double leading" +msgstr "Double leading" + +#: forms.py:57 +msgid "Font size" +msgstr "Font size" + +#: forms.py:58 +msgid "Default" +msgstr "Default" + +#: forms.py:59 +msgid "Big" +msgstr "Big" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "Book imported succesfully" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "An error occured while importing file: %r" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "Download custom PDF" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "Download" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "Title" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "Sort key" + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "Slug" + +#: models/book.py:33 +msgid "language code" +msgstr "language code" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "Description" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "creation date" + +#: models/book.py:38 +msgid "parent number" +msgstr "Parent number" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr "Additional information" + +#: models/book.py:44 +msgid "cover" +msgstr "cover" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "book" + +#: models/book.py:67 +msgid "books" +msgstr "Books" + +#: models/book.py:244 +#, python-format +msgid "Book \"%s\" does not exist." +msgstr "Book with stub = \"%s\" does not exist." + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "Book %s already exists" + +#: models/book.py:599 models/bookmedia.py:23 +#, python-format +msgid "%s file" +msgstr "%s file" + +#: models/bookmedia.py:26 +msgid "type" +msgstr "type" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "name" + +#: models/bookmedia.py:28 +msgid "file" +msgstr "XML file" + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "book media" + +#: models/collection.py:16 +msgid "book slugs" +msgstr "Book stubs" + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "form" + +#: models/collection.py:22 +msgid "collection" +msgstr "collection" + +#: models/collection.py:23 +msgid "collections" +msgstr "collections" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "Fragment" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "Fragments" + +#: models/tag.py:16 +msgid "author" +msgstr "author" + +#: models/tag.py:17 +msgid "epoch" +msgstr "period" + +#: models/tag.py:19 +msgid "genre" +msgstr "genre" + +#: models/tag.py:20 +msgid "theme" +msgstr "motif" + +#: models/tag.py:21 +msgid "set" +msgstr "set" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "Category" + +#: models/tag.py:40 +msgid "book count" +msgstr "Number of books" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "tag" + +#: models/tag.py:66 +msgid "tags" +msgstr "tags" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "List of the audiobooks" + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "Latest MP3 audiobooks" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "Latest Ogg Vorbis audiobooks" + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +msgstr "" +"Audio library of required readings of Modern Poland Foundation.\n" +"It is free of charge and you can use it without any limits. \n" +"Audiobooks are recorded with the participation of famous Polish actors like " +"Danuta Stenka or Jan Peszek." + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "See also" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "Theme" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "in work " + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "This work is licensed under:" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" Creative " +"Commons Attribution-ShareAlike 3.0\n" +" license." +msgstr "" +"This work is not covered by copyright and is a part of the\n" +" public domain, which means that it can be used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" Creative " +"Commons Attribution-ShareAlike 3.0\n" +" license." + +#: templates/catalogue/book_info.html:20 +#, fuzzy +msgid "Resource prepared based on:" +msgstr "Text based on:" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "Edited and annotated by:" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "List of all works" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "Table of Contents" + +#: templates/catalogue/book_list.html:30 +msgid "↑ top ↑" +msgstr "↑ top ↑" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "Period" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "Form" + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "Genre" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "Read online" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "to print" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "for an e-book reader" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "for Kindle" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr "" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "Listen" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "Table of contents" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "Themes" + +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "Edit. note" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "Infobox" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "Book's page" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "for a reader" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "Download all audiobooks for this book" + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "Motifs and themes" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "See" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "Source" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "of the book" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "Source XML file" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "Book on" + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr "Editor's Platform" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "Book description on Lektury.Gazeta.pl" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "Book description on Wikipedia" + +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "Mix this book" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "Catalogue" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "Download the catalogue in PDF format." + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "Authors" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "Forms" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "Genres" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "Periods" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "Motifs and themes" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +#, fuzzy +msgid "Collections" +msgstr "collections" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "List of all DAISY files" + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "Latest DAISY audiobooks" + +#: templates/catalogue/daisy_list.html:15 +msgid "" +"System DAISY to uznany na całym świecie format udostępniania książek\n" +"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +"ograniczeń." +msgstr "" +"The internationally recognized DAISY book format \n" +"provides the best possible standardized access to books for people who are \n" +"partially sighted, blind or are dyslexic. It is free of charge and you can " +"use it without any limits." + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "" +"The criteria are ambiguous. Please select one of the following options:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "Expand fragment" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "Hide fragment" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "See full category" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please wait…" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "All books" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "Audiobooks" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "DAISY" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "Work is licensed under " + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "Based on" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "Details" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "Author" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "Other sources" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "Source of the image" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "Image on the Editor's Platform" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "View XML source" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Work's themes " + +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "List of all pictures" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "Download as" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Reader" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "Director" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "Audiobooks were prepared as a part of the following projects:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "%(cs)s, funded by %(fb)s" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "Audiobooks were prepared as a part of the %(cs)s project." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +#, fuzzy +msgid "Recent audiobooks" +msgstr "Latest MP3 audiobooks" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +#, fuzzy +msgid "Recent publications" +msgstr "Goes to public domain" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see recent audiobooks\n" +" and recent DAISY files." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "Search" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "Did you mean" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "Results by title" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "Results by authors" + +#: templates/catalogue/search_multiple_hits.html:80 +#, fuzzy +msgid "Results by translators" +msgstr "Translator" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "Results in text" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "Other results" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "Sorry! Search cirteria did not match any resources." + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"Search engine supports following criteria: title, author, theme/topic, " +"epoch, kind and genre.\n" +"\t\tAs for now we do not support full text search." +msgstr "" +"Search engine supports following criteria: title, author, theme/topic, " +"period, form and genre.\n" +"\t\tAs for now we do not support full text search." + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "Sorry! Search query must have at least two characters." + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "in Lektury.Gazeta.pl" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "in Wikipedia" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr "Download a custom PDF" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Put this book on the shelf!" + +#~ msgid "Create new shelf" +#~ msgstr "Create new shelf" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "You do not have any shelves. You can create one below, if you want to." + +#~ msgid "Put on the shelf!" +#~ msgstr "Put on the shelf!" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Shelves containing fragment" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "You do not own any shelves. You can create one below, if you want to." + +#~ msgid "Save all shelves" +#~ msgstr "Save all shelves" + +#~ msgid "Your shelves with books" +#~ msgstr "Your shelves with books" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "You do not own any shelves. You can create one below if you want to" + +#~ msgid "Create shelf" +#~ msgstr "Create shelf" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "Enter a valid JSON value. Error: %s" + +#~ msgid "A4" +#~ msgstr "A4" + +#~ msgid "A5" +#~ msgstr "A5" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "Incorrect customization options for PDF" + +#~ msgid "Bad method" +#~ msgstr "Bad method" + +#~ msgid "title, author, theme/topic, epoch, kind, genre" +#~ msgstr "title, author, motifs/theme, period, form, genre" + +#~ msgid "main page" +#~ msgstr "Main page" + +#~ msgid "Show tag on main page" +#~ msgstr "Show tag on main page" + +#~ msgid "year of death" +#~ msgstr "Year of death" + +#~ msgid "short HTML" +#~ msgstr "short HTML" + +#~ msgid "HTML file" +#~ msgstr "HTML file" + +#~ msgid "PDF file" +#~ msgstr "PDF file" + +#~ msgid "EPUB file" +#~ msgstr "EPUB file" + +#~ msgid "ODT file" +#~ msgstr "ODT file" + +#~ msgid "TXT file" +#~ msgstr "TXT file" + +#~ msgid "MP3 file" +#~ msgstr "MP3 file" + +#~ msgid "OGG file" +#~ msgstr "OGG file" + +#~ msgid "year of translator's death" +#~ msgstr "Year of translator's death" + +#~ msgid "book stub" +#~ msgstr "Book stub" + +#~ msgid "time" +#~ msgstr "time" + +#~ msgid "

                To maintain your shelves you need to be logged in.

                " +#~ msgstr "

                To administer your shelves you need to be logged in.

                " + +#~ msgid "

                Shelves were sucessfully saved.

                " +#~ msgstr "

                Shelves were sucessfully saved.

                " + +#~ msgid "Book was successfully removed from the shelf" +#~ msgstr "Book was successfully removed from the shelf" + +#~ msgid "

                Shelf %s was successfully created

                " +#~ msgstr "

                Shelf %s was successfully created

                " + +#~ msgid "

                Shelf %s was successfully removed

                " +#~ msgstr "

                Shelf %s was successfully removed

                " + +#~ msgid "Today is %(month)s, %(day)s." +#~ msgstr "Today is %(month)s, %(day)s." + +#~ msgid "content type" +#~ msgstr "content type" + +#~ msgid "object id" +#~ msgstr "object id" diff --git a/src/catalogue/locale/es/LC_MESSAGES/django.mo b/src/catalogue/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..cb82bd10f Binary files /dev/null and b/src/catalogue/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/es/LC_MESSAGES/django.po b/src/catalogue/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..aa3cd85f4 --- /dev/null +++ b/src/catalogue/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,885 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2013-04-09 10:39+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "Por favor, suministre un XML." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "No mostres notas a pie de página" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "No mostres temas" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "No uses nuestro tipo de la fuente de personalización " + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "Interlineado" + +#: forms.py:53 +msgid "Normal leading" +msgstr "Interlineado normal" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "Interlineado uno y medio" + +#: forms.py:55 +msgid "Double leading" +msgstr "Interlineado doble" + +#: forms.py:57 +msgid "Font size" +msgstr "Tamaño de la fuente" + +#: forms.py:58 +msgid "Default" +msgstr "Valor por defecto" + +#: forms.py:59 +msgid "Big" +msgstr "Grande" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +# msgid "Today is %(month)s, %(day)s." +# msgstr "Hoy es el %(día)s de %(mes)es" +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"Ha ocurrido un error: %(exception)s\n" +"\n" +"%(tb)s" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "El libro ha sido importado con éxito" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "Ha ocurrido un error al cargar el archivo: %r" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "Descarga PDF personalizado" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "Descargar" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "título" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "clave de clasificación" + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "slug" + +#: models/book.py:33 +msgid "language code" +msgstr "código de idioma" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "descripción" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "fecha de creación" + +#: models/book.py:38 +msgid "parent number" +msgstr "cifra matriz" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr "información adicional" + +#: models/book.py:44 +msgid "cover" +msgstr "tapa" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "libro" + +#: models/book.py:67 +msgid "books" +msgstr "libros" + +#: models/book.py:244 +#, fuzzy, python-format +msgid "Book \"%s\" does not exist." +msgstr "Libro con slug = \"%s\" no existe." + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "Libro %s ya existe" + +#: models/book.py:599 models/bookmedia.py:23 +#, python-format +msgid "%s file" +msgstr "%s archivo" + +#: models/bookmedia.py:26 +msgid "type" +msgstr "tipo" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "nombre" + +#: models/bookmedia.py:28 +msgid "file" +msgstr "archivo" + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "los medios de el libro" + +#: models/collection.py:16 +#, fuzzy +msgid "book slugs" +msgstr "vista previa de libros" + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "tipo" + +#: models/collection.py:22 +msgid "collection" +msgstr "colección" + +#: models/collection.py:23 +msgid "collections" +msgstr "colecciones" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "fragmento" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "fragmentos" + +#: models/tag.py:16 +msgid "author" +msgstr "autor" + +#: models/tag.py:17 +msgid "epoch" +msgstr "época" + +#: models/tag.py:19 +msgid "genre" +msgstr "género" + +#: models/tag.py:20 +msgid "theme" +msgstr "tema" + +#: models/tag.py:21 +msgid "set" +msgstr "colección" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "categoría" + +#: models/tag.py:40 +msgid "book count" +msgstr "número de libros" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "tag" + +#: models/tag.py:66 +msgid "tags" +msgstr "tags" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "Lista de todos los audiolibros " + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "Los últimos audiolibros en formato MP3 " + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "Los últimos audiolibros en formato Ogg Vorbis " + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +msgstr "" +"Colección de grabaciones de libros de lectura obligatoria de la Fundación " +"Polonia Moderna.\n" +"Podéis disfrutar de ella gratuitamente y sin límites.\n" +"Los audiolibros están grabados por actores conocidos, como Danuta Stenka y " +"Jan Peszek." + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "Véase también" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "Tema" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "en la obra" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "Esta obra está autorizada bajo:" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" Creative " +"Commons Attribution-ShareAlike 3.0\n" +" license." +msgstr "" +"Esta obra está libre de derechos de autor y es de dominio público, por ende " +"se puede usar,publicar y difundir libremente. Si esta obra tiene materiales " +"adicionales (como notas a pie de pá gina, temas lutrarios, etc.), que no " +"esten libres de derechos de autor, dichos materiales están publicados bajo " +"la \n" +"Creative Commons " +"Attribution-ShareAlike 3.0\n" +" licencia." + +#: templates/catalogue/book_info.html:20 +#, fuzzy +msgid "Resource prepared based on:" +msgstr "Texto preparado a base de:" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "Editado y anotado por:" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "Lista de todas las obras" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "Tabla de contenido" + +#: templates/catalogue/book_list.html:30 +msgid "↑ top ↑" +msgstr "↑volver arriba↑" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "Época" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "Género" + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "Subgénero" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "Leer en línea" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "imprimir" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "para el lector de audiolibro " + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "para Kindle" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr "para uso avanzado" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "Escuchar" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "Tabla de contenido" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "Temas" + +# ! także: N.de la R. +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "Nota de la redacción" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "Infobox" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "Página del libro" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "para el lector" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "Descarga todos los audiolibros para este libro" + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "Motivos y temas" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "Vea" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "Fuente" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "del libro" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "archivo fuente XML" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "El libro está en el estante" + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr "Plataforma de Editor" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "Descripción del libro en Lektury.Gazeta.pl" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "Descripción del libro en Wikipedia" + +# ! mezcla - jeśli chodzi o pomieszanie +# ! relaciona lub combina - jeśli chodzi o powiązanie +# ! prepara - jeśli chodzi o przygotowanie +# (zmienić czasownik "mezcla" na któryś z powyższych jeśli kontekst jest inny) +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "Mezcla este libro" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "Catálogo" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "Descarga el catálogo en formato PDF" + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "Autor" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "Géneros" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "Subgénero" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "Épocas" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "Temas" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +#, fuzzy +msgid "Collections" +msgstr "colecciones" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "Lista de todos los archivos DAISY" + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "Los últimos audiolibros en formato DAISY" + +#: templates/catalogue/daisy_list.html:15 +msgid "" +"System DAISY to uznany na całym świecie format udostępniania książek\n" +"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +"ograniczeń." +msgstr "" +"El sistema DAISY es un formato, reconocido en todo el mundo, que facilita el " +"acceso a los libros \n" +"y está adaptado a las necesidades de personas con baja visión, invidentes o " +"las que \n" +"tienen problemas de lectura. Los podéis disfrutar de manera gratuita y sin " +"límites." + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "" +"Los criterios son ambiguos. Por favor, seleccione una de las siguientes " +"opciones:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "Extender fragmento" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "Ocultar fragmento" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "Ver la categoría completa" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please wait…" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "Todos los libros" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "Audiolibros" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "DAISY" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "Esta obra está autorizada bajo" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "Basado en " + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "Detalles" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "Autor" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "Otros recursos" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "Fuente de la imagen" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "Imagen en la Plataforma de Editor" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "Ver código fuente XML" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Temas de las obras" + +# ! los dibujos - obrazki, rysunki +# ! las fotos - jeśli chodzi o zdjęcia +# ! los cuadros - jeśli chodzi o obrazy +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "Lista de todos los dibujos" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "Descargar como" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Artista" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "Director" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "Audiolibros forman parte de los siguientes proyectos:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "%(cs)s,financiado por %(fb)s" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "Audiolibros forman parte del proyecto %(cs)s financiado por %(fb)s." + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "Audiolibros forman parte del proyecto %(cs)s." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +#, fuzzy +msgid "Recent audiobooks" +msgstr "Los últimos audiolibros en formato MP3 " + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +#, fuzzy +msgid "Recent publications" +msgstr "pasa al dominio público" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see recent audiobooks\n" +" and recent DAISY files." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "Buscar" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "¿Te has referido a...?" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "Resultados por título" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "Resultados por autor" + +#: templates/catalogue/search_multiple_hits.html:80 +#, fuzzy +msgid "Results by translators" +msgstr "Resultados por autor" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "Resultados en el texto" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "Otros resultados" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "" +"¡Lo siento! El criterio de la búsqueda no corresponde a ningún recurso." + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"Search engine supports following criteria: title, author, theme/topic, " +"epoch, kind and genre.\n" +"\t\tAs for now we do not support full text search." +msgstr "" +"El buscador admite los siguientes criterios: título, autor, tema, época, " +"género y subgénero.\n" +"\t\tHasta ahora no se admite la búsqueda de texto completo. " + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "" +"¡Lo siento! La consulta de búsqueda tiene que consistir de dos caracteres " +"como mínimo." + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "en Lektury.Gazeta.pl" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "en Wikipedia" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr "Descarga un PDF personalisado" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "¡Ponlo en el estante!" + +#~ msgid "Create new shelf" +#~ msgstr "Crear estante nuevo" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "No tienes estante. Si quieres, puedes hacer uno aquí." + +#~ msgid "Put on the shelf!" +#~ msgstr "¡Ponlo en el estante! " + +#~ msgid "Shelves containing fragment" +#~ msgstr "Los estantes que contienen este fragmento" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "No tienes estante. Si quieres, puedes hacer uno aquí." + +#~ msgid "Save all shelves" +#~ msgstr "Guarda todos los estantes" + +#~ msgid "Your shelves with books" +#~ msgstr "Tu estanetría con libros" + +#~ msgid "remove" +#~ msgstr "borre" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "No tienes estante. Si quieres, puedes hacer uno aquí." + +#~ msgid "Create shelf" +#~ msgstr "Crear estante" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "Introducir un valor válido de JSON. Error: %s" + +#~ msgid "A4" +#~ msgstr "A4" + +#~ msgid "A5" +#~ msgstr "A5" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "Opciones de personalización para PDF incorrectas" + +#, fuzzy +#~ msgid "Bad method" +#~ msgstr "Método incorrecto" + +#~ msgid "title, author, theme/topic, epoch, kind, genre" +#~ msgstr "título, autor, tema/motivo, época, género, subgénero" + +#~ msgid "main page" +#~ msgstr "página principal" + +#~ msgid "Show tag on main page" +#~ msgstr "Mostrar tag en la página principal" + +#~ msgid "year of death" +#~ msgstr "año de muerte" + +#~ msgid "short HTML" +#~ msgstr "HTML corto" + +#~ msgid "HTML file" +#~ msgstr "archivo HTML" + +#~ msgid "PDF file" +#~ msgstr "archivo PDF" + +#~ msgid "EPUB file" +#~ msgstr "archivo EPUB" + +#~ msgid "ODT file" +#~ msgstr "archivo ODT" + +#~ msgid "TXT file" +#~ msgstr "archivo TXT" + +#~ msgid "MP3 file" +#~ msgstr "archivo MP3" + +#~ msgid "OGG file" +#~ msgstr "archivo OGG" + +#~ msgid "translator" +#~ msgstr "traductor" + +#~ msgid "year of translator's death" +#~ msgstr "año de la muerte del traductor" + +#~ msgid "book stub" +#~ msgstr "vista previa del libro" + +#, fuzzy +#~ msgid "

                To maintain your shelves you need to be logged in.

                " +#~ msgstr "

                Para organizar tus estantes tienes que ingresar.

                " + +#~ msgid "

                Shelves were sucessfully saved.

                " +#~ msgstr "

                Estantes han sido guardados.

                " + +#~ msgid "Book was successfully removed from the shelf" +#~ msgstr "El libro ha sido eliminado del estante." + +#~ msgid "

                Shelf %s was successfully created

                " +#~ msgstr "

                Estante %s ha sido creado

                " + +#~ msgid "

                Shelf %s was successfully removed

                " +#~ msgstr "

                Estante %s ha sido eliminado

                " + +#~ msgid "content type" +#~ msgstr "tipo de contenido" + +#~ msgid "object id" +#~ msgstr "id de objeto" diff --git a/src/catalogue/locale/fr/LC_MESSAGES/django.mo b/src/catalogue/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..3b0d2d304 Binary files /dev/null and b/src/catalogue/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/fr/LC_MESSAGES/django.po b/src/catalogue/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..7274d84eb --- /dev/null +++ b/src/catalogue/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,868 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2013-04-09 10:38+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "Fournissez un XML, s'il vous plaît." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "Ne montre pas d'annotations" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "N'affiche pas de thèmes" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "N'utilise pas notre caractère usuel" + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "Interligne" + +#: forms.py:53 +msgid "Normal leading" +msgstr "Interligne normal" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "Interligne et demi" + +#: forms.py:55 +msgid "Double leading" +msgstr "Interligne double" + +#: forms.py:57 +msgid "Font size" +msgstr "Taille des caractères" + +#: forms.py:58 +msgid "Default" +msgstr "Implicite" + +#: forms.py:59 +msgid "Big" +msgstr "Grand(e)(s)" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +# msgid "Today is %(month)s, %(day)s." +# msgstr "Aujourd'hui nous sommes le" +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"Un erreur a eu lieu : %(exception)s\n" +"\n" +"%(tb)s" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "Livre importé avec succès" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "Erreur pendant l'importation du fichier: %r" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "Téléchargez un PDF personnalisé" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "Téléchargez" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "titre" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "critère de tri" + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "ébauche" + +#: models/book.py:33 +msgid "language code" +msgstr "code de langue" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "description" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "date de création" + +#: models/book.py:38 +msgid "parent number" +msgstr "nombre de parent" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr "information supplémentaire" + +#: models/book.py:44 +msgid "cover" +msgstr "couverture" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "livre" + +#: models/book.py:67 +msgid "books" +msgstr "livres" + +#: models/book.py:244 +#, python-format +msgid "Book \"%s\" does not exist." +msgstr "Livre \"%s\" n'existe pas." + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "Livre %s existe déjà" + +#: models/book.py:599 models/bookmedia.py:23 +#, python-format +msgid "%s file" +msgstr "fichier %s" + +#: models/bookmedia.py:26 +msgid "type" +msgstr "type" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "nom" + +#: models/bookmedia.py:28 +msgid "file" +msgstr "fichier" + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "book media" + +#: models/collection.py:16 +#, fuzzy +msgid "book slugs" +msgstr "ébauches des livres" + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "type" + +#: models/collection.py:22 +msgid "collection" +msgstr "collection" + +#: models/collection.py:23 +msgid "collections" +msgstr "collections" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "extrait" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "extraits" + +#: models/tag.py:16 +msgid "author" +msgstr "auteur" + +#: models/tag.py:17 +msgid "epoch" +msgstr "époque" + +#: models/tag.py:19 +msgid "genre" +msgstr "genre" + +#: models/tag.py:20 +msgid "theme" +msgstr "thème" + +#: models/tag.py:21 +msgid "set" +msgstr "série" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "catégorie" + +#: models/tag.py:40 +msgid "book count" +msgstr "nombre des livres" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "tag" + +#: models/tag.py:66 +msgid "tags" +msgstr "tags" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "Liste des tous les livres audio" + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "Les plus nouveaux livres audio MP3" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "Les plus nouveaux livres audio Ogg Vorbis" + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +msgstr "" +"Audiothèque des lectures scolaires de la Fondation Pologne Moderne.\n" +"Vous pouvez l'utiliser gratuitement et sans limites. \n" +"Les livres audio sont lus par les acteurs connus, comme par exemple: Danuta " +"Stenka et Jan Peszek." + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "Voir aussi" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "Thème" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "dans l'oeuvre" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "Cet oeuvre est publié sous la licence" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" Creative " +"Commons Attribution-ShareAlike 3.0\n" +" license." +msgstr "" +"Cet ouvrage n'est pas protégé par le droit d'auteur et appartiennent au\n" +"domaine public; c'est-à-dire qu'il peut être publié et divulgué librement.\n" +"Si l'ouvrage est accompagné des matériaux supplémentaires (annotations, " +"motifs littéraires, etc.),\n" +"ces derniers sont donc distribués sous la licence:\n" +"Paternité " +"- Partage à l'Identique 3.0 non transposé." + +#: templates/catalogue/book_info.html:20 +#, fuzzy +msgid "Resource prepared based on:" +msgstr "Préparation du texte basée sur:" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "Les éditions et annotations par:" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "Liste des tous les ouvrages" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "Table des matières" + +#: templates/catalogue/book_list.html:30 +msgid "↑ top ↑" +msgstr "↑ top ↑" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "Époque" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "Type" + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "Genre" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "Lire en ligne" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "pour imprimer" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "pour un lecteur des livres numeriques" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "pour Kindle" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr "pour l’utilisation avancée" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "Écoutez" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "Wolne Lektury (Lectures Libres)" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "Table des matières" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "Thèmes" + +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "Note d'éditeur" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "Infobox" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "Site du livre" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "pour un lecteur" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "Téléchargez tous les livres audio pour ce livre" + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "Motifs et thèmes" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "Voir" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "Source" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "du livre" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "Fichier source XML" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "Livre sur" + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr "Plateforme d'éditeur" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "Description du livre sur Lektury.Gazeta.pl" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "Description du livre sur Wikipédia" + +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "Mixez ce livre" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "Catalogue" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "Téléchargez le catalogue au format PDF" + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "Auteurs" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "Types" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "Genres" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "Époques" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "Thèmes et sujets" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +#, fuzzy +msgid "Collections" +msgstr "collections" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "Liste des tous les livres audio DAISY" + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "Le plus nouveaux livres audio DAISY" + +#: templates/catalogue/daisy_list.html:15 +msgid "" +"System DAISY to uznany na całym świecie format udostępniania książek\n" +"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +"ograniczeń." +msgstr "" +"DAISY est un système pour rendre les livres accessibles, apprécié autour du " +"monde, \n" +"approprié à des non voyants et à des malvoyants et à des personnes \n" +"qui ont des difficultés à lire. Vous pouvez l'utiliser gratuitement et sans " +"limites." + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "Les critères sont ambigus. Choisissez parmi les options ci-dessous:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "Montrer l'extrait" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "Cacher l'extrait" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "Voir catégorie entière" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please wait…" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "Tous les livres" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "Livres audio" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "DAISY" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "Ouvrage sous la licence" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "Basé sur" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "Détails" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "Auteur" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "Autres ressources" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "Source d'image" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "L'image sur la Plateforme d'éditeur" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "Voir source XML" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Les thèmes de l'oeuvre" + +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "Liste de tous les images" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "Téléchargez comme" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Artiste" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "Metteur en scène" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "Livres audios ont été préparés comme une part des projets:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "%(cs)s, sponsorisé par %(fb)s" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" +"Livres audios ont été préparés comme une part du projet %(cs)s sponsorisé " +"par %(fb)s." + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "Livres audios ont été préparés comme une part du projet %(cs)s." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +#, fuzzy +msgid "Recent audiobooks" +msgstr "Les plus nouveaux livres audio MP3" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +#, fuzzy +msgid "Recent publications" +msgstr "entre dans le domaine public" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see recent audiobooks\n" +" and recent DAISY files." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "Rechercher" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "Est-ce que vous cherchez" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "Résultats par le titre" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "Résultats par l'auteur" + +#: templates/catalogue/search_multiple_hits.html:80 +#, fuzzy +msgid "Results by translators" +msgstr "traducteur" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "Résultats dans le texte" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "Autres résultats" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "" +"Nous sommes désolés, aucune ressource ne répond aux critères de recherche." + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"Search engine supports following criteria: title, author, theme/topic, " +"epoch, kind and genre.\n" +"\t\tAs for now we do not support full text search." +msgstr "" +"Le moteur de recherche permet de chercher selon le titre, auteur, sujet/" +"thème, époque, type et genre.\n" +"\t\tPour le moment nous n'assurons pas la recherche en plein texte." + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "" +"Nous sommes désolés, pour effectuer la recherche il faut entrer au moins " +"deux caractères." + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "sur Lektury.Gazeta.pl" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "sur Wikipédia" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr "Téléchargez un PDF pérsonnalisé" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Mettre un livre sur l'étagère!" + +#~ msgid "Create new shelf" +#~ msgstr "Créez une nouvelle étagère" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une au-dessous, si " +#~ "vous voulez." + +#~ msgid "Put on the shelf!" +#~ msgstr "Mettre sur l'étagère!" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Étagères qui contiennent l'extrait" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une au-dessous, si " +#~ "vous voulez." + +#~ msgid "Save all shelves" +#~ msgstr "Enregistrer toutes les étagères" + +#~ msgid "Your shelves with books" +#~ msgstr "Vos étagères avec les livres" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une en-dessus, si " +#~ "vous voulez." + +#~ msgid "Create shelf" +#~ msgstr "Créez une étagère" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "Entrer une valeur JSON valide. Erreur: %s." + +#~ msgid "A4" +#~ msgstr "A4" + +#~ msgid "A5" +#~ msgstr "A5" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "Options de personnalisation incorrectes pour PDF" + +#~ msgid "Bad method" +#~ msgstr "Mauvaise méthode" + +#~ msgid "title, author, theme/topic, epoch, kind, genre" +#~ msgstr "titre, auteur, thème/sujet, époque, type, genre" + +#~ msgid "main page" +#~ msgstr "page d'accueil" + +#~ msgid "Show tag on main page" +#~ msgstr "Montrer le tag au page d'accueil" + +#~ msgid "year of death" +#~ msgstr "année de la mort" + +#~ msgid "short HTML" +#~ msgstr "HTML court" + +#~ msgid "HTML file" +#~ msgstr "fichier HTML" + +#~ msgid "PDF file" +#~ msgstr "fichier PDF" + +#~ msgid "ODT file" +#~ msgstr "fichier ODT" + +#~ msgid "TXT file" +#~ msgstr "fichier TXT" + +#~ msgid "MP3 file" +#~ msgstr "fichier MP3" + +#~ msgid "OGG file" +#~ msgstr "fichier OGG" + +#~ msgid "year of translator's death" +#~ msgstr "année de la mort du traducteur" + +#~ msgid "book stub" +#~ msgstr "ébauche du livre" + +#~ msgid "

                To maintain your shelves you need to be logged in.

                " +#~ msgstr "

                Connectez-vous pour gérer vos étagères.

                " + +#~ msgid "

                Shelves were sucessfully saved.

                " +#~ msgstr "

                Les étagères %sont été enregistrées

                " + +#~ msgid "Book was successfully removed from the shelf" +#~ msgstr "Le livre a été supprimé de l'étagère" + +#~ msgid "

                Shelf %s was successfully created

                " +#~ msgstr "

                L'étagère %sa été créée

                " + +#~ msgid "

                Shelf %s was successfully removed

                " +#~ msgstr "

                L'étagère %sa été supprimée

                " + +#~ msgid "content type" +#~ msgstr "type du contenu" + +#~ msgid "object id" +#~ msgstr "ID de l'objet" diff --git a/src/catalogue/locale/it/LC_MESSAGES/django.mo b/src/catalogue/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..a164e91b0 Binary files /dev/null and b/src/catalogue/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/it/LC_MESSAGES/django.po b/src/catalogue/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..c5eabd259 --- /dev/null +++ b/src/catalogue/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,793 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2013-04-09 10:39+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "Si prega di fornire un XML." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "Non mostrare le note" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "Non visualizzare i temi" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "Non utilizzare il nostro font personalizzato" + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "Interlinea" + +#: forms.py:53 +msgid "Normal leading" +msgstr "Interlinea normale" + +#: forms.py:54 +msgid "One and a half leading" +msgstr " Interlinea 1,5" + +#: forms.py:55 +msgid "Double leading" +msgstr "Interlinea doppia" + +#: forms.py:57 +msgid "Font size" +msgstr "Grandezza del carattere" + +#: forms.py:58 +msgid "Default" +msgstr "Predefinito" + +#: forms.py:59 +msgid "Big" +msgstr "Grande" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"Si e verificato un errore: %(exception)s \n" +"\n" +"%(tb)s" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "Libro scaricato con successo" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "Errore dell'importazione del file: %r" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "Scarica PDF personalizzato" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "Scarica" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "titolo" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "chiave di ordinamento" + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "slug" + +#: models/book.py:33 +msgid "language code" +msgstr "codice della lingua" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "descrizione" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "data di creazione" + +#: models/book.py:38 +msgid "parent number" +msgstr "numero del genitore" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr " ulteriori informazioni" + +#: models/book.py:44 +msgid "cover" +msgstr "copertina" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "libro" + +#: models/book.py:67 +msgid "books" +msgstr "Libri" + +#: models/book.py:244 +#, python-format +msgid "Book \"%s\" does not exist." +msgstr "Il libro \"%s\" non esiste." + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "Il libro %s esiste già" + +#: models/book.py:599 models/bookmedia.py:23 +#, python-format +msgid "%s file" +msgstr "i %s di file" + +#: models/bookmedia.py:26 +msgid "type" +msgstr "tipo" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "nome" + +#: models/bookmedia.py:28 +msgid "file" +msgstr "file" + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "book media" + +#: models/collection.py:16 +msgid "book slugs" +msgstr " slug del libro " + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "categoria" + +#: models/collection.py:22 +msgid "collection" +msgstr "raccolta" + +#: models/collection.py:23 +msgid "collections" +msgstr " raccolte" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "Frammento" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "Frammenti" + +#: models/tag.py:16 +msgid "author" +msgstr "autore" + +#: models/tag.py:17 +msgid "epoch" +msgstr "epoca" + +#: models/tag.py:19 +msgid "genre" +msgstr "genere" + +#: models/tag.py:20 +msgid "theme" +msgstr "tema" + +#: models/tag.py:21 +msgid "set" +msgstr "raccolta" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "categoria" + +#: models/tag.py:40 +msgid "book count" +msgstr "conteggio dei libri" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "tag" + +#: models/tag.py:66 +msgid "tags" +msgstr "i tag" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "Elenco di tutti gli audiolibri " + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "Ultimi audiolibri MP3" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "Ultimi audiolibri Ogg Vorbis" + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +msgstr "" + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "Vedi anche" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "tema" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "in corso" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "Questa opera è pubblicata su licenza:" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" Creative " +"Commons Attribution-ShareAlike 3.0\n" +" license." +msgstr "" +"Questa opera non è sotto il diritto d'autore e fa parte del\n" +"pubblico dominio, il che significa che è possibile pubblicarla \n" +"e distribuirla liberamente. Se un'opera è completata con i materiali " +"aggiuntivi \n" +"(le annotazioni, i motivi letterari ecc.) che sono protette dal diritto " +"d'autore, quei\n" +"materiali aggiuntivi sono disponibili secondo la \n" +" Creative " +"Commons Attribution-ShareAlike 3.0\n" +"licenza." + +#: templates/catalogue/book_info.html:20 +#, fuzzy +msgid "Resource prepared based on:" +msgstr "Il testo preparato e basato su:" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "Curato ed elaborato da:" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "Elenco di tutte le opere" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "Indice" + +#: templates/catalogue/book_list.html:30 +msgid "↑ top ↑" +msgstr "" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "Epoca" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "Categoria" + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "Genere" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "Leggi online" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr "" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "Ascolta" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "Indice" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "Temi" + +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "Modifica. nota" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "Infobox" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "Pagina del libro" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "Scarica tutti gli audiolibri per questo libro." + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "Motivi e temi" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "Vedi" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "Fonte" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "del libro" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "File di fonte XML" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "Libro su" + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr " Piattaforma del editore" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "Descrizione del libro su Lektury.Gazeta.pl" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "Descrizione del libro su Wikipedia" + +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "Combina questo libro" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "Catalogo" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "Scarica il catalogo nel formato PDF." + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "Autori" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "Categorie" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "Generi" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "Epoche" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "temi e argomenti" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +#, fuzzy +msgid "Collections" +msgstr " raccolte" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "Elenco di tutti i file DAISY " + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "Ultimi audiolibri DAISY" + +#: templates/catalogue/daisy_list.html:15 +msgid "" +"System DAISY to uznany na całym świecie format udostępniania książek\n" +"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +"ograniczeń." +msgstr "" + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "" +"Questi criteri sono ambigui. Si prega di selezionare una delle seguenti " +"opzioni:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "Espandi il frammento" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "Nascondi il frammento" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "Vedi tutta la categoria" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please wait…" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "Tutti i libri" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "Audiolibri" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "DAISY" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "L'opera è su licenza di" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "Basato su" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "Dettagli" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "Autore" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "Altre fonti" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "Fonte dell'immagine" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "Immagine sulla piattaforma del editore" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "Visualizza la fonte XML" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Temi dell'opera" + +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "Elenco di tutte le immagini" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "Scarica come" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Artista" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "Direttore" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "Gli audilobri sono stati preparati come parte dei seguenti progetti:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "%(cs)s, creato da %(fb)s // %(cs)s, finanziato da %(fb)s" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" +"Gli audiollibri sono stati preparati come parte del progetto %(cs)s, " +"finanziato da %(fb)s" + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "Gli audiolibri sono stati preparati come parte di progetto %(cs)s." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +#, fuzzy +msgid "Recent audiobooks" +msgstr "Ultimi audiolibri MP3" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +msgid "Recent publications" +msgstr "" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see recent audiobooks\n" +" and recent DAISY files." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "Cerca" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "Volevi dire" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "Risultati per titolo" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "Risultati per autore" + +#: templates/catalogue/search_multiple_hits.html:80 +msgid "Results by translators" +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "Risultati nel testo" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "Altri risultati" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "Siamo spiacenti!I criteri di ricerca non corrispondono alle risorse." + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"Search engine supports following criteria: title, author, theme/topic, " +"epoch, kind and genre.\n" +"\t\tAs for now we do not support full text search." +msgstr "" +"Il motore di ricerca supporta i seguenti criteri: titolo, autore, tema, " +"epoca, genere.\n" +"\t\t Per il momento non supportiamo i criteri del testo intero." + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "" +"Siamo spiacenti! La ricerca viene effettuata su parole con almeno due " +"caratteri." + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "su Lektury.Gazeta.pl" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "su Wikipedia" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr " Scarica un PDF personalizzato" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Metti il libro sullo scaffale" + +#~ msgid "Create new shelf" +#~ msgstr "Crea un nuovo scaffale" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "Non hai nessuno scaffale. se vuoi puoi crearne uno, qui sotto." + +#~ msgid "Put on the shelf!" +#~ msgstr "Metti sullo scaffale!" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Gli scaffali che contengono il frammento" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "Non hai nessuno scaffale. Se vuoi puoi crearne uno, qui sotto." + +#~ msgid "Save all shelves" +#~ msgstr "Salva tutti gli scaffali" + +#~ msgid "Your shelves with books" +#~ msgstr "I tuoi scaffali con i libri" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "Non hai nessuno scaffale. se vuoi puoi crearne uno, qui sotto." + +#~ msgid "Create shelf" +#~ msgstr "Crea uno scaffale" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "Inserire un valore valido JSON. Errore: %s" + +#~ msgid "A4" +#~ msgstr "A4" + +#~ msgid "A5" +#~ msgstr "A5" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "Opzioni di personalizzazione non corrette per PDF" + +#~ msgid "Bad method" +#~ msgstr "Metodo non corretto" diff --git a/src/catalogue/locale/jp/LC_MESSAGES/django.mo b/src/catalogue/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..86b539e6b Binary files /dev/null and b/src/catalogue/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/jp/LC_MESSAGES/django.po b/src/catalogue/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..8de2d5621 --- /dev/null +++ b/src/catalogue/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,721 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "" + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "" + +#: forms.py:53 +msgid "Normal leading" +msgstr "" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "" + +#: forms.py:55 +msgid "Double leading" +msgstr "" + +#: forms.py:57 +msgid "Font size" +msgstr "" + +#: forms.py:58 +msgid "Default" +msgstr "" + +#: forms.py:59 +msgid "Big" +msgstr "" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "" + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "" + +#: models/book.py:33 +msgid "language code" +msgstr "" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "" + +#: models/book.py:38 +msgid "parent number" +msgstr "" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr "" + +#: models/book.py:44 +msgid "cover" +msgstr "" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "" + +#: models/book.py:67 +msgid "books" +msgstr "" + +#: models/book.py:244 +#, python-format +msgid "Book \"%s\" does not exist." +msgstr "" + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "" + +#: models/book.py:599 models/bookmedia.py:23 +#, python-format +msgid "%s file" +msgstr "" + +#: models/bookmedia.py:26 +msgid "type" +msgstr "" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "" + +#: models/bookmedia.py:28 +msgid "file" +msgstr "" + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "" + +#: models/collection.py:16 +msgid "book slugs" +msgstr "" + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "" + +#: models/collection.py:22 +msgid "collection" +msgstr "" + +#: models/collection.py:23 +msgid "collections" +msgstr "" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "" + +#: models/tag.py:16 +msgid "author" +msgstr "" + +#: models/tag.py:17 +msgid "epoch" +msgstr "" + +#: models/tag.py:19 +msgid "genre" +msgstr "" + +#: models/tag.py:20 +msgid "theme" +msgstr "" + +#: models/tag.py:21 +msgid "set" +msgstr "" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "" + +#: models/tag.py:40 +msgid "book count" +msgstr "" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "" + +#: models/tag.py:66 +msgid "tags" +msgstr "" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "" + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "" + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +msgstr "" + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" Creative " +"Commons Attribution-ShareAlike 3.0\n" +" license." +msgstr "" + +#: templates/catalogue/book_info.html:20 +msgid "Resource prepared based on:" +msgstr "" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "" + +#: templates/catalogue/book_list.html:30 +msgid "↑ top ↑" +msgstr "" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "" + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr "" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "" + +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "" + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "" + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr "" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "" + +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "" + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +msgid "Collections" +msgstr "" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "" + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "" + +#: templates/catalogue/daisy_list.html:15 +msgid "" +"System DAISY to uznany na całym świecie format udostępniania książek\n" +"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +"ograniczeń." +msgstr "" + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please wait…" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "" + +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "" + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +msgid "Recent audiobooks" +msgstr "" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +msgid "Recent publications" +msgstr "" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see recent audiobooks\n" +" and recent DAISY files." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:80 +msgid "Results by translators" +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "" + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"Search engine supports following criteria: title, author, theme/topic, " +"epoch, kind and genre.\n" +"\t\tAs for now we do not support full text search." +msgstr "" + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "" + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr "" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" diff --git a/src/catalogue/locale/lt/LC_MESSAGES/django.mo b/src/catalogue/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..04cdc6613 Binary files /dev/null and b/src/catalogue/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/lt/LC_MESSAGES/django.po b/src/catalogue/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..0889888c4 --- /dev/null +++ b/src/catalogue/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,879 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2013-04-09 10:40+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "Prašome pateikti XML." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "Nerodyti išnašų" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "Nerodyti motyvų" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "Nenaudoti derinčių šriftų" + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "eilučių intervalas" + +#: forms.py:53 +msgid "Normal leading" +msgstr "Normalus intervalas" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "Pusantro intervalo" + +#: forms.py:55 +msgid "Double leading" +msgstr "Dvigubasis intervalas" + +#: forms.py:57 +msgid "Font size" +msgstr "Šrifto dydis" + +#: forms.py:58 +msgid "Default" +msgstr "Numatytasis " + +#: forms.py:59 +msgid "Big" +msgstr "Didelis" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"Įvyko klaida: %(exception)s\n" +"\n" +"%(tb)s" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "Knyga buvo sėkmingai importuota" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "Importuojant failą įvyko klaida: %r" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "Sukurti ir atsisiųsti PDF failą" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "Atsisiųsti" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "pavadinimas" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "rikiavimo raktas" + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "slug" + +#: models/book.py:33 +msgid "language code" +msgstr "kalbos kodas" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "aprašymas" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "sukūrimo data" + +# sprawdz +#: models/book.py:38 +msgid "parent number" +msgstr "pirminis numeris" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr "papildomos informacijos" + +#: models/book.py:44 +msgid "cover" +msgstr "viršelis" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "knyga" + +#: models/book.py:67 +msgid "books" +msgstr "knygos" + +#: models/book.py:244 +#, python-format +msgid "Book \"%s\" does not exist." +msgstr "Knyga \"%s\" neegzistuoja." + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "Knyga %s jau egzistuoja" + +#: models/book.py:599 models/bookmedia.py:23 +#, python-format +msgid "%s file" +msgstr "%s failas " + +#: models/bookmedia.py:26 +msgid "type" +msgstr "tipas" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "pavadinimas" + +#: models/bookmedia.py:28 +msgid "file" +msgstr "failas " + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "book media" + +#: models/collection.py:16 +msgid "book slugs" +msgstr "book slugs" + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "rūšis" + +#: models/collection.py:22 +msgid "collection" +msgstr "kolekcija" + +#: models/collection.py:23 +msgid "collections" +msgstr "kolekcijos" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "fragmentas" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "fragmentai" + +#: models/tag.py:16 +msgid "author" +msgstr "autorius" + +#: models/tag.py:17 +msgid "epoch" +msgstr "epocha" + +#: models/tag.py:19 +msgid "genre" +msgstr "žanras" + +#: models/tag.py:20 +msgid "theme" +msgstr "motyvas" + +#: models/tag.py:21 +msgid "set" +msgstr "rinkinys" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "kategorija " + +#: models/tag.py:40 +msgid "book count" +msgstr "knygų skaičius" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "žymė" + +#: models/tag.py:66 +msgid "tags" +msgstr "žymės" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "Visų audio knygų sąrašas" + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "Naujosios MP3 audio knygos" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "Naujosios Ogg Vorbis audio knygos" + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +msgstr "" +"Fondo Šiuolaikinė Lenkija privalomos literatūros audio knygų rinkinys.\n" +"Galite juo naudotis nemokamai ir be apribojimų.\n" +"Audio knygos yra garsių aktorių įrašomos, tokių kaip Danuta Stenka ir Jan " +"Peszek." + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "Žiūrėti daugiau" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "Motyvas" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "kūrinyje" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "Šis kūrinys yra licencijuotas pagal:" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" Creative " +"Commons Attribution-ShareAlike 3.0\n" +" license." +msgstr "" +"Šio visuomenės srities kūrinio autorių teisė neapima,\n" +"tai reiškia, kad gali būti laisvai naudojamas bei\n" +"platinamas. Jei su šiuo kūriniu yra pateikiamos bet kokios\n" +"papildomos autorinių teisių saugomos medžiagos (kaip pastabos, motyvai ir t." +"t.), šios\n" +"medžiagos yra licencijuotos pagal\n" +"Creative Commons " +"Attribution-ShareAlike 3.0\n" +"licenciją." + +#: templates/catalogue/book_info.html:20 +#, fuzzy +msgid "Resource prepared based on:" +msgstr "Tekstas paruoštas remiantis:" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "Redagavimas ir pastabos:" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "Visų kūrinių sąrašas" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "Turinys" + +#: templates/catalogue/book_list.html:30 +msgid "↑ top ↑" +msgstr "↑į viršų↑" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "Epocha" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "Rūšis " + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "Žanras" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "Skaityti online" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "Spausdinti" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "e-knygos skaitytojui" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "skaityklei Kindle" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr " išplėstiniam naudojimui" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "Klausytis" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "Turinys" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "Motyvai" + +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "Redaguoti pastabą" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "Infobox" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "Knygos puslapis" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "skaitytojui" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "Atsisiųsti visas šios knygos audio knygas" + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "Motyvai ir temos" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "Žiūrėti" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "Knygos" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "šaltinis" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "Šaltinio XML failas" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "Knyga " + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr "Redaktoriaus Platformoje" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "Knygos aprašymas Lektury.Gazeta.pl interneto svetainėje" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "Knygos aprašymas Vikipedijoje" + +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "Maišyti šią knygą" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "Katalogas" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "Atsisiųsti katalogą PDF formatu." + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "Autoriai" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "Rūšys" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "Žanrai" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "Epochos" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "Motyvai ir temos" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +#, fuzzy +msgid "Collections" +msgstr "kolekcijos" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "Visų DAISY failų sąrašas" + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "Naujosios DAISY audio knygos" + +#: templates/catalogue/daisy_list.html:15 +msgid "" +"System DAISY to uznany na całym świecie format udostępniania książek\n" +"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +"ograniczeń." +msgstr "" +"DAISY sistema yra visame pasaulyje pripažintas knygų bendrinimo formatas\n" +"pritaikytas silpnesnio regėjimo žmonėms, akliesiems bei kitiems\n" +"skaitymo problemų turintiems žmonėms.Galite jomis naudotis nemokamai ir be " +"apribojimų." + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "" +"Paieškos kriterijai nėra tikslūs. Prašome išrinkti vieną iš žemiau nurodytų " +"galimybių:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "Išplėsti fragmentą" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "Slėpti fragmentą" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "Žiūrėti visą kategoriją" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please wait…" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "Visos knygos" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "Audio knygos" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "DAISY " + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "Kūrinys yra licencijuotas pagal:" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "Remiantis" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "Detalės " + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "Autorius" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "Kiti ištekliai" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "Paveikslėlio šaltinis" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "Paveikslėlis Redaktoriaus Platformoje" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "Žiūrėti XML šaltinį" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Kūrinio motyvai" + +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "Visų vaizdų sąrašas" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "Atsisiųsti kaip" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Artistas" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "Režisierus" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "Audio knygos buvo paruoštos kaip projektų dalis:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "\"%(cs)s, %(fb)s finansuotų" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" +"Audio knygos buvo paruoštos kaip dalis %(fb)s. finansuoto %(cs)s projekto." + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "Audio knygos buvo paruoštos kaip dalis %(cs)s projekto." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +#, fuzzy +msgid "Recent audiobooks" +msgstr "Naujosios MP3 audio knygos" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +#, fuzzy +msgid "Recent publications" +msgstr "keliauja į viešą tinklapį " + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see recent audiobooks\n" +" and recent DAISY files." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "Ieškoti" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "Gal turėjote omenyje" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "Rezultatai pagal pavadinimą" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "Rezultatai pagal autorius" + +#: templates/catalogue/search_multiple_hits.html:80 +#, fuzzy +msgid "Results by translators" +msgstr "Rezultatai pagal autorius" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "Rezultatai tekste" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "Kiti rezultatai" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "Atsiprašome! Rezultatų, atitinkančių paieškos kriterijus nėra." + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"Search engine supports following criteria: title, author, theme/topic, " +"epoch, kind and genre.\n" +"\t\tAs for now we do not support full text search." +msgstr "" +"Paieškos sistema palaiko nurodytus kriterijus: pavadinimas, autorius, tema, " +"epocha, rūšis ir žanras.\n" +"\t\t Kol kas negalima atlikti viso teksto paieškos." + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "" +"Atsiprašome! Paieškos užklausa turi susidėti mažiausiai iš dviejų simbolių." + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "Lektury.Gazeta.pl interneto svetainėje" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "Vikipedijoje" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr "Sukurti ir atsisiųsti PDF failą" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Padėkite knygą į lentyną!" + +#~ msgid "Create new shelf" +#~ msgstr "Sukurti naują lentyną" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naują lentyną " +#~ "žemiau." + +#~ msgid "Put on the shelf!" +#~ msgstr "Padėkite į lentyną!" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Lentynos turinčios fragmentus " + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naują lentyną " +#~ "žemiau." + +#~ msgid "Save all shelves" +#~ msgstr "Įrašyti visas lentynas" + +#~ msgid "Your shelves with books" +#~ msgstr "Tavo lentynos su knygomis" + +#~ msgid "remove" +#~ msgstr "pašalinti" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naują lentyną " +#~ "žemiau." + +#~ msgid "Create shelf" +#~ msgstr "Sukurti lentyną" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "Įvesti atitinkamą vertybę JSON. Klaida: %s" + +#~ msgid "A4" +#~ msgstr "A4" + +#~ msgid "A5" +#~ msgstr "A5" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "Neteisingi PDF tinkinimo pasirinkimai" + +#~ msgid "Bad method" +#~ msgstr "Blogas metodas" + +#~ msgid "title, author, theme/topic, epoch, kind, genre" +#~ msgstr "Pavadinimas , autorius, motyvas /tema, gadynė, \trūšis, sortas" + +#~ msgid "main page" +#~ msgstr "pagrindinis puslapis" + +#~ msgid "Show tag on main page" +#~ msgstr "Parodyk tagą pagrindinemę puslapyję" + +#~ msgid "year of death" +#~ msgstr "mirimo metai" + +#~ msgid "short HTML" +#~ msgstr "trumpas HTML" + +#~ msgid "HTML file" +#~ msgstr "HTML failas" + +#~ msgid "PDF file" +#~ msgstr "PDF failas" + +#~ msgid "EPUB file" +#~ msgstr "EPUB failas" + +#~ msgid "ODT file" +#~ msgstr "ODT failas" + +#~ msgid "TXT file" +#~ msgstr "TXT failsa" + +#~ msgid "MP3 file" +#~ msgstr "MP3 failas" + +#~ msgid "OGG file" +#~ msgstr "OGG failas" + +#~ msgid "translator" +#~ msgstr "vertėjas" + +#~ msgid "year of translator's death" +#~ msgstr "vertėjo mirimo metai" + +#~ msgid "book stub" +#~ msgstr "knygos paskelbimas" + +#~ msgid "

                To maintain your shelves you need to be logged in.

                " +#~ msgstr "

                Kad valdyti savo lentynom, turi prisijungti.

                " + +#~ msgid "

                Shelves were sucessfully saved.

                " +#~ msgstr "

                Lentynos liko užrašytos.

                " + +#~ msgid "Book was successfully removed from the shelf" +#~ msgstr "pašalinta" + +#~ msgid "

                Shelf %s was successfully created

                " +#~ msgstr "

                Lentyna %s sukurta

                " + +#~ msgid "

                Shelf %s was successfully removed

                " +#~ msgstr "

                Lentyna %spašalinta

                " + +#~ msgid "Today is %(month)s, %(day)s." +#~ msgstr "Å iandien yra %(month)s, %(day)s." + +#~ msgid "content type" +#~ msgstr "turinio rÅ«Å¡is" + +#~ msgid "object id" +#~ msgstr "id obiektas" diff --git a/src/catalogue/locale/pl/LC_MESSAGES/django.mo b/src/catalogue/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..739f69b2d Binary files /dev/null and b/src/catalogue/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/pl/LC_MESSAGES/django.po b/src/catalogue/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..c1a8aac2b --- /dev/null +++ b/src/catalogue/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,948 @@ +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +msgid "" +msgstr "" +"Project-Id-Version: WolneLektury\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-10-16 13:54+0200\n" +"PO-Revision-Date: 2014-10-16 13:55+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: Fundacja Nowoczesna Polska \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" +"X-Generator: Poedit 1.5.4\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" +"Creative Commons Uznanie autorstwa – Na tych samych warunkach 3.0 Unported" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "Proszę podać XML." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "Bez przypisów" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "Bez motywów" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "Bez naszego kroju pisma" + +#: forms.py:49 +msgid "Without cover" +msgstr "Bez okładki" + +#: forms.py:52 +msgid "Leading" +msgstr "Interlinia" + +#: forms.py:53 +msgid "Normal leading" +msgstr "Zwykła interlinia" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "Powiększona interlinia" + +#: forms.py:55 +msgid "Double leading" +msgstr "Podwójna interlinia" + +#: forms.py:57 +msgid "Font size" +msgstr "Rozmiar tekstu" + +#: forms.py:58 +msgid "Default" +msgstr "Domyślnie" + +#: forms.py:59 +msgid "Big" +msgstr "Duży" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "Kolejka jest pełna. Proszę spróbować ponownie później." + +#: models/book.py:43 models/collection.py:13 +msgid "title" +msgstr "tytuł" + +#: models/book.py:44 models/tag.py:35 +msgid "sort key" +msgstr "klucz sortowania" + +#: models/book.py:45 +#, fuzzy +msgid "sort key by author" +msgstr "Znalezieni autorzy" + +#: models/book.py:46 models/book.py:48 models/collection.py:14 +#: models/collection.py:17 models/tag.py:34 +msgid "slug" +msgstr "slug" + +#: models/book.py:49 +msgid "language code" +msgstr "Kod języka" + +#: models/book.py:51 models/book.py:160 models/collection.py:15 +#: models/tag.py:38 models/tag.py:144 +msgid "description" +msgstr "opis" + +#: models/book.py:52 models/book.py:53 models/bookmedia.py:34 models/tag.py:45 +#: models/tag.py:46 +msgid "creation date" +msgstr "data utworzenia" + +#: models/book.py:54 +msgid "parent number" +msgstr "numer rodzica" + +#: models/book.py:55 models/bookmedia.py:35 +msgid "extra information" +msgstr "dodatkowe informacje" + +#: models/book.py:60 +msgid "cover" +msgstr "okładka" + +#: models/book.py:65 +msgid "cover thumbnail" +msgstr "podgląd okładki" + +#: models/book.py:92 models/collection.py:20 +msgid "book" +msgstr "książka" + +#: models/book.py:93 +msgid "books" +msgstr "książki" + +#: models/book.py:258 +#, python-format +msgid "Book \"%s\" does not exist." +msgstr "Utwór \"%s\" nie istnieje." + +#: models/book.py:272 +#, python-format +msgid "Book %s already exists" +msgstr "Książka %s już istnieje" + +#: models/book.py:519 +msgid "This work needs modernisation" +msgstr "Ten utwór wymaga uwspółcześnienia" + +#: models/book.py:546 models/bookmedia.py:27 +#, python-format +msgid "%s file" +msgstr "plik %s" + +#: models/bookmedia.py:30 +msgid "type" +msgstr "typ" + +#: models/bookmedia.py:31 models/source.py:12 models/tag.py:33 +msgid "name" +msgstr "nazwa" + +#: models/bookmedia.py:32 +msgid "file" +msgstr "plik" + +#: models/bookmedia.py:44 models/bookmedia.py:45 +msgid "book media" +msgstr "media książki" + +#: models/collection.py:18 +msgid "book slugs" +msgstr "slugi utworów" + +#: models/collection.py:20 models/tag.py:20 +msgid "kind" +msgstr "rodzaj" + +#: models/collection.py:24 +msgid "collection" +msgstr "kolekcja" + +#: models/collection.py:25 +msgid "collections" +msgstr "kolekcje" + +#: models/fragment.py:31 +msgid "fragment" +msgstr "fragment" + +#: models/fragment.py:32 +msgid "fragments" +msgstr "fragmenty" + +#: models/source.py:11 +msgid "network location" +msgstr "położenie sieciowe" + +#: models/source.py:16 +msgid "source" +msgstr "źródło" + +#: models/source.py:17 +msgid "sources" +msgstr "źródła" + +#: models/tag.py:18 +msgid "author" +msgstr "autor" + +#: models/tag.py:19 +msgid "epoch" +msgstr "epoka" + +#: models/tag.py:21 +msgid "genre" +msgstr "gatunek" + +#: models/tag.py:22 +msgid "theme" +msgstr "motyw" + +#: models/tag.py:23 +msgid "set" +msgstr "półka" + +#: models/tag.py:24 +msgid "thing" +msgstr "przedmiot" + +#: models/tag.py:36 +msgid "category" +msgstr "kategoria" + +#: models/tag.py:66 +msgid "tag" +msgstr "tag" + +#: models/tag.py:67 +msgid "tags" +msgstr "tagi" + +#: templates/catalogue/audiobook_list.html:8 +#: templates/catalogue/audiobook_list.html:17 +msgid "Listing of all audiobooks" +msgstr "Spis wszystkich audiobooków" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest MP3 audiobooks" +msgstr "Ostatnio dodane audiobooki w formacie MP3" + +#: templates/catalogue/audiobook_list.html:14 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "Ostatnio dodane audiobooki w formacie Ogg Vorbis" + +#: templates/catalogue/book_detail.html:23 +#: templates/catalogue/book_text.html:20 +msgid "Other versions" +msgstr "Inne wersje" + +#: templates/catalogue/book_detail.html:31 +#: templates/catalogue/tagged_object_list.html:75 +#: templates/catalogue/tagged_object_list.html:118 +msgid "See also" +msgstr "Zobacz też" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "Motyw" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "w utworze" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "Utwór jest udostępniony na licencji:" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" Creative " +"Commons Attribution-ShareAlike 3.0\n" +" license." +msgstr "" +"Ten utwór nie jest objęty majątkowym prawem autorskim i znajduje się " +"w domenie publicznej, co oznacza że możesz go swobodnie wykorzystywać, " +"publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi " +"materiałami (przypisy, motywy literackie etc.), które podlegają prawu " +"autorskiemu, to te dodatkowe materiały udostępnione są na licencji Uznanie autorstwa-" +"Na tych samych warunkach 3.0." + +#: templates/catalogue/book_info.html:20 +msgid "Resource prepared based on:" +msgstr "Zasób opracowany na podstawie:" + +#: templates/catalogue/book_info.html:29 +msgid "Edited by:" +msgstr "Opracowanie redakcyjne:" + +#: templates/catalogue/book_info.html:31 +msgid "Edited and annotated by:" +msgstr "Opracowanie redakcyjne i przypisy:" + +#: templates/catalogue/book_info.html:37 +msgid "Publication funded by:" +msgstr "Publikację ufundowali i ufundowały:" + +#: templates/catalogue/book_info.html:43 +msgid "Cover image by:" +msgstr "Ilustracja na okładce:" + +#: templates/catalogue/book_list.html:8 templates/catalogue/book_list.html:13 +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all works" +msgstr "Spis wszystkich utworów" + +#: templates/catalogue/book_list.html:26 +msgid "Table of Content" +msgstr "Spis treści" + +#: templates/catalogue/book_list.html:36 +msgid "↑ top ↑" +msgstr "↑ góra ↑" + +#: templates/catalogue/book_short.html:53 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "Epoka" + +#: templates/catalogue/book_short.html:61 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "Rodzaj" + +#: templates/catalogue/book_short.html:69 +msgid "Genre" +msgstr "Gatunek" + +#: templates/catalogue/book_short.html:78 +msgid "Language" +msgstr "Język" + +#: templates/catalogue/book_short.html:97 +msgid "Read online" +msgstr "Czytaj online" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_wide.html:72 views.py:594 +msgid "Download" +msgstr "Pobierz" + +#: templates/catalogue/book_short.html:104 +msgid "to print" +msgstr "do druku" + +#: templates/catalogue/book_short.html:107 +msgid "for an e-book reader" +msgstr "na czytnik e-booków" + +#: templates/catalogue/book_short.html:110 +msgid "for Kindle" +msgstr "na Kindle" + +#: templates/catalogue/book_short.html:113 +msgid "FictionBook" +msgstr "FictionBook" + +#: templates/catalogue/book_short.html:116 +msgid "for advanced usage" +msgstr "do zadań specjalnych" + +#: templates/catalogue/book_short.html:122 +msgid "Listen" +msgstr "Słuchaj" + +#: templates/catalogue/book_text.html:26 +msgid "Table of contents" +msgstr "Spis treści" + +#: templates/catalogue/book_text.html:30 templatetags/catalogue_tags.py:336 +msgid "Themes" +msgstr "Motywy" + +#: templates/catalogue/book_text.html:34 templates/catalogue/book_text.html:91 +msgid "Settings" +msgstr "Ustawienia" + +#: templates/catalogue/book_text.html:38 +msgid "Edit. note" +msgstr "Nota red." + +#: templates/catalogue/book_text.html:42 +msgid "Infobox" +msgstr "Informacje" + +#: templates/catalogue/book_text.html:56 +#: templates/catalogue/viewer_base.html:53 +msgid "Close" +msgstr "Zamknij" + +#: templates/catalogue/book_text.html:57 +msgid "Please wait..." +msgstr "Proszę czekać…" + +#: templates/catalogue/book_text.html:73 +msgid "Other versions of the book" +msgstr "Inne wersje utworu" + +#: templates/catalogue/book_text.html:74 +msgid "Close the other version" +msgstr "Zamknij drugą wersję" + +#: templates/catalogue/book_text.html:92 +msgid "Display line numbers" +msgstr "Wyświetlaj numerację" + +#: templates/catalogue/book_text.html:93 +msgid "Display themes" +msgstr "Wyświetlaj motywy" + +#: templates/catalogue/book_text.html:94 +msgid "Display footnotes" +msgstr "Wyświetlaj przypisy" + +#: templates/catalogue/book_wide.html:23 +#: templates/catalogue/tagged_object_list.html:61 +msgid "Motifs and themes" +msgstr "Motywy i tematy" + +#: templates/catalogue/book_wide.html:52 +msgid "See" +msgstr "Zobacz" + +#: templates/catalogue/book_wide.html:55 +msgid "Source" +msgstr "Źródło" + +#: templates/catalogue/book_wide.html:55 +msgid "of the book" +msgstr "utworu" + +#: templates/catalogue/book_wide.html:56 +msgid "in" +msgstr "w serwisie" + +#: templates/catalogue/book_wide.html:58 +msgid "Source XML file" +msgstr "Źródłowy plik XML" + +#: templates/catalogue/book_wide.html:60 +msgid "Book on" +msgstr "Utwór na" + +#: templates/catalogue/book_wide.html:60 +msgid "Editor's Platform" +msgstr "Platformie Redakcyjnej" + +#: templates/catalogue/book_wide.html:63 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "Opis lektury w Lektury.Gazeta.pl" + +#: templates/catalogue/book_wide.html:66 +msgid "Book description on Wikipedia" +msgstr "Opis lektury w Wikipedii" + +#: templates/catalogue/book_wide.html:68 +msgid "Mix this book" +msgstr "Miksuj treść utworu" + +#: templates/catalogue/book_wide.html:76 +msgid "Download all audiobooks for this book" +msgstr "Pobierz wszystkie audiobooki tego utworu" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +#: templates/catalogue/menu.html:6 +msgid "Catalogue" +msgstr "Katalog" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "Pobierz katalog w formacie PDF." + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:20 +#: templates/catalogue/tagged_object_list.html:27 +#: templatetags/catalogue_tags.py:332 +msgid "Authors" +msgstr "Autorzy" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:28 +#: templates/catalogue/tagged_object_list.html:35 +#: templatetags/catalogue_tags.py:334 +msgid "Kinds" +msgstr "Rodzaje" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:36 +#: templates/catalogue/tagged_object_list.html:43 +#: templatetags/catalogue_tags.py:333 +msgid "Genres" +msgstr "Gatunki" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:44 +#: templates/catalogue/tagged_object_list.html:51 +#: templatetags/catalogue_tags.py:335 +msgid "Epochs" +msgstr "Epoki" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "Motywy i tematy" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:19 +msgid "Collections" +msgstr "Kolekcje" + +#: templates/catalogue/daisy_list.html:7 +#: templates/catalogue/daisy_list.html:13 +msgid "Listing of all DAISY files" +msgstr "Spis wszystkich plików DAISY" + +#: templates/catalogue/daisy_list.html:10 +msgid "Latest DAISY audiobooks" +msgstr "Ostatnio dodane audiobooki w formacie DAISY" + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "" +"Podane kryteria są niejednoznaczne. Proszę wybrać jedną z następujących " +"możliwości:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "Rozwiń fragment" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "Zwiń fragment" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:6 +msgid "See full category" +msgstr "Zobacz całą kategorię" + +#: templates/catalogue/menu.html:5 +msgid "Catalogue of the library" +msgstr "Katalog biblioteki" + +#: templates/catalogue/menu.html:13 templates/catalogue/menu.html.py:21 +msgid "Please wait…" +msgstr "Proszę czekać…" + +#: templates/catalogue/menu.html:26 +msgid "All books" +msgstr "Wszystkie utwory" + +#: templates/catalogue/menu.html:29 +msgid "Audiobooks" +msgstr "Audiobooki" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "DAISY" + +#: templates/catalogue/menu.html:36 templates/catalogue/tag_list_split.html:8 +msgid "Gallery" +msgstr "Galeria" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "Utwór jest udostępniony na licencji" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "Na podstawie" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "O utworze" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "Autor" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "W innych miejscach" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "Źródło obrazu" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "Obraz na Platformie Redakcyjnej" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "Źródłowy plik XML" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Motywy w utworze" + +#: templates/catalogue/player.html:11 templates/catalogue/viewer_base.html:9 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "Strona utworu" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "Pobierz jako" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Czyta" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "Reżyseruje" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "Audiobooki przygotowane w ramach projektów:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "%(cs)s, finansowanego przez %(fb)s" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" +"Audiobooki przygotowane w ramach projektu %(cs)s finansowanego przez %(fb)s." + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "Audiobooki przygotowane w ramach projektu %(cs)s." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +msgid "Recent audiobooks" +msgstr "Ostatnio dodane audiobooki" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "Ostatnio dodane pliki DAISY" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +msgid "Recent publications" +msgstr "Ostatnie publikacje" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see recent audiobooks\n" +" and recent DAISY files." +msgstr "" +"Zobacz też listę ostatnio dodanych audiobooków\n" +" i plików DAISY." + +#: templates/catalogue/search_multiple_hits.html:8 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "Szukaj" + +#: templates/catalogue/search_multiple_hits.html:14 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "Czy chodziło Ci o" + +#: templates/catalogue/search_multiple_hits.html:55 +msgid "Results by title" +msgstr "Znalezione w tytułach" + +#: templates/catalogue/search_multiple_hits.html:70 +msgid "Results by authors" +msgstr "Znalezieni autorzy" + +#: templates/catalogue/search_multiple_hits.html:83 +msgid "Results by translators" +msgstr "Znalezieni tłumacze" + +#: templates/catalogue/search_multiple_hits.html:96 +msgid "Results in text" +msgstr "Znalezione w treści" + +#: templates/catalogue/search_multiple_hits.html:113 +msgid "Other results" +msgstr "Inne wyniki" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:162 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "Przepraszamy! Brak wyników spełniających kryteria podane w zapytaniu." + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"Search engine supports following criteria: title, author, theme/topic, " +"epoch, kind and genre.\n" +"\t\tAs for now we do not support full text search." +msgstr "" +"Wyszukiwarka obsługuje takie kryteria jak tytuł, autor, motyw/temat, epoka, " +"rodzaj i gatunek utworu. Obecnie nie obsługujemy wyszukiwania fraz w " +"tekstach utworów." + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "Przepraszamy! Zapytanie musi zawierać co najmniej dwa znaki." + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr "Stwórz własny plik PDF" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "Wolna licencja" + +#: templates/catalogue/tag_list_split.html:3 +msgid "Literature" +msgstr "Literatura" + +#: templates/catalogue/tagged_object_list.html:79 +#: templates/catalogue/tagged_object_list.html:132 +msgid "in Culture.pl" +msgstr "w Culture.pl" + +#: templates/catalogue/tagged_object_list.html:84 +#: templates/catalogue/tagged_object_list.html:122 +msgid "in Lektury.Gazeta.pl" +msgstr "w serwisie Lektury.Gazeta.pl" + +#: templates/catalogue/tagged_object_list.html:89 +#: templates/catalogue/tagged_object_list.html:127 +msgid "in Wikipedia" +msgstr "w Wikipedii" + +#: templates/catalogue/viewer_base.html:55 +msgid "Loading" +msgstr "Ładowanie" + +#: views.py:558 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"Wystąpił błąd: %(exception)s\n" +"\n" +"%(tb)s" + +#: views.py:559 +msgid "Book imported successfully" +msgstr "Książka zaimportowana" + +#: views.py:561 +#, python-format +msgid "Error importing file: %r" +msgstr "Błąd podczas importowania pliku: %r" + +#: views.py:593 +msgid "Download custom PDF" +msgstr "Stwórz własny PDF" + +#~ msgid "book count" +#~ msgstr "liczba książek" + +#~ msgid "picture count" +#~ msgstr "liczba obrazów" + +#~ msgid "" +#~ "Book tags can't have attached links. Set them directly on the book " +#~ "instead of it's tag." +#~ msgstr "" +#~ "Tagi typu książka nie mogą mieć ustawionych linków. Ustaw je bezpośrednio " +#~ "dla książki, zamiast dla jej tagu." + +#~ msgid "Wikisource" +#~ msgstr "Wikiźródła" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." + +#~ msgid "" +#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" +#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +#~ "ograniczeń." +#~ msgstr "" +#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" +#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +#~ "ograniczeń." + +#~ msgid "Listing of all pictures" +#~ msgstr "Spis wszystkich obrazów" + +#~ msgid "for a reader" +#~ msgstr "na czytnik" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Wrzuć lekturę na półkę!" + +#~ msgid "Create new shelf" +#~ msgstr "Utwórz nową półkę" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć nową półkę " +#~ "poniżej." + +#~ msgid "Put on the shelf!" +#~ msgstr "Wrzuć na półkę" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Półki zawierające fragment" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć nową półkę " +#~ "poniżej." + +#~ msgid "Save all shelves" +#~ msgstr "Zapisz półki" + +#~ msgid "Your shelves with books" +#~ msgstr "Twoje półki z lekturami" + +#~ msgid "remove" +#~ msgstr "usuń" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć półkę poniżej." + +#~ msgid "Create shelf" +#~ msgstr "Utwórz półkę" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "Wprowadź prawidłową wartość JSON. Błąd: %s" + +#~ msgid "A4" +#~ msgstr "A4" + +#~ msgid "A5" +#~ msgstr "A5" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "Niepoprawne opcje dla PDF" + +#~ msgid "Bad method" +#~ msgstr "Zła metoda" + +#~ msgid "title, author, theme/topic, epoch, kind, genre" +#~ msgstr "tytuł, autor, motyw/temat, epoka, rodzaj, gatunek" + +#~ msgid "ODT file" +#~ msgstr "Plik ODT" + +#~ msgid "MP3 file" +#~ msgstr "Plik MP3" + +#~ msgid "OGG file" +#~ msgstr "Plik OGG" + +#~ msgid "main page" +#~ msgstr "strona główna" + +#~ msgid "Show tag on main page" +#~ msgstr "Pokazuj tag na stronie głównej" + +#~ msgid "HTML file" +#~ msgstr "Plik HTML" + +#~ msgid "PDF file" +#~ msgstr "Plik PDF" + +#~ msgid "EPUB file" +#~ msgstr "Plik EPUB" + +#~ msgid "TXT file" +#~ msgstr "Plik TXT" + +#~ msgid "sha-1 hash" +#~ msgstr "hash sha-1" + +#~ msgid "time" +#~ msgstr "czas" + +#~ msgid "

                To maintain your shelves you need to be logged in.

                " +#~ msgstr "

                Aby zarządzać swoimi półkami, musisz się zalogować.

                " + +#~ msgid "

                Shelves were sucessfully saved.

                " +#~ msgstr "

                Półki zostały zapisane.

                " + +#~ msgid "Book was successfully removed from the shelf" +#~ msgstr "Usunięto" + +#~ msgid "

                Shelf %s was successfully removed

                " +#~ msgstr "

                Półka %s została usunięta

                " + +#, fuzzy +#~ msgid "sort_key" +#~ msgstr "klucz sortowania" + +#~ msgid "year of death" +#~ msgstr "rok śmierci" + +#~ msgid "short HTML" +#~ msgstr "krótki HTML" + +#~ msgid "year of translator's death" +#~ msgstr "rok śmierci tłumacza" + +#~ msgid "book stub" +#~ msgstr "zapowiedź książki" + +#~ msgid "

                Shelf %s was successfully created

                " +#~ msgstr "

                Półka %s została utworzona

                " diff --git a/src/catalogue/locale/ru/LC_MESSAGES/django.mo b/src/catalogue/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..28bb9da3c Binary files /dev/null and b/src/catalogue/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/ru/LC_MESSAGES/django.po b/src/catalogue/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..dec617fc1 --- /dev/null +++ b/src/catalogue/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,874 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2013-04-09 10:40+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "Укажите, пожалуйста, XML." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "Не показывать сноски" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "Не показывать темы" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "Не используйте наш специальный шрифт" + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "Ведение" + +#: forms.py:53 +msgid "Normal leading" +msgstr "Нормальное ведение" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "1,5 ведения" + +#: forms.py:55 +msgid "Double leading" +msgstr "Двойное ведение" + +#: forms.py:57 +msgid "Font size" +msgstr "Размер шрифта" + +#: forms.py:58 +msgid "Default" +msgstr "Умолчание" + +#: forms.py:59 +msgid "Big" +msgstr "Большой" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"Появилась ошибка: %(exception)s\n" +"\n" +"%(tb)s" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "Вы удачно заимпортировали книгу" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "Ошибка импорта файла: %r" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "Скачать PDF пользователя" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "Загрузить" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "заглавие" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "ключ сортировки " + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "slug" + +#: models/book.py:33 +msgid "language code" +msgstr "код языка" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "описание" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "дата создания" + +#: models/book.py:38 +msgid "parent number" +msgstr "номер родителя" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr "дополнительная информация" + +#: models/book.py:44 +msgid "cover" +msgstr "обложка" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "книга" + +#: models/book.py:67 +msgid "books" +msgstr "книги" + +#: models/book.py:244 +#, fuzzy, python-format +msgid "Book \"%s\" does not exist." +msgstr "Книга со slug = \"%s\" не существует." + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "Книга %s уже существует" + +#: models/book.py:599 models/bookmedia.py:23 +#, fuzzy, python-format +msgid "%s file" +msgstr "XML файл" + +#: models/bookmedia.py:26 +msgid "type" +msgstr "тип" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "название" + +#: models/bookmedia.py:28 +#, fuzzy +msgid "file" +msgstr "XML файл" + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "аудиокнига" + +#: models/collection.py:16 +#, fuzzy +msgid "book slugs" +msgstr "анонсы книги" + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "форма" + +#: models/collection.py:22 +msgid "collection" +msgstr "сбор" + +#: models/collection.py:23 +msgid "collections" +msgstr "сборы" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "фрагмент" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "фрагменты" + +#: models/tag.py:16 +msgid "author" +msgstr "автор" + +#: models/tag.py:17 +msgid "epoch" +msgstr "эпоха" + +#: models/tag.py:19 +msgid "genre" +msgstr "жанр" + +#: models/tag.py:20 +msgid "theme" +msgstr "мотив" + +#: models/tag.py:21 +msgid "set" +msgstr "набор" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "категория" + +#: models/tag.py:40 +msgid "book count" +msgstr "число книг" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "таг" + +#: models/tag.py:66 +msgid "tags" +msgstr "таги" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "Список работ" + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "Последние MP3 аудиокниги" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "Последние Ogg Vorbis аудиокниги" + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +msgstr "" +"Аудиотека школьных чтений Фонда Nowoczesna Polska.\n" +". Можете использовать ее бесплатно и без ограничений. \n" +"Аудиокниги записывают известные актеры, в том числе Данута Стенка и Ян Пешек." + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "Подробнее" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "Мотив" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "в труде" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "Разрешение на работу со стороны" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" Creative " +"Commons Attribution-ShareAlike 3.0\n" +" license." +msgstr "" +"Этот труд не защищен авторским правом и является частью \n" +"         общественного домена, что обозначает, нем можно свободно " +"спользоваться, публиковать и \n" +"         распространять. Если есть какие-либо дополнительные материалы, " +"защищенные авторскими правами \n" +"         предоставленные с этой работой (например, аннотации, мотивы и т." +"д.), эти \n" +"         материалы доступны по лицензией \n" +"         " +"Creative Commons Attribution-ShareAlike 3.0 " + +#: templates/catalogue/book_info.html:20 +#, fuzzy +msgid "Resource prepared based on:" +msgstr "Текст подготовлен на основе:" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "Под редакцией и с комментариями:" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "Список работ" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "Оглавление" + +#: templates/catalogue/book_list.html:30 +msgid "↑ top ↑" +msgstr "↑ топ ↑" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "эпоха" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "форма" + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "жанр" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "Читать онлайн" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "печатать" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "для читателя электронной книги" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "для Киндле" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr "продвинутое использование" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "Послушайте" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "на WolneLektury.pl" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "Оглавление" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "Мотивы" + +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "Изменить примечание" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "Инфобокс" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "Возратитесь на сайт книги" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "для читателя" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "Скачать все книги с этой полки" + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "Мотивы и темы" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "Посмотрите" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "Источник" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "данной книги" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "Исходный файл" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "Книга на" + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr "Платформа редакторов" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "Описание книги на Lektury.Gazeta.pl" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "Описание книги на Wikipedia" + +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "данной книги" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "Каталог" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "Скачать каталог в PDF формате." + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "Авторы" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "Формы" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "Жанры" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "Эпохи" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "Мотивы и темы" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +#, fuzzy +msgid "Collections" +msgstr "сборы" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "Список всех DAISY файлов" + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "Последние DAISY аудиокниги" + +#: templates/catalogue/daisy_list.html:15 +msgid "" +"System DAISY to uznany na całym świecie format udostępniania książek\n" +"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +"ograniczeń." +msgstr "" +"Система DAISY это известный во всем мире формат записи книг\n" +", предназначен для людей с плохим зрением, плохо видящих и других лиц\n" +", имеющих проблемы с чтением. Книгами можно пользоваться бесплатно и без " +"ограничений." + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "" +"Критерия являются неоднозначными. Пожалуйста, выберите один из следующих " +"вариантов:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "Растянуть фрагмент" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "Скрыть фрагмент" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "Вся категория" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please wait…" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "Все книги" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "Аудиокниги" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "Даисы" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "Разрешение на работу со стороны" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "Основанный на" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "Подробнее" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "Автор" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "другие ресурсы" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "Источник книги" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "Изображение на платформе редакторов" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "Просмотр XML-источник" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Темы труда" + +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "Список работ" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "Скачать" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Артист" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "режиссер" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "Аудиокниги были подготовлены в рамках проекта:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "%(cs)s, финансируемого %(fb)s" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" +"Аудиокниги были подготовлены в рамках %(cs)s проектa, финансируемого %(fb)s." + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "Аудиокниги были подготовлены в рамках %(cs)s проектa." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +#, fuzzy +msgid "Recent audiobooks" +msgstr "Последние MP3 аудиокниги" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +#, fuzzy +msgid "Recent publications" +msgstr "идти к публичной домене" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see recent audiobooks\n" +" and recent DAISY files." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "Поиск" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "Вы имели в виду" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "Результаты по заглавиям" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "Результаты по авторам" + +#: templates/catalogue/search_multiple_hits.html:80 +#, fuzzy +msgid "Results by translators" +msgstr "переводчик" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "Результаты в текстах" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "другие ресурсы" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "Извините! Критерий поиска не соответствует никаким ресурсам." + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"Search engine supports following criteria: title, author, theme/topic, " +"epoch, kind and genre.\n" +"\t\tAs for now we do not support full text search." +msgstr "" +"Искать поддержку двигателя используя критерии: заглавие, автор, тема/сюжет, " +"эпоха, форма и жанр.\n" +"\t\tПока мы не поддерживаем поиска всего текста." + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "" +"Извините! У искаемого вопроса должны быть по крайней мере два свойства." + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "на Lektury.Gazeta.pl" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "в Википедии" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr "Скачать PDF" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Поставьте книгу на полку!" + +#~ msgid "Create new shelf" +#~ msgstr "Создать новую полку" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "У вас нет никаких полок. Если вы хотите, вы можете создать одну ниже." + +#~ msgid "Put on the shelf!" +#~ msgstr "Поставьте на полку!" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Полки с фрагментом" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "У вас нет никакой полки. Если вы хотите, вы можете создать одну ниже." + +#~ msgid "Save all shelves" +#~ msgstr "Сохранить все полки" + +#~ msgid "Your shelves with books" +#~ msgstr "Ваши книжные полки" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "У вас нет никаких полок. Если хотите, вы можете создать одну ниже." + +#~ msgid "Create shelf" +#~ msgstr "Создать полку" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "Ввести правильное JSON значение. Ошибка: %s" + +#~ msgid "A4" +#~ msgstr "b2" + +#~ msgid "A5" +#~ msgstr "A5" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "Неправильные параметры настройки для PDF" + +#~ msgid "Bad method" +#~ msgstr "Плохой метод" + +#~ msgid "title, author, theme/topic, epoch, kind, genre" +#~ msgstr "Заглавие, автор, мотив/тема, эпоха, форма, жанр" + +#~ msgid "main page" +#~ msgstr "главная страница" + +#~ msgid "Show tag on main page" +#~ msgstr "Показать таг на главной странице" + +#~ msgid "year of death" +#~ msgstr "год смерти" + +#~ msgid "short HTML" +#~ msgstr "короткий HTML" + +#~ msgid "HTML file" +#~ msgstr "HTML файл" + +#~ msgid "PDF file" +#~ msgstr "PDF файл" + +#~ msgid "EPUB file" +#~ msgstr "EPUB файл" + +#~ msgid "ODT file" +#~ msgstr "ODT файл" + +#~ msgid "TXT file" +#~ msgstr "TXT файл" + +#~ msgid "MP3 file" +#~ msgstr "MP3 файл" + +#~ msgid "OGG file" +#~ msgstr "OGG файл" + +#~ msgid "year of translator's death" +#~ msgstr "год смерти переводчика" + +#~ msgid "book stub" +#~ msgstr "анонс книги" + +#, fuzzy +#~ msgid "time" +#~ msgstr "мотив" + +#~ msgid "

                To maintain your shelves you need to be logged in.

                " +#~ msgstr "

                Зарегиструйтесь, чтобы сохранить свои полки.

                " + +#~ msgid "

                Shelves were sucessfully saved.

                " +#~ msgstr "

                Полки - удачно сохранены.

                " + +#~ msgid "Book was successfully removed from the shelf" +#~ msgstr "Книга была удачно удалена с полки" + +#~ msgid "

                Shelf %s was successfully created

                " +#~ msgstr "

                Полка %sбыла удачно создана

                " + +#~ msgid "

                Shelf %s was successfully removed

                " +#~ msgstr "

                Полка%sбыла удачно удалена." + +#~ msgid "Today is %(month)s, %(day)s." +#~ msgstr "Сегодня %(month)s, %(day)s." + +#~ msgid "content type" +#~ msgstr "тип содержания" + +#~ msgid "object id" +#~ msgstr "ID объекта" diff --git a/src/catalogue/locale/uk/LC_MESSAGES/django.mo b/src/catalogue/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..cea863ee3 Binary files /dev/null and b/src/catalogue/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/uk/LC_MESSAGES/django.po b/src/catalogue/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..6424340b4 --- /dev/null +++ b/src/catalogue/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,870 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2013-04-09 10:40+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "Введіть будь ласка XML." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "Сховати примітки" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "Сховати теми" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "Не використовувати нашого настроюваного шрифту" + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "Leading" + +#: forms.py:53 +msgid "Normal leading" +msgstr "Normal leading" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "One and a half leading" + +#: forms.py:55 +msgid "Double leading" +msgstr "Double leading" + +#: forms.py:57 +msgid "Font size" +msgstr "Розмір шрифту" + +#: forms.py:58 +msgid "Default" +msgstr "За умовчанням" + +#: forms.py:59 +msgid "Big" +msgstr "Великий" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"Система виявила помилку %(exception)s\n" +"\n" +"%(tb)s" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "Книжку успішно завантажено" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "Помилка в завантаженні файла: %r" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "Завантажити настроюваний PDF" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "Завантажити" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "заголовок" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "ключ сортування" + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "slug" + +#: models/book.py:33 +msgid "language code" +msgstr "мовний код" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "опис" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "дата створення" + +#: models/book.py:38 +msgid "parent number" +msgstr "номер батька" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr "додаткова інформація" + +#: models/book.py:44 +msgid "cover" +msgstr "обкладинка" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "книжка" + +#: models/book.py:67 +msgid "books" +msgstr "книжки" + +#: models/book.py:244 +#, python-format +msgid "Book \"%s\" does not exist." +msgstr "Книжка \"%s\" не існує." + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "Книжка %s вже існує" + +#: models/book.py:599 models/bookmedia.py:23 +#, python-format +msgid "%s file" +msgstr "файл %s" + +#: models/bookmedia.py:26 +msgid "type" +msgstr "тип" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "назва" + +#: models/bookmedia.py:28 +msgid "file" +msgstr "файл" + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "book media" + +#: models/collection.py:16 +msgid "book slugs" +msgstr "slugs книжок" + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "рід" + +#: models/collection.py:22 +msgid "collection" +msgstr "колекція" + +#: models/collection.py:23 +msgid "collections" +msgstr "колекції" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "фрагмент" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "фрагменти" + +#: models/tag.py:16 +msgid "author" +msgstr "автор" + +#: models/tag.py:17 +msgid "epoch" +msgstr "епоха" + +#: models/tag.py:19 +msgid "genre" +msgstr "жанр" + +#: models/tag.py:20 +msgid "theme" +msgstr "тема" + +#: models/tag.py:21 +msgid "set" +msgstr "вибір" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "категорія" + +#: models/tag.py:40 +msgid "book count" +msgstr "кількість книжок" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "теґ" + +#: models/tag.py:66 +msgid "tags" +msgstr "теґи" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "Список усіх аудіокниг" + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "Останні аудіокниги MP3" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "Останні аудіокниги Ogg Vorbis" + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +"Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +msgstr "" +"Аудіотека шкільної літератури Фонду Сучасна Польща (Fundacja Nowoczesna " +"Polska).\n" +"Можна нею користуватися безкоштовно і без обмежень.\n" +"Аудіокниги зачитують відомі актори, серед яких Данута Стенка та Ян Пешек." + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "Дивіться також" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "Тема" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "у творі" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "Цей твір є доступним на ліцензії:" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" Creative " +"Commons Attribution-ShareAlike 3.0\n" +" license." +msgstr "" +"Цей твір не охороняється авторським правом і є частиною\n" +" суспільного надбання, тому його можна використовувати без обмежень, " +"публікувати, та\n" +" розповсюджувати. Якщо твір містить додаткові матеріали, котрі " +"охороняються авторським правом\n" +" (наприклад примітки, мотиви, тощо), доступ до цих\n" +" додаткових матеріалів надається на умовах ліцензії \n" +" Creative " +"Commons Із зазначенням імені автора – На тих же умовах 3.0\n" +" ." + +#: templates/catalogue/book_info.html:20 +#, fuzzy +msgid "Resource prepared based on:" +msgstr "Текст підготовлено на основі" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "Редагування та примітки:" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "Список усіх творів" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "Зміст" + +#: templates/catalogue/book_list.html:30 +msgid "↑ top ↑" +msgstr "↑ вгору ↑" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "Епоха" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "Рід" + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "Жанр" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "Читати онлайн" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "до друку" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "для рідера електронних книг" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "на Kindle" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr "для розширеного користування" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "Послухати" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "Зміст" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "Теми" + +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "Редакторський коментар" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "Інфобокс" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "Сторінка книжки" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "на рідер" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "Завантажити усі аудіокниги для цієї книжки" + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "Мотиви та теми" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "Дивись" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "Джерело" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "книжки" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "Файл джерела XML" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "Книжка на" + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr "Платформа редагування" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "Опис книжки на Lektury.Gazeta.pl" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "Опис книжки на Вікіпедії" + +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "Міксувати цю книжку" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "Каталог" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "Завантажити каталог у форматі PDF" + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "Автори" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "Роди" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "Жанри" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "Епохи" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "Теми" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +#, fuzzy +msgid "Collections" +msgstr "колекції" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "Список усіх файлів DAISY" + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "Останні аудіокниги DAISY" + +#: templates/catalogue/daisy_list.html:15 +msgid "" +"System DAISY to uznany na całym świecie format udostępniania książek\n" +"dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +"ograniczeń." +msgstr "" +"Система DAISY це визнаний у всьому світі формат надавання доступу до книжок\n" +" котрий відповідає потребам осіб слабозорих, сліпих, а також інших осіб\n" +" які мають труднощі з читанням. Можете ними користуватися безкоштовно і без " +"обмежень." + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "Критерії неоднозначні. Виберіть один з варіантів нижче:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "Розвинути фрагмент" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "Сховати фрагмент" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "Дивитись повну категорію" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please wait…" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "Усі книжки" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "Аудіокниги" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "DAISY" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "Твір на ліцензії" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "На основі" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "Деталі" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "Автор" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "Інші ресурси" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "Джерело графіки" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "Графіка на редакторській платформі" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "Дивитись джерело XML" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Теми у творі" + +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "Список усіх графік" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "Завантажити як" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Художник" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "Режисер" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "Аудіокниги виготовлено в рамках проектів:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "%(cs)s, фінансованого із коштів %(fb)s" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" +"Аудіокниги виготовлено в рамках проекту %(cs)s, фінансованого із коштів " +"%(fb)s." + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "Аудіокниги виготовлено в рамках проекту %(cs)s." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +#, fuzzy +msgid "Recent audiobooks" +msgstr "Останні аудіокниги MP3" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +#, fuzzy +msgid "Recent publications" +msgstr "входить у суспільне надбання" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see recent audiobooks\n" +" and recent DAISY files." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "Пошук" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "Ви мали на увазі" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "Результати за заголовком" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "Результати за авторами" + +#: templates/catalogue/search_multiple_hits.html:80 +#, fuzzy +msgid "Results by translators" +msgstr "Результати за авторами" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "Результати в тексті" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "Інші результати" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "На жаль, Ваші критерії пошуку не відповідають жодним результатам." + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"Search engine supports following criteria: title, author, theme/topic, " +"epoch, kind and genre.\n" +"\t\tAs for now we do not support full text search." +msgstr "" +"Система пошуку дозволяє здійснювати пошук за наступними критеріями: " +"заголовок, автор, тема, епоха, рід та жанр.\n" +"\t\tНа даний момент пошук у повному обсязі тексту не є можливим." + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "На жаль, для пошуку потрібно ввести щонайменше два знаки." + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "на Lektury.Gazeta.pl" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "на Вікіпедії" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr "Завантажити настроюваний PDF" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Покласти книжку на полицю!" + +#~ msgid "Create new shelf" +#~ msgstr "Створити нову полицю" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "У вас немає жодних полиць. Можете створити полицю нижче, якщо бажаєте." + +#~ msgid "Put on the shelf!" +#~ msgstr "Покласти на полицю!" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Полиці, які містять фрагмент" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "У Вас немає жодних полиць. Можете створити одну нижче, якщо бажаєте." + +#~ msgid "Save all shelves" +#~ msgstr "Зберегти усі полиці" + +#~ msgid "Your shelves with books" +#~ msgstr "Ваші полиці з книжками" + +#~ msgid "remove" +#~ msgstr "видалити" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "У Вас немає жодної полиці. Можете створити одну нижче, якщо бажаєте." + +#~ msgid "Create shelf" +#~ msgstr "Створити полицю" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "Введіть правильну вартість JSON. Помилка: %s" + +#~ msgid "A4" +#~ msgstr "А4" + +#~ msgid "A5" +#~ msgstr "А5" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "Неправильні параметри настроювання для PDF" + +#~ msgid "Bad method" +#~ msgstr "Неправильний спосіб" + +#~ msgid "title, author, theme/topic, epoch, kind, genre" +#~ msgstr "заголовок, автор, тема, епоха, рід, жанр" + +#~ msgid "main page" +#~ msgstr "головна сторінка" + +#~ msgid "Show tag on main page" +#~ msgstr "Показати теґ на головній сторінці" + +#~ msgid "year of death" +#~ msgstr "дата смерті" + +#~ msgid "short HTML" +#~ msgstr "короткий HTML" + +#~ msgid "HTML file" +#~ msgstr "файл HTML" + +#~ msgid "PDF file" +#~ msgstr "файл PDF" + +#~ msgid "EPUB file" +#~ msgstr "файл EPUB" + +#~ msgid "ODT file" +#~ msgstr "файл ODT" + +#~ msgid "TXT file" +#~ msgstr "файл TXT" + +#~ msgid "MP3 file" +#~ msgstr "файл MP3" + +#~ msgid "OGG file" +#~ msgstr "файл OGG" + +#~ msgid "translator" +#~ msgstr "перекладач" + +#~ msgid "year of translator's death" +#~ msgstr "рік смерті перекладача" + +#~ msgid "book stub" +#~ msgstr "заготовка книжки" + +#~ msgid "

                To maintain your shelves you need to be logged in.

                " +#~ msgstr "

                Щоб управляти своїми полицями, увійдть в акаунт

                " + +#~ msgid "

                Shelves were sucessfully saved.

                " +#~ msgstr "

                Полиці успішно збережено.

                " + +#~ msgid "Book was successfully removed from the shelf" +#~ msgstr "Книжку було успішно видалено з полиці" + +#~ msgid "

                Shelf %s was successfully created

                " +#~ msgstr "

                Полицю %s успішно створено

                " + +#~ msgid "

                Shelf %s was successfully removed

                " +#~ msgstr "

                Полицю %s успішно видалено

                " + +#~ msgid "content type" +#~ msgstr "тип змісту" + +#~ msgid "object id" +#~ msgstr "ІД об'єкту" diff --git a/src/catalogue/management/__init__.py b/src/catalogue/management/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/catalogue/management/commands/__init__.py b/src/catalogue/management/commands/__init__.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/src/catalogue/management/commands/__init__.py @@ -0,0 +1 @@ + diff --git a/src/catalogue/management/commands/checkcovers.py b/src/catalogue/management/commands/checkcovers.py new file mode 100644 index 000000000..7535dd474 --- /dev/null +++ b/src/catalogue/management/commands/checkcovers.py @@ -0,0 +1,130 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from optparse import make_option +from django.contrib.sites.models import Site +from django.core.management.base import BaseCommand +from catalogue import app_settings +from django.utils.functional import lazy + + +def ancestor_has_cover(book): + while book.parent: + book = book.parent + if book.extra_info.get('cover_url'): + return True + return False + + +current_domain = lazy(lambda: Site.objects.get_current().domain, str)() +def full_url(obj): + return 'http://%s%s' % ( + current_domain, + obj.get_absolute_url()) + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, + help='Suppress output'), + ) + help = 'Checks cover sources and licenses.' + + def handle(self, **options): + from collections import defaultdict + import re + from django.db import transaction + from catalogue.models import Book + + verbose = options['verbose'] + + without_cover = [] + with_ancestral_cover = [] + not_redakcja = [] + bad_license = defaultdict(list) + no_license = [] + + re_license = re.compile(ur'.*,\s*(CC.*)') + + redakcja_url = app_settings.REDAKCJA_URL + good_license = re.compile("(%s)" % ")|(".join( + app_settings.GOOD_LICENSES)) + + with transaction.commit_on_success(): + for book in Book.objects.all().order_by('slug').iterator(): + extra_info = book.extra_info + if not extra_info.get('cover_url'): + if ancestor_has_cover(book): + with_ancestral_cover.append(book) + else: + without_cover.append(book) + else: + if not extra_info.get('cover_source', '' + ).startswith(redakcja_url): + not_redakcja.append(book) + match = re_license.match(extra_info.get('cover_by', '')) + if match: + if not good_license.match(match.group(1)): + bad_license[match.group(1)].append(book) + else: + no_license.append(book) + + print """%d books with no covers, %d with inherited covers. +Bad licenses used: %s (%d covers without license). +%d covers not from %s. +""" % ( + len(without_cover), + len(with_ancestral_cover), + ", ".join(sorted(bad_license.keys())) or "none", + len(no_license), + len(not_redakcja), + redakcja_url, + ) + + if verbose: + if bad_license: + print + print "Bad license:" + print "============" + for lic, books in bad_license.items(): + print + print lic + for book in books: + print full_url(book) + + if no_license: + print + print "No license:" + print "===========" + for book in no_license: + print + print full_url(book) + print book.extra_info.get('cover_by') + print book.extra_info.get('cover_source') + print book.extra_info.get('cover_url') + + if not_redakcja: + print + print "Not from Redakcja or source missing:" + print "====================================" + for book in not_redakcja: + print + print full_url(book) + print book.extra_info.get('cover_by') + print book.extra_info.get('cover_source') + print book.extra_info.get('cover_url') + + if without_cover: + print + print "No cover:" + print "=========" + for book in without_cover: + print full_url(book) + + if with_ancestral_cover: + print + print "With ancestral cover:" + print "=====================" + for book in with_ancestral_cover: + print full_url(book) diff --git a/src/catalogue/management/commands/checkintegrity.py b/src/catalogue/management/commands/checkintegrity.py new file mode 100644 index 000000000..6ae2b9a2f --- /dev/null +++ b/src/catalogue/management/commands/checkintegrity.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from optparse import make_option +from django.core.management.base import BaseCommand + +from catalogue.models import Book + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, + help='Suppress output'), + make_option('-d', '--dry-run', action='store_true', dest='dry_run', default=False, + help="Just check for problems, don't fix them"), + ) + help = 'Checks integrity of catalogue data.' + + def handle(self, **options): + from django.db import transaction + + verbose = options['verbose'] + + with transaction.commit_on_success(): + for book in Book.objects.all().iterator(): + try: + info = book.wldocument().book_info + except: + if verbose: + print "ERROR! Bad XML for book:", book.slug + print "To resolve: republish." + print + else: + should_be = [p.slug for p in info.parts] + is_now = [p.slug for p in book.children.all().order_by('parent_number')] + if should_be != is_now: + if verbose: + print "ERROR! Wrong children for book:", book.slug + print "Is: ", is_now + print "Should be:", should_be + print "To resolve: republish parent book." + print + + # Check for ancestry. + parents = [] + parent = book.parent + while parent: + parents.append(parent) + parent = parent.parent + ancestors = list(book.ancestor.all()) + if set(ancestors) != set(parents): + if options['verbose']: + print "Wrong ancestry for book:", book + print "Is: ", ", ".join(ancestors) + print "Should be:", ", ".join(parents) + if not options['dry_run']: + book.repopulate_ancestors() + if options['verbose']: + print "Fixed." + if options['verbose']: + print + + # TODO: check metadata tags, reset counters diff --git a/src/catalogue/management/commands/importbooks.py b/src/catalogue/management/commands/importbooks.py new file mode 100644 index 000000000..338fea6aa --- /dev/null +++ b/src/catalogue/management/commands/importbooks.py @@ -0,0 +1,173 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import os +import sys +import time +from optparse import make_option +from django.conf import settings +from django.core.management.base import BaseCommand +from django.core.management.color import color_style +from django.core.files import File +from catalogue.utils import trim_query_log +from librarian.picture import ImageStore +from wolnelektury.management.profile import profile + +from catalogue.models import Book +from picture.models import Picture + +from search.index import Index + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, + help='Verbosity level; 0=minimal output, 1=normal output, 2=all output'), + make_option('-f', '--force', action='store_true', dest='force', default=False, + help='Overwrite works already in the catalogue'), + make_option('-D', '--dont-build', dest='dont_build', + metavar="FORMAT,...", + help="Skip building specified formats"), + make_option('-S', '--no-search-index', action='store_false', dest='search_index', default=True, + help='Skip indexing imported works for search'), + make_option('-w', '--wait-until', dest='wait_until', metavar='TIME', + help='Wait until specified time (Y-M-D h:m:s)'), + make_option('-p', '--picture', action='store_true', dest='import_picture', default=False, + help='Import pictures'), + ) + help = 'Imports books from the specified directories.' + args = 'directory [directory ...]' + + def import_book(self, file_path, options): + verbose = options.get('verbose') + if options.get('dont_build'): + dont_build = options.get('dont_build').lower().split(',') + else: + dont_build = None + file_base, ext = os.path.splitext(file_path) + book = Book.from_xml_file(file_path, overwrite=options.get('force'), + dont_build=dont_build, + search_index_tags=False) + for ebook_format in Book.ebook_formats: + if os.path.isfile(file_base + '.' + ebook_format): + getattr(book, '%s_file' % ebook_format).save( + '%s.%s' % (book.slug, ebook_format), + File(file(file_base + '.' + ebook_format)), + save=False + ) + if verbose: + print "Importing %s.%s" % (file_base, ebook_format) + book.save() + + def import_picture(self, file_path, options, continue_on_error=True): + try: + image_store = ImageStore(os.path.dirname(file_path)) + picture = Picture.from_xml_file(file_path, image_store=image_store, overwrite=options.get('force')) + except Exception, ex: + if continue_on_error: + print "%s: %s" % (file_path, ex) + return + else: + raise ex + return picture + + # @profile + def handle(self, *directories, **options): + from django.db import transaction + + self.style = color_style() + + verbose = options.get('verbose') + import_picture = options.get('import_picture') + + wait_until = None + if options.get('wait_until'): + wait_until = time.mktime(time.strptime(options.get('wait_until'), '%Y-%m-%d %H:%M:%S')) + if verbose > 0: + print "Will wait until %s; it's %f seconds from now" % ( + time.strftime('%Y-%m-%d %H:%M:%S', + time.localtime(wait_until)), wait_until - time.time()) + + index = None + if options.get('search_index') and not settings.NO_SEARCH_INDEX: + index = Index() + try: + index.index_tags() + index.index.commit() + except Exception, e: + index.index.rollback() + raise e + + # Start transaction management. + transaction.commit_unless_managed() + transaction.enter_transaction_management() + transaction.managed(True) + + files_imported = 0 + files_skipped = 0 + + for dir_name in directories: + if not os.path.isdir(dir_name): + print self.style.ERROR("%s: Not a directory. Skipping." % dir_name) + else: + # files queue + files = sorted(os.listdir(dir_name)) + postponed = {} + while files: + trim_query_log(0) + file_name = files.pop(0) + file_path = os.path.join(dir_name, file_name) + file_base, ext = os.path.splitext(file_path) + + # Skip files that are not XML files + if not ext == '.xml': + continue + + if verbose > 0: + print "Parsing '%s'" % file_path + else: + sys.stdout.write('.') + sys.stdout.flush() + + # Import book files + try: + if import_picture: + self.import_picture(file_path, options) + else: + self.import_book(file_path, options) + + files_imported += 1 + transaction.commit() + + except (Book.AlreadyExists, Picture.AlreadyExists): + print self.style.ERROR('%s: Book or Picture already imported. Skipping. To overwrite use --force.' % + file_path) + files_skipped += 1 + + except Book.DoesNotExist, e: + if file_name not in postponed or postponed[file_name] < files_imported: + # push it back into the queue, maybe the missing child will show up + if verbose: + print self.style.NOTICE('Waiting for missing children') + files.append(file_name) + postponed[file_name] = files_imported + else: + # we're in a loop, nothing's being imported - some child is really missing + raise e + + # Print results + print + print "Results: %d files imported, %d skipped, %d total." % ( + files_imported, files_skipped, files_imported + files_skipped) + print + + if wait_until: + print 'Waiting...' + try: + time.sleep(wait_until - time.time()) + except IOError: + print "it's already too late" + + transaction.commit() + transaction.leave_transaction_management() diff --git a/src/catalogue/management/commands/pack.py b/src/catalogue/management/commands/pack.py new file mode 100755 index 000000000..ba06341b8 --- /dev/null +++ b/src/catalogue/management/commands/pack.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from optparse import make_option + +from django.core.management.base import BaseCommand +from django.core.management.color import color_style +import zipfile + +from catalogue.models import Book, Tag + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-t', '--tags', dest='tags', metavar='SLUG,...', + help='Use only books tagged with this tags'), + make_option('-i', '--include', dest='include', metavar='SLUG,...', + help='Include specific books by slug'), + make_option('-e', '--exclude', dest='exclude', metavar='SLUG,...', + help='Exclude specific books by slug') + ) + help = 'Prepare ZIP package with files of given type.' + args = '[%s] output_path.zip' % '|'.join(Book.formats) + + def handle(self, ftype, path, **options): + self.style = color_style() + verbose = int(options.get('verbosity')) + tags = options.get('tags') + include = options.get('include') + exclude = options.get('exclude') + + if ftype in Book.formats: + field = "%s_file" % ftype + else: + print self.style.ERROR('Unknown file type.') + return + + books = [] + + if include: + books += list(Book.objects.filter(slug__in=include.split(',')).only('slug', field)) + + if tags: + books += list(Book.tagged.with_all(Tag.objects.filter(slug__in=tags.split(','))).only('slug', field)) + elif not include: + books = list(Book.objects.all().only('slug', field)) + + if exclude: + books = [book for book in books if book.slug not in exclude.split(',')] + + archive = zipfile.ZipFile(path, 'w', zipfile.ZIP_DEFLATED) + + processed = skipped = 0 + for book in books: + if verbose >= 2: + print 'Parsing', book.slug + content = getattr(book, field) + if not content: + if verbose >= 1: + print self.style.NOTICE('%s has no %s file' % (book.slug, ftype)) + skipped += 1 + continue + archive.write(content.path, str('%s.%s' % (book.slug, ftype))) + processed += 1 + archive.close() + + if not processed: + if skipped: + print self.style.ERROR("No books with %s files found" % ftype) + else: + print self.style.ERROR("No books found") + return + + if verbose >= 1: + print "%d processed, %d skipped" % (processed, skipped) + print "Results written to %s" % path diff --git a/src/catalogue/management/commands/report_dead_links.py b/src/catalogue/management/commands/report_dead_links.py new file mode 100644 index 000000000..34b1e7054 --- /dev/null +++ b/src/catalogue/management/commands/report_dead_links.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from __future__ import print_function, unicode_literals + +from django.core.management.base import BaseCommand + + +class Command(BaseCommand): + help = 'Checks for dead links.' + + def handle(self, **options): + from catalogue.models import Book + from picture.models import Picture + from urllib2 import urlopen, HTTPError, URLError + from django.core.urlresolvers import reverse + from django.contrib.sites.models import Site + from django.contrib.sites.shortcuts import get_current_site + + domain = get_current_site(None).domain + + fields = [ + (Book, [ + ('gazeta_link', lambda b: b.gazeta_link), + ('wiki_link', lambda b: b.wiki_link), + ('źródło', lambda b: b.extra_info.get('source_url')), + ], 'admin:catalogue_book_change' + ), + (Picture, [ + ('gazeta_link', lambda p: p.culturepl_link), + ('wiki_link', lambda p: p.wiki_link), + ('źródło', lambda p: p.extra_info.get('source_url')), + ], 'admin:pictures_picture_change' + ) + ] + + for model, model_fields, admin_name in fields: + for obj in model.objects.all(): + clean = True + for name, get in model_fields: + url = get(obj) + if url: + try: + urlopen(url) + except (HTTPError, URLError, ValueError), e: + if clean: + clean = False + print(unicode(obj).encode('utf-8')) + print(('Na stronie: https://%s%s' % (domain, obj.get_absolute_url())).encode('utf-8')) + print(('Administracja: https://%s%s' % (domain, reverse(admin_name, args=[obj.pk]))).encode('utf-8')) + if obj.extra_info.get('about'): + print(('Redakcja: %s' % (obj.extra_info.get('about'),)).encode('utf-8')) + print((' %s (%s): %s' % (name, getattr(e, 'code', 'błąd'), url)).encode('utf-8')) + if not clean: + print() diff --git a/src/catalogue/management/commands/savemedia.py b/src/catalogue/management/commands/savemedia.py new file mode 100755 index 000000000..216c5e335 --- /dev/null +++ b/src/catalogue/management/commands/savemedia.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import os.path + +from django.core.management.base import BaseCommand + +from catalogue.models import Book, BookMedia +from catalogue.utils import ExistingFile + + +class Command(BaseCommand): + help = "Saves uploaded media with a given book and a given name. If media has a source SHA1 info - matching media is replaced." + args = 'path slug name' + + def handle(self, *args, **options): + from django.db import transaction + + path, slug, name = args + + # Start transaction management. + transaction.commit_unless_managed() + transaction.enter_transaction_management() + transaction.managed(True) + + book = Book.objects.get(slug=slug) + + root, ext = os.path.splitext(path) + ext = ext.lower() + if ext: + ext = ext[1:] + if ext == 'zip': + ext = 'daisy' + + source_sha1 = BookMedia.read_source_sha1(path, ext) + print "Source file SHA1:", source_sha1 + try: + assert source_sha1 + bm = book.media.get(type=ext, source_sha1=source_sha1) + print "Replacing media: %s (%s)" % (bm.name.encode('utf-8'), ext) + except (AssertionError, BookMedia.DoesNotExist): + bm = BookMedia(book=book, type=ext) + print "Creating new media" + bm.name = name + bm.file.save(None, ExistingFile(path)) + bm.save() + transaction.commit() + transaction.leave_transaction_management() diff --git a/src/catalogue/migrations/0001_initial.py b/src/catalogue/migrations/0001_initial.py new file mode 100644 index 000000000..661fde840 --- /dev/null +++ b/src/catalogue/migrations/0001_initial.py @@ -0,0 +1,221 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import fnpdjango.storage +import jsonfield.fields +import catalogue.fields +import catalogue.models.bookmedia +from django.conf import settings +import catalogue.models.book + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('contenttypes', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Book', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('title', models.CharField(max_length=120, verbose_name='Title')), + ('sort_key', models.CharField(verbose_name='Sort key', max_length=120, editable=False, db_index=True)), + ('sort_key_author', models.CharField(default='', verbose_name='sort key by author', max_length=120, editable=False, db_index=True)), + ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), + ('common_slug', models.SlugField(max_length=120, verbose_name='Slug')), + ('language', models.CharField(default=b'pol', max_length=3, verbose_name='language code', db_index=True)), + ('description', models.TextField(verbose_name='Description', blank=True)), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)), + ('changed_at', models.DateTimeField(auto_now=True, verbose_name='creation date', db_index=True)), + ('parent_number', models.IntegerField(default=0, verbose_name='Parent number')), + ('extra_info', jsonfield.fields.JSONField(default={}, verbose_name='Additional information')), + ('gazeta_link', models.CharField(max_length=240, blank=True)), + ('wiki_link', models.CharField(max_length=240, blank=True)), + ('cover', catalogue.fields.EbookField(b'cover', upload_to=catalogue.models.book._cover_upload_to, storage=fnpdjango.storage.BofhFileSystemStorage(), max_length=255, blank=True, null=True, verbose_name='cover')), + ('cover_thumb', catalogue.fields.EbookField(b'cover_thumb', max_length=255, upload_to=catalogue.models.book._cover_thumb_upload_to, null=True, verbose_name='cover thumbnail', blank=True)), + ('_related_info', jsonfield.fields.JSONField(null=True, editable=False, blank=True)), + ('txt_file', catalogue.fields.EbookField(b'txt', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._txt_upload_to, max_length=255, blank=True, verbose_name='TXT file')), + ('fb2_file', catalogue.fields.EbookField(b'fb2', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._fb2_upload_to, max_length=255, blank=True, verbose_name='FB2 file')), + ('pdf_file', catalogue.fields.EbookField(b'pdf', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._pdf_upload_to, max_length=255, blank=True, verbose_name='PDF file')), + ('epub_file', catalogue.fields.EbookField(b'epub', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._epub_upload_to, max_length=255, blank=True, verbose_name='EPUB file')), + ('mobi_file', catalogue.fields.EbookField(b'mobi', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._mobi_upload_to, max_length=255, blank=True, verbose_name='MOBI file')), + ('html_file', catalogue.fields.EbookField(b'html', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._html_upload_to, max_length=255, blank=True, verbose_name='HTML file')), + ('xml_file', catalogue.fields.EbookField(b'xml', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._xml_upload_to, max_length=255, blank=True, verbose_name='XML file')), + ('parent', models.ForeignKey(related_name=b'children', blank=True, to='catalogue.Book', null=True)), + ], + options={ + 'ordering': ('sort_key',), + 'verbose_name': 'book', + 'verbose_name_plural': 'Books', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='BookMedia', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('type', models.CharField(db_index=True, max_length=20, verbose_name='type', choices=[(b'mp3', 'MP3 file'), (b'ogg', 'Ogg Vorbis file'), (b'daisy', 'DAISY file')])), + ('name', models.CharField(max_length=512, verbose_name='name')), + ('file', catalogue.fields.OverwritingFileField(upload_to=catalogue.models.bookmedia._file_upload_to, max_length=600, verbose_name='XML file')), + ('uploaded_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)), + ('extra_info', jsonfield.fields.JSONField(default={}, verbose_name='Additional information', editable=False)), + ('source_sha1', models.CharField(max_length=40, null=True, editable=False, blank=True)), + ('book', models.ForeignKey(related_name=b'media', to='catalogue.Book')), + ], + options={ + 'ordering': ('type', 'name'), + 'verbose_name': 'book media', + 'verbose_name_plural': 'book media', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Collection', + fields=[ + ('title', models.CharField(max_length=120, verbose_name='Title', db_index=True)), + ('title_de', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('title_en', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('title_es', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('title_fr', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('title_it', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('title_lt', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('title_pl', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('title_ru', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('title_uk', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('slug', models.SlugField(max_length=120, serialize=False, verbose_name='Slug', primary_key=True)), + ('description', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_de', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_en', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_es', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_fr', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_it', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_lt', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_pl', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_ru', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_uk', models.TextField(null=True, verbose_name='Description', blank=True)), + ('book_slugs', models.TextField(verbose_name='Book stubs')), + ('kind', models.CharField(default=b'book', max_length=10, verbose_name='form', db_index=True, choices=[(b'book', 'book'), (b'picture', b'picture')])), + ], + options={ + 'ordering': ('title',), + 'verbose_name': 'collection', + 'verbose_name_plural': 'collections', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Fragment', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('text', models.TextField()), + ('short_text', models.TextField(editable=False)), + ('anchor', models.CharField(max_length=120)), + ('book', models.ForeignKey(related_name=b'fragments', to='catalogue.Book')), + ], + options={ + 'ordering': ('book', 'anchor'), + 'verbose_name': 'Fragment', + 'verbose_name_plural': 'Fragments', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Source', + fields=[ + ('netloc', models.CharField(max_length=120, serialize=False, verbose_name='network location', primary_key=True)), + ('name', models.CharField(max_length=120, verbose_name='name', blank=True)), + ('name_de', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ('name_en', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ('name_es', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ('name_fr', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ('name_it', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ('name_lt', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ('name_pl', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ('name_ru', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ('name_uk', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ], + options={ + 'ordering': ('netloc',), + 'verbose_name': 'source', + 'verbose_name_plural': 'sources', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Tag', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=50, verbose_name='name', db_index=True)), + ('name_de', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('name_en', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('name_es', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('name_fr', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('name_it', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('name_lt', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('name_pl', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('name_ru', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('name_uk', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('slug', models.SlugField(max_length=120, verbose_name='Slug')), + ('sort_key', models.CharField(max_length=120, verbose_name='Sort key', db_index=True)), + ('category', models.CharField(db_index=True, max_length=50, verbose_name='Category', choices=[(b'author', 'author'), (b'epoch', 'period'), (b'kind', 'form'), (b'genre', 'genre'), (b'theme', 'motif'), (b'set', 'set'), (b'book', 'book'), (b'thing', 'thing')])), + ('description', models.TextField(verbose_name='Description', blank=True)), + ('description_de', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_en', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_es', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_fr', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_it', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_lt', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_pl', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_ru', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_uk', models.TextField(null=True, verbose_name='Description', blank=True)), + ('book_count', models.IntegerField(null=True, verbose_name='Number of books', blank=True)), + ('picture_count', models.IntegerField(null=True, verbose_name='picture count', blank=True)), + ('gazeta_link', models.CharField(max_length=240, blank=True)), + ('culturepl_link', models.CharField(max_length=240, blank=True)), + ('wiki_link', models.CharField(max_length=240, blank=True)), + ('wiki_link_de', models.CharField(max_length=240, null=True, blank=True)), + ('wiki_link_en', models.CharField(max_length=240, null=True, blank=True)), + ('wiki_link_es', models.CharField(max_length=240, null=True, blank=True)), + ('wiki_link_fr', models.CharField(max_length=240, null=True, blank=True)), + ('wiki_link_it', models.CharField(max_length=240, null=True, blank=True)), + ('wiki_link_lt', models.CharField(max_length=240, null=True, blank=True)), + ('wiki_link_pl', models.CharField(max_length=240, null=True, blank=True)), + ('wiki_link_ru', models.CharField(max_length=240, null=True, blank=True)), + ('wiki_link_uk', models.CharField(max_length=240, null=True, blank=True)), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)), + ('changed_at', models.DateTimeField(auto_now=True, verbose_name='creation date', db_index=True)), + ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + 'ordering': ('sort_key',), + 'verbose_name': 'tag', + 'verbose_name_plural': 'tags', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='TagRelation', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('object_id', models.PositiveIntegerField(verbose_name='object id', db_index=True)), + ('content_type', models.ForeignKey(verbose_name='content type', to='contenttypes.ContentType')), + ('tag', models.ForeignKey(related_name=b'items', verbose_name='tag', to='catalogue.Tag')), + ], + options={ + 'db_table': 'catalogue_tag_relation', + }, + bases=(models.Model,), + ), + migrations.AlterUniqueTogether( + name='tagrelation', + unique_together=set([('tag', 'content_type', 'object_id')]), + ), + migrations.AlterUniqueTogether( + name='tag', + unique_together=set([('slug', 'category')]), + ), + ] diff --git a/src/catalogue/migrations/0002_book_ancestor.py b/src/catalogue/migrations/0002_book_ancestor.py new file mode 100644 index 000000000..9f304c3d7 --- /dev/null +++ b/src/catalogue/migrations/0002_book_ancestor.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='book', + name='ancestor', + field=models.ManyToManyField(related_name=b'descendant', null=True, editable=False, to='catalogue.Book', blank=True), + preserve_default=True, + ), + ] diff --git a/src/catalogue/migrations/0003_populate_ancestors.py b/src/catalogue/migrations/0003_populate_ancestors.py new file mode 100644 index 000000000..b6117570b --- /dev/null +++ b/src/catalogue/migrations/0003_populate_ancestors.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations + + +def populate_ancestors(apps, schema_editor): + """Fixes the ancestry cache.""" + # TODO: table names + from django.db import connection, transaction + if connection.vendor == 'postgres': + cursor = connection.cursor() + cursor.execute(""" + WITH RECURSIVE ancestry AS ( + SELECT book.id, book.parent_id + FROM catalogue_book AS book + WHERE book.parent_id IS NOT NULL + UNION + SELECT ancestor.id, book.parent_id + FROM ancestry AS ancestor, catalogue_book AS book + WHERE ancestor.parent_id = book.id + AND book.parent_id IS NOT NULL + ) + INSERT INTO catalogue_book_ancestor + (from_book_id, to_book_id) + SELECT id, parent_id + FROM ancestry + ORDER BY id; + """) + else: + Book = apps.get_model("catalogue", "Book") + for book in Book.objects.exclude(parent=None): + parent = book.parent + while parent is not None: + book.ancestor.add(parent) + parent = parent.parent + + +def remove_book_tags(apps, schema_editor): + Tag = apps.get_model("catalogue", "Tag") + Book = apps.get_model("catalogue", "Book") + Tag.objects.filter(category='book').delete() + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0002_book_ancestor'), + ] + + operations = [ + migrations.RunPython(populate_ancestors), + migrations.RunPython(remove_book_tags), + ] diff --git a/src/catalogue/migrations/0004_remove_booktags_count_related_info.py b/src/catalogue/migrations/0004_remove_booktags_count_related_info.py new file mode 100644 index 000000000..916224b25 --- /dev/null +++ b/src/catalogue/migrations/0004_remove_booktags_count_related_info.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0003_populate_ancestors'), + ] + + operations = [ + migrations.AlterField( + model_name='tag', + name='category', + field=models.CharField(db_index=True, max_length=50, verbose_name='Category', choices=[(b'author', 'author'), (b'epoch', 'period'), (b'kind', 'form'), (b'genre', 'genre'), (b'theme', 'motif'), (b'set', 'set'), (b'thing', 'thing')]), + ), + + migrations.RemoveField( + model_name='tag', + name='book_count', + ), + migrations.RemoveField( + model_name='tag', + name='picture_count', + ), + migrations.RemoveField( + model_name='book', + name='_related_info', + ), + ] diff --git a/src/catalogue/migrations/0005_auto_20141016_1337.py b/src/catalogue/migrations/0005_auto_20141016_1337.py new file mode 100644 index 000000000..6de315722 --- /dev/null +++ b/src/catalogue/migrations/0005_auto_20141016_1337.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0004_remove_booktags_count_related_info'), + ] + + operations = [ + migrations.AlterField( + model_name='book', + name='title', + field=models.CharField(max_length=32767, verbose_name='Title'), + ), + ] diff --git a/src/catalogue/migrations/0006_auto_20141022_1059.py b/src/catalogue/migrations/0006_auto_20141022_1059.py new file mode 100644 index 000000000..f36eb0742 --- /dev/null +++ b/src/catalogue/migrations/0006_auto_20141022_1059.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +def capitalize_objects(apps, schema_editor): + """Capitalize Polish names of things.""" + Tag = apps.get_model('catalogue', 'Tag') + for tag in Tag.objects.filter(category='thing'): + tag.name = tag.name_pl = tag.name.capitalize() + tag.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0005_auto_20141016_1337'), + ] + + operations = [ + migrations.RunPython(capitalize_objects), + ] diff --git a/src/catalogue/migrations/0007_auto_20151123_1529.py b/src/catalogue/migrations/0007_auto_20151123_1529.py new file mode 100644 index 000000000..86afa9889 --- /dev/null +++ b/src/catalogue/migrations/0007_auto_20151123_1529.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0006_auto_20141022_1059'), + ] + + operations = [ + migrations.AlterField( + model_name='tag', + name='name', + field=models.CharField(max_length=120, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_de', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_en', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_es', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_fr', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_it', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_lt', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_pl', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_ru', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_uk', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + ] diff --git a/src/catalogue/migrations/0008_auto_20151221_1225.py b/src/catalogue/migrations/0008_auto_20151221_1225.py new file mode 100644 index 000000000..ba6c47027 --- /dev/null +++ b/src/catalogue/migrations/0008_auto_20151221_1225.py @@ -0,0 +1,255 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import jsonfield.fields +import catalogue.fields +import catalogue.models.bookmedia + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0007_auto_20151123_1529'), + ] + + operations = [ + migrations.AlterModelOptions( + name='book', + options={'ordering': ('sort_key',), 'verbose_name': 'book', 'verbose_name_plural': 'books'}, + ), + migrations.AlterModelOptions( + name='fragment', + options={'ordering': ('book', 'anchor'), 'verbose_name': 'fragment', 'verbose_name_plural': 'fragments'}, + ), + migrations.AlterField( + model_name='book', + name='ancestor', + field=models.ManyToManyField(related_name='descendant', editable=False, to='catalogue.Book', blank=True), + ), + migrations.AlterField( + model_name='book', + name='common_slug', + field=models.SlugField(max_length=120, verbose_name='slug'), + ), + migrations.AlterField( + model_name='book', + name='description', + field=models.TextField(verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='book', + name='extra_info', + field=jsonfield.fields.JSONField(default={}, verbose_name='extra information'), + ), + migrations.AlterField( + model_name='book', + name='parent_number', + field=models.IntegerField(default=0, verbose_name='parent number'), + ), + migrations.AlterField( + model_name='book', + name='slug', + field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), + ), + migrations.AlterField( + model_name='book', + name='sort_key', + field=models.CharField(verbose_name='sort key', max_length=120, editable=False, db_index=True), + ), + migrations.AlterField( + model_name='book', + name='title', + field=models.CharField(max_length=32767, verbose_name='title'), + ), + migrations.AlterField( + model_name='bookmedia', + name='extra_info', + field=jsonfield.fields.JSONField(default={}, verbose_name='extra information', editable=False), + ), + migrations.AlterField( + model_name='bookmedia', + name='file', + field=catalogue.fields.OverwritingFileField(upload_to=catalogue.models.bookmedia._file_upload_to, max_length=600, verbose_name='file'), + ), + migrations.AlterField( + model_name='collection', + name='book_slugs', + field=models.TextField(verbose_name='book slugs'), + ), + migrations.AlterField( + model_name='collection', + name='description', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_de', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_en', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_es', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_fr', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_it', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_lt', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_pl', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_ru', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_uk', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='kind', + field=models.CharField(default=b'book', max_length=10, verbose_name='kind', db_index=True, choices=[(b'book', 'book'), (b'picture', b'picture')]), + ), + migrations.AlterField( + model_name='collection', + name='slug', + field=models.SlugField(max_length=120, serialize=False, verbose_name='slug', primary_key=True), + ), + migrations.AlterField( + model_name='collection', + name='title', + field=models.CharField(max_length=120, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_de', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_en', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_es', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_fr', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_it', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_lt', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_pl', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_ru', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_uk', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='tag', + name='category', + field=models.CharField(db_index=True, max_length=50, verbose_name='category', choices=[(b'author', 'author'), (b'epoch', 'epoch'), (b'kind', 'kind'), (b'genre', 'genre'), (b'theme', 'theme'), (b'set', 'set'), (b'thing', 'thing')]), + ), + migrations.AlterField( + model_name='tag', + name='description', + field=models.TextField(verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_de', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_en', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_es', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_fr', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_it', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_lt', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_pl', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_ru', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_uk', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='slug', + field=models.SlugField(max_length=120, verbose_name='slug'), + ), + migrations.AlterField( + model_name='tag', + name='sort_key', + field=models.CharField(max_length=120, verbose_name='sort key', db_index=True), + ), + ] diff --git a/src/catalogue/migrations/__init__.py b/src/catalogue/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/catalogue/models/__init__.py b/src/catalogue/models/__init__.py new file mode 100644 index 000000000..73b51090c --- /dev/null +++ b/src/catalogue/models/__init__.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from catalogue.models.tag import Tag +from catalogue.models.bookmedia import BookMedia +from catalogue.models.fragment import Fragment +from catalogue.models.book import Book +from catalogue.models.collection import Collection +from catalogue.models.source import Source diff --git a/src/catalogue/models/book.py b/src/catalogue/models/book.py new file mode 100644 index 000000000..5f68e09ff --- /dev/null +++ b/src/catalogue/models/book.py @@ -0,0 +1,552 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from collections import OrderedDict +from random import randint +import re +from django.conf import settings +from django.db import connection, models, transaction +from django.db.models import permalink +import django.dispatch +from django.contrib.contenttypes.fields import GenericRelation +from django.core.urlresolvers import reverse +from django.utils.translation import ugettext_lazy as _ +import jsonfield +from fnpdjango.storage import BofhFileSystemStorage +from ssify import flush_ssi_includes +from newtagging import managers +from catalogue import constants +from catalogue.fields import EbookField +from catalogue.models import Tag, Fragment, BookMedia +from catalogue.utils import create_zip +from catalogue import app_settings +from catalogue import tasks + +bofh_storage = BofhFileSystemStorage() + + +def _cover_upload_to(i, n): + return 'book/cover/%s.jpg' % i.slug + +def _cover_thumb_upload_to(i, n): + return 'book/cover_thumb/%s.jpg' % i.slug + +def _ebook_upload_to(upload_path): + def _upload_to(i, n): + return upload_path % i.slug + return _upload_to + + +class Book(models.Model): + """Represents a book imported from WL-XML.""" + title = models.CharField(_('title'), max_length=32767) + sort_key = models.CharField(_('sort key'), max_length=120, db_index=True, editable=False) + sort_key_author = models.CharField(_('sort key by author'), max_length=120, db_index=True, editable=False, default=u'') + slug = models.SlugField(_('slug'), max_length=120, db_index=True, + unique=True) + common_slug = models.SlugField(_('slug'), max_length=120, db_index=True) + language = models.CharField(_('language code'), max_length=3, db_index=True, + default=app_settings.DEFAULT_LANGUAGE) + description = models.TextField(_('description'), blank=True) + created_at = models.DateTimeField(_('creation date'), auto_now_add=True, db_index=True) + changed_at = models.DateTimeField(_('creation date'), auto_now=True, db_index=True) + parent_number = models.IntegerField(_('parent number'), default=0) + extra_info = jsonfield.JSONField(_('extra information'), default={}) + gazeta_link = models.CharField(blank=True, max_length=240) + wiki_link = models.CharField(blank=True, max_length=240) + # files generated during publication + + cover = EbookField('cover', _('cover'), + null=True, blank=True, + upload_to=_cover_upload_to, + storage=bofh_storage, max_length=255) + # Cleaner version of cover for thumbs + cover_thumb = EbookField('cover_thumb', _('cover thumbnail'), + null=True, blank=True, + upload_to=_cover_thumb_upload_to, + max_length=255) + ebook_formats = constants.EBOOK_FORMATS + formats = ebook_formats + ['html', 'xml'] + + parent = models.ForeignKey('self', blank=True, null=True, + related_name='children') + ancestor = models.ManyToManyField('self', blank=True, + editable=False, related_name='descendant', symmetrical=False) + + objects = models.Manager() + tagged = managers.ModelTaggedItemManager(Tag) + tags = managers.TagDescriptor(Tag) + tag_relations = GenericRelation(Tag.intermediary_table_model) + + html_built = django.dispatch.Signal() + published = django.dispatch.Signal() + + short_html_url_name = 'catalogue_book_short' + + class AlreadyExists(Exception): + pass + + class Meta: + ordering = ('sort_key',) + verbose_name = _('book') + verbose_name_plural = _('books') + app_label = 'catalogue' + + def __unicode__(self): + return self.title + + def save(self, force_insert=False, force_update=False, **kwargs): + from sortify import sortify + + self.sort_key = sortify(self.title)[:120] + self.title = unicode(self.title) # ??? + + try: + author = self.tags.filter(category='author')[0].sort_key + except IndexError: + author = u'' + self.sort_key_author = author + + ret = super(Book, self).save(force_insert, force_update, **kwargs) + + return ret + + @permalink + def get_absolute_url(self): + return ('catalogue.views.book_detail', [self.slug]) + + @staticmethod + @permalink + def create_url(slug): + return ('catalogue.views.book_detail', [slug]) + + @property + def name(self): + return self.title + + def language_code(self): + return constants.LANGUAGES_3TO2.get(self.language, self.language) + + def language_name(self): + return dict(settings.LANGUAGES).get(self.language_code(), "") + + def has_media(self, type_): + if type_ in Book.formats: + return bool(getattr(self, "%s_file" % type_)) + else: + return self.media.filter(type=type_).exists() + + def get_media(self, type_): + if self.has_media(type_): + if type_ in Book.formats: + return getattr(self, "%s_file" % type_) + else: + return self.media.filter(type=type_) + else: + return None + + def get_mp3(self): + return self.get_media("mp3") + def get_odt(self): + return self.get_media("odt") + def get_ogg(self): + return self.get_media("ogg") + def get_daisy(self): + return self.get_media("daisy") + + def has_description(self): + return len(self.description) > 0 + has_description.short_description = _('description') + has_description.boolean = True + + # ugly ugly ugly + def has_mp3_file(self): + return bool(self.has_media("mp3")) + has_mp3_file.short_description = 'MP3' + has_mp3_file.boolean = True + + def has_ogg_file(self): + return bool(self.has_media("ogg")) + has_ogg_file.short_description = 'OGG' + has_ogg_file.boolean = True + + def has_daisy_file(self): + return bool(self.has_media("daisy")) + has_daisy_file.short_description = 'DAISY' + has_daisy_file.boolean = True + + def wldocument(self, parse_dublincore=True, inherit=True): + from catalogue.import_utils import ORMDocProvider + from librarian.parser import WLDocument + + if inherit and self.parent: + meta_fallbacks = self.parent.cover_info() + else: + meta_fallbacks = None + + return WLDocument.from_file(self.xml_file.path, + provider=ORMDocProvider(self), + parse_dublincore=parse_dublincore, + meta_fallbacks=meta_fallbacks) + + @staticmethod + def zip_format(format_): + def pretty_file_name(book): + return "%s/%s.%s" % ( + book.extra_info['author'], + book.slug, + format_) + + field_name = "%s_file" % format_ + books = Book.objects.filter(parent=None).exclude(**{field_name: ""}) + paths = [(pretty_file_name(b), getattr(b, field_name).path) + for b in books.iterator()] + return create_zip(paths, app_settings.FORMAT_ZIPS[format_]) + + def zip_audiobooks(self, format_): + bm = BookMedia.objects.filter(book=self, type=format_) + paths = map(lambda bm: (None, bm.file.path), bm) + return create_zip(paths, "%s_%s" % (self.slug, format_)) + + def search_index(self, book_info=None, index=None, index_tags=True, commit=True): + if index is None: + from search.index import Index + index = Index() + try: + index.index_book(self, book_info) + if index_tags: + index.index_tags() + if commit: + index.index.commit() + except Exception, e: + index.index.rollback() + raise e + + + @classmethod + def from_xml_file(cls, xml_file, **kwargs): + from django.core.files import File + from librarian import dcparser + + # use librarian to parse meta-data + book_info = dcparser.parse(xml_file) + + if not isinstance(xml_file, File): + xml_file = File(open(xml_file)) + + try: + return cls.from_text_and_meta(xml_file, book_info, **kwargs) + finally: + xml_file.close() + + @classmethod + def from_text_and_meta(cls, raw_file, book_info, overwrite=False, + dont_build=None, search_index=True, + search_index_tags=True): + if dont_build is None: + dont_build = set() + dont_build = set.union(set(dont_build), set(app_settings.DONT_BUILD)) + + # check for parts before we do anything + children = [] + if hasattr(book_info, 'parts'): + for part_url in book_info.parts: + try: + children.append(Book.objects.get(slug=part_url.slug)) + except Book.DoesNotExist: + raise Book.DoesNotExist(_('Book "%s" does not exist.') % + part_url.slug) + + # Read book metadata + book_slug = book_info.url.slug + if re.search(r'[^a-z0-9-]', book_slug): + raise ValueError('Invalid characters in slug') + book, created = Book.objects.get_or_create(slug=book_slug) + + if created: + book_shelves = [] + old_cover = None + else: + if not overwrite: + raise Book.AlreadyExists(_('Book %s already exists') % ( + book_slug)) + # Save shelves for this book + book_shelves = list(book.tags.filter(category='set')) + old_cover = book.cover_info() + + # Save XML file + book.xml_file.save('%s.xml' % book.slug, raw_file, save=False) + + book.language = book_info.language + book.title = book_info.title + if book_info.variant_of: + book.common_slug = book_info.variant_of.slug + else: + book.common_slug = book.slug + book.extra_info = book_info.to_dict() + book.save() + + meta_tags = Tag.tags_from_info(book_info) + + book.tags = set(meta_tags + book_shelves) + + cover_changed = old_cover != book.cover_info() + obsolete_children = set(b for b in book.children.all() + if b not in children) + notify_cover_changed = [] + for n, child_book in enumerate(children): + new_child = child_book.parent != book + child_book.parent = book + child_book.parent_number = n + child_book.save() + if new_child or cover_changed: + notify_cover_changed.append(child_book) + # Disown unfaithful children and let them cope on their own. + for child in obsolete_children: + child.parent = None + child.parent_number = 0 + child.save() + if old_cover: + notify_cover_changed.append(child) + + cls.repopulate_ancestors() + + # No saves beyond this point. + + # Build cover. + if 'cover' not in dont_build: + book.cover.build_delay() + book.cover_thumb.build_delay() + + # Build HTML and ebooks. + book.html_file.build_delay() + if not children: + for format_ in constants.EBOOK_FORMATS_WITHOUT_CHILDREN: + if format_ not in dont_build: + getattr(book, '%s_file' % format_).build_delay() + for format_ in constants.EBOOK_FORMATS_WITH_CHILDREN: + if format_ not in dont_build: + getattr(book, '%s_file' % format_).build_delay() + + if not settings.NO_SEARCH_INDEX and search_index: + tasks.index_book.delay(book.id, book_info=book_info, index_tags=search_index_tags) + + for child in notify_cover_changed: + child.parent_cover_changed() + + cls.published.send(sender=cls, instance=book) + return book + + @classmethod + def repopulate_ancestors(cls): + """Fixes the ancestry cache.""" + # TODO: table names + with transaction.atomic(): + cursor = connection.cursor() + if connection.vendor == 'postgres': + cursor.execute("TRUNCATE catalogue_book_ancestor") + cursor.execute(""" + WITH RECURSIVE ancestry AS ( + SELECT book.id, book.parent_id + FROM catalogue_book AS book + WHERE book.parent_id IS NOT NULL + UNION + SELECT ancestor.id, book.parent_id + FROM ancestry AS ancestor, catalogue_book AS book + WHERE ancestor.parent_id = book.id + AND book.parent_id IS NOT NULL + ) + INSERT INTO catalogue_book_ancestor + (from_book_id, to_book_id) + SELECT id, parent_id + FROM ancestry + ORDER BY id; + """) + else: + cursor.execute("DELETE FROM catalogue_book_ancestor") + for b in cls.objects.exclude(parent=None): + parent = b.parent + while parent is not None: + b.ancestor.add(parent) + parent = parent.parent + + def flush_includes(self, languages=True): + if not languages: + return + if languages is True: + languages = [lc for (lc, _ln) in settings.LANGUAGES] + flush_ssi_includes([ + template % (self.pk, lang) + for template in [ + '/katalog/b/%d/mini.%s.html', + '/katalog/b/%d/mini_nolink.%s.html', + '/katalog/b/%d/short.%s.html', + '/katalog/b/%d/wide.%s.html', + '/api/include/book/%d.%s.json', + '/api/include/book/%d.%s.xml', + ] + for lang in languages + ]) + + def cover_info(self, inherit=True): + """Returns a dictionary to serve as fallback for BookInfo. + + For now, the only thing inherited is the cover image. + """ + need = False + info = {} + for field in ('cover_url', 'cover_by', 'cover_source'): + val = self.extra_info.get(field) + if val: + info[field] = val + else: + need = True + if inherit and need and self.parent is not None: + parent_info = self.parent.cover_info() + parent_info.update(info) + info = parent_info + return info + + def related_themes(self): + return Tag.objects.usage_for_queryset( + Fragment.objects.filter(models.Q(book=self) | models.Q(book__ancestor=self)), + counts=True).filter(category='theme') + + def parent_cover_changed(self): + """Called when parent book's cover image is changed.""" + if not self.cover_info(inherit=False): + if 'cover' not in app_settings.DONT_BUILD: + self.cover.build_delay() + self.cover_thumb.build_delay() + for format_ in constants.EBOOK_FORMATS_WITH_COVERS: + if format_ not in app_settings.DONT_BUILD: + getattr(self, '%s_file' % format_).build_delay() + for child in self.children.all(): + child.parent_cover_changed() + + def other_versions(self): + """Find other versions (i.e. in other languages) of the book.""" + return type(self).objects.filter(common_slug=self.common_slug).exclude(pk=self.pk) + + def parents(self): + books = [] + parent = self.parent + while parent is not None: + books.insert(0, parent) + parent = parent.parent + return books + + def pretty_title(self, html_links=False): + names = [(tag.name, tag.get_absolute_url()) + for tag in self.tags.filter(category='author')] + books = self.parents() + [self] + names.extend([(b.title, b.get_absolute_url()) for b in books]) + + if html_links: + names = ['%s' % (tag[1], tag[0]) for tag in names] + else: + names = [tag[0] for tag in names] + return ', '.join(names) + + @classmethod + def tagged_top_level(cls, tags): + """ Returns top-level books tagged with `tags`. + + It only returns those books which don't have ancestors which are + also tagged with those tags. + + """ + objects = cls.tagged.with_all(tags) + return objects.exclude(ancestor__in=objects) + + @classmethod + def book_list(cls, filter=None): + """Generates a hierarchical listing of all books. + + Books are optionally filtered with a test function. + + """ + + books_by_parent = {} + books = cls.objects.all().order_by('parent_number', 'sort_key').only( + 'title', 'parent', 'slug') + if filter: + books = books.filter(filter).distinct() + + book_ids = set(b['pk'] for b in books.values("pk").iterator()) + for book in books.iterator(): + parent = book.parent_id + if parent not in book_ids: + parent = None + books_by_parent.setdefault(parent, []).append(book) + else: + for book in books.iterator(): + books_by_parent.setdefault(book.parent_id, []).append(book) + + orphans = [] + books_by_author = OrderedDict() + for tag in Tag.objects.filter(category='author').iterator(): + books_by_author[tag] = [] + + for book in books_by_parent.get(None, ()): + authors = list(book.tags.filter(category='author')) + if authors: + for author in authors: + books_by_author[author].append(book) + else: + orphans.append(book) + + return books_by_author, orphans, books_by_parent + + _audiences_pl = { + "SP": (1, u"szkoła podstawowa"), + "SP1": (1, u"szkoła podstawowa"), + "SP2": (1, u"szkoła podstawowa"), + "P": (1, u"szkoła podstawowa"), + "G": (2, u"gimnazjum"), + "L": (3, u"liceum"), + "LP": (3, u"liceum"), + } + def audiences_pl(self): + audiences = self.extra_info.get('audiences', []) + audiences = sorted(set([self._audiences_pl.get(a, (99, a)) for a in audiences])) + return [a[1] for a in audiences] + + def stage_note(self): + stage = self.extra_info.get('stage') + if stage and stage < '0.4': + return (_('This work needs modernisation'), + reverse('infopage', args=['wymagajace-uwspolczesnienia'])) + else: + return None, None + + def choose_fragment(self): + fragments = self.fragments.order_by() + fragments_count = fragments.count() + if not fragments_count and self.children.exists(): + fragments = Fragment.objects.filter(book__ancestor=self).order_by() + fragments_count = fragments.count() + if fragments_count: + return fragments[randint(0, fragments_count - 1)] + elif self.parent: + return self.parent.choose_fragment() + else: + return None + + +# add the file fields +for format_ in Book.formats: + field_name = "%s_file" % format_ + # This weird globals() assignment makes Django migrations comfortable. + _upload_to = _ebook_upload_to('book/%s/%%s.%s' % (format_, format_)) + _upload_to.__name__ = '_%s_upload_to' % format_ + globals()[_upload_to.__name__] = _upload_to + + EbookField(format_, _("%s file" % format_.upper()), + upload_to=_upload_to, + storage=bofh_storage, + max_length=255, + blank=True, + default='' + ).contribute_to_class(Book, field_name) diff --git a/src/catalogue/models/bookmedia.py b/src/catalogue/models/bookmedia.py new file mode 100644 index 000000000..1ef3fd7b9 --- /dev/null +++ b/src/catalogue/models/bookmedia.py @@ -0,0 +1,134 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from collections import OrderedDict +import json +from collections import namedtuple +from django.db import models +from django.utils.translation import ugettext_lazy as _ +import jsonfield +from fnpdjango.utils.text.slughifi import slughifi +from catalogue.fields import OverwritingFileField + + +def _file_upload_to(i, _n): + return 'book/%(ext)s/%(name)s.%(ext)s' % { + 'ext': i.ext(), 'name': slughifi(i.name)} + +class BookMedia(models.Model): + """Represents media attached to a book.""" + FileFormat = namedtuple("FileFormat", "name ext") + formats = OrderedDict([ + ('mp3', FileFormat(name='MP3', ext='mp3')), + ('ogg', FileFormat(name='Ogg Vorbis', ext='ogg')), + ('daisy', FileFormat(name='DAISY', ext='daisy.zip')), + ]) + format_choices = [(k, _('%s file' % t.name)) + for k, t in formats.items()] + + type = models.CharField(_('type'), db_index=True, choices=format_choices, max_length=20) + name = models.CharField(_('name'), max_length=512) + file = OverwritingFileField(_('file'), max_length=600, + upload_to=_file_upload_to) + uploaded_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False, db_index=True) + extra_info = jsonfield.JSONField(_('extra information'), default={}, editable=False) + book = models.ForeignKey('Book', related_name='media') + source_sha1 = models.CharField(null=True, blank=True, max_length=40, editable=False) + + def __unicode__(self): + return "%s (%s)" % (self.name, self.file.name.split("/")[-1]) + + class Meta: + ordering = ('type', 'name') + verbose_name = _('book media') + verbose_name_plural = _('book media') + app_label = 'catalogue' + + def save(self, *args, **kwargs): + from catalogue.utils import ExistingFile, remove_zip + + try: + old = BookMedia.objects.get(pk=self.pk) + except BookMedia.DoesNotExist: + old = None + else: + # if name changed, change the file name, too + if slughifi(self.name) != slughifi(old.name): + self.file.save(None, ExistingFile(self.file.path), save=False, leave=True) + + super(BookMedia, self).save(*args, **kwargs) + + # remove the zip package for book with modified media + if old: + remove_zip("%s_%s" % (old.book.slug, old.type)) + remove_zip("%s_%s" % (self.book.slug, self.type)) + + extra_info = self.extra_info + if isinstance(extra_info, basestring): + # Walkaround for weird jsonfield 'no-decode' optimization. + extra_info = json.loads(extra_info) + extra_info.update(self.read_meta()) + self.extra_info = extra_info + self.source_sha1 = self.read_source_sha1(self.file.path, self.type) + return super(BookMedia, self).save(*args, **kwargs) + + def read_meta(self): + """ + Reads some metadata from the audiobook. + """ + import mutagen + from mutagen import id3 + + artist_name = director_name = project = funded_by = '' + if self.type == 'mp3': + try: + audio = id3.ID3(self.file.path) + artist_name = ', '.join(', '.join(tag.text) for tag in audio.getall('TPE1')) + director_name = ', '.join(', '.join(tag.text) for tag in audio.getall('TPE3')) + project = ", ".join([t.data for t in audio.getall('PRIV') + if t.owner == 'wolnelektury.pl?project']) + funded_by = ", ".join([t.data for t in audio.getall('PRIV') + if t.owner == 'wolnelektury.pl?funded_by']) + except: + pass + elif self.type == 'ogg': + try: + audio = mutagen.File(self.file.path) + artist_name = ', '.join(audio.get('artist', [])) + director_name = ', '.join(audio.get('conductor', [])) + project = ", ".join(audio.get('project', [])) + funded_by = ", ".join(audio.get('funded_by', [])) + except: + pass + else: + return {} + return {'artist_name': artist_name, 'director_name': director_name, + 'project': project, 'funded_by': funded_by} + + def ext(self): + return self.formats[self.type].ext + + @staticmethod + def read_source_sha1(filepath, filetype): + """ + Reads source file SHA1 from audiobok metadata. + """ + import mutagen + from mutagen import id3 + + if filetype == 'mp3': + try: + audio = id3.ID3(filepath) + return [t.data for t in audio.getall('PRIV') + if t.owner == 'wolnelektury.pl?flac_sha1'][0] + except: + return None + elif filetype == 'ogg': + try: + audio = mutagen.File(filepath) + return audio.get('flac_sha1', [None])[0] + except: + return None + else: + return None diff --git a/src/catalogue/models/collection.py b/src/catalogue/models/collection.py new file mode 100644 index 000000000..098501eba --- /dev/null +++ b/src/catalogue/models/collection.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from ssify import flush_ssi_includes + + +class Collection(models.Model): + """A collection of books, which might be defined before publishing them.""" + title = models.CharField(_('title'), max_length=120, db_index=True) + slug = models.SlugField(_('slug'), max_length=120, primary_key=True) + description = models.TextField(_('description'), null=True, blank=True) + + models.SlugField(_('slug'), max_length=120, unique=True, db_index=True) + book_slugs = models.TextField(_('book slugs')) + + kind = models.CharField(_('kind'), max_length=10, blank=False, default='book', db_index=True, choices=((('book'), _('book')), (('picture'), ('picture')))) + + class Meta: + ordering = ('title',) + verbose_name = _('collection') + verbose_name_plural = _('collections') + app_label = 'catalogue' + + def __unicode__(self): + return self.title + + @models.permalink + def get_absolute_url(self): + return ("collection", [self.slug]) + + def get_query(self): + slugs = self.book_slugs.split() + # allow URIs + slugs = [slug.rstrip('/').rsplit('/', 1)[-1] if '/' in slug else slug + for slug in slugs] + return models.Q(slug__in=slugs) + + def flush_includes(self, languages=True): + if not languages: + return + if languages is True: + languages = [lc for (lc, _ln) in settings.LANGUAGES] + + flush_ssi_includes([ + '/katalog/%s.json' % lang for lang in languages]) diff --git a/src/catalogue/models/fragment.py b/src/catalogue/models/fragment.py new file mode 100644 index 000000000..a3dbdea54 --- /dev/null +++ b/src/catalogue/models/fragment.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django.contrib.contenttypes.fields import GenericRelation +from django.core.urlresolvers import reverse +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from newtagging import managers +from catalogue.models import Tag +from ssify import flush_ssi_includes + + +class Fragment(models.Model): + """Represents a themed fragment of a book.""" + text = models.TextField() + short_text = models.TextField(editable=False) + anchor = models.CharField(max_length=120) + book = models.ForeignKey('Book', related_name='fragments') + + objects = models.Manager() + tagged = managers.ModelTaggedItemManager(Tag) + tags = managers.TagDescriptor(Tag) + tag_relations = GenericRelation(Tag.intermediary_table_model) + + short_html_url_name = 'catalogue_fragment_short' + + class Meta: + ordering = ('book', 'anchor',) + verbose_name = _('fragment') + verbose_name_plural = _('fragments') + app_label = 'catalogue' + + def get_absolute_url(self): + return '%s#m%s' % (reverse('book_text', args=[self.book.slug]), self.anchor) + + def get_short_text(self): + """Returns short version of the fragment.""" + return self.short_text if self.short_text else self.text + + def flush_includes(self, languages=True): + if not languages: + return + if languages is True: + languages = [lc for (lc, _ln) in settings.LANGUAGES] + flush_ssi_includes([ + template % (self.pk, lang) + for template in [ + '/katalog/f/%d/short.%s.html', + '/api/include/fragment/%d.%s.json', + '/api/include/fragment/%d.%s.xml', + ] + for lang in languages + ]) diff --git a/src/catalogue/models/source.py b/src/catalogue/models/source.py new file mode 100644 index 000000000..9aff4efec --- /dev/null +++ b/src/catalogue/models/source.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.db import models +from django.utils.translation import ugettext_lazy as _ + + +class Source(models.Model): + """A collection of books, which might be defined before publishing them.""" + netloc = models.CharField(_('network location'), max_length=120, primary_key=True) + name = models.CharField(_('name'), max_length=120, blank=True) + + class Meta: + ordering = ('netloc',) + verbose_name = _('source') + verbose_name_plural = _('sources') + app_label = 'catalogue' + + def __unicode__(self): + return self.netloc + + def save(self, *args, **kwargs): + from catalogue.models import Book + try: + str(self.pk) + old_self = type(self).objects.get(pk=self) + except type(self).DoesNotExist: + old_name = u'' + old_netloc = self.netloc + else: + old_name = old_self.name + old_netloc = old_self.netloc + + ret = super(Source, self).save(*args, **kwargs) + + # If something really changed here, find relevant books + # and invalidate their cached includes. + if old_name != self.name or old_netloc != self.netloc: + for book in Book.objects.all(): + source = book.extra_info.get('source_url', '') + if self.netloc in source or (old_netloc != self.netloc + and old_netloc in source): + book.flush_includes() + return ret diff --git a/src/catalogue/models/tag.py b/src/catalogue/models/tag.py new file mode 100644 index 000000000..02bf6c07d --- /dev/null +++ b/src/catalogue/models/tag.py @@ -0,0 +1,233 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django.core.cache import caches +from django.contrib.auth.models import User +from django.db import models +from django.db.models import permalink +from django.dispatch import Signal +from django.utils.translation import ugettext_lazy as _ +from newtagging.models import TagBase +from ssify import flush_ssi_includes + + +# Those are hard-coded here so that makemessages sees them. +TAG_CATEGORIES = ( + ('author', _('author')), + ('epoch', _('epoch')), + ('kind', _('kind')), + ('genre', _('genre')), + ('theme', _('theme')), + ('set', _('set')), + ('thing', _('thing')), # things shown on pictures +) + + +class Tag(TagBase): + """A tag attachable to books and fragments (and possibly anything). + + Used to represent searchable metadata (authors, epochs, genres, kinds), + fragment themes (motifs) and some book hierarchy related kludges.""" + name = models.CharField(_('name'), max_length=120, db_index=True) + slug = models.SlugField(_('slug'), max_length=120, db_index=True) + sort_key = models.CharField(_('sort key'), max_length=120, db_index=True) + category = models.CharField(_('category'), max_length=50, blank=False, null=False, + db_index=True, choices=TAG_CATEGORIES) + description = models.TextField(_('description'), blank=True) + + user = models.ForeignKey(User, blank=True, null=True) + gazeta_link = models.CharField(blank=True, max_length=240) + culturepl_link = models.CharField(blank=True, max_length=240) + wiki_link = models.CharField(blank=True, max_length=240) + + created_at = models.DateTimeField(_('creation date'), auto_now_add=True, db_index=True) + changed_at = models.DateTimeField(_('creation date'), auto_now=True, db_index=True) + + after_change = Signal(providing_args=['instance', 'languages']) + + class UrlDeprecationWarning(DeprecationWarning): + pass + + categories_rev = { + 'autor': 'author', + 'epoka': 'epoch', + 'rodzaj': 'kind', + 'gatunek': 'genre', + 'motyw': 'theme', + 'polka': 'set', + 'obiekt': 'thing', + } + categories_dict = dict((item[::-1] for item in categories_rev.iteritems())) + + class Meta: + ordering = ('sort_key',) + verbose_name = _('tag') + verbose_name_plural = _('tags') + unique_together = (("slug", "category"),) + app_label = 'catalogue' + + def save(self, *args, **kwargs): + flush_cache = flush_all_includes = False + if self.pk and self.category != 'set': + # Flush the whole views cache. + # Seem a little harsh, but changed tag names, descriptions + # and links come up at any number of places. + flush_cache = True + + # Find in which languages we need to flush related includes. + old_self = type(self).objects.get(pk=self.pk) + # Category shouldn't normally be changed, but just in case. + if self.category != old_self.category: + flush_all_includes = True + languages_changed = self.languages_changed(old_self) + + ret = super(Tag, self).save(*args, **kwargs) + + if flush_cache: + caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() + if flush_all_includes: + flush_ssi_includes() + else: + self.flush_includes() + self.after_change.send(sender=type(self), instance=self, languages=languages_changed) + + return ret + + def languages_changed(self, old): + all_langs = [lc for (lc, _ln) in settings.LANGUAGES] + if (old.category, old.slug) != (self.category, self.slug): + return all_langs + languages = set() + for lang in all_langs: + name_field = 'name_%s' % lang + if getattr(old, name_field) != getattr(self, name_field): + languages.add(lang) + return languages + + def flush_includes(self, languages=True): + if not languages: + return + if languages is True: + languages = [lc for (lc, _ln) in settings.LANGUAGES] + flush_ssi_includes([ + template % (self.pk, lang) + for template in [ + '/api/include/tag/%d.%s.json', + '/api/include/tag/%d.%s.xml', + ] + for lang in languages + ]) + flush_ssi_includes([ + '/katalog/%s.json' % lang for lang in languages]) + + def __unicode__(self): + return self.name + + def __repr__(self): + return "Tag(slug=%r)" % self.slug + + @permalink + def get_absolute_url(self): + return ('catalogue.views.tagged_object_list', [self.url_chunk]) + + @classmethod + @permalink + def create_url(cls, category, slug): + return ('catalogue.views.tagged_object_list', [ + '/'.join((cls.categories_dict[category], slug)) + ]) + + def has_description(self): + return len(self.description) > 0 + has_description.short_description = _('description') + has_description.boolean = True + + @staticmethod + def get_tag_list(tags): + if isinstance(tags, basestring): + real_tags = [] + ambiguous_slugs = [] + category = None + deprecated = False + tags_splitted = tags.split('/') + for name in tags_splitted: + if category: + real_tags.append(Tag.objects.get(slug=name, category=category)) + category = None + elif name in Tag.categories_rev: + category = Tag.categories_rev[name] + else: + try: + real_tags.append(Tag.objects.get(slug=name)) + deprecated = True + except Tag.MultipleObjectsReturned, e: + ambiguous_slugs.append(name) + + if category: + # something strange left off + raise Tag.DoesNotExist() + if ambiguous_slugs: + # some tags should be qualified + e = Tag.MultipleObjectsReturned() + e.tags = real_tags + e.ambiguous_slugs = ambiguous_slugs + raise e + if deprecated: + e = Tag.UrlDeprecationWarning() + e.tags = real_tags + raise e + return real_tags + else: + return TagBase.get_tag_list(tags) + + @property + def url_chunk(self): + return '/'.join((Tag.categories_dict[self.category], self.slug)) + + @staticmethod + def tags_from_info(info): + from fnpdjango.utils.text.slughifi import slughifi + from sortify import sortify + meta_tags = [] + categories = (('kinds', 'kind'), ('genres', 'genre'), ('authors', 'author'), ('epochs', 'epoch')) + for field_name, category in categories: + try: + tag_names = getattr(info, field_name) + except: + try: + tag_names = [getattr(info, category)] + except: + # For instance, Pictures do not have 'genre' field. + continue + for tag_name in tag_names: + lang = getattr(tag_name, 'lang', settings.LANGUAGE_CODE) + tag_sort_key = tag_name + if category == 'author': + tag_sort_key = tag_name.last_name + tag_name = tag_name.readable() + if lang == settings.LANGUAGE_CODE: + # Allow creating new tag, if it's in default language. + tag, created = Tag.objects.get_or_create(slug=slughifi(tag_name), category=category) + if created: + tag_name = unicode(tag_name) + tag.name = tag_name + setattr(tag, "name_%s" % lang, tag_name) + tag.sort_key = sortify(tag_sort_key.lower()) + tag.save() + + meta_tags.append(tag) + else: + # Ignore unknown tags in non-default languages. + try: + tag = Tag.objects.get(category=category, **{"name_%s" % lang: tag_name}) + except Tag.DoesNotExist: + pass + else: + meta_tags.append(tag) + return meta_tags + + +# Pickle complains about not having this. +TagRelation = Tag.intermediary_table_model diff --git a/src/catalogue/signals.py b/src/catalogue/signals.py new file mode 100644 index 000000000..660d26493 --- /dev/null +++ b/src/catalogue/signals.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django.core.cache import caches +from django.db.models.signals import post_save, post_delete +from django.dispatch import receiver +from ssify import flush_ssi_includes +from newtagging.models import tags_updated +from picture.models import Picture, PictureArea +from .models import BookMedia, Book, Collection, Fragment, Tag + + +#### +# BookMedia +#### + + +@receiver([post_save, post_delete], sender=BookMedia) +def bookmedia_save(sender, instance, **kwargs): + instance.book.save() + + +#### +# Collection +#### + + +@receiver(post_save, sender=Collection) +def collection_save(sender, instance, **kwargs): + caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() + flush_ssi_includes([ + '/katalog/%s.json' % lang + for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) + + +@receiver(post_delete, sender=Collection) +def collection_delete(sender, instance, **kwargs): + flush_ssi_includes([ + '/katalog/%s.json' % lang + for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) + +#### +# Book +#### + + +@receiver(post_save, sender=Book) +def book_save(sender, instance, **kwargs): + # Books come out anywhere. + caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() + instance.flush_includes() + + +@receiver(post_delete, sender=Book) +def book_delete(sender, instance, **kwargs): + caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() + flush_ssi_includes([ + '/katalog/%s.json' % lang + for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) + + if not settings.NO_SEARCH_INDEX: + # remove the book from search index, when it is deleted. + from search.index import Index + idx = Index() + idx.remove_book(instance) + idx.index_tags() + + +#### +# Tag +#### + + +@receiver(Tag.after_change) +def tag_after_change(sender, instance, languages, **kwargs): + caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() + flush_ssi_includes([ + '/katalog/%s.json' % lang + for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) + + for model in Book, Picture: + for model_instance in model.tagged.with_all([instance]).only('pk'): + model_instance.flush_includes() + + if instance.category == 'author': + for model in Fragment, PictureArea: + for model_instance in model.tagged.with_all([instance]).only('pk'): + model_instance.flush_includes() + + +@receiver(tags_updated) +def receive_tags_updated(sender, instance, affected_tags, **kwargs): + categories = set(tag.category for tag in affected_tags + if tag.category not in ('set', 'book')) + if not categories: + return + + caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() + instance.flush_includes() + flush_ssi_includes([ + '/katalog/%s.json' % lang + for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) diff --git a/src/catalogue/static/jplayer/Jplayer.swf b/src/catalogue/static/jplayer/Jplayer.swf new file mode 100644 index 000000000..85c0ba38e Binary files /dev/null and b/src/catalogue/static/jplayer/Jplayer.swf differ diff --git a/src/catalogue/static/jplayer/jplayer.blue.monday.css b/src/catalogue/static/jplayer/jplayer.blue.monday.css new file mode 100644 index 000000000..f8b314b6e --- /dev/null +++ b/src/catalogue/static/jplayer/jplayer.blue.monday.css @@ -0,0 +1,627 @@ +/* + * Skin for jPlayer Plugin (jQuery JavaScript Library) + * http://www.happyworm.com/jquery/jplayer + * + * Skin Name: Blue Monday + * + * Copyright (c) 2010-2011 Happyworm Ltd + * Dual licensed under the MIT and GPL licenses. + * - http://www.opensource.org/licenses/mit-license.php + * - http://www.gnu.org/copyleft/gpl.html + * + * Author: Silvia Benvenuti + * Skin Version: 4.0 (jPlayer 2.1.0) + * Date: 1st September 2011 + */ + +div.jp-audio, +div.jp-video { + + /* Edit the font-size to counteract inherited font sizing. + * Eg. 1.25em = 1 / 0.8em + */ + + font-size:1.25em; /* 1.25em for testing in site pages */ /* No parent CSS that can effect the size in the demos ZIP */ + + font-family:Verdana, Arial, sans-serif; + line-height:1.6; + color: #565656; + border:1px solid #009be3; + background-color:#eee; + position:relative; +} +div.jp-audio { + width:420px; +} +div.jp-video-270p { + width:480px; +} +div.jp-video-360p { + width:640px; +} +div.jp-video-full { + /* Rules for IE6 (full-screen) */ + width:480px; + height:270px; + /* Rules for IE7 (full-screen) - Otherwise the relative container causes other page items that are not position:static (default) to appear over the video/gui. */ + position:static !important; position:relative +} + +div.jp-video-full div.jp-jplayer { + top: 0; + left: 0; + position: fixed !important; position: relative; /* Rules for IE6 (full-screen) */ + overflow: hidden; + z-index:1000; +} + +div.jp-video-full div.jp-gui { + position: fixed !important; position: static; /* Rules for IE6 (full-screen) */ + top: 0; + left: 0; + width:100%; + height:100%; + z-index:1000; +} + +div.jp-video-full div.jp-interface { + position: absolute !important; position: relative; /* Rules for IE6 (full-screen) */ + bottom: 0; + left: 0; + z-index:1000; +} + +div.jp-interface { + position: relative; + background-color:#eee; + width:100%; +} + +div.jp-interface a { + color: #0c767d; +} + +div.jp-audio div.jp-type-single div.jp-interface { + height:80px; +} +div.jp-audio div.jp-type-playlist div.jp-interface { + height:80px; +} + +div.jp-video div.jp-interface { + border-top:1px solid #009be3; +} + +/* @group CONTROLS */ + +div.jp-controls-holder { + clear: both; + width:440px; + margin:0 auto; + position: relative; + overflow:hidden; + top:-8px; /* This negative value depends on the size of the text in jp-currentTime and jp-duration */ +} + +div.jp-interface ul.jp-controls { + list-style-type:none; + margin:0; + padding: 0; + overflow:hidden; +} + +div.jp-audio ul.jp-controls { + width: 380px; + padding:20px 20px 0 20px; +} + +div.jp-video div.jp-type-single ul.jp-controls { + width: 78px; + margin-left: 200px; +} + +div.jp-video div.jp-type-playlist ul.jp-controls { + width: 134px; + margin-left: 172px; +} +div.jp-video ul.jp-controls, +div.jp-interface ul.jp-controls li { + display:inline; + float: left; +} + +div.jp-interface ul.jp-controls a { + display:block; + overflow:hidden; + text-indent:-9999px; +} +a.jp-play, +a.jp-pause { + width:40px; + height:40px; +} + +a.jp-play { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 0 no-repeat; +} +a.jp-play:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -41px 0 no-repeat; +} +a.jp-pause { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -42px no-repeat; + display: none; +} +a.jp-pause:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -41px -42px no-repeat; +} + +a.jp-stop, a.jp-previous, a.jp-next { + width:28px; + height:28px; + margin-top:6px; +} + +a.jp-stop { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -83px no-repeat; + margin-left:10px; +} + +a.jp-stop:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -29px -83px no-repeat; +} + +a.jp-previous { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -112px no-repeat; +} +a.jp-previous:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -29px -112px no-repeat; +} + +a.jp-next { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -141px no-repeat; +} +a.jp-next:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -29px -141px no-repeat; +} + +/* @end */ + +/* @group progress bar */ + +div.jp-progress { + overflow:hidden; + background-color: #ddd; +} +div.jp-audio div.jp-progress { + position: absolute; + top:32px; + height:15px; +} +div.jp-audio div.jp-type-single div.jp-progress { + left:110px; + width:186px; +} +div.jp-audio div.jp-type-playlist div.jp-progress { + left:166px; + width:130px; +} +div.jp-video div.jp-progress { + top:0px; + left:0px; + width:100%; + height:10px; +} +div.jp-seek-bar { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -202px repeat-x; + width:0px; + height:100%; + cursor: pointer; +} +div.jp-play-bar { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -218px repeat-x ; + width:0px; + height:100%; +} + +/* The seeking class is added/removed inside jPlayer */ +div.jp-seeking-bg { + background: url("/static/jplayer/jplayer.blue.monday.seeking.gif"); +} + +/* @end */ + +/* @group volume controls */ + + +a.jp-mute, +a.jp-unmute, +a.jp-volume-max { + width:18px; + height:15px; + margin-top:12px; +} + +div.jp-audio div.jp-type-single a.jp-mute, +div.jp-audio div.jp-type-single a.jp-unmute { + margin-left: 210px; +} + +div.jp-audio div.jp-type-playlist a.jp-mute, +div.jp-audio div.jp-type-playlist a.jp-unmute { + margin-left: 154px; +} + +div.jp-audio a.jp-volume-max { + margin-left: 56px; +} + +div.jp-video a.jp-mute, +div.jp-video a.jp-unmute, +div.jp-video a.jp-volume-max { + position: absolute; + top:12px; + margin-top:0; +} + +div.jp-video a.jp-mute, +div.jp-video a.jp-unmute { + left: 50px; +} + +div.jp-video a.jp-volume-max { + left: 134px; +} + +a.jp-mute { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -170px no-repeat; +} +a.jp-mute:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -19px -170px no-repeat; +} +a.jp-unmute { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -60px -170px no-repeat; + display: none; +} +a.jp-unmute:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -79px -170px no-repeat; +} + a.jp-volume-max { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -186px no-repeat; +} +a.jp-volume-max:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -19px -186px no-repeat; +} + +div.jp-volume-bar { + position: absolute; + overflow:hidden; + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -250px repeat-x; + width:46px; + height:5px; + cursor: pointer; +} +div.jp-audio div.jp-volume-bar { + top:37px; + left:330px; +} +div.jp-video div.jp-volume-bar { + top:17px; + left:72px; +} +div.jp-volume-bar-value { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -256px repeat-x; + width:0px; + height:5px; +} + +/* @end */ + +/* @group current time and duration */ + +div.jp-audio div.jp-time-holder { + position:absolute; + top:50px; +} +div.jp-audio div.jp-type-single div.jp-time-holder { + left:110px; + width:186px; +} +div.jp-audio div.jp-type-playlist div.jp-time-holder { + left:166px; + width:130px; +} + +div.jp-current-time, +div.jp-duration { + width:60px; + font-size:.64em; + font-style:oblique; +} +div.jp-current-time { + float: left; + display:inline; +} +div.jp-duration { + float: right; + display:inline; + text-align: right; +} + +div.jp-video div.jp-current-time { + margin-left:20px; +} +div.jp-video div.jp-duration { + margin-right:20px; +} + +/* @end */ + +/* @group playlist */ + +div.jp-title { + font-weight:bold; + text-align:center; +} + +div.jp-title, +div.jp-playlist { + width:100%; + background-color:#ccc; + border-top:1px solid #009be3; +} +div.jp-type-single div.jp-title, +div.jp-type-playlist div.jp-title, +div.jp-type-single div.jp-playlist { + border-top:none; +} +div.jp-title ul, +div.jp-playlist ul { + list-style-type:none; + margin:0; + padding:0 20px; + font-size:.8em; +} + +div.jp-title li { + padding:5px 0; + font-weight:bold; +} +div.jp-playlist li { + padding:5px 0 4px 20px; + border-bottom:1px solid #eee; +} + +div.jp-playlist li div { + display:inline; +} + +/* Note that the first-child (IE6) and last-child (IE6/7/8) selectors do not work on IE */ + +div.jp-type-playlist div.jp-playlist li:last-child { + padding:5px 0 5px 20px; + border-bottom:none; +} +div.jp-type-playlist div.jp-playlist li.jp-playlist-current { + list-style-type:square; + list-style-position:inside; + padding-left:7px; +} +div.jp-type-playlist div.jp-playlist a { + color: #333; + text-decoration: none; +} +div.jp-type-playlist div.jp-playlist a:hover { + color:#0D7E85; +} +div.jp-type-playlist div.jp-playlist a.jp-playlist-current { + color:#0D7E85; +} + +div.jp-type-playlist div.jp-playlist a.jp-playlist-item-remove { + float:right; + display:inline; + text-align:right; + margin-right:10px; + font-weight:bold; + color:#666; +} +div.jp-type-playlist div.jp-playlist a.jp-playlist-item-remove:hover { + color:#0D7E85; +} +div.jp-type-playlist div.jp-playlist span.jp-free-media { + float:right; + display:inline; + text-align:right; + margin-right:10px; +} +div.jp-type-playlist div.jp-playlist span.jp-free-media a{ + color:#565656; +} +div.jp-type-playlist div.jp-playlist span.jp-free-media a:hover{ + color:#0D7E85; +} +span.jp-artist { + font-size:.8em; + color:#565656; +} + +/* @end */ + +div.jp-video-play { + position:absolute; + top:0; + left:0; + width:100%; + cursor:pointer; + background-color:rgba(0,0,0,0); /* Makes IE9 work with the active area over the whole video area. IE6/7/8 only have the button as active area. */ +} +div.jp-video-270p div.jp-video-play { + height:270px; +} +div.jp-video-360p div.jp-video-play { + height:360px; +} +div.jp-video-full div.jp-video-play { + height:100%; + z-index:1000; +} +a.jp-video-play-icon { + position:relative; + display:block; + width: 112px; + height: 100px; + + margin-left:-56px; + margin-top:-50px; + left:50%; + top:50%; + + background: url("/static/jplayer/jplayer.blue.monday.video.play.png") 0 0 no-repeat; + text-indent:-9999px; +} +div.jp-video-play:hover a.jp-video-play-icon { + background: url("/static/jplayer/jplayer.blue.monday.video.play.png") 0 -100px no-repeat; +} + + + + + +div.jp-jplayer audio, +div.jp-jplayer { + width:0px; + height:0px; +} + +div.jp-jplayer { + background-color: #000000; +} + + + + + +/* @group TOGGLES */ + +/* The audio toggles are nested inside jp-time-holder */ + +ul.jp-toggles { + list-style-type:none; + padding:0; + margin:0 auto; + overflow:hidden; +} + +div.jp-audio .jp-type-single ul.jp-toggles { + width:25px; +} +div.jp-audio .jp-type-playlist ul.jp-toggles { + width:55px; + margin: 0; + position: absolute; + left: 325px; + top: 50px; +} + +div.jp-video ul.jp-toggles { + margin-top:10px; + width:100px; +} + +ul.jp-toggles li { + display:block; + float:right; +} + +ul.jp-toggles li a { + display:block; + width:25px; + height:18px; + text-indent:-9999px; + line-height:100%; /* need this for IE6 */ +} + +a.jp-full-screen { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -310px no-repeat; + margin-left: 20px; +} + +a.jp-full-screen:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -30px -310px no-repeat; +} + +a.jp-restore-screen { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -60px -310px no-repeat; + margin-left: 20px; +} + +a.jp-restore-screen:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -90px -310px no-repeat; +} + +a.jp-repeat { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -290px no-repeat; +} + +a.jp-repeat:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -30px -290px no-repeat; +} + +a.jp-repeat-off { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -60px -290px no-repeat; +} + +a.jp-repeat-off:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -90px -290px no-repeat; +} + +a.jp-shuffle { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -270px no-repeat; + margin-left: 5px; +} + +a.jp-shuffle:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -30px -270px no-repeat; +} + +a.jp-shuffle-off { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -60px -270px no-repeat; + margin-left: 5px; +} + +a.jp-shuffle-off:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -90px -270px no-repeat; +} + + +/* @end */ + +/* @group NO SOLUTION error feedback */ + +.jp-no-solution { + position:absolute; + width:390px; + margin-left:-202px; + left:50%; + top: 10px; + + padding:5px; + font-size:.8em; + background-color:#eee; + border:2px solid #009be3; + color:#000; + display:none; +} + +.jp-no-solution a { + color:#000; +} + +.jp-no-solution span { + font-size:1em; + display:block; + text-align:center; + font-weight:bold; +} + +/* @end */ diff --git a/src/catalogue/static/jplayer/jplayer.blue.monday.jpg b/src/catalogue/static/jplayer/jplayer.blue.monday.jpg new file mode 100644 index 000000000..adab53ff7 Binary files /dev/null and b/src/catalogue/static/jplayer/jplayer.blue.monday.jpg differ diff --git a/src/catalogue/static/jplayer/jplayer.blue.monday.seeking.gif b/src/catalogue/static/jplayer/jplayer.blue.monday.seeking.gif new file mode 100644 index 000000000..dbd2105ab Binary files /dev/null and b/src/catalogue/static/jplayer/jplayer.blue.monday.seeking.gif differ diff --git a/src/catalogue/static/jplayer/jplayer.blue.monday.video.play.png b/src/catalogue/static/jplayer/jplayer.blue.monday.video.play.png new file mode 100644 index 000000000..8e97df011 Binary files /dev/null and b/src/catalogue/static/jplayer/jplayer.blue.monday.video.play.png differ diff --git a/src/catalogue/static/jplayer/jplayer.playlist.min.js b/src/catalogue/static/jplayer/jplayer.playlist.min.js new file mode 100644 index 000000000..138ccfa5e --- /dev/null +++ b/src/catalogue/static/jplayer/jplayer.playlist.min.js @@ -0,0 +1,34 @@ +/* + * Playlist Object for the jPlayer Plugin + * http://www.jplayer.org + * + * Copyright (c) 2009 - 2013 Happyworm Ltd + * Dual licensed under the MIT and GPL licenses. + * - http://www.opensource.org/licenses/mit-license.php + * - http://www.gnu.org/copyleft/gpl.html + * + * Author: Mark J Panaghiston + * Version: 2.3.0 + * Date: 20th April 2013 + * + * Requires: + * - jQuery 1.7.0+ + * - jPlayer 2.3.0+ + */ +(function(b,f){jPlayerPlaylist=function(a,c,d){var e=this;this.current=0;this.removing=this.shuffled=this.loop=!1;this.cssSelector=b.extend({},this._cssSelector,a);this.options=b.extend(!0,{keyBindings:{next:{key:39,fn:function(){e.next()}},previous:{key:37,fn:function(){e.previous()}}}},this._options,d);this.playlist=[];this.original=[];this._initPlaylist(c);this.cssSelector.title=this.cssSelector.cssSelectorAncestor+" .jp-title";this.cssSelector.playlist=this.cssSelector.cssSelectorAncestor+" .jp-playlist"; +this.cssSelector.next=this.cssSelector.cssSelectorAncestor+" .jp-next";this.cssSelector.previous=this.cssSelector.cssSelectorAncestor+" .jp-previous";this.cssSelector.shuffle=this.cssSelector.cssSelectorAncestor+" .jp-shuffle";this.cssSelector.shuffleOff=this.cssSelector.cssSelectorAncestor+" .jp-shuffle-off";this.options.cssSelectorAncestor=this.cssSelector.cssSelectorAncestor;this.options.repeat=function(a){e.loop=a.jPlayer.options.loop};b(this.cssSelector.jPlayer).bind(b.jPlayer.event.ready,function(){e._init()}); +b(this.cssSelector.jPlayer).bind(b.jPlayer.event.ended,function(){e.next()});b(this.cssSelector.jPlayer).bind(b.jPlayer.event.play,function(){b(this).jPlayer("pauseOthers")});b(this.cssSelector.jPlayer).bind(b.jPlayer.event.resize,function(a){a.jPlayer.options.fullScreen?b(e.cssSelector.title).show():b(e.cssSelector.title).hide()});b(this.cssSelector.previous).click(function(){e.previous();b(this).blur();return!1});b(this.cssSelector.next).click(function(){e.next();b(this).blur();return!1});b(this.cssSelector.shuffle).click(function(){e.shuffle(!0); +return!1});b(this.cssSelector.shuffleOff).click(function(){e.shuffle(!1);return!1}).hide();this.options.fullScreen||b(this.cssSelector.title).hide();b(this.cssSelector.playlist+" ul").empty();this._createItemHandlers();b(this.cssSelector.jPlayer).jPlayer(this.options)};jPlayerPlaylist.prototype={_cssSelector:{jPlayer:"#jquery_jplayer_1",cssSelectorAncestor:"#jp_container_1"},_options:{playlistOptions:{autoPlay:!1,loopOnPrevious:!1,shuffleOnLoop:!0,enableRemoveControls:!1,displayTime:"slow",addTime:"fast", +removeTime:"fast",shuffleTime:"slow",itemClass:"jp-playlist-item",freeGroupClass:"jp-free-media",freeItemClass:"jp-playlist-item-free",removeItemClass:"jp-playlist-item-remove"}},option:function(a,b){if(b===f)return this.options.playlistOptions[a];this.options.playlistOptions[a]=b;switch(a){case "enableRemoveControls":this._updateControls();break;case "itemClass":case "freeGroupClass":case "freeItemClass":case "removeItemClass":this._refresh(!0),this._createItemHandlers()}return this},_init:function(){var a= +this;this._refresh(function(){a.options.playlistOptions.autoPlay?a.play(a.current):a.select(a.current)})},_initPlaylist:function(a){this.current=0;this.removing=this.shuffled=!1;this.original=b.extend(!0,[],a);this._originalPlaylist()},_originalPlaylist:function(){var a=this;this.playlist=[];b.each(this.original,function(b){a.playlist[b]=a.original[b]})},_refresh:function(a){var c=this;if(a&&!b.isFunction(a))b(this.cssSelector.playlist+" ul").empty(),b.each(this.playlist,function(a){b(c.cssSelector.playlist+ +" ul").append(c._createListItem(c.playlist[a]))}),this._updateControls();else{var d=b(this.cssSelector.playlist+" ul").children().length?this.options.playlistOptions.displayTime:0;b(this.cssSelector.playlist+" ul").slideUp(d,function(){var d=b(this);b(this).empty();b.each(c.playlist,function(a){d.append(c._createListItem(c.playlist[a]))});c._updateControls();b.isFunction(a)&&a();c.playlist.length?b(this).slideDown(c.options.playlistOptions.displayTime):b(this).show()})}},_createListItem:function(a){var c= +this,d="
              • ",d=d+("×");if(a.free){var e=!0,d=d+("(");b.each(a,function(a,f){b.jPlayer.prototype.format[a]&&(e?e=!1:d+=" | ",d+=""+a+"")});d+=")"}d+=""+a.title+(a.artist? +" ":"")+"";return d+="
              • "},_createItemHandlers:function(){var a=this;b(this.cssSelector.playlist).off("click","a."+this.options.playlistOptions.itemClass).on("click","a."+this.options.playlistOptions.itemClass,function(){var c=b(this).parent().parent().index();a.current!==c?a.play(c):b(a.cssSelector.jPlayer).jPlayer("play");b(this).blur();return!1});b(this.cssSelector.playlist).off("click","a."+this.options.playlistOptions.freeItemClass).on("click", +"a."+this.options.playlistOptions.freeItemClass,function(){b(this).parent().parent().find("."+a.options.playlistOptions.itemClass).click();b(this).blur();return!1});b(this.cssSelector.playlist).off("click","a."+this.options.playlistOptions.removeItemClass).on("click","a."+this.options.playlistOptions.removeItemClass,function(){var c=b(this).parent().parent().index();a.remove(c);b(this).blur();return!1})},_updateControls:function(){this.options.playlistOptions.enableRemoveControls?b(this.cssSelector.playlist+ +" ."+this.options.playlistOptions.removeItemClass).show():b(this.cssSelector.playlist+" ."+this.options.playlistOptions.removeItemClass).hide();this.shuffled?(b(this.cssSelector.shuffleOff).show(),b(this.cssSelector.shuffle).hide()):(b(this.cssSelector.shuffleOff).hide(),b(this.cssSelector.shuffle).show())},_highlight:function(a){this.playlist.length&&a!==f&&(b(this.cssSelector.playlist+" .jp-playlist-current").removeClass("jp-playlist-current"),b(this.cssSelector.playlist+" li:nth-child("+(a+1)+ +")").addClass("jp-playlist-current").find(".jp-playlist-item").addClass("jp-playlist-current"),b(this.cssSelector.title+" li").html(this.playlist[a].title+(this.playlist[a].artist?" ":"")))},setPlaylist:function(a){this._initPlaylist(a);this._init()},add:function(a,c){b(this.cssSelector.playlist+" ul").append(this._createListItem(a)).find("li:last-child").hide().slideDown(this.options.playlistOptions.addTime);this._updateControls();this.original.push(a); +this.playlist.push(a);c?this.play(this.playlist.length-1):1===this.original.length&&this.select(0)},remove:function(a){var c=this;if(a===f)return this._initPlaylist([]),this._refresh(function(){b(c.cssSelector.jPlayer).jPlayer("clearMedia")}),!0;if(this.removing)return!1;a=0>a?c.original.length+a:a;0<=a&&aa?this.original.length+a:a;0<=a&&aa?this.original.length+a:a;0<=a&&ab?"0"+b:b;a=this.options.timeFormat.padMin&&10>a?"0"+a:a;c=this.options.timeFormat.padSec&&10>c?"0"+c:c;b=""+(this.options.timeFormat.showHour?b+this.options.timeFormat.sepHour:"");b+=this.options.timeFormat.showMin?a+this.options.timeFormat.sepMin:"";return b+=this.options.timeFormat.showSec?c+this.options.timeFormat.sepSec:""}};var m=new l;b.jPlayer.convertTime=function(a){return m.time(a)}; +b.jPlayer.uaBrowser=function(a){a=a.toLowerCase();var b=/(opera)(?:.*version)?[ \/]([\w.]+)/,d=/(msie) ([\w.]+)/,e=/(mozilla)(?:.*? rv:([\w.]+))?/;a=/(webkit)[ \/]([\w.]+)/.exec(a)||b.exec(a)||d.exec(a)||0>a.indexOf("compatible")&&e.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}};b.jPlayer.uaPlatform=function(a){var b=a.toLowerCase(),d=/(android)/,e=/(mobile)/;a=/(ipad|iphone|ipod|android|blackberry|playbook|windows ce|webos)/.exec(b)||[];b=/(ipad|playbook)/.exec(b)||!e.exec(b)&&d.exec(b)|| +[];a[1]&&(a[1]=a[1].replace(/\s/g,"_"));return{platform:a[1]||"",tablet:b[1]||""}};b.jPlayer.browser={};b.jPlayer.platform={};var j=b.jPlayer.uaBrowser(navigator.userAgent);j.browser&&(b.jPlayer.browser[j.browser]=!0,b.jPlayer.browser.version=j.version);j=b.jPlayer.uaPlatform(navigator.userAgent);j.platform&&(b.jPlayer.platform[j.platform]=!0,b.jPlayer.platform.mobile=!j.tablet,b.jPlayer.platform.tablet=!!j.tablet);b.jPlayer.getDocMode=function(){var a;b.jPlayer.browser.msie&&(document.documentMode? +a=document.documentMode:(a=5,document.compatMode&&"CSS1Compat"===document.compatMode&&(a=7)));return a};b.jPlayer.browser.documentMode=b.jPlayer.getDocMode();b.jPlayer.nativeFeatures={init:function(){var a=document,b=a.createElement("video"),d={w3c:"fullscreenEnabled fullscreenElement requestFullscreen exitFullscreen fullscreenchange fullscreenerror".split(" "),moz:"mozFullScreenEnabled mozFullScreenElement mozRequestFullScreen mozCancelFullScreen mozfullscreenchange mozfullscreenerror".split(" "), +webkit:" webkitCurrentFullScreenElement webkitRequestFullScreen webkitCancelFullScreen webkitfullscreenchange ".split(" "),webkitVideo:"webkitSupportsFullscreen webkitDisplayingFullscreen webkitEnterFullscreen webkitExitFullscreen ".split(" ")},e=["w3c","moz","webkit","webkitVideo"],g,h;this.fullscreen=b={support:{w3c:!!a[d.w3c[0]],moz:!!a[d.moz[0]],webkit:"function"===typeof a[d.webkit[3]],webkitVideo:"function"===typeof b[d.webkitVideo[2]]},used:{}};g=0;for(h=e.length;g','','','',''];c=document.createElement(''); +for(var e=0;e=a&&(b=!0);return b},_validString:function(a){return a&&"string"===typeof a},_limitValue:function(a,b,d){return ad?d:a},_urlNotSetError:function(a){this._error({type:b.jPlayer.error.URL_NOT_SET,context:a,message:b.jPlayer.errorMsg.URL_NOT_SET,hint:b.jPlayer.errorHint.URL_NOT_SET})},_flashError:function(a){var c;c=this.internal.ready?"FLASH_DISABLED":"FLASH";this._error({type:b.jPlayer.error[c],context:this.internal.flash.swf, +message:b.jPlayer.errorMsg[c]+a.message,hint:b.jPlayer.errorHint[c]});this.internal.flash.jq.css({width:"1px",height:"1px"})},_error:function(a){this._trigger(b.jPlayer.event.error,a);this.options.errorAlerts&&this._alert("Error!"+(a.message?"\n\n"+a.message:"")+(a.hint?"\n\n"+a.hint:"")+"\n\nContext: "+a.context)},_warning:function(a){this._trigger(b.jPlayer.event.warning,f,a);this.options.warningAlerts&&this._alert("Warning!"+(a.message?"\n\n"+a.message:"")+(a.hint?"\n\n"+a.hint:"")+"\n\nContext: "+ +a.context)},_alert:function(a){alert("jPlayer "+this.version.script+" : id='"+this.internal.self.id+"' : "+a)},_emulateHtmlBridge:function(){var a=this;b.each(b.jPlayer.emulateMethods.split(/\s+/g),function(b,d){a.internal.domNode[d]=function(b){a[d](b)}});b.each(b.jPlayer.event,function(c,d){var e=!0;b.each(b.jPlayer.reservedEvent.split(/\s+/g),function(a,b){if(b===c)return e=!1});e&&a.element.bind(d+".jPlayer.jPlayerHtml",function(){a._emulateHtmlUpdate();var b=document.createEvent("Event");b.initEvent(c, +!1,!0);a.internal.domNode.dispatchEvent(b)})})},_emulateHtmlUpdate:function(){var a=this;b.each(b.jPlayer.emulateStatus.split(/\s+/g),function(b,d){a.internal.domNode[d]=a.status[d]});b.each(b.jPlayer.emulateOptions.split(/\s+/g),function(b,d){a.internal.domNode[d]=a.options[d]})},_destroyHtmlBridge:function(){var a=this;this.element.unbind(".jPlayerHtml");b.each((b.jPlayer.emulateMethods+" "+b.jPlayer.emulateStatus+" "+b.jPlayer.emulateOptions).split(/\s+/g),function(b,d){delete a.internal.domNode[d]})}}; +b.jPlayer.error={FLASH:"e_flash",FLASH_DISABLED:"e_flash_disabled",NO_SOLUTION:"e_no_solution",NO_SUPPORT:"e_no_support",URL:"e_url",URL_NOT_SET:"e_url_not_set",VERSION:"e_version"};b.jPlayer.errorMsg={FLASH:"jPlayer's Flash fallback is not configured correctly, or a command was issued before the jPlayer Ready event. Details: ",FLASH_DISABLED:"jPlayer's Flash fallback has been disabled by the browser due to the CSS rules you have used. Details: ",NO_SOLUTION:"No solution can be found by jPlayer in this browser. Neither HTML nor Flash can be used.", +NO_SUPPORT:"It is not possible to play any media format provided in setMedia() on this browser using your current options.",URL:"Media URL could not be loaded.",URL_NOT_SET:"Attempt to issue media playback commands, while no media url is set.",VERSION:"jPlayer "+b.jPlayer.prototype.version.script+" needs Jplayer.swf version "+b.jPlayer.prototype.version.needFlash+" but found "};b.jPlayer.errorHint={FLASH:"Check your swfPath option and that Jplayer.swf is there.",FLASH_DISABLED:"Check that you have not display:none; the jPlayer entity or any ancestor.", +NO_SOLUTION:"Review the jPlayer options: support and supplied.",NO_SUPPORT:"Video or audio formats defined in the supplied option are missing.",URL:"Check media URL is valid.",URL_NOT_SET:"Use setMedia() to set the media URL.",VERSION:"Update jPlayer files."};b.jPlayer.warning={CSS_SELECTOR_COUNT:"e_css_selector_count",CSS_SELECTOR_METHOD:"e_css_selector_method",CSS_SELECTOR_STRING:"e_css_selector_string",OPTION_KEY:"e_option_key"};b.jPlayer.warningMsg={CSS_SELECTOR_COUNT:"The number of css selectors found did not equal one: ", +CSS_SELECTOR_METHOD:"The methodName given in jPlayer('cssSelector') is not a valid jPlayer method.",CSS_SELECTOR_STRING:"The methodCssSelector given in jPlayer('cssSelector') is not a String or is empty.",OPTION_KEY:"The option requested in jPlayer('option') is undefined."};b.jPlayer.warningHint={CSS_SELECTOR_COUNT:"Check your css selector and the ancestor.",CSS_SELECTOR_METHOD:"Check your method name.",CSS_SELECTOR_STRING:"Check your css selector is a string.",OPTION_KEY:"Check your option name."}}); \ No newline at end of file diff --git a/src/catalogue/static/player/openplayer.js b/src/catalogue/static/player/openplayer.js new file mode 100644 index 000000000..4fe27bd31 --- /dev/null +++ b/src/catalogue/static/player/openplayer.js @@ -0,0 +1,18 @@ +(function($) { + $(function() { + + + +$('.open-player').click(function(event) { + event.preventDefault(); + window.open($(this).attr('href'), + 'player', + 'width=422, height=500, scrollbars=1' + ); +}); + + + + }); +})(jQuery); + diff --git a/src/catalogue/static/player/player.css b/src/catalogue/static/player/player.css new file mode 100644 index 000000000..829a9a1c0 --- /dev/null +++ b/src/catalogue/static/player/player.css @@ -0,0 +1,21 @@ +#player h1 { + font-size: 2em; + margin: .5em; +} + +.player-info { + margin: 1em; +} + + +.play { + cursor: pointer; +} + +.play:hover { + color: #0D7E85; +} + +.daisy-list { + list-style: none; +} diff --git a/src/catalogue/static/player/player.js b/src/catalogue/static/player/player.js new file mode 100755 index 000000000..69dceed55 --- /dev/null +++ b/src/catalogue/static/player/player.js @@ -0,0 +1,34 @@ +(function($) { + $(function() { + + $("#jplayer").each(function() { + var $self = $(this); + $self.jPlayer({ + swfPath: "/static/jplayer/", + solution: "html,flash", + supplied: $self.attr('data-supplied'), + + ready: function() { + var player = $(this); + var setMedia = function(elem) { + var li = $(elem).parent(); + $('.jp-playlist-current').removeClass('jp-playlist-current'); + $(li).addClass('jp-playlist-current'); + var media = {} + + $('.mp3', li).each(function() {media['mp3'] = $(this).attr('href')}); + $('.ogg', li).each(function() {media['oga'] = $(this).attr('href')}); + + return player.jPlayer("setMedia", media); + }; + setMedia($('.play').first()).jPlayer("play"); + + $('.play').click(function() { + setMedia(this).jPlayer("play"); + }); + } + }); + }); + + }); +})(jQuery) \ No newline at end of file diff --git a/src/catalogue/tasks.py b/src/catalogue/tasks.py new file mode 100644 index 000000000..a2b8be088 --- /dev/null +++ b/src/catalogue/tasks.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from datetime import datetime +from traceback import print_exc +from celery.task import task +from celery.utils.log import get_task_logger +from django.conf import settings +from wolnelektury.utils import localtime_to_utc +from waiter.models import WaitedFile + +task_logger = get_task_logger(__name__) + + +# TODO: move to model? +def touch_tag(tag): + update_dict = { + 'changed_at': localtime_to_utc(datetime.now()), + } + + type(tag).objects.filter(pk=tag.pk).update(**update_dict) + + +@task +def index_book(book_id, book_info=None, **kwargs): + from catalogue.models import Book + try: + return Book.objects.get(id=book_id).search_index(book_info, **kwargs) + except Exception, e: + print "Exception during index: %s" % e + print_exc() + raise e + + +@task(ignore_result=True, rate_limit=settings.CATALOGUE_CUSTOMPDF_RATE_LIMIT) +def build_custom_pdf(book_id, customizations, file_name, waiter_id=None): + """Builds a custom PDF file.""" + try: + from django.core.files import File + from django.core.files.storage import DefaultStorage + from catalogue.models import Book + + task_logger.info(DefaultStorage().path(file_name)) + if not DefaultStorage().exists(file_name): + kwargs = { + 'cover': True, + } + if 'no-cover' in customizations: + kwargs['cover'] = False + customizations.remove('no-cover') + pdf = Book.objects.get(pk=book_id).wldocument().as_pdf( + customizations=customizations, + morefloats=settings.LIBRARIAN_PDF_MOREFLOATS, + **kwargs) + DefaultStorage().save(file_name, File(open(pdf.get_filename()))) + finally: + if waiter_id is not None: + WaitedFile.objects.filter(pk=waiter_id).delete() diff --git a/src/catalogue/templates/catalogue/audiobook_list.html b/src/catalogue/templates/catalogue/audiobook_list.html new file mode 100644 index 000000000..75576f4ad --- /dev/null +++ b/src/catalogue/templates/catalogue/audiobook_list.html @@ -0,0 +1,21 @@ +{% extends "catalogue/book_list.html" %} +{% load i18n %} +{% load catalogue_tags %} +{% load ssi_include from ssify %} + +{% block bodyid %}book-a-list{% endblock %} + +{% block titleextra %}{% trans "Listing of all audiobooks" %}{% endblock %} + +{% block metadescription %}Darmowe audiobooki na wolnej licencji. Lektury czytane przez znanych aktorów.{% endblock %} + +{% block extrahead %} + + +{% endblock %} + +{% block book_list_header %}{% trans "Listing of all audiobooks" %}{% endblock %} + +{% block book_list_info %} +{% ssi_include 'chunk' key='audiobook-list' %} +{% endblock %} diff --git a/src/catalogue/templates/catalogue/book_detail.html b/src/catalogue/templates/catalogue/book_detail.html new file mode 100644 index 000000000..7e8128fa7 --- /dev/null +++ b/src/catalogue/templates/catalogue/book_detail.html @@ -0,0 +1,36 @@ +{% extends "base.html" %} +{% load i18n %} +{% load common_tags catalogue_tags %} +{% load ssify %} +{% load build_absolute_uri from fnp_common %} + +{% block titleextra %}{{ book.pretty_title }}{% endblock %} +{% block ogimage %}{% if book.cover %}{{ book.cover.url|build_absolute_uri:request }}{% endif %}{% endblock %} + +{% block metadescription %}{% book_title book %}. {{ block.super }}{% endblock %} + +{% block bodyid %}book-detail{% endblock %} + +{% block body %} + +{% ssi_include 'catalogue_book_wide' pk=book.pk %} + +{% work_list book_children %} + +{% spaceless %} +{% if book.other_versions %} +
                +

                {% trans "Other versions" %}:

                +{% for rel in book.other_versions %} + {% ssi_include 'catalogue_book_mini' pk=rel.pk %} +{% endfor %} +
                +{% endif %} + +
                +

                {% trans "See also" %}:

                +{% related_books book taken=book.other_versions|length %} +
                +{% endspaceless %} + +{% endblock %} diff --git a/src/catalogue/templates/catalogue/book_fragments.html b/src/catalogue/templates/catalogue/book_fragments.html new file mode 100644 index 000000000..d46f869d8 --- /dev/null +++ b/src/catalogue/templates/catalogue/book_fragments.html @@ -0,0 +1,20 @@ +{% extends "base.html" %} +{% load i18n %} +{% load work_list from catalogue_tags %} + +{% block titleextra %}{% trans "Theme" %} {{ theme }} {% trans "in work " %} {{ book }}{% endblock %} + +{% block bodyid %}tagged-object-list{% endblock %} + +{% block body %} +
                +

                {% trans "Theme" %} + {{ theme }} +
                {% trans "in work " %} + {{ book }}

                +
                + +
                + {% work_list fragments %} +
                +{% endblock %} diff --git a/src/catalogue/templates/catalogue/book_info.html b/src/catalogue/templates/catalogue/book_info.html new file mode 100755 index 000000000..e245335ee --- /dev/null +++ b/src/catalogue/templates/catalogue/book_info.html @@ -0,0 +1,46 @@ +{% load i18n %} +{% load catalogue_tags %} + +

                + {% if book.extra_info.license %} + {% trans "This work is licensed under:" %} + {{ book.extra_info.license_description }} + {% else %} + {% blocktrans %}This work isn't covered by copyright and is part of the + public domain, which means it can be freely used, published and + distributed. If there are any additional copyrighted materials + provided with this work (such as annotations, motifs etc.), those + materials are licensed under the + Creative Commons Attribution-ShareAlike 3.0 + license.{% endblocktrans %} + {% endif %} +

                + +{% if book.extra_info.source_name %} +

                {% trans "Resource prepared based on:" %} {{ book.extra_info.source_name }}

                +{% endif %} + +{% if book.extra_info.description %} +

                {{ book.extra_info.description }}

                +{% endif %} + +{% if book.extra_info.editor or book.extra_info.technical_editor %} +

                {% if is_picture %} + {% trans "Edited by:" %} + {% else %} + {% trans "Edited and annotated by:" %} + {% endif %} + {% all_editors book.extra_info %}.

                +{% endif %} + +{% if book.extra_info.funders %} +

                {% trans "Publication funded by:" %} + {% for funder in book.extra_info.funders %}{{ funder }}{% if not forloop.last %}, {% else %}.{% endif %}{% endfor %} +

                +{% endif %} + +{% if book.extra_info.cover_by %} +

                {% trans "Cover image by:" %} + + {{ book.extra_info.cover_by }}.

                +{% endif %} diff --git a/src/catalogue/templates/catalogue/book_list.html b/src/catalogue/templates/catalogue/book_list.html new file mode 100644 index 000000000..e29cd50ec --- /dev/null +++ b/src/catalogue/templates/catalogue/book_list.html @@ -0,0 +1,39 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} +{% load ssi_include from ssify %} + +{% block bodyid %}book-a-list{% endblock %} + +{% block titleextra %}{% trans "Listing of all works" %}{% endblock %} + +{% block body %} +{% spaceless %} + +

                {% block book_list_header %}{% trans "Listing of all works" %}{% endblock %}

                + +
                + {% block book_list_info %} + {% ssi_include 'chunk' key='book-list' %} + {% endblock %} +
                + +
                + + + +
                +

                {% trans "Table of Content" %}

                +
                + {{ rendered_nav }} +
                +
                +
                + {% block book_list %} + {{ rendered_book_list }} + {% endblock %} +
                + {% trans "↑ top ↑" %} + +{% endspaceless %} +{% endblock %} diff --git a/src/catalogue/templates/catalogue/book_mini_box.html b/src/catalogue/templates/catalogue/book_mini_box.html new file mode 100755 index 000000000..88ec16dfd --- /dev/null +++ b/src/catalogue/templates/catalogue/book_mini_box.html @@ -0,0 +1,22 @@ +{% spaceless %} + +{% endspaceless %} \ No newline at end of file diff --git a/src/catalogue/templates/catalogue/book_searched.html b/src/catalogue/templates/catalogue/book_searched.html new file mode 100644 index 000000000..357491ce6 --- /dev/null +++ b/src/catalogue/templates/catalogue/book_searched.html @@ -0,0 +1,38 @@ +{% spaceless %} + +{% load i18n %} +{% load inline_tag_list from catalogue_tags %} +{% load ssi_include from ssify %} + +
                + +{% ssi_include 'catalogue_book_short' pk=book.pk %} + +
                + {% for hit in hits %} + {% if hit.snippet %} + + {% else %} + {% if hit.fragment %} + + {% endif %} + {% endif %} + {% endfor %} +
                + +
                + +
                + +{% endspaceless %} \ No newline at end of file diff --git a/src/catalogue/templates/catalogue/book_short.html b/src/catalogue/templates/catalogue/book_short.html new file mode 100644 index 000000000..b069cb585 --- /dev/null +++ b/src/catalogue/templates/catalogue/book_short.html @@ -0,0 +1,135 @@ +{% spaceless %} +{% load i18n %} +{% load catalogue_tags ssify %} +{% load likes_book book_shelf_tags from social_tags %} +
                +
                +
                + + + + +
                + + +{% likes_book book.pk as likes %} +
                +
                + ★ +
                +
                +
                + {% ssi_csrf_token %} + +
                +
                +
                + + +
                +
                + {% for tag in tags.author %} + {{ tag.name }}{% if not forloop.last %}, + {% endif %}{% endfor %}{% for parent in parents %}, + {{ parent.title }}{% endfor %} +
                +
                + {% if main_link %}{% endif %}{{ book.title }}{% if main_link %}{% endif %} +
                +
                + +
                + {% if book.cover_thumb %} + {% if main_link %}{% endif %} + Cover + {% if main_link %}{% endif %} + {% endif %} + {% block cover-area-extra %}{% endblock %} +
                +
                + {% spaceless %} + + + {% trans "Epoch" %}:  + {% for tag in tags.epoch %} + {{ tag.name }} + {% if not forloop.last %}, {% endif %} + {% endfor %} + + + + {% trans "Kind" %}:  + {% for tag in tags.kind %} + {{ tag.name }} + {% if not forloop.last %}, {% endif %} + {% endfor %} + + + + {% trans "Genre" %}:  + {% for tag in tags.genre %} + {{ tag.name }} + {% if not forloop.last %}, {% endif %} + {% endfor %} + + + {% if show_lang %} + + {% trans "Language" %}:  + {{ book.language_name }} + + {% endif %} + + {% if stage_note %} +
                + {{ stage_note }} + + {% endif %} + + {% endspaceless %} +
                +
                + {% book_shelf_tags book.pk %} + +
                  +
                • + {% if book.html_file %} + {% trans "Read online" %} + {% endif %} +
                • +
                • + {% trans "Download" %} +
                  + {% if book.pdf_file %} + PDF {% trans "to print" %} + {% endif %} + {% if book.epub_file %} + EPUB {% trans "for an e-book reader" %} + {% endif %} + {% if book.mobi_file %} + MOBI {% trans "for Kindle" %} + {% endif %} + {% if book.fb2_file %} + FB2 {% trans "FictionBook" %} + {% endif %} + {% if book.txt_file %} + TXT {% trans "for advanced usage" %} + {% endif %} +
                  +
                • +
                • + {% if has_audio %} + {% trans "Listen" %} + {% endif %} +
                • +
                + {% block book-box-extra-info %}{% endblock %} + {% block box-append %} + {% endblock %} +
                + {% block right-column %} + {% endblock %} +
                +
                +
                +{% endspaceless %} \ No newline at end of file diff --git a/src/catalogue/templates/catalogue/book_text.html b/src/catalogue/templates/catalogue/book_text.html new file mode 100644 index 000000000..339cfc7b2 --- /dev/null +++ b/src/catalogue/templates/catalogue/book_text.html @@ -0,0 +1,100 @@ +{% extends "catalogue/viewer_base.html" %} +{% load i18n %} +{% load catalogue_tags ssify %} +{% load thumbnail %} + + +{% block title %}{{ book.pretty_title }}{% endblock %} + + +{% block menu %} +
              • + {{ book.pretty_title }} +
              • + +{% if book.other_versions.exists %} + +{% endif %} + + + + + + + + + + +{% endblock menu %} + + + +{% block big-pane %} +
                + +
                + +
                + + +{% endblock big-pane %} + + + + + +{% block footer %} +
                + {% book_info book %} +
                + +{% if book.other_versions.exists %} +
                +

                {% trans "Other versions of the book" %}

                + {% trans "Close the other version" %} + +
                +{% endif %} + + + +
                + {% ssi_include 'catalogue_book_short' pk=book.pk %} +
                +{% endblock footer %} diff --git a/src/catalogue/templates/catalogue/book_wide.html b/src/catalogue/templates/catalogue/book_wide.html new file mode 100644 index 000000000..b84acdb53 --- /dev/null +++ b/src/catalogue/templates/catalogue/book_wide.html @@ -0,0 +1,84 @@ +{% extends "catalogue/book_short.html" %} +{% load i18n %} +{% load choose_fragment download_audio tag_list custom_pdf_link_li license_icon source_name from catalogue_tags %} +{% load choose_cite from social_tags %} +{% load ssi_include from ssify %} + + +{% block box-class %}book-wide-box{% endblock %} + + +{% block cover-area-extra %} +{% if extra_info.license %} + {% license_icon extra_info.license %} +{% endif %} +{% endblock %} + + + +{% block book-box-extra-info %} +{% if themes %} +
                +

                {% trans "Motifs and themes" %}

                +
                + +
                +
                +{% else %} +

                 

                +{% endif %} +{% endblock %} + + +{% block right-column %} +
                +
                + {% choose_cite book.pk as cite_promo %} + {% choose_fragment book.pk unless=cite_promo as fragment_promo %} + {{ cite_promo.if }} + {% ssi_include 'social_cite' pk=cite_promo %} + {{ cite_promo.endif }} + {{ fragment_promo.if }} + {% ssi_include 'catalogue_fragment_promo' pk=fragment_promo %} + {{ fragment_promo.endif }} +
                + +
                +

                {% trans "See" %}

                + +
                +
                +

                {% trans "Download" %}

                +
                  +
                • + {% if related.media.mp3 or related.media.ogg or related.media.daisy %} + {% trans "Download all audiobooks for this book" %}: + {% download_audio book %}. + {% endif %} +
                • + {% custom_pdf_link_li book %} +
                +
                +
                +{% endblock %} diff --git a/src/catalogue/templates/catalogue/catalogue.html b/src/catalogue/templates/catalogue/catalogue.html new file mode 100644 index 000000000..c7cee4096 --- /dev/null +++ b/src/catalogue/templates/catalogue/catalogue.html @@ -0,0 +1,38 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} + + +{% block titleextra %}{% trans "Catalogue" %}{% endblock %} + +{% block bodyid %}catalogue-catalogue{% endblock %} + +{% block body %} +

                {% trans "Catalogue" %}

                + +
                + +

                + {% trans "Download the catalogue in PDF format." %} +

                + +

                {% trans "Authors" %}

                +
                {{ output.author }}
                + +

                {% trans "Kinds" %}

                +
                {{ output.kind }}
                + +

                {% trans "Genres" %}

                +
                {{ output.genre }}
                + +

                {% trans "Epochs" %}

                +
                {{ output.epoch }}
                + +

                {% trans "Themes and topics" %}

                +
                {{ output.theme }}
                + +

                {% trans "Collections" %}

                +
                {{ output.collections }}
                + +
                +{% endblock %} diff --git a/src/catalogue/templates/catalogue/collection.html b/src/catalogue/templates/catalogue/collection.html new file mode 100755 index 000000000..4bb12c938 --- /dev/null +++ b/src/catalogue/templates/catalogue/collection.html @@ -0,0 +1,10 @@ +{% extends "catalogue/book_list.html" %} +{% load i18n %} + +{% block titleextra %}{{ context.collection.title }}{% endblock %} + +{% block book_list_header %}{{ context.collection.title }}{% endblock %} + +{% block book_list_info %} +{{ context.collection.description|safe }} +{% endblock %} diff --git a/src/catalogue/templates/catalogue/collection_list.html b/src/catalogue/templates/catalogue/collection_list.html new file mode 100755 index 000000000..38466f157 --- /dev/null +++ b/src/catalogue/templates/catalogue/collection_list.html @@ -0,0 +1,5 @@ + diff --git a/src/catalogue/templates/catalogue/daisy_list.html b/src/catalogue/templates/catalogue/daisy_list.html new file mode 100644 index 000000000..65d9d6bcd --- /dev/null +++ b/src/catalogue/templates/catalogue/daisy_list.html @@ -0,0 +1,17 @@ +{% extends "catalogue/book_list.html" %} +{% load i18n %} +{% load ssi_include from ssify %} + +{% block bodyid %}book-a-list{% endblock %} + +{% block titleextra %}{% trans "Listing of all DAISY files" %}{% endblock %} + +{% block extrahead %} + +{% endblock %} + +{% block book_list_header %}{% trans "Listing of all DAISY files" %}{% endblock %} + +{% block book_list_info %} +{% ssi_include 'chunk' key='daisy-list' %} +{% endblock %} diff --git a/src/catalogue/templates/catalogue/differentiate_tags.html b/src/catalogue/templates/catalogue/differentiate_tags.html new file mode 100644 index 000000000..b8ef906ef --- /dev/null +++ b/src/catalogue/templates/catalogue/differentiate_tags.html @@ -0,0 +1,20 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} + +{% block titleextra %}{% title_from_tags tags %}{% endblock %} + +{% block bodyid %}differentiate_tags{% endblock %} + +{% block body %} +

                {% title_from_tags tags %}

                + +

                {% trans "The criteria are ambiguous. Please select one of the following options:" %}

                + +{% endblock %} diff --git a/src/catalogue/templates/catalogue/fragment_promo.html b/src/catalogue/templates/catalogue/fragment_promo.html new file mode 100755 index 000000000..cf817ae7c --- /dev/null +++ b/src/catalogue/templates/catalogue/fragment_promo.html @@ -0,0 +1,8 @@ +{% if fragment %} + +
                + {{ fragment.get_short_text|safe }} +
                +

                {{ fragment.book.pretty_title }}

                +
                +{% endif %} diff --git a/src/catalogue/templates/catalogue/fragment_short.html b/src/catalogue/templates/catalogue/fragment_short.html new file mode 100644 index 000000000..b5921f215 --- /dev/null +++ b/src/catalogue/templates/catalogue/fragment_short.html @@ -0,0 +1,26 @@ +{% load i18n %} +{% load book_title_html from catalogue_tags %} + +
                + {% if fragment.short_text %} + + {% endif %} +
                +
                + + {{ fragment.text|safe }} + +
                + {% if fragment.short_text %} + ↑ {% trans "Hide fragment" %} ↑ + {% endif %} +
                +

                {% book_title_html fragment.book %}

                +
                diff --git a/src/catalogue/templates/catalogue/inline_tag_list.html b/src/catalogue/templates/catalogue/inline_tag_list.html new file mode 100755 index 000000000..59b1acce9 --- /dev/null +++ b/src/catalogue/templates/catalogue/inline_tag_list.html @@ -0,0 +1,17 @@ +{% load i18n %} +{% load catalogue_tags %} +{% if one_tag %} + {% trans "See full category" %} {{ one_tag }} +{% else %} + +{% endif %} diff --git a/src/catalogue/templates/catalogue/menu.html b/src/catalogue/templates/catalogue/menu.html new file mode 100644 index 000000000..5ddbd3b23 --- /dev/null +++ b/src/catalogue/templates/catalogue/menu.html @@ -0,0 +1,41 @@ +{% spaceless %} +{% load i18n static %} + + + {% trans "Catalogue of the library" %} + {% trans "Catalogue" %} + + + +{% endspaceless %} \ No newline at end of file diff --git a/src/catalogue/templates/catalogue/picture_detail.html b/src/catalogue/templates/catalogue/picture_detail.html new file mode 100644 index 000000000..b8b70c6be --- /dev/null +++ b/src/catalogue/templates/catalogue/picture_detail.html @@ -0,0 +1,94 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags pagination_tags %} +{% load thumbnail %} + + +{% block titleextra %}{{ picture.title }}{% endblock %} + +{% block bodyid %}picture-detail{% endblock %} + +{% block body %} +

                {{picture.title}}

                + +
                + + + {% thumbnail picture.image_file "400x500" upscale="false" as im %} + + {% endthumbnail %} + + {% if picture.info.license %} +

                {% trans "Work is licensed under " %} {{ picture.info.license_description }}.

                + {% endif %} +

                {% trans "Based on" %}: {{ picture.info.source_name }}

                + {% if picture.info.description %} +
                +
                {{ picture.info.description|safe }}
                +{%comment%}
                {{ picture.info.description|safe|truncatewords_html:30 }}
                {%endcomment%} +
                +

                + {% endif %} + +
                + +
                +
                +

                {% trans "Details" %}

                +
                  +
                • + {% trans "Author" %}: + {% for tag in categories.author %} + {{ tag }}{% if not forloop.last %}, {% endif %} + {% endfor %} +
                • +
                • + {% trans "Epoch" %}: + {% for tag in categories.epoch %} + {{ tag }}{% if not forloop.last %}, {% endif %} + {% endfor %} +
                • +
                • + {% trans "Kind" %}: + {% for tag in categories.kind %} + {{ tag }}{% if not forloop.last %}, {% endif %} + {% endfor %} +
                • +
                +

                {% trans "Other resources" %}

                + +

                {% trans "View XML source" %}

                +
                +
                +

                {% trans "Work's themes " %}

                + +
                +
                +
                +{% endblock %} diff --git a/src/catalogue/templates/catalogue/picture_list.html b/src/catalogue/templates/catalogue/picture_list.html new file mode 100644 index 000000000..ce61ec48b --- /dev/null +++ b/src/catalogue/templates/catalogue/picture_list.html @@ -0,0 +1,32 @@ +{% extends "catalogue/book_list.html" %} +{% load i18n %} +{% load catalogue_tags chunks %} +{% load thumbnail %} + +{% block bodyid %}picture-list{% endblock %} + +{% block titleextra %}{% trans "Listing of all works" %}{% endblock %} + +{% block picture_list_header %}{% trans "Listing of all works" %}{% endblock %} + + +{% block book_list %} +{% for author, group in pictures_by_author.items %} + +
                +

                {{ author }}

                + {% for picture in group %} +
                + {% thumbnail picture.image_file "300x300" as im %} + + {% endthumbnail %} + {{picture.title}} +
                +
                + {% endfor %} +
                + +{% endfor %} + +{% endblock %} + diff --git a/src/catalogue/templates/catalogue/player.html b/src/catalogue/templates/catalogue/player.html new file mode 100755 index 000000000..701fbe850 --- /dev/null +++ b/src/catalogue/templates/catalogue/player.html @@ -0,0 +1,140 @@ + + + {% load static from staticfiles %} + {% load i18n pipeline %} + {% load catalogue_tags %} + {% load thumbnail %} + + + + {% trans "Wolne Lektury" %} :: + {{ book.title }} - {{ audiobook }} + + {% stylesheet "all" %} + {% stylesheet "player" %} + + + + + {% if book.cover_thumb %} + Cover + {% endif %} + + +

                {% book_title book %}

                + +
                +

                {% trans "Book's page" %}.

                +

                {% trans "Download as" %} {% download_audio book False %}.

                + + {% if book.has_daisy_file %} +

                DAISY:

                + + {% endif %} +
                + +
                + + + + + {% if projects|length > 1 %} +

                {% trans "Audiobooks were prepared as a part of the projects:" %}

                +
                  + {% for cs, fb in projects %} +
                • + {% if fb %} + {% blocktrans %}{{ cs }}, funded by {{ fb }}{% endblocktrans %} + {% else %} + {{ cs }} + {% endif %} +
                • + {% endfor %} +
                + {% else %} +

                + {% with projects.0.0 as cs %} + {% with projects.0.1 as fb %} + {% if fb %} + {% blocktrans %}Audiobooks were prepared as a part of the {{ cs }} project funded by {{ fb }}.{% endblocktrans %} + {% else %} + {% blocktrans %}Audiobooks were prepared as a part of the {{ cs }} project.{% endblocktrans %} + {% endif %} + {% endwith %} + {% endwith %} +

                + {% endif %} + + + + {% javascript "player" %} + + {{ piwik_tag|safe }} + + diff --git a/src/catalogue/templates/catalogue/recent_audiobooks_list.html b/src/catalogue/templates/catalogue/recent_audiobooks_list.html new file mode 100755 index 000000000..762cb80d7 --- /dev/null +++ b/src/catalogue/templates/catalogue/recent_audiobooks_list.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} + +{% block titleextra %}{% trans "Recent audiobooks" %}{% endblock %} + +{% block bodyid %}recent-list{% endblock %} + +{% block body %} +

                {% trans "Recent audiobooks" %}

                + +
                + {% work_list object_list %} +
                +{% endblock %} diff --git a/src/catalogue/templates/catalogue/recent_daisy_list.html b/src/catalogue/templates/catalogue/recent_daisy_list.html new file mode 100755 index 000000000..6675af206 --- /dev/null +++ b/src/catalogue/templates/catalogue/recent_daisy_list.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} + +{% block titleextra %}{% trans "Recent DAISY files" %}{% endblock %} + +{% block bodyid %}recent-list{% endblock %} + +{% block body %} +

                {% trans "Recent DAISY files" %}

                + +
                + {% work_list object_list %} +
                +{% endblock %} diff --git a/src/catalogue/templates/catalogue/recent_list.html b/src/catalogue/templates/catalogue/recent_list.html new file mode 100755 index 000000000..28a96b831 --- /dev/null +++ b/src/catalogue/templates/catalogue/recent_list.html @@ -0,0 +1,22 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} + +{% block titleextra %}{% trans "Recent publications" %}{% endblock %} + +{% block bodyid %}recent-list{% endblock %} + +{% block body %} +

                {% trans "Recent publications" %}

                + + {% url 'recent_audiobooks_list' as a %} + {% url 'recent_daisy_list' as d %} +

                + {% blocktrans %}You can also see recent audiobooks + and recent DAISY files.{% endblocktrans %} +

                + +
                + {% work_list object_list %} +
                +{% endblock %} diff --git a/src/catalogue/templates/catalogue/related_books.html b/src/catalogue/templates/catalogue/related_books.html new file mode 100755 index 000000000..6407d5a04 --- /dev/null +++ b/src/catalogue/templates/catalogue/related_books.html @@ -0,0 +1,25 @@ +{% spaceless %} +{% load catalogue_random_book from catalogue_tags %} +{% load picture_random_picture from picture_tags %} +{% load ssi_include from ssify %} + +{% for pic in pics %} + {% ssi_include 'picture_mini' pk=pic.pk %} +{% endfor %} + +{% for book in books %} + {% ssi_include 'catalogue_book_mini' pk=book.pk %} +{% endfor %} + +{% if random %} + {% catalogue_random_book random_excluded_books as random_book_pk %} + {% picture_random_picture random_excluded_pics unless=random_book_pk as random_pic_pk %} + {{ random_book_pk.if }} + {% ssi_include 'catalogue_book_mini' pk=random_book_pk %} + {{ random_book_pk.endif }} + {{ random_pic_pk.if }} + {% ssi_include 'picture_mini' pk=random_pic_pk %} + {{ random_pic_pk.endif }} +{% endif %} + +{% endspaceless %} \ No newline at end of file diff --git a/src/catalogue/templates/catalogue/search_multiple_hits.html b/src/catalogue/templates/catalogue/search_multiple_hits.html new file mode 100644 index 000000000..d1e1dedf7 --- /dev/null +++ b/src/catalogue/templates/catalogue/search_multiple_hits.html @@ -0,0 +1,129 @@ +{% extends "base.html" %} +{% load i18n %} +{% load pagination_tags %} +{% load inline_tag_list from catalogue_tags %} +{% load book_searched from search_tags %} +{% load ssi_include from ssify %} + +{% block titleextra %}{% trans "Search" %}{% endblock %} + +{% block bodyid %}tagged-object-list{% endblock %} + +{% block body %} + {% if did_you_mean %} + {% trans "Did you mean" %} {{did_you_mean|lower}}? + {% endif %} + +
                + {% if tags.author %} +
                +
                {% trans "Authors" %}:
                +
                + {% inline_tag_list tags.author %} +
                +
                + {% endif %} + {% if tags.kind %} +
                +
                {% trans "Kinds" %}:
                +
                + {% inline_tag_list tags.kind %} +
                +
                + {% endif %} + {% if tags.genre %} +
                +
                {% trans "Genres" %}:
                +
                + {% inline_tag_list tags.genre %} +
                +
                + {% endif %} + {% if tags.epoch %} +
                +
                {% trans "Epochs" %}:
                +
                + {% inline_tag_list tags.epoch %} +
                +
                + {% endif %} +
                + + {% if results.title %} +
                +
                +

                {% trans "Results by title" %}

                +
                +
                +
                +
                  + {% for result in results.title %}
                1. + {% ssi_include 'catalogue_book_short' pk=result.book.pk %} +
                2. {% endfor %} +
                +
                + {% endif %} + + {% if results.author %} +
                +
                +

                {% trans "Results by authors" %}

                +
                +
                +
                +
                  + {% for author in results.author %}
                1. {% ssi_include 'catalogue_book_short' pk=author.book.pk %}
                2. {% endfor %} +
                +
                + {% endif %} + + {% if results.translator %} +
                +
                +

                {% trans "Results by translators" %}

                +
                +
                +
                +
                  + {% for translator in results.translator %}
                1. {% ssi_include 'catalogue_book_short' pk=translator.book.pk %}
                2. {% endfor %} +
                +
                + {% endif %} + + {% if results.content %} +
                +
                +

                {% trans "Results in text" %}

                +
                +
                +
                +
                  + {% for result in results.content %} +
                1. + {% book_searched result %} +
                2. + {% endfor %} +
                +
                + {% endif %} + + {% if results.other %} +
                +
                +

                {% trans "Other results" %}

                +
                +
                +
                +
                  + {% for result in results.other %} +
                1. + {% book_searched result %} +
                2. + {% endfor %} +
                +
                + {% endif %} + + + +{% endblock %} diff --git a/src/catalogue/templates/catalogue/search_no_hits.html b/src/catalogue/templates/catalogue/search_no_hits.html new file mode 100644 index 000000000..a2c9a63a7 --- /dev/null +++ b/src/catalogue/templates/catalogue/search_no_hits.html @@ -0,0 +1,30 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags pagination_tags %} + +{% block titleextra %}{% trans "Search" %}{% endblock %} + +{% block bodyid %}tagged-object-list{% endblock %} + +{% block body %} +

                {% trans "Search" %}

                + +
                +
                +

                + {% if did_you_mean %} + {% trans "Did you mean" %} {{did_you_mean|lower}}? + {% endif %} +

                +

                {% trans "Sorry! Search cirteria did not match any resources." %}

                + +

                {% blocktrans %}Search engine supports following criteria: title, author, theme/topic, epoch, kind and genre. + As for now we do not support full text search.{% endblocktrans %}

                + {% include "info/join_us.html" %} +
                +
                + +
                + {% include "publishing_suggest.html" %} +
                +{% endblock %} diff --git a/src/catalogue/templates/catalogue/search_too_short.html b/src/catalogue/templates/catalogue/search_too_short.html new file mode 100644 index 000000000..62d0ad022 --- /dev/null +++ b/src/catalogue/templates/catalogue/search_too_short.html @@ -0,0 +1,17 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags pagination_tags %} + +{% block titleextra %}{% trans "Search" %}{% endblock %} + +{% block bodyid %}tagged-object-list{% endblock %} + +{% block body %} +

                {% trans "Search" %}

                + +
                +

                {% trans "Sorry! Search query must have at least two characters." %}

                + {% include "info/join_us.html" %} +
                + +{% endblock %} \ No newline at end of file diff --git a/src/catalogue/templates/catalogue/snippets/audiobook_list.html b/src/catalogue/templates/catalogue/snippets/audiobook_list.html new file mode 100755 index 000000000..d7f599274 --- /dev/null +++ b/src/catalogue/templates/catalogue/snippets/audiobook_list.html @@ -0,0 +1,12 @@ +{% load catalogue_tags %} + +{% audiobook_tree orphans books_by_parent %} +{% for author, group in books_by_author.items %} + {% if group %} + +
                +

                {{ author }}

                + {% audiobook_tree group books_by_parent %} +
                + {% endif %} +{% endfor %} diff --git a/src/catalogue/templates/catalogue/snippets/book_list.html b/src/catalogue/templates/catalogue/snippets/book_list.html new file mode 100755 index 000000000..526dcbbcc --- /dev/null +++ b/src/catalogue/templates/catalogue/snippets/book_list.html @@ -0,0 +1,12 @@ +{% load catalogue_tags %} + +{% book_tree orphans books_by_parent %} +{% for author, group in books_by_author.items %} + {% if group %} + +
                +

                {{ author }}

                + {% book_tree group books_by_parent %} +
                + {% endif %} +{% endfor %} diff --git a/src/catalogue/templates/catalogue/snippets/book_list_nav.html b/src/catalogue/templates/catalogue/snippets/book_list_nav.html new file mode 100755 index 000000000..258824df3 --- /dev/null +++ b/src/catalogue/templates/catalogue/snippets/book_list_nav.html @@ -0,0 +1,10 @@ +{% for index, authors in books_nav.items %} + +{% endfor %} diff --git a/src/catalogue/templates/catalogue/snippets/custom_pdf_link_li.html b/src/catalogue/templates/catalogue/snippets/custom_pdf_link_li.html new file mode 100644 index 000000000..353ad8bdf --- /dev/null +++ b/src/catalogue/templates/catalogue/snippets/custom_pdf_link_li.html @@ -0,0 +1,7 @@ +{% load i18n %} +{% if not NO_CUSTOM_PDF %} +
              • + {% trans "Download a custom PDF" %} +
              • +{% endif %} diff --git a/src/catalogue/templates/catalogue/snippets/license_icon.html b/src/catalogue/templates/catalogue/snippets/license_icon.html new file mode 100755 index 000000000..732e3bf92 --- /dev/null +++ b/src/catalogue/templates/catalogue/snippets/license_icon.html @@ -0,0 +1,10 @@ +{% load i18n %} +{% load static from staticfiles %} + +{% if license_url %} + + {% trans + +{% endif %} diff --git a/src/catalogue/templates/catalogue/tag_list.html b/src/catalogue/templates/catalogue/tag_list.html new file mode 100644 index 000000000..e0fecc020 --- /dev/null +++ b/src/catalogue/templates/catalogue/tag_list.html @@ -0,0 +1,21 @@ +{% spaceless %} + +{% load i18n %} +{% load catalogue_tags %} +{% if one_tag %} +

                {% trans "See full category" %} {{ one_tag }}

                +{% else %} + +{% endif %} + +{% endspaceless %} \ No newline at end of file diff --git a/src/catalogue/templates/catalogue/tag_list_split.html b/src/catalogue/templates/catalogue/tag_list_split.html new file mode 100644 index 000000000..cb7ab26ec --- /dev/null +++ b/src/catalogue/templates/catalogue/tag_list_split.html @@ -0,0 +1,10 @@ +{% load i18n %} +{% if books %} +

                {% trans "Literature" %}:

                +
                {{books|safe}}
                +{% endif %} + +{% if pictures %} +

                {% trans "Gallery" %}:

                +
                {{pictures|safe}}
                +{% endif %} diff --git a/src/catalogue/templates/catalogue/tagged_object_list.html b/src/catalogue/templates/catalogue/tagged_object_list.html new file mode 100644 index 000000000..3df560a6f --- /dev/null +++ b/src/catalogue/templates/catalogue/tagged_object_list.html @@ -0,0 +1,167 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags switch_tag social_tags %} +{% load ssi_include from ssify %} + +{% block titleextra %}{% title_from_tags tags %}{% endblock %} + +{% block bodyid %}tagged-object-list{% endblock %} + +{% block body %} +
                +
                +

                {% html_title_from_tags tags %}

                + + {% with tags|last as last_tag %} + {% if last_tag.has_description %} +
                + +
                {{ last_tag.description|safe|truncatewords_html:40 }}
                +
                + {% endif %} + +
                +
                + {% if categories.author %} +
                +
                {% trans "Authors" %}:
                +
                + {% inline_tag_list categories.author tags %} +
                +
                + {% endif %} + {% if categories.kind %} +
                +
                {% trans "Kinds" %}:
                +
                + {% inline_tag_list categories.kind tags %} +
                +
                + {% endif %} + {% if categories.genre %} +
                +
                {% trans "Genres" %}:
                +
                + {% inline_tag_list categories.genre tags %} +
                +
                + {% endif %} + {% if categories.epoch %} +
                +
                {% trans "Epochs" %}:
                +
                + {% inline_tag_list categories.epoch tags %} +
                +
                + {% endif %} + + {% if categories.theme %} +
                +

                + {% trans "Motifs and themes" %}

                +
                + {% tag_list categories.theme tags %} +
                +
                + {% endif %} +
                + +
                + + + {% if theme_is_set %} +
                + {% if last_tag.gazeta_link or last_tag.wiki_link %} +

                {% trans "See also" %}:

                + + {% endif %} +
                + {% endif %} + + +
                +
                + + +
                + {% if theme_is_set %} + {% work_list object_list %} + {% else %} + + {% choose_cite tag_ids=tag_ids as cite_promo_pk %} + {% choose_fragment tag_ids=tag_ids unless=cite_promo_pk as fragment_promo_pk %} + {{ cite_promo_pk.if }} + {% ssi_include 'social_cite' pk=cite_promo_pk %} + {{ cite_promo_pk.endif }} + {{ fragment_promo_pk.if }} + {% ssi_include 'catalogue_fragment_promo' pk=fragment_promo_pk %} + {{ fragment_promo_pk.endif }} + +
                + {% if last_tag.gazeta_link or last_tag.wiki_link %} +

                {% trans "See also" %}:

                + + {% endif %} +
                + +
                + {% comment %} +

                {% trans "Download" %}:

                + + {% endcomment %} +
                + {% endif %} + +
                + +
                + + + + {% if not theme_is_set %} +
                + {% if object_list %} + {% work_list object_list %} + {% else %} + {% trans "Sorry! Search cirteria did not match any resources." %} + {% include "info/join_us.html" %} + {% endif %} +
                + {% endif %} + {% endwith %} +{% endblock %} diff --git a/src/catalogue/templates/catalogue/viewer_base.html b/src/catalogue/templates/catalogue/viewer_base.html new file mode 100644 index 000000000..416b9defe --- /dev/null +++ b/src/catalogue/templates/catalogue/viewer_base.html @@ -0,0 +1,74 @@ + +{% load i18n %} +{% load static from staticfiles %} +{% load pipeline %} + + + + + {% block title %}{% endblock %} :: {% trans "Wolne Lektury" %} + + {% stylesheet "book_text" %} + {% block extrahead %}{% endblock %} + + + + + + + + {% block big-pane %} +
                + + {% block main %} +
                + {% block main-text %}{% endblock %} +
                + {% endblock main %} + {% endblock big-pane %} + + +
                + {% block footer %}{% endblock %} + +
                + + {# template #} +
                + +
                +

                * {% trans "Loading" %}

                +
                +
                +
                + +
                + + + {% block js-dependencies %}{% endblock %} + + {% javascript "book_text" %} + + {{ piwik_tag|safe }} + {% block extrabody %}{% endblock %} + + + diff --git a/src/catalogue/templates/catalogue/work-list.html b/src/catalogue/templates/catalogue/work-list.html new file mode 100755 index 000000000..30265255a --- /dev/null +++ b/src/catalogue/templates/catalogue/work-list.html @@ -0,0 +1,19 @@ +{% spaceless %} + +{% load pagination_tags %} +{% load class_name from catalogue_tags %} +{% load ssi_include from ssify %} + +{% autopaginate object_list 10 %} + +
                  +{% for item in object_list %} +
                1. + {% ssi_include item.short_html_url_name pk=item.pk %} +
                2. +{% endfor %} +
                + +{% paginate %} + +{% endspaceless %} diff --git a/src/catalogue/templatetags/__init__.py b/src/catalogue/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/catalogue/templatetags/catalogue_tags.py b/src/catalogue/templatetags/catalogue_tags.py new file mode 100644 index 000000000..6e81caec2 --- /dev/null +++ b/src/catalogue/templatetags/catalogue_tags.py @@ -0,0 +1,445 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from random import randint, random +from urlparse import urlparse + +from django.conf import settings +from django import template +from django.template import Node, Variable, Template, Context +from django.core.urlresolvers import reverse +from django.contrib.auth.forms import UserCreationForm, AuthenticationForm +from django.utils.cache import add_never_cache_headers +from django.utils.translation import ugettext as _ + +from ssify import ssi_variable +from catalogue.models import Book, BookMedia, Fragment, Tag, Source +from catalogue.constants import LICENSES +from picture.models import Picture + +register = template.Library() + + +class RegistrationForm(UserCreationForm): + def as_ul(self): + "Returns this form rendered as HTML
              • s -- excluding the
                  ." + return self._html_output(u'
                • %(errors)s%(label)s %(field)s%(help_text)s
                • ', u'
                • %s
                • ', '', u' %s', False) + + +class LoginForm(AuthenticationForm): + def as_ul(self): + "Returns this form rendered as HTML
                • s -- excluding the
                    ." + return self._html_output(u'
                  • %(errors)s%(label)s %(field)s%(help_text)s
                  • ', u'
                  • %s
                  • ', '', u' %s', False) + + +def iterable(obj): + try: + iter(obj) + return True + except TypeError: + return False + + +def capfirst(text): + try: + return '%s%s' % (text[0].upper(), text[1:]) + except IndexError: + return '' + + +@register.simple_tag +def html_title_from_tags(tags): + if len(tags) < 2: + return title_from_tags(tags) + template = Template("{{ category }}: {{ tag.name }}") + return capfirst(",
                    ".join( + template.render(Context({'tag': tag, 'category': _(tag.category)})) for tag in tags)) + + +def simple_title(tags): + title = [] + for tag in tags: + title.append("%s: %s" % (_(tag.category), tag.name)) + return capfirst(', '.join(title)) + + +@register.simple_tag +def book_title(book, html_links=False): + return book.pretty_title(html_links) + + +@register.simple_tag +def book_title_html(book): + return book_title(book, html_links=True) + + +@register.simple_tag +def title_from_tags(tags): + def split_tags(tags): + result = {} + for tag in tags: + result[tag.category] = tag + return result + + # TODO: Remove this after adding flection mechanism + return simple_title(tags) + + class Flection(object): + def get_case(self, name, flection): + return name + flection = Flection() + + self = split_tags(tags) + + title = u'' + + # Specjalny przypadek oglądania wszystkich lektur na danej półce + if len(self) == 1 and 'set' in self: + return u'Półka %s' % self['set'] + + # Specjalny przypadek "Twórczość w pozytywizmie", wtedy gdy tylko epoka + # jest wybrana przez użytkownika + if 'epoch' in self and len(self) == 1: + text = u'Twórczość w %s' % flection.get_case(unicode(self['epoch']), u'miejscownik') + return capfirst(text) + + # Specjalny przypadek "Dramat w twórczości Sofoklesa", wtedy gdy podane + # są tylko rodzaj literacki i autor + if 'kind' in self and 'author' in self and len(self) == 2: + text = u'%s w twórczości %s' % (unicode(self['kind']), + flection.get_case(unicode(self['author']), u'dopełniacz')) + return capfirst(text) + + # Przypadki ogólniejsze + if 'theme' in self: + title += u'Motyw %s' % unicode(self['theme']) + + if 'genre' in self: + if 'theme' in self: + title += u' w %s' % flection.get_case(unicode(self['genre']), u'miejscownik') + else: + title += unicode(self['genre']) + + if 'kind' in self or 'author' in self or 'epoch' in self: + if 'genre' in self or 'theme' in self: + if 'kind' in self: + title += u' w %s ' % flection.get_case(unicode(self['kind']), u'miejscownik') + else: + title += u' w twórczości ' + else: + title += u'%s ' % unicode(self.get('kind', u'twórczość')) + + if 'author' in self: + title += flection.get_case(unicode(self['author']), u'dopełniacz') + elif 'epoch' in self: + title += flection.get_case(unicode(self['epoch']), u'dopełniacz') + + return capfirst(title) + + +@register.simple_tag +def book_tree(book_list, books_by_parent): + text = "".join("
                  • %s%s
                  • " % ( + book.get_absolute_url(), book.title, book_tree(books_by_parent.get(book, ()), books_by_parent) + ) for book in book_list) + + if text: + return "
                      %s
                    " % text + else: + return '' + +@register.simple_tag +def audiobook_tree(book_list, books_by_parent): + text = "".join("
                  • %s%s
                  • " % ( + reverse("book_player", args=[book.slug]), book.title, audiobook_tree(books_by_parent.get(book, ()), books_by_parent) + ) for book in book_list) + + if text: + return "
                      %s
                    " % text + else: + return '' + +@register.simple_tag +def book_tree_texml(book_list, books_by_parent, depth=1): + return "".join(""" + %(depth)dem%(title)s + %(audiences)s + %(audiobook)s + + %(children)s + """ % { + "depth": depth, + "title": book.title, + "audiences": ", ".join(book.audiences_pl()), + "audiobook": "audiobook" if book.has_media('mp3') else "", + "children": book_tree_texml(books_by_parent.get(book.id, ()), books_by_parent, depth + 1) + } for book in book_list) + + +@register.simple_tag +def book_tree_csv(author, book_list, books_by_parent, depth=1, max_depth=3, delimeter="\t"): + def quote_if_necessary(s): + try: + s.index(delimeter) + s.replace('"', '\\"') + return '"%s"' % s + except ValueError: + return s + + return "".join("""%(author)s%(d)s%(preindent)s%(title)s%(d)s%(postindent)s%(audiences)s%(d)s%(audiobook)s +%(children)s""" % { + "d": delimeter, + "preindent": delimeter * (depth - 1), + "postindent": delimeter * (max_depth - depth), + "depth": depth, + "author": quote_if_necessary(author.name), + "title": quote_if_necessary(book.title), + "audiences": ", ".join(book.audiences_pl()), + "audiobook": "audiobook" if book.has_media('mp3') else "", + "children": book_tree_csv(author, books_by_parent.get(book.id, ()), books_by_parent, depth + 1) + } for book in book_list) + +@register.simple_tag +def all_editors(extra_info): + editors = [] + if 'editors' in extra_info: + editors += extra_info['editors'] + if 'technical_editors' in extra_info: + editors += extra_info['technical_editors'] + # support for extra_info-s from librarian<1.2 + if 'editor' in extra_info: + editors.append(extra_info['editor']) + if 'technical_editor' in extra_info: + editors.append(extra_info['technical_editor']) + return ', '.join( + ' '.join(p.strip() for p in person.rsplit(',', 1)[::-1]) + for person in sorted(set(editors))) + + +@register.simple_tag +def user_creation_form(): + return RegistrationForm(prefix='registration').as_ul() + + +@register.simple_tag +def authentication_form(): + return LoginForm(prefix='login').as_ul() + + +@register.tag +def catalogue_url(parser, token): + bits = token.split_contents() + + tags_to_add = [] + tags_to_remove = [] + for bit in bits[1:]: + if bit[0] == '-': + tags_to_remove.append(bit[1:]) + else: + tags_to_add.append(bit) + + return CatalogueURLNode(tags_to_add, tags_to_remove) + + +class CatalogueURLNode(Node): + def __init__(self, tags_to_add, tags_to_remove): + self.tags_to_add = [Variable(tag) for tag in tags_to_add] + self.tags_to_remove = [Variable(tag) for tag in tags_to_remove] + + def render(self, context): + tags_to_add = [] + tags_to_remove = [] + + for tag_variable in self.tags_to_add: + tag = tag_variable.resolve(context) + if isinstance(tag, (list, dict)): + tags_to_add += [t for t in tag] + else: + tags_to_add.append(tag) + + for tag_variable in self.tags_to_remove: + tag = tag_variable.resolve(context) + if iterable(tag): + tags_to_remove += [t for t in tag] + else: + tags_to_remove.append(tag) + + tag_slugs = [tag.url_chunk for tag in tags_to_add] + for tag in tags_to_remove: + try: + tag_slugs.remove(tag.url_chunk) + except KeyError: + pass + + if len(tag_slugs) > 0: + return reverse('tagged_object_list', kwargs={'tags': '/'.join(tag_slugs)}) + else: + return reverse('main_page') + + +@register.inclusion_tag('catalogue/tag_list.html') +def tag_list(tags, choices=None): + if choices is None: + choices = [] + if len(tags) == 1 and tags[0].category not in [t.category for t in choices]: + one_tag = tags[0] + return locals() + + +@register.inclusion_tag('catalogue/inline_tag_list.html') +def inline_tag_list(tags, choices=None): + return tag_list(tags, choices) + + +@register.inclusion_tag('catalogue/collection_list.html') +def collection_list(collections): + return locals() + + +@register.inclusion_tag('catalogue/book_info.html') +def book_info(book): + return { + 'is_picture': isinstance(book, Picture), + 'book': book, + } + + +@register.inclusion_tag('catalogue/work-list.html', takes_context=True) +def work_list(context, object_list): + request = context.get('request') + return locals() + + +# TODO: These are no longer just books. +@register.inclusion_tag('catalogue/related_books.html', takes_context=True) +def related_books(context, instance, limit=6, random=1, taken=0): + limit = limit - taken + max_books = limit - random + is_picture = isinstance(instance, Picture) + + pics_qs = Picture.objects.all() + if is_picture: + pics_qs = pics_qs.exclude(pk=instance.pk) + pics = Picture.tagged.related_to(instance, pics_qs) + if pics.exists(): + # Reserve one spot for an image. + max_books -= 1 + + books_qs = Book.objects.all() + if not is_picture: + books_qs = books_qs.exclude(common_slug=instance.common_slug).exclude(ancestor=instance) + books = Book.tagged.related_to(instance, books_qs)[:max_books] + + pics = pics[:1 + max_books - books.count()] + + random_excluded_books = [b.pk for b in books] + random_excluded_pics = [p.pk for p in pics] + (random_excluded_pics if is_picture else random_excluded_books).append(instance.pk) + + return { + 'request': context['request'], + 'books': books, + 'pics': pics, + 'random': random, + 'random_excluded_books': random_excluded_books, + 'random_excluded_pics': random_excluded_pics, + } + + +@register.inclusion_tag('catalogue/menu.html') +def catalogue_menu(): + return {'categories': [ + ('author', _('Authors'), 'autorzy'), + ('genre', _('Genres'), 'gatunki'), + ('kind', _('Kinds'), 'rodzaje'), + ('epoch', _('Epochs'), 'epoki'), + ('theme', _('Themes'), 'motywy'), + ]} + + +@register.simple_tag +def download_audio(book, daisy=True): + links = [] + if book.has_media('mp3'): + links.append("%s" % + (reverse('download_zip_mp3', args=[book.slug]), + BookMedia.formats['mp3'].name)) + if book.has_media('ogg'): + links.append("%s" % + (reverse('download_zip_ogg', args=[book.slug]), + BookMedia.formats['ogg'].name)) + if daisy and book.has_media('daisy'): + for dsy in book.get_media('daisy'): + links.append("%s" % + (dsy.file.url, BookMedia.formats['daisy'].name)) + return ", ".join(links) + + +@register.inclusion_tag("catalogue/snippets/custom_pdf_link_li.html") +def custom_pdf_link_li(book): + return { + 'book': book, + 'NO_CUSTOM_PDF': settings.NO_CUSTOM_PDF, + } + + +@register.inclusion_tag("catalogue/snippets/license_icon.html") +def license_icon(license_url): + """Creates a license icon, if the license_url is known.""" + known = LICENSES.get(license_url) + if known is None: + return {} + return { + "license_url": license_url, + "icon": "img/licenses/%s.png" % known['icon'], + "license_description": known['description'], + } + + +@register.filter +def class_name(obj): + return obj.__class__.__name__ + + +@register.simple_tag +def source_name(url): + url = url.lstrip() + netloc = urlparse(url).netloc + if not netloc: + netloc = urlparse('http://' + url).netloc + if not netloc: + return '' + source, created = Source.objects.get_or_create(netloc=netloc) + return source.name or netloc + + +@ssi_variable(register, patch_response=[add_never_cache_headers]) +def catalogue_random_book(request, exclude_ids): + from .. import app_settings + if random() < app_settings.RELATED_RANDOM_PICTURE_CHANCE: + return None + queryset = Book.objects.exclude(pk__in=exclude_ids) + count = queryset.count() + if count: + return queryset[randint(0, count - 1)].pk + else: + return None + + +@ssi_variable(register, patch_response=[add_never_cache_headers]) +def choose_fragment(request, book_id=None, tag_ids=None, unless=False): + if unless: + return None + + if book_id is not None: + fragment = Book.objects.get(pk=book_id).choose_fragment() + else: + if tag_ids is not None: + tags = Tag.objects.filter(pk__in=tag_ids) + fragments = Fragment.tagged.with_all(tags).order_by().only('id') + else: + fragments = Fragment.objects.all().order_by().only('id') + fragment_count = fragments.count() + fragment = fragments[randint(0, fragment_count - 1)] if fragment_count else None + return fragment.pk if fragment is not None else None diff --git a/src/catalogue/test_utils.py b/src/catalogue/test_utils.py new file mode 100644 index 000000000..9d87311dd --- /dev/null +++ b/src/catalogue/test_utils.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from os.path import abspath, dirname, join +import tempfile +from traceback import extract_stack +from django.test import TestCase +from django.test.utils import override_settings +from fnpdjango.utils.text.slughifi import slughifi +from librarian import WLURI +from django.conf import settings + + +@override_settings( + MEDIA_ROOT=tempfile.mkdtemp(prefix='djangotest_'), + CATALOGUE_DONT_BUILD=set(['pdf', 'mobi', 'epub', 'txt', 'fb2', 'cover']), + NO_SEARCH_INDEX=True, + CELERY_ALWAYS_EAGER=True, + CACHES={ + 'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}, + }, + SOLR=settings.SOLR_TEST, + SSIFY_RENDER=False, +) +class WLTestCase(TestCase): + """ + Generic base class for tests. Adds settings freeze and clears MEDIA_ROOT. + """ + longMessage = True + + +class PersonStub(object): + + def __init__(self, first_names, last_name): + self.first_names = first_names + self.last_name = last_name + + def readable(self): + return " ".join(self.first_names + (self.last_name,)) + + +class BookInfoStub(object): + _empty_fields = ['cover_url', 'variant_of'] + # allow single definition for multiple-value fields + _salias = { + 'authors': 'author', + } + + def __init__(self, **kwargs): + self.__dict = kwargs + + def __setattr__(self, key, value): + if not key.startswith('_'): + self.__dict[key] = value + return object.__setattr__(self, key, value) + + def __getattr__(self, key): + try: + return self.__dict[key] + except KeyError: + if key in self._empty_fields: + return None + elif key in self._salias: + return [getattr(self, self._salias[key])] + else: + raise + + def to_dict(self): + return dict((key, unicode(value)) for key, value in self.__dict.items()) + + +def info_args(title, language=None): + """ generate some keywords for comfortable BookInfoCreation """ + slug = unicode(slughifi(title)) + if language is None: + language = u'pol' + return { + 'title': unicode(title), + 'url': WLURI.from_slug(slug), + 'about': u"http://wolnelektury.pl/example/URI/%s" % slug, + 'language': language, + } + + +def get_fixture(path, app=None): + if app is not None: + mod_path = app.__file__ + f_path = join(dirname(abspath(mod_path)), 'tests/files', path) + else: + mod_path = extract_stack(limit=2)[0][0] + f_path = join(dirname(abspath(mod_path)), 'files', path) + return f_path diff --git a/src/catalogue/tests/__init__.py b/src/catalogue/tests/__init__.py new file mode 100644 index 000000000..9c41af207 --- /dev/null +++ b/src/catalogue/tests/__init__.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from catalogue.tests.book_import import * +from catalogue.tests.bookmedia import * +from catalogue.tests.cover import * +from catalogue.tests.search import * +from catalogue.tests.tags import * +from catalogue.tests.templatetags import * +from .visit import * diff --git a/src/catalogue/tests/book_import.py b/src/catalogue/tests/book_import.py new file mode 100644 index 000000000..775fc2929 --- /dev/null +++ b/src/catalogue/tests/book_import.py @@ -0,0 +1,450 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings + +from django.core.files.base import ContentFile +from catalogue.test_utils import * +from catalogue import models +from librarian import WLURI + +from nose.tools import raises +from os import path, makedirs + +class BookImportLogicTests(WLTestCase): + + def setUp(self): + WLTestCase.setUp(self) + self.book_info = BookInfoStub( + url=WLURI.from_slug(u"default-book"), + about=u"http://wolnelektury.pl/example/URI/default_book", + title=u"Default Book", + author=PersonStub(("Jim",), "Lazy"), + kind="X-Kind", + genre="X-Genre", + epoch="X-Epoch", + language=u"pol", + ) + + self.expected_tags = [ + ('author', 'jim-lazy'), + ('genre', 'x-genre'), + ('epoch', 'x-epoch'), + ('kind', 'x-kind'), + ] + self.expected_tags.sort() + + def test_empty_book(self): + BOOK_TEXT = "" + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + + self.assertEqual(book.title, "Default Book") + self.assertEqual(book.slug, "default-book") + self.assert_(book.parent is None) + self.assertFalse(book.has_html_file()) + + # no fragments generated + self.assertEqual(book.fragments.count(), 0) + + # TODO: this should be filled out probably... + self.assertEqual(book.wiki_link, '') + self.assertEqual(book.gazeta_link, '') + self.assertEqual(book.description, '') + + tags = [ (tag.category, tag.slug) for tag in book.tags ] + tags.sort() + + self.assertEqual(tags, self.expected_tags) + + def test_not_quite_empty_book(self): + """ Not empty, but without any real text. + + Should work like any other non-empty book. + """ + + BOOK_TEXT = """ + + Nic + + """ + + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + self.assertTrue(book.has_html_file()) + + def test_book_with_fragment(self): + BOOK_TEXT = """ + + LoveAla ma kota + + """ + + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + self.assertTrue(book.has_html_file()) + + self.assertEqual(book.fragments.count(), 1) + self.assertEqual(book.fragments.all()[0].text, u'

                    Ala ma kota

                    \n') + + self.assert_(('theme', 'love') in [ (tag.category, tag.slug) for tag in book.fragments.all()[0].tags ]) + + def test_book_with_empty_theme(self): + """ empty themes should be ignored """ + + BOOK_TEXT = """ + + , Love , , Ala ma kota + + """ + + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + self.assert_([('theme', 'love')], + [ (tag.category, tag.slug) for tag in book.fragments.all()[0].tags.filter(category='theme') ]) + + def test_book_with_no_theme(self): + """ fragments with no themes shouldn't be created at all """ + + BOOK_TEXT = """ + + Ala ma kota + + """ + + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + self.assertEqual(book.fragments.count(), 0) + self.assertEqual(book.tags.filter(category='theme').count(), 0) + + @raises(ValueError) + def test_book_with_invalid_slug(self): + """ Book with invalid characters in slug shouldn't be imported """ + self.book_info.url = WLURI.from_slug(u"default_book") + BOOK_TEXT = "" + models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + + def test_book_replace_title(self): + BOOK_TEXT = """""" + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + self.book_info.title = u"Extraordinary" + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info, overwrite=True) + + tags = [ (tag.category, tag.slug) for tag in book.tags ] + tags.sort() + + self.assertEqual(tags, self.expected_tags) + + def test_book_replace_author(self): + BOOK_TEXT = """""" + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + self.book_info.author = PersonStub(("Hans", "Christian"), "Andersen") + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info, overwrite=True) + + tags = [ (tag.category, tag.slug) for tag in book.tags ] + tags.sort() + + self.expected_tags.remove(('author', 'jim-lazy')) + self.expected_tags.append(('author', 'hans-christian-andersen')) + self.expected_tags.sort() + + self.assertEqual(tags, self.expected_tags) + + # the old tag shouldn't disappear + models.Tag.objects.get(slug="jim-lazy", category="author") + + def test_book_remove_fragment(self): + BOOK_TEXT = """ + + + LoveAla ma kota + HatredTo kot Ali + + + """ + BOOK_TEXT_AFTER = """ + + + LoveAla ma kota + To kot Ali + + + """ + + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + self.assertEqual(book.fragments.count(), 2) + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT_AFTER), self.book_info, overwrite=True) + self.assertEqual(book.fragments.count(), 1) + + def test_multiple_tags(self): + BOOK_TEXT = """""" + self.book_info.authors = self.book_info.author, PersonStub(("Joe",), "Dilligent"), + self.book_info.kinds = self.book_info.kind, 'Y-Kind', + self.book_info.genres = self.book_info.genre, 'Y-Genre', + self.book_info.epochs = self.book_info.epoch, 'Y-Epoch', + + self.expected_tags.extend([ + ('author', 'joe-dilligent'), + ('genre', 'y-genre'), + ('epoch', 'y-epoch'), + ('kind', 'y-kind'), + ]) + self.expected_tags.sort() + + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + tags = [ (tag.category, tag.slug) for tag in book.tags ] + tags.sort() + + self.assertEqual(tags, self.expected_tags) + + +class ChildImportTests(WLTestCase): + + def setUp(self): + WLTestCase.setUp(self) + self.child_info = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Joe",), "Doe"), + **info_args("Child") + ) + + self.parent_info = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Jim",), "Lazy"), + parts=[self.child_info.url], + **info_args("Parent") + ) + + def test_child(self): + TEXT = """""" + child = models.Book.from_text_and_meta(ContentFile(TEXT), self.child_info) + parent = models.Book.from_text_and_meta(ContentFile(TEXT), self.parent_info) + author = parent.tags.get(category='author') + books = self.client.get(author.get_absolute_url()).context['object_list'] + self.assertEqual(len(books), 1, + "Only parent book should be visible on author's page") + + def test_child_replace(self): + PARENT_TEXT = """""" + CHILD_TEXT = """ + + PiesAla ma kota + + """ + child = models.Book.from_text_and_meta(ContentFile(CHILD_TEXT), self.child_info) + parent = models.Book.from_text_and_meta(ContentFile(PARENT_TEXT), self.parent_info) + CHILD_TEXT = """ + + KotAla ma kota + + """ + child = models.Book.from_text_and_meta(ContentFile(CHILD_TEXT), self.child_info, overwrite=True) + themes = parent.related_themes() + self.assertEqual(['Kot'], [tag.name for tag in themes], + 'wrong related theme list') + + +class TreeImportTest(WLTestCase): + def setUp(self): + WLTestCase.setUp(self) + self.child_info = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Joe",), "Doe"), + **info_args("Child") + ) + self.CHILD_TEXT = """ + + Pies + Ala ma kota + + """ + self.child = models.Book.from_text_and_meta( + ContentFile(self.CHILD_TEXT), self.child_info) + + self.book_info = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Joe",), "Doe"), + parts=[self.child_info.url], + **info_args("Book") + ) + self.BOOK_TEXT = """""" + self.book = models.Book.from_text_and_meta( + ContentFile(self.BOOK_TEXT), self.book_info) + + self.parent_info = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Jim",), "Lazy"), + parts=[self.book_info.url], + **info_args("Parent") + ) + self.PARENT_TEXT = """""" + self.parent = models.Book.from_text_and_meta( + ContentFile(self.PARENT_TEXT), self.parent_info) + + def test_ok(self): + self.assertEqual( + list(self.client.get('/katalog/gatunek/x-genre/' + ).context['object_list']), + [self.parent], + u"There should be only parent on common tag page." + ) + pies = models.Tag.objects.get(slug='pies') + themes = self.parent.related_themes() + self.assertEqual(len(themes), 1, + u"There should be child theme in parent theme counter." + ) + # TODO: book_count is deprecated, update here. + #~ epoch = models.Tag.objects.get(slug='x-epoch') + #~ self.assertEqual(epoch.book_count, 1, + #~ u"There should be only parent in common tag's counter." + #~ ) + + def test_child_republish(self): + CHILD_TEXT = """ + + Pies, Kot + Ala ma kota + + """ + models.Book.from_text_and_meta( + ContentFile(CHILD_TEXT), self.child_info, overwrite=True) + self.assertEqual( + list(self.client.get('/katalog/gatunek/x-genre/' + ).context['object_list']), + [self.parent], + u"There should only be parent on common tag page." + ) + pies = models.Tag.objects.get(slug='pies') + kot = models.Tag.objects.get(slug='kot') + self.assertEqual(len(self.parent.related_themes()), 2, + u"There should be child themes in parent theme counter." + ) + # TODO: book_count is deprecated, update here. + #~ epoch = models.Tag.objects.get(slug='x-epoch') + #~ self.assertEqual(epoch.book_count, 1, + #~ u"There should only be parent in common tag's counter." + #~ ) + + def test_book_change_child(self): + second_child_info = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='Other-Kind', + author=PersonStub(("Joe",), "Doe"), + **info_args("Second Child") + ) + SECOND_CHILD_TEXT = """ + + Kot + Ala ma kota + + """ + # Import a second child. + second_child = models.Book.from_text_and_meta( + ContentFile(SECOND_CHILD_TEXT), second_child_info) + # The book has only this new child now. + self.book_info.parts = [second_child_info.url] + self.book = models.Book.from_text_and_meta( + ContentFile(self.BOOK_TEXT), self.book_info, overwrite=True) + + self.assertEqual( + set(self.client.get('/katalog/gatunek/x-genre/' + ).context['object_list']), + set([self.parent, self.child]), + u"There should be parent and old child on common tag page." + ) + kot = models.Tag.objects.get(slug='kot') + self.assertEqual(len(self.parent.related_themes()), 1, + u"There should only be new child themes in parent theme counter." + ) + epoch = models.Tag.objects.get(slug='x-epoch') + # book_count deprecated, update test. + #~ self.assertEqual(epoch.book_count, 2, + #~ u"There should be parent and old child in common tag's counter." + #~ ) + self.assertEqual( + list(self.client.get('/katalog/lektura/parent/motyw/kot/' + ).context['fragments']), + [second_child.fragments.all()[0]], + u"There should be new child's fragments on parent's theme page." + ) + self.assertEqual( + list(self.client.get('/katalog/lektura/parent/motyw/pies/' + ).context['fragments']), + [], + u"There should be no old child's fragments on parent's theme page." + ) + + +class MultilingualBookImportTest(WLTestCase): + def setUp(self): + WLTestCase.setUp(self) + common_uri = WLURI.from_slug('common-slug') + + self.pol_info = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Joe",), "Doe"), + variant_of=common_uri, + **info_args(u"Książka") + ) + + self.eng_info = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Joe",), "Doe"), + variant_of=common_uri, + **info_args("A book", "eng") + ) + + def test_multilingual_import(self): + BOOK_TEXT = """A""" + + book1 = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.pol_info) + book2 = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.eng_info) + + self.assertEqual( + set([b.language for b in models.Book.objects.all()]), + set(['pol', 'eng']), + 'Books imported in wrong languages.' + ) + + +class BookImportGenerateTest(WLTestCase): + def setUp(self): + WLTestCase.setUp(self) + xml = path.join(path.dirname(__file__), 'files/fraszka-do-anusie.xml') + self.book = models.Book.from_xml_file(xml) + + def test_gen_pdf(self): + self.book.pdf_file.build() + book = models.Book.objects.get(pk=self.book.pk) + self.assertTrue(path.exists(book.pdf_file.path)) + + def test_gen_pdf_parent(self): + """This book contains a child.""" + xml = path.join(path.dirname(__file__), "files/fraszki.xml") + parent = models.Book.from_xml_file(xml) + parent.pdf_file.build() + parent = models.Book.objects.get(pk=parent.pk) + self.assertTrue(path.exists(parent.pdf_file.path)) + + def test_custom_pdf(self): + from catalogue.tasks import build_custom_pdf + out = 'test-custom.pdf' + absoulute_path = path.join(settings.MEDIA_ROOT, out) + + if not path.exists(path.dirname(absoulute_path)): + makedirs(path.dirname(absoulute_path)) + + build_custom_pdf(self.book.id, + customizations=['nofootnotes', '13pt', 'a4paper'], file_name=out) + self.assertTrue(path.exists(absoulute_path)) diff --git a/src/catalogue/tests/bookmedia.py b/src/catalogue/tests/bookmedia.py new file mode 100644 index 000000000..2d3cf539d --- /dev/null +++ b/src/catalogue/tests/bookmedia.py @@ -0,0 +1,119 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from os.path import basename, exists, join, dirname +from django.core.files.base import ContentFile + +from catalogue.test_utils import * +from catalogue import models, utils + +class BookMediaTests(WLTestCase): + + def setUp(self): + WLTestCase.setUp(self) + self.file = ContentFile('X') + self.file2 = ContentFile('Y') + self.book = models.Book.objects.create(slug='test-book') + + def test_diacritics(self): + bm = models.BookMedia(book=self.book, type="ogg", + name=u"Zażółć gęślą jaźń") + bm.file.save(None, self.file) + self.assertEqual(basename(bm.file.name), 'zazolc-gesla-jazn.ogg') + + def test_long_name(self): + bm = models.BookMedia(book=self.book, type="ogg", + name="Some very very very very very very very very very very very very very very very very long file name") + bm.file.save(bm.name, self.file) + + # reload to see what was really saved + bm = models.BookMedia.objects.get(pk=bm.pk) + self.assertEqual(bm.file.size, 1) + + def test_overwrite(self): + """ + File gets overwritten with same filename on update. + """ + + bm = models.BookMedia(book=self.book, type='ogg', + name="Some media") + bm.file.save(None, self.file) + bm.file.save(None, self.file2) + + self.assertEqual(bm.file.read(), 'Y') + self.assertEqual(basename(bm.file.name), 'some-media.ogg') + + def test_no_clobber(self): + """ + File save doesn't clobber some other media with similar name. + """ + + bm = models.BookMedia(book=self.book, type='ogg', + name=u"Tytul") + bm.file.save(None, self.file) + bm2 = models.BookMedia(book=self.book, type='ogg', + name=u"Tytuł") + bm2.file.save(None, self.file2) + self.assertEqual(basename(bm.file.name), 'tytul.ogg') + self.assertNotEqual(basename(bm2.file.name), 'tytul.ogg') + self.assertEqual(bm.file.read(), 'X') + self.assertEqual(bm2.file.read(), 'Y') + + def test_change_name(self): + """ + File name reflects name change. + """ + + bm = models.BookMedia(book=self.book, type='ogg', name="Title") + bm.file.save(None, self.file) + bm.name = "Other Title" + bm.save() + self.assertEqual(basename(bm.file.name), 'other-title.ogg') + self.assertEqual(bm.file.read(), 'X') + + def test_change_name_no_clobber(self): + """ + File name after change won't clobber some other file + with similar name. + """ + + bm = models.BookMedia(book=self.book, type='ogg', name="Title") + bm.file.save(None, self.file) + bm2 = models.BookMedia(book=self.book, type='ogg', name="Other title") + bm2.file.save(None, self.file2) + bm2.name = "Title" + bm2.save() + self.assertNotEqual(basename(bm2.file.name), 'title.ogg') + self.assertEqual(bm.file.read(), 'X') + self.assertEqual(bm2.file.read(), 'Y') + + def test_zip_audiobooks(self): + paths = [ + (None, join(dirname(__file__), "files/fraszka-do-anusie.xml")), + (None, join(dirname(__file__), "files/fraszki.xml")), + ] + + url = utils.create_zip(paths, 'test-zip-slug') + self.assertEqual("zip/test-zip-slug.zip", url) + self.assertTrue(exists(join(settings.MEDIA_ROOT, url))) + + utils.remove_zip('test-zip-slug') + self.assertFalse(exists(join(settings.MEDIA_ROOT, url))) + + def test_remove_zip_on_media_change(self): + bm = models.BookMedia(book=self.book, type='ogg', name="Title") + bm.file.save(None, self.file) + bm.save() + + zip_url = self.book.zip_audiobooks('ogg') + self.assertEqual('zip/'+self.book.slug+'_ogg.zip', zip_url) + self.assertTrue(exists(join(settings.MEDIA_ROOT, zip_url))) + + bm2 = models.BookMedia(book=self.book, type='ogg', name="Other title") + bm2.file.save(None, self.file2) + bm2.name = "Title" + bm2.save() + # was the audiobook zip deleted? + self.assertFalse(exists(join(settings.MEDIA_ROOT, zip_url))) diff --git a/src/catalogue/tests/cover.py b/src/catalogue/tests/cover.py new file mode 100755 index 000000000..0e08556b4 --- /dev/null +++ b/src/catalogue/tests/cover.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.core.files.base import ContentFile +from catalogue.test_utils import BookInfoStub, PersonStub, info_args, WLTestCase +from catalogue.models import Book +from mock import patch + + +class CoverTests(WLTestCase): + """Checks in parent_cover_changed is properly called.""" + def setUp(self): + WLTestCase.setUp(self) + self.TEXT = """""" + self.child = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Joe",), "Doe"), + **info_args("Child") + ) + + self.parent = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Jim",), "Lazy"), + cover_url="http://example.com/cover.jpg", + parts=[self.child.url], + **info_args("Parent") + ) + + @patch.object(Book, 'parent_cover_changed', autospec=True) + def test_simple_import(self, parent_cover_changed): + child = Book.from_text_and_meta(ContentFile(self.TEXT), self.child) + parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent) + parent_cover_changed.assert_called_with(child) + + # Now reimport parent. + parent_cover_changed.reset_mock() + parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent, + overwrite=True) + self.assertEqual(parent_cover_changed.call_count, 0) + + # Now change cover in parent. + parent_cover_changed.reset_mock() + self.parent.cover_url = "http://example.com/other-cover.jpg" + parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent, + overwrite=True) + parent_cover_changed.assert_called_with(child) + + @patch.object(Book, 'parent_cover_changed', autospec=True) + def test_change_cover(self, parent_cover_changed): + child = Book.from_text_and_meta(ContentFile(self.TEXT), self.child) + parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent) + parent_cover_changed.assert_called_with(child) + + @patch.object(Book, 'parent_cover_changed', autospec=True) + def test_new_child(self, parent_cover_changed): + # Add parent without child first. + parts, self.parent.parts = self.parent.parts, [] + parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent) + + # Now import child and reimport parent. + child = Book.from_text_and_meta(ContentFile(self.TEXT), self.child) + self.parent.parts = parts + parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent, + overwrite=True) + parent_cover_changed.assert_called_with(child) + + # Now remove the child. + parent_cover_changed.reset_mock() + self.parent.parts = [] + parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent, + overwrite=True) + parent_cover_changed.assert_called_with(child) diff --git a/src/catalogue/tests/files/fraszka-do-anusie.xml b/src/catalogue/tests/files/fraszka-do-anusie.xml new file mode 100755 index 000000000..3bbda155e --- /dev/null +++ b/src/catalogue/tests/files/fraszka-do-anusie.xml @@ -0,0 +1,49 @@ + + + + +Sęp Szarzyński, Mikołaj +Fraszka do Anusie +Sekuła, Aleksandra +Sutkowska, Olga +Fundacja Nowoczesna Polska +Barok +Liryka +Fraszka +Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez Bibliotekę Narodową z egzemplarza pochodzącego ze zbiorów BN. +http://wolnelektury.pl/katalog/lektura/fraszka-do-anusie +http://www.polona.pl/Content/8759 +Szarzyński Sęp, Mikołaj (ca 1550-1581), Rytmy abo Wiersze polskie w wyborze, E. Wende, Warszawa, 1914 +Domena publiczna - Mikołaj Sęp Szarzyński zm. 1581 +1581 +xml +text +text +2008-12-29 +L +L +pol + + + + +Mikołaj Sęp Szarzyński + +Fraszka do Anusie + + + +Kochanek, Łzy, Miłość, Oko, Serce, WzrokJeśli oczu hamować swoich nie umiały/ +Leśnych krynic boginie, aby nie płakały,/ +Gdy baczyłybaczyły --- tu: zobaczyły, patrzyły na. przy studni Narcyza pięknego,/ +A on umarł prze miłość oblicza swojego;/ +Jeśli nieśmiertelnym stanom żałość rozkazuje,/ +Gdy niebaczna fortuna co niesłusznie psuje: + +Jakoż ja mam hamować, by na lice moje/ +Z oczu smutnych żałośne nie płynęły zdroje?/ +Jako serce powściągać, aby nie wzdychało/ +I od ciężkiej żałości omdlewać nie miało? + + + diff --git a/src/catalogue/tests/files/fraszki.xml b/src/catalogue/tests/files/fraszki.xml new file mode 100755 index 000000000..90e7c1245 --- /dev/null +++ b/src/catalogue/tests/files/fraszki.xml @@ -0,0 +1,27 @@ + + + + +Kochanowski, Jan +Fraszki +http://wolnelektury.pl/katalog/lektura/fraszka-do-anusie + +Fundacja Nowoczesna Polska +Renesans +Liryka +Fraszka + + +http://wolnelektury.pl/katalog/lektura/fraszki + +Domena publiczna - Jan Kochanowski zm. 1584 +1584 +xml +text + +text +2008-11-12 +pol + + + diff --git a/src/catalogue/tests/search.py b/src/catalogue/tests/search.py new file mode 100644 index 000000000..77afae4c3 --- /dev/null +++ b/src/catalogue/tests/search.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from catalogue import models, views +from catalogue.test_utils import * + +from nose.tools import raises + +class BasicSearchLogicTests(WLTestCase): + + def setUp(self): + WLTestCase.setUp(self) + self.author_tag = models.Tag.objects.create( + name=u'Adam Mickiewicz [SubWord]', + category=u'author', slug="one") + + self.unicode_tag = models.Tag.objects.create( + name=u'Tadeusz Żeleński (Boy)', + category=u'author', slug="two") + + self.polish_tag = models.Tag.objects.create( + name=u'ĘÓĄŚŁŻŹĆŃęóąśłżźćń', + category=u'author', slug="three") + + @raises(ValueError) + def test_empty_query(self): + """ Check that empty queries raise an error. """ + views.find_best_matches(u'') + + @raises(ValueError) + def test_one_letter_query(self): + """ Check that one letter queries aren't permitted. """ + views.find_best_matches(u't') + + def test_match_by_prefix(self): + """ Tags should be matched by prefix of words within it's name. """ + self.assertEqual(views.find_best_matches(u'Ada'), (self.author_tag,)) + self.assertEqual(views.find_best_matches(u'Mic'), (self.author_tag,)) + self.assertEqual(views.find_best_matches(u'Mickiewicz'), (self.author_tag,)) + + def test_match_case_insensitive(self): + """ Tag names should match case insensitive. """ + self.assertEqual(views.find_best_matches(u'adam mickiewicz'), (self.author_tag,)) + + def test_match_case_insensitive_unicode(self): + """ Tag names should match case insensitive (unicode). """ + self.assertEqual(views.find_best_matches(u'tadeusz żeleński (boy)'), (self.unicode_tag,)) + + def test_word_boundary(self): + self.assertEqual(views.find_best_matches(u'SubWord'), (self.author_tag,)) + self.assertEqual(views.find_best_matches(u'[SubWord'), (self.author_tag,)) + + def test_unrelated_search(self): + self.assertEqual(views.find_best_matches(u'alamakota'), tuple()) + self.assertEqual(views.find_best_matches(u'Adama'), ()) + + def test_infix_doesnt_match(self): + """ Searching for middle of a word shouldn't match. """ + self.assertEqual(views.find_best_matches(u'deusz'), tuple()) + + def test_diactricts_removal_pl(self): + """ Tags should match both with and without national characters. """ + self.assertEqual(views.find_best_matches(u'ĘÓĄŚŁŻŹĆŃęóąśłżźćń'), (self.polish_tag,)) + self.assertEqual(views.find_best_matches(u'EOASLZZCNeoaslzzcn'), (self.polish_tag,)) + self.assertEqual(views.find_best_matches(u'eoaslzzcneoaslzzcn'), (self.polish_tag,)) + + def test_diactricts_query_removal_pl(self): + """ Tags without national characters shouldn't be matched by queries with them. """ + self.assertEqual(views.find_best_matches(u'Adąm'), ()) + + def test_sloppy(self): + self.assertEqual(views.find_best_matches(u'Żelenski'), (self.unicode_tag,)) + self.assertEqual(views.find_best_matches(u'zelenski'), (self.unicode_tag,)) diff --git a/src/catalogue/tests/tags.py b/src/catalogue/tests/tags.py new file mode 100644 index 000000000..42ea6e245 --- /dev/null +++ b/src/catalogue/tests/tags.py @@ -0,0 +1,297 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.core.files.base import ContentFile +from django.test import Client +from catalogue import models +from catalogue.test_utils import * + + +class BooksByTagTests(WLTestCase): + """ tests the /katalog/category/tag page for found books """ + + def setUp(self): + WLTestCase.setUp(self) + author = PersonStub(("Common",), "Man") + + # grandchild + self.gchild_info = BookInfoStub(genre='Genre', epoch='Epoch', kind='Kind', author=author, + **info_args("GChild")) + # child + self.child_info = BookInfoStub(genre='Genre', epoch='Epoch', kind='Other Kind', author=author, + parts=[self.gchild_info.url], + **info_args("Child")) + # parent + self.parent_info = BookInfoStub(genre='Genre', epoch='Epoch', kind='Kind', author=author, + parts=[self.child_info.url], + **info_args("Parent")) + + self.book_file = ContentFile('') + + def test_nonexistent_tag(self): + """ Looking for a non-existent tag should yield 404 """ + self.assertEqual(404, self.client.get('/katalog/autor/czeslaw-milosz/').status_code) + + def test_book_tag(self): + """ Looking for a book tag isn't permitted """ + models.Book.from_text_and_meta(self.book_file, self.gchild_info) + self.assertEqual(404, self.client.get('/katalog/gchild/').status_code) + + def test_tag_empty(self): + """ Tag with no books should return no books """ + models.Book.from_text_and_meta(self.book_file, self.gchild_info) + models.Tag.objects.create(name='Empty tag', slug='empty', category='author') + + context = self.client.get('/katalog/autor/empty/').context + self.assertEqual(0, len(context['object_list'])) + + def test_tag_eliminate(self): + """ Filtering by tag should only yield top-level qualifying books. """ + for info in self.gchild_info, self.child_info, self.parent_info: + models.Book.from_text_and_meta(self.book_file, info) + + # all three qualify + context = self.client.get('/katalog/gatunek/genre/').context + self.assertEqual([book.title for book in context['object_list']], + ['Parent']) + + # parent and gchild qualify, child doesn't + context = self.client.get('/katalog/rodzaj/kind/').context + self.assertEqual([book.title for book in context['object_list']], + ['Parent']) + + # Filtering by child's tag should yield the child + context = self.client.get('/katalog/rodzaj/other-kind/').context + self.assertEqual([book.title for book in context['object_list']], + ['Child']) + + +class TagRelatedTagsTests(WLTestCase): + """ tests the /katalog/category/tag/ page for related tags """ + + def setUp(self): + WLTestCase.setUp(self) + self.client = Client() + author = PersonStub(("Common",), "Man") + + gchild_info = BookInfoStub(author=author, genre="GchildGenre", epoch='Epoch', kind="Kind", + **info_args(u"GChild")) + child1_info = BookInfoStub(author=author, genre="ChildGenre", epoch='Epoch', kind="ChildKind", + parts=[gchild_info.url], + **info_args(u"Child1")) + child2_info = BookInfoStub(author=author, genre="ChildGenre", epoch='Epoch', kind="ChildKind", + **info_args(u"Child2")) + parent_info = BookInfoStub(author=author, genre="Genre", epoch='Epoch', kind="Kind", + parts=[child1_info.url, child2_info.url], + **info_args(u"Parent")) + + for info in gchild_info, child1_info, child2_info, parent_info: + book_text = """ + + Theme, %sTheme + Ala ma kota + + + """ % info.title.encode('utf-8') + book = models.Book.from_text_and_meta(ContentFile(book_text), info) + book.save() + + tag_empty = models.Tag(name='Empty tag', slug='empty', category='author') + tag_empty.save() + + def test_empty(self): + """ empty tag should have no related tags """ + + cats = self.client.get('/katalog/autor/empty/').context['categories'] + self.assertEqual({k: v for (k, v) in cats.items() if v}, {}, + 'tags related to empty tag') + + def test_has_related(self): + """ related own and descendants' tags should be generated """ + + cats = self.client.get('/katalog/rodzaj/kind/').context['categories'] + self.assertTrue('Common Man' in [tag.name for tag in cats['author']], + 'missing `author` related tag') + self.assertTrue('Epoch' in [tag.name for tag in cats['epoch']], + 'missing `epoch` related tag') + self.assertFalse(cats.get("kind", False), + "There should be no child-only related `kind` tags") + self.assertTrue("Genre" in [tag.name for tag in cats['genre']], + 'missing `genre` related tag') + self.assertFalse("ChildGenre" in [tag.name for tag in cats['genre']], + "There should be no child-only related `genre` tags") + self.assertTrue("GchildGenre" in [tag.name for tag in cats['genre']], + "missing grandchild's related tag") + self.assertTrue('Theme' in [tag.name for tag in cats['theme']], + "missing related theme") + self.assertFalse('Child1Theme' in [tag.name for tag in cats['theme']], + "There should be no child-only related `theme` tags") + self.assertTrue('GChildTheme' in [tag.name for tag in cats['theme']], + "missing grandchild's related theme") + + def test_related_differ(self): + """ related tags shouldn't include filtering tags """ + + response = self.client.get('/katalog/rodzaj/kind/') + cats = response.context['categories'] + self.assertFalse(cats.get('kind', False), + 'filtering tag wrongly included in related') + cats = self.client.get('/katalog/motyw/theme/').context['categories'] + self.assertFalse('Theme' in [tag.name for tag in cats['theme']], + 'filtering theme wrongly included in related') + + def test_parent_tag_once(self): + """ if parent and descendants have a common tag, count it only once """ + + cats = self.client.get('/katalog/rodzaj/kind/').context['categories'] + self.assertEqual([(tag.name, tag.count) for tag in cats['epoch']], + [('Epoch', 1)], + 'wrong related tag epoch tag on tag page') + + + def test_siblings_tags_count(self): + """ if children have tags and parent hasn't, count the children """ + + cats = self.client.get('/katalog/epoka/epoch/').context['categories'] + self.assertTrue(('ChildKind', 2) in [(tag.name, tag.count) for tag in cats['kind']], + 'wrong related kind tags on tag page, got: ' + + unicode([(tag.name, tag.count) for tag in cats['kind']])) + + # all occurencies of theme should be counted + self.assertTrue(('Theme', 4) in [(tag.name, tag.count) for tag in cats['theme']], + 'wrong related theme count') + + def test_query_child_tag(self): + """ + If child and parent have a common tag, but parent isn't included + in the result, child should still count. + """ + cats = self.client.get('/katalog/gatunek/childgenre/').context['categories'] + self.assertTrue(('Epoch', 2) in [(tag.name, tag.count) for tag in cats['epoch']], + 'wrong related kind tags on tag page, got: ' + + unicode([(tag.name, tag.count) for tag in cats['epoch']])) + + +class CleanTagRelationTests(WLTestCase): + """ tests for tag relations cleaning after deleting things """ + + def setUp(self): + WLTestCase.setUp(self) + author = PersonStub(("Common",), "Man") + + book_info = BookInfoStub(author=author, genre="G", epoch='E', kind="K", + **info_args(u"Book")) + book_text = """ + ThemeAla ma kota + + + """ + self.book = models.Book.from_text_and_meta(ContentFile(book_text), book_info) + + def test_delete_objects(self): + """ there should be no related tags left after deleting some objects """ + + models.Book.objects.all().delete() + cats = self.client.get('/katalog/rodzaj/k/').context['categories'] + self.assertEqual({k: v for (k, v) in cats.items() if v}, {}) + self.assertEqual(models.Fragment.objects.all().count(), 0, + "orphaned fragments left") + self.assertEqual(models.Tag.intermediary_table_model.objects.all().count(), 0, + "orphaned TagRelation objects left") + + def test_deleted_tag(self): + """ there should be no tag relations left after deleting tags """ + + models.Tag.objects.all().delete() + self.assertEqual(len(self.book.related_themes()), 0) + self.assertEqual(models.Tag.intermediary_table_model.objects.all().count(), 0, + "orphaned TagRelation objects left") + + +class TestIdenticalTag(WLTestCase): + + def setUp(self): + WLTestCase.setUp(self) + author = PersonStub((), "Tag") + + self.book_info = BookInfoStub(author=author, + genre="tag", + epoch='tag', + kind="tag", + **info_args(u"tag")) + self.book_text = """ + + + tagAla ma kota + + + + """ + + + def test_book_tags(self): + """ there should be all related tags in relevant categories """ + book = models.Book.from_text_and_meta(ContentFile(self.book_text), self.book_info) + + related_themes = book.related_themes() + for category in 'author', 'kind', 'genre', 'epoch': + self.assertTrue('tag' in [tag.slug for tag in book.tags.filter(category=category)], + 'missing related tag for %s' % category) + self.assertTrue('tag' in [tag.slug for tag in related_themes]) + + def test_qualified_url(self): + models.Book.from_text_and_meta(ContentFile(self.book_text), self.book_info) + categories = {'author': 'autor', 'theme': 'motyw', 'epoch': 'epoka', 'kind':'rodzaj', 'genre':'gatunek'} + for cat, localcat in categories.iteritems(): + context = self.client.get('/katalog/%s/tag/' % localcat).context + self.assertEqual(1, len(context['object_list'])) + self.assertNotEqual({}, context['categories']) + self.assertFalse(context['categories'].get(cat, False)) + + +class BookTagsTests(WLTestCase): + """ tests the /katalog/lektura/book/ page for related tags """ + + def setUp(self): + WLTestCase.setUp(self) + author1 = PersonStub(("Common",), "Man") + author2 = PersonStub(("Jim",), "Lazy") + + child_info = BookInfoStub(authors=(author1, author2), genre="ChildGenre", epoch='Epoch', kind="ChildKind", + **info_args(u"Child")) + parent_info = BookInfoStub(author=author1, genre="Genre", epoch='Epoch', kind="Kind", + parts=[child_info.url], + **info_args(u"Parent")) + + for info in child_info, parent_info: + book_text = """ + + Theme, %sTheme + Ala ma kota + + + """ % info.title.encode('utf-8') + models.Book.from_text_and_meta(ContentFile(book_text), info) + + def test_book_tags(self): + """ book should have own tags and whole tree's themes """ + + book = models.Book.objects.get(slug='parent') + related_themes = book.related_themes() + + self.assertEqual([t.slug for t in book.tags.filter(category='author')], + ['common-man']) + self.assertEqual([t.slug for t in book.tags.filter(category='kind')], + ['kind']) + self.assertEqual([(tag.name, tag.count) for tag in related_themes], + [('ChildTheme', 1), ('ParentTheme', 1), ('Theme', 2)]) + + def test_catalogue_tags(self): + """ test main page tags and counts """ + context = self.client.get('/katalog/').context + self.assertEqual([(tag.name, tag.count) for tag in context['categories']['author']], + [('Jim Lazy', 1), ('Common Man', 1)]) + self.assertEqual([(tag.name, tag.count) for tag in context['categories']['theme']], + [('ChildTheme', 1), ('ParentTheme', 1), ('Theme', 2)]) + diff --git a/src/catalogue/tests/templatetags.py b/src/catalogue/tests/templatetags.py new file mode 100644 index 000000000..a66d604de --- /dev/null +++ b/src/catalogue/tests/templatetags.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from catalogue import models +from catalogue.templatetags import catalogue_tags +from catalogue.test_utils import * +from django.core.files.base import ContentFile + + +class BookDescTests(WLTestCase): + """ tests book_title template tag """ + + def setUp(self): + WLTestCase.setUp(self) + authors = PersonStub(("Common",), "Man"), PersonStub(("Jane",), "Doe") + + child_info = BookInfoStub(authors=authors, genre="Genre", epoch='Epoch', kind="Kind", + **info_args(u"Child")) + parent_info = BookInfoStub(authors=authors, genre="Genre", epoch='Epoch', kind="Kind", + parts=[child_info.url], + **info_args(u"Parent")) + + self.child = models.Book.from_text_and_meta(ContentFile(''), child_info) + models.Book.from_text_and_meta(ContentFile(''), parent_info) + self.child = models.Book.objects.get(pk=self.child.pk) + + def test_book_desc(self): + """ book description should return authors, ancestors, book """ + self.assertEqual(catalogue_tags.book_title(self.child), 'Jane Doe, Common Man, Parent, Child') diff --git a/src/catalogue/tests/visit.py b/src/catalogue/tests/visit.py new file mode 100644 index 000000000..cab3c987d --- /dev/null +++ b/src/catalogue/tests/visit.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from catalogue import models +from catalogue.test_utils import BookInfoStub, PersonStub, WLTestCase, info_args +from django.core.files.base import ContentFile + + +class VisitTest(WLTestCase): + """Simply create some objects and visit some views.""" + + def setUp(self): + WLTestCase.setUp(self) + author = PersonStub(("Jane",), "Doe") + book_info = BookInfoStub(author=author, genre="Genre", + epoch='Epoch', kind="Kind", **info_args(u"A book")) + self.book = models.Book.from_text_and_meta(ContentFile(''' + + + + + Theme + Test + + + + + '''), book_info) + self.collection = models.Collection.objects.create( + title='Biblioteczka Boya', slug='boy', book_slugs='a-book') + + def test_visit_urls(self): + """ book description should return authors, ancestors, book """ + url_map = { + 200: [ + '', + 'lektury/', + 'lektury/boy/', + 'nowe/', + 'lektura/a-book/', + 'lektura/a-book.html', + 'lektura/a-book/motyw/theme/', + 'motyw/theme/', + 'autor/jane-doe/', + 'autor/jane-doe/gatunek/genre/', + 'autor/jane-doe/gatunek/genre/motyw/theme/', + 'pl.json', + 'b/%d/mini.pl.html' % self.book.pk, + 'b/%d/mini_nolink.pl.html' % self.book.pk, + 'b/%d/short.pl.html' % self.book.pk, + 'b/%d/wide.pl.html' % self.book.pk, + 'f/%d/promo.pl.html' % self.book.fragments.all()[0].pk, + 'f/%d/short.pl.html' % self.book.fragments.all()[0].pk, + ], + 404: [ + 'lektury/nonexistent/', # Nonexistent Collection. + 'lektura/nonexistent/', # Nonexistent Book. + 'lektura/nonexistent.html', # Nonexistent Book's HTML. + 'lektura/nonexistent/motyw/theme/', # Nonexistent Book's theme. + 'lektura/a-book/motyw/nonexistent/', # Nonexistent theme in a Book. + 'autor/nonexistent/', # Nonexistent author. + 'motyw/nonexistent/', # Nonexistent theme. + 'zh.json', # Nonexistent language. + 'b/%d/mini.pl.html' % (self.book.pk + 100), # Nonexistent book. + 'b/%d/mini_nolink.pl.html' % (self.book.pk + 100), # Nonexistent book. + 'b/%d/short.pl.html' % (self.book.pk + 100), # Nonexistent book. + 'b/%d/wide.pl.html' % (self.book.pk + 100), # Nonexistent book. + 'f/%d/promo.pl.html' % (self.book.fragments.all()[0].pk + 100), # Nonexistent fragment. + 'f/%d/short.pl.html' % (self.book.fragments.all()[0].pk + 100), # Nonexistent fragment. + ] + } + prefix = '/katalog/' + for expected_status, urls in url_map.items(): + for url in urls: + print(url) + status = self.client.get(prefix + url).status_code + self.assertEqual(status, expected_status, + "Wrong status code for '%s'. Expected %d, got %d." % ( + prefix + url, expected_status, status)) diff --git a/src/catalogue/translation.py b/src/catalogue/translation.py new file mode 100644 index 000000000..319736515 --- /dev/null +++ b/src/catalogue/translation.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# + +from modeltranslation.translator import translator, TranslationOptions +from catalogue.models import Collection, Tag, Source + +class TagTranslationOptions(TranslationOptions): + fields = ('name', 'description', 'wiki_link') + +class CollectionTranslationOptions(TranslationOptions): + fields = ('title', 'description') + +class SourceTranslationOptions(TranslationOptions): + fields = ('name',) + +translator.register(Tag, TagTranslationOptions) +translator.register(Collection, CollectionTranslationOptions) +translator.register(Source, SourceTranslationOptions) diff --git a/src/catalogue/urls.py b/src/catalogue/urls.py new file mode 100644 index 000000000..b7c59a055 --- /dev/null +++ b/src/catalogue/urls.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url +from django.db.models import Max +from django.views.generic import ListView, RedirectView +from catalogue.feeds import AudiobookFeed +from catalogue.views import CustomPDFFormView +from catalogue.models import Book + + +SLUG = r'[a-z0-9-]*' + +urlpatterns = patterns('picture.views', + # pictures - currently pictures are coupled with catalogue, hence the url is here + url(r'^obraz/$', 'picture_list_thumb', name='picture_list_thumb'), + url(r'^obraz/(?P%s).html$' % SLUG, 'picture_viewer', name='picture_viewer'), + url(r'^obraz/(?P%s)/$' % SLUG, 'picture_detail'), + + url(r'^p/(?P\d+)/mini\.(?P.+)\.html', 'picture_mini', name='picture_mini'), + url(r'^p/(?P\d+)/short\.(?P.+)\.html', 'picture_short', name='picture_short'), + url(r'^pa/(?P\d+)/short\.(?P.+)\.html', 'picturearea_short', name='picture_area_short'), +) + +urlpatterns += patterns('', + # old search page - redirected + url(r'^szukaj/$', RedirectView.as_view( + url='/szukaj/', query_string=True, permanent=True)), +) + +urlpatterns += patterns('catalogue.views', + url(r'^$', 'catalogue', name='catalogue'), + + url(r'^lektury/$', 'book_list', name='book_list'), + url(r'^lektury/(?P[a-zA-Z0-9-]+)/$', 'collection', name='collection'), + url(r'^audiobooki/$', 'audiobook_list', name='audiobook_list'), + url(r'^daisy/$', 'daisy_list', name='daisy_list'), + url(r'^tags/$', 'tags_starting_with', name='hint'), + url(r'^jtags/?$', 'json_tags_starting_with', name='jhint'), + url(r'^nowe/$', ListView.as_view( + queryset=Book.objects.filter(parent=None).order_by('-created_at'), + template_name='catalogue/recent_list.html'), name='recent_list'), + url(r'^nowe/audiobooki/$', ListView.as_view( + queryset=Book.objects.filter(media__type='ogg').annotate(m=Max('media__uploaded_at')).order_by('-m'), + template_name='catalogue/recent_audiobooks_list.html'), name='recent_audiobooks_list'), + url(r'^nowe/daisy/$', ListView.as_view( + queryset=Book.objects.filter(media__type='daisy').annotate(m=Max('media__uploaded_at')).order_by('-m'), + template_name='catalogue/recent_daisy_list.html'), name='recent_daisy_list'), + + url(r'^custompdf/(?P%s)/$' % SLUG, CustomPDFFormView(), name='custom_pdf_form'), + + url(r'^audiobooki/(?Pmp3|ogg|daisy|all).xml$', AudiobookFeed(), name='audiobook_feed'), + + + # zip + url(r'^zip/pdf\.zip$', 'download_zip', {'format': 'pdf', 'slug': None}, 'download_zip_pdf'), + url(r'^zip/epub\.zip$', 'download_zip', {'format': 'epub', 'slug': None}, 'download_zip_epub'), + url(r'^zip/mobi\.zip$', 'download_zip', {'format': 'mobi', 'slug': None}, 'download_zip_mobi'), + url(r'^zip/mp3/(?P%s)\.zip' % SLUG, 'download_zip', {'format': 'mp3'}, 'download_zip_mp3'), + url(r'^zip/ogg/(?P%s)\.zip' % SLUG, 'download_zip', {'format': 'ogg'}, 'download_zip_ogg'), + + # Public interface. Do not change this URLs. + url(r'^lektura/(?P%s)\.html$' % SLUG, 'book_text', name='book_text'), + url(r'^lektura/(?P%s)/audiobook/$' % SLUG, 'player', name='book_player'), + url(r'^lektura/(?P%s)/$' % SLUG, 'book_detail', name='book_detail'), + url(r'^lektura/(?P%s)/motyw/(?P[a-zA-Z0-9-]+)/$' % SLUG, + 'book_fragments', name='book_fragments'), + + # Includes. + url(r'^(?P[^/]+)\.json$', 'catalogue_json'), + url(r'^b/(?P\d+)/mini\.(?P.+)\.html', 'book_mini', name='catalogue_book_mini'), + url(r'^b/(?P\d+)/mini_nolink\.(?P.+)\.html', 'book_mini', {'with_link': False}, name='catalogue_book_mini_nolink'), + url(r'^b/(?P\d+)/short\.(?P.+)\.html', 'book_short', name='catalogue_book_short'), + url(r'^b/(?P\d+)/wide\.(?P.+)\.html', 'book_wide', name='catalogue_book_wide'), + url(r'^f/(?P\d+)/promo\.(?P.+)\.html', 'fragment_promo', name='catalogue_fragment_promo'), + url(r'^f/(?P\d+)/short\.(?P.+)\.html', 'fragment_short', name='catalogue_fragment_short'), + + # This should be the last pattern. + url(r'^(?P[a-zA-Z0-9-/]*)/$', 'tagged_object_list', name='tagged_object_list'), +) diff --git a/src/catalogue/utils.py b/src/catalogue/utils.py new file mode 100644 index 000000000..bcc5a0b33 --- /dev/null +++ b/src/catalogue/utils.py @@ -0,0 +1,358 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from collections import defaultdict +import hashlib +import random +import re +import time +from base64 import urlsafe_b64encode + +from django.http import HttpResponse +from django.core.files.uploadedfile import UploadedFile +from django.core.files.storage import DefaultStorage +from django.utils.encoding import force_unicode +from django.conf import settings +from os import mkdir, path, unlink +from errno import EEXIST, ENOENT +from fcntl import flock, LOCK_EX +from zipfile import ZipFile + +from reporting.utils import read_chunks + +# Use the system (hardware-based) random number generator if it exists. +if hasattr(random, 'SystemRandom'): + randrange = random.SystemRandom().randrange +else: + randrange = random.randrange +MAX_SESSION_KEY = 18446744073709551616L # 2 << 63 + + +def get_random_hash(seed): + sha_digest = hashlib.sha1('%s%s%s%s' % + (randrange(0, MAX_SESSION_KEY), time.time(), unicode(seed).encode('utf-8', 'replace'), + settings.SECRET_KEY)).digest() + return urlsafe_b64encode(sha_digest).replace('=', '').replace('_', '-').lower() + + +def split_tags(*tag_lists): + if len(tag_lists) == 1: + result = defaultdict(list) + for tag in tag_lists[0]: + result[tag.category].append(tag) + else: + result = defaultdict(dict) + for tag_list in tag_lists: + for tag in tag_list: + try: + result[tag.category][tag.pk].count += tag.count + except KeyError: + result[tag.category][tag.pk] = tag + for k, v in result.items(): + result[k] = sorted(v.values(), key=lambda tag: tag.sort_key) + return result + + +class ExistingFile(UploadedFile): + + def __init__(self, path, *args, **kwargs): + self.path = path + super(ExistingFile, self).__init__(*args, **kwargs) + + def temporary_file_path(self): + return self.path + + def close(self): + pass + + +class LockFile(object): + """ + A file lock monitor class; createas an ${objname}.lock + file in directory dir, and locks it exclusively. + To be used in 'with' construct. + """ + def __init__(self, dir, objname): + self.lockname = path.join(dir, objname + ".lock") + + def __enter__(self): + self.lock = open(self.lockname, 'w') + flock(self.lock, LOCK_EX) + + def __exit__(self, *err): + try: + unlink(self.lockname) + except OSError as oe: + if oe.errno != EEXIST: + raise oe + self.lock.close() + + +#@task +def create_zip(paths, zip_slug): + """ + Creates a zip in MEDIA_ROOT/zip directory containing files from path. + Resulting archive filename is ${zip_slug}.zip + Returns it's path relative to MEDIA_ROOT (no initial slash) + """ + # directory to store zip files + zip_path = path.join(settings.MEDIA_ROOT, 'zip') + + try: + mkdir(zip_path) + except OSError as oe: + if oe.errno != EEXIST: + raise oe + zip_filename = zip_slug + ".zip" + + with LockFile(zip_path, zip_slug): + if not path.exists(path.join(zip_path, zip_filename)): + zipf = ZipFile(path.join(zip_path, zip_filename), 'w') + try: + for arcname, p in paths: + if arcname is None: + arcname = path.basename(p) + zipf.write(p, arcname) + finally: + zipf.close() + + return 'zip/' + zip_filename + + +def remove_zip(zip_slug): + """ + removes the ${zip_slug}.zip file from zip store. + """ + zip_file = path.join(settings.MEDIA_ROOT, 'zip', zip_slug + '.zip') + try: + unlink(zip_file) + except OSError as oe: + if oe.errno != ENOENT: + raise oe + + +class AttachmentHttpResponse(HttpResponse): + """Response serving a file to be downloaded. + """ + def __init__(self, file_path, file_name, mimetype): + super(AttachmentHttpResponse, self).__init__(mimetype=mimetype) + self['Content-Disposition'] = 'attachment; filename=%s' % file_name + self.file_path = file_path + self.file_name = file_name + + with open(DefaultStorage().path(self.file_path)) as f: + for chunk in read_chunks(f): + self.write(chunk) + +class MultiQuerySet(object): + def __init__(self, *args, **kwargs): + self.querysets = args + self._count = None + + def count(self): + if not self._count: + self._count = sum(len(qs) for qs in self.querysets) + return self._count + + def __len__(self): + return self.count() + + def __getitem__(self, item): + try: + (offset, stop, step) = item.indices(self.count()) + except AttributeError: + # it's not a slice - make it one + return self[item : item + 1][0] + items = [] + total_len = stop - offset + for qs in self.querysets: + if len(qs) < offset: + offset -= len(qs) + else: + items += list(qs[offset:stop]) + if len(items) >= total_len: + return items + else: + offset = 0 + stop = total_len - len(items) + continue + +class SortedMultiQuerySet(MultiQuerySet): + def __init__(self, *args, **kwargs): + self.order_by = kwargs.pop('order_by', None) + self.sortfn = kwargs.pop('sortfn', None) + if self.order_by is not None: + self.sortfn = lambda a, b: cmp((getattr(a, f) for f in self.order_by), + (getattr(b, f) for f in self.order_by)) + super(SortedMultiQuerySet, self).__init__(*args, **kwargs) + + def __getitem__(self, item): + sort_heads = [0] * len(self.querysets) + try: + (offset, stop, step) = item.indices(self.count()) + except AttributeError: + # it's not a slice - make it one + return self[item : item + 1][0] + items = [] + total_len = stop - offset + skipped = 0 + i_s = range(len(sort_heads)) + + while len(items) < total_len: + candidate = None + candidate_i = None + for i in i_s: + def get_next(): + return self.querysets[i][sort_heads[i]] + try: + if candidate is None: + candidate = get_next() + candidate_i = i + else: + competitor = get_next() + if self.sortfn(candidate, competitor) > 0: + candidate = competitor + candidate_i = i + except IndexError: + continue # continue next sort_head + # we have no more elements: + if candidate is None: + break + sort_heads[candidate_i] += 1 + if skipped < offset: + skipped += 1 + continue # continue next item + items.append(candidate) + + return items + + +def truncate_html_words(s, num, end_text='...'): + """Truncates HTML to a certain number of words (not counting tags and + comments). Closes opened tags if they were correctly closed in the given + html. Takes an optional argument of what should be used to notify that the + string has been truncated, defaulting to ellipsis (...). + + Newlines in the HTML are preserved. + + This is just a version of django.utils.text.truncate_html_words with no space before the end_text. + """ + s = force_unicode(s) + length = int(num) + if length <= 0: + return u'' + html4_singlets = ('br', 'col', 'link', 'base', 'img', 'param', 'area', 'hr', 'input') + # Set up regular expressions + re_words = re.compile(r'&.*?;|<.*?>|(\w[\w-]*)', re.U) + re_tag = re.compile(r'<(/)?([^ ]+?)(?: (/)| .*?)?>') + # Count non-HTML words and keep note of open tags + pos = 0 + end_text_pos = 0 + words = 0 + open_tags = [] + while words <= length: + m = re_words.search(s, pos) + if not m: + # Checked through whole string + break + pos = m.end(0) + if m.group(1): + # It's an actual non-HTML word + words += 1 + if words == length: + end_text_pos = pos + continue + # Check for tag + tag = re_tag.match(m.group(0)) + if not tag or end_text_pos: + # Don't worry about non tags or tags after our truncate point + continue + closing_tag, tagname, self_closing = tag.groups() + tagname = tagname.lower() # Element names are always case-insensitive + if self_closing or tagname in html4_singlets: + pass + elif closing_tag: + # Check for match in open tags list + try: + i = open_tags.index(tagname) + except ValueError: + pass + else: + # SGML: An end tag closes, back to the matching start tag, all unclosed intervening start tags with omitted end tags + open_tags = open_tags[i+1:] + else: + # Add it to the start of the open tags list + open_tags.insert(0, tagname) + if words <= length: + # Don't try to close tags if we don't need to truncate + return s + out = s[:end_text_pos] + if end_text: + out += end_text + # Close any tags still open + for tag in open_tags: + out += '' % tag + # Return string + return out + + +def customizations_hash(customizations): + customizations.sort() + return hash(tuple(customizations)) + + +def get_customized_pdf_path(book, customizations): + """ + Returns a MEDIA_ROOT relative path for a customized pdf. The name will contain a hash of customization options. + """ + h = customizations_hash(customizations) + return 'book/%s/%s-custom-%s.pdf' % (book.slug, book.slug, h) + + +def clear_custom_pdf(book): + """ + Returns a list of paths to generated customized pdf of a book + """ + from waiter.utils import clear_cache + clear_cache('book/%s' % book.slug) + + +class AppSettings(object): + """Allows specyfying custom settings for an app, with default values. + + Just subclass, set some properties and instantiate with a prefix. + Getting a SETTING from an instance will check for prefix_SETTING + in project settings if set, else take the default. The value will be + then filtered through _more_SETTING method, if there is one. + + """ + def __init__(self, prefix): + self._prefix = prefix + + def __getattribute__(self, name): + if name.startswith('_'): + return object.__getattribute__(self, name) + value = getattr(settings, + "%s_%s" % (self._prefix, name), + object.__getattribute__(self, name)) + more = "_more_%s" % name + if hasattr(self, more): + value = getattr(self, more)(value) + return value + + +def trim_query_log(trim_to=25): + """ +connection.queries includes all SQL statements -- INSERTs, UPDATES, SELECTs, etc. Each time your app hits the database, the query will be recorded. +This can sometimes occupy lots of memory, so trim it here a bit. + """ + if settings.DEBUG: + from django.db import connection + connection.queries = trim_to > 0 \ + and connection.queries[-trim_to:] \ + or [] + + +def delete_from_cache_by_language(cache, key_template): + cache.delete_many([key_template % lc for lc, ln in settings.LANGUAGES]) diff --git a/src/catalogue/views.py b/src/catalogue/views.py new file mode 100644 index 000000000..a25a08ffa --- /dev/null +++ b/src/catalogue/views.py @@ -0,0 +1,691 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from collections import OrderedDict +import re + +from django.conf import settings +from django.template import RequestContext +from django.template.loader import render_to_string +from django.shortcuts import render_to_response, get_object_or_404, render +from django.http import HttpResponse, HttpResponseRedirect, Http404, HttpResponsePermanentRedirect, JsonResponse +from django.core.urlresolvers import reverse +from django.db.models import Q +from django.contrib.auth.decorators import login_required, user_passes_test +from django.utils.http import urlquote_plus +from django.utils import translation +from django.utils.translation import ugettext as _, ugettext_lazy + +from ajaxable.utils import AjaxableFormView +from pdcounter import models as pdcounter_models +from pdcounter import views as pdcounter_views +from picture.models import Picture, PictureArea +from picture.views import picture_list_thumb +from ssify import ssi_included, ssi_expect, SsiVariable as V +from suggest.forms import PublishingSuggestForm +from catalogue import forms +from catalogue.helpers import get_top_level_related_tags +from catalogue import models +from catalogue.utils import split_tags, MultiQuerySet, SortedMultiQuerySet +from catalogue.templatetags.catalogue_tags import tag_list, collection_list + +staff_required = user_passes_test(lambda user: user.is_staff) + + +def catalogue(request, as_json=False): + common_categories = ('author',) + split_categories = ('epoch', 'genre', 'kind') + + categories = split_tags( + get_top_level_related_tags(categories=common_categories), + models.Tag.objects.usage_for_model( + models.Fragment, counts=True).filter(category='theme'), + models.Tag.objects.usage_for_model( + Picture, counts=True).filter(category__in=common_categories), + models.Tag.objects.usage_for_model( + PictureArea, counts=True).filter( + category='theme') + ) + book_categories = split_tags( + get_top_level_related_tags(categories=split_categories) + ) + picture_categories = split_tags( + models.Tag.objects.usage_for_model( + Picture, counts=True).filter( + category__in=split_categories), + ) + + collections = models.Collection.objects.all() + + def render_tag_list(tags): + return render_to_string('catalogue/tag_list.html', tag_list(tags)) + + def render_split(with_books, with_pictures): + ctx = {} + if with_books: + ctx['books'] = render_tag_list(with_books) + if with_pictures: + ctx['pictures'] = render_tag_list(with_pictures) + return render_to_string('catalogue/tag_list_split.html', ctx) + + output = {} + output['theme'] = render_tag_list(categories.get('theme', [])) + for category in common_categories: + output[category] = render_tag_list(categories.get(category, [])) + for category in split_categories: + output[category] = render_split( + book_categories.get(category, []), + picture_categories.get(category, [])) + + output['collections'] = render_to_string( + 'catalogue/collection_list.html', collection_list(collections)) + if as_json: + return JsonResponse(output) + else: + return render_to_response('catalogue/catalogue.html', locals(), + context_instance=RequestContext(request)) + + +@ssi_included +def catalogue_json(request): + return catalogue(request, True) + + +def book_list(request, filter=None, get_filter=None, + template_name='catalogue/book_list.html', + nav_template_name='catalogue/snippets/book_list_nav.html', + list_template_name='catalogue/snippets/book_list.html', + context=None, + ): + """ generates a listing of all books, optionally filtered with a test function """ + if get_filter: + filter = get_filter() + books_by_author, orphans, books_by_parent = models.Book.book_list(filter) + books_nav = OrderedDict() + for tag in books_by_author: + if books_by_author[tag]: + books_nav.setdefault(tag.sort_key[0], []).append(tag) + rendered_nav = render_to_string(nav_template_name, locals()) + rendered_book_list = render_to_string(list_template_name, locals()) + return render_to_response(template_name, locals(), + context_instance=RequestContext(request)) + + +def audiobook_list(request): + return book_list(request, Q(media__type='mp3') | Q(media__type='ogg'), + template_name='catalogue/audiobook_list.html', + list_template_name='catalogue/snippets/audiobook_list.html', + ) + + +def daisy_list(request): + return book_list(request, Q(media__type='daisy'), + template_name='catalogue/daisy_list.html', + ) + + +def collection(request, slug): + coll = get_object_or_404(models.Collection, slug=slug) + if coll.kind == 'book': + view = book_list + tmpl = "catalogue/collection.html" + elif coll.kind == 'picture': + view = picture_list_thumb + tmpl = "picture/collection.html" + else: + raise ValueError('How do I show this kind of collection? %s' % coll.kind) + return view(request, get_filter=coll.get_query, + template_name=tmpl, + context={'collection': coll}) + + +def differentiate_tags(request, tags, ambiguous_slugs): + beginning = '/'.join(tag.url_chunk for tag in tags) + unparsed = '/'.join(ambiguous_slugs[1:]) + options = [] + for tag in models.Tag.objects.filter(slug=ambiguous_slugs[0]): + options.append({ + 'url_args': '/'.join((beginning, tag.url_chunk, unparsed)).strip('/'), + 'tags': [tag] + }) + return render_to_response('catalogue/differentiate_tags.html', + {'tags': tags, 'options': options, 'unparsed': ambiguous_slugs[1:]}, + context_instance=RequestContext(request)) + + +# TODO: Rewrite this hellish piece of code which tries to do everything +def tagged_object_list(request, tags=''): + # preliminary tests and conditions + try: + tags = models.Tag.get_tag_list(tags) + except models.Tag.DoesNotExist: + # Perhaps the user is asking about an author in Public Domain + # counter (they are not represented in tags) + chunks = tags.split('/') + if len(chunks) == 2 and chunks[0] == 'autor': + return pdcounter_views.author_detail(request, chunks[1]) + else: + raise Http404 + except models.Tag.MultipleObjectsReturned, e: + # Ask the user to disambiguate + return differentiate_tags(request, e.tags, e.ambiguous_slugs) + except models.Tag.UrlDeprecationWarning, e: + return HttpResponsePermanentRedirect(reverse('tagged_object_list', args=['/'.join(tag.url_chunk for tag in e.tags)])) + + try: + if len(tags) > settings.MAX_TAG_LIST: + raise Http404 + except AttributeError: + pass + + # beginning of digestion + theme_is_set = [tag for tag in tags if tag.category == 'theme'] + shelf_is_set = [tag for tag in tags if tag.category == 'set'] + only_shelf = shelf_is_set and len(tags) == 1 + only_my_shelf = only_shelf and request.user.is_authenticated() and request.user == tags[0].user + tags_pks = [tag.pk for tag in tags] + + objects = None + + if theme_is_set: + shelf_tags = [tag for tag in tags if tag.category == 'set'] + fragment_tags = [tag for tag in tags if tag.category != 'set'] + fragments = models.Fragment.tagged.with_all(fragment_tags) + areas = PictureArea.tagged.with_all(fragment_tags) + + if shelf_tags: + books = models.Book.tagged.with_all(shelf_tags).order_by() + fragments = fragments.filter(Q(book__in=books) | Q(book__ancestor__in=books)) + areas = PictureArea.objects.none() + + categories = split_tags( + models.Tag.objects.usage_for_queryset(fragments, counts=True + ).exclude(pk__in=tags_pks), + models.Tag.objects.usage_for_queryset(areas, counts=True + ).exclude(pk__in=tags_pks) + ) + + # we want the Pictures to go first + objects = MultiQuerySet(areas, fragments) + else: + all_books = models.Book.tagged.with_all(tags) + if shelf_is_set: + books = all_books.order_by('sort_key_author', 'title') + pictures = Picture.objects.none() + related_book_tags = models.Tag.objects.usage_for_queryset( + books, counts=True).exclude( + category='set').exclude(pk__in=tags_pks) + else: + books = models.Book.tagged_top_level(tags).order_by( + 'sort_key_author', 'title') + pictures = Picture.tagged.with_all(tags).order_by( + 'sort_key_author', 'title') + related_book_tags = get_top_level_related_tags(tags) + + fragments = models.Fragment.objects.filter(book__in=all_books) + areas = PictureArea.objects.filter(picture__in=pictures) + + categories = split_tags( + related_book_tags, + models.Tag.objects.usage_for_queryset( + pictures, counts=True).exclude(pk__in=tags_pks), + models.Tag.objects.usage_for_queryset( + fragments, counts=True).filter( + category='theme').exclude(pk__in=tags_pks), + models.Tag.objects.usage_for_queryset( + areas, counts=True).filter( + category__in=('theme', 'thing')).exclude( + pk__in=tags_pks), + ) + + objects = SortedMultiQuerySet(pictures, books, + order_by=('sort_key_author', 'title')) + + return render_to_response('catalogue/tagged_object_list.html', + { + 'object_list': objects, + 'categories': categories, + 'only_shelf': only_shelf, + 'only_my_shelf': only_my_shelf, + 'formats_form': forms.DownloadFormatsForm(), + 'tags': tags, + 'tag_ids': tags_pks, + 'theme_is_set': theme_is_set, + }, + context_instance=RequestContext(request)) + + +def book_fragments(request, slug, theme_slug): + book = get_object_or_404(models.Book, slug=slug) + theme = get_object_or_404(models.Tag, slug=theme_slug, category='theme') + fragments = models.Fragment.tagged.with_all([theme]).filter( + Q(book=book) | Q(book__ancestor=book)) + + return render_to_response('catalogue/book_fragments.html', locals(), + context_instance=RequestContext(request)) + + +def book_detail(request, slug): + try: + book = models.Book.objects.get(slug=slug) + except models.Book.DoesNotExist: + return pdcounter_views.book_stub_detail(request, slug) + + book_children = book.children.all().order_by('parent_number', 'sort_key') + return render_to_response('catalogue/book_detail.html', locals(), + context_instance=RequestContext(request)) + + +def player(request, slug): + book = get_object_or_404(models.Book, slug=slug) + if not book.has_media('mp3'): + raise Http404 + + ogg_files = {} + for m in book.media.filter(type='ogg').order_by().iterator(): + ogg_files[m.name] = m + + audiobooks = [] + have_oggs = True + projects = set() + for mp3 in book.media.filter(type='mp3').iterator(): + # ogg files are always from the same project + meta = mp3.extra_info + project = meta.get('project') + if not project: + # temporary fallback + project = u'CzytamySłuchając' + + projects.add((project, meta.get('funded_by', ''))) + + media = {'mp3': mp3} + + ogg = ogg_files.get(mp3.name) + if ogg: + media['ogg'] = ogg + else: + have_oggs = False + audiobooks.append(media) + + projects = sorted(projects) + + extra_info = book.extra_info + + return render_to_response('catalogue/player.html', locals(), + context_instance=RequestContext(request)) + + +def book_text(request, slug): + book = get_object_or_404(models.Book, slug=slug) + + if not book.has_html_file(): + raise Http404 + return render_to_response('catalogue/book_text.html', locals(), + context_instance=RequestContext(request)) + + +# ========== +# = Search = +# ========== + +def _no_diacritics_regexp(query): + """ returns a regexp for searching for a query without diacritics + + should be locale-aware """ + names = { + u'a':u'aąĄ', u'c':u'cćĆ', u'e':u'eęĘ', u'l': u'lłŁ', u'n':u'nńŃ', u'o':u'oóÓ', u's':u'sśŚ', u'z':u'zźżŹŻ', + u'ą':u'ąĄ', u'ć':u'ćĆ', u'ę':u'ęĘ', u'ł': u'łŁ', u'ń':u'ńŃ', u'ó':u'óÓ', u'ś':u'śŚ', u'ź':u'źŹ', u'ż':u'żŻ' + } + def repl(m): + l = m.group() + return u"(%s)" % '|'.join(names[l]) + return re.sub(u'[%s]' % (u''.join(names.keys())), repl, query) + +def unicode_re_escape(query): + """ Unicode-friendly version of re.escape """ + return re.sub(r'(?u)(\W)', r'\\\1', query) + +def _word_starts_with(name, prefix): + """returns a Q object getting models having `name` contain a word + starting with `prefix` + + We define word characters as alphanumeric and underscore, like in JS. + + Works for MySQL, PostgreSQL, Oracle. + For SQLite, _sqlite* version is substituted for this. + """ + kwargs = {} + + prefix = _no_diacritics_regexp(unicode_re_escape(prefix)) + # can't use [[:<:]] (word start), + # but we want both `xy` and `(xy` to catch `(xyz)` + kwargs['%s__iregex' % name] = u"(^|[^[:alnum:]_])%s" % prefix + + return Q(**kwargs) + + +def _word_starts_with_regexp(prefix): + prefix = _no_diacritics_regexp(unicode_re_escape(prefix)) + return ur"(^|(?<=[^\wąćęłńóśźżĄĆĘŁŃÓŚŹŻ]))%s" % prefix + + +def _sqlite_word_starts_with(name, prefix): + """ version of _word_starts_with for SQLite + + SQLite in Django uses Python re module + """ + kwargs = {} + kwargs['%s__iregex' % name] = _word_starts_with_regexp(prefix) + return Q(**kwargs) + + +if hasattr(settings, 'DATABASES'): + if settings.DATABASES['default']['ENGINE'] == 'django.db.backends.sqlite3': + _word_starts_with = _sqlite_word_starts_with +elif settings.DATABASE_ENGINE == 'sqlite3': + _word_starts_with = _sqlite_word_starts_with + + +class App(): + def __init__(self, name, view): + self.name = name + self._view = view + self.lower = name.lower() + self.category = 'application' + def view(self): + return reverse(*self._view) + +_apps = ( + App(u'Leśmianator', (u'lesmianator', )), + ) + + +def _tags_starting_with(prefix, user=None): + prefix = prefix.lower() + # PD counter + book_stubs = pdcounter_models.BookStub.objects.filter(_word_starts_with('title', prefix)) + authors = pdcounter_models.Author.objects.filter(_word_starts_with('name', prefix)) + + books = models.Book.objects.filter(_word_starts_with('title', prefix)) + tags = models.Tag.objects.filter(_word_starts_with('name', prefix)) + if user and user.is_authenticated(): + tags = tags.filter(~Q(category='set') | Q(user=user)) + else: + tags = tags.exclude(category='set') + + prefix_regexp = re.compile(_word_starts_with_regexp(prefix)) + return list(books) + list(tags) + [app for app in _apps if prefix_regexp.search(app.lower)] + list(book_stubs) + list(authors) + + +def _get_result_link(match, tag_list): + if isinstance(match, models.Tag): + return reverse('catalogue.views.tagged_object_list', + kwargs={'tags': '/'.join(tag.url_chunk for tag in tag_list + [match])} + ) + elif isinstance(match, App): + return match.view() + else: + return match.get_absolute_url() + + +def _get_result_type(match): + if isinstance(match, models.Book) or isinstance(match, pdcounter_models.BookStub): + match_type = 'book' + else: + match_type = match.category + return match_type + + +def books_starting_with(prefix): + prefix = prefix.lower() + return models.Book.objects.filter(_word_starts_with('title', prefix)) + + +def find_best_matches(query, user=None): + """ Finds a models.Book, Tag, models.BookStub or Author best matching a query. + + Returns a with: + - zero elements when nothing is found, + - one element when a best result is found, + - more then one element on multiple exact matches + + Raises a ValueError on too short a query. + """ + + query = query.lower() + if len(query) < 2: + raise ValueError("query must have at least two characters") + + result = tuple(_tags_starting_with(query, user)) + # remove pdcounter stuff + book_titles = set(match.pretty_title().lower() for match in result + if isinstance(match, models.Book)) + authors = set(match.name.lower() for match in result + if isinstance(match, models.Tag) and match.category == 'author') + result = tuple(res for res in result if not ( + (isinstance(res, pdcounter_models.BookStub) and res.pretty_title().lower() in book_titles) + or (isinstance(res, pdcounter_models.Author) and res.name.lower() in authors) + )) + + exact_matches = tuple(res for res in result if res.name.lower() == query) + if exact_matches: + return exact_matches + else: + return tuple(result)[:1] + + +def search(request): + tags = request.GET.get('tags', '') + prefix = request.GET.get('q', '') + + try: + tag_list = models.Tag.get_tag_list(tags) + except: + tag_list = [] + + try: + result = find_best_matches(prefix, request.user) + except ValueError: + return render_to_response('catalogue/search_too_short.html', {'tags':tag_list, 'prefix':prefix}, + context_instance=RequestContext(request)) + + if len(result) == 1: + return HttpResponseRedirect(_get_result_link(result[0], tag_list)) + elif len(result) > 1: + return render_to_response('catalogue/search_multiple_hits.html', + {'tags':tag_list, 'prefix':prefix, 'results':((x, _get_result_link(x, tag_list), _get_result_type(x)) for x in result)}, + context_instance=RequestContext(request)) + else: + form = PublishingSuggestForm(initial={"books": prefix + ", "}) + return render_to_response('catalogue/search_no_hits.html', + {'tags':tag_list, 'prefix':prefix, "pubsuggest_form": form}, + context_instance=RequestContext(request)) + + +def tags_starting_with(request): + prefix = request.GET.get('q', '') + # Prefix must have at least 2 characters + if len(prefix) < 2: + return HttpResponse('') + tags_list = [] + result = "" + for tag in _tags_starting_with(prefix, request.user): + if not tag.name in tags_list: + result += "\n" + tag.name + tags_list.append(tag.name) + return HttpResponse(result) + +def json_tags_starting_with(request, callback=None): + # Callback for JSONP + prefix = request.GET.get('q', '') + callback = request.GET.get('callback', '') + # Prefix must have at least 2 characters + if len(prefix) < 2: + return HttpResponse('') + tags_list = [] + for tag in _tags_starting_with(prefix, request.user): + if not tag.name in tags_list: + tags_list.append(tag.name) + if request.GET.get('mozhint', ''): + result = [prefix, tags_list] + else: + result = {"matches": tags_list} + response = JsonResponse(result, safe=False) + if callback: + response.content = callback + "(" + response.content + ");" + return response + + +# ========= +# = Admin = +# ========= +@login_required +@staff_required +def import_book(request): + """docstring for import_book""" + book_import_form = forms.BookImportForm(request.POST, request.FILES) + if book_import_form.is_valid(): + try: + book_import_form.save() + except: + import sys + import pprint + import traceback + info = sys.exc_info() + exception = pprint.pformat(info[1]) + tb = '\n'.join(traceback.format_tb(info[2])) + return HttpResponse(_("An error occurred: %(exception)s\n\n%(tb)s") % {'exception':exception, 'tb':tb}, mimetype='text/plain') + return HttpResponse(_("Book imported successfully")) + else: + return HttpResponse(_("Error importing file: %r") % book_import_form.errors) + + +# info views for API + +def book_info(request, id, lang='pl'): + book = get_object_or_404(models.Book, id=id) + # set language by hand + translation.activate(lang) + return render_to_response('catalogue/book_info.html', locals(), + context_instance=RequestContext(request)) + + +def tag_info(request, id): + tag = get_object_or_404(models.Tag, id=id) + return HttpResponse(tag.description) + + +def download_zip(request, format, slug=None): + url = None + if format in models.Book.ebook_formats: + url = models.Book.zip_format(format) + elif format in ('mp3', 'ogg') and slug is not None: + book = get_object_or_404(models.Book, slug=slug) + url = book.zip_audiobooks(format) + else: + raise Http404('No format specified for zip package') + return HttpResponseRedirect(urlquote_plus(settings.MEDIA_URL + url, safe='/?=')) + + +class CustomPDFFormView(AjaxableFormView): + form_class = forms.CustomPDFForm + title = ugettext_lazy('Download custom PDF') + submit = ugettext_lazy('Download') + honeypot = True + + def __call__(self, *args, **kwargs): + if settings.NO_CUSTOM_PDF: + raise Http404('Custom PDF is disabled') + return super(CustomPDFFormView, self).__call__(*args, **kwargs) + + def form_args(self, request, obj): + """Override to parse view args and give additional args to the form.""" + return (obj,), {} + + def get_object(self, request, slug, *args, **kwargs): + return get_object_or_404(models.Book, slug=slug) + + def context_description(self, request, obj): + return obj.pretty_title() + + +#### +# Includes +#### + + +@ssi_included +def book_mini(request, pk, with_link=True): + book = get_object_or_404(models.Book, pk=pk) + author_str = ", ".join(tag.name + for tag in book.tags.filter(category='author')) + return render(request, 'catalogue/book_mini_box.html', { + 'book': book, + 'author_str': author_str, + 'with_link': with_link, + 'show_lang': book.language_code() != settings.LANGUAGE_CODE, + }) + + +@ssi_included(get_ssi_vars=lambda pk: (lambda ipk: ( + ('ssify.get_csrf_token',), + ('social_tags.likes_book', (ipk,)), + ('social_tags.book_shelf_tags', (ipk,)), + ))(ssi_expect(pk, int))) +def book_short(request, pk): + book = get_object_or_404(models.Book, pk=pk) + stage_note, stage_note_url = book.stage_note() + + return render(request, 'catalogue/book_short.html', { + 'book': book, + 'has_audio': book.has_media('mp3'), + 'main_link': book.get_absolute_url(), + 'parents': book.parents(), + 'tags': split_tags(book.tags.exclude(category__in=('set', 'theme'))), + 'show_lang': book.language_code() != settings.LANGUAGE_CODE, + 'stage_note': stage_note, + 'stage_note_url': stage_note_url, + }) + + +@ssi_included(get_ssi_vars=lambda pk: book_short.get_ssi_vars(pk) + + (lambda ipk: ( + ('social_tags.choose_cite', [ipk]), + ('catalogue_tags.choose_fragment', [ipk], { + 'unless': V('social_tags.choose_cite', [ipk])}), + ))(ssi_expect(pk, int))) +def book_wide(request, pk): + book = get_object_or_404(models.Book, pk=pk) + stage_note, stage_note_url = book.stage_note() + extra_info = book.extra_info + + return render(request, 'catalogue/book_wide.html', { + 'book': book, + 'has_audio': book.has_media('mp3'), + 'parents': book.parents(), + 'tags': split_tags(book.tags.exclude(category__in=('set', 'theme'))), + 'show_lang': book.language_code() != settings.LANGUAGE_CODE, + 'stage_note': stage_note, + 'stage_note_url': stage_note_url, + + 'main_link': reverse('book_text', args=[book.slug]) if book.html_file else None, + 'extra_info': extra_info, + 'hide_about': extra_info.get('about', '').startswith('http://wiki.wolnepodreczniki.pl'), + 'themes': book.related_themes(), + }) + + +@ssi_included +def fragment_short(request, pk): + fragment = get_object_or_404(models.Fragment, pk=pk) + return render(request, 'catalogue/fragment_short.html', + {'fragment': fragment}) + + +@ssi_included +def fragment_promo(request, pk): + fragment = get_object_or_404(models.Fragment, pk=pk) + return render(request, 'catalogue/fragment_promo.html', { + 'fragment': fragment + }) diff --git a/src/chunks/__init__.py b/src/chunks/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/chunks/admin.py b/src/chunks/admin.py new file mode 100644 index 000000000..61e9f8757 --- /dev/null +++ b/src/chunks/admin.py @@ -0,0 +1,17 @@ +from django.contrib import admin + +from chunks.models import Chunk, Attachment + + +class ChunkAdmin(admin.ModelAdmin): + list_display = ('key', 'description',) + search_fields = ('key', 'content',) + +admin.site.register(Chunk, ChunkAdmin) + + +class AttachmentAdmin(admin.ModelAdmin): + list_display = ('key',) + search_fields = ('key',) + +admin.site.register(Attachment, AttachmentAdmin) diff --git a/src/chunks/locale/de/LC_MESSAGES/django.mo b/src/chunks/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..b9a35c717 Binary files /dev/null and b/src/chunks/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/de/LC_MESSAGES/django.po b/src/chunks/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..8451d6319 --- /dev/null +++ b/src/chunks/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,74 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-04-11 22:56+0100\n" +"Last-Translator: Kamil \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "Schlüssel" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "Die einzigartige Bezeichnung für dieses Chunk von Inhalten" + +#: models.py:12 +msgid "description" +msgstr "Beschreibung" + +#: models.py:13 +msgid "content" +msgstr "Inhalt" + +#: models.py:17 +msgid "chunk" +msgstr "Chunk" + +#: models.py:18 +msgid "chunks" +msgstr "Chunks" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Die einzigartige Bezeichnung für diese Beilage" + +#: models.py:38 +msgid "attachment" +msgstr "Beilage" + +#: models.py:38 +msgid "attachments" +msgstr "Beilagen" + +#~ msgid "title" +#~ msgstr "Titel" + +#~ msgid "slug" +#~ msgstr "Slug" + +#~ msgid "file" +#~ msgstr "Datei" + +#~ msgid "author" +#~ msgstr "Autor" + +#~ msgid "slideshare ID" +#~ msgstr "Dia-ID" + +#~ msgid "HTML" +#~ msgstr "HTML" + +#~ msgid "document" +#~ msgstr "Dokument" diff --git a/src/chunks/locale/en/LC_MESSAGES/django.mo b/src/chunks/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..948c8ead2 Binary files /dev/null and b/src/chunks/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/en/LC_MESSAGES/django.po b/src/chunks/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..fa9b726c4 --- /dev/null +++ b/src/chunks/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 20:05+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "key" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "A unique name for this piece of content" + +#: models.py:12 +msgid "description" +msgstr "description" + +#: models.py:13 +msgid "content" +msgstr "content" + +#: models.py:17 +msgid "chunk" +msgstr "piece" + +#: models.py:18 +msgid "chunks" +msgstr "pieces" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "A unique name for this attachment" + +#: models.py:38 +msgid "attachment" +msgstr "attachment" + +#: models.py:38 +msgid "attachments" +msgstr "attachments" diff --git a/src/chunks/locale/es/LC_MESSAGES/django.mo b/src/chunks/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..f476287e0 Binary files /dev/null and b/src/chunks/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/es/LC_MESSAGES/django.po b/src/chunks/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..f5c97195c --- /dev/null +++ b/src/chunks/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-18 13:02+0100\n" +"Last-Translator: Anna Jopp \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "clave" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "El nombre único para este elemento del contenido" + +#: models.py:12 +msgid "description" +msgstr "descripción" + +#: models.py:13 +msgid "content" +msgstr "contenido" + +#: models.py:17 +msgid "chunk" +msgstr "elemento" + +#: models.py:18 +msgid "chunks" +msgstr "elementos" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "El nombre único para este archivo adjunto" + +#: models.py:38 +msgid "attachment" +msgstr "archivo adjunto" + +#: models.py:38 +msgid "attachments" +msgstr "archivos adjuntos" diff --git a/src/chunks/locale/fr/LC_MESSAGES/django.mo b/src/chunks/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..2ededce27 Binary files /dev/null and b/src/chunks/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/fr/LC_MESSAGES/django.po b/src/chunks/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..21730632e --- /dev/null +++ b/src/chunks/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-22 20:52+0100\n" +"Last-Translator: Ela Janota \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "clé" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "Un nom unique pour ce fragment du contenu" + +#: models.py:12 +msgid "description" +msgstr "description" + +#: models.py:13 +msgid "content" +msgstr "contenu" + +#: models.py:17 +msgid "chunk" +msgstr "fragment" + +#: models.py:18 +msgid "chunks" +msgstr "fragments" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Un nom unique pour cette pièce jointe" + +#: models.py:38 +msgid "attachment" +msgstr "pièce jointe" + +#: models.py:38 +msgid "attachments" +msgstr "pièces jointes" diff --git a/src/chunks/locale/it/LC_MESSAGES/django.mo b/src/chunks/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..1f02d2425 Binary files /dev/null and b/src/chunks/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/it/LC_MESSAGES/django.po b/src/chunks/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..1e17a5fb3 --- /dev/null +++ b/src/chunks/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,54 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-21 16:52+0100\n" +"Last-Translator: xxx\n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "Chiave" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "un nome unico per questo allegato" + +#: models.py:12 +msgid "description" +msgstr "descrizione" + +#: models.py:13 +msgid "content" +msgstr "contenuto" + +#: models.py:17 +msgid "chunk" +msgstr "blocco" + +#: models.py:18 +msgid "chunks" +msgstr "blocchi" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Un nome unico per questo allegato" + +#: models.py:38 +msgid "attachment" +msgstr "allegato" + +#: models.py:38 +msgid "attachments" +msgstr "allegati" diff --git a/src/chunks/locale/jp/LC_MESSAGES/django.mo b/src/chunks/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c9739db34 Binary files /dev/null and b/src/chunks/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/jp/LC_MESSAGES/django.po b/src/chunks/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..ceae77c94 --- /dev/null +++ b/src/chunks/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,54 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "" + +#: models.py:12 +msgid "description" +msgstr "" + +#: models.py:13 +msgid "content" +msgstr "" + +#: models.py:17 +msgid "chunk" +msgstr "" + +#: models.py:18 +msgid "chunks" +msgstr "" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "" + +#: models.py:38 +msgid "attachment" +msgstr "" + +#: models.py:38 +msgid "attachments" +msgstr "" diff --git a/src/chunks/locale/lt/LC_MESSAGES/django.mo b/src/chunks/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..582f7d416 Binary files /dev/null and b/src/chunks/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/lt/LC_MESSAGES/django.po b/src/chunks/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..5499a2129 --- /dev/null +++ b/src/chunks/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,54 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-01 16:13+0100\n" +"Last-Translator: Aneta\n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "raktas" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "Unikalus šio turinio gabalo pavadnimas" + +#: models.py:12 +msgid "description" +msgstr "aprašymas" + +#: models.py:13 +msgid "content" +msgstr "turinys" + +#: models.py:17 +msgid "chunk" +msgstr "gabalas" + +#: models.py:18 +msgid "chunks" +msgstr "gabalai" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Unikalus šio priedo pavadnimas" + +#: models.py:38 +msgid "attachment" +msgstr "priedas" + +#: models.py:38 +msgid "attachments" +msgstr "priedai" diff --git a/src/chunks/locale/pl/LC_MESSAGES/django.mo b/src/chunks/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..54db07239 Binary files /dev/null and b/src/chunks/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/pl/LC_MESSAGES/django.po b/src/chunks/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..176e57df5 --- /dev/null +++ b/src/chunks/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,54 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2010-05-19 16:19\n" +"Last-Translator: \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "klucz" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "Unikalna nazwa dla tego kawałka treści" + +#: models.py:12 +msgid "description" +msgstr "opis" + +#: models.py:13 +msgid "content" +msgstr "zawartość" + +#: models.py:17 +msgid "chunk" +msgstr "kawałek" + +#: models.py:18 +msgid "chunks" +msgstr "kawałki" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Unikalna nazwa dla tego załącznika" + +#: models.py:38 +msgid "attachment" +msgstr "załącznik" + +#: models.py:38 +msgid "attachments" +msgstr "załączniki" diff --git a/src/chunks/locale/ru/LC_MESSAGES/django.mo b/src/chunks/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..ebf2dad2b Binary files /dev/null and b/src/chunks/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/ru/LC_MESSAGES/django.po b/src/chunks/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..5ba98838b --- /dev/null +++ b/src/chunks/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 22:10+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "ключ" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "Уникальное имя для этого фрагмента содержания" + +#: models.py:12 +msgid "description" +msgstr "описание" + +#: models.py:13 +msgid "content" +msgstr "содержание" + +#: models.py:17 +msgid "chunk" +msgstr "фрагмент" + +#: models.py:18 +msgid "chunks" +msgstr "фрагменты" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Уникальное имя для этого приложения" + +#: models.py:38 +msgid "attachment" +msgstr "приложение" + +#: models.py:38 +msgid "attachments" +msgstr "приложения" diff --git a/src/chunks/locale/uk/LC_MESSAGES/django.mo b/src/chunks/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..60dbea6a6 Binary files /dev/null and b/src/chunks/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/uk/LC_MESSAGES/django.po b/src/chunks/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..620d87341 --- /dev/null +++ b/src/chunks/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 17:29+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "ключ" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "Унікальна назва для цієї частини змісту" + +#: models.py:12 +msgid "description" +msgstr "опис" + +#: models.py:13 +msgid "content" +msgstr "зміст" + +#: models.py:17 +msgid "chunk" +msgstr "частина" + +#: models.py:18 +msgid "chunks" +msgstr "частини" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Унікальна назва для цього додатку" + +#: models.py:38 +msgid "attachment" +msgstr "додаток" + +#: models.py:38 +msgid "attachments" +msgstr "додатки" diff --git a/src/chunks/migrations/0001_initial.py b/src/chunks/migrations/0001_initial.py new file mode 100644 index 000000000..878e4fbfb --- /dev/null +++ b/src/chunks/migrations/0001_initial.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Attachment', + fields=[ + ('key', models.CharField(help_text='A unique name for this attachment', max_length=255, serialize=False, verbose_name='key', primary_key=True)), + ('attachment', models.FileField(upload_to=b'chunks/attachment')), + ], + options={ + 'ordering': ('key',), + 'verbose_name': 'attachment', + 'verbose_name_plural': 'attachments', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Chunk', + fields=[ + ('key', models.CharField(help_text='A unique name for this piece of content', max_length=255, serialize=False, verbose_name='key', primary_key=True)), + ('description', models.CharField(max_length=255, null=True, verbose_name='Description', blank=True)), + ('content', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_de', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_en', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_es', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_fr', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_it', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_lt', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_pl', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_ru', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_uk', models.TextField(null=True, verbose_name='content', blank=True)), + ], + options={ + 'ordering': ('key',), + 'verbose_name': 'piece', + 'verbose_name_plural': 'pieces', + }, + bases=(models.Model,), + ), + ] diff --git a/src/chunks/migrations/0002_auto_20140911_1253.py b/src/chunks/migrations/0002_auto_20140911_1253.py new file mode 100644 index 000000000..09d541cd4 --- /dev/null +++ b/src/chunks/migrations/0002_auto_20140911_1253.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +def null_to_blank(apps, schema_editor): + Chunk = apps.get_model("chunks", "Chunk") + Chunk.objects.filter(content=None).update(content='') + Chunk.objects.filter(description=None).update(description='') + + +class Migration(migrations.Migration): + + dependencies = [ + ('chunks', '0001_initial'), + ] + + operations = [ + migrations.RunPython(null_to_blank), + migrations.AlterField( + model_name='chunk', + name='content', + field=models.TextField(verbose_name='content', blank=True), + ), + migrations.AlterField( + model_name='chunk', + name='description', + field=models.CharField(max_length=255, verbose_name='Description', blank=True), + ), + ] diff --git a/src/chunks/migrations/0003_auto_20151221_1225.py b/src/chunks/migrations/0003_auto_20151221_1225.py new file mode 100644 index 000000000..a7d7ca33b --- /dev/null +++ b/src/chunks/migrations/0003_auto_20151221_1225.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('chunks', '0002_auto_20140911_1253'), + ] + + operations = [ + migrations.AlterModelOptions( + name='chunk', + options={'ordering': ('key',), 'verbose_name': 'chunk', 'verbose_name_plural': 'chunks'}, + ), + migrations.AlterField( + model_name='chunk', + name='description', + field=models.CharField(max_length=255, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='chunk', + name='key', + field=models.CharField(help_text='A unique name for this chunk of content', max_length=255, serialize=False, verbose_name='key', primary_key=True), + ), + ] diff --git a/src/chunks/migrations/__init__.py b/src/chunks/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/chunks/models.py b/src/chunks/models.py new file mode 100644 index 000000000..7f5410b24 --- /dev/null +++ b/src/chunks/models.py @@ -0,0 +1,45 @@ +from django.conf import settings +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from ssify import flush_ssi_includes + + +class Chunk(models.Model): + """ + A Chunk is a piece of content associated with a unique key that can be inserted into + any template with the use of a special template tag. + """ + key = models.CharField(_('key'), help_text=_('A unique name for this chunk of content'), primary_key=True, max_length=255) + description = models.CharField(_('description'), blank=True, max_length=255) + content = models.TextField(_('content'), blank=True) + + class Meta: + ordering = ('key',) + verbose_name = _('chunk') + verbose_name_plural = _('chunks') + + def __unicode__(self): + return self.key + + def save(self, *args, **kwargs): + ret = super(Chunk, self).save(*args, **kwargs) + self.flush_includes() + return ret + + def flush_includes(self): + flush_ssi_includes([ + '/chunks/chunk/%s.%s.html' % (self.key, lang) + for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) + + + +class Attachment(models.Model): + key = models.CharField(_('key'), help_text=_('A unique name for this attachment'), primary_key=True, max_length=255) + attachment = models.FileField(upload_to='chunks/attachment') + + class Meta: + ordering = ('key',) + verbose_name, verbose_name_plural = _('attachment'), _('attachments') + + def __unicode__(self): + return self.key diff --git a/src/chunks/translation.py b/src/chunks/translation.py new file mode 100644 index 000000000..46f1c7ac4 --- /dev/null +++ b/src/chunks/translation.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# + +from modeltranslation.translator import translator, TranslationOptions +from chunks.models import Chunk + +class ChunkTranslationOptions(TranslationOptions): + fields = ('content',) + +translator.register(Chunk, ChunkTranslationOptions) diff --git a/src/chunks/urls.py b/src/chunks/urls.py new file mode 100644 index 000000000..005cadd02 --- /dev/null +++ b/src/chunks/urls.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + +urlpatterns = patterns('chunks.views', + url(r'^chunk/(?P.+)\.(?P.+)\.html$', 'chunk', name='chunk'), +) diff --git a/src/chunks/views.py b/src/chunks/views.py new file mode 100644 index 000000000..cbcf5bf6c --- /dev/null +++ b/src/chunks/views.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.http import HttpResponse +from ssify import ssi_included +from .models import Chunk + +@ssi_included +def chunk(request, key): + chunk, created = Chunk.objects.get_or_create(key=key) + return HttpResponse(chunk.content) diff --git a/src/dictionary/__init__.py b/src/dictionary/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/dictionary/constants.py b/src/dictionary/constants.py new file mode 100644 index 000000000..e99dc3ff0 --- /dev/null +++ b/src/dictionary/constants.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from __future__ import unicode_literals + +from django.utils.translation import ugettext_lazy as _ + + +FN_TYPES = { + 'pa': _("author's footnotes"), + 'pe': _("Wolne Lektury editorial footnotes"), + 'pr': _("source editorial footnotes"), + 'pt': _("translator's footnotes"), +} diff --git a/src/dictionary/locale/pl/LC_MESSAGES/django.mo b/src/dictionary/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c95d7b4e5 Binary files /dev/null and b/src/dictionary/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/dictionary/locale/pl/LC_MESSAGES/django.po b/src/dictionary/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..1cb8844e8 --- /dev/null +++ b/src/dictionary/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,79 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: WolneLektury-dictionary\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-10-24 11:58+0200\n" +"PO-Revision-Date: 2014-10-24 11:58+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: pl\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%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 1.5.4\n" + +#: constants.py:11 +msgid "author's footnotes" +msgstr "przypisy autorskie" + +#: constants.py:12 +msgid "Wolne Lektury editorial footnotes" +msgstr "przypisy redaktorów Wolnych Lektur" + +#: constants.py:13 +msgid "source editorial footnotes" +msgstr "przypisy redakcji źródła" + +#: constants.py:14 +msgid "translator's footnotes" +msgstr "przypisy tłumacza" + +#: templates/dictionary/note_list.html:8 +#: templates/dictionary/note_list.html:12 +msgid "Footnotes" +msgstr "Przypisy" + +#: templates/dictionary/note_list.html:17 +msgid "By first letter" +msgstr "Pierwsza litera" + +#: templates/dictionary/note_list.html:19 +#: templates/dictionary/note_list.html:21 +#: templates/dictionary/note_list.html:37 +#: templates/dictionary/note_list.html:39 +#: templates/dictionary/note_list.html:56 +#: templates/dictionary/note_list.html:58 +#: templates/dictionary/note_list.html:74 +#: templates/dictionary/note_list.html:76 +msgid "all" +msgstr "wszystkie" + +#: templates/dictionary/note_list.html:35 +msgid "By type" +msgstr "Według typu" + +#: templates/dictionary/note_list.html:54 +msgid "By qualifier" +msgstr "Według kwalifikatora" + +#: templates/dictionary/note_list.html:72 +msgid "By language" +msgstr "Według języka" + +#: templates/dictionary/note_list.html:92 +#, python-format +msgid "%(c)s footnote found" +msgid_plural "%(c)s footnotes found" +msgstr[0] "Znaleziono %(c)s przypis." +msgstr[1] "Znaleziono %(c)s przypisy." +msgstr[2] "Znaleziono %(c)s przypisów." + +#~ msgid "Footnotes on WolneLektury.pl" +#~ msgstr "Przypisy w WolneLektury.pl" diff --git a/src/dictionary/migrations/0001_initial.py b/src/dictionary/migrations/0001_initial.py new file mode 100644 index 000000000..1908a840a --- /dev/null +++ b/src/dictionary/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Note', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('anchor', models.CharField(max_length=64)), + ('html', models.TextField()), + ('sort_key', models.CharField(max_length=128, db_index=True)), + ('book', models.ForeignKey(to='catalogue.Book')), + ], + options={ + 'ordering': ['sort_key'], + }, + bases=(models.Model,), + ), + ] diff --git a/src/dictionary/migrations/0002_auto_20141006_1422.py b/src/dictionary/migrations/0002_auto_20141006_1422.py new file mode 100644 index 000000000..a9bad32b9 --- /dev/null +++ b/src/dictionary/migrations/0002_auto_20141006_1422.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0004_remove_booktags_count_related_info'), + ('dictionary', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='NoteSource', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('anchor', models.CharField(max_length=64)), + ('book', models.ForeignKey(to='catalogue.Book')), + ('note', models.ForeignKey(to='dictionary.Note')), + ], + options={ + 'ordering': ['book'], + }, + bases=(models.Model,), + ), + migrations.RemoveField( + model_name='note', + name='anchor', + ), + migrations.RemoveField( + model_name='note', + name='book', + ), + migrations.AddField( + model_name='note', + name='fn_type', + field=models.CharField(default='', max_length=10, db_index=True), + preserve_default=False, + ), + migrations.AddField( + model_name='note', + name='language', + field=models.CharField(default='', max_length=10, db_index=True), + preserve_default=False, + ), + migrations.AddField( + model_name='note', + name='qualifier', + field=models.CharField(default='', max_length=128, db_index=True, blank=True), + preserve_default=False, + ), + ] diff --git a/src/dictionary/migrations/0003_auto_20141023_1445.py b/src/dictionary/migrations/0003_auto_20141023_1445.py new file mode 100644 index 000000000..ee4beeebe --- /dev/null +++ b/src/dictionary/migrations/0003_auto_20141023_1445.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('dictionary', '0002_auto_20141006_1422'), + ] + + operations = [ + migrations.CreateModel( + name='Qualifier', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('qualifier', models.CharField(unique=True, max_length=128, db_index=True)), + ('name', models.CharField(max_length=255)), + ], + options={ + 'ordering': ['qualifier'], + }, + bases=(models.Model,), + ), + migrations.RemoveField( + model_name='note', + name='qualifier', + ), + migrations.AddField( + model_name='note', + name='qualifiers', + field=models.ManyToManyField(to='dictionary.Qualifier', null=True), + preserve_default=True, + ), + ] diff --git a/src/dictionary/migrations/0004_auto_20151221_1225.py b/src/dictionary/migrations/0004_auto_20151221_1225.py new file mode 100644 index 000000000..ee7252ce0 --- /dev/null +++ b/src/dictionary/migrations/0004_auto_20151221_1225.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dictionary', '0003_auto_20141023_1445'), + ] + + operations = [ + migrations.AlterField( + model_name='note', + name='qualifiers', + field=models.ManyToManyField(to='dictionary.Qualifier'), + ), + ] diff --git a/src/dictionary/migrations/__init__.py b/src/dictionary/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/dictionary/models.py b/src/dictionary/models.py new file mode 100644 index 000000000..cc2b0ac51 --- /dev/null +++ b/src/dictionary/models.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.db import models, transaction +from celery.task import task +from sortify import sortify +from celery.utils.log import get_task_logger + +task_logger = get_task_logger(__name__) + +from catalogue.models import Book + + +class Qualifier(models.Model): + qualifier = models.CharField(max_length=128, db_index=True, unique=True) + name = models.CharField(max_length=255) + + class Meta: + ordering = ['qualifier'] + + def __unicode__(self): + return self.name or self.qualifier + + +class Note(models.Model): + """Represents a single annotation from a book.""" + html = models.TextField() + sort_key = models.CharField(max_length=128, db_index=True) + fn_type = models.CharField(max_length=10, db_index=True) + qualifiers = models.ManyToManyField(Qualifier) + language = models.CharField(max_length=10, db_index=True) + + class Meta: + ordering = ['sort_key'] + + +class NoteSource(models.Model): + """Represents a single annotation from a book.""" + note = models.ForeignKey(Note) + book = models.ForeignKey(Book) + anchor = models.CharField(max_length=64) + + class Meta: + ordering = ['book'] + + +@task(ignore_result=True) +def build_notes(book): + task_logger.info(book.slug) + with transaction.atomic(): + book.notesource_set.all().delete() + if book.html_file: + from librarian import html + from librarian.fn_qualifiers import FN_QUALIFIERS + + for anchor, fn_type, qualifiers, text_str, html_str in \ + html.extract_annotations(book.html_file.path): + sort_key = sortify(text_str).strip()[:128] + + language = book.language + note = None + notes = Note.objects.filter(sort_key=sort_key, + fn_type=fn_type, + language=language, html=html_str) + if notes: + note = notes[0] + else: + note = Note.objects.create( + sort_key=sort_key, + html=html_str, + fn_type=fn_type, + language=language + ) + + qualifier_objects = [] + for qualifier in qualifiers: + obj, created = Qualifier.objects.get_or_create( + qualifier=qualifier, defaults={ + 'name': FN_QUALIFIERS.get(qualifier, '') + }) + qualifier_objects.append(obj) + note.qualifiers = qualifier_objects + note.notesource_set.create(book=book, anchor=anchor) + + Note.objects.filter(notesource=None).delete() + + +def notes_from_book(sender, instance, **kwargs): + build_notes.delay(instance) +Book.html_built.connect(notes_from_book) diff --git a/src/dictionary/templates/dictionary/note_list.html b/src/dictionary/templates/dictionary/note_list.html new file mode 100755 index 000000000..9428655b0 --- /dev/null +++ b/src/dictionary/templates/dictionary/note_list.html @@ -0,0 +1,116 @@ +{% extends "base.html" %} +{% load i18n pagination_tags %} +{% load set_get from set_get %} + + +{% block bodyid %}footnotes{% endblock %} + +{% block titleextra %}{% trans "Footnotes" %}{% endblock %} + + +{% block body %} +

                    {% trans "Footnotes" %}

                    + +
                    + +

                    +{% trans "By first letter" %}: +{% if letter %} + {% trans "all" %} +{% else %} + {% trans "all" %} +{% endif %} + +{% for let in letters %} + | + {% if let == letter %} + {{ let|upper }} + {% else %} + {{ let|upper }} + {% endif %} +{% endfor %} +

                    + +

                    +{% trans "By type" %}: +{% if fn_type %} + {% trans "all" %} +{% else %} + {% trans "all" %} +{% endif %} + +{% for fnt, fnt_name in fn_types %} + | + {% if fnt == fn_type %} + {{ fnt_name }} + {% else %} + {{ fnt_name }} + {% endif %} +{% endfor %} +

                    + + +

                    +{% trans "By qualifier" %}: +{% if qualifier %} + {% trans "all" %} +{% else %} + {% trans "all" %} +{% endif %} + +{% for qual in qualifiers %} + | + {% if qual == qualifier %} + {{ qual }} + {% else %} + {{ qual }} + {% endif %} +{% endfor %} +

                    + +

                    +{% trans "By language" %}: +{% if language %} + {% trans "all" %} +{% else %} + {% trans "all" %} +{% endif %} + +{% for lang, lang_name in languages %} + | + {% if lang == language %} + {{ lang_name }} + {% else %} + {{ lang_name }} + {% endif %} +{% endfor %} +

                    + +
                    + +

                    +{% blocktrans count object_list.count as c %}{{c}} footnote found{% plural %}{{c}} footnotes found{% endblocktrans %} +

                    + +{% if object_list.exists %} + +{% autopaginate object_list 100 %} +{% paginate %} +{% for obj in object_list %} +
                    + {{ obj.html|safe }} + {% for note_source in obj.notesource_set.all %} + + {% endfor %} +
                    +{% endfor %} +{% paginate %} + +{% endif %} + +
                    + +{% endblock %} diff --git a/src/dictionary/templatetags/__init__.py b/src/dictionary/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/dictionary/templatetags/set_get.py b/src/dictionary/templatetags/set_get.py new file mode 100644 index 000000000..9afe3e87f --- /dev/null +++ b/src/dictionary/templatetags/set_get.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import template +from django.utils.http import urlencode + +register = template.Library() + + +@register.simple_tag(takes_context=True) +def set_get(context, *omit, **kwargs): + request = context['request'] + query = request.GET.dict() + for k in omit: + if k in query: + del query[k] + for k, v in kwargs.items(): + query[k] = v + return urlencode(query) diff --git a/src/dictionary/tests.py b/src/dictionary/tests.py new file mode 100755 index 000000000..0c83cf183 --- /dev/null +++ b/src/dictionary/tests.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.core.files.base import ContentFile +from catalogue.test_utils import * +from catalogue.models import Book + + +class DictionaryTests(WLTestCase): + + def setUp(self): + WLTestCase.setUp(self) + self.book_info = BookInfoStub( + author=PersonStub(("Jim",), "Lazy"), + kind="X-Kind", + genre="X-Genre", + epoch="X-Epoch", + **info_args(u"Default Book") + ) + + def test_book_with_footnote(self): + BOOK_TEXT = """ + + rose --- kind of a flower. + rose --- kind of a flower. + rose (techn.) --- #FF007F. + + """ + + book = Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + + self.assertEqual( + len(self.client.get('/przypisy/').context['object_list']), + 2, + 'There should be two notes on the note list.') + + self.assertEqual( + len(self.client.get('/przypisy/?ltr=a').context['object_list']), + 0, + 'There should not be a note for the letter A.') + + self.assertEqual( + len(self.client.get('/przypisy/?ltr=r').context['object_list']), + 2, + 'Both notes start with the letter R.') + + self.assertEqual( + len(self.client.get('/przypisy/?qual=techn.').context['object_list']), + 1, + 'There should be a note qualified with \'techn.\' qualifier.') + diff --git a/src/dictionary/urls.py b/src/dictionary/urls.py new file mode 100755 index 000000000..2320f4773 --- /dev/null +++ b/src/dictionary/urls.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url +from dictionary.views import NotesView + +urlpatterns = patterns('dictionary.views', + url(r'^$', NotesView.as_view(), name='dictionary_notes'), +) + diff --git a/src/dictionary/views.py b/src/dictionary/views.py new file mode 100755 index 000000000..69c6bf65c --- /dev/null +++ b/src/dictionary/views.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.views.generic.list import ListView +from django.conf import settings +from django.db.models import Count, Q +from catalogue.constants import LANGUAGES_3TO2 +from .constants import FN_TYPES +from .models import Note, Qualifier + + +class NotesView(ListView): + def get_queryset(self): + objects = Note.objects.all() + filters = {} + + try: + self.qualifier = Qualifier.objects.get(qualifier=self.request.GET.get('qual')) + except Qualifier.DoesNotExist: + self.qualifier = None + else: + filters['qualifier'] = Q(qualifiers=self.qualifier) + + self.language = self.request.GET.get('lang') + if self.language: + filters['language'] = Q(language=self.language) + + self.fn_type = self.request.GET.get('type') + if self.fn_type: + filters['fn_type'] = Q(fn_type=self.fn_type) + + self.letter = self.request.GET.get('ltr') + if self.letter == "0-9": + objects = objects.filter(sort_key__regex=r"^[0-9]") + #filters['letter'] = Q(sort_key__regex=r"^[0-9]") + elif self.letter: + objects = objects.filter(sort_key__startswith=self.letter) + #filters['letter'] = Q(sort_key__startswith=self.letter) + + self.letters = ["0-9"] + [chr(a) for a in range(ord('a'), ord('z')+1)] + + nobj = objects + for key, fltr in filters.items(): + if key != 'qualifier': + nobj = nobj.filter(fltr) + self.qualifiers = Qualifier.objects.filter(note__in=nobj).distinct() + + nobj = objects + for key, fltr in filters.items(): + if key != 'language': + nobj = nobj.filter(fltr) + self.languages = nobj.order_by('language').values_list( + 'language', flat=True).distinct() + lang_names = dict(settings.LANGUAGES) + self.languages = [ + (lang, lang_names.get(LANGUAGES_3TO2.get(lang, lang), lang)) + for lang in self.languages] + + nobj = objects + for key, fltr in filters.items(): + if key != 'fn_type': + nobj = nobj.filter(fltr) + self.fn_types = nobj.order_by('fn_type').values_list( + 'fn_type', flat=True).distinct() + self.fn_types = [(fnt, FN_TYPES[fnt]) for fnt in self.fn_types] + + for f in filters.values(): + objects = objects.filter(f) + + return objects + + def get_context_data(self, **kwargs): + context = super(NotesView, self).get_context_data(**kwargs) + context['letters'] = self.letters + context['letter'] = self.letter + context['qualifiers'] = self.qualifiers + context['qualifier'] = self.qualifier + context['languages'] = self.languages + context['language'] = self.language + context['fn_types'] = self.fn_types + context['fn_type'] = self.fn_type + return context diff --git a/src/funding/__init__.py b/src/funding/__init__.py new file mode 100644 index 000000000..9e81e9ec3 --- /dev/null +++ b/src/funding/__init__.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings as settings +from catalogue.utils import AppSettings + + +class Settings(AppSettings): + """Default settings for funding app.""" + DEFAULT_LANGUAGE = u'pl' + DEFAULT_AMOUNT = 20 + MIN_AMOUNT = 1 + DAYS_NEAR = 2 + + +app_settings = Settings('FUNDING') diff --git a/src/funding/admin.py b/src/funding/admin.py new file mode 100644 index 000000000..d70aef66a --- /dev/null +++ b/src/funding/admin.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.utils.translation import ugettext_lazy as _ +from django.contrib import admin +from .models import Offer, Perk, Funding, Spent + + +class OfferAdmin(admin.ModelAdmin): + model = Offer + list_display = ['title', 'author', 'target', 'sum', 'is_win', 'start', 'end'] + search_fields = ['title', 'author'] + readonly_fields = ('cover_img_tag',) + + +class PerkAdmin(admin.ModelAdmin): + model = Perk + search_fields = ['name', 'long_name'] + list_display = ['name', 'long_name', 'price', 'end_date', 'offer'] + list_filter = ['offer'] + + + +class PayedFilter(admin.SimpleListFilter): + title = _('payment complete') + parameter_name = 'payed' + def lookups(self, request, model_admin): + return ( + ('yes', _('Yes')), + ('no', _('No')), + ) + def queryset(self, request, queryset): + if self.value() == 'yes': + return queryset.exclude(payed_at=None) + elif self.value() == 'no': + return queryset.filter(payed_at=None) + +class PerksFilter(admin.SimpleListFilter): + title = _('perks') + parameter_name = 'perks' + def lookups(self, request, model_admin): + return ( + ('yes', _('Yes')), + ('no', _('No')), + ) + def queryset(self, request, queryset): + if self.value() == 'yes': + return queryset.exclude(perks=None) + elif self.value() == 'no': + return queryset.filter(perks=None) + + +class FundingAdmin(admin.ModelAdmin): + model = Funding + list_display = ['payed_at', 'offer', 'amount', 'name', 'email', 'perk_names'] + search_fields = ['name', 'email', 'offer__title', 'offer__author'] + list_filter = [PayedFilter, 'offer', PerksFilter] + + + +class SpentAdmin(admin.ModelAdmin): + model = Spent + list_display = ['book', 'amount', 'timestamp'] + search_fields = ['book__title'] + + +admin.site.register(Offer, OfferAdmin) +admin.site.register(Perk, PerkAdmin) +admin.site.register(Funding, FundingAdmin) +admin.site.register(Spent, SpentAdmin) diff --git a/src/funding/forms.py b/src/funding/forms.py new file mode 100644 index 000000000..6ed9076dd --- /dev/null +++ b/src/funding/forms.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import forms +from django.utils import formats +from django.utils.translation import ugettext_lazy as _, ugettext, get_language +from .models import Funding +from .widgets import PerksAmountWidget +from . import app_settings + + +class FundingForm(forms.Form): + required_css_class = 'required' + + amount = forms.DecimalField(label=_("Amount"), decimal_places=2, + widget=PerksAmountWidget()) + name = forms.CharField(label=_("Name"), required=False, + help_text=_("Optional name for public list of contributors")) + email = forms.EmailField(label=_("Contact e-mail"), + help_text=_("We'll use it to contact you about the details needed for your perks,
                    " + "and to send you updates about your payment and the fundraiser status (which you can always turn off).
                    " + "Your e-mail won't be publicised."), required=False) + + def __init__(self, offer, *args, **kwargs): + self.offer = offer + super(FundingForm, self).__init__(*args, **kwargs) + self.fields['amount'].widget.form_instance = self + + def clean_amount(self): + if self.cleaned_data['amount'] < app_settings.MIN_AMOUNT: + min_amount = app_settings.MIN_AMOUNT + if isinstance(min_amount, float): + min_amount = formats.number_format(min_amount, 2) + raise forms.ValidationError( + ugettext("The minimum amount is %(amount)s PLN.") % { + 'amount': min_amount}) + return self.cleaned_data['amount'] + + def clean(self): + if not self.offer.is_current(): + raise forms.ValidationError(ugettext("This offer is out of date.")) + return self.cleaned_data + + def save(self): + funding = Funding.objects.create( + offer=self.offer, + name=self.cleaned_data['name'], + email=self.cleaned_data['email'], + amount=self.cleaned_data['amount'], + language_code=get_language(), + ) + funding.perks = funding.offer.get_perks(funding.amount) + return funding + diff --git a/src/funding/locale/pl/LC_MESSAGES/django.mo b/src/funding/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..e08978e46 Binary files /dev/null and b/src/funding/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/funding/locale/pl/LC_MESSAGES/django.po b/src/funding/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..b1a27359a --- /dev/null +++ b/src/funding/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,656 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-04-16 13:13+0200\n" +"PO-Revision-Date: 2015-04-16 13:13+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \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%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 1.5.4\n" + +#: admin.py:26 +msgid "payment complete" +msgstr "płatność doszła do skutku" + +#: admin.py:30 admin.py:44 +msgid "Yes" +msgstr "Tak" + +#: admin.py:31 admin.py:45 +msgid "No" +msgstr "Nie" + +#: admin.py:40 models.py:216 models.py:234 +msgid "perks" +msgstr "prezenty" + +#: forms.py:16 templates/funding/wlfund.html:27 +msgid "Amount" +msgstr "Kwota" + +#: forms.py:18 +msgid "Name" +msgstr "Imię i nazwisko na listę darczyńców" + +#: forms.py:19 +msgid "Optional name for public list of contributors" +msgstr "" +"Opcjonalnie imię i nazwisko lub pseudonim do publicznej listy darczyńców." + +#: forms.py:20 +msgid "Contact e-mail" +msgstr "E-mail kontaktowy" + +#: forms.py:21 +msgid "" +"We'll use it to contact you about the details needed for your perks,
                    and to send you updates about your payment and the fundraiser " +"status (which you can always turn off).
                    Your e-mail won't be publicised." +msgstr "" +"Użyjemy go do kontaktu w sprawie danych potrzebnych do realizacji " +"prezentów
                    i do informowania Cię o zmianach statusu płatności i " +"zbiórki (z czego zawsze możesz zrezygnować).
                    Twój adres e-mail nie " +"będzie upubliczniony." + +#: forms.py:36 +#, python-format +msgid "The minimum amount is %(amount)s PLN." +msgstr "Minimalna kwota wpłaty to %(amount)s zł." + +#: forms.py:42 +msgid "This offer is out of date." +msgstr "Ta zbiórka jest już nieaktywna." + +#: models.py:25 +msgid "author" +msgstr "autor" + +#: models.py:26 +msgid "title" +msgstr "tytuł" + +#: models.py:27 +msgid "slug" +msgstr "slug" + +#: models.py:28 +msgid "description" +msgstr "opis" + +#: models.py:29 +msgid "target" +msgstr "kwota docelowa" + +#: models.py:30 +msgid "start" +msgstr "początek" + +#: models.py:31 +msgid "end" +msgstr "koniec" + +#: models.py:32 +msgid "redakcja URL" +msgstr "URL na Redakcji" + +#: models.py:34 +msgid "Published book." +msgstr "Opublikowana książka." + +#: models.py:35 +msgid "Cover" +msgstr "Okładka" + +#: models.py:36 +msgid "Poll" +msgstr "Ankieta" + +#: models.py:38 +msgid "Near-end notifications sent" +msgstr "Wysłano powiadomienia przed końcem" + +#: models.py:39 +msgid "End notifications sent" +msgstr "Wysłano powiadomienia o zakończeniu" + +#: models.py:43 +msgid "Cover preview" +msgstr "Podgląd okładki" + +#: models.py:47 models.py:208 models.py:229 +msgid "offer" +msgstr "zbiórka" + +#: models.py:48 +msgid "offers" +msgstr "zbiórki" + +#: models.py:163 +msgid "The fundraiser has ended!" +msgstr "Zbiórka dobiegła końca!" + +#: models.py:179 +msgid "The fundraiser will end soon!" +msgstr "Zbiórka niedługo się zakończy!" + +#: models.py:193 +msgid "The book you helped fund has been published." +msgstr "Książka, którą pomogłeś/-aś ufundować, została opublikowana." + +#: models.py:209 +msgid "price" +msgstr "cena" + +#: models.py:210 models.py:230 +msgid "name" +msgstr "nazwa" + +#: models.py:211 +msgid "long name" +msgstr "długa nazwa" + +#: models.py:212 +msgid "end date" +msgstr "data końcowa" + +#: models.py:215 +msgid "perk" +msgstr "prezent" + +#: models.py:231 +msgid "email" +msgstr "e-mail" + +#: models.py:232 models.py:314 +msgid "amount" +msgstr "kwota" + +#: models.py:233 +msgid "payed at" +msgstr "data wpłaty" + +#: models.py:236 +msgid "notifications" +msgstr "powiadomienia" + +#: models.py:240 +msgid "funding" +msgstr "wpłata" + +#: models.py:241 templates/admin/funding/offer/change_form.html:22 +msgid "fundings" +msgstr "wpłaty" + +#: models.py:315 +msgid "when" +msgstr "kiedy" + +#: models.py:318 +msgid "money spent on a book" +msgstr "pieniądze wydane na książkę" + +#: models.py:319 +msgid "money spent on books" +msgstr "pieniądze wydane na książki" + +#: models.py:345 templates/funding/thanks.html:6 +#: templates/funding/thanks.html.py:15 +msgid "Thank you for your support!" +msgstr "Dziękujemy za Twoje wsparcie!" + +#: templates/funding/disable_notifications.html:5 +#: templates/funding/no_thanks.html:5 templates/funding/no_thanks.html.py:9 +msgid "Payment failed" +msgstr "Płatność nie doszła do skutku" + +#: templates/funding/disable_notifications.html:9 +#: templates/funding/disable_notifications.html:16 +msgid "Disable notifications" +msgstr "Wyłącz powiadomienia" + +#: templates/funding/disable_notifications.html:14 +#, python-format +msgid "Are you sure you want to disable notifications for address %(e)s?" +msgstr "Czy na pewno chcesz wyłączyć powiadomienia dla adresu %(e)s?" + +#: templates/funding/disable_notifications.html:21 +#, python-format +msgid "Notifications for address %(e)s have been successfully disabled." +msgstr "Powiadomienia dla adresu %(e)s zostały wyłączone." + +#: templates/funding/disable_notifications.html:27 +#, python-format +msgid "Return to the current fundraiser." +msgstr "Wróć do aktualnej zbiórki." + +#: templates/funding/email/base.txt:1 +msgid "Hi" +msgstr "Cześć" + +#: templates/funding/email/base.txt:4 +msgid "" +"Cheers,\n" +"Wolne Lektury team" +msgstr "" +"Pozdrawiamy\n" +"zespół Wolnych Lektur" + +#: templates/funding/email/base.txt:8 +msgid "If you don't want to receive any more updates, please visit this page:" +msgstr "Jeśli nie chcesz otrzymywać kolejnych powiadomień, odwiedź tę stronę:" + +#: templates/funding/email/end.txt:6 +msgid "" +"we succesfully collected the full amount needed\n" +"for the book you contributed to:" +msgstr "udało nam się zebrać pełną kwotę na książkę, którą wsparłeś/-aś:" + +#: templates/funding/email/end.txt:12 +msgid "" +"We will now digitize it, develop and publish it in the library,\n" +"in various formats, free for everyone." +msgstr "" +"Teraz ją zdigitalizujemy, opracujemy i bezpłatnie udostępnimy w bibliotece w " +"wielu formatach." + +#: templates/funding/email/end.txt:15 +msgid "" +"Your name will be included on the list of contributors, irrespectively\n" +"of the amount of your contribution." +msgstr "" +"Zostaniesz umieszczony/-a na liście darczyńców, niezależnie od wysokości " +"wpłaty." + +#: templates/funding/email/end.txt:18 +msgid "" +"We will contact you again about details needed\n" +"to deliver your perks." +msgstr "Skontaktujemy się z Tobą w sprawie prezentów, które wybrałeś/-aś." + +#: templates/funding/email/end.txt:21 +#, python-format +msgid "" +"All of the money remaining after this fundraiser (%(r)s PLN)\n" +"will be spent on liberating other books still waiting for publication." +msgstr "" +"Wszystkie dodatkowe pieniądze pozostałe z tej zbiórki (%(r)s PLN)\n" +"zostaną przeznaczone na uwolnienie innych książek czekających na publikację." + +#: templates/funding/email/end.txt:23 templates/funding/email/end.txt.py:34 +msgid "You can see how we're spending these funds on this page:" +msgstr "Możesz zobaczyć, jak wydajemy te środki, na tej stronie:" + +#: templates/funding/email/end.txt:26 +msgid "" +"unfortunately, we were unable to collect the full amount needed\n" +"for the book you contributed to:" +msgstr "" +"niestety, nie udało nam się zebrać pełnej kwoty na książkę, którą wsparłeś/-" +"aś:" + +#: templates/funding/email/end.txt:32 +#, python-format +msgid "" +"All of the money we collected in this fundraiser (%(x)s PLN)\n" +"will be spent on liberating other books still waiting for publication." +msgstr "" +"Wszystkie pieniądze z tej zbiórki (%(x)s PLN)\n" +"zostaną przeznaczone na uwolnienie innych książek czekających na publikację." + +#: templates/funding/email/end.txt:37 templates/funding/email/published.txt:12 +msgid "" +"If you'd like to help liberate another book, or invite your friends\n" +"to do so, we're currently raising money for:" +msgstr "" +"Jeśli chcesz pomóc uwolnić kolejną książkę, albo zachęcić do tego\n" +"swoich znajomych, to aktualnie zbieramy na:" + +#: templates/funding/email/near.txt:5 +#, python-format +msgid "there's only %(d)s day left until the end of the fundraiser for:\n" +msgid_plural "" +"There're only %(d)s days left until the end of the fundraiser for:\n" +msgstr[0] "został jeden dzień do końca zbiórki na:\n" +msgstr[1] "zostały %(d)s dni do końca zbiórki na:\n" +msgstr[2] "zostało %(d)s dni do końca zbiórki na:\n" + +#: templates/funding/email/near.txt:10 +#, python-format +msgid "We managed to collect %(x)s PLN so far." +msgstr "Dotąd udało nam się zebrać %(x)s PLN." + +#: templates/funding/email/near.txt:12 +msgid "" +"The fundraiser is a success already, but the more money\n" +"we collect, the more other books we'll publish." +msgstr "" +"Zbiórka już osiągnęła sukces, ale im więcej pieniędzy\n" +"zbierzemy, tym więcej opublikujemy książek." + +#: templates/funding/email/near.txt:14 +#, python-format +msgid "We still need %(x)s PLN more." +msgstr "Nadal potrzebujemy %(x)s PLN." + +#: templates/funding/email/near.txt:16 +msgid "There's still time to let your friends know about the fundraiser!" +msgstr "Jest jeszcze czas, by poinformować o zbiórce Twoich znajomych!" + +#: templates/funding/email/published.txt:4 +msgid "we have just published the book you contributed to:" +msgstr "właśnie opublikowaliśmy książkę, którą wsparłeś/-aś:" + +#: templates/funding/email/published.txt:9 +msgid "" +"Thanks to you, it is now available for free,\n" +"in various formats, to everyone." +msgstr "" +"Dzięki Tobie jest teraz dostępna bezpłatnie\n" +"dla wszystkich w wielu formatach." + +#: templates/funding/email/thanks.txt:6 +msgid "" +"Thank you for your support - thanks to you we will set another book free." +msgstr "Dziękujemy za wsparcie - dzięki Tobie uwolnimy kolejną książkę." + +#: templates/funding/email/thanks.txt:8 +msgid "The book will be supplemented with your name as a donor." +msgstr "" +"Twoje imię i nazwisko lub pseudonim zostaną dodane do listy darczyńców przy " +"opublikowanej książce." + +#: templates/funding/email/thanks.txt:10 +msgid "We will contact you about details needed for your perks." +msgstr "Skontaktujemy się z Tobą w sprawie prezentów, które wybrałeś/-aś." + +#: templates/funding/email/thanks.txt:12 +msgid "" +"We will keep you informed about status changes to this fundraiser\n" +"and the upcoming ones that we plan to launch." +msgstr "" +"Będziemy Cię informować o zmianach statusu tej zbiórki\n" +"i o kolejnych, które planujemy rozpocząć." + +#: templates/funding/includes/funding.html:13 +msgid "Support!" +msgstr "Wesprzyj!" + +#: templates/funding/includes/funding.html:15 +#: templates/funding/offer_detail.html:40 templates/funding/thanks.html:35 +#: templates/funding/wlfund.html:17 +msgid "Learn more" +msgstr "Dowiedz się więcej" + +#: templates/funding/includes/funding.html:22 +#: templates/funding/includes/funding.html:48 +#: templates/funding/offer_detail.html:35 templates/funding/offer_list.html:31 +msgid "Help free the book!" +msgstr "Pomóż uwolnić książkę!" + +#: templates/funding/includes/funding.html:30 +msgid "collected" +msgstr "zebrane" + +#: templates/funding/includes/funding.html:33 +msgid "needed" +msgstr "potrzebujemy" + +#: templates/funding/includes/funding.html:36 +msgid "until fundraiser end" +msgstr "do końca zbiórki" + +#: templates/funding/includes/fundings.html:15 +msgid "Anonymous" +msgstr "Anonim" + +#: templates/funding/includes/offer_status.html:6 +#, python-format +msgid "" +"The fundraiser\n" +" ends on %(end)s. The full amount has been successfully\n" +" raised, but you can still contribute and help liberate\n" +" more books." +msgstr "" +"Zbiórka kończy się %(end)s. Pełna kwota została już zebrana,\n" +" ale ciągle możesz dołożyć się i pomóc uwolnić więcej książek." + +#: templates/funding/includes/offer_status.html:13 +#, python-format +#| msgid "" +#| "W need %(target)s zł to digitize it,\n" +#| " compile it and publish for free in multiple formats." +msgid "" +"We need %(target)s zł to digitize it,\n" +" compile it and publish for free in multiple formats." +msgstr "" +"Potrzebujemy %(target)s zł, by ją zdigitalizować, opracować i bezpłatnie " +"udostępnić w serwisie w wielu formatach." + +#: templates/funding/includes/offer_status.html:17 +#, python-format +#| msgid "" +#| "If we raise enought money before %(end)s we will\n" +#| " publish it and make it available for everyone." +msgid "" +"If we raise enough money before %(end)s we will\n" +" publish it and make it available for everyone." +msgstr "" +"Jeśli do %(end)s uda się zebrać pełną kwotę, opublikujemy ją i będzie " +"dostępna dla wszystkich." + +#: templates/funding/includes/offer_status.html:24 +#: templates/funding/thanks.html:19 +msgid "Full amount was successfully raised!" +msgstr "Udało się zebrać pełną kwotę!" + +#: templates/funding/includes/offer_status.html:28 +msgid "The amount needed was not raised." +msgstr "Nie udało się zebrać pełnej kwoty." + +#: templates/funding/includes/offer_status_more.html:8 +msgid "Fundraiser span" +msgstr "Termin zbiórki" + +#: templates/funding/includes/offer_status_more.html:12 +#, python-format +msgid "" +"The book\n" +" %(bt)s has been already published." +msgstr "" +"Książka\n" +" %(bt)s została opublikowana." + +#: templates/funding/includes/offer_status_more.html:16 +#, python-format +msgid "" +"You can follow\n" +" the work on the Editorial Platform." +msgstr "Możesz śledzić prace na Platformie Redakcyjnej." + +#: templates/funding/no_thanks.html:12 +msgid "You're support has not been processed successfully." +msgstr "Twoje wsparcie nie zostało zaksięgowane." + +#: templates/funding/no_thanks.html:16 +#, python-format +msgid "" +"Return to the current fundraiser and try again " +"or try to use a different payment method." +msgstr "" +"Wróć do aktualnej zbiórki i spróbuj ponownie lub " +"użyj innej metody płatności." + +#: templates/funding/offer_detail.html:48 +msgid "Support the publication" +msgstr "Wesprzyj publikację" + +#: templates/funding/offer_detail.html:54 +msgid "Donate!" +msgstr "Wpłać!" + +#: templates/funding/offer_detail.html:62 templates/funding/thanks.html:41 +msgid "Tell your friends!" +msgstr "Powiedz swoim znajomym!" + +#: templates/funding/offer_detail.html:63 +msgid "Support Wolne Lektury!" +msgstr "Wesprzyj Wolne Lektury!" + +#: templates/funding/offer_detail.html:66 +msgid "See all fundraisers." +msgstr "Zobacz wszystkie zbiórki." + +#: templates/funding/offer_detail.html:71 +msgid "Supporters" +msgstr "Wpłaty" + +#: templates/funding/offer_list.html:7 templates/funding/offer_list.html:12 +msgid "All fundraisers" +msgstr "Wszystkie zbiórki" + +#: templates/funding/offer_list.html:17 +msgid "Current fundraiser:" +msgstr "Aktualna zbiórka:" + +#: templates/funding/offer_list.html:23 +msgid "No fundraiser is currently running." +msgstr "Obecnie nie jest aktywna żadna zbiórka." + +#: templates/funding/offer_list.html:24 templates/funding/offer_list.html:40 +msgid "Previous fundraisers:" +msgstr "Poprzednie zbiórki:" + +#: templates/funding/snippets/any_remaining.html:4 +#, python-format +msgid "" +"Any remaining funds will be spent\n" +"on other books waiting to be published." +msgstr "" +"Wszelkie pozostałe środki przeznaczymy na inne " +"książki czekające na publikację." + +#: templates/funding/snippets/any_remaining.html:7 +msgid "" +"We will supplement every book with your name as a donor, no matter how\n" +"big your support will be." +msgstr "" +"Zostaniesz umieszczony/-a na liście darczyńców, niezależnie od wysokości " +"wpłaty." + +#: templates/funding/thanks.html:10 +msgid "Thank you!" +msgstr "Dziękujemy!" + +#: templates/funding/thanks.html:16 +msgid "We will contact you if you qualify for perks." +msgstr "Skontaktujemy się z Tobą w sprawie prezentów, które wybrałeś/-aś." + +#: templates/funding/thanks.html:21 +#, python-format +msgid "" +"Your donation will be spent on digitizing, compiling and\n" +" publishing the book %(b)s in multiple formats." +msgstr "" +"Wpłacone przez Ciebie pieniądze przeznaczymy na digitalizację, opracowanie i " +"udostępnienie książki %(b)s w bibliotece w wielu formatach." + +#: templates/funding/thanks.html:26 +#, python-format +msgid "" +"If the full amount needed is raised,\n" +" your donation will be spent on digitizing, compiling and\n" +" publishing the book %(b)s in multiple formats." +msgstr "" +"Jeśli uda się zebrać pełną kwotę, wpłacone przez Ciebie pieniądze " +"przeznaczymy na digitalizację, opracowanie i udostępnienie książki %(b)s w " +"bibliotece w wielu formatach." + +#: templates/funding/thanks.html:38 +msgid "Go back to the current fundraiser." +msgstr "Wróć do aktualnej zbiórki." + +#: templates/funding/thanks.html:42 +msgid "I support Wolne Lektury." +msgstr "Wspieram Wolne Lektury" + +#: templates/funding/thanks.html:45 +msgid "Vote for a book for the next fundraiser" +msgstr "Pomóż wybrać następną książkę, na którą będziemy zbierać pieniądze" + +#: templates/funding/widgets/amount.html:13 +msgid "Other amount" +msgstr "Inna kwota" + +#: templates/funding/wlfund.html:4 templates/funding/wlfund.html.py:8 +msgid "Remaining funds" +msgstr "Pozostałe środki" + +#: templates/funding/wlfund.html:11 +#, python-format +msgid "" +"If\n" +"the full amount needed for publishing a book is not raised in time,\n" +"the funds are spent on other books waiting for\n" +"publication. The same thing happens with any money remaining\n" +"from successful fundraisers." +msgstr "" +"Jeśli nie udało się zebrać pełnej kwoty potrzebnej do opublikowania książki, " +"środki przekazujemy na redakcję innych utworów " +"oczekujących na publikację w serwisie. Na ten cel przekazujemy również " +"nadmiarowe środki ze zbiórek ukończonych sukcesem." + +#: templates/funding/wlfund.html:19 +msgid "Spending these remaining funds is recorded in this table." +msgstr "W poniższej tabeli rejestrujemy wydatkowanie tych środków." + +#: templates/funding/wlfund.html:25 +msgid "Date" +msgstr "Data" + +#: templates/funding/wlfund.html:26 +msgid "Operation" +msgstr "Rozdysponowanie środków" + +#: templates/funding/wlfund.html:28 +msgid "Balance" +msgstr "Bilans" + +#: templates/funding/wlfund.html:35 +msgid "Money spent on publishing the book" +msgstr "Pieniądze przeznaczone na opublikowanie książki" + +#: templates/funding/wlfund.html:44 +msgid "Money remaining from the fundraiser for" +msgstr "Pieniądze pozostałe ze zbiórki na" + +#: templates/funding/wlfund.html:53 +msgid "There are no previous fundraisers to show yet." +msgstr "Nie ma jeszcze żadnych zakończonych zbiórek." + +#~ msgid "due" +#~ msgstr "data publikacji" + +#~ msgid "When will it be published if the money is raised." +#~ msgstr "" +#~ "Kiedy książka zostanie opublikowana, jeśli uda się zebrać pieniądze." + +#~ msgid "" +#~ "The fundraiser\n" +#~ " ends on %(end)s. The book will be published by %(due)s." +#~ msgstr "" +#~ "Zbiórka kończy się %(end)s. Książka zostanie opublikowana do %(due)s." + +#~ msgid "" +#~ "The book\n" +#~ " will be published by %(due)s." +#~ msgstr "Książka zostanie opublikowana do %(due)s." diff --git a/src/funding/management/__init__.py b/src/funding/management/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/src/funding/management/commands/__init__.py b/src/funding/management/commands/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/src/funding/management/commands/funding_notify.py b/src/funding/management/commands/funding_notify.py new file mode 100755 index 000000000..1a30ffc90 --- /dev/null +++ b/src/funding/management/commands/funding_notify.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from optparse import make_option +from django.core.management.base import BaseCommand + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, + help='Suppress output'), + ) + help = 'Sends relevant funding notifications.' + + def handle(self, **options): + + from datetime import date, timedelta + from funding.models import Offer + from funding import app_settings + from django.core.cache import caches + from django.conf import settings + + verbose = options['verbose'] + + for offer in Offer.past().filter(notified_end=None): + if verbose: + print 'Notify end:', offer + # The 'WL fund' list needs to be updated. + caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() + offer.flush_includes() + offer.notify_end() + + current = Offer.current() + if (current is not None and + current.end <= date.today() + timedelta(app_settings.DAYS_NEAR - 1) and + not current.notified_near): + if verbose: + print 'Notify near:', current + current.notify_near() diff --git a/src/funding/migrations/0001_initial.py b/src/funding/migrations/0001_initial.py new file mode 100644 index 000000000..cebe8d287 --- /dev/null +++ b/src/funding/migrations/0001_initial.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('polls', '0001_initial'), + ('catalogue', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Funding', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=127, verbose_name='name', blank=True)), + ('email', models.EmailField(db_index=True, max_length=75, verbose_name='email', blank=True)), + ('amount', models.DecimalField(verbose_name='amount', max_digits=10, decimal_places=2)), + ('payed_at', models.DateTimeField(db_index=True, null=True, verbose_name='payed at', blank=True)), + ('language_code', models.CharField(max_length=2, null=True, blank=True)), + ('notifications', models.BooleanField(default=True, db_index=True, verbose_name='notifications')), + ('notify_key', models.CharField(max_length=32)), + ], + options={ + 'ordering': ['-payed_at'], + 'verbose_name': 'funding', + 'verbose_name_plural': 'fundings', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Offer', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('author', models.CharField(max_length=255, verbose_name='author')), + ('title', models.CharField(max_length=255, verbose_name='Title')), + ('slug', models.SlugField(verbose_name='Slug')), + ('description', models.TextField(verbose_name='Description', blank=True)), + ('target', models.DecimalField(verbose_name='target', max_digits=10, decimal_places=2)), + ('start', models.DateField(verbose_name='start', db_index=True)), + ('end', models.DateField(verbose_name='end', db_index=True)), + ('redakcja_url', models.URLField(verbose_name='redakcja URL', blank=True)), + ('cover', models.ImageField(upload_to=b'funding/covers', verbose_name='Cover')), + ('notified_near', models.DateTimeField(null=True, verbose_name='Near-end notifications sent', blank=True)), + ('notified_end', models.DateTimeField(null=True, verbose_name='End notifications sent', blank=True)), + ('book', models.ForeignKey(blank=True, to='catalogue.Book', help_text='Published book.', null=True)), + ('poll', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='polls.Poll', help_text='Poll', null=True)), + ], + options={ + 'ordering': ['-end'], + 'verbose_name': 'offer', + 'verbose_name_plural': 'offers', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Perk', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('price', models.DecimalField(verbose_name='price', max_digits=10, decimal_places=2)), + ('name', models.CharField(max_length=255, verbose_name='name')), + ('long_name', models.CharField(max_length=255, verbose_name='long name')), + ('end_date', models.DateField(null=True, verbose_name='end date', blank=True)), + ('offer', models.ForeignKey(verbose_name='offer', blank=True, to='funding.Offer', null=True)), + ], + options={ + 'ordering': ['-price'], + 'verbose_name': 'perk', + 'verbose_name_plural': 'perks', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Spent', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('amount', models.DecimalField(verbose_name='amount', max_digits=10, decimal_places=2)), + ('timestamp', models.DateField(verbose_name='when')), + ('book', models.ForeignKey(to='catalogue.Book')), + ], + options={ + 'ordering': ['-timestamp'], + 'verbose_name': 'money spent on a book', + 'verbose_name_plural': 'money spent on books', + }, + bases=(models.Model,), + ), + migrations.AddField( + model_name='funding', + name='offer', + field=models.ForeignKey(verbose_name='offer', to='funding.Offer'), + preserve_default=True, + ), + migrations.AddField( + model_name='funding', + name='perks', + field=models.ManyToManyField(to='funding.Perk', verbose_name='perks', blank=True), + preserve_default=True, + ), + ] diff --git a/src/funding/migrations/0002_auto_20151221_1225.py b/src/funding/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..3224eb006 --- /dev/null +++ b/src/funding/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('funding', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='funding', + name='email', + field=models.EmailField(db_index=True, max_length=254, verbose_name='email', blank=True), + ), + migrations.AlterField( + model_name='offer', + name='description', + field=models.TextField(verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='offer', + name='slug', + field=models.SlugField(verbose_name='slug'), + ), + migrations.AlterField( + model_name='offer', + name='title', + field=models.CharField(max_length=255, verbose_name='title'), + ), + ] diff --git a/src/funding/migrations/__init__.py b/src/funding/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/funding/models.py b/src/funding/models.py new file mode 100644 index 000000000..e36b73255 --- /dev/null +++ b/src/funding/models.py @@ -0,0 +1,348 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from datetime import date, datetime +from urllib import urlencode +from django.conf import settings +from django.contrib.sites.models import Site +from django.core.urlresolvers import reverse +from django.core.mail import send_mail +from django.db import models +from django.template.loader import render_to_string +from django.utils.timezone import utc +from django.utils.translation import ugettext_lazy as _, override +import getpaid +from ssify import flush_ssi_includes +from catalogue.models import Book +from catalogue.utils import get_random_hash +from polls.models import Poll +from . import app_settings + + +class Offer(models.Model): + """ A fundraiser for a particular book. """ + author = models.CharField(_('author'), max_length=255) + title = models.CharField(_('title'), max_length=255) + slug = models.SlugField(_('slug')) + description = models.TextField(_('description'), blank=True) + target = models.DecimalField(_('target'), decimal_places=2, max_digits=10) + start = models.DateField(_('start'), db_index=True) + end = models.DateField(_('end'), db_index=True) + redakcja_url = models.URLField(_('redakcja URL'), blank=True) + book = models.ForeignKey(Book, null=True, blank=True, + help_text=_('Published book.')) + cover = models.ImageField(_('Cover'), upload_to='funding/covers') + poll = models.ForeignKey(Poll, help_text=_('Poll'), null=True, blank=True, on_delete=models.SET_NULL) + + notified_near = models.DateTimeField(_('Near-end notifications sent'), blank=True, null=True) + notified_end = models.DateTimeField(_('End notifications sent'), blank=True, null=True) + + def cover_img_tag(self): + return u'' % self.cover.url + cover_img_tag.short_description = _('Cover preview') + cover_img_tag.allow_tags = True + + class Meta: + verbose_name = _('offer') + verbose_name_plural = _('offers') + ordering = ['-end'] + + def __unicode__(self): + return u"%s - %s" % (self.author, self.title) + + def get_absolute_url(self): + return reverse('funding_offer', args=[self.slug]) + + def save(self, *args, **kw): + published_now = (self.book_id is not None and + self.pk is not None and + type(self).objects.values('book').get(pk=self.pk)['book'] != self.book_id) + retval = super(Offer, self).save(*args, **kw) + self.flush_includes() + if published_now: + self.notify_published() + return retval + + def flush_includes(self): + flush_ssi_includes([ + template % (self.pk, lang) + for template in [ + '/wesprzyj/o/%d/top-bar.%s.html', + '/wesprzyj/o/%d/detail-bar.%s.html', + '/wesprzyj/o/%d/list-bar.%s.html', + '/wesprzyj/o/%d/status.%s.html', + '/wesprzyj/o/%d/status-more.%s.html', + ] + [ + '/wesprzyj/o/%%d/fundings/%d.%%s.html' % page + for page in range(1, len(self.funding_payed()) // 10 + 2) + ] + for lang in [lc for (lc, _ln) in settings.LANGUAGES] + ]) + + def is_current(self): + return self.start <= date.today() <= self.end and self == self.current() + + def is_win(self): + return self.sum() >= self.target + + def remaining(self): + if self.is_current(): + return None + if self.is_win(): + return self.sum() - self.target + else: + return self.sum() + + @classmethod + def current(cls): + """ Returns current fundraiser or None. + + Current fundraiser is the one that: + - has already started, + - hasn't yet ended, + - if there's more than one of those, it's the one that ends last. + + """ + today = date.today() + objects = cls.objects.filter(start__lte=today, end__gte=today).order_by('-end') + try: + return objects[0] + except IndexError: + return None + + @classmethod + def past(cls): + """ QuerySet for all past fundraisers. """ + objects = cls.public() + current = cls.current() + if current is not None: + objects = objects.exclude(pk=current.pk) + return objects + + @classmethod + def public(cls): + """ QuerySet for all current and past fundraisers. """ + today = date.today() + return cls.objects.filter(start__lte=today) + + def get_perks(self, amount=None): + """ Finds all the perks for the offer. + + If amount is provided, returns the perks you get for it. + + """ + perks = Perk.objects.filter( + models.Q(offer=self) | models.Q(offer=None) + ).exclude(end_date__lt=date.today()) + if amount is not None: + perks = perks.filter(price__lte=amount) + return perks + + def funding_payed(self): + """ QuerySet for all completed payments for the offer. """ + return Funding.payed().filter(offer=self) + + def funders(self): + return self.funding_payed().order_by('-amount', 'payed_at') + + def sum(self): + """ The money gathered. """ + return self.funding_payed().aggregate(s=models.Sum('amount'))['s'] or 0 + + def notify_all(self, subject, template_name, extra_context=None): + Funding.notify_funders( + subject, template_name, extra_context, + query_filter=models.Q(offer=self) + ) + + def notify_end(self, force=False): + if not force and self.notified_end: return + assert not self.is_current() + self.notify_all( + _('The fundraiser has ended!'), + 'funding/email/end.txt', { + 'offer': self, + 'is_win': self.is_win(), + 'remaining': self.remaining(), + 'current': self.current(), + }) + self.notified_end = datetime.utcnow().replace(tzinfo=utc) + self.save() + + def notify_near(self, force=False): + if not force and self.notified_near: return + assert self.is_current() + sum_ = self.sum() + need = self.target - sum_ + self.notify_all( + _('The fundraiser will end soon!'), + 'funding/email/near.txt', { + 'days': (self.end - date.today()).days + 1, + 'offer': self, + 'is_win': self.is_win(), + 'sum': sum_, + 'need': need, + }) + self.notified_near = datetime.utcnow().replace(tzinfo=utc) + self.save() + + def notify_published(self): + assert self.book is not None + self.notify_all( + _('The book you helped fund has been published.'), + 'funding/email/published.txt', { + 'offer': self, + 'book': self.book, + 'author': self.book.pretty_title(), + 'current': self.current(), + }) + + +class Perk(models.Model): + """ A perk offer. + + If no attached to a particular Offer, applies to all. + + """ + offer = models.ForeignKey(Offer, verbose_name=_('offer'), null=True, blank=True) + price = models.DecimalField(_('price'), decimal_places=2, max_digits=10) + name = models.CharField(_('name'), max_length=255) + long_name = models.CharField(_('long name'), max_length=255) + end_date = models.DateField(_('end date'), null=True, blank=True) + + class Meta: + verbose_name = _('perk') + verbose_name_plural = _('perks') + ordering = ['-price'] + + def __unicode__(self): + return "%s (%s%s)" % (self.name, self.price, u" for %s" % self.offer if self.offer else "") + + +class Funding(models.Model): + """ A person paying in a fundraiser. + + The payment was completed if and only if payed_at is set. + + """ + offer = models.ForeignKey(Offer, verbose_name=_('offer')) + name = models.CharField(_('name'), max_length=127, blank=True) + email = models.EmailField(_('email'), blank=True, db_index=True) + amount = models.DecimalField(_('amount'), decimal_places=2, max_digits=10) + payed_at = models.DateTimeField(_('payed at'), null=True, blank=True, db_index=True) + perks = models.ManyToManyField(Perk, verbose_name=_('perks'), blank=True) + language_code = models.CharField(max_length=2, null=True, blank=True) + notifications = models.BooleanField(_('notifications'), default=True, db_index=True) + notify_key = models.CharField(max_length=32) + + class Meta: + verbose_name = _('funding') + verbose_name_plural = _('fundings') + ordering = ['-payed_at'] + + @classmethod + def payed(cls): + """ QuerySet for all completed payments. """ + return cls.objects.exclude(payed_at=None) + + def __unicode__(self): + return unicode(self.offer) + + def get_absolute_url(self): + return reverse('funding_funding', args=[self.pk]) + + def perk_names(self): + return ", ".join(perk.name for perk in self.perks.all()) + + def get_disable_notifications_url(self): + return "%s?%s" % (reverse("funding_disable_notifications"), + urlencode({ + 'email': self.email, + 'key': self.notify_key, + })) + + def save(self, *args, **kwargs): + if self.email and not self.notify_key: + self.notify_key = get_random_hash(self.email) + ret = super(Funding, self).save(*args, **kwargs) + self.offer.flush_includes() + return ret + + @classmethod + def notify_funders(cls, subject, template_name, extra_context=None, + query_filter=None, payed_only=True): + funders = cls.objects.exclude(email="").filter(notifications=True) + if payed_only: + funders = funders.exclude(payed_at=None) + if query_filter is not None: + funders = funders.filter(query_filter) + emails = set() + for funder in funders: + if funder.email in emails: + continue + emails.add(funder.email) + funder.notify(subject, template_name, extra_context) + + def notify(self, subject, template_name, extra_context=None): + context = { + 'funding': self, + 'site': Site.objects.get_current(), + } + if extra_context: + context.update(extra_context) + with override(self.language_code or app_settings.DEFAULT_LANGUAGE): + send_mail(subject, + render_to_string(template_name, context), + settings.CONTACT_EMAIL, + [self.email], + fail_silently=False + ) + + def disable_notifications(self): + """Disables all notifications for this e-mail address.""" + type(self).objects.filter(email=self.email).update(notifications=False) + + +# Register the Funding model with django-getpaid for payments. +getpaid.register_to_payment(Funding, unique=False, related_name='payment') + + +class Spent(models.Model): + """ Some of the remaining money spent on a book. """ + book = models.ForeignKey(Book) + amount = models.DecimalField(_('amount'), decimal_places=2, max_digits=10) + timestamp = models.DateField(_('when')) + + class Meta: + verbose_name = _('money spent on a book') + verbose_name_plural = _('money spent on books') + ordering = ['-timestamp'] + + def __unicode__(self): + return u"Spent: %s" % unicode(self.book) + + +def new_payment_query_listener(sender, order=None, payment=None, **kwargs): + """ Set payment details for getpaid. """ + payment.amount = order.amount + payment.currency = 'PLN' +getpaid.signals.new_payment_query.connect(new_payment_query_listener) + + +def user_data_query_listener(sender, order, user_data, **kwargs): + """ Set user data for payment. """ + user_data['email'] = order.email +getpaid.signals.user_data_query.connect(user_data_query_listener) + +def payment_status_changed_listener(sender, instance, old_status, new_status, **kwargs): + """ React to status changes from getpaid. """ + if old_status != 'paid' and new_status == 'paid': + instance.order.payed_at = datetime.utcnow().replace(tzinfo=utc) + instance.order.save() + if instance.order.email: + instance.order.notify( + _('Thank you for your support!'), + 'funding/email/thanks.txt' + ) +getpaid.signals.payment_status_changed.connect(payment_status_changed_listener) diff --git a/src/funding/static/funding/funding.js b/src/funding/static/funding/funding.js new file mode 100644 index 000000000..765bddcad --- /dev/null +++ b/src/funding/static/funding/funding.js @@ -0,0 +1,18 @@ +$(function() { + $('.funding .close').click(function(e) { + e.preventDefault(); + var fundNode = $(e.target).parent(); + fundNode.slideUp(function(){fundingHandle.show()}); + if(Modernizr.localstorage) + localStorage['hide-offer-id'] = fundNode.attr('data-offer-id'); + }); + + var fundingTopHeader = $('#funding-closeable'); + var fundingHandle = $('#funding-handle'); + fundingHandle.click(function(e) { + fundingTopHeader.slideDown(); + $(e.target).hide(); + if(Modernizr.localstorage) + localStorage.removeItem('hide-offer-id'); + }); +}); \ No newline at end of file diff --git a/src/funding/templates/admin/funding/offer/change_form.html b/src/funding/templates/admin/funding/offer/change_form.html new file mode 100755 index 000000000..292d0dfeb --- /dev/null +++ b/src/funding/templates/admin/funding/offer/change_form.html @@ -0,0 +1,31 @@ +{% extends "admin/change_form.html" %} +{% load i18n %} + +{% block extrahead %} +{{ block.super }} + +{% endblock %} + + + +{% block pretitle %} + + +↓ {% trans "fundings" %} ↓ + +{{ block.super }} +{% endblock %} diff --git a/src/funding/templates/funding/disable_notifications.html b/src/funding/templates/funding/disable_notifications.html new file mode 100644 index 000000000..9123310d9 --- /dev/null +++ b/src/funding/templates/funding/disable_notifications.html @@ -0,0 +1,34 @@ +{% extends "base.html" %} +{% load i18n %} +{% load fnp_share %} + +{% block titleextra %}{% trans "Payment failed" %}{% endblock %} + +{% block body %} + +

                    {% trans "Disable notifications" %}

                    +
                    + +{% if view.object.notifications %} + +

                    {% blocktrans with e=view.object.email %}Are you sure you want to disable notifications for address {{e}}?{% endblocktrans %}

                    +
                    + +
                    + +{% else %} + +

                    {% blocktrans with e=view.object.email %}Notifications for address {{e}} have been successfully disabled.{% endblocktrans %}

                    + +{% endif %} + +{% url 'funding_current' as current %} +

                    +{% blocktrans with current=current %}Return to the current fundraiser.{% endblocktrans %} +

                    + + +
                    + + +{% endblock %} diff --git a/src/funding/templates/funding/email/base.txt b/src/funding/templates/funding/email/base.txt new file mode 100755 index 000000000..1129549ce --- /dev/null +++ b/src/funding/templates/funding/email/base.txt @@ -0,0 +1,10 @@ +{% autoescape off %}{% load i18n %}{% trans 'Hi' %}{% if funding.name %} {{ funding.name }}{% endif %}, +{% block body %} +{% endblock %} +{% blocktrans %}Cheers, +Wolne Lektury team{% endblocktrans %} + +-- +{% blocktrans %}If you don't want to receive any more updates, please visit this page:{% endblocktrans %} +http://{{site.domain}}{{ funding.get_disable_notifications_url }} +{% endautoescape %} diff --git a/src/funding/templates/funding/email/end.txt b/src/funding/templates/funding/email/end.txt new file mode 100755 index 000000000..023d34427 --- /dev/null +++ b/src/funding/templates/funding/email/end.txt @@ -0,0 +1,42 @@ +{% extends "funding/email/base.txt" %} +{% load i18n %} + + +{% block body %}{% if is_win %} +{% blocktrans %}we succesfully collected the full amount needed +for the book you contributed to:{% endblocktrans %} + + {{ offer.author }} – {{ offer.title }} + http://{{ site.domain }}{{ offer.get_absolute_url }} + +{% blocktrans %}We will now digitize it, develop and publish it in the library, +in various formats, free for everyone.{% endblocktrans %} +{% if funding.name %} +{% blocktrans %}Your name will be included on the list of contributors, irrespectively +of the amount of your contribution.{% endblocktrans %} +{% endif %}{# funding.name #}{% if funding.perks.exists %} +{% blocktrans %}We will contact you again about details needed +to deliver your perks.{% endblocktrans %} +{% endif %}{# funding.perks.exists #}{% if remaining %} +{% blocktrans with r=remaining %}All of the money remaining after this fundraiser ({{ r }} PLN) +will be spent on liberating other books still waiting for publication.{% endblocktrans %} +{% blocktrans %}You can see how we're spending these funds on this page:{% endblocktrans %} +http://{{ site.domain }}{% url 'funding_wlfund' %} +{% endif %}{# remaining #}{% else %}{# !is_win #} +{% blocktrans %}unfortunately, we were unable to collect the full amount needed +for the book you contributed to:{% endblocktrans %} + + {{ offer.author }} – {{ offer.title }} + http://{{ site.domain }}{{ offer.get_absolute_url }} +{% if remaining %} +{% blocktrans with x=remaining %}All of the money we collected in this fundraiser ({{ x }} PLN) +will be spent on liberating other books still waiting for publication.{% endblocktrans %} +{% blocktrans %}You can see how we're spending these funds on this page:{% endblocktrans %} +http://{{ site.domain }}{% url 'funding_wlfund' %} +{% endif %}{# remaining #}{% endif %}{# is_win #}{% if current %} +{% blocktrans %}If you'd like to help liberate another book, or invite your friends +to do so, we're currently raising money for:{% endblocktrans %} + + {{ current.author }} – {{ current.title }} + http://{{ site.domain }}{% url 'funding_current' %} +{% endif %}{% endblock %} diff --git a/src/funding/templates/funding/email/near.txt b/src/funding/templates/funding/email/near.txt new file mode 100755 index 000000000..47537c129 --- /dev/null +++ b/src/funding/templates/funding/email/near.txt @@ -0,0 +1,18 @@ +{% extends "funding/email/base.txt" %} +{% load i18n %} + +{% block body %} +{% blocktrans count days as d %}there's only {{ d }} day left until the end of the fundraiser for: +{% plural %}There're only {{ d }} days left until the end of the fundraiser for: +{% endblocktrans %} + {{ offer.author }} – {{ offer.title }} + +{% blocktrans with x=sum %}We managed to collect {{x}} PLN so far.{% endblocktrans %} +{% if is_win %} +{% blocktrans %}The fundraiser is a success already, but the more money +we collect, the more other books we'll publish.{% endblocktrans %} +{% else %}{% blocktrans with x=need %}We still need {{ x }} PLN more.{% endblocktrans %} +{% endif %} +{% trans "There's still time to let your friends know about the fundraiser!" %} +http://{{ site.domain }}{% url 'funding_current' %} +{% endblock %} diff --git a/src/funding/templates/funding/email/published.txt b/src/funding/templates/funding/email/published.txt new file mode 100755 index 000000000..672efa2ae --- /dev/null +++ b/src/funding/templates/funding/email/published.txt @@ -0,0 +1,17 @@ +{% extends "funding/email/base.txt" %} +{% load i18n %} +{% block body %} +{% blocktrans %}we have just published the book you contributed to:{% endblocktrans %} + + {{ author }} – {{ offer.book.title }} + http://{{ site.domain }}{{ offer.book.get_absolute_url }} + +{% blocktrans %}Thanks to you, it is now available for free, +in various formats, to everyone.{% endblocktrans %} +{% if current %} +{% blocktrans %}If you'd like to help liberate another book, or invite your friends +to do so, we're currently raising money for:{% endblocktrans %} + + {{ current.author }} – {{ current.title }} + http://{{ site.domain }}{% url 'funding_current' %} +{% endif %}{% endblock %} diff --git a/src/funding/templates/funding/email/thanks.txt b/src/funding/templates/funding/email/thanks.txt new file mode 100644 index 000000000..2ded0bd9d --- /dev/null +++ b/src/funding/templates/funding/email/thanks.txt @@ -0,0 +1,14 @@ +{% extends "funding/email/base.txt" %} +{% load i18n %} + + +{% block body %} +{% trans 'Thank you for your support - thanks to you we will set another book free.' %}{% if funding.name %} + +{% trans 'The book will be supplemented with your name as a donor.' %}{% endif %} +{% if funding.perks.exists %} +{% blocktrans %}We will contact you about details needed for your perks.{% endblocktrans %} +{% endif %}{# funding.perks.exists #} +{% blocktrans %}We will keep you informed about status changes to this fundraiser +and the upcoming ones that we plan to launch.{% endblocktrans %} +{% endblock %} diff --git a/src/funding/templates/funding/includes/funding.html b/src/funding/templates/funding/includes/funding.html new file mode 100644 index 000000000..c8f62d275 --- /dev/null +++ b/src/funding/templates/funding/includes/funding.html @@ -0,0 +1,72 @@ +{% spaceless %} + +{% load i18n %} +{% load time_tags %} + +{% if offer %} + + +{% if closeable %} +
                    {% trans "Help free the book!" %}
                    + + + +{% endif %} + + +{% endif %} + +{% endspaceless %} diff --git a/src/funding/templates/funding/includes/fundings.html b/src/funding/templates/funding/includes/fundings.html new file mode 100644 index 000000000..e13e1ec18 --- /dev/null +++ b/src/funding/templates/funding/includes/fundings.html @@ -0,0 +1,28 @@ +{% spaceless %} + +{% load i18n %} +{% load pagination_tags %} + + + +{% for funding in fundings %} + + + + + +{% endfor %} +
                    {{ funding.payed_at.date }} + {% if funding.name %} + {{ funding.name }} + {% else %} + {% trans "Anonymous" %} + {% endif %} + {{ funding.amount }} zł  + {% for perk in funding.perks.all %} + {{ perk.name }}{% if not forloop.last %},{% endif %} + {% endfor %} +
                    + +{% endspaceless %}{% paginate %} + diff --git a/src/funding/templates/funding/includes/offer_status.html b/src/funding/templates/funding/includes/offer_status.html new file mode 100644 index 000000000..4d5ae05ea --- /dev/null +++ b/src/funding/templates/funding/includes/offer_status.html @@ -0,0 +1,31 @@ +{% load i18n %} + +{% if offer.is_current %} + {% if offer.is_win %} +

                    + {% blocktrans with end=offer.end %}The fundraiser + ends on {{ end }}. The full amount has been successfully + raised, but you can still contribute and help liberate + more books.{% endblocktrans %} +

                    + {% else %} +

                    + {% blocktrans with target=offer.target|floatformat:-2 %}We need {{target}} zł to digitize it, + compile it and publish for free in multiple formats.{% endblocktrans %} +

                    +

                    + {% blocktrans with end=offer.end %}If we raise enough money before {{end}} we will + publish it and make it available for everyone.{% endblocktrans %} +

                    + {% endif %} +{% else %} + {% if offer.is_win %} +

                    + {% trans "Full amount was successfully raised!" %} +

                    + {% else %} +

                    + {% trans "The amount needed was not raised." %} +

                    + {% endif %} +{% endif %} diff --git a/src/funding/templates/funding/includes/offer_status_more.html b/src/funding/templates/funding/includes/offer_status_more.html new file mode 100644 index 000000000..c94c9a801 --- /dev/null +++ b/src/funding/templates/funding/includes/offer_status_more.html @@ -0,0 +1,26 @@ +{% load i18n %} + +{% if offer.is_current %} +

                    + {% include "funding/snippets/any_remaining.html" %} +

                    +{% else %} +

                    {% trans "Fundraiser span" %}: {{ offer.start }} – {{ offer.end }}

                    + {% if offer.is_win %} +

                    + {% if offer.book %} + {% blocktrans with bu=offer.book.get_absolute_url bt=offer.book %}The book + {{ bt }} has been already published.{% endblocktrans %} + {% else %} + {% if offer.redakcja_url %} + {% blocktrans with r=offer.redakcja_url %}You can follow + the work on the Editorial Platform.{% endblocktrans %} + {% endif %} + {% endif %} +

                    + {% endif %} + + {% if offer.remaining %} +

                    {% include "funding/snippets/any_remaining.html" %}

                    + {% endif %} +{% endif %} diff --git a/src/funding/templates/funding/no_thanks.html b/src/funding/templates/funding/no_thanks.html new file mode 100644 index 000000000..3c8db166e --- /dev/null +++ b/src/funding/templates/funding/no_thanks.html @@ -0,0 +1,23 @@ +{% extends "base.html" %} +{% load i18n %} +{% load fnp_share %} + +{% block titleextra %}{% trans "Payment failed" %}{% endblock %} + +{% block body %} + +

                    {% trans "Payment failed" %}

                    +
                    + +

                    {% trans "You're support has not been processed successfully." %}

                    + +{% url 'funding_current' as current %} +

                    +{% blocktrans with current=current %}Return to the current fundraiser and try again or try to use a different payment method.{% endblocktrans %} +

                    + + +
                    + + +{% endblock %} diff --git a/src/funding/templates/funding/offer_detail.html b/src/funding/templates/funding/offer_detail.html new file mode 100644 index 000000000..70930c400 --- /dev/null +++ b/src/funding/templates/funding/offer_detail.html @@ -0,0 +1,77 @@ +{% extends "base.html" %} +{% load url from future %} +{% load i18n static %} +{% load pagination_tags %} +{% load fnp_share %} +{% load thumbnail %} +{% load build_absolute_uri from fnp_common %} +{% load ssi_include from ssify %} + + +{% block titleextra %}{{ object }}{% endblock %} + +{% block ogimage %}{{ object.cover.url|build_absolute_uri:request }}{% endblock %} + +{% block metadescription %}Wesprzyj kolejną publikację Wolnych Lektur!{% endblock %} + + +{% block body %} + +

                    {{ object }}

                    + +{% ssi_include 'funding_detail_bar' pk=object.pk %} +
                    +
                    + {% if object.cover %} + Cover + {% endif %} +
                    +

                    {% trans "Help free the book!" %}

                    + {{ object.description|safe }} + {% ssi_include 'funding_status' pk=object.pk %} + 1%Możesz też przekazać
                    1% podatku na rozwój biblioteki. →
                    + {% ssi_include 'funding_status_more' pk=object.pk %} +

                    {% trans "Learn more" %}.

                    +
                    + +
                    +
                    + + {% if object.is_current %} +
                    +

                    {% trans "Support the publication" %}

                    +
                    + + {{ form.as_table }} + +
                    + +
                    +
                    +
                    + + {% url 'funding_current' object.slug as current %} +

                    {% trans "Tell your friends!" %}

                    + + {% endif %} + +

                    {% trans "See all fundraisers." %}

                    + +
                    + + +

                    {% trans "Supporters" %}:

                    + +
                    + {% ssi_include 'funding_fundings' pk=object.pk page=page %} +
                    + +{% endblock %} diff --git a/src/funding/templates/funding/offer_list.html b/src/funding/templates/funding/offer_list.html new file mode 100644 index 000000000..e8088bfa8 --- /dev/null +++ b/src/funding/templates/funding/offer_list.html @@ -0,0 +1,47 @@ +{% extends "base.html" %} +{% load url from future %} +{% load i18n %} +{% load ssi_include from ssify %} +{% load pagination_tags %} + +{% block titleextra %}{% trans "All fundraisers" %}{% endblock %} + +{% block bodyid %}funding-offer-list{% endblock %} + +{% block body %} +

                    {% trans "All fundraisers" %}

                    + + +{% autopaginate object_list 10 %} +{% if page_obj.number == 1 %} +

                    {% trans "Current fundraiser:" %}

                    +{% endif %} + +{% for offer in object_list %} +{% with is_win=offer.is_win is_current=offer.is_current %} + {% if not is_current and forloop.first and page_obj.number == 1 %} +

                    {% trans "No fundraiser is currently running." %}

                    +

                    {% trans "Previous fundraisers:" %}

                    + {% endif %} + + {% ssi_include 'funding_list_bar' pk=offer.pk %} + +
                    + {% if is_current %} +

                    {% trans "Help free the book!" %}

                    + {{ offer.description|safe }} + {% endif %} + {% ssi_include 'funding_status' pk=offer.pk %} + {% ssi_include 'funding_status_more' pk=offer.pk %} + +
                    + + {% if is_current and not forloop.last %} +

                    {% trans "Previous fundraisers:" %}

                    + {% endif %} + +{% endwith %} +{% endfor %} +{% paginate %} + +{% endblock %} diff --git a/src/funding/templates/funding/snippets/any_remaining.html b/src/funding/templates/funding/snippets/any_remaining.html new file mode 100644 index 000000000..d8a5bd675 --- /dev/null +++ b/src/funding/templates/funding/snippets/any_remaining.html @@ -0,0 +1,10 @@ + +{% load i18n %} +{% url 'funding_wlfund' as wlfund %} +{% blocktrans %}Any remaining funds will be spent +on other books waiting to be published.{% endblocktrans %} +

                    +{% blocktrans %}We will supplement every book with your name as a donor, no matter how +big your support will be.{% endblocktrans %} + + diff --git a/src/funding/templates/funding/thanks.html b/src/funding/templates/funding/thanks.html new file mode 100644 index 000000000..676ea487b --- /dev/null +++ b/src/funding/templates/funding/thanks.html @@ -0,0 +1,51 @@ +{% extends "base.html" %} +{% load i18n %} +{% load fnp_share %} +{% load polls_tags %} + +{% block titleextra %}{% trans "Thank you for your support!" %}{% endblock %} + +{% block body %} + +

                    {% trans "Thank you!" %}

                    +
                    + +1%Możesz też przekazać
                    1% podatku na rozwój biblioteki. →
                    + +

                    {% trans "Thank you for your support!" %}

                    +

                    {% blocktrans %}We will contact you if you qualify for perks.{% endblocktrans %}

                    + +{% if offer.is_win %} +

                    {% trans "Full amount was successfully raised!" %}

                    + +

                    {% blocktrans with b=offer.title %}Your donation will be spent on digitizing, compiling and + publishing the book {{ b }} in multiple formats.{% endblocktrans %}

                    + +{% else %} + +

                    {% blocktrans with b=offer.title %}If the full amount needed is raised, + your donation will be spent on digitizing, compiling and + publishing the book {{ b }} in multiple formats.{% endblocktrans %}

                    + +{% endif %} + + +

                    {% include "funding/snippets/any_remaining.html" %} + +{% trans "Learn more" %}.

                    + +{% url 'funding_current' offer.slug as current %} +

                    {% trans "Go back to the current fundraiser." %}

                    + + +

                    {% trans "Tell your friends!" %}

                    + + +{% if offer.poll %} +

                    {% trans "Vote for a book for the next fundraiser" %}

                    + {% poll offer.poll %} +{% endif %} +
                    + + +{% endblock %} diff --git a/src/funding/templates/funding/widgets/amount.html b/src/funding/templates/funding/widgets/amount.html new file mode 100644 index 000000000..01db675a0 --- /dev/null +++ b/src/funding/templates/funding/widgets/amount.html @@ -0,0 +1,19 @@ +{% load i18n %} +
                    +{% if perks %} + {% for perk in perks %} +
                    + {% endfor %} + + zł +{% else %} + +{% endif %} +
                    diff --git a/src/funding/templates/funding/wlfund.html b/src/funding/templates/funding/wlfund.html new file mode 100644 index 000000000..bb8a2bea2 --- /dev/null +++ b/src/funding/templates/funding/wlfund.html @@ -0,0 +1,59 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block titleextra %}{% trans "Remaining funds" %}{% endblock %} + +{% block body %} + +

                    {% trans "Remaining funds" %}

                    + +
                    +

                    {% blocktrans with r="http://redakcja.wolnelektury.pl/" %}If +the full amount needed for publishing a book is not raised in time, +the funds are spent on other books waiting for +publication. The same thing happens with any money remaining +from successful fundraisers.{% endblocktrans %} + +{% trans "Learn more" %}.

                    + +

                    {% trans "Spending these remaining funds is recorded in this table." %}

                    +
                    + + + + + + + + + + + {% for tag, entry in log %} + {% if tag == 'spent' %} + + + + + + + {% else %} + + + + + + + {% endif %} + {% empty %} + + {% endfor %} +
                    {% trans "Date" %}:{% trans "Operation" %}:{% trans "Amount" %}:{% trans "Balance" %}:
                    {{ entry.timestamp }}{% trans "Money spent on publishing the book" %}: + + {{ entry.book }}-{{ entry.amount }} zł{{ entry.total }} zł
                    {{ entry.end }}{% trans "Money remaining from the fundraiser for" %}: + + {{ entry }}+{{ entry.wlfund }} zł{{ entry.total }} zł
                    + {% trans "There are no previous fundraisers to show yet." %} +
                    + + +{% endblock %} diff --git a/src/funding/templatetags/__init__.py b/src/funding/templatetags/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/src/funding/templatetags/funding_tags.py b/src/funding/templatetags/funding_tags.py new file mode 100755 index 000000000..5dbeec6eb --- /dev/null +++ b/src/funding/templatetags/funding_tags.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import template +from ssify import ssi_variable +from ssify.utils import ssi_cache_control +from ..models import Offer +from ..utils import sanitize_payment_title + +register = template.Library() + + +@ssi_variable(register, patch_response=[ssi_cache_control(must_revalidate=True, max_age=0)]) +def current_offer(request): + offer = Offer.current() + return offer.pk if offer is not None else None + + +register.filter(sanitize_payment_title) diff --git a/src/funding/tests.py b/src/funding/tests.py new file mode 100644 index 000000000..6dbfbb457 --- /dev/null +++ b/src/funding/tests.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from datetime import date, timedelta +from django.test import TestCase +from .models import Offer, Perk + + +class PerksTest(TestCase): + def setUp(self): + self.today = date.today() + self.offer1 = Offer.objects.create( + author='author1', title='title1', slug='slug1', + target=100, start=self.today, end=self.today) + + def test_perks(self): + perk = Perk.objects.create(price=20, name='Perk 20') + perk1 = Perk.objects.create(offer=self.offer1, price=50, name='Perk 50') + offer2 = Offer.objects.create( + author='author2', title='title2', slug='slug2', + target=100, start=self.today-timedelta(1), end=self.today-timedelta(1)) + perk2 = Perk.objects.create(offer=offer2, price=1, name='Perk 1') + + self.assertEqual( + set(self.offer1.get_perks(10)), + set()) + self.assertEqual( + set(self.offer1.get_perks(70)), + set([perk, perk1])) + + +class FundingTest(TestCase): + def setUp(self): + self.today = date.today() + self.offer_past = Offer.objects.create( + author='an-author', title='past', slug='past', + target=100, start=self.today-timedelta(1), end=self.today-timedelta(1)) + self.offer_current = Offer.objects.create( + author='an-author', title='current', slug='current', + target=100, start=self.today, end=self.today) + self.offer_future = Offer.objects.create( + author='an-author', title='future', slug='future', + target=100, start=self.today+timedelta(1), end=self.today+timedelta(1)) + + def test_current(self): + self.assertTrue(self.offer_current.is_current()) + self.assertFalse(self.offer_past.is_current()) + self.assertEqual(Offer.current(), self.offer_current) + self.assertEqual( + set(Offer.past()), + set([self.offer_past]) + ) + self.assertEqual( + set(Offer.public()), + set([self.offer_past, self.offer_current]) + ) + + def test_interrupt(self): + # A new offer starts, ending the previously current one. + offer_interrupt = Offer.objects.create( + author='an-author', title='interrupt', slug='interrupt', + target=100, start=self.today-timedelta(1), end=self.today+timedelta(1)) + + self.assertTrue(offer_interrupt.is_current()) + self.assertFalse(self.offer_current.is_current()) + self.assertEqual(Offer.current(), offer_interrupt) + self.assertEqual( + set(Offer.past()), + set([self.offer_past, self.offer_current]) + ) + self.assertEqual( + set(Offer.public()), + set([self.offer_past, self.offer_current, offer_interrupt]) + ) + diff --git a/src/funding/urls.py b/src/funding/urls.py new file mode 100644 index 000000000..4d806e84b --- /dev/null +++ b/src/funding/urls.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url, include + +from .views import (WLFundView, OfferDetailView, OfferListView, + ThanksView, NoThanksView, CurrentView, DisableNotifications) + + +urlpatterns = patterns('funding.views', + + url(r'^$', CurrentView.as_view(), name='funding_current'), + url(r'^teraz/$', CurrentView.as_view()), + url(r'^teraz/(?P[^/]+)/$', CurrentView.as_view(), name='funding_current'), + url(r'^lektura/$', OfferListView.as_view(), name='funding'), + url(r'^lektura/(?P[^/]+)/$', OfferDetailView.as_view(), name='funding_offer'), + url(r'^pozostale/$', WLFundView.as_view(), name='funding_wlfund'), + + url(r'^dziekujemy/$', ThanksView.as_view(), name='funding_thanks'), + url(r'^niepowodzenie/$', NoThanksView.as_view(), name='funding_nothanks'), + + url(r'^wylacz_email/$', DisableNotifications.as_view(), name='funding_disable_notifications'), + + url(r'^getpaid/', include('getpaid.urls')), + + # Includes + url(r'^o/(?P\d+)/top-bar\.(?P.+)\.html$', 'top_bar', name='funding_top_bar'), + url(r'^o/(?P\d+)/detail-bar\.(?P.+)\.html$', 'detail_bar', name='funding_detail_bar'), + url(r'^o/(?P\d+)/list-bar\.(?P.+)\.html$', 'list_bar', name='funding_list_bar'), + url(r'^o/(?P\d+)/status\.(?P.+)\.html$', 'offer_status', name='funding_status'), + url(r'^o/(?P\d+)/status-more\.(?P.+)\.html$', 'offer_status_more', name='funding_status_more'), + url(r'^o/(?P\d+)/fundings/(?P\d+)\.(?P.+)\.html$', 'offer_fundings', name='funding_fundings'), +) diff --git a/src/funding/utils.py b/src/funding/utils.py new file mode 100644 index 000000000..c16c9d93d --- /dev/null +++ b/src/funding/utils.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import re +import string +from fnpdjango.utils.text.slughifi import char_map + +# PayU chokes on non-Polish diacritics. +# Punctuation is handled correctly and escaped as needed, +# with the notable exception of backslash. +sane_in_payu_title = re.escape( + string.uppercase + + string.lowercase + + u'ąćęłńóśźżĄĆĘŁŃÓŚŹŻ' + + string.digits + + ' ' + + "".join(set(string.punctuation) - set('\\')) +) + +def replace_char(m): + char = m.group() + return char_map.get(char, '') + +def sanitize_payment_title(value): + return re.sub('[^%s]{1}' % sane_in_payu_title, replace_char, unicode(value)) diff --git a/src/funding/views.py b/src/funding/views.py new file mode 100644 index 000000000..7c9adef46 --- /dev/null +++ b/src/funding/views.py @@ -0,0 +1,228 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.core.paginator import Paginator, InvalidPage +from django.core.urlresolvers import reverse +from django.http import Http404 +from django.shortcuts import get_object_or_404, redirect, render +from django.views.decorators.csrf import csrf_exempt +from django.views.generic import TemplateView, FormView, ListView +from getpaid.models import Payment +from ssify import ssi_included +from ssify.utils import ssi_cache_control +from . import app_settings +from .forms import FundingForm +from .models import Offer, Spent, Funding + + +def mix(*streams): + substreams = [] + for stream, read_date, tag in streams: + iterstream = iter(stream) + try: + item = next(iterstream) + except StopIteration: + pass + else: + substreams.append([read_date(item), item, iterstream, read_date, tag]) + while substreams: + i, substream = max(enumerate(substreams), key=lambda x: x[1][0]) + yield substream[4], substream[1] + try: + item = next(substream[2]) + except StopIteration: + del substreams[i] + else: + substream[0:2] = [substream[3](item), item] + + +class WLFundView(TemplateView): + template_name = "funding/wlfund.html" + + def get_context_data(self): + def add_total(total, it): + for tag, e in it: + e.total = total + if tag == 'spent': + total += e.amount + else: + total -= e.wlfund + yield tag, e + + ctx = super(WLFundView, self).get_context_data() + offers = [] + + for o in Offer.past(): + if o.is_win(): + o.wlfund = o.sum() - o.target + if o.wlfund > 0: + offers.append(o) + else: + o.wlfund = o.sum() + if o.wlfund > 0: + offers.append(o) + amount = sum(o.wlfund for o in offers) - sum(o.amount for o in Spent.objects.all()) + + ctx['amount'] = amount + ctx['log'] = add_total(amount, mix( + (offers, lambda x: x.end, 'offer'), + (Spent.objects.all().select_related(), lambda x: x.timestamp, 'spent'), + )) + return ctx + + +class OfferDetailView(FormView): + form_class = FundingForm + template_name = "funding/offer_detail.html" + backend = 'getpaid.backends.payu' + + @csrf_exempt + def dispatch(self, request, slug=None): + if getattr(self, 'object', None) is None: + if slug: + self.object = get_object_or_404(Offer.public(), slug=slug) + else: + self.object = Offer.current() + if self.object is None: + raise Http404 + return super(OfferDetailView, self).dispatch(request, slug) + + def get_form(self, form_class): + if self.request.method == 'POST': + return form_class(self.object, self.request.POST) + else: + return form_class(self.object, initial={'amount': app_settings.DEFAULT_AMOUNT}) + + def get_context_data(self, *args, **kwargs): + ctx = super(OfferDetailView, self).get_context_data(*args, **kwargs) + ctx['object'] = self.object + ctx['page'] = self.request.GET.get('page', 1) + if self.object.is_current(): + ctx['funding_no_show_current'] = True + return ctx + + def form_valid(self, form): + funding = form.save() + # Skip getpaid.forms.PaymentMethodForm, go directly to the broker. + payment = Payment.create(funding, self.backend) + gateway_url_tuple = payment.get_processor()(payment).get_gateway_url(self.request) + payment.change_status('in_progress') + return redirect(gateway_url_tuple[0]) + + +class CurrentView(OfferDetailView): + @csrf_exempt + def dispatch(self, request, slug=None): + self.object = Offer.current() + if self.object is None: + return redirect(reverse('funding')) + elif slug != self.object.slug: + return redirect(reverse('funding_current', args=[self.object.slug])) + return super(CurrentView, self).dispatch(request, slug) + + +class OfferListView(ListView): + queryset = Offer.public() + + def get_context_data(self, *args, **kwargs): + ctx = super(OfferListView, self).get_context_data(*args, **kwargs) + ctx['funding_no_show_current'] = True + return ctx + + +class ThanksView(TemplateView): + template_name = "funding/thanks.html" + + def get_context_data(self, *args, **kwargs): + ctx = super(ThanksView, self).get_context_data(*args, **kwargs) + ctx['offer'] = Offer.current() + ctx['funding_no_show_current'] = True + return ctx + + +class NoThanksView(TemplateView): + template_name = "funding/no_thanks.html" + + +class DisableNotifications(TemplateView): + template_name = "funding/disable_notifications.html" + + @csrf_exempt + def dispatch(self, request): + self.object = get_object_or_404(Funding, + email=request.GET.get('email'), notify_key=request.GET.get('key')) + return super(DisableNotifications, self).dispatch(request) + + def post(self, *args, **kwargs): + self.object.disable_notifications() + return redirect(self.request.get_full_path()) + + +def offer_bar(request, pk, link=False, closeable=False, show_title=True, show_title_calling=True, add_class=""): + offer = get_object_or_404(Offer, pk=pk) + offer_sum = offer.sum() + + return render(request, "funding/includes/funding.html", { + 'offer': offer, + 'sum': offer_sum, + 'is_current': offer.is_current(), + 'is_win': offer_sum >= offer.target, + 'missing': offer.target - offer_sum, + 'percentage': 100 * offer_sum / offer.target, + 'link': link, + 'closeable': closeable, + 'show_title': show_title, + 'show_title_calling': show_title_calling, + 'add_class': add_class, + }) + + +@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) +def top_bar(request, pk): + return offer_bar(request, pk, + link=True, closeable=True, add_class="funding-top-header") + + +@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) +def list_bar(request, pk): + return offer_bar(request, pk, + link=True, show_title_calling=False) + + +@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) +def detail_bar(request, pk): + return offer_bar(request, pk, + show_title=False) + + +@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) +def offer_status(request, pk): + offer = get_object_or_404(Offer, pk=pk) + return render(request, "funding/includes/offer_status.html", { + 'offer': offer, + }) + + +@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) +def offer_status_more(request, pk): + offer = get_object_or_404(Offer, pk=pk) + return render(request, "funding/includes/offer_status_more.html", { + 'offer': offer, + }) + + +@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) +def offer_fundings(request, pk, page): + offer = get_object_or_404(Offer, pk=pk) + fundings = offer.funding_payed() + paginator = Paginator(fundings, 10, 2) + try: + page_obj = paginator.page(int(page)) + except InvalidPage: + raise Http404 + return render(request, "funding/includes/fundings.html", { + "paginator": paginator, + "page_obj": page_obj, + "fundings": page_obj.object_list, + }) diff --git a/src/funding/widgets.py b/src/funding/widgets.py new file mode 100644 index 000000000..8dc9742ce --- /dev/null +++ b/src/funding/widgets.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from decimal import Decimal +from django import forms +from django.template.loader import render_to_string + + +class PerksAmountWidget(forms.Textarea): + def perks_input_name(self, name): + return "_%s_perk" % name + + def render(self, name, value, attrs=None): + try: + value = Decimal(value) + except: + pass + perks = list(self.form_instance.offer.get_perks()) + perk_chosen = False + for perk in perks: + if perk.price == value: + perk.chosen = True + perk_chosen = True + break + + return render_to_string("funding/widgets/amount.html", { + "perks": perks, + "name": name, + "perks_input_name": self.perks_input_name(name), + "perk_chosen": perk_chosen, + "value": value, + "attrs": attrs, + }) + + def value_from_datadict(self, data, files, name): + num_str = data.get(self.perks_input_name(name)) or data[name] + return num_str.replace(',', '.') diff --git a/src/infopages/__init__.py b/src/infopages/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/infopages/admin.py b/src/infopages/admin.py new file mode 100644 index 000000000..14a06afa9 --- /dev/null +++ b/src/infopages/admin.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin + +from modeltranslation.admin import TranslationAdmin +from infopages.models import InfoPage + +class InfoPageAdmin(TranslationAdmin): + list_display = ('title', 'slug', 'main_page') + +admin.site.register(InfoPage, InfoPageAdmin) diff --git a/src/infopages/fixtures/infopages.json b/src/infopages/fixtures/infopages.json new file mode 100644 index 000000000..4608715b9 --- /dev/null +++ b/src/infopages/fixtures/infopages.json @@ -0,0 +1,268 @@ +[ + { + "pk": 2, + "model": "infopages.infopage", + "fields": { + "title_de": "\ufeffDu kannst uns helfen", + "left_column_uk": "

                    \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e

                    \r\n\r\n

                    \u041c\u0438 \u043d\u0430\u043c\u0430\u0433\u0430\u0454\u043c\u043e\u0441\u044f \u044f\u043a\u043e\u043c\u043e\u0433\u0430 \u043a\u0440\u0430\u0449\u0435 \u043f\u0456\u0434\u0433\u043e\u0442\u0443\u0432\u0430\u0442\u0438 \u0442\u0432\u043e\u0440\u0438, \u044f\u043a\u0456 \u043f\u043e\u0441\u0442\u0443\u043f\u043e\u0432\u043e \u0434\u043e\u0434\u0430\u044e\u0442\u044c\u0441\u044f \u0434\u043e \u043d\u0430\u0448\u043e\u0457 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438. \u0426\u0435 \u043c\u043e\u0436\u043b\u0438\u0432\u043e \u0442\u0456\u043b\u044c\u043a\u0438 \u0437\u0430\u0432\u0434\u044f\u043a\u0438 \u043d\u0430\u0448\u0438\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c.

                    \r\n\r\n

                    \u0417\u0430\u043f\u0440\u043e\u0448\u0443\u0454\u043c\u043e \u0443\u0441\u0456\u0445, \u0445\u0442\u043e \u0445\u043e\u0447\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0443 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0448\u043a\u0456\u043b\u044c\u043d\u043e\u0457 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438 Wolne Lektury.

                    \r\n\r\n

                    \u0412\u0441\u0456\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c \u043c\u0438 \u043f\u0440\u043e\u043f\u043e\u043d\u0443\u0454\u043c\u043e \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0438 \u0456 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u0438\u0439 \u0434\u043e\u0441\u0432\u0456\u0434 \u043e\u0431\u0440\u043e\u0431\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443: \u0437\u043c\u0456\u0441\u0442\u043e\u0432\u043d\u0435 \u0442\u0430 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f. \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438 \u043c\u043e\u0436\u0443\u0442\u044c \u043e\u0437\u043d\u0430\u0439\u043e\u043c\u0438\u0442\u0438\u0441\u044f \u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u0442\u0430 \u043c\u043e\u0436\u043b\u0438\u0432\u043e\u0441\u0442\u044f\u043c\u0438, \u043f\u043e\u0432\u2019\u044f\u0437\u0430\u043d\u0438\u043c\u0438 \u0437 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u044f\u043c\u0438.\r\n\r\n\u0421\u043f\u0456\u043b\u044c\u043d\u043e \u0437 \u043d\u0430\u043c\u0438 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438 \u043e\u0440\u0433\u0430\u043d\u0456\u0437\u0443\u044e\u0442\u044c \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0438 \u0442\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0456\u0457, \u0434\u043e\u043f\u043e\u043c\u0430\u0433\u0430\u044e\u0442\u044c \u0432 \u043f\u0456\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u0456 \u0442\u0435\u043a\u0441\u0442\u0456\u0432 \u0434\u043b\u044f \u0441\u043b\u0443\u0445\u0430\u043d\u043d\u044f (\u0442\u0430\u043a \u0437\u0432\u0430\u043d\u0438\u0445 \u0430\u0443\u0434\u0456\u043e-\u043a\u043d\u0438\u0433). \u041c\u0438 \u043f\u0456\u0434\u043f\u0438\u0441\u0443\u0454\u043c\u043e \u0437 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c\u0438 \u0443\u0433\u043e\u0434\u0438 \u0442\u0430 \u043d\u0430\u0434\u0430\u0454\u043c\u043e \u0457\u043c \u043f\u043e\u0441\u0432\u0456\u0434\u0447\u0435\u043d\u043d\u044f \u043f\u0440\u043e \u0446\u0435 \u043a\u043e\u043b\u0438 \u0456 \u044f\u043a\u0456 \u043f\u0440\u0430\u0446\u0456 \u0432\u0438\u043a\u043e\u043d\u0443\u0432\u0430\u0432 \u0434\u043b\u044f \u043d\u0430\u0448\u043e\u0433\u043e \u0444\u043e\u043d\u0434\u0443 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440. \u0422\u0440\u0435\u043d\u0456\u043d\u0433\u0438, \u0434\u043e\u0441\u0432\u0456\u0434 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u0438, \u044f\u043a\u0456 \u0446\u0435 \u0437\u0430\u0441\u0432\u0456\u0434\u0447\u0443\u044e\u0442\u044c, \u043c\u043e\u0436\u0443\u0442\u044c \u0431\u0443\u0442\u0438 \u0446\u0456\u043d\u043d\u0438\u043c\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0456 \u043f\u0456\u0434\u0432\u0438\u0449\u0435\u043d\u043d\u044f \u043a\u0432\u0430\u043b\u0456\u0444\u0456\u043a\u0430\u0446\u0456\u0439 \u0456 \u043f\u0440\u043e\u0444\u0435\u0441\u0456\u0439\u043d\u0456\u0439 \u043a\u0430\u0440'\u0454\u0440\u0456.

                    \r\n\r\n

                    \u0429\u043e \u043c\u043e\u0436\u043d\u0430 \u0440\u043e\u0431\u0438\u0442\u0438?

                    \r\n\r\n

                    \u041d\u0430\u0439\u0431\u0456\u043b\u044c\u0448\u0435 \u0440\u043e\u0431\u043e\u0442\u0438 \u043f\u0440\u0438\u0441\u0432\u044f\u0447\u0443\u0454\u0442\u044c\u0441\u044f \u043f\u0456\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044e \u0442\u0435\u043a\u0441\u0442\u0443 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u0457. \u0412 \u0442\u0435\u043a\u0441\u0442\u0456, \u044f\u043a\u0438\u0439 \u043c\u0438 \u043e\u0442\u0440\u0438\u043c\u0443\u0454\u043c\u043e \u0432\u0456\u0434 \u041d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438 \u0442\u0440\u0435\u0431\u0430 \u0432\u0438\u043f\u0440\u0430\u0432\u0438\u0442\u0438 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0456\u0447\u043d\u0456 \u0442\u0430 \u0456\u043d\u0448\u0456 \u043c\u0435\u0445\u0430\u043d\u0456\u0447\u043d\u0456 \u043f\u043e\u043c\u0438\u043b\u043a\u0438, \u0430 \u043f\u043e\u0442\u0456\u043c \u0434\u043e\u0434\u0430\u0442\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u0456 \u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0438, \u043f\u0430\u043c\u2019\u044f\u0442\u0430\u044e\u0447\u0438 \u043f\u0440\u043e \u0446\u0435, \u0449\u043e \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u043f\u043e\u0437\u0438\u0446\u0456\u044f \u0441\u043a\u0435\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u0435\u0440\u0448 \u0437\u0430 \u0432\u0441\u0435 \u0434\u043e \u0443\u0447\u043d\u0456\u0432, \u0434\u043b\u044f \u044f\u043a\u0438\u0445 \u0431\u0430\u0433\u0430\u0442\u043e \u0441\u043b\u0456\u0432 \u0442\u0430 \u0444\u0440\u0430\u0437 \u0437\u0432\u0443\u0447\u0430\u0442\u0438\u043c\u0435 \u0430\u043d\u0430\u0445\u0440\u043e\u043d\u0456\u0447\u043d\u043e. \u0414\u0430\u0432\u043d\u0456\u0448\u0456 \u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u0457 (\u0432\u0441\u0435 \u0437\u0430\u043b\u0435\u0436\u0438\u0442\u044c \u0442\u0443\u0442 \u0432\u0456\u0434 \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0430) \u043f\u0456\u0434\u0434\u0430\u044e\u0442\u044c\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u043e\u043c\u0443 \u043c\u043e\u0432\u043d\u043e\u043c\u0443 \u043e\u0441\u0443\u0447\u0430\u0441\u043d\u0435\u043d\u043d\u044e, \u043d\u0430 \u043f\u0440\u0438\u043a\u043b\u0430\u0434 \u0449\u043e\u0434\u043e \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0443 \u0447\u0438 \u0444\u043b\u0435\u043a\u0441\u0456\u0457, \u043f\u0440\u0438 \u0447\u043e\u043c\u0443 \u043c\u0438 \u0434\u0431\u0430\u0454\u043c\u043e \u043f\u0440\u043e \u0446\u0435 \u0449\u043e\u0431 \u043d\u0435 \u043f\u043e\u0440\u0443\u0448\u0443\u0432\u0430\u0442\u0438 \u0430\u0440\u0442\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0443 \u0442\u0435\u043a\u0441\u0442\u0443. \u041e\u0441\u0442\u0430\u043d\u043d\u0456\u043c \u0435\u0442\u0430\u043f\u043e\u043c \u0454 \u043f\u043e\u0448\u0443\u043a \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432 \u0442\u0430 \u0442\u0435\u043c, \u044f\u043a\u0456 \u043c\u0430\u044e\u0442\u044c \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0432 \u0433\u043b\u0438\u0431\u0438\u043d\u043d\u043e\u043c\u0443 \u043f\u0456\u0437\u043d\u0430\u043d\u043d\u0456 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0438. \u0412 \u0443\u0441\u0456\u0445 \u0446\u0438\u0445 \u043f\u0440\u0430\u0446\u044f\u0445 \u043d\u0430\u0441 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0443\u044e\u0442\u044c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438 - \u0432\u0447\u0438\u0442\u0435\u043b\u0456 \u0442\u0430 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0438 - \u044f\u043a\u0456 \u0447\u0430\u0441\u0442\u043e \u0434\u043e\u043f\u043e\u043c\u0430\u0433\u0430\u044e\u0442\u044c \u0442\u0430\u043a\u043e\u0436 \u043f\u043e\u0440\u0430\u0434\u043e\u044e \u0442\u0430 \u0437\u0430\u0443\u0432\u0430\u0436\u0435\u043d\u043d\u044f\u043c\u0438 \u043f\u0440\u0438 \u043f\u0440\u0438\u0439\u043d\u044f\u0442\u0442\u0456 \u0432\u0430\u0436\u043b\u0438\u0432\u0438\u0445 \u0440\u0456\u0448\u0435\u043d\u044c.

                    \r\n\r\n

                    \u042f\u043a \u0434\u043e \u043d\u0430\u0441 \u0437\u0433\u043e\u043b\u043e\u0441\u0438\u0442\u0438\u0441\u044f?

                    \r\n\r\n

                    \u0423\u0441\u0456\u0445 \u0437\u0430\u0446\u0456\u043a\u0430\u0432\u043b\u0435\u043d\u0438\u0445 \u043f\u0440\u043e\u0441\u0438\u043c\u043e \u0432\u0438\u0441\u043b\u0430\u0442\u0438 \u043b\u0438\u0441\u0442\u0430 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0443 fundacja@nowoczesnapolska.org.pl.

                    \r\n\r\n

                    \u0417\u0430\u043f\u0440\u043e\u0448\u0443\u0454\u043c\u043e \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0457 Wolne Lektury, \u0434\u0435 \u043c\u043e\u0436\u043d\u0430 \u0437\u043d\u0430\u0439\u0442\u0438 \u0443\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e \u043f\u0440\u043e \u0446\u0435, \u044f\u043a \u0437\u0430\u043b\u0443\u0447\u0438\u0442\u0438\u0441\u044c \u0443 \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0439\u043d\u0443 \u0440\u043e\u0431\u043e\u0442\u0443.

                    ", + "main_page": null, + "right_column_pl": "

                    Kogo szukamy?

                    \r\n\r\n

                    Redaktor\u00f3w technicznych (sk\u0142ad tekstu)

                    \r\n

                    Sk\u0142ad jest pierwszym etapem pracy nad tekstem. Za pomoc\u0105 znacznik\u00f3w j\u0119zyka WL-XML nadajemy tekstowi po\u017c\u0105dan\u0105 form\u0119 i umo\u017cliwiamy wy\u015bwietlenie go na stronie internetowej. Redakcje techniczna dokonywana jest na Platformie Redakcyjnej, kt\u00f3ra pozwala na zautomatyzowanie du\u017cej cz\u0119\u015bci pracy.

                    \r\n\r\n

                    Kto mo\u017ce zosta\u0107 redaktorem technicznym?

                    \r\n
                      \r\n
                    • Ka\u017cdy \u2013 po kr\u00f3tkim szkoleniu.
                    • \r\n
                    \r\n\r\n

                    Wi\u0119cej informacji o redakcji technicznej znajdziecie na stronie redakcji Wolnych Lektur

                    \r\n\r\n
                    \r\n\r\n

                    Redaktor\u00f3w literackich (merytorycznych)

                    \r\n

                    Redakcja literacka obejmuje korekt\u0119, uwsp\u00f3\u0142cze\u015bnienia oraz dodawanie przypis\u00f3w i motyw\u00f3w literackich. To unikalna mo\u017cliwo\u015b\u0107 zdobycia do\u015bwiadczenia w cyfrowej edycji tekst\u00f3w.

                    \r\n\r\n

                    Kto mo\u017ce zosta\u0107 redaktorem literackim?

                    \r\n
                      \r\n
                    • Osoby, kt\u00f3re maj\u0105 do\u015bwiadczenie w redakcji tekst\u00f3w literackich,
                    • \r\n
                    • Studenci i absolwenci studi\u00f3w humanistycznych, kt\u00f3rzy chc\u0105 takie do\u015bwiadczenie zdoby\u0107.
                    • \r\n
                    \r\n

                    Wi\u0119cej informacji o redakcji merytorycznej znajdziecie na stronie redakcji Wolnych Lektur

                    \r\n\r\n
                    \r\n\r\n

                    T\u0142umaczy

                    \r\n

                    Strona WolneLektury.pl jest dost\u0119pna w siedmiu j\u0119zykach obcych \u2013 angielskim, francuskim, niemieckim, hiszpa\u0144skim, litewskim, rosyjskim oraz ukrai\u0144skim. U\u017cytkownikami biblioteki jest ponad 200 tysi\u0119cy os\u00f3b z zagranicy, a ju\u017c nied\u0142ugo nasze zbiory obejm\u0105 r\u00f3wnie\u017c dzie\u0142a w j\u0119zykach obcych. Dlatego potrzebujemy na bie\u017c\u0105co t\u0142umaczy\u0107 nowe informacje pojawiaj\u0105ce si\u0119 na stronie.

                    \r\n

                    Kto mo\u017ce pom\u00f3c w t\u0142umaczeniach?

                    \r\n
                      \r\n
                    • Ka\u017cdy, kto dobrze zna co najmniej jeden z powy\u017cszych j\u0119zyk\u00f3w.
                    • \r\n
                    \r\n\r\n
                    \r\n\r\n

                    Programist\u00f3w

                    \r\n

                    Poza sam\u0105 stron\u0105 Wolnych Lektur tworzymy r\u00f3wnie\u017c:

                    \r\n
                      \r\n
                    • narz\u0119dzia redakcyjne,
                    • \r\n
                    • konwertery do r\u00f3\u017cnych format\u00f3w e-book\u00f3w,
                    • \r\n
                    • aplikacje mobile u\u0142atwiaj\u0105ce dost\u0119p do naszych zasob\u00f3w.
                    • \r\n
                    \r\n\r\n

                    U\u017cywamy takich technologii jak: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nTworzone przez nas oprogramowanie udost\u0119pniamy na wolnej licencji.

                    \r\n

                    Kto mo\u017ce pom\u00f3c w pracach programistycznych?

                    \r\n
                      \r\n
                    • Ka\u017cdy, kto umie i chcia\u0142by zdoby\u0107 punkty do karmy za udzia\u0142 w otwartym projekcie programistycznym. ;)
                    • \r\n
                    \r\n", + "right_column_lt": "

                    Labiausiai nusipeln\u0119 savanoriai

                    \r\n\r\n\t

                    Agatapaszkowska (bendradarbiauja su mumis nuo 2008 m. kovo 15 d.)

                    \r\n\r\n

                    tarp kitko pareng\u0117 \u201eW pustyni i w puszczy\u201d Sienkiewicza ; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

                    \r\n\r\n\r\n\t

                    AgnieszkaKappa (bendradarbiauja su mumis nuo 2008 m. kovo 16 d.)

                    \r\n\r\n

                    tarp kitko pad\u0117jo paruo\u0161ti literat\u016bros tem\u0173 ir motyv\u0173 s\u0105ra\u0161\u0105; parsiuo\u0161\u0117 teksto apra\u0161ymus: Sienkiewicz (Latarnik, Janko Muzykant, Quo vadis); aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

                    \r\n\r\n\r\n

                    Anerys (bendradarbiauja su mumis nuo 2007 m. liepos 5 d.)

                    \r\n\r\n

                    tarp kitko pad\u0117jo paruo\u0161ti literat\u016bros tem\u0173 ir motyv\u0173 s\u0105ra\u0161\u0105, diskusija apie literat\u016brin\u0119s r\u016b\u0161is, parsiuo\u0161\u0117 \u0161iu tekstu apra\u0161ymus; BogurodzicA, \u201eFraszki\u201d ir \u201eTrenyTreny\u201d Kochanowskiego; eil\u0117ra\u0161\u010diai: S\u0142owacki (Gr\u00f3b Agamemnona), \u201e\u015awi\u0119toszek\u201d Molier, ar poezija\u00a0\u00a0 Kasprowicz (himnas\u00a0\u00a0 \u201eDies Irae\u201d);aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d:\r\n http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

                    \r\n\r\n\r\n\t

                    EmiliaZdankiewicz (bendradarbiauja su mumis nuo 2008 m. kovo 17 d.

                    \r\n\r\n

                    tarp kitko literat\u016brinai motyvai, diskusijos, apra\u0161ymai: S\u0142owacki, Kordian; Konopnicka, Nasza szkapa; Mickiewicz, Dziady cz. III; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

                    \r\n\r\n\r\n\t

                    Ewa_Serafin (bendradarbiauja su mumis nuo 2008 m. kovo 15 d.)

                    \r\n\r\n

                    tarp kitko pad\u0117jo paruo\u0161ti literat\u016bros tem\u0173 ir motyv\u0173 s\u0105ra\u0161\u0105, parsiuo\u0161\u0117 \u0161iu poeti\u0161ku tekstu apra\u0161ymus: Kasprowicz (\u201eZ wichr\u00f3w i hal\u201d, \u201eNad przepa\u015bciami\u201d, \u201eW ciemno\u015bci schodzi moja dusza\u201d oraz \u201eNad Niemnem\u201d Orzeszkowej; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafin

                    \r\n\r\n\r\n \t

                    Hanna_Golab (bendradarbiauja su mumis nuo 2008 m. kovo 15 d.)

                    \r\n\r\n

                    apra\u0161\u0117:\u201eKr\u00f3la Edypa\u201d Sofoklesa ir \u201eDusio\u0142k\u201d Le\u015bmian; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

                    \r\n\r\n\r\n\t

                    Ingene (bendradarbiauja su mumis nuo 2008 m. liepos 16 d.)

                    \r\n\r\n

                    tarp kitko apra\u0161\u0117: \u201eSi\u0142aczka\u201d \u017beromski, \u201eQuo vadis\u201d Sienkiewicz ir \u201eTreny\u201d Kochanowski; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene

                    \r\n \r\n\t

                    Jmyszkowska (bendradarbiauja su mumis nuo 2008 m. kovo 26 d.)

                    \r\n\r\n

                    tarp kitko apra\u0161\u0117 \u201eGiaura\u201d Byron ir \u201eQuo vadis\u201d Sienkiewicz; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska

                    \r\n\r\n\r\n

                    Marysiabailey (bendradarbiauja su mumis nuo 2007 m. spalio 1 d.)

                    \r\n\r\n

                    tarp kitko pad\u0117jo paruo\u0161ti literat\u016bros tem\u0173 ir motyv\u0173 s\u0105ra\u0161\u0105; apra\u0161\u0117 \u201eCh\u0142opi\u201d Reymont, \u201eLalka\u201d Prus, \u201eNie-Bosk\u0105 komedia\u201d Krasi\u0144skie, \u201eBajki\u201d ir \u201eSatyry\u201d Krasicki, \u201eAntygona\u201d Sofokles ir k\u016brinius: Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman, Kasprowicz; zob. ;aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey; parose ir ved\u0117 apmokymus savanoriams 2008 m. kovo 15 d.; u\u017esiimin\u0117jo proofreading, o dabartiniu metu vadovauja darbams susijusiems su audio knyg\u0173 ruo\u0161imu.

                    \r\n\r\n\r\n

                    Olga_Wojtczak (bendradarbiauja su mumis nuo 2008 m. spalio 21 d.)

                    \r\n\r\n

                    tarp kitko apra\u0161e roman\u0105 Sienkiewicz (Trilogija), Reymont, \u017beromski, dramos Shakespear; ;aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak

                    \r\n\r\n\r\n

                    Renataml (bendradarbiauja su mumis nuo 2007 m. bir\u017eelio 30 d.)

                    \r\n\r\n

                    pad\u0117jo parsiuo\u0161ti diskusij\u0105 apie motyv\u0173 s\u0105ra\u0161\u0105, patar\u0117 mums, nes tai patyrusi mokytoja, \u201eLalk\u0119\u201d Prusa, \u201eBalladyn\u0119\u201d S\u0142owackiego, \u201eSi\u0142aczk\u0119\u201d \u017beromskiego.\r\n\r\n http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

                    \r\n", + "left_column_lt": "

                    Savanori\u0161ka veikla

                    \r\n\r\n

                    D\u0117ka savanori\u0173 k\u016brini\u0173 apra\u0161ymai, kurie yra \u012fjungiami \u012f m\u016bs\u0173 bibliotek\u0105 yra kiekvien\u0105 kart\u0105 kruop\u0161\u010diai paruo\u0161iami.

                    \r\n \r\n \r\n

                    Kvie\u010diame visus, kurie nori kartu su mumis kurti mokykline internetine bibliotek\u0105 Laisvoji Literat\u016bra.

                    \r\n \r\n

                    Visiem savanoriams teikiame apmokym\u0105 ir praktik\u0105 suri\u0161ta su teksto editavimu: techninis ir esminis teksto redagavimas. \r\n Savanoriai gali susipa\u017einti su problemom suri\u0161tomis su teksto platinimu internete, bet ir su galimybe juos i\u0161ri\u0161ti.\r\n Savanoriai padeda mums organizuoti apmokymus ir konferencijas, taip pat padeda paruo\u0161ti knyg\u0173 garso \u012fra\u0161us (taip vadinamos: audio knygos). \r\n Kiekvienam savanoriui kuris nori parvirtimo bei paliudijimo, kad dirbo (ir k\u0105 veik\u0117) m\u016bs\u0173 fonde, suteikiame tokia galimyb\u0119.\r\n Apmokymai, praktika ir paliudijimas gali prisid\u0117ti prie darbo kvalifikacij\u0173 pak\u0117limo.

                    \r\n\r\n

                    K\u0105 dar galima padaryti?

                    \r\n \r\n

                    Daug darbo yra ruo\u0161iant mokyklin\u0119 literat\u016br\u0105 leidimui. Perdirbti reikia tekst\u0105, kuri gauname i\u0161 Lenkijos Nacionalines\r\n Bibliotekos reikia pa\u0161alinti korekt\u016bros ir kitas klaidas, o veliau sukurti i\u0161na\u0161as, vis\u0105 laik\u0105 reikia tur\u0117ti omeny kad \r\n m\u016bs\u0173 svetain\u0119 aplanko da\u017eniausiai jaunimas ir visu pirma jiems tekstas turi b\u016bti \u012fdomus. \r\n Ankstesnieji knyg\u0173 ledinei turi pereiti kalbos modernizacij\u0105 (tai diktuoja autori\u0173 teis\u0117s) pvz.: ra\u0161ybos ar kaitybos kartu \r\n reikia stengtis kad nepa\u017eeisti menini\u0173 teksto savybi\u0173. Paskutinis etapas tai ie\u0161kojimas literat\u016brini\u0173 motyv\u0173 ir tem\u0173\r\n kurie per\u017ei\u016br\u0117s k\u016briny perd\u0117m. Visuose \u0161iuose darbuose mare mus savanoriai - mokytojai ir studentai - da\u017enai pataria atkreipia d\u0117mesy, padeda nuspr\u0119sti.

                    \r\n \r\n

                    Kaip prie m\u016bs\u0173 prisijungti?

                    \r\n \r\n

                    Susidom\u0117jusius kvie\u010diame ra\u0161yti: e-pa\u0161tas fundacja@nowoczesnapolska.org.pl.

                    \r\n\r\n

                    Kvie\u010diame tai pat aplankyti redakcijos Laisvoji Literat\u016bra tinklap\u012f, \r\n kur galim surasti visas reikalingas \u017einias apie tai kaip prisijungi \u012f redakcini darb\u0105.

                    ", + "title_fr": "Vous pouvez nous aider", + "right_column_ru": "

                    \u0421\u0430\u043c\u044b\u0435 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u0435 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b

                    \r\n\r\n\t

                    Agatapaszkowska (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 15 \u043c\u0430\u0440\u0442\u0430 2008)

                    \r\n\r\n

                    \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u201e\u0412 \u043f\u0443\u0441\u0442\u044b\u043d\u0435 \u0438 \u043f\u0443\u0449\u0435\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 ; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

                    \r\n\r\n\r\n\t

                    AgnieszkaKappa (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 16 \u043c\u0430\u0440\u0442\u0430 2008)

                    \r\n\r\n

                    \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c; \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 (\"\u041c\u0430\u044f\u0447\u043d\u0438\u043a\", \"\u042f\u043d\u043a\u043e-\u043c\u0443\u0437\u044b\u043a\u0430\u043d\u0442\", \"\u041a\u0430\u043c\u043e \u0433\u0440\u044f\u0434\u0435\u0448\u0438\"); \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

                    \r\n\r\n\r\n

                    Anerys (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 5 \u0438\u044e\u043b\u044f 2007)

                    \r\n\r\n

                    \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u0436\u0430\u043d\u0440\u043e\u0432, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u0411\u043e\u0433\u043e\u0440\u043e\u0434\u0438\u0446\u0443, \u201e\u042d\u043f\u0438\u0433\u0440\u0430\u043c\u043c\u044b\u201d \u0438 \u201e\u0422\u0440\u0435\u043d\u044b\u201d \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e; \u0441\u0442\u0438\u0445\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f \u0421\u043b\u043e\u0432\u0430\u0446\u043a\u043e\u0433\u043e (Gr\u00f3b Agamemnona), \u201e\u041e\u0431\u043c\u0430\u043d\u0449\u0438\u043a\u0430\u201d \u041c\u043e\u043b\u044c\u0435\u0440\u0430, \u043f\u043e\u044d\u0437\u0438\u044e \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0438\u0447\u0430 (\u0432 \u0442.\u0447. \u0433\u0438\u043c\u043d \u201eDies Irae\u201d) \u0438 \u0434\u0440.; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

                    \r\n\r\n\r\n\t

                    EmiliaZdankiewicz (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 17 \u043c\u0430\u0440\u0442\u0430 2008)

                    \r\n\r\n

                    \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0435 \u043c\u043e\u0442\u0438\u0432\u044b: \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u044f \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435, \u0421\u043b\u043e\u0432\u0430\u0446\u043a\u0438\u0439 \"\u041a\u043e\u0440\u0434\u0438\u0430\u043d\"; \u041a\u043e\u043d\u043e\u043f\u043d\u0438\u0446\u043a\u0430\u044f \"Nasza szkapa\"; \u041c\u0438\u0446\u0435\u043a\u0432\u0438\u0447 \"\u0414\u0437\u044f\u0434\u044b \u0447. III\" \u0438 \u0434\u0440.; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

                    \r\n\r\n\r\n\t

                    Ewa_Serafin (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 15 \u043c\u0430\u0440\u0442\u0430 2008)

                    \r\n\r\n

                    \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u043f\u043e\u044d\u0437\u0438\u044e \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0438\u0447\u0430 (\u201eZ wichr\u00f3w i hal\u201d, \u201eNad przepa\u015bciami\u201d, \u201eW ciemno\u015bci schodzi moja dusza\u201d), \u0430 \u0442\u0430\u043a\u0436\u0435 \u201eNad Niemnem\u201d \u041e\u0436\u0435\u0448\u043a\u043e; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafin

                    \r\n\r\n\r\n \t

                    Hanna_Golab (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 15 \u043c\u0430\u0440\u0442\u0430 2008)

                    \r\n\r\n

                    \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u201e\u0426\u0430\u0440\u044f \u042d\u0434\u0438\u043f\u0430\u201d \u0421\u043e\u0444\u043e\u043a\u043b\u0430, \u0432 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u201eDusio\u0142ek\u201d \u041b\u0435\u0441\u044c\u043c\u044f\u043d\u0430; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

                    \r\n\r\n\r\n\t

                    Ingene (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 16 \u0438\u044e\u043b\u044f 2008)

                    \r\n\r\n

                    \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u201eSi\u0142aczka\u201d \u0416\u0435\u0440\u043e\u043c\u0441\u043a\u043e\u0433\u043e, \u201e\u041a\u0430\u043c\u043e \u0433\u0440\u044f\u0434\u0435\u0448\u0438\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430, \u201e\u0422\u0440\u0435\u043d\u044b\u201d \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0438 \u0434\u0440.; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene

                    \r\n \r\n\t

                    Jmyszkowska (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 26 \u043c\u0430\u0440\u0442\u0430 2008)

                    \r\n\r\n

                    \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u201e\u0413\u044f\u0443\u0440\u0430\u201d \u0411\u0430\u0439\u0440\u043e\u043d\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u201e\u041a\u0430\u043c\u043e \u0433\u0440\u044f\u0434\u0435\u0448\u0438\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska

                    \r\n\r\n\r\n

                    Marysiabailey (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 1 \u043e\u043a\u0442\u0430\u0431\u0440\u044f 2007)

                    \r\n\r\n

                    \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0438\u0445 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f; \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0430 \u201e\u041c\u0443\u0436\u0438\u043a\u043e\u0432\u201d \u0420\u0435\u0439\u043c\u043e\u043d\u0442\u0430, \u201e\u041a\u0443\u043a\u043b\u0443\u201d \u041f\u0440\u0443\u0441\u0430, \u201e\u041d\u0435\u0431\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043a\u043e\u043c\u0435\u0434\u0438\u044e\u201d \u041a\u0440\u0430\u0441\u0438\u043d\u044c\u0441\u043a\u043e\u0433\u043e, \u201eBajki\u201d \u0438 \u201eSatyry\u201d \u041a\u0440\u0430\u0441\u0438\u0446\u043a\u043e\u0433\u043e, \u201e\u0410\u043d\u0442\u0438\u0433\u043e\u043d\u0443\u201d \u0421\u043e\u0444\u043e\u043a\u043b\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e, \u041c\u043e\u0440\u0448\u0442\u0438\u043d\u0430, \u041c\u0438\u0446\u043a\u0435\u0432\u0438\u0447\u0430, \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0438\u0447\u0430, \u0413\u0435\u0442\u0435, \u041e\u043f\u043f\u043c\u0430\u043d\u0430; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey; \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0430 \u0438 \u0432\u0435\u043b\u0430 \u0443\u0447\u0435\u0431\u0443 \u0434\u043b\u044f \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u043e\u0432 15 \u043c\u0430\u0440\u0442\u0430 2008; \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0430\u0441\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0443\u0440\u043e\u0439, \u0441\u0435\u0439\u0447\u0430\u0441 \u0436\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043d\u0430\u0434 \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433\u0430\u043c\u0438.

                    \r\n\r\n\r\n

                    Olga_Wojtczak (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 21 \u043e\u043a\u0442\u0430\u0431\u0440\u044f 2008)

                    \r\n\r\n

                    \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0430 \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u043e\u043c\u0430\u043d\u044b \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 (\"\u0422\u0440\u0438\u043b\u043e\u0433\u0438\u044f\"), \u0420\u0435\u0439\u043c\u043e\u043d\u0442\u0430, \u0416\u0435\u0440\u043e\u043c\u0441\u043a\u043e\u0433\u043e, \u0434\u0440\u0430\u043c\u044b \u0428\u0435\u043a\u0441\u043f\u0438\u0440\u0430; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak

                    \r\n\r\n\r\n

                    Renataml (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 30 \u0438\u044e\u043d\u044f 2007)

                    \r\n\r\n

                    \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 \u043d\u0430\u0441\u0447\u0435\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u043c\u043e\u0442\u0438\u0432\u043e\u0432; \u043a\u0430\u043a \u043e\u043f\u044b\u0442\u043d\u044b\u0439 \u0443\u0447\u0438\u0442\u0435\u043b\u044c, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0430 \u043d\u0430\u0441 \u0441\u043e\u0432\u0435\u0442\u0430\u043c\u0438, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u201e\u041a\u0443\u043a\u043b\u0443\u201d \u041f\u0440\u0443\u0441\u0430, \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u201eBalladyn\u0430\u201d \u0421\u043b\u043e\u0432\u0430\u0446\u043a\u043e\u0433\u043e, \u201eSi\u0142aczk\u0119\u201d \u0416\u0435\u0440\u043e\u043c\u0441\u043a\u043e\u0433\u043e.\r\n\r\n http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

                    ", + "left_column_fr": "

                    B\u00e9n\u00e9volat

                    \r\n\r\n

                    Nous essayons de r\u00e9diger les oeuvres ajout\u00e9es successivement \u00e0 notre biblioth\u00e8que le mieux possible. Ce n'est possible que gr\u00e2ce \u00e0 nos b\u00e9n\u00e9voles.

                    \r\n\r\n \r\n

                    Nous invitons tous ceux qui veulent contribuer \u00e0 la cr\u00e9ation de la biblioth\u00e8que en ligne Lectures libres \u00e0 coop\u00e9rer avec nous.

                    \r\n \r\n

                    Tous les b\u00e9n\u00e9voles peuvent profiter de l'apprentissage et gagner de la pratique en \u00e9dition du texte: r\u00e9daction technique et du contenu. Les b\u00e9n\u00e9voles ont la possibilit\u00e9 de d\u00e9couvrir les probl\u00e8mes, mais aussi les possibilit\u00e9s li\u00e9es avec les publications en ligne. Ils co-organisent des entra\u00eenements et des conf\u00e9rences, aident \u00e0 pr\u00e9parer des versions des textes \u00e0 \u00e9couter (livres audio). Les b\u00e9n\u00e9voles obtiennent un contrat et un certificat pr\u00e9cisant quand et en quelle qualit\u00e9 ils ont aid\u00e9 notre fondation. Des entra\u00eenements, la pratique de l'\u00e9dition et les c\u00e9rtificats qui les confirment peuvent vous aider \u00e0 d\u00e9montrer vos comp\u00e9tences et peuvent \u00eatre tr\u00e8s precieux pour votre d\u00e9veloppement professionnel.

                    \r\n\r\n \r\n

                    Qu'est-ce qu'il y a \u00e0 faire?

                    \r\n \r\n

                    Le plus de travail est consacr\u00e9 \u00e0 pr\u00e9parer le texte pour la publication. Dans le texte qu'on re\u00e7oit de la Biblioth\u00e8que nationale il faut corriger les fautes de frappe ou autres erreurs m\u00e9caniques, et puis ajouter des annotations tout en sachant que norte offre est cibl\u00e9e aux \u00e9l\u00e8ves, pour lesquels beaucoup des mots sembleront anachroniques. Dans les \u00e9ditions plus anciennes (tout en vue du droit d'auteur) on introduit des modernisations de la langue par exemple en ce qui concerne l'orthographe ou flexion, tout en prenant soin \u00e0 ne pas d\u00e9former la sp\u00e9cificit\u00e9 artistique du texte. Derni\u00e8re \u00e9tape c'est la recherche des motifs et th\u00e8mes litt\u00e9raires, pour aider \u00e0 conna\u00eetre la litt\u00e9rature d'une fa\u00e7on r\u00e9element profonde. Dans tous ces travaux nous sommes aid\u00e9s par les b\u00e9n\u00e9voles - professeurs et \u00e9tudiants - dont les conseils et commentaires nous aident fr\u00e9quemment \u00e0 prendre des d\u00e9cisions importantes.

                    \r\n \r\n

                    Comment nous contacter?

                    \r\n \r\n

                    Toutes les personnes int\u00e9ress\u00e9es sont invit\u00e9es \u00e0 envoyer un message \u00e0 l'adresse fundacja@nowoczesnapolska.org.pl.

                    \r\n\r\n

                    Vous pouvez aussi visiter le site de la r\u00e9daction Lectures Libres, o\u00f9 on peut trouver toutes les informations n\u00e9cessaires, expliquant comment se joindre \u00e0 nos travaux de r\u00e9daction.

                    ", + "title": "You can help us", + "title_lt": "Gali mums padeti", + "right_column": "

                    The most noteworthy volunteers

                    \r\n\r\n\t\r\n\r\n

                    AgataPaszkowska (contributes to the website since March 15, 2008)

                    \r\n\r\n

                    Among the others, she worked on Henryk Sienkiewicz's \"In Desert nad Wilderness\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

                    \r\n\r\n\r\n\t\r\n\r\n\r\n\r\n

                    AgnieszkaKappa (contributes to the website since March 16, 2008)

                    \r\n\r\n

                    Among the others, she participated in creating the booklist and descritpion of the usage of the motifs and themes; worked on Henryk Sienkiewicz's works (\"The Lighthouse Keeper\", \"Janko Muzykant\", \"Quo vadis\"); cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

                    \r\n\r\n\r\n \r\n\r\n\r\n\r\n

                    Anerys (contributes to the website since July 5, 2007)

                    \r\n\r\n

                    Among the others, she took part in creating the list of literary motifs and themes, and dicussion on the literary genres, she worked on Bogurodzica, Jan Kochanowski's \"Fraszki\" and \"Laments\"; Juliusz S\u0142owacki's poems (\"Gr\u00f3b Agamemnona\"), Moliere's \"Tartuffe\" and Jan Kasprowicz's poems (together with \"Dies Irae\" hymn); cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

                    \r\n\r\n\r\n\r\n\r\n\r\n\r\n

                    EmiliaZdankiewicz (contributes to the website since March 17, 2008)

                    \r\n\r\n

                    Among the others: literary motifs, discussion and descriptions; Juliusz S\u0142owacki's \"Kordian\"; Maria Konopnicka's \"Nasza Szkapa\"; Adam Mickiewicz's \"Dziady, part III); cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

                    \r\n\r\n\r\n\r\n

                    Ewa_Serafin (contributes to the website since March 15, 2008)

                    \r\n\r\n

                    Among the others, she participated in creating list and usage description of literary motifsand themes; she worked on Jan Kasprowicz poems (\"Z wichr\u00f3w i hal\", \"Nad przepa\u015bciami\", \"W ciemno\u015bci schodzi moja dusza\") and Eliza Orzeszkowa's \"On the Niemen\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafin

                    \r\n\r\n\r\n \r\n\r\n\r\n\r\n

                    Hanna_Golab (contributes to the website since March 15, 2008)

                    \r\n\r\n

                    She worked on Sophocles' \"Oedipus the King\" and Boles\u0142aw Le\u015bmian's \"Dusio\u0142ek\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

                    \r\n\r\n\r\n\r\n

                    Ingene (contributes to the website since July 16, 2008)

                    \r\n\r\n

                    Among the others, she worked on Stefan \u017beromski's \"Si\u0142aczka\", Henryk Sienkiewicz's \"Quo vadis\" and Jan Kochanowski's \"Laments\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene

                    \r\n \r\n\r\n\r\n\r\n

                    Jmyszkowska (contributes to the website since March 26, 2008)

                    Among the others, she worked on Byron's \"Giaour\" and Henryk Sienkiewicz's \"Quo vadis\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska

                    \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n

                    Marysiabailey (contributes to the website since October 1, 2007)

                    \r\n\r\n

                    Among the others, she took part in creating the list of literary themes and motifs and description of usage of those bra\u0142a udzia\u0142; worked on W\u0142adys\u0142aw Reymont's \"Ch\u0142opi\", Boles\u0142aw Prus' \"The Doll\", Zygmunt Krasi\u0144ski's \"Nie-boska komedia\", Ignacy Krasicki's \"Fables\" and \"Satires\", Sophocles' \"Antigone\" and poems of Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Geothe and Oppman; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey; Furthermore, she prepared and carried on the training for volunteers and took care of proofreading. Currently she's managing the works on audiobooks.

                    \r\n\r\n\r\n \r\n\r\n\r\n\r\n

                    Olga_Wojtczak (contributes to the website since October 21, 2008)

                    \r\n\r\n

                    Among the others, she worked on Henryk Sienkiewicz's novels (The Trilogy), the works of W\u0142adys\u0142aw Reymont and Stefan \u017beromski, as well as Shakespeare's dramas;cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak

                    \r\n\r\n\r\n \r\n\r\n\r\n\r\n

                    Renataml (contributes to the website since June 30, 2007)

                    \r\n\r\n

                    She took part in the discussion on list of motifs, as a experienced teacher she supported us with pieces of advice; edited Boles\u0142aw Prus' \"The Doll\", Juliusz S\u0142owacki's \"Balladyna\", Stefan \u017beromski's \"Si\u0142aczka\". http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

                    ", + "right_column_es": "

                    Los voluntarios a los que merecemos mucho

                    \r\n\r\n\r\n\r\n\t

                    Agatapaszkowska (trabaja con nosotros desde el 15 de marzo 2008)

                    \r\n\r\n\r\n\r\n

                    edit\u00f3, entre otros, \u201cW pustynii i w puszczy\u201d de Sienkiewicz ; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

                    \r\n\r\n\r\n\r\n\r\n\r\n\t

                    AgnieszkaKappa (trabaja con nosotros desde el 16 de marzo 2008)

                    \r\n\r\n\r\n\r\n

                    particip\u00f3 en la creaci\u00f3n de la lista y la descripci\u00f3n del uso de los motivos y temas literarios, edit\u00f3 los textos de Sienkiewicz (\u201cFarero\u201d, \u201cJanko Muzykant\u201d, \u201cQuo vadis\u201d); ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

                    \r\n\r\n\r\n\r\n\r\n\r\n

                    Anerys (trabaja con nosotros desde el 5 de julio 2007)

                    \r\n\r\n\r\n\r\n

                    particip\u00f3 en la creaci\u00f3nn de la lista de los motivos y temas literarios y la debate sobre los g\u00e9neros literarios, edit\u00f3 Bogurodzica, \u201cFraszki\u201d y \u201cTreny\u201d de Kochanowski, poemas de S\u0142owacki (\u201cLa tumba de Agamemnon\u201d), \u201cTartufo\u201d de Moliere y los poemas de Kasprowicz (el himno \u201cDies Irae\u201d); ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

                    \r\n\r\n\r\n\r\n\r\n\r\n\t

                    EmiliaZdankiewicz (trabaja con nosotros desde el 17 de marzo 2008)

                    \r\n\r\n\r\n\r\n

                    edit\u00f3 y discut\u00f3 sobre los motivos literarios, \u201cKordian\u201d de S\u0142owacki, \u201cNasza Szkapa\u201d de Konopnicka,\u201dDziady\u201d parte III de Mickiewicz; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

                    \r\n\r\n\r\n\r\n\r\n\r\n\t

                    Ewa_Serafin (trabaja con nosotros desde el 15 de marzo 2008)

                    \r\n\r\n\r\n\r\n

                    particip\u00f3 en la creaci\u00f3n de la lista y la descripci\u00f3n del uso de los motivos y temas literarios, edit\u00f3 los poemas de Kasprowicz (\u201cZ wichr\u00f3w i hal\u201d, \u201cNad przepa\u015bciami\u201d, \u201cW ciemno\u015bci schodzi moja dusza\u201d) y \u201cNad Niemnem\u201d de Orzeszkowa; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafin

                    \r\n\r\n\r\n\r\n\r\n\r\n \t

                    Hanna_Golab (trabaja con nosotros desde el 15 de marzo 2008)

                    \r\n\r\n\r\n\r\n

                    edit\u00f3 \u201cEdipo Rey\u201d de S\u00f3focles y \u201cDusio\u0142ek\u201d de Le\u015bmian; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

                    \r\n\r\n\r\n\r\n\r\n\r\n\t

                    Ingene (trabaja con nosotros desde el 16 de julio 2008)

                    \r\n\r\n\r\n\r\n

                    edit\u00f3 \u201eSi\u0142aczka\u201dde \u017beromski, \u201eQuo vadis\u201d de Sienkiewicz y \u201eTreny\u201d de Kochanowski; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene

                    \r\n\r\n \r\n\r\n\t

                    Jmyszkowska (trabaja con nosotros desde el 26 de marzo 2008)

                    \r\n\r\n\r\n\r\n

                    edit\u00f3 \u201cGiaur\u201d de Byron y \u201cQuo vadis\u201d de Sienkiewicz; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska

                    \r\n\r\n\r\n\r\n\r\n\r\n

                    Marysiabailey (trabaja con nosotros desde el 1 de octubre 2007)

                    \r\n\r\n\r\n\r\n

                    partici\u00f3 en la creaci\u00f3n de la lista de motivos y temas literarios y la descripci\u00f3n de su uso, edit\u00f3 \u201cLos campesinos\u201d de Reymont, \u201cLa mu\u00f1eca\u201d de Prus, \u201cNie-boska komedia\u201d de Krasi\u0144ski, \u201cFabulas\u201d y \u201cS\u00e1tiras\u201d de Krasicki, \u201cAnt\u00edgona\u201d de S\u00f3focles y las obras de Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey; adem\u00e1s prepar\u00f3 y condujo el curso para voluntarios el 15 de marzo 2008; se ocupaba de proofreading y actualmente coordina los trabajos sobre los audiolibros.

                    \r\n\r\n\r\n\r\n\r\n\r\n

                    Olga_Wojtczak (trabaja con nosotros desde el 21 de octubre 2008)

                    \r\n\r\n\r\n\r\n

                    edit\u00f3 las novelas de Sienkiewicz (\u201cLa Trilogia\u201d), Reymont, \u017beromski, las dramas de Shakespeare; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak

                    \r\n\r\n\r\n\r\n\r\n\r\n

                    Renataml (trabaja con nosotros desde el 30 de junio 2007)

                    \r\n\r\n\r\n\r\n

                    particip\u00f3 en la debate sobre la lista de motivos literarios, nos ayud\u00f3 con sus consejos de profesora con experiencia, edit\u00f3 \u201cLa mu\u00f1eca\u201d de Prus, \u201cBalladyna\u201d de S\u0142owacki, \u201cSi\u0142aczka\u201d de \u017beromski. http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

                    ", + "right_column_en": "

                    The most noteworthy volunteers

                    \r\n\r\n\t\r\n\r\n

                    AgataPaszkowska (contributes to the website since March 15, 2008)

                    \r\n\r\n

                    Among the others, she worked on Henryk Sienkiewicz's \"In Desert nad Wilderness\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

                    \r\n\r\n\r\n\t\r\n\r\n\r\n\r\n

                    AgnieszkaKappa (contributes to the website since March 16, 2008)

                    \r\n\r\n

                    Among the others, she participated in creating the booklist and descritpion of the usage of the motifs and themes; worked on Henryk Sienkiewicz's works (\"The Lighthouse Keeper\", \"Janko Muzykant\", \"Quo vadis\"); cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

                    \r\n\r\n\r\n \r\n\r\n\r\n\r\n

                    Anerys (contributes to the website since July 5, 2007)

                    \r\n\r\n

                    Among the others, she took part in creating the list of literary motifs and themes, and dicussion on the literary genres, she worked on Bogurodzica, Jan Kochanowski's \"Fraszki\" and \"Laments\"; Juliusz S\u0142owacki's poems (\"Gr\u00f3b Agamemnona\"), Moliere's \"Tartuffe\" and Jan Kasprowicz's poems (together with \"Dies Irae\" hymn); cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

                    \r\n\r\n\r\n\r\n\r\n\r\n\r\n

                    EmiliaZdankiewicz (contributes to the website since March 17, 2008)

                    \r\n\r\n

                    Among the others: literary motifs, discussion and descriptions; Juliusz S\u0142owacki's \"Kordian\"; Maria Konopnicka's \"Nasza Szkapa\"; Adam Mickiewicz's \"Dziady, part III); cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

                    \r\n\r\n\r\n\r\n

                    Ewa_Serafin (contributes to the website since March 15, 2008)

                    \r\n\r\n

                    Among the others, she participated in creating list and usage description of literary motifsand themes; she worked on Jan Kasprowicz poems (\"Z wichr\u00f3w i hal\", \"Nad przepa\u015bciami\", \"W ciemno\u015bci schodzi moja dusza\") and Eliza Orzeszkowa's \"On the Niemen\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafin

                    \r\n\r\n\r\n \r\n\r\n\r\n\r\n

                    Hanna_Golab (contributes to the website since March 15, 2008)

                    \r\n\r\n

                    She worked on Sophocles' \"Oedipus the King\" and Boles\u0142aw Le\u015bmian's \"Dusio\u0142ek\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

                    \r\n\r\n\r\n\r\n

                    Ingene (contributes to the website since July 16, 2008)

                    \r\n\r\n

                    Among the others, she worked on Stefan \u017beromski's \"Si\u0142aczka\", Henryk Sienkiewicz's \"Quo vadis\" and Jan Kochanowski's \"Laments\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene

                    \r\n \r\n\r\n\r\n\r\n

                    Jmyszkowska (contributes to the website since March 26, 2008)

                    Among the others, she worked on Byron's \"Giaour\" and Henryk Sienkiewicz's \"Quo vadis\"; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska

                    \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n

                    Marysiabailey (contributes to the website since October 1, 2007)

                    \r\n\r\n

                    Among the others, she took part in creating the list of literary themes and motifs and description of usage of those bra\u0142a udzia\u0142; worked on W\u0142adys\u0142aw Reymont's \"Ch\u0142opi\", Boles\u0142aw Prus' \"The Doll\", Zygmunt Krasi\u0144ski's \"Nie-boska komedia\", Ignacy Krasicki's \"Fables\" and \"Satires\", Sophocles' \"Antigone\" and poems of Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Geothe and Oppman; cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey; Furthermore, she prepared and carried on the training for volunteers and took care of proofreading. Currently she's managing the works on audiobooks.

                    \r\n\r\n\r\n \r\n\r\n\r\n\r\n

                    Olga_Wojtczak (contributes to the website since October 21, 2008)

                    \r\n\r\n

                    Among the others, she worked on Henryk Sienkiewicz's novels (The Trilogy), the works of W\u0142adys\u0142aw Reymont and Stefan \u017beromski, as well as Shakespeare's dramas;cf. \"User's contribution\" on our website: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak

                    \r\n\r\n\r\n \r\n\r\n\r\n\r\n

                    Renataml (contributes to the website since June 30, 2007)

                    \r\n\r\n

                    She took part in the discussion on list of motifs, as a experienced teacher she supported us with pieces of advice; edited Boles\u0142aw Prus' \"The Doll\", Juliusz S\u0142owacki's \"Balladyna\", Stefan \u017beromski's \"Si\u0142aczka\". http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

                    ", + "left_column_de": "

                    Volontariat

                    \r\n\r\n

                    Wir sind stets bem\u00fcht, unseren Bibliothekbestand st\u00e4ndig um neue Werke zu erweitern. Dies ist nur \r\n dank der Hilfe unserer Volont\u00e4re m\u00f6glich.

                    \r\n\r\n

                    Wir laden herzlich alle Menschen ein, die sich an der Mitgestaltung unserer Internet-Schulbibliothek beteiligen wollen.

                    \r\n \r\n \r\n \r\n

                    Allen Volont\u00e4ren bieten wir Schulungen und Praktikum im Bereich der Textverarbeitung an: \r\n technische und sachliche Redaktion. Volont\u00e4re k\u00f6nnen mehr \u00fcber Probleme und M\u00f6glichkeiten erfahren, \r\n die mit der Ver\u00f6ffentlichung von Internetpublikationen verbunden sind. Unsere Volont\u00e4re beteiligen \r\n sich zudem an der Organisation von Schulungen und Konferenzen, helfen bei der Vorbereitung \r\n von H\u00f6rtexten (sog. Audiobooks). Wir stellen Vertr\u00e4ge und Bescheinigungen unseren Volont\u00e4ren \r\n bez\u00fcglich der Art der T\u00e4tigkeit und deren Zeitrahmen aus. Schulungen, Verlagspraktikum sowie \r\n w\u00e4hrend des Volontariats erworbene Erfahrungen und Kompetenzen k\u00f6nnen ganz gewiss zum beruflichen Aufstieg verhelfen.

                    \r\n \r\n \r\n

                    Was zu tun ist?

                    \r\n \r\n

                    Der Gro\u00dfteil der Arbeit liegt in der Vorbereitung der Lekt\u00fcren zur Ver\u00f6ffentlichung. Die Texte, die wir \r\n von der Nationalbibliothek bekommen, m\u00fcssen auf Tipp- und andere mechanische Fehler \u00fcberpr\u00fcft werden. \r\n Die Anmerkungen m\u00fcssen in den Text eingef\u00fcgt werden. Es sei zu bedenken, dass unsere Zielgruppe Sch\u00fcler sind, \r\n so m\u00fcssen dementsprechend die W\u00f6rter und Wendungen an diese Altersgruppe angepasst werden. \u00c4ltere Ausgaben \r\n (hier gilt das strenge Uhrheberrecht) werden stets in Hinblick auf Rechtsschreibung und Flexion an die \r\n Gegenwartssprache angepasst und zwar unter gleichzeitiger Beachtung der Einheit von Form und literarischen Stilen. \r\n Das Aussuchen von literarischen Motiven und Themen, die uns helfen sollen, Literaturinhalte tiefgreifend zu verstehen, \r\n schlie\u00dfen unsere Projektarbeiten ab. Bei allen diesen Unternehmungen helfen uns Volont\u00e4re - Lehrer sowie Sch\u00fcller - \r\n die uns mit eigenen Ratschl\u00e4gen und Bemerkungen bei der Entscheidungsfindung unterst\u00fctzen.

                    \r\n \r\n \r\n

                    Wie Sie uns erreichen?

                    \r\n \r\n

                    Personen, die an der Zusammenarbeit interessiert sind, bitten wir um eine E-Mail an folgende Adresse zu richten: fundacja@nowoczesnapolska.org.pl.

                    \r\n\r\n

                    Wir laden Sie auch ein unter Redaktonseite der Freien Lekt\u00fcren, auf unserer Hompage finden Sie n\u00fctzliche Informationen rund um das Thema Redaktionsarbeit.

                    ", + "title_uk": "\u041c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043c \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438", + "right_column_it": null, + "title_pl": "Mo\u017cesz nam pom\u00f3c", + "left_column": "

                    Volunteering

                    \r\n\r\n

                    We try our best to elaborate works appended to our library. It is possible only thanks to the support of our volunteers.

                    \r\n\r\n \r\n

                    We invite every person who wants to take part in developing the web school library Wolne Lektury.

                    \r\n

                    We offer trainings and traineeships in proofreading and copy-editing for every and each volunteer. Our volunteers can learn not only about the problems, but also the opportunities concerning web publishing. They organize the trainings and conferences together with us, as well as they help in preparing the audio versions ob books (so called audiobooks). We are also able to issue voluneering contracts and certificates regarding sort and duration of volunteer's work for our foundation. The traineeships, proofreading and copywriting practice as well as the certificates confirming those may be found vital in acquiring professional qualifications and promotion. .

                    \r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n

                    What else is there to be done?

                    \r\n \r\n

                    Preparing the reading for publishing demands the most effort. One has to correct the typos nad other errors of this kind in the texts we receive from the National Library. Next, one needs to provide the book with the annotations, at the same time bearing in mind that our offering is addressed to the pupils, for whom many words and collocations may sound out of date. The older editions (the rule is determined by copyrights) are subject to essential lingustic modernisations, i.e. in spelling or inflection but we pay attention to not to violate the artistic specifity of the literary works. The last stage of the preparation is searching for literary motfis and themes, so the text is examined thoroughly. In each and every phase we are supported by the volunteers - teachers and students - who often advise us point out crucial matters as we take important decisions.

                    \r\n \r\n\r\n\r\n\r\n\r\n\r\n

                    How to contact us?

                    \r\n \r\n

                    We ask every interested person to send us an e-mailfundacja@nowoczesnapolska.org.pl.

                    \r\n\r\n

                    Please, visit also the editorial website of Wolne Lektury. There you will find essential information on how to involve yourself in editorial works.

                    \r\n\r\n", + "right_column_uk": "

                    \u041d\u0430\u0439\u0431\u0456\u043b\u044c\u0448 \u0437\u0430\u0441\u043b\u0443\u0436\u0435\u043d\u0456 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438

                    \r\n\r\n\t

                    Agatapaszkowska (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 15 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)

                    \r\n\r\n

                    \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u00ab\u0412 \u043f\u0443\u0441\u0442\u0435\u043b\u0456 \u0456 \u0432 \u0434\u0436\u0443\u043d\u0433\u043b\u044f\u0445\u00bb \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

                    \r\n\r\n\r\n\t

                    AgnieszkaKappa (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 16 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)

                    \r\n\r\n

                    \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0432 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u0442\u0430 \u043e\u043f\u0438\u0441\u0443 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432 \u0442\u0430 \u0442\u0435\u043c; \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0442\u0435\u043a\u0441\u0442\u0438 \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 (Latarnik, \u042f\u043d\u043a\u043e \u041c\u0443\u0437\u0438\u043a\u0430\u043d\u0442, Quo vadis); \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

                    \r\n\r\n\r\n

                    Anerys (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 5 \u043b\u0438\u043f\u043d\u044f 2007)

                    \r\n\r\n

                    \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0432 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432 \u0442\u0430 \u0442\u0435\u043c, \u0434\u0438\u0441\u043a\u0443\u0441\u0456\u0457 \u043d\u0430 \u0442\u0435\u043c\u0443 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0436\u0430\u043d\u0440\u0456\u0432, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0433\u0456\u043c\u043d \u0411\u043e\u0433\u043e\u0440\u043e\u0434\u0438\u0446\u044f, \u00ab\u0424\u0440\u0430\u0448\u043a\u0438\u00bb \u0442\u0430 \u00ab\u0422\u0440\u0435\u043d\u0438\u00bb \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u044c\u043a\u043e\u0433\u043e; \u0432\u0456\u0440\u0448\u0456 \u0421\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u043e\u0433\u043e (Gr\u00f3b Agamemnona), \u00ab\u0422\u0430\u0440\u0442\u044e\u0444\u0430\u00bb \u041c\u043e\u043b\u044c\u0454\u0440\u0430, \u0442\u0430 \u043f\u043e\u0435\u0437\u0456\u0457 \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0456\u0447\u0430 (\u0432 \u0446\u044c\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0456 \u0433\u0456\u043c\u043d \u201eDies Irae\u201d); \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

                    \r\n\r\n\r\n\t

                    EmiliaZdankiewicz (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 17 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)

                    \r\n\r\n

                    \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0456 \u043c\u043e\u0442\u0438\u0432\u0438 \u2014 \u0434\u0438\u0441\u043a\u0443\u0441\u0456\u044f \u0442\u0430 \u043e\u043f\u0438\u0441, \u0421\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u0438\u0439, \u041a\u043e\u0440\u0434\u0456\u0430\u043d; \u041a\u043e\u043d\u043e\u043f\u043d\u0456\u0446\u044c\u043a\u0430, Nasza szkapa; \u041c\u0456\u0446\u043a\u0435\u0432\u0438\u0447, \u0414\u0437\u044f\u0434\u0438 \u0447. III; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

                    \r\n\r\n\r\n\t

                    Ewa_Serafin (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 15 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)

                    \r\n\r\n

                    \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0432 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u0442\u0430 \u043e\u043f\u0438\u0441\u0443 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432 \u0442\u0430 \u0442\u0435\u043c, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u043f\u043e\u0435\u0437\u0456\u0457 \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0456\u0447\u0430 (\u201cZ wichr\u00f3w i hal\u201d, \u201cNad przepa\u015bciami\u201d, \u201cW ciemno\u015bci schodzi moja dusza\u201d), \u0430 \u0442\u0430\u043a\u043e\u0436 \u201cNad Niemnem\u201d \u0415\u043b\u0456\u0437\u0438 \u041e\u0436\u0435\u0448\u043a\u043e; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafin

                    \r\n\r\n\r\n \t

                    Hanna_Golab (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 15 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)

                    \r\n\r\n

                    \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u201c\u0426\u0430\u0440\u044f \u0415\u0434\u0456\u043f\u0430\u201d \u0421\u043e\u0444\u043e\u043a\u043b\u0430 \u0442\u0430 \u0432\u0456\u0440\u0448 \u201cDusio\u0142ek\u201d \u041b\u0435\u0441\u044c\u043c\u044f\u043d\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

                    \r\n\r\n\r\n\t

                    Ingene (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 16 \u043b\u0438\u043f\u043d\u044f 2008)

                    \r\n\r\n

                    \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u043e\u043f\u043e\u0432\u0456\u0434\u0430\u043d\u043d\u044f \u201cSi\u0142aczka\u201d \u0416\u0435\u0440\u043e\u043c\u0441\u044c\u043a\u043e\u0433\u043e, \u201cQuo vadis\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 \u0442\u0430 \u201c\u0422\u0440\u0435\u043d\u0438\u201d \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u044c\u043a\u043e\u0433\u043e; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene

                    \r\n \r\n\t

                    Jmyszkowska (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 26 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)

                    \r\n\r\n

                    \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u201c\u0413\u044f\u0443\u0440\u0430\u201d \u0411\u0430\u0439\u0440\u043e\u043d\u0430 \u0442\u0430 \u201cQuo vadis\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska

                    \r\n\r\n\r\n

                    Marysiabailey (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 1 \u0436\u043e\u0432\u0442\u043d\u044f 2007)

                    \r\n\r\n

                    \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0442\u0435\u043c \u0442\u0430 \u043e\u043f\u0438\u0441\u0456 \u0457\u0445 \u0437\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u043d\u043d\u044f; \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0442\u0432\u043e\u0440\u0438: \u201c\u0421\u0435\u043b\u044f\u043d\u0438\u201d \u0420\u0435\u0439\u043c\u043e\u043d\u0442\u0430 , \u201cLalka\u201d \u041f\u0440\u0443\u0441\u0430, \u201cNie-Boska komedia\u201d \u041a\u0440\u0430\u0441\u0456\u043d\u0441\u044c\u043a\u043e\u0433\u043e, \u201eBajki\u201d \u0442\u0430 \u201eSatyry\u201d \u041a\u0440\u0430\u0441\u0456\u0446\u044c\u043a\u043e\u0433\u043e, \u201c\u0410\u043d\u0442\u0438\u0433\u043e\u043d\u0430\u201d \u0421\u043e\u0444\u043e\u043a\u043b\u0430, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0442\u0432\u043e\u0440\u0438 \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u044c\u043a\u043e\u0433\u043e, \u041c\u043e\u0440\u0448\u0442\u0438\u043d\u0430, \u041c\u0456\u0446\u043a\u0435\u0432\u0438\u0447\u0430, \u0490\u0435\u0442\u0435, \u041e\u043f\u043f\u043c\u0430\u043d\u0430, \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0456\u0447\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey; \u043a\u0440\u0456\u043c \u0442\u043e\u0433\u043e, \u043f\u0456\u0434\u0433\u043e\u0442\u0443\u0432\u0430\u043b\u0430 \u0456 \u043f\u0440\u043e\u0432\u0435\u043b\u0430 \u0442\u0440\u0435\u043d\u0456\u043d\u0433 \u0434\u043b\u044f \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0456\u0432 15 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008; \u0437\u0430\u044f\u043c\u0430\u043b\u0430\u0441\u044f \u0442\u0430\u043a\u043e\u0434 \u043a\u043e\u0440\u0435\u043a\u0442\u043e\u044e, \u0430 \u043d\u0430 \u0434\u0430\u043d\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0430\u0446\u044e\u0454 \u043d\u0430\u0434 \u0430\u0443\u0434\u0456\u043e-\u043a\u043d\u0438\u0433\u0430\u043c\u0438.

                    \r\n\r\n\r\n

                    Olga_Wojtczak (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 21 \u0436\u043e\u0432\u0442\u043d\u044f 2008)

                    \r\n\r\n

                    \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0440\u043e\u043c\u0430\u043d\u0438 \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 (\u0422\u0440\u0438\u043b\u043e\u0433\u0456\u044f), \u0420\u0435\u0439\u043c\u043e\u043d\u0442\u0430, \u0416\u0435\u0440\u043e\u043c\u0441\u044c\u043a\u043e\u0433\u043e, \u0434\u0440\u0430\u043c\u0438 \u0428\u0435\u043a\u0441\u043f\u0456\u0440\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak

                    \r\n\r\n\r\n

                    Renataml (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 30 \u0447\u0435\u0440\u0432\u043d\u044f 2007)

                    \r\n\r\n

                    \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0432 \u0434\u0438\u0441\u043a\u0443\u0441\u0456\u0457 \u043d\u0430 \u0442\u0435\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u043c\u043e\u0442\u0438\u0432\u0456\u0432; \u044f\u043a \u0434\u043e\u0441\u0432\u0456\u0434\u0447\u0435\u043d\u0430 \u0432\u0447\u0438\u0442\u0435\u043b\u044c\u043a\u0430, \u043d\u0430\u0434\u0430\u0432\u0430\u043b\u0430 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0443 \u0442\u0430 \u043f\u043e\u0440\u0430\u0434\u0438, \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043b\u0430 \u0440\u043e\u043c\u0430\u043d \u00abLalka\u00bb \u041f\u0440\u0443\u0441\u0430, \u0434\u0440\u0430\u043c\u0443 \u00ab\u0411\u0430\u043b\u043b\u0430\u0434\u0438\u043d\u0430\u00bb \u0421\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u043e\u0433\u043e, \u043e\u043f\u043e\u0432\u0456\u0434\u0430\u043d\u043d\u044f \u00abSi\u0142aczka\u00bb \u0416\u0435\u0440\u043e\u043c\u0441\u044c\u043a\u043e\u0433\u043e.\r\n\r\n http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

                    ", + "title_en": "You can help us", + "left_column_pl": "

                    Wolontariat w Wolnych Lekturach

                    \r\n
                      \r\n
                    • Zosta\u0144 naszym redaktorem, programist\u0105 lub t\u0142umaczem \u2013 wolontariuszem.
                    • \r\n
                    • Zdob\u0105d\u017a nowe umiej\u0119tno\u015bci i do\u015bwiadczenie.
                    • \r\n
                    • We\u017a udzia\u0142 w otwartym projekcie i tw\u00f3rz innowacyjn\u0105 bibliotek\u0119 internetow\u0105.
                    • \r\n
                    \r\n

                    Dzi\u0119ki pracy naszych wolontariuszy opublikowali\u015bmy ju\u017c ponad 1500 lektur, z kt\u00f3rych skorzysta\u0142y ponad 3 miliony czytelnik\u00f3w z ca\u0142ego \u015bwiata.

                    \r\n

                    Zapraszamy wszystkie osoby, kt\u00f3re chc\u0105 wsp\u00f3\u0142tworzy\u0107 nasz projekt. Wsp\u00f3\u0142pracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi literatur\u0105, redagowaniem tekst\u00f3w i projektami informatycznymi. Oferujemy profesjonalne szkolenia i sta\u0142\u0105 pomoc merytoryczn\u0105. Wolontariusze mog\u0105 pracowa\u0107 zdalnie lub w siedzibie Fundacji.

                    \r\n

                    Organizujemy r\u00f3wnie\u017c praktyki studenckie \u2013 nawi\u0105zali\u015bmy wsp\u00f3\u0142prac\u0119 z Instytutem Informacji Naukowej i Studi\u00f3w Bibliologicznych UW, Biurem Karier UKSW oraz Wydzia\u0142em Fizyki UW.

                    \r\n\r\n

                    Jak si\u0119 do nas zg\u0142osi\u0107?

                    \r\n

                    Wszystkie zainteresowane osoby prosimy o przys\u0142anie maila na adres marta.niedzialkowska@nowoczesnapolska.org.pl.

                    \r\n", + "left_column_it": null, + "title_es": "\ufeffPuedes ayudarnos", + "left_column_ru": "

                    \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e

                    \r\n\r\n

                    \u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0435 \u043d\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c. \u042d\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\r\n \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043d\u0430\u0448\u0438\u043c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c-\u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c.

                    \r\n\r\n \r\n

                    \u041c\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0448\u043a\u043e\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Wolne Lektury \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u043c\u0438.

                    \r\n \r\n

                    \u041c\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443 \u043f\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0442\u0435\u043a\u0441\u0442\u043e\u0432: \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u0438\r\n \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443. \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438, \u0442\u0430\u043a \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438.\r\n \u041e\u043d\u0438, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u043c\u0438, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u044e\u0442 \u0443\u0447\u0435\u0431\u0443 \u0438 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u0430\u0433\u0430\u044e\u0442 \u0432 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u0443\u0448\u0430\u043d\u0438\u044f (\u0442.\u043d.\r\n \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433). \u041c\u044b \u0432\u044b\u0434\u0430\u0435\u043c \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u044b \u0438 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0430\u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \r\n \u0438 \u043a\u0430\u043a\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u043e\u043c \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \r\n \u0444\u043e\u043d\u0434\u0430. \u0423\u0447\u0435\u0431\u0430, \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0449\u0438\u0435 \u0438\u0445 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435\r\n \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0441\u043b\u0443\u0436\u0431\u0435.

                    \r\n\r\n \r\n

                    \u0427\u0442\u043e \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?

                    \r\n \r\n

                    \u0421\u0430\u043c\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u0412 \u0442\u0435\u043a\u0441\u0442\u0430\u0445 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u043c\u0438 \u0438\u0437 \u041d\u0430\u0440\u043e\u0434\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \r\n \u0417\u0430\u0442\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u043e\u0441\u043a\u0438, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u043e \u043a \u0443\u0447\u0435\u043d\u0438\u043a\u0430\u043c, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432 \u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0437\u0432\u0443\u0447\u0438\u0442 \u0430\u043d\u0430\u0445\u0440\u043e\u043d\u0438\u0447\u043d\u043e.\r\n \u041f\u0440\u0435\u0436\u043d\u0438\u0435 \u0438\u0437\u0434\u0430\u043d\u0438\u044f (\u0440\u0435\u0436\u0438\u043c \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0430) \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440. \u043f\u043e \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0438\u043b\u0438 \u0444\u043b\u0435\u043a\u0441\u0438\u0438. \u041f\u0440\u0438\u0447\u0435\u043c, \u043c\u044b \u0437\u0430\u0431\u043e\u0442\u0438\u043c\u0441\u044f \u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438\r\n \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \"\u043d\u0430\u0441\u043a\u0432\u043e\u0437\u044c\".\r\n \u0412\u043e \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0445 \u0441\u0432\u043e\u044e \u043f\u043e\u043c\u043e\u0449\u044c \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b - \u0443\u0447\u0438\u0442\u0435\u043b\u044f \u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b, \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u0432\u043e\u0438 \u0441\u043e\u0432\u0435\u0442\u044b \u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f\r\n \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439.

                    \r\n \r\n

                    \u041a\u0430\u043a \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0432 \u043d\u0430\u0448 \u0444\u043e\u043d\u0434?

                    \r\n \r\n

                    \u0412\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0441\u0438\u043c \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0438-\u043c\u0435\u0439\u043b \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 fundacja@nowoczesnapolska.org.pl.

                    \r\n\r\n

                    \u041c\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Wolne Lektury, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u043c.

                    ", + "slug": "help_us", + "right_column_de": "

                    Wohlverdiente Volont\u00e4re

                    \r\n\r\n\t

                    Agatapaszkowska (Mitarbeit seit 15. M\u00e4rz 2008)

                    \r\n\r\n

                    bearbeitete u.a. \"Durch W\u00fcste und Wildnis\" von Sienkiewicz; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

                    \r\n\r\n\r\n\t

                    AgnieszkaKappa (Mitarbeit seit 16. M\u00e4rz 2008)

                    \r\n\r\n

                    arbeitete u.a. an der Erstellung der Liste und Beschreibung der literarischen Themen und Motive;bearbeitete Texten von Sienkiewicz ( Der Leuchtturmw\u00e4rter, Janko der Musikant, Quo vadis);s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

                    \r\n\r\n\r\n \r\n \r\n\r\n

                    Anerys (Mitarbeit seit 5. Juli 2007)

                    \r\n\r\n

                    arbeitete u.a. an der Erstellung der Liste und Beschreibung der literarischen Themen und Motive;nahm an der Diskussion \u00fcber Literaturgattungen teil, bearbeitete folgende Werke: Bogurodzica, \"Spruchgedichte\" und \"Klagelieder\" von Kochanowski; Gedichte von Slowacki ( Agamemnons Grab), \"Tartuffe oder der Betr\u00fcger\" von Moliere, ob Poesien von Kasprowicz (u.a. eine Hymne \"Dies Irae\"); s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

                    \r\n \r\n\r\n\t

                    EmiliaZdankiewicz (Mitarbeit seit 17. M\u00e4rz 2008)

                    \r\n\r\n

                    nahm u.a. an der Diskussion und Beschreibung literarischer Motive teil, S\u0142owacki, Kordian; Konopnicka, Unsere M\u00e4hre; Mickiewicz, Totenfeier Teil III; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

                    \r\n\r\n \r\n\t\r\n\t

                    Ewa_Serafin (Mitarbeit seit 15. M\u00e4rz 2008)

                    \r\n\r\n

                    arbeitete u.a. an der Erstellung der Liste und Beschreibung der literarischen Themen und Motive, bearbeitete Kasprowicz Gedichte (\u201eZ wichr\u00f3w i hal\u201d, \u201eNad przepa\u015bciami\u201d, \u201eW ciemno\u015bci schodzi moja dusza\u201d oraz \u201eNad Niemnem\u201d Orzeszkowej; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafin

                    \r\n\r\n\r\n \t

                    Hanna_Golab (Mitarbeit seit 15. M\u00e4rz 2008)

                    \r\n\r\n

                    bearbeitete \" K\u00f6nig \u00d6dipus\" von Sophokles sowie \"Dusio\u0142ek\" von Lesmian; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

                    \r\n\r\n\r\n\t

                    Ingene (Mitarbeit seit 16. Juli 2008)

                    \r\n\r\n

                    bearbeitete u.a. \u201eSi\u0142aczka\u201d von \u017beromski, \u201eQuo vadis\u201d von Sienkiewicz sowie \u201eKlagelieder\u201d von Kochanowski; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene

                    \r\n \r\n\t

                    Jmyszkowska (Mitarbeit seit 26. M\u00e4rz 2008)

                    \r\n\r\n

                    bearbeitete u.a. \u201eGiaur\u201d von Byron sowie \u201eQuo vadis\u201d von Sienkiewicz; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska

                    \r\n\r\n\r\n

                    Marysiabailey (Mitarbeit seit 1. Oktober 2007)

                    \r\n\r\n

                    arbeitete u.a. an der Erstellung der Liste und Beschreibung der literarischen Themen und Motive sowie deren Benutzung; bearbeitete folgende Werke: \"Die Bauern\" von Reymont, \"Die Puppe\" von Prus, \"Un-g\u00f6ttliche Kom\u00f6die\" von Krasinski, \"M\u00e4rchens\" und \"Satire\" von Krasickiego, \"Antigone\" von Sophokles sowie Werke von Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman, Kasprowicz; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\u201c: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\r\n\r\n\r\n

                    Olga_Wojtczak (Mitarbeit seit 21. Oktober 2008)

                    \r\n\r\n

                    bearbeitete u.a. Romane von Sienkiewicz ( Die Trilogie), Reymont, \u017beromski und Dramen von Shakespeare; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak

                    \r\n\r\n

                    Renataml (Mitarbeit seit 30. Juni 2007)

                    \r\n\r\n

                    nahm an der Diskussion \u00fcber Motivlisten teil, als erfahrene Lehrerin unterst\u00fctzte sie uns mit vielen Ratschl\u00e4gen, bearbeitete folgende Werke: \"Die Puppe\" von Prus, \"Balladyna\" von Slowacki, \"Si\u0142aczka\" \u017beromski.\r\n\r\n http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

                    \r\n", + "left_column_es": "

                    Voluntariado

                    \r\n\r\n\r\n\r\n

                    Hacemos todo lo posible para elaborar las obras de nuestra biblioteca con la mayor perfecci\u00f3n. Esto es posible s\u00f3lo gracias al apoyo de nuestros voluntarios.

                    \r\n\r\n\r\n\r\n \r\n\r\n

                    Invitamos a todos quienes quieren formar parte en el desarrollo de la biblioteca virtual de Wolne Lektury.

                    \r\n\r\n \r\n\r\n

                    A todos los voluntarios les ofrecemos cursos y pr\u00e1cticas en cuanto a la redacci\u00f3n t\u00e9cnica y pr\u00e1ctica. Los voluntarios tienen la posibilidad de conocer tanto los problemas como las oportunidades relacionadas con las publicaciones virtuales. Nos ayudan en la organizaci\u00f3n de conferencias y cursos de formaci\u00f3n, asimismo asisten en la edici\u00f3n de los textos en forma auditiva (audiolibros). Los proporcionamos contratos y certificados con los detalles del trabajo y tipo de tareas realizadas para nuestra fundaci\u00f3n. Los cursos, las pr\u00e1cticas realizadas y los certificados correspondientes podr\u00e1n resultar \u00fatiles en el proceso del desarrollo profesional y para el futuro trabajo profesional.

                    \r\n\r\n \r\n\r\n

                    >\u00bfEn qu\u00e9 nos puedes ayudar?

                    \r\n\r\n La Biblioteca\r\n\r\n Nacional proporciona textos, pero hay que eliminar las faltas de ortograf\u00eda y otros errores mec\u00e1nicos y, a continuaci\u00f3n, a\u00f1adir glosas.\r\n\r\n

                    La mayor\u00eda de trabajo la tenemos con la preparaci\u00f3n de los libros para la publicaci\u00f3n. La Biblioteca Nacional proporciona textos pero hay que corregir las erratas y otros errores, despu\u00e9s a\u00f1adir las anotaciones a pie de p\u00e1gina teniendo en cuenta que nuestra oferta es dirigida especialmente a estudiantes para quienes muchas palabras o expresiones pueden ser anacr\u00f3nicas. Tratamos de modernizar las ediciones antiguas (respetando el derecho de autor) respecto a la ortograf\u00eda o la inflexi\u00f3n pero cuidamos para no violar el valor art\u00edstico del texto. La \u00faltima etapa es buscar todos los motivos y temas literarios que ayudar\u00e1n en conocer la lectura totalmente. En todos los trabajos nos ayudan los voluntarios, profesores y estudiantes, a menudo ayudando tambi\u00e9n en la toma de decisiones importantes.

                    \r\n\r\n \r\n\r\n

                    \u00bfC\u00f3mo inscribirse?

                    \r\n\r\n \r\n\r\n

                    Todos que est\u00e9n interesados enviad un mail a fundacja@nowoczesnapolska.org.pl.

                    \r\n\r\n\r\n\r\n

                    Os invitamos tambi\u00e9n a visitar la p\u00e1gina de la redacci\u00f3n de Wolne Lektury donde hay todas las informaciones necesarias para empezar el trabajo editorial.

                    \r\n\r\n", + "left_column_en": "

                    Volunteering

                    \r\n\r\n

                    We try our best to elaborate works appended to our library. It is possible only thanks to the support of our volunteers.

                    \r\n\r\n \r\n

                    We invite every person who wants to take part in developing the web school library Wolne Lektury.

                    \r\n

                    We offer trainings and traineeships in proofreading and copy-editing for every and each volunteer. Our volunteers can learn not only about the problems, but also the opportunities concerning web publishing. They organize the trainings and conferences together with us, as well as they help in preparing the audio versions ob books (so called audiobooks). We are also able to issue voluneering contracts and certificates regarding sort and duration of volunteer's work for our foundation. The traineeships, proofreading and copywriting practice as well as the certificates confirming those may be found vital in acquiring professional qualifications and promotion. .

                    \r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n

                    What else is there to be done?

                    \r\n \r\n

                    Preparing the reading for publishing demands the most effort. One has to correct the typos nad other errors of this kind in the texts we receive from the National Library. Next, one needs to provide the book with the annotations, at the same time bearing in mind that our offering is addressed to the pupils, for whom many words and collocations may sound out of date. The older editions (the rule is determined by copyrights) are subject to essential lingustic modernisations, i.e. in spelling or inflection but we pay attention to not to violate the artistic specifity of the literary works. The last stage of the preparation is searching for literary motfis and themes, so the text is examined thoroughly. In each and every phase we are supported by the volunteers - teachers and students - who often advise us point out crucial matters as we take important decisions.

                    \r\n \r\n\r\n\r\n\r\n\r\n\r\n

                    How to contact us?

                    \r\n \r\n

                    We ask every interested person to send us an e-mailfundacja@nowoczesnapolska.org.pl.

                    \r\n\r\n

                    Please, visit also the editorial website of Wolne Lektury. There you will find essential information on how to involve yourself in editorial works.

                    \r\n\r\n", + "right_column_fr": "

                    Nos b\u00e9n\u00e9voles les plus m\u00e9ritants

                    \r\n\r\n\t

                    Agatapaszkowska (coop\u00e8re avec nous depuis le 15 mars 2008)

                    \r\n\r\n

                    entre autres, elle a r\u00e9dig\u00e9 \"W pustyni i w puszczy\u201d de Henryk Sienkiewicz; voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

                    \r\n\r\n\r\n\t

                    AgnieszkaKappa (coop\u00e8re avec nous depuis le 16 mars 2008)

                    \r\n\r\n

                    entre autres, elle a particip\u00e9 \u00e0 la pr\u00e9paration de la liste des motifs et th\u00e8mes litt\u00e9raires et leurs descriptions, a r\u00e9dig\u00e9 les textes de Sienkiewicz (\"Latarnik\", \"Janko Muzykant\", \"Quo vadis\"); voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

                    \r\n\r\n\r\n

                    Anerys (coop\u00e8re avec nous depuis le 5 juillet 2007)

                    \r\n\r\n

                    entre autres, elle a particip\u00e9 \u00e0 la pr\u00e9paration de la liste des motifs et th\u00e8mes litt\u00e9raires, dans la discussion sur les genres litt\u00e9raires, elle \u00e0 r\u00e9dig\u00e9 \"Bogurodzica\", \"Fraszki\u201d et \"Treny\u201d de Kochanowski; les po\u00e8mes de S\u0142owacki (\"Gr\u00f3b Agamemnona\"), \"Tartuffe, ou l'Imposteur\" de Moli\u00e8re, les po\u00e8mes de Kasprowicz (entre autres le hymne \"Dies Irae\u201d); voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

                    \r\n\r\n\r\n\t

                    EmiliaZdankiewicz (coop\u00e8re avec nous depuis le 17 mars 2008)

                    \r\n\r\n

                    entre autres, les motifs litt\u00e9raires - discussion et description, \"Kordian\" de S\u0142owacki; \"Nasza szkapa\" de Konopnicka; \"A\u00efeux p.III\" de Mickiewicz; voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

                    \r\n\r\n\r\n\t

                    Ewa_Serafin (coop\u00e8re avec nous depuis le 15 mars 2008)

                    \r\n\r\n

                    entre autres a particip\u00e9 \u00e0 la cr\u00e9ation de la liste et de la description de l'utilisation des motifs et th\u00e8mes litt\u00e9raires, a r\u00e9dig\u00e9 les po\u00e8mes de Kasprowicz (\"Z wichr\u00f3w i hal\u201d, \"Nad przepa\u015bciami\u201d, \"W ciemno\u015bci schodzi moja dusza\u201d ainsi que \u201eNad Niemnem\u201d d'Orzeszkowa; voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafin

                    \r\n\r\n\r\n \t

                    Hanna_Golab (coop\u00e8re avec nous depuis le 15 juillet 2008)

                    \r\n\r\n elle a r\u00e9dig\u00e9 \"Oedipe roi\u201d de Sophocle et \"Dusio\u0142ek\u201d de Le\u015bmian; voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

                    \r\n\r\n\r\n\t

                    Ingene (coop\u00e8re avec nous depuis le 16 juillet 2008)

                    \r\n\r\n

                    elle a r\u00e9dig\u00e9 \"Si\u0142aczka\u201d de \u017beromski, \"Quo vadis\u201d de Sienkiewicz ainsi que \"Treny\u201d de Kochanowski; voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene

                    \r\n \r\n\t

                    Jmyszkowska (coop\u00e8re avec nous depuis le 26 mars 2008)

                    \r\n\r\n

                    entre autres, elle a r\u00e9dig\u00e9 \"Giaour\u201d de Byron et \"Quo vadis\u201d de Sienkiewicz; voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska

                    \r\n\r\n\r\n

                    Marysiabailey (coop\u00e8re avec nous depuis le 1 octobre 2007)

                    \r\n\r\n

                    elle a particip\u00e9 \u00e0 la pr\u00e9paration de la liste des motifs et th\u00e8mes litt\u00e9raires et de la description de leur utilisation; elle a r\u00e9dig\u00e9 \"Les Paysans\u201d de Reymont, \"La poup\u00e9e\u201d de Prus, \"Nie-Boska komedia\u201d de Krasi\u0144ski, \"Bajki\u201d et \"Satyry\u201d de Krasicki, \"Antigone\u201d de Sophocle et les oeuvres de Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman, Kasprowicz; voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey; elle a en plus pr\u00e9par\u00e9 et conduit l'entra\u00eenement pour les b\u00e9n\u00e9voles le 15 mars 2008; elle a fait la correcte des textes et est coordinatrice du travail sur les livres audio.

                    \r\n\r\n\r\n

                    Olga_Wojtczak (coop\u00e8re avec nous depuis le 21 octobre 2008)

                    \r\n\r\n

                    entre autres, elle a r\u00e9dig\u00e9 les romans de Sienkiewicz (la Trilogie), de Reymont, \u017beromski, les oeuvres de Shakespeare; voir aussi \"contribution de l'utilisateur\u201d sur notre site: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak

                    \r\n\r\n\r\n

                    Renataml (coop\u00e8re avec nous depuis le 30 juin 2007)

                    \r\n\r\n

                    a particip\u00e9 \u00e0 la discussion sur la liste des motifs, en tant qu'enseignante experiment\u00e9e, elle nous a donn\u00e9 des conseils pr\u00e9cieux, a \u00e9dit\u00e9 \"La poup\u00e9e\u201d de Prus, \"Balladyna\u201d de S\u0142owacki, \"Si\u0142aczka\u201d de \u017beromski.\r\n\r\n http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

                    \r\n", + "title_ru": "\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0447\u044c", + "title_it": null + } + }, + { + "pk": 1, + "model": "infopages.infopage", + "fields": { + "title_de": "Volontariat f\u00fcr Wissen", + "left_column_uk": "

                    \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e

                    \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                    \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0411\u0456\u043e\u0433\u0440\u0430\u043c\u0438 \u043f\u0438\u0441\u044c\u043c\u0435\u043d\u043d\u0438\u043a\u0456\u0432 \u0442\u0430 \u0434\u0435\u0444\u0456\u043d\u0456\u0446\u0456\u0457 \u0435\u043f\u043e\u0445 \u0442\u0430 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0436\u0430\u043d\u0440\u0456\u0432 \u0432 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0456 \u0443\u0447\u043d\u044f\u043c\u0438 \u0447\u043e\u0442\u0438\u0440\u044c\u043e\u0445 \u0448\u043a\u0456\u043b \u043f\u0456\u0434\u0447\u0430\u0441 \u043c\u0430\u0439\u0441\u0442\u0435\u0440-\u043a\u043b\u0430\u0441\u0456\u0432 \u201c\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0432 \u043e\u0441\u0432\u0456\u0442\u0456\u201d.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                    \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                    \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0423\u0447\u043d\u0456 \u0441\u043f\u0456\u043b\u044c\u043d\u043e \u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0438 \u0432\u0456\u0434 \u0434\u043e\u0433\u043b\u044f\u0434\u043e\u043c \u0432\u0447\u0438\u0442\u0435\u043b\u0456\u0432 \u0442\u0430 \u0441\u043f\u0435\u0446\u0456\u0430\u043b\u0456\u0441\u0442\u0456\u0432 \u2014 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u0437\u043d\u0430\u0432\u0446\u0456\u0432 \u043d\u0430 \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u0432\u0456\u0439 \u0432\u0456\u043a\u0456-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0456\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0456\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u044e\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2ia. \u0420\u043e\u0431\u043e\u0442\u0430 \u043d\u0430\u0434 \u0446\u0438\u043c\u0438 \u0442\u0435\u043a\u0441\u0442\u0430\u043c\u0438 \u0431\u0443\u043b\u0430 \u0432\u043e\u0434\u043d\u043e\u0447\u0430\u0441 \u043d\u0430\u0443\u043a\u043e\u044e \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0442\u0438\u0441\u044f \u043a\u043e\u043c\u043f\u2019\u044e\u0442\u0435\u0440\u043e\u043c \u0442\u0430 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0448\u0443\u043a\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457, \u0430 \u0442\u0430\u043a\u043e\u0436 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438 \u0457\u0457 \u0432\u0456\u0440\u043e\u0433\u0456\u0434\u043d\u043e\u0441\u0442\u0456.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                    \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                    \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u041f\u0440\u043e\u0435\u043a\u0442 \"\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0432 \u043e\u0441\u0432\u0456\u0442\u0456\" \u0437\u0434\u0456\u0439\u0441\u043d\u0435\u043d\u043e \u0437\u0430\u0432\u0434\u044f\u043a\u0438 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0446\u0456 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u043e\u0441\u0432\u0456\u0442\u0438. \u041f\u0440\u0438\u0437\u0438 \u0434\u043b\u044f \u0443\u0447\u043d\u0456\u0432 \u043f\u0440\u0438\u0433\u043e\u0442\u0443\u0432\u0430\u043b\u0438\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0412\u0438\u0434\u0430\u0432\u043d\u0438\u0446\u0442\u0432\u043e Nasza Ksi\u0119garnia\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0442\u0430\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0412\u0438\u0434\u0430\u0432\u043d\u0438\u0446\u0442\u0432\u043e Helion. \u0422\u0435\u043a\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043d\u043e \u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u0456 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Plagiat.pl.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                    \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                    \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0417\u0432\u0456\u0442 \u0437 \u0440\u0435\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u0457 \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \"\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0432 \u043e\u0441\u0432\u0456\u0442\u0456\".\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                    \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                    \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \r\n\u00a0\u00a0\u00a0 \r\n\u00a0\u00a0\u00a0 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                    ", + "main_page": null, + "right_column_pl": "\t

                    Autorzy

                    \r\n\r\n\t
                      \r\n\t\t
                    1. \r\n\t\t\t

                      \r\n\t\t\t\tGimnazjum nr 40 z Oddzia\u0142ami Integracyjnymi w Zespole\r\n\t\t\t\tSzk\u00f3\u0142 nr 69 im. Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; klasa druga pod opiek\u0105\r\n\t\t\t\tAnny Budziarek-Friedrich:\r\n\t\t\t

                      \r\n\r\n\t\t\t
                        \r\n\t\t\t\t
                      • Burdon Filip;
                      • \r\n\r\n\t\t\t\t
                      • D\u0119bski Bartek;
                      • \r\n\t\t\t\t
                      • Jackowicz Kamil;
                      • \r\n\t\t\t\t
                      • Kurek Pawe\u0142;
                      • \r\n\t\t\t\t
                      • Makles Bartosz;
                      • \r\n\t\t\t\t
                      • Markiewicz Jeremiasz;
                      • \r\n\t\t\t\t
                      • Migda\u0142 Katarzyna;
                      • \r\n\r\n\t\t\t\t
                      • Mioduszewski Micha\u0142;
                      • \r\n\t\t\t\t
                      • Pfeiffer Ida;
                      • \r\n\t\t\t\t
                      • P\u0142askowicka Karolina;
                      • \r\n\t\t\t\t
                      • Sailer Ewa.
                      • \r\n\t\t\t
                      \r\n\t\t
                    2. \r\n\r\n\t\t
                    3. \r\n\t\t\t

                      \r\n\t\t\t\tXXXIII Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Miko\u0142aja Kopernika,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; klasa pierwsza o profilu\r\n\t\t\t\tbiologiczno-chemicznym pod opiek\u0105 El\u017cbiety Konkowskiej:\r\n\t\t\t

                      \r\n\r\n\t\t\t
                        \r\n\t\t\t\t
                      • Chwil Bart\u0142omiej;
                      • \r\n\t\t\t\t
                      • Czarnecka Natalia;
                      • \r\n\t\t\t\t
                      • Gawro\u0144ska Iga;
                      • \r\n\r\n\t\t\t\t
                      • Grabarczyk Marta;
                      • \r\n\t\t\t\t
                      • Jastrz\u0105b Katarzyna;
                      • \r\n\t\t\t\t
                      • Krawczak Olga;
                      • \r\n\t\t\t\t
                      • Krawczyk Marianna;
                      • \r\n\t\t\t\t
                      • Kur Natalia;
                      • \r\n\t\t\t\t
                      • Kwiatek Marta;
                      • \r\n\r\n\t\t\t\t
                      • La\u015bkiewicz Joanna;
                      • \r\n\t\t\t\t
                      • Machczy\u0144ska Daria;
                      • \r\n\t\t\t\t
                      • Miecznikowska Izabela;
                      • \r\n\t\t\t\t
                      • Moczulska Karolina;
                      • \r\n\t\t\t\t
                      • Mo\u015bcicka Aneta;
                      • \r\n\t\t\t\t
                      • Narloch Sabina;
                      • \r\n\r\n\t\t\t\t
                      • Przybysz Pawe\u0142;
                      • \r\n\t\t\t\t
                      • Puchta Marek;
                      • \r\n\t\t\t\t
                      • Ryska Cezary;
                      • \r\n\t\t\t\t
                      • Sandomierski Bart\u0142omiej;
                      • \r\n\t\t\t\t
                      • S\u0142awi\u0144ski Tomasz;
                      • \r\n\t\t\t\t
                      • S\u0142owik Olga;
                      • \r\n\r\n\t\t\t\t
                      • Starzycka Katarzyna;
                      • \r\n\t\t\t\t
                      • Strzelczak Karolina;
                      • \r\n\t\t\t\t
                      • Szafran Danuta;
                      • \r\n\t\t\t\t
                      • Szmigielska Magdalena;
                      • \r\n\t\t\t\t
                      • Szulkowska Alicja;
                      • \r\n\t\t\t\t
                      • \u015alusarczyk Anna;
                      • \r\n\r\n\t\t\t\t
                      • Tytkowska Anna.
                      • \r\n\t\t\t
                      \r\n\t\t\t
                    4. \r\n\t\t\t\t

                      \r\n\t\t\t\t\tAutorskie Niepubliczne Liceum Og\u00f3lnokszta\u0142c\u0105ce nr\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; klasa pierwsza\r\n\t\t\t\t\to profilu og\u00f3lnym pod opiek\u0105 Micha\u0142a Friedricha:\r\n\t\t\t\t

                      \r\n\r\n\t\t\t\t
                        \r\n\t\t\t\t\t
                      • Baraniecka Marta;
                      • \r\n\r\n\t\t\t\t\t
                      • Go\u0142aszewska Ewa;
                      • \r\n\t\t\t\t\t
                      • Kwiatkowski Micha\u0142;
                      • \r\n\t\t\t\t\t
                      • Machnikowska Monika;
                      • \r\n\t\t\t\t\t
                      • Pietrzak Bartosz;
                      • \r\n\t\t\t\t\t
                      • Przespolewski Przemys\u0142aw;
                      • \r\n\t\t\t\t\t
                      • Rosi\u0144ska Zuzanna;
                      • \r\n\r\n\t\t\t\t\t
                      • Sibiga Magdalena.
                      • \r\n\t\t\t\t
                      \r\n\t\t\t
                    5. \r\n\t\t\t
                    6. \r\n\t\t\t\t

                      \r\n\t\t\t\t\tLXIV Liceum Og\u00f3lnokszta\u0142c\u0105ce im. St. I. Witkiewicza,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; klasa pierwsza o\r\n\t\t\t\t\tprofilu og\u00f3lnym pod opiek\u0105 Daniela Zycha:\r\n\t\t\t\t

                      \r\n\r\n\t\t\t\t
                        \r\n\r\n\t\t\t\t\t
                      • Andrzejczak Kamil;
                      • \r\n\t\t\t\t\t
                      • Czubaj Konrad;
                      • \r\n\t\t\t\t\t
                      • Dr\u0105gowska Katarzyna;
                      • \r\n\t\t\t\t\t
                      • Gajewska Magdalena;
                      • \r\n\t\t\t\t\t
                      • G\u0142owacki Jan;
                      • \r\n\t\t\t\t\t
                      • Grad Pawe\u0142;
                      • \r\n\r\n\t\t\t\t\t
                      • Hnatowski Bartek;
                      • \r\n\t\t\t\t\t
                      • Karwowski Marcin;
                      • \r\n\t\t\t\t\t
                      • K\u0142os Aneta;
                      • \r\n\t\t\t\t\t
                      • Kozie\u0142 Barbara;
                      • \r\n\t\t\t\t\t
                      • Koz\u0142owska Anna;
                      • \r\n\t\t\t\t\t
                      • Krug Pamela;
                      • \r\n\r\n\t\t\t\t\t
                      • Krzosek Jakub;
                      • \r\n\t\t\t\t\t
                      • Luba\u015b Micha\u0142;
                      • \r\n\t\t\t\t\t
                      • Masewicz Natalia;
                      • \r\n\t\t\t\t\t
                      • Mastalerz Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Modelska Marta;
                      • \r\n\t\t\t\t\t
                      • Nowak Aleksandra;
                      • \r\n\r\n\t\t\t\t\t
                      • Pabian Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Paszkowska Aleksandra;
                      • \r\n\t\t\t\t\t
                      • Pielat Zofia;
                      • \r\n\t\t\t\t\t
                      • Poniecka Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Pytlak Urszula;
                      • \r\n\t\t\t\t\t
                      • Rosa Karolina;
                      • \r\n\r\n\t\t\t\t\t
                      • Smyczy\u0144ska Kamila;
                      • \r\n\t\t\t\t\t
                      • Stoli\u0144ska Barbara;
                      • \r\n\t\t\t\t\t
                      • Szyma\u0144ska Katarzyna;
                      • \r\n\t\t\t\t\t
                      • \u015acibior Ewa;
                      • \r\n\t\t\t\t\t
                      • Witczak Magda;
                      • \r\n\t\t\t\t\t
                      • Witkowska Justyna;
                      • \r\n\r\n\t\t\t\t\t
                      • Wyrzykowska Jowita;
                      • \r\n\t\t\t\t\t
                      • Zi\u00f3\u0142kowska Adrianna.
                      • \r\n\t\t\t\t
                      \r\n\t\t\t
                    7. \r\n\t \r\n\t
                    \r\n", + "right_column_lt": "\t

                    Autoriai

                    \r\n\r\n\t
                      \r\n\t\t
                    1. \r\n\t\t\t

                      \r\n\t\t\t\tGimnazija nr 40 Lenkijos Armijos Kovojan\u010dios Grup\u0117s \u201eKRYBAR\u201d vardo Mokykl\u0173 Kompleksas nr 69,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; antra klas\u0117 globojama mokytojos\r\n\t\t\t\tAnny Budziarek-Friedrich:\r\n\t\t\t

                      \r\n\r\n\t\t\t
                        \r\n\t\t\t\t
                      • Burdon Filip;
                      • \r\n\r\n\t\t\t\t
                      • D\u0119bski Bartek;
                      • \r\n\t\t\t\t
                      • Jackowicz Kamil;
                      • \r\n\t\t\t\t
                      • Kurek Pawe\u0142;
                      • \r\n\t\t\t\t
                      • Makles Bartosz;
                      • \r\n\t\t\t\t
                      • Markiewicz Jeremiasz;
                      • \r\n\t\t\t\t
                      • Migda\u0142 Katarzyna;
                      • \r\n\r\n\t\t\t\t
                      • Mioduszewski Micha\u0142;
                      • \r\n\t\t\t\t
                      • Pfeiffer Ida;
                      • \r\n\t\t\t\t
                      • P\u0142askowicka Karolina;
                      • \r\n\t\t\t\t
                      • Sailer Ewa.
                      • \r\n\t\t\t
                      \r\n\t\t
                    2. \r\n\r\n\t\t
                    3. \r\n\t\t\t

                      \r\n\t\t\t\tXXXIII Miko\u0142ojaus Koperniko Bendrojo Lavinimo Licejus\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; pirma klas\u0117 biologijos chemijos profiliuos,\r\n\t\t\t\tglobojama mokytojos El\u017cbiety Konkowskiej:\r\n\t\t\t

                      \r\n\r\n\t\t\t
                        \r\n\t\t\t\t
                      • Chwil Bart\u0142omiej;
                      • \r\n\t\t\t\t
                      • Czarnecka Natalia;
                      • \r\n\t\t\t\t
                      • Gawro\u0144ska Iga;
                      • \r\n\r\n\t\t\t\t
                      • Grabarczyk Marta;
                      • \r\n\t\t\t\t
                      • Jastrz\u0105b Katarzyna;
                      • \r\n\t\t\t\t
                      • Krawczak Olga;
                      • \r\n\t\t\t\t
                      • Krawczyk Marianna;
                      • \r\n\t\t\t\t
                      • Kur Natalia;
                      • \r\n\t\t\t\t
                      • Kwiatek Marta;
                      • \r\n\r\n\t\t\t\t
                      • La\u015bkiewicz Joanna;
                      • \r\n\t\t\t\t
                      • Machczy\u0144ska Daria;
                      • \r\n\t\t\t\t
                      • Miecznikowska Izabela;
                      • \r\n\t\t\t\t
                      • Moczulska Karolina;
                      • \r\n\t\t\t\t
                      • Mo\u015bcicka Aneta;
                      • \r\n\t\t\t\t
                      • Narloch Sabina;
                      • \r\n\r\n\t\t\t\t
                      • Przybysz Pawe\u0142;
                      • \r\n\t\t\t\t
                      • Puchta Marek;
                      • \r\n\t\t\t\t
                      • Ryska Cezary;
                      • \r\n\t\t\t\t
                      • Sandomierski Bart\u0142omiej;
                      • \r\n\t\t\t\t
                      • S\u0142awi\u0144ski Tomasz;
                      • \r\n\t\t\t\t
                      • S\u0142owik Olga;
                      • \r\n\r\n\t\t\t\t
                      • Starzycka Katarzyna;
                      • \r\n\t\t\t\t
                      • Strzelczak Karolina;
                      • \r\n\t\t\t\t
                      • Szafran Danuta;
                      • \r\n\t\t\t\t
                      • Szmigielska Magdalena;
                      • \r\n\t\t\t\t
                      • Szulkowska Alicja;
                      • \r\n\t\t\t\t
                      • \u015alusarczyk Anna;
                      • \r\n\r\n\t\t\t\t
                      • Tytkowska Anna.
                      • \r\n\t\t\t
                      \r\n\t\t\t
                    4. \r\n\t\t\t\t

                      \r\n\t\t\t\t \tPrivatus Bendrojo Lavinimo Lic\u0117jus nr\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; \r\n\t\t\t\t\tpirma klas\u0117 bendra s profilius,\r\n\t\t\t \tglobojama mokytojaus Micha\u0142 Friedrich\r\n\t\t\t\t\t\r\n\t\t\t\t

                      \r\n\r\n\t\t\t\t
                        \r\n\t\t\t\t\t
                      • Baraniecka Marta;
                      • \r\n\r\n\t\t\t\t\t
                      • Go\u0142aszewska Ewa;
                      • \r\n\t\t\t\t\t
                      • Kwiatkowski Micha\u0142;
                      • \r\n\t\t\t\t\t
                      • Machnikowska Monika;
                      • \r\n\t\t\t\t\t
                      • Pietrzak Bartosz;
                      • \r\n\t\t\t\t\t
                      • Przespolewski Przemys\u0142aw;
                      • \r\n\t\t\t\t\t
                      • Rosi\u0144ska Zuzanna;
                      • \r\n\r\n\t\t\t\t\t
                      • Sibiga Magdalena.
                      • \r\n\t\t\t\t
                      \r\n\t\t\t
                    5. \r\n\t\t\t
                    6. \r\n\t\t\t\t

                      \r\n\t\t\t\t\tLXIV St. I. Witkiewicz Bendrojo Lavinimo Licejus\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; pirma klas\u0117 bendras profilius,\r\n\t\t\t \tglobojama mokytojaus Daniel Zych:\r\n\t\t\t\t

                      \r\n\r\n\t\t\t\t
                        \r\n\r\n\t\t\t\t\t
                      • Andrzejczak Kamil;
                      • \r\n\t\t\t\t\t
                      • Czubaj Konrad;
                      • \r\n\t\t\t\t\t
                      • Dr\u0105gowska Katarzyna;
                      • \r\n\t\t\t\t\t
                      • Gajewska Magdalena;
                      • \r\n\t\t\t\t\t
                      • G\u0142owacki Jan;
                      • \r\n\t\t\t\t\t
                      • Grad Pawe\u0142;
                      • \r\n\r\n\t\t\t\t\t
                      • Hnatowski Bartek;
                      • \r\n\t\t\t\t\t
                      • Karwowski Marcin;
                      • \r\n\t\t\t\t\t
                      • K\u0142os Aneta;
                      • \r\n\t\t\t\t\t
                      • Kozie\u0142 Barbara;
                      • \r\n\t\t\t\t\t
                      • Koz\u0142owska Anna;
                      • \r\n\t\t\t\t\t
                      • Krug Pamela;
                      • \r\n\r\n\t\t\t\t\t
                      • Krzosek Jakub;
                      • \r\n\t\t\t\t\t
                      • Luba\u015b Micha\u0142;
                      • \r\n\t\t\t\t\t
                      • Masewicz Natalia;
                      • \r\n\t\t\t\t\t
                      • Mastalerz Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Modelska Marta;
                      • \r\n\t\t\t\t\t
                      • Nowak Aleksandra;
                      • \r\n\r\n\t\t\t\t\t
                      • Pabian Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Paszkowska Aleksandra;
                      • \r\n\t\t\t\t\t
                      • Pielat Zofia;
                      • \r\n\t\t\t\t\t
                      • Poniecka Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Pytlak Urszula;
                      • \r\n\t\t\t\t\t
                      • Rosa Karolina;
                      • \r\n\r\n\t\t\t\t\t
                      • Smyczy\u0144ska Kamila;
                      • \r\n\t\t\t\t\t
                      • Stoli\u0144ska Barbara;
                      • \r\n\t\t\t\t\t
                      • Szyma\u0144ska Katarzyna;
                      • \r\n\t\t\t\t\t
                      • \u015acibior Ewa;
                      • \r\n\t\t\t\t\t
                      • Witczak Magda;
                      • \r\n\t\t\t\t\t
                      • Witkowska Justyna;
                      • \r\n\r\n\t\t\t\t\t
                      • Wyrzykowska Jowita;
                      • \r\n\t\t\t\t\t
                      • Zi\u00f3\u0142kowska Adrianna.
                      • \r\n\t\t\t\t
                      \r\n\t\t\t
                    7. \r\n\t \r\n\t
                    ", + "left_column_lt": "

                    Savanoriai

                    \r\n\t

                    \r\n\t\tAutori\u0173 biografijos ir literat\u016brinis r\u016b\u0161i\u0173 apra\u0161ymus \r\n\t\tinternetin\u0117je bibliotekoje Laisvoji Literat\u016bra paruo\u0161\u0117 mokiniai\r\n\t\ti\u0161 keturi\u0173 mokykl\u0173 seminarijos \u201eLik savanoriu kad su\u017einoti daugiau\u201d.\r\n\t

                    \r\n\r\n\t

                    \r\n\t\tMokiniai dirbo visi kartu globojami mokytoj\u0173 ir literat\u016bros \u017einov\u0173.\r\n\t\t\r\n\r\n\t\t\tinternetine platforma viki\r\n\t\tparuo\u0161ta grup\u0117s\r\n\t\t2ia. Kuriant apra\u0161ymus naudojo kompiuterius, internet\u0105 tam kad\r\n\t\t surasti informacij\u0105 ir patikrinti jos tik\u0117tinum\u0105.\r\n\t

                    \r\n\r\n\t

                    \r\n\t\tProjektas \"Lik savanoriu kad su\u017einoti daugiau\" buvo \u012fvykdytas\r\n\t\t d\u0117ka\r\n\t\t\r\n\t\t\tMinisterstwa Edukacji Narodowej. Dovanas mokiniams \u012fsteig\u0117\r\n\t\t\r\n\r\n\t\t\tLeidykla M\u016bs\u016b Knygynas\r\n\t\ti\r\n\t\tWydawnictwo Helion. Patikrinta servise.\r\n\t\t\r\n\t\t\tPlagiat.pl.\r\n\t

                    \r\n\r\n\t

                    \r\n\t\tRaportas suristas su \u012fgyvendinimu projekto \u201eLik savanoriu kad su\u017einoti daugiau\".\r\n\t

                    \r\n\r\n\t

                    \r\n\t\r\n\t\r\n\t\r\n \r\n \r\n\t

                    ", + "title_fr": "B\u00e9n\u00e9volat pour le savoir", + "right_column_ru": "\t

                    \u0410\u0432\u0442\u043e\u0440\u044b

                    \r\n\r\n\t
                      \r\n\t\t
                    1. \r\n\t\t\t

                      \r\n\t\t\t\t\u0413\u0438\u043c\u043d\u0430\u0437\u0438\u0439 \u043d\u043e\u043c\u0435\u0440 40 \u0441 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0435\r\n\t\t\t\t\u0448\u043a\u043e\u043b \u043d\u043e\u043c\u0435\u0440 69 \u0438\u043c. \u0410\u0440\u0438\u043c\u0438\u0438 \u043a\u0440\u0430\u0439\u043e\u0432\u043e\u0439 \u0431\u043e\u0435\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c\r\n\t\t\t\tAnny Budziarek-Friedrich:\r\n\t\t\t

                      \r\n\r\n\t\t\t
                        \r\n\t\t\t\t
                      • Burdon Filip;
                      • \r\n\r\n\t\t\t\t
                      • D\u0119bski Bartek;
                      • \r\n\t\t\t\t
                      • Jackowicz Kamil;
                      • \r\n\t\t\t\t
                      • Kurek Pawe\u0142;
                      • \r\n\t\t\t\t
                      • Makles Bartosz;
                      • \r\n\t\t\t\t
                      • Markiewicz Jeremiasz;
                      • \r\n\t\t\t\t
                      • Migda\u0142 Katarzyna;
                      • \r\n\r\n\t\t\t\t
                      • Mioduszewski Micha\u0142;
                      • \r\n\t\t\t\t
                      • Pfeiffer Ida;
                      • \r\n\t\t\t\t
                      • P\u0142askowicka Karolina;
                      • \r\n\t\t\t\t
                      • Sailer Ewa.
                      • \r\n\t\t\t
                      \r\n\t\t
                    2. \r\n\r\n\t\t
                    3. \r\n\t\t\t

                      \r\n\t\t\t\tXXXIII \u041e\u0431\u0449\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u0446\u0435\u0439 \u0438\u043c. \u041d\u0438\u043a\u043e\u043b\u0430\u044f \u041a\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0431\u0438\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e-\u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e\r\n\t\t\t\t\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c El\u017cbiety Konkowskiej:\r\n\t\t\t

                      \r\n\r\n\t\t\t
                        \r\n\t\t\t\t
                      • Chwil Bart\u0142omiej;
                      • \r\n\t\t\t\t
                      • Czarnecka Natalia;
                      • \r\n\t\t\t\t
                      • Gawro\u0144ska Iga;
                      • \r\n\r\n\t\t\t\t
                      • Grabarczyk Marta;
                      • \r\n\t\t\t\t
                      • Jastrz\u0105b Katarzyna;
                      • \r\n\t\t\t\t
                      • Krawczak Olga;
                      • \r\n\t\t\t\t
                      • Krawczyk Marianna;
                      • \r\n\t\t\t\t
                      • Kur Natalia;
                      • \r\n\t\t\t\t
                      • Kwiatek Marta;
                      • \r\n\r\n\t\t\t\t
                      • La\u015bkiewicz Joanna;
                      • \r\n\t\t\t\t
                      • Machczy\u0144ska Daria;
                      • \r\n\t\t\t\t
                      • Miecznikowska Izabela;
                      • \r\n\t\t\t\t
                      • Moczulska Karolina;
                      • \r\n\t\t\t\t
                      • Mo\u015bcicka Aneta;
                      • \r\n\t\t\t\t
                      • Narloch Sabina;
                      • \r\n\r\n\t\t\t\t
                      • Przybysz Pawe\u0142;
                      • \r\n\t\t\t\t
                      • Puchta Marek;
                      • \r\n\t\t\t\t
                      • Ryska Cezary;
                      • \r\n\t\t\t\t
                      • Sandomierski Bart\u0142omiej;
                      • \r\n\t\t\t\t
                      • S\u0142awi\u0144ski Tomasz;
                      • \r\n\t\t\t\t
                      • S\u0142owik Olga;
                      • \r\n\r\n\t\t\t\t
                      • Starzycka Katarzyna;
                      • \r\n\t\t\t\t
                      • Strzelczak Karolina;
                      • \r\n\t\t\t\t
                      • Szafran Danuta;
                      • \r\n\t\t\t\t
                      • Szmigielska Magdalena;
                      • \r\n\t\t\t\t
                      • Szulkowska Alicja;
                      • \r\n\t\t\t\t
                      • \u015alusarczyk Anna;
                      • \r\n\r\n\t\t\t\t
                      • Tytkowska Anna.
                      • \r\n\t\t\t
                      \r\n\t\t\t
                    4. \r\n\t\t\t\t

                      \r\n\t\t\t\t\t\u0410\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0439 \u043d\u0435\u043f\u0443\u0431\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0431\u0449\u0435\u043e\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u0446\u0435\u0439 \u043d\u043e\u043c\u0435\u0440\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa;\u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\r\n\t\t\t\t\t\u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c Micha\u0142a Friedricha:\r\n\t\t\t\t

                      \r\n\r\n\t\t\t\t
                        \r\n\t\t\t\t\t
                      • Baraniecka Marta;
                      • \r\n\r\n\t\t\t\t\t
                      • Go\u0142aszewska Ewa;
                      • \r\n\t\t\t\t\t
                      • Kwiatkowski Micha\u0142;
                      • \r\n\t\t\t\t\t
                      • Machnikowska Monika;
                      • \r\n\t\t\t\t\t
                      • Pietrzak Bartosz;
                      • \r\n\t\t\t\t\t
                      • Przespolewski Przemys\u0142aw;
                      • \r\n\t\t\t\t\t
                      • Rosi\u0144ska Zuzanna;
                      • \r\n\r\n\t\t\t\t\t
                      • Sibiga Magdalena.
                      • \r\n\t\t\t\t
                      \r\n\t\t\t
                    5. \r\n\t\t\t
                    6. \r\n\t\t\t\t

                      \r\n\t\t\t\t\tLXIV \u041e\u0431\u0449\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u0446\u0435\u0439 \u0438\u043c. \u0421. \u0418. \u0412\u0438\u0442\u043a\u0435\u0432\u0438\u0447\u0430,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\r\n\t\t\t\t\t\u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c Daniela Zycha:\r\n\t\t\t\t

                      \r\n\r\n\t\t\t\t
                        \r\n\r\n\t\t\t\t\t
                      • Andrzejczak Kamil;
                      • \r\n\t\t\t\t\t
                      • Czubaj Konrad;
                      • \r\n\t\t\t\t\t
                      • Dr\u0105gowska Katarzyna;
                      • \r\n\t\t\t\t\t
                      • Gajewska Magdalena;
                      • \r\n\t\t\t\t\t
                      • G\u0142owacki Jan;
                      • \r\n\t\t\t\t\t
                      • Grad Pawe\u0142;
                      • \r\n\r\n\t\t\t\t\t
                      • Hnatowski Bartek;
                      • \r\n\t\t\t\t\t
                      • Karwowski Marcin;
                      • \r\n\t\t\t\t\t
                      • K\u0142os Aneta;
                      • \r\n\t\t\t\t\t
                      • Kozie\u0142 Barbara;
                      • \r\n\t\t\t\t\t
                      • Koz\u0142owska Anna;
                      • \r\n\t\t\t\t\t
                      • Krug Pamela;
                      • \r\n\r\n\t\t\t\t\t
                      • Krzosek Jakub;
                      • \r\n\t\t\t\t\t
                      • Luba\u015b Micha\u0142;
                      • \r\n\t\t\t\t\t
                      • Masewicz Natalia;
                      • \r\n\t\t\t\t\t
                      • Mastalerz Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Modelska Marta;
                      • \r\n\t\t\t\t\t
                      • Nowak Aleksandra;
                      • \r\n\r\n\t\t\t\t\t
                      • Pabian Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Paszkowska Aleksandra;
                      • \r\n\t\t\t\t\t
                      • Pielat Zofia;
                      • \r\n\t\t\t\t\t
                      • Poniecka Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Pytlak Urszula;
                      • \r\n\t\t\t\t\t
                      • Rosa Karolina;
                      • \r\n\r\n\t\t\t\t\t
                      • Smyczy\u0144ska Kamila;
                      • \r\n\t\t\t\t\t
                      • Stoli\u0144ska Barbara;
                      • \r\n\t\t\t\t\t
                      • Szyma\u0144ska Katarzyna;
                      • \r\n\t\t\t\t\t
                      • \u015acibior Ewa;
                      • \r\n\t\t\t\t\t
                      • Witczak Magda;
                      • \r\n\t\t\t\t\t
                      • Witkowska Justyna;
                      • \r\n\r\n\t\t\t\t\t
                      • Wyrzykowska Jowita;
                      • \r\n\t\t\t\t\t
                      • Zi\u00f3\u0142kowska Adrianna.
                      • \r\n\t\t\t\t
                      \r\n\t\t\t
                    7. \r\n\t \r\n\t
                    ", + "left_column_fr": "

                    B\u00e9n\u00e9volat

                    \r\n\t

                    \r\n\t\tLes histoires de vie des auteurs ainsi que les d\u00e9finitions des \u00e9poques et genres litt\u00e9raires dans la biblioth\u00e8que en ligne Lectures libres ont \u00e9t\u00e9 \u00e9crites par les \u00e9l\u00e8ves des quatre \u00e9coles pendant les ateliers \"B\u00e9n\u00e9volat pour le savoir\"\r\n\t

                    \r\n\r\n\t

                    \r\n\t\tLes \u00e9l\u00e8ves ont travaill\u00e9 ensemble sous la supervision des professeurs et sp\u00e9cialistes \u2013 hommes des lettres sur\r\n\t\t\r\n\r\n\t\tune platforme en ligne wiki\r\n\t\tmise en place par l'\u00e9quipe\r\n\t\t2ia. Le travail sur les fiches comprenait aussi la ma\u00eetrise de l'ordinateur et de l'internet pour chercher des informations, ainsi que pour v\u00e9rifier leur fiabilit\u00e9.\r\n\t

                    \r\n\r\n\t

                    \r\n\t\tLe projet \"B\u00e9n\u00e9volat pour le savoir\" a \u00e9t\u00e9 r\u00e9alis\u00e9 gr\u00e2ce \u00e0 l'appui \t\r\n\t\tdu Minist\u00e8re de l'Education nationale\t. Des r\u00e9compenses pour les \u00e9l\u00e8ves ont \u00e9t\u00e9 fond\u00e9es par \r\n\r\n\t\t\tla Maison d'\u00e9dition Nasza Ksi\u0119garnia\r\n\t\tet\r\n\t\tla Maison d'\u00e9dition Helion. Les fiches ont \u00e9t\u00e9 v\u00e9rifi\u00e9es sur le site\r\n\t\t\r\n\t\t\tPlagiat.pl.\r\n\t

                    \r\n\r\n\t

                    \r\n\t\t Le rapport sur la r\u00e9alisation du projet \"B\u00e9n\u00e9volat pour le savoir\"\r\n.\r\n\t

                    \r\n\r\n\t

                    \r\n\t\r\n\t\r\n\t\r\n \r\n \r\n\t

                    ", + "title": "Volunteering for knowledge", + "title_lt": "Lik savanoriu kad su\u009einoti daugiau", + "right_column": "

                    Authors

                    \r\n\r\n\t
                      \r\n\t\t
                    1. \r\n\t\t\tGimnazjum nr 40 z Oddzia\u0142ami Integracyjnymi w Zespole\r\n\t\t\t\tSzk\u00f3\u0142 nr 69 im. Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; second form attented by\t\t\t\tAnna Budziarek-Friedrich:\r\n\t\t\t

                      \r\n\r\n\t\t\t
                        \r\n\t\t\t\t
                      • Burdon Filip;
                      • \r\n\r\n\t\t\t\t
                      • D\u0119bski Bartek;
                      • \r\n\t\t\t\t
                      • Jackowicz Kamil;
                      • \r\n\t\t\t\t
                      • Kurek Pawe\u0142;
                      • \r\n\t\t\t\t
                      • Makles Bartosz;
                      • \r\n\t\t\t\t
                      • Markiewicz Jeremiasz;
                      • \r\n\t\t\t\t
                      • Migda\u0142 Katarzyna;
                      • \r\n\r\n\t\t\t\t
                      • Mioduszewski Micha\u0142;
                      • \r\n\t\t\t\t
                      • Pfeiffer Ida;
                      • \r\n\t\t\t\t
                      • P\u0142askowicka Karolina;
                      • \r\n\t\t\t\t
                      • Sailer Ewa.
                      • \r\n\t\t\t
                      \r\n\t\t
                    2. \r\n\r\n\t\t
                    3. \r\n\t\t\t

                      \r\n\t\t\t\tXXXIII Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Miko\u0142aja Kopernika,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; first year, biologyoriented class attented by El\u017cbieta Konkowskiej:\r\n\t\t\t

                      \r\n\r\n\t\t\t
                        \r\n\t\t\t\t
                      • Chwil Bart\u0142omiej;
                      • \r\n\t\t\t\t
                      • Czarnecka Natalia;
                      • \r\n\t\t\t\t
                      • Gawro\u0144ska Iga;
                      • \r\n\r\n\t\t\t\t
                      • Grabarczyk Marta;
                      • \r\n\t\t\t\t
                      • Jastrz\u0105b Katarzyna;
                      • \r\n\t\t\t\t
                      • Krawczak Olga;
                      • \r\n\t\t\t\t
                      • Krawczyk Marianna;
                      • \r\n\t\t\t\t
                      • Kur Natalia;
                      • \r\n\t\t\t\t
                      • Kwiatek Marta;
                      • \r\n\r\n\t\t\t\t
                      • La\u015bkiewicz Joanna;
                      • \r\n\t\t\t\t
                      • Machczy\u0144ska Daria;
                      • \r\n\t\t\t\t
                      • Miecznikowska Izabela;
                      • \r\n\t\t\t\t
                      • Moczulska Karolina;
                      • \r\n\t\t\t\t
                      • Mo\u015bcicka Aneta;
                      • \r\n\t\t\t\t
                      • Narloch Sabina;
                      • \r\n\r\n\t\t\t\t
                      • Przybysz Pawe\u0142;
                      • \r\n\t\t\t\t
                      • Puchta Marek;
                      • \r\n\t\t\t\t
                      • Ryska Cezary;
                      • \r\n\t\t\t\t
                      • Sandomierski Bart\u0142omiej;
                      • \r\n\t\t\t\t
                      • S\u0142awi\u0144ski Tomasz;
                      • \r\n\t\t\t\t
                      • S\u0142owik Olga;
                      • \r\n\r\n\t\t\t\t
                      • Starzycka Katarzyna;
                      • \r\n\t\t\t\t
                      • Strzelczak Karolina;
                      • \r\n\t\t\t\t
                      • Szafran Danuta;
                      • \r\n\t\t\t\t
                      • Szmigielska Magdalena;
                      • \r\n\t\t\t\t
                      • Szulkowska Alicja;
                      • \r\n\t\t\t\t
                      • \u015alusarczyk Anna;
                      • \r\n\r\n\t\t\t\t
                      • Tytkowska Anna.
                      • \r\n\t\t\t
                      \r\n\t\t\t
                    4. \r\n\t\t\t\t

                      \r\n\t\t\t\t\tAutorskie Niepubliczne Liceum Og\u00f3lnokszta\u0142c\u0105ce nr\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; first year, general education class attented by Micha\u0142 Friedrich:\r\n\t\t\t\t

                      \r\n\r\n\t\t\t\t
                        \r\n\t\t\t\t\t
                      • Baraniecka Marta;
                      • \r\n\r\n\t\t\t\t\t
                      • Go\u0142aszewska Ewa;
                      • \r\n\t\t\t\t\t
                      • Kwiatkowski Micha\u0142;
                      • \r\n\t\t\t\t\t
                      • Machnikowska Monika;
                      • \r\n\t\t\t\t\t
                      • Pietrzak Bartosz;
                      • \r\n\t\t\t\t\t
                      • Przespolewski Przemys\u0142aw;
                      • \r\n\t\t\t\t\t
                      • Rosi\u0144ska Zuzanna;
                      • \r\n\r\n\t\t\t\t\t
                      • Sibiga Magdalena.
                      • \r\n\t\t\t\t
                      \r\n\t\t\t
                    5. \r\n\t\t\t
                    6. \r\n\t\t\t\t

                      \r\n\t\t\t\t\tLXIV Liceum Og\u00f3lnokszta\u0142c\u0105ce im. St. I. Witkiewicza,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; first year, general education class attented by Daniel Zych:\r\n\t\t\t\t

                      \r\n\r\n\t\t\t\t
                        \r\n\r\n\t\t\t\t\t
                      • Andrzejczak Kamil;
                      • \r\n\t\t\t\t\t
                      • Czubaj Konrad;
                      • \r\n\t\t\t\t\t
                      • Dr\u0105gowska Katarzyna;
                      • \r\n\t\t\t\t\t
                      • Gajewska Magdalena;
                      • \r\n\t\t\t\t\t
                      • G\u0142owacki Jan;
                      • \r\n\t\t\t\t\t
                      • Grad Pawe\u0142;
                      • \r\n\r\n\t\t\t\t\t
                      • Hnatowski Bartek;
                      • \r\n\t\t\t\t\t
                      • Karwowski Marcin;
                      • \r\n\t\t\t\t\t
                      • K\u0142os Aneta;
                      • \r\n\t\t\t\t\t
                      • Kozie\u0142 Barbara;
                      • \r\n\t\t\t\t\t
                      • Koz\u0142owska Anna;
                      • \r\n\t\t\t\t\t
                      • Krug Pamela;
                      • \r\n\r\n\t\t\t\t\t
                      • Krzosek Jakub;
                      • \r\n\t\t\t\t\t
                      • Luba\u015b Micha\u0142;
                      • \r\n\t\t\t\t\t
                      • Masewicz Natalia;
                      • \r\n\t\t\t\t\t
                      • Mastalerz Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Modelska Marta;
                      • \r\n\t\t\t\t\t
                      • Nowak Aleksandra;
                      • \r\n\r\n\t\t\t\t\t
                      • Pabian Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Paszkowska Aleksandra;
                      • \r\n\t\t\t\t\t
                      • Pielat Zofia;
                      • \r\n\t\t\t\t\t
                      • Poniecka Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Pytlak Urszula;
                      • \r\n\t\t\t\t\t
                      • Rosa Karolina;
                      • \r\n\r\n\t\t\t\t\t
                      • Smyczy\u0144ska Kamila;
                      • \r\n\t\t\t\t\t
                      • Stoli\u0144ska Barbara;
                      • \r\n\t\t\t\t\t
                      • Szyma\u0144ska Katarzyna;
                      • \r\n\t\t\t\t\t
                      • \u015acibior Ewa;
                      • \r\n\t\t\t\t\t
                      • Witczak Magda;
                      • \r\n\t\t\t\t\t
                      • Witkowska Justyna;
                      • \r\n\r\n\t\t\t\t\t
                      • Wyrzykowska Jowita;
                      • \r\n\t\t\t\t\t
                      • Zi\u00f3\u0142kowska Adrianna.
                      • \r\n\t\t\t\t
                      \r\n\t\t\t
                    7. \r\n\t \r\n\t
                    ", + "right_column_es": "\t

                    Autores

                    \r\n\r\n\r\n\r\n\t
                      \r\n\r\n\t\t
                    1. \r\n\r\n\t\t\t

                      \r\n\r\n\t\t\t\tGimnazjum nr 40 z Oddzia\u0142ami Integracyjnymi w Zespole\r\n\r\n\t\t\t\tSzk\u00f3\u0142 nr 69 im. Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d,\r\n\r\n\t\t\t\tC/ Drewniana 8, 00-345 Varsovia; segundo curso bajo la supervisi\u00f3n de\r\n\r\n\t\t\t\tAnna Budziarek-Friedrich:\r\n\r\n\t\t\t

                      \r\n\r\n\r\n\r\n\t\t\t
                        \r\n\r\n\t\t\t\t
                      • Burdon Filip;
                      • \r\n\r\n\r\n\r\n\t\t\t\t
                      • D\u0119bski Bartek;
                      • \r\n\r\n\t\t\t\t
                      • Jackowicz Kamil;
                      • \r\n\r\n\t\t\t\t
                      • Kurek Pawe\u0142;
                      • \r\n\r\n\t\t\t\t
                      • Makles Bartosz;
                      • \r\n\r\n\t\t\t\t
                      • Markiewicz Jeremiasz;
                      • \r\n\r\n\t\t\t\t
                      • Migda\u0142 Katarzyna;
                      • \r\n\r\n\r\n\r\n\t\t\t\t
                      • Mioduszewski Micha\u0142;
                      • \r\n\r\n\t\t\t\t
                      • Pfeiffer Ida;
                      • \r\n\r\n\t\t\t\t
                      • P\u0142askowicka Karolina;
                      • \r\n\r\n\t\t\t\t
                      • Sailer Ewa.
                      • \r\n\r\n\t\t\t
                      \r\n\r\n\t\t
                    2. \r\n\r\n\r\n\r\n\t\t
                    3. \r\n\r\n\t\t\t

                      \r\n\r\n\t\t\t\tXXXIII Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Miko\u0142aja Kopernika,\r\n\r\n\t\t\t\tC/ Bema 76, 01-225 Varsovia; primer curso de perfil biol\u00f3gico-qu\u00edmico bajo la supervisi\u00f3n de El\u017cbieta Konkowska:\r\n\r\n\t\t\t

                      \r\n\r\n\r\n\r\n\t\t\t
                        \r\n\r\n\t\t\t\t
                      • Chwil Bart\u0142omiej;
                      • \r\n\r\n\t\t\t\t
                      • Czarnecka Natalia;
                      • \r\n\r\n\t\t\t\t
                      • Gawro\u0144ska Iga;
                      • \r\n\r\n\r\n\r\n\t\t\t\t
                      • Grabarczyk Marta;
                      • \r\n\r\n\t\t\t\t
                      • Jastrz\u0105b Katarzyna;
                      • \r\n\r\n\t\t\t\t
                      • Krawczak Olga;
                      • \r\n\r\n\t\t\t\t
                      • Krawczyk Marianna;
                      • \r\n\r\n\t\t\t\t
                      • Kur Natalia;
                      • \r\n\r\n\t\t\t\t
                      • Kwiatek Marta;
                      • \r\n\r\n\r\n\r\n\t\t\t\t
                      • La\u015bkiewicz Joanna;
                      • \r\n\r\n\t\t\t\t
                      • Machczy\u0144ska Daria;
                      • \r\n\r\n\t\t\t\t
                      • Miecznikowska Izabela;
                      • \r\n\r\n\t\t\t\t
                      • Moczulska Karolina;
                      • \r\n\r\n\t\t\t\t
                      • Mo\u015bcicka Aneta;
                      • \r\n\r\n\t\t\t\t
                      • Narloch Sabina;
                      • \r\n\r\n\r\n\r\n\t\t\t\t
                      • Przybysz Pawe\u0142;
                      • \r\n\r\n\t\t\t\t
                      • Puchta Marek;
                      • \r\n\r\n\t\t\t\t
                      • Ryska Cezary;
                      • \r\n\r\n\t\t\t\t
                      • Sandomierski Bart\u0142omiej;
                      • \r\n\r\n\t\t\t\t
                      • S\u0142awi\u0144ski Tomasz;
                      • \r\n\r\n\t\t\t\t
                      • S\u0142owik Olga;
                      • \r\n\r\n\r\n\r\n\t\t\t\t
                      • Starzycka Katarzyna;
                      • \r\n\r\n\t\t\t\t
                      • Strzelczak Karolina;
                      • \r\n\r\n\t\t\t\t
                      • Szafran Danuta;
                      • \r\n\r\n\t\t\t\t
                      • Szmigielska Magdalena;
                      • \r\n\r\n\t\t\t\t
                      • Szulkowska Alicja;
                      • \r\n\r\n\t\t\t\t
                      • \u015alusarczyk Anna;
                      • \r\n\r\n\r\n\r\n\t\t\t\t
                      • Tytkowska Anna.
                      • \r\n\r\n\t\t\t
                      \r\n\r\n\t\t\t
                    4. \r\n\r\n\t\t\t\t

                      \r\n\r\n\t\t\t\t\tAutorskie Niepubliczne Liceum Og\u00f3lnokszta\u0142c\u0105ce nr\r\n\r\n\t\t\t\t\t42, C/ Iwicka 47 B, 00-735 Varsovia; primer curso\r\n\r\n\t\t\t\t\tbajo la supervisi\u00f3n de Micha\u0142 Friedrich:\r\n\r\n\t\t\t\t

                      \r\n\r\n\r\n\r\n\t\t\t\t
                        \r\n\r\n\t\t\t\t\t
                      • Baraniecka Marta;
                      • \r\n\r\n\r\n\r\n\t\t\t\t\t
                      • Go\u0142aszewska Ewa;
                      • \r\n\r\n\t\t\t\t\t
                      • Kwiatkowski Micha\u0142;
                      • \r\n\r\n\t\t\t\t\t
                      • Machnikowska Monika;
                      • \r\n\r\n\t\t\t\t\t
                      • Pietrzak Bartosz;
                      • \r\n\r\n\t\t\t\t\t
                      • Przespolewski Przemys\u0142aw;
                      • \r\n\r\n\t\t\t\t\t
                      • Rosi\u0144ska Zuzanna;
                      • \r\n\r\n\r\n\r\n\t\t\t\t\t
                      • Sibiga Magdalena.
                      • \r\n\r\n\t\t\t\t
                      \r\n\r\n\t\t\t
                    5. \r\n\r\n\t\t\t
                    6. \r\n\r\n\t\t\t\t

                      \r\n\r\n\t\t\t\t\tLXIV Liceum Og\u00f3lnokszta\u0142c\u0105ce im. St. I. Witkiewicza,\r\n\r\n\t\t\t\t\tC/ Elbl\u0105ska 51, 01-737 Varsovia; primer curso bajo la supervisi\u00f3n de Daniel Zych:\r\n\r\n\t\t\t\t

                      \r\n\r\n\r\n\r\n\t\t\t\t
                        \r\n\r\n\r\n\r\n\t\t\t\t\t
                      • Andrzejczak Kamil;
                      • \r\n\r\n\t\t\t\t\t
                      • Czubaj Konrad;
                      • \r\n\r\n\t\t\t\t\t
                      • Dr\u0105gowska Katarzyna;
                      • \r\n\r\n\t\t\t\t\t
                      • Gajewska Magdalena;
                      • \r\n\r\n\t\t\t\t\t
                      • G\u0142owacki Jan;
                      • \r\n\r\n\t\t\t\t\t
                      • Grad Pawe\u0142;
                      • \r\n\r\n\r\n\r\n\t\t\t\t\t
                      • Hnatowski Bartek;
                      • \r\n\r\n\t\t\t\t\t
                      • Karwowski Marcin;
                      • \r\n\r\n\t\t\t\t\t
                      • K\u0142os Aneta;
                      • \r\n\r\n\t\t\t\t\t
                      • Kozie\u0142 Barbara;
                      • \r\n\r\n\t\t\t\t\t
                      • Koz\u0142owska Anna;
                      • \r\n\r\n\t\t\t\t\t
                      • Krug Pamela;
                      • \r\n\r\n\r\n\r\n\t\t\t\t\t
                      • Krzosek Jakub;
                      • \r\n\r\n\t\t\t\t\t
                      • Luba\u015b Micha\u0142;
                      • \r\n\r\n\t\t\t\t\t
                      • Masewicz Natalia;
                      • \r\n\r\n\t\t\t\t\t
                      • Mastalerz Agnieszka;
                      • \r\n\r\n\t\t\t\t\t
                      • Modelska Marta;
                      • \r\n\r\n\t\t\t\t\t
                      • Nowak Aleksandra;
                      • \r\n\r\n\r\n\r\n\t\t\t\t\t
                      • Pabian Agnieszka;
                      • \r\n\r\n\t\t\t\t\t
                      • Paszkowska Aleksandra;
                      • \r\n\r\n\t\t\t\t\t
                      • Pielat Zofia;
                      • \r\n\r\n\t\t\t\t\t
                      • Poniecka Agnieszka;
                      • \r\n\r\n\t\t\t\t\t
                      • Pytlak Urszula;
                      • \r\n\r\n\t\t\t\t\t
                      • Rosa Karolina;
                      • \r\n\r\n\r\n\r\n\t\t\t\t\t
                      • Smyczy\u0144ska Kamila;
                      • \r\n\r\n\t\t\t\t\t
                      • Stoli\u0144ska Barbara;
                      • \r\n\r\n\t\t\t\t\t
                      • Szyma\u0144ska Katarzyna;
                      • \r\n\r\n\t\t\t\t\t
                      • \u015acibior Ewa;
                      • \r\n\r\n\t\t\t\t\t
                      • Witczak Magda;
                      • \r\n\r\n\t\t\t\t\t
                      • Witkowska Justyna;
                      • \r\n\r\n\r\n\r\n\t\t\t\t\t
                      • Wyrzykowska Jowita;
                      • \r\n\r\n\t\t\t\t\t
                      • Zi\u00f3\u0142kowska Adrianna.
                      • \r\n\r\n\t\t\t\t
                      \r\n\r\n\t\t\t
                    7. \r\n\r\n\t \r\n\r\n\t
                    ", + "right_column_en": "

                    Authors

                    \r\n\r\n\t
                      \r\n\t\t
                    1. \r\n\t\t\tGimnazjum nr 40 z Oddzia\u0142ami Integracyjnymi w Zespole\r\n\t\t\t\tSzk\u00f3\u0142 nr 69 im. Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; second form attented by\t\t\t\tAnna Budziarek-Friedrich:\r\n\t\t\t

                      \r\n\r\n\t\t\t
                        \r\n\t\t\t\t
                      • Burdon Filip;
                      • \r\n\r\n\t\t\t\t
                      • D\u0119bski Bartek;
                      • \r\n\t\t\t\t
                      • Jackowicz Kamil;
                      • \r\n\t\t\t\t
                      • Kurek Pawe\u0142;
                      • \r\n\t\t\t\t
                      • Makles Bartosz;
                      • \r\n\t\t\t\t
                      • Markiewicz Jeremiasz;
                      • \r\n\t\t\t\t
                      • Migda\u0142 Katarzyna;
                      • \r\n\r\n\t\t\t\t
                      • Mioduszewski Micha\u0142;
                      • \r\n\t\t\t\t
                      • Pfeiffer Ida;
                      • \r\n\t\t\t\t
                      • P\u0142askowicka Karolina;
                      • \r\n\t\t\t\t
                      • Sailer Ewa.
                      • \r\n\t\t\t
                      \r\n\t\t
                    2. \r\n\r\n\t\t
                    3. \r\n\t\t\t

                      \r\n\t\t\t\tXXXIII Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Miko\u0142aja Kopernika,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; first year, biologyoriented class attented by El\u017cbieta Konkowskiej:\r\n\t\t\t

                      \r\n\r\n\t\t\t
                        \r\n\t\t\t\t
                      • Chwil Bart\u0142omiej;
                      • \r\n\t\t\t\t
                      • Czarnecka Natalia;
                      • \r\n\t\t\t\t
                      • Gawro\u0144ska Iga;
                      • \r\n\r\n\t\t\t\t
                      • Grabarczyk Marta;
                      • \r\n\t\t\t\t
                      • Jastrz\u0105b Katarzyna;
                      • \r\n\t\t\t\t
                      • Krawczak Olga;
                      • \r\n\t\t\t\t
                      • Krawczyk Marianna;
                      • \r\n\t\t\t\t
                      • Kur Natalia;
                      • \r\n\t\t\t\t
                      • Kwiatek Marta;
                      • \r\n\r\n\t\t\t\t
                      • La\u015bkiewicz Joanna;
                      • \r\n\t\t\t\t
                      • Machczy\u0144ska Daria;
                      • \r\n\t\t\t\t
                      • Miecznikowska Izabela;
                      • \r\n\t\t\t\t
                      • Moczulska Karolina;
                      • \r\n\t\t\t\t
                      • Mo\u015bcicka Aneta;
                      • \r\n\t\t\t\t
                      • Narloch Sabina;
                      • \r\n\r\n\t\t\t\t
                      • Przybysz Pawe\u0142;
                      • \r\n\t\t\t\t
                      • Puchta Marek;
                      • \r\n\t\t\t\t
                      • Ryska Cezary;
                      • \r\n\t\t\t\t
                      • Sandomierski Bart\u0142omiej;
                      • \r\n\t\t\t\t
                      • S\u0142awi\u0144ski Tomasz;
                      • \r\n\t\t\t\t
                      • S\u0142owik Olga;
                      • \r\n\r\n\t\t\t\t
                      • Starzycka Katarzyna;
                      • \r\n\t\t\t\t
                      • Strzelczak Karolina;
                      • \r\n\t\t\t\t
                      • Szafran Danuta;
                      • \r\n\t\t\t\t
                      • Szmigielska Magdalena;
                      • \r\n\t\t\t\t
                      • Szulkowska Alicja;
                      • \r\n\t\t\t\t
                      • \u015alusarczyk Anna;
                      • \r\n\r\n\t\t\t\t
                      • Tytkowska Anna.
                      • \r\n\t\t\t
                      \r\n\t\t\t
                    4. \r\n\t\t\t\t

                      \r\n\t\t\t\t\tAutorskie Niepubliczne Liceum Og\u00f3lnokszta\u0142c\u0105ce nr\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; first year, general education class attented by Micha\u0142 Friedrich:\r\n\t\t\t\t

                      \r\n\r\n\t\t\t\t
                        \r\n\t\t\t\t\t
                      • Baraniecka Marta;
                      • \r\n\r\n\t\t\t\t\t
                      • Go\u0142aszewska Ewa;
                      • \r\n\t\t\t\t\t
                      • Kwiatkowski Micha\u0142;
                      • \r\n\t\t\t\t\t
                      • Machnikowska Monika;
                      • \r\n\t\t\t\t\t
                      • Pietrzak Bartosz;
                      • \r\n\t\t\t\t\t
                      • Przespolewski Przemys\u0142aw;
                      • \r\n\t\t\t\t\t
                      • Rosi\u0144ska Zuzanna;
                      • \r\n\r\n\t\t\t\t\t
                      • Sibiga Magdalena.
                      • \r\n\t\t\t\t
                      \r\n\t\t\t
                    5. \r\n\t\t\t
                    6. \r\n\t\t\t\t

                      \r\n\t\t\t\t\tLXIV Liceum Og\u00f3lnokszta\u0142c\u0105ce im. St. I. Witkiewicza,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; first year, general education class attented by Daniel Zych:\r\n\t\t\t\t

                      \r\n\r\n\t\t\t\t
                        \r\n\r\n\t\t\t\t\t
                      • Andrzejczak Kamil;
                      • \r\n\t\t\t\t\t
                      • Czubaj Konrad;
                      • \r\n\t\t\t\t\t
                      • Dr\u0105gowska Katarzyna;
                      • \r\n\t\t\t\t\t
                      • Gajewska Magdalena;
                      • \r\n\t\t\t\t\t
                      • G\u0142owacki Jan;
                      • \r\n\t\t\t\t\t
                      • Grad Pawe\u0142;
                      • \r\n\r\n\t\t\t\t\t
                      • Hnatowski Bartek;
                      • \r\n\t\t\t\t\t
                      • Karwowski Marcin;
                      • \r\n\t\t\t\t\t
                      • K\u0142os Aneta;
                      • \r\n\t\t\t\t\t
                      • Kozie\u0142 Barbara;
                      • \r\n\t\t\t\t\t
                      • Koz\u0142owska Anna;
                      • \r\n\t\t\t\t\t
                      • Krug Pamela;
                      • \r\n\r\n\t\t\t\t\t
                      • Krzosek Jakub;
                      • \r\n\t\t\t\t\t
                      • Luba\u015b Micha\u0142;
                      • \r\n\t\t\t\t\t
                      • Masewicz Natalia;
                      • \r\n\t\t\t\t\t
                      • Mastalerz Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Modelska Marta;
                      • \r\n\t\t\t\t\t
                      • Nowak Aleksandra;
                      • \r\n\r\n\t\t\t\t\t
                      • Pabian Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Paszkowska Aleksandra;
                      • \r\n\t\t\t\t\t
                      • Pielat Zofia;
                      • \r\n\t\t\t\t\t
                      • Poniecka Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Pytlak Urszula;
                      • \r\n\t\t\t\t\t
                      • Rosa Karolina;
                      • \r\n\r\n\t\t\t\t\t
                      • Smyczy\u0144ska Kamila;
                      • \r\n\t\t\t\t\t
                      • Stoli\u0144ska Barbara;
                      • \r\n\t\t\t\t\t
                      • Szyma\u0144ska Katarzyna;
                      • \r\n\t\t\t\t\t
                      • \u015acibior Ewa;
                      • \r\n\t\t\t\t\t
                      • Witczak Magda;
                      • \r\n\t\t\t\t\t
                      • Witkowska Justyna;
                      • \r\n\r\n\t\t\t\t\t
                      • Wyrzykowska Jowita;
                      • \r\n\t\t\t\t\t
                      • Zi\u00f3\u0142kowska Adrianna.
                      • \r\n\t\t\t\t
                      \r\n\t\t\t
                    7. \r\n\t \r\n\t
                    ", + "left_column_de": "

                    Volontariat

                    \r\n\t

                    \r\n\t\tSchriftsteller-Biographien und Definitionen von Epochen und Literaturgattungen\r\n in der Internetbibliothek Freie Lekt\u00fcren haben unsere Sch\u00fcler aus vier\r\n Schulen w\u00e4hrend Workshops \"Volontariat f\u00fcr Wissen\" geschrieben.\r\n\t

                    \r\n\r\n\t

                    \r\n\t\tDie Sch\u00fcler haben gemeinsam unter Aufsicht der Lehrer\r\n\t\tund Spezialisten -Literaturwissenschaftler - gearbeitet\r\n\t\t\r\n\r\n\t\t\tauf \"wiki\" Internetplattform\r\n\t\tvorbereitet von unserem Team\r\n\t\t2ia. Der Einsatz von Computer und Internet wurde\r\n\t\t- w\u00e4hrend der Arbeiten an Noten - f\u00fcr die Informationssuche und Informationspr\u00fcfung genutzt\r\n\t\tund gleichzeitig als notwendiges Werkzeug in den Lernprozess einbezogen.\r\n\t

                    \r\n \r\n\t

                    \r\n\t\tDas Projekt \"Volontariat f\u00fcr Wissen\" wurde dank der Unterst\u00fctzung umgesetzt, von\r\n\t\t\r\n\t\t\tMinisterium f\u00fcr Bildung. Preise f\u00fcr Sch\u00fcler spendeten\r\n\t\t\r\n\r\n\t\t\tVerlag unsere Buchhandlung\r\n\t\tund\r\n\t\tWydawnictwo Helion. Noten wurden im Service verifiziert\r\n\t\t\r\n\t\t\tPlagiat.pl.\r\n\t

                    \r\n\r\n\t

                    \r\n\t\tder Bericht \u00fcber das Projekt \"Volontariat f\u00fcr Wissen\".\r\n\t

                    \r\n\r\n\t

                    \r\n\t\r\n\t\r\n\t\r\n \r\n \r\n\t

                    \r\n", + "title_uk": "\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0432 \u043e\u0441\u0432\u0456\u0442\u0456", + "right_column_it": null, + "title_pl": "Wolontariat dla wiedzy", + "left_column": "

                    Volunteers

                    \r\n\t

                    Writers' biographical entries as well as periods' and genres'\r\ndefinitions placed on web library Wolne Lektury were written by students from four schools during \"Wolontariat dla wiedzy\" (\"Volunteering for knowledge\") workshops.

                    \r\n The students worked together under the factual guidance of teachers and specialists - literary scholars\r\n\r\n\ton wiki platform\r\n prepared by 2ia team. At the same time the students learnt how to use a computer and the Internet while searching for necessary information how to verify the credibility of the source.

                    \r\n\r\n

                    \r\n\"Wolontariat dla wiedzy\" project was realised thanks to the support of \r\nMinisterstwo Edukacji Narodowej. The rewards for the student were funded by\r\n\r\nWydawnictwo Nasza Ksi\u0119garnia\r\nandWydawnictwo Helion. Each entry was verified on \r\nPlagiat.pl website.\r\n

                    \r\n\r\n

                    \r\n\t\tReport on completion of \"Wolontariat dla wiedzy\" project (PL).\r\n\t

                    \r\n\r\n\t

                    \r\n\t\r\n\t\r\n\t\r\n \r\n \r\n\t

                    ", + "right_column_uk": "

                    \u0410\u0432\u0442\u043e\u0440\u0438

                    \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                    1. \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                      \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0413\u0456\u043c\u043d\u0430\u0437\u0456\u044f \u211640 \u0437 \u0456\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0456\u0439\u043d\u0438\u043c\u0438 \u0432\u0456\u0434\u0434\u0456\u043b\u0430\u043c\u0438 \u0432 \u041a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0456 \u0448\u043a\u0456\u043b \u2116 69 \u0456\u043c\u0435\u043d\u0456 \u0410\u0440\u043c\u0456\u0457 \u041a\u0440\u0430\u0439\u043e\u0432\u043e\u0457 \u0411\u043e\u0439\u043e\u0432\u043e\u0457 \u0413\u0440\u0443\u043f\u0438 \u201c\u041a\u0420\u0418\u0411\u0410\u0420\u201d,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0443\u043b. \u0414\u0440\u0435\u0432\u043d\u044f\u043d\u0430 8, 00-345 \u0412\u0430\u0440\u0448\u0430\u0432\u0430; \u0434\u0440\u0443\u0433\u0438\u0439 \u043a\u043b\u0430\u0441 \u043f\u0456\u0434 \u043e\u043f\u0456\u043a\u043e\u044e \u0410\u043d\u043d\u0438 \u0411\u0443\u0434\u0437\u044f\u0440\u0435\u043a-\u0424\u0440\u0456\u0434\u0440\u0456\u0445:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                      \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                        \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0411\u0443\u0440\u0434\u043e\u043d \u0424\u0456\u043b\u0456\u043f;
                      • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0414\u0435\u043c\u0431\u0441\u044c\u043a\u0456 \u0411\u0430\u0440\u0442\u0435\u043a;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u042f\u0446\u043a\u043e\u0432\u0456\u0447 \u041a\u0430\u043c\u0456\u043b;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041a\u0443\u0440\u0435\u043a \u041f\u0430\u0432\u0435\u043b;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041c\u0430\u043a\u043b\u0435\u0441 \u0411\u0430\u0440\u0442\u043e\u0448;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041c\u0430\u0440\u043a\u0435\u0432\u0456\u0447 \u0404\u0440\u0435\u043c\u044f\u0448;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041c\u0456\u0433\u0434\u0430\u043b \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;
                      • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041c\u0456\u043e\u0434\u0443\u0448\u0435\u0432\u0441\u044c\u043a\u0456 \u041c\u0456\u0445\u0430\u043b;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0424\u0430\u0439\u0444\u0435\u0440 \u0406\u0434\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041f\u043b\u0430\u0441\u043a\u043e\u0432\u0456\u0446\u044c\u043a\u0430 \u041a\u0430\u0440\u043e\u043b\u0456\u043d\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0421\u0430\u0439\u043b\u0435\u0440 \u0415\u0432\u0430.
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                    2. \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                    3. \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                      \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 XXXIII \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u043e\u0441\u0432\u0456\u0442\u043d\u0438\u0439 \u043b\u0456\u0446\u0435\u0439 \u0456\u043c\u0435\u043d\u0456 \u041c\u0438\u043a\u043e\u043b\u0430\u044f \u041a\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0443\u043b. \u0411\u0435\u043c\u0430 76, 01-225 \u0412\u0430\u0440\u0448\u0430\u0432\u0430; \u043f\u0435\u0440\u0448\u0438\u0439 \u043a\u043b\u0430\u0441 \u0431\u0456\u043e\u043b\u043e\u0433\u0456\u0447\u043d\u043e-\u0445\u0456\u043c\u0456\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0456\u043b\u044e \u043f\u0456\u0434 \u043e\u043f\u0456\u043a\u043e\u044e \u0415\u043b\u044c\u0436\u0431\u0454\u0442\u0438 \u041a\u043e\u043d\u043a\u043e\u0432\u0441\u044c\u043a\u043e\u0457 :\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                      \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                        \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0425\u0432\u0456\u043b \u0411\u0430\u0440\u0442\u043b\u043e\u043c\u0454\u0439;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0427\u0430\u0440\u043d\u0435\u0446\u044c\u043a\u0430 \u041d\u0430\u0442\u0430\u043b\u0456\u044f ;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0490\u0430\u0432\u0440\u043e\u043d\u0441\u044c\u043a\u0430 \u0406\u0491\u0430 ;
                      • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0490\u0440\u0430\u0431\u0430\u0440\u0447\u0438\u043a \u041c\u0430\u0440\u0442\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u042f\u0430\u0441\u0442\u0436\u043e\u043c\u0431 \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041a\u0440\u0430\u0432\u0447\u0430\u043a \u041e\u043b\u044c\u0433\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041a\u0440\u0430\u0432\u0447\u0438\u043a \u041c\u0430\u0440\u0456\u0430\u043d\u043d\u0430 ;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041a\u0443\u0440 \u041d\u0430\u0442\u0430\u043b\u0456\u044f;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041a\u0432\u044f\u0442\u0435\u043a \u041c\u0430\u0440\u0442\u0430;
                      • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041b\u0430\u0441\u044c\u043a\u0435\u0432\u0438\u0447 \u0419\u043e\u0430\u043d\u043d\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041c\u0430\u0445\u0447\u0438\u043d\u0441\u044c\u043a\u0430 \u0414\u0430\u0440\u0456\u044f;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041c\u0454\u0447\u043d\u0456\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u0406\u0437\u0430\u0431\u0435\u043b\u044f;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041c\u043e\u0447\u0443\u043b\u0441\u044c\u043a\u0430 \u041a\u0430\u0440\u043e\u043b\u0456\u043d\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041c\u043e\u0441\u044c\u0446\u0456\u0446\u043a\u0430 \u0410\u043d\u0435\u0442\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041d\u0430\u0440\u043b\u043e\u0445 \u0421\u0430\u0431\u0456\u043d\u0430;
                      • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041f\u0448\u0438\u0431\u0438\u0448 \u041f\u0430\u0432\u0435\u043b;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041f\u0443\u0445\u0442\u0430 \u041c\u0430\u0440\u0435\u043a;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0420\u0438\u0441\u043a\u0430 \u0426\u0435\u0437\u0430\u0440\u0438;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0421\u0430\u043d\u0434\u043e\u043c\u0454\u0440\u0441\u044c\u043a\u0456 \u0411\u0430\u0440\u043b\u043e\u043c\u0454\u0439;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0421\u043b\u0430\u0432\u0456\u043d\u0441\u044c\u043a\u0456 \u0422\u043e\u043c\u0430\u0448;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0421\u043b\u043e\u0432\u0456\u043a \u041e\u043b\u044c\u0433\u0430;
                      • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0421\u0442\u0430\u0436\u0438\u0446\u044c\u043a\u0430 \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0421\u0442\u0436\u0435\u043b\u0447\u0430\u043a \u041a\u0430\u0440\u043e\u043b\u0456\u043d\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0428\u0430\u0444\u0440\u0430\u043d \u0414\u0430\u043d\u0443\u0442\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0428\u043c\u0456\u0491\u0454\u043b\u044c\u0441\u044c\u043a\u0430 \u041c\u0430\u0491\u0434\u0430\u043b\u0435\u043d\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0428\u0443\u043b\u043a\u043e\u0432\u0430\u0441\u044c\u043a\u0430 \u0410\u043b\u0456\u0446\u0456\u044f;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0421\u044c\u043b\u0443\u0441\u0430\u0440\u0447\u0438\u043a \u0410\u043d\u043d\u0430;
                      • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0422\u0438\u0442\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u00a0\u0410\u043d\u043d\u0430.
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                    4. \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                      \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0410\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u0439 \u041d\u0435\u043f\u0443\u0431\u043b\u0456\u0447\u043d\u0438\u0439 \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u043e\u0441\u0432\u0456\u0442\u043d\u0456\u0439 \u041b\u0456\u0446\u0435\u0439 \u2116 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 42, \u0432\u0443\u043b. \u0406\u0432\u0456\u0446\u044c\u043a\u0430 47 B, 00-735 \u0412\u0430\u0440\u0448\u0430\u0432\u0430; \u043f\u0435\u0440\u0448\u0438\u0439 \u043a\u043b\u0430\u0441 \u0437\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0456\u043b\u044e \u043f\u0456\u0434 \u043e\u043f\u0456\u043a\u043e\u044e \u041c\u0456\u0445\u0430\u043b\u0430 \u0424\u0440\u0456\u0434\u0440\u0456\u0445\u0430:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                      \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                        \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0411\u0430\u0440\u0430\u043d\u0454\u0446\u044c\u043a\u0430 \u041c\u0430\u0440\u0442\u0430;
                      • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0490\u043e\u043b\u0430\u0448\u0435\u0432\u0441\u044c\u043a\u0430 \u0415\u0432\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041a\u0432\u044f\u0442\u043a\u043e\u0432\u0441\u044c\u043a\u0456 \u041c\u0456\u0445\u0430\u043b;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041c\u0430\u0445\u043d\u0456\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u041c\u043e\u043d\u0456\u043a\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041f\u0454\u0442\u0436\u0430\u043a \u0411\u0430\u0440\u0442\u043e\u0448;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041f\u0448\u0435\u0441\u043f\u043e\u043b\u0435\u0432\u0441\u044c\u043a\u0456 \u041f\u0448\u0435\u043c\u0438\u0441\u043b\u0430\u0432;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0420\u043e\u0441\u0456\u043d\u0441\u044c\u043a\u0430 \u0417\u0443\u0437\u0430\u043d\u043d\u0430;
                      • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0421\u0456\u0431\u0456\u0491\u0430 \u041c\u0430\u0491\u0434\u0430\u043b\u0435\u043d\u0430.
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                    5. \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                    6. \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                      \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LXIV \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u043e\u0441\u0432\u0456\u0442\u043d\u0456\u0439 \u041b\u0456\u0446\u0435\u0439 \u0456\u043c\u0435\u043d\u0456 \u0421\u0442.\u0406. \u0412\u0456\u0442\u043a\u0454\u0432\u0456\u0447\u0430,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0443\u043b. \u0415\u043b\u044c\u0431\u043b\u043e\u043d\u0437\u044c\u043a\u0430 51, 01-737 \u0412\u0430\u0440\u0448\u0430\u0432\u0430; \u043f\u0435\u0440\u0448\u0438\u0439 \u043a\u043b\u0430\u0441 \u0437\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0456\u043b\u044e \u043f\u0456\u0434 \u043e\u043f\u0456\u043a\u043e\u044e \u0414\u0430\u043d\u0454\u043b\u0430 \u0417\u0438\u0445\u0430:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0

                      \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                        \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0410\u043d\u0434\u0436\u0435\u0439\u0447\u0430\u043a \u041a\u0430\u043c\u0456\u043b;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0427\u0443\u0431\u0430\u0439 \u041a\u043e\u043d\u0440\u0430\u0434;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0414\u0440\u043e\u043d\u0491\u043e\u0432\u0441\u044c\u043a\u0430 \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0490\u0430\u0454\u0432\u0441\u044c\u043a\u0430 \u041c\u0430\u0491\u0434\u0430\u043b\u0435\u043d\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0490\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u0456 \u042f\u043d;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0490\u0440\u0430\u0434 \u00a0\u041f\u0430\u0432\u0435\u043b;
                      • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0413\u043d\u0430\u0442\u043e\u0432\u0441\u044c\u043a\u0456 \u0411\u0430\u0440\u0442\u0435\u043a;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041a\u0430\u0440\u0432\u043e\u0432\u0441\u044c\u043a\u0456 \u041c\u0430\u0440\u0446\u0456\u043d;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041a\u043b\u043e\u0441 \u0410\u043d\u0435\u0442\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041a\u043e\u0437\u0454\u043b \u0411\u0430\u0440\u0431\u0430\u0440\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041a\u043e\u0437\u043b\u043e\u0432\u0441\u044c\u043a\u0430 \u0410\u043d\u043d\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041a\u0440\u0443\u0491 \u041f\u0430\u043c\u0435\u043b\u0430;
                      • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041a\u0436\u043e\u0441\u0435\u043a \u042f\u043a\u0443\u0431;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041b\u0443\u0431\u0430\u0441\u044c \u041c\u0456\u0445\u0430\u043b;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041c\u0430\u0441\u0435\u0432\u0456\u0447 \u041d\u0430\u0442\u0430\u043b\u0456\u044f;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041c\u0430\u0441\u0442\u0430\u043b\u0435\u0436 \u0410\u0491\u043d\u0454\u0448\u043a\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041c\u043e\u0434\u0435\u043b\u044c\u0441\u044c\u043a\u0430 \u041c\u0430\u0440\u0442\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041d\u043e\u0432\u0430\u043a \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430;
                      • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041f\u0430\u0431\u044f\u043d \u0410\u0491\u043d\u0454\u0448\u043a\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041f\u0430\u0448\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041f\u0454\u043b\u0430\u0442 \u0417\u043e\u0444\u0456\u044f;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041f\u043e\u043d\u0454\u0446\u044c\u043a\u0430 \u0410\u0491\u043d\u0454\u0448\u043a\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u041f\u0438\u0442\u043b\u0430\u043a \u0423\u0440\u0448\u0443\u043b\u044f;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0420\u043e\u0441\u0430 \u041a\u0430\u0440\u043e\u043b\u0456\u043d\u0430;
                      • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0421\u043c\u0447\u0438\u043d\u0441\u044c\u043a\u0430 \u041a\u0430\u043c\u0456\u043b\u044f;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0421\u0442\u043e\u043b\u0456\u043d\u0441\u044c\u043a\u0430 \u0411\u0430\u0440\u0431\u0430\u0440\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0428\u0438\u043c\u0430\u043d\u0441\u044c\u043a\u0430 \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0421\u044c\u0446\u0456\u0431\u043e\u0440 \u0415\u0432\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0412\u0456\u0442\u0447\u0430\u043a \u041c\u0430\u0491\u0434\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0412\u0456\u0442\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u042e\u0441\u0442\u0438\u043d\u0430;
                      • \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0412\u0438\u0436\u0438\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u0419\u043e\u0432\u0456\u0442\u0430;
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      • \u0417\u044e\u043b\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u0410\u0434\u0440\u0456\u0430\u043d\u043d\u0430.
                      • \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                      \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0
                    7. \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0
                    ", + "title_en": "Volunteering for knowledge", + "left_column_pl": "

                    Wolontariat

                    \r\n\t

                    \r\n\t\tBiogramy pisarzy oraz definicje epok i gatunk\u00f3w literackich w\r\n\t\tbibliotece internetowej Wolne Lektury napisali uczniowie\r\n\t\tczterech szk\u00f3\u0142 podczas warsztat\u00f3w \u201eWolontariat dla wiedzy\u201d.\r\n\t

                    \r\n\r\n\t

                    \r\n\t\tUczniowie pracowali wsp\u00f3lnie pod merytorycznym nadzorem\r\n\t\tnauczycieli i specjalist\u00f3w \u2013 literaturoznawc\u00f3w na\r\n\t\t\r\n\r\n\t\t\tplatformie internetowej wiki\r\n\t\tprzygotowanej przez zesp\u00f3\u0142\r\n\t\t2ia. Praca nad notami by\u0142a jednocze\u015bnie nauk\u0105 wykorzystywania\r\n\t\tkomputer\u00f3w i internetu do wyszukiwania informacji, a tak\u017ce\r\n\t\tweryfikowania ich wiarygodno\u015bci.\r\n\t

                    \r\n\r\n\t

                    \r\n\t\tProjekt \"Wolontariat dla wiedzy\" zosta\u0142 zrealizowany dzi\u0119ki\r\n\t\twsparciu\r\n\t\t\r\n\t\t\tMinisterstwa Edukacji Narodowej. Nagrody dla uczni\u00f3w ufundowali\r\n\t\t\r\n\r\n\t\t\tWydawnictwo Nasza Ksi\u0119garnia\r\n\t\ti\r\n\t\tWydawnictwo Helion. Noty zweryfikowano w serwisie\r\n\t\t\r\n\t\t\tPlagiat.pl.\r\n\t

                    \r\n\r\n\t

                    \r\n\t\tRaport z realizacji projektu \u201eWolontariat dla wiedzy\".\r\n\t

                    \r\n\r\n\t

                    \r\n\t\r\n\t\r\n\t\r\n \r\n \r\n\t

                    \r\n", + "left_column_it": null, + "title_es": "Voluntariado para el conocimiento", + "left_column_ru": "

                    \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e

                    \r\n\r\n

                    \u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0435 \u043d\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u042d\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\r\n \u043b\u0438\u0448\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043d\u0430\u0448\u0438\u043c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c-\u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c.

                    \r\n\r\n \r\n

                    \u041c\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0448\u043a\u043e\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Wolne Lektury \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u043c\u0438.

                    \r\n \r\n

                    \u041c\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443 \u043f\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0442\u0435\u043a\u0441\u0442\u043e\u0432: \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u0438\r\n \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443. \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438, \u0442\u0430\u043a \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438.\r\n \u041e\u043d\u0438, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u043c\u0438, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u044e\u0442 \u0443\u0447\u0435\u0431\u0443 \u0438 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0432 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u0443\u0448\u0430\u043d\u0438\u044f (\u0442.\u043d.\r\n \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433). \u041c\u044b \u0432\u044b\u0434\u0430\u0435\u043c \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u044b \u0438 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0430\u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \r\n \u0438 \u043a\u0430\u043a\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u043e\u043c \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \r\n \u0444\u043e\u043d\u0434\u0430. \u0423\u0447\u0435\u0431\u0430, \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0449\u0438\u0435 \u0438\u0445 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435\r\n \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0441\u043b\u0443\u0436\u0431\u0435.

                    \r\n\r\n \r\n

                    \u0427\u0442\u043e \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?

                    \r\n \r\n

                    \u0421\u0430\u043c\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u0412 \u0442\u0435\u043a\u0441\u0442\u0430\u0445, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u043c\u0438 \u0438\u0437 \u041d\u0430\u0440\u043e\u0434\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \r\n \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u043e\u0441\u043a\u0438, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u043e \u043a \u0443\u0447\u0435\u043d\u0438\u043a\u0430\u043c, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432 \u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0437\u0432\u0443\u0447\u0438\u0442 \u0430\u043d\u0430\u0445\u0440\u043e\u043d\u0438\u0447\u043d\u043e.\r\n \u041f\u0440\u0435\u0436\u043d\u0438\u0435 \u0438\u0437\u0434\u0430\u043d\u0438\u044f (\u0440\u0435\u0436\u0438\u043c \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0430) \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440. \u043f\u043e \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0438\u043b\u0438 \u0444\u043b\u0435\u043a\u0441\u0438\u0438. \u041f\u0440\u0438\u0447\u0435\u043c, \u043c\u044b \u0437\u0430\u0431\u043e\u0442\u0438\u043c\u0441\u044f \u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438\r\n \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \"\u043d\u0430\u0441\u043a\u0432\u043e\u0437\u044c\".\r\n \u0412\u043e \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0445 \u0441\u0432\u043e\u044e \u043f\u043e\u043c\u043e\u0449\u044c \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b - \u0443\u0447\u0438\u0442\u0435\u043b\u044f \u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b, \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u0432\u043e\u0438 \u0441\u043e\u0432\u0435\u0442\u044b \u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f\r\n \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439.

                    \r\n \r\n

                    \u041a\u0430\u043a \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0432 \u043d\u0430\u0448 \u0444\u043e\u043d\u0434?

                    \r\n \r\n

                    \u0412\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0441\u0438\u043c \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0438-\u043c\u0435\u0439\u043b \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 fundacja@nowoczesnapolska.org.pl.

                    \r\n\r\n

                    \u041c\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Wolne Lektury, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u043c.

                    \r\n", + "slug": "voluntary_services", + "right_column_de": "\t

                    Autoren

                    \r\n\r\n\t
                      \r\n\t\t
                    1. \r\n\t\t\t

                      \r\n\t\t\t\tGymnasium Nr. 40 mit Integrationsabteilungen \r\n\t\t\t\tSchulverbund Nr. 69 Schulname: Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d, \r\n\t\t\t\tStr. Drewniana 8, 00-345 Warszawa; 2. Klasse\r\n\t\t\t\tKlassenlehrerin: Anna Budziarek-Friedrich:\r\n\t\t\t

                      \r\n\r\n\t\t\t
                        \r\n\t\t\t\t
                      • Burdon Filip;
                      • \r\n\r\n\t\t\t\t
                      • D\u0119bski Bartek;
                      • \r\n\t\t\t\t
                      • Jackowicz Kamil;
                      • \r\n\t\t\t\t
                      • Kurek Pawe\u0142;
                      • \r\n\t\t\t\t
                      • Makles Bartosz;
                      • \r\n\t\t\t\t
                      • Markiewicz Jeremiasz;
                      • \r\n\t\t\t\t
                      • Migda\u0142 Katarzyna;
                      • \r\n\r\n\t\t\t\t
                      • Mioduszewski Micha\u0142;
                      • \r\n\t\t\t\t
                      • Pfeiffer Ida;
                      • \r\n\t\t\t\t
                      • P\u0142askowicka Karolina;
                      • \r\n\t\t\t\t
                      • Sailer Ewa.
                      • \r\n\t\t\t
                      \r\n\t\t
                    2. \r\n\r\n\t\t
                    3. \r\n\t\t\t

                      \r\n\t\t\t\tXXXIII Kopernikus Oberschule,\r\n\t\t\t\tStr. Bema 76, 01-225 Warszawa; 1. Klasse; \r\n\t\t\t\tFachbereiche: Biologie-Chemie; Klassenlehrerin: El\u017cbieta Konkowska:\r\n\t\t\t

                      \r\n\r\n\t\t\t
                        \r\n\t\t\t\t
                      • Chwil Bart\u0142omiej;
                      • \r\n\t\t\t\t
                      • Czarnecka Natalia;
                      • \r\n\t\t\t\t
                      • Gawro\u0144ska Iga;
                      • \r\n\r\n\t\t\t\t
                      • Grabarczyk Marta;
                      • \r\n\t\t\t\t
                      • Jastrz\u0105b Katarzyna;
                      • \r\n\t\t\t\t
                      • Krawczak Olga;
                      • \r\n\t\t\t\t
                      • Krawczyk Marianna;
                      • \r\n\t\t\t\t
                      • Kur Natalia;
                      • \r\n\t\t\t\t
                      • Kwiatek Marta;
                      • \r\n\r\n\t\t\t\t
                      • La\u015bkiewicz Joanna;
                      • \r\n\t\t\t\t
                      • Machczy\u0144ska Daria;
                      • \r\n\t\t\t\t
                      • Miecznikowska Izabela;
                      • \r\n\t\t\t\t
                      • Moczulska Karolina;
                      • \r\n\t\t\t\t
                      • Mo\u015bcicka Aneta;
                      • \r\n\t\t\t\t
                      • Narloch Sabina;
                      • \r\n\r\n\t\t\t\t
                      • Przybysz Pawe\u0142;
                      • \r\n\t\t\t\t
                      • Puchta Marek;
                      • \r\n\t\t\t\t
                      • Ryska Cezary;
                      • \r\n\t\t\t\t
                      • Sandomierski Bart\u0142omiej;
                      • \r\n\t\t\t\t
                      • S\u0142awi\u0144ski Tomasz;
                      • \r\n\t\t\t\t
                      • S\u0142owik Olga;
                      • \r\n\r\n\t\t\t\t
                      • Starzycka Katarzyna;
                      • \r\n\t\t\t\t
                      • Strzelczak Karolina;
                      • \r\n\t\t\t\t
                      • Szafran Danuta;
                      • \r\n\t\t\t\t
                      • Szmigielska Magdalena;
                      • \r\n\t\t\t\t
                      • Szulkowska Alicja;
                      • \r\n\t\t\t\t
                      • \u015alusarczyk Anna;
                      • \r\n\r\n\t\t\t\t
                      • Tytkowska Anna.
                      • \r\n\t\t\t
                      \r\n\t\t\t
                    4. \r\n\t\t\t\t

                      \r\n\t\t\t\t\tPrivate Oberschule Nr 42,\r\n\t\t\t\t\tStr. Iwicka 47 B, 00-735 Warszawa; 1. Klasse\r\n\t\t\t\t\tFachbereich: Allgemeinbildung; Klassenlehrer: Micha\u0142 Friedrich:\r\n\t\t\t\t

                      \r\n\r\n\t\t\t\t
                        \r\n\t\t\t\t\t
                      • Baraniecka Marta;
                      • \r\n\r\n\t\t\t\t\t
                      • Go\u0142aszewska Ewa;
                      • \r\n\t\t\t\t\t
                      • Kwiatkowski Micha\u0142;
                      • \r\n\t\t\t\t\t
                      • Machnikowska Monika;
                      • \r\n\t\t\t\t\t
                      • Pietrzak Bartosz;
                      • \r\n\t\t\t\t\t
                      • Przespolewski Przemys\u0142aw;
                      • \r\n\t\t\t\t\t
                      • Rosi\u0144ska Zuzanna;
                      • \r\n\r\n\t\t\t\t\t
                      • Sibiga Magdalena.
                      • \r\n\t\t\t\t
                      \r\n\t\t\t
                    5. \r\n\t\t\t
                    6. \r\n\t\t\t\t

                      \r\n\t\t\t\t\tLXIV Witkiewicz Oberschule,\r\n\t\t\t\t\tStr. Elbl\u0105ska 51, 01-737 Warszawa; 1. Klasse, \r\n\t\t\t\t\tFachbereich: Allgemeinbildung; Klassenlehrer: Daniel Zych:\r\n\t\t\t\t

                      \r\n\r\n\t\t\t\t
                        \r\n\r\n\t\t\t\t\t
                      • Andrzejczak Kamil;
                      • \r\n\t\t\t\t\t
                      • Czubaj Konrad;
                      • \r\n\t\t\t\t\t
                      • Dr\u0105gowska Katarzyna;
                      • \r\n\t\t\t\t\t
                      • Gajewska Magdalena;
                      • \r\n\t\t\t\t\t
                      • G\u0142owacki Jan;
                      • \r\n\t\t\t\t\t
                      • Grad Pawe\u0142;
                      • \r\n\r\n\t\t\t\t\t
                      • Hnatowski Bartek;
                      • \r\n\t\t\t\t\t
                      • Karwowski Marcin;
                      • \r\n\t\t\t\t\t
                      • K\u0142os Aneta;
                      • \r\n\t\t\t\t\t
                      • Kozie\u0142 Barbara;
                      • \r\n\t\t\t\t\t
                      • Koz\u0142owska Anna;
                      • \r\n\t\t\t\t\t
                      • Krug Pamela;
                      • \r\n\r\n\t\t\t\t\t
                      • Krzosek Jakub;
                      • \r\n\t\t\t\t\t
                      • Luba\u015b Micha\u0142;
                      • \r\n\t\t\t\t\t
                      • Masewicz Natalia;
                      • \r\n\t\t\t\t\t
                      • Mastalerz Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Modelska Marta;
                      • \r\n\t\t\t\t\t
                      • Nowak Aleksandra;
                      • \r\n\r\n\t\t\t\t\t
                      • Pabian Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Paszkowska Aleksandra;
                      • \r\n\t\t\t\t\t
                      • Pielat Zofia;
                      • \r\n\t\t\t\t\t
                      • Poniecka Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Pytlak Urszula;
                      • \r\n\t\t\t\t\t
                      • Rosa Karolina;
                      • \r\n\r\n\t\t\t\t\t
                      • Smyczy\u0144ska Kamila;
                      • \r\n\t\t\t\t\t
                      • Stoli\u0144ska Barbara;
                      • \r\n\t\t\t\t\t
                      • Szyma\u0144ska Katarzyna;
                      • \r\n\t\t\t\t\t
                      • \u015acibior Ewa;
                      • \r\n\t\t\t\t\t
                      • Witczak Magda;
                      • \r\n\t\t\t\t\t
                      • Witkowska Justyna;
                      • \r\n\r\n\t\t\t\t\t
                      • Wyrzykowska Jowita;
                      • \r\n\t\t\t\t\t
                      • Zi\u00f3\u0142kowska Adrianna.
                      • \r\n\t\t\t\t
                      \r\n\t\t\t
                    7. \r\n\t \r\n\t
                    \r\n", + "left_column_es": "

                    Voluntariado

                    \r\n\r\n\t

                    \r\n\r\n\t\tBiograf\u00edas de escritores y definiciones de las \u00e9pocas y g\u00e9neros literarios en la biblioteca virtual de Wolne Lektury fueron escritas por estudiantes de cuatro escuelas durante los talleres \u201cVoluntariado para el conocimiento\u201d.

                    \r\n\r\n\r\n\r\n\t

                    \r\n\r\n\t\tLos estudiantes trabajaron juntos bajo la supervisi\u00f3n de profesores y especialistas-fil\u00f3logos en\r\n\r\n\t\t\r\n\r\n\r\n\r\n\t\t\tla plataforma virtual wiki \r\n\r\n\t\tpreparada por el equipo\r\n\r\n\t\t2ia. Gracias a este trabajo los estudiantes aprendieron a usar los ordenadores e internet para encontrar informaciones y verificar si se les puede confiar.\t

                    \r\n\r\n\r\n\r\n\t

                    \r\n\r\n\t\tEl proyecto \"Voluntariado para el conocimiento\" se pudo realizar gracias al apoyo del\t\t\r\n\r\n\t\t\tMinisterio de la Educaci\u00f3n Nacional. Los premios para los estudiantes fueron fundados por\r\n\r\n\t\t\r\n\r\n\r\n\r\n\t\t\tEditorial Nasza Ksi\u0119garnia\r\n\r\n\t\ty\r\n\r\n\t\tEditorial Helion. Las notas fueron verificadas en la p\u00e1gina\r\n\r\n\t\t\r\n\r\n\t\t\tPlagiat.pl.\r\n\r\n\t

                    \r\n\r\n\r\n\r\n\t

                    \r\n\r\n\t\t El informe de la realizaci\u00f3n del proyecto \u201cVoluntariado para el conocimiento\u201d.\r\n\r\n\t

                    \r\n\r\n\r\n\r\n\t

                    \r\n\r\n\t\r\n\r\n\t\r\n\r\n\t\r\n\r\n \r\n\r\n \r\n\r\n\t

                    ", + "left_column_en": "

                    Volunteers

                    \r\n\t

                    Writers' biographical entries as well as periods' and genres'\r\ndefinitions placed on web library Wolne Lektury were written by students from four schools during \"Wolontariat dla wiedzy\" (\"Volunteering for knowledge\") workshops.

                    \r\n The students worked together under the factual guidance of teachers and specialists - literary scholars\r\n\r\n\ton wiki platform\r\n prepared by 2ia team. At the same time the students learnt how to use a computer and the Internet while searching for necessary information how to verify the credibility of the source.

                    \r\n\r\n

                    \r\n\"Wolontariat dla wiedzy\" project was realised thanks to the support of \r\nMinisterstwo Edukacji Narodowej. The rewards for the student were funded by\r\n\r\nWydawnictwo Nasza Ksi\u0119garnia\r\nandWydawnictwo Helion. Each entry was verified on \r\nPlagiat.pl website.\r\n

                    \r\n\r\n

                    \r\n\t\tReport on completion of \"Wolontariat dla wiedzy\" project (PL).\r\n\t

                    \r\n\r\n\t

                    \r\n\t\r\n\t\r\n\t\r\n \r\n \r\n\t

                    ", + "right_column_fr": "\t

                    Auteurs

                    \r\n\r\n\t
                      \r\n\t\t
                    1. \r\n\t\t\t

                      \r\n\t\t\t\tColl\u00e8ge no. 40 avec classes d'int\u00e9gration dans l'Ensemble Scolaire no. 69 de Armia Krajowa Grupa Bojowa \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; classe seconde sous la supervision de\r\n\tAnna Budziarek-Friedrich:\r\n\t\t\t

                      \r\n\r\n\t\t\t
                        \r\n\t\t\t\t
                      • Burdon Filip;
                      • \r\n\r\n\t\t\t\t
                      • D\u0119bski Bartek;
                      • \r\n\t\t\t\t
                      • Jackowicz Kamil;
                      • \r\n\t\t\t\t
                      • Kurek Pawe\u0142;
                      • \r\n\t\t\t\t
                      • Makles Bartosz;
                      • \r\n\t\t\t\t
                      • Markiewicz Jeremiasz;
                      • \r\n\t\t\t\t
                      • Migda\u0142 Katarzyna;
                      • \r\n\r\n\t\t\t\t
                      • Mioduszewski Micha\u0142;
                      • \r\n\t\t\t\t
                      • Pfeiffer Ida;
                      • \r\n\t\t\t\t
                      • P\u0142askowicka Karolina;
                      • \r\n\t\t\t\t
                      • Sailer Ewa.
                      • \r\n\t\t\t
                      \r\n\t\t
                    2. \r\n\r\n\t\t
                    3. \r\n\t\t\t

                      \r\n\t\t\t\tXXXIII Lyc\u00e9e g\u00e9n\u00e9ral de Miko\u0142aj Kopernik,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; classe premi\u00e8re, orientation biologie-chimique\r\n sous la supervision de El\u017cbieta Konkowska:\r\n\t\t\t

                      \r\n\r\n\t\t\t
                        \r\n\t\t\t\t
                      • Chwil Bart\u0142omiej;
                      • \r\n\t\t\t\t
                      • Czarnecka Natalia;
                      • \r\n\t\t\t\t
                      • Gawro\u0144ska Iga;
                      • \r\n\r\n\t\t\t\t
                      • Grabarczyk Marta;
                      • \r\n\t\t\t\t
                      • Jastrz\u0105b Katarzyna;
                      • \r\n\t\t\t\t
                      • Krawczak Olga;
                      • \r\n\t\t\t\t
                      • Krawczyk Marianna;
                      • \r\n\t\t\t\t
                      • Kur Natalia;
                      • \r\n\t\t\t\t
                      • Kwiatek Marta;
                      • \r\n\r\n\t\t\t\t
                      • La\u015bkiewicz Joanna;
                      • \r\n\t\t\t\t
                      • Machczy\u0144ska Daria;
                      • \r\n\t\t\t\t
                      • Miecznikowska Izabela;
                      • \r\n\t\t\t\t
                      • Moczulska Karolina;
                      • \r\n\t\t\t\t
                      • Mo\u015bcicka Aneta;
                      • \r\n\t\t\t\t
                      • Narloch Sabina;
                      • \r\n\r\n\t\t\t\t
                      • Przybysz Pawe\u0142;
                      • \r\n\t\t\t\t
                      • Puchta Marek;
                      • \r\n\t\t\t\t
                      • Ryska Cezary;
                      • \r\n\t\t\t\t
                      • Sandomierski Bart\u0142omiej;
                      • \r\n\t\t\t\t
                      • S\u0142awi\u0144ski Tomasz;
                      • \r\n\t\t\t\t
                      • S\u0142owik Olga;
                      • \r\n\r\n\t\t\t\t
                      • Starzycka Katarzyna;
                      • \r\n\t\t\t\t
                      • Strzelczak Karolina;
                      • \r\n\t\t\t\t
                      • Szafran Danuta;
                      • \r\n\t\t\t\t
                      • Szmigielska Magdalena;
                      • \r\n\t\t\t\t
                      • Szulkowska Alicja;
                      • \r\n\t\t\t\t
                      • \u015alusarczyk Anna;
                      • \r\n\r\n\t\t\t\t
                      • Tytkowska Anna.
                      • \r\n\t\t\t
                      \r\n\t\t\t
                    4. \r\n\t\t\t\t

                      \r\n\t\t\t\t\tLyc\u00e9e priv\u00e9 g\u00e9n\u00e9ral no. 42, ul. Iwicka 47 B, 00-735 Warszawa; classe premi\u00e8re, orientation g\u00e9n\u00e9rale, sous la supervision de Micha\u0142 Friedrich:\r\n\t\t\t\t

                      \r\n\r\n\t\t\t\t
                        \r\n\t\t\t\t\t
                      • Baraniecka Marta;
                      • \r\n\r\n\t\t\t\t\t
                      • Go\u0142aszewska Ewa;
                      • \r\n\t\t\t\t\t
                      • Kwiatkowski Micha\u0142;
                      • \r\n\t\t\t\t\t
                      • Machnikowska Monika;
                      • \r\n\t\t\t\t\t
                      • Pietrzak Bartosz;
                      • \r\n\t\t\t\t\t
                      • Przespolewski Przemys\u0142aw;
                      • \r\n\t\t\t\t\t
                      • Rosi\u0144ska Zuzanna;
                      • \r\n\r\n\t\t\t\t\t
                      • Sibiga Magdalena.
                      • \r\n\t\t\t\t
                      \r\n\t\t\t
                    5. \r\n\t\t\t
                    6. \r\n\t\t\t\t

                      \r\n\t\t\t\t\tLXIV Lyc\u00e9e g\u00e9n\u00e9ral de St. I. Witkiewicz,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; classe premi\u00e8re, orientation g\u00e9n\u00e9rale, sous la supervision de Daniel Zych:\r\n\t\t\t\t

                      \r\n\r\n\t\t\t\t
                        \r\n\r\n\t\t\t\t\t
                      • Andrzejczak Kamil;
                      • \r\n\t\t\t\t\t
                      • Czubaj Konrad;
                      • \r\n\t\t\t\t\t
                      • Dr\u0105gowska Katarzyna;
                      • \r\n\t\t\t\t\t
                      • Gajewska Magdalena;
                      • \r\n\t\t\t\t\t
                      • G\u0142owacki Jan;
                      • \r\n\t\t\t\t\t
                      • Grad Pawe\u0142;
                      • \r\n\r\n\t\t\t\t\t
                      • Hnatowski Bartek;
                      • \r\n\t\t\t\t\t
                      • Karwowski Marcin;
                      • \r\n\t\t\t\t\t
                      • K\u0142os Aneta;
                      • \r\n\t\t\t\t\t
                      • Kozie\u0142 Barbara;
                      • \r\n\t\t\t\t\t
                      • Koz\u0142owska Anna;
                      • \r\n\t\t\t\t\t
                      • Krug Pamela;
                      • \r\n\r\n\t\t\t\t\t
                      • Krzosek Jakub;
                      • \r\n\t\t\t\t\t
                      • Luba\u015b Micha\u0142;
                      • \r\n\t\t\t\t\t
                      • Masewicz Natalia;
                      • \r\n\t\t\t\t\t
                      • Mastalerz Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Modelska Marta;
                      • \r\n\t\t\t\t\t
                      • Nowak Aleksandra;
                      • \r\n\r\n\t\t\t\t\t
                      • Pabian Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Paszkowska Aleksandra;
                      • \r\n\t\t\t\t\t
                      • Pielat Zofia;
                      • \r\n\t\t\t\t\t
                      • Poniecka Agnieszka;
                      • \r\n\t\t\t\t\t
                      • Pytlak Urszula;
                      • \r\n\t\t\t\t\t
                      • Rosa Karolina;
                      • \r\n\r\n\t\t\t\t\t
                      • Smyczy\u0144ska Kamila;
                      • \r\n\t\t\t\t\t
                      • Stoli\u0144ska Barbara;
                      • \r\n\t\t\t\t\t
                      • Szyma\u0144ska Katarzyna;
                      • \r\n\t\t\t\t\t
                      • \u015acibior Ewa;
                      • \r\n\t\t\t\t\t
                      • Witczak Magda;
                      • \r\n\t\t\t\t\t
                      • Witkowska Justyna;
                      • \r\n\r\n\t\t\t\t\t
                      • Wyrzykowska Jowita;
                      • \r\n\t\t\t\t\t
                      • Zi\u00f3\u0142kowska Adrianna.
                      • \r\n\t\t\t\t
                      \r\n\t\t\t
                    7. \r\n\t \r\n\t
                    \r\n", + "title_ru": "\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0437\u043d\u0430\u043d\u0438\u0439", + "title_it": null + } + }, + { + "pk": 3, + "model": "infopages.infopage", + "fields": { + "title_de": "\u00dcber das Projekt", + "left_column_uk": "\ufeff{% load reporting_stats %}\r\n\r\n

                    Wolne Lektury \u0446\u0435 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0430 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0430 24 \u0433\u043e\u0434\u0438\u043d\u0438 \u043d\u0430 \u0434\u043e\u0431\u0443, 365 \u0434\u043d\u0456\u0432 \u0432 \u0440\u043e\u0446\u0456 \u0456 \u043f\u043e\u0432\u043d\u0456\u0441\u0442\u044e \u0431\u0435\u0437\u043a\u043e\u0448\u0442\u043e\u0432\u043d\u0430. \u0412 \u0457\u0457 \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0457 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f {% count_books %} \u0442\u0432\u043e\u0440\u0456\u0432, \u0432 \u0442\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0456 \u0431\u0430\u0433\u0430\u0442\u043e \u0448\u043a\u0456\u043b\u044c\u043d\u043e\u0457 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0438, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043e\u0457 \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u043e\u043c \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u043e\u0441\u0432\u0456\u0442\u0438, \u044f\u043a\u0430 \u0443\u0432\u0456\u0439\u0448\u043b\u0430 \u0432\u0436\u0435 \u0434\u043e \u0441\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0434\u0431\u0430\u043d\u043d\u044f. \u0423\u0441\u0456 \u0442\u0432\u043e\u0440\u0438 \u0441\u0442\u0430\u0440\u0430\u043d\u043d\u043e \u043e\u043f\u0440\u0430\u0446\u044c\u043e\u0432\u0430\u043d\u0456 - \u0434\u043e \u043d\u0438\u0445 \u0434\u043e\u0434\u0430\u044e\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0438, \u043c\u043e\u0442\u0438\u0432\u0438 \u0456 \u043d\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u0432 \u0434\u0435\u043a\u0456\u043b\u044c\u043a\u043e\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 - HTML , TXT , PDF, EPUB, MOBI. \u0423 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 \u043c\u043e\u0436\u043d\u0430 \u0442\u0430\u043a\u043e\u0436 \u0437\u043d\u0430\u0439\u0442\u0438 \u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u043e\u0442\u0435\u043d\u044c \u0430\u0443\u0434\u0456\u043e\u043a\u043d\u0438\u0433 \u0443 \u0432\u0438\u043a\u043e\u043d\u0430\u043d\u043d\u0456 \u0442\u0430\u043a\u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u0456\u0432 \u044f\u043a: \u0414\u0430\u043d\u0443\u0442\u0430 \u0421\u0442\u0435\u043d\u043a\u0430, \u042f\u043d \u041f\u0435\u0448\u0435\u043a \u0447\u0438 \u0410\u043d\u0434\u0436\u0435\u0439 \u0425\u0438\u0440\u0430. \u041c\u043e\u0436\u043d\u0430 \u0457\u0445 \u0441\u043b\u0443\u0445\u0430\u0442\u0438 \u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 MP3 i Ogg Vorbis. \u0410\u0443\u0434\u0456\u043e\u043a\u043d\u0438\u0433\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0456 \u0442\u0430\u043a\u043e\u0436 \u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0456 DAISY , \u044f\u043a\u0438\u0439 \u043f\u0440\u0438\u0441\u0442\u043e\u0441\u043e\u0432\u0430\u043d\u0438\u0439 \u0434\u043b\u044f \u0441\u043b\u0430\u0431\u043e\u0437\u043e\u0440\u0438\u0445 \u0442\u0430 \u0441\u043b\u0456\u043f\u0438\u0445 \u043e\u0441\u0456\u0431, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0434\u043b\u044f \u0442\u0438\u0445, \u0445\u0442\u043e \u043c\u0430\u0454 \u0442\u0440\u0443\u0434\u043d\u043e\u0449\u0456 \u0437 \u0447\u0438\u0442\u0430\u043d\u043d\u044f\u043c.

                    \r\n\r\n

                    \u0411\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0430 Wolne Lektury \u0442\u0430\u043a\u043e\u0436 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0445 \u0430\u043f\u043b\u0456\u043a\u0430\u0446\u0456\u0439 \u2013 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0456 Android, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0456 iOS.

                    \r\n\r\n

                    \u0423\u0441\u0456 \u0442\u0432\u043e\u0440\u0438 \u0440\u043e\u0437\u043c\u0456\u0449\u0435\u043d\u0456 \u0443 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 Wolne Lektury \u043c\u043e\u0436\u043d\u0430 \u043b\u0435\u0433\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0430\u0442\u0438, \u0441\u043b\u0443\u0445\u0430\u0442\u0438, \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0443\u0432\u0430\u0442\u0438 \u043d\u0430 \u0432\u043b\u0430\u0441\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u2019\u044e\u0442\u0435\u0440, \u043d\u0430\u0434\u0430\u0432\u0430\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u043d\u0438\u0445 \u0456\u043d\u0448\u0438\u043c \u0442\u0430 \u0446\u0438\u0442\u0443\u0432\u0430\u0442\u0438.

                    \r\n", + "main_page": 1, + "right_column_pl": "

                    Wolne Lektury to projekt fundacji Nowoczesna Polska realizowany pro publico bono, we wsp\u00f3\u0142pracy z Bibliotek\u0105 Narodow\u0105, Bibliotek\u0105 \u015alask\u0105 oraz Bibliotek\u0105 Elbl\u0105sk\u0105 pod patronatem Ministerstwa Edukacji Narodowej, Ministerstwa Kultury i Dziedzictwa Narodowego oraz Stowarzyszenia Pisarzy Polskich. W Komitecie Honorowym Wolnych Lektur zasiadaj\u0105: prof. Maria Janion, prof. Gra\u017cyna Borkowska, prof. Przemys\u0142aw Czapli\u0144ski, prof. Mieczys\u0142aw D\u0105browski, prof. Ewa Kraskowska, prof. Ma\u0142gorzata Czermi\u0144ska, prof. Jerzy Jarz\u0119bski i prof. Piotr \u015aliwi\u0144ski.

                    \r\n\r\n

                    Wi\u0119kszo\u015b\u0107 utwor\u00f3w w bibliotece nie jest chroniona prawem autorskim i znajduje si\u0119 w domenie publicznej, co oznacza \u017ce mo\u017cna je swobodnie publikowa\u0107 i rozpowszechnia\u0107. Je\u015bli utw\u00f3r opatrzony jest dodatkowymi materia\u0142ami (przypisy, motywy literackie etc.), kt\u00f3re podlegaj\u0105 prawu autorskiemu, to te dodatkowe materia\u0142y udost\u0119pnione s\u0105 na licencji Uznanie autorstwa-Na tych samych warunkach 3.0. Publikujemy r\u00f3wnie\u017c kilka utwor\u00f3w, kt\u00f3re autorzy lub spadkobiercy praw udost\u0119pnili na wolnej licencji Uznanie autorstwa-Na tych samych warunkach 3.0.

                    \r\n\r\nKontakt: wolnelektury@nowoczesnapolska.org.pl", + "right_column_lt": "\ufeff\r\n

                    Wolne Lektury - tai fondo \u0160iuolaikin\u0117 Lenkija \u012fgyvendinamas pro publico bono projektas, bendradarbiaujant su Nacionaline biblioteka, Silezijos biblioteka bei Elbingo biblioteka ir remiamas Nacionalinio \u0161vietimo ministerijos, Kult\u016bros ir nacionalinio paveldo ministerijos bei Lenkijos ra\u0161ytoj\u0173 asociacijos. Wolne Lektury Garb\u0117s komiteto nariai: prof. Maria Janion, prof. Gra\u017cyna Borkowska, prof. Przemys\u0142aw Czapli\u0144ski, prof. Mieczys\u0142aw D\u0105browski, prof. Ewa Kraskowska, prof. Ma\u0142gorzata Czermi\u0144ska, prof. Jerzy Jarz\u0119bski ir prof. Piotr \u015aliwi\u0144ski.

                    \r\n\r\n

                    Dauguma \u0161ios bibliotekos k\u016brini\u0173 n\u0117ra autorini\u0173 teisi\u0173 saugomi ir yra vie\u0161ai prieinami, tai rei\u0161kia, kad gali b\u016bti laisvai naudojami bei platinami. Jei su k\u016briniu yra pateikiamos bet kokios papildomos autorini\u0173 teisi\u0173 saugomos med\u017eiagos (kaip pastabos, motyvai ir t.t.), tai \u0161ios med\u017eiagos yra prieinamos pagal licencj\u0105 Autoryst\u0117s pripa\u017einimas \u2013 pagal tas pa\u010dias s\u0105lygas 3.0. Publikuojami taip pat keli k\u016briniai, autori\u0173 ir teisi\u0173 \u012fp\u0117dini\u0173 pateikti pagal laisv\u0105 licencij\u0105 Autoryst\u0117s pripa\u017einimas \u2013 pagal tas pa\u010dias s\u0105lygas 3.0.

                    \r\n\r\nKontaktas: wolnelektury@nowoczesnapolska.org.pl\r\n\r\n", + "left_column_lt": "\ufeff{% load reporting_stats %}\r\n\t\r\n

                    Wolne Lektury tai visi\u0161kai nemokama internetin\u0117 biblioteka dirbanti 24 valandas per par\u0105, 365 dienas per metus. Jos rinkinyje yra {% count_books %} k\u016brinys/iai/i\u0173, tarp j\u0173 daug privalomos literat\u016bros knyg\u0173 Lenkijos Nacionalinio \u0161vietimo ministerijos (MEN) rekomenduojam\u0173, kurios jau yra vie\u0161ai prieinamos. Visi k\u016briniai yra tinkamai apra\u0161yti (pateikiamos i\u0161na\u0161os, motyvai) ir prieinami keliais formatais - HTML , TXT , PDF, EPUB, MOBI. Bibliotekoje yra keli \u0161imtai audio knyg\u0173, aktori\u0173, toki\u0173 kaip Danuta Stenka, Jan Peszek bei Andrzej Chyra, skaitom\u0173. Galima jas klausytis MP3 ir Ogg Vorbis formatais. Audio knygos yra taip pat prieinamos DAISY formatu, silpno reg\u0117jimo \u017emon\u0117ms, akliesiems bei skaitymo problem\u0173 turintiems \u017emon\u0117ms pritaikomu.

                    \r\n\r\n

                    Biblioteka Wolne Lektury yra prieinama naudojant mobili\u0105sias programas skirtas operacinei sistemai Android bei sistemai iOS.

                    \r\n\r\n\r\n

                    Visus internetin\u0117je bibliotekoje Wolne Lektury esan\u010dius k\u016brinius galima pagal teis\u0119 nemokamai per\u017ei\u016br\u0117ti, klausytis, atsisi\u0173sti bei bendrinti kitiems ir cituoti.

                    \r\n\r\n\t\r\n", + "title_fr": "Sur le projet", + "right_column_ru": "\ufeff

                    Wolne Lektury \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c pro publico bono \u0424\u043e\u043d\u0434\u0430 Nowoczesna Polska. \u041c\u044b \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u043c \u0441 \u041d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439, \u0421\u0438\u043b\u0435\u0437\u0441\u043a\u043e\u0439 \u0411\u0438\u0431\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0430 \u0442\u0430\u043a\u0436\u0435 \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0433\u043e\u0440\u043e\u0434\u0430 \u0415\u043b\u044c\u0431\u043b\u043e\u043d\u0433\u0430. \u041f\u043e\u0434 \u044d\u0433\u0438\u0434\u043e\u0439 \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u044b \u0438 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u041e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439. \u0412 \u041f\u043e\u0447\u0435\u0442\u043d\u043e\u043c \u043a\u043e\u043c\u0438\u0442\u0435\u0442\u0435 \u0444\u043e\u043d\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f: \u043f\u0440\u043e\u0444. \u041c\u0430\u0440\u0438\u044f \u042f\u043d\u0435\u043d, \u043f\u0440\u043e\u0444. \u0413\u0440\u0430\u0436\u0438\u043d\u0430 \u0411\u043e\u0440\u043a\u043e\u0432\u0441\u043a\u0430, \u043f\u0440\u043e\u0444. \u041f\u0448\u0435\u043c\u044b\u0441\u043b\u0430\u0432 \u0427\u0430\u043f\u043b\u0438\u043d\u044c\u0441\u043a\u0438, \u043f\u0440\u043e\u0444. \u041c\u0435\u0447\u044b\u0441\u043b\u0430\u0432 \u0414\u043e\u043c\u0431\u0440\u043e\u0432\u0441\u043a\u0438, \u043f\u0440\u043e\u0444. \u0415\u0432\u0430 \u041a\u0440\u0430\u0441\u043a\u043e\u0432\u0441\u043a\u0430, \u043f\u0440\u043e\u0444. \u041c\u0430\u043b\u0433\u043e\u0436\u0430\u0442\u0430 \u0427\u0435\u0440\u043c\u0438\u043d\u044c\u0441\u043a\u0430, \u043f\u0440\u043e\u0444. \u0415\u0436\u0438 \u042f\u0436\u0435\u043c\u0431\u0441\u043a\u0438, \u043f\u0440\u043e\u0444. \u041f\u0435\u0442\u0440 \u0421\u043b\u0438\u0432\u0438\u043d\u044c\u0441\u043a\u0438.

                    \r\n\r\n

                    \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043a\u043e\u043d\u043e\u043c \u043e\u0431 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0430\u0445 \u0438 \u043e\u043d\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u043a \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u0434\u043e\u043c\u0435\u043d\u0443. \r\n\u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043d\u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b (\u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0435 \u043c\u043e\u0442\u0438\u0432\u044b, \u0438 \u0442.\u0434.), \r\n\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \r\n \u041f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 - 3.0. \r\n\u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043e\u0442 \u0441\u0430\u043c\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 \u0438\u0445 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0435\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439. \u041f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 3.0.

                    \r\n\r\n\u041a\u043e\u043d\u0442\u0430\u043a\u0442: : wolnelektury@nowoczesnapolska.org.pl\r\n", + "left_column_fr": "{% load reporting_stats %}\r\n\r\n

                    Wolne Lektury (Lectures Libres) c'est une biblioth\u00e8que en ligne ouverte 24 heures sur 24, 365 jours par an et compl\u00e8tement gratuite. Dans la collection de la biblioth\u00e8que il y a {% count_books %} ouvrages, y compris beaucoup de lectures scolaires recommand\u00e9es par le Minist\u00e8re de l'\u00c9ducation nationale polonais et appartenant d\u00e9j\u00e0 au domaine public. Tous les ouvrages sont convenablement r\u00e9dig\u00e9s; ils sont accompagn\u00e9s de plusieurs annotations et motifs litt\u00e9raires et sont accessibles aux quelques formats: HTML , TXT , PDF, EPUB, MOBI. Dans la biblioth\u00e8que il y a aussi quelques centaines de livres audio lus par les acteurs connus comme, par exemple: Danuta Stenka, Jan Peszek ou Andrzej Chyra. On peut les \u00e9couter aux formats: MP3 et Ogg Vorbis. Les livres audio sont aussi accessibles au format DAISY appropri\u00e9 \u00e0 des non voyants et \u00e0 des malvoyants et \u00e0 des personnes qui ont des difficult\u00e9s \u00e0 lire.

                    \r\n\r\n

                    La biblioth\u00e8que Wolne Lektury est accessible par l'interm\u00e9diaire des applications mobiles sur le syst\u00e8me Android et sur le syst\u00e8me iOS.

                    \r\n\r\n

                    Tous les ouvrages publi\u00e9s sur le site de la biblioth\u00e8que Wolne Lektury peuvent \u00eatre - conform\u00e9ment \u00e0 la loi polonaise - feuillet\u00e9s, \u00e9cout\u00e9s et t\u00e9l\u00e9charg\u00e9s sur votre ordinateur gratuitement. Il est aussi permis de les rendre accessibles \u00e0 d'autres personnes et de les citer.

                    \r\n", + "title": "About the project", + "title_lt": "\ufeffApie projekt\u0105", + "right_column": "

                    Wolne Lektury is a pro bono project developed by the Modern Poland Foundation in cooperation with Polish libraries \u2013 the National Library, the Library of Silesia and the Library of Elbl\u0105g, under the Ministry of Culture and National Heritage and the Assocciation of Polish Writers auspices. The honorary committee members are: Prof. Maria Janion, Prof. Gra\u017cyna Borkowska, Prof. Przemys\u0142aw Czapli\u0144ski, Prof. Mieczys\u0142aw D\u0105browski, Prof. Ewa Kraskowska, Prof. Ma\u0142gorzata Czermi\u0144ska, Prof. Jerzy Jarz\u0119bski and Prof. Piotr \u015aliwi\u0144ski.

                    \r\n\r\n

                    The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence Creative Commons Attribution-ShareAlike. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence Creative Commons Attribution-ShareAlike.

                    \r\n\r\nContact: wolnelektury@nowoczesnapolska.org.pl", + "right_column_es": "

                    Wolne Lektury es un proyecto creado por la Fundaci\u00f3n Polonia Moderna, realizado pro publico bono en colaboraci\u00f3n con la Biblioteca Nacional, la Biblioteca de Silesia y la Biblioteca de Elblag bajo los auspicios del Ministerio de Cultura y Patrimonio Nacional y la Adociaci\u00f3n de Escritores Polacos. El Comit\u00e9 de Honor de Wolne Lektury re\u00fane a los profesores: Maria Janion, Gra\u017cyna Borkowska, Przemys\u0142aw Czapli\u0144ski, Mieczys\u0142aw D\u0105browski, Ewa Kraskowska, Ma\u0142gorzata Czermi\u0144ska, Jerzy Jarz\u0119bski y Piotr \u015aliwi\u0144ski.

                    \r\n\r\n

                    La mayor\u00eda de los textos de la Biblioteca est\u00e1n libres de derechos de autor y son de dominio p\u00fablico, por lo tanto se pueden publicar y difundir libremente. Si un texto tiene materiales adicionales (notas a pie de p\u00e1gina, temas literarios, etc.), que no est\u00e9n libres de derechos de autor, dichos materiales est\u00e1n publicados bajo la licencia Reconocimiento-Compartir bajo la misma licencia 3.0.Tambi\u00e9n publicamos algunos textos legados a el dominio p\u00fablico por los autores o heredores bajo la licencia Reconocimiento-Compartir bajo la misma licencia 3.0.

                    \r\n\r\nContacto: wolnelektury@nowoczesnapolska.org.pl \r\n", + "right_column_en": "

                    Wolne Lektury is a pro bono project developed by the Modern Poland Foundation in cooperation with Polish libraries \u2013 the National Library, the Library of Silesia and the Library of Elbl\u0105g, under the Ministry of Culture and National Heritage and the Assocciation of Polish Writers auspices. The honorary committee members are: Prof. Maria Janion, Prof. Gra\u017cyna Borkowska, Prof. Przemys\u0142aw Czapli\u0144ski, Prof. Mieczys\u0142aw D\u0105browski, Prof. Ewa Kraskowska, Prof. Ma\u0142gorzata Czermi\u0144ska, Prof. Jerzy Jarz\u0119bski and Prof. Piotr \u015aliwi\u0144ski.

                    \r\n\r\n

                    The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence Creative Commons Attribution-ShareAlike. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence Creative Commons Attribution-ShareAlike.

                    \r\n\r\nContact: wolnelektury@nowoczesnapolska.org.pl", + "left_column_de": "{% load reporting_stats %}\r\n\r\n

                    Wolne Lektury ist eine Internetbibliothek, die 24 Stunden zug\u00e4nglich ist, 365 Tage im Jahr, dazu v\u00f6llig kostenlos. Sie beinh\u00e4lt {% count_books %} Werke, darunter viele Schullekt\u00fcren, die durch das polnische Bildungsministerium empfohlen werden und die zur Gemeinfreiheit geh\u00f6ren. Alle Werke werden entsprechend bearbeitet - mit Fu\u00dfnoten und Motiven versehen sowie in verschiedenen Formaten zug\u00e4nglich - HTML , TXT, PDF, EPUB, MOBI. In der Bibliothek befinden sich auch einige hundert von H\u00f6rb\u00fcchern, die von bekannten polnischen Schauspielern wie Danuta Stenka, Jan Peszek oder Andrzej Chyra vorgelesen werden. Es ist m\u00f6glich sie in folgenden Formaten abzuspielen: MP3 und Ogg Vorbis. H\u00f6rb\u00fccher sind auch im Format DAISY zug\u00e4nglich, die f\u00fcr Bed\u00fcrfnisse von Schwachsehenden, Blinden und Personen mit Lesenschwierigkeiten geeignet sind.

                    \r\n\r\n

                    Wolne Lektury-Bibliothek ist auch f\u00fcr Nutzer der mobilen Ger\u00e4te zug\u00e4nglich \u0096 f\u00fcr das System Android und f\u00fcr das System iOS. zug\u00e4nglich

                    \r\n\r\n

                    Alle in der Wolne Lektury-Bibliothek ver\u00f6ffentlichten Werke kann man rechtsm\u00e4\u00dfig kostenlos durchsehen, h\u00f6ren, auf eigenen Computer herunterladen; \u00fcberdies ist ihre Weitervermittlung und Anf\u00fchrung erlaubt.

                    ", + "title_uk": "\ufeff\u041f\u0440\u043e \u043f\u0440\u043e\u0435\u043a\u0442", + "right_column_it": "

                    Wolne Lektury \u00e8 un progetto della fondazione Polonia Moderna realizzato pro bono publico in collaborazione con la Biblioteca Nazionale, la Biblioteca Silesiana e la Biblioteca di Elbl\u0105g sotto gli auspici del Ministero dell\u2019Istruzione, Ministero della Cultura, del Patrimonio Nazionale e dell\u2019Associazione degli Scrittori Polacchi. Nel Comitato d\u2019Onore delle Letture Libere ci sono: prof. Maria Janion, prof. Gra\u017cyna Borkowska, prof. Przemys\u0142aw Czapli\u0144ski, prof. Mieczys\u0142aw D\u0105browski, prof. Ewa Kraskowska, prof. Ma\u0142gorzata Czermi\u0144ska, prof. Jerzy Jarz\u0119bski e prof. Piotr \u015aliwi\u0144ski.

                    \r\n\r\n

                    La maggior parte delle opere nella biblioteca non \u00e8 protetta dal diritto d\u2019autore ed \u00e8 di dominio pubblico, il che significa che si pu\u00f2 pubblicare e distribuire le opere liberamente. Se l\u2019opera viene apposta dai materiali aggiuntivi (dalle note, dai motivi letterari ecc) che sono protetti dal copyright, questi materiali sono disponibili sulla licenza di\r\nL'attribuzione si svolge nelle stesse condizioni 3.0. Pubblichiamo anche le opere che sono rese accessibili dagli autori o eredi legittimi L'attribuzione si svolge alle stesse condizioni 3.0.

                    \r\n\r\nContatti: wolnelektury@nowoczesnapolska.org.pl\r\n\r\n", + "title_pl": "O projekcie", + "left_column": "{% load reporting_stats %}\r\n\r\n

                    Wolne Lektury is a free online library open 24 hours a day, 365 days a year. It archives books{% count_books %}, including set readings recommended by the Ministry of National Education which have already fallen in the public domain. All the texts are adequately edited - annotated with footnotes and motifs - and are available in several formats - HTML , TXT , PDF, EPUB, MOBI. The library also contains a few hundred audiobooks read by famous actors like: Danuta Stenka, Jan Peszek or Andrzej Chyra. The audiobooks can be used in MP3 and Ogg Vorbis formats. They are also available in DAISY format suiting the needs of people with poor vision, the blind, and those having reading difficulties.

                    \r\n\r\n

                    The Wolne Lektury library is available through digital applications - in Android and iOS systems.

                    \r\n\r\n

                    You are allowed to browse, listen to, and download all the items in Wolne Lektury, as well as share and cite them, entirely free of charge.

                    ", + "right_column_uk": "\ufeff

                    Wolne Lektury \u0446\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0424\u043e\u043d\u0434\u0443 \u0421\u0443\u0447\u0430\u0441\u043d\u0430 \u041f\u043e\u043b\u044c\u0449\u0430 (Fundacja Nowoczesna Polska), \u0440\u0435\u0430\u043b\u0456\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0437 \u043d\u0435\u043a\u043e\u043c\u0435\u0440\u0446\u0456\u0439\u043d\u043e\u044e \u043c\u0435\u0442\u043e\u044e, \u0443 \u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u0456 \u0437 \u041d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u044e \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u044e, \u0421\u0456\u043b\u0435\u0437\u044c\u043a\u043e\u044e \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u044e \u0442\u0430 \u0415\u043b\u044c\u0431\u043b\u043e\u043d\u0437\u044c\u043a\u043e\u044e \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u044e \u043f\u0456\u0434 \u043f\u0430\u0442\u0440\u043e\u043d\u0430\u0442\u043e\u043c \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u043e\u0441\u0432\u0456\u0442\u0438, \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0438 \u0442\u0430 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u0441\u043f\u0430\u0434\u0449\u0438\u043d\u0438, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0421\u043f\u0456\u043b\u043a\u0438 \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u0445 \u043f\u0438\u0441\u044c\u043c\u0435\u043d\u043d\u0438\u043a\u0456\u0432. \u0412 \u041f\u043e\u0447\u0435\u0441\u043d\u043e\u043c\u0443 \u043a\u043e\u043c\u0456\u0442\u0435\u0442\u0456 \u043f\u0440\u043e\u0435\u043a\u0442\u0443 Wolne Lektury \u0437\u0430\u0441\u0456\u0434\u0430\u044e\u0442\u044c \u043f\u0440\u043e\u0444. \u041c\u0430\u0440\u0456\u044f \u042f\u043d\u0456\u043e\u043d, \u043f\u0440\u043e\u0444. \u0490\u0440\u0430\u0436\u0438\u043d\u0430 \u0411\u043e\u0440\u043a\u043e\u0432\u0441\u044c\u043a\u0430, \u043f\u0440\u043e\u0444. \u041f\u0448\u0435\u043c\u0438\u0441\u043b\u0430\u0432 \u0427\u0430\u043f\u043b\u0456\u043d\u0441\u044c\u043a\u0438\u0439, \u043f\u0440\u043e\u0444. \u041c\u0454\u0447\u0438\u0441\u043b\u0430\u0432 \u0414\u043e\u043c\u0431\u0440\u043e\u0432\u0441\u044c\u043a\u0438\u0439, \u043f\u0440\u043e\u0444. \u0415\u0432\u0430 \u041a\u0440\u0430\u0441\u043a\u043e\u0432\u0441\u044c\u043a\u0430, \u043f\u0440\u043e\u0444. \u041c\u0430\u043b\u0491\u043e\u0436\u0430\u0442\u0430 \u0427\u0435\u0440\u043c\u0456\u043d\u0441\u044c\u043a\u0430, \u043f\u0440\u043e\u0444. \u0404\u0436\u0438 \u042f\u0436\u0435\u043c\u0431\u0441\u044c\u043a\u0438\u0439 \u0442\u0430 \u043f\u0440\u043e\u0444. \u041f\u0456\u043e\u0442\u0440 \u0421\u043b\u0456\u0432\u0456\u043d\u0441\u044c\u043a\u0438\u0439.

                    \r\n\r\n

                    \u0411\u0456\u043b\u044c\u0448\u0456\u0441\u0442\u044c \u0442\u0432\u043e\u0440\u0456\u0432 \u0443 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 \u043d\u0435 \u043e\u0445\u043e\u0440\u043e\u043d\u044f\u044e\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c \u0456 \u044f\u0432\u043b\u044f\u044e\u0442\u044c\u0441\u044f \u0447\u0430\u0441\u0442\u0438\u043d\u043e\u044e \u0441\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0434\u0431\u0430\u043d\u043d\u044f, \u0442\u043e\u043c\u0443 \u0457\u0445 \u043c\u043e\u0436\u043d\u0430 \u0432\u0456\u043b\u044c\u043d\u043e \u043f\u0443\u0431\u043b\u0456\u043a\u0443\u0432\u0430\u0442\u0438 \u0442\u0430 \u0440\u043e\u0437\u043f\u043e\u0432\u0441\u044e\u0434\u0436\u0443\u0432\u0430\u0442\u0438. \u042f\u043a\u0449\u043e \u0442\u0435\u043a\u0441\u0442\u0438 \u0441\u0443\u043f\u0440\u043e\u0432\u043e\u0434\u0436\u0443\u044e\u0442\u044c\u0441\u044f \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u043c\u0438 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0430\u043c\u0438 (\u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0430\u043c\u0438, \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u043c\u0438 \u043c\u043e\u0442\u0438\u0432\u0430\u043c\u0438 \u0442\u043e\u0449\u043e), \u044f\u043a\u0456 \u043e\u0445\u043e\u0440\u043e\u043d\u044f\u044e\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c, \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0446\u0438\u0445 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0456\u0432 \u043d\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u043c\u043e\u0432\u0430\u0445 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 \u0406\u0437 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0456\u043c\u0435\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0430 \u2013 \u041d\u0430 \u0442\u0438\u0445 \u0436\u0435 \u0443\u043c\u043e\u0432\u0430\u0445 3.0. \u0422\u0430\u043a\u043e\u0436 \u043c\u0438 \u043f\u0443\u0431\u043b\u0456\u043a\u0443\u0454\u043c\u043e \u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0442\u0432\u043e\u0440\u0456\u0432, \u0434\u043e \u044f\u043a\u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u0438 \u0430\u0431\u043e \u0441\u043f\u0430\u0434\u043a\u043e\u0454\u043c\u0446\u0456 \u043f\u0440\u0430\u0432 \u043d\u0430\u0434\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u043f\u0456\u0434\u0441\u0442\u0430\u0432\u0456 \u0432\u0456\u043b\u044c\u043d\u043e\u0457 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 \u0406\u0437 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0456\u043c\u0435\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0430 \u2013 \u041d\u0430 \u0442\u0438\u0445 \u0436\u0435 \u0443\u043c\u043e\u0432\u0430\u0445 3.0.

                    \r\n\r\n\u041a\u043e\u043d\u0442\u0430\u043a\u0442: wolnelektury@nowoczesnapolska.org.pl\r\n", + "title_en": "About the project", + "left_column_pl": "\ufeff{% load reporting_stats %}\r\n\r\n

                    Wolne Lektury to biblioteka internetowa czynna 24 godziny na dob\u0119, 365 dni w roku i ca\u0142kowicie darmowa. W jej zbiorach znajduje si\u0119 {% count_books %} utwor\u00f3w, w tym wiele lektur szkolnych zalecanych do u\u017cytku przez Ministerstwo Edukacji Narodowej, kt\u00f3re trafi\u0142y ju\u017c do domeny publicznej. Wszystkie dzie\u0142a s\u0105 odpowiednio opracowane - opatrzone przypisami, motywami i udost\u0119pnione w kilku formatach - HTML, TXT, PDF, EPUB, MOBI. W bibliotece znajduje si\u0119 r\u00f3wnie\u017c kilkaset audiobook\u00f3w, czytanych przez takich aktor\u00f3w jak: Danuta Stenka, Jan Peszek czy Andrzej Chyra. Mo\u017cna ich s\u0142ucha\u0107 w formatach MP3 i Ogg Vorbis. Audiobooki s\u0105 r\u00f3wnie\u017c dost\u0119pne w formacie DAISYdostosowanym do potrzeb os\u00f3b s\u0142abowidz\u0105cych, niewidomych oraz os\u00f3b maj\u0105cych trudno\u015bci z czytaniem.

                    \r\n\r\n

                    Biblioteka Wolne Lektury dost\u0119pna jest za po\u015brednictwem aplikacji mobilnych \u2013 na system Android oraz na system iOS.

                    \r\n\r\n

                    Wszystkie utwory zamieszczone w bibliotece Wolne Lektury mo\u017cna zgodnie z prawem bezp\u0142atnie przegl\u0105da\u0107, s\u0142ucha\u0107, \u015bci\u0105ga\u0107 na sw\u00f3j komputer, a tak\u017ce udost\u0119pnia\u0107 innym i cytowa\u0107.

                    \r\n", + "left_column_it": "{% load reporting_stats %}\r\n\r\n

                    Wolne Lektury (Le letture Libere) \u00e8 una biblioteca online aperta 24 ore al giorno, 365 giorni all'anno ed \u00e8 completamente gratuita. Nella sua collezione si trovano {% count_books %} opere, tra cui molte letture scolastiche raccomandate dal Ministero dell'Istruzione polacco facenti parte del dominio pubblico. Tutte le opere sono adeguatamente elaborate \u2013 con le note, i motivi e sono disponibili in diversi formati - HTML, TXT, PDF, EPUB, MOBI. La biblioteca dispone inoltre di centinaia di libri che vengono letti da diversi attori tra cui: Danuta Stenka, Jan Peszek o Andrzej Chyra. E' possibile ascoltarli nei formati MP3 e Ogg Vorbis. Gli audiolibri sono disponibili anche in formato DAISY adattato alle esigenze delle persone ipovedenti, non vedenti e che hanno difficolta con la lettura.

                    \r\n\r\n

                    La biblioteca Wolne Lektury \u00e8 disponibile tramite le applicazioni mobili \u2013 per il sistema Android e il sistema iOS.

                    \r\n\r\n

                    Secondo la legge tutte le opere della biblioteca Wolne Lektury possono essere gratuitamente lette, ascoltate, scaricate sul pc, quotate e rese accessibili agli altri.

                    \r\n\r\n", + "title_es": "Sobre el proyecto", + "left_column_ru": "{% load reporting_stats %}\r\n\r\n

                    Wolne Lektury \u044d\u0442\u043e \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u043a\u0440\u0443\u0433\u043b\u044b\u0435 \u0441\u0443\u0442\u043a\u0438, 365 \u0434\u043d\u0435\u0439 \u0432 \u0433\u043e\u0434\u0443, \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e . \u0421\u043e\u0432\u043c\u0435\u0449\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e {% count_books %} \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043c\u043d\u043e\u0433\u043e\u0435 \u0438\u0437 \u0448\u043a\u043e\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \r\n\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u043e\u043c \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \r\n\u0412\u0441\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u0438 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u043c\u0438 \u043c\u043e\u0442\u0438\u0432\u0430\u043c\u0438. \r\n\r\n\u041e\u043d\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 - HTML , TXT , PDF, EPUB, \r\nMOBI. \r\n\u0412 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u0442\u043d\u0438 \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 MP3 \u0438 Ogg Vorbis, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0438\u0442\u0430\u044e\u0442 \u0430\u043a\u0442\u0435\u0440\u044b: \u0414\u0430\u043d\u0443\u0442\u0430 \u0421\u0442\u0435\u043d\u043a\u0430, \u042f\u043d \u041f\u0435\u0448\u0435\u043a, \u0410\u043d\u0434\u0436\u0435\u0439 \u0425\u044b\u0440\u0430. \r\n\r\n\u0410\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u0430\u043a\u0436\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 DAISY , \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u043c \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439 \u0441 \u043f\u043b\u043e\u0445\u0438\u043c \u0437\u0440\u0435\u043d\u0438\u0435\u043c, \u043f\u043b\u043e\u0445\u043e \u0432\u0438\u0434\u044f\u0449\u0438\u0445 \u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0447\u0442\u0435\u043d\u0438\u0435\u043c.

                    \r\n\r\n\r\n

                    \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Wolne Lektury \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u2013 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 Android \u0438 iOS.

                    \r\n\r\n\r\n

                    \u0412\u0441\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438\u0437 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Wolne Lektury \u043f\u043e \u0437\u0430\u043a\u043e\u043d\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c, \u0441\u043b\u0443\u0448\u0430\u0442\u044c, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u0446\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445.

                    \r\n", + "slug": "o-projekcie", + "right_column_de": "

                    Wolne Lektury ist ein pro bono Projekt der Fundation Nowoczesna Polska (Modernes Polen), in Zusammenarbeit mit der Nationalbibliothek, der Schlesischen Bibliothek und der Elblinger Bibliothek unter dem Patronat des polnischen Bildungsministeriums und des Verbandes polnischer Schrifsteller (Stowarzyszenie Pisarzy Polskich). Im Ehrenkomitee von Wolne Lektury sind Prof. Maria Janion, Prof. Gra\u017cyna Borkowska, Prof. Przemys\u0142aw Czapli\u00f1ski, Prof. Mieczys\u0142aw D\u0105browski, Prof. Ewa Kraskowska, Prof. Ma\u0142gorzata Czermi\u00f1ska, Prof. Jerzy Jarz\u00eabski und Prof. Piotr \u015aliwi\u00f1ski t\u00e4tig.

                    \r\n\r\n

                    Die Mehrheit von Bibliothekwerken steht nicht unter dem Schutz des Urheberrechts und geh\u00f6rt zu dem Gemeinfreiheitsbereich, was bedeutet, dass man sie frei ver\u00f6ffentlichen und vermitteln darf. Sollte das Werk mit zus\u00e4tzlichen Angaben versehen werden (F\u00fc\u00dfnoten und literarischen Motiven), die dem Urheberrechtsschutz unterliegen, sind diese zus\u00e4tzlichen Angaben unter der Lizenz Urheberschaftanerkennung unter gleichen Bedigungen 3.0 verf\u00fcgbar. Wir ver\u00f6ffentlichen auch Werke, die Verfasser oder Rechtsnachfolger unter der freien Lizenz Urheberschaftanerkennung unter gleichen Bedigungen 3.0.

                    herausgegeben haben. \r\n\r\nKontakt: wolnelektury@nowoczesnapolska.org.pl", + "left_column_es": "\ufeff{% load reporting_stats %}\r\n\r\n

                    Wolne Lektury es una biblioteca virtual de 24 horas, 365 d\u00edas al a\u00f1o y completamente gratuita. La colecci\u00f3n consta de {% count_books %} obras, incluso muchas de lectura obligatoria recomendadas por el Ministerio de Educaci\u00f3n Nacional y que ya forman parte del dominio p\u00fablico. Todos los textos est\u00e1n adecuadamente preparados \u2013 con notas a pie de p\u00e1gina, temas literarios, y est\u00e1n disponibles en varios formatos - HTML , TXT , PDF, EPUB, MOBI.\r\nLa biblioteca contiene tambi\u00e9n centenares de audiolibros, leidos por autores como Danuta Stenka, Jan Peszek o Andrzej Chyra. Se los puede escuchar en los formatos MP3 y Ogg Vorbis. Los audiolibros se pueden conseguir tambi\u00e9n en el formato DAISY , adaptado a las necesidades de las personas con baja visi\u00f3n, invidentes, incluso las que tienen dificultades para leer.

                    \r\n\r\n

                    La Biblioteca Wolne Lektury est\u00e1 disponible por medio de aplicaciones m\u00f3viles para los sistemas Android e iOS.

                    \r\n\r\n\r\n

                    Todos los textos publicados en la Biblioteca Wolne Lektury est\u00e1n preparados para hojear, escuchar, descargar, para ponerlos a la disposici\u00f3n de otros y citar, todo esto de acuerdo con la ley.

                    \r\n", + "left_column_en": "{% load reporting_stats %}\r\n\r\n

                    Wolne Lektury is a free online library open 24 hours a day, 365 days a year. It archives books{% count_books %}, including set readings recommended by the Ministry of National Education which have already fallen in the public domain. All the texts are adequately edited - annotated with footnotes and motifs - and are available in several formats - HTML , TXT , PDF, EPUB, MOBI. The library also contains a few hundred audiobooks read by famous actors like: Danuta Stenka, Jan Peszek or Andrzej Chyra. The audiobooks can be used in MP3 and Ogg Vorbis formats. They are also available in DAISY format suiting the needs of people with poor vision, the blind, and those having reading difficulties.

                    \r\n\r\n

                    The Wolne Lektury library is available through digital applications - in Android and iOS systems.

                    \r\n\r\n

                    You are allowed to browse, listen to, and download all the items in Wolne Lektury, as well as share and cite them, entirely free of charge.

                    ", + "right_column_fr": "

                    Wolne Lektury c'est un projet de la fondation Nowoczesna Polska (Pologne Moderne) r\u00e9alis\u00e9 pro publico bono avec la coop\u00e9ration de la Biblioth\u00e8que nationale polonaise, Biblioth\u00e8que de Sil\u00e9sie et Biblioth\u00e8que d'Elbl\u0105g, sous le patronage du Minist\u00e8re de l'\u00c9ducation nationale, Minist\u00e8re de la Culture et du Patrimoine national et de l'Association des \u00c9crivains polonais. Le Comit\u00e9 Honoraire de Wolne Lektury est compos\u00e9 de: prof. Maria Janion, prof. Gra\u017cyna Borkowska, prof. Przemys\u0142aw Czapli\u0144ski, prof. Mieczys\u0142aw D\u0105browski, prof. Ewa Kraskowska, prof. Ma\u0142gorzata Czermi\u0144ska, prof. Jerzy Jarz\u0119bski et prof. Piotr \u015aliwi\u0144ski.

                    \r\n\r\n

                    La plupart des ouvrages sur le site de la biblioth\u00e8que ne sont pas prot\u00e9g\u00e9s par le droit d'auteur et appartiennent au domaine public; c'est-\u00e0-dire qu'ils peuvent \u00eatre publi\u00e9s et divulgu\u00e9s librement. Si un ouvrage est accompagn\u00e9 des mat\u00e9riaux suppl\u00e9mentaires (annotations, motifs litt\u00e9raires, etc.) soumis au droit d'auteur, ces derniers sont donc distribu\u00e9s sous la licence: Paternit\u00e9 - Partage \u00e0 l'Identique 3.0 non transpos\u00e9. On publie aussi quelques ouvrages qui \u00e9taient distribu\u00e9s par leurs auteurs ou h\u00e9ritiers sous la licence libre: Paternit\u00e9 - Partage \u00e0 l'Identique 3.0 non transpos\u00e9.

                    \r\nContact: wolnelektury@nowoczesnapolska.org.pl\r\n", + "title_ru": "\ufeff\u041f\u0440\u043e\u0435\u043a\u0442", + "title_it": "Sul progetto" + } + }, + { + "pk": 7, + "model": "infopages.infopage", + "fields": { + "title_de": "Rechts", + "left_column_uk": "

                    \u0411\u0456\u043b\u044c\u0448\u0456\u0441\u0442\u044c \u0442\u0432\u043e\u0440\u0456\u0432 \u0443 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 \u043d\u0435 \u043e\u0445\u043e\u0440\u043e\u043d\u044f\u044e\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c \u0456 \u044f\u0432\u043b\u044f\u044e\u0442\u044c\u0441\u044f \u0447\u0430\u0441\u0442\u0438\u043d\u043e\u044e \u0441\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0434\u0431\u0430\u043d\u043d\u044f, \u0442\u043e\u043c\u0443 \u0457\u0445 \u043c\u043e\u0436\u043d\u0430 \u0432\u0456\u043b\u044c\u043d\u043e \u043f\u0443\u0431\u043b\u0456\u043a\u0443\u0432\u0430\u0442\u0438 \u0442\u0430 \u0440\u043e\u0437\u043f\u043e\u0432\u0441\u044e\u0434\u0436\u0443\u0432\u0430\u0442\u0438. \u042f\u043a\u0449\u043e \u0442\u0435\u043a\u0441\u0442\u0438 \u0441\u0443\u043f\u0440\u043e\u0432\u043e\u0434\u0436\u0443\u044e\u0442\u044c\u0441\u044f \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u043c\u0438 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0430\u043c\u0438 (\u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0430\u043c\u0438, \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u043c\u0438 \u043c\u043e\u0442\u0438\u0432\u0430\u043c\u0438 \u0442\u043e\u0449\u043e), \u044f\u043a\u0456 \u043e\u0445\u043e\u0440\u043e\u043d\u044f\u044e\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c, \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0446\u0438\u0445 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0456\u0432 \u043d\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u043c\u043e\u0432\u0430\u0445 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 \u0406\u0437 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0456\u043c\u0435\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0430 \u2013 \u041d\u0430 \u0442\u0438\u0445 \u0436\u0435 \u0443\u043c\u043e\u0432\u0430\u0445 3.0. \u0422\u0430\u043a\u043e\u0436 \u043c\u0438 \u043f\u0443\u0431\u043b\u0456\u043a\u0443\u0454\u043c\u043e \u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0442\u0432\u043e\u0440\u0456\u0432, \u0434\u043e \u044f\u043a\u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u0438 \u0430\u0431\u043e \u0441\u043f\u0430\u0434\u043a\u043e\u0454\u043c\u0446\u0456 \u043f\u0440\u0430\u0432 \u043d\u0430\u0434\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u043f\u0456\u0434\u0441\u0442\u0430\u0432\u0456 \u0432\u0456\u043b\u044c\u043d\u043e\u0457 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 \u0406\u0437 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0456\u043c\u0435\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0430 \u2013 \u041d\u0430 \u0442\u0438\u0445 \u0436\u0435 \u0443\u043c\u043e\u0432\u0430\u0445 3.0.

                    ", + "main_page": 2, + "right_column_pl": "", + "right_column_lt": "", + "left_column_lt": "

                    Dauguma \u0161ios bibliotekos k\u016brini\u0173 n\u0117ra autorini\u0173 teisi\u0173 saugomi ir yra vie\u0161ai prieinami, tai rei\u0161kia, kad gali b\u016bti laisvai naudojami bei platinami. Jei su k\u016briniu yra pateikiamos bet kokios papildomos autorini\u0173 teisi\u0173 saugomos med\u017eiagos (kaip pastabos, motyvai ir t.t.), tai \u0161ios med\u017eiagos yra prieinamos pagal licencj\u0105 Autoryst\u0117s pripa\u017einimas \u2013 pagal tas pa\u010dias s\u0105lygas 3.0. Publikuojami taip pat keli k\u016briniai, autori\u0173 ir teisi\u0173 \u012fp\u0117dini\u0173 pateikti pagal laisv\u0105 licencij\u0105 Autoryst\u0117s pripa\u017einimas \u2013 pagal tas pa\u010dias s\u0105lygas 3.0.

                    ", + "title_fr": "", + "right_column_ru": "", + "left_column_fr": "

                    La plupart des ouvrages sur le site de la biblioth\u00e8que ne sont pas prot\u00e9g\u00e9s par le droit d'auteur et appartiennent au domaine public; c'est-\u00e0-dire qu'ils peuvent \u00eatre publi\u00e9s et divulgu\u00e9s librement. Si un ouvrage est accompagn\u00e9 des mat\u00e9riaux suppl\u00e9mentaires (annotations, motifs litt\u00e9raires, etc.) soumis au droit d'auteur, ces derniers sont donc distribu\u00e9s sous la licence: Paternit\u00e9 - Partage \u00e0 l'Identique 3.0 non transpos\u00e9. On publie aussi quelques ouvrages qui \u00e9taient distribu\u00e9s par leurs auteurs ou h\u00e9ritiers sous la licence libre: Paternit\u00e9 - Partage \u00e0 l'Identique 3.0 non transpos\u00e9.

                    ", + "title": "Rights", + "title_lt": "", + "right_column": "

                    The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence Creative Commons Attribution-ShareAlike. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence Creative Commons Attribution-ShareAlike.

                    \r\n\r\nContact: wolnelektury@nowoczesnapolska.org.pl", + "right_column_es": "", + "right_column_en": "

                    The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence Creative Commons Attribution-ShareAlike. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence Creative Commons Attribution-ShareAlike.

                    \r\n\r\nContact: wolnelektury@nowoczesnapolska.org.pl", + "left_column_de": "

                    Die Mehrheit von Bibliothekwerken steht nicht unter dem Schutz des Urheberrechts und geh\u00f6rt zu dem Gemeinfreiheitsbereich, was bedeutet, dass man sie frei ver\u00f6ffentlichen und vermitteln darf. Sollte das Werk mit zus\u00e4tzlichen Angaben versehen werden (F\u00fc\u00dfnoten und literarischen Motiven), die dem Urheberrechtsschutz unterliegen, sind diese zus\u00e4tzlichen Angaben unter der Lizenz Urheberschaftanerkennung unter gleichen Bedigungen 3.0 verf\u00fcgbar. Wir ver\u00f6ffentlichen auch Werke, die Verfasser oder Rechtsnachfolger unter der freien Lizenz Urheberschaftanerkennung unter gleichen Bedigungen 3.0.

                    herausgegeben haben. ", + "title_uk": "", + "right_column_it": null, + "title_pl": "Prawa", + "left_column": "

                    The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence Attribution + Noncommercial + ShareAlike. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence Attribution + Noncommercial + ShareAlike.

                    ", + "right_column_uk": "", + "title_en": "Rights", + "left_column_pl": "

                    Wi\u0119kszo\u015b\u0107 utwor\u00f3w w bibliotece nie jest chroniona prawem autorskim i znajduje si\u0119 w domenie publicznej, co oznacza, \u017ce mo\u017cna je swobodnie publikowa\u0107 i rozpowszechnia\u0107. Je\u015bli utw\u00f3r opatrzony jest dodatkowymi materia\u0142ami (przypisy, motywy literackie etc.), kt\u00f3re podlegaj\u0105 prawu autorskiemu, to te dodatkowe materia\u0142y udost\u0119pnione s\u0105 na licencji Uznanie autorstwa-Na tych samych warunkach 3.0. Publikujemy r\u00f3wnie\u017c kilka utwor\u00f3w, kt\u00f3re autorzy lub spadkobiercy praw udost\u0119pnili na wolnej licencji Uznanie autorstwa-Na tych samych warunkach 3.0.

                    ", + "left_column_it": null, + "title_es": "Derechos", + "left_column_ru": "

                    \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043a\u043e\u043d\u043e\u043c \u043e\u0431 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0430\u0445 \u0438 \u043e\u043d\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u043a \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u0434\u043e\u043c\u0435\u043d\u0443. \r\n\u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043d\u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b (\u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0435 \u043c\u043e\u0442\u0438\u0432\u044b, \u0438 \u0442.\u0434.), \r\n\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \r\n \u041f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 - 3.0. \r\n\u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043e\u0442 \u0441\u0430\u043c\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 \u0438\u0445 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0435\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439. \u041f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 3.0.

                    ", + "slug": "prawa", + "right_column_de": "", + "left_column_es": "

                    La mayor\u00eda de los textos de la Biblioteca est\u00e1n libres de derechos de autor y son de dominio p\u00fablico, por lo tanto se pueden publicar y difundir libremente. Si un texto tiene materiales adicionales (notas a pie de p\u00e1gina, temas literarios, etc.), que no est\u00e9n libres de derechos de autor, dichos materiales est\u00e1n publicados bajo la licencia Reconocimiento-Compartir bajo la misma licencia 3.0.Tambi\u00e9n publicamos algunos textos legados a el dominio p\u00fablico por los autores o heredores bajo la licencia Reconocimiento-Compartir bajo la misma licencia 3.0.

                    ", + "left_column_en": "

                    The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence Attribution + Noncommercial + ShareAlike. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence Attribution + Noncommercial + ShareAlike.

                    ", + "right_column_fr": "", + "title_ru": "", + "title_it": null + } + }, + { + "pk": 4, + "model": "infopages.infopage", + "fields": { + "title_de": "Unser Team", + "left_column_uk": "\ufeff

                    \u041c\u0430\u0491\u0434\u0430\u043b\u0435\u043d\u0430 \u0411\u2019\u0454\u0440\u043d\u0430\u0442 \u2013 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u043a\u0435\u0440\u0443\u044e\u0447\u0438\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440 \u0424\u043e\u043d\u0434\u0443 \u0421\u0443\u0447\u0430\u0441\u043d\u0430 \u041f\u043e\u043b\u044c\u0449\u0430 (Fundacja Nowoczesna Polska). \u0421\u043e\u0446\u0456\u043e\u043b\u043e\u0433, \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u044f \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u0442\u0430 \u0411\u0440\u044e\u0441\u0441\u0435\u043b\u044c\u0441\u044c\u043a\u043e\u0433\u043e \u0432\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u0421\u043f\u0435\u0446\u0456\u0430\u043b\u0456\u0441\u0442 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043d\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0456\u0432. \u041a\u0435\u0440\u0443\u0432\u0430\u043b\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u00ab\u041a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0438 2009\u00bb \u0442\u0430 \u00ab\u042f \u043c\u0430\u044e \u043f\u0440\u0430\u0432\u043e \u0437\u043d\u0430\u0442\u0438\u00bb \u0443 \u0410\u0441\u043e\u0446\u0456\u0430\u0446\u0456\u0457 61. \u041f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0443 \u0431\u0430\u0433\u0430\u0442\u044c\u043e\u0445 \u0441\u043e\u0446\u0456\u0430\u043b\u044c\u043d\u0438\u0445 \u0434\u043e\u0441\u043b\u0456\u0434\u0436\u0435\u043d\u043d\u044f\u0445, \u044f\u043a\u0456 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044f \u0433\u0440\u043e\u043c\u0430\u0434\u0441\u044c\u043a\u0438\u043c\u0438 \u043e\u0440\u0433\u0430\u043d\u0456\u0437\u0430\u0446\u0456\u044f\u043c\u0438 \u0442\u0430 \u0434\u043e\u0441\u043b\u0456\u0434\u043d\u0438\u0446\u044c\u043a\u0438\u043c\u0438 \u0444\u0456\u0440\u043c\u0430\u043c\u0438.

                    \r\n\r\n

                    \u0420\u0430\u0434\u043e\u0441\u043b\u0430\u0432 \u0427\u0430\u0439\u043a\u0430 \u2013 \u0433\u043e\u043b\u043e\u0432\u043d\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442, \u0432\u0438\u0432\u0447\u0430\u0432 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0443 \u043d\u0430 \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0456 \u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438, \u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0438 \u0442\u0430 \u041c\u0435\u0445\u0430\u043d\u0456\u043a\u0438 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u0412\u043e\u043b\u043e\u0434\u0456\u0454 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u043c\u0438 \u043c\u043e\u0432\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0430 \u0442\u0435\u0433\u0456\u0432: Python, XHTML, Javascript, CSS, LaTeX, SQL. \u041c\u0430\u0454 \u0434\u043e\u0441\u0432\u0456\u0434 \u0443 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u0445 Django, Jquery, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0443 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0443\u0432\u0430\u043d\u043d\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0456\u0432 XML (XSLT), \u0443 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0438\u0445 \u043a\u043d\u0438\u0433 \u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 PDF \u0442\u0430 EPUB \u0456 \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0445 \u0430\u043f\u043b\u0456\u043a\u0430\u0446\u0456\u0439 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0438 Android \u0442\u0430 iOS.

                    \r\n\r\n

                    \u041c\u0430\u0440\u0446\u0456\u043d \u041a\u043e\u0437\u0454\u0439 \u2013 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442. \u0412\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u041f\u043e\u043b\u0456\u0442\u0435\u0445\u043d\u0456\u0447\u043d\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u0442\u0430 \u0430\u0441\u043f\u0456\u0440\u0430\u043d\u0442 \u0432 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u0424\u0456\u043b\u043e\u0441\u043e\u0444\u0456\u0457 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u0414\u0456\u044f\u0447 \u041c\u043e\u043a\u043e\u0442\u043e\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u041f\u0440\u043e\u0434\u043e\u0432\u043e\u043b\u044c\u0447\u043e\u0433\u043e \u041a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0443. \u041c\u0430\u043d\u0434\u0440\u0456\u0432\u043d\u0438\u043a, \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0438\u0441\u0442, \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c \u0443\u0441\u0456\u043b\u044f\u043a\u0438\u0445 \u0431\u0430\u043d\u043a\u0435\u0442\u0456\u0432. Homo ludens.

                    \r\n\r\n

                    \u041c\u0430\u0440\u0442\u0430 \u041d\u0454\u0434\u0437\u044f\u043b\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u2013 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u044f \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u0437\u043d\u0430\u0432\u0441\u0442\u0432\u0430 \u0442\u0430 \u043d\u0430\u0443\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 \u043c\u0430\u0433\u0456\u0441\u0442\u0440\u0430\u0442\u0443\u0440\u0438 \u043d\u0430 \u0441\u043f\u0435\u0446\u0456\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0456 Public Policy and Administration \u0443 Collegium Civitas.

                    \r\n\r\n", + "main_page": 3, + "right_column_pl": "

                    Dorota A. Kowalska \u2013 redaktorka literacka, j\u0119zykoznawca, polonistka i slawistka, doktor nauk humanistycznych, adiunkt w Pracowni Polszczyzny Kresowej IJP PAN, gdzie zajmuje si\u0119 histori\u0105 i wsp\u00f3\u0142czesno\u015bci\u0105 j\u0119zyka polskiego na Ukrainie. Hobbystycznie \u015bpiewa archaiczne pie\u015bni ukrai\u0144skie i rosyjskie, cyklistka.

                    \r\n\r\n

                    Aleksandra Seku\u0142a \u2013 redaktorka literacka, historyczka literatury, doktor nauk humanistycznych, absolwentka Wydzia\u0142u Polonistyki Uniwersytetu Warszawskiego i Szko\u0142y Nauk Spo\u0142ecznych przy IFiS PAN. Zawodowo i naukowo zajmuje si\u0119 polskim romantyzmem, histori\u0105 idei i teori\u0105 kultury.

                    \r\n\r\n

                    Pawe\u0142 Kozio\u0142 \u2013 redaktor literacki. Ur. 1979, doktor nauk humanistycznych specjalizuj\u0105cy si\u0119 w literaturze dawnej, absolwent Wydzia\u0142u Polonistyki Uniwersytetu Warszawskiego oraz Dulwich College w Londynie. Poeta, krytyk literacki, stypendysta Ministerstwa Kultury i Dziedzictwa Narodowego (2010).

                    \r\n\r\n

                    Paulina Choroma\u0144ska \u2013 redaktorka techniczna, studentka II roku studi\u00f3w magisterskich w Instytucie Informacji Naukowej i Studi\u00f3w Bibliologicznych UW. Pracuje r\u00f3wnie\u017c w Pracowni Dokumentacji Teatru w Instytucie Teatralnym im. Z. Raszewskiego w Warszawie.

                    \r\n\r\n

                    Aneta Rawska - redaktorka techniczna, studentka II roku studi\u00f3w magisterskich w Instytucie Informacji Naukowej i Studi\u00f3w Bibliologicznych UW, mi\u0142o\u015bniczka wypiek\u00f3w i dobrej kuchni. Od 2009 roku prowadzi serwis ko\u0142a PZW nr 21 w Wo\u0142ominie.

                    \r\n", + "right_column_lt": "\ufeff

                    Dorota A. Kowalska \u2013 literat\u016bros redaktor\u0117, lingvist\u0117, polonist\u0117, slavist\u0117, humanitarini\u0173 moksl\u0173 daktar\u0117, Lenkijos moksl\u0173 akademijos Lenk\u0173 kalbos instituto adjunkt\u0117, kur atlieka darbus, susijusius su istorija ir dabartine lenk\u0173 kalba Ukrainoje. Laisvalaikiu dainuoja archaji\u0161kas ukrainie\u010di\u0173 ir rus\u0173 dainas, dviratinink\u0117.

                    \r\n\r\n

                    Aleksandra Seku\u0142a \u2013 literat\u016bros redaktor\u0117, literat\u016bros istorik\u0117, humanitarini\u0173 moksl\u0173 daktar\u0117, Var\u0161uvos universiteto Polonistikos fakulteto bei Lenkijos moksl\u0173 akademijos Filosofijos ir sociologijos instituto Socialini\u0173 moksl\u0173 mokyklos absolvent\u0117. Profesionaliai u\u017esiima lenk\u0173 romantizmu, id\u0117jos istorija ir kult\u016bros teorija.

                    \r\n\r\n

                    Pawe\u0142 Kozio\u0142 \u2013 literat\u016bros redaktorius, gim\u0119s 1979 m., humanitarini\u0173 moksl\u0173 daktaras besispecializuojantis senojoje literat\u016broje, Var\u0161uvos universiteto Polonistikos fakulteto bei Dulwich College Londone absolventas. Poetas, literat\u016bros kritikas, Kult\u016bros ir nacionalinio paveldo ministerijos stipendininkas (2010).

                    \r\n\r\n

                    Paulina Choroma\u0144ska \u2013 technin\u0117 redaktor\u0117, Var\u0161uvos universiteto Bibliotekininkyst\u0117s ir informatikos instituto magistrant\u016bros studij\u0173 antro kurso student\u0117. Taip pat dirba Z. Raszewski Teatro instituto Teatro dokumentacijos skyriuje Var\u0161uvoje.\r\n\r\n

                    Aneta Rawska \u2013 technin\u0117 redaktor\u0117, Var\u0161uvos universiteto Bibliotekininkyst\u0117s ir informatikos instituto magistrant\u016bros studij\u0173 antro kurso student\u0117, kepini\u0173 ir skanios virtuv\u0117s gerb\u0117ja. Nuo 2009 m. pri\u017ei\u016bri PZW (Lenk\u0173 \u017evej\u0173 s\u0105junga) nr. 21 interneto svetain\u0119 Wo\u0142omin mieste.\r\n", + "left_column_lt": "\ufeff

                    Magdalena Biernat \u2013 projekto koordinator\u0117, fondo \u0160iuolaikin\u0117 Lenkija valdan\u010dioji direktor\u0117. Sociolog\u0117, Var\u0161uvos universiteto ir L\u2019Universit\u00e9 libre de Bruxelles absolvent\u0117. Internetini\u0173 projekt\u0173 specialist\u0117. Koordinavo Kandydaci 2009 ir Mam Prawo Wiedzie\u0107 Asocijacijos 61 projektus. Dirbo prie socialini\u0173 tyrim\u0173, nevyriausybini\u0173 organizacij\u0173 ir tyrim\u0173 \u012fstaig\u0173 \u012fgyvendinam\u0173.

                    \r\n\r\n

                    Rados\u0142aw Czajka \u2013 pagrindinis programuotojas, studijavo Informacini\u0173 technologij\u0173 specialyb\u0119 Matematikos, informatikos ir mechanikos fakultete. Python, XHTML, Javascript, CSS, LaTeX, SQL programavimo kalb\u0173 ir \u017eymi\u0173 ekspertas. Turi patirties su frameworks\u2019ais Django, Jquery, patirtis su XML (XSLT) dokument\u0173 transformavimu, PDF ir EPUB formatu e-knyg\u0173 gamyba bei su mobili\u0173j\u0173 program\u0173 skiriam\u0173 operacinei sistemai Android ir iOS k\u016brim\u0173.

                    \r\n\r\n

                    Marcin Koziej \u2013 programuotojas, Var\u0161uvos technikos universiteto absolventas ir Var\u0161uvos universiteto Filosofijos instituto doktorantas. Mokotovo maisto kooperatyvo (Mokotowska Kooperatywa Spo\u017cywcza) aktyvistas. Keliautojas, dviratininkas, puotautojas. Homo ludens.

                    \r\n\r\n\t\r\n

                    Marta Niedzia\u0142kowska \u2013 technin\u0117 redaktor\u0117, Var\u0161uvos universiteto Bibliotekininkyst\u0117s ir informatikos absolvent\u0117. Universiteto Collegium Civitas Public Policy and Administration magistrant\u016bros studij\u0173 student\u0117.

                    \r\n", + "title_fr": "Notre \u00e9quipe", + "right_column_ru": "\ufeff

                    \u0414\u043e\u0440\u043e\u0442\u0430 A. \u041a\u043e\u0432\u0430\u043b\u044c\u0441\u043a\u0430 \u2013 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u044f\u0437\u044b\u043a\u043e\u0432\u0435\u0434, \u0444\u0438\u043b\u043e\u043b\u043e\u0433 \u0438 \u0441\u043b\u0430\u0432\u0438\u0441\u0442\u043a\u0430, \u0434\u043e\u043a\u0442\u043e\u0440 \u0433\u0443\u043c\u0430\u043d\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043d\u0430\u0443\u043a, \u0430\u0434\u044a\u044e\u043d\u043a\u0442 \u0432 \u043d\u0430\u0443\u0447\u043d\u043e\u0439 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u041f\u043e\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043e\u043a\u0440\u0430\u0438\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0418\u0419\u041f \u041f\u0410\u041d, \u0433\u0434\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0441\u043a\u0438\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u0432 \u0423\u043a\u0440\u0430\u0438\u043d\u0435. \u0415\u0435 \u0445\u043e\u0431\u0431\u0438 \u044d\u0442\u043e \u0430\u0440\u0445\u0430\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0435 \u0438 \u0440\u0443\u0441\u0441\u043a\u0438\u0435 \u043d\u0430\u0440\u043e\u0434\u043d\u044b\u0435 \u043f\u0435\u0441\u043d\u0438.

                    \r\n\r\n

                    \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u0421\u0435\u043a\u0443\u043b\u0430 \u2013 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0438\u0441\u0442\u043e\u0440\u0438\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b, \u0434\u043e\u043a\u0442\u043e\u0440 \u0433\u0443\u043c\u0430\u043d\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043d\u0430\u0443\u043a, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u0430 \u0424\u0438\u043b\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0444\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u0438 \u0428\u043a\u043e\u043b\u044b \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u0443\u043a \u043f\u0440\u0438 \u0418\u0444\u0438\u0421 \u041f\u0410\u041d. \u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0438 \u043d\u0430\u0443\u0447\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0441\u043a\u0438\u043c \u0440\u043e\u043c\u0430\u043d\u0442\u0438\u0437\u043c\u043e\u043c, \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0438\u0434\u0435\u0438 \u0438 \u0442\u0435\u043e\u0440\u0438\u0435\u0439 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u044b.

                    \r\n\r\n

                    \u041f\u0430\u0432\u0435\u043b \u041a\u043e\u0437\u0435\u043b\u2013 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440. 1979 \u0433.\u0440., \u0434\u043e\u043a\u0442\u043e\u0440 \u0433\u0443\u043c\u0430\u043d\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043d\u0430\u0443\u043a, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u043f\u043e \u0434\u0440\u0435\u0432\u043d\u0435\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0435, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0424\u0438\u043b\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u0438 Dulwich College \u0432 \u041b\u043e\u043d\u0434\u043e\u043d\u0435. \u041f\u043e\u044d\u0442, \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u043a\u0440\u0438\u0442\u0438\u043a, \u0441\u0442\u0438\u043f\u0435\u043d\u0434\u0438\u0430\u0442 \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u044b \u0438 \u043d\u0430\u0440\u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0430 (2010).

                    \r\n\r\n

                    \u041f\u0430\u0443\u043b\u0438\u043d\u0430 \u0425\u043e\u0440\u043e\u043c\u0430\u043d\u044c\u0441\u043a\u0430 \u2013 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 II \u043a\u0443\u0440\u0441\u0430 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0430 \u041d\u0430\u0443\u0447\u043d\u043e\u0439 \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0412\u0423. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u0432 \u041d\u0430\u0443\u0447\u043d\u043e\u0439 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0442\u0435\u0430\u0442\u0440\u0430, \u0432 \u0422\u0435\u0430\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u043c \u0438\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0435 \u0438\u043c. \u0417. \u0420\u0430\u0448\u0435\u0432\u0441\u043ao\u0433\u043e \u0432 \u0412\u0430\u0440\u0448\u0430\u0432\u0435.

                    \r\n\r\n

                    \u0410\u043d\u0435\u0442\u0430 \u0420\u0430\u0432\u0441\u043a\u0430 - \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 II \u043a\u0443\u0440\u0441\u0430 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0430 \u041d\u0430\u0443\u0447\u043d\u043e\u0439 \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0412\u0423, \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u043d\u0438\u0446\u0430 \u0432\u044b\u043f\u0435\u043a\u0430\u043d\u0438\u044f \u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043a\u0443\u0445\u043d\u0438. \u0421 2009 \u0433. \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u043a\u0440\u0443\u0436\u043a\u0430 \u041f\u0417\u0412 \u043d\u043e.21 \u0432 \u0412\u043e\u043b\u043e\u043c\u0438\u043d\u0435.

                    \r\n", + "left_column_fr": "

                    Magdalena Biernat \u2013 coordinatrice du projet et directrice administrative de la fondation Nowoczesna Polska, sociologue, gradu\u00e9e de l'Universit\u00e9 de Varsovie et l\u2019Universit\u00e9 libre de Bruxelles, sp\u00e9cialiste des projets Internet; elle a coordonn\u00e9 les projets Kandydaci 2009 et Mam Prawo Wiedzie\u0107 pour Stowarzyszenie 61 (l'Assocciation 61). Elle a particip\u00e9 aux travaux de recherches sociales r\u00e9alis\u00e9s par les organisations non gouvernementales et soci\u00e9t\u00e9s de recherche.

                    \r\n\r\n

                    Rados\u0142aw Czajka \u2013 programmeur principal du projet, il a \u00e9tudi\u00e9 l'informatique \u00e0 MIMUW (l'Univerist\u00e9 de Varsovie, D\u00e9partement de Math\u00e9matique, Informatique et G\u00e9nie M\u00e9canique). Il est un expert dans les langages de programmation tels que Python, XHTML, Javascript, CSS, LaTeX, SQL. Il a de l'exp\u00e9rience dans les frameworks Django et Jquery, de l'exp\u00e9rience dans l'\u00e9dition de documents XML (XSLT), dans la production de livres num\u00e9riques aux formats PDF et EPUB et dans la cr\u00e9ation d'applications mobiles pour Android et iOS.

                    \r\n\r\n

                    Marcin Koziej \u2013 programmeur, amateur infatigable de philosophie, informaticien, voyageur, cycliste et banqueteur. Homo ludens.

                    \r\n\r\n

                    Marta Niedzia\u0142kowska \u2013 r\u00e9dactrice technique, gradu\u00e9e en Bibliothecologie et Sciences de l'Information de l'Universit\u00e9 de Varsovie. Une \u00e9tudiante d'\u00e9tudes secondaires en Public Policy and Administration au Collegium Civitas.

                    \r\n\r\n", + "title": "The team", + "title_lt": "\ufeffM\u016bs\u0173 komanda", + "right_column": "\ufeff\r\n

                    Dorota A. Kowalska \u2013 literary editor, linguist, specialist in the field of Polish studies, Slavist, PhD holder. She is an assistant professor in Pracownia Polszczyzny Kresowej at the Institute of the Polish Language, Polish Academy of Sciences, where she works on the history and the present of the Polish language in Ukraine. As a hobby, she sings Ukrainian and Russian archaic songs and cycles.

                    \r\n\r\n

                    Aleksandra Seku\u0142a \u2013 literary editor, literary historian, PhD holder. She is a graduate of the Faculty of Polish Studies, Warsaw University and the Graduate School for Social Research at the Institute of Philosophy and Sociology, Polish Academy of Sciences. Her research interests include Polish Romanticism, the history of ideas and the theory of culture.

                    \r\n\r\n

                    Pawe\u0142 Kozio\u0142 \u2013 literary editor. B. 1979, he is a PhD holder specializing in classic literature and graduate of the Faculty of Polish Studies, Warsaw University and Dulwich College in London. A poet, literary critic, the Ministry of Culture and National Heritage scholarship holder (2010).

                    \r\n\r\n

                    Paulina Choroma\u0144ska \u2013 production editor, undergraduate student of Information and Book Studies at Warsaw University. She also works in the Theatre Documentation Office of the Zbigniew Raszewski Theatrical Institute in Warsaw.

                    \r\n\r\n

                    Aneta Rawska - production editor, undergraduate student of Information and Book Studies at Warsaw University, fan of pastries and good cuisine. Since 2009 she has been administering the portal of PZW (Polish Angling Association) group no. 21 in Wo\u0142omin.

                    ", + "right_column_es": "

                    Dorota A. Kowalska \u2013 redactora literaria, ling\u00fcista, licenciada en filolog\u00eda polaca y eslava, doctorada en humanidades, profesora adjunta en el Laboratorio de Idioma Polaco de la Zona Fronteriza, donde se ocupa de la historia y presente del idioma polaco en Ucrania. Su pasatiempo favorito es cantar canciones arcaicas ucranianas y rusas. Ciclista.

                    \r\n\r\n

                    Aleksandra Seku\u0142a \u2013 redactora literaria, historiadora de literatura, doctorada en humanidades, licenciada por la Facultad de Filolog\u00eda Polaca por la Escuela de Ciencias Sociales del IFIS PAN (el Instituto de Filosof\u00eda y Sociolog\u00eda de la Academia Polaca de Ciencias). Se ocupa de el romanticismo polaco, historia de la idea y teor\u00eda de cultura.

                    \r\n\r\n

                    Pawe\u0142 Kozio\u0142 \u2013 redactor literario. Naci\u00f3 en 1979, doctorado en humanidades, especializado en literatura antigua. Licenciado por la Facultad de Filolog\u00eda Polaca de la Universidad de Varsovia y por Dulwich College en Londres. Poeta y cr\u00edtico literario, becario de el Ministerio de Cultura y Patrimonio Nacional (2010).

                    \r\n\r\n

                    Paulina Choroma\u0144ska \u2013 redactora t\u00e9cnica, estudiante de segundo curso de licenciatura en el Instituto de Informaci\u00f3n Cient\u00edfica y Bibliotecolog\u00eda de la Universidad de Varsovia. Aparte, trabaja en el Centro de Documentaci\u00f3n de Teatro en el Instituto de Teatro de Zbigniew Raszewski en Varsovia.

                    \r\n\r\n

                    Aneta Rawska - redactora t\u00e9cnica, estudiante de segundo curso de licenciatura en el Instituto de Ciencias de la Informaci\u00f3n y Bibliotecolog\u00eda de la Universidad de Varsovia, amante de la pasteler\u00eda y la buena cocina. Desde 2009 est\u00e1 a cargo de la p\u00e1gina web de PZW (Asociaci\u00f3n Polaca de Pesca) n\u00famero 21 en Wolomin.

                    \r\n", + "right_column_en": "\ufeff\r\n

                    Dorota A. Kowalska \u2013 literary editor, linguist, specialist in the field of Polish studies, Slavist, PhD holder. She is an assistant professor in Pracownia Polszczyzny Kresowej at the Institute of the Polish Language, Polish Academy of Sciences, where she works on the history and the present of the Polish language in Ukraine. As a hobby, she sings Ukrainian and Russian archaic songs and cycles.

                    \r\n\r\n

                    Aleksandra Seku\u0142a \u2013 literary editor, literary historian, PhD holder. She is a graduate of the Faculty of Polish Studies, Warsaw University and the Graduate School for Social Research at the Institute of Philosophy and Sociology, Polish Academy of Sciences. Her research interests include Polish Romanticism, the history of ideas and the theory of culture.

                    \r\n\r\n

                    Pawe\u0142 Kozio\u0142 \u2013 literary editor. B. 1979, he is a PhD holder specializing in classic literature and graduate of the Faculty of Polish Studies, Warsaw University and Dulwich College in London. A poet, literary critic, the Ministry of Culture and National Heritage scholarship holder (2010).

                    \r\n\r\n

                    Paulina Choroma\u0144ska \u2013 production editor, undergraduate student of Information and Book Studies at Warsaw University. She also works in the Theatre Documentation Office of the Zbigniew Raszewski Theatrical Institute in Warsaw.

                    \r\n\r\n

                    Aneta Rawska - production editor, undergraduate student of Information and Book Studies at Warsaw University, fan of pastries and good cuisine. Since 2009 she has been administering the portal of PZW (Polish Angling Association) group no. 21 in Wo\u0142omin.

                    ", + "left_column_de": "

                    Magdalena Biernat - Projektkoordinator, Verwaltungsleiterin der Stiftung Modernes Polen. Soziologin, Absolventin der Universit\u00e4t Warschau und der Universit\u00e9 libre de Bruxelles. Spezialistin f\u00fcr Internetprojekte. Sie hat die Projekte Kandydaci 2009 (Kandidaten 2009) und Mam Prawo Wiedzie\u00e6 (Ich habe Recht zu wissen) in Verein 61 (Stowarzyszenie 61) koordiniert. Sie hat an vielen Gesellschaftsstudien gearbeitet, die von Nichtregierungsorganisationen und Forschungsanstalten durchgef\u00fchrt wurden.

                    \r\n\r\n

                    Rados\u0142aw Czajka - Hauptprogrammierer, studierte Informatik an der Fakult\u00e4t f\u00fcr Mathematik, Informatik und Maschinen an der Universit\u00e4t Warschau. Gewandt in Programmierersprachen und Datenbanken: Python, XHTML, Javascript, CSS, LaTeX, SQL. Er besitz Erfahrung in Frameworks: Django, Jquery, den Transformationen XML-Dateien (XSLT), der Herstellung von E-books in PDF und EPUB und Generierung von Mobilanwendungen f\u00fcr das Android- und iOS-System.

                    \r\n\r\n

                    Marcin Koziej - Programmierer, Absolvent der Technischen Universit\u00e4t Warschau und Doktorand im Institut f\u00fcr Philosophie an Universit\u00e4t. T\u00e4tig im Konsumverein von Mokot\u00f3w (Mokotowska Kooperatywa Spo\u017cywcza). Reisender und Radfahrer. Homo ludens.

                    \r\n\r\n

                    Marta Niedzia\u0142kowska - Textbearbeiterin, Absolventin der Wissenschaftsinformation und Bibliothekwissenschaft an der Universit\u00e4t Warschau. Masterstudium: Collegium Civitas, Fakult\u00e4t: Public Policy and Administration.

                    \r\n\r\n", + "title_uk": "\ufeff\u041a\u043e\u043c\u0430\u043d\u0434\u0430", + "right_column_it": "

                    Dorota A. Kowalska \u2013 redattrice letteraria, linguista, ha studiato lingua e letteratura polacca e slava, ha conseguito il dottorato in discipline umanistiche, inoltre \u00e8 docente presso Pracownia Polszczyzny Kresowej IJP PAN, dove \u00e8 esperta di storia e contemporaneit\u00e0 della lingua polacca in Ucraina. Nel tempo libero canta canzoni arcaiche ucraine e russe, ed \u00e8 una ciclista.

                    \r\n\r\n

                    Aleksandra Seku\u0142a \u2013 redattrice letteraria, storica della letteratura, ha conseguito il dottorato in discipline umanistiche, laureata in lingua e letteratura polacca presso l\u2019Universit\u00e0 di Varsavia e di Szko\u0142a Nauk Spo\u0142ecznych (Scuola delle Scienze Sociali) presso IFiS PAN.In ambito professionale si occupa del romanticismo polacco, della storia dell'idea e della teoria della cultura

                    \r\n\r\n

                    Pawe\u0142 Kozio\u0142 \u2013 redattore letterario. Nato nel 1979, dottore di ricerca in discipline umanistiche specializzato in letteratura antica, laureato in lingua e letteratura polacca presso l\u2019Universit\u00e0 di Varsavia e del Dulwich College di Londra.E' poeta, critico letterario e borsista del Ministero della Cultura e del Patrimonio Nazionale (2010).

                    \r\n\r\n

                    Paulina Choroma\u0144ska \u2013 redattrice tecnica, studentessa del secondo anno dell\u2019Istituto di Informazione Scientifica e Biblioteconomia dell\u2019Universit\u00e0 di Varsavia. Lavora anche nel Laboratorio di Documentazione del Teatro presso l\u2019Istituto Teatrale im. Z. Raszewskiego a Varsavia.

                    \r\n\r\n

                    Aneta Rawska \u2013 redattrice tecnica, studentessa del secondo anno dell\u2019Istituto di Informazione Scientifica e Biblioteconomia dell\u2019Universit\u00e0 di Varsavia, appassionata di cucina e dolci. Dal 2009 gestisce il circolo PZW nr 21 a Wo\u0142omin.

                    \r\n\r\n", + "title_pl": "Zesp\u00f3\u0142", + "left_column": "

                    Magdalena Biernat - Project Coordinator, Managing Director of the Modern Poland Foundation. She is a sociologist, graduate of Warsaw University and L'Universit\u00e9 libre de Bruxelles, and a web-based project specialist. She coordinated projects \"Kandydaci 2009\" and \"Mam Prawo Wiedzie\u0107\" in Stowarzyszenie 61. She has been working on social research carried out by non-governmental organizations and research companies.

                    \r\n\r\n

                    Rados\u0142aw Czajka - chief programmer, he studied informatics at the Faculty of Mathematics, Informatics and Mechanics, Warsaw University. Proficient in programming languages, Python, XHTML, Javascript, CSS, LaTeX, SQL markup. He has experience in working with Django framework, Jquery, converting XML (XSLT) documents, creating e-books in PDF and EPUB formats and creating mobile applications for Android and iOS systems.

                    \r\n\r\n

                    Marcin Koziej - programmer. He is an indefatigable enthusiast of philosophy, IT specialist, traveller, cyclist and reveller. Homo Ludens.

                    \r\n\r\n

                    Marta Niedzia\u0142kowska - production editor, graduate of the Information and Book Studies at Warsaw University. She is an undergraduate student of Public Policy and Administration at Collegium Civitas in Warsaw.

                    ", + "right_column_uk": "\ufeff

                    \u0414\u043e\u0440\u043e\u0442\u0430 \u0410. \u041a\u043e\u0432\u0430\u043b\u044c\u0441\u044c\u043a\u0430 \u2013 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u043c\u043e\u0432\u043e\u0437\u043d\u0430\u0432\u0435\u0446\u044c, \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0444\u0456\u043b\u043e\u043b\u043e\u0433 \u0442\u0430 \u0441\u043b\u0430\u0432\u0456\u0441\u0442, \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u0433\u0443\u043c\u0430\u043d\u0456\u0442\u0430\u0440\u043d\u0438\u0445 \u043d\u0430\u0443\u043a, \u0430\u0434'\u044e\u043d\u043a\u0442 \u0443 \u0412\u0456\u0434\u0434\u0456\u043b\u0456 \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u043c\u043e\u0432\u0438 \u041a\u0440\u0435\u0441\u0456\u0432 \u0432 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u043c\u043e\u0432\u0438 \u0432 \u041f\u043e\u043b\u044c\u0441\u044c\u043a\u0456\u0439 \u0410\u043a\u0430\u0434\u0435\u043c\u0456\u0457 \u041d\u0430\u0443\u043a, \u0434\u0435 \u0437\u0430\u0439\u043c\u0430\u0454\u0442\u044c\u0441\u044f \u0456\u0441\u0442\u043e\u0440\u0456\u0454\u044e \u0442\u0430 \u0441\u0443\u0447\u0430\u0441\u043d\u0456\u0441\u0442\u044e \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u043c\u043e\u0432\u0438 \u0432 \u0423\u043a\u0440\u0430\u0457\u043d\u0456. \u0407\u0457 \u0445\u043e\u0431\u0456 - \u0441\u043f\u0456\u0432\u0430\u0442\u0438 \u0430\u0440\u0445\u0430\u0457\u0447\u043d\u0456 \u0443\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0456 \u0442\u0430 \u0440\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0456 \u043f\u0456\u0441\u043d\u0456; \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0438\u0441\u0442\u043a\u0430.

                    \r\n\r\n

                    \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u0421\u0435\u043a\u0443\u043b\u0430 \u2013 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0456\u0441\u0442\u043e\u0440\u0438\u043a \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0438, \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u0433\u0443\u043c\u0430\u043d\u0456\u0442\u0430\u0440\u043d\u0438\u0445 \u043d\u0430\u0443\u043a, \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u044f \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0443 \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0444\u0456\u043b\u043e\u043b\u043e\u0433\u0456\u0457 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u0442\u0430 \u0428\u043a\u043e\u043b\u0438 \u0421\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u0438\u0445 \u041d\u0430\u0443\u043a \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0443 \u0444\u0456\u043b\u043e\u0441\u043e\u0444\u0456\u0457 \u0442\u0430 \u0441\u043e\u0446\u0456\u043e\u043b\u043e\u0433\u0456\u0457 \u041f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0430\u043a\u0430\u0434\u0435\u043c\u0456\u0457 \u043d\u0430\u0443\u043a. \u041f\u0440\u043e\u0444\u0435\u0441\u0456\u0439\u043d\u043e \u0442\u0430 \u043d\u0430\u0443\u043a\u043e\u0432\u043e \u0437\u0430\u0439\u043c\u0430\u0454\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u043c \u0440\u043e\u043c\u0430\u043d\u0442\u0438\u0437\u043c\u043e\u043c, \u0456\u0441\u0442\u043e\u0440\u0456\u0454\u044e \u0456\u0434\u0435\u0457 \u0442\u0430 \u0442\u0435\u043e\u0440\u0456\u0454\u044e \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0438.

                    \r\n\r\n

                    \u041f\u0430\u0432\u0435\u043b \u041a\u043e\u0437\u0456\u043e\u043b \u2013 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u043d\u0430\u0440\u043e\u0434\u0436\u0435\u043d\u0438\u0439 \u0443 1979, \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u0433\u0443\u043c\u0430\u043d\u0456\u0442\u0430\u0440\u043d\u0438\u0445 \u043d\u0430\u0443\u043a, \u044f\u043a\u0438\u0439 \u0441\u043f\u0435\u0446\u0456\u0430\u043b\u0456\u0437\u0443\u0454\u0442\u044c\u0441\u044f \u0443 \u0434\u0430\u0432\u043d\u0456\u0439 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0456, \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0443 \u041f\u043e\u043b\u043e\u043d\u0456\u0441\u0442\u0438\u043a\u0438 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u0442\u0430 \u0414\u0430\u043b\u0456\u0434\u0436-\u041a\u043e\u043b\u0435\u0434\u0436\u0443 \u0443 \u041b\u043e\u043d\u0434\u043e\u043d\u0456. \u041f\u043e\u0435\u0442, \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0439 \u043a\u0440\u0438\u0442\u0438\u043a, \u0441\u0442\u0438\u043f\u0435\u043d\u0434\u0438\u0441\u0442 \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0438 \u0442\u0430 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u0441\u043f\u0430\u0434\u0449\u0438\u043d\u0438 (2010).

                    \r\n\r\n

                    \u041f\u0430\u0443\u043b\u0456\u043d\u0430 \u0425\u043e\u0440\u043e\u043c\u0430\u043d\u0441\u044c\u043a\u0430 \u2013 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 \u0406\u0406 \u043a\u0443\u0440\u0441\u0443 \u043c\u0430\u0433\u0456\u0441\u0442\u0440\u0430\u0442\u0443\u0440\u0438 \u0432 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u043d\u0430\u0443\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0442\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u0437\u043d\u0430\u0432\u0441\u0442\u0432\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u041f\u0440\u0430\u0446\u044e\u0454 \u0442\u0430\u043a\u043e\u0436 \u0443 \u0412\u0456\u0434\u0434\u0456\u043b\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0456\u0457 \u0442\u0435\u0430\u0442\u0440\u0443 \u0432 \u0422\u0435\u0430\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u0456\u043c. \u0417. \u0420\u0430\u0448\u0435\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443 \u0412\u0430\u0440\u0448\u0430\u0432\u0456.

                    \r\n\r\n

                    \u0410\u043d\u0435\u0442\u0430 \u0420\u0430\u0432\u0441\u044c\u043a\u0430 - \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 \u0406\u0406 \u043a\u0443\u0440\u0441\u0443 \u043c\u0430\u0433\u0456\u0441\u0442\u0440\u0430\u0442\u0443\u0440\u0438 \u0432 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u043d\u0430\u0443\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0442\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u0437\u043d\u0430\u0432\u0441\u0442\u0432\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443, \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u043a\u0430 \u0432\u0438\u043f\u0456\u0447\u043a\u0438 \u0442\u0430 \u0434\u043e\u0431\u0440\u043e\u0457 \u043a\u0443\u0445\u043d\u0456. \u0417 2009 \u0440\u043e\u043a\u0443 \u0437\u0430\u0439\u043c\u0430\u0454\u0442\u044c\u0441\u044f \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043d\u043e\u044e \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u043e\u044e \u0433\u0443\u0440\u0442\u043a\u0430 \u041f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0441\u043f\u0456\u043b\u043a\u0438 \u0440\u0438\u0431\u0430\u043b\u043e\u043a \u2116 21 \u0443 \u0412\u043e\u043b\u043e\u043c\u0456\u043d\u0456.

                    \r\n", + "title_en": "The team", + "left_column_pl": "

                    Magdalena Biernat \u2013 koordynatorka projektu, dyrektor zarz\u0105dzaj\u0105ca fundacji Nowoczesna Polska. Socjolo\u017cka, absolwentka Uniwersytetu Warszawskiego i L\u2019Universit\u00e9 libre de Bruxelles. Specjalistka od projekt\u00f3w internetowych. Koordynowa\u0142a projekty Kandydaci 2009 i Mam Prawo Wiedzie\u0107 w Stowarzyszeniu 61. Pracowa\u0142a przy wielu badaniach spo\u0142ecznych realizowanych przez organizacje pozarz\u0105dowe i firmy badawcze.

                    \r\n\r\n

                    Rados\u0142aw Czajka \u2013 g\u0142\u00f3wny programista, studiowa\u0142 informatyk\u0119 na MIMUW. Bieg\u0142y w j\u0119zykach programowania, znacznik\u00f3w: Python, XHTML, Javascript, CSS, LaTeX, SQL. Posiada do\u015bwiadczenie z frameworkami Django, Jquery, do\u015bwiadczenie w przekszta\u0142ceniach dokument\u00f3w XML (XSLT), w produkcji ebook\u00f3w w formatach PDF i EPUB oraz w tworzeniu aplikacji mobilnych na system Android i iOS.

                    \r\n\r\n

                    Marcin Koziej \u2013 programista. Absolwent Politechniki Warszawskiej i doktorant w Instytucie Filozofii Uniwersytetu Warszawskiego. Dzia\u0142acz Mokotowskiej Kooperatywy Spo\u017cywczej. Podr\u00f3\u017cnik, rowerzysta i biesiadnik. Homo ludens.

                    \r\n\r\n

                    Marta Niedzia\u0142kowska \u2013 redaktorka techniczna, absolwentka bibliotekoznawstwa i informacji naukowej UW. Studentka studi\u00f3w magisterskich Public Policy and Administration na Collegium Civitas.

                    \r\n\r\n", + "left_column_it": "

                    Magdalena Biernat \u2013 coordinatrice del progetto, direttrice della fondazione Polonia Moderna. Si \u00e8 laureata in sociologia presso l\u2019Universit\u00e0 di Varsavia e L\u2019Universit\u00e9 libre de Bruxelles.Esperto di web design, ha coordinato i progetti Candidati 2009 e Ho Diritto di Sapere in Associazione 61. Ha lavorato su molte ricerche sociali svolte dalle organizzazioni non governative e di ricerca.

                    \r\n\r\n

                    Rados\u0142aw Czajka \u2013 programmatore principale, ha studiato informatica al MIMUW (Dipartimento di Matematica, Informatica e Meccanica dell\u2019Universit\u00e0 di Varsavia). Conosce bene i linguaggi di programmazione, tag: Python, XHTML, Javascript, CSS, LaTeX, SQL. Ha esperienza con framework Django, Jquery, nella trasformazione di documenti XML (XSLT), nella produzione di e-books in formato PDF e EPUB e nella creazione di applicazioni mobili per il sistema Android e iOS.

                    \r\n\r\n

                    Marcin Koziej \u2013 programmatore. Laureato presso Politechnika Warszawska (Universit\u00e0 della Tecnologia di Varsavia), ha conseguito il dottorato di ricerca presso l\u2019Istituto di Filosofia dell\u2019Universit\u00e0 di Varsavia. Attivista di Mokotowska Kooperatywa Spo\u017cywcza.E' inoltre viaggiatore, ciclista e homo ludens.

                    \r\n\r\n

                    Marta Niedzia\u0142kowska \u2013 redattrice tecnica, laureata all\u2019Istituto di Informazione Scientifica e Biblioteconomia dell\u2019Universit\u00e0 di Varsavia. Studentessa di Public Policy and Administration in Collegium Civitas.

                    \r\n\r\n\r\n", + "title_es": "El equipo", + "left_column_ru": "\ufeff

                    \u041c\u0430\u0433\u0434\u0430\u043b\u0435\u043d\u0430 \u0411\u0435\u0440\u043d\u0430\u0442 \u2013 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440 \u0424\u043e\u043d\u0434\u0430 Nowoczesna Polska. \u0421\u043e\u0446\u0438\u043e\u043b\u043e\u0433, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u0438 L\u2019Universit\u00e9 libre de Bruxelles. \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u00ab\u041a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u044b 2009\u00bb \u0438 \u00ab\u0423 \u043c\u0435\u043d\u044f \u043f\u0440\u0430\u0432\u043e \u0437\u043d\u0430\u0442\u044c\u00bb \u0432 \u041e\u0431\u0449\u0435\u0441\u0442\u0432\u0435 61. \u0420\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043d\u0430\u0434 \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u0438 \u043e\u043f\u0440\u043e\u0441\u043d\u044b\u043c\u0438 \u0444\u0438\u0440\u043c\u0430\u043c\u0438.

                    \r\n\r\n

                    \u0420\u0430\u0434\u043e\u0441\u043b\u0430\u0432 \u0427\u0430\u0439\u043a\u0430 \u2013 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0438 \u0432 \u041c\u0418\u041c\u0412\u0423. \u0411\u0435\u0433\u043b\u043e \u0437\u043d\u0430\u0435\u0442 \u044f\u0437\u044b\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: Python, XHTML, Javascript, CSS, LaTeX, SQL. \u0418\u043c\u0435\u0435\u0442 \u043e\u043f\u044b\u0442 \u0441 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c\u0438 \u0442\u0438\u043f\u0430: Django, Jquery; \u043e\u043f\u044b\u0442 \u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 XML (XSLT), \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 PDF \u0438 EPUB, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 Android \u0438 Ios.

                    \r\n\r\n

                    \u041c\u0430\u0440\u0447\u0438\u043d \u041a\u043e\u0437\u0435\u0439 \u2013 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u0412\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u041f\u043e\u043b\u0438\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0430 \u0438 \u0434\u043e\u043a\u0442\u043e\u0440\u0430\u043d\u0442 \u0432 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0435 \u0424\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u0438 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430. \u0414\u0435\u044f\u0442\u0435\u043b\u044c \u041c\u043e\u043a\u043e\u0442\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0430. \u041f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a, \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0438\u0441\u0442 \u0438 \u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0439. Homo ludens.

                    \r\n\r\n

                    \u041c\u0430\u0440\u0442\u0430 \u041d\u0435\u0434\u044f\u043b\u043a\u043e\u0432\u0441\u043a\u0430 \u2013 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u0430 \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u0443\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0412\u0423. \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 Public Policy and Administration \u0432 Collegium Civitas.

                    \r\n\r\n", + "slug": "zespol", + "right_column_de": "

                    Dorota A. Kowalska - Bearbeiterin im Literaturbereich, Sprachwissenschaftlerin, Polonistin und Slavistin, Doktortitel in Geisteswissenschaften, Mitarbeiterin in Pracownia Polszczyzny Kresowej IJP PAN, wo sie sich mit der Geschichte und dem heutigen Stand der polnischen Sprache in der Ukraine besch\u00e4ftigt. Sein Steckenpferd ist das Singen von alten russischen und ukrainischen Liedern. Radfahrerin.

                    \r\n\r\n

                    Aleksandra Seku\u0142a - Bearbeiterin im Literaturbereich, Literaturgeschichtsforscherin, Doktortitel in Geisteswissenschaften, Absolventin der Polonistik an der Universit\u00e4t Warschau und der Gesellschaftswissenschaftsschule bei IFiS PAN. Beruflich und wissenschaftlich befasst sie sich mit der polnischen Romantik, Ideengeschichte und Kulturtheorie.

                    \r\n \r\n

                    Pawe\u0142 Kozio\u0142 - Bearbeiter im Literaturbereich. 1979 geboren, Doktortitel in Geisteswissenschaften, Spezialisierung f\u00fcr die alte Literatur, Absolvent der Polonistik an der Universit\u00e4t Warschau und des Dulwich Colleges in London. Dichter, Literaturkritiker, Stipendiat des Ministeriums f\u00fcr Kultur und Nationale Erbe (2010).

                    \r\n\r\n

                    Paulina Choroma\u0144ska - Textbearbeiterin, Studentin im 4. Semester des Masterstudiums im Insitut f\u00fcr Wissenschaftsinformation und Bibliothekwissenschaft an der Universit\u00e4t Warschau. Sie arbeitet auch in der Forschungsst\u00e4tte f\u00fcr Theaterdokumentation im Zbigniew-Raszewski-Theaterinsitut in Warschau.

                    \r\n\r\n

                    Aneta Rawska - Textbearbeiterin, Studentin im 4. Semester des Masterstudiums im Insitut f\u00fcr Wissenschaftsinformation und Bibliothekwissenschaft. Sie mag gute K\u00fcche und ist Backenliebhaberin. Ab 2009 f\u00fchrt sie den Service des Polnischen Anglervereins Nr. 21 in Wo\u0142omin.

                    \r\n", + "left_column_es": "

                    Magdalena Biernat \u2013 la coordinadora del proyecto, directora ejecutiva de la Fundaci\u00f3n Polonia Moderna. Soci\u00f3loga, licenciada por la Universidad de Varsovia y de L\u2019Universit\u00e9 libre de Bruxelles. Especializada en proyectos de Internet. Coordin\u00f3 los proyectos \u2018Candidatos 2009\u2019 y \u2018Tengo el Derecho de Saber\u2019 en la Asociaci\u00f3n 61. Ha trabajado en varias investigaciones sociales realizadas por organizaciones no gubernamentales y empresas investigadoras.

                    \r\n\r\n

                    Rados\u0142aw Czajka \u2013 programador principal. Estudi\u00f3 inform\u00e1tica en MIM UW (La Facultad de Matem\u00e1ticas, Inform\u00e1tica y Mec\u00e1nica de la Universidad de Varsovia). Conoce los lenguajes de programaci\u00f3n y los marcados: Python, XHTML, Javascript, CSS, LaTex, SQL. Tiene experiencia en los frameworks Django, Jquery; en la transformaci\u00f3n de los archivos XML (XSLT), en la producci\u00f3n de libros electr\u00f3nicos en los formatos PDF y EPUB, incluso tambi\u00e9n en la creaci\u00f3n de aplicaciones m\u00f3viles para los sistema Android e iOS.

                    \r\n\r\n

                    Marcin Koziej \u2013 programador. El incansable amateur de filosof\u00eda, inform\u00e1tico, viajero, ciclista y juerguista. Homo ludens.

                    \r\n\r\n

                    Marta Niedzia\u0142kowska \u2013 redactora t\u00e9cnica, licenciada en Ciencias de la Informaci\u00f3n y Bibliotecolog\u00eda de la Universidad de Varsovia. Estudiante de segundo curso de licenciatura de Public Policy and Administration en el Collegium Civitas.

                    \r\n", + "left_column_en": "

                    Magdalena Biernat - Project Coordinator, Managing Director of the Modern Poland Foundation. She is a sociologist, graduate of Warsaw University and L'Universit\u00e9 libre de Bruxelles, and a web-based project specialist. She coordinated projects \"Kandydaci 2009\" and \"Mam Prawo Wiedzie\u0107\" in Stowarzyszenie 61. She has been working on social research carried out by non-governmental organizations and research companies.

                    \r\n\r\n

                    Rados\u0142aw Czajka - chief programmer, he studied informatics at the Faculty of Mathematics, Informatics and Mechanics, Warsaw University. Proficient in programming languages, Python, XHTML, Javascript, CSS, LaTeX, SQL markup. He has experience in working with Django framework, Jquery, converting XML (XSLT) documents, creating e-books in PDF and EPUB formats and creating mobile applications for Android and iOS systems.

                    \r\n\r\n

                    Marcin Koziej - programmer. He is an indefatigable enthusiast of philosophy, IT specialist, traveller, cyclist and reveller. Homo Ludens.

                    \r\n\r\n

                    Marta Niedzia\u0142kowska - production editor, graduate of the Information and Book Studies at Warsaw University. She is an undergraduate student of Public Policy and Administration at Collegium Civitas in Warsaw.

                    ", + "right_column_fr": "

                    Dorota A. Kowalska \u2013 r\u00e9dactrice litt\u00e9raire, linguiste, poloniste et slaviste, docteure en Lettres, conf\u00e9renci\u00e8re dans le Laboratoire de la Langue polonaise des Confins de l'INP PAN (l'Institut de la Langue polonaise de l'Acad\u00e9mie polonaise des Sciences) o\u00f9 elle s'occupe de l'histoire et contemporan\u00e9it\u00e9 de la langue polonaise en Ukraine. Pour son plaisir, elle chante des chansons archa\u00efque ukrainiennes et russes. Elle est aussi cycliste.

                    \r\n\r\n

                    Aleksandra Seku\u0142a \u2013 r\u00e9dactrice litt\u00e9raire, historienne de la litt\u00e9rature, docteur \u00e8s lettres, gradu\u00e9e en D\u00e9partement de Langue polonaise de l'Universit\u00e9 de Varsovie et en \u00c9cole des Sciences Sociales de IFiS PAN (l'Institut de Philosophie et Sociologie de l'Acad\u00e9mie polonaise des Sciences). Professionnellement, elle s'occupe du romantisme polonais, histoire des id\u00e9es et th\u00e9orie de la culture.

                    \r\n\r\n

                    Pawe\u0142 Kozio\u0142 \u2013 r\u00e9dacteur litt\u00e9raire, n\u00e9 en 1979, docteur en Lettres qui se sp\u00e9cialise en litt\u00e9rature ancienne, gradu\u00e9 en D\u00e9partement de Langue polonaise de l'Universit\u00e9 de Varsovie et en Dulwich College \u00e0 Londres. Il est aussi po\u00e8te, critique litt\u00e9raire, boursier du Minist\u00e8re de la Culture et du Patrimoine national (2010).

                    \r\n\r\n

                    Paulina Choroma\u0144ska \u2013 r\u00e9dactrice technique, \u00e9tudiante de la deuxi\u00e8me ann\u00e9e d'\u00e9tudes secondaires Bibliothecologie et Sciences de l'Information de l'Universit\u00e9 de Varsovie. Elle travaille aussi dans le Centre de Documentation de Th\u00e9\u00e2tre de l'Institut th\u00e9\u00e2tral de Z. Raszewski \u00e0 Varsovie.

                    \r\n\r\n

                    Aneta Rawska - r\u00e9dactrice technique, \u00e9tudiante de la deuxi\u00e8me ann\u00e9e d'\u00e9tudes secondaires en Bibliothecologie et Sciences de l'Information de l'Universit\u00e9 de Varsovie, amateure des fourn\u00e9es et bonne cuisine. Depuis 2009 elle administre le site du cercle 21 de l'Association polonaise de P\u00eache \u00e0 Wo\u0142omin.

                    \r\n", + "title_ru": "\ufeff\u041a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430", + "title_it": "Il nostro staff" + } + }, + { + "pk": 6, + "model": "infopages.infopage", + "fields": { + "title_de": "Arbeite zusammen", + "left_column_uk": "\ufeff
                      \r\n
                    • \u0421\u0442\u0430\u043d\u044c \u043d\u0430\u0448\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442\u043e\u043c \u0430\u0431\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0430\u0447\u0435\u043c
                    • \r\n
                    • \u0417\u0434\u043e\u0431\u0443\u0434\u044c \u043d\u043e\u0432\u0456 \u0443\u043c\u0456\u043d\u043d\u044f \u0442\u0430 \u0434\u043e\u0441\u0432\u0456\u0434
                    • \r\n
                    • \u0412\u0456\u0437\u044c\u043c\u0438 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0456 \u0442\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0436\u0438 \u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u0456\u043d\u043d\u043e\u0432\u0430\u0446\u0456\u0439\u043d\u0443 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0443
                    • \r\n
                    \r\n\r\n

                    \u0417\u0430\u043f\u0440\u043e\u0448\u0443\u0454\u043c\u043e \u0443\u0441\u0456\u0445, \u0445\u0442\u043e \u0445\u043e\u0447\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0443 \u043d\u0430\u0448\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0456. \u0421\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454\u043c\u043e \u0437\u0456 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c\u0438, \u0432\u0447\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u0442\u0430 \u0443\u0441\u0456\u043c\u0430, \u0445\u0442\u043e \u0446\u0456\u043a\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u044e, \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f\u043c \u0442\u0435\u043a\u0441\u0442\u0456\u0432 \u0442\u0430 \u043a\u043e\u043c\u043f\u2019\u044e\u0442\u0435\u0440\u043d\u0438\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438. \u041c\u0438 \u043f\u0440\u043e\u043f\u043e\u043d\u0443\u0454\u043c\u043e \u043f\u0440\u043e\u0444\u0435\u0441\u0456\u0439\u043d\u0456 \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0438 \u0442\u0430 \u043f\u043e\u0441\u0442\u0456\u0439\u043d\u0443 \u0437\u043c\u0456\u0441\u0442\u043e\u0432\u043d\u0443 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0443. \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438 \u043c\u043e\u0436\u0443\u0442\u044c \u043f\u0440\u0430\u0446\u044e\u0432\u0430\u0442\u0438 \u0432 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u043c\u0443 \u0440\u0435\u0436\u0438\u043c\u0456 \u0430\u0431\u043e \u0432 \u043e\u0444\u0456\u0441\u0456 \u0424\u043e\u043d\u0434\u0443.

                    \r\n

                    \u0422\u0430\u043a\u043e\u0436 \u043c\u0438 \u043e\u0440\u0433\u0430\u043d\u0456\u0437\u0443\u0454\u043c\u043e \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0441\u044c\u043a\u0456 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 - \u0440\u043e\u0437\u043f\u043e\u0447\u0430\u043b\u0438 \u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e \u0437 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u043e\u043c \u043d\u0430\u0443\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0442\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u0437\u043d\u0430\u0432\u0447\u0438\u0445 \u0434\u043e\u0441\u043b\u0456\u0434\u0436\u0435\u043d\u044c \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443, \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u0441\u044c\u043a\u0438\u043c \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0437\u0430\u0439\u043d\u044f\u0442\u043e\u0441\u0442\u0456 \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u041a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u0430 \u0421\u0442\u0435\u0444\u0430\u043d\u0430 \u0412\u0438\u0448\u0438\u043d\u0441\u044c\u043a\u043e\u0433\u043e \u0442\u0430 \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u043e\u043c \u0424\u0456\u0437\u0438\u043a\u0438 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443.

                    \r\n\r\n

                    \u042f\u043a \u0434\u043e \u043d\u0430\u0441 \u043f\u0440\u0438\u0454\u0434\u043d\u0430\u0442\u0438\u0441\u044f?

                    \r\n

                    \u0423\u0441\u0456\u0445 \u0437\u0430\u0446\u0456\u043a\u0430\u0432\u043b\u0435\u043d\u0438\u0445 \u043f\u0440\u043e\u0441\u0438\u043c\u043e \u0432\u0438\u0441\u043b\u0430\u0442\u0438 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0443 marta.niedzialkowska@nowoczesnapolska.org.pl.

                    \r\n\r\n\r\n\r\n", + "main_page": 4, + "right_column_pl": "

                    Kogo szukamy?

                    \r\n\r\n

                    Redaktor\u00f3w technicznych (sk\u0142ad tekstu)

                    \r\n

                    Sk\u0142ad jest pierwszym etapem pracy nad tekstem. Za pomoc\u0105 znacznik\u00f3w j\u0119zyka WL-XML nadajemy tekstowi po\u017c\u0105dan\u0105 form\u0119 i umo\u017cliwiamy wy\u015bwietlenie go na stronie internetowej. Redakcje techniczna dokonywana jest na Platformie Redakcyjnej, kt\u00f3ra pozwala na zautomatyzowanie du\u017cej cz\u0119\u015bci pracy.

                    \r\n\r\n

                    Kto mo\u017ce zosta\u0107 redaktorem technicznym?

                    \r\n
                      \r\n
                    • Ka\u017cdy \u2013 po kr\u00f3tkim szkoleniu.
                    • \r\n
                    \r\n\r\n

                    Wi\u0119cej informacji o redakcji technicznej znajdziecie na stronie redakcji Wolnych Lektur

                    \r\n\r\n
                    \r\n\r\n

                    Redaktor\u00f3w literackich (merytorycznych)

                    \r\n

                    Redakcja literacka obejmuje korekt\u0119, uwsp\u00f3\u0142cze\u015bnienia oraz dodawanie przypis\u00f3w i motyw\u00f3w literackich. To unikalna mo\u017cliwo\u015b\u0107 zdobycia do\u015bwiadczenia w cyfrowej edycji tekst\u00f3w.

                    \r\n\r\n

                    Kto mo\u017ce zosta\u0107 redaktorem literackim?

                    \r\n
                      \r\n
                    • Osoby, kt\u00f3re maj\u0105 do\u015bwiadczenie w redakcji tekst\u00f3w literackich,
                    • \r\n
                    • Studenci i absolwenci studi\u00f3w humanistycznych, kt\u00f3rzy chc\u0105 takie do\u015bwiadczenie zdoby\u0107.
                    • \r\n
                    \r\n

                    Wi\u0119cej informacji o redakcji merytorycznej znajdziecie na stronie redakcji Wolnych Lektur

                    \r\n
                    \r\n\r\n

                    T\u0142umaczy

                    \r\n

                    Strona WolneLektury.pl jest dost\u0119pna w siedmiu j\u0119zykach obcych \u2013 angielskim, francuskim, niemieckim, hiszpa\u0144skim, litewskim, rosyjskim oraz ukrai\u0144skim. U\u017cytkownikami biblioteki jest ponad 200 tysi\u0119cy os\u00f3b z zagranicy, a ju\u017c nied\u0142ugo nasze zbiory obejm\u0105 r\u00f3wnie\u017c dzie\u0142a w j\u0119zykach obcych. Dlatego potrzebujemy na bie\u017c\u0105co t\u0142umaczy\u0107 nowe informacje pojawiaj\u0105ce si\u0119 na stronie.

                    \r\n

                    Kto mo\u017ce pom\u00f3c w t\u0142umaczeniach?

                    \r\n
                      \r\n
                    • Ka\u017cdy, kto dobrze zna co najmniej jeden z powy\u017cszych j\u0119zyk\u00f3w.
                    • \r\n
                    \r\n\r\n
                    \r\n\r\n

                    Programist\u00f3w

                    \r\n

                    Poza sam\u0105 stron\u0105 Wolnych Lektur tworzymy r\u00f3wnie\u017c:

                    \r\n
                      \r\n
                    • narz\u0119dzia redakcyjne,
                    • \r\n
                    • konwertery do r\u00f3\u017cnych format\u00f3w e-book\u00f3w,
                    • \r\n
                    • aplikacje mobile u\u0142atwiaj\u0105ce dost\u0119p do naszych zasob\u00f3w.
                    • \r\n
                    \r\n\r\n

                    U\u017cywamy takich technologii jak: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nTworzone przez nas oprogramowanie udost\u0119pniamy na wolnej licencji.

                    \r\n

                    Kto mo\u017ce pom\u00f3c w pracach programistycznych?

                    \r\n
                      \r\n
                    • Ka\u017cdy, kto umie i chcia\u0142by zdoby\u0107 punkty do karmy za udzia\u0142 w otwartym projekcie programistycznym. ;)
                    • \r\n
                    \r\n", + "right_column_lt": "\ufeff

                    Koki\u0173 \u017emoni\u0173 ie\u0161kome?

                    \r\n

                    Technini\u0173 redaktori\u0173 (teksto sudarymas)

                    \r\n

                    Teksto sudarymas tai pirmas etapas dirbant su tekstu. Naudojant kalbos WL-XML \u017eymes, galima sukurti pageidaujam\u0105 teksto form\u0105 ir parodyti j\u012f interneto svetain\u0117je. Techninis redagavimas yra atliekamas Redakcin\u0117je Platformoje , leid\u017eiant automatin\u012f darbo atlikim\u0105.

                    \r\n

                    Kas gali tapti techniniu redaktoriumi?

                    \r\n
                      \r\n
                    • Kiekvienas, baig\u0119s trump\u0105 mokym\u0105.
                    • \r\n
                    \r\n

                    Papildomos informacijos apie technin\u012f redagavim\u0105\r\ninterneto svetain\u0117s Wolne Lektury redakcijos tinklalapyje.

                    \r\n
                    \r\n\r\n

                    Literat\u016bros redaktori\u0173 (esmini\u0173)

                    \r\n

                    Literat\u016bros redagavimas apima teksto taisym\u0105, i\u0161na\u0161\u0173 ir motyv\u0173 prid\u0117jim\u0105. Tai unikali galimyb\u0117 \u012fgyti patirties teksto skaitmeninioje leidyboje.

                    \r\n\r\n

                    Kas gali tapti literat\u016bros redaktoriumi?

                    \r\n
                      \r\n
                    • Asmenys turintys patirties literat\u016bros tekst\u0173 redagavimo srityje,
                    • \r\n
                    • Studentai bei absolventai humanitarini\u0173 moksl\u0173 studij\u0173 norinys igyti tokios patirties.
                    • \r\n
                    \r\n

                    Papildomos informacijos apie esmin\u012f redagavim\u0105\r\ninterneto svetain\u0117s Wolne Lektury redakcijos tinklalapyje.

                    \r\n
                    \r\n\r\n

                    Vert\u0117j\u0173

                    \r\n

                    Interneto svetain\u0117 WolneLektury.pl yra prieinama septyniomis u\u017esienio kalbomis \u2013 angl\u0173, pranc\u016bz\u0173, vokie\u010di\u0173, ispan\u0173, lietuvi\u0173, rus\u0173 bei ukrainie\u010di\u0173. \u0160ios bibliotekos u\u017esienio vartotoj\u0173 kiekis tai 200 t\u016bks., be to m\u016bs\u0173 i\u0161tekliai netrukus apims u\u017esienio kalb\u0173 k\u016brinius. D\u0117l to yra reikalingas \u0161ios interneto svetain\u0117s nauj\u0173 informacij\u0173 nuolatinis vertimas.

                    \r\n

                    Kas gali pad\u0117ti versti?

                    \r\n
                      \r\n
                    • Kiekvienas gerai mokantys bent vien\u0105 i\u0161 anks\u010diau i\u0161vardyt\u0173 kalb\u0173.
                    • \r\n
                    \r\n
                    \r\n\r\n

                    Programuotoj\u0173

                    \r\n

                    I\u0161skyrus interneto svetain\u0119 Wolne Lektury, taip pat kuriame:

                    \r\n
                      \r\n
                    • redagavimo \u012frankius,
                    • \r\n
                    • \u012fvairi\u0173 format\u0173 e-knyg\u0173 konverterius,
                    • \r\n\r\n
                    • mobili\u0105sias programas lengvinan\u010dias prieig\u0105 prie m\u016bs\u0173 i\u0161tekli\u0173.
                    • \r\n
                    \r\n

                    Naudojame tokias technologijas kaip: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nM\u016bs\u0173 kuriama programin\u0117 \u012franga yra prieinama pagal laisv\u0105 licencij\u0105.

                    \r\n

                    Kas gali pad\u0117ti programavimo darbuose?

                    \r\n
                      \r\n\r\n
                    • Kiekvienas galintis ir norintis \u012fgauti patirties dalyvaudamas programavimo atvirame projekte. ;)
                    • \r\n
                    ", + "left_column_lt": "\ufeff
                      \r\n
                    • Tapkite m\u016bs\u0173 redaktoriumi, programuotoju, arba vert\u0117ju
                    • \r\n
                    • \u012egykite \u012fg\u016bd\u017ei\u0173 ir patirties
                    • \r\n
                    • Dalyvaukite atvirame projekte ir kurkite naujovi\u0161k\u0105 internetin\u0119 bibliotek\u0105
                    • \r\n
                    \r\n\r\n

                    Kvie\u010diame visus norin\u010dius prisid\u0117ti prie m\u016bs\u0173 projekto. Bendradarbiaujame su studentais, mokytojais ir su visais susidom\u0117jusiais literat\u016bra, teksto redagavimu ir informaciniais projektais. Si\u016blome profesional\u0173 mokym\u0105 ir nuolatin\u0119 esmin\u0119 pagalb\u0105.\r\nSavanoriai gali dirbti nuotoliniu b\u016bdu arba fondo b\u016bstin\u0117je.

                    \r\n

                    Taip pat organizuojame student\u0173 praktikas \u2013 bendradarbiaujame su Var\u0161uvos universiteto Mokslin\u0117s informacijos bei bibliologijos studij\u0173 institutu, Kardinolo Stefano Vi\u0161inskio universiteto Karjer\u0173 skyriumi bei su Var\u0161uvos universiteto Fizikos fakultetu.

                    \r\n\r\n\r\n

                    Kaip galite prane\u0161ti apie save?

                    \r\nVisus susidom\u0117jusius pra\u0161ome ra\u0161yti adresumarta.niedzialkowska@nowoczesnapolska.org.pl.

                    \r\n", + "title_fr": "Engagez-vous dans le travail", + "right_column_ru": "\ufeff

                    \u041a\u043e\u0433\u043e \u043c\u044b \u0438\u0449\u0435\u043c?

                    \r\n\r\n

                    \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u0432 (\u043d\u0430\u0431\u043e\u0440 \u0442\u0435\u043a\u0441\u0442\u043e\u0432).

                    \r\n

                    \u041d\u0430\u0431\u043e\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0434 \u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e WL-XML \u044f\u0437\u044b\u043a\u0430 \u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435. \r\n\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0420\u0435\u0434\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043d\u0430\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b.

                    \r\n\r\n

                    \u041a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c?

                    \r\n
                      \r\n
                    • \u041b\u044e\u0431\u043e\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u2013 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f.
                    • \r\n
                    \r\n\r\n

                    \u0411\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Wolnych Lektur

                    \r\n\r\n
                    \r\n\r\n

                    \u041b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 (\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u043d\u0442)

                    \r\n

                    \u041b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0430\u044f \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0443\u0440\u0443, \u043e\u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0439 \u0438 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432. \r\n\u042d\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u043e\u043f\u044b\u0442 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432.

                    \r\n\r\n

                    \u041a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c?

                    \r\n
                      \r\n
                    • \u041b\u0438\u0446\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u044b\u0442 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439.
                    • \r\n
                    • \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u044b \u0438 \u0430\u0431\u0438\u0442\u0443\u0440\u0438\u0435\u043d\u0442\u044b \u0433\u0443\u043c\u0430\u043d\u0438\u0442\u0430\u0440\u043d\u044b\u0445 \u0443\u0447\u0435\u0431\u043d\u044b\u0445 \u0437\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u044f\u0442 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u0442\u0430\u043a\u043e\u0439 \u043e\u043f\u044b\u0442.
                    • \r\n
                    \r\n

                    \u0411\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u0441\u0447\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Wolnych Lektur

                    \r\n
                    \r\n\r\n

                    \u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u043e\u0432

                    \r\n

                    \u0421\u0430\u0439\u0442 WolneLektury.pl \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043d\u0430 7 \u0438\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u2013 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c, \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u043e\u043c, \u043d\u0435\u043c\u0435\u0446\u043a\u043e\u043c, \u0438\u0441\u043f\u0430\u043d\u0441\u043a\u043e\u043c, \u043b\u0438\u0442\u043e\u0432\u0441\u043a\u043e\u043c, \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u0438 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u043e\u043c. \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 200 \u0442\u044b\u0441\u044f\u0447 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0438\u0437 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043a\u043d\u0438\u0436\u043d\u044b\u0439 \u0444\u043e\u043d\u0434 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u0442 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0430 \u0438\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445. \r\n\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0449\u0435\u0439\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.

                    \r\n

                    \u041a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b?

                    \r\n
                      \r\n
                    • \u041a\u0430\u0436\u0434\u044b\u0439, \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u044b\u0448\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432.
                    • \r\n
                    \r\n\r\n
                    \r\n\r\n

                    \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b.

                    \r\n

                    \u041a\u0440\u043e\u043c\u0435 \u0441\u0430\u0439\u0442\u0430 Woln\u0435Lektur\u0443 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0430\u043a\u0436\u0435:

                    \r\n
                      \r\n
                    • narz\u0119dzia redakcyjne,
                    • \r\n
                    • \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433
                    • \r\n
                    • \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0449\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0444\u043e\u043d\u0434\u0443.
                    • \r\n
                    \r\n\r\n

                    \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e: : Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\n\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u043d\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438.

                    \r\n

                    \u041a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c?

                    \r\n
                      \r\n
                    • \u041a\u0430\u0436\u0434\u044b\u0439, \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442 \u043a\u0430\u043a, \u0438 \u043a\u0442\u043e \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u00ab\u043d\u0430\u0431\u0440\u0430\u0442\u044c \u043e\u0447\u043a\u043e\u0432\u00bb \u0432 \u0441\u0432\u043e\u044e \u00ab\u043a\u0430\u0440\u043c\u0443\u00bb \u0434\u043b\u044f \u0432\u0430\u0441 \u043e\u0442\u043a\u0440\u044b\u0442 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442. ;)
                    • \r\n
                    \r\n", + "left_column_fr": "
                      \r\n
                    • Devenez notre r\u00e9dacteur, programmeur ou traducteur!
                    • \r\n
                    • Acqu\u00e9rez de nouvelles comp\u00e9tences et exp\u00e9rience!
                    • \r\n
                    • Prenez part \u00e0 un projet ouvert et cr\u00e9ez une biblioth\u00e8que en ligne innovative!
                    • \r\n
                    \r\n\r\n

                    Nous invitons toutes les personnes qui sont int\u00e9ress\u00e9es par la participation \u00e0 notre projet. Nous coop\u00e9rons avec les \u00e9tudiants, professeurs et tous ceux qui s'int\u00e9ressent \u00e0 la litt\u00e9rature, \u00e0 la r\u00e9daction de textes ou aux projets informatiques. Nous offrons des instructions professionnelles et une aide substantielle constante. Les b\u00e9n\u00e9voles peuvent travailler chez eux ou bien dans le si\u00e8ge de la fondation.

                    \r\n

                    Nous organisons aussi des stages \u00e9tudiants - nous coop\u00e9rons avec l'Institut d'Information Scientifique et d'\u00c9tudes Bibliologiques de l'Universit\u00e9 de Varsovie, le Bureau des Carri\u00e8res de l'Universit\u00e9 Cardinal Stefan Wyszy\u0144ski \u00e0 Varsovie et la Facult\u00e9 de Physique de l'Universit\u00e9 de Varsovie.

                    \r\n\r\n

                    Comment nous contacter?

                    \r\n

                    Si vous \u00eates int\u00e9ress\u00e9s par notre projet, veuillez nous envoyer un courriel \u00e0 l'adresse suivante: marta.niedzialkowska@nowoczesnapolska.org.pl.

                    \r\n", + "title": "Join in the work", + "title_lt": "Dalyvaukite projekte", + "right_column": "

                    Who are we looking for?

                    \r\n\r\n

                    Production editors (text composition)

                    \r\n

                    Text composition is the first stage in editing. By means of WL-XML markup we create a desired text format and display it on the webpage. Production editing takes place on Editorial Platform, which enables us to automate a great deal of work.

                    \r\n\r\n

                    Who can become a production editor?

                    \r\n
                      \r\n
                    • Anyone - after a short training.
                    • \r\n
                    \r\n\r\n

                    You will find more information on production editing on editorial page of Wolne Lektury

                    \r\n\r\n
                    \r\n\r\n

                    Literary editors

                    \r\n

                    Literary editing includes proofreading, updating and adding literary motifs. It is a unique opportunity to gain experience in digital text editing.

                    \r\n\r\n

                    Who can become a literary editor?

                    \r\n
                      \r\n
                    • Those who have experience in literary text editing,
                    • \r\n
                    • Students and graduates of the humanities, who wants to gain such experience.
                    • \r\n
                    \r\n

                    You will find more information on literary editing on editorial page of Wolne Lektury

                    \r\n
                    \r\n\r\n

                    Translators

                    \r\n

                    WolneLektury.pl is available in 7 languages - English, French, German, Spanish, Lithuanian, Russian, and Ukrainian. The library is used by over 200 000 readers outside of Poland, and soon our collection will also include books written in foreign (non-Polish) languages. That is why we need to translate new pieces of information systematically, as they appear on the website.

                    \r\n

                    Who can help us translate?

                    \r\n
                      \r\n
                    • Anyone with a good command of at least one of the languages listed above.
                    • \r\n
                    \r\n\r\n
                    \r\n\r\n

                    Programmers

                    \r\n

                    Apart from the website Wolne Lektury we also create:

                    \r\n
                      \r\n
                    • editorial tools,
                    • \r\n
                    • converters for various e-book formats,
                    • \r\n
                    • mobile applications facilitating access to our pages.
                    • \r\n
                    \r\n\r\n

                    We use technologies like: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nOur software is made available under the free license.

                    \r\n

                    Who can help us with the programming?

                    \r\n
                      \r\n
                    • Those who can do it and would like to gain experience by participating in an open programming project.
                    • ", + "right_column_es": "\ufeff

                      \u00bfA qui\u00e9n buscamos?

                      \r\n\r\n\r\n

                      Redactores t\u00e9cnicos (composici\u00f3n tipogr\u00e1fica)

                      \r\n

                      La composici\u00f3n tipogr\u00e1fica es la primera etapa del trabajo con el texto. Por medio de los marcados del idioma WL-XML le damos la forma deseada al texto y facilitamos su visualizaci\u00f3n en la p\u00e1gina web. La redacci\u00f3n t\u00e9cnica est\u00e1 realizada en la Plataforma Editorial, que permite automatizar una gran parte del trabajo.

                      \r\n\r\n

                      \u00bfQui\u00e9n puede ser redactor t\u00e9cnico?

                      \r\n
                        \r\n
                      • Cualquiera- despu\u00e9s de una breve formaci\u00f3n.
                      • \r\n
                      \r\n\r\n

                      Encontrar\u00e9is m\u00e1s informaci\u00f3n sobre la redacci\u00f3n t\u00e9cnica en la p\u00e1gina web de Wolne Lektury

                      \r\n\r\n
                      \r\n\r\n

                      Redactores literarios

                      \r\n

                      La redacci\u00f3n literaria incluye la correcci\u00f3n de pruebas, adaptaci\u00f3n e inclusi\u00f3n de las notas a pie de p\u00e1gina , as\u00ed como el tratamiento de los temas literarios. Es una oportunidad \u00fanica de ganar experiencia en la edici\u00f3n digital de textos.

                      \r\n\r\n

                      \u00bfQui\u00e9n puede ser redactor literario?

                      \r\n
                        \r\n
                      • Las personas que tengan experiencia en la redacci\u00f3n de textos literarios,
                      • \r\n
                      • estudiantes y licenciados en humanidades que desean obtener esta experiencia.
                      • \r\n
                      \r\n\r\n

                      Encontrar\u00e9is m\u00e1s informaci\u00f3n sobre la redacci\u00f3n literaria en la p\u00e1gina web de Wolne Lektury

                      \r\n\r\n

                      Traductores

                      \r\n

                      La p\u00e1gina web de Wolne Lektury.pl viene en 7 idiomas: ingl\u00e9s, franc\u00e9s, alem\u00e1n, espa\u00f1ol, lituano, ruso y ucraniano. Hay m\u00e1s de 200.000 usuarios del extranjero, adem\u00e1s, dentro de poco nuestra colecci\u00f3n incluir\u00e1 obras en otros idiomas. De ah\u00ed que necesitemos traducir sistem\u00e1ticamente nuevos contenidos que aparezcan en la p\u00e1gina.

                      \r\n

                      \u00bfQui\u00e9n puede ayudarnos con las traducciones?

                      \r\n
                        \r\n
                      • Cualquiera que conozca bien por lo menos alguno de los idiomas anteriores.
                      • \r\n
                      \r\n\r\n
                      \r\n\r\n

                      Programadores

                      \r\n

                      Aparte de la p\u00e1gina creamos tambi\u00e9n:

                      \r\n
                        \r\n
                      • herramientas editoriales,
                      • \r\n
                      • convertidores para varios formatos de libros electr\u00f3nicos,
                      • \r\n
                      • aplicaciones m\u00f3viles que facilitan el acceso a nuestra colecci\u00f3n
                      • \r\n
                      \r\n\r\n

                      Usamos las siguientes tecnolog\u00edas: Python, Django, XHTML, JavaScript, jQuery, LaTex, Java. \r\nEl software creado por nosotros es libre.

                      \r\n

                      \u00bfQui\u00e9n puede ayudar en las tareas programadores?

                      \r\n
                        \r\n
                      • Cualquiera que sepa y quiera ganar puntos para su karma por la participaci\u00f3n en un proyecto de programaci\u00f3n abierto. ;)
                      • \r\n
                      \r\n\r\n", + "right_column_en": "

                      Who are we looking for?

                      \r\n\r\n

                      Production editors (text composition)

                      \r\n

                      Text composition is the first stage in editing. By means of WL-XML markup we create a desired text format and display it on the webpage. Production editing takes place on Editorial Platform, which enables us to automate a great deal of work.

                      \r\n\r\n

                      Who can become a production editor?

                      \r\n
                        \r\n
                      • Anyone - after a short training.
                      • \r\n
                      \r\n\r\n

                      You will find more information on production editing on editorial page of Wolne Lektury

                      \r\n\r\n
                      \r\n\r\n

                      Literary editors

                      \r\n

                      Literary editing includes proofreading, updating and adding literary motifs. It is a unique opportunity to gain experience in digital text editing.

                      \r\n\r\n

                      Who can become a literary editor?

                      \r\n
                        \r\n
                      • Those who have experience in literary text editing,
                      • \r\n
                      • Students and graduates of the humanities, who wants to gain such experience.
                      • \r\n
                      \r\n

                      You will find more information on literary editing on editorial page of Wolne Lektury

                      \r\n
                      \r\n\r\n

                      Translators

                      \r\n

                      WolneLektury.pl is available in 7 languages - English, French, German, Spanish, Lithuanian, Russian, and Ukrainian. The library is used by over 200 000 readers outside of Poland, and soon our collection will also include books written in foreign (non-Polish) languages. That is why we need to translate new pieces of information systematically, as they appear on the website.

                      \r\n

                      Who can help us translate?

                      \r\n
                        \r\n
                      • Anyone with a good command of at least one of the languages listed above.
                      • \r\n
                      \r\n\r\n
                      \r\n\r\n

                      Programmers

                      \r\n

                      Apart from the website Wolne Lektury we also create:

                      \r\n
                        \r\n
                      • editorial tools,
                      • \r\n
                      • converters for various e-book formats,
                      • \r\n
                      • mobile applications facilitating access to our pages.
                      • \r\n
                      \r\n\r\n

                      We use technologies like: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nOur software is made available under the free license.

                      \r\n

                      Who can help us with the programming?

                      \r\n
                        \r\n
                      • Those who can do it and would like to gain experience by participating in an open programming project.
                      • ", + "left_column_de": "
                          \r\n
                        • Werde unser Bearbeiter, Programmierer oder \u00dcbersetzter
                        • \r\n
                        • Erwirb neue F\u00e4higkeiten und Erfahrung
                        • \r\n
                        • Nimm an dem offenen Projekt teil und bilde eine innovative Internetbibliothek
                        • \r\n
                        \r\n\r\n

                        Wir laden alle Personen ein, die das Projekt mitgestalten m\u00f6chten. Wir arbeiten mit Studenten, Lehrern und Allen, die sich f\u00fcr Literatur, Textbearbeitung und informatische Projekte interessieren. Wir bieten professionelle Schulungen und st\u00e4ndige Sachhilfe. Volont\u00e4re k\u00f6nnen fern oder im Stiftungssitz arbeiten.

                        \r\n

                        Wir organisieren auch das Studentenpraktikum - wir arbeiten mit dem Institut f\u00fcr Wissenschaftsinformation und Bibliothekwissenschaft an der Universit\u00e4t Warschau, demKarriereb\u00fcro der Kardinal-Stefan-Wyszy\u00f1ski-Universit\u00e4t Warschau und der Fakult\u00e4t f\u00fcr Physik zusammen.

                        \r\n\r\n

                        Wie kann man sich bei uns melden?

                        \r\n

                        Alle Interessierten bitten wir um eine Mail an folgende Adresse marta.niedzialkowska@nowoczesnapolska.org.pl.

                        \r\n\r\n\r\n\r\n", + "title_uk": "\ufeff\u0412\u0456\u0437\u044c\u043c\u0456\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u043d\u0430\u0448\u0456\u0439 \u0434\u0456\u044f\u043b\u044c\u043d\u043e\u0441\u0442\u0456", + "right_column_it": "

                        Chi stiamo cercando?

                        \r\n\r\n

                        Redattori tecnici (composizione)

                        \r\n

                        La composizione e la prima fase di lavoro sul testo. Utilizzando i tag di lingua WL-XML il testo ottiene una forma corretta e pu\u00f2 essere visualizzato sul sito web. La supervisione tecnica viene effettuata sulla Piattaforma Editoriale che consente di automatizzare gran parte del lavoro.

                        \r\n\r\n

                        Chi puo diventare redattore tecnico?

                        \r\n
                          \r\n
                        • Ognuno-dopo un breve corso di formazione.
                        • \r\n
                        \r\n\r\n

                        Per maggiori informazioni sulla redazione tecnica andate sul sito web di Wolne Lektury (Letture Libere)

                        \r\n\r\n
                        \r\n\r\n

                        Redattori letterari

                        \r\n

                        Tale redazione include correzione, modernizzazione e aggiunta delle note e dei motivi letterari. E' l\u2019unica occasione di acquisire esperienza nell\u2019edizione digitale dei testi.

                        \r\n\r\n

                        Chi pu\u00f2 diventare redattore letterario?

                        \r\n
                          \r\n
                        • Le persone che hanno esperienza nella redazione dei testi letterari,< li>\r\n
                        • Studenti e laureati in discipline umanistiche che vogliono acqusire tale esperienza.
                        • \r\n
                        \r\n

                        Per maggiori informazioni sulla redazione letteraria andate sul sito web di Wolne Lektury

                        \r\n
                        \r\n\r\n

                        Traduttori

                        \r\n

                        Pagina WolneLektury.pl \u00e8 disponibile in sette lingue - inglese, francese, tedesco, spagnolo, lituano, russo e ucraino. Ci sono piu di 200 mila utenti della biblioteca provenienti dall'estero e tra poco le nostre collezioni comprenderanno anche le opere in lingue straniere.Per questo, dobbiamo continuare a tradurre le nuove informazioni che appaiono sul sito.

                        \r\n\r\n

                        Chi pu\u00f2 aiutare nelle traduzioni?

                        \r\n
                          \r\n
                        • Ognuno che conosce bene almeno una di queste lingue.
                        • \r\n
                        \r\n\r\n
                        \r\n

                        Programmatori

                        \r\n

                        Oltre al sito web di Letture Libere stiamo creando:

                        \r\n
                          \r\n
                        • strumenti editoriali,
                        • \r\n
                        • convertitori per diversi formati di e-books,
                        • \r\n
                        • applicazioni mobili che facilitino l\u2019accesso alle nostre risorse.
                        • \r\n
                        \r\n\r\n

                        Usiamo le tecnologie: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nIl nostro software \u00e8 disponibile su licenza libera.

                        \r\n

                        Chi pu\u00f2 aiutare nei lavori di software?

                        \r\n
                          \r\n
                        • Ognuno che sa farlo e che vorrebbe ottenere i punti per Karma grazie alla partecipazione al progetto aperto di programmazione. ;)
                        • \r\n
                        \r\n\r\n", + "title_pl": "W\u0142\u0105cz si\u0119 w prace", + "left_column": "
                          \r\n
                        • Become our editor, programmer or traslator
                        • \r\n
                        • Gain new skills and experience
                        • \r\n
                        • Take part in an open project and create an innovative online library
                        • \r\n
                        \r\n\r\n

                        We invite every person to contribute to our project. We collaborate with students, teachers and anyone interested in literature, text editing and computer projects. We offer professional training courses and constant factual help. Volunteers can work at home or in our office.

                        \r\n

                        We also organize student trainings - we have established cooperation with the Institute of Information and Book Studies, Warsaw University (UW), the Careers Service at Cardinal Stefan Wyszy\u0144ski University in Warsaw, and with the Faculty of Physics, UW.

                        \r\n\r\n

                        How to contact us?

                        \r\n

                        We invite all the people interested to email us atmarta.niedzialkowska@nowoczesnapolska.org.pl.

                        ", + "right_column_uk": "\ufeff

                        \u041a\u043e\u0433\u043e \u043c\u0438 \u0448\u0443\u043a\u0430\u0454\u043c\u043e?

                        \r\n\r\n

                        \u0422\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0456\u0432 (\u0432\u0435\u0440\u0441\u0442\u043a\u0430)

                        \r\n

                        \u0412\u0435\u0440\u0441\u0442\u043a\u0430 - \u0446\u0435 \u043f\u0435\u0440\u0448\u0438\u0439 \u0435\u0442\u0430\u043f \u043f\u0440\u0430\u0446\u0456 \u043d\u0430\u0434 \u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u0417\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0442\u0435\u0433\u0456\u0432 \u043c\u043e\u0432\u0438 WL-XML \u043d\u0430\u0434\u0430\u0454\u043c\u043e \u0442\u0435\u043a\u0441\u0442\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u0432\u0438\u0433\u043b\u044f\u0434 \u0442\u0430 \u0440\u043e\u0431\u0438\u043c\u043e \u043c\u043e\u0436\u043b\u0438\u0432\u0438\u043c \u0457\u0445 \u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u044e \u043d\u0430 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0456. \u0422\u0435\u0445\u043d\u0456\u0447\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0438\u043a\u043e\u043d\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u0420\u0435\u0434\u0430\u043a\u0446\u0456\u0439\u043d\u0456\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0456, \u044f\u043a\u0430 \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0443\u0432\u0430\u0442\u0438 \u0432\u0435\u043b\u0438\u043a\u0443 \u0447\u0430\u0441\u0442\u0438\u043d\u0443 \u043f\u0440\u0430\u0446\u0456.

                        \r\n\r\n

                        \u0425\u0442\u043e \u043c\u043e\u0436\u0435 \u0441\u0442\u0430\u0442\u0438 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c?

                        \r\n
                          \r\n
                        • \u041a\u043e\u0436\u0435\u043d - \u043f\u0456\u0441\u043b\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0443.
                        • \r\n
                        \r\n\r\n

                        \u0411\u0456\u043b\u044c\u0448\u0435 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u043f\u0440\u043e \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0456 \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0457 Wolne Lektury

                        \r\n\r\n
                        \r\n\r\n

                        \u041b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0456\u0432

                        \r\n

                        \u041b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0454 \u0432 \u0441\u0435\u0431\u0435 \u043a\u043e\u0440\u0435\u043a\u0442\u0443, \u043e\u0441\u0443\u0447\u0430\u0441\u043d\u0435\u043d\u043d\u044f \u0442\u0435\u043a\u0441\u0442\u0443, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u043f\u0440\u0438\u043c\u0456\u0442\u043e\u043a \u0442\u0430 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432. \u0426\u0435 \u0443\u043d\u0456\u043a\u0430\u043b\u044c\u043d\u0430 \u043c\u043e\u0436\u043b\u0438\u0432\u0456\u0441\u0442\u044c \u0437\u0434\u043e\u0431\u0443\u0442\u0438 \u0434\u043e\u0441\u0432\u0456\u0434 \u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u0456\u0439 \u043e\u0431\u0440\u043e\u0431\u0446\u0456 \u0442\u0435\u043a\u0441\u0442\u0456\u0432.

                        \r\n\r\n

                        \u0425\u0442\u043e \u043c\u043e\u0436\u0435 \u0441\u0442\u0430\u0442\u0438 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c?

                        \r\n
                          \r\n
                        • \u0422\u043e\u0439, \u0445\u0442\u043e \u043c\u0430\u0454 \u0434\u043e\u0441\u0432\u0456\u0434 \u0443 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u0456 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u0456\u0432,
                        • \r\n
                        • \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u0438 \u0442\u0430 \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u043a\u0438 \u0433\u0443\u043c\u0430\u043d\u0456\u0442\u0430\u0440\u043d\u0438\u0445 \u0444\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0456\u0432, \u044f\u043a\u0456 \u0445\u043e\u0447\u0443\u0442\u044c \u0437\u0434\u043e\u0431\u0443\u0442\u0438 \u0442\u0430\u043a\u0438\u0439 \u0434\u043e\u0441\u0432\u0456\u0434.
                        • \r\n
                        \r\n

                        \u0411\u0456\u043b\u044c\u0448\u0435 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u043f\u0440\u043e \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0456 \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0457 Wolne Lektury

                        \r\n
                        \r\n\r\n

                        \u041f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0430\u0447\u0456\u0432

                        \r\n

                        \u0421\u0430\u0439\u0442 WolneLektury.pl \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u043d\u0430 \u0441\u0435\u043c\u0438 \u0456\u043d\u043e\u0437\u0435\u043c\u043d\u0438\u0445 \u043c\u043e\u0432\u0430\u0445 \u2013 \u0430\u043d\u0433\u043b\u0456\u0439\u0441\u044c\u043a\u0456\u0439, \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0456\u0439, \u043d\u0456\u043c\u0435\u0446\u044c\u043a\u0456\u0439, \u0456\u0441\u043f\u0430\u043d\u0441\u044c\u043a\u0456\u0439, \u043b\u0438\u0442\u043e\u0432\u0441\u044c\u043a\u0456\u0439, \u0440\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0456\u0439 \u0442\u0430 \u0443\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0456\u0439. \u0411\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u044e \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0454\u0442\u044c\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043d\u0456\u0436 200 \u0442\u0438\u0441\u044f\u0447 \u0437\u0430\u043a\u043e\u0440\u0434\u043e\u043d\u043d\u0438\u0445 \u0432\u0456\u0434\u0432\u0456\u0447\u0443\u0432\u0430\u0447\u0456\u0432, \u0430 \u043d\u0435\u0437\u0430\u0431\u0430\u0440\u043e\u043c \u0443 \u043d\u0430\u0448\u0456\u0439 \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0439 \u0437\u043d\u0430\u0439\u0434\u0443\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u043e\u0436 \u0442\u0432\u043e\u0440\u0438 \u043d\u0430 \u0456\u043d\u043e\u0437\u0435\u043c\u043d\u0438\u0445 \u043c\u043e\u0432\u0430\u0445. \u0422\u043e\u043c\u0443 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0430\u0442\u0438 \u043d\u043e\u0432\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e, \u044f\u043a\u0430 \u0437\u2019\u044f\u0432\u043b\u044f\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0456.

                        \r\n

                        \u0425\u0442\u043e \u043c\u043e\u0436\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0443 \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0430\u0445?

                        \r\n
                          \r\n
                        • \u041a\u043e\u0436\u043d\u0438\u0439, \u0445\u0442\u043e \u0434\u043e\u0431\u0440\u0435 \u0432\u043e\u043b\u043e\u0434\u0456\u0454 \u043f\u0440\u0438\u043d\u0430\u0439\u043c\u043d\u0456 \u043e\u0434\u043d\u0456\u0454\u044e \u0437 \u0432\u0438\u0449\u0435\u0437\u0433\u0430\u0434\u0430\u043d\u0438\u0445 \u043c\u043e\u0432.
                        • \r\n
                        \r\n\r\n
                        \r\n\r\n

                        \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442\u0456\u0432

                        \r\n

                        \u041a\u0440\u0456\u043c \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0443 Wolne Lektury \u043c\u0438 \u0442\u0432\u043e\u0440\u0438\u043c\u043e \u0442\u0430\u043a\u043e\u0436:

                        \r\n
                          \r\n
                        • \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0439\u043d\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438,
                        • \r\n
                        • \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u0438 \u0434\u043b\u044f \u0440\u0456\u0437\u043d\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0456\u0432 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0438\u0445 \u043a\u043d\u0438\u0433,
                        • \r\n
                        • \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0456 \u0430\u043f\u043b\u0456\u043a\u0430\u0446\u0456\u0457, \u044f\u043a\u0456 \u0440\u043e\u0431\u043b\u044f\u0442\u044c \u043c\u043e\u0436\u043b\u0438\u0432\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u043d\u0430\u0448\u0438\u0445 \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0439.
                        • \r\n
                        \r\n\r\n

                        \u041c\u0438 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0454\u043c\u043e\u0441\u044f \u0442\u0430\u043a\u0438\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0456\u044f\u043c\u0438, \u044f\u043a Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\n\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043d\u0435 \u0437\u0430\u0431\u0435\u0437\u043f\u0435\u0447\u0435\u043d\u043d\u044f, \u044f\u043a\u0435 \u0441\u0442\u0432\u043e\u0440\u044e\u0454\u043c\u043e, \u043d\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u0456\u043b\u044c\u043d\u0456\u0439 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457.

                        \r\n

                        \u0425\u0442\u043e \u043c\u043e\u0436\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0443\u0432\u0430\u043d\u043d\u0456?

                        \r\n
                          \r\n
                        • \u041a\u043e\u0436\u0435\u043d, \u0445\u0442\u043e \u0432\u043c\u0456\u0454 \u0456 \u0445\u043e\u0447\u0435 \u0437\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442\u0438\u0447\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0456 \u0437\u0434\u043e\u0431\u0443\u0442\u0438 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0456 \u0431\u0430\u043b\u0438 \u0434\u043e \u043a\u0430\u0440\u043c\u0438. ;)
                        • \r\n
                        \r\n", + "title_en": "Join in the work", + "left_column_pl": "
                          \r\n
                        • Zosta\u0144 naszym redaktorem, programist\u0105 lub t\u0142umaczem
                        • \r\n
                        • Zdob\u0105d\u017a nowe umiej\u0119tno\u015bci i do\u015bwiadczenie
                        • \r\n
                        • We\u017a udzia\u0142 w otwartym projekcie i tw\u00f3rz innowacyjn\u0105 bibliotek\u0119 internetow\u0105
                        • \r\n
                        \r\n\r\n

                        Zapraszamy wszystkie osoby, kt\u00f3re chc\u0105 wsp\u00f3\u0142tworzy\u0107 nasz projekt. Wsp\u00f3\u0142pracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi literatur\u0105, redagowaniem tekst\u00f3w i projektami informatycznymi. Oferujemy profesjonalne szkolenia i sta\u0142\u0105 pomoc merytoryczn\u0105. Wolontariusze mog\u0105 pracowa\u0107 zdalnie lub w siedzibie Fundacji.

                        \r\n

                        Organizujemy r\u00f3wnie\u017c praktyki studenckie \u2013 nawi\u0105zali\u015bmy wsp\u00f3\u0142prac\u0119 z Instytutem Informacji Naukowej i Studi\u00f3w Bibliologicznych UW, Biurem Karier UKSW oraz Wydzia\u0142em Fizyki UW.

                        \r\n\r\n

                        Jak si\u0119 do nas zg\u0142osi\u0107?

                        \r\n

                        Wszystkie zainteresowane osoby prosimy o przys\u0142anie maila na adres marta.niedzialkowska@nowoczesnapolska.org.pl.

                        \r\n\r\n\r\n\r\n", + "left_column_it": "
                          \r\n
                        • Diventa il nostro redattore, programmatore o traduttore
                        • \r\n
                        • Acquisisci nuove capacit\u00e0 ed esperienze
                        • \r\n
                        • Prendi parte al progetto aperto e crea una biblioteca innovativa online
                        • \r\n
                        \r\n\r\n

                        Invitiamo tutte le persone volenterose a collaborare al nostro progetto. Lavoriamo con studenti, insegnanti e tutti gli interessati alla letteratura, stesura dei testi e ai progetti IT. Offriamo i corsi di formazione professionali e il sostegno. I volontari possono lavorare a distanza oppure presso la sede della Fondazione.

                        \r\n\r\n

                        Organizziamo anche i tirocini \u2013 collaboriamo con Instytut Informacji Naukowej i Studi\u00f3w Bibliologicznych (l\u2019Istituto di Informazione Scientifica e Biblioteconomia) dell\u2019Universit\u00e0 di Varsavia, Biuro Karier UKSW (Ufficio di carriera dell\u2019Universit\u00e0 del Cardinale Stefan Wyszy\u0144ski) e con il Dipartimento di Fisica dell\u2019Universit\u00e0 di Varsavia

                        \r\n\r\n

                        Come contattarci? ?

                        \r\n

                        Invitiamo Tutte le persone interessate ad inviarci un'e-mail all'indirizzo marta.niedzialkowska@nowoczesnapolska.org.pl.

                        \r\n", + "title_es": "Colabora", + "left_column_ru": "\ufeff
                          \r\n
                        • \u0421\u0442\u0430\u043d\u044c \u043d\u0430\u0448\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u043e\u043c
                        • \r\n
                        • \u041f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0438 \u043d\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u043d\u0438\u044f \u0438 \u043e\u043f\u044b\u0442
                        • \r\n
                        • \u041f\u0440\u0438\u043c\u0438 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439 \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443
                        • \r\n
                        \r\n\r\n

                        \u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0441\u0435\u0445, \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u043c \u0441\u043e \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c\u0438, \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0438 \u0432\u0441\u0435\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u0439, \r\n\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0443\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443. \r\n\u0414\u043e\u0431\u0440\u043e\u0432\u043e\u043b\u044c\u0446\u044b \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0438\u043b\u0438 \u0432 \u0448\u0442\u0430\u0431-\u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0435 \u0424\u043e\u043d\u0434\u0430.

                        \r\n\r\n

                        \u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u0443\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0442\u0430\u0436\u0438\u0440\u043e\u0432\u043a\u0438 - \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u043c \u0441 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u043e\u043c \u043d\u0430\u0443\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0411\u0438\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0412\u0423, \r\n\u0441 \u0411\u044e\u0440\u043e \u043a\u0430\u0440\u044c\u0435\u0440\u044b \u0423\u041a\u0421\u0412 \u0438 \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u043e\u043c \u0424\u0438\u0437\u0438\u043a\u0438 \u0412\u0423.

                        \r\n\r\n

                        \u041a\u0430\u043a \u043a \u043d\u0430\u043c \u043f\u043e\u043f\u0430\u0441\u0442\u044c?

                        \r\n

                        \u0412\u0441\u0435 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435-mail \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443: marta.niedzialkowska@nowoczesnapolska.org.pl.

                        \r\n\r\n\r\n\r\n", + "slug": "wlacz-sie-w-prace", + "right_column_de": "

                        Wen suchen wir?

                        \r\n\r\n

                        Textbearbeiter (Textbearbeitung)

                        \r\n

                        In der ersten Phase wird der Text gesetzt. Mithilfe der WL-XML-Sprache gestalten wir den Text und erm\u00f6glichen seine Ver\u00f6ffentlichung auf der Internetseite. Textbearbeitung wird auf der Redaktionsplatrormdurchgef\u00fchrt, die einen gro\u00dfen Arbeitsteil automatisieren l\u00e4sst.

                        \r\n\r\n

                        Wer kann Textbearbeiter werden

                        \r\n
                          \r\n
                        • Jeder - nach einer kurzen Schulung.
                        • \r\n
                        \r\n\r\n

                        Mehr Infos \u00fcber Textbearbeitungauf der Impressumseite von Wolne Lektury

                        \r\n\r\n
                        \r\n\r\n

                        Bearbeiter im Literaturbereich (Sachbearbeiter)

                        \r\n

                        Literarische Bearbeitung umfasst die Korrektur, Sprachmodernisierung und Erg\u00e4nzung von F\u00fc\u00dfnoten und literarischen Motiven. Das ist eine einzigartige M\u00f6glichkeit, die Kenntnis der Digitalverarbeitung von Texten zu erwerben.

                        \r\n\r\n

                        Wer kann Bearbeiter im Literaturbereich werden

                        \r\n
                          \r\n
                        • Personen, die Erfahrung in der Bearbeitung von literarischen Texten besitzen,
                        • \r\n
                        • Studenten und Absolventen der Geisteswissenschaften, die solche Erfahrung gewinnen m\u00f6chten.
                        • \r\n
                        \r\n

                        Mehr Infos \u00fcber literarische Bearbeitungauf der Impressumseite von Wolne Lektury

                        \r\n
                        \r\n\r\n

                        \u00dcbersetzer

                        \r\n

                        Die Internetseite WolneLektury.pl ist in sieben Spracheversionen zug\u00e4nglich - im Englischen, Franz\u00f6sichen, Deutschen, Spanischen, Lituanischen, Russischen und Ukrainischen. Bibliotheksbenutzer sind \u00fcber 200.000 Ausl\u00e4nder. Bald wird die Bibliothek mit fremdsprachigen Versionen bereichert. Deswegen brauchen wir auf dem Laufenden, die neu auf der Seite erschienen Infos zu \u00fcbersetzen.

                        \r\n

                        Wer kann bei \u00dcbersetzungen helfen?

                        \r\n
                          \r\n
                        • Jeder, der mindestenst eine aus den oben genannten Sprachen beherrscht.
                        • \r\n
                        \r\n\r\n
                        \r\n\r\n

                        Programmierer

                        \r\n

                        Au\u00dfer der Internetseite von Wolne Lektury allein errichten wir:

                        \r\n
                          \r\n
                        • Bearbeitungsmittel,
                        • \r\n
                        • Konvertierungsprogramme zu den verschiedenen E-books-Formaten,
                        • \r\n
                        • Mobilanwendungen, die Zugang zu B\u00fcchern erleichtern.
                        • \r\n
                        \r\n\r\n

                        Wir machen Gebrauch von solchen Technologien wie: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nDie von uns entwickelte Software machen wird aufunter der freien Lizenz verf\u00fcgbar.

                        \r\n

                        Wer kann bei der Programmierung helfen?

                        \r\n
                          \r\n
                        • Jeder, der dies kann und will Karmapunkte f\u00fcr die Teilnahme an dem offenen Programmierungsprojekt gewinnen . ;)
                        • \r\n
                        \r\n", + "left_column_es": "\ufeff
                          \r\n
                        • Hazte nuestro redactor, programador o traductor
                        • \r\n
                        • Adquiere nuevas aptitudes y experiencia
                        • \r\n
                        • Participa en un proyecto abierto y crea una innovadora biblioteca virtual
                        • \r\n
                        \r\n\r\n

                        Todos los que quieran participar en nuestro proyecto ser\u00e1n bienvenidos. Colaboramos con estudiantes, maestros, profesores y todos aquellos interesados en literatura, edici\u00f3n de textos y proyectos inform\u00e1ticos. Les ofrecemos aprendizaje profesional y constante ayuda en cuanto a el contenido. Los voluntarios pueden trabajar a distancia o en la oficina principal de la Fundaci\u00f3n.

                        \r\n

                        Tambi\u00e9n organizamos practicas para los estudiantes \u2013 hemos establecido cooperaci\u00f3n con el Instituto de Informaci\u00f3n Cient\u00edfica y Bibliotecolog\u00eda de la Universidad de Varsovia, el Servicio de Orientaci\u00f3n Profesional de la Universidad de Cardenal Stefan Wyszynski y la Facultad de F\u00edsica de la Universidad de Varsovia.

                        \r\n\r\n

                        \u00bfC\u00f3mo contactar?

                        \r\n

                        A todos los interesados les invitamos a mandar un e-mail a marta.niedzialkowska@nowoczesnapolska.org.pl.

                        \r\n", + "left_column_en": "
                          \r\n
                        • Become our editor, programmer or traslator
                        • \r\n
                        • Gain new skills and experience
                        • \r\n
                        • Take part in an open project and create an innovative online library
                        • \r\n
                        \r\n\r\n

                        We invite every person to contribute to our project. We collaborate with students, teachers and anyone interested in literature, text editing and computer projects. We offer professional training courses and constant factual help. Volunteers can work at home or in our office.

                        \r\n

                        We also organize student trainings - we have established cooperation with the Institute of Information and Book Studies, Warsaw University (UW), the Careers Service at Cardinal Stefan Wyszy\u0144ski University in Warsaw, and with the Faculty of Physics, UW.

                        \r\n\r\n

                        How to contact us?

                        \r\n

                        We invite all the people interested to email us atmarta.niedzialkowska@nowoczesnapolska.org.pl.

                        ", + "right_column_fr": "

                        Qui cherchons-nous?

                        \r\n\r\n

                        R\u00e9dacteurs techniques (composition de texte)

                        \r\n

                        La composition est une premi\u00e8re \u00e9tape du travail sur un texte. \u00c0 l'aide des balises du langage WL-XML on forme un texte et l'affiche sur le site. La r\u00e9daction est ex\u00e9cut\u00e9e sur la Plateforme de R\u00e9daction qui permet d'automatiser la grande majorit\u00e9 du travail.

                        \r\n\r\n

                        Qui peut devenir r\u00e9dacteur technique?

                        \r\n
                          \r\n
                        • Chacun(e) - apr\u00e8s une courte instruction.
                        • \r\n
                        \r\n\r\n

                        Si vous voulez trouver plus d'informations sur la r\u00e9daction technique, visitez le site de la r\u00e9daction de Wolne Lektury

                        \r\n\r\n
                        \r\n\r\n

                        R\u00e9dacteurs litt\u00e9raires

                        \r\n

                        La r\u00e9daction litt\u00e9raire se compose de la correction des \u00e9preuves, r\u00e9actualisation et addition des annotations et motifs litt\u00e9raires. C'est une opportunit\u00e9 unique d'acqu\u00e9rir de l'exp\u00e9rience dans le domaine de l'\u00e9dition num\u00e9rique.

                        \r\n\r\n

                        Qui peut devenir r\u00e9dacteur litt\u00e9raire?

                        \r\n
                          \r\n
                        • Personnes qui ont d\u00e9j\u00e0 une exp\u00e9rience dans la r\u00e9daction des textes litt\u00e9raires,
                        • \r\n
                        • \u00c9tudiants et gradu\u00e9s d'\u00e9tudes humanistes qui souhaitent acqu\u00e9rir une telle exp\u00e9rience.
                        • \r\n
                        \r\n

                        Si vous voulez trouver plus d'informations sur la r\u00e9daction litt\u00e9raire, visitez le site de la r\u00e9daction de Wolne Lektury

                        \r\n
                        \r\n\r\n

                        Traducteurs

                        \r\n

                        Le site WolneLektury.pl est accessible en sept langues \u00e9trang\u00e8res - anglaise, fran\u00e7aise, allemande, espagnole, lithuanienne, russe et ukrainienne. Plus de 200 mille d'\u00e9trangers utilisent notre biblioth\u00e8que et comme prochainement notre collection contiendra aussi des ouvrages en langues \u00e9trang\u00e8res, il est essentiel de traduire de nouvelles informations et de les mettre r\u00e9guli\u00e8rement sur le site.

                        \r\n

                        Qui peut aider \u00e0 la pr\u00e9paration des traductions?

                        \r\n
                          \r\n
                        • Chacun(e) qui conna\u00eet au moins une des cettes langues.
                        • \r\n
                        \r\n\r\n
                        \r\n\r\n

                        Programmeurs

                        \r\n

                        \u00c0 part le site de Wolne Lektury on cr\u00e9e aussi:

                        \r\n
                          \r\n
                        • des outils de r\u00e9daction,
                        • \r\n
                        • des convertisseurs de formats divers des livres audio,
                        • \r\n
                        • des applications mobiles qui facilitent l'acc\u00e8s \u00e0 notre collection.
                        • \r\n
                        \r\n\r\n

                        On utilise les technologies telles que Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nLes logiciels que l'on cr\u00e9e sont accessibles sous une licence libre.

                        \r\n

                        Qui peut aider aux travaux de programmation?

                        \r\n
                          \r\n
                        • Chacun(e) qui sait programmer et voudrait accumuler les points de karma pour participer \u00e0 un projet ouvert de programmation ;)
                        • \r\n
                        \r\n\r\n \r\n", + "title_ru": "\ufeff\u0412\u043a\u043b\u044e\u0447\u0438\u0441\u044c \u0432 \u0440\u0430\u0431\u043e\u0442\u0443", + "title_it": "Prendi parte all'iniziativa" + } + }, + { + "pk": 5, + "model": "infopages.infopage", + "fields": { + "title_de": "Unterst\u00fctze uns", + "left_column_uk": "\ufeff

                        \u041f\u0435\u0440\u0435\u043a\u0430\u0436\u0456\u0442\u044c 1% \u043f\u043e\u0434\u0430\u0442\u043a\u0443 \u043d\u0430 Wolne Lektury

                        \r\n

                        \u0424\u043e\u043d\u0434 \u0421\u0443\u0447\u0430\u0441\u043d\u0430 \u041f\u043e\u043b\u044c\u0449\u0430 (Fundacja Nowoczesna Polska) \u043c\u0430\u0454 \u0441\u0442\u0430\u0442\u0443\u0441 \u041e\u0440\u0433\u0430\u043d\u0456\u0437\u0430\u0446\u0456\u0457 \u0441\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0457 \u043a\u043e\u0440\u0438\u0441\u0442\u0456, \u0442\u043e\u043c\u0443 \u043d\u0430 \u0440\u043e\u0437\u0432\u0438\u0442\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 Wolne Lektury \u043c\u043e\u0436\u043d\u0430 \u043f\u0435\u0440\u0435\u043a\u0430\u0437\u0430\u0442\u0438 1% \u0441\u0432\u043e\u0433\u043e \u043f\u043e\u0434\u0430\u0442\u043a\u0443. \u0414\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0437\u0430\u043f\u043e\u0432\u043d\u0438\u0442\u0438 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u0435 \u043f\u043e\u043b\u0435 \u0443 \u0440\u0456\u0447\u043d\u0456\u0439 \u043f\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0456\u0439 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0456\u0457 (PIT-36, PIT-37 \u0430\u0431\u043e PIT-28). \u0423 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0456\u0457 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0432\u043a\u0430\u0437\u0430\u0442\u0438 \u043d\u0430\u0437\u0432\u0443 \u0424\u043e\u043d\u0434\u0443:

                        \r\nFundacja Nowoczesna Polska
                        \r\n\u0442\u0430 \u043d\u043e\u043c\u0435\u0440 \u0437 \u041d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0421\u0443\u0434\u043e\u0432\u043e\u0433\u043e \u0420\u0435\u0454\u0441\u0442\u0440\u0443 (KRS) 0000070056
                        \r\n", + "main_page": 5, + "right_column_pl": "

                        Przeka\u017c darowizn\u0119 na Wolne Lektury

                        \r\n

                        Ka\u017cda wp\u0142acona kwota zostanie przeznaczona na rozw\u00f3j zasob\u00f3w naszej biblioteki. Wystarczy dokona\u0107 przelewu na konto:

                        \r\n\r\nFundacja Nowoczesna Polska
                        \r\nul. Marsza\u0142kowska 84/92 lok. 125
                        \r\n00-514 Warszawa
                        \r\nNr konta: PKO BP 46 10201097 0000 7502 0001 6766
                        \r\nTytu\u0142 przelewu: Darowizna na Wolne Lektury
                        ", + "right_column_lt": "\ufeff

                        Paremkite finansi\u0161kai Wolne Lektury interneto svetain\u0119

                        \r\n

                        Sumok\u0117ti pinigai bus paskirti m\u016bs\u0173 bibliotekos i\u0161tekli\u0173 raidai. \r\nU\u017etenka atlikti banko pavedim\u0105 \u012f s\u0105skait\u0105:

                        \r\n\r\nFundacja Nowoczesna Polska
                        \r\nul. Marsza\u0142kowska 84/92 lok. 125
                        \r\n00-514 Warszawa
                        \r\nS\u0105skaitos numeris: PKO BP 46 10201097 0000 7502 0001 6766
                        \r\nPavedimo pavadinimas: Darowizna na Wolne Lektury
                        \r\n", + "left_column_lt": "\ufeff

                        Skirkite 1% pajam\u0173 mokes\u010dio Wolne Lektury interneto svetainei

                        \r\n

                        Fondas \u0160iuolaikin\u0117 Lenkija turi komunalini\u0173 paslaug\u0173 \u012fstaigos status\u0105, d\u0117l to galima paskirti 1% pajam\u0173 mokes\u010dio projekto Wolne Lektury raidai. \u0160iuo tikslu reikia u\u017epildyti atitinkam\u0105 langel\u012f metin\u0117je pajam\u0173 mokes\u010dio deklaracijoje (PIT-36, PIT-37 lub PIT-28) ir pateikti \u017eemiau esant\u012f pavadinim\u0105:

                        \r\nFundacja Nowoczesna Polska
                        \r\nbei Nacionalinio teism\u0173 registro (KRS) numer\u012f 0000070056
                        \r\n\r\n\r\n", + "title_fr": "Aidez-nous", + "right_column_ru": "\ufeff

                        \u041f\u0435\u0440\u0435\u0448\u043b\u0438 \u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043b\u044f Wolne Lektury

                        \r\n

                        \u0412\u0441\u0435 \u0434\u0435\u043d\u0435\u0436\u043d\u044b\u0435 \u0432\u0437\u043d\u043e\u0441\u044b \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043a\u043d\u0438\u0436\u043d\u043e\u0433\u043e \u0444\u043e\u043d\u0434\u0430 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0434\u0435\u043d\u044c\u0433\u0438 \u043d\u0430 \u0441\u0447\u0435\u0442:

                        \r\n\r\nFundacja Nowoczesna Polska
                        \r\nul. Marsza\u0142kowska 84/92 lok. 125
                        \r\n00-514 Warszawa
                        \r\n\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0435\u0442\u0430: PKO BP 46 10201097 0000 7502 0001 6766
                        \r\n\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f: Darowizna na Wolne Lektury
                        \r\n", + "left_column_fr": "

                        Transf\u00e9rez 1% de vos imp\u00f4ts pour Wolne Lektury

                        \r\n

                        La fondation Nowoczesna Polska est une organisation d'utilit\u00e9 publique et alors 1% de vos imp\u00f4ts peut \u00eatre transf\u00e9r\u00e9 pour le d\u00e9veloppement du projet Wolne Lektury. Pour le faire il faut remplir la rubrique convenable dans la d\u00e9claration annuelle des imp\u00f4ts (PIT-36, PIT-37 ou PIT-28). Dans la d\u00e9claration il faut donner le nom:

                        \r\nFundacja Nowoczesna Polska
                        \r\net le num\u00e9ro KRS (Registre National Juridique): 0000070056
                        \r\n", + "title": "Support us", + "title_lt": "Paremkite mus", + "right_column": "

                        Donate to Wolne Lektury

                        \r\n

                        Every donation will be allocated for developing the library collection. Just transfer the money to:

                        \r\n\r\nFundacja Nowoczesna Polska
                        \r\nul. Marsza\u0142kowska 84/92 lok. 125
                        \r\n00-514 Warszawa
                        \r\nBank account number: PKO BP 46 10201097 0000 7502 0001 6766
                        \r\nTitle of payment: Darowizna na Wolne Lektury
                        ", + "right_column_es": "

                        Haz un donativo a Wolne Lektury

                        \r\n

                        Cada aporte ser\u00e1 destinado al incremento del fondo de nuestra biblioteca. Basta con hacer una transferencia a nuestra cuenta:

                        \r\n\r\nFundacja Nowoczesna Polska
                        \r\nUl. Marsza\u0142kowska84/92 lok. 125
                        \r\n00-514 Warszawa
                        \r\nEl numero de la cuenta: PKO BP 46 10201097 0000 7502 0001 6766
                        \r\nEl titulo de la transferencia: Darowizna na Wolne Lektury
                        \r\n", + "right_column_en": "

                        Donate to Wolne Lektury

                        \r\n

                        Every donation will be allocated for developing the library collection. Just transfer the money to:

                        \r\n\r\nFundacja Nowoczesna Polska
                        \r\nul. Marsza\u0142kowska 84/92 lok. 125
                        \r\n00-514 Warszawa
                        \r\nBank account number: PKO BP 46 10201097 0000 7502 0001 6766
                        \r\nTitle of payment: Darowizna na Wolne Lektury
                        ", + "left_column_de": "

                        \u00dcbergeben Sie 1 % von Ihrer Steuer an Wolne Lektury

                        \r\n

                        Die Stiftung Modernes Polen besitzt den Status einer Non-Profit-Organisation. Infolgedessen kann man 1 % seiner Steuer an die Entwicklung des Projektes Wolne Lektury \u00fcberreichen. Um dies zu tun, sollte man eine bestimmte Rubrik in der Jahressteuererkl\u00e4rung (Einkommenstuer-36, Einkommensteuer-37 oder Einkommensteuer-28) erf\u00fcllen. In der Erkl\u00e4rung ist die:

                        \r\nBezeichnung Stiftung Modernes Polen
                        \r\nsowie die Nummer aus dem Landesgerichtsregister (KRS) 0000070056
                        einzutragen.", + "title_uk": "\ufeff\u041f\u0456\u0434\u0442\u0440\u0438\u043c\u0430\u0439\u0442\u0435 \u043d\u0430\u0441", + "right_column_it": "

                        Fai una donazione a Wolne Lektury

                        \r\n

                        Ogni somma versata sar\u00e0 utilizzata per lo sviluppo delle nostre risorse bibliotecarie. Basta fare un versamento sul conto:

                        \r\n\r\nFundacja Nowoczesna Polska
                        \r\nul. Marsza\u0142kowska 84/92 lok. 125
                        \r\n00-514 Warszawa
                        \r\nNr konta: PKO BP 46 10201097 0000 7502 0001 6766
                        \r\nTytu\u0142 przelewu (Titolo del versamento): Darowizna na Wolne Lektury
                        \r\n\r\n", + "title_pl": "Wesprzyj nas", + "left_column": "

                        Support Wolne Lektury with 1% of income tax

                        \r\n

                        The Modern Poland Foundation has the status of a public benefit organization (Pol. organizacja po\u017cytku publicznego) thanks to which Wolne Lektury can receive 1% of income tax from individuals. To help us in this way, it is necessary to fill in the correct space in the annual tax return (PIT-36, PIT-37 or PIT-28), providing the name:

                        \r\nFundacja Nowoczesna Polska
                        \r\nand the National Court Register number - Krajowy Rejestr S\u0105dowy (KRS) 0000070056
                        ", + "right_column_uk": "\ufeff

                        \u0417\u0440\u043e\u0431\u0456\u0442\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0456\u0439\u043d\u0438\u0439 \u0432\u043d\u0435\u0441\u043e\u043a \u043d\u0430 Wolne Lektury

                        \r\n

                        \u0423\u0441\u0456 \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u0456 \u043a\u043e\u0448\u0442\u0438 \u0431\u0443\u0434\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043e \u0434\u043b\u044f \u0440\u043e\u0437\u0432\u0438\u0442\u043a\u0443 \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0457 \u043d\u0430\u0448\u043e\u0457 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438. \u0404\u0434\u0438\u043d\u0435, \u0449\u043e \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0437\u0440\u043e\u0431\u0438\u0442\u0438, \u0446\u0435 \u043f\u0435\u0440\u0435\u0440\u0430\u0445\u0443\u0432\u0430\u0442\u0438 \u043a\u043e\u0448\u0442\u0438 \u043d\u0430 \u0440\u0430\u0445\u0443\u043d\u043e\u043a:

                        \r\n\r\nFundacja Nowoczesna Polska
                        \r\nul. Marsza\u0142kowska 84/92 lok. 125
                        \r\n00-514 Warszawa
                        \r\n\u041d\u043e\u043c\u0435\u0440 \u0431\u0430\u043d\u043a\u0456\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0440\u0430\u0445\u0443\u043d\u043a\u0443: PKO BP 46 10201097 0000 7502 0001 6766
                        \r\n\u041f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u043f\u043b\u0430\u0442\u0435\u0436\u0443: \u0411\u043b\u0430\u0433\u043e\u0434\u0456\u0439\u043d\u0438\u0439 \u0432\u043d\u0435\u0441\u043e\u043a \u043d\u0430 Wolne Lektury
                        \r\n", + "title_en": "Support us", + "left_column_pl": "

                        Przeka\u017c 1% podatku na Wolne Lektury

                        \r\n

                        Fundacja Nowoczesna Polska posiada status Organizacji Po\u017cytku Publicznego dzi\u0119ki czemu na rozw\u00f3j projektu Wolne Lektury mo\u017cna przekaza\u0107 1% swojego podatku. W tym celu nale\u017cy wype\u0142ni\u0107 odpowiedni\u0105 rubryk\u0119 w rocznym zeznaniu podatkowym (PIT-36, PIT-37 lub PIT-28). W zeznaniu nale\u017cy poda\u0107 nazw\u0119:

                        \r\nFundacja Nowoczesna Polska
                        \r\noraz numer z Krajowego Rejestru S\u0105dowego (KRS) 0000070056
                        \r\n", + "left_column_it": "

                        Dona l'1% delle tue tasse a Wolne Lektury

                        \r\n

                        Fundacja Nowoczesna Polska (Fondazione Polonia Moderna) ha lo status dell'Organizzazione del Beneficio Pubblico grazie a cui si pu\u00f2 donare l'1% delle proprie tasse. Per fare questo bisogna compilare l\u2019apposita casella nella dichiarazione annuale dei redditi (PIT-36, PIT-37 o PIT-28). Nella dichiarazione bisogna indicare il nome:

                        Fundacja Nowoczesna Polska
                        e il numero del Krajowy Rejestr S\u0105dowy (KRS) \u2013 (Nazionale Registro Giudiziario) 0000070056
                        \r\n", + "title_es": "Ap\u00f3yanos", + "left_column_ru": "\ufeff

                        \u041f\u0435\u0440\u0435\u0434\u0430\u0439 1% \u0441\u0432\u043e\u0435\u0433\u043e \u043d\u0430\u043b\u043e\u0433\u0430 \u0434\u043b\u044f Wolne Lektury

                        \r\n\r\n\r\n

                        \u0424\u043e\u043d\u0434 Nowoczesna Polska \u0438\u043c\u0435\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0447\u0435\u043c\u0443 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Wolne Lektury \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c 1% \r\n\u043e\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u043d\u0430\u043b\u043e\u0433\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0440\u0443\u0431\u0440\u0438\u043a\u0443 \u0432 \u043b\u0438\u0447\u043d\u043e\u0439 \u0433\u043e\u0434\u043e\u0432\u043e\u0439 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438 \u043e \u0434\u043e\u0445\u043e\u0434\u0430\u0445 (PIT-36, PIT-37 \u0438 PIT-28), \r\n\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435:

                        \r\nFundacja Nowoczesna Polska
                        \r\n\r\n\u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u043e\u043c\u0435\u0440 \u0438\u0437 \u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0421\u0443\u0434\u0435\u0431\u043d\u043e\u0433\u043e \u0420\u0435\u0435\u0441\u0442\u0440\u0430 (KRS) 0000070056
                        \r\n", + "slug": "wesprzyj-nas", + "right_column_de": "

                        \u00dcbergeben Sie eine Spende an Wolne Lektury

                        \r\n

                        Jede eingezahlte Summe wird f\u00fcr die Erweiterung der B\u00fccheranzahl in der Bibiothek \u00fcbermittelt. Es reicht nur eine \u00dcberweisung aufs Konto:

                        \r\n\r\nFundacja Nowoczesna Polska (Stiftung Modernes Polen)
                        \r\nStra\u00dfe: Marsza\u00b3kowska 84/92, Wohnungsnummer 125
                        \r\nPostleitzahl und Stadt: 00-514 Warszawa
                        \r\nKontonummer: PKO BP 46 10201097 0000 7502 0001 6766
                        \r\n\u00dcberweisungstitel: \"Spende an Wolne Lektury\" oder \"Darowizna na Wolne Lektury\"
                        ", + "left_column_es": "

                        Dona 1% de tu impuesto a Wolne Lektury

                        \r\n

                        La Fundaci\u00f3n Polonia Modera tiene car\u00e1cter de organizaci\u00f3n no gubernamental, por lo tanto se puede donar 1% de impuesto para el desarrollo del proyecto Wolne Lektury. Para este prop\u00f3sito hay que rellenar el espacio en blanco apropriado en la declaraci\u00f3n de la renta anual (PIT-36, PIT-37 o PIT-28). Se deber\u00eda poner el nombre:

                        \r\nFundacja Nowoczesna Polska
                        \r\ny el numero de el Registro Judicial Nacional (KRS) 0000070056
                        \r\n\r\n", + "left_column_en": "

                        Support Wolne Lektury with 1% of income tax

                        \r\n

                        The Modern Poland Foundation has the status of a public benefit organization (Pol. organizacja po\u017cytku publicznego) thanks to which Wolne Lektury can receive 1% of income tax from individuals. To help us in this way, it is necessary to fill in the correct space in the annual tax return (PIT-36, PIT-37 or PIT-28), providing the name:

                        \r\nFundacja Nowoczesna Polska
                        \r\nand the National Court Register number - Krajowy Rejestr S\u0105dowy (KRS) 0000070056
                        ", + "right_column_fr": "

                        Faites une donation au projet Wolne Lektury

                        \r\n

                        Chaque somme donn\u00e9e servira au d\u00e9veloppement de notre biblioth\u00e8que. Il suffit de verser l'argent sur le compte:

                        \r\n\r\nFundacja Nowoczesna Polska
                        \r\nul. Marsza\u0142kowska 84/92 lok. 125
                        \r\n00-514 Warszawa
                        \r\nLe num\u00e9ro de compte: PKO BP 46 10201097 0000 7502 0001 6766
                        \r\nLe libell\u00e9 de virement: Darowizna na Wolne Lektury
                        \r\n", + "title_ru": "\ufeff\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438 \u043d\u0430\u0441!", + "title_it": "Sostienici" + } + } +] \ No newline at end of file diff --git a/src/infopages/locale/de/LC_MESSAGES/django.mo b/src/infopages/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..80a39d9e6 Binary files /dev/null and b/src/infopages/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/infopages/locale/de/LC_MESSAGES/django.po b/src/infopages/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..5d8ff58e9 --- /dev/null +++ b/src/infopages/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,1217 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: Kamil \n" +"Language-Team: de \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 +msgid "main page priority" +msgstr "" + +#: models.py:12 +msgid "slug" +msgstr "" + +#: models.py:13 +msgid "title" +msgstr "" + +#: models.py:14 +msgid "left column" +msgstr "" + +#: models.py:15 +msgid "right column" +msgstr "" + +#: models.py:19 +msgid "info page" +msgstr "" + +#: models.py:20 +msgid "info pages" +msgstr "" + +#~ msgid "Wolontariat dla wiedzy" +#~ msgstr "Volontariat für Wissen" + +#~ msgid "" +#~ "

                        Wolontariat

                        \r\n" +#~ "\t

                        \r\n" +#~ "\t\tBiogramy pisarzy oraz definicje epok i gatunków literackich w\r\n" +#~ "\t\tbibliotece internetowej Wolne Lektury napisali uczniowie\r\n" +#~ "\t\tczterech szkół podczas warsztatów „Wolontariat dla wiedzy”.\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t\tUczniowie pracowali wspólnie pod merytorycznym nadzorem\r\n" +#~ "\t\tnauczycieli i specjalistów – literaturoznawców na\r\n" +#~ "\t\t\r\n" +#~ "\r\n" +#~ "\t\t\tplatformie internetowej wiki\r\n" +#~ "\t\tprzygotowanej przez zespół\r\n" +#~ "\t\t2ia. Praca nad notami była " +#~ "jednocześnie nauką wykorzystywania\r\n" +#~ "\t\tkomputerów i internetu do wyszukiwania informacji, a także\r\n" +#~ "\t\tweryfikowania ich wiarygodności.\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t\tProjekt \"Wolontariat dla wiedzy\" został zrealizowany dzięki\r\n" +#~ "\t\twsparciu\r\n" +#~ "\t\t\r\n" +#~ "\t\t\tMinisterstwa Edukacji Narodowej. Nagrody dla uczniów ufundowali" +#~ "\r\n" +#~ "\t\t\r\n" +#~ "\r\n" +#~ "\t\t\tWydawnictwo Nasza Księgarnia\r\n" +#~ "\t\ti\r\n" +#~ "\t\tWydawnictwo Helion. Noty " +#~ "zweryfikowano w serwisie\r\n" +#~ "\t\t\r\n" +#~ "\t\t\tPlagiat.pl.\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t\tRaport z realizacji projektu " +#~ "„Wolontariat dla wiedzy\".\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t" +#~ "\r\n" +#~ "\t\r\n" +#~ "\t\r\n" +#~ " " +#~ "\r\n" +#~ " " +#~ "\r\n" +#~ "\t

                        \r\n" +#~ msgstr "" +#~ "

                        Volontariat

                        \r\n" +#~ "\t

                        \r\n" +#~ "\t\tSchriftsteller-Biographien und Definitionen von Epochen und " +#~ "Literaturgattungen\r\n" +#~ " in der Internetbibliothek Freie Lektüren haben unsere Schüler aus vier" +#~ "\r\n" +#~ " Schulen während Workshops \"Volontariat für Wissen\" geschrieben.\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t\tDie Schüler haben gemeinsam unter Aufsicht der Lehrer\r\n" +#~ "\t\tund Spezialisten -Literaturwissenschaftler - gearbeitet\r\n" +#~ "\t\t\r\n" +#~ "\r\n" +#~ "\t\t\tauf \"wiki\" Internetplattform\r\n" +#~ "\t\tvorbereitet von unserem Team\r\n" +#~ "\t\t2ia. Der Einsatz von Computer und " +#~ "Internet wurde\r\n" +#~ "\t\t- während der Arbeiten an Noten - für die Informationssuche und " +#~ "Informationsprüfung genutzt\r\n" +#~ "\t\tund gleichzeitig als notwendiges Werkzeug in den Lernprozess " +#~ "einbezogen.\r\n" +#~ "\t

                        \r\n" +#~ " \r\n" +#~ "\t

                        \r\n" +#~ "\t\tDas Projekt \"Volontariat für Wissen\" wurde dank der Unterstützung " +#~ "umgesetzt, von\r\n" +#~ "\t\t\r\n" +#~ "\t\t\tMinisterium für Bildung. Preise für Schüler spendeten\r\n" +#~ "\t\t\r\n" +#~ "\r\n" +#~ "\t\t\tVerlag unsere Buchhandlung\r\n" +#~ "\t\tund\r\n" +#~ "\t\tWydawnictwo Helion. Noten wurden im " +#~ "Service verifiziert\r\n" +#~ "\t\t\r\n" +#~ "\t\t\tPlagiat.pl.\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t\tder Bericht über das Projekt " +#~ "\"Volontariat für Wissen\".\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t" +#~ "\r\n" +#~ "\t\r\n" +#~ "\t\r\n" +#~ " " +#~ "\r\n" +#~ " " +#~ "\r\n" +#~ "\t

                        \r\n" + +#~ msgid "" +#~ "\t

                        Autorzy

                        \r\n" +#~ "\r\n" +#~ "\t
                          \r\n" +#~ "\t\t
                        1. \r\n" +#~ "\t\t\t

                          \r\n" +#~ "\t\t\t\tGimnazjum nr 40 z Oddziałami Integracyjnymi w Zespole\r\n" +#~ "\t\t\t\tSzkół nr 69 im. Armii Krajowej Grupy Bojowej „KRYBAR”,\r\n" +#~ "\t\t\t\tul. Drewniana 8, 00-345 Warszawa; klasa druga pod opieką\r\n" +#~ "\t\t\t\tAnny Budziarek-Friedrich:\r\n" +#~ "\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t
                            \r\n" +#~ "\t\t\t\t
                          • Burdon Filip;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Dębski Bartek;
                          • \r\n" +#~ "\t\t\t\t
                          • Jackowicz Kamil;
                          • \r\n" +#~ "\t\t\t\t
                          • Kurek Paweł;
                          • \r\n" +#~ "\t\t\t\t
                          • Makles Bartosz;
                          • \r\n" +#~ "\t\t\t\t
                          • Markiewicz Jeremiasz;
                          • \r\n" +#~ "\t\t\t\t
                          • Migdał Katarzyna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Mioduszewski Michał;
                          • \r\n" +#~ "\t\t\t\t
                          • Pfeiffer Ida;
                          • \r\n" +#~ "\t\t\t\t
                          • Płaskowicka Karolina;
                          • \r\n" +#~ "\t\t\t\t
                          • Sailer Ewa.
                          • \r\n" +#~ "\t\t\t
                          \r\n" +#~ "\t\t
                        2. \r\n" +#~ "\r\n" +#~ "\t\t
                        3. \r\n" +#~ "\t\t\t

                          \r\n" +#~ "\t\t\t\tXXXIII Liceum Ogólnokształcące im. Mikołaja Kopernika,\r\n" +#~ "\t\t\t\tul. Bema 76, 01-225 Warszawa; klasa pierwsza o profilu\r\n" +#~ "\t\t\t\tbiologiczno-chemicznym pod opieką Elżbiety Konkowskiej:\r\n" +#~ "\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t
                            \r\n" +#~ "\t\t\t\t
                          • Chwil Bartłomiej;
                          • \r\n" +#~ "\t\t\t\t
                          • Czarnecka Natalia;
                          • \r\n" +#~ "\t\t\t\t
                          • Gawrońska Iga;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Grabarczyk Marta;
                          • \r\n" +#~ "\t\t\t\t
                          • Jastrząb Katarzyna;
                          • \r\n" +#~ "\t\t\t\t
                          • Krawczak Olga;
                          • \r\n" +#~ "\t\t\t\t
                          • Krawczyk Marianna;
                          • \r\n" +#~ "\t\t\t\t
                          • Kur Natalia;
                          • \r\n" +#~ "\t\t\t\t
                          • Kwiatek Marta;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Laśkiewicz Joanna;
                          • \r\n" +#~ "\t\t\t\t
                          • Machczyńska Daria;
                          • \r\n" +#~ "\t\t\t\t
                          • Miecznikowska Izabela;
                          • \r\n" +#~ "\t\t\t\t
                          • Moczulska Karolina;
                          • \r\n" +#~ "\t\t\t\t
                          • Mościcka Aneta;
                          • \r\n" +#~ "\t\t\t\t
                          • Narloch Sabina;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Przybysz Paweł;
                          • \r\n" +#~ "\t\t\t\t
                          • Puchta Marek;
                          • \r\n" +#~ "\t\t\t\t
                          • Ryska Cezary;
                          • \r\n" +#~ "\t\t\t\t
                          • Sandomierski Bartłomiej;
                          • \r\n" +#~ "\t\t\t\t
                          • Sławiński Tomasz;
                          • \r\n" +#~ "\t\t\t\t
                          • Słowik Olga;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Starzycka Katarzyna;
                          • \r\n" +#~ "\t\t\t\t
                          • Strzelczak Karolina;
                          • \r\n" +#~ "\t\t\t\t
                          • Szafran Danuta;
                          • \r\n" +#~ "\t\t\t\t
                          • Szmigielska Magdalena;
                          • \r\n" +#~ "\t\t\t\t
                          • Szulkowska Alicja;
                          • \r\n" +#~ "\t\t\t\t
                          • Ślusarczyk Anna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Tytkowska Anna.
                          • \r\n" +#~ "\t\t\t
                          \r\n" +#~ "\t\t\t
                        4. \r\n" +#~ "\t\t\t\t

                          \r\n" +#~ "\t\t\t\t\tAutorskie Niepubliczne Liceum Ogólnokształcące nr\r\n" +#~ "\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; klasa pierwsza\r\n" +#~ "\t\t\t\t\to profilu ogólnym pod opieką Michała Friedricha:\r\n" +#~ "\t\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                            \r\n" +#~ "\t\t\t\t\t
                          • Baraniecka Marta;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Gołaszewska Ewa;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Kwiatkowski Michał;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Machnikowska Monika;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Pietrzak Bartosz;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Przespolewski Przemysław;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Rosińska Zuzanna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Sibiga Magdalena.
                          • \r\n" +#~ "\t\t\t\t
                          \r\n" +#~ "\t\t\t
                        5. \r\n" +#~ "\t\t\t
                        6. \r\n" +#~ "\t\t\t\t

                          \r\n" +#~ "\t\t\t\t\tLXIV Liceum Ogólnokształcące im. St. I. Witkiewicza,\r\n" +#~ "\t\t\t\t\tul. Elbląska 51, 01-737 Warszawa; klasa pierwsza o\r\n" +#~ "\t\t\t\t\tprofilu ogólnym pod opieką Daniela Zycha:\r\n" +#~ "\t\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                            \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Andrzejczak Kamil;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Czubaj Konrad;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Drągowska Katarzyna;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Gajewska Magdalena;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Głowacki Jan;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Grad Paweł;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Hnatowski Bartek;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Karwowski Marcin;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Kłos Aneta;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Kozieł Barbara;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Kozłowska Anna;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Krug Pamela;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Krzosek Jakub;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Lubaś Michał;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Masewicz Natalia;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Mastalerz Agnieszka;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Modelska Marta;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Nowak Aleksandra;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Pabian Agnieszka;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Paszkowska Aleksandra;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Pielat Zofia;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Poniecka Agnieszka;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Pytlak Urszula;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Rosa Karolina;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Smyczyńska Kamila;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Stolińska Barbara;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Szymańska Katarzyna;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Ścibior Ewa;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Witczak Magda;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Witkowska Justyna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Wyrzykowska Jowita;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Ziółkowska Adrianna.
                          • \r\n" +#~ "\t\t\t\t
                          \r\n" +#~ "\t\t\t
                        7. \r\n" +#~ "\t \r\n" +#~ "\t
                        \r\n" +#~ msgstr "" +#~ "\t

                        Autoren

                        \r\n" +#~ "\r\n" +#~ "\t
                          \r\n" +#~ "\t\t
                        1. \r\n" +#~ "\t\t\t

                          \r\n" +#~ "\t\t\t\tGymnasium Nr. 40 mit Integrationsabteilungen \r\n" +#~ "\t\t\t\tSchulverbund Nr. 69 Schulname: Armii Krajowej Grupy Bojowej " +#~ "„KRYBAR”, \r\n" +#~ "\t\t\t\tStr. Drewniana 8, 00-345 Warszawa; 2. Klasse\r\n" +#~ "\t\t\t\tKlassenlehrerin: Anna Budziarek-Friedrich:\r\n" +#~ "\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t
                            \r\n" +#~ "\t\t\t\t
                          • Burdon Filip;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Dębski Bartek;
                          • \r\n" +#~ "\t\t\t\t
                          • Jackowicz Kamil;
                          • \r\n" +#~ "\t\t\t\t
                          • Kurek Paweł;
                          • \r\n" +#~ "\t\t\t\t
                          • Makles Bartosz;
                          • \r\n" +#~ "\t\t\t\t
                          • Markiewicz Jeremiasz;
                          • \r\n" +#~ "\t\t\t\t
                          • Migdał Katarzyna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Mioduszewski Michał;
                          • \r\n" +#~ "\t\t\t\t
                          • Pfeiffer Ida;
                          • \r\n" +#~ "\t\t\t\t
                          • Płaskowicka Karolina;
                          • \r\n" +#~ "\t\t\t\t
                          • Sailer Ewa.
                          • \r\n" +#~ "\t\t\t
                          \r\n" +#~ "\t\t
                        2. \r\n" +#~ "\r\n" +#~ "\t\t
                        3. \r\n" +#~ "\t\t\t

                          \r\n" +#~ "\t\t\t\tXXXIII Kopernikus Oberschule,\r\n" +#~ "\t\t\t\tStr. Bema 76, 01-225 Warszawa; 1. Klasse; \r\n" +#~ "\t\t\t\tFachbereiche: Biologie-Chemie; Klassenlehrerin: Elżbieta " +#~ "Konkowska:\r\n" +#~ "\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t
                            \r\n" +#~ "\t\t\t\t
                          • Chwil Bartłomiej;
                          • \r\n" +#~ "\t\t\t\t
                          • Czarnecka Natalia;
                          • \r\n" +#~ "\t\t\t\t
                          • Gawrońska Iga;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Grabarczyk Marta;
                          • \r\n" +#~ "\t\t\t\t
                          • Jastrząb Katarzyna;
                          • \r\n" +#~ "\t\t\t\t
                          • Krawczak Olga;
                          • \r\n" +#~ "\t\t\t\t
                          • Krawczyk Marianna;
                          • \r\n" +#~ "\t\t\t\t
                          • Kur Natalia;
                          • \r\n" +#~ "\t\t\t\t
                          • Kwiatek Marta;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Laśkiewicz Joanna;
                          • \r\n" +#~ "\t\t\t\t
                          • Machczyńska Daria;
                          • \r\n" +#~ "\t\t\t\t
                          • Miecznikowska Izabela;
                          • \r\n" +#~ "\t\t\t\t
                          • Moczulska Karolina;
                          • \r\n" +#~ "\t\t\t\t
                          • Mościcka Aneta;
                          • \r\n" +#~ "\t\t\t\t
                          • Narloch Sabina;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Przybysz Paweł;
                          • \r\n" +#~ "\t\t\t\t
                          • Puchta Marek;
                          • \r\n" +#~ "\t\t\t\t
                          • Ryska Cezary;
                          • \r\n" +#~ "\t\t\t\t
                          • Sandomierski Bartłomiej;
                          • \r\n" +#~ "\t\t\t\t
                          • Sławiński Tomasz;
                          • \r\n" +#~ "\t\t\t\t
                          • Słowik Olga;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Starzycka Katarzyna;
                          • \r\n" +#~ "\t\t\t\t
                          • Strzelczak Karolina;
                          • \r\n" +#~ "\t\t\t\t
                          • Szafran Danuta;
                          • \r\n" +#~ "\t\t\t\t
                          • Szmigielska Magdalena;
                          • \r\n" +#~ "\t\t\t\t
                          • Szulkowska Alicja;
                          • \r\n" +#~ "\t\t\t\t
                          • Ślusarczyk Anna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Tytkowska Anna.
                          • \r\n" +#~ "\t\t\t
                          \r\n" +#~ "\t\t\t
                        4. \r\n" +#~ "\t\t\t\t

                          \r\n" +#~ "\t\t\t\t\tPrivate Oberschule Nr 42,\r\n" +#~ "\t\t\t\t\tStr. Iwicka 47 B, 00-735 Warszawa; 1. Klasse\r\n" +#~ "\t\t\t\t\tFachbereich: Allgemeinbildung; Klassenlehrer: Michał Friedrich:" +#~ "\r\n" +#~ "\t\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                            \r\n" +#~ "\t\t\t\t\t
                          • Baraniecka Marta;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Gołaszewska Ewa;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Kwiatkowski Michał;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Machnikowska Monika;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Pietrzak Bartosz;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Przespolewski Przemysław;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Rosińska Zuzanna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Sibiga Magdalena.
                          • \r\n" +#~ "\t\t\t\t
                          \r\n" +#~ "\t\t\t
                        5. \r\n" +#~ "\t\t\t
                        6. \r\n" +#~ "\t\t\t\t

                          \r\n" +#~ "\t\t\t\t\tLXIV Witkiewicz Oberschule,\r\n" +#~ "\t\t\t\t\tStr. Elbląska 51, 01-737 Warszawa; 1. Klasse, \r\n" +#~ "\t\t\t\t\tFachbereich: Allgemeinbildung; Klassenlehrer: Daniel Zych:\r\n" +#~ "\t\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                            \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Andrzejczak Kamil;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Czubaj Konrad;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Drągowska Katarzyna;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Gajewska Magdalena;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Głowacki Jan;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Grad Paweł;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Hnatowski Bartek;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Karwowski Marcin;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Kłos Aneta;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Kozieł Barbara;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Kozłowska Anna;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Krug Pamela;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Krzosek Jakub;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Lubaś Michał;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Masewicz Natalia;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Mastalerz Agnieszka;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Modelska Marta;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Nowak Aleksandra;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Pabian Agnieszka;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Paszkowska Aleksandra;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Pielat Zofia;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Poniecka Agnieszka;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Pytlak Urszula;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Rosa Karolina;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Smyczyńska Kamila;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Stolińska Barbara;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Szymańska Katarzyna;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Ścibior Ewa;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Witczak Magda;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Witkowska Justyna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Wyrzykowska Jowita;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Ziółkowska Adrianna.
                          • \r\n" +#~ "\t\t\t\t
                          \r\n" +#~ "\t\t\t
                        7. \r\n" +#~ "\t \r\n" +#~ "\t
                        \r\n" + +#~ msgid "Możesz nam pomóc" +#~ msgstr "Du kannst uns helfen" + +#~ msgid "" +#~ "

                        Wolontariat w Wolnych Lekturach

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Zostań naszym redaktorem, programistą lub tłumaczem – wolontariuszem." +#~ "
                        • \r\n" +#~ "
                        • Zdobądź nowe umiejętności i doświadczenie.
                        • \r\n" +#~ "
                        • Weź udział w otwartym projekcie i twórz innowacyjną bibliotekę " +#~ "internetową.
                        • \r\n" +#~ "
                        \r\n" +#~ "

                        Dzięki pracy naszych wolontariuszy opublikowaliśmy już ponad 1500 " +#~ "lektur, z których skorzystały ponad 3 miliony czytelników z " +#~ "całego świata.

                        \r\n" +#~ "

                        Zapraszamy wszystkie osoby, które chcą współtworzyć nasz projekt. " +#~ "Współpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " +#~ "literaturą, redagowaniem tekstów i projektami informatycznymi. Oferujemy " +#~ "profesjonalne szkolenia i stałą pomoc merytoryczną. Wolontariusze mogą " +#~ "pracować zdalnie lub w siedzibie Fundacji.

                        \r\n" +#~ "

                        Organizujemy również praktyki studenckie – nawiązaliśmy współpracę z " +#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " +#~ "Karier UKSW oraz Wydziałem Fizyki UW.

                        \r\n" +#~ "\r\n" +#~ "

                        Jak się do nas zgłosić?

                        \r\n" +#~ "

                        Wszystkie zainteresowane osoby prosimy o przysłanie maila na adres marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.

                        \r\n" +#~ msgstr "" +#~ "

                        Volontariat

                        \r\n" +#~ "\r\n" +#~ "

                        Wir sind stets bemüht, unseren Bibliothekbestand ständig um " +#~ "neue Werke zu erweitern. Dies ist nur \r\n" +#~ " dank der Hilfe unserer Volontäre möglich.

                        \r\n" +#~ "\r\n" +#~ "

                        Wir laden herzlich alle Menschen ein, die sich an der " +#~ "Mitgestaltung unserer Internet-Schulbibliothek beteiligen wollen.

                        \r\n" +#~ " \r\n" +#~ " \r\n" +#~ " \r\n" +#~ "

                        Allen Volontären bieten wir Schulungen und Praktikum im " +#~ "Bereich der Textverarbeitung an: \r\n" +#~ " technische und sachliche Redaktion. Volontäre können mehr über " +#~ "Probleme und Möglichkeiten erfahren, \r\n" +#~ " die mit der Veröffentlichung von Internetpublikationen verbunden " +#~ "sind. Unsere Volontäre beteiligen \r\n" +#~ " sich zudem an der Organisation von Schulungen und Konferenzen, " +#~ "helfen bei der Vorbereitung \r\n" +#~ " von Hörtexten (sog. Audiobooks). Wir stellen Verträge und " +#~ "Bescheinigungen unseren Volontären \r\n" +#~ " bezüglich der Art der Tätigkeit und deren Zeitrahmen aus. " +#~ "Schulungen, Verlagspraktikum sowie \r\n" +#~ " während des Volontariats erworbene Erfahrungen und Kompetenzen " +#~ "können ganz gewiss zum beruflichen Aufstieg verhelfen.

                        \r\n" +#~ " \r\n" +#~ " \r\n" +#~ "

                        Was zu tun ist?

                        \r\n" +#~ " \r\n" +#~ "

                        Der Großteil der Arbeit liegt in der Vorbereitung der Lektüren " +#~ "zur Veröffentlichung. Die Texte, die wir \r\n" +#~ " von der Nationalbibliothek bekommen, müssen auf Tipp- und andere " +#~ "mechanische Fehler überprüft werden. \r\n" +#~ " Die Anmerkungen müssen in den Text eingefügt werden. Es sei zu " +#~ "bedenken, dass unsere Zielgruppe Schüler sind, \r\n" +#~ " so müssen dementsprechend die Wörter und Wendungen an diese " +#~ "Altersgruppe angepasst werden. Ältere Ausgaben \r\n" +#~ " (hier gilt das strenge Uhrheberrecht) werden stets in Hinblick " +#~ "auf Rechtsschreibung und Flexion an die \r\n" +#~ " Gegenwartssprache angepasst und zwar unter gleichzeitiger " +#~ "Beachtung der Einheit von Form und literarischen Stilen. \r\n" +#~ " Das Aussuchen von literarischen Motiven und Themen, die uns " +#~ "helfen sollen, Literaturinhalte tiefgreifend zu verstehen, \r\n" +#~ " schließen unsere Projektarbeiten ab. Bei allen diesen " +#~ "Unternehmungen helfen uns Volontäre - Lehrer sowie Schüller - \r\n" +#~ " die uns mit eigenen Ratschlägen und Bemerkungen bei der " +#~ "Entscheidungsfindung unterstützen.

                        \r\n" +#~ " \r\n" +#~ " \r\n" +#~ "

                        Wie Sie uns erreichen?

                        \r\n" +#~ " \r\n" +#~ "

                        Personen, die an der Zusammenarbeit interessiert sind, bitten " +#~ "wir um eine E-Mail an folgende Adresse zu richten: fundacja@nowoczesnapolska.org.pl.\r\n" +#~ "\r\n" +#~ "

                        Wir laden Sie auch ein unter Redaktonseite der Freien Lektüren, auf unserer Hompage finden Sie nützliche Informationen rund um das " +#~ "Thema Redaktionsarbeit.

                        \r\n" + +#~ msgid "" +#~ "

                        Kogo szukamy?

                        \r\n" +#~ "\r\n" +#~ "

                        Redaktorów technicznych (skład tekstu)

                        \r\n" +#~ "

                        Skład jest pierwszym etapem pracy nad tekstem. Za pomocą znaczników " +#~ "języka WL-XML nadajemy tekstowi pożądaną formę i umożliwiamy wyświetlenie " +#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na Platformie Redakcyjnej, " +#~ "która pozwala na zautomatyzowanie dużej części pracy.

                        \r\n" +#~ "\r\n" +#~ "

                        Kto może zostać redaktorem technicznym?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy – po krótkim szkoleniu.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Więcej informacji o redakcji technicznej znajdziecie na stronie redakcji " +#~ "Wolnych Lektur

                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Redaktorów literackich (merytorycznych)

                        \r\n" +#~ "

                        Redakcja literacka obejmuje korektę, uwspółcześnienia oraz dodawanie " +#~ "przypisów i motywów literackich. To unikalna możliwość zdobycia " +#~ "doświadczenia w cyfrowej edycji tekstów.

                        \r\n" +#~ "\r\n" +#~ "

                        Kto może zostać redaktorem literackim?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Osoby, które mają doświadczenie w redakcji tekstów literackich,
                        • " +#~ "\r\n" +#~ "
                        • Studenci i absolwenci studiów humanistycznych, którzy chcą takie " +#~ "doświadczenie zdobyć.
                        • \r\n" +#~ "
                        \r\n" +#~ "

                        Więcej informacji o redakcji merytorycznej znajdziecie na stronie redakcji " +#~ "Wolnych Lektur

                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Tłumaczy

                        \r\n" +#~ "

                        Strona WolneLektury.pl jest dostępna w siedmiu językach obcych – " +#~ "angielskim, francuskim, niemieckim, hiszpańskim, litewskim, rosyjskim " +#~ "oraz ukraińskim. Użytkownikami biblioteki jest ponad 200 tysięcy osób z " +#~ "zagranicy, a już niedługo nasze zbiory obejmą również dzieła w językach " +#~ "obcych. Dlatego potrzebujemy na bieżąco tłumaczyć nowe informacje " +#~ "pojawiające się na stronie.

                        \r\n" +#~ "

                        Kto może pomóc w tłumaczeniach?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy, kto dobrze zna co najmniej jeden z powyższych języków.
                        • " +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Programistów

                        \r\n" +#~ "

                        Poza samą stroną Wolnych Lektur tworzymy również:

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • narzędzia redakcyjne,
                        • \r\n" +#~ "
                        • konwertery do różnych formatów e-booków,
                        • \r\n" +#~ "
                        • aplikacje mobile ułatwiające dostęp do naszych zasobów.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " +#~ "jQuery, LaTeX, Java.\r\n" +#~ "Tworzone przez nas oprogramowanie udostępniamy na wolnej licencji.

                        \r\n" +#~ "

                        Kto może pomóc w pracach programistycznych?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy, kto umie i chciałby zdobyć punkty do karmy za udział w " +#~ "otwartym projekcie programistycznym. ;)
                        • \r\n" +#~ "
                        \r\n" +#~ msgstr "" +#~ "

                        Wohlverdiente Volontäre

                        \r\n" +#~ "\r\n" +#~ "\t

                        Agatapaszkowska (Mitarbeit seit 15. März 2008)

                        \r\n" +#~ "\r\n" +#~ "

                        bearbeitete u.a. \"Durch Wüste und Wildnis\" von Sienkiewicz; " +#~ "s. auf unserer Website die \"Benutzerbeiträge\": http://wiki." +#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

                        \r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\t

                        AgnieszkaKappa (Mitarbeit seit 16. März 2008)

                        \r\n" +#~ "\r\n" +#~ "

                        arbeitete u.a. an der Erstellung der Liste und Beschreibung " +#~ "der literarischen Themen und Motive;bearbeitete Texten von Sienkiewicz " +#~ "( Der Leuchtturmwärter, Janko der Musikant, Quo vadis);s. auf unserer " +#~ "Website die \"Benutzerbeiträge\": http://wiki.wolnepodreczniki.pl/index.php?" +#~ "title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa

                        " +#~ "\r\n" +#~ "\r\n" +#~ "\r\n" +#~ " \r\n" +#~ " \r\n" +#~ "\r\n" +#~ "

                        Anerys (Mitarbeit seit 5. Juli 2007)

                        \r\n" +#~ "\r\n" +#~ "

                        arbeitete u.a. an der Erstellung der Liste und Beschreibung " +#~ "der literarischen Themen und Motive;nahm an der Diskussion über " +#~ "Literaturgattungen teil, bearbeitete folgende Werke: Bogurodzica, " +#~ "\"Spruchgedichte\" und \"Klagelieder\" von Kochanowski; Gedichte von " +#~ "Slowacki ( Agamemnons Grab), \"Tartuffe oder der Betrüger\" von Moliere, " +#~ "ob Poesien von Kasprowicz (u.a. eine Hymne \"Dies Irae\"); s. auf " +#~ "unserer Website die \"Benutzerbeiträge\": http://wiki." +#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

                        \r\n" +#~ " \r\n" +#~ "\r\n" +#~ "\t

                        EmiliaZdankiewicz (Mitarbeit seit 17. März 2008)

                        \r\n" +#~ "\r\n" +#~ "

                        nahm u.a. an der Diskussion und Beschreibung literarischer " +#~ "Motive teil, Słowacki, Kordian; Konopnicka, Unsere Mähre; Mickiewicz, " +#~ "Totenfeier Teil III; s. auf unserer Website die \"Benutzerbeiträge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/" +#~ "EmiliaZdankiewicz

                        \r\n" +#~ "\r\n" +#~ " \r\n" +#~ "\t\r\n" +#~ "\t

                        Ewa_Serafin (Mitarbeit seit 15. März 2008)

                        \r\n" +#~ "\r\n" +#~ "

                        arbeitete u.a. an der Erstellung der Liste und Beschreibung " +#~ "der literarischen Themen und Motive, bearbeitete Kasprowicz Gedichte („Z " +#~ "wichrów i hal”, „Nad przepaściami”, „W ciemności schodzi moja dusza” oraz " +#~ "„Nad Niemnem” Orzeszkowej; s. auf unserer Website die \"Benutzerbeiträge" +#~ "\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/" +#~ "Ewa_Serafin

                        \r\n" +#~ "\r\n" +#~ "\r\n" +#~ " \t

                        Hanna_Golab (Mitarbeit seit 15. März 2008)

                        \r\n" +#~ "\r\n" +#~ "

                        bearbeitete \" König Ödipus\" von Sophokles sowie \"Dusiołek" +#~ "\" von Lesmian; s. auf unserer Website die \"Benutzerbeiträge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\t

                        Ingene (Mitarbeit seit 16. Juli 2008)

                        \r\n" +#~ "\r\n" +#~ "

                        bearbeitete u.a. „Siłaczka” von Żeromski, „Quo vadis” von " +#~ "Sienkiewicz sowie „Klagelieder” von Kochanowski; s. auf unserer Website " +#~ "die \"Benutzerbeiträge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk" +#~ "%C5%82ad/Ingene

                        \r\n" +#~ " \r\n" +#~ "\t

                        Jmyszkowska (Mitarbeit seit 26. März 2008)

                        \r\n" +#~ "\r\n" +#~ "

                        bearbeitete u.a. „Giaur” von Byron sowie „Quo vadis” von " +#~ "Sienkiewicz; s. auf unserer Website die \"Benutzerbeiträge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\r\n" +#~ "\r\n" +#~ "\r\n" +#~ "

                        Marysiabailey (Mitarbeit seit 1. Oktober 2007)

                        \r\n" +#~ "\r\n" +#~ "

                        arbeitete u.a. an der Erstellung der Liste und Beschreibung " +#~ "der literarischen Themen und Motive sowie deren Benutzung; bearbeitete " +#~ "folgende Werke: \"Die Bauern\" von Reymont, \"Die Puppe\" von Prus, \"Un-" +#~ "göttliche Komödie\" von Krasinski, \"Märchens\" und \"Satire\" von " +#~ "Krasickiego, \"Antigone\" von Sophokles sowie Werke von Kochanowski, " +#~ "Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman, Kasprowicz; s. auf " +#~ "unserer Website die \"Benutzerbeiträge“: http://wiki.wolnepodreczniki.pl/" +#~ "index.php?title=Specjalna:Wk%C5%82ad&limit=500&" +#~ "target=Marysiabailey\r\n" +#~ "\r\n" +#~ "\r\n" +#~ "

                        Olga_Wojtczak (Mitarbeit seit 21. Oktober 2008)

                        \r\n" +#~ "\r\n" +#~ "

                        bearbeitete u.a. Romane von Sienkiewicz ( Die Trilogie), " +#~ "Reymont, Żeromski und Dramen von Shakespeare; s. auf unserer Website die " +#~ "\"Benutzerbeiträge\": http://wiki.wolnepodreczniki.pl/Specjalna:Wk" +#~ "%C5%82ad/Olga_Wojtczak

                        \r\n" +#~ "\r\n" +#~ "

                        Renataml (Mitarbeit seit 30. Juni 2007)

                        \r\n" +#~ "\r\n" +#~ "

                        nahm an der Diskussion über Motivlisten teil, als erfahrene " +#~ "Lehrerin unterstützte sie uns mit vielen Ratschlägen, bearbeitete " +#~ "folgende Werke: \"Die Puppe\" von Prus, \"Balladyna\" von Slowacki, " +#~ "\"Siłaczka\" Żeromski.\r\n" +#~ "\r\n" +#~ " http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

                        \r\n" + +#~ msgid "O projekcie" +#~ msgstr "Über das Projekt" + +#~ msgid "" +#~ "{% load reporting_stats %}\r\n" +#~ "\r\n" +#~ "

                        Wolne Lektury to biblioteka internetowa czynna 24 godziny na " +#~ "dobę, 365 dni w roku i całkowicie darmowa. W jej zbiorach " +#~ "znajduje się {% count_books %} utworów, w tym wiele " +#~ "lektur szkolnych zalecanych do użytku przez Ministerstwo Edukacji " +#~ "Narodowej, które trafiły już do domeny publicznej. Wszystkie dzieła są " +#~ "odpowiednio opracowane - opatrzone przypisami, motywami i udostępnione w " +#~ "kilku formatach - HTML , TXT , " +#~ "PDF, EPUB, MOBI. W " +#~ "bibliotece znajduje się również kilkaset audiobooków, czytanych przez " +#~ "takich aktorów jak: Danuta Stenka, Jan Peszek czy Andrzej Chyra. Można " +#~ "ich słuchać w formatach MP3 i Ogg Vorbis. Audiobooki są również dostępne w formacie DAISY dostosowanym do potrzeb osób słabowidzących, niewidomych oraz osób " +#~ "mających trudności z czytaniem.

                        \r\n" +#~ "\r\n" +#~ "

                        Biblioteka Wolne Lektury dostępna jest za pośrednictwem aplikacji " +#~ "mobilnych – na system Android oraz na system iOS.

                        \r\n" +#~ "\r\n" +#~ "

                        Wszystkie utwory zamieszczone w bibliotece Wolne Lektury można " +#~ "zgodnie z prawem bezpłatnie przeglądać, słuchać, ściągać na swój " +#~ "komputer, a także udostępniać innym i cytować.

                        " +#~ msgstr "" +#~ "{% load reporting_stats %}\r\n" +#~ "\r\n" +#~ "

                        Wolne Lektury ist eine Internetbibliothek, die 24 Stunden " +#~ "zugänglich ist, 365 Tage im Jahr, dazu völlig kostenlos. Sie " +#~ "beinhält {% count_books %} Werke, darunter viele " +#~ "Schullektüren, die durch das polnische Bildungsministerium empfohlen " +#~ "werden und die zur Gemeinfreiheit gehören. Alle Werke werden entsprechend " +#~ "bearbeitet - mit Fußnoten und Motiven versehen sowie in verschiedenen " +#~ "Formaten zugänglich - HTML , TXT, " +#~ "PDF, EPUB, MOBI. In " +#~ "der Bibliothek befinden sich auch einige hundert von Hörbüchern, die von " +#~ "bekannten polnischen Schauspielern wie Danuta Stenka, Jan Peszek oder " +#~ "Andrzej Chyra vorgelesen werden. Es ist möglich sie in folgenden Formaten " +#~ "abzuspielen: MP3 und Ogg Vorbis. " +#~ "Hörbücher sind auch im Format DAISY zugänglich, die für " +#~ "Bedürfnisse von Schwachsehenden, Blinden und Personen mit " +#~ "Lesenschwierigkeiten geeignet sind.

                        \r\n" +#~ "\r\n" +#~ "

                        Wolne Lektury-Bibliothek ist auch für Nutzer der mobilen Geräte " +#~ "zugänglich – für das System Android und für das System iOS. " +#~ "zugänglich

                        \r\n" +#~ "\r\n" +#~ "

                        Alle in der Wolne Lektury-Bibliothek veröffentlichten Werke " +#~ "kann man rechtsmäßig kostenlos durchsehen, hören, auf eigenen Computer " +#~ "herunterladen; überdies ist ihre Weitervermittlung und Anführung erlaubt." +#~ "

                        " + +#~ msgid "" +#~ "

                        Wolne Lektury to projekt fundacji Nowoczesna Polska realizowany pro " +#~ "publico bono, we współpracy z Biblioteką Narodową, Biblioteką Ślaską oraz " +#~ "Biblioteką Elbląską pod patronatem Ministerstwa Edukacji Narodowej, " +#~ "Ministerstwa Kultury i Dziedzictwa Narodowego oraz Stowarzyszenia Pisarzy " +#~ "Polskich. W Komitecie Honorowym Wolnych Lektur zasiadają: prof. Maria " +#~ "Janion, prof. Grażyna Borkowska, prof. Przemysław Czapliński, prof. " +#~ "Mieczysław Dąbrowski, prof. Ewa Kraskowska, prof. Małgorzata Czermińska, " +#~ "prof. Jerzy Jarzębski i prof. Piotr Śliwiński.

                        \r\n" +#~ "\r\n" +#~ "

                        Większość utworów w bibliotece nie jest chroniona prawem autorskim i " +#~ "znajduje się w domenie publicznej, co oznacza że można je swobodnie " +#~ "publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi " +#~ "materiałami (przypisy, motywy literackie etc.), które podlegają prawu " +#~ "autorskiemu, to te dodatkowe materiały udostępnione są na licencji Uznanie " +#~ "autorstwa-Na tych samych warunkach 3.0. Publikujemy również kilka " +#~ "utworów, które autorzy lub spadkobiercy praw udostępnili na wolnej " +#~ "licencji Uznanie autorstwa-Na tych samych warunkach 3.0.

                        \r\n" +#~ "\r\n" +#~ "Kontakt: wolnelektury@nowoczesnapolska.org.pl" +#~ msgstr "" +#~ "

                        Wolne Lektury ist ein pro bono Projekt der Stiftung Nowoczesna Polska " +#~ "(Modernes Polen), in Zusammenarbeit mit der Nationalbibliothek, der " +#~ "Schlesischen Bibliothek und der Elblinger Bibliothek unter dem Patronat " +#~ "des polnischen Bildungsministeriums und des Verbandes polnischer " +#~ "Schrifsteller (Stowarzyszenie Pisarzy Polskich). Im Ehrenkomitee von " +#~ "Wolne Lektury sind Prof. Maria Janion, Prof. Grażyna Borkowska, Prof. " +#~ "Przemysław Czapliñski, Prof. Mieczysław Dąbrowski, Prof. Ewa Kraskowska, " +#~ "Prof. Małgorzata Czermiñska, Prof. Jerzy Jarzêbski und Prof. Piotr " +#~ "Śliwiñski tätig.

                        \r\n" +#~ "\r\n" +#~ "

                        Die Mehrheit von Bibliothekwerken steht nicht unter dem Schutz des " +#~ "Urheberrechts und gehört zu dem Gemeinfreiheitsbereich, was bedeutet, " +#~ "dass man sie frei veröffentlichen und vermitteln darf. Sollte das Werk " +#~ "mit zusätzlichen Angaben versehen werden (Füßnoten und literarischen " +#~ "Motiven), die dem Urheberrechtsschutz unterliegen, sind diese " +#~ "zusätzlichen Angaben unter der Lizenz Urheberschaftanerkennung unter gleichen " +#~ "Bedigungen 3.0 verfügbar. Wir veröffentlichen auch Werke, die " +#~ "Verfasser oder Rechtsnachfolger unter der freien Lizenz Urheberschaftanerkennung " +#~ "unter gleichen Bedigungen 3.0.

                        herausgegeben haben. \r\n" +#~ "\r\n" +#~ "Kontakt: wolnelektury@nowoczesnapolska.org.pl" + +#~ msgid "Zespół" +#~ msgstr "Unser Team" + +#~ msgid "" +#~ "

                        Magdalena Biernat – koordynatorka projektu, dyrektor " +#~ "zarządzająca fundacji Nowoczesna Polska. Socjolożka, absolwentka " +#~ "Uniwersytetu Warszawskiego i L’Université libre de Bruxelles. " +#~ "Specjalistka od projektów internetowych. Koordynowała projekty Kandydaci " +#~ "2009 i Mam Prawo Wiedzieć w Stowarzyszeniu 61. Pracowała przy wielu " +#~ "badaniach społecznych realizowanych przez organizacje pozarządowe i firmy " +#~ "badawcze.

                        \r\n" +#~ "\r\n" +#~ "

                        Radosław Czajka – główny programista, studiował " +#~ "informatykę na MIMUW. Biegły w językach programowania, znaczników: " +#~ "Python, XHTML, Javascript, CSS, LaTeX, SQL. Posiada doświadczenie z " +#~ "frameworkami Django, Jquery, doświadczenie w przekształceniach dokumentów " +#~ "XML (XSLT), w produkcji ebooków w formatach PDF i EPUB oraz w tworzeniu " +#~ "aplikacji mobilnych na system Android i iOS.

                        \r\n" +#~ "\r\n" +#~ "

                        Marcin Koziej – programista. Absolwent Politechniki " +#~ "Warszawskiej i doktorant w Instytucie Filozofii Uniwersytetu " +#~ "Warszawskiego. Działacz Mokotowskiej Kooperatywy Spożywczej. Podróżnik, " +#~ "rowerzysta i biesiadnik. Homo ludens.

                        \r\n" +#~ "\r\n" +#~ "

                        Marta Niedziałkowska – redaktorka techniczna, " +#~ "absolwentka bibliotekoznawstwa i informacji naukowej UW. Studentka " +#~ "studiów magisterskich Public Policy and Administration na Collegium " +#~ "Civitas.

                        \r\n" +#~ "\r\n" +#~ msgstr "" +#~ "

                        Magdalena Biernat - Projektkoordinator, " +#~ "Verwaltungsleiterin der Stiftung Modernes Polen. Soziologin, Absolventin " +#~ "der Universität Warschau und der Université libre de Bruxelles. " +#~ "Spezialistin für Internetprojekte. Sie hat die Projekte Kandydaci 2009 " +#~ "(Kandidaten 2009) und Mam Prawo Wiedzieæ (Ich habe Recht zu wissen) in " +#~ "Verein 61 (Stowarzyszenie 61) koordiniert. Sie hat an vielen " +#~ "Gesellschaftsstudien gearbeitet, die von Nichtregierungsorganisationen " +#~ "und Forschungsanstalten durchgeführt wurden.

                        \r\n" +#~ "\r\n" +#~ "

                        Radosław Czajka - Hauptprogrammierer, studierte " +#~ "Informatik an der Fakultät für Mathematik, Informatik und Maschinen an " +#~ "der Universität Warschau. Gewandt in Programmierersprachen und " +#~ "Datenbanken: Python, XHTML, Javascript, CSS, LaTeX, SQL. Er besitz " +#~ "Erfahrung in Frameworks: Django, Jquery, den Transformationen XML-Dateien " +#~ "(XSLT), der Herstellung von E-books in PDF und EPUB und Generierung von " +#~ "Mobilanwendungen für das Android- und iOS-System.

                        \r\n" +#~ "\r\n" +#~ "

                        Marcin Koziej - Programmierer, Absolvent der " +#~ "Technischen Universität Warschau und Doktorand im Institut für " +#~ "Philosophie an Universität. Tätig im Konsumverein von Mokotów (Mokotowska " +#~ "Kooperatywa Spożywcza). Reisender und Radfahrer. Homo ludens.

                        \r\n" +#~ "\r\n" +#~ "

                        Marta Niedziałkowska - Textbearbeiterin, Absolventin " +#~ "der Wissenschaftsinformation und Bibliothekwissenschaft an der " +#~ "Universität Warschau. Masterstudium: Collegium Civitas, Fakultät: Public " +#~ "Policy and Administration.

                        \r\n" +#~ "\r\n" + +#~ msgid "" +#~ "

                        Dorota A. Kowalska – redaktorka literacka, " +#~ "językoznawca, polonistka i slawistka, doktor nauk humanistycznych, " +#~ "adiunkt w Pracowni Polszczyzny Kresowej IJP PAN, gdzie zajmuje się " +#~ "historią i współczesnością języka polskiego na Ukrainie. Hobbystycznie " +#~ "śpiewa archaiczne pieśni ukraińskie i rosyjskie, cyklistka.

                        \r\n" +#~ "\r\n" +#~ "

                        Aleksandra Sekuła – redaktorka literacka, historyczka " +#~ "literatury, doktor nauk humanistycznych, absolwentka Wydziału Polonistyki " +#~ "Uniwersytetu Warszawskiego i Szkoły Nauk Społecznych przy IFiS PAN. " +#~ "Zawodowo i naukowo zajmuje się polskim romantyzmem, historią idei i " +#~ "teorią kultury.

                        \r\n" +#~ "\r\n" +#~ "

                        Paweł Kozioł – redaktor literacki. Ur. 1979, doktor " +#~ "nauk humanistycznych specjalizujący się w literaturze dawnej, absolwent " +#~ "Wydziału Polonistyki Uniwersytetu Warszawskiego oraz Dulwich College w " +#~ "Londynie. Poeta, krytyk literacki, stypendysta Ministerstwa Kultury i " +#~ "Dziedzictwa Narodowego (2010).

                        \r\n" +#~ "\r\n" +#~ "

                        Paulina Choromańska – redaktorka techniczna, " +#~ "studentka II roku studiów magisterskich w Instytucie Informacji Naukowej " +#~ "i Studiów Bibliologicznych UW. Pracuje również w Pracowni Dokumentacji " +#~ "Teatru w Instytucie Teatralnym im. Z. Raszewskiego w Warszawie.

                        \r\n" +#~ "\r\n" +#~ "

                        Aneta Rawska - redaktorka techniczna, studentka II " +#~ "roku studiów magisterskich w Instytucie Informacji Naukowej i Studiów " +#~ "Bibliologicznych UW, miłośniczka wypieków i dobrej kuchni. Od 2009 roku " +#~ "prowadzi serwis koła PZW nr 21 w Wołominie.

                        \r\n" +#~ msgstr "" +#~ "

                        Dorota A. Kowalska - Bearbeiterin im " +#~ "Literaturbereich, Sprachwissenschaftlerin, Polonistin und Slavistin, " +#~ "Doktortitel in Geisteswissenschaften, Mitarbeiterin in Pracownia " +#~ "Polszczyzny Kresowej IJP PAN, wo sie sich mit der Geschichte und dem " +#~ "heutigen Stand der polnischen Sprache in der Ukraine beschäftigt. Sein " +#~ "Steckenpferd ist das Singen von alten russischen und ukrainischen " +#~ "Liedern. Radfahrerin.

                        \r\n" +#~ "\r\n" +#~ "

                        Aleksandra Sekuła - Bearbeiterin im Literaturbereich, " +#~ "Literaturgeschichtsforscherin, Doktortitel in Geisteswissenschaften, " +#~ "Absolventin der Polonistik an der Universität Warschau und der " +#~ "Gesellschaftswissenschaftsschule bei IFiS PAN. Beruflich und " +#~ "wissenschaftlich befasst sie sich mit der polnischen Romantik, " +#~ "Ideengeschichte und Kulturtheorie.

                        \r\n" +#~ " \r\n" +#~ "

                        Paweł Kozioł - Bearbeiter im Literaturbereich. 1979 " +#~ "geboren, Doktortitel in Geisteswissenschaften, Spezialisierung für die " +#~ "alte Literatur, Absolvent der Polonistik an der Universität Warschau und " +#~ "des Dulwich Colleges in London. Dichter, Literaturkritiker, Stipendiat " +#~ "des Ministeriums für Kultur und Nationale Erbe (2010).

                        \r\n" +#~ "\r\n" +#~ "

                        Paulina Choromańska - Textbearbeiterin, Studentin im " +#~ "4. Semester des Masterstudiums im Insitut für Wissenschaftsinformation " +#~ "und Bibliothekwissenschaft an der Universität Warschau. Sie arbeitet auch " +#~ "in der Forschungsstätte für Theaterdokumentation im Zbigniew-Raszewski-" +#~ "Theaterinsitut in Warschau.

                        \r\n" +#~ "\r\n" +#~ "

                        Aneta Rawska - Textbearbeiterin, Studentin im 4. " +#~ "Semester des Masterstudiums im Insitut für Wissenschaftsinformation und " +#~ "Bibliothekwissenschaft. Sie mag gute Küche und ist Backenliebhaberin. Ab " +#~ "2009 führt sie den Service des Polnischen Anglervereins Nr. 21 in Wołomin." +#~ "

                        \r\n" + +#~ msgid "Wesprzyj nas" +#~ msgstr "Unterstütze uns" + +#~ msgid "" +#~ "

                        Przekaż 1% podatku na Wolne Lektury

                        \r\n" +#~ "

                        Fundacja Nowoczesna Polska posiada status Organizacji Pożytku " +#~ "Publicznego dzięki czemu na rozwój projektu Wolne Lektury można przekazać " +#~ "1% swojego podatku. W tym celu należy wypełnić odpowiednią rubrykę w " +#~ "rocznym zeznaniu podatkowym (PIT-36, PIT-37 lub PIT-28). W zeznaniu " +#~ "należy podać nazwę:

                        \r\n" +#~ "Fundacja Nowoczesna Polska
                        \r\n" +#~ "oraz numer z Krajowego Rejestru Sądowego (KRS) 0000070056
                        " +#~ msgstr "" +#~ "

                        Übergeben Sie 1 % von Ihrer Steuer an Wolne Lektury\r\n" +#~ "

                        Die Stiftung Modernes Polen besitzt den Status einer Non-Profit-" +#~ "Organisation. Infolgedessen kann man 1 % seiner Steuer an die Entwicklung " +#~ "des Projektes Wolne Lektury überreichen. Um dies zu tun, sollte man eine " +#~ "bestimmte Rubrik in der Jahressteuererklärung (Einkommenstuer-36, " +#~ "Einkommensteuer-37 oder Einkommensteuer-28) erfüllen. In der Erklärung " +#~ "ist die:

                        \r\n" +#~ "Bezeichnung Stiftung Modernes Polen
                        \r\n" +#~ "sowie die Nummer aus dem Landesgerichtsregister (KRS) 0000070056
                        " +#~ "einzutragen." + +#~ msgid "" +#~ "

                        Przekaż darowiznę na Wolne Lektury

                        \r\n" +#~ "

                        Każda wpłacona kwota zostanie przeznaczona na rozwój zasobów naszej " +#~ "biblioteki. Wystarczy dokonać przelewu na konto:

                        \r\n" +#~ "\r\n" +#~ "Fundacja Nowoczesna Polska
                        \r\n" +#~ "ul. Marszałkowska 84/92 lok. 125
                        \r\n" +#~ "00-514 Warszawa
                        \r\n" +#~ "Nr konta: PKO BP 46 10201097 0000 7502 0001 6766
                        \r\n" +#~ "Tytuł przelewu: Darowizna na Wolne Lektury
                        " +#~ msgstr "" +#~ "

                        Übergeben Sie eine Spende an Wolne Lektury

                        \r\n" +#~ "

                        Jede eingezahlte Summe wird für die Erweiterung der Bücheranzahl in " +#~ "der Bibiothek übermittelt. Es reicht nur eine Überweisung aufs Konto:

                        " +#~ "\r\n" +#~ "\r\n" +#~ "Fundacja Nowoczesna Polska (Stiftung Modernes Polen)
                        \r\n" +#~ "Straße: Marsza³kowska 84/92, Wohnungsnummer 125
                        \r\n" +#~ "Postleitzahl und Stadt: 00-514 Warszawa
                        \r\n" +#~ "Kontonummer: PKO BP 46 10201097 0000 7502 0001 6766
                        \r\n" +#~ "Überweisungstitel: \"Spende an Wolne Lektury\" oder \"Darowizna na Wolne " +#~ "Lektury\"
                        " + +#~ msgid "Włącz się w prace" +#~ msgstr "Arbeite zusammen" + +#~ msgid "" +#~ "
                          \r\n" +#~ "
                        • Zostań naszym redaktorem, programistą lub tłumaczem
                        • \r\n" +#~ "
                        • Zdobądź nowe umiejętności i doświadczenie
                        • \r\n" +#~ "
                        • Weź udział w otwartym projekcie i twórz innowacyjną bibliotekę " +#~ "internetową
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Zapraszamy wszystkie osoby, które chcą współtworzyć nasz projekt. " +#~ "Współpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " +#~ "literaturą, redagowaniem tekstów i projektami informatycznymi. Oferujemy " +#~ "profesjonalne szkolenia i stałą pomoc merytoryczną. Wolontariusze mogą " +#~ "pracować zdalnie lub w siedzibie Fundacji.

                        \r\n" +#~ "

                        Organizujemy również praktyki studenckie – nawiązaliśmy współpracę z " +#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " +#~ "Karier UKSW oraz Wydziałem Fizyki UW.

                        \r\n" +#~ "\r\n" +#~ "

                        Jak się do nas zgłosić?

                        \r\n" +#~ "

                        Wszystkie zainteresowane osoby prosimy o przysłanie maila na adres marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.

                        \r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\r\n" +#~ msgstr "" +#~ "
                          \r\n" +#~ "
                        • Werde unser Bearbeiter, Programmierer oder Übersetzter
                        • \r\n" +#~ "
                        • Erwirb neue Fähigkeiten und Erfahrung
                        • \r\n" +#~ "
                        • Nimm an dem offenen Projekt teil und bilde eine innovative " +#~ "Internetbibliothek
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Wir laden alle Personen ein, die das Projekt mitgestalten möchten. Wir " +#~ "arbeiten mit Studenten, Lehrern und Allen, die sich für Literatur, " +#~ "Textbearbeitung und informatische Projekte interessieren. Wir bieten " +#~ "professionelle Schulungen und ständige Sachhilfe. Volontäre können fern " +#~ "oder im Stiftungssitz arbeiten.

                        \r\n" +#~ "

                        Wir organisieren auch das Studentenpraktikum - wir arbeiten mit dem " +#~ "Institut für Wissenschaftsinformation und Bibliothekwissenschaft an der " +#~ "Universität Warschau, demKarrierebüro der Kardinal-Stefan-Wyszyñski-" +#~ "Universität Warschau und der Fakultät für Physik zusammen.

                        \r\n" +#~ "\r\n" +#~ "

                        Wie kann man sich bei uns melden?

                        \r\n" +#~ "

                        Alle Interessierten bitten wir um eine Mail an folgende Adresse marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.

                        \r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\r\n" + +#~ msgid "" +#~ "

                        Kogo szukamy?

                        \r\n" +#~ "\r\n" +#~ "

                        Redaktorów technicznych (skład tekstu)

                        \r\n" +#~ "

                        Skład jest pierwszym etapem pracy nad tekstem. Za pomocą znaczników " +#~ "języka WL-XML nadajemy tekstowi pożądaną formę i umożliwiamy wyświetlenie " +#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na Platformie Redakcyjnej, " +#~ "która pozwala na zautomatyzowanie dużej części pracy.

                        \r\n" +#~ "\r\n" +#~ "

                        Kto może zostać redaktorem technicznym?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy – po krótkim szkoleniu.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Więcej informacji o redakcji technicznej znajdziecie na stronie redakcji Wolnych Lektur

                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Redaktorów literackich (merytorycznych)

                        \r\n" +#~ "

                        Redakcja literacka obejmuje korektę, uwspółcześnienia oraz dodawanie " +#~ "przypisów i motywów literackich. To unikalna możliwość zdobycia " +#~ "doświadczenia w cyfrowej edycji tekstów.

                        \r\n" +#~ "\r\n" +#~ "

                        Kto może zostać redaktorem literackim?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Osoby, które mają doświadczenie w redakcji tekstów literackich,
                        • " +#~ "\r\n" +#~ "
                        • Studenci i absolwenci studiów humanistycznych, którzy chcą takie " +#~ "doświadczenie zdobyć.
                        • \r\n" +#~ "
                        \r\n" +#~ "

                        Więcej informacji o redakcji merytorycznej znajdziecie na stronie redakcji Wolnych Lektur

                        \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Tłumaczy

                        \r\n" +#~ "

                        Strona WolneLektury.pl jest dostępna w siedmiu językach obcych – " +#~ "angielskim, francuskim, niemieckim, hiszpańskim, litewskim, rosyjskim " +#~ "oraz ukraińskim. Użytkownikami biblioteki jest ponad 200 tysięcy osób z " +#~ "zagranicy, a już niedługo nasze zbiory obejmą również dzieła w językach " +#~ "obcych. Dlatego potrzebujemy na bieżąco tłumaczyć nowe informacje " +#~ "pojawiające się na stronie.

                        \r\n" +#~ "

                        Kto może pomóc w tłumaczeniach?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy, kto dobrze zna co najmniej jeden z powyższych języków.
                        • " +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Programistów

                        \r\n" +#~ "

                        Poza samą stroną Wolnych Lektur tworzymy również:

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • narzędzia redakcyjne,
                        • \r\n" +#~ "
                        • konwertery do różnych formatów e-booków,
                        • \r\n" +#~ "
                        • aplikacje mobile ułatwiające dostęp do naszych zasobów.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " +#~ "jQuery, LaTeX, Java.\r\n" +#~ "Tworzone przez nas oprogramowanie udostępniamy na wolnej licencji.

                        \r\n" +#~ "

                        Kto może pomóc w pracach programistycznych?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy, kto umie i chciałby zdobyć punkty do karmy za udział w " +#~ "otwartym projekcie programistycznym. ;)
                        • \r\n" +#~ "
                        \r\n" +#~ msgstr "" +#~ "

                        Wen suchen wir?

                        \r\n" +#~ "\r\n" +#~ "

                        Textbearbeiter (Textbearbeitung)

                        \r\n" +#~ "

                        In der ersten Phase wird der Text gesetzt. Mithilfe der WL-XML-" +#~ "Sprache gestalten wir den Text und ermöglichen seine Veröffentlichung auf " +#~ "der Internetseite. Textbearbeitung wird auf der Redaktionsplatrormdurchgeführt, die einen großen " +#~ "Arbeitsteil automatisieren lässt.

                        \r\n" +#~ "\r\n" +#~ "

                        Wer kann Textbearbeiter werden

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Jeder - nach einer kurzen Schulung.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Mehr Infos über Textbearbeitungauf der Impressumseite von Wolne Lektury

                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Bearbeiter im Literaturbereich (Sachbearbeiter)

                        \r\n" +#~ "

                        Literarische Bearbeitung umfasst die Korrektur, Sprachmodernisierung " +#~ "und Ergänzung von Füßnoten und literarischen Motiven. Das ist eine " +#~ "einzigartige Möglichkeit, die Kenntnis der Digitalverarbeitung von Texten " +#~ "zu erwerben.

                        \r\n" +#~ "\r\n" +#~ "

                        Wer kann Bearbeiter im Literaturbereich werden

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Personen, die Erfahrung in der Bearbeitung von literarischen Texten " +#~ "besitzen,
                        • \r\n" +#~ "
                        • Studenten und Absolventen der Geisteswissenschaften, die solche " +#~ "Erfahrung gewinnen möchten.
                        • \r\n" +#~ "
                        \r\n" +#~ "

                        Mehr Infos über literarische Bearbeitungauf der Impressumseite von Wolne Lektury

                        \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Übersetzer

                        \r\n" +#~ "

                        Die Internetseite WolneLektury.pl ist in sieben Spracheversionen " +#~ "zugänglich - im Englischen, Französichen, Deutschen, Spanischen, " +#~ "Lituanischen, Russischen und Ukrainischen. Bibliotheksbenutzer sind über " +#~ "200.000 Ausländer. Bald wird die Bibliothek mit fremdsprachigen Versionen " +#~ "bereichert. Deswegen brauchen wir auf dem Laufenden, die neu auf der " +#~ "Seite erschienen Infos zu übersetzen.

                        \r\n" +#~ "

                        Wer kann bei Übersetzungen helfen?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Jeder, der mindestenst eine aus den oben genannten Sprachen " +#~ "beherrscht.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Programmierer

                        \r\n" +#~ "

                        Außer der Internetseite von Wolne Lektury allein errichten wir:

                        " +#~ "\r\n" +#~ "
                          \r\n" +#~ "
                        • Bearbeitungsmittel,
                        • \r\n" +#~ "
                        • Konvertierungsprogramme zu den verschiedenen E-books-Formaten,
                        • " +#~ "\r\n" +#~ "
                        • Mobilanwendungen, die Zugang zu Büchern erleichtern.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Wir machen Gebrauch von solchen Technologien wie: Python, Django, " +#~ "XHTML, JavaScript, jQuery, LaTeX, Java.\r\n" +#~ "Die von uns entwickelte Software machen wird aufunter der freien Lizenz verfügbar.

                        \r\n" +#~ "

                        Wer kann bei der Programmierung helfen?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Jeder, der dies kann und will Karmapunkte für die Teilnahme an dem " +#~ "offenen Programmierungsprojekt gewinnen . ;)
                        • \r\n" +#~ "
                        \r\n" + +#~ msgid "Prawa" +#~ msgstr "Rechts" + +#~ msgid "" +#~ "

                        Większość utworów w bibliotece nie jest chroniona prawem autorskim i " +#~ "znajduje się w domenie publicznej, co oznacza, że można je swobodnie " +#~ "publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi " +#~ "materiałami (przypisy, motywy literackie etc.), które podlegają prawu " +#~ "autorskiemu, to te dodatkowe materiały udostępnione są na licencji Uznanie " +#~ "autorstwa-Na tych samych warunkach 3.0. Publikujemy również kilka " +#~ "utworów, które autorzy lub spadkobiercy praw udostępnili na wolnej " +#~ "licencji Uznanie autorstwa-Na tych samych warunkach 3.0.

                        " +#~ msgstr "" +#~ "

                        Die Mehrheit von Bibliothekwerken steht nicht unter dem Schutz des " +#~ "Urheberrechts und gehört zu dem Gemeinfreiheitsbereich, was bedeutet, " +#~ "dass man sie frei veröffentlichen und vermitteln darf. Sollte das Werk " +#~ "mit zusätzlichen Angaben versehen werden (Füßnoten und literarischen " +#~ "Motiven), die dem Urheberrechtsschutz unterliegen, sind diese " +#~ "zusätzlichen Angaben unter der Lizenz Urheberschaftanerkennung unter gleichen " +#~ "Bedigungen 3.0 verfügbar. Wir veröffentlichen auch Werke, die " +#~ "Verfasser oder Rechtsnachfolger unter der freien Lizenz Urheberschaftanerkennung " +#~ "unter gleichen Bedigungen 3.0.

                        herausgegeben haben. " diff --git a/src/infopages/locale/es/LC_MESSAGES/django.mo b/src/infopages/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..d87aa7da3 Binary files /dev/null and b/src/infopages/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/infopages/locale/es/LC_MESSAGES/django.po b/src/infopages/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..09b64835c --- /dev/null +++ b/src/infopages/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,1126 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: KG \n" +"Language-Team: es \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 +msgid "main page priority" +msgstr "" + +#: models.py:12 +msgid "slug" +msgstr "" + +#: models.py:13 +msgid "title" +msgstr "" + +#: models.py:14 +msgid "left column" +msgstr "" + +#: models.py:15 +msgid "right column" +msgstr "" + +#: models.py:19 +msgid "info page" +msgstr "" + +#: models.py:20 +msgid "info pages" +msgstr "" + +#~ msgid "Wolontariat dla wiedzy" +#~ msgstr "Voluntariado para el conocimiento" + +#~ msgid "" +#~ "

                        Wolontariat

                        \r\n" +#~ "\t

                        \r\n" +#~ "\t\tBiogramy pisarzy oraz definicje epok i gatunków literackich w\r\n" +#~ "\t\tbibliotece internetowej Wolne Lektury napisali uczniowie\r\n" +#~ "\t\tczterech szkół podczas warsztatów „Wolontariat dla wiedzy”.\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t\tUczniowie pracowali wspólnie pod merytorycznym nadzorem\r\n" +#~ "\t\tnauczycieli i specjalistów – literaturoznawców na\r\n" +#~ "\t\t\r\n" +#~ "\r\n" +#~ "\t\t\tplatformie internetowej wiki\r\n" +#~ "\t\tprzygotowanej przez zespół\r\n" +#~ "\t\t2ia. Praca nad notami była " +#~ "jednocześnie nauką wykorzystywania\r\n" +#~ "\t\tkomputerów i internetu do wyszukiwania informacji, a także\r\n" +#~ "\t\tweryfikowania ich wiarygodności.\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t\tProjekt \"Wolontariat dla wiedzy\" został zrealizowany dzięki\r\n" +#~ "\t\twsparciu\r\n" +#~ "\t\t\r\n" +#~ "\t\t\tMinisterstwa Edukacji Narodowej. Nagrody dla uczniów ufundowali" +#~ "\r\n" +#~ "\t\t\r\n" +#~ "\r\n" +#~ "\t\t\tWydawnictwo Nasza Księgarnia\r\n" +#~ "\t\ti\r\n" +#~ "\t\tWydawnictwo Helion. Noty " +#~ "zweryfikowano w serwisie\r\n" +#~ "\t\t\r\n" +#~ "\t\t\tPlagiat.pl.\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t\tRaport z realizacji projektu " +#~ "„Wolontariat dla wiedzy\".\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t" +#~ "\r\n" +#~ "\t\r\n" +#~ "\t\r\n" +#~ " " +#~ "\r\n" +#~ " " +#~ "\r\n" +#~ "\t

                        \r\n" +#~ msgstr "" +#~ "

                        Voluntariado

                        \r\n" +#~ "\t

                        \r\n" +#~ "\t\tLas biografías de los escritores y las descripciones de las épocas y " +#~ "los géneros literarios en \r\n" +#~ "\t\tla biblioteca virtual de Wolne Lektury han elaborado los alumnos\r\n" +#~ "\t\tde cuatro escuelas durante los talleres “Voluntariado para el " +#~ "conocimiento”.\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t\tLos alumnos han trabajado juntos bajo la supervisión \r\n" +#~ "\t\tde profesores y teóricos de la literatura\r\n" +#~ "\t\t\r\n" +#~ "\r\n" +#~ "\t\t\tplataforma virtual wiki \r\n" +#~ "\t\tpreparada por el equipo\r\n" +#~ "\t\t2ia. Al mismo tiempo los alumnos " +#~ "estaban aprendiendo a utilizar\r\n" +#~ "\t\tlos ordenadores e internet para buscar informaciones y \r\n" +#~ "\t\tverificar su credibilidad.\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t\tEl proyecto \"Voluntariado para el conocimiento\" se ha realizado " +#~ "gracias al \r\n" +#~ "\t\apoyo de\r\n" +#~ "l\t\t\r\n" +#~ "\t\t\tMinisterio de Educación Nacional. Los premios para los alumnos " +#~ "han sido fundados por\r\n" +#~ "\t\t\r\n" +#~ "\r\n" +#~ "\t\t\tEditorial Nasza Księgarnia\r\n" +#~ "\t\ty\r\n" +#~ "\t\tEditorial Helion. Los textos han " +#~ "sido verificados en la página\r\n" +#~ "\t\t\r\n" +#~ "\t\t\tPlagiat.pl.\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t\t El informe de la realización del " +#~ "proyecto “Voluntariado para el conocimiento”.\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t" +#~ "\r\n" +#~ "\t\r\n" +#~ "\t\r\n" +#~ " " +#~ "\r\n" +#~ " " +#~ "\r\n" +#~ "\t

                        \r\n" + +#~ msgid "" +#~ "\t

                        Autorzy

                        \r\n" +#~ "\r\n" +#~ "\t
                          \r\n" +#~ "\t\t
                        1. \r\n" +#~ "\t\t\t

                          \r\n" +#~ "\t\t\t\tGimnazjum nr 40 z Oddziałami Integracyjnymi w Zespole\r\n" +#~ "\t\t\t\tSzkół nr 69 im. Armii Krajowej Grupy Bojowej „KRYBAR”,\r\n" +#~ "\t\t\t\tul. Drewniana 8, 00-345 Warszawa; klasa druga pod opieką\r\n" +#~ "\t\t\t\tAnny Budziarek-Friedrich:\r\n" +#~ "\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t
                            \r\n" +#~ "\t\t\t\t
                          • Burdon Filip;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Dębski Bartek;
                          • \r\n" +#~ "\t\t\t\t
                          • Jackowicz Kamil;
                          • \r\n" +#~ "\t\t\t\t
                          • Kurek Paweł;
                          • \r\n" +#~ "\t\t\t\t
                          • Makles Bartosz;
                          • \r\n" +#~ "\t\t\t\t
                          • Markiewicz Jeremiasz;
                          • \r\n" +#~ "\t\t\t\t
                          • Migdał Katarzyna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Mioduszewski Michał;
                          • \r\n" +#~ "\t\t\t\t
                          • Pfeiffer Ida;
                          • \r\n" +#~ "\t\t\t\t
                          • Płaskowicka Karolina;
                          • \r\n" +#~ "\t\t\t\t
                          • Sailer Ewa.
                          • \r\n" +#~ "\t\t\t
                          \r\n" +#~ "\t\t
                        2. \r\n" +#~ "\r\n" +#~ "\t\t
                        3. \r\n" +#~ "\t\t\t

                          \r\n" +#~ "\t\t\t\tXXXIII Liceum Ogólnokształcące im. Mikołaja Kopernika,\r\n" +#~ "\t\t\t\tul. Bema 76, 01-225 Warszawa; klasa pierwsza o profilu\r\n" +#~ "\t\t\t\tbiologiczno-chemicznym pod opieką Elżbiety Konkowskiej:\r\n" +#~ "\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t
                            \r\n" +#~ "\t\t\t\t
                          • Chwil Bartłomiej;
                          • \r\n" +#~ "\t\t\t\t
                          • Czarnecka Natalia;
                          • \r\n" +#~ "\t\t\t\t
                          • Gawrońska Iga;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Grabarczyk Marta;
                          • \r\n" +#~ "\t\t\t\t
                          • Jastrząb Katarzyna;
                          • \r\n" +#~ "\t\t\t\t
                          • Krawczak Olga;
                          • \r\n" +#~ "\t\t\t\t
                          • Krawczyk Marianna;
                          • \r\n" +#~ "\t\t\t\t
                          • Kur Natalia;
                          • \r\n" +#~ "\t\t\t\t
                          • Kwiatek Marta;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Laśkiewicz Joanna;
                          • \r\n" +#~ "\t\t\t\t
                          • Machczyńska Daria;
                          • \r\n" +#~ "\t\t\t\t
                          • Miecznikowska Izabela;
                          • \r\n" +#~ "\t\t\t\t
                          • Moczulska Karolina;
                          • \r\n" +#~ "\t\t\t\t
                          • Mościcka Aneta;
                          • \r\n" +#~ "\t\t\t\t
                          • Narloch Sabina;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Przybysz Paweł;
                          • \r\n" +#~ "\t\t\t\t
                          • Puchta Marek;
                          • \r\n" +#~ "\t\t\t\t
                          • Ryska Cezary;
                          • \r\n" +#~ "\t\t\t\t
                          • Sandomierski Bartłomiej;
                          • \r\n" +#~ "\t\t\t\t
                          • Sławiński Tomasz;
                          • \r\n" +#~ "\t\t\t\t
                          • Słowik Olga;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Starzycka Katarzyna;
                          • \r\n" +#~ "\t\t\t\t
                          • Strzelczak Karolina;
                          • \r\n" +#~ "\t\t\t\t
                          • Szafran Danuta;
                          • \r\n" +#~ "\t\t\t\t
                          • Szmigielska Magdalena;
                          • \r\n" +#~ "\t\t\t\t
                          • Szulkowska Alicja;
                          • \r\n" +#~ "\t\t\t\t
                          • Ślusarczyk Anna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Tytkowska Anna.
                          • \r\n" +#~ "\t\t\t
                          \r\n" +#~ "\t\t\t
                        4. \r\n" +#~ "\t\t\t\t

                          \r\n" +#~ "\t\t\t\t\tAutorskie Niepubliczne Liceum Ogólnokształcące nr\r\n" +#~ "\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; klasa pierwsza\r\n" +#~ "\t\t\t\t\to profilu ogólnym pod opieką Michała Friedricha:\r\n" +#~ "\t\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                            \r\n" +#~ "\t\t\t\t\t
                          • Baraniecka Marta;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Gołaszewska Ewa;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Kwiatkowski Michał;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Machnikowska Monika;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Pietrzak Bartosz;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Przespolewski Przemysław;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Rosińska Zuzanna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Sibiga Magdalena.
                          • \r\n" +#~ "\t\t\t\t
                          \r\n" +#~ "\t\t\t
                        5. \r\n" +#~ "\t\t\t
                        6. \r\n" +#~ "\t\t\t\t

                          \r\n" +#~ "\t\t\t\t\tLXIV Liceum Ogólnokształcące im. St. I. Witkiewicza,\r\n" +#~ "\t\t\t\t\tul. Elbląska 51, 01-737 Warszawa; klasa pierwsza o\r\n" +#~ "\t\t\t\t\tprofilu ogólnym pod opieką Daniela Zycha:\r\n" +#~ "\t\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                            \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Andrzejczak Kamil;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Czubaj Konrad;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Drągowska Katarzyna;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Gajewska Magdalena;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Głowacki Jan;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Grad Paweł;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Hnatowski Bartek;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Karwowski Marcin;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Kłos Aneta;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Kozieł Barbara;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Kozłowska Anna;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Krug Pamela;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Krzosek Jakub;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Lubaś Michał;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Masewicz Natalia;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Mastalerz Agnieszka;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Modelska Marta;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Nowak Aleksandra;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Pabian Agnieszka;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Paszkowska Aleksandra;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Pielat Zofia;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Poniecka Agnieszka;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Pytlak Urszula;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Rosa Karolina;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Smyczyńska Kamila;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Stolińska Barbara;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Szymańska Katarzyna;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Ścibior Ewa;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Witczak Magda;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Witkowska Justyna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Wyrzykowska Jowita;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Ziółkowska Adrianna.
                          • \r\n" +#~ "\t\t\t\t
                          \r\n" +#~ "\t\t\t
                        7. \r\n" +#~ "\t \r\n" +#~ "\t
                        \r\n" +#~ msgstr "" +#~ "\t

                        Autores

                        \r\n" +#~ "\r\n" +#~ "\t
                          \r\n" +#~ "\t\t
                        1. \r\n" +#~ "\t\t\t

                          \r\n" +#~ "\t\t\t\tGimnazjum nr 40 z Oddziałami Integracyjnymi w Zespole\r\n" +#~ "\t\t\t\tSzkół nr 69 im. Armii Krajowej Grupy Bojowej „KRYBAR”,\r\n" +#~ "\t\t\t\tul. Drewniana 8, 00-345 Varsovia; segundo curso bajo la " +#~ "supervisión de\r\n" +#~ "\t\t\t\tAnna Budziarek-Friedrich:\r\n" +#~ "\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                            \r\n" +#~ "\t\t\t\t
                          • Burdon Filip;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Dębski Bartek;
                          • \r\n" +#~ "\t\t\t\t
                          • Jackowicz Kamil;
                          • \r\n" +#~ "\t\t\t\t
                          • Kurek Paweł;
                          • \r\n" +#~ "\t\t\t\t
                          • Makles Bartosz;
                          • \r\n" +#~ "\t\t\t\t
                          • Markiewicz Jeremiasz;
                          • \r\n" +#~ "\t\t\t\t
                          • Migdał Katarzyna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Mioduszewski Michał;
                          • \r\n" +#~ "\t\t\t\t
                          • Pfeiffer Ida;
                          • \r\n" +#~ "\t\t\t\t
                          • Płaskowicka Karolina;
                          • \r\n" +#~ "\t\t\t\t
                          • Sailer Ewa.
                          • \r\n" +#~ "\t\t\t
                          \r\n" +#~ "\t\t
                        2. \r\n" +#~ "\r\n" +#~ "\t\t
                        3. \r\n" +#~ "\t\t\t

                          \r\n" +#~ "\t\t\t\tXXXIII Liceum Ogólnokształcące im. Mikołaja Kopernika,\r\n" +#~ "\t\t\t\tul.Bema 76, 01-225 Varsovia; primer curso de\r\n" +#~ "\t\t\t

                          perfil biológico-químico bajo la supervisión de Elżbieta " +#~ "Konkowska\r\n" +#~ "\t\t\t
                            \r\n" +#~ "\r\n" +#~ "\t\t\t
                              \r\n" +#~ "\t\t\t\t
                            • Chwil Bartłomiej;
                            • \r\n" +#~ "\t\t\t\t
                            • Czarnecka Natalia;
                            • \r\n" +#~ "\t\t\t\t
                            • Gawrońska Iga;
                            • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                            • Grabarczyk Marta;
                            • \r\n" +#~ "\t\t\t\t
                            • Jastrząb Katarzyna;
                            • \r\n" +#~ "\t\t\t\t
                            • Krawczak Olga;
                            • \r\n" +#~ "\t\t\t\t
                            • Krawczyk Marianna;
                            • \r\n" +#~ "\t\t\t\t
                            • Kur Natalia;
                            • \r\n" +#~ "\t\t\t\t
                            • Kwiatek Marta;
                            • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                            • Laśkiewicz Joanna;
                            • \r\n" +#~ "\t\t\t\t
                            • Machczyńska Daria;
                            • \r\n" +#~ "\t\t\t\t
                            • Miecznikowska Izabela;
                            • \r\n" +#~ "\t\t\t\t
                            • Moczulska Karolina;
                            • \r\n" +#~ "\t\t\t\t
                            • Mościcka Aneta;
                            • \r\n" +#~ "\t\t\t\t
                            • Narloch Sabina;
                            • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                            • Przybysz Paweł;
                            • \r\n" +#~ "\t\t\t\t
                            • Puchta Marek;
                            • \r\n" +#~ "\t\t\t\t
                            • Ryska Cezary;
                            • \r\n" +#~ "\t\t\t\t
                            • Sandomierski Bartłomiej;
                            • \r\n" +#~ "\t\t\t\t
                            • Sławiński Tomasz;
                            • \r\n" +#~ "\t\t\t\t
                            • Słowik Olga;
                            • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                            • Starzycka Katarzyna;
                            • \r\n" +#~ "\t\t\t\t
                            • Strzelczak Karolina;
                            • \r\n" +#~ "\t\t\t\t
                            • Szafran Danuta;
                            • \r\n" +#~ "\t\t\t\t
                            • Szmigielska Magdalena;
                            • \r\n" +#~ "\t\t\t\t
                            • Szulkowska Alicja;
                            • \r\n" +#~ "\t\t\t\t
                            • Ślusarczyk Anna;
                            • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                            • Tytkowska Anna.
                            • \r\n" +#~ "\t\t\t
                            \r\n" +#~ "\t\t\t
                          • \r\n" +#~ "\t\t\t\t

                            \r\n" +#~ "\t\t\t\t\tAutorskie Niepubliczne Liceum Ogólnokształcące nr\r\n" +#~ "\t\t\t\t\t42, ul.Iwicka 47 B, 00-735 Varsovia; primer curso\r\n" +#~ "\t\t\t\t\tbajo la supervisión de Michał Friedrich:\r\n" +#~ "\t\t\t\t

                            \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                              \r\n" +#~ "\t\t\t\t\t
                            • Baraniecka Marta;
                            • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                            • Gołaszewska Ewa;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Kwiatkowski Michał;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Machnikowska Monika;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Pietrzak Bartosz;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Przespolewski Przemysław;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Rosińska Zuzanna;
                            • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                            • Sibiga Magdalena.
                            • \r\n" +#~ "\t\t\t\t
                            \r\n" +#~ "\t\t\t
                          • \r\n" +#~ "\t\t\t
                          • \r\n" +#~ "\t\t\t\t

                            \r\n" +#~ "\t\t\t\t\tLXIV Liceum Ogólnokształcące im. St. I. Witkiewicza,\r\n" +#~ "\t\t\t\t\tul.Elbląska 51, 01-737 Varsovia; primer curso bajo la " +#~ "supervisión de Daniel Zych:\r\n" +#~ "\t\t\t\t

                            \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                              \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                            • Andrzejczak Kamil;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Czubaj Konrad;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Drągowska Katarzyna;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Gajewska Magdalena;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Głowacki Jan;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Grad Paweł;
                            • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                            • Hnatowski Bartek;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Karwowski Marcin;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Kłos Aneta;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Kozieł Barbara;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Kozłowska Anna;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Krug Pamela;
                            • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                            • Krzosek Jakub;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Lubaś Michał;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Masewicz Natalia;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Mastalerz Agnieszka;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Modelska Marta;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Nowak Aleksandra;
                            • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                            • Pabian Agnieszka;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Paszkowska Aleksandra;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Pielat Zofia;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Poniecka Agnieszka;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Pytlak Urszula;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Rosa Karolina;
                            • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                            • Smyczyńska Kamila;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Stolińska Barbara;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Szymańska Katarzyna;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Ścibior Ewa;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Witczak Magda;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Witkowska Justyna;
                            • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                            • Wyrzykowska Jowita;
                            • \r\n" +#~ "\t\t\t\t\t
                            • Ziółkowska Adrianna.
                            • \r\n" +#~ "\t\t\t\t
                            \r\n" +#~ "\t\t\t
                          • \r\n" +#~ "\t \r\n" +#~ "\t
                        \r\n" + +#~ msgid "Możesz nam pomóc" +#~ msgstr "Puedes ayudarnos" + +#~ msgid "" +#~ "

                        Wolontariat w Wolnych Lekturach

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Zostań naszym redaktorem, programistą lub tłumaczem – wolontariuszem." +#~ "
                        • \r\n" +#~ "
                        • Zdobądź nowe umiejętności i doświadczenie.
                        • \r\n" +#~ "
                        • Weź udział w otwartym projekcie i twórz innowacyjną bibliotekę " +#~ "internetową.
                        • \r\n" +#~ "
                        \r\n" +#~ "

                        Dzięki pracy naszych wolontariuszy opublikowaliśmy już ponad 1500 " +#~ "lektur, z których skorzystały ponad 3 miliony czytelników z " +#~ "całego świata.

                        \r\n" +#~ "

                        Zapraszamy wszystkie osoby, które chcą współtworzyć nasz projekt. " +#~ "Współpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " +#~ "literaturą, redagowaniem tekstów i projektami informatycznymi. Oferujemy " +#~ "profesjonalne szkolenia i stałą pomoc merytoryczną. Wolontariusze mogą " +#~ "pracować zdalnie lub w siedzibie Fundacji.

                        \r\n" +#~ "

                        Organizujemy również praktyki studenckie – nawiązaliśmy współpracę z " +#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " +#~ "Karier UKSW oraz Wydziałem Fizyki UW.

                        \r\n" +#~ "\r\n" +#~ "

                        Jak się do nas zgłosić?

                        \r\n" +#~ "

                        Wszystkie zainteresowane osoby prosimy o przysłanie maila na adres marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.

                        \r\n" +#~ msgstr "" +#~ "

                        Voluntariado en Wolne Lektury

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Hazte nuestro voluntario como redactor, programador o traductor
                        • " +#~ "\r\n" +#~ "
                        • Adquiere nuevas habilidades y gana experiencia.
                        • \r\n" +#~ "
                        • Participa en un proyecto abierto y crea una innovadora biblioteca " +#~ "virtual.
                        • \r\n" +#~ "
                        \r\n" +#~ "

                        Gracias al trabajo de nuestros voluntarios hemos logrado publicar más " +#~ "de 1500 libros que ha usado ya más de 3 millones de " +#~ "lectores del mundo.

                        \r\n" +#~ "

                        Todos los que quieran participar en nuestro proyecto estarán " +#~ "bienvenidos. Colaboramos con estudiantes, docentes y todos los que " +#~ "est'an interesados y aficionados en literatura, redacción de textos o en " +#~ "proyectos informáticos. Les ofrecemos adiestramiento y ayuda en cuanto al " +#~ "contenido. Los voluntarios pueden trabajar a distancia o en la oficina " +#~ "principal de la Fundación.

                        \r\n" +#~ "

                        Organizamos también prácticas para estudiantes: colaboramos con el " +#~ "Instituto de Información Científica y Bibliología de la Universidad de " +#~ "Varsovia, el Servicio de Orientación Profesional de la Universidad de " +#~ "Cardenal Stefan Wyszynski y la Facultad de Física de la Universidad de " +#~ "Varsovia.

                        \r\n" +#~ "\r\n" +#~ "

                        ¿Cómo contactar con nosotros?

                        \r\n" +#~ "

                        A todos los interesados les invitamos a mandarnos un e-mail a marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.

                        \r\n" + +#~ msgid "" +#~ "

                        Kogo szukamy?

                        \r\n" +#~ "\r\n" +#~ "

                        Redaktorów technicznych (skład tekstu)

                        \r\n" +#~ "

                        Skład jest pierwszym etapem pracy nad tekstem. Za pomocą znaczników " +#~ "języka WL-XML nadajemy tekstowi pożądaną formę i umożliwiamy wyświetlenie " +#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na Platformie Redakcyjnej, " +#~ "która pozwala na zautomatyzowanie dużej części pracy.

                        \r\n" +#~ "\r\n" +#~ "

                        Kto może zostać redaktorem technicznym?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy – po krótkim szkoleniu.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Więcej informacji o redakcji technicznej znajdziecie na stronie redakcji " +#~ "Wolnych Lektur

                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Redaktorów literackich (merytorycznych)

                        \r\n" +#~ "

                        Redakcja literacka obejmuje korektę, uwspółcześnienia oraz dodawanie " +#~ "przypisów i motywów literackich. To unikalna możliwość zdobycia " +#~ "doświadczenia w cyfrowej edycji tekstów.

                        \r\n" +#~ "\r\n" +#~ "

                        Kto może zostać redaktorem literackim?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Osoby, które mają doświadczenie w redakcji tekstów literackich,
                        • " +#~ "\r\n" +#~ "
                        • Studenci i absolwenci studiów humanistycznych, którzy chcą takie " +#~ "doświadczenie zdobyć.
                        • \r\n" +#~ "
                        \r\n" +#~ "

                        Więcej informacji o redakcji merytorycznej znajdziecie na stronie redakcji " +#~ "Wolnych Lektur

                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Tłumaczy

                        \r\n" +#~ "

                        Strona WolneLektury.pl jest dostępna w siedmiu językach obcych – " +#~ "angielskim, francuskim, niemieckim, hiszpańskim, litewskim, rosyjskim " +#~ "oraz ukraińskim. Użytkownikami biblioteki jest ponad 200 tysięcy osób z " +#~ "zagranicy, a już niedługo nasze zbiory obejmą również dzieła w językach " +#~ "obcych. Dlatego potrzebujemy na bieżąco tłumaczyć nowe informacje " +#~ "pojawiające się na stronie.

                        \r\n" +#~ "

                        Kto może pomóc w tłumaczeniach?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy, kto dobrze zna co najmniej jeden z powyższych języków.
                        • " +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Programistów

                        \r\n" +#~ "

                        Poza samą stroną Wolnych Lektur tworzymy również:

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • narzędzia redakcyjne,
                        • \r\n" +#~ "
                        • konwertery do różnych formatów e-booków,
                        • \r\n" +#~ "
                        • aplikacje mobile ułatwiające dostęp do naszych zasobów.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " +#~ "jQuery, LaTeX, Java.\r\n" +#~ "Tworzone przez nas oprogramowanie udostępniamy na wolnej licencji.

                        \r\n" +#~ "

                        Kto może pomóc w pracach programistycznych?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy, kto umie i chciałby zdobyć punkty do karmy za udział w " +#~ "otwartym projekcie programistycznym. ;)
                        • \r\n" +#~ "
                        \r\n" +#~ msgstr "" +#~ "

                        ¿A quién buscamos?

                        \r\n" +#~ "\r\n" +#~ "

                        Redactores técnicos (composición tipográfica)

                        \r\n" +#~ "

                        La composición tipográfica es la primera etapa del trabajo con el " +#~ "texto. Por medio de los marcados del idioma WL-XML le damos la forma " +#~ "deseada al texto y facilitamos su visualización en la página web. La " +#~ "redacción técnica se realiza en la Plataforma Editorial, que permite automatizar gran parte del " +#~ "trabajo.

                        \r\n" +#~ "\r\n" +#~ "

                        ¿Quién puede ser redactor técnico?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Cualquiera, después de una breve formación.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Más información sobre la redacción técnica en la página web de Wolne Lektury

                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Redactores literarios

                        \r\n" +#~ "

                        La redacción literaria incluye la corrección de pruebas, adaptación e " +#~ "inclusión de las notas a pie de página , así como el tratamiento de los " +#~ "temas literarios. Es una oportunidad única de ganar experiencia en la " +#~ "edición digital de textos.

                        \r\n" +#~ "\r\n" +#~ "

                        ¿Quién puede ser redactor literario?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Las personas que tengan experiencia en la redacción de textos " +#~ "literarios,
                        • \r\n" +#~ "
                        • Los estudiantes y licenciados en humanidades que deseen obtener esta " +#~ "experiencia.
                        • \r\n" +#~ "
                        \r\n" +#~ "

                        Más información sobre la redacción literaria en la página web de Wolne Lektury

                        \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Traductores

                        \r\n" +#~ "

                        La página web de Wolne Lektury.pl está traducida a 7 idiomas: inglés, " +#~ "francés, alemán, español, lituano, ruso y ucraniano. Hay más de 200 mil " +#~ "de usuarios del extranjero, además, dentro de poco nuestra colección " +#~ "incluirá también obras en otros idiomas. De ahí que necesitemos traducir " +#~ "sistemáticamente nuevos contenidos que aparezcan en la página.

                        \r\n" +#~ "

                        ¿Quién puede ayudarnos con las traducciones?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Cualquiera que domine bien por lo menos uno de los idiomas " +#~ "mencionados anteriormente.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Programadores

                        \r\n" +#~ "

                        Aparte de la página web creamos también:

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • herramientas editoriales,
                        • \r\n" +#~ "
                        • convertidores para varios formatos de libros electrónicos,
                        • \r\n" +#~ "
                        • aplicaciones móviles que facilitan el acceso a nuestra colección
                        • " +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Usamos las siguientes tecnologías: Python, Django, XHTML, JavaScript, " +#~ "jQuery, LaTex, Java. \r\n" +#~ "El software creado por nosotros lo ponemos a su disposición en libre.

                        \r\n" +#~ "

                        ¿Quién puede ayudar en las tareas relacionadas con la programación?" +#~ "

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Cualquiera que sepa y quiera ganar puntos para su karma por la " +#~ "participación en un proyecto de programación abierto. ;)
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" + +#~ msgid "O projekcie" +#~ msgstr "Sobre el proyecto" + +#~ msgid "" +#~ "{% load reporting_stats %}\r\n" +#~ "\r\n" +#~ "

                        Wolne Lektury to biblioteka internetowa czynna 24 godziny na " +#~ "dobę, 365 dni w roku i całkowicie darmowa. W jej zbiorach " +#~ "znajduje się {% count_books %} utworów, w tym wiele " +#~ "lektur szkolnych zalecanych do użytku przez Ministerstwo Edukacji " +#~ "Narodowej, które trafiły już do domeny publicznej. Wszystkie dzieła są " +#~ "odpowiednio opracowane - opatrzone przypisami, motywami i udostępnione w " +#~ "kilku formatach - HTML , TXT , " +#~ "PDF, EPUB, MOBI. W " +#~ "bibliotece znajduje się również kilkaset audiobooków, czytanych przez " +#~ "takich aktorów jak: Danuta Stenka, Jan Peszek czy Andrzej Chyra. Można " +#~ "ich słuchać w formatach MP3 i Ogg Vorbis. Audiobooki są również dostępne w formacie DAISY dostosowanym do potrzeb osób słabowidzących, niewidomych oraz osób " +#~ "mających trudności z czytaniem.

                        \r\n" +#~ "\r\n" +#~ "

                        Biblioteka Wolne Lektury dostępna jest za pośrednictwem aplikacji " +#~ "mobilnych – na system Android oraz na system iOS.

                        \r\n" +#~ "\r\n" +#~ "

                        Wszystkie utwory zamieszczone w bibliotece Wolne Lektury można " +#~ "zgodnie z prawem bezpłatnie przeglądać, słuchać, ściągać na swój " +#~ "komputer, a także udostępniać innym i cytować.

                        \r\n" +#~ msgstr "" +#~ "{% load reporting_stats %}\r\n" +#~ "\r\n" +#~ "

                        Wolne Lektury es una biblioteca virtual de 24 horas, 365 días " +#~ "al año y completamente gratuita. La colección consta de " +#~ "{% count_books %} obras, incluso muchas de lectura obligatoria " +#~ "recomendadas por el Ministerio de Educación Nacional y que ya forman " +#~ "parte del dominio público. Todos los textos están adecuadamente " +#~ "preparados – con notas a pie de página, temas literarios, y están " +#~ "disponibles en varios formatos - HTML , TXT , PDF, EPUB, MOBI.\r\n" +#~ " La biblioteca contiene también centenares de audiolibros, leídos por " +#~ "autores como Danuta Stenka, Jan Peszek o Andrzej Chyra. Se los puede " +#~ "escuchar en los formatos MP3 y Ogg Vorbis. Los audiolibros se pueden conseguir también en el formato " +#~ "DAISY , adaptado a las necesidades de las personas con " +#~ "baja visión, invidentes, incluso las que tienen dificultades para leer.\r\n" +#~ "\r\n" +#~ "

                        La Biblioteca Wolne Lektury está disponible por medio de aplicaciones " +#~ "móviles para los sistemas Android e iOS.

                        \r\n" +#~ "\r\n" +#~ "

                        Todos los textos publicados en la Biblioteca Wolne Lektury " +#~ "están preparados para hojear, escuchar, descargar, para ponerlos a la " +#~ "disposición de otros y citar, todo esto de acuerdo con la ley. \r\n" + +#~ msgid "" +#~ "

                        Wolne Lektury to projekt fundacji Nowoczesna Polska realizowany pro " +#~ "publico bono, we współpracy z Biblioteką Narodową, Biblioteką Ślaską oraz " +#~ "Biblioteką Elbląską pod patronatem Ministerstwa Edukacji Narodowej, " +#~ "Ministerstwa Kultury i Dziedzictwa Narodowego oraz Stowarzyszenia Pisarzy " +#~ "Polskich. W Komitecie Honorowym Wolnych Lektur zasiadają: prof. Maria " +#~ "Janion, prof. Grażyna Borkowska, prof. Przemysław Czapliński, prof. " +#~ "Mieczysław Dąbrowski, prof. Ewa Kraskowska, prof. Małgorzata Czermińska, " +#~ "prof. Jerzy Jarzębski i prof. Piotr Śliwiński.

                        \r\n" +#~ "\r\n" +#~ "

                        Większość utworów w bibliotece nie jest chroniona prawem autorskim i " +#~ "znajduje się w domenie publicznej, co oznacza że można je swobodnie " +#~ "publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi " +#~ "materiałami (przypisy, motywy literackie etc.), które podlegają prawu " +#~ "autorskiemu, to te dodatkowe materiały udostępnione są na licencji Uznanie " +#~ "autorstwa-Na tych samych warunkach 3.0. Publikujemy również kilka " +#~ "utworów, które autorzy lub spadkobiercy praw udostępnili na wolnej " +#~ "licencji Uznanie autorstwa-Na tych samych warunkach 3.0.

                        \r\n" +#~ "\r\n" +#~ "Kontakt: wolnelektury@nowoczesnapolska.org.pl\r\n" +#~ msgstr "" +#~ "

                        Wolne Lektury es un proyecto creado por la Fundación Polonia Moderna, " +#~ "realizado pro publico bono en colaboración con la Biblioteca Nacional, la " +#~ "Biblioteca de Silesia y la Biblioteca de Elblag bajo los auspicios del " +#~ "Ministerio de Cultura y Patrimonio Nacional y la Adociación de Escritores " +#~ "Polacos. El Comité de Honor de Wolne Lektury reúne a los profesores: " +#~ "Maria Janion, Grażyna Borkowska, Przemysław Czapliński, Mieczysław " +#~ "Dąbrowski, Ewa Kraskowska, Małgorzata Czermińska, Jerzy Jarzębski y Piotr " +#~ "Śliwiński.

                        \r\n" +#~ "\r\n" +#~ "

                        La mayoría de los textos de la Biblioteca están libres de derechos de " +#~ "autor y son de dominio público, por lo tanto se pueden publicar y " +#~ "difundir libremente. Si un texto tiene materiales adicionales (notas a " +#~ "pie de página, temas literarios, etc.), que no están libres de derechos " +#~ "de autor, dichos materiales están publicados bajo la licencia Reconocimiento-" +#~ "Compartir bajo la misma licencia 3.0.También publicamos algunos " +#~ "textos legados al dominio público por los autores o herederos bajo la " +#~ "licencia Reconocimiento-Compartir bajo la misma licencia 3.0.

                        \r\n" +#~ "\r\n" +#~ "Contacto: wolnelektury@nowoczesnapolska.org.pl \r\n" + +#~ msgid "Zespół" +#~ msgstr "El equipo" + +#~ msgid "" +#~ "

                        Magdalena Biernat – koordynatorka projektu, dyrektor " +#~ "zarządzająca fundacji Nowoczesna Polska. Socjolożka, absolwentka " +#~ "Uniwersytetu Warszawskiego i L’Université libre de Bruxelles. " +#~ "Specjalistka od projektów internetowych. Koordynowała projekty Kandydaci " +#~ "2009 i Mam Prawo Wiedzieć w Stowarzyszeniu 61. Pracowała przy wielu " +#~ "badaniach społecznych realizowanych przez organizacje pozarządowe i firmy " +#~ "badawcze.

                        \r\n" +#~ "\r\n" +#~ "

                        Radosław Czajka – główny programista, studiował " +#~ "informatykę na MIMUW. Biegły w językach programowania, znaczników: " +#~ "Python, XHTML, Javascript, CSS, LaTeX, SQL. Posiada doświadczenie z " +#~ "frameworkami Django, Jquery, doświadczenie w przekształceniach dokumentów " +#~ "XML (XSLT), w produkcji ebooków w formatach PDF i EPUB oraz w tworzeniu " +#~ "aplikacji mobilnych na system Android i iOS.

                        \r\n" +#~ "\r\n" +#~ "

                        Marcin Koziej – programista. Absolwent Politechniki " +#~ "Warszawskiej i doktorant w Instytucie Filozofii Uniwersytetu " +#~ "Warszawskiego. Działacz Mokotowskiej Kooperatywy Spożywczej. Podróżnik, " +#~ "rowerzysta i biesiadnik. Homo ludens.

                        \r\n" +#~ "\r\n" +#~ "

                        Marta Niedziałkowska – redaktorka techniczna, " +#~ "absolwentka bibliotekoznawstwa i informacji naukowej UW. Studentka " +#~ "studiów magisterskich Public Policy and Administration na Collegium " +#~ "Civitas.

                        \r\n" +#~ "\r\n" +#~ msgstr "" +#~ "

                        Magdalena Biernat – la coordinadora del proyecto, " +#~ "directora ejecutiva de la Fundación Polonia Moderna. Socióloga, " +#~ "licenciada por la Universidad de Varsovia y de L’Université libre de " +#~ "Bruxelles. Especializada en proyectos de Internet. Coordinó los proyectos " +#~ "‘Candidatos 2009’ y ‘Tengo el Derecho de Saber’ en la Asociación 61. Ha " +#~ "trabajado en varias investigaciones sociales realizadas por " +#~ "organizaciones no gubernamentales y empresas investigadoras.

                        \r\n" +#~ "\r\n" +#~ "

                        Radosław Czajka – programador principal. Estudió " +#~ "informática en MIM UW (La Facultad de Matemáticas, Informática y Mecánica " +#~ "de la Universidad de Varsovia). Conoce los lenguajes de programación y " +#~ "los marcados: Python, XHTML, Javascript, CSS, LaTex, SQL. Tiene " +#~ "experiencia en los frameworks Django, Jquery; en la transformación de los " +#~ "archivos XML (XSLT), en la producción de libros electrónicos en los " +#~ "formatos PDF y EPUB, asimismo en la creación de aplicaciones móviles para " +#~ "los sistema Android e iOS.

                        \r\n" +#~ "\r\n" +#~ "

                        Marcin Koziej – programador. El incansable amateur " +#~ "de filosofía, informático, viajero, ciclista y juerguista. Homo ludens.\r\n" +#~ "\r\n" +#~ "

                        Marta Niedziałkowska – redactora técnica, licenciada " +#~ "en Ciencias de la Información y Bibliotecología de la Universidad de " +#~ "Varsovia. Estudiante de segundo curso de licenciatura de Public Policy " +#~ "and Administration en el Collegium Civitas.

                        \r\n" + +#~ msgid "" +#~ "

                        Dorota A. Kowalska – redaktorka literacka, " +#~ "językoznawca, polonistka i slawistka, doktor nauk humanistycznych, " +#~ "adiunkt w Pracowni Polszczyzny Kresowej IJP PAN, gdzie zajmuje się " +#~ "historią i współczesnością języka polskiego na Ukrainie. Hobbystycznie " +#~ "śpiewa archaiczne pieśni ukraińskie i rosyjskie, cyklistka.

                        \r\n" +#~ "\r\n" +#~ "

                        Aleksandra Sekuła – redaktorka literacka, historyczka " +#~ "literatury, doktor nauk humanistycznych, absolwentka Wydziału Polonistyki " +#~ "Uniwersytetu Warszawskiego i Szkoły Nauk Społecznych przy IFiS PAN. " +#~ "Zawodowo i naukowo zajmuje się polskim romantyzmem, historią idei i " +#~ "teorią kultury.

                        \r\n" +#~ "\r\n" +#~ "

                        Paweł Kozioł – redaktor literacki. Ur. 1979, doktor " +#~ "nauk humanistycznych specjalizujący się w literaturze dawnej, absolwent " +#~ "Wydziału Polonistyki Uniwersytetu Warszawskiego oraz Dulwich College w " +#~ "Londynie. Poeta, krytyk literacki, stypendysta Ministerstwa Kultury i " +#~ "Dziedzictwa Narodowego (2010).

                        \r\n" +#~ "\r\n" +#~ "

                        Paulina Choromańska – redaktorka techniczna, " +#~ "studentka II roku studiów magisterskich w Instytucie Informacji Naukowej " +#~ "i Studiów Bibliologicznych UW. Pracuje również w Pracowni Dokumentacji " +#~ "Teatru w Instytucie Teatralnym im. Z. Raszewskiego w Warszawie.

                        \r\n" +#~ "\r\n" +#~ "

                        Aneta Rawska - redaktorka techniczna, studentka II " +#~ "roku studiów magisterskich w Instytucie Informacji Naukowej i Studiów " +#~ "Bibliologicznych UW, miłośniczka wypieków i dobrej kuchni. Od 2009 roku " +#~ "prowadzi serwis koła PZW nr 21 w Wołominie.

                        \r\n" +#~ msgstr "" +#~ "

                        Dorota A. Kowalska – redactora literaria, lingüista, " +#~ "licenciada en filología polaca y eslava, doctorada en humanidades, " +#~ "profesora adjunta en el Laboratorio de Idioma Polaco de la Zona " +#~ "Fronteriza, donde se ocupa de la historia y presente del idioma polaco en " +#~ "Ucrania. Su pasatiempo favorito es cantar canciones arcaicas ucranianas y " +#~ "rusas. Ciclista.

                        \r\n" +#~ "\r\n" +#~ "

                        Aleksandra Sekuła – redactora literaria, historiadora " +#~ "de literatura, doctorada en humanidades, licenciada por la Facultad de " +#~ "Filología Polaca por la Escuela de Ciencias Sociales del IFIS PAN (el " +#~ "Instituto de Filosofía y Sociología de la Academia Polaca de Ciencias). " +#~ "Se ocupa del romanticismo polaco, historia de la idea y teoría de cultura." +#~ "

                        \r\n" +#~ "\r\n" +#~ "

                        Paweł Kozioł – redactor literario. Nació en 1979, " +#~ "doctorado en humanidades, especializado en literatura antigua. Licenciado " +#~ "por la Facultad de Filología Polaca de la Universidad de Varsovia y por " +#~ "Dulwich College en Londres. Poeta y crítico literario, becario de el " +#~ "Ministerio de Cultura y Patrimonio Nacional (2010).

                        \r\n" +#~ "\r\n" +#~ "

                        Paulina Choromańska – redactora técnica, estudiante " +#~ "de segundo curso de licenciatura en el Instituto de Información " +#~ "Científica y Bibliotecología de la Universidad de Varsovia. Aparte, " +#~ "trabaja en el Centro de Documentación de Teatro en el Instituto de " +#~ "Teatro de Zbigniew Raszewski en Varsovia.

                        \r\n" +#~ "\r\n" +#~ "

                        Aneta Rawska - redactora técnica, estudiante de " +#~ "segundo curso de licenciatura en el Instituto de Ciencias de la " +#~ "Información y Bibliotecología de la Universidad de Varsovia, amante de la " +#~ "pastelería y la buena cocina. Desde 2009 está a cargo de la página web de " +#~ "PZW (Asociación Polaca de Pesca) número 21 en Wolomin.

                        \r\n" + +#~ msgid "Wesprzyj nas" +#~ msgstr "Apóyanos" + +#~ msgid "" +#~ "

                        Przekaż 1% podatku na Wolne Lektury

                        \r\n" +#~ "

                        Fundacja Nowoczesna Polska posiada status Organizacji Pożytku " +#~ "Publicznego dzięki czemu na rozwój projektu Wolne Lektury można przekazać " +#~ "1% swojego podatku. W tym celu należy wypełnić odpowiednią rubrykę w " +#~ "rocznym zeznaniu podatkowym (PIT-36, PIT-37 lub PIT-28). W zeznaniu " +#~ "należy podać nazwę:

                        \r\n" +#~ "Fundacja Nowoczesna Polska
                        \r\n" +#~ "oraz numer z Krajowego Rejestru Sądowego (KRS) 0000070056
                        " +#~ msgstr "" +#~ "

                        Dona 1% de tu impuesto a Wolne Lektury

                        \r\n" +#~ "

                        La Fundación Polonia Modera tiene carácter de organización no " +#~ "gubernamental, por lo tanto se puede donar 1% de impuesto para el " +#~ "desarrollo del proyecto Wolne Lektury. Para este propósito hay que " +#~ "rellenar la casilla adecuada en la declaración de la renta anual (PIT-36, " +#~ "PIT-37 o PIT-28). Se debería poner el nombre:

                        \r\n" +#~ "Fundacja Nowoczesna Polska
                        \r\n" +#~ "y el numero de el Registro Judicial Nacional (KRS) 0000070056
                        " + +#~ msgid "" +#~ "

                        Przekaż darowiznę na Wolne Lektury

                        \r\n" +#~ "

                        Każda wpłacona kwota zostanie przeznaczona na rozwój zasobów naszej " +#~ "biblioteki. Wystarczy dokonać przelewu na konto:

                        \r\n" +#~ "\r\n" +#~ "Fundacja Nowoczesna Polska
                        \r\n" +#~ "ul. Marszałkowska 84/92 lok. 125
                        \r\n" +#~ "00-514 Warszawa
                        \r\n" +#~ "Nr konta: PKO BP 46 10201097 0000 7502 0001 6766
                        \r\n" +#~ "Tytuł przelewu: Darowizna na Wolne Lektury
                        \r\n" +#~ msgstr "" +#~ "

                        Haz un donativo a Wolne Lektury

                        \r\n" +#~ "

                        Cada aporte será destinado al incremento d los fondos de nuestra " +#~ "biblioteca. Basta con hacer una transferencia a nuestra cuenta:

                        \r\n" +#~ "\r\n" +#~ "Fundacja Nowoczesna Polska
                        \r\n" +#~ "Ul. Marszałkowska84/92 lok. 125
                        \r\n" +#~ "00-514 Warszawa
                        \r\n" +#~ "El numero de la cuenta: PKO BP 46 10201097 0000 7502 0001 6766
                        \r\n" +#~ "El titulo de la transferencia: Darowizna na Wolne Lektury
                        \r\n" + +#~ msgid "Włącz się w prace" +#~ msgstr "Colabora" + +#~ msgid "" +#~ "
                          \r\n" +#~ "
                        • Zostań naszym redaktorem, programistą lub tłumaczem
                        • \r\n" +#~ "
                        • Zdobądź nowe umiejętności i doświadczenie
                        • \r\n" +#~ "
                        • Weź udział w otwartym projekcie i twórz innowacyjną bibliotekę " +#~ "internetową
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Zapraszamy wszystkie osoby, które chcą współtworzyć nasz projekt. " +#~ "Współpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " +#~ "literaturą, redagowaniem tekstów i projektami informatycznymi. Oferujemy " +#~ "profesjonalne szkolenia i stałą pomoc merytoryczną. Wolontariusze mogą " +#~ "pracować zdalnie lub w siedzibie Fundacji.

                        \r\n" +#~ "

                        Organizujemy również praktyki studenckie – nawiązaliśmy współpracę z " +#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " +#~ "Karier UKSW oraz Wydziałem Fizyki UW.

                        \r\n" +#~ "\r\n" +#~ "

                        Jak się do nas zgłosić?

                        \r\n" +#~ "

                        Wszystkie zainteresowane osoby prosimy o przysłanie maila na adres marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.

                        \r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\r\n" +#~ msgstr "" +#~ "
                          \r\n" +#~ "
                        • Hazte nuestro voluntario como redactor, programador o traductor
                        • " +#~ "\r\n" +#~ "
                        • Adquiere nuevas habilidades y gana experiencia
                        • \r\n" +#~ "
                        • Participa en un proyecto abierto y crea una innovadora biblioteca " +#~ "virtual
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Todos los que quieran participar en nuestro proyecto estarán " +#~ "bienvenidos. Colaboramos con estudiantes, docentes y todos los que están " +#~ "interesados y aficionados en literatura, redacción de textos o en " +#~ "proyectos informáticos. Les ofrecemos adiestramiento y ayuda en cuanto al " +#~ "contenido. Los voluntarios pueden trabajar a distancia o en la oficina " +#~ "principal de la Fundación.

                        \r\n" +#~ "

                        Organizamos también prácticas para estudiantes: colaboramos con el " +#~ "Instituto de Información Científica y Bibliología de la Universidad de " +#~ "Varsovia, el Servicio de Orientación Profesional de la Universidad de " +#~ "Cardenal Stefan Wyszynski y la Facultad de Física de la Universidad de " +#~ "Varsovia.

                        \r\n" +#~ "\n" +#~ "\r\n" +#~ "

                        ¿Cómo contactar con nosotros?

                        \r\n" +#~ "

                        A todos los interesados les invitamos a mandarnos un e-mail a marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.

                        \r\n" + +#~ msgid "" +#~ "

                        Kogo szukamy?

                        \r\n" +#~ "\r\n" +#~ "

                        Redaktorów technicznych (skład tekstu)

                        \r\n" +#~ "

                        Skład jest pierwszym etapem pracy nad tekstem. Za pomocą znaczników " +#~ "języka WL-XML nadajemy tekstowi pożądaną formę i umożliwiamy wyświetlenie " +#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na Platformie Redakcyjnej, " +#~ "która pozwala na zautomatyzowanie dużej części pracy.

                        \r\n" +#~ "\r\n" +#~ "

                        Kto może zostać redaktorem technicznym?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy – po krótkim szkoleniu.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Więcej informacji o redakcji technicznej znajdziecie na stronie redakcji Wolnych Lektur

                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Redaktorów literackich (merytorycznych)

                        \r\n" +#~ "

                        Redakcja literacka obejmuje korektę, uwspółcześnienia oraz dodawanie " +#~ "przypisów i motywów literackich. To unikalna możliwość zdobycia " +#~ "doświadczenia w cyfrowej edycji tekstów.

                        \r\n" +#~ "\r\n" +#~ "

                        Kto może zostać redaktorem literackim?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Osoby, które mają doświadczenie w redakcji tekstów literackich,
                        • " +#~ "\r\n" +#~ "
                        • Studenci i absolwenci studiów humanistycznych, którzy chcą takie " +#~ "doświadczenie zdobyć.
                        • \r\n" +#~ "
                        \r\n" +#~ "

                        Więcej informacji o redakcji merytorycznej znajdziecie na stronie redakcji Wolnych Lektur

                        \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Tłumaczy

                        \r\n" +#~ "

                        Strona WolneLektury.pl jest dostępna w siedmiu językach obcych – " +#~ "angielskim, francuskim, niemieckim, hiszpańskim, litewskim, rosyjskim " +#~ "oraz ukraińskim. Użytkownikami biblioteki jest ponad 200 tysięcy osób z " +#~ "zagranicy, a już niedługo nasze zbiory obejmą również dzieła w językach " +#~ "obcych. Dlatego potrzebujemy na bieżąco tłumaczyć nowe informacje " +#~ "pojawiające się na stronie.

                        \r\n" +#~ "

                        Kto może pomóc w tłumaczeniach?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy, kto dobrze zna co najmniej jeden z powyższych języków.
                        • " +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Programistów

                        \r\n" +#~ "

                        Poza samą stroną Wolnych Lektur tworzymy również:

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • narzędzia redakcyjne,
                        • \r\n" +#~ "
                        • konwertery do różnych formatów e-booków,
                        • \r\n" +#~ "
                        • aplikacje mobile ułatwiające dostęp do naszych zasobów.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " +#~ "jQuery, LaTeX, Java.\r\n" +#~ "Tworzone przez nas oprogramowanie udostępniamy na wolnej licencji.

                        \r\n" +#~ "

                        Kto może pomóc w pracach programistycznych?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy, kto umie i chciałby zdobyć punkty do karmy za udział w " +#~ "otwartym projekcie programistycznym. ;)
                        • \r\n" +#~ "
                        \r\n" +#~ msgstr "" +#~ "

                        ¿A quién buscamos?

                        \r\n" +#~ "\r\n" +#~ "

                        Redactores técnicos (composición tipográfica)

                        \r\n" +#~ "

                        La composición tipográfica es la primera etapa del trabajo con el " +#~ "texto. Por medio de los marcados del idioma WL-XML le damos la forma " +#~ "deseada al texto y facilitamos su visualización en la página web. La " +#~ "redacción técnica se realiza en la Plataforma Editorial, que permite automatizar gran parte del " +#~ "trabajo.

                        \r\n" +#~ "\r\n" +#~ "

                        ¿Quién puede ser redactor técnico?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Cualquiera, después de una breve formación.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Más información sobre la redacción técnica en la página web de Wolne Lektury

                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Redactores literarios

                        \r\n" +#~ "

                        La redacción literaria incluye la corrección de pruebas, adaptación e " +#~ "inclusión de las notas a pie de página , así como el tratamiento de los " +#~ "temas literarios. Es una oportunidad única de ganar experiencia en la " +#~ "edición digital de textos.

                        \r\n" +#~ "\r\n" +#~ "

                        ¿Quién puede ser redactor literario?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Las personas que tengan experiencia en la redacción de textos " +#~ "literarios,
                        • \r\n" +#~ "
                        • Los estudiantes y licenciados en humanidades que deseen obtener esta " +#~ "experiencia.
                        • \r\n" +#~ "
                        \r\n" +#~ "

                        Más información sobre la redacción literaria en la página web de Wolne Lektury

                        \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Traductores

                        \r\n" +#~ "

                        La página web de Wolne Lektury.pl está traducida a 7 idiomas: inglés, " +#~ "francés, alemán, español, lituano, ruso y ucraniano. Hay más de 200 mil " +#~ "de usuarios del extranjero, además, dentro de poco nuestra colección " +#~ "incluirá también obras en otros idiomas. De ahí que necesitemos traducir " +#~ "sistemáticamente nuevos contenidos que aparezcan en la página.

                        \r\n" +#~ "

                        ¿Quién puede ayudarnos con las traducciones?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Cualquiera que domine bien por lo menos uno de los idiomas " +#~ "mencionados anteriormente.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Programadores

                        \r\n" +#~ "

                        Aparte de la página web creamos también:

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • herramientas editoriales,
                        • \r\n" +#~ "
                        • convertidores para varios formatos de libros electrónicos,
                        • \r\n" +#~ "
                        • aplicaciones móviles que facilitan el acceso a nuestra colección
                        • " +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Usamos las siguientes tecnologías: Python, Django, XHTML, JavaScript, " +#~ "jQuery, LaTex, Java. \r\n" +#~ "El software creado por nosotros lo ponemos a su disposición en libre.

                        \r\n" +#~ "

                        ¿Quién puede ayudar en las tareas relacionadas con la programación?" +#~ "

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Cualquiera que sepa y quiera ganar puntos para su karma por la " +#~ "participación en un proyecto de programación abierto. ;)
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" + +#~ msgid "Prawa" +#~ msgstr "Derechos" + +#~ msgid "" +#~ "

                        Większość utworów w bibliotece nie jest chroniona prawem autorskim i " +#~ "znajduje się w domenie publicznej, co oznacza, że można je swobodnie " +#~ "publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi " +#~ "materiałami (przypisy, motywy literackie etc.), które podlegają prawu " +#~ "autorskiemu, to te dodatkowe materiały udostępnione są na licencji Uznanie " +#~ "autorstwa-Na tych samych warunkach 3.0. Publikujemy również kilka " +#~ "utworów, które autorzy lub spadkobiercy praw udostępnili na wolnej " +#~ "licencji Uznanie autorstwa-Na tych samych warunkach 3.0.

                        " +#~ msgstr "" +#~ "

                        La mayoría de los textos de la Biblioteca son libres de derechos de " +#~ "autor y son de dominio público, por lo tanto se pueden publicar y " +#~ "difundir libremente. Si un texto tiene materiales adicionales (notas a " +#~ "pie de página, temas literarios, etc.), que no están libres de derechos " +#~ "de autor, dichos materiales están publicados bajo la licencia Reconocimiento-" +#~ "Compartir bajo la misma licencia 3.0.También publicamos algunos " +#~ "textos legados al dominio público por los autores o herederos bajo la " +#~ "licencia Reconocimiento-Compartir bajo la misma licencia 3.0.

                        " diff --git a/src/infopages/locale/pl/LC_MESSAGES/django.mo b/src/infopages/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..0310e4668 Binary files /dev/null and b/src/infopages/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/infopages/locale/pl/LC_MESSAGES/django.po b/src/infopages/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..ceb4d08fe --- /dev/null +++ b/src/infopages/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,47 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-01-27 16:38+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \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%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2)\n" + +#: models.py:11 +msgid "main page priority" +msgstr "kolejność na stronie głównej" + +#: models.py:12 +msgid "slug" +msgstr "slug" + +#: models.py:13 +msgid "title" +msgstr "tytuł" + +#: models.py:14 +msgid "left column" +msgstr "lewa kolumna" + +#: models.py:15 +msgid "right column" +msgstr "prawa kolumna" + +#: models.py:19 +msgid "info page" +msgstr "strona informacyjna" + +#: models.py:20 +msgid "info pages" +msgstr "strony informacyjne" diff --git a/src/infopages/locale/uk/LC_MESSAGES/django.mo b/src/infopages/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..fe58f78b4 Binary files /dev/null and b/src/infopages/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/infopages/locale/uk/LC_MESSAGES/django.po b/src/infopages/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..0ff6832e8 --- /dev/null +++ b/src/infopages/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,1265 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: Natalia Kertyczak \n" +"Language-Team: uk \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 +msgid "main page priority" +msgstr "" + +#: models.py:12 +msgid "slug" +msgstr "" + +#: models.py:13 +msgid "title" +msgstr "" + +#: models.py:14 +msgid "left column" +msgstr "" + +#: models.py:15 +msgid "right column" +msgstr "" + +#: models.py:19 +msgid "info page" +msgstr "" + +#: models.py:20 +msgid "info pages" +msgstr "" + +#~ msgid "Wolontariat dla wiedzy" +#~ msgstr "Волонтерство в освіті" + +#~ msgid "" +#~ "

                        Wolontariat

                        \r\n" +#~ "\t

                        \r\n" +#~ "\t\tBiogramy pisarzy oraz definicje epok i gatunków literackich w\r\n" +#~ "\t\tbibliotece internetowej Wolne Lektury napisali uczniowie\r\n" +#~ "\t\tczterech szkół podczas warsztatów „Wolontariat dla wiedzy”.\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t\tUczniowie pracowali wspólnie pod merytorycznym nadzorem\r\n" +#~ "\t\tnauczycieli i specjalistów – literaturoznawców na\r\n" +#~ "\t\t\r\n" +#~ "\r\n" +#~ "\t\t\tplatformie internetowej wiki\r\n" +#~ "\t\tprzygotowanej przez zespół\r\n" +#~ "\t\t2ia. Praca nad notami była " +#~ "jednocześnie nauką wykorzystywania\r\n" +#~ "\t\tkomputerów i internetu do wyszukiwania informacji, a także\r\n" +#~ "\t\tweryfikowania ich wiarygodności.\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t\tProjekt \"Wolontariat dla wiedzy\" został zrealizowany dzięki\r\n" +#~ "\t\twsparciu\r\n" +#~ "\t\t\r\n" +#~ "\t\t\tMinisterstwa Edukacji Narodowej. Nagrody dla uczniów ufundowali" +#~ "\r\n" +#~ "\t\t\r\n" +#~ "\r\n" +#~ "\t\t\tWydawnictwo Nasza Księgarnia\r\n" +#~ "\t\ti\r\n" +#~ "\t\tWydawnictwo Helion. Noty " +#~ "zweryfikowano w serwisie\r\n" +#~ "\t\t\r\n" +#~ "\t\t\tPlagiat.pl.\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t\tRaport z realizacji projektu " +#~ "„Wolontariat dla wiedzy\".\r\n" +#~ "\t

                        \r\n" +#~ "\r\n" +#~ "\t

                        \r\n" +#~ "\t" +#~ "\r\n" +#~ "\t\r\n" +#~ "\t\r\n" +#~ " " +#~ "\r\n" +#~ " " +#~ "\r\n" +#~ "\t

                        \r\n" +#~ msgstr "" +#~ "

                        Волонтерство

                        \r\n" +#~ "               

                        \r\n" +#~ "                               Біограми письменників та дефініції епох та " +#~ "літературних жанрів в інтернет-бібліотеці написані учнями чотирьох шкіл " +#~ "підчас майстер-класів “Волонтерство в освіті”.\r\n" +#~ "               

                        \r\n" +#~ "\r\n" +#~ "               

                        \r\n" +#~ "                               Учні спільно працювали від доглядом " +#~ "вчителів та спеціалістів — літературознавців на \r\n" +#~ "\r\n" +#~ "                                               інтернетовій вікі-" +#~ "платформі\r\n" +#~ "                               встановленій командою\r\n" +#~ "                               2ia. Робота " +#~ "над цими текстами була водночас наукою користуватися комп’ютером та " +#~ "інтернетом для пошуку інформації, а також перевірки її вірогідності.\r\n" +#~ "               

                        \r\n" +#~ "\r\n" +#~ "               

                        \r\n" +#~ "                               Проект \"Волонтерство в освіті\" здійснено " +#~ "завдяки підтримці \r\n" +#~ "                               \r\n" +#~ "                                               Міністерства національної " +#~ "освіти. Призи для учнів приготували              \r\n" +#~ "\r\n" +#~ "                                               Видавництво Nasza " +#~ "Księgarnia\r\n" +#~ "                               та\r\n" +#~ "                               Видавництво " +#~ "Helion. Тексти перевірено в ресурсі \r\n" +#~ "                                               Plagiat.pl.\r\n" +#~ "               

                        \r\n" +#~ "\r\n" +#~ "               

                        \r\n" +#~ "                               Звіт з " +#~ "реалізації проекту \"Волонтерство в освіті\".\r\n" +#~ "               

                        \r\n" +#~ "\r\n" +#~ "               

                        \r\n" +#~ "                \r\n" +#~ "                \r\n" +#~ "                \r\n" +#~ "    " +#~ "\r\n" +#~ "    " +#~ "\r\n" +#~ "               

                        \r\n" + +#~ msgid "" +#~ "\t

                        Autorzy

                        \r\n" +#~ "\r\n" +#~ "\t
                          \r\n" +#~ "\t\t
                        1. \r\n" +#~ "\t\t\t

                          \r\n" +#~ "\t\t\t\tGimnazjum nr 40 z Oddziałami Integracyjnymi w Zespole\r\n" +#~ "\t\t\t\tSzkół nr 69 im. Armii Krajowej Grupy Bojowej „KRYBAR”,\r\n" +#~ "\t\t\t\tul. Drewniana 8, 00-345 Warszawa; klasa druga pod opieką\r\n" +#~ "\t\t\t\tAnny Budziarek-Friedrich:\r\n" +#~ "\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t
                            \r\n" +#~ "\t\t\t\t
                          • Burdon Filip;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Dębski Bartek;
                          • \r\n" +#~ "\t\t\t\t
                          • Jackowicz Kamil;
                          • \r\n" +#~ "\t\t\t\t
                          • Kurek Paweł;
                          • \r\n" +#~ "\t\t\t\t
                          • Makles Bartosz;
                          • \r\n" +#~ "\t\t\t\t
                          • Markiewicz Jeremiasz;
                          • \r\n" +#~ "\t\t\t\t
                          • Migdał Katarzyna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Mioduszewski Michał;
                          • \r\n" +#~ "\t\t\t\t
                          • Pfeiffer Ida;
                          • \r\n" +#~ "\t\t\t\t
                          • Płaskowicka Karolina;
                          • \r\n" +#~ "\t\t\t\t
                          • Sailer Ewa.
                          • \r\n" +#~ "\t\t\t
                          \r\n" +#~ "\t\t
                        2. \r\n" +#~ "\r\n" +#~ "\t\t
                        3. \r\n" +#~ "\t\t\t

                          \r\n" +#~ "\t\t\t\tXXXIII Liceum Ogólnokształcące im. Mikołaja Kopernika,\r\n" +#~ "\t\t\t\tul. Bema 76, 01-225 Warszawa; klasa pierwsza o profilu\r\n" +#~ "\t\t\t\tbiologiczno-chemicznym pod opieką Elżbiety Konkowskiej:\r\n" +#~ "\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t
                            \r\n" +#~ "\t\t\t\t
                          • Chwil Bartłomiej;
                          • \r\n" +#~ "\t\t\t\t
                          • Czarnecka Natalia;
                          • \r\n" +#~ "\t\t\t\t
                          • Gawrońska Iga;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Grabarczyk Marta;
                          • \r\n" +#~ "\t\t\t\t
                          • Jastrząb Katarzyna;
                          • \r\n" +#~ "\t\t\t\t
                          • Krawczak Olga;
                          • \r\n" +#~ "\t\t\t\t
                          • Krawczyk Marianna;
                          • \r\n" +#~ "\t\t\t\t
                          • Kur Natalia;
                          • \r\n" +#~ "\t\t\t\t
                          • Kwiatek Marta;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Laśkiewicz Joanna;
                          • \r\n" +#~ "\t\t\t\t
                          • Machczyńska Daria;
                          • \r\n" +#~ "\t\t\t\t
                          • Miecznikowska Izabela;
                          • \r\n" +#~ "\t\t\t\t
                          • Moczulska Karolina;
                          • \r\n" +#~ "\t\t\t\t
                          • Mościcka Aneta;
                          • \r\n" +#~ "\t\t\t\t
                          • Narloch Sabina;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Przybysz Paweł;
                          • \r\n" +#~ "\t\t\t\t
                          • Puchta Marek;
                          • \r\n" +#~ "\t\t\t\t
                          • Ryska Cezary;
                          • \r\n" +#~ "\t\t\t\t
                          • Sandomierski Bartłomiej;
                          • \r\n" +#~ "\t\t\t\t
                          • Sławiński Tomasz;
                          • \r\n" +#~ "\t\t\t\t
                          • Słowik Olga;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Starzycka Katarzyna;
                          • \r\n" +#~ "\t\t\t\t
                          • Strzelczak Karolina;
                          • \r\n" +#~ "\t\t\t\t
                          • Szafran Danuta;
                          • \r\n" +#~ "\t\t\t\t
                          • Szmigielska Magdalena;
                          • \r\n" +#~ "\t\t\t\t
                          • Szulkowska Alicja;
                          • \r\n" +#~ "\t\t\t\t
                          • Ślusarczyk Anna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                          • Tytkowska Anna.
                          • \r\n" +#~ "\t\t\t
                          \r\n" +#~ "\t\t\t
                        4. \r\n" +#~ "\t\t\t\t

                          \r\n" +#~ "\t\t\t\t\tAutorskie Niepubliczne Liceum Ogólnokształcące nr\r\n" +#~ "\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; klasa pierwsza\r\n" +#~ "\t\t\t\t\to profilu ogólnym pod opieką Michała Friedricha:\r\n" +#~ "\t\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                            \r\n" +#~ "\t\t\t\t\t
                          • Baraniecka Marta;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Gołaszewska Ewa;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Kwiatkowski Michał;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Machnikowska Monika;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Pietrzak Bartosz;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Przespolewski Przemysław;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Rosińska Zuzanna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Sibiga Magdalena.
                          • \r\n" +#~ "\t\t\t\t
                          \r\n" +#~ "\t\t\t
                        5. \r\n" +#~ "\t\t\t
                        6. \r\n" +#~ "\t\t\t\t

                          \r\n" +#~ "\t\t\t\t\tLXIV Liceum Ogólnokształcące im. St. I. Witkiewicza,\r\n" +#~ "\t\t\t\t\tul. Elbląska 51, 01-737 Warszawa; klasa pierwsza o\r\n" +#~ "\t\t\t\t\tprofilu ogólnym pod opieką Daniela Zycha:\r\n" +#~ "\t\t\t\t

                          \r\n" +#~ "\r\n" +#~ "\t\t\t\t
                            \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Andrzejczak Kamil;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Czubaj Konrad;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Drągowska Katarzyna;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Gajewska Magdalena;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Głowacki Jan;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Grad Paweł;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Hnatowski Bartek;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Karwowski Marcin;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Kłos Aneta;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Kozieł Barbara;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Kozłowska Anna;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Krug Pamela;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Krzosek Jakub;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Lubaś Michał;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Masewicz Natalia;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Mastalerz Agnieszka;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Modelska Marta;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Nowak Aleksandra;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Pabian Agnieszka;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Paszkowska Aleksandra;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Pielat Zofia;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Poniecka Agnieszka;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Pytlak Urszula;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Rosa Karolina;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Smyczyńska Kamila;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Stolińska Barbara;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Szymańska Katarzyna;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Ścibior Ewa;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Witczak Magda;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Witkowska Justyna;
                          • \r\n" +#~ "\r\n" +#~ "\t\t\t\t\t
                          • Wyrzykowska Jowita;
                          • \r\n" +#~ "\t\t\t\t\t
                          • Ziółkowska Adrianna.
                          • \r\n" +#~ "\t\t\t\t
                          \r\n" +#~ "\t\t\t
                        7. \r\n" +#~ "\t \r\n" +#~ "\t
                        \r\n" +#~ msgstr "" +#~ "

                        Автори

                        \r\n" +#~ "\r\n" +#~ "               
                          \r\n" +#~ "                              
                        1. \r\n" +#~ "                                              

                          \r\n" +#~ "                                                               Гімназія " +#~ "№40 з інтеграційними відділами в Комплексі шкіл № 69 імені Армії Крайової " +#~ "Бойової Групи “КРИБАР”,\r\n" +#~ "                                                               вул. " +#~ "Древняна 8, 00-345 Варшава; другий клас під опікою Анни Будзярек-Фрідріх:" +#~ "\r\n" +#~ "                                              

                          \r\n" +#~ "\r\n" +#~ "                                              
                            \r\n" +#~ "                                                              
                          • Бурдон " +#~ "Філіп;
                          • \r\n" +#~ "\r\n" +#~ "                                                               " +#~ "
                          • Дембські Бартек;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Яцковіч Каміл;
                          • \r\n" +#~ "                                                              
                          • Курек " +#~ "Павел;
                          • \r\n" +#~ "                                                              
                          • Маклес " +#~ "Бартош;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Маркевіч Єремяш;
                          • \r\n" +#~ "                                                              
                          • Мігдал " +#~ "Катажина;
                          • \r\n" +#~ "\r\n" +#~ "                                                               " +#~ "
                          • Міодушевські Міхал;
                          • \r\n" +#~ "                                                              
                          • Файфер " +#~ "Іда;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Пласковіцька Кароліна;
                          • \r\n" +#~ "                                                              
                          • Сайлер " +#~ "Ева.
                          • \r\n" +#~ "                                              
                          \r\n" +#~ "                              
                        2. \r\n" +#~ "\r\n" +#~ "                              
                        3. \r\n" +#~ "                                              

                          \r\n" +#~ "                                                               XXXIII " +#~ "Загальноосвітний ліцей імені Миколая Коперника,\r\n" +#~ "                                                               вул. Бема " +#~ "76, 01-225 Варшава; перший клас біологічно-хімічного профілю під опікою " +#~ "Ельжбєти Конковської :\r\n" +#~ "                                              

                          \r\n" +#~ "\r\n" +#~ "                                              
                            \r\n" +#~ "                                                              
                          • Хвіл " +#~ "Бартломєй;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Чарнецька Наталія ;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Ґавронська Іґа ;
                          • \r\n" +#~ "\r\n" +#~ "                                                               " +#~ "
                          • Ґрабарчик Марта;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Яастжомб Катажина;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Кравчак Ольга;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Кравчик Маріанна ;
                          • \r\n" +#~ "                                                              
                          • Кур " +#~ "Наталія;
                          • \r\n" +#~ "                                                              
                          • Квятек " +#~ "Марта;
                          • \r\n" +#~ "\r\n" +#~ "                                                               " +#~ "
                          • Ласькевич Йоанна;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Махчинська Дарія;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Мєчніковська Ізабеля;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Мочулська Кароліна;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Мосьціцка Анета;
                          • \r\n" +#~ "                                                              
                          • Нарлох " +#~ "Сабіна;
                          • \r\n" +#~ "\r\n" +#~ "                                                              
                          • Пшибиш " +#~ "Павел;
                          • \r\n" +#~ "                                                              
                          • Пухта " +#~ "Марек;
                          • \r\n" +#~ "                                                              
                          • Риска " +#~ "Цезари;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Сандомєрські Барломєй;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Славінські Томаш;
                          • \r\n" +#~ "                                                              
                          • Словік " +#~ "Ольга;
                          • \r\n" +#~ "\r\n" +#~ "                                                               " +#~ "
                          • Стажицька Катажина;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Стжелчак Кароліна;
                          • \r\n" +#~ "                                                              
                          • Шафран " +#~ "Данута;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Шміґєльська Маґдалена;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Шулковаська Аліція;
                          • \r\n" +#~ "                                                               " +#~ "
                          • Сьлусарчик Анна;
                          • \r\n" +#~ "\r\n" +#~ "                                                               " +#~ "
                          • Титковська  Анна.
                          • \r\n" +#~ "                                              
                          \r\n" +#~ "                                              
                        4. \r\n" +#~ "                                                              

                          \r\n" +#~ "                                                                              " +#~ "Авторський Непублічний Загальноосвітній Ліцей № " +#~ "                                                               42, вул. " +#~ "Івіцька 47 B, 00-735 Варшава; перший клас загального профілю під опікою " +#~ "Міхала Фрідріха:\r\n" +#~ "                                                              

                          \r\n" +#~ "\r\n" +#~ "                                                              
                            \r\n" +#~ "                                                                              " +#~ "
                          • Баранєцька Марта;
                          • \r\n" +#~ "\r\n" +#~ "                                                                              " +#~ "
                          • Ґолашевська Ева;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Квятковські Міхал;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Махніковська Моніка;
                          • \r\n" +#~ "                               " +#~ "                                              
                          • Пєтжак Бартош;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Пшесполевські Пшемислав;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Росінська Зузанна;
                          • \r\n" +#~ "\r\n" +#~ "                                                                              " +#~ "
                          • Сібіґа Маґдалена.
                          • \r\n" +#~ "                                                              
                          \r\n" +#~ "                                              
                        5. \r\n" +#~ "                                              
                        6. \r\n" +#~ "                                                              

                          \r\n" +#~ "                                                                              " +#~ "LXIV Загальноосвітній Ліцей імені Ст.І. Віткєвіча,\r\n" +#~ "                                                                              " +#~ "вул. Ельблонзька 51, 01-737 Варшава; перший клас загального профілю під " +#~ "опікою Данєла Зиха:\r\n" +#~ "                                                              

                          \r\n" +#~ "\r\n" +#~ "                                                              
                            \r\n" +#~ "\r\n" +#~ "                                                                              " +#~ "
                          • Анджейчак Каміл;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Чубай Конрад;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Дронґовська Катажина;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Ґаєвська Маґдалена;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Ґловацькі Ян;
                          • \r\n" +#~ "                               " +#~ "                                              
                          • Ґрад  Павел;
                          • \r\n" +#~ "\r\n" +#~ "                                                                              " +#~ "
                          • Гнатовські Бартек;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Карвовські Марцін;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Клос Анета;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Козєл Барбара;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Козловська Анна;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Круґ Памела;
                          • \r\n" +#~ "\r\n" +#~ "                                                                              " +#~ "
                          • Кжосек Якуб;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Лубась Міхал;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Масевіч Наталія;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Масталеж Аґнєшка;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Модельська Марта;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Новак Александра;
                          • \r\n" +#~ "\r\n" +#~ "                                                                              " +#~ "
                          • Пабян Аґнєшка;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Пашковська Александра;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Пєлат Зофія;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Понєцька Аґнєшка;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Питлак Уршуля;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Роса Кароліна;
                          • \r\n" +#~ "\r\n" +#~ "                                                                              " +#~ "
                          • Смчинська Каміля;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Столінська Барбара;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Шиманська Катажина;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Сьцібор Ева;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Вітчак Маґда;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Вітковська Юстина;
                          • \r\n" +#~ "\r\n" +#~ "                                                                              " +#~ "
                          • Вижиковська Йовіта;
                          • \r\n" +#~ "                                                                              " +#~ "
                          • Зюлковська Адріанна.
                          • \r\n" +#~ "                                                              
                          \r\n" +#~ "                                              
                        7. \r\n" +#~ "                  \r\n" +#~ "                 
                        \r\n" + +#~ msgid "Możesz nam pomóc" +#~ msgstr "Можете нам допомогти" + +#~ msgid "" +#~ "

                        Wolontariat w Wolnych Lekturach

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Zostań naszym redaktorem, programistą lub tłumaczem – wolontariuszem." +#~ "
                        • \r\n" +#~ "
                        • Zdobądź nowe umiejętności i doświadczenie.
                        • \r\n" +#~ "
                        • Weź udział w otwartym projekcie i twórz innowacyjną bibliotekę " +#~ "internetową.
                        • \r\n" +#~ "
                        \r\n" +#~ "

                        Dzięki pracy naszych wolontariuszy opublikowaliśmy już ponad 1500 " +#~ "lektur, z których skorzystały ponad 3 miliony czytelników z " +#~ "całego świata.

                        \r\n" +#~ "

                        Zapraszamy wszystkie osoby, które chcą współtworzyć nasz projekt. " +#~ "Współpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " +#~ "literaturą, redagowaniem tekstów i projektami informatycznymi. Oferujemy " +#~ "profesjonalne szkolenia i stałą pomoc merytoryczną. Wolontariusze mogą " +#~ "pracować zdalnie lub w siedzibie Fundacji.

                        \r\n" +#~ "

                        Organizujemy również praktyki studenckie – nawiązaliśmy współpracę z " +#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " +#~ "Karier UKSW oraz Wydziałem Fizyki UW.

                        \r\n" +#~ "\r\n" +#~ "

                        Jak się do nas zgłosić?

                        \r\n" +#~ "

                        Wszystkie zainteresowane osoby prosimy o przysłanie maila na adres marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.

                        \r\n" +#~ msgstr "" +#~ "

                        Волонтерство

                        \r\n" +#~ "\r\n" +#~ "

                        Ми намагаємося якомога краще підготувати твори, які поступово " +#~ "додаються до нашої бібліотеки. Це можливо тільки завдяки нашим волонтерам." +#~ "

                        \r\n" +#~ "\r\n" +#~ "

                        Запрошуємо усіх, хто хоче допомогти у творенні шкільної інтернет-" +#~ "бібліотеки Wolne Lektury.

                        \r\n" +#~ "\r\n" +#~ "

                        Всім волонтерам ми пропонуємо тренінги і практичний досвід обробки " +#~ "тексту: змістовне та технічне редагування. Волонтери можуть ознайомитися " +#~ "з проблемами та можливостями, пов’язаними з інтернет-публікаціями.\r\n" +#~ "\r\n" +#~ "Спільно з нами волонтери організують тренінги та конференції, допомагають " +#~ "в підготовленні текстів для слухання (так званих аудіо-книг). Ми " +#~ "підписуємо з волонтерами угоди та надаємо їм посвідчення про це коли і " +#~ "які праці виконував для нашого фонду волонтер. Тренінги, досвід " +#~ "редагування та сертифікати, які це засвідчують, можуть бути цінними в " +#~ "процесі підвищення кваліфікацій і професійній кар'єрі.

                        \r\n" +#~ "\r\n" +#~ "

                        Що можна робити?

                        \r\n" +#~ "\r\n" +#~ "

                        Найбільше роботи присвячується підготовленню тексту для публікації. В " +#~ "тексті, який ми отримуємо від Національної бібліотеки треба виправити " +#~ "орфографічні та інші механічні помилки, а потім додати в тексті примітки, " +#~ "пам’ятаючи про це, що наша пропозиція скерована перш за все до учнів, для " +#~ "яких багато слів та фраз звучатиме анахронічно. Давніші публікації (все " +#~ "залежить тут від авторського права) піддаються необхідному мовному " +#~ "осучасненню, на приклад щодо правопису чи флексії, при чому ми дбаємо про " +#~ "це щоб не порушувати артистичного характеру тексту. Останнім етапом є " +#~ "пошук літературних мотивів та тем, які мають допомогти в глибинному " +#~ "пізнанні літератури. В усіх цих працях нас підтримують волонтери - " +#~ "вчителі та студенти - які часто допомагають також порадою та зауваженнями " +#~ "при прийнятті важливих рішень.

                        \r\n" +#~ "\r\n" +#~ "

                        Як до нас зголоситися?

                        \r\n" +#~ "\r\n" +#~ "

                        Усіх зацікавлених просимо вислати листа на адресу fundacja@nowoczesnapolska.org.pl.\r\n" +#~ "\r\n" +#~ "

                        Запрошуємо також на сайт редакції Wolne Lektury, де можна знайти " +#~ "усю необхідну інформацію про це, як залучитись у редакційну роботу.

                        " +#~ "\r\n" + +#~ msgid "" +#~ "

                        Kogo szukamy?

                        \r\n" +#~ "\r\n" +#~ "

                        Redaktorów technicznych (skład tekstu)

                        \r\n" +#~ "

                        Skład jest pierwszym etapem pracy nad tekstem. Za pomocą znaczników " +#~ "języka WL-XML nadajemy tekstowi pożądaną formę i umożliwiamy wyświetlenie " +#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na Platformie Redakcyjnej, " +#~ "która pozwala na zautomatyzowanie dużej części pracy.

                        \r\n" +#~ "\r\n" +#~ "

                        Kto może zostać redaktorem technicznym?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy – po krótkim szkoleniu.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Więcej informacji o redakcji technicznej znajdziecie na stronie redakcji " +#~ "Wolnych Lektur

                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Redaktorów literackich (merytorycznych)

                        \r\n" +#~ "

                        Redakcja literacka obejmuje korektę, uwspółcześnienia oraz dodawanie " +#~ "przypisów i motywów literackich. To unikalna możliwość zdobycia " +#~ "doświadczenia w cyfrowej edycji tekstów.

                        \r\n" +#~ "\r\n" +#~ "

                        Kto może zostać redaktorem literackim?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Osoby, które mają doświadczenie w redakcji tekstów literackich,
                        • " +#~ "\r\n" +#~ "
                        • Studenci i absolwenci studiów humanistycznych, którzy chcą takie " +#~ "doświadczenie zdobyć.
                        • \r\n" +#~ "
                        \r\n" +#~ "

                        Więcej informacji o redakcji merytorycznej znajdziecie na stronie redakcji " +#~ "Wolnych Lektur

                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Tłumaczy

                        \r\n" +#~ "

                        Strona WolneLektury.pl jest dostępna w siedmiu językach obcych – " +#~ "angielskim, francuskim, niemieckim, hiszpańskim, litewskim, rosyjskim " +#~ "oraz ukraińskim. Użytkownikami biblioteki jest ponad 200 tysięcy osób z " +#~ "zagranicy, a już niedługo nasze zbiory obejmą również dzieła w językach " +#~ "obcych. Dlatego potrzebujemy na bieżąco tłumaczyć nowe informacje " +#~ "pojawiające się na stronie.

                        \r\n" +#~ "

                        Kto może pomóc w tłumaczeniach?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy, kto dobrze zna co najmniej jeden z powyższych języków.
                        • " +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Programistów

                        \r\n" +#~ "

                        Poza samą stroną Wolnych Lektur tworzymy również:

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • narzędzia redakcyjne,
                        • \r\n" +#~ "
                        • konwertery do różnych formatów e-booków,
                        • \r\n" +#~ "
                        • aplikacje mobile ułatwiające dostęp do naszych zasobów.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " +#~ "jQuery, LaTeX, Java.\r\n" +#~ "Tworzone przez nas oprogramowanie udostępniamy na wolnej licencji.

                        \r\n" +#~ "

                        Kto może pomóc w pracach programistycznych?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy, kto umie i chciałby zdobyć punkty do karmy za udział w " +#~ "otwartym projekcie programistycznym. ;)
                        • \r\n" +#~ "
                        \r\n" +#~ msgstr "" +#~ "

                        Найбільш заслужені волонтери

                        \r\n" +#~ "\r\n" +#~ "\t

                        Agatapaszkowska (співпрацює з нами від 15 березня 2008)

                        \r\n" +#~ "\r\n" +#~ "

                        між іншими, опрацювала «В пустелі і в джунглях» Сенкевича; " +#~ "дивись також на нашому сайті «вклад користувача»: http://wiki." +#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska

                        \r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\t

                        AgnieszkaKappa (співпрацює з нами від 16 березня 2008)

                        \r\n" +#~ "\r\n" +#~ "

                        між іншими, брала участь в творенні списку та опису " +#~ "використання літературних мотивів та тем; опрацювала тексти Сенкевича " +#~ "(Latarnik, Янко Музикант, Quo vadis); дивись також на нашому сайті «вклад " +#~ "користувача»: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk" +#~ "%C5%82ad&limit=500&target=AgnieszkaKappa

                        \r\n" +#~ "\r\n" +#~ "\r\n" +#~ "

                        Anerys (співпрацює з нами від 5 липня 2007)

                        \r\n" +#~ "\r\n" +#~ "

                        між іншими, брала участь в творенні списку літературних " +#~ "мотивів та тем, дискусії на тему літературних жанрів, опрацювала гімн " +#~ "Богородиця, «Фрашки» та «Трени» Кохановського; вірші Словацького (Grób " +#~ "Agamemnona), «Тартюфа» Мольєра, та поезії Каспровіча (в цьому числі гімн " +#~ "„Dies Irae”); дивись також на нашому сайті «вклад користувача»: http://" +#~ "wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys

                        \r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\t

                        EmiliaZdankiewicz (співпрацює з нами від 17 березня 2008)

                        \r\n" +#~ "\r\n" +#~ "

                        між іншими, літературні мотиви — дискусія та опис, Словацький, " +#~ "Кордіан; Конопніцька, Nasza szkapa; Міцкевич, Дзяди ч. III; дивись також " +#~ "на нашому сайті «вклад користувача»: http://wiki." +#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz

                        \r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\t

                        Ewa_Serafin (співпрацює з нами від 15 березня 2008)

                        \r\n" +#~ "\r\n" +#~ "

                        між іншими, брала участь в творенні списку та опису " +#~ "використання літературних мотивів та тем, опрацювала поезії Каспровіча " +#~ "(“Z wichrów i hal”, “Nad przepaściami”, “W ciemności schodzi moja " +#~ "dusza”), а також “Nad Niemnem” Елізи Ожешко; дивись також на нашому сайті " +#~ "«вклад користувача»: http://wiki.wolnepodreczniki.pl/Specjalna:Wk" +#~ "%C5%82ad/Ewa_Serafin

                        \r\n" +#~ "\r\n" +#~ "\r\n" +#~ " \t

                        Hanna_Golab (співпрацює з нами від 15 березня 2008)

                        \r\n" +#~ "\r\n" +#~ "

                        опрацювала “Царя Едіпа” Софокла та вірш “Dusiołek” Лесьмяна; " +#~ "дивись також на нашому сайті «вклад користувача»: http://wiki." +#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab

                        \r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\t

                        Ingene (співпрацює з нами від 16 липня 2008)

                        \r\n" +#~ "\r\n" +#~ "

                        між іншими, опрацювала оповідання “Siłaczka” Жеромського, " +#~ "“Quo vadis” Сенкевича та “Трени” Кохановського; дивись також на нашому " +#~ "сайті «вклад користувача»: http://wiki.wolnepodreczniki.pl/Specjalna:Wk" +#~ "%C5%82ad/Ingene

                        \r\n" +#~ " \r\n" +#~ "\t

                        Jmyszkowska (співпрацює з нами від 26 березня 2008)

                        \r\n" +#~ "\r\n" +#~ "

                        між іншими, опрацювала “Гяура” Байрона та “Quo vadis” " +#~ "Сенкевича; дивись також на нашому сайті «вклад користувача»: http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\r\n" +#~ "\r\n" +#~ "\r\n" +#~ "

                        Marysiabailey (співпрацює з нами від 1 жовтня 2007)

                        \r\n" +#~ "\r\n" +#~ "

                        між іншими, брала участь у творенні списку літературних тем та " +#~ "описі їх застосування; опрацювала твори: “Селяни” Реймонта , “Lalka” " +#~ "Пруса, “Nie-Boska komedia” Красінського, „Bajki” та „Satyry” Красіцького, " +#~ "“Антигона” Софокла, а також твори Кохановського, Морштина, Міцкевича, " +#~ "Ґете, Оппмана, Каспровіча; дивись також на нашому сайті «вклад " +#~ "користувача»: http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk" +#~ "%C5%82ad&limit=500&target=Marysiabailey; крім того, " +#~ "підготувала і провела тренінг для волонтерів 15 березня 2008; заямалася " +#~ "такод коректою, а на даний момент працює над аудіо-книгами.

                        \r\n" +#~ "\r\n" +#~ "\r\n" +#~ "

                        Olga_Wojtczak (співпрацює з нами від 21 жовтня 2008)

                        \r\n" +#~ "\r\n" +#~ "

                        між іншими, опрацювала романи Сенкевича (Трилогія), Реймонта, " +#~ "Жеромського, драми Шекспіра; дивись також на нашому сайті «вклад " +#~ "користувача»: http://wiki.wolnepodreczniki.pl/Specjalna:Wk" +#~ "%C5%82ad/Olga_Wojtczak

                        \r\n" +#~ "\r\n" +#~ "\r\n" +#~ "

                        Renataml (співпрацює з нами від 30 червня 2007)

                        \r\n" +#~ "\r\n" +#~ "

                        брала участь в дискусії на тему списку мотивів; як досвідчена " +#~ "вчителька, надавала підтримку та поради, редагувала роман «Lalka» Пруса, " +#~ "драму «Балладина» Словацького, оповідання «Siłaczka» Жеромського.\r\n" +#~ "\r\n" +#~ " http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml

                        \r\n" + +#~ msgid "O projekcie" +#~ msgstr "Про проект" + +#~ msgid "" +#~ "{% load reporting_stats %}\r\n" +#~ "\r\n" +#~ "

                        Wolne Lektury to biblioteka internetowa czynna 24 godziny na " +#~ "dobę, 365 dni w roku i całkowicie darmowa. W jej zbiorach " +#~ "znajduje się {% count_books %} utworów, w tym wiele " +#~ "lektur szkolnych zalecanych do użytku przez Ministerstwo Edukacji " +#~ "Narodowej, które trafiły już do domeny publicznej. Wszystkie dzieła są " +#~ "odpowiednio opracowane - opatrzone przypisami, motywami i udostępnione w " +#~ "kilku formatach - HTML , TXT , " +#~ "PDF, EPUB, MOBI. W " +#~ "bibliotece znajduje się również kilkaset audiobooków, czytanych przez " +#~ "takich aktorów jak: Danuta Stenka, Jan Peszek czy Andrzej Chyra. Można " +#~ "ich słuchać w formatach MP3 i Ogg Vorbis. Audiobooki są również dostępne w formacie DAISY dostosowanym do potrzeb osób słabowidzących, niewidomych oraz osób " +#~ "mających trudności z czytaniem.

                        \r\n" +#~ "\r\n" +#~ "

                        Biblioteka Wolne Lektury dostępna jest za pośrednictwem aplikacji " +#~ "mobilnych – na system Android oraz na system iOS.

                        \r\n" +#~ "\r\n" +#~ "

                        Wszystkie utwory zamieszczone w bibliotece Wolne Lektury można " +#~ "zgodnie z prawem bezpłatnie przeglądać, słuchać, ściągać na swój " +#~ "komputer, a także udostępniać innym i cytować.

                        \r\n" +#~ msgstr "" +#~ "{% load reporting_stats %}\r\n" +#~ "\r\n" +#~ "

                        Wolne Lektury це електронна бібліотека відкрита 24 години на " +#~ "добу, 365 днів в році і повністю безкоштовна. В її колекції " +#~ "знаходиться {% count_books %} творів, в тому числі " +#~ "багато шкільної літератури, рекомендованої Міністерством національної " +#~ "освіти, яка увійшла вже до суспільного надбання. Усі твори старанно " +#~ "опрацьовані - до них додаються примітки, мотиви і надається доступ в " +#~ "декількох форматах - HTML , TXT , " +#~ "PDF, EPUB, MOBI. У " +#~ "бібліотеці можна також знайти кілька сотень аудіокниг у виконанні таких " +#~ "авторів як: Данута Стенка, Ян Пешек чи Анджей Хира. Можна їх слухати у " +#~ "форматах MP3 i Ogg Vorbis. Аудіокниги " +#~ "доступні також у форматі DAISY , який пристосований для " +#~ "слабозорих та сліпих осіб, а також для тих, хто має труднощі з читанням.\r\n" +#~ "\r\n" +#~ "

                        Бібліотека Wolne Lektury також доступна за допомогою мобільних " +#~ "аплікацій – в системі Android, а також в системі iOS.

                        \r\n" +#~ "\r\n" +#~ "

                        Усі твори розміщені у бібліотеці Wolne Lektury можна легально " +#~ "переглядати, слухати, завантажувати на власний комп’ютер, надавати доступ " +#~ "до них іншим та цитувати.

                        \r\n" + +#~ msgid "" +#~ "

                        Wolne Lektury to projekt fundacji Nowoczesna Polska realizowany pro " +#~ "publico bono, we współpracy z Biblioteką Narodową, Biblioteką Ślaską oraz " +#~ "Biblioteką Elbląską pod patronatem Ministerstwa Edukacji Narodowej, " +#~ "Ministerstwa Kultury i Dziedzictwa Narodowego oraz Stowarzyszenia Pisarzy " +#~ "Polskich. W Komitecie Honorowym Wolnych Lektur zasiadają: prof. Maria " +#~ "Janion, prof. Grażyna Borkowska, prof. Przemysław Czapliński, prof. " +#~ "Mieczysław Dąbrowski, prof. Ewa Kraskowska, prof. Małgorzata Czermińska, " +#~ "prof. Jerzy Jarzębski i prof. Piotr Śliwiński.

                        \r\n" +#~ "\r\n" +#~ "

                        Większość utworów w bibliotece nie jest chroniona prawem autorskim i " +#~ "znajduje się w domenie publicznej, co oznacza że można je swobodnie " +#~ "publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi " +#~ "materiałami (przypisy, motywy literackie etc.), które podlegają prawu " +#~ "autorskiemu, to te dodatkowe materiały udostępnione są na licencji Uznanie " +#~ "autorstwa-Na tych samych warunkach 3.0. Publikujemy również kilka " +#~ "utworów, które autorzy lub spadkobiercy praw udostępnili na wolnej " +#~ "licencji Uznanie autorstwa-Na tych samych warunkach 3.0.

                        \r\n" +#~ "\r\n" +#~ "Kontakt: wolnelektury@nowoczesnapolska.org.pl\r\n" +#~ msgstr "" +#~ "

                        Wolne Lektury це проект Фонду Сучасна Польща (Fundacja Nowoczesna " +#~ "Polska), реалізований з некомерційною метою, у співпраці з Національною " +#~ "бібліотекою, Сілезькою бібліотекою та Ельблонзькою бібліотекою під " +#~ "патронатом Міністерства національної освіти, Міністерства культури та " +#~ "національної спадщини, а також Спілки польських письменників. В Почесному " +#~ "комітеті проекту Wolne Lektury засідають проф. Марія Яніон, проф. Ґражина " +#~ "Борковська, проф. Пшемислав Чаплінський, проф. Мєчислав Домбровський, " +#~ "проф. Ева Красковська, проф. Малґожата Чермінська, проф. Єжи Яжембський " +#~ "та проф. Піотр Слівінський.

                        \r\n" +#~ "\r\n" +#~ "

                        Більшість творів у бібліотеці не охороняються авторським правом і " +#~ "являються частиною суспільного надбання, тому їх можна вільно публікувати " +#~ "та розповсюджувати. Якщо тексти супроводжуються додатковими матеріалами " +#~ "(примітками, літературними мотивами тощо), які охороняються авторським " +#~ "правом, доступ до цих додаткових матеріалів надається на умовах ліцензії " +#~ "Із " +#~ "зазначенням імені автора – На тих же умовах 3.0. Також ми публікуємо " +#~ "декілька творів, до яких автори або спадкоємці прав надали доступ на " +#~ "підставі вільної ліцензії Із зазначенням імені автора – На тих же умовах 3.0.

                        \r\n" +#~ "\r\n" +#~ "Контакт: wolnelektury@nowoczesnapolska.org.pl\r\n" + +#~ msgid "Zespół" +#~ msgstr "Команда" + +#~ msgid "" +#~ "

                        Magdalena Biernat – koordynatorka projektu, dyrektor " +#~ "zarządzająca fundacji Nowoczesna Polska. Socjolożka, absolwentka " +#~ "Uniwersytetu Warszawskiego i L’Université libre de Bruxelles. " +#~ "Specjalistka od projektów internetowych. Koordynowała projekty Kandydaci " +#~ "2009 i Mam Prawo Wiedzieć w Stowarzyszeniu 61. Pracowała przy wielu " +#~ "badaniach społecznych realizowanych przez organizacje pozarządowe i firmy " +#~ "badawcze.

                        \r\n" +#~ "\r\n" +#~ "

                        Radosław Czajka – główny programista, studiował " +#~ "informatykę na MIMUW. Biegły w językach programowania, znaczników: " +#~ "Python, XHTML, Javascript, CSS, LaTeX, SQL. Posiada doświadczenie z " +#~ "frameworkami Django, Jquery, doświadczenie w przekształceniach dokumentów " +#~ "XML (XSLT), w produkcji ebooków w formatach PDF i EPUB oraz w tworzeniu " +#~ "aplikacji mobilnych na system Android i iOS.

                        \r\n" +#~ "\r\n" +#~ "

                        Marcin Koziej – programista. Absolwent Politechniki " +#~ "Warszawskiej i doktorant w Instytucie Filozofii Uniwersytetu " +#~ "Warszawskiego. Działacz Mokotowskiej Kooperatywy Spożywczej. Podróżnik, " +#~ "rowerzysta i biesiadnik. Homo ludens.

                        \r\n" +#~ "\r\n" +#~ "

                        Marta Niedziałkowska – redaktorka techniczna, " +#~ "absolwentka bibliotekoznawstwa i informacji naukowej UW. Studentka " +#~ "studiów magisterskich Public Policy and Administration na Collegium " +#~ "Civitas.

                        \r\n" +#~ "\r\n" +#~ msgstr "" +#~ "

                        Маґдалена Б’єрнат – координатор проекту, керуючий " +#~ "директор Фонду Сучасна Польща (Fundacja Nowoczesna Polska). Соціолог, " +#~ "випускниця Варшавського університету та Брюссельського вільного " +#~ "університету. Спеціаліст інтернетних проектів. Керувала проектами " +#~ "«Кандидати 2009» та «Я маю право знати» у Асоціації 61. Працювала у " +#~ "багатьох соціальних дослідженнях, які проводилися громадськими " +#~ "організаціями та дослідницькими фірмами.

                        \r\n" +#~ "\r\n" +#~ "

                        Радослав Чайка – головний програміст, вивчав " +#~ "інформатику на Факультеті Математики, Інформатики та Механіки " +#~ "Варшавського Університету. Володіє наступними мовами програмування та " +#~ "тегів: Python, XHTML, Javascript, CSS, LaTeX, SQL. Має досвід у " +#~ "фреймворках Django, Jquery, а також у трансформуванні документів XML " +#~ "(XSLT), у творенні електронних книг у форматах PDF та EPUB і мобільних " +#~ "аплікацій на системи Android та iOS.

                        \r\n" +#~ "\r\n" +#~ "

                        Марцін Козєй – програміст. Випускник Варшавського " +#~ "Політехнічного Університету та аспірант в Інституті Філософії " +#~ "Варшавського Університету. Діяч Мокотовського Продовольчого Кооперативу. " +#~ "Мандрівник, велосипедист, любитель усіляких банкетів. Homo ludens.

                        \r\n" +#~ "\r\n" +#~ "

                        Марта Нєдзялковська – технічний редактор, випускниця " +#~ "бібліотекознавства та наукової інформації Варшавського університету. " +#~ "Студентка магістратури на спеціальності Public Policy and Administration " +#~ "у Collegium Civitas.

                        \r\n" +#~ "\r\n" + +#~ msgid "" +#~ "

                        Dorota A. Kowalska – redaktorka literacka, " +#~ "językoznawca, polonistka i slawistka, doktor nauk humanistycznych, " +#~ "adiunkt w Pracowni Polszczyzny Kresowej IJP PAN, gdzie zajmuje się " +#~ "historią i współczesnością języka polskiego na Ukrainie. Hobbystycznie " +#~ "śpiewa archaiczne pieśni ukraińskie i rosyjskie, cyklistka.

                        \r\n" +#~ "\r\n" +#~ "

                        Aleksandra Sekuła – redaktorka literacka, historyczka " +#~ "literatury, doktor nauk humanistycznych, absolwentka Wydziału Polonistyki " +#~ "Uniwersytetu Warszawskiego i Szkoły Nauk Społecznych przy IFiS PAN. " +#~ "Zawodowo i naukowo zajmuje się polskim romantyzmem, historią idei i " +#~ "teorią kultury.

                        \r\n" +#~ "\r\n" +#~ "

                        Paweł Kozioł – redaktor literacki. Ur. 1979, doktor " +#~ "nauk humanistycznych specjalizujący się w literaturze dawnej, absolwent " +#~ "Wydziału Polonistyki Uniwersytetu Warszawskiego oraz Dulwich College w " +#~ "Londynie. Poeta, krytyk literacki, stypendysta Ministerstwa Kultury i " +#~ "Dziedzictwa Narodowego (2010).

                        \r\n" +#~ "\r\n" +#~ "

                        Paulina Choromańska – redaktorka techniczna, " +#~ "studentka II roku studiów magisterskich w Instytucie Informacji Naukowej " +#~ "i Studiów Bibliologicznych UW. Pracuje również w Pracowni Dokumentacji " +#~ "Teatru w Instytucie Teatralnym im. Z. Raszewskiego w Warszawie.

                        \r\n" +#~ "\r\n" +#~ "

                        Aneta Rawska - redaktorka techniczna, studentka II " +#~ "roku studiów magisterskich w Instytucie Informacji Naukowej i Studiów " +#~ "Bibliologicznych UW, miłośniczka wypieków i dobrej kuchni. Od 2009 roku " +#~ "prowadzi serwis koła PZW nr 21 w Wołominie.

                        \r\n" +#~ msgstr "" +#~ "

                        Дорота А. Ковальська – літературний редактор, " +#~ "мовознавець, польський філолог та славіст, кандидат гуманітарних наук, " +#~ "ад'юнкт у Відділі польської мови Кресів в Інституті польської мови в " +#~ "Польській Академії Наук, де займається історією та сучасністю польської " +#~ "мови в Україні. Її хобі - співати архаїчні українські та російські пісні; " +#~ "велосипедистка.

                        \r\n" +#~ "\r\n" +#~ "

                        Александра Секула – літературний редактор, історик " +#~ "літератури, кандидат гуманітарних наук, випускниця Факультету польської " +#~ "філології Варшавського університету та Школи Суспільних Наук Інституту " +#~ "філософії та соціології Польської академії наук. Професійно та науково " +#~ "займається польським романтизмом, історією ідеї та теорією культури.

                        " +#~ "\r\n" +#~ "\r\n" +#~ "

                        Павел Козіол – літературний редактор, народжений у " +#~ "1979, кандидат гуманітарних наук, який спеціалізується у давній " +#~ "літературі, випускник Факультету Полоністики Варшавського університету та " +#~ "Далідж-Коледжу у Лондоні. Поет, літературний критик, стипендист " +#~ "Міністерства культури та національної спадщини (2010).

                        \r\n" +#~ "\r\n" +#~ "

                        Пауліна Хороманська – технічний редактор, студентка " +#~ "ІІ курсу магістратури в Інституті наукової інформації та " +#~ "бібліотекознавства Варшавського Університету. Працює також у Відділі " +#~ "документації театру в Театральному Інституті ім. З. Рашевського у Варшаві." +#~ "

                        \r\n" +#~ "\r\n" +#~ "

                        Анета Равська - технічний редактор, студентка ІІ " +#~ "курсу магістратури в Інституті наукової інформації та бібліотекознавства " +#~ "Варшавського Університету, любителька випічки та доброї кухні. З 2009 " +#~ "року займається інтернетною сторінкою гуртка Польської спілки рибалок № " +#~ "21 у Воломіні.

                        \r\n" + +#~ msgid "Wesprzyj nas" +#~ msgstr "Підтримайте нас" + +#~ msgid "" +#~ "

                        Przekaż 1% podatku na Wolne Lektury

                        \r\n" +#~ "

                        Fundacja Nowoczesna Polska posiada status Organizacji Pożytku " +#~ "Publicznego dzięki czemu na rozwój projektu Wolne Lektury można przekazać " +#~ "1% swojego podatku. W tym celu należy wypełnić odpowiednią rubrykę w " +#~ "rocznym zeznaniu podatkowym (PIT-36, PIT-37 lub PIT-28). W zeznaniu " +#~ "należy podać nazwę:

                        \r\n" +#~ "Fundacja Nowoczesna Polska
                        \r\n" +#~ "oraz numer z Krajowego Rejestru Sądowego (KRS) 0000070056
                        \r\n" +#~ msgstr "" +#~ "

                        Перекажіть 1% податку на Wolne Lektury

                        \r\n" +#~ "

                        Фонд Сучасна Польща (Fundacja Nowoczesna Polska) має статус " +#~ "Організації суспільної користі, тому на розвиток проекту Wolne Lektury " +#~ "можна переказати 1% свого податку. Для цього потрібно заповнити " +#~ "відповідне поле у річній податковій декларації (PIT-36, PIT-37 або " +#~ "PIT-28). У декларації потрібно вказати назву Фонду:

                        \r\n" +#~ "Fundacja Nowoczesna Polska
                        \r\n" +#~ "та номер з Національного Судового Реєстру (KRS) 0000070056
                        \r\n" + +#~ msgid "" +#~ "

                        Przekaż darowiznę na Wolne Lektury

                        \r\n" +#~ "

                        Każda wpłacona kwota zostanie przeznaczona na rozwój zasobów naszej " +#~ "biblioteki. Wystarczy dokonać przelewu na konto:

                        \r\n" +#~ "\r\n" +#~ "Fundacja Nowoczesna Polska
                        \r\n" +#~ "ul. Marszałkowska 84/92 lok. 125
                        \r\n" +#~ "00-514 Warszawa
                        \r\n" +#~ "Nr konta: PKO BP 46 10201097 0000 7502 0001 6766
                        \r\n" +#~ "Tytuł przelewu: Darowizna na Wolne Lektury
                        \r\n" +#~ msgstr "" +#~ "

                        Зробіть благодійний внесок на Wolne Lektury

                        \r\n" +#~ "

                        Усі отримані кошти буде використано для розвитку колекції нашої " +#~ "бібліотеки. Єдине, що потрібно зробити, це перерахувати кошти на рахунок:" +#~ "

                        \r\n" +#~ "\r\n" +#~ "Fundacja Nowoczesna Polska
                        \r\n" +#~ "ul. Marszałkowska 84/92 lok. 125
                        \r\n" +#~ "00-514 Warszawa
                        \r\n" +#~ "Номер банківського рахунку: PKO BP 46 10201097 0000 7502 0001 6766
                        " +#~ "\r\n" +#~ "Призначення платежу: Благодійний внесок на Wolne Lektury
                        \r\n" + +#~ msgid "Włącz się w prace" +#~ msgstr "Візьміть участь у нашій діяльності" + +#~ msgid "" +#~ "
                          \r\n" +#~ "
                        • Zostań naszym redaktorem, programistą lub tłumaczem
                        • \r\n" +#~ "
                        • Zdobądź nowe umiejętności i doświadczenie
                        • \r\n" +#~ "
                        • Weź udział w otwartym projekcie i twórz innowacyjną bibliotekę " +#~ "internetową
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Zapraszamy wszystkie osoby, które chcą współtworzyć nasz projekt. " +#~ "Współpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " +#~ "literaturą, redagowaniem tekstów i projektami informatycznymi. Oferujemy " +#~ "profesjonalne szkolenia i stałą pomoc merytoryczną. Wolontariusze mogą " +#~ "pracować zdalnie lub w siedzibie Fundacji.

                        \r\n" +#~ "

                        Organizujemy również praktyki studenckie – nawiązaliśmy współpracę z " +#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " +#~ "Karier UKSW oraz Wydziałem Fizyki UW.

                        \r\n" +#~ "\r\n" +#~ "

                        Jak się do nas zgłosić?

                        \r\n" +#~ "

                        Wszystkie zainteresowane osoby prosimy o przysłanie maila na adres marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.

                        \r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\r\n" +#~ msgstr "" +#~ "
                          \r\n" +#~ "
                        • Стань нашим редактором, програмістом або перекладачем
                        • \r\n" +#~ "
                        • Здобудь нові уміння та досвід
                        • \r\n" +#~ "
                        • Візьми участь у відкритому проекті та допоможи творити інноваційну " +#~ "інтернет-бібліотеку
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Запрошуємо усіх, хто хоче допомогти у нашому проекті. Співпрацюємо зі " +#~ "студентами, вчителями та усіма, хто цікавиться літературою, редагуванням " +#~ "текстів та комп’ютерними проектами. Ми пропонуємо професійні тренінги та " +#~ "постійну змістовну підтримку. Волонтери можуть працювати в електронному " +#~ "режимі або в офісі Фонду.

                        \r\n" +#~ "

                        Також ми організуємо студентські практики - розпочали співпрацю з " +#~ "Інститутом наукової інформації та бібліотекознавчих досліджень " +#~ "Варшавського Університету, Студентським центром зайнятості Університету " +#~ "Кардинала Стефана Вишинського та Факультетом Фізики Варшавського " +#~ "Університету.

                        \r\n" +#~ "\r\n" +#~ "

                        Як до нас приєднатися?

                        \r\n" +#~ "

                        Усіх зацікавлених просимо вислати повідомлення на адресу marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.

                        \r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\r\n" + +#~ msgid "" +#~ "

                        Kogo szukamy?

                        \r\n" +#~ "\r\n" +#~ "

                        Redaktorów technicznych (skład tekstu)

                        \r\n" +#~ "

                        Skład jest pierwszym etapem pracy nad tekstem. Za pomocą znaczników " +#~ "języka WL-XML nadajemy tekstowi pożądaną formę i umożliwiamy wyświetlenie " +#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na Platformie Redakcyjnej, " +#~ "która pozwala na zautomatyzowanie dużej części pracy.

                        \r\n" +#~ "\r\n" +#~ "

                        Kto może zostać redaktorem technicznym?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy – po krótkim szkoleniu.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Więcej informacji o redakcji technicznej znajdziecie na stronie redakcji Wolnych Lektur

                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Redaktorów literackich (merytorycznych)

                        \r\n" +#~ "

                        Redakcja literacka obejmuje korektę, uwspółcześnienia oraz dodawanie " +#~ "przypisów i motywów literackich. To unikalna możliwość zdobycia " +#~ "doświadczenia w cyfrowej edycji tekstów.

                        \r\n" +#~ "\r\n" +#~ "

                        Kto może zostać redaktorem literackim?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Osoby, które mają doświadczenie w redakcji tekstów literackich,
                        • " +#~ "\r\n" +#~ "
                        • Studenci i absolwenci studiów humanistycznych, którzy chcą takie " +#~ "doświadczenie zdobyć.
                        • \r\n" +#~ "
                        \r\n" +#~ "

                        Więcej informacji o redakcji merytorycznej znajdziecie na stronie redakcji Wolnych Lektur

                        \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Tłumaczy

                        \r\n" +#~ "

                        Strona WolneLektury.pl jest dostępna w siedmiu językach obcych – " +#~ "angielskim, francuskim, niemieckim, hiszpańskim, litewskim, rosyjskim " +#~ "oraz ukraińskim. Użytkownikami biblioteki jest ponad 200 tysięcy osób z " +#~ "zagranicy, a już niedługo nasze zbiory obejmą również dzieła w językach " +#~ "obcych. Dlatego potrzebujemy na bieżąco tłumaczyć nowe informacje " +#~ "pojawiające się na stronie.

                        \r\n" +#~ "

                        Kto może pomóc w tłumaczeniach?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy, kto dobrze zna co najmniej jeden z powyższych języków.
                        • " +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Programistów

                        \r\n" +#~ "

                        Poza samą stroną Wolnych Lektur tworzymy również:

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • narzędzia redakcyjne,
                        • \r\n" +#~ "
                        • konwertery do różnych formatów e-booków,
                        • \r\n" +#~ "
                        • aplikacje mobile ułatwiające dostęp do naszych zasobów.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " +#~ "jQuery, LaTeX, Java.\r\n" +#~ "Tworzone przez nas oprogramowanie udostępniamy na wolnej licencji.

                        \r\n" +#~ "

                        Kto może pomóc w pracach programistycznych?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Każdy, kto umie i chciałby zdobyć punkty do karmy za udział w " +#~ "otwartym projekcie programistycznym. ;)
                        • \r\n" +#~ "
                        \r\n" +#~ msgstr "" +#~ "

                        Кого ми шукаємо?

                        \r\n" +#~ "\r\n" +#~ "

                        Технічних редакторів (верстка)

                        \r\n" +#~ "

                        Верстка - це перший етап праці над текстом. За допомогою тегів мови " +#~ "WL-XML надаємо текстам потрібний вигляд та робимо можливим їх публікацію " +#~ "на веб-сайті. Технічне редагування виконується на Редакційній платформі, яка дозволяє " +#~ "автоматизувати велику частину праці.

                        \r\n" +#~ "\r\n" +#~ "

                        Хто може стати технічним редактором?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Кожен - після короткого тренінгу.
                        • \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Більше інформації про технічне редагування знайдете на сайті редакції Wolne Lektury

                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Літературних редакторів

                        \r\n" +#~ "

                        Літературне редагування включає в себе коректу, осучаснення тексту, а " +#~ "також додавання приміток та літературних мотивів. Це унікальна можливість " +#~ "здобути досвід у цифровій обробці текстів.

                        \r\n" +#~ "\r\n" +#~ "

                        Хто може стати літературним редактором?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Той, хто має досвід у редагуванні літературних текстів,
                        • \r\n" +#~ "
                        • Студенти та випускники гуманітарних факультетів, які хочуть здобути " +#~ "такий досвід.
                        • \r\n" +#~ "
                        \r\n" +#~ "

                        Більше інформації про літературне редагування знайдете на сайті редакції Wolne Lektury

                        \r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Перекладачів

                        \r\n" +#~ "

                        Сайт WolneLektury.pl доступний на семи іноземних мовах – англійській, " +#~ "французькій, німецькій, іспанській, литовській, російській та " +#~ "українській. Бібліотекою користується більше ніж 200 тисяч закордонних " +#~ "відвічувачів, а незабаром у нашій колекцій знайдуться також твори на " +#~ "іноземних мовах. Тому нам потрібно систематично перекладати нову " +#~ "інформацію, яка з’являється на сайті.

                        \r\n" +#~ "

                        Хто може допомогти у перекладах?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Кожний, хто добре володіє принаймні однією з вищезгаданих мов.
                        • " +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Програмістів

                        \r\n" +#~ "

                        Крім самого сайту Wolne Lektury ми творимо також:

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • редакційні інструменти,
                        • \r\n" +#~ "
                        • конвертери для різних форматів електронних книг,
                        • \r\n" +#~ "
                        • мобільні аплікації, які роблять можливим доступ до наших колекцій.\r\n" +#~ "
                        \r\n" +#~ "\r\n" +#~ "

                        Ми користуємося такими технологіями, як Python, Django, XHTML, " +#~ "JavaScript, jQuery, LaTeX, Java.\r\n" +#~ "Програмне забезпечення, яке створюємо, надається на вільній ліцензії.

                        \r\n" +#~ "

                        Хто може допомогти у програмуванні?

                        \r\n" +#~ "
                          \r\n" +#~ "
                        • Кожен, хто вміє і хоче за участь у відкритому програмістичному " +#~ "проекті здобути додаткові бали до карми. ;)
                        • \r\n" +#~ "
                        \r\n" + +#~ msgid "Prawa" +#~ msgstr "Права" + +#~ msgid "" +#~ "

                        Większość utworów w bibliotece nie jest chroniona prawem autorskim i " +#~ "znajduje się w domenie publicznej, co oznacza, że można je swobodnie " +#~ "publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi " +#~ "materiałami (przypisy, motywy literackie etc.), które podlegają prawu " +#~ "autorskiemu, to te dodatkowe materiały udostępnione są na licencji Uznanie " +#~ "autorstwa-Na tych samych warunkach 3.0. Publikujemy również kilka " +#~ "utworów, które autorzy lub spadkobiercy praw udostępnili na wolnej " +#~ "licencji Uznanie autorstwa-Na tych samych warunkach 3.0.

                        " +#~ msgstr "" +#~ "

                        Більшість творів у бібліотеці не охороняються авторським правом і " +#~ "являються частиною суспільного надбання, тому їх можна вільно публікувати " +#~ "та розповсюджувати. Якщо тексти супроводжуються додатковими матеріалами " +#~ "(примітками, літературними мотивами тощо), які охороняються авторським " +#~ "правом, доступ до цих додаткових матеріалів надається на умовах ліцензії " +#~ "Із " +#~ "зазначенням імені автора – На тих же умовах 3.0. Також ми публікуємо " +#~ "декілька творів, до яких автори або спадкоємці прав надали доступ на " +#~ "підставі вільної ліцензії Із зазначенням імені автора – На тих же умовах 3.0.

                        " diff --git a/src/infopages/migrations/0001_initial.py b/src/infopages/migrations/0001_initial.py new file mode 100644 index 000000000..2c3f4f07a --- /dev/null +++ b/src/infopages/migrations/0001_initial.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='InfoPage', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('main_page', models.IntegerField(null=True, verbose_name='main page priority', blank=True)), + ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), + ('title', models.CharField(max_length=120, verbose_name='Title', blank=True)), + ('title_de', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('title_en', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('title_es', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('title_fr', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('title_it', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('title_lt', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('title_pl', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('title_ru', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('title_uk', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('left_column', models.TextField(verbose_name='left column', blank=True)), + ('left_column_de', models.TextField(null=True, verbose_name='left column', blank=True)), + ('left_column_en', models.TextField(null=True, verbose_name='left column', blank=True)), + ('left_column_es', models.TextField(null=True, verbose_name='left column', blank=True)), + ('left_column_fr', models.TextField(null=True, verbose_name='left column', blank=True)), + ('left_column_it', models.TextField(null=True, verbose_name='left column', blank=True)), + ('left_column_lt', models.TextField(null=True, verbose_name='left column', blank=True)), + ('left_column_pl', models.TextField(null=True, verbose_name='left column', blank=True)), + ('left_column_ru', models.TextField(null=True, verbose_name='left column', blank=True)), + ('left_column_uk', models.TextField(null=True, verbose_name='left column', blank=True)), + ('right_column', models.TextField(verbose_name='right column', blank=True)), + ('right_column_de', models.TextField(null=True, verbose_name='right column', blank=True)), + ('right_column_en', models.TextField(null=True, verbose_name='right column', blank=True)), + ('right_column_es', models.TextField(null=True, verbose_name='right column', blank=True)), + ('right_column_fr', models.TextField(null=True, verbose_name='right column', blank=True)), + ('right_column_it', models.TextField(null=True, verbose_name='right column', blank=True)), + ('right_column_lt', models.TextField(null=True, verbose_name='right column', blank=True)), + ('right_column_pl', models.TextField(null=True, verbose_name='right column', blank=True)), + ('right_column_ru', models.TextField(null=True, verbose_name='right column', blank=True)), + ('right_column_uk', models.TextField(null=True, verbose_name='right column', blank=True)), + ], + options={ + 'ordering': ('main_page', 'slug'), + 'verbose_name': 'info page', + 'verbose_name_plural': 'info pages', + }, + bases=(models.Model,), + ), + ] diff --git a/src/infopages/migrations/0002_auto_20151221_1225.py b/src/infopages/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..d5755e7ef --- /dev/null +++ b/src/infopages/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('infopages', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='infopage', + name='slug', + field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), + ), + migrations.AlterField( + model_name='infopage', + name='title', + field=models.CharField(max_length=120, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_de', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_en', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_es', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_fr', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_it', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_lt', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_pl', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_ru', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_uk', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + ] diff --git a/src/infopages/migrations/__init__.py b/src/infopages/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/infopages/models.py b/src/infopages/models.py new file mode 100644 index 000000000..cf9e9bf66 --- /dev/null +++ b/src/infopages/models.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.db import models +from django.utils.translation import ugettext_lazy as _ + +class InfoPage(models.Model): + """An InfoPage is used to display a two-column flatpage.""" + + main_page = models.IntegerField(_('main page priority'), null=True, blank=True) + slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True) + title = models.CharField(_('title'), max_length=120, blank=True) + left_column = models.TextField(_('left column'), blank=True) + right_column = models.TextField(_('right column'), blank=True) + + class Meta: + ordering = ('main_page', 'slug',) + verbose_name = _('info page') + verbose_name_plural = _('info pages') + + def __unicode__(self): + return self.title + + @models.permalink + def get_absolute_url(self): + return ('infopage', [self.slug]) diff --git a/src/infopages/templates/infopages/infopage.html b/src/infopages/templates/infopages/infopage.html new file mode 100755 index 000000000..75dae0850 --- /dev/null +++ b/src/infopages/templates/infopages/infopage.html @@ -0,0 +1,23 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block titleextra %}{{ page.title }}{% endblock %} + +{% block metadescription %}{{ left_column|striptags|truncatewords:10 }}{% endblock %} + +{% block body %} +

                        {{ page.title }}

                        + + {% autoescape off %} +
                        +
                        + {{ left_column }} +
                        +
                        +
                        +
                        + {{ right_column }} +
                        +
                        + {% endautoescape %} +{% endblock %} diff --git a/src/infopages/templates/infopages/on_main.html b/src/infopages/templates/infopages/on_main.html new file mode 100755 index 000000000..5d80dad57 --- /dev/null +++ b/src/infopages/templates/infopages/on_main.html @@ -0,0 +1,3 @@ +{% for page in objects %} +
                      • {{ page.title }}
                      • +{% endfor %} diff --git a/src/infopages/templatetags/__init__.py b/src/infopages/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/infopages/templatetags/infopages_tags.py b/src/infopages/templatetags/infopages_tags.py new file mode 100755 index 000000000..d7c93ca8f --- /dev/null +++ b/src/infopages/templatetags/infopages_tags.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import template +from infopages.models import InfoPage + +register = template.Library() + + +@register.inclusion_tag('infopages/on_main.html') +def infopages_on_main(): + objects = InfoPage.objects.exclude(main_page=None) + return {"objects": objects} diff --git a/src/infopages/translation.py b/src/infopages/translation.py new file mode 100644 index 000000000..e002482a3 --- /dev/null +++ b/src/infopages/translation.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# + +from modeltranslation.translator import translator, TranslationOptions +from infopages.models import InfoPage + +class InfoPageTranslationOptions(TranslationOptions): + fields = ('title', 'left_column', 'right_column') + +translator.register(InfoPage, InfoPageTranslationOptions) diff --git a/src/infopages/urls.py b/src/infopages/urls.py new file mode 100755 index 000000000..206f7cbf9 --- /dev/null +++ b/src/infopages/urls.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + + +urlpatterns = patterns('infopages.views', + url(r'^(?P[a-zA-Z0-9_-]+)/$', 'infopage', name='infopage'), +) + diff --git a/src/infopages/views.py b/src/infopages/views.py new file mode 100644 index 000000000..d5dee7630 --- /dev/null +++ b/src/infopages/views.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.shortcuts import render_to_response, get_object_or_404 +from django.template import RequestContext, Template, TemplateSyntaxError + +from infopages.models import InfoPage + + +def infopage(request, slug): + page = get_object_or_404(InfoPage, slug=slug) + rc = RequestContext(request) + try: + left_column = Template(page.left_column).render(rc) + except TemplateSyntaxError: + left_column = '' + + try: + right_column = Template(page.right_column).render(rc) + except TemplateSyntaxError: + left_column = '' + + return render_to_response('infopages/infopage.html', locals(), + context_instance=RequestContext(request)) diff --git a/src/lesmianator/__init__.py b/src/lesmianator/__init__.py new file mode 100644 index 000000000..54eee5b94 --- /dev/null +++ b/src/lesmianator/__init__.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# + +# Leśmianator do działania wymaga pliku dictionary.p w katalogu aplikacji +# plik ten powinien zawierać słownik postaci: +# <3-znakowy ciąg> => => diff --git a/src/lesmianator/locale/pl/LC_MESSAGES/django.mo b/src/lesmianator/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..a072a55da Binary files /dev/null and b/src/lesmianator/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/lesmianator/locale/pl/LC_MESSAGES/django.po b/src/lesmianator/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..959b77882 --- /dev/null +++ b/src/lesmianator/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,47 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-01-27 16:38+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \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%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2)\n" + +#: models.py:26 +msgid "slug" +msgstr "slug" + +#: models.py:27 +msgid "text" +msgstr "tekst" + +#: models.py:29 +msgid "extra information" +msgstr "dodatkowe informacje" + +#: models.py:30 +msgid "creation date" +msgstr "data utworzenia" + +#: models.py:31 +msgid "last view date" +msgstr "data ostatniego obejrzenia" + +#: models.py:32 +msgid "view count" +msgstr "licznik obejrzeń" + +#: models.py:104 +msgid "Continuations file" +msgstr "plik kontynuacji" diff --git a/src/lesmianator/management/__init__.py b/src/lesmianator/management/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/lesmianator/management/commands/__init__.py b/src/lesmianator/management/commands/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/lesmianator/management/commands/lesmianator.py b/src/lesmianator/management/commands/lesmianator.py new file mode 100644 index 000000000..b2341ab31 --- /dev/null +++ b/src/lesmianator/management/commands/lesmianator.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import re +from cPickle import dump +from optparse import make_option + +from django.core.management.base import BaseCommand +from django.core.management.color import color_style +from django.conf import settings + +from catalogue.models import Book, Tag + +# extract text from text file +re_text = re.compile(r'\n{3,}(.*?)\n*-----\n', re.S).search + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-t', '--tags', dest='tags', metavar='SLUG,...', + help='Use only books tagged with this tags'), + make_option('-i', '--include', dest='include', metavar='SLUG,...', + help='Include specific books by slug'), + make_option('-e', '--exclude', dest='exclude', metavar='SLUG,...', + help='Exclude specific books by slug') + ) + help = 'Prepare data for Lesmianator.' + + def handle(self, *args, **options): + self.style = color_style() + verbose = int(options.get('verbosity')) + tags = options.get('tags') + include = options.get('include') + exclude = options.get('exclude') + + try: + path = settings.LESMIANATOR_PICKLE + except: + print self.style.ERROR('LESMIANATOR_PICKLE not set in the settings.') + return + + books = [] + + if include: + books += list(Book.objects.filter(slug__in=include.split(',')).only('slug', 'txt_file')) + + if tags: + books += list(Book.tagged.with_all(Tag.objects.filter(slug__in=tags.split(','))).only('slug', 'txt_file')) + elif not include: + books = list(Book.objects.all().only('slug', 'txt_file')) + + if exclude: + books = [book for book in books if book.slug not in exclude.split(',')] + + books = set(books) + + lesmianator = {} + processed = skipped = 0 + for book in books: + if verbose >= 2: + print 'Parsing', book.slug + if not book.txt_file: + if verbose >= 1: + print self.style.NOTICE('%s has no TXT file' % book.slug) + skipped += 1 + continue + f = open(book.txt_file.path) + m = re_text(f.read()) + if not m: + print self.style.ERROR("Unknown text format: %s" % book.slug) + skipped += 1 + continue + + processed += 1 + last_word = '' + text = unicode(m.group(1), 'utf-8').lower() + for letter in text: + mydict = lesmianator.setdefault(last_word, {}) + mydict.setdefault(letter, 0) + mydict[letter] += 1 + last_word = last_word[-2:] + letter + f.close() + + if not processed: + if skipped: + print self.style.ERROR("No books with TXT files found") + else: + print self.style.ERROR("No books found") + return + + try: + dump(lesmianator, open(path, 'w')) + except: + print self.style.ERROR("Couldn't write to $s" % path) + return + + dump(lesmianator, open(path, 'w')) + if verbose >= 1: + print "%d processed, %d skipped" % (processed, skipped) + print "Results dumped to %s" % path diff --git a/src/lesmianator/migrations/0001_initial.py b/src/lesmianator/migrations/0001_initial.py new file mode 100644 index 000000000..17627e682 --- /dev/null +++ b/src/lesmianator/migrations/0001_initial.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import jsonfield.fields +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('contenttypes', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Continuations', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('pickle', models.FileField(upload_to=b'lesmianator', verbose_name='Continuations file')), + ('object_id', models.PositiveIntegerField()), + ('content_type', models.ForeignKey(to='contenttypes.ContentType')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Poem', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('slug', models.SlugField(max_length=120, verbose_name='Slug')), + ('text', models.TextField(verbose_name='text')), + ('created_from', jsonfield.fields.JSONField(null=True, verbose_name='Additional information', blank=True)), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date')), + ('seen_at', models.DateTimeField(auto_now_add=True, verbose_name='last view date')), + ('view_count', models.IntegerField(default=1, verbose_name='view count')), + ('created_by', models.ForeignKey(to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.AlterUniqueTogether( + name='continuations', + unique_together=set([('content_type', 'object_id')]), + ), + ] diff --git a/src/lesmianator/migrations/0002_auto_20151221_1225.py b/src/lesmianator/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..29a33a85c --- /dev/null +++ b/src/lesmianator/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import jsonfield.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('lesmianator', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='poem', + name='created_from', + field=jsonfield.fields.JSONField(null=True, verbose_name='extra information', blank=True), + ), + migrations.AlterField( + model_name='poem', + name='slug', + field=models.SlugField(max_length=120, verbose_name='slug'), + ), + ] diff --git a/src/lesmianator/migrations/__init__.py b/src/lesmianator/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/lesmianator/models.py b/src/lesmianator/models.py new file mode 100644 index 000000000..5db02c2ae --- /dev/null +++ b/src/lesmianator/models.py @@ -0,0 +1,178 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import cPickle +from datetime import datetime +from random import randint +from StringIO import StringIO + +from django.core.files.base import ContentFile +from django.db import models +from django.utils.timezone import utc +from django.utils.translation import ugettext_lazy as _ +from django.core.urlresolvers import reverse +from django.contrib.auth.models import User +from django.contrib.contenttypes.models import ContentType +from django.contrib.contenttypes.fields import GenericForeignKey +from django.conf import settings + +from jsonfield import JSONField +from catalogue.models import Book, Tag + + +class Poem(models.Model): + slug = models.SlugField(_('slug'), max_length=120, db_index=True) + text = models.TextField(_('text')) + created_by = models.ForeignKey(User, null=True) + created_from = JSONField(_('extra information'), null=True, blank=True) + created_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False) + seen_at = models.DateTimeField(_('last view date'), auto_now_add=True, editable=False) + view_count = models.IntegerField(_('view count'), default=1) + + try: + f = open(settings.LESMIANATOR_PICKLE) + global_dictionary = cPickle.load(f) + f.close() + except: + global_dictionary = {} + + def visit(self): + self.view_count += 1 + self.seen_at = datetime.utcnow().replace(tzinfo=utc) + self.save() + + def __unicode__(self): + return "%s (%s...)" % (self.slug, self.text[:20]) + + @staticmethod + def choose_letter(word, continuations): + if word not in continuations: + return u'\n' + + choices = sum((continuations[word][letter] + for letter in continuations[word])) + r = randint(0, choices - 1) + + for letter in continuations[word]: + r -= continuations[word][letter] + if r < 0: + return letter + + @classmethod + def write(cls, continuations=None, length=3, min_lines=2, maxlen=1000): + if continuations is None: + continuations = cls.global_dictionary + if not continuations: + return '' + + letters = [] + word = u'' + + finished_stanza_verses = 0 + current_stanza_verses = 0 + verse_start = True + + char_count = 0 + + # do `min_lines' non-empty verses and then stop, + # but let Lesmianator finish his last stanza. + while finished_stanza_verses < min_lines and char_count < maxlen: + letter = cls.choose_letter(word, continuations) + letters.append(letter) + word = word[-length + 1:] + letter + char_count += 1 + + if letter == u'\n': + if verse_start: + finished_stanza_verses += current_stanza_verses + current_stanza_verses = 0 + else: + current_stanza_verses += 1 + verse_start = True + else: + verse_start = False + + return ''.join(letters).strip() + + def get_absolute_url(self): + return reverse('get_poem', kwargs={'poem': self.slug}) + + +class Continuations(models.Model): + pickle = models.FileField(_('Continuations file'), upload_to='lesmianator') + content_type = models.ForeignKey(ContentType) + object_id = models.PositiveIntegerField() + content_object = GenericForeignKey('content_type', 'object_id') + + class Meta: + unique_together = (('content_type', 'object_id'), ) + + def __unicode__(self): + return "Continuations for: %s" % unicode(self.content_object) + + @staticmethod + def join_conts(a, b): + for pre in b: + a.setdefault(pre, {}) + for post in b[pre]: + a[pre].setdefault(post, 0) + a[pre][post] += b[pre][post] + return a + + @classmethod + def for_book(cls, book, length=3): + # count from this book only + output = StringIO() + wldoc = book.wldocument(parse_dublincore=False) + output = wldoc.as_text(('raw-text',)).get_string() + del wldoc + + conts = {} + last_word = '' + for letter in output.decode('utf-8').strip().lower(): + mydict = conts.setdefault(last_word, {}) + mydict.setdefault(letter, 0) + mydict[letter] += 1 + last_word = last_word[-length+1:] + letter + # add children + return reduce(cls.join_conts, + (cls.get(child) for child in book.children.all().iterator()), + conts) + + @classmethod + def for_set(cls, tag): + books = Book.tagged_top_level([tag]) + cont_tabs = (cls.get(b) for b in books.iterator()) + return reduce(cls.join_conts, cont_tabs) + + @classmethod + def get(cls, sth): + object_type = ContentType.objects.get_for_model(sth) + should_keys = set([sth.id]) + if isinstance(sth, Tag): + should_keys = set(b.pk for b in Book.tagged.with_any((sth,)).iterator()) + try: + obj = cls.objects.get(content_type=object_type, object_id=sth.id) + if not obj.pickle: + raise cls.DoesNotExist + f = open(obj.pickle.path) + keys, conts = cPickle.load(f) + f.close() + if set(keys) != should_keys: + raise cls.DoesNotExist + return conts + except cls.DoesNotExist: + if isinstance(sth, Book): + conts = cls.for_book(sth) + elif isinstance(sth, Tag): + conts = cls.for_set(sth) + else: + raise NotImplementedError('Lesmianator continuations: only Book and Tag supported') + + c, created = cls.objects.get_or_create(content_type=object_type, object_id=sth.id) + c.pickle.save(sth.slug+'.p', ContentFile(cPickle.dumps((should_keys, conts)))) + c.save() + return conts + + diff --git a/src/lesmianator/templates/lesmianator/lesmianator.html b/src/lesmianator/templates/lesmianator/lesmianator.html new file mode 100644 index 000000000..cc7decbc7 --- /dev/null +++ b/src/lesmianator/templates/lesmianator/lesmianator.html @@ -0,0 +1,60 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} + +{% block titleextra %}Leśmianator{% endblock %} + +{% block metadescription %}Stwórz własny wierszmiks z utworów znajdujących się na Wolnych Lekturach.{% endblock %} + +{% block bodyid %}lesmianator{% endblock %} + +{% block body %} +

                        Leśmianator

                        + +
                        +
                        +

                        Leśmianator tworzy wierszmiksy – dzięki niemu + napiszesz wiersz jednym kliknięciem. + W nowej odsłonie nowe możliwości zabawy – teraz możesz zdecydować, co wrzucasz do miksera, + a swoimi dziełami podzielić się z przyjaciółmi!

                        +

                        Przygotowaliśmy kilka propozycji na start – możesz wybrać jedną z nich, + albo ułożyć sobie własną, niepowtarzalną mieszankę.

                        +
                        +
                        + +
                        +
                        +

                        Miksuj utwory

                        +

                        Możesz zmiksować całą lirykę w naszej bibliotece + albo tylko jeden konkretny utwór. Jak? Wejdź na + stronę utworu, + kliknij w link „miksuj ten utwór” – i gotowe!

                        + +

                        Miksuj półki

                        +

                        Załóż konto, poukładaj swoje ulubione książki na półkach i miksuj + w dowolnych konfiguracjach. Nic prostszego, niż zmieszać + Leśmiana z + Tetmajerem, + a Żeromskiego z + Sienkiewiczem + – wystarczy wrzucić ich utwory na półkę i kliknąć + w link „miksuj utwory z tej półki”.

                        + +

                        Dziel się z innymi

                        +

                        Wyszedł Ci wyjątkowo udany wierszmiks? Znajdziesz pod nim link, przy pomocy + którego możesz się nim podzielić z przyjaciółmi.

                        + +

                        Miłej zabawy!

                        + +
                        +
                        +{% endblock %} diff --git a/src/lesmianator/templates/lesmianator/poem.html b/src/lesmianator/templates/lesmianator/poem.html new file mode 100644 index 000000000..4c4726f0f --- /dev/null +++ b/src/lesmianator/templates/lesmianator/poem.html @@ -0,0 +1,65 @@ +{% extends "catalogue/viewer_base.html" %} +{% load i18n %} + + +{% block title %}Leśmianator{% endblock %} + + +{% block menu %} +
                      • Wolne Lektury przepuszczone przez mikser.
                      • + {% if shelf or not books %} + {# shelf or global mixing #} +
                      • Twórzże się jeszcze raz!
                      • + {% else %}{% if book %} +
                      • Twórzże się jeszcze raz!
                      • + {% endif %}{% endif %} +{% endblock menu %} + + + +{% block main-text %} +
                        +

                        + Leśmianator + *** +

                        + {{ poem.text|linebreaksbr }} +
                        +

                        O utworze

                        +

                        + Aby pokazać innym ten utwór, użyj linku:
                        + +

                        +
                        + {% if book %} +

                        Tekst powstał przez zmiksowanie utworu + {{ book.title }}.
                        + Zmiksuj go ponownie + albo zobacz, co jeszcze możesz zamieszać.

                        + {% else %}{% if books %} +

                        Tekst powstał przez zmiksowanie utworów:

                        + + {% if shelf %} +

                        + Zmiksuj + półkę {{ shelf.name }} + jeszcze raz, albo + zobacz, co jeszcze możesz zamieszać.

                        + {% else %} +

                        Zobacz, + jak łatwo możesz stworzyć własny wierszmiks.

                        + {% endif %} + {% else %} +

                        Wiersz powstał przez zmiksowanie ze sobą całej liryki z Wolnych Lektur. + Spróbuj jeszcze raz, albo + zobacz, co jeszcze możesz zamieszać.

                        + {% endif %}{% endif %} +
                        +
                        +
                        +
                        +{% endblock main-text %} diff --git a/src/lesmianator/urls.py b/src/lesmianator/urls.py new file mode 100644 index 000000000..1770140b9 --- /dev/null +++ b/src/lesmianator/urls.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import url, patterns + +urlpatterns = patterns('lesmianator.views', + url(r'^$', 'main_page', name='lesmianator'), + url(r'^wiersz/$', 'new_poem', name='new_poem'), + url(r'^lektura/(?P[a-z0-9-]+)/$', 'poem_from_book', name='poem_from_book'), + url(r'^polka/(?P[a-zA-Z0-9-]+)/$', 'poem_from_set', name='poem_from_set'), + url(r'^wiersz/(?P[a-zA-Z0-9-]+)/$', 'get_poem', name='get_poem'), +) + diff --git a/src/lesmianator/views.py b/src/lesmianator/views.py new file mode 100644 index 000000000..1ef4397b3 --- /dev/null +++ b/src/lesmianator/views.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.shortcuts import render_to_response, get_object_or_404 +from django.template import RequestContext +from django.views.decorators import cache + +from catalogue.utils import get_random_hash +from catalogue.models import Book, Tag +from lesmianator.models import Poem, Continuations + + +def main_page(request): + last = Poem.objects.all().order_by('-created_at')[:10] + shelves = Tag.objects.filter(user__username='lesmianator') + + return render_to_response('lesmianator/lesmianator.html', + {"last": last, "shelves": shelves}, + context_instance=RequestContext(request)) + + +@cache.never_cache +def new_poem(request): + user = request.user if request.user.is_authenticated() else None + text = Poem.write() + p = Poem(slug=get_random_hash(text), text=text, created_by=user) + p.save() + + return render_to_response('lesmianator/poem.html', + {"poem": p}, + context_instance=RequestContext(request)) + + +@cache.never_cache +def poem_from_book(request, slug): + book = get_object_or_404(Book, slug=slug) + user = request.user if request.user.is_authenticated() else None + text = Poem.write(Continuations.get(book)) + p = Poem(slug=get_random_hash(text), text=text, created_by=user) + p.created_from = [book.id] + p.save() + + return render_to_response('lesmianator/poem.html', + {"poem": p, "books": [book], "book": book}, + context_instance=RequestContext(request)) + + +@cache.never_cache +def poem_from_set(request, shelf): + user = request.user if request.user.is_authenticated() else None + tag = get_object_or_404(Tag, category='set', slug=shelf) + text = Poem.write(Continuations.get(tag)) + p = Poem(slug=get_random_hash(text), text=text, created_by=user) + books = Book.tagged.with_any((tag,)) + p.created_from = [b.id for b in books] + p.save() + + book = books[0] if len(books) == 1 else None + + return render_to_response('lesmianator/poem.html', + {"poem": p, "shelf": tag, "books": books, "book": book}, + context_instance=RequestContext(request)) + +def get_poem(request, poem): + p = get_object_or_404(Poem, slug=poem) + p.visit() + if p.created_from: + books = Book.objects.filter(id__in=p.created_from) + book = books[0] if len(books) == 1 else None + else: + books = book = None + + return render_to_response('lesmianator/poem.html', + {"poem": p, "books": books, "book": book}, + context_instance=RequestContext(request)) + + diff --git a/src/libraries/__init__.py b/src/libraries/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/libraries/admin.py b/src/libraries/admin.py new file mode 100644 index 000000000..5629e93a0 --- /dev/null +++ b/src/libraries/admin.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin + +from libraries.models import Library, Catalog + + +admin.site.register(Catalog) +admin.site.register(Library) diff --git a/src/libraries/locale/pl/LC_MESSAGES/django.mo b/src/libraries/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..8772f1aae Binary files /dev/null and b/src/libraries/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/libraries/locale/pl/LC_MESSAGES/django.po b/src/libraries/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..58df7be76 --- /dev/null +++ b/src/libraries/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,60 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \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%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" + +#: models.py:8 models.py:26 +msgid "name" +msgstr "nazwa" + +#: models.py:9 models.py:27 +msgid "slug" +msgstr "" + +#: models.py:12 +msgid "catalog" +msgstr "katalog" + +#: models.py:13 +msgid "catalogs" +msgstr "katalogi" + +#: models.py:29 +msgid "url" +msgstr "url" + +#: models.py:30 +msgid "description" +msgstr "opis" + +#: models.py:33 +msgid "library" +msgstr "biblioteka" + +#: models.py:34 +msgid "libraries" +msgstr "biblioteki" + +#: templates/libraries/catalog_view.html:4 +msgid "Libraries directory" +msgstr "Katalog bibliotek" + +#: templates/libraries/main_view.html:4 templates/libraries/main_view.html:8 +msgid "Library directories" +msgstr "Katalogi bibliotek" diff --git a/src/libraries/migrations/0001_initial.py b/src/libraries/migrations/0001_initial.py new file mode 100644 index 000000000..4b210f8b7 --- /dev/null +++ b/src/libraries/migrations/0001_initial.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Catalog', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=120, verbose_name='name')), + ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), + ], + options={ + 'verbose_name': 'catalog', + 'verbose_name_plural': 'catalogs', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Library', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=120, verbose_name='name', blank=True)), + ('slug', models.SlugField(max_length=120, unique=True, null=True, verbose_name='Slug')), + ('url', models.CharField(max_length=120, verbose_name='url', blank=True)), + ('description', models.TextField(verbose_name='Description', blank=True)), + ('catalog', models.ForeignKey(related_name=b'libraries', on_delete=django.db.models.deletion.PROTECT, to='libraries.Catalog')), + ], + options={ + 'verbose_name': 'library', + 'verbose_name_plural': 'libraries', + }, + bases=(models.Model,), + ), + ] diff --git a/src/libraries/migrations/0002_auto_20151221_1225.py b/src/libraries/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..123580d91 --- /dev/null +++ b/src/libraries/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('libraries', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='catalog', + name='slug', + field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), + ), + migrations.AlterField( + model_name='library', + name='description', + field=models.TextField(verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='library', + name='slug', + field=models.SlugField(max_length=120, unique=True, null=True, verbose_name='slug'), + ), + ] diff --git a/src/libraries/migrations/__init__.py b/src/libraries/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/libraries/models.py b/src/libraries/models.py new file mode 100644 index 000000000..c83afbbba --- /dev/null +++ b/src/libraries/models.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.db import models +from django.utils.translation import ugettext_lazy as _ + + +class Catalog(models.Model): + """Represents a dictionary of libraries""" + + name = models.CharField(_('name'), max_length=120, null=False) + slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True) + + class Meta: + verbose_name = _('catalog') + verbose_name_plural = _('catalogs') + + def __unicode__(self): + return self.name + + @models.permalink + def get_absolute_url(self): + return ('libraries_catalog_view', [self.slug]) + + +class Library(models.Model): + """Represent a single library in the libraries dictionary""" + + name = models.CharField(_('name'), max_length=120, blank=True) + slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True, null=True) + catalog = models.ForeignKey(Catalog, null=False, related_name='libraries', on_delete=models.PROTECT) + url = models.CharField(_('url'), max_length=120, blank=True) + description = models.TextField(_('description'), blank=True) + + class Meta: + verbose_name = _('library') + verbose_name_plural = _('libraries') + + def __unicode__(self): + return self.name + + @models.permalink + def get_absolute_url(self): + return ('libraries_library_view', [self.catalog.slug, self.slug]) diff --git a/src/libraries/templates/libraries/catalog_view.html b/src/libraries/templates/libraries/catalog_view.html new file mode 100644 index 000000000..5d35fd973 --- /dev/null +++ b/src/libraries/templates/libraries/catalog_view.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block titleextra %}{% trans 'Libraries directory' %}{% endblock %} + + +{% block body %} +

                        {{ catalog.name }}

                        +
                        +
                        +
                          + {% for library in catalog.libraries.all %} +
                        • {{library.name}}
                        • + {% endfor %} +
                        +
                        +
                        + +{% endblock %} \ No newline at end of file diff --git a/src/libraries/templates/libraries/library_view.html b/src/libraries/templates/libraries/library_view.html new file mode 100644 index 000000000..a97282987 --- /dev/null +++ b/src/libraries/templates/libraries/library_view.html @@ -0,0 +1,13 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block titleextra %}{{ library.name }}{% endblock %} + + +{% block body %} +

                        {{ library.name }}

                        +
                        +

                        Adres strony www: {{library.url}}

                        + {% autoescape off %}{{library.description}}{% endautoescape%} +
                        +{% endblock %} \ No newline at end of file diff --git a/src/libraries/templates/libraries/main_view.html b/src/libraries/templates/libraries/main_view.html new file mode 100644 index 000000000..55e5f0249 --- /dev/null +++ b/src/libraries/templates/libraries/main_view.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block titleextra %}{% trans 'Library directories' %}{% endblock %} + + +{% block body %} +

                        {% trans 'Library directories' %}

                        +
                        +
                        +
                          + {% for catalog in catalogs %} +
                        • {{catalog}}
                        • + {% endfor %} +
                        +
                        +
                        + +{% endblock %} \ No newline at end of file diff --git a/src/libraries/urls.py b/src/libraries/urls.py new file mode 100644 index 000000000..754b17e44 --- /dev/null +++ b/src/libraries/urls.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + + +urlpatterns = patterns('libraries.views', + url(r'^$', 'main_view', name='libraries_main_view'), + url(r'^(?P[a-zA-Z0-9_-]+)$', 'catalog_view', name='libraries_catalog_view'), + url(r'^(?P[a-zA-Z0-9_-]+)/(?P[a-zA-Z0-9_-]+)$', 'library_view', name='libraries_library_view'), +) diff --git a/src/libraries/views.py b/src/libraries/views.py new file mode 100644 index 000000000..7e245adbd --- /dev/null +++ b/src/libraries/views.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.shortcuts import render_to_response, get_object_or_404 +from django.template import RequestContext + +from libraries.models import Catalog, Library + + +def main_view(request): + context = RequestContext(request) + context['catalogs'] = Catalog.objects.all() + return render_to_response('libraries/main_view.html', context_instance=context) + +def catalog_view(request, slug): + context = RequestContext(request) + context['catalog'] = get_object_or_404(Catalog.objects.filter(slug=slug).select_related()) + return render_to_response('libraries/catalog_view.html', context_instance=context) + +def library_view(request, catalog_slug, slug): + context = RequestContext(request) + context['library'] = get_object_or_404(Library.objects.filter(slug=slug).filter(catalog__slug=catalog_slug)) + return render_to_response('libraries/library_view.html', context_instance=context) diff --git a/src/manage.py b/src/manage.py new file mode 100755 index 000000000..c1c055b1e --- /dev/null +++ b/src/manage.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python +import os +import sys + +ROOT = os.path.dirname(os.path.abspath(__file__)) +sys.path = [ + os.path.join(ROOT, '../lib/librarian'), +] + sys.path + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "wolnelektury.settings") + + from django.core.management import execute_from_command_line + + execute_from_command_line(sys.argv) diff --git a/src/newtagging/__init__.py b/src/newtagging/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/newtagging/admin.py b/src/newtagging/admin.py new file mode 100644 index 000000000..57a76d5d4 --- /dev/null +++ b/src/newtagging/admin.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +from django.contrib import admin +from django import forms +from django.utils.safestring import mark_safe +from django.utils.translation import ugettext_lazy as _ + + +class FilteredSelectMultiple(forms.SelectMultiple): + """ + A SelectMultiple with a JavaScript filter interface. + + Note that the resulting JavaScript assumes that the SelectFilter2.js + library and its dependencies have been loaded in the HTML page. + """ + def _media(self): + from django.conf import settings + js = ['js/SelectBox.js' , 'js/SelectFilter2.js'] + return forms.Media(js=['%sadmin/%s' % (settings.STATIC_URL, url) for url in js]) + media = property(_media) + + def __init__(self, verbose_name, is_stacked, attrs=None, choices=()): + self.verbose_name = verbose_name + self.is_stacked = is_stacked + super(FilteredSelectMultiple, self).__init__(attrs, choices) + + def render(self, name, value, attrs=None, choices=()): + from django.conf import settings + output = [super(FilteredSelectMultiple, self).render(name, value, attrs, choices)] + output.append(u'\n' % \ + (name, self.verbose_name.replace('"', '\\"'), int(self.is_stacked), settings.STATIC_URL + "admin/")) + return mark_safe(u''.join(output)) + + +class TaggableModelForm(forms.ModelForm): + tags = forms.MultipleChoiceField(label=_('tags').capitalize(), required=False, widget=FilteredSelectMultiple(_('tags'), False)) + + def __init__(self, *args, **kwargs): + if 'instance' in kwargs: + if 'initial' not in kwargs: + kwargs['initial'] = {} + kwargs['initial']['tags'] = [tag.id for tag in self.tag_model.objects.get_for_object(kwargs['instance'])] + super(TaggableModelForm, self).__init__(*args, **kwargs) + self.fields['tags'].choices = [(tag.id, tag.name) for tag in self.tag_model.objects.all()] + + def save(self, commit): + obj = super(TaggableModelForm, self).save() + tag_ids = self.cleaned_data['tags'] + tags = self.tag_model.objects.filter(pk__in=tag_ids) + self.tag_model.objects.update_tags(obj, tags) + return obj + + def save_m2m(self): + # TODO: Shouldn't be needed + pass + + +class TaggableModelAdmin(admin.ModelAdmin): + form = TaggableModelForm + + def get_form(self, request, obj=None): + form = super(TaggableModelAdmin, self).get_form(request, obj) + form.tag_model = self.tag_model + return form + diff --git a/src/newtagging/locale/de/LC_MESSAGES/django.mo b/src/newtagging/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..a3ba8feae Binary files /dev/null and b/src/newtagging/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/de/LC_MESSAGES/django.po b/src/newtagging/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..01dcf5fa3 --- /dev/null +++ b/src/newtagging/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-13 12:19+0100\n" +"Last-Translator: xxx \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.py:38 +msgid "tags" +msgstr "Tags" + +#: models.py:531 +msgid "tag" +msgstr "Tag" + +#: models.py:532 +msgid "content type" +msgstr "Inhaltstyp" + +#: models.py:533 +msgid "object id" +msgstr "Objekt-ID" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "tagged_object_list must be called with a queryset or a model." + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "tagged_object_list must be called with a tag model." + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "tagged_object_list must be called with a tag." + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "Keine entsprechende Tags zu \"%s\" gefunden" diff --git a/src/newtagging/locale/en/LC_MESSAGES/django.mo b/src/newtagging/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..571ac5d62 Binary files /dev/null and b/src/newtagging/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/en/LC_MESSAGES/django.po b/src/newtagging/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..a2b36bea6 --- /dev/null +++ b/src/newtagging/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 20:05+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.py:38 +msgid "tags" +msgstr "tags" + +#: models.py:531 +msgid "tag" +msgstr "tag" + +#: models.py:532 +msgid "content type" +msgstr "content type" + +#: models.py:533 +msgid "object id" +msgstr "object id" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "tagged_object_list must be defined with a queryset or a model" + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "tagged_object_list must be defined with a tag model" + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "tagged_object_list must be defined with a tag" + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "No tag found matching \"%s\"." diff --git a/src/newtagging/locale/es/LC_MESSAGES/django.mo b/src/newtagging/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..0e3ceedeb Binary files /dev/null and b/src/newtagging/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/es/LC_MESSAGES/django.po b/src/newtagging/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..06accc8c0 --- /dev/null +++ b/src/newtagging/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-28 12:01+0100\n" +"Last-Translator: Aneta \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.py:38 +msgid "tags" +msgstr "tags" + +#: models.py:531 +msgid "tag" +msgstr "tag" + +#: models.py:532 +msgid "content type" +msgstr "tipo de contenido" + +#: models.py:533 +msgid "object id" +msgstr "id de objeto" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "" +"lista_de_objetos_agregados debe ser llamada con un queryset o un modelo." + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "lista_de_objetos_agregados debe ser nombrada con un modelo de tag." + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "lista_de_objetos_agregados debe ser nombrada con un tag." + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "No se han encontrado tags correspondientes \"%s\"." diff --git a/src/newtagging/locale/fr/LC_MESSAGES/django.mo b/src/newtagging/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..87ec8c5d3 Binary files /dev/null and b/src/newtagging/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/fr/LC_MESSAGES/django.po b/src/newtagging/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..9368f459a --- /dev/null +++ b/src/newtagging/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-23 17:28+0100\n" +"Last-Translator: Ela Janota \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.py:38 +msgid "tags" +msgstr "étiquettes" + +#: models.py:531 +msgid "tag" +msgstr "étiquette" + +#: models.py:532 +msgid "content type" +msgstr "type du contenu" + +#: models.py:533 +msgid "object id" +msgstr "Identifiant de l'objet" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "tagged_object_list doit être appelé avec un queryset ou un modèle." + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "tagged_object_list doit être appelé avec un modèle d'étiquette." + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "tagged_object_list doit être appelé avec une étiquette." + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "Aucune étiquette correspondant à \"%s\" trouvée." diff --git a/src/newtagging/locale/it/LC_MESSAGES/django.mo b/src/newtagging/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..bc4994c9e Binary files /dev/null and b/src/newtagging/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/it/LC_MESSAGES/django.po b/src/newtagging/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..fd1d8bc72 --- /dev/null +++ b/src/newtagging/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-18 13:41+0100\n" +"Last-Translator: xxx\n" +"Language-Team: LANGUAGE \n" +"Language: \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.py:38 +msgid "tags" +msgstr "i tag" + +#: models.py:531 +msgid "tag" +msgstr "tag" + +#: models.py:532 +msgid "content type" +msgstr "tipo di contenuto" + +#: models.py:533 +msgid "object id" +msgstr "oggetto id" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "" +"L’elenco degli oggetti taggati deve essere chiamato con un queryset oppure " +"un modello. " + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "L’elenco degli oggetti taggati deve essere chiamato con un modello tag" + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "L’elenco degli oggetti taggati deve essere chiamato con un tag." + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "Nessun tag corrispondente a \"%s\" è stato trovato." diff --git a/src/newtagging/locale/jp/LC_MESSAGES/django.mo b/src/newtagging/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c9739db34 Binary files /dev/null and b/src/newtagging/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/jp/LC_MESSAGES/django.po b/src/newtagging/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..7ea964955 --- /dev/null +++ b/src/newtagging/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.py:38 +msgid "tags" +msgstr "" + +#: models.py:531 +msgid "tag" +msgstr "" + +#: models.py:532 +msgid "content type" +msgstr "" + +#: models.py:533 +msgid "object id" +msgstr "" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "" + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "" + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "" + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "" diff --git a/src/newtagging/locale/lt/LC_MESSAGES/django.mo b/src/newtagging/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c10c450bd Binary files /dev/null and b/src/newtagging/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/lt/LC_MESSAGES/django.po b/src/newtagging/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..a98ffc79b --- /dev/null +++ b/src/newtagging/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-01 16:13+0100\n" +"Last-Translator: Aneta\n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: admin.py:38 +msgid "tags" +msgstr "žymės" + +#: models.py:531 +msgid "tag" +msgstr "žymė" + +#: models.py:532 +msgid "content type" +msgstr "turinio tipas" + +#: models.py:533 +msgid "object id" +msgstr "objekto ID" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "tagged_object_list must be called with a queryset or a model." + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "tagged_object_ list must be called with a tag model." + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "tagged_object_ list turi must be called with a tag." + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "Nerasta atitinkančių žymių \"%s\"." diff --git a/src/newtagging/locale/pl/LC_MESSAGES/django.mo b/src/newtagging/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..e6610193e Binary files /dev/null and b/src/newtagging/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/pl/LC_MESSAGES/django.po b/src/newtagging/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..a2e61d98b --- /dev/null +++ b/src/newtagging/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2010-05-19 16:20\n" +"Last-Translator: \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: admin.py:38 +msgid "tags" +msgstr "tagi" + +#: models.py:531 +msgid "tag" +msgstr "tag" + +#: models.py:532 +msgid "content type" +msgstr "typ zawartości" + +#: models.py:533 +msgid "object id" +msgstr "id obiektu" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "" + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "" + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "" + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "" diff --git a/src/newtagging/locale/ru/LC_MESSAGES/django.mo b/src/newtagging/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..6f5130fa2 Binary files /dev/null and b/src/newtagging/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/ru/LC_MESSAGES/django.po b/src/newtagging/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..5090f89e2 --- /dev/null +++ b/src/newtagging/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 22:11+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.py:38 +msgid "tags" +msgstr "таги" + +#: models.py:531 +msgid "tag" +msgstr "таг" + +#: models.py:532 +msgid "content type" +msgstr "тип содержания" + +#: models.py:533 +msgid "object id" +msgstr "ID объекта" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "" +"список таг-объектов должен сочетаться с набором вопросов или с моделью." + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "список таг-объектов дожен сочетаться с таг-моделью." + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "список таг-объектов должен сочетаться с тагом." + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "Никакой таг не соответствует \"%s\"." diff --git a/src/newtagging/locale/uk/LC_MESSAGES/django.mo b/src/newtagging/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..fd066609c Binary files /dev/null and b/src/newtagging/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/uk/LC_MESSAGES/django.po b/src/newtagging/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..392d1bfab --- /dev/null +++ b/src/newtagging/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-29 23:08+0100\n" +"Last-Translator: Anna Vasiutynska \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.py:38 +msgid "tags" +msgstr "теґи" + +#: models.py:531 +msgid "tag" +msgstr "теґ" + +#: models.py:532 +msgid "content type" +msgstr "тип змісту" + +#: models.py:533 +msgid "object id" +msgstr "ID об'єкту" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "tagged_object_list must be called with a queryset or a model." + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "tagged_object_list must be called with a tag model." + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "tagged_object_list must be called with a tag." + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "Не знайдено теґів відповідаючих \"%s\"." diff --git a/src/newtagging/managers.py b/src/newtagging/managers.py new file mode 100644 index 000000000..0bfec5413 --- /dev/null +++ b/src/newtagging/managers.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- +""" +Custom managers for Django models registered with the tagging +application. +""" +from django.contrib.contenttypes.models import ContentType +from django.db import models + + +class ModelTagManager(models.Manager): + """ + A manager for retrieving tags for a particular model. + """ + def __init__(self, tag_model): + super(ModelTagManager, self).__init__() + self.tag_model = tag_model + + def get_queryset(self): + content_type = ContentType.objects.get_for_model(self.model) + return self.tag_model.objects.filter( + items__content_type__pk=content_type.pk).distinct() + + def related(self, tags, *args, **kwargs): + return self.tag_model.objects.related_for_model(tags, self.model, *args, **kwargs) + + def usage(self, *args, **kwargs): + return self.tag_model.objects.usage_for_model(self.model, *args, **kwargs) + + +class ModelTaggedItemManager(models.Manager): + """ + A manager for retrieving model instances based on their tags. + """ + def __init__(self, tag_model): + super(ModelTaggedItemManager, self).__init__() + self.intermediary_table_model = tag_model.objects.intermediary_table_model + + def related_to(self, obj, queryset=None): + if queryset is None: + return self.intermediary_table_model.objects.get_related( + obj, self.model) + else: + return self.intermediary_table_model.objects.get_related( + obj, queryset) + + def with_all(self, tags, queryset=None): + if queryset is None: + return self.intermediary_table_model.objects.get_by_model(self.model, tags) + else: + return self.intermediary_table_model.objects.get_by_model(queryset, tags) + + def with_any(self, tags, queryset=None): + if queryset is None: + return self.intermediary_table_model.objects.get_union_by_model(self.model, tags) + else: + return self.intermediary_table_model.objects.get_union_by_model(queryset, tags) + + +class TagDescriptor(object): + """ + A descriptor which provides access to a ``ModelTagManager`` for + model classes and simple retrieval, updating and deletion of tags + for model instances. + """ + def __init__(self, tag_model): + self.tag_model = tag_model + + def __get__(self, instance, owner): + if not instance: + tag_manager = ModelTagManager(self.tag_model) + tag_manager.model = owner + return tag_manager + else: + return self.tag_model.objects.get_for_object(instance) + + def __set__(self, instance, value): + self.tag_model.objects.update_tags(instance, value) + + def __del__(self, instance): + self.tag_model.objects.update_tags(instance, []) + diff --git a/src/newtagging/models.py b/src/newtagging/models.py new file mode 100644 index 000000000..694f5b868 --- /dev/null +++ b/src/newtagging/models.py @@ -0,0 +1,259 @@ +# -*- coding: utf-8 -*- +""" +Models and managers for generic tagging. +""" + +from django.contrib.contenttypes.fields import GenericForeignKey +from django.contrib.contenttypes.models import ContentType +from django.db import connection, models +from django.utils.translation import ugettext_lazy as _ +from django.db.models.base import ModelBase +from django.core.exceptions import ObjectDoesNotExist +from django.dispatch import Signal + +qn = connection.ops.quote_name + + +tags_updated = Signal(providing_args=["affected_tags"]) + +def get_queryset_and_model(queryset_or_model): + """ + Given a ``QuerySet`` or a ``Model``, returns a two-tuple of + (queryset, model). + + If a ``Model`` is given, the ``QuerySet`` returned will be created + using its default manager. + """ + try: + return queryset_or_model, queryset_or_model.model + except AttributeError: + return queryset_or_model._default_manager.all(), queryset_or_model + + +############ +# Managers # +############ +class TagManager(models.Manager): + def __init__(self, intermediary_table_model): + super(TagManager, self).__init__() + self.intermediary_table_model = intermediary_table_model + models.signals.pre_delete.connect(self.target_deleted) + + def target_deleted(self, instance, **kwargs): + """ clear tag relations before deleting an object """ + try: + int(instance.pk) + except ValueError: + return + + self.update_tags(instance, []) + + def update_tags(self, obj, tags): + """ + Update tags associated with an object. + """ + content_type = ContentType.objects.get_for_model(obj) + current_tags = list(self.filter(items__content_type__pk=content_type.pk, + items__object_id=obj.pk)) + updated_tags = self.model.get_tag_list(tags) + + # Remove tags which no longer apply + tags_for_removal = [tag for tag in current_tags \ + if tag not in updated_tags] + if len(tags_for_removal): + self.intermediary_table_model._default_manager.filter(content_type__pk=content_type.pk, + object_id=obj.pk, + tag__in=tags_for_removal).delete() + # Add new tags + tags_to_add = [tag for tag in updated_tags + if tag not in current_tags] + for tag in tags_to_add: + if tag not in current_tags: + self.intermediary_table_model._default_manager.create(tag=tag, content_object=obj) + + tags_updated.send(sender=type(obj), instance=obj, affected_tags=tags_to_add + tags_for_removal) + + def remove_tag(self, obj, tag): + """ + Remove tag from an object. + """ + content_type = ContentType.objects.get_for_model(obj) + self.intermediary_table_model._default_manager.filter(content_type__pk=content_type.pk, + object_id=obj.pk, tag=tag).delete() + + def get_for_object(self, obj): + """ + Create a queryset matching all tags associated with the given + object. + """ + ctype = ContentType.objects.get_for_model(obj) + return self.filter(items__content_type__pk=ctype.pk, + items__object_id=obj.pk) + + def usage_for_model(self, model, counts=False, filters=None): + """ + Obtain a list of tags associated with instances of the given + Model class. + + If ``counts`` is True, a ``count`` attribute will be added to + each tag, indicating how many times it has been used against + the Model class in question. + + To limit the tags (and counts, if specified) returned to those + used by a subset of the Model's instances, pass a dictionary + of field lookups to be applied to the given Model as the + ``filters`` argument. + """ + # TODO: Do we really need this filters stuff? + if filters is None: filters = {} + + queryset = model._default_manager.filter() + for f in filters.items(): + queryset.query.add_filter(f) + usage = self.usage_for_queryset(queryset, counts) + return usage + + def usage_for_queryset(self, queryset, counts=False): + """ + Obtain a list of tags associated with instances of a model + contained in the given queryset. + + If ``counts`` is True, a ``count`` attribute will be added to + each tag, indicating how many times it has been used against + the Model class in question. + """ + usage = self.model._default_manager.filter( + items__content_type=ContentType.objects.get_for_model(queryset.model), + items__object_id__in=queryset + ) + if counts: + usage = usage.annotate(count=models.Count('id')) + else: + usage = usage.distinct() + return usage + + def related_for_model(self, tags, model, counts=False): + """ + Obtain a list of tags related to a given list of tags - that + is, other tags used by items which have all the given tags. + + If ``counts`` is True, a ``count`` attribute will be added to + each tag, indicating the number of items which have it in + addition to the given list of tags. + """ + objs = self.model.intermediary_table_model.objects.get_by_model(model, tags) + qs = self.usage_for_queryset(objs, counts) + qs = qs.exclude(pk__in=[tag.pk for tag in tags]) + return qs + + +class TaggedItemManager(models.Manager): + def __init__(self, tag_model): + super(TaggedItemManager, self).__init__() + self.tag_model = tag_model + + def get_by_model(self, queryset_or_model, tags): + """ + Create a ``QuerySet`` containing instances of the specified + model associated with a given tag or list of tags. + """ + queryset, model = get_queryset_and_model(queryset_or_model) + tags = self.tag_model.get_tag_list(tags) + if not tags: + # No existing tags were given + return queryset.none() + + # TODO: presumes reverse generic relation + # Multiple joins are WAY faster than having-count, at least on Postgres 9.1. + for tag in tags: + queryset = queryset.filter(tag_relations__tag=tag) + return queryset + + def get_union_by_model(self, queryset_or_model, tags): + """ + Create a ``QuerySet`` containing instances of the specified + model associated with *any* of the given list of tags. + """ + queryset, model = get_queryset_and_model(queryset_or_model) + tags = self.tag_model.get_tag_list(tags) + if not tags: + return queryset.none() + # TODO: presumes reverse generic relation + return queryset.filter(tag_relations__tag__in=tags).distinct() + + def get_related(self, obj, queryset_or_model): + """ + Retrieve a list of instances of the specified model which share + tags with the model instance ``obj``, ordered by the number of + shared tags in descending order. + """ + queryset, model = get_queryset_and_model(queryset_or_model) + # TODO: presumes reverse generic relation. + # Do we know it's 'tags'? + return queryset.filter(tag_relations__tag__in=obj.tags).annotate( + count=models.Count('pk')).order_by('-count').exclude(pk=obj.pk) + + +########## +# Models # +########## +def create_intermediary_table_model(model): + """Create an intermediary table model for the specific tag model""" + name = model.__name__ + 'Relation' + + class Meta: + db_table = '%s_relation' % model._meta.db_table + unique_together = (('tag', 'content_type', 'object_id'),) + app_label = model._meta.app_label + + def obj_unicode(self): + try: + return u'%s [%s]' % (self.content_type.get_object_for_this_type(pk=self.object_id), self.tag) + except ObjectDoesNotExist: + return u' [%s]' % self.tag + + # Set up a dictionary to simulate declarations within a class + attrs = { + '__module__': model.__module__, + 'Meta': Meta, + 'tag': models.ForeignKey(model, verbose_name=_('tag'), related_name='items'), + 'content_type': models.ForeignKey(ContentType, verbose_name=_('content type')), + 'object_id': models.PositiveIntegerField(_('object id'), db_index=True), + 'content_object': GenericForeignKey('content_type', 'object_id'), + '__unicode__': obj_unicode, + } + + return type(name, (models.Model,), attrs) + + +class TagMeta(ModelBase): + "Metaclass for tag models (models inheriting from TagBase)." + def __new__(mcs, name, bases, attrs): + model = super(TagMeta, mcs).__new__(mcs, name, bases, attrs) + if not model._meta.abstract: + # Create an intermediary table and register custom managers for concrete models + model.intermediary_table_model = create_intermediary_table_model(model) + TagManager(model.intermediary_table_model).contribute_to_class(model, 'objects') + TaggedItemManager(model).contribute_to_class(model.intermediary_table_model, 'objects') + return model + + +class TagBase(models.Model): + """Abstract class to be inherited by model classes.""" + __metaclass__ = TagMeta + + class Meta: + abstract = True + + @staticmethod + def get_tag_list(tag_list): + """ + Utility function for accepting tag input in a flexible manner. + + You should probably override this method in your subclass. + """ + if isinstance(tag_list, TagBase): + return [tag_list] + else: + return tag_list + diff --git a/src/newtagging/views.py b/src/newtagging/views.py new file mode 100644 index 000000000..867686d3c --- /dev/null +++ b/src/newtagging/views.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +""" +Tagging related views. +""" +from django.http import Http404 +from django.utils.translation import ugettext as _ +from django.views.generic import ListView + + +def tagged_object_list(request, queryset_or_model=None, tag_model=None, tags=None, + related_tags=False, related_tag_counts=True, **kwargs): + """ + A thin wrapper around + ``django.views.generic.list_detail.object_list`` which creates a + ``QuerySet`` containing instances of the given queryset or model + tagged with the given tag. + + In addition to the context variables set up by ``object_list``, a + ``tag`` context variable will contain the ``Tag`` instance for the + tag. + + If ``related_tags`` is ``True``, a ``related_tags`` context variable + will contain tags related to the given tag for the given model. + Additionally, if ``related_tag_counts`` is ``True``, each related + tag will have a ``count`` attribute indicating the number of items + which have it in addition to the given tag. + """ + # Check attributes + if queryset_or_model is None: + raise AttributeError(_('tagged_object_list must be called with a queryset or a model.')) + if tag_model is None: + raise AttributeError(_('tagged_object_list must be called with a tag model.')) + if tags is None: + raise AttributeError(_('tagged_object_list must be called with a tag.')) + + tag_instances = tag_model.get_tag_list(tags) + if tag_instances is None: + raise Http404(_('No tags found matching "%s".') % tags) + queryset = tag_model.intermediary_table_model.objects.get_by_model(queryset_or_model, tag_instances) + if not kwargs.has_key('extra_context'): + kwargs['extra_context'] = {} + kwargs['extra_context']['tags'] = tag_instances + if related_tags: + kwargs['extra_context']['related_tags'] = \ + tag_model.objects.related_for_model(tag_instances, queryset_or_model, + counts=related_tag_counts) + return ListView.as_view(queryset=queryset)(request, **kwargs) + diff --git a/src/oai/__init__.py b/src/oai/__init__.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/src/oai/__init__.py @@ -0,0 +1 @@ + diff --git a/src/oai/handlers.py b/src/oai/handlers.py new file mode 100644 index 000000000..d9699f9fe --- /dev/null +++ b/src/oai/handlers.py @@ -0,0 +1,238 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from oaipmh import server, common, metadata, error +from catalogue.models import Book, Tag +from api.models import Deleted +from api.handlers import WL_BASE +from librarian import WLURI +from django.contrib.contenttypes.models import ContentType +from datetime import datetime +from lxml import etree +from django.conf import settings +from django.contrib.sites.models import Site +from django.utils import timezone + + +make_time_naive = lambda d: timezone.localtime(d).replace(tzinfo=None) + +WL_DC_READER_XPATH = '(.|*)/rdf:RDF/rdf:Description/%s/text()' +wl_dc_reader = metadata.MetadataReader( + fields={ + 'title': ('textList', WL_DC_READER_XPATH % 'dc:title'), + 'creator': ('textList', WL_DC_READER_XPATH % 'dc:creator'), + 'subject': ('textList', (WL_DC_READER_XPATH + ' | ' + WL_DC_READER_XPATH + ' | ' + WL_DC_READER_XPATH) % + ('dc:subject.period', 'dc:subject.type', 'dc:subject.genre')), + 'description': ('textList', WL_DC_READER_XPATH % 'dc:description'), + 'publisher': ('textList', WL_DC_READER_XPATH % 'dc:publisher'), + 'contributor': ('textList', (WL_DC_READER_XPATH + ' | ' + WL_DC_READER_XPATH + ' | ' + WL_DC_READER_XPATH) % + ('dc:contributor.editor', 'dc:contributor.translator', 'dc:contributor.technical_editor')), + 'date': ('textList', WL_DC_READER_XPATH % 'dc:date'), + 'type': ('textList', WL_DC_READER_XPATH % 'dc:type'), + 'format': ('textList', WL_DC_READER_XPATH % 'dc:format'), + 'identifier': ('textList', WL_DC_READER_XPATH % 'dc:identifier.url'), + 'source': ('textList', WL_DC_READER_XPATH % 'dc:source'), + 'language': ('textList', WL_DC_READER_XPATH % 'dc:language'), + #'isPartOf': ('textList', 'rdf:RDF/rdf:Description/dc:relation.isPartOf/text()'), + 'hasPart': ('textList', WL_DC_READER_XPATH % 'dc:relation.hasPart'), + # 'relation': ('textList', 'rdf:RDF/rdf:Description/dc:relation/text()'), + # 'coverage': ('textList', 'rdf:RDF/rdf:Description/dc:coverage/text()'), + 'rights': ('textList', WL_DC_READER_XPATH % 'dc:rights') + }, + namespaces={ + 'dc': 'http://purl.org/dc/elements/1.1/', + 'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'} + ) + + +NS_DCTERMS = "http://purl.org/dc/terms/" + + +def nsdcterms(name): + return '{%s}%s' % (NS_DCTERMS, name) + + +class Catalogue(common.ResumptionOAIPMH): + TAG_CATEGORIES = ['author', 'epoch', 'kind', 'genre'] + + def __init__(self, metadata_registry): + super(Catalogue, self).__init__() + self.metadata_registry = metadata_registry + + self.oai_id = "oai:" + Site.objects.get_current().domain + ":%s" + + # earliest change + year_zero = timezone.make_aware(datetime(1990, 1, 1, 0, 0, 0), timezone.utc) + + try: + earliest_change = \ + Book.objects.order_by('changed_at')[0].changed_at + except: earliest_change = year_zero + + try: + earliest_delete = \ + Deleted.objects.exclude(slug__exact=u'').ordery_by('deleted_at')[0].deleted_at + except: earliest_delete = year_zero + + self.earliest_datestamp = earliest_change <= earliest_delete and \ + earliest_change or earliest_delete + + def metadata(self, book): + try: + xml = etree.parse(book.xml_file) + finally: + book.xml_file.close() + md = wl_dc_reader(xml) + m = md.getMap() + if book.parent: + m['isPartOf'] = [str(WLURI.from_slug(book.parent.slug))] + return m + + def record_for_book(self, book, headers_only=False): + meta = None + identifier = self.slug_to_identifier(book.slug) + if isinstance(book, Book): + # setSpec = map(self.tag_to_setspec, book.tags.filter(category__in=self.TAG_CATEGORIES)) + header = common.Header(identifier, make_time_naive(book.changed_at), [], False) + if not headers_only: + meta = common.Metadata(self.metadata(book)) + about = None + elif isinstance(book, Deleted): + header = common.Header(identifier, make_time_naive(book.deleted_at), [], True) + if not headers_only: + meta = common.Metadata({}) + about = None + if headers_only: + return header + return header, meta, about + + def identify(self, **kw): + ident = common.Identify( + 'Wolne Lektury', # generate + '%s/oaipmh' % unicode(WL_BASE), # generate + '2.0', # version + [m[1] for m in settings.MANAGERS], # adminEmails + make_time_naive(self.earliest_datestamp), # earliest datestamp of any change + 'persistent', # deletedRecord + 'YYYY-MM-DDThh:mm:ssZ', # granularity + ['identity'], # compression + [] # descriptions + ) + return ident + + def books(self, tag, from_, until): + if tag: + # we do not support sets, since they are problematic for deleted books. + raise error.NoSetHierarchyError("Wolne Lektury does not support sets.") + # books = Book.tagged.with_all([tag]) + else: + books = Book.objects.all() + deleted = Deleted.objects.exclude(slug__exact=u'') + + books = books.order_by('changed_at') + deleted = deleted.order_by('deleted_at') + if from_: + books = books.filter(changed_at__gte=from_) + deleted = deleted.filter(deleted_at__gte=from_) + if until: + books = books.filter(changed_at__lte=until) + deleted = deleted.filter(deleted_at__lte=until) + return list(books) + list(deleted) + + @staticmethod + def tag_to_setspec(tag): + return "%s:%s" % (tag.category, tag.slug) + + @staticmethod + def setspec_to_tag(s): + if not s: return None + cs = s.split(':') + if len(cs) == 2: + if not cs[0] in Catalogue.TAG_CATEGORIES: + raise error.NoSetHierarchyError("No category part in set") + tag = Tag.objects.get(slug=cs[1], category=cs[0]) + return tag + raise error.NoSetHierarchyError("Setspec should have two components: category:slug") + + def getRecord(self, **kw): + """ +Returns (header, metadata, about) for given record. + """ + slug = self.identifier_to_slug(kw['identifier']) + try: + book = Book.objects.get(slug=slug) + return self.record_for_book(book) + except Book.DoesNotExist: + book_type = ContentType.objects.get_for_model(Book) + try: + deleted_book = Deleted.objects.get(content_type=book_type, + slug=slug) + except: + raise error.IdDoesNotExistError("No item for this identifier") + return self.record_for_book(deleted_book) + + def validate_kw(self, kw): + if 'resumptionToken' in kw: + raise error.BadResumptionTokenError("No resumption token support at this point") + if 'metadataPrefix' in kw and not self.metadata_registry.hasWriter(kw['metadataPrefix']): + raise error.CannotDisseminateFormatError("This format is not supported") + + def identifier_to_slug(self, ident): + return ident.split(':')[-1] + + def slug_to_identifier(self, slug): + return self.oai_id % slug + + def listIdentifiers(self, **kw): + self.validate_kw(kw) + records = [self.record_for_book(book, headers_only=True) for + book in self.books(None, + kw.get('from_', None), + kw.get('until', None))] + return records, None + + def listRecords(self, **kw): + """ +can get a resumptionToken kw. +returns result, token + """ + self.validate_kw(kw) + records = [self.record_for_book(book) for + book in self.books(None, + kw.get('from_', None), + kw.get('until', None))] + + return records, None + + def listMetadataFormats(self, **kw): + formats = [ + ('oai_dc', + 'http://www.openarchives.org/OAI/2.0/oai_dc.xsd', + server.NS_OAIDC), + ('qdc', + 'http://dublincore.org/schemas/xmls/qdc/2006/01/06/dcterms.xsd', + NS_DCTERMS)] + if 'identifier' in kw: + slug = self.identifier_to_slug(kw['identifier']) + try: + b = Book.objects.get(slug=slug) + return formats + except: + try: + d = Deleted.objects.get(slug=slug) + return [] + except: + raise error.IdDoesNotExistError("This id does not exist") + else: + return formats + + def listSets(self, **kw): + raise error.NoSetHierarchyError("Wolne Lektury does not support sets.") + # tags = [] + # for category in Catalogue.TAG_CATEGORIES: + # for tag in Tag.objects.filter(category=category): + # tags.append(("%s:%s" % (tag.category, tag.slug), + # tag.name, + # tag.description)) + # return tags, None diff --git a/src/oai/tests/__init__.py b/src/oai/tests/__init__.py new file mode 100644 index 000000000..561ef604a --- /dev/null +++ b/src/oai/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from oai.tests.oaipmhapi import * diff --git a/src/oai/tests/files/antygona.xml b/src/oai/tests/files/antygona.xml new file mode 100755 index 000000000..f5244c4b4 --- /dev/null +++ b/src/oai/tests/files/antygona.xml @@ -0,0 +1,2981 @@ + + + + +Sofokles +Antygona +Sekuła, Aleksandra +Morawski, Kazimierz +Gałecki, Dariusz +Fundacja Nowoczesna Polska +Starożytność +Dramat +Tragedia +Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez Bibliotekę Narodową z egzemplarza pochodzącego ze zbiorów BN. +http://wolnelektury.pl/katalog/lektura/antygona +http://www.polona.pl/Content/3768 +Sofokles, Antygona, tłum. Kazimierz Morawski, wyd. 7, Wydawnictwo Zakładu Narodowego imienia Ossolińskich, Lwów 1939 +Domena publiczna - tłumacz Kazimierz Morawski zm. 1925 +1925 +xml +text +text +2007-08-30 +G +pol + + + + + + + + + +Sofokles + +Antygona + + + +OSOBY DRAMATU +ANTYGONA, córka Edypa +ISMENA, jej siostrasynowica --- bratanica, córka brata. +CHÓR TEBANSKICH STARCÓW +KREON, król Teb +STRAŻNIK +HAJMON, syn Kreona +TYREZJASZ, wróżbita +POSŁANIEC. +EURYDYKA, żona Kreona +POSŁANIEC drugi + + +Rzecz dzieje się przed dworcem królewskim w Tebach + + + + + + + + + +ANTYGONA + + + +O ukochana siostro ma, Ismeno,/ +Czy ty nie widzisz, że z klęsk Edypowych/ +Żadnej za życia los nam nie oszczędza?/ +Bo nie ma cierpień i nie ma ohydy,/ +Nie ma niesławy i hańby, które by/ +Nas pośród nieszczęść pasma nie dotknęły./ +Cóż bo za rozkaz znów obwieścił miastu/ +Ten, który teraz władzę w ręku dzierży?/ +Czyś zasłyszała? Czy uszło twej wiedzy,/ +Że znów wrogowie godzą w naszych miłych? + + + + +ISMENA + + + +O Antygono, żadna wieść nie doszła/ +Do mnie, ni słodka, ni goryczy pełna,/ +Od dnia, gdy braci straciłyśmy obu,/ +W bratnim zabitych razem pojedynku./ +Odkąd tej nocy odeszły Argiwów/ +HufceArgiwów hufce --- Polinik zebrał swe zastępy w Argolidzie, czyli w Argosie., niczego więcej nie zaznałam/ +Ni ku pociesze, ni ku większej trosce. + + + + +ANTYGONA + + + +Lecz mnie wieść doszła, i dlatego z domu/ +Cię wywołałam, by rzecz ci powierzyć. + + + + +ISMENA + +Cóż to? Ty jakieś ciężkie ważysz słowa. + + +Obowiązek, RodzinaANTYGONA + + + +O tak! Czyż nie wiesz, że z poległych braci/ +Kreon jednemu wręcz odmówił grobu?/ +Że Eteokla, jak czynić przystoi,/ +Pogrzebał w ziemi wśród umarłych rzeszy,/ +A zaś obwieścił, aby Polinika/ +Nieszczęsne zwłoki bez czci pozostały,/ +By nikt ich płakać, nikt grześć się nie ważył;/ +Mają wiec leżeć bez łez i bez grobu,/ +Na pastwę ptakom żarłocznym i strawę./ +Słychać, że Kreon czcigodny dla ciebie,/ +Co mówię, dla mnie też wydał ten ukaz/ +I że tu przyjdzie, by tym go ogłosić,/ +Co go nie znają, nie na wiatr zaiste/ +Rzecz tę stanowiąc, lecz grożąc zarazem/ +Kamienowaniem ukazu przestępcom./ +Tak się ma sprawa, teraz wraz ukażesz,/ +Czyś godną rodu, czy wyrodną córą. + + + + +ISMENA + + + +Gdy taka dola, to cóż, o nieszczęsna,/ +Prując czy snując bym mogła tu przydać? + + + + +ANTYGONA + +Patrz, byś wspomogła i poparła siostrę. + + +ISMENA + +W jakimże dziele? Dokąd myśl twa mierzy? + + +ANTYGONA + +Ze mną masz zwłoki opatrzyć braterskie. + + +ISMENA + +Więc ty zamierzasz grzebać wbrew ukazom? + + +ANTYGONA + + + +Tak! brata mego, a dodam... i twego;/ +Bo wiarołomstwem nie myślę się kalać. + + + + +ISMENA + +Niczym dla ciebie więc zakaz Kreona? + + +ANTYGONA + +Niczym, on nie ma nad moimi prawa. + + +ISMENA + + + +Biada! o rozważ, siostro, jak nam ojciec/ +Zginął wśród sromu i pośród niesławy,/ +Kiedy się jemu błędy ujawniły,/ +A on się targnął na własne swe oczy;/ +Żona i matkaŻona i matka --- odnosi się do Jokasty, matki i żony Edypa, która po odkryciu swego położenia z rozpaczy się powiesiła. --- dwuznaczne to miano ---/ +Splecionym węzłem swe życie ukróca;/ +Wreszcie i bracia przy jednym dnia słońcu/ +Godzą na siebie i morderczą ręką/ +Jeden drugiemu śmierć srogą zadaje./ +BezsilnośćZważ więc, że teraz i my pozostałe/ +Zginiemy marnie, jeżeli wbrew prawu/ +Złamiemy wolę i rozkaz tyrana./ +Baczyć to trzeba, że my przecie słabe,/ +Do walk z mężczyzną niezdolne niewiasty;/ +Że nam ulegać silniejszym należy,/ +Tych słuchać, nawet i sroższych rozkazów;/ +Ja więc, błagając o wyrozumienie/ +Zmarłych, że muszę tak ulec przemocy,/ +Posłuszna będę władcom tego świata,/ +Bo próżny opór urąga rozwadze. + + + + +ANTYGONA + + + +Miłość silniejsza niż śmierćJa ci nie każę niczego, ni, choćbyś/ +Pomóc mi chciała, wdzięczne by mi było,/ +Lecz stój przy twojej myśli, a ja tego/ +Pogrzebię sama, potem zginę z chlubą./ +Niechaj się zbratam z mym kochanym w śmierci/ +Po świętej zbrodni; a dłużej mi zmarłym/ +Miłą być trzeba, niż ziemi mieszkańcom,/ +Bo tam zostanę na wieki; tymczasem/ +Ty tu znieważaj święte prawa bogów. + + + + +ISMENA + + + +Ja nie znieważam ich, nie będąc w mocy/ +Działać na przekór stanowieniom władców. + + + + +ANTYGONA + + + +Rób po twej myśli; ja zaś wnet podążę,/ +By kochanemu bratu grób usypać. + + + + +ISMENA + +O ty nieszczęsna! serce drży o ciebie. + + +ANTYGONA + +Nie troszcz się o mnie; nad twoim radź losem. + + +ISMENA + + + +Ale nie zdradzaj twej myśli nikomu,/ +Kryj twe zamiary, ja też je zataję. + + + + +ANTYGONA + + + +O nie! mów głośno, bo ciężkie ty kaźnie/ +Ściągnąć byś mogła milczeniem na siebie. + + + + +ISMENA + +Z żarów twej duszy mroźne mieciesz słowa. + + +ANTYGONA + +Lecz miła jestem tym, o których stoję. + + +ISMENA + +Jeśli podołasz w trudnych mar pościgu. + + +ANTYGONA + +Jak nie podołam, to zaniecham dzieła. + + +ISMENA + +Nie trza się z góry porywać na mary. + + +ANTYGONA + + + +Kiedy tak mówisz, wstręt budzisz w mym sercu/ +I słusznie zmierzisz się także zmarłemu;/ +Śmierć bohaterskaPozwól, bym ja wraz z moim zaślepieniem/ +Spojrzała w oczy grozie; bo ta groza/ +Chlubnej mi śmierci przenigdy nie wydrze. + + + + +ISMENA + + + +Jeśli tak mniemasz, idź, lecz wiedz zarazem,/ +Żeś nierozważna, choć miłym tyś miła. + + + + +CHÓR + + + +O słońca grocie, coś jasno znów TebomWersy 99-160: liczba wierszy w ten sposób podana odnosi się do wierszy tekstu oryginalnego./ +Błysnął po trudach i znoju,/ +Złote dnia oko, przyświecasz ty niebom/ +I w DirkiDirke --- źródło na północny zachód od Teb. nurzasz się zdroju./ +Witaj! Tyś sprawił, że wrogów mych krocie/ +W dzikim pierzchnęły odwrocie. + + + +Bo Polinika gniewny spór/ +Krwawy zażegł w ziemi bój,/ +Z chrzęstem zapadł, z szumem piór/ +Śnieżnych orłów lotny rój,/ +I zbroice liczne błysły,/ +I z szyszaków pióra trysły. + + + +I wróg już wieńcem dzid groźnych otoczył/ +Siedmiu bram miasta gardziele,/ +Lecz pierzchł, nim w mojej krwi strugach się zbroczył,/ +Zanim HefajstosHefajstos --- bóg ognia, tu w znaczeniu: pożar. ognisty w popiele/ +Pogrążył mury, bo z tyłu nawałem/ +Runął na smokana smoka --- bo Adrastos, najprzedniejszy wśród najeźdźców, miał smoka wyrzeźbionego na tarczy. Ares z wojny szałem. + + + +Bo Zeus nie cierpi dumnych głów,/ +A widząc ich wyniosły lot/ +I złota chrzęst, i pychę słów,/ +Wypuścił swój piorunny grotpiorunny grot --- jeden z siedmiu książąt, którzy najechali Teby, olbrzymi Kapaneus, runął rażony od gromu Zeusa./ +I w zwycięstwa samym progu/ +Skarcił butę w dumnym wrogu. + + + +A ugodzony wznak na ziemię runie/ +Ten, który w namiętnym gniewie/ +Miasto pogrzebać chciał w ognia całunie/ +I jak wicher dął w zarzewie./ +Legł on od Zeusa gromu powalony,/ +Innym znów Ares inne znaczy zgony. + + + +Bo siedmiu --- siedmiu strzegło wrót,/ +Na męża mąż wymierzył dłoń,/ +Dziś w stosach lśni za zwycięstw trud/ +Ku Zeusa czci pobitych broń./ +Ale przy jednej miasta bramie/ +Nie błyszczy żaden chwały łup,/ +Gdzie brat na brata podniósł ramię,/ +Tam obok trupa poległ trup. + + + +Więc teraz Nike,Nike --- bogini zwycięstwa, także: samo zwycięstwo. czci syta i sławy,/ +Zwraca ku Tebom radosne swe oczy,/ +Po twardym znoju i po walce krwawej/ +Rzezi wspomnienie niech serca nie mroczy;/ +Idźmy do świątyń, a niechaj na przedzie/ +Teb skoczny BakchusBakchus urodził się rzekomo w Tebach z matki Semeli, dlatego nazywano go tebańskim bogiem. korowody wiedzie. + + + +Lecz otóż widzę, jak do nas tu zdąża/ +Kreon, co ziemią tą włada,/ +Nowy bóstw wyrok go w myślach pogrąża,/ +Ważne on plany waży i układa./ +Widno, że zbadać chciałby nasze zdanie,/ +Skoro tu starców wezwał na zebranie. + + + + +KREON + + + +O Tebańczycy, nareszcie bogowie/ +Z burzy i wstrząśnień wyrwali to miasto;/ +A jam was zwołał tutaj przed innymi,/ +Boście wy byli podporami tronu/ +Za Laiosa i Edypa rządów,/ +I po Edypa zgonie młodzieniaszkom/ +Pewną swą radą służyliście chętnie./ +Kiedy zaś oni za losu wyrokiem/ +Polegli obaj w bratobójczej walce,/ +Krwią pokajawszy braterskie prawice,/ +Wtedy ja władzę i tron ten objąłem,/ +Który mi z prawa po zmarłych przypada./ +WładzaTrudno jest duszę przeniknąć człowieka,/ +Jego zamysły i pragnienia, zanim/ +On ich na szerszym nie odsłoni polu./ +Ja tedy władcę, co by, rządząc miastem,/ +Wnet się najlepszych nie imał zamysłów/ +I śmiało woli swej nie śmiał ujawnić,/ +Za najgorszego uważałbym pana./ +A gdyby wyżej nad dobro publiczne/ +Kładł zysk przyjaciół, za nic bym go ważył./ +I nie milczałbym, klnę się na Jowisza/ +Wszechwidzącego, gdybym spostrzegł zgubę/ +Zamiast zbawienia kroczącą ku miastu./ +Nigdy też wroga nie chciałbym ojczyzny/ +Mieć przyjacielem, o tym przeświadczony,/ +Że nasze szczęście w szczęściu miasta leży,/ +I jego dobro przyjaciół ma raić./ +Przez te zasady podnoszę to miasto/ +I tym zasadom wierny obwieściłem/ +Ukaz ostatni na Edypa synów./ +Aby dzielnego w walce Eteokla./ +Który w obronie poległ tego miasta,/ +W grobie pochować i uczcić ofiarą,/ +Która w kraj zmarłych za zacnymi idzie;/ +Brata zaś jego, Polinika mniemam,/ +Który to bogów i ziemię ojczystą/ +Naszedł z wygnania i ognia pożogą/ +Zamierzał zniszczyć, i swoich rodaków/ +Krwią się napoić, a w pęta wziąć drugich,/ +Wydałem rozkaz, by chować ni płakać/ +Nikt się nie ważył, lecz zostawił ciało/ +Przez psy i ptaki w polu poszarpane./ +Taka ma wola, a nie ścierpię nigdy,/ +By źli w nagrodzie wyprzedzili prawych./ +Kto za to miastu temu dobrze życzy,/ +W zgonie i w życiu dozna mej opieki. + + + + +CHÓR + + + +Tak więc, Kreonie, raczysz rozporządzać/ +Ty co do wrogów i przyjaciół grodu,/ +A wszelka władza zaprawdę ci służy,/ +I nad zmarłymi, i nami, co żyjem. + + + + +KREON + +A więc czuwajcie nad mymi rozkazy. + + +CHÓR + +Poleć młodszemu straż nad tym i pieczę. + + +KREON + +Przecież tam stoją straże w pogotowiu. + + +CHÓR + +Czegóż byś tedy od nas jeszcze żądał? + + +KREON + +Byście niesfornym stanęli oporem. + + +CHÓR + +Głupi ten, kto by na śmierć się narażał. + + +KREON + + + +Tak, śmierć go czeka! Lecz wielu do zguby/ +Popchnęła żądza i zysku rachuby. + + + + +STRAŻNIK + + + +O najjaśniejszy, nie powiem, że w biegu/ +Spiesząc ja tutaj tak się zadyszałem,/ +Bom ja raz po raz przystawał po drodze/ +I chciałem na zad zawrócić z powrotem,/ +A dusza tak mi mówiła co chwila:/ +Czemuż to, głupi, ty karku nadstawiasz?/ +Czemuż tak lecisz? przecież może inny/ +Donieść to księciu; na cóż ty masz skomleć?/ +Tak sobie myśląc, spieszyłem powolnie,/ +A krótka droga wraz mi się wzdłużała./ +Na koniec myślę: niech będzie, co będzie,/ +I staję, książę, przed tobą i powiem,/ +Choć tak po prawdzie sam nie wiem zbyt wiele./ +A zresztą tuszę, że nic mnie nie czeka,/ +Chyba, co w górze było mi pisane. + + + + +KREON + +Cóż więc nadmierną przejmuje cię trwogą? + + +STRAŻNIK + + + +Zacznę od siebie, żem nie zrobił tego,/ +Co się zdarzyło, anim widział sprawcy,/ +Żem więc na żadną nie zarobił karę. + + + + +KREON + + + +Dzielnie warujesz i wałujesz sprawę,/ +Lecz jasne, że coś przynosisz nowego. + + + + +STRAŻNIK + +Bo to niesporo na plac ze złą wieścią. + + +KREON + +Lecz mów już w końcu i wynoś się potem. + + +STRAŻNIK + + + +A więc już powiem. Trupa ktoś co tylko/ +Pogrzebał skrycie i wyniósł się chyłkiem,/ +Rzucił garść ziemi i uczcił to ciało. + + + + +KREON + +Co mówisz? Któż był tak bardzo bezczelny? + + +STRAŻNIK + + + +Tego ja nie wiem, bo żadnego znaku/ +Ani topora, motyki nie było./ +Ziemia wokoło była gładka, zwarta,/ +Ani w niej stopy, ni żadnej kolei,/ +Lecz, krótko mówiąc, sprawca znikł bez śladu./ +Skoro też jeden ze straży rzecz wskazał,/ +Zaraz nam w myśli, że w tym jakieś licho./ +Trup znikł, a leżał nie pod grubą zaspą,/ +Lecz przyprószony, jak czynią, co winy/ +Się wobec zmarłych strachają; i zwierza/ +Lub psów szarpiących trupy ani śladu./ +Więc zaczął jeden wyrzekać na drugich,/ +Jeden drugiego winować, i było/ +Blisko już bójki, bo któż by ich zgodził?/ +W każdym ze straży wietrzyliśmy sprawcę,/ +Lecz tak na oślep, bo nikt się nie przyznał./ +I my gotowi: i żary brać w ręce,/ +I w ogień skoczyć, i przysiąc na bogów,/ +Że nie my winni, ani byli w spółce/ +Z tym, co obmyślił tę rzecz i wykonał./ +Więc koniec końcem, gdy dalej tak nie szło,/ +Jeden rzekł słowo, które wszystkim oczy/ +Zaryło w ziemię; bośmy nie wiedzieli,/ +Co na to odrzec, a strach nas zdjął wielki,/ +Co z tego będzie. Rzekł więc na ten sposób,/ +Że tobie wszystko to donieść należy./ +I tak stanęło, a mnie nieszczęsnemu/ +Los kazał zażyć tej przyjemnej służby./ +Więc po niewoli sobie i wam staję./ +Bo nikt nie lubi złych nowin zwiastuna. + + + + +CHÓR + + + +O panie, mnie już od dawna się roi,/ +Że się bez bogów przy tym nie obeszło. + + + + +KREON + + + +Milcz, jeśli nie chcesz wzbudzić mego gniewu,/ +I prócz starości ukazać głupoty./ +Bo brednie pleciesz, mówiąc, że bogowie/ +O tego trupa na ziemi się troszczą./ +Czyżby z szacunku, jako dobroczyńcę,/ +Jego pogrzebli, jego, co tu wtargnął,/ +Aby świątynie i ofiarne dary/ +Zburzyć, spustoszyć ich ziemię i prawa?/ +Czyż, według ciebie, bóstwa czczą zbrodniarzy?/ +O nie, przenigdy! Lecz tego tu miasta/ +Ludzie już dawno przeciw mnie szemrając/ +Głową wstrząsali i jarzmem ukrycie/ +Przeciw mym rządom i mojej osobie./ +Wiem ja to dobrze, że za ich pieniądze/ +Straże się tego dopuściły czynu./ +Bo nie ma gorszej dla ludzi potęgi,/ +Jak pieniądz: on to i miasta rozburzą,/ +On to wypiera ze zagród i domu,/ +On prawe dusze krzywi i popycha/ +Do szpetnych kroków i nieprawych czynów./ +Zbrodni on wszelkiej ludzkości jest mistrzem/ +I drogowskazem we wszelkiej sromocie./ +A ci, co czyn ten za pieniądz spełnili,/ +Wreszcie spóźnione wywołali kaźnie./ +Bo jeśli dotąd Zeusowi hołd składam,/ +Miarkuj to dobrze, a klnę się przysięgą,/ +Jeśli wy zaraz schwytanego sprawcy/ +Nie dostawicie przed moje oblicze,/ +To jednej śmierci nie będzie wam dosyć,/ +Lecz wprzódy wisząc będziecie zeznawać,/ +Byście w przyszłości wiedzieli, skąd grabić/ +I ciągnąć zyski, i mieli naukę,/ +Że nie na wszelki zysk godzić należy./ +Bo to jest pewne, że brudne dorobki/ +Częściej do zguby prowadzą, niż szczęścia. + + + + +STRAŻNIK + +Wolnoż mi mówić? czy pójść mam w milczeniu? + + +KREON + +Czyż nie wiesz jeszcze, jak głos twój mi wstrętny? + + +STRAŻNIK + +Uszy ci rani, czy też duszę twoją? + + +KREON + +Cóż to? chcesz badać, skąd idą me gniewy? + + +STRAŻNIK + +Sprawca ci duszę, a ja uszy trapię. + + +KREON + +Cóż to za urwisz z niego jest wierutny! + + +STRAŻNIK + +A przecież nie ja czyn ten popełniłem. + + +KREON + +Ty! --- swoją duszą frymarcząc w dodatku. + + +STRAŻNIK + + + +O nie!/ +Próżne to myśli, próżniejsze domysły. + + + + +KREON + + + +Zmyślne twe słowa, lecz jeżeli winnych/ +Mi nie stawicie, to wnet wam zaświta,/ +Że brudne zyski sprowadzają kaźnie. + + + + +STRAŻNIK + + + +O, niech go ujmą, owszem, lecz cokolwiek/ +Teraz się stanie za dopustem losu;/ +Ty mnie już tutaj nie zobaczysz więcej;/ +Bo już i teraz dziękuję ja bogom,/ +Żem wbrew nadziei stąd wyszedł bez szwanku. + + + + +CHÓR + + + +Siła jest dziwów, lecz nad wszystkie sięga/ +Dziwy człowieka potęga./ +Bo on prze śmiało poza sine morze,/ +Gdy toń się wzdyma i kłębi./ +I z roku na rok swym lemieszem porze/ +Matkę-ziemicę do głębi. + + + +Lotny ród ptaków i stepu zwierzęta/ +I dzieci fali usidla on w pęta,/ +Wszystko rozumem zwycięży./ +Dzikiego zwierza z gór ściągnie na błonie,/ +Krnąbrny kark tura i grzywiaste konie/ +Ujarzmi w swojej uprzęży. + + + +Wynalazł mowę i myśli dal skrzydła/ +I życie ujął w porządku prawidła,/ +Od mroźnych wichrów na deszcze i gromy/ +Zbudował sobie schroniska i domy,/ +Na wszystko z radą on gotów./ +Lecz choćby śmiało patrzał w wiek daleki./ +Choć ma na bóle i cierpienia leki./ +Śmierci nie ujdzie on grotów. + + + +A sił potęgę, które w duszy tleją,/ +Popchnie on zbrodni lub cnoty koleją;/ +Jeżeli prawa i bogów cześć wyzna./ +To hołd mu odda ojczyzna;/ +A będzie jej wrogiem ten, który nie z bogiem/ +Na cześć i prawość się ciska./ +Niechajby on sromu mi nie wniósł do domu./ +Nie skalał mego ogniska. + + + +Lecz jakiż widok uderza me oczy?/ +Czyż ja zdołałbym wbrew prawdzie zaprzeczyć,/ +Że to dzieweczka idzie Antygona?/ +O ty nieszczęsna, równie nieszczęsnego/ +Edypa córo!/ +Cóż-że się stało? czy cię na przestępstwie/ +Ukazu króla schwytano, i teraz/ +Wskutek tej zbrodni prowadzą jak brankę? + + + + +STRAŻNIK + + + +Oto jest dziewka, co to popełniła./ +Tę schwytaliśmy. Lecz gdzieżeż jest Kreon? + + + + +CHÓR + +Wychodzi oto z domu w samą porę. + + +KREON + +Cóż to? jakież tu zeszedłem zdarzenie? + + +STRAŻNIK + + + +Niczego, panie, nie trza się odrzekać,/ +Bo myśl późniejsza kłam zada zamysłom;/ +Ja bo dopiero kląłem, że już nigdy/ +Nie stanę tutaj po groźbach, coś miotał,/ +Ale ta nowa, wielka niespodzianka/ +Nie da się zmierzyć z nijaką radością;/ +Idę wiec, chociaż tak się zaklinałem,/ +Wiodąc tę dziewkę, którą przychwytano,/ +Gdy grób gładziła; żaden los tym razem/ +Mnie tu nie przywiódł, lecz własne odkrycie./ +Sądź ją i badaj; jam sobie zasłużył,/ +Bym z tych opałów wydostał się wreszcie. + + + + +KREON + +Jakim sposobem i gdzieżeś ją schwytał? + + +STRAŻNIK + +Trupa pogrzebiąc. W dwóch słowach masz wszystko. + + +KREON + +Czy pewny jesteś tego, co tu głosisz? + + +STRAŻNIK + + + +Na własne oczy przecież ją widziałem/ +Grzebiącą trupa; chyba jasno mówię. + + + + +KREON + +Więc na gorącym zszedłeś ją uczynku? + + +STRAŻNIK + + + +Tak się rzecz miała: kiedyśmy tam przyszli,/ +Groźbami twymi srodze przepłoszeni,/ +Zmietliśmy z trupa ziemię i znów nagie/ +I już nadpsute zostawiwszy ciało/ +Na bliskim wzgórzu siedliśmy, to bacząc,/ +By nam wiatr nie niósł wstrętnego zaduchu./ +A jeden beształ drugiego słowami,/ +By się nie lenić i nie zaspać sprawy./ +To trwało chwilę; a potem na niebie/ +Zabłysnął w środku ognisty krąg słońca/ +I grzać poczęło; aż nagle się z ziemi/ +Wicher poderwał i wśród strasznej trąby/ +Wył po równinie, drąc liście i korę/ +Z drzew, i zapełnił kurzawą powietrze;/ +Przymknąwszy oczy, drżeliśmy od strachu./ +A kiedy wreszcie ten szturm się uciszył,/ +Widzimy dziewkę, która tak boleśnie/ +Jak ptak zawodzi, gdy znajdzie swe gniazdo/ +Obrane z piskląt i opustoszałe./ +Tak ona, trupa dojrzawszy nagiego,/ +Zaczyna jęczeć i przekleństwa miotać/ +Na tych, co brata obnażyli ciało./ +I wnet przynosi garść suchego piasku,/ +A potem z wiadra, co dźwiga na głowie,/ +Potrójnym płynem martwe skrapia zwłokiPotrójnym płynem martwe skrapia zwłoki --- Antygona skropiła ciało płynem zmieszanym z wina, mleka i oliwy../ +My wiec rzucimy się na nią i dziewkę/ +Chwytamy, ona zaś nic się nie lęka./ +Badamy dawne i świeże jej winy./ +Ona zaś żadnej nie zaprzecza zbrodni,/ +Co dla mnie miłe, lecz i przykre było./ +Bo że z opałów sam się wydostałem,/ +Było mi słodkie, lecz żem w nie pogrążył/ +Znajomych, przykre. Chociaż ostatecznie,/ +Skórom ja cały, resztę lekko ważę. + + + + +KonfliktKREON + + + +Lecz ty, co głowę tak skłaniasz ku ziemi,/ +Mów, czy to prawda, czy donos kłamliwy? + + + + +ANTYGONA + +Jam to spełniła, zaprzeczyć nie myślę. + + +KREON + + + +Ty więc się wynoś, gdzie ci się podoba,/ +Wolny od winy i ciężkich podejrzeń./ +A ty odpowiedz mi teraz w dwóch słowach,/ +Czyżeś wiedziała o moim zakazie? + + + + +ANTYGONA + +Wiedziałam dobrze. Wszakże nie był tajny. + + +KREON + +I śmiałaś wbrew tym stanowieniom działać? + + +ANTYGONA + + + +Przecież nie Jowisz obwieścił to prawo,/ +Ni wola DikiDike, bogini sprawiedliwości, córka Jowisza, siedząca na tronie obok niego. Inne wyobrażenie wyznaczało jej tron w podziemiach, tam, gdzie się na ludzi wymierza sprawiedliwość. podziemnych bóstw siostry,/ +Taka ród ludzki związała ustawą./ +A nie mniemałam, by ukaz twój ostry/ +Tyle miał wagi i siły w człowieku,/ +Aby mógł łamać święte prawa boże,/ +Które są wieczne i trwają od wieku,/ +Że ich początku nikt zbadać nie może./ +Ja więc nie chciałam ulęknąć się człeka/ +I za złamanie praw tych kiedyś bogom/ +Zdawać tam sprawę. Bom śmierci ja pewna/ +Nawet bez twego ukazu; a jeśli/ +Wcześniej śmierć przyjdzie, za zysk to poczytam./ +Bo komu przyszło żyć wśród nieszczęść tylu,/ +Jakże by w śmierci zysku nie dopatrzył?/ +Tak więc nie mierzi mnie śmierci ta groźba,/ +Lecz mierziłoby mnie braterskie ciało/ +Niepogrzebane. Tak, śmierć mnie nie straszy,/ +A jeśli głupio działać ci się zdaję,/ +Niech mój nierozum za nierozum staje. + + + + +CHÓR + + + +Krnąbrne po krnąbrnym dziewczyna ma ojcu/ +Obejście, grozie nie ustąpi łatwo. + + + + +KREON + + + +Lecz wiedz, że często zamysły zbył harde/ +Spadają nisko, że często się widzi./ +Jako żelazo najtwardsze wśród ognia/ +Gnie się i mimo swej twardości pęka;/ +Wiem też, że drobne wędzidło rumaki/ +Dzikie poskramia. Bo tym nieprzystojna/ +Wyniosłość, którzy u innych w niewoli./ +Dziewka ta jedną splamiła się winą/ +Rozkazy dane obchodząc i łamiąc,/ +Teraz przed drugim nie sroma się gwałtem,/ +Z czynu się chełpi i nadto urąga./ +Lecz nie ja mężem, lecz ona by była,/ +Gdyby postępek ten jej uszedł płazem./ +Ale czy z siostry, czy choćby i bliższej/ +Krwią mi istoty ona pochodziła,/ +Ona i siostra nie ujdą przenigdy/ +Śmierci straszliwej; bo i siostrę skarcę,/ +Że jej spólniczką była w tym pogrzebie./ +Wołać mi tamtą, którą co dopiero/ +Widziałem w domu zmieszaną, szaloną./ +Tak duch zazwyczaj tych zdradza, co tajnie/ +Się dopuścili jakiegoś występku./ +Wstręt zaś ja czuję przeciw tym złoczyńcom,/ +Którzy swe grzechy chcą polem upiększać. + + + + +ANTYGONA + +Chceszli co więcej, czyli śmierć mi zadać? + + +KREON + +O! nie! w tym jednym zawiera się wszystko. + + +ANTYGONA + + + +Więc na cóż zwlekać?. Jako twoje słowa/ +Mierżą, i oby zawsze mnie mierziły,/ +Tak wstrętne tobie wszelkie me postępki./ +A jednak, skąd bym piękniejszą ja sławę/ +Uszczknęła, jako z brata pogrzebania./ +I ci tu wszyscy rzecz by pochwalili,/ +Gdyby im trwoga nie zawarła mowy./ +Ale tyranów los ze wszech miar błogi,/ +Wolno im czynić, co zechcą, i mówić. + + + + +KREON + +Sama tak sądzisz pośród Kadinejczyków. + + +ANTYGONA + +I ci tak sądzą, lecz stulają wargi. + + +KREON + +Nie wstyd ci, jeśli od tych się wyróżniasz? + + +ANTYGONA + +Czcić swe rodzeństwo nie przynosi wstydu. + + +KREON + +Nic był ci bratem ten, co poległ drugi? + + +ANTYGONA + +Z jednego ojca i matki zrodzonym. + + +KREON + +Czemuż więc niesiesz cześć, co jemu wstrętna? + + +ANTYGONA + +Zmarły nie rzuci mi skargi tej w oczy. + + +KREON + +Jeśli na równi z nim uczcisz złoczyńcę? + + +ANTYGONA + +Nie jak niewolnik, lecz jak brat on zginął. + + +KKEON + +On, co pustoszył kraj, gdy tamten bronił? + + +ANTYGONA + +A jednak Hades pożąda praw równych. + + +KREON + +Dzielnemu równość ze złym nie przystoi. + + +ANTYGONA + +Któż wie, czy takie wśród zmarłych są prawa? + + +KREON + +Wróg i po śmierci nie stanie się miłym. + + +ANTYGONA + +Współkochać przyszłam, nie współnienawidzić. + + +KREON + + + +Jeśli chcesz kochać, kochaj ich w Hadesie,/ +U mnie nie będzie przewodzić kobieta. + + + + +CHÓR + + + +Lecz otóż wiodą Ismenę, o panie,/ +Widać jej boleść i słychać jej łkanie./ +A jakaś chmura przesłania jej oczy/ +I piękną dziewki twarz mroczy. + + + + +KREON + + + +O ty, co w domu przypięłaś się do mnie/ +Jak wąż podstępnie, żem wiedzieć wręcz nie mógł./ +Iż na mą zgubę dwa wyrodki żywię,/ +Nuże, mów teraz, czyś była wspólniczką/ +W tym pogrzebaniu, lub wyprzyj się winy. + + + + +SiostraISMENA + + + +Winna ja jestem, jak stwierdzi to siostra,/ +I biorę na się tej zbrodni połowę. + + + + +ANTYGONA + + + +Lecz sprawiedliwość przeczy twym twierdzeniom;/ +Aniś ty chciała, ni jać przypuściłam. + + + + +ISMENA + + + +Jednak w niedoli twojej nie omieszkam/ +Wziąć na się cząstkę twych cierpień i kaźni. + + + + +ANTYGONA + + + +Hades i zmarli wiedzą, kto to zdziałał./ +MiłośćSłowami świadczyć miłość --- to nie miłość. + + + + +ISMENA + + + +O, nie zabraniaj mi, siostro, choć w śmierci/ +Z tobą się złączyć i uczcić zmarłego. + + + + +ANTYGONA + + + +Nie chcę twej śmierci, a nie zwij twym dziełem/ +Coś nie sprawiła; mój zgon starczy bratu. + + + + +ISMENA + +Lecz jakiż żywot mnie czeka bez ciebie? + + +ANTYGONA + +Pytaj Kreona! Zwykłaś nań ty baczyć. + + +ISMENA + +Po cóż mnie dręczysz bez żadnej potrzeby? + + +ANTYGONA + +Cierpię ja, że mi śmiać przyszło się z ciebie. + + +ISMENA + +W czym bym choć teraz ci przydać się mogła? + + +ANTYGONA + +Myśl o ratunku, ja go nie zawiszczę. + + +ISMENA + +O, ja nieszczęsna! więc chcesz mnie porzucić? + + +ANTYGONA + +Wybrałaś życie --- ja życia ofiarę. + + +ISMENA + +Skąd wiesz, co na dnie słów moich się kryje? + + +ANTYGONA + +W słowach ty rady, ja szukałam w czynie. + + +ISMENA + +A jednak wina ta sama nas łączy. + + +ANTYGONA + + + +Bądź zdrowa, żyjesz, --- a moja już dusza/ +W krainie śmierci... zmarłym świadczyć może. + + + + +KREON + + + +Z dziewcząt się jednej teraz zwichnął rozum,/ +Druga od młodu wciąż była szalona. + + + + +ISMENA + + + +O władco, w ludziach zgnębionych nieszczęściem/ +Umysł się chwieje pod ciosów obuchem. + + + + +KREON + +W tobie zaiste, co łączysz się z zbrodnią, + + +ISMENA + +Bo cóż mi życie warte bez mej siostry? + + +KREON + +Jej nie nazywaj --- bo ona już zmarła. + + +ISMENA + +Więc narzeczoną chcesz zabić ty syna? + + +KREON + +Są inne łany dla jego posiewu. + + +ISMENA + +Lecz on był dziwnie do niej dostrojony. + + +KREON + +Złymi dla synów niewiasty się brzydzę. + + +ISMENA + +Drogi Hajmonie, jak ojciec cię krzywdzi! + + +KREON + +Twój głos i swadźby zbyt mierżą mnie twoje. + + +CHÓR + +A więc chcesz wydrzeć kochankę synowi? + + +KREON + +Hades posłaniem będzie tej miłości. + + +CHÓR + +Taka więc wola, że ta umrzeć musi? + + +KREON + + + +Twoja i moja; lecz dosyć tych zwlekań;/ +Wiedźcie je, sługi, w dom, bo odtąd mają/ +Żyć jak niewiasty, nie według swej woli./ +Toć i zbyt śmiałe ulękną się serca,/ +Gdy widmo śmierci zaglądnie im w oczy. + + + + +CHÓR + + + +Szczęśliwy, kogo w życiu klęski nie dosięgły,/ +Bo skoro bóg potrząśnie domowymi węgły,/ +Z jednego gromu cały szereg nieci,/ +Po ojcach godzi i w dzieci./ +Tak jako fale na morzu się piętrzą,/ +Gdy wicher trackiwicher tracki --- morze na wybrzeżach Tracji uchodziło za bardzo burzliwe. do głębiny wpadnie/ +I ryje iły drzemiące gdzieś na dnie,/ +Aż brzeżne skały od burzy zajęczą: --- + + + +Tak już od wieków w Labdakidów domy/ +Po dawnych gromach nowe godzą gromy,/ +Bóle minionych pokoleń/ +Nie niosą ulg i wyzwoleń./ +I ledwie słońce promienie rozpostrze/ +Ponad ostatnią odnogą rodzeństwa,/ +A już bóstw krwawych podcina ją ostrze,/ +Obłęd i szału przekleństwa. + + + +O Zeusie, któż się z twą potęgą zmierzy?/ +Ciebie ni czasu odwieczne miesiące,/ +Ni sen nie zmoże wśród swoich obierzy./ +Ty, co Olimpu szczyty jaśniejące/ +Przez wieki dzierżysz promienny,/ +Równy w swej sile, niezmienny./ +A wieczne prawo gniecie ziemi syny,/ +Że nikt żywota nie przejdzie bez winy. + + + +Nadzieja złudna, bo jednym da skrzydła,/ +Drugich omota w swe sidła;/ +Żądz lotnych wzbudzi w nich ognie./ +Aż życie pióra te pognie./ +A wieczną prawda, że w przystępie dumy/ +Mienią dobrymi ci nieprawe czyny./ +Którym bóg zmieszał rozumy!/ +Nikt się na ziemi nie ustrzeże winy./ + + + +Lecz otóż Hajmon, z twojego potomstwa/ +Wiekiem najmłodszy; widocznie boleje/ +Nad ciężkim losem swej umiłowanej/ +I po swym szczęściu łzy leje. + + + + +KREON + + + +Wkrótce przejrzymy jaśniej od wróżbitów./ +O synu! czyż ty przybywasz tu gniewny/ +Wskutek wyroku na twą narzeczoną,/ +Czy w każdej doli zachowasz mnie miłość? + + + + +HAJMON + + + +Twoim ja, ojcze! Skoro mądrze radzisz,/ +Idę ja chętnie za twoim przewodem;/ +I żaden związek nie będzie mi droższy/ +Ponad wskazówki z ust twoich rozumnych. + + + + +KREON + + + +O! tak, mój synu, być zawsze powinno,/ +Zdanie ojcowskie ponad wszystkim ważyć./ +Przecież dlatego błagają ojcowie,/ +Aby powolnych synów dom im chował,/ +Którzy by krzywdy od wrogów pomścili,/ +A równo z ojcem uczcili przyjaciół./ +Kto by zaś płodził potomstwo nic warte,/ +Cóż by on chował, jak troski dla siebie,/ +A wobec wrogów wstyd i pośmiewisko?/ +Synu, nie folguj wiec żądzy, nie porzuć/ +Dla marnej dziewki rozsądku, wiedz dobrze,/ +Że nie ma bardziej mroźnego uścisku,/ +Jak w złej kobiety ramionach; bo trudno/ +O większą klęskę, jako zły przyjaciel./ +Przeto ze wstrętem ty porzuć tę dziewkę,/ +Aby w Hadesie innemu się dała./ +Bo skorom poznał, że z całego miasta/ +Ona jedyna, oparła się prawu,/ +Nie myślę stanąć wszem wobec jak kłamca,/ +Ale ją stracę; rodzinnego ZeusaZeus rodzinny --- Zeus opiekuńczy nad rodziną./ +Niechby błagała; Dom, Państwojeśli wśród rodziny/ +Nie będzie ładu, jak obcych poskromię?/ +Bo kto w swym domu potrafi się rządzić,/ +Ten sterem państwa pokieruje dobrze;/ +Kto zaś zuchwale przeciw prawu działa/ +I tym, co rządzą, narzucać chce wolę,/ +Ten nie doczeka się mego uznania./ +Wybrańcom ludu posłusznym być trzeba/ +W dobrych i słusznych, nawet w innych sprawach./ +Takiego męża rządom bym zaufał,/ +Po takim służby wyglądał ochotnej,/ +Taki by w starciu oszczepów i w walce/ +Wytrwał na miejscu jak dzielny towarzysz./ +Nie ma zaś większej klęski od nierządu,/ +On gubi miasta, on domy rozburza,/ +On wśród szeregów roznieca ucieczkę./ +Zaś pośród mężów powolnych rozkazom/ +Za życia puklerz stanie posłuszeństwo./ +Tak więc wypada strzec prawa i władzy/ +I nie ulegać niewiast samowoli./ +Jeżeli upaść, to z ręki paść męskiej,/ +Bo hańba doznać od niewiasty klęski. + + + + +CHÓR + + + +Nam, jeśli starość rozumu nie tłumi,/ +Zdajesz się mówić o tym bardzo trafnie. + + + + +HAJMON + + + +Ojcze, najwyższym darem łaski bogów/ +Jest niewątpliwie u człowieka rozum./ +A ja słuszności twoich słów zaprzeczyć/ +Ani bym umiał, ani chciałbym zdołać./ +Ale sąd zdrowy mógłbym mieć też inny./ +Mam ja tę wyższość nad tobą, że mogę/ +Poznać, co ludzie mówią, czynią, ganią,/ +Bo na twój widok zdejmuje ich trwoga,/ +I słowo, ciebie rażące, zamiera./ +A więc cichaczem przyszło mi wysłuchać,/ +Jak miasto nad tą się żali dziewicą,/ +Że ze wszech niewiast najmniej ona winna,/ +Po najzacniejszym czynie marnie kończy./ +Czyż bo ta, co w swym nie przeniosła sercu,/ +By brat jej leżał martwy bez pogrzebu,/ +Psom na pożarcie i ptactwu dzikiemu,/ +Raczej nagrody nie godna jest złotej?/ +Takie się głosy odzywają z cicha./ +Ja zaś, o ojcze, niczego nie pragnę,/ +Jak by się tobie dobrze powodziło./ +Bo jestli większy skarb nad dobre imię/ +Ojca dla dzieci, lub dzieci dla ojca?/ +Nie żyw więc tego, ojcze, przeświadczenia,/ +Że tylko twoje coś warte jest zdanie;/ +Bo kto jedynie sam sobie zawierzy,/ +Na swojej mowie polega i duszy,/ +Gdy go odsłonią, pustym się okaże./ +Choćby był mądry, przystoi mężowi/ +Ciągle się uczyć, a niezbyt upierać./ +Widzisz przy rwących strumieniach, jak drzewo,/ +Które się nagnie, zachowa konary,/ +A zbyt oporne z korzeniami runie./ +Także i żeglarz, który zbyt naciągnie/ +Żagle i folgi nie daje, przewróci/ +Łódź i osiądzie bez ławic na desce./ +Ustąp ty przeto i zaniechaj gniewu,/ +Bo jeśli wolno sądzić mnie młodszemu,/ +Mniemam, że taki człowiek najprzedniejszy,/ +Który opływa w rozum z przyrodzenia;/ +Jeśli tak nie jest --- a i to się zdarzy, ---/ +Niechaj rad dobrych zbyt lekko nie waży. + + + + +CHÓR + + + +O panie, słuchaj, jeśli w porę mówi,/ +A ty znów ojca; obaj mądrze prawią. + + + + +KREON + + + +A więc w mym wieku mam mądrości szukać/ +I brać nauki u tego młokosa? + + + + +HAJMON + + + +Nie w nieprawości; a jeśli ja młody,/ +To na rzecz raczej, niż wiek, baczyć trzeba. + + + + +KREON + +Na rzecz, niesfornym która cześć oddaje? + + +HAJMON + +Ni słowem śmiałbym cześć taką zalecać. + + +KREON + +A czyż nie w takie popadła ta błędy? + + +HAJMON + +Przeczy głos ludu, co mieszka w Teb grodzie. + + +KREON + +Więc lud mi wskaże, co ja mam zarządzać? + + +HAJMON + +Niemal jak młodzian porywczy przemawiasz. + + +Państwo, WładzaKREON + +Sobie czy innym gwoli ja tu rządzę? + + +HAJMON + +Marne to państwo, co li panu służy. + + +KREON + +Czyż nie do władcy więc państwo należy? + + +HAJMON + +Pięknie byś wtedy rządził... na pustyni. + + +KREON + +Ten, jak się zdaje, z tamtą dziewką trzyma. + + +HAJMON + +Jeśli ty dziewką; o ciebie się troskam. + + +KREON + +Z ojcem się swarząc, o przewrotny synu? + + +HAJMON + +Bo widzę, że ty z drogi zbaczasz prawej. + + +KREON + +Błądzęż ja strzegąc godności mej władzy? + + +HAJMON + +Nie strzeżesz --- władzą pomiatając bogów. + + +KREON + +O niski duchu, na służbie kobiety! + + +HAJMON + +Bo w służbie złego nie znajdziesz minie nigdy. + + +KREON + +Cała twa mowa jej sprawy ma bronić. + + +HAJMON + +Twej sprawy, mojej i podziemnych bogów. + + +KREON + +Nigdy już żywcem ty jej nie poślubisz. + + +HAJMON + +Zginie --- to śmiercią sprowadzi zgon inny. + + +KREON + +A więc już groźbą śmiesz we mnie ty godzić? + + +HAJMON + +Cóż warta groźba, gdzie puste zamysły? + + +KREON + +Wnet pożałujesz twych nauk, młokosie! + + +HAJMON + +Nie byłbyś ojcem, rzekłbym, żeś niemądry. + + +KREON + +Niewiast służalcze, przestań się uprzykrzać! + + +HAJMON + +Chcesz więc ty mówić, a drugich nie słuchać? + + +KREON + + + +Doprawdy? Ale, na Olimp, wiedz o tym,/ +Że cię twe drwiny o zgubę przyprawią./ +Wiedźcie tu dziewkę; niechajże wyrodna/ +W oczach kochanka tu ginie natychmiast. + + + + +HAJMON + + + +Nie umrze ona przy mnie! nie marz o tym./ +Nie ujrzę tego! raczej ty nie ujrzysz/ +Więcej mojego oblicza, jeżeli/ +W szale na bliskich porywać się myślisz. + + + + +CHÓR + + + +Uniesion gniewem wypadł on, o władco./ +A w młodej głowie rozpacz złym doradcą. + + + + +KREON + + + +Niech myśli, czyny knuje on zuchwałe/ +Ale tych dziewek nie wyrwie on śmierci, + + + + +CHÓR + +Jak to? czyż obie ty zgładzić zamyślasz? + + +KREON + +Niewinna ujdzie: słusznie mnie strofujesz. + + +CHÓR + +A jakiż tamtej gotujesz ty koniec? + + +KREON + + + +Gdzieś na bezludnym zamknę ją pustkowiu./ +W skalistym lochu zostawię żyjącą,/ +Strawy przydając jej tyle, by kaźnię/ +Pozbawić grozy i klątwy nie ściągnąć,/ +A tam jej Hades, którego jedynie/ +Z bogów uwielbia, może da zbawienie, ---/ +Lub pozna wreszcie, jeśli marnie zginie,/ +Że próżną służbą czcić Hadesu cienie. + + + + +CHÓR + + + +Miłości, któż się wyrwie z twych obierzy,/ +Miłości, która runiesz na ofiary,/ +W gładkich dziew licach gdy rozniecisz czary./ +Kroczysz po morzu i wśród chat pasterzy,/ +Ni bóg nie ujdzie przed twoim nawałem,/ +Ani śmiertelny. Kim władasz, wre szałem. + + + +Za twym podmuchem, do winy/ +Zboczy i prawy wraz człowiek;/ +Spory ty szerzysz wśród jednej rodziny./ +Urok wystrzela zwycięsko spod powiek/ +Dziewicy, sięgnie i praw majestatu/ +Moc Afrodyty, co przewodzi światu. + + + +A i ja nawet, chociaż wiernie służę,/ +Prawie się w duszy na ukazy burzę,/ +A boleść serce mi rani,/ +Bo straszny widok uderza me oczy:/ +Do wszechchłonącej Antygona kroczy/ +Ciemnej Hadesu przystani. + + + + +Miłość, Rozpacz, ŚmierćANTYGONA + + + +Patrzcie, o patrzcie, wy ziemi tej dzieci,/ +Na mnie, kroczącą w smutne śmierci cienie,/ +Oglądającą ostatnie promienie/ +Słońca, co nigdy już mi nie zaświeci,/ +Bo mnie Hadesa dziś ręka śmiertelna/ +Do AcherontuAcheront --- rzeka Tartaru. bladych wiedzie włości./ +Ani zaznałam miłości,/ +Ani mi zabrzmi żadna pieśń weselna;/ +Ale na zimne Acherontu łoże/ +Ciało nieszczęsne me złożę. + + + + +CHÓRCzy to przypadkiem nie kwestia Przewodnika Chóru? Tak podejrzewam, trzeba by porównać z innnymi wydaniami. DG + + + +Pieśni ty godna, i w chwały rozkwicie/ +W kraj śmierci niesiesz twe życie./ +Ani cię chorób przygnębiło brzemię,/ +Ni miecza ostrze zwaliło na ziemię,/ +Lecz własnowolna, nie dobiegłszy kresu,/ +Żywa w kraj stąpasz Hadesu. + + + + +ANTYGONA + + + +Słyszałam niegdyś o frygijskiej Niobie,/ +Córce Tantala, i jej strasznym zgonie./ +Że skamieniała w swej niemej żałobieNiobe, która miała sześciu synów i sześć córek, urągała Latonie, która miała tylko Apollina i Artemidę. Gniew tych bogów zabił jej dzieci, a ona skamieniała z boleści./ +I odtąd ciągle we łzach bólu tonie./ +Skała owiła ją jak bujne bluszcze./ +A na jej szczytach śnieg miecie, deszcz pluszcze;/ +Rozpaczy łkaniem zroszone jej łono, ---/ +Mnie też kamienną pościel przeznaczono. + + + + +CHÓR + + + +Lecz ona przecież z krwi bogów jest rodem,/ +My śmiertelnego pokolenia płodem./ +Hołd jednak temu, kto choć w śmierci progu/ +Dorówna bogu. + + + + +ANTYGONA + + + +Urągasz biednej. Czemuż obelżywą/ +Mową mnie ranisz, pókim jeszcze żywą?/ +Miasto i męże, dzierżący te grody./ +Wzywam was, zwróćcie litosne swe oczy,/ +I wy, Teb gaje i dirkejskie wody,/ +Na mnie, co idę ku ciemnej pomroczy,/ +Nie opłakana przez przyjaciół żale,/ +Do niezwykłego grobowca gdzieś w skale./ +O, ja nieszczęsna!/ +Anim ja zmarła, ani też przy życiu,/ +Śmierć mnie już trzyma w swym mroźnym spowiciu. + + + + +CHÓR + + + +W nadmiarze pychy zuchwałej/ +Z tronem się Diki twe myśli i mowy/ +Zderzyły w locie, złamały./ +Zły duch cię ściga rodowy. + + + + +ANTYGONA + + + +Mowa ta głębią mego serca targa;/ +Dotknąłeś ojca ty sromu,/ +I w słowach twoich rozbrzmiała znów skarga/ +Nad nieszczęściami Labdakidów domu./ +Straszna ja pomnę łożnicę,/ +W której syn z matką zdrożne śluby wiąże./ +Nieszczęśni moi rodzice!/ +Klątwą brzemienna dziś do was podążę,/ +Dziewiczość niosąc wam serca./ +O drogi bracie, złowrogie twe ślubyzłowrogie twe śluby --- śluby Polinika z córką Adrastosa, które ułatwiły wyprawę Siedmiu na Teby./ +Były początkiem pogromu i zguby;/ +Tyś --- choć zmarły --- mój morderca. + + + + +CHOR + + + +Zmarłych czcić --- czcigodny czyn,/ +Ale godny kaźni błąd/ +Łamać prawo, walić rząd./ +Tyś zginęła z własnych win. + + + + +ANTYGONA + + + +Bez łez, przyjaciół, weselnego pienia/ +Kroczę już, biedna, ku śmiertelnej toni,/ +Wnet już nie ujrzę ni słońca promienia,/ +Nikł łzy nad moją dolą nie uroni. + + + + +KREON + + + +Czyżby kto ustał w przedzgonnych tych skargach/ +Gdyby mu dano się żalić bez końca?/ +Bierzcie stąd dziewkę i w ciemnym ją grobie/ +Zawrzyjcie zaraz, jak już nakazałem./ +Tam ją zostawcie samotną, by zmarła,/ +Albo też żywa pędziła dni marne;/ +Tak wobec dziewki zostaniem bez winy,/ +A nie ścierpimy, aby wśród nas żyła. + + + + +Miłość, Rozpacz, ŚmierćANTYGONA + + + +Grobie, ty mojej łożnico miłości,/ +Mieszkanie wieczne, ciemnico sklepiona!/ +Idę do moich, których tylu gości/ +W pozgonnych domach boska PersefonaPersefona --- małżonka Iladesa, pana podziemi../ +Za wami idę ja, co w życia wiośnie +Zginęłam, prawie nie zaznawszy świata./ +A tuszę, że mnie tam przyjmą radośnie,/ +Ty, ojcze, matko, i miła dłoń brata,/ +Bom tu z miłosną służbą wasze ciała/ +Własną obmyła, namaściła ręką;/ +Żem bratnie zwłoki uczciwie grzebała,/ +Taką mnie darzą podzięką!/ +Mam u szlachetnych ludzi cześć i chwałę,/ +Lecz potępienie ze strony Kreona,/ +Bo on me czyny uznał za zuchwałe./ +Ręką więc teraz jego uwięziona,/ +Ani zaznawszy słodyczy wesela,/ +Ni uczuć maiki, ni dziatek pieszczoty,/ +Schodzę tak sama i bez przyjaciela,/ +Nieszczęsna, żywa do grobowej groty./ +Jakież to bogów złamałam ustawy?/ +Jakże do bogów podnosić mam modły,/ +Wołać o pomoc, jeżeli czyn prawy,/ +Który spełniłam, uznano za podły?/ +Lecz jeśli z bogów to zrządzenia płynie,/ +Trzeba mi winnej znieść w ciszy cierpienia./ +Jeśli ci błądzą, niech sięgnie ich w winie/ +Kaźń równa z bogów ramienia! + + + + +CHÓR + + + +Te same burze i te same jeszcze/ +Duszą tej dziewki wciąż miotają dreszcze. + + + + +KREON + + + +Pachołki, którym wieść ją nakazałem,/ +Swoją powolność ciężko mi... odpłaczą. + + + + +ANTYGONA + + + +Biada! ta mowa grożąca/ +Bliskiego wróżbą mi końca. + + + + +CHÓR + + + +A ja odwagi nie śmiałbym dodawać,/ +Że się te srogie ukazy odwloką. + + + + +ANTYGONA + + + +Ziemi tebańskiej ojczysty ty grodzie,/ +I wy bogowie rodowi,/ +Oto mnie wiodą w bezzwłocznym pochodzie/ +Ku samotnemu grobowi./ +Patrzcie na księżnę ostatnią z Teb królów,/ +W ręce siepaczy ujętą,/ +Ile mąk ona, ile zniosła bólów/ +Za wierną służbę i świętą. + + + + +CHÓR + + + +Tak i Danae jasnego dnia zorze/ +Zmienić musiała na loch w miedź obity,/ +W grobowej skryta komorzeDanae została zamknięta przez ojca Akryzjosa w podziemnym lochu, by nie urodziła złowróżbnego syna. Tu ją jednak zapłodnił złotym deszczem Zeus i urodziła słynnego Perseusza../ +A przecież ród jej zapewniał zaszczyty/ +I Zeus deszcz złoty na łono jej roni./ +Straszne przeznaczeń obierze!/ +Pieniądz, ni siła, ni warowne wieże,/ +Ni morski żagiel przed nimi nie chroni./ + + + +Hedonów króla Likurga też bucie,/ +Że hardym słowem na boga się miota,/ +Bakchus kamienne zgotował okucie,/ +Gdzie zła wykipi ochotaLikurg, baśniowy król Hedonów w Tracji, oparł się kultowi Bakchusa, wyszydzał jego towarzyszki, szalone bachantki i muzy; za to zamknął go bóg w skalnej czeluści../ +Rozpoznał on tam za późno swe zbrodnie/ +I pożałował słów gniewu./ +Chciał bo szał boski tłumić i pochodnie,/ +Urągał muzom wśród śpiewu./ + + + +Gdzie z mórz strzelają kyanejskie progikyanejskie progi (łac. Cyaneae) --- skaliste wyspy na Morzu Czarnym przy Bosforze.,/ +Kraj SalmidesuSalmy-dessus --- wybrzeże i miasto na trackim brzegu Morza Czarnego., dla przybyszów wrogi,/ +Gdzie brzeg Bosforu bałwany roztrąca,/ +Tam widział Ares, jak dzikością wrąca/ +Żona Fineusa pasierby swe nęka./ +Nie mieczem srogim wymierza im cięgi,/ +Lecz krwawą rękę załapią w ócz kręgi,/ +Ostrzem je łupi czółenkaKról Fineus ze Salmidesu ożenił się z Kleopatrą, córką Boreasza, księżniczką z krwi attyckiej. Potem ją porzucił, aby poślubić nimfę nazwiskiem Idaea. Przewrotnej Idaei wydał Fineus swe dzieci z Kleopatry; macocha je oślepiła i następnie zamknęła żywcem w grobowcu. Także ich matka, Kleopatra, zawarta została w kamiennej niewoli../ + + + +Ujęci oni kamienną niewolą,/ +Płaczą nad matki i swoją niedolą./ +Przecież jej przodki z ErechtydówErechtydzi --- Ateńczycy; nazwa ta pochodzi od Erechteusa, bohatera ateńskiego rodu.,/ +Ojcem Boreasz; pośród skał i głogów/ +I burz pędziła dni swoje od młodu,/ +Na chyżych koniach --- prawe dziecię bogów./ +Jednak, choć w dali, i tu jej dosięga/ +Odwiecznej MojryMojra --- bogini przeznaczenia. potęga. + + + + +TYREZJASZ + +[wiedziony przez chłopca ukazuje się na scenie] + + + +O, Teb starszyzno, wspólnym my tu krokiem/ +I wspólnym wzrokiem zdążamy, bo ciemnym/ +Za oko staje przewodnika ręka. + + + + +KREON + +Cóż tam nowego, Tyrezjaszu stary? + + +TYREZJASZ + +Ja rzeknę, ty zaś posłuchaj wróżbiarza. + + +KREON + +Nigdy twoimi nie wzgardziłem słowy. + + +TYREZJASZ + +Przeto szczęśliwie sterujesz tą nawą. + + +KREON + +Przyświadczyć mogę, doznawszy korzyści. + + +TYREZJASZ + +Zważ teraz, znowu stoisz na przełomie. + + +KREON + +Co mówisz? trwogą przejmują twe słowa. + + +TYREZJASZ + + + +Poznasz ty prawdę, ze znaków mej sztuki./ +Siadłem na starej wróżbity siedzibie,/ +Gdzie wszelkie ptactwo kieruje swe loty,/ +Aż naraz słyszę, jak niezwykłe głosy/ +Wydają ptaki, szalone i dzikie;/ +I wnet poznałem, że szarpią się szpony,/ +Bo łopot skrzydeł to stwierdzał dobitnie./ +Przejęty trwogą, próbuję ofiary/ +Na płomienistym ołtarzu, lecz ogień/ +Nie chce wystrzelać ku górze, a sączy/ +Ciecz z mięs ofiarnych, wsiąkając w popioły,/ +Kipi i syczy, żółć bryzga w powietrze,/ +I spoza tłuszczu, co spłynął stopiony,/ +Uda wyjrzały na ołtarzu nagie./ +Od tego chłopca wnet się dowiedziałem,/ +Że takie marne szły z ofiary znaki,/ +Bo on przewodzi mnie, a ja znów innym./ +Tak więc chorzeje miasto z twojej winy./ +Bo wsze ołtarze i ofiarne stoły/ +Psy pokalały i ptactwo, co ciałem/ +Edypowego się żywiło syna./ +Więc nie przyjmują już ofiarnych modłów/ +Bogowie od nas, ni ofiarnych dymów./ +A ptak, co żłopał krew trupa zastygłą,/ +Już nie wydaje głosów dobrej wróżby./ +Rozważ to synu: bo wszystkich jest ludzi/ +Błądzić udziałem i z prostej zejść drogi;/ +Lecz mąż, co zbłądził, nie jest pozbawiony/ +Czci i rozwagi, jeżeli wśród nieszczęść/ +Szuka lekarstwa i nie trwa w uporze./ +Upór jest zawsze nierozumu znakiem;/ +Ustąp ty śmierci i nie drażń zmarłego/ +Cóż bo za chwała nad trupem się znęcać?/ +Życzliwość moja tą radą ci służy,/ +Dobrze jej słuchać, gdy korzyści wróży. + + + + +KREON + + + +Starcze, wy wszyscy jak łucznik do celu/ +Mierzycie we mnie: teraz i wróżbiarstwo/ +Sidła zastawia, a krewni mą myślą/ +Kupczą, frymarczą z dawna jak towarem;/ +Nuże, gromadźcie wy sardyjskie skarby,/ +Wskażcie mi górę indyjskiego złotasardyjskie skarby... indyjskie złoto --- Sardes, stolica Lidii, słynęła ze swych skarbów, Indie ze swego złota.,/ +Na pogrzeb tego jednak nie zezwolę./ +I choćby orły Zeusowe porwały/ +Trupa i przed tron Zeusowy zaniosły,/ +Ja się takiego nie ulęknę sromu,/ +Grześć nie pozwolę; wiem bo ja zbyt dobrze:/ +Bogów zbezcześcić nie zdoła śmiertelny./ +Potknąć się mogą i ludzie przemądrzy,/ +Starcze, haniebnie, kiedy szpetne myśli/ +Ubiorą w słowa barwiste... dla zysku. + + + + +TYREZJASZ + + + +Biada!/ +Czyż wie to człowiek, czy rozważa sobie... + + + + +KREON + +Cóż, z jakim znowu na plac ogólnikiem? + + +TYREZJASZ + +Ile rozsądek góruje nad skarby? + + +KREON + +O ile klęską największą nierozum. + + +TYREZJASZ + +Ciężko ty na tę zapadłeś chorobę. + + +KREON + +Nie chciałbym ciężkim obrazić cię słowem. + + +TYREZJASZ + +Czynisz to, kiedy mi kłamstwo zarzucasz. + + +KREON + +Bo cech wasz cały łapczywy na zyski. + + +TYREZJASZ + +A ród tyranów w mętach chciwie łowi. + + +KREON + +Wiesz, że ty pana twojego obrażasz? + + +TYREZJASZ + + +Wiem, bo ja tobie gród ten zachowałemTyrezjasz zachował Teby, gdy podczas najazdu Siedmiu na miasto poradził Kreonowi, aby tenże własnego syna (zapewne Megarcusa) poświęcił, a tą śmiercią okupił wybawienie.. + + + +KREON + +Mądry ty wróżbiarz, lecz oddany złemu. + + +TYREZJASZ + +Tyś gotów wydrzeć mi z wnętrza tajniki. + + +KREON + +Wyrusz ty z nimi, byle nie dla zysku. + + +TYREZJASZ + +Że ty stąd zysku nie uszczkniesz, to myślę. + + +KREON + +Bacz, że zamysłów moich nie stargujesz. + + +TYREZJASZ + + + +Wiedz więc stanowczo, że nim słońce tobie/ +Wielu dokona kołowych obrotów,/ +Płód z twoich własnych poczęty wnętrzności/ +Jak trupa oddasz w zamianę za trupy,/ +Za to, że z światła strąciłeś do nocy,/ +Zamknąłeś życie haniebnie w grobowcu,/ +A tu na ziemi zmarłe trzymasz ciało,/ +Które się bóstwom należy podziemnym./ +Nie masz żadnego ty nad zmarłym prawa,/ +Ni światła bogi, którym gwałt zadajesz./ +Za to czyhają Hadesa i bogów/ +Mściwe i zgubą grożące ErynieErynie --- boginie podziemi, mszczące zbrodnie ludzi.,/ +By cię w podobnym pogrążyć nieszczęściu./ +Poznasz ty wkrótce, czy ja przekupiony/ +Tak mówię, w krótkim pokażą to czasie/ +Mężczyzn i niewiast w twoim domu jęki./ +A wszelkie miasto przeciw tobie stanie,/ +W którym psy strzępy zbezcześciły trupów,/ +Zwierzęta dzikie i ptactwo, roznosząc/ +Wstrętne po świętych zaduchy ogniskach./ +Takimi strzały ja, ciężko zelżony,/ +Godzę jak łucznik z gniewem w twoje serce/ +I tak celuję, że ostrze poczujesz./ +O chłopcze, wiedźże mnie teraz do domu,/ +By on na młodszych swe gniewy upuścił,/ +A lepiej odtąd miarkował się w słowie/ +I myśl mu lepsza zajaśniała w głowie. + + + + +CHÓR + + + +O, władco, poszedł on po wróżbie strasznej./ +A wiem to, odkąd mi czarne siwizną/ +Starość na głowie posrebrzyła włosy:/ +Fałszu on nigdy nie zwiastował miastu. + + + + +KREON + + + +Ja też wiem o tym, i trwoga mną miota./ +Ustąpić ciężko, a jeśli się oprę,/ +To łatwo klęska roztrąci mą czelność. + + + + +CHÓR + +Synu Menojka, rozwagi ci trzeba. + + +KREON + +Cóż tedy czynić? Mów, pójdę za radą. + + +CHÓR + + + +Idź i wyprowadź dziewkę z ciemnej groty,/ +A grób przygotuj dla ciała, co leży. + + + + +KREON + +Radzisz i mniemasz, że ja mam ustąpić? + + +CHÓR + + + +O, jak najprędzej, mój książę, bo chyżo/ +Kaźń bogów ludzki pochwyci nierozum. + + + + +KREON + + + +Ciężkie to, ale każę milczeć sercu./ +Cofnę się, trudno z koniecznością walczyć. + + + + +CHÓR + +Idź, sam to uczyń, nie zwalaj na innych. + +KREON + + + +Idę sam zaraz, a wy, moi słudzy,/ +Wziąwszy topory pospieszcie pospołem/ +Na miejsce widne, gdzie nagi trup leży./ +Ja, że zmieniłem me dawne zamysły,/ +Com sam namotał, sam teraz rozwiążę./ +Najlepiej może działa, kto do zgonu/ +Praw istniejących przestrzega zakonu. + + + + +CHÓR + + + +WieloimiennyWieloimiennym nazywa się tu Bakchusa, bo w rozmaitych miejscach czcią się cieszył pod rozmaitymi przydomkami., coś z Kadmosa domu/ +Przysporzył chwały dziewczynie,/ +Synu ty Zeusa, pana burz i gromu!/ +W italskiej ziemi twoje imię słynieW Italii, szczególnie południowej, w której winnic było wiele, kult Bakchusa był szczególnie popularny.,/ +A i w Eleuzys, o, synu Semeli,/ +Roje cię sławią czcicieli./ +Bakchusie, w Tebach ty dzierżysz stolicęW położonych nad rzeką Ismenem Tebach, założonych przez Kadmosa, z dawien dawna Bakchus wielkiej czci zażywał. W jego otoczeniu są szalejące dziewice, zwane bakchami, tyjadami, lub menadami. Występują one w szałem opanowanych obchodach i pochodach (thiasoi) Bakchusa, a Teby brzmią wtedy pieśniami.,/ +Kędy Ismenos ciche wody toczy;/ +Szalem twym tchnące pląsają dziewice,/ +Pienieni rozbrzmiewa gród smoczygród smoczy --- w Tebach Kadmos zabił smoka, służącego Aresowi../ +Widnyś ty w łunie jarzących kagańców,/ +Gdzie ParnasTakże i góra Parnassos w Focydzie była sławna jako siedziba Bakchusa i jego orszaku. szczytem dwugłowym wystrzela,/ +Gdzie zdrój KastaliiŹródło Kastalia, przynoszące natchnienia poetom, znajdowało się w bliskości. i swawolnych tańców/ +KorykuKorykijska grota leżała u południowego stoku Parnasu. nimfy zawodzą wesela./ +W górach nysejskiej EubeiNysa, miejscowość Eubei. W Nysie pono nimfy piastowały młodziutkiego Bakchusa. Stąd wyprowadzano jego drugą nazwę: Dionysos./ +W spowitej bluszczem mkniesz kniei,/ +Potem z tych brzegów, gdzie bujne winnice,/ +Pieśni cię chwały wiodą przez ulice/ +I brzmią radośnie ku niebom. + + + +Gród ten nad wszystkie czcisz grody na świecie/ +Wraz z matką twoją ciężarną od gromu;/ +Kiedy więc brzemię nieszczęścia nas gniecie/ +Pełnego cierpień i sromu,/ +Przybądź z Parnasu ku naszej obronie,/ +Lub przez wyjące mórz tonie. + + + +Ty, co przodujesz wśród gwiazd korowoduTy, co przodujesz wśród gwiazd... --- gwiazdy zdają się tańczyć wśród obchodów Bakchusa, które się odbywają nocną porą.,/ +Pieśniom przewodzisz wśród mroczy,/ +Zawitaj, synu Zeusowego rodu!/ +Niechaj cię zastęp naksyjskichWyspa Naksos była ogniskiem kultu Bakchusa. Legenda umieszczała także i na niej urodzenie boga, a wiadomo, że miejsc roszczących sobie prawa do tego zaszczytu było wiele. otoczy/ +Tyjad, co w szale od zmierzchu do rana/ +Tańczą i w tobie czczą pana. + + + + +POSŁANIEC + + + +O, Kadma grodu, domów AmfionaDomy Amfiona znajdują się w Tebach. Amfion, bliźniak Zethosa, był drugim założycielem Teb. Bo podczas gdy Kadmos zbudował fortecę miasta, Kadmeę, on dźwiękami swej lutni ułożył mury gród okalające./ +Mieszkańcy! życia człowieka nie śmiałbym/ +Ani wysławiać, ni ganić przenigdy,/ +Bo los podnosi i los znów pogrąża/ +Bez przerwy w szczęście ludzi i w nieszczęścia,/ +A nikt przyszłości wywróżyć nie zdolny./ +Tak Kreon zdawał się godnym podziwu,/ +On, co wyzwolił tę ziemię od wrogów/ +I jako władca jedyny nad krajem/ +Rządził, potomstwem ciesząc się kwitnącym/ +A dziś to wszystko --- stracone. Bo radość/ +Jeśli W człowieku przygaśnie, to trzymam,/ +Że on nie żyje, lecz żywym jest trupem;/ +Gromadź bogactwa do woli w twym domu,/ +Świeć jako tyran na zewnątrz: gdy cieszyć/ +Tym się nie można, to reszty tych skarbów/ +Ja bym nie nabył za dymu cień marny. + + + + +CHÓR + +Jakąż ty znowu wieść niesiesz złą księciu? + + +POSŁANIEC + +Skończyli... Śmierci ich winni, co żyją. + + +CHÓR + +Któż to mordercą, któż poległ, o rzeknij! + + +POSŁANIEC + +Hajmon nie żyje, we własnej krwi broczy. + + +CHÓR + +Z ojca czy z własnej zginąłże on ręki? + + +POSŁANIEC + +W gniewie na ojca mordy sam się zabił. + + +CHÓR + +Wróżbito, jakżeś czyn trafnie określił! + + +POSŁANIEC + +W tym rzeczy stanie dalszej trza narady. + + +CHÓR + + + +Lecz otóż widzę biedną Eurydykę,/ +Żonę Kreona; albo się przypadkiem/ +Pojawia, albo słyszała o synu. + + + + +EURYDYKA + + + +Starcy, rozmowy waszej dosłyszałam/ +Właśnie, gdym z domu wybiec zamierzała,/ +By do Pallady z modłami się zwrócić./ +I właśnie odrzwi odmykam zasuwki,/ +By je roztworzyć, gdy nagle nieszczęsna/ +Wieść uszy rani; więc padłam, zemdlona/ +Z trwogi, w objęcia mych wiernych służebnic./ +Powtórzcie tedy, co ta wieść przynosi;/ +W złym doświadczona, wysłucham słów waszych. + + + + +SamobójstwoPOSŁANIEC + + + +Ja, miłościwa pani, byłem przy tym,/ +Powiem więc wszystko, jak się wydarzyło;/ +Cóż bo ukrywać, by potem na kłamcę/ +Wyjść; --- przecie prawda zawsze fałsz przemoże./ +Ja tedy wiodłem twojego małżonka/ +Na ten pagórek, gdzie biedne leżało/ +Przez psy podarte ciało Polinika./ +Wnet do HekatyHekate --- bóstwo podobne do Artemidy i Persefony; głównie czczona jako bogini podziemna lub strasząca po drogach w otoczeniu dusz ludzi zmarłych, a niepogrzebanych, lub przedwcześnie zgasłych. zanieśliśmy modły/ +I do Plutona, by gniew ich złagodzić;/ +Obmywszy potem ciało w świętej wodzie,/ +Palimy szczątki na stosie z gałęzi/ +I grób z ojczystej sypiemy im ziemi./ +To uczyniwszy, zaraz do kamiennej/ +Ślubnogrobowej łożnicy dziewczyny/ +Spieszymy; z dala ktoś jęki usłyszał,/ +Od strony lochu, co za grób miał służyć,/ +Choć nie święciły go żadne obrzędy./ +Wraz więc donosi panu, co zasłyszał./ +Tego dochodzą zaś, kiedy się zbliżył,/ +Łkania żałosne, a pierś mu wybucha/ +Głosem rozpaczy: «O, ja nieszczęśliwy,/ +Czyż ja wróżbitą? czyż nie kroczę teraz/ +Drogą największej w żywocie mym klęski?/ +Syna wołanie mnie mrozi. O, słudzy,/ +Spieszcie wy naprzód, zbliżcie się do grobu,/ +I przez szczelinę głazem zawaloną/ +Wszedłszy do wnętrza, baczcie, czy Hajmona/ +Głosy ja słyszę, czy bogi mnie durzą». ---/ +Posłuszni woli zwątpiałego pana,/ +Idziem na zwiady, a w grobowca głębi/ +Dojrzym wnet dziewki, wiszącej za gardło/ +Ściśnięte węzłem muślinowej chusty,/ +Podczas gdy młodzian uchwycił ją wpoły,/ +Boleśnie jęcząc nad szczęścia utratą,/ +Nad czynem ojca, nieszczęsnymi śluby./ +Kreon, zoczywszy to, ciężko zajęknął,/ +Rzuca się naprzód i wśród łkania woła:/ +«O, ty nieszczęsny! cóżeś ty uczynił!/ +Czy szał cię jaki opętał złowrogi?/ +Wychodź, o synu, błagalnie cię proszę!»/ +Lecz syn na niego dzikim łysnął wzrokiem/ +I twarz przekrzywił, a słowa nie rzekłszy/ +Ima się miecza; wraz ojciec ucieczką/ +Uszedł zamachu; natenczas nieszczęsny/ +W gniewie na siebie nad ostrzem się schyla/ +I miecz w bok wraża; lecz jeszcze w konaniu/ +Drętwym ramieniem do zmarłej się tuli,/ +A z ust dyszących wytryska mu struga/ +Krwawa na blade kochanki policzki. + + +[Eurydyka wybiega za scenę] + + +Trup dziś przy trupie, osiągnął on śluby,/ +W domu Hadesa złożony przy lubej./ +Nieszczęściem dowiódł, że wśród ludzi tłumu/ +Największe klęski płyną z nierozumu. + + + + +CHÓR + + + +A cóż stąd wróżysz, że znikła niewiasta,/ +Nie rzekłszy złego lub dobrego słowa? + + + +POSŁANIEC + + + +I ja się dziwię, lecz żywię nadzieję,/ +Że posłyszawszy o ciosie, nie chciała/ +Żałości swojej pospólstwu okazać,/ +Lecz się cofnęła do wnętrza domostwa,/ +By wśród sług wiernych wylewać łzy gorzkie./ +Toć jej rozwaga nie dopuści zbrodni. + + + + +CHÓR + + + +Nic nie wiem, ale milczenie uporne,/ +Jak i zbyt głośne jęki, zło mi wróżą. + + + + +POSŁANIEC + + + +Wnet się dowiemy, czy w głębiach rozpaczy/ +Nie kryje ona tajnego zamysłu./ +Idźmy do domu, bo dobrze ty mówisz:/ +Nadmierna cisza jest głosem złowrogim. + + + + +[Wchodzi Kreon, dźwigając ciało syna] + + +CHÓR + + + +Lecz otóż książę tu właśnie nadchodzi;/ +O! znak wymowny ujął on ramiony,/ +Nie cudzej zbrodni, jeśli rzec się godzi,/ +Lecz własnej winy szalonej. + + + + +Rozpacz, Wyrzuty sumieniaKREON + + + +Klnę moich myśli śmierciodajne winy,/ +Co zatwardziły mi serce!/ +Widzicie teraz wśród jednej rodziny/ +Ofiary, ofiar mordercę./ +Słowo dziś moje me czyny przeklina;/ +W samym, o! życia rozkwicie/ +Przedwczesne losy porwały mi syna,/ +Mój obłęd zmiażdżył to życie. + + + + +CHÓR + +Późno się zdajesz poznawać, co słuszne. + + +KREON + + + +Biada mi!/ +Przejrzałem biedny: jakiś bóg złowrogi/ +Zwalił na głowę swe brzemię,/ +Na szału popełniał mnie drogi,/ +Szczęście me zdeptał, wbił w ziemię./ +O biada! do zguby/ +Wiodą śmiertelnych rachuby. + + + + +POSŁANIEC DRUGI + + + +Panie! Ty nieszczęść masz wielkie zasoby./ +Bo jedne dźwigasz w twych rękach nieszczęsnych/ +A drugie ujrzysz niebawem w twym domu. + + + + +KREON + +Czyż ja nie na dnie już nieszczęścia głębi? + + +SamobójstwoPOSŁANIEC DRUGI + + + +Nie masz już żony; syna twego matka/ +Właśnie na swoje targnęła się życie. + + + + +KREON + + + +Nieubłagana przystani, Hadesie,/ +Gdzież koniec moich boleści?/ +O! znowu nowe len niesie/ +Godzące w serce mi wieści./ +W męża, co legł już, wtórym godzisz ciosem,/ +Złowrogim słowami i głosem./ +Biada! Nieszczęście z nieszczęścia się sączy,/ +Z synem śmierć żonę mi łączy. + + + + +CHOR + +Widzieć to możesz, dom stoi otworem. + + +KREON + + + +Złe się jak burza nade mną zerwało,/ +Nie widzę końca mej męce:/ +Syna zmarłego dźwigałem ja w ręce,/ +A teraz żony martwe widzę ciało./ +O biada! matczyna/ +Rozpacz dognała już syna. + + + + +POSŁANIEC DRUGI + + + +Zranionej ciężko nocą zaszły oczy,/ +U stóp ołtarza zajękła nad zgonem/ +Niegdyś chwalebnym syna Megareusa/ +I nad Hajmonem, a wreszcie przekleństwa/ +Tobie rzuciła ciężkie, dzieciobójcy. + + + + +KREON + + + +Groza mną trzęsie. Przecz mieczem nikt w łono/ +Ciosu mi śmierci nie zada?/ +O, ja nieszczęsny! O, biada mi! biada!/ +W toń nieszczęść sunę spienioną. + + + + +POSŁANIEC DRUGI + + + +W konaniu jeszcze za te wszystkie zgony/ +Na twoją głowę miotała przekleństwa. + + + + +KREON + +Jakimże ona skończyła sposobem? + + +POSŁANIEC DRUGI + + + +Żelazo w własnej utopiła piersi,/ +Słysząc o syna opłakanym końcu. + + + + +KREON + + + +O, biada! win mi nie ujmie nikt inny,/ +Nie ujmie męki ni kaźni./ +Ja bo nieszczęsny, ja twej śmierci winny./ +Nuże, o słudzy, wiedźcie mnie co raźniej,/ +Uwodźcie mnie stad; niech moim obliczem/ +Nie mierżę, ja, co mniej jestem, jak niczym! + + + + +CHÓR + + + +Zysku ty szukasz, jestli zysk w nieszczęściu,/ +Bo lżejsza klęska, co nie gnębi długo. + + + + +RozpaczKREON + + + +Błogosławiony dzień ów, który nędzy/ +Kres już ostatni położy,/ +Przybądź, o przybądź co prędzej,/ +Niechbym nie ujrzał jutrzejszej ja zorzy! + + + + +CHÓR + + + +To rzecz przyszłości, dla obecnej chwili/ +Trza działać; tamto obmyślić --- rzecz bogów. + + + + +KREON + +Wszystkie pragnienia w tym jednym zawarłem + + +CHÓR + + + +O nic nie błagaj, bo próżne marzenia,/ +By człowiek uszedł swego przeznaczenia. + + + + +KREON + + + +Wiedźcie mnie, sługi, uchodźcie stąd ze mną,/ +Mnie, który syna zabiłem wbrew woli/ +I tamtą. Biada! aż w oczach mi ciemno./ +Dokąd się zwrócić, gdzie spojrzeć w niedoli?/ +Wszystko mi łamie się w ręku,/ +Los mnie powalił, pełen burz i lęku. + + + + +CHÓR + + + +Nad szczęścia błysk, co złudą mar,/ +Najwyższy skarb rozumu dar./ +A wyzwie ten niechybny sąd,/ +Kto bogów lży i wali rząd./ +I ześlą oni swą zemstę i kary/ +Na pychę słowa w człowieku,/ +I w klęsk odmęcie rozumu i miary/ +W późnym nauczą go wieku. + + + + + + + + + + + + \ No newline at end of file diff --git a/src/oai/tests/files/lubie-kiedy-kobieta.xml b/src/oai/tests/files/lubie-kiedy-kobieta.xml new file mode 100755 index 000000000..7ea6f44b0 --- /dev/null +++ b/src/oai/tests/files/lubie-kiedy-kobieta.xml @@ -0,0 +1,63 @@ + + + +Przerwa-Tetmajer, Kazimierz +Lubię, kiedy kobieta... +Kozioł, Paweł +Niedziałkowska, Marta +Fundacja Nowoczesna Polska +Modernizm +Liryka +Wiersz +Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez Bibliotekę Śląską z egzemplarza pochodzącego ze zbiorów BŚ. +http://wolnelektury.pl/katalog/lektura/lubie-kiedy-kobieta +Kazimierz Przerwa-Tetmajer, Wybór poezji, nakł. Gebethnera i Wolffa, Warszawa-Kraków 1897 +Domena publiczna - Kazimierz Przerwa-Tetmajer zm. 1940 +1940 +xml +text +text +2010-10-12 +L +pol + + + + +Kazimierz Przerwa-Tetmajer + +Lubię, kiedy kobieta... + +Lubię, kiedy kobieta omdlewa w objęciu,/ +Kiedy w lubieżnym zwisa przez ramię przegięciu,/ +PożądanieGdy jej oczy zachodzą mgłą, twarz cała blednie,/ +I wargi się wilgotne rozchylą bezwiednie. + + + +Lubię, kiedy ją rozkosz i żądza oniemi,/ +Gdy wpija się w ramiona palcami drżącemi,/ +Gdy krótkim, urywanym oddycha oddechem,/ +I oddaje się cała z mdlejącym uśmiechem. + + + +WstydI lubię ten wstyd, co się kobiecie zabrania/ +Przyznać, że czuje rozkosz, że moc pożądania/ +Zwalcza ją, a sycenie żądzy oszaleniaoszaleniać (neol.) --- czynić szalonym.,/ +Gdy szuka ust, a lęka się słów i spojrzenia. + + + +Poeta, MizoginiaLubię to --- i tę chwilę lubię, gdy koło mnie/ +Wyczerpana, zmęczona leży nieprzytomnie,/ +A myśl moja już od niej wybiega skrzydlata/ +W nieskończone przestrzenie nieziemskiego świata. + + + + + + + + \ No newline at end of file diff --git a/src/oai/tests/oaipmhapi.py b/src/oai/tests/oaipmhapi.py new file mode 100644 index 000000000..db57bc18b --- /dev/null +++ b/src/oai/tests/oaipmhapi.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from catalogue.test_utils import WLTestCase +from catalogue import models +from oai.handlers import * +from oaipmh.server import * +from os import path +from oaipmh.metadata import MetadataRegistry +from lxml import etree + + +class BookMetadataTest(WLTestCase): + def setUp(self): + super(BookMetadataTest, self).setUp() + xml = path.join(path.dirname(__file__), 'files/lubie-kiedy-kobieta.xml') + self.book = models.Book.from_xml_file(xml) + + xml = path.join(path.dirname(__file__), 'files/antygona.xml') + self.book2 = models.Book.from_xml_file(xml) + + mr = MetadataRegistry() + self.catalogue = Catalogue(mr) + + mr.registerWriter('oai_dc', oai_dc_writer) + nsmap = {'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI} + self.xml = XMLTreeServer(self.catalogue, mr, nsmap) + + def test_get_record(self): + self.xml.getRecord(identifier='lubie-kiedy-kobieta', + metadataPrefix='oai_dc') + self.xml.listRecords(metadataPrefix='oai_dc') + + def test_selecting(self): + records, token = self.catalogue.listRecords(**{'set': 'epoch:starozytnosc'}) diff --git a/src/oai/urls.py b/src/oai/urls.py new file mode 100644 index 000000000..13ea9f12a --- /dev/null +++ b/src/oai/urls.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + +urlpatterns = patterns('oai.views', + url(r'^$', 'oaipmh', name='oaipmh')) diff --git a/src/oai/views.py b/src/oai/views.py new file mode 100644 index 000000000..5bb902508 --- /dev/null +++ b/src/oai/views.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from oai.handlers import Catalogue, NS_DCTERMS, nsdcterms +from oaipmh.server import ServerBase, NS_OAIDC, NS_DC, NS_XSI, nsoaidc, nsdc +from oaipmh.metadata import MetadataRegistry +from django.http import HttpResponse +from django.utils.functional import SimpleLazyObject +from lxml.etree import SubElement + + + +#ns_map = {'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI } + + +def fbc_oai_dc_writer(element, metadata): + """FBC notified us that original writer does not output all necessary namespace declarations. + """ + e_dc = SubElement(element, nsoaidc('dc'), + nsmap={'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI}) + e_dc.set('{%s}schemaLocation' % NS_XSI, + '%s http://www.openarchives.org/OAI/2.0/oai_dc.xsd' % NS_OAIDC) + map = metadata.getMap() + for name in [ + 'title', 'creator', 'subject', 'description', 'publisher', + 'contributor', 'date', 'type', 'format', 'identifier', + 'source', 'language', 'relation', 'coverage', 'rights', + ]: + for value in map.get(name, []): + e = SubElement(e_dc, nsdc(name)) + e.text = value + + +def qdc_writer(element, metadata): + """FBC notified us that original writer does not output all necessary namespace declarations. + """ + nsmap = {'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI, 'dcterms': NS_DCTERMS} + map = metadata.getMap() + for name in [ + 'title', 'creator', 'subject', 'description', 'publisher', + 'contributor', 'date', 'type', 'format', 'identifier', + 'source', 'language', 'relation', 'coverage', 'rights', + ]: + for value in map.get(name, []): + e = SubElement(element, nsdc(name), nsmap=nsmap) + e.text = value + + for name in ['hasPart', 'isPartOf']: + for value in map.get(name, []): + e = SubElement(element, nsdcterms(name), nsmap=nsmap) + e.text = value + + + +metadata_registry = MetadataRegistry() +metadata_registry.registerWriter('oai_dc', fbc_oai_dc_writer) +metadata_registry.registerWriter('qdc', qdc_writer) + + +server = SimpleLazyObject(lambda: + ServerBase(Catalogue(metadata_registry), metadata_registry, + {'topxsi': NS_XSI}) + ) + + +def oaipmh(request): + resp = server.handleRequest(request.GET) + return HttpResponse(resp, content_type='application/xml') diff --git a/src/opds/__init__.py b/src/opds/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/opds/tests/__init__.py b/src/opds/tests/__init__.py new file mode 100755 index 000000000..b1399aee7 --- /dev/null +++ b/src/opds/tests/__init__.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from unittest import skipIf +from lxml import etree +from django.conf import settings +from django.core.files.base import ContentFile +import catalogue +from catalogue.test_utils import (BookInfoStub, PersonStub, info_args, + WLTestCase, get_fixture) +from catalogue.models import Book +from librarian import WLURI, XMLNamespace +from search.index import Index, Search + +AtomNS = XMLNamespace("http://www.w3.org/2005/Atom") + + +@skipIf(getattr(settings, 'NO_SEARCH_INDEX', False), + u'Requires search server and NO_SEARCH_INDEX=False.') +class OpdsSearchTests(WLTestCase): + """Tests search feed in OPDS..""" + def setUp(self): + WLTestCase.setUp(self) + index = Index() + index.index.delete_all() + index.index.commit() + + self.do_doktora = Book.from_xml_file( + get_fixture('do-doktora.xml')) + self.do_anusie = Book.from_xml_file( + get_fixture('fraszka-do-anusie.xml', catalogue)) + + def assert_finds(self, query, books): + """Takes a query and tests against books expected to be found.""" + tree = etree.fromstring( + self.client.get('/opds/search/?%s' % query).content) + elem_ids = tree.findall('.//%s/%s' % (AtomNS('entry'), AtomNS('id'))) + slugs = [WLURI(elem.text).slug for elem in elem_ids] + self.assertEqual(set(slugs), set(b.slug for b in books), + u"OPDS search '%s' failed." % query) + + def test_opds_search_simple(self): + """Do a simple q= test, also emulate dumb OPDS clients.""" + both = set([self.do_doktora, self.do_anusie]) + self.assert_finds('q=fraszka', both) + self.assert_finds('q=fraszka&author={opds:author}', both) + + def test_opds_search_title(self): + """Search by title.""" + both = set([self.do_doktora, self.do_anusie]) + self.assert_finds('title=fraszka', both) + self.assert_finds('title=fraszka', both) + self.assert_finds('q=title:doktora', [self.do_doktora]) + + def test_opds_search_author(self): + """Search by author.""" + self.assert_finds('q=fraszka&author=Kochanowski', [self.do_doktora]) + self.assert_finds('q=fraszka+author:Kochanowski', [self.do_doktora]) + self.assert_finds('q=Kochanowski', [self.do_doktora]) + + def test_opds_search_translator(self): + """Search by translator.""" + self.assert_finds('q=fraszka&translator=Fikcyjny', [self.do_doktora]) + self.assert_finds('q=fraszka+translator:Fikcyjny', [self.do_doktora]) + self.assert_finds('q=Fikcyjny', [self.do_doktora]) diff --git a/src/opds/tests/files/do-doktora.xml b/src/opds/tests/files/do-doktora.xml new file mode 100644 index 000000000..53c172430 --- /dev/null +++ b/src/opds/tests/files/do-doktora.xml @@ -0,0 +1,56 @@ + + + +Kochanowski, Jan +Do doktora (Fraszka a doktor — to są dwie rzeczy przeciwne...) +http://wolnelektury.pl/lektura/fraszki-ksiegi-trzecie +Krzyżanowski, Julian +Otwinowska, Barbara +Sekuła, Aleksandra +Sutkowska, Olga +Gałecki, Dariusz +Fikcyjny, Tłumacz +Fundacja Nowoczesna Polska +Renesans +Liryka +Fraszka +Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez Bibliotekę Narodową z egzemplarza pochodzącego ze zbiorów BN. +http://wolnelektury.pl/katalog/lektura/fraszki-ksiegi-trzecie-do-doktora-fraszka-a-doktor-to-sa-dwi +http://www.polona.pl/dlibra/doccontent2?id=1499&from=editionindex&dirids=1 +Jan Kochanowski, Dzieła polskie, tom 1, Państwowy Instytut Wydawniczy, wyd. 8, Warszawa, 1976 +Domena publiczna - Jan Kochanowski zm. 1584 +1584 +xml +text +text +2007-09-07 +SP2 +G +L +pol +http://redakcja.wolnelektury.pl/media/dynamic/cover/image/607.jpg +Artondra Hall@Flickr, CC BY 2.0 +http://redakcja.wolnelektury.pl/cover/image/607 + + + + +Jan Kochanowski + +Fraszki, Księgi wtóre + +Do doktoraŻartobliwy ton każe przypuszczać, iż adresatem wierszyka jest Jakub Montanus (por. przyp. do fr. II 49). + + + +Fraszka a doktor --- to są dwie rzeczy przeciwne;/ +Przeto u mnie, doktorze, twe żądanie dziwne,/ +Że do mnie ślesz po fraszki, tak daleko k'temu;/ +Ja jednak dosyć czynię rozkazaniu twemu./ +Ty strzeż swojej powagi, nie baw się fraszkami,/ +Ale mi je odeśli prędkimi nogami,/ +A nie dziwuj się, że je tak drogo szacuję,/ +Bo chocia fraszki, przedsię w nich doktory czuję. + + + \ No newline at end of file diff --git a/src/opds/urls.py b/src/opds/urls.py new file mode 100644 index 000000000..00831f0b3 --- /dev/null +++ b/src/opds/urls.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url +from opds.views import RootFeed, ByCategoryFeed, ByTagFeed, UserFeed, UserSetFeed, SearchFeed + + +urlpatterns = patterns('opds.views', + url(r'^$', RootFeed(), name="opds_authors"), + url(r'^search/$', SearchFeed(), name="opds_search"), + url(r'^user/$', UserFeed(), name="opds_user"), + url(r'^set/(?P[a-zA-Z0-9-]+)/$', UserSetFeed(), name="opds_user_set"), + url(r'^(?P[a-zA-Z0-9-]+)/$', ByCategoryFeed(), name="opds_by_category"), + url(r'^(?P[a-zA-Z0-9-]+)/(?P[a-zA-Z0-9-]+)/$', ByTagFeed(), name="opds_by_tag"), +) diff --git a/src/opds/views.py b/src/opds/views.py new file mode 100644 index 000000000..c529e0272 --- /dev/null +++ b/src/opds/views.py @@ -0,0 +1,436 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import os.path +from urlparse import urljoin + +from django.contrib.syndication.views import Feed +from django.core.urlresolvers import reverse +from django.shortcuts import get_object_or_404 +from django.utils.feedgenerator import Atom1Feed +from django.conf import settings +from django.http import Http404 +from django.contrib.sites.models import Site +from django.utils.functional import lazy + +from basicauth import logged_in_or_basicauth, factory_decorator +from catalogue.models import Book, Tag + +from search.views import Search +import operator +import logging +import re + +log = logging.getLogger('opds') + +from stats.utils import piwik_track + +_root_feeds = ( + { + u"category": u"", + u"link": u"opds_user", + u"link_args": [], + u"title": u"Moje półki", + u"description": u"Półki użytkownika dostępne po zalogowaniu" + }, + { + u"category": u"author", + u"link": u"opds_by_category", + u"link_args": [u"author"], + u"title": u"Autorzy", + u"description": u"Utwory wg autorów" + }, + { + u"category": u"kind", + u"link": u"opds_by_category", + u"link_args": [u"kind"], + u"title": u"Rodzaje", + u"description": u"Utwory wg rodzajów" + }, + { + u"category": u"genre", + u"link": u"opds_by_category", + u"link_args": [u"genre"], + u"title": u"Gatunki", + u"description": u"Utwory wg gatunków" + }, + { + u"category": u"epoch", + u"link": u"opds_by_category", + u"link_args": [u"epoch"], + u"title": u"Epoki", + u"description": u"Utwory wg epok" + }, +) + + +current_domain = lazy(lambda: Site.objects.get_current().domain, str)() +def full_url(url): + return urljoin("http://%s" % current_domain, url) + + +class OPDSFeed(Atom1Feed): + link_rel = u"subsection" + link_type = u"application/atom+xml" + + _book_parent_img = lazy(lambda: full_url(os.path.join(settings.STATIC_URL, "img/book-parent.png")), str)() + try: + _book_parent_img_size = unicode(os.path.getsize(os.path.join(settings.STATIC_ROOT, "img/book-parent.png"))) + except: + _book_parent_img_size = '' + + _book_img = lazy(lambda: full_url(os.path.join(settings.STATIC_URL, "img/book.png")), str)() + try: + _book_img_size = unicode(os.path.getsize(os.path.join(settings.STATIC_ROOT, "img/book.png"))) + except: + _book_img_size = '' + + + def add_root_elements(self, handler): + super(OPDSFeed, self).add_root_elements(handler) + handler.addQuickElement(u"link", None, + {u"href": reverse("opds_authors"), + u"rel": u"start", + u"type": u"application/atom+xml"}) + handler.addQuickElement(u"link", None, + {u"href": full_url(os.path.join(settings.STATIC_URL, "opensearch.xml")), + u"rel": u"search", + u"type": u"application/opensearchdescription+xml"}) + + + def add_item_elements(self, handler, item): + """ modified from Atom1Feed.add_item_elements """ + handler.addQuickElement(u"title", item['title']) + + # add a OPDS Navigation link if there's no enclosure + if item['enclosure'] is None: + handler.addQuickElement(u"link", u"", {u"href": item['link'], u"rel": u"subsection", u"type": u"application/atom+xml"}) + # add a "green book" icon + handler.addQuickElement(u"link", '', + {u"rel": u"http://opds-spec.org/thumbnail", + u"href": self._book_parent_img, + u"length": self._book_parent_img_size, + u"type": u"image/png"}) + if item['pubdate'] is not None: + # FIXME: rfc3339_date is undefined, is this ever run? + handler.addQuickElement(u"updated", rfc3339_date(item['pubdate']).decode('utf-8')) + + # Author information. + if item['author_name'] is not None: + handler.startElement(u"author", {}) + handler.addQuickElement(u"name", item['author_name']) + if item['author_email'] is not None: + handler.addQuickElement(u"email", item['author_email']) + if item['author_link'] is not None: + handler.addQuickElement(u"uri", item['author_link']) + handler.endElement(u"author") + + # Unique ID. + if item['unique_id'] is not None: + unique_id = item['unique_id'] + else: + # FIXME: get_tag_uri is undefined, is this ever run? + unique_id = get_tag_uri(item['link'], item['pubdate']) + handler.addQuickElement(u"id", unique_id) + + # Summary. + # OPDS needs type=text + if item['description'] is not None: + handler.addQuickElement(u"summary", item['description'], {u"type": u"text"}) + + # Enclosure as OPDS Acquisition Link + if item['enclosure'] is not None: + handler.addQuickElement(u"link", '', + {u"rel": u"http://opds-spec.org/acquisition", + u"href": item['enclosure'].url, + u"length": item['enclosure'].length, + u"type": item['enclosure'].mime_type}) + # add a "red book" icon + handler.addQuickElement(u"link", '', + {u"rel": u"http://opds-spec.org/thumbnail", + u"href": self._book_img, + u"length": self._book_img_size, + u"type": u"image/png"}) + + # Categories. + for cat in item['categories']: + handler.addQuickElement(u"category", u"", {u"term": cat}) + + # Rights. + if item['item_copyright'] is not None: + handler.addQuickElement(u"rights", item['item_copyright']) + + +class AcquisitionFeed(Feed): + feed_type = OPDSFeed + link = u'http://www.wolnelektury.pl/' + item_enclosure_mime_type = "application/epub+zip" + author_name = u"Wolne Lektury" + author_link = u"http://www.wolnelektury.pl/" + + def item_title(self, book): + return book.title + + def item_description(self): + return u'' + + def item_link(self, book): + return book.get_absolute_url() + + def item_author_name(self, book): + try: + return book.tags.filter(category='author')[0].name + except KeyError: + return u'' + + def item_author_link(self, book): + try: + return book.tags.filter(category='author')[0].get_absolute_url() + except KeyError: + return u'' + + def item_enclosure_url(self, book): + return full_url(book.epub_file.url) if book.epub_file else None + + def item_enclosure_length(self, book): + return book.epub_file.size if book.epub_file else None + +@piwik_track +class RootFeed(Feed): + feed_type = OPDSFeed + title = u'Wolne Lektury' + link = u'http://wolnelektury.pl/' + description = u"Spis utworów na stronie http://WolneLektury.pl" + author_name = u"Wolne Lektury" + author_link = u"http://wolnelektury.pl/" + + def items(self): + return _root_feeds + + def item_title(self, item): + return item['title'] + + def item_link(self, item): + return reverse(item['link'], args=item['link_args']) + + def item_description(self, item): + return item['description'] + +@piwik_track +class ByCategoryFeed(Feed): + feed_type = OPDSFeed + link = u'http://wolnelektury.pl/' + description = u"Spis utworów na stronie http://WolneLektury.pl" + author_name = u"Wolne Lektury" + author_link = u"http://wolnelektury.pl/" + + def get_object(self, request, category): + feed = [feed for feed in _root_feeds if feed['category'] == category] + if feed: + feed = feed[0] + else: + raise Http404 + + return feed + + def title(self, feed): + return feed['title'] + + def items(self, feed): + return Tag.objects.filter(category=feed['category']).exclude(items=None) + + def item_title(self, item): + return item.name + + def item_link(self, item): + return reverse("opds_by_tag", args=[item.category, item.slug]) + + def item_description(self): + return u'' + +@piwik_track +class ByTagFeed(AcquisitionFeed): + def link(self, tag): + return tag.get_absolute_url() + + def title(self, tag): + return tag.name + + def description(self, tag): + return u"Spis utworów na stronie http://WolneLektury.pl" + + def get_object(self, request, category, slug): + return get_object_or_404(Tag, category=category, slug=slug) + + def items(self, tag): + return Book.tagged_top_level([tag]) + + +@factory_decorator(logged_in_or_basicauth()) +@piwik_track +class UserFeed(Feed): + feed_type = OPDSFeed + link = u'http://www.wolnelektury.pl/' + description = u"Półki użytkownika na stronie http://WolneLektury.pl" + author_name = u"Wolne Lektury" + author_link = u"http://wolnelektury.pl/" + + def get_object(self, request): + return request.user + + def title(self, user): + return u"Półki użytkownika %s" % user.username + + def items(self, user): + return Tag.objects.filter(category='set', user=user).exclude(items=None) + + def item_title(self, item): + return item.name + + def item_link(self, item): + return reverse("opds_user_set", args=[item.slug]) + + def item_description(self): + return u'' + + +@factory_decorator(logged_in_or_basicauth()) +@piwik_track +class UserSetFeed(AcquisitionFeed): + def link(self, tag): + return tag.get_absolute_url() + + def title(self, tag): + return tag.name + + def description(self, tag): + return u"Spis utworów na stronie http://WolneLektury.pl" + + def get_object(self, request, slug): + return get_object_or_404(Tag, category='set', slug=slug, user=request.user) + + def items(self, tag): + return Book.tagged.with_any([tag]) + + +@piwik_track +class SearchFeed(AcquisitionFeed): + description = u"Wyniki wyszukiwania na stronie WolneLektury.pl" + title = u"Wyniki wyszukiwania" + + QUOTE_OR_NOT = r'(?:(?=["])"([^"]+)"|([^ ]+))' + INLINE_QUERY_RE = re.compile( + r"author:" + QUOTE_OR_NOT + + "|translator:" + QUOTE_OR_NOT + + "|title:" + QUOTE_OR_NOT + + "|categories:" + QUOTE_OR_NOT + + "|description:" + QUOTE_OR_NOT + + "|text:" + QUOTE_OR_NOT + ) + MATCHES = { + 'author': (0, 1), + 'translator': (2, 3), + 'title': (4, 5), + 'categories': (6, 7), + 'description': (8, 9), + 'text': (10, 11), + } + + PARAMS_TO_FIELDS = { + 'author': 'authors', + 'translator': 'translators', + # 'title': 'title', + 'categories': 'tag_name_pl', + 'description': 'text', + # 'text': 'text', + } + + ATOM_PLACEHOLDER = re.compile(r"^{(atom|opds):\w+}$") + + def get_object(self, request): + """ + For OPDS 1.1 We should handle a query for search terms + and criteria provided either as opensearch or 'inline' query. + OpenSearch defines fields: atom:author, atom:contributor (treated as translator), + atom:title. Inline query provides author, title, categories (treated as book tags), + description (treated as content search terms). + + if search terms are provided, we shall search for books + according to Hint information (from author & contributror & title). + + but if search terms are empty, we should do a different search + (perhaps for is_book=True) + + """ + + query = request.GET.get('q', '') + + inline_criteria = re.findall(self.INLINE_QUERY_RE, query) + if inline_criteria: + remains = re.sub(self.INLINE_QUERY_RE, '', query) + remains = re.sub(r'[ \t]+', ' ', remains) + + def get_criteria(criteria, name): + for c in criteria: + for p in self.MATCHES[name]: + if c[p]: + if p % 2 == 0: + return c[p].replace('+', ' ') + return c[p] + return None + + criteria = dict(map( + lambda cn: (cn, get_criteria(inline_criteria, cn)), + ['author', 'translator', 'title', 'categories', + 'description', 'text'])) + query = remains + # empty query and text set case? + log.debug("Inline query = [%s], criteria: %s" % (query, criteria)) + else: + def remove_dump_data(val): + """Some clients don't get opds placeholders and just send them.""" + if self.ATOM_PLACEHOLDER.match(val): + return '' + return val + + criteria = dict([(cn, remove_dump_data(request.GET.get(cn, ''))) + for cn in self.MATCHES.keys()]) + # query is set above. + log.debug("Inline query = [%s], criteria: %s" % (query, criteria)) + + srch = Search() + + book_hit_filter = srch.index.Q(book_id__any=True) + filters = [book_hit_filter] + [srch.index.Q( + **{self.PARAMS_TO_FIELDS.get(cn, cn): criteria[cn]} + ) for cn in self.MATCHES.keys() if cn in criteria + if criteria[cn]] + + if query: + q = srch.index.query( + reduce(operator.or_, + [srch.index.Q(**{self.PARAMS_TO_FIELDS.get(cn, cn): query}) + for cn in self.MATCHES.keys()], + srch.index.Q())) + else: + q = srch.index.query(srch.index.Q()) + + q = srch.apply_filters(q, filters).field_limit(score=True, fields=['book_id']) + results = q.execute() + + book_scores = dict([(r['book_id'], r['score']) for r in results]) + books = Book.objects.filter(id__in=set([r['book_id'] for r in results])) + books = list(books) + books.sort(reverse=True, key=lambda book: book_scores[book.id]) + return books + + def get_link(self, query): + return "%s?q=%s" % (reverse('search'), query) + + def items(self, books): + try: + return books + except ValueError: + # too short a query + return [] diff --git a/src/pdcounter/__init__.py b/src/pdcounter/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/pdcounter/admin.py b/src/pdcounter/admin.py new file mode 100644 index 000000000..e2e3fc310 --- /dev/null +++ b/src/pdcounter/admin.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin + +from pdcounter.models import BookStub, Author + + +class BookStubAdmin(admin.ModelAdmin): + list_display = ('title', 'author', 'slug', 'pd') + search_fields = ('title', 'author') + ordering = ('title',) + + prepopulated_fields = {'slug': ('title',)} + +class AuthorAdmin(admin.ModelAdmin): + list_display = ('name', 'slug', 'death') + search_fields = ('name',) + ordering = ('sort_key', 'name') + + prepopulated_fields = {'slug': ('name',), 'sort_key': ('name',),} + + +admin.site.register(BookStub, BookStubAdmin) +admin.site.register(Author, AuthorAdmin) diff --git a/src/pdcounter/fixtures/lista.json b/src/pdcounter/fixtures/lista.json new file mode 100644 index 000000000..b73b5433e --- /dev/null +++ b/src/pdcounter/fixtures/lista.json @@ -0,0 +1,9699 @@ +[ + { + "pk": 1, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "amiel", + "slug": "irit-amiel", + "gazeta_link": "", + "name": "Irit Amiel" + } + }, + { + "pk": 2, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "anczyc", + "slug": "wladyslaw-anczyc", + "gazeta_link": "", + "name": "W\u0142adys\u0142aw Anczyc" + } + }, + { + "pk": 3, + "model": "pdcounter.author", + "fields": { + "death": 1944, + "description": "", + "wiki_link": "", + "sort_key": "baczynski", + "slug": "krzysztof-kamil-baczynski", + "gazeta_link": "", + "name": "Krzysztof Kamil Baczy\u0144ski" + } + }, + { + "pk": 4, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "balucki", + "slug": "michal-balucki", + "gazeta_link": "", + "name": "Micha\u0142 Ba\u0142ucki" + } + }, + { + "pk": 5, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "baranczak", + "slug": "stanislaw-baranczak", + "gazeta_link": "", + "name": "Stanis\u0142aw Bara\u0144czak" + } + }, + { + "pk": 6, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "bedier", + "slug": "joseph-bedier", + "gazeta_link": "", + "name": "Joseph B\u00e9dier" + } + }, + { + "pk": 7, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "belza", + "slug": "wladyslaw-belza", + "gazeta_link": "", + "name": "W\u0142adys\u0142aw Be\u0142za" + } + }, + { + "pk": 8, + "model": "pdcounter.author", + "fields": { + "death": 1983, + "description": "", + "wiki_link": "", + "sort_key": "bialoszewski", + "slug": "miron-bialoszewski", + "gazeta_link": "", + "name": "Miron Bia\u0142oszewski" + } + }, + { + "pk": 9, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "bielowski", + "slug": "august-bielowski", + "gazeta_link": "", + "name": "August Bielowski" + } + }, + { + "pk": 10, + "model": "pdcounter.author", + "fields": { + "death": 2009, + "description": "", + "wiki_link": "", + "sort_key": "blonski", + "slug": "jan-blonski", + "gazeta_link": "", + "name": "Jan B\u0142o\u0144ski" + } + }, + { + "pk": 11, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "bordkiewicz", + "slug": "stefan-bordkiewicz", + "gazeta_link": "", + "name": "Stefan Bordkiewicz" + } + }, + { + "pk": 12, + "model": "pdcounter.author", + "fields": { + "death": 1951, + "description": "", + "wiki_link": "", + "sort_key": "borowski", + "slug": "tadeusz-borowski", + "gazeta_link": "", + "name": "Tadeusz Borowski" + } + }, + { + "pk": 13, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "bracia", + "slug": "grimm-bracia", + "gazeta_link": "", + "name": "Grimm Bracia" + } + }, + { + "pk": 14, + "model": "pdcounter.author", + "fields": { + "death": 1966, + "description": "", + "wiki_link": "", + "sort_key": "brzechwa", + "slug": "jan-brzechwa", + "gazeta_link": "", + "name": "Jan Brzechwa" + } + }, + { + "pk": 15, + "model": "pdcounter.author", + "fields": { + "death": 1940, + "description": "", + "wiki_link": "", + "sort_key": "bulhakow", + "slug": "michal-bulhakow", + "gazeta_link": "", + "name": "Micha\u0142 Bu\u0142hakow" + } + }, + { + "pk": 16, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "burnett", + "slug": "frances-hodgson-burnett", + "gazeta_link": "", + "name": "Frances Hodgson Burnett" + } + }, + { + "pk": 17, + "model": "pdcounter.author", + "fields": { + "death": 1960, + "description": "", + "wiki_link": "", + "sort_key": "camus", + "slug": "albert-camus", + "gazeta_link": "", + "name": "Albert Camus" + } + }, + { + "pk": 18, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "cervantes", + "slug": "miguel-cervantes", + "gazeta_link": "", + "name": "Miguel Cervantes" + } + }, + { + "pk": 19, + "model": "pdcounter.author", + "fields": { + "death": 1976, + "description": "", + "wiki_link": "", + "sort_key": "christie", + "slug": "agatha-christie", + "gazeta_link": "", + "name": "Agatha Christie" + } + }, + { + "pk": 20, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "chwin", + "slug": "stefan-chwin", + "gazeta_link": "", + "name": "Stefan Chwin" + } + }, + { + "pk": 21, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "collodi", + "slug": "carlo-collodi", + "gazeta_link": "", + "name": "Carlo Collodi" + } + }, + { + "pk": 22, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "conrad", + "slug": "joseph-conrad", + "gazeta_link": "", + "name": "Joseph Conrad" + } + }, + { + "pk": 23, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "czechowicz", + "slug": "jozef-czechowicz", + "gazeta_link": "", + "name": "J\u00f3zef Czechowicz" + } + }, + { + "pk": 24, + "model": "pdcounter.author", + "fields": { + "death": 1965, + "description": "", + "wiki_link": "", + "sort_key": "dabrowska", + "slug": "maria-dabrowska", + "gazeta_link": "", + "name": "Maria D\u0105browska" + } + }, + { + "pk": 25, + "model": "pdcounter.author", + "fields": { + "death": 1990, + "description": "", + "wiki_link": "", + "sort_key": "dahl", + "slug": "ronald-dahl", + "gazeta_link": "", + "name": "Ronald Dahl" + } + }, + { + "pk": 26, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "dennhoff-czarnocki", + "slug": "waclaw-dennhoff-czarnocki", + "gazeta_link": "", + "name": "Wac\u0142aw Dennhoff-Czarnocki" + } + }, + { + "pk": 27, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "dmowski", + "slug": "roman-dmowski", + "gazeta_link": "", + "name": "Roman Dmowski" + } + }, + { + "pk": 28, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "dolega-mostowicz", + "slug": "tadeusz-dolega-mostowicz", + "gazeta_link": "", + "name": "Tadeusz Do\u0142\u0119ga-Mostowicz" + } + }, + { + "pk": 29, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "dostojewski", + "slug": "fiodor-dostojewski", + "gazeta_link": "", + "name": "Fiodor Dostojewski" + } + }, + { + "pk": 30, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "eco", + "slug": "umberto-eco", + "gazeta_link": "", + "name": "Umberto Eco" + } + }, + { + "pk": 31, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "erynbergh", + "slug": "gustawa-erynbergh", + "gazeta_link": "", + "name": "Gustawa Erynbergh" + } + }, + { + "pk": 32, + "model": "pdcounter.author", + "fields": { + "death": 1985, + "description": "", + "wiki_link": "", + "sort_key": "fiedler", + "slug": "arkady-fiedler", + "gazeta_link": "", + "name": "Arkady Fiedler" + } + }, + { + "pk": 33, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "fink", + "slug": "ida-fink", + "gazeta_link": "", + "name": "Ida Fink" + } + }, + { + "pk": 34, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "flaubert", + "slug": "gustaw-flaubert", + "gazeta_link": "", + "name": "Gustaw Flaubert" + } + }, + { + "pk": 35, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "fredro", + "slug": "aleksander-fredro", + "gazeta_link": "", + "name": "Aleksander Fredro" + } + }, + { + "pk": 36, + "model": "pdcounter.author", + "fields": { + "death": 1953, + "description": "", + "wiki_link": "", + "sort_key": "galczynski", + "slug": "konstanty-ildefons-galczynski", + "gazeta_link": "", + "name": "Konstanty Ildefons Ga\u0142czy\u0144ski" + } + }, + { + "pk": 37, + "model": "pdcounter.author", + "fields": { + "death": 1969, + "description": "", + "wiki_link": "", + "sort_key": "gombrowicz", + "slug": "witold-gombrowicz", + "gazeta_link": "", + "name": "Witold Gombrowicz" + } + }, + { + "pk": 38, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "gomulicki", + "slug": "wiktor-gomulicki", + "gazeta_link": "", + "name": "Wiktor Gomulicki" + } + }, + { + "pk": 39, + "model": "pdcounter.author", + "fields": { + "death": 1977, + "description": "", + "wiki_link": "", + "sort_key": "goscinny", + "slug": "rene-goscinny", + "gazeta_link": "", + "name": "Ren\u00e9 Goscinny" + } + }, + { + "pk": 40, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "grabinski", + "slug": "stefan-grabinski", + "gazeta_link": "", + "name": "Stefan Grabi\u0144ski" + } + }, + { + "pk": 41, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "grass", + "slug": "guenter-grass", + "gazeta_link": "", + "name": "G\u00fcnter Grass" + } + }, + { + "pk": 42, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "grynberg", + "slug": "henryk-grynberg", + "gazeta_link": "", + "name": "Henryk Grynberg" + } + }, + { + "pk": 43, + "model": "pdcounter.author", + "fields": { + "death": 1998, + "description": "", + "wiki_link": "", + "sort_key": "herbert", + "slug": "zbigniew-herbert", + "gazeta_link": "", + "name": "Zbigniew Herbert" + } + }, + { + "pk": 44, + "model": "pdcounter.author", + "fields": { + "death": 2000, + "description": "", + "wiki_link": "", + "sort_key": "herling-grudzinski", + "slug": "gustaw-herling-grudzinski", + "gazeta_link": "", + "name": "Gustaw Herling-Grudzi\u0144ski" + } + }, + { + "pk": 45, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "homer", + "slug": "homer", + "gazeta_link": "", + "name": "Homer" + } + }, + { + "pk": 46, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "horacy", + "slug": "horacy", + "gazeta_link": "", + "name": "Horacy" + } + }, + { + "pk": 47, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "huelle", + "slug": "pawel-huelle", + "gazeta_link": "", + "name": "Pawe\u0142 Huelle" + } + }, + { + "pk": 48, + "model": "pdcounter.author", + "fields": { + "death": 1980, + "description": "", + "wiki_link": "", + "sort_key": "iwaszkiewicz", + "slug": "jaroslaw-iwaszkiewicz", + "gazeta_link": "", + "name": "Jaros\u0142aw Iwaszkiewicz" + } + }, + { + "pk": 49, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "jachowicz", + "slug": "stanislaw-jachowicz", + "gazeta_link": "", + "name": "Stanis\u0142aw Jachowicz" + } + }, + { + "pk": 50, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "janion", + "slug": "maria-janion", + "gazeta_link": "", + "name": "Maria Janion" + } + }, + { + "pk": 51, + "model": "pdcounter.author", + "fields": { + "death": 1983, + "description": "", + "wiki_link": "", + "sort_key": "jastrun", + "slug": "mieczyslaw-jastrun", + "gazeta_link": "", + "name": "Mieczys\u0142aw Jastrun" + } + }, + { + "pk": 52, + "model": "pdcounter.author", + "fields": { + "death": 2003, + "description": "", + "wiki_link": "", + "sort_key": "jurgielewiczowa", + "slug": "irena-jurgielewiczowa", + "gazeta_link": "", + "name": "Irena Jurgielewiczowa" + } + }, + { + "pk": 53, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "kafka", + "slug": "franz-kafka", + "gazeta_link": "", + "name": "Franz Kafka" + } + }, + { + "pk": 54, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "kakolewski", + "slug": "krzysztof-kakolewski", + "gazeta_link": "", + "name": "Krzysztof K\u0105kolewski" + } + }, + { + "pk": 55, + "model": "pdcounter.author", + "fields": { + "death": 1978, + "description": "", + "wiki_link": "", + "sort_key": "kaminski", + "slug": "aleksander-kaminski", + "gazeta_link": "", + "name": "Aleksander Kami\u0144ski" + } + }, + { + "pk": 56, + "model": "pdcounter.author", + "fields": { + "death": 2007, + "description": "", + "wiki_link": "", + "sort_key": "kapuscinski", + "slug": "ryszard-kapuscinski", + "gazeta_link": "", + "name": "Ryszard Kapu\u015bci\u0144ski" + } + }, + { + "pk": 57, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "karpinski", + "slug": "franciszek-karpinski", + "gazeta_link": "", + "name": "Franciszek Karpi\u0144ski" + } + }, + { + "pk": 58, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "kasdepke", + "slug": "grzegorz-kasdepke", + "gazeta_link": "", + "name": "Grzegorz Kasdepke" + } + }, + { + "pk": 59, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "kasprowicz", + "slug": "jan-kasprowicz", + "gazeta_link": "", + "name": "Jan Kasprowicz" + } + }, + { + "pk": 60, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "kochanowski", + "slug": "jan-kochanowski", + "gazeta_link": "", + "name": "Jan Kochanowski" + } + }, + { + "pk": 61, + "model": "pdcounter.author", + "fields": { + "death": 2009, + "description": "", + "wiki_link": "", + "sort_key": "kolakowski", + "slug": "leszek-kolakowski", + "gazeta_link": "", + "name": "Leszek Ko\u0142akowski" + } + }, + { + "pk": 62, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "kolberg", + "slug": "oskar-kolberg", + "gazeta_link": "", + "name": "Oskar Kolberg" + } + }, + { + "pk": 63, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "konopnicka", + "slug": "maria-konopnicka", + "gazeta_link": "", + "name": "Maria Konopnicka" + } + }, + { + "pk": 64, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "konwicki", + "slug": "tadeusz-konwicki", + "gazeta_link": "", + "name": "Tadeusz Konwicki" + } + }, + { + "pk": 65, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "kowalski", + "slug": "franciszek-kowalski", + "gazeta_link": "", + "name": "Franciszek Kowalski" + } + }, + { + "pk": 66, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "kozakiewicz", + "slug": "jan-kozakiewicz", + "gazeta_link": "", + "name": "Jan Kozakiewicz" + } + }, + { + "pk": 67, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "krall", + "slug": "hanna-krall", + "gazeta_link": "", + "name": "Hanna Krall" + } + }, + { + "pk": 68, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "krasicki", + "slug": "ignacy-krasicki", + "gazeta_link": "", + "name": "Ignacy Krasicki" + } + }, + { + "pk": 69, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "krasinski", + "slug": "zygmunt-krasinski", + "gazeta_link": "", + "name": "Zygmunt Krasi\u0144ski" + } + }, + { + "pk": 70, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "kraszewski", + "slug": "ignacy-kraszewski", + "gazeta_link": "", + "name": "Ignacy Kraszewski" + } + }, + { + "pk": 71, + "model": "pdcounter.author", + "fields": { + "death": 2004, + "description": "", + "wiki_link": "", + "sort_key": "kubiak", + "slug": "zygmunt-kubiak", + "gazeta_link": "", + "name": "Zygmunt Kubiak" + } + }, + { + "pk": 72, + "model": "pdcounter.author", + "fields": { + "death": 1989, + "description": "", + "wiki_link": "", + "sort_key": "kuncewiczowa", + "slug": "maria-kuncewiczowa", + "gazeta_link": "", + "name": "Maria Kuncewiczowa" + } + }, + { + "pk": 73, + "model": "pdcounter.author", + "fields": { + "death": 1993, + "description": "", + "wiki_link": "", + "sort_key": "kusniewicz", + "slug": "andrzej-kusniewicz", + "gazeta_link": "", + "name": "Andrzej Ku\u015bniewicz" + } + }, + { + "pk": 74, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "le-guin", + "slug": "ursula-le-guin", + "gazeta_link": "", + "name": "Ursula Le Guin" + } + }, + { + "pk": 75, + "model": "pdcounter.author", + "fields": { + "death": 1956, + "description": "", + "wiki_link": "", + "sort_key": "lechon", + "slug": "jan-lechon", + "gazeta_link": "", + "name": "Jan Lecho\u0144" + } + }, + { + "pk": 76, + "model": "pdcounter.author", + "fields": { + "death": 2006, + "description": "", + "wiki_link": "", + "sort_key": "lem", + "slug": "stanislaw-lem", + "gazeta_link": "", + "name": "Stanis\u0142aw Lem" + } + }, + { + "pk": 77, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "lenartowicz", + "slug": "teofil-lenartowicz", + "gazeta_link": "", + "name": "Teofil Lenartowicz" + } + }, + { + "pk": 78, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "lesmian", + "slug": "boleslaw-lesmian", + "gazeta_link": "", + "name": "Boles\u0142aw Le\u015bmian" + } + }, + { + "pk": 79, + "model": "pdcounter.author", + "fields": { + "death": 1963, + "description": "", + "wiki_link": "", + "sort_key": "lewis", + "slug": "clive-staples-lewis", + "gazeta_link": "", + "name": "Clive Staples Lewis" + } + }, + { + "pk": 80, + "model": "pdcounter.author", + "fields": { + "death": 2002, + "description": "", + "wiki_link": "", + "sort_key": "lindgren", + "slug": "astrid-lindgren", + "gazeta_link": "", + "name": "Astrid Lindgren" + } + }, + { + "pk": 81, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "lipska", + "slug": "ewa-lipska", + "gazeta_link": "", + "name": "Ewa Lipska" + } + }, + { + "pk": 82, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "lubinski", + "slug": "ludwik-pomian-lubinski", + "gazeta_link": "", + "name": "Ludwik Pomian \u0141ubi\u0144ski" + } + }, + { + "pk": 83, + "model": "pdcounter.author", + "fields": { + "death": 1985, + "description": "", + "wiki_link": "", + "sort_key": "mackiewicz", + "slug": "jozef-mackiewicz", + "gazeta_link": "", + "name": "J\u00f3zef Mackiewicz" + } + }, + { + "pk": 84, + "model": "pdcounter.author", + "fields": { + "death": 1953, + "description": "", + "wiki_link": "", + "sort_key": "makuszynski", + "slug": "kornel-makuszynski", + "gazeta_link": "", + "name": "Kornel Makuszy\u0144ski" + } + }, + { + "pk": 85, + "model": "pdcounter.author", + "fields": { + "death": 1955, + "description": "", + "wiki_link": "", + "sort_key": "mann", + "slug": "thomas-mann", + "gazeta_link": "", + "name": "Thomas Mann" + } + }, + { + "pk": 86, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "marquez", + "slug": "gabriel-garcia-marquez", + "gazeta_link": "", + "name": "Gabriel Garcia Marquez" + } + }, + { + "pk": 87, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "mickiewicz", + "slug": "adam-mickiewicz", + "gazeta_link": "", + "name": "Adam Mickiewicz" + } + }, + { + "pk": 88, + "model": "pdcounter.author", + "fields": { + "death": 2004, + "description": "", + "wiki_link": "", + "sort_key": "milosz", + "slug": "czeslaw-milosz", + "gazeta_link": "", + "name": "Czes\u0142aw Mi\u0142osz" + } + }, + { + "pk": 89, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "minkowski", + "slug": "aleksander-minkowski", + "gazeta_link": "", + "name": "Aleksander Minkowski" + } + }, + { + "pk": 90, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "moliere", + "slug": "moliere", + "gazeta_link": "", + "name": "Moli\u00e8re" + } + }, + { + "pk": 91, + "model": "pdcounter.author", + "fields": { + "death": 1952, + "description": "", + "wiki_link": "", + "sort_key": "molnar", + "slug": "ferenc-molnar", + "gazeta_link": "", + "name": "Ferenc Moln\u00e1r" + } + }, + { + "pk": 92, + "model": "pdcounter.author", + "fields": { + "death": 1942, + "description": "", + "wiki_link": "", + "sort_key": "montgomery", + "slug": "lucy-maud-montgomery", + "gazeta_link": "", + "name": "Lucy Maud Montgomery" + } + }, + { + "pk": 93, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "morsztyn", + "slug": "jan-andrzej-morsztyn", + "gazeta_link": "", + "name": "Jan Andrzej Morsztyn" + } + }, + { + "pk": 94, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "morsztyn", + "slug": "zbigniew-morsztyn", + "gazeta_link": "", + "name": "Zbigniew Morsztyn" + } + }, + { + "pk": 95, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "mrozek", + "slug": "slawomir-mrozek", + "gazeta_link": "", + "name": "S\u0142awomir Mro\u017cek" + } + }, + { + "pk": 96, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "musierowicz", + "slug": "malgorzata-musierowicz", + "gazeta_link": "", + "name": "Ma\u0142gorzata Musierowicz" + } + }, + { + "pk": 97, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "mysliwski", + "slug": "wieslaw-mysliwski", + "gazeta_link": "", + "name": "Wies\u0142aw My\u015bliwski" + } + }, + { + "pk": 98, + "model": "pdcounter.author", + "fields": { + "death": 1977, + "description": "", + "wiki_link": "", + "sort_key": "nabokov", + "slug": "vladimir-nabokov", + "gazeta_link": "", + "name": "Vladimir Nabokov" + } + }, + { + "pk": 99, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "naborowski", + "slug": "daniel-naborowski", + "gazeta_link": "", + "name": "Daniel Naborowski" + } + }, + { + "pk": 100, + "model": "pdcounter.author", + "fields": { + "death": 1954, + "description": "", + "wiki_link": "", + "sort_key": "nalkowska", + "slug": "zofia-nalkowska", + "gazeta_link": "", + "name": "Zofia Na\u0142kowska" + } + }, + { + "pk": 101, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "niemcewicz", + "slug": "julian-ursyn-niemcewicz", + "gazeta_link": "", + "name": "Julian Ursyn Niemcewicz" + } + }, + { + "pk": 102, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "niziurski", + "slug": "edmund-niziurski", + "gazeta_link": "", + "name": "Edmund Niziurski" + } + }, + { + "pk": 103, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "norwid", + "slug": "cyprian-kamil-norwid", + "gazeta_link": "", + "name": "Cyprian Kamil Norwid" + } + }, + { + "pk": 104, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "nowakowski", + "slug": "marek-nowakowski", + "gazeta_link": "", + "name": "Marek Nowakowski" + } + }, + { + "pk": 105, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "olech", + "slug": "joanna-olech", + "gazeta_link": "", + "name": "Joanna Olech" + } + }, + { + "pk": 106, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "onichimowska", + "slug": "anna-onichimowska", + "gazeta_link": "", + "name": "Anna Onichimowska" + } + }, + { + "pk": 107, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "oppman", + "slug": "artur-oppman", + "gazeta_link": "", + "name": "Artur Oppman" + } + }, + { + "pk": 108, + "model": "pdcounter.author", + "fields": { + "death": 1950, + "description": "", + "wiki_link": "", + "sort_key": "orwell", + "slug": "george-orwell", + "gazeta_link": "", + "name": "George Orwell" + } + }, + { + "pk": 109, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "orzeszkowa", + "slug": "eliza-orzeszkowa", + "gazeta_link": "", + "name": "Eliza Orzeszkowa" + } + }, + { + "pk": 110, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "ostrowska", + "slug": "bronislawa-ostrowska", + "gazeta_link": "", + "name": "Bronis\u0142awa Ostrowska" + } + }, + { + "pk": 111, + "model": "pdcounter.author", + "fields": { + "death": 1978, + "description": "", + "wiki_link": "", + "sort_key": "parandowski", + "slug": "jan-parandowski", + "gazeta_link": "", + "name": "Jan Parandowski" + } + }, + { + "pk": 112, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "pasek", + "slug": "jan-chryzostom-pasek", + "gazeta_link": "", + "name": "Jan Chryzostom Pasek" + } + }, + { + "pk": 113, + "model": "pdcounter.author", + "fields": { + "death": 1945, + "description": "", + "wiki_link": "", + "sort_key": "pawlikowska-jasnorzewska", + "slug": "maria-pawlikowska-jasnorzewska", + "gazeta_link": "", + "name": "Maria Pawlikowska-Jasnorzewska" + } + }, + { + "pk": 114, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "pilch", + "slug": "jerzy-pilch", + "gazeta_link": "", + "name": "Jerzy Pilch" + } + }, + { + "pk": 115, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "platon", + "slug": "platon", + "gazeta_link": "", + "name": "Platon" + } + }, + { + "pk": 116, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "pol", + "slug": "wincenty-pol", + "gazeta_link": "", + "name": "Wincenty Pol" + } + }, + { + "pk": 117, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "potocki", + "slug": "waclaw-potocki", + "gazeta_link": "", + "name": "Wac\u0142aw Potocki" + } + }, + { + "pk": 118, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "prus", + "slug": "boleslaw-prus", + "gazeta_link": "", + "name": "Boles\u0142aw Prus" + } + }, + { + "pk": 119, + "model": "pdcounter.author", + "fields": { + "death": 1940, + "description": "", + "wiki_link": "", + "sort_key": "przerwa-tetmajer", + "slug": "kazimierz-przerwa-tetmajer", + "gazeta_link": "", + "name": "Kazimierz Przerwa-Tetmajer" + } + }, + { + "pk": 120, + "model": "pdcounter.author", + "fields": { + "death": 1970, + "description": "", + "wiki_link": "", + "sort_key": "przybos", + "slug": "julian-przybos", + "gazeta_link": "", + "name": "Julian Przybo\u015b" + } + }, + { + "pk": 121, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "rej", + "slug": "mikolaj-rej", + "gazeta_link": "", + "name": "Miko\u0142aj Rej" + } + }, + { + "pk": 122, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "reymont", + "slug": "wladyslaw-stanislaw-reymont", + "gazeta_link": "", + "name": "W\u0142adys\u0142aw Stanis\u0142aw Reymont" + } + }, + { + "pk": 123, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "rozewicz", + "slug": "tadeusz-rozewicz", + "gazeta_link": "", + "name": "Tadeusz R\u00f3\u017cewicz" + } + }, + { + "pk": 124, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "rymkiewicz", + "slug": "jaroslaw-rymkiewicz", + "gazeta_link": "", + "name": "Jaros\u0142aw Rymkiewicz" + } + }, + { + "pk": 125, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "rzewuski", + "slug": "henryk-rzewuski", + "gazeta_link": "", + "name": "Henryk Rzewuski" + } + }, + { + "pk": 126, + "model": "pdcounter.author", + "fields": { + "death": 1944, + "description": "", + "wiki_link": "", + "sort_key": "saint-exupery", + "slug": "antoine-de-saint-exupery", + "gazeta_link": "", + "name": "Antoine de Saint Exup\u00e9ry" + } + }, + { + "pk": 127, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "sapkowski", + "slug": "andrzej-sapkowski", + "gazeta_link": "", + "name": "Andrzej Sapkowski" + } + }, + { + "pk": 128, + "model": "pdcounter.author", + "fields": { + "death": 1942, + "description": "", + "wiki_link": "", + "sort_key": "schulz", + "slug": "bruno-schulz", + "gazeta_link": "", + "name": "Bruno Schulz" + } + }, + { + "pk": 129, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "sempe", + "slug": "jean-jacques-sempe", + "gazeta_link": "", + "name": "Jean-Jacques Semp\u00e9" + } + }, + { + "pk": 130, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "shakespeare", + "slug": "william-shakespeare", + "gazeta_link": "", + "name": "William Shakespeare" + } + }, + { + "pk": 131, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "sienkiewicz", + "slug": "henryk-sienkiewicz", + "gazeta_link": "", + "name": "Henryk Sienkiewicz" + } + }, + { + "pk": 132, + "model": "pdcounter.author", + "fields": { + "death": 1991, + "description": "", + "wiki_link": "", + "sort_key": "singer", + "slug": "isaac-bashevis-singer", + "gazeta_link": "", + "name": "Isaac Bashevis Singer" + } + }, + { + "pk": 133, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "skalkowski", + "slug": "marceli-skalkowski", + "gazeta_link": "", + "name": "Marceli Ska\u0142kowski" + } + }, + { + "pk": 134, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "skarga", + "slug": "piotr-skarga", + "gazeta_link": "", + "name": "Piotr Skarga" + } + }, + { + "pk": 135, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "slowacki", + "slug": "juliusz-slowacki", + "gazeta_link": "", + "name": "Juliusz S\u0142owacki" + } + }, + { + "pk": 136, + "model": "pdcounter.author", + "fields": { + "death": 1957, + "description": "", + "wiki_link": "", + "sort_key": "staff", + "slug": "leopold-staff", + "gazeta_link": "", + "name": "Leopold Staff" + } + }, + { + "pk": 137, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "staszic", + "slug": "stanislaw-staszic", + "gazeta_link": "", + "name": "Stanis\u0142aw Staszic" + } + }, + { + "pk": 138, + "model": "pdcounter.author", + "fields": { + "death": 1968, + "description": "", + "wiki_link": "", + "sort_key": "steinbeck", + "slug": "john-steinbeck", + "gazeta_link": "", + "name": "John Steinbeck" + } + }, + { + "pk": 139, + "model": "pdcounter.author", + "fields": { + "death": 1969, + "description": "", + "wiki_link": "", + "sort_key": "stempowski", + "slug": "jerzy-stempowski", + "gazeta_link": "", + "name": "Jerzy Stempowski" + } + }, + { + "pk": 140, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "stevenson", + "slug": "robert-louis-stevenson", + "gazeta_link": "", + "name": "Robert Louis Stevenson" + } + }, + { + "pk": 141, + "model": "pdcounter.author", + "fields": { + "death": 1966, + "description": "", + "wiki_link": "", + "sort_key": "stryjkowski", + "slug": "julian-stryjkowski", + "gazeta_link": "", + "name": "Julian Stryjkowski" + } + }, + { + "pk": 142, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "suchodolski", + "slug": "rajnold-suchodolski", + "gazeta_link": "", + "name": "Rajnold Suchodolski" + } + }, + { + "pk": 143, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "swietochowski", + "slug": "aleksander-swietochowski", + "gazeta_link": "", + "name": "Aleksander \u015awi\u0119tochowski" + } + }, + { + "pk": 144, + "model": "pdcounter.author", + "fields": { + "death": 1992, + "description": "", + "wiki_link": "", + "sort_key": "szklarski", + "slug": "alfred-szklarski", + "gazeta_link": "", + "name": "Alfred Szklarski" + } + }, + { + "pk": 145, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "szymborska", + "slug": "wislawa-szymborska", + "gazeta_link": "", + "name": "Wis\u0142awa Szymborska" + } + }, + { + "pk": 146, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "tarnowski", + "slug": "wladyslaw-tarnowski", + "gazeta_link": "", + "name": "W\u0142adys\u0142aw Tarnowski" + } + }, + { + "pk": 147, + "model": "pdcounter.author", + "fields": { + "death": 2004, + "description": "", + "wiki_link": "", + "sort_key": "terakowska", + "slug": "dorota-terakowska", + "gazeta_link": "", + "name": "Dorota Terakowska" + } + }, + { + "pk": 148, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "thackeray", + "slug": "william-makepeace-thackeray", + "gazeta_link": "", + "name": "William Makepeace Thackeray" + } + }, + { + "pk": 149, + "model": "pdcounter.author", + "fields": { + "death": 2000, + "description": "", + "wiki_link": "", + "sort_key": "tischner", + "slug": "jozef-tischner", + "gazeta_link": "", + "name": "J\u00f3zef Tischner" + } + }, + { + "pk": 150, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "tokarczuk", + "slug": "olga-tokarczuk", + "gazeta_link": "", + "name": "Olga Tokarczuk" + } + }, + { + "pk": 151, + "model": "pdcounter.author", + "fields": { + "death": 1973, + "description": "", + "wiki_link": "", + "sort_key": "tolkien", + "slug": "john-ronald-reuel-tolkien", + "gazeta_link": "", + "name": "John Ronald Reuel Tolkien" + } + }, + { + "pk": 152, + "model": "pdcounter.author", + "fields": { + "death": 1953, + "description": "", + "wiki_link": "", + "sort_key": "tuwim", + "slug": "julian-tuwim", + "gazeta_link": "", + "name": "Julian Tuwim" + } + }, + { + "pk": 153, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "twain", + "slug": "mark-twain", + "gazeta_link": "", + "name": "Mark Twain" + } + }, + { + "pk": 154, + "model": "pdcounter.author", + "fields": { + "death": 2006, + "description": "", + "wiki_link": "", + "sort_key": "twardowski", + "slug": "jan-twardowski", + "gazeta_link": "", + "name": "Jan Twardowski" + } + }, + { + "pk": 155, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "tyrtajos", + "slug": "tyrtajos", + "gazeta_link": "", + "name": "Tyrtajos" + } + }, + { + "pk": 156, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "verne", + "slug": "jules-gabriel-verne", + "gazeta_link": "", + "name": "Jules Gabriel Verne" + } + }, + { + "pk": 157, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "wasilewski", + "slug": "edmund-wasilewski", + "gazeta_link": "", + "name": "Edmund Wasilewski" + } + }, + { + "pk": 158, + "model": "pdcounter.author", + "fields": { + "death": 1969, + "description": "", + "wiki_link": "", + "sort_key": "wierzynski", + "slug": "kazimierz-wierzynski", + "gazeta_link": "", + "name": "Kazimierz Wierzy\u0144ski" + } + }, + { + "pk": 159, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "witcher", + "slug": "moony-witcher", + "gazeta_link": "", + "name": "Moony Witcher" + } + }, + { + "pk": 160, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "witkiewicz", + "slug": "stanislaw-ignacy-witkiewicz", + "gazeta_link": "", + "name": "Stanis\u0142aw Ignacy Witkiewicz" + } + }, + { + "pk": 161, + "model": "pdcounter.author", + "fields": { + "death": 1976, + "description": "", + "wiki_link": "", + "sort_key": "wittlin", + "slug": "jozef-wittlin", + "gazeta_link": "", + "name": "J\u00f3zef Wittlin" + } + }, + { + "pk": 162, + "model": "pdcounter.author", + "fields": { + "death": 2005, + "description": "", + "wiki_link": "", + "sort_key": "wojtyla", + "slug": "karol-wojtyla", + "gazeta_link": "", + "name": "Karol Wojty\u0142a" + } + }, + { + "pk": 163, + "model": "pdcounter.author", + "fields": { + "death": 1975, + "description": "", + "wiki_link": "", + "sort_key": "wyka", + "slug": "kazimierz-wyka", + "gazeta_link": "", + "name": "Kazimierz Wyka" + } + }, + { + "pk": 164, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "wyspianski", + "slug": "stanislaw-wyspianski", + "gazeta_link": "", + "name": "Stanis\u0142aw Wyspia\u0144ski" + } + }, + { + "pk": 165, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "zagajewski", + "slug": "adam-zagajewski", + "gazeta_link": "", + "name": "Adam Zagajewski" + } + }, + { + "pk": 166, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "zeromski", + "slug": "stefan-zeromski", + "gazeta_link": "", + "name": "Stefan \u017beromski" + } + }, + { + "pk": 167, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "zola", + "slug": "emil-zola", + "gazeta_link": "", + "name": "Emil Zola" + } + }, + { + "pk": 168, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "zygmunt", + "slug": "gloger-zygmunt", + "gazeta_link": "", + "name": "Gloger Zygmunt" + } + }, + { + "pk": 622, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jules Gabriel Verne", + "slug": "20-000-mil-podmorskiej-zeglugi", + "pd": 0, + "title": "20 000 mil podmorskiej \u017ceglugi" + } + }, + { + "pk": 629, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "a-coz-z-ta-dziecina", + "pd": 0, + "title": "A c\u00f3\u017c z t\u0105 dziecin\u0105" + } + }, + { + "pk": 437, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "abc", + "pd": 0, + "title": "ABC" + } + }, + { + "pk": 356, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "ach-juz-w-mym-rodzicielskim-domu", + "pd": 0, + "title": "Ach, ju\u017c w mym rodzicielskim domu" + } + }, + { + "pk": 110, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Brzechwa", + "slug": "akademia-pana-kleksa", + "pd": 2037, + "title": "Akademia Pana Kleksa" + } + }, + { + "pk": 3, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "albatros", + "pd": 0, + "title": "Albatros" + } + }, + { + "pk": 388, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Lucy Maud Montgomery", + "slug": "ania-z-zielonego-wzgorza", + "pd": null, + "title": "Ania z Zielonego Wzg\u00f3rza" + } + }, + { + "pk": 528, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "aniol-ognisty-moj-aniol-lewy", + "pd": 0, + "title": "Anio\u0142 ognisty \u2014 m\u00f3j anio\u0142 lewy" + } + }, + { + "pk": 529, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "anioly-stoja-na-rodzinnych-polach", + "pd": 0, + "title": "Anio\u0142y stoj\u0105 na rodzinnych polach" + } + }, + { + "pk": 301, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ignacy Krasicki", + "slug": "antymonachomachia", + "pd": 0, + "title": "Antymonachomachia" + } + }, + { + "pk": 83, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "apokalipsa-sw-jana", + "pd": 0, + "title": "Apokalipsa \u015bw. Jana" + } + }, + { + "pk": 609, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Julian Stryjkowski", + "slug": "austeria", + "pd": 2037, + "title": "Austeria" + } + }, + { + "pk": 105, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "bajka-o-szesciu-slugach", + "pd": 0, + "title": "Bajka o sze\u015bciu s\u0142ugach" + } + }, + { + "pk": 309, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Lem", + "slug": "bajki-robotow", + "pd": 2077, + "title": "Bajki robot\u00f3w" + } + }, + { + "pk": 4, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "balkon", + "pd": 0, + "title": "Balkon" + } + }, + { + "pk": 649, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Marceli Ska\u0142kowski", + "slug": "bartoszu-bartoszu-czyli-krakowiak-kosciuszki", + "pd": 0, + "title": "Bartoszu, Bartoszu, czyli krakowiak Ko\u015bciuszki" + } + }, + { + "pk": 5, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "beatrycze", + "pd": 0, + "title": "Beatrycze" + } + }, + { + "pk": 530, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "beniowski", + "pd": 0, + "title": "Beniowski" + } + }, + { + "pk": 119, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "bieg-bez-nadziei", + "pd": 0, + "title": "Bieg bez nadziei" + } + }, + { + "pk": 120, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "bildur-baldur-i-czas", + "pd": 0, + "title": "Bildur, Baldur i czas" + } + }, + { + "pk": 189, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "G\u00fcnter Grass", + "slug": "blaszany-bebenek", + "pd": null, + "title": "Blaszany b\u0119benek" + } + }, + { + "pk": 106, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "blekitny-ognik", + "pd": 0, + "title": "B\u0142\u0119kitny ognik" + } + }, + { + "pk": 6, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "blogoslawienstwo", + "pd": 0, + "title": "B\u0142ogos\u0142awie\u0144stwo" + } + }, + { + "pk": 456, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Bronis\u0142awa Ostrowska", + "slug": "bohaterski-mis", + "pd": 0, + "title": "Bohaterski mi\u015b" + } + }, + { + "pk": 1, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Dante Alighieri", + "slug": "boska-komedia", + "pd": 0, + "title": "Boska komedia" + } + }, + { + "pk": 650, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Alojzy Feli\u0144ski, Antoni G\u00f3recki", + "slug": "boze-cos-polske", + "pd": 0, + "title": "Bo\u017ce, co\u015b Polsk\u0119" + } + }, + { + "pk": 313, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "boze-pelen-w-niebie-chwaly", + "pd": 0, + "title": "Bo\u017ce, pe\u0142en w niebie chwa\u0142y" + } + }, + { + "pk": 287, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Franciszek Karpi\u0144ski", + "slug": "bog-sie-rodzi", + "pd": 0, + "title": "B\u00f3g si\u0119 rodzi" + } + }, + { + "pk": 350, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Astrid Lindgren", + "slug": "bracia-lwie-serce", + "pd": 2081, + "title": "Bracia Lwie Serce" + } + }, + { + "pk": 630, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "bracia-patrzcie-jana", + "pd": 0, + "title": "Bracia, patrzcie Jana" + } + }, + { + "pk": 84, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "brat-i-siostra", + "pd": 0, + "title": "Brat i siostra" + } + }, + { + "pk": 397, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "brulion-bebe-b", + "pd": null, + "title": "Brulion Bebe B." + } + }, + { + "pk": 279, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jaros\u0142aw Iwaszkiewicz", + "slug": "brzezina", + "pd": 2051, + "title": "Brzezina" + } + }, + { + "pk": 488, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "burza", + "pd": 0, + "title": "Burza" + } + }, + { + "pk": 438, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "cham", + "pd": 0, + "title": "Cham" + } + }, + { + "pk": 172, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ronald Dahl", + "slug": "charlie-i-fabryka-czekolady", + "pd": null, + "title": "Charlie i fabryka czekolady" + } + }, + { + "pk": 611, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander \u015awi\u0119tochowski", + "slug": "chawa-rubin", + "pd": 0, + "title": "Chawa Rubin" + } + }, + { + "pk": 387, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ferenc Moln\u00e1r", + "slug": "chlopcy-z-placu-broni", + "pd": null, + "title": "Ch\u0142opcy z Placu Broni" + } + }, + { + "pk": 311, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Teofil Lenartowicz", + "slug": "chodzil-senek-i-drzemota", + "pd": 0, + "title": "Chodzi\u0142 Senek i Drzemota" + } + }, + { + "pk": 280, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Jachowicz", + "slug": "chory-kotek", + "pd": 0, + "title": "Chory kotek" + } + }, + { + "pk": 531, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "chor-duchow-izraelskich", + "pd": 0, + "title": "Ch\u00f3r duch\u00f3w izraelskich" + } + }, + { + "pk": 314, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "cialo-me-wyklete", + "pd": 0, + "title": "Cia\u0142o me, wykl\u0119te" + } + }, + { + "pk": 631, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "cicha-noc", + "pd": 0, + "title": "Cicha noc" + } + }, + { + "pk": 466, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "cienie", + "pd": 0, + "title": "Cienie" + } + }, + { + "pk": 7, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "co-powiesz-w-ten-zmierzch", + "pd": 0, + "title": "Co Powiesz W Ten Zmierzch" + } + }, + { + "pk": 532, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "corka-cerery", + "pd": 0, + "title": "C\u00f3rka Cerery" + } + }, + { + "pk": 402, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "corka-robrojka", + "pd": null, + "title": "C\u00f3rka Robrojka" + } + }, + { + "pk": 306, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Maria Kuncewiczowa", + "slug": "cudzoziemka", + "pd": 2060, + "title": "Cudzoziemka" + } + }, + { + "pk": 408, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "czarna-polewka", + "pd": null, + "title": "Czarna polewka" + } + }, + { + "pk": 353, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Thomas Mann", + "slug": "czarodziejska-gora", + "pd": 2026, + "title": "Czarodziejska g\u00f3ra" + } + }, + { + "pk": 357, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "czaty", + "pd": 0, + "title": "Czaty" + } + }, + { + "pk": 85, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "czerwony-kapturek", + "pd": 0, + "title": "Czerwony Kapturek" + } + }, + { + "pk": 8, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "czlowiek-i-morze", + "pd": 0, + "title": "Cz\u0142owiek I Morze" + } + }, + { + "pk": 432, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Anna Onichimowska", + "slug": "daleki-rejs", + "pd": null, + "title": "Daleki rejs" + } + }, + { + "pk": 612, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander \u015awi\u0119tochowski", + "slug": "damian-cepenko", + "pd": 0, + "title": "Damian Cepenko" + } + }, + { + "pk": 9, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "danse-macabre", + "pd": 0, + "title": "Danse Macabre" + } + }, + { + "pk": 10, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "de-profundis-clamavi", + "pd": 0, + "title": "De Profundis Clamavi" + } + }, + { + "pk": 205, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "djanie-i-apollinowi", + "pd": 0, + "title": "Djanie i Apollinowi" + } + }, + { + "pk": 578, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do", + "pd": 0, + "title": "Do ***" + } + }, + { + "pk": 206, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-albiusa-tibulla", + "pd": 0, + "title": "Do Albiusa Tibulla" + } + }, + { + "pk": 412, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Daniel Naborowski", + "slug": "do-anny", + "pd": 0, + "title": "Do Anny" + } + }, + { + "pk": 207, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-antoniusa", + "pd": 0, + "title": "Do Antoniusa" + } + }, + { + "pk": 208, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-apollina", + "pd": 0, + "title": "Do Apollina" + } + }, + { + "pk": 209, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-aristiusa-fuska", + "pd": 0, + "title": "Do Aristiusa Fuska" + } + }, + { + "pk": 210, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-asteryi", + "pd": 0, + "title": "Do Asteryi" + } + }, + { + "pk": 211, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-augusta", + "pd": 0, + "title": "Do Augusta" + } + }, + { + "pk": 212, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-bakchusa", + "pd": 0, + "title": "Do Bakchusa" + } + }, + { + "pk": 213, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-bariny", + "pd": 0, + "title": "Do Bariny" + } + }, + { + "pk": 214, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-cezara-augusta", + "pd": 0, + "title": "Do Cezara Augusta" + } + }, + { + "pk": 215, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-chciwych-na-pieniadz", + "pd": 0, + "title": "Do chciwych na pieni\u0105dz" + } + }, + { + "pk": 216, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-chloe", + "pd": 0, + "title": "Do Chloe" + } + }, + { + "pk": 217, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-chlorydy", + "pd": 0, + "title": "Do Chlorydy" + } + }, + { + "pk": 218, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-chorego-mecenasa", + "pd": 0, + "title": "Do chorego Mecenasa" + } + }, + { + "pk": 219, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-cilniusa-mecenasa", + "pd": 0, + "title": "Do Cilniusa Mecenasa" + } + }, + { + "pk": 33, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "do-czytelnika", + "pd": 0, + "title": "Do Czytelnika" + } + }, + { + "pk": 358, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "do-d-d", + "pd": 0, + "title": "Do D* D*" + } + }, + { + "pk": 276, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-djany", + "pd": 0, + "title": "Do Djany" + } + }, + { + "pk": 221, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-dzbanka", + "pd": 0, + "title": "Do dzbanka" + } + }, + { + "pk": 222, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-eliusa-lamii", + "pd": 0, + "title": "Do Eliusa Lamii" + } + }, + { + "pk": 220, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-elljusa", + "pd": 0, + "title": "Do Elljusa" + } + }, + { + "pk": 223, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-fauna", + "pd": 0, + "title": "Do Fauna" + } + }, + { + "pk": 224, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-festjusa", + "pd": 0, + "title": "Do Festjusa" + } + }, + { + "pk": 225, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-fihdyli", + "pd": 0, + "title": "Do Fihdyli" + } + }, + { + "pk": 226, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-fortuny", + "pd": 0, + "title": "Do Fortuny" + } + }, + { + "pk": 533, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-franciszka-szemiotha", + "pd": 0, + "title": "Do Franciszka Szemiotha" + } + }, + { + "pk": 227, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-fyllidy", + "pd": 0, + "title": "Do Fyllidy" + } + }, + { + "pk": 228, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-galatei", + "pd": 0, + "title": "Do Galatei" + } + }, + { + "pk": 229, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-glycery", + "pd": 0, + "title": "Do Glycery" + } + }, + { + "pk": 534, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-hrabiego-gustawa-podziekowanie", + "pd": 0, + "title": "Do hrabiego Gustawa podzi\u0119kowanie" + } + }, + { + "pk": 230, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-ikciusa", + "pd": 0, + "title": "Do Ikciusa" + } + }, + { + "pk": 231, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-kajusa-asiniusa-polliona", + "pd": 0, + "title": "Do Kajusa Asiniusa Polliona" + } + }, + { + "pk": 232, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-kalliopy", + "pd": 0, + "title": "Do Kalliopy" + } + }, + { + "pk": 194, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-kanidii-trucicielki", + "pd": 0, + "title": "Do Kanidii trucicielki" + } + }, + { + "pk": 233, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-kochanka-lalagi", + "pd": 0, + "title": "Do kochanka Lalagi" + } + }, + { + "pk": 11, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "do-kreolki", + "pd": 0, + "title": "Do Kreolki" + } + }, + { + "pk": 234, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-ksantiasa-focejczyka", + "pd": 0, + "title": "Do Ksantiasa Focejczyka" + } + }, + { + "pk": 235, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-kwinktiliusa-warusa", + "pd": 0, + "title": "Do Kwinktiliusa Warusa" + } + }, + { + "pk": 236, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-kwinktiusa-hirpina", + "pd": 0, + "title": "Do Kwinktiusa Hirpina" + } + }, + { + "pk": 568, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-laury", + "pd": 0, + "title": "Do Laury" + } + }, + { + "pk": 237, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-leukonoe", + "pd": 0, + "title": "Do Leukonoe" + } + }, + { + "pk": 238, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-liciniusa-mureny", + "pd": 0, + "title": "Do Liciniusa Mureny" + } + }, + { + "pk": 239, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-ligurina", + "pd": 0, + "title": "Do Ligurina" + } + }, + { + "pk": 195, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-lubieznej-staruszki", + "pd": 0, + "title": "Do lubie\u017cnej staruszki" + } + }, + { + "pk": 196, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-ludu-rzymskiego", + "pd": 0, + "title": "Do ludu rzymskiego" + } + }, + { + "pk": 535, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-ludwiki-bobrowny", + "pd": 0, + "title": "Do Ludwiki Bobr\u00f3wny" + } + }, + { + "pk": 240, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-lutni", + "pd": 0, + "title": "Do lutni" + } + }, + { + "pk": 241, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-lyce", + "pd": 0, + "title": "Do Lyce" + } + }, + { + "pk": 242, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-lyhdyi", + "pd": 0, + "title": "Do Lyhdyi" + } + }, + { + "pk": 12, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "do-madonny", + "pd": 0, + "title": "Do Madonny" + } + }, + { + "pk": 243, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-manliusa-torkwata", + "pd": 0, + "title": "Do Manliusa Torkwata" + } + }, + { + "pk": 244, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-marciusa-cenzorina", + "pd": 0, + "title": "Do Marciusa Cenzorina" + } + }, + { + "pk": 245, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-marka-lolljusa", + "pd": 0, + "title": "Do Marka Lolljusa" + } + }, + { + "pk": 246, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-marka-wipsaniusa-agrippy", + "pd": 0, + "title": "Do Marka Wipsaniusa Agrippy" + } + }, + { + "pk": 359, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "do-maryi-putkamerowej", + "pd": 0, + "title": "Do Maryi Putkamerowej" + } + }, + { + "pk": 536, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-matki", + "pd": 0, + "title": "Do matki" + } + }, + { + "pk": 360, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "do-matki-polki", + "pd": 0, + "title": "Do Matki Polki" + } + }, + { + "pk": 197, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-mecenasa", + "pd": 0, + "title": "Do Mecenasa" + } + }, + { + "pk": 247, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-melpomeny", + "pd": 0, + "title": "Do Melpomeny" + } + }, + { + "pk": 248, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-merkuryusza", + "pd": 0, + "title": "Do Merkuryusza" + } + }, + { + "pk": 198, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-mewiusa-poety", + "pd": 0, + "title": "Do Mewiusa poety" + } + }, + { + "pk": 249, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-miasta-rzymu", + "pd": 0, + "title": "Do miasta Rzymu" + } + }, + { + "pk": 250, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-mlodego-slugi", + "pd": 0, + "title": "Do m\u0142odego s\u0142ugi" + } + }, + { + "pk": 251, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-mlodziezy", + "pd": 0, + "title": "Do m\u0142odzie\u017cy" + } + }, + { + "pk": 252, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-munaciusa-pianka", + "pd": 0, + "title": "Do Munaciusa Pianka" + } + }, + { + "pk": 199, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-neery", + "pd": 0, + "title": "Do Neery" + } + }, + { + "pk": 253, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-neobuli", + "pd": 0, + "title": "Do Neobuli" + } + }, + { + "pk": 361, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "do-niemna", + "pd": 0, + "title": "Do Niemna" + } + }, + { + "pk": 254, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-okretu-majacego-zawiesc-wirgiljusa-do-aten", + "pd": 0, + "title": "Do okr\u0119tu maj\u0105cego zawie\u015b\u0107 Wirgiljusa do Aten" + } + }, + { + "pk": 537, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-pani-joanny-bobrowej", + "pd": 0, + "title": "Do pani Joanny Bobrowej" + } + }, + { + "pk": 538, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-pastereczki", + "pd": 0, + "title": "Do pastereczki" + } + }, + { + "pk": 200, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-pettiusa", + "pd": 0, + "title": "Do Pettiusa" + } + }, + { + "pk": 256, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-pompejusa", + "pd": 0, + "title": "Do Pompejusa" + } + }, + { + "pk": 255, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-pompejusa-grosfa", + "pd": 0, + "title": "Do Pompejusa Grosfa" + } + }, + { + "pk": 257, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-postumiusa", + "pd": 0, + "title": "Do Postumiusa" + } + }, + { + "pk": 13, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "do-przechodzacej", + "pd": 0, + "title": "Do Przechodz\u0105cej" + } + }, + { + "pk": 201, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-przyjaciol", + "pd": 0, + "title": "Do przyjaci\u00f3\u0142" + } + }, + { + "pk": 258, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-przyjaciolki", + "pd": 0, + "title": "Do przyjaci\u00f3\u0142ki" + } + }, + { + "pk": 260, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-pyrry", + "pd": 0, + "title": "Do Pyrry" + } + }, + { + "pk": 261, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-rzeczypospolitej", + "pd": 0, + "title": "Do Rzeczypospolitej" + } + }, + { + "pk": 262, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-rzymian", + "pd": 0, + "title": "Do Rzymian" + } + }, + { + "pk": 263, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-sallustiusa-krispa", + "pd": 0, + "title": "Do Sallustiusa Krispa" + } + }, + { + "pk": 264, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-septimiusa", + "pd": 0, + "title": "Do Septimiusa" + } + }, + { + "pk": 265, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-siebie-samego", + "pd": 0, + "title": "Do siebie samego" + } + }, + { + "pk": 266, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-skapca", + "pd": 0, + "title": "Do sk\u0105pca" + } + }, + { + "pk": 202, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-starej-rozpustnicy", + "pd": 0, + "title": "Do starej rozpustnicy" + } + }, + { + "pk": 632, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "do-szopy-hej-pasterze", + "pd": 0, + "title": "Do szopy, hej pasterze" + } + }, + { + "pk": 267, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-taliarcha", + "pd": 0, + "title": "Do Taliarcha" + } + }, + { + "pk": 268, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-telefa", + "pd": 0, + "title": "Do Telefa" + } + }, + { + "pk": 539, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-teofila-januszewskiego", + "pd": 0, + "title": "Do Teofila Januszewskiego" + } + }, + { + "pk": 269, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-tyndarydy", + "pd": 0, + "title": "Do Tyndarydy" + } + }, + { + "pk": 270, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-walgiusa-rufusa", + "pd": 0, + "title": "Do Walgiusa Rufusa" + } + }, + { + "pk": 271, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-wenery", + "pd": 0, + "title": "Do Wenery" + } + }, + { + "pk": 272, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-wergiliusa", + "pd": 0, + "title": "Do Wergiliusa" + } + }, + { + "pk": 273, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-wirgiliusa-marona", + "pd": 0, + "title": "Do Wirgiliusa Marona" + } + }, + { + "pk": 274, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-wspolbiesiadnikow", + "pd": 0, + "title": "Do wsp\u00f3\u0142biesiadnik\u00f3w" + } + }, + { + "pk": 203, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-zlosliwca", + "pd": 0, + "title": "Do z\u0142o\u015bliwca" + } + }, + { + "pk": 540, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-zygmunta", + "pd": 0, + "title": "Do Zygmunta" + } + }, + { + "pk": 275, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-zrodla-banduzyi", + "pd": 0, + "title": "Do \u017ar\u00f3d\u0142a Banduzyi" + } + }, + { + "pk": 439, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "dobra-pani", + "pd": 0, + "title": "Dobra Pani" + } + }, + { + "pk": 385, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander Minkowski", + "slug": "dolina-swiatla", + "pd": null, + "title": "Dolina \u015awiat\u0142a" + } + }, + { + "pk": 121, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "dom-swietego-kazimierza", + "pd": 0, + "title": "Dom \u015bwi\u0119tego Kazimierza" + } + }, + { + "pk": 14, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "don-juan-w-piekle", + "pd": 0, + "title": "Don Juan W Piekle" + } + }, + { + "pk": 114, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Miguel Cervantes", + "slug": "don-kichote", + "pd": 2045, + "title": "Don Kichote" + } + }, + { + "pk": 315, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "dreszcze-nasze-u-warg-sie-spotkaly", + "pd": 0, + "title": "Dreszcze nasze u warg si\u0119 spotka\u0142y" + } + }, + { + "pk": 351, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Mackiewicz", + "slug": "droga-donikad", + "pd": 2056, + "title": "Droga donik\u0105d" + } + }, + { + "pk": 431, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Anna Onichimowska", + "slug": "duch-starej-kamienicy", + "pd": null, + "title": "Duch starej kamienicy" + } + }, + { + "pk": 362, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "dudasz", + "pd": 0, + "title": "Dudasz" + } + }, + { + "pk": 541, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "duma-o-waclawie-rzewuskim", + "pd": 0, + "title": "Duma o Wac\u0142awie Rzewuskim" + } + }, + { + "pk": 613, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander \u015awi\u0119tochowski", + "slug": "dumania-pesymisty", + "pd": 0, + "title": "Dumania pesymisty" + } + }, + { + "pk": 542, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "dusza-sie-moja-zamysla-gleboko", + "pd": 0, + "title": "Dusza si\u0119 moja zamy\u015bla g\u0142\u0119boko" + } + }, + { + "pk": 15, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "dusza-wina", + "pd": 0, + "title": "Dusza Wina" + } + }, + { + "pk": 86, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "dwie-ksiezniczki", + "pd": 0, + "title": "Dwie ksi\u0119\u017cniczki" + } + }, + { + "pk": 430, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Joanna Olech", + "slug": "dynastia-miziolkow", + "pd": null, + "title": "Dynastia Mizio\u0142k\u00f3w" + } + }, + { + "pk": 180, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Arkady Fiedler", + "slug": "dywizjon-303", + "pd": 2056, + "title": "Dywizjon 303" + } + }, + { + "pk": 304, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ignacy Kraszewski", + "slug": "dziad-i-baba", + "pd": 0, + "title": "Dziad i baba" + } + }, + { + "pk": 400, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "dziecko-piatku", + "pd": null, + "title": "Dziecko pi\u0105tku" + } + }, + { + "pk": 316, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "dziejba-lesna", + "pd": 0, + "title": "Dziejba le\u015bna" + } + }, + { + "pk": 68, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Joseph B\u00e9dier", + "slug": "dzieje-tristana-i-izoldy", + "pd": 2012, + "title": "Dzieje Tristana i Izoldy" + } + }, + { + "pk": 625, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Moony Witcher", + "slug": "dziewczynka-z-szostego-ksiezyca", + "pd": null, + "title": "Dziewczynka z sz\u00f3stego ksi\u0119\u017cyca" + } + }, + { + "pk": 633, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "dzisiaj-w-betlejem", + "pd": 0, + "title": "Dzisiaj w Betlejem" + } + }, + { + "pk": 440, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "dziurdziowie", + "pd": 0, + "title": "Dziurdziowie" + } + }, + { + "pk": 489, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "dziwna-opowiesc", + "pd": 0, + "title": "Dziwna opowie\u015b\u0107" + } + }, + { + "pk": 113, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Albert Camus", + "slug": "dzuma", + "pd": 2080, + "title": "D\u017cuma" + } + }, + { + "pk": 480, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Kazimierz Przerwa-Tetmajer", + "slug": "e-viva-larte", + "pd": 2011, + "title": "E viva l'arte" + } + }, + { + "pk": 682, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stefan \u017beromski", + "slug": "echa-lesne", + "pd": 0, + "title": "Echa le\u015bne" + } + }, + { + "pk": 467, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "echa-muzyczne", + "pd": 0, + "title": "Echa muzyczne" + } + }, + { + "pk": 122, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "elegia-czwarta", + "pd": 0, + "title": "Elegia czwarta" + } + }, + { + "pk": 123, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "elegia-zalu", + "pd": 0, + "title": "Elegia \u017calu" + } + }, + { + "pk": 391, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Zbigniew Morsztyn", + "slug": "emblemata", + "pd": 0, + "title": "Emblemata" + } + }, + { + "pk": 193, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "epody", + "pd": 0, + "title": "Epody" + } + }, + { + "pk": 462, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Platon", + "slug": "fajdros", + "pd": 0, + "title": "Fajdros" + } + }, + { + "pk": 543, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "fantazy", + "pd": 0, + "title": "Fantazy" + } + }, + { + "pk": 363, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "farys", + "pd": 0, + "title": "Farys" + } + }, + { + "pk": 184, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Johann Goethe", + "slug": "faust", + "pd": 0, + "title": "Faust" + } + }, + { + "pk": 185, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Witold Gombrowicz", + "slug": "ferdydurke", + "pd": 2040, + "title": "Ferdydurke" + } + }, + { + "pk": 490, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "fermenty", + "pd": 0, + "title": "Fermenty" + } + }, + { + "pk": 468, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "filozof-i-prostak", + "pd": 0, + "title": "Filozof i prostak" + } + }, + { + "pk": 491, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "franek", + "pd": 0, + "title": "Franek" + } + }, + { + "pk": 124, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "front", + "pd": 0, + "title": "Front" + } + }, + { + "pk": 545, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "gdy-noc-gleboka-wszystko-uspi-i-oniemi", + "pd": 0, + "title": "Gdy noc g\u0142\u0119boka wszystko u\u015bpi i oniemi" + } + }, + { + "pk": 634, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "gdy-sie-chrystus-rodzi", + "pd": 0, + "title": "Gdy si\u0119 Chrystus rodzi" + } + }, + { + "pk": 635, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "gdy-sliczna-panna", + "pd": 0, + "title": "Gdy \u015bliczna panna" + } + }, + { + "pk": 364, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "gdy-tu-moj-trup", + "pd": 0, + "title": "Gdy tu m\u00f3j trup" + } + }, + { + "pk": 365, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "geby-za-lud-krzyczace", + "pd": 0, + "title": "G\u0119by za lud krzycz\u0105ce" + } + }, + { + "pk": 87, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "gesiareczka", + "pd": 0, + "title": "G\u0119siareczka" + } + }, + { + "pk": 16, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "glos", + "pd": 0, + "title": "G\u0142os" + } + }, + { + "pk": 546, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "godzina-mysli", + "pd": 0, + "title": "Godzina my\u015bli" + } + }, + { + "pk": 651, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Micha\u0142 Ba\u0142ucki", + "slug": "goralu-czy-ci-nie-zal", + "pd": 0, + "title": "G\u00f3ralu, czy ci nie \u017cal" + } + }, + { + "pk": 17, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "gra", + "pd": 0, + "title": "Gra" + } + }, + { + "pk": 416, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Zofia Na\u0142kowska", + "slug": "granica", + "pd": 2025, + "title": "Granica" + } + }, + { + "pk": 366, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "grazyna", + "pd": 0, + "title": "Gra\u017cyna" + } + }, + { + "pk": 522, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Henryk Sienkiewicz", + "slug": "hania", + "pd": 0, + "title": "Hania" + } + }, + { + "pk": 18, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "harmonia-wieczorna", + "pd": 0, + "title": "Harmonia Wieczorna" + } + }, + { + "pk": 19, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "heautonimoroumenos", + "pd": 0, + "title": "Heautonimoroumenos" + } + }, + { + "pk": 652, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "hej-hej-ulani", + "pd": 0, + "title": "Hej, hej, u\u0142ani" + } + }, + { + "pk": 653, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Anczyc", + "slug": "hej-strzelcy-w-las", + "pd": 0, + "title": "Hej, strzelcy w las" + } + }, + { + "pk": 636, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "hej-w-dzien-narodzenia", + "pd": 0, + "title": "Hej, w dzie\u0144 narodzenia" + } + }, + { + "pk": 619, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "John Ronald Reuel Tolkien", + "slug": "hobbit-czyli-tam-i-z-powrotem", + "pd": 2055, + "title": "Hobbit, czyli tam i z powrotem" + } + }, + { + "pk": 547, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "hymn-bogarodzico-dziewico", + "pd": 0, + "title": "Hymn (Bogarodzico, Dziewico!)" + } + }, + { + "pk": 654, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ignacy Krasicki", + "slug": "hymn-do-milosci-ojczyzny", + "pd": 0, + "title": "Hymn do mi\u0142o\u015bci ojczyzny" + } + }, + { + "pk": 481, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Kazimierz Przerwa-Tetmajer", + "slug": "hymn-do-nirwany", + "pd": 2011, + "title": "Hymn do nirwany" + } + }, + { + "pk": 656, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "hymn-narodowy", + "pd": 0, + "title": "Hymn narodowy" + } + }, + { + "pk": 71, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "hymn-sw-pawla-o-milosci", + "pd": 0, + "title": "Hymn \u015bw. Paw\u0142a o mi\u0142o\u015bci" + } + }, + { + "pk": 125, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "i-kompozycja", + "pd": 0, + "title": "I kompozycja" + } + }, + { + "pk": 126, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "i-wigilia-co-splywa-ku-nam", + "pd": 0, + "title": "I Wigilia co sp\u0142ywa ku nam" + } + }, + { + "pk": 395, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "ida-sierpniowa", + "pd": null, + "title": "Ida sierpniowa" + } + }, + { + "pk": 20, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "ideal", + "pd": 0, + "title": "Idea\u0142" + } + }, + { + "pk": 191, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Homer", + "slug": "iliada", + "pd": 0, + "title": "Iliada" + } + }, + { + "pk": 403, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "imieniny", + "pd": null, + "title": "Imieniny" + } + }, + { + "pk": 179, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Umberto Eco", + "slug": "imie-rozy", + "pd": null, + "title": "Imi\u0119 r\u00f3\u017cy" + } + }, + { + "pk": 190, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Gustaw Herling-Grudzi\u0144ski", + "slug": "inny-swiat", + "pd": 2071, + "title": "Inny \u015bwiat" + } + }, + { + "pk": 127, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "inwokacja", + "pd": 0, + "title": "Inwokacja" + } + }, + { + "pk": 128, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "jablko-zycia", + "pd": 0, + "title": "Jab\u0142ko \u017cycia" + } + }, + { + "pk": 317, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "jak-niewiele-ma-znakow", + "pd": 0, + "title": "Jak niewiele ma znak\u00f3w" + } + }, + { + "pk": 657, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Tarnowski", + "slug": "jak-to-na-wojence-ladnie", + "pd": 0, + "title": "Jak to na wojence \u0142adnie" + } + }, + { + "pk": 510, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "jak-wam-sie-podoba", + "pd": 0, + "title": "Jak wam sie podoba" + } + }, + { + "pk": 318, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "jam-nie-osjan", + "pd": 0, + "title": "Jam \u2014 nie osjan" + } + }, + { + "pk": 548, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "jan-bielecki", + "pd": 0, + "title": "Jan Bielecki" + } + }, + { + "pk": 88, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "jas-i-malgosia", + "pd": 0, + "title": "Ja\u015b i Ma\u0142gosia" + } + }, + { + "pk": 115, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Joseph Conrad", + "slug": "jadro-ciemnosci", + "pd": 2014, + "title": "J\u0105dro ciemno\u015bci" + } + }, + { + "pk": 129, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "je-le-sois", + "pd": 0, + "title": "Je le sois" + } + }, + { + "pk": 469, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "jeden-z-wielu", + "pd": 0, + "title": "Jeden z wielu" + } + }, + { + "pk": 130, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "jesienia", + "pd": 0, + "title": "Jesieni\u0105" + } + }, + { + "pk": 131, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "jeszcze-pejzaz-modlitwa-zalobna", + "pd": 0, + "title": "Jeszcze pejza\u017c modlitwa \u017ca\u0142obna" + } + }, + { + "pk": 637, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "jezus-malusienki", + "pd": 0, + "title": "Jezus malusie\u0144ki" + } + }, + { + "pk": 549, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "jezeli-ci-pan-nie-zbuduje-domu", + "pd": 0, + "title": "Je\u017celi ci Pan nie zbuduje domu" + } + }, + { + "pk": 550, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "jezeli-kiedy-w-tej-mojej-krainie", + "pd": 0, + "title": "Je\u017celi kiedy w tej mojej krainie" + } + }, + { + "pk": 406, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "jezyk-trolli", + "pd": null, + "title": "J\u0119zyk Trolli" + } + }, + { + "pk": 511, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "juliusz-cezar", + "pd": 0, + "title": "Juliusz Cezar" + } + }, + { + "pk": 405, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "kalamburka", + "pd": null, + "title": "Kalamburka" + } + }, + { + "pk": 285, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander Kami\u0144ski", + "slug": "kamienie-na-szaniec", + "pd": 2049, + "title": "Kamienie na szaniec" + } + }, + { + "pk": 173, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Tadeusz Do\u0142\u0119ga-Mostowicz", + "slug": "kariera-nikodema-dyzmy", + "pd": 0, + "title": "Kariera Nikodema Dyzmy" + } + }, + { + "pk": 312, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Teofil Lenartowicz", + "slug": "kasia", + "pd": 0, + "title": "Kasia" + } + }, + { + "pk": 69, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Be\u0142za", + "slug": "katechizm-polskiego-dziecka", + "pd": 0, + "title": "Katechizm polskiego dziecka" + } + }, + { + "pk": 526, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Piotr Skarga", + "slug": "kazania-sejmowe", + "pd": 0, + "title": "Kazania sejmowe" + } + }, + { + "pk": 551, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "kiedy-prawdziwie-polacy-powstana", + "pd": 0, + "title": "Kiedy prawdziwie Polacy powstan\u0105" + } + }, + { + "pk": 441, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "kilka-slow-o-kobietach", + "pd": 0, + "title": "Kilka s\u0142\u00f3w o kobietach" + } + }, + { + "pk": 442, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "kilka-uwag-nad-powiescia", + "pd": 0, + "title": "Kilka uwag nad powie\u015bci\u0105" + } + }, + { + "pk": 319, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "klechdy-polskie", + "pd": 0, + "title": "Klechdy polskie" + } + }, + { + "pk": 320, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "klechdy-sezamowe", + "pd": 0, + "title": "Klechdy sezamowe" + } + }, + { + "pk": 21, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "klejnoty", + "pd": 0, + "title": "Klejnoty" + } + }, + { + "pk": 420, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "kleopatra-i-cezar", + "pd": 0, + "title": "Kleopatra i Cezar" + } + }, + { + "pk": 614, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander \u015awi\u0119tochowski", + "slug": "klub-szachistow", + "pd": 0, + "title": "Klub szachist\u00f3w" + } + }, + { + "pk": 393, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "klamczucha", + "pd": null, + "title": "K\u0142amczucha" + } + }, + { + "pk": 132, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "knajpa", + "pd": 0, + "title": "Knajpa" + } + }, + { + "pk": 187, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stefan Grabi\u0144ski", + "slug": "kochanka-szamoty", + "pd": 0, + "title": "Kochanka Szamoty" + } + }, + { + "pk": 117, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "kolysanki", + "pd": 0, + "title": "Ko\u0142ysanki" + } + }, + { + "pk": 133, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "kolysanki-pedem", + "pd": 0, + "title": "Ko\u0142ysanki p\u0119dem" + } + }, + { + "pk": 421, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "komedia", + "pd": 0, + "title": "Komedia" + } + }, + { + "pk": 492, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "komediantka", + "pd": 0, + "title": "Komediantka" + } + }, + { + "pk": 493, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "komurasaki", + "pd": 0, + "title": "Komurasaki" + } + }, + { + "pk": 134, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "koniec-rewolucji", + "pd": 0, + "title": "Koniec rewolucji" + } + }, + { + "pk": 482, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Kazimierz Przerwa-Tetmajer", + "slug": "koniec-wieku", + "pd": 2011, + "title": "Koniec wieku" + } + }, + { + "pk": 107, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "kopciuszek", + "pd": 0, + "title": "Kopciuszek" + } + }, + { + "pk": 89, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "kot-w-butach", + "pd": 0, + "title": "Kot w butach" + } + }, + { + "pk": 22, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "koty", + "pd": 0, + "title": "Koty" + } + }, + { + "pk": 321, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "krajobraz-utracony", + "pd": 0, + "title": "Krajobraz utracony" + } + }, + { + "pk": 681, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Gloger Zygmunt", + "slug": "krakowiaczek-jeden", + "pd": 0, + "title": "Krakowiaczek jeden" + } + }, + { + "pk": 658, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Kozakiewicz", + "slug": "krew-nasza-dlugo-leja-katy", + "pd": 0, + "title": "Krew nasz\u0105 d\u0142ugo lej\u0105 katy" + } + }, + { + "pk": 299, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Tadeusz Konwicki", + "slug": "kronika-wypadkow-milosnych", + "pd": null, + "title": "Kronika wypadk\u00f3w mi\u0142osnych" + } + }, + { + "pk": 90, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "krol-drozdobrody", + "pd": 0, + "title": "Kr\u00f3l Drozdobrody" + } + }, + { + "pk": 512, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "krol-lear", + "pd": 0, + "title": "Kr\u00f3l Lear" + } + }, + { + "pk": 91, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "krolewna-sniezka", + "pd": 0, + "title": "Kr\u00f3lewna \u015anie\u017cka" + } + }, + { + "pk": 486, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Miko\u0142aj Rej", + "slug": "krotka-rozprawa-miedzy-panem-wojtem-i-plebanem", + "pd": 0, + "title": "Kr\u00f3tka rozprawa mi\u0119dzy panem, w\u00f3jtem i plebanem" + } + }, + { + "pk": 413, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Daniel Naborowski", + "slug": "krotkosc-zywota", + "pd": 0, + "title": "Kr\u00f3tko\u015b\u0107 \u017cywota" + } + }, + { + "pk": 108, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "krysztalowa-kula", + "pd": 0, + "title": "Kryszta\u0142owa kula" + } + }, + { + "pk": 494, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "krzyk", + "pd": 0, + "title": "Krzyk" + } + }, + { + "pk": 322, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "krzywda", + "pd": 0, + "title": "Krzywda" + } + }, + { + "pk": 521, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Henryk Sienkiewicz", + "slug": "krzyzacy", + "pd": 0, + "title": "Krzy\u017cacy" + } + }, + { + "pk": 82, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "ksiega-hioba", + "pd": 0, + "title": "Ksi\u0119ga Hioba" + } + }, + { + "pk": 73, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "ksiega-rodzaju", + "pd": 0, + "title": "Ksi\u0119ga Rodzaju" + } + }, + { + "pk": 291, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Kasprowicz", + "slug": "ksiega-ubogich", + "pd": 0, + "title": "Ksi\u0119ga ubogich" + } + }, + { + "pk": 552, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "ksiezyc", + "pd": 0, + "title": "Ksi\u0119\u017cyc" + } + }, + { + "pk": 464, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Wac\u0142aw Potocki", + "slug": "kto-mocniejszy-ten-lepszy", + "pd": 0, + "title": "Kto mocniejszy, ten lepszy" + } + }, + { + "pk": 553, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "kulik", + "pd": 0, + "title": "Kulik" + } + }, + { + "pk": 394, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "kwiat-kalafiora", + "pd": null, + "title": "Kwiat kalafiora" + } + }, + { + "pk": 135, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "kwiecien-tych-co-bez-troski", + "pd": 0, + "title": "Kwiecie\u0144 tych co bez troski" + } + }, + { + "pk": 554, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "lambro", + "pd": 0, + "title": "Lambro" + } + }, + { + "pk": 308, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "lament-swietokrzyski", + "pd": 0, + "title": "Lament \u015bwi\u0119tokrzyski" + } + }, + { + "pk": 659, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Wincenty Pol", + "slug": "lecieliscie-z-drzewa", + "pd": 0, + "title": "Lecieli\u015bcie z drzewa" + } + }, + { + "pk": 136, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "legie-der-trauer", + "pd": 0, + "title": "Legie der Trauer" + } + }, + { + "pk": 660, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "legun-na-wojence", + "pd": 0, + "title": "Legun na wojence" + } + }, + { + "pk": 23, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "leta", + "pd": 0, + "title": "Leta" + } + }, + { + "pk": 349, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Clive Staples Lewis", + "slug": "lew-czarownica-i-stara-szafa", + "pd": null, + "title": "Lew, czarownica i stara szafa" + } + }, + { + "pk": 544, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "lilia-weneda", + "pd": 0, + "title": "Lilia Weneda" + } + }, + { + "pk": 137, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "liryka", + "pd": 0, + "title": "Liryka" + } + }, + { + "pk": 435, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Artur Oppman", + "slug": "lis-i-kurka", + "pd": 0, + "title": "Lis i kurka" + } + }, + { + "pk": 204, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "listy", + "pd": 0, + "title": "Listy" + } + }, + { + "pk": 303, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Zygmunt Krasi\u0144ski", + "slug": "krasinski-listy", + "pd": 0, + "title": "Listy" + } + }, + { + "pk": 24, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "litanie-do-szatana", + "pd": 0, + "title": "Litanie Do Szatana" + } + }, + { + "pk": 25, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "lola-de-valence", + "pd": 0, + "title": "Lola De Valence" + } + }, + { + "pk": 411, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Vladimir Nabokov", + "slug": "lolita", + "pd": null, + "title": "Lolita" + } + }, + { + "pk": 555, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "los-mie-juz-zaden-nie-moze-zatrwozyc", + "pd": 0, + "title": "Los mi\u0119 ju\u017c \u017caden nie mo\u017ce zatrwo\u017cy\u0107" + } + }, + { + "pk": 483, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Kazimierz Przerwa-Tetmajer", + "slug": "ludzie-miotaja-sie", + "pd": 2011, + "title": "Ludzie miotaj\u0105 si\u0119" + } + }, + { + "pk": 638, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "lulajze-jezuniu", + "pd": 0, + "title": "Lulaj\u017ce Jezuniu" + } + }, + { + "pk": 26, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "labedz", + "pd": 0, + "title": "\u0141ab\u0119d\u017a" + } + }, + { + "pk": 177, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Fiodor Dostojewski", + "slug": "lagodna", + "pd": 2049, + "title": "\u0141agodna" + } + }, + { + "pk": 513, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "makbet", + "pd": 0, + "title": "Makbet" + } + }, + { + "pk": 182, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander Fredro", + "slug": "malpa-w-kapieli", + "pd": 0, + "title": "Ma\u0142pa w k\u0105pieli" + } + }, + { + "pk": 509, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Antoine de Saint Exup\u00e9ry", + "slug": "maly-ksiaze", + "pd": null, + "title": "Ma\u0142y ksi\u0105\u017c\u0119" + } + }, + { + "pk": 290, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grzegorz Kasdepke", + "slug": "mam-prawo-czyli-nieomal-wszystko-co-powinniscie-wiedziec-o-prawach-dziecka-a-nie-macie-kogo-zapytac", + "pd": null, + "title": "Mam prawo! Czyli nieomal wszystko, co powinni\u015bcie wiedzie\u0107 o prawach dziecka, a nie macie kogo zapyta\u0107" + } + }, + { + "pk": 443, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "maria", + "pd": 0, + "title": "Maria" + } + }, + { + "pk": 414, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Daniel Naborowski", + "slug": "marnosc", + "pd": 0, + "title": "Marno\u015b\u0107" + } + }, + { + "pk": 444, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "marta", + "pd": 0, + "title": "Marta" + } + }, + { + "pk": 27, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "marzenie-ciekawego", + "pd": 0, + "title": "Marzenie Ciekawego" + } + }, + { + "pk": 626, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Ignacy Witkiewicz", + "slug": "matka", + "pd": 0, + "title": "Matka" + } + }, + { + "pk": 661, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Wincenty Pol", + "slug": "mazur", + "pd": 0, + "title": "Mazur" + } + }, + { + "pk": 655, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "mazurek-dabrowskiego", + "pd": 0, + "title": "Mazurek D\u0105browskiego" + } + }, + { + "pk": 445, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "meir-ezofowicz", + "pd": 0, + "title": "Meir Ezofowicz" + } + }, + { + "pk": 639, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stefan Bordkiewicz", + "slug": "medrcy-swiata", + "pd": 0, + "title": "M\u0119drcy \u015bwiata" + } + }, + { + "pk": 433, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ren\u00e9 Goscinny, Jean-Jacques Semp\u00e9", + "slug": "mikolajek", + "pd": null, + "title": "Miko\u0142ajek" + } + }, + { + "pk": 470, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "milknace-glosy", + "pd": 0, + "title": "Milkn\u0105ce g\u0142osy" + } + }, + { + "pk": 323, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "milosc-stroskana", + "pd": 0, + "title": "Milo\u015b\u0107 stroskana" + } + }, + { + "pk": 297, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Maria Konopnicka", + "slug": "milosierdzie-gminy", + "pd": 0, + "title": "Mi\u0142osierdzie gminy" + } + }, + { + "pk": 28, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "milosc-klamstwa", + "pd": 0, + "title": "Mi\u0142o\u015b\u0107 K\u0142amstwa" + } + }, + { + "pk": 446, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "mirtala", + "pd": 0, + "title": "Mirtala" + } + }, + { + "pk": 111, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Micha\u0142 Bu\u0142hakow", + "slug": "mistrz-i-malgorzata", + "pd": null, + "title": "Mistrz i Ma\u0142gorzata" + } + }, + { + "pk": 640, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Teofil Lenartowicz", + "slug": "mizerna-cicha", + "pd": 0, + "title": "Mizerna, cicha" + } + }, + { + "pk": 29, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "modlitwa-do-szatana", + "pd": 0, + "title": "Modlitwa Do Szatana" + } + }, + { + "pk": 30, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "moesta-et-errabunda", + "pd": 0, + "title": "Moesta Et Errabunda" + } + }, + { + "pk": 422, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "moja-ojczyzna", + "pd": 0, + "title": "Moja ojczyzna" + } + }, + { + "pk": 138, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "moje-zaduszki", + "pd": 0, + "title": "Moje Zaduszki" + } + }, + { + "pk": 302, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ignacy Krasicki", + "slug": "monachomachia", + "pd": 0, + "title": "Monachomachia" + } + }, + { + "pk": 556, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "moj-adamito-widzisz-jak-to-trudne", + "pd": 0, + "title": "M\u00f3j Adamito \u2014 widzisz, jak to trudne" + } + }, + { + "pk": 31, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "muzyka", + "pd": 0, + "title": "Muzyka" + } + }, + { + "pk": 92, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "muzykanci-z-bremy", + "pd": 0, + "title": "Muzykanci z Bremy" + } + }, + { + "pk": 457, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Bronis\u0142awa Ostrowska", + "slug": "myszka", + "pd": 0, + "title": "Myszka" + } + }, + { + "pk": 507, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Roman Dmowski", + "slug": "mysli-nowoczesnego-polaka", + "pd": 0, + "title": "My\u015bli nowoczesnego Polaka" + } + }, + { + "pk": 557, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "na-drzewie-zawisl-waz", + "pd": 0, + "title": "Na drzewie zawis\u0142 w\u0105\u017c" + } + }, + { + "pk": 615, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander \u015awi\u0119tochowski", + "slug": "na-pogrzebie", + "pd": 0, + "title": "Na pogrzebie" + } + }, + { + "pk": 558, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "na-sprowadzenie-prochow-napoleona", + "pd": 0, + "title": "Na sprowadzenie proch\u00f3w Napoleona" + } + }, + { + "pk": 471, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "na-wakacjach", + "pd": 0, + "title": "Na wakacjach" + } + }, + { + "pk": 662, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Edmund Wasilewski", + "slug": "na-wawel-na-wawel", + "pd": 0, + "title": "Na Wawel, na Wawel" + } + }, + { + "pk": 607, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "John Steinbeck", + "slug": "na-wschod-od-edenu", + "pd": 2056, + "title": "Na wsch\u00f3d od Edenu" + } + }, + { + "pk": 139, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "na-wsi", + "pd": 0, + "title": "Na wsi" + } + }, + { + "pk": 367, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "nad-woda-wielka-i-czysta", + "pd": 0, + "title": "Nad wod\u0105 wielk\u0105 i czyst\u0105" + } + }, + { + "pk": 389, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Andrzej Morsztyn", + "slug": "nagrobek-kusiowi", + "pd": 0, + "title": "Nagrobek Kusiowi" + } + }, + { + "pk": 680, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Emil Zola", + "slug": "nana", + "pd": 2046, + "title": "Nana" + } + }, + { + "pk": 627, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Ignacy Witkiewicz", + "slug": "narkotyki", + "pd": 0, + "title": "Narkotyki" + } + }, + { + "pk": 559, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "narodzie-moj", + "pd": 0, + "title": "Narodzie m\u00f3j" + } + }, + { + "pk": 560, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "nastal-moj-mily-wiek-eschylesowy", + "pd": 0, + "title": "Nasta\u0142, m\u00f3j mi\u0142y, wiek Eschylesowy" + } + }, + { + "pk": 472, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "nawrocony", + "pd": 0, + "title": "Nawr\u00f3cony" + } + }, + { + "pk": 140, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "nic-wiecej", + "pd": 0, + "title": "Nic wi\u0119cej" + } + }, + { + "pk": 561, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "nie-wiadomo-co-czyli-romantycznosc", + "pd": 0, + "title": "Nie wiadomo co, czyli Romantyczno\u015b\u0107" + } + }, + { + "pk": 484, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Kazimierz Przerwa-Tetmajer", + "slug": "nie-wierze-w-nic", + "pd": 2011, + "title": "Nie wierz\u0119 w nic" + } + }, + { + "pk": 562, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "niedawno-jeszcze-kiedym-spoczywal-uspiony", + "pd": 0, + "title": "Niedawno jeszcze \u2014 kiedym spoczywa\u0142 u\u015bpiony" + } + }, + { + "pk": 563, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "niedawno-jeszcze-wasze-mogily", + "pd": 0, + "title": "Niedawno jeszcze wasze mogi\u0142y" + } + }, + { + "pk": 324, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "niegdys-dom-moj-ochoczy", + "pd": 0, + "title": "Niegdy\u015b dom m\u00f3j ochoczy" + } + }, + { + "pk": 281, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Jachowicz", + "slug": "niegrzeczna-andzia", + "pd": 0, + "title": "Niegrzeczna Andzia" + } + }, + { + "pk": 141, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "nienazwane-niejasne", + "pd": 0, + "title": "Nienazwane niejasne" + } + }, + { + "pk": 368, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "niepewnosc", + "pd": 0, + "title": "Niepewno\u015b\u0107" + } + }, + { + "pk": 32, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "niepowodzenie", + "pd": 0, + "title": "Niepowodzenie" + } + }, + { + "pk": 465, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Wac\u0142aw Potocki", + "slug": "nierzadem-polska-stoi", + "pd": 0, + "title": "Nierz\u0105dem Polska stoi" + } + }, + { + "pk": 418, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Edmund Niziurski", + "slug": "niewiarygodne-przygody-marka-piegusa", + "pd": null, + "title": "Niewiarygodne przygody Marka Piegusa" + } + }, + { + "pk": 485, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Kazimierz Przerwa-Tetmajer", + "slug": "niewierny", + "pd": 2011, + "title": "Niewierny" + } + }, + { + "pk": 458, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Bronis\u0142awa Ostrowska", + "slug": "niezapominajka", + "pd": 0, + "title": "Niezapominajka" + } + }, + { + "pk": 307, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Milan Kundera", + "slug": "nieznosna-lekkosc-bytu", + "pd": null, + "title": "Niezno\u015bna lekko\u015b\u0107 bytu" + } + }, + { + "pk": 676, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Wyspia\u0144ski", + "slug": "noc-listopadowa", + "pd": 0, + "title": "Noc listopadowa" + } + }, + { + "pk": 423, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "noc-tysiaczna-druga", + "pd": 0, + "title": "Noc tysi\u0105czna druga" + } + }, + { + "pk": 398, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "noelka", + "pd": null, + "title": "Noelka" + } + }, + { + "pk": 142, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "nuta-na-dzwony", + "pd": 0, + "title": "Nuta na dzwony" + } + }, + { + "pk": 401, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "nutria-i-nerwus", + "pd": null, + "title": "Nutria i Nerwus" + } + }, + { + "pk": 93, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "o-diable-z-trzema-zlotymi-wlosami", + "pd": 0, + "title": "O Diable z trzema z\u0142otymi w\u0142osami" + } + }, + { + "pk": 94, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "o-dzielnym-krawczyku", + "pd": 0, + "title": "O dzielnym krawczyku" + } + }, + { + "pk": 298, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Maria Konopnicka", + "slug": "o-krasnoludkach-i-sierotce-marysi", + "pd": 0, + "title": "O krasnoludkach i sierotce Marysi" + } + }, + { + "pk": 95, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "o-mlodziencu-ktory-nie-znal-strachu", + "pd": 0, + "title": "O m\u0142odzie\u0144cu, kt\u00f3ry nie zna\u0142 strachu" + } + }, + { + "pk": 355, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "o-morze-zjawisk", + "pd": 0, + "title": "O morze zjawisk" + } + }, + { + "pk": 663, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Wac\u0142aw Dennhoff-Czarnocki", + "slug": "o-moj-rozmarynie", + "pd": 0, + "title": "O m\u00f3j rozmarynie" + } + }, + { + "pk": 144, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "o-niebie", + "pd": 0, + "title": "O niebie" + } + }, + { + "pk": 447, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "o-powiesciach-t-t-jeza", + "pd": 0, + "title": "O powie\u015bciach T. T. Je\u017ca" + } + }, + { + "pk": 143, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "o-swierszczach", + "pd": 0, + "title": "O \u015bwierszczach" + } + }, + { + "pk": 434, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Artur Oppman", + "slug": "o-warsie-i-sawie", + "pd": 0, + "title": "O Warsie i Sawie" + } + }, + { + "pk": 96, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "o-wilku-i-siedmiu-kozlatkach", + "pd": 0, + "title": "O wilku i siedmiu ko\u017al\u0105tkach" + } + }, + { + "pk": 325, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "o-zmierzchu", + "pd": 0, + "title": "O zmierzchu" + } + }, + { + "pk": 564, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "o-nieszczesliwa-o-uciemiezona", + "pd": 0, + "title": "O! nieszcz\u0119\u015bliwa! o! uciemi\u0119\u017cona" + } + }, + { + "pk": 145, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "obloki", + "pd": 0, + "title": "Ob\u0142oki" + } + }, + { + "pk": 463, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Platon", + "slug": "obrona-sokratesa", + "pd": 0, + "title": "Obrona Sokratesa" + } + }, + { + "pk": 146, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "od-dnia-do-dna", + "pd": 0, + "title": "Od dnia do dna" + } + }, + { + "pk": 565, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "oda-do-wolnosci", + "pd": 0, + "title": "Oda do wolno\u015bci" + } + }, + { + "pk": 34, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "oddzwieki", + "pd": 0, + "title": "Odd\u017awi\u0119ki" + } + }, + { + "pk": 147, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "odpowiedz", + "pd": 0, + "title": "Odpowied\u017a" + } + }, + { + "pk": 192, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Homer", + "slug": "odyseja", + "pd": 0, + "title": "Odyseja" + } + }, + { + "pk": 641, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "oj-maluski-maluski", + "pd": 0, + "title": "Oj, maluski, malu\u015bki" + } + }, + { + "pk": 566, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "ojciec-zadzumionych", + "pd": 0, + "title": "Ojciec zad\u017cumionych" + } + }, + { + "pk": 35, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "olbrzymka", + "pd": 0, + "title": "Olbrzymka" + } + }, + { + "pk": 36, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "opetanie", + "pd": 0, + "title": "Op\u0119tanie" + } + }, + { + "pk": 72, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "opis-stworzenia-swiata-i-czlowieka", + "pd": 0, + "title": "Opis stworzenia \u015bwiata i cz\u0142owieka" + } + }, + { + "pk": 396, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "opium-w-rosole", + "pd": null, + "title": "Opium w rosole" + } + }, + { + "pk": 148, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "opowiadanie", + "pd": 0, + "title": "Opowiadanie" + } + }, + { + "pk": 2, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Irit Amiel", + "slug": "osmaleni", + "pd": null, + "title": "Osmaleni" + } + }, + { + "pk": 664, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ludwik Pomian \u0141ubi\u0144ski", + "slug": "ostatni-mazur", + "pd": 0, + "title": "Ostatni mazur" + } + }, + { + "pk": 567, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "ostatnie-wspomnienie", + "pd": 0, + "title": "Ostatnie wspomnienie" + } + }, + { + "pk": 37, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "otchlan", + "pd": 0, + "title": "Otch\u0142a\u0144" + } + }, + { + "pk": 514, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "otello", + "pd": 0, + "title": "Otello" + } + }, + { + "pk": 569, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "oto-bog-ktory-lona-tajemnic-odmyka", + "pd": 0, + "title": "Oto B\u00f3g, kt\u00f3ry \u0142ona tajemnic odmyka" + } + }, + { + "pk": 508, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Henryk Rzewuski", + "slug": "pamiatki-soplicy", + "pd": 0, + "title": "Pami\u0105tki Soplicy" + } + }, + { + "pk": 70, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Miron Bia\u0142oszewski", + "slug": "pamietnik-z-powstania-warszawskiego", + "pd": 2054, + "title": "Pami\u0119tnik z powstania warszawskiego" + } + }, + { + "pk": 460, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Chryzostom Pasek", + "slug": "pamietniki", + "pd": 0, + "title": "Pami\u0119tniki" + } + }, + { + "pk": 181, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Gustaw Flaubert", + "slug": "pani-bovary", + "pd": 2062, + "title": "Pani Bovary" + } + }, + { + "pk": 369, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "pani-czy-dziewczyna", + "pd": 0, + "title": "Pani czy dziewczyna" + } + }, + { + "pk": 448, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "pani-luiza", + "pd": 0, + "title": "Pani Luiza" + } + }, + { + "pk": 449, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "panna-antonina", + "pd": 0, + "title": "Panna Antonina" + } + }, + { + "pk": 450, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "panna-roza", + "pd": 0, + "title": "Panna R\u00f3\u017ca" + } + }, + { + "pk": 278, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jaros\u0142aw Iwaszkiewicz", + "slug": "panny-z-wilka", + "pd": 2051, + "title": "Panny z Wilka" + } + }, + { + "pk": 570, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "paryz", + "pd": 0, + "title": "Pary\u017c" + } + }, + { + "pk": 293, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Kochanowski", + "slug": "paslterz-dawidow", + "pd": 0, + "title": "Pas\u0142terz Dawid\u00f3w" + } + }, + { + "pk": 183, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander Fredro", + "slug": "pawel-i-gawel", + "pd": 0, + "title": "Pawe\u0142 i Gawe\u0142" + } + }, + { + "pk": 149, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "paysage-nocturne", + "pd": 0, + "title": "Paysage nocturne" + } + }, + { + "pk": 38, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "pekniety-dzwon", + "pd": 0, + "title": "P\u0119kni\u0119ty Dzwon" + } + }, + { + "pk": 618, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Makepeace Thackeray", + "slug": "pierscien-i-roza", + "pd": 0, + "title": "Pier\u015bcie\u0144 i r\u00f3\u017ca" + } + }, + { + "pk": 424, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "pierscien-wielkiej-damy-czyli-ex-machina-durejko", + "pd": 0, + "title": "Pier\u015bcie\u0144 Wielkiej Damy, czyli Ex-machina Durejko" + } + }, + { + "pk": 81, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "piesn-nad-piesniami", + "pd": 0, + "title": "Pie\u015b\u0144 nad pie\u015bniami" + } + }, + { + "pk": 150, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "piesn-o-niedobrej-burzy", + "pd": 0, + "title": "Pie\u015b\u0144 o niedobrej burzy" + } + }, + { + "pk": 461, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "piesn-o-rolandzie", + "pd": 2012, + "title": "Pie\u015b\u0144 o Rolandzie" + } + }, + { + "pk": 288, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Franciszek Karpi\u0144ski", + "slug": "piesn-poranna", + "pd": 0, + "title": "Pie\u015b\u0144 poranna" + } + }, + { + "pk": 390, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Andrzej Morsztyn", + "slug": "piesn-w-obozie-wojskowym-pod-zwancem", + "pd": 0, + "title": "Pie\u015b\u0144 w obozie wojskowym pod \u017bwa\u0144cem" + } + }, + { + "pk": 289, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Franciszek Karpi\u0144ski", + "slug": "piesn-wieczorna", + "pd": 0, + "title": "Pie\u015b\u0144 wieczorna" + } + }, + { + "pk": 39, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "piekno", + "pd": 0, + "title": "Pi\u0119kno" + } + }, + { + "pk": 40, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "piekny-statek", + "pd": 0, + "title": "Pi\u0119kny Statek" + } + }, + { + "pk": 116, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Carlo Collodi", + "slug": "pinokio", + "pd": null, + "title": "Pinokio" + } + }, + { + "pk": 151, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "piosenka-czeski-domek", + "pd": 0, + "title": "Piosenka czeski domek" + } + }, + { + "pk": 152, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "plan-akacji", + "pd": 0, + "title": "Plan akacji" + } + }, + { + "pk": 473, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "plesn-swiata", + "pd": 0, + "title": "Ple\u015b\u0144 \u015bwiata" + } + }, + { + "pk": 624, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Edmund Wasilewski", + "slug": "plynie-wisla-plynie", + "pd": 0, + "title": "P\u0142ynie Wis\u0142a, p\u0142ynie" + } + }, + { + "pk": 259, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "po-pyrrusa", + "pd": 0, + "title": "Po Pyrrusa" + } + }, + { + "pk": 665, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Wincenty Pol", + "slug": "pobudka", + "pd": 0, + "title": "Pobudka" + } + }, + { + "pk": 153, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "pod-dworcem-glownym-w-warszawie", + "pd": 0, + "title": "Pod Dworcem G\u0142\u00f3wnym w Warszawie" + } + }, + { + "pk": 41, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "podroz", + "pd": 0, + "title": "Podr\u00f3\u017c" + } + }, + { + "pk": 42, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "podroz-na-cytere", + "pd": 0, + "title": "Podr\u00f3\u017c Na Cyter\u0119" + } + }, + { + "pk": 286, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ryszard Kapu\u015bci\u0144ski", + "slug": "podroze-z-herodotem", + "pd": 2078, + "title": "Podr\u00f3\u017ce z Herodotem" + } + }, + { + "pk": 571, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "poeta-i-natchnienie", + "pd": 0, + "title": "Poeta i Natchnienie" + } + }, + { + "pk": 326, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "pogrzeb", + "pd": 0, + "title": "Pogrzeb" + } + }, + { + "pk": 327, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "pogrzeb-don-zuana", + "pd": 0, + "title": "Pogrzeb don \u017cuana" + } + }, + { + "pk": 572, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "pogrzeb-kapitana-meyznera", + "pd": 0, + "title": "Pogrzeb kapitana Meyznera" + } + }, + { + "pk": 154, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "polacy", + "pd": 0, + "title": "Polacy" + } + }, + { + "pk": 370, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "polaly-sie-lzy", + "pd": 0, + "title": "Pola\u0142y si\u0119 \u0142zy" + } + }, + { + "pk": 573, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "polska-polska-o-krolowa", + "pd": 0, + "title": "Polska! Polska! o! kr\u00f3lowa" + } + }, + { + "pk": 574, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "polsko-moja-tys-pierwsza-swiatu", + "pd": 0, + "title": "Polsko moja! ty\u015b pierwsza \u015bwiatu" + } + }, + { + "pk": 328, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "poludnie", + "pd": 0, + "title": "Po\u0142udnie" + } + }, + { + "pk": 371, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "popas-w-upicie", + "pd": 0, + "title": "Popas w Upicie" + } + }, + { + "pk": 451, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "porcelanka", + "pd": 0, + "title": "Porcelanka" + } + }, + { + "pk": 515, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "poskromienie-zlosnicy", + "pd": 0, + "title": "Poskromienie z\u0142o\u015bnicy" + } + }, + { + "pk": 43, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "poswiecam-ci-te-wiersze", + "pd": 0, + "title": "Po\u015bwi\u0119cam Ci Te Wiersze" + } + }, + { + "pk": 329, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "powrot", + "pd": 0, + "title": "Powr\u00f3t" + } + }, + { + "pk": 417, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Julian Ursyn Niemcewicz", + "slug": "powrot-posla", + "pd": 0, + "title": "Powr\u00f3t pos\u0142a" + } + }, + { + "pk": 666, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "pozegnanie", + "pd": 0, + "title": "Po\u017cegnanie" + } + }, + { + "pk": 628, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Ignacy Witkiewicz", + "slug": "pozegnanie-jesieni", + "pd": 0, + "title": "Po\u017cegnanie jesieni" + } + }, + { + "pk": 642, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "pojdzmy-wszyscy-do-stajenki", + "pd": 0, + "title": "P\u00f3jd\u017amy wszyscy do stajenki" + } + }, + { + "pk": 643, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "polnoc", + "pd": 0, + "title": "P\u00f3\u0142noc" + } + }, + { + "pk": 425, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "praca", + "pd": 0, + "title": "Praca" + } + }, + { + "pk": 284, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Franz Kafka", + "slug": "proces", + "pd": 2013, + "title": "Proces" + } + }, + { + "pk": 174, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Tadeusz Do\u0142\u0119ga-Mostowicz", + "slug": "profesor-wilczur", + "pd": 0, + "title": "Profesor Wilczur" + } + }, + { + "pk": 575, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "proroctwo", + "pd": 0, + "title": "Proroctwo" + } + }, + { + "pk": 330, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "prosba", + "pd": 0, + "title": "Pro\u015bba" + } + }, + { + "pk": 576, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "prowadzil-mnie-na-bardzo-ciemne-wezowisko", + "pd": 0, + "title": "Prowadzi\u0142 mnie na bardzo ciemne w\u0119\u017cowisko" + } + }, + { + "pk": 474, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "przed-kopernikiem", + "pd": 0, + "title": "Przed Kopernikiem" + } + }, + { + "pk": 495, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "przed-switem", + "pd": 0, + "title": "Przed \u015bwitem" + } + }, + { + "pk": 155, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "przedswit", + "pd": 0, + "title": "Przed\u015bwit" + } + }, + { + "pk": 577, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "przeklestwo", + "pd": 0, + "title": "Przekl\u0119stwo" + } + }, + { + "pk": 606, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Staszic", + "slug": "przestrogi-dla-polski", + "pd": 0, + "title": "Przestrogi dla Polski" + } + }, + { + "pk": 156, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "przez-kresy", + "pd": 0, + "title": "Przez kresy" + } + }, + { + "pk": 644, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "przybiezeli-do-betlejem", + "pd": 0, + "title": "Przybie\u017celi do Betlejem" + } + }, + { + "pk": 459, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Parandowski", + "slug": "przygody-odyseusza", + "pd": 2049, + "title": "Przygody Odyseusza" + } + }, + { + "pk": 331, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "przygody-sindbada-zeglarza", + "pd": 0, + "title": "Przygody Sindbada \u017beglarza" + } + }, + { + "pk": 620, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Mark Twain", + "slug": "przygody-tomka-sawyera", + "pd": 2054, + "title": "Przygody Tomka Sawyera" + } + }, + { + "pk": 74, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "przypowiesc-o-milosiernym-samarytaninie", + "pd": 0, + "title": "Przypowie\u015b\u0107 o mi\u0142osiernym Samarytaninie" + } + }, + { + "pk": 75, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "przypowiesc-o-pannach-roztropnych", + "pd": 0, + "title": "Przypowie\u015b\u0107 o pannach roztropnych" + } + }, + { + "pk": 76, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "przypowiesc-o-robotnikach-w-winnicy", + "pd": 0, + "title": "Przypowie\u015b\u0107 o robotnikach w winnicy" + } + }, + { + "pk": 77, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "przypowiesc-o-siewcy", + "pd": 0, + "title": "Przypowie\u015b\u0107 o siewcy" + } + }, + { + "pk": 78, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "przypowiesc-o-synu-marnotrawnym", + "pd": 0, + "title": "Przypowie\u015b\u0107 o synu marnotrawnym" + } + }, + { + "pk": 79, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "przypowiesc-o-talentach", + "pd": 0, + "title": "Przypowie\u015b\u0107 o talentach" + } + }, + { + "pk": 80, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "przypowiesc-o-ziarnku-gorczycy", + "pd": 0, + "title": "Przypowie\u015b\u0107 o ziarnku gorczycy" + } + }, + { + "pk": 399, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "pulpecja", + "pd": null, + "title": "Pulpecja" + } + }, + { + "pk": 332, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "puscila-po-stole-swawolacy-wianek", + "pd": 0, + "title": "Pu\u015bci\u0142a po stole swawol\u0105cy wianek" + } + }, + { + "pk": 372, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "renegat-ballada-turecka", + "pd": 0, + "title": "Renegat (ballada turecka)" + } + }, + { + "pk": 415, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Daniel Naborowski", + "slug": "respons-niespodziewany", + "pd": 0, + "title": "Respons niespodziewany" + } + }, + { + "pk": 436, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "George Orwell", + "slug": "rok-1984", + "pd": 2074, + "title": "Rok 1984" + } + }, + { + "pk": 44, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "romantyczny-zachod-slonca", + "pd": 0, + "title": "Romantyczny Zach\u00f3d S\u0142o\u0144ca" + } + }, + { + "pk": 109, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "roszpunka", + "pd": 0, + "title": "Roszpunka" + } + }, + { + "pk": 667, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Maria Konopnicka", + "slug": "rota", + "pd": 0, + "title": "Rota" + } + }, + { + "pk": 579, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "rozlaczenie", + "pd": 0, + "title": "Roz\u0142\u0105czenie" + } + }, + { + "pk": 668, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "August Bielowski", + "slug": "bielowski-rozlaczenie", + "pd": 0, + "title": "Roz\u0142\u0105czenie" + } + }, + { + "pk": 527, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "rozmowa-z-piramidami", + "pd": 0, + "title": "Rozmowa z piramidami" + } + }, + { + "pk": 157, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "rymy-pobozne", + "pd": 0, + "title": "Rymy pobo\u017cne" + } + }, + { + "pk": 516, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "ryszard-ii", + "pd": 0, + "title": "Ryszard II" + } + }, + { + "pk": 621, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Tyrtajos", + "slug": "rzecz-to-piekna", + "pd": 0, + "title": "Rzecz to pi\u0119kna" + } + }, + { + "pk": 580, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "rzym", + "pd": 0, + "title": "Rzym" + } + }, + { + "pk": 277, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "satyry", + "pd": 0, + "title": "Satyry" + } + }, + { + "pk": 496, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "seans", + "pd": 0, + "title": "Seans" + } + }, + { + "pk": 45, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "sed-non-satiata", + "pd": 0, + "title": "Sed Non Satiata" + } + }, + { + "pk": 523, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Henryk Sienkiewicz", + "slug": "selim-mirza", + "pd": 0, + "title": "Selim Mirza" + } + }, + { + "pk": 158, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "sen", + "pd": 0, + "title": "Sen" + } + }, + { + "pk": 475, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "prus-sen", + "pd": 0, + "title": "Sen" + } + }, + { + "pk": 517, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "sen-nocy-letniej", + "pd": 0, + "title": "Sen nocy letniej" + } + }, + { + "pk": 159, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "sen-sielski", + "pd": 0, + "title": "Sen sielski" + } + }, + { + "pk": 333, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "sen-wiejski", + "pd": 0, + "title": "Sen wiejski" + } + }, + { + "pk": 497, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "senne-dzieje", + "pd": 0, + "title": "Senne dzieje" + } + }, + { + "pk": 677, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Wyspia\u0144ski", + "slug": "sedziowie", + "pd": 0, + "title": "S\u0119dziowie" + } + }, + { + "pk": 46, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "skargi-jakiegos-ikara", + "pd": 0, + "title": "Skargi Jakiego\u015b Ikara" + } + }, + { + "pk": 386, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Moli\u00e8re", + "slug": "skapiec", + "pd": 0, + "title": "Sk\u0105piec" + } + }, + { + "pk": 520, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Bruno Schulz", + "slug": "sklepy-cynamonowe", + "pd": 2013, + "title": "Sklepy cynamonowe" + } + }, + { + "pk": 334, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "skonczonosc", + "pd": 0, + "title": "Sko\u0144czono\u015b\u0107" + } + }, + { + "pk": 335, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "skrzeble", + "pd": 0, + "title": "Skrzeble" + } + }, + { + "pk": 373, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "slowiczku-moj", + "pd": 0, + "title": "S\u0142owiczku m\u00f3j" + } + }, + { + "pk": 374, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "snuc-milosc", + "pd": 0, + "title": "Snu\u0107 mi\u0142o\u015b\u0107" + } + }, + { + "pk": 582, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "snycerz-byl-zatrudniony-dyjany-lepieniem", + "pd": 0, + "title": "Snycerz by\u0142 zatrudniony Dyjany lepieniem" + } + }, + { + "pk": 426, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "socjalizm", + "pd": 0, + "title": "Socjalizm" + } + }, + { + "pk": 310, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Lem", + "slug": "solaris", + "pd": 2077, + "title": "Solaris" + } + }, + { + "pk": 519, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "sonety", + "pd": 0, + "title": "Sonety" + } + }, + { + "pk": 375, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "sonety-odeskie", + "pd": 0, + "title": "Sonety odeskie" + } + }, + { + "pk": 583, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "sowinski-w-okopach-woli", + "pd": 0, + "title": "Sowi\u0144ski w okopach Woli" + } + }, + { + "pk": 47, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "spleen-i", + "pd": 0, + "title": "Spleen I" + } + }, + { + "pk": 48, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "spleen-ii", + "pd": 0, + "title": "Spleen II" + } + }, + { + "pk": 419, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Edmund Niziurski", + "slug": "sposob-na-alcybiadesa", + "pd": null, + "title": "Spos\u00f3b na Alcybiadesa" + } + }, + { + "pk": 336, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "spotykam-go-codziennie", + "pd": 0, + "title": "Spotykam go codziennie" + } + }, + { + "pk": 498, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "sprawiedliwie", + "pd": 0, + "title": "Sprawiedliwie" + } + }, + { + "pk": 409, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "sprezyna", + "pd": null, + "title": "Spr\u0119\u017cyna" + } + }, + { + "pk": 118, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "srebrne-nitki", + "pd": 0, + "title": "Srebrne nitki" + } + }, + { + "pk": 605, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "sroczka-kaszke-wazyla", + "pd": null, + "title": "Sroczka kaszk\u0119 wa\u017cy\u0142a" + } + }, + { + "pk": 305, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ignacy Kraszewski", + "slug": "stara-basn", + "pd": 0, + "title": "Stara Ba\u015b\u0144" + } + }, + { + "pk": 49, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "staruszeczki", + "pd": 0, + "title": "Staruszeczki" + } + }, + { + "pk": 294, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Oskar Kolberg", + "slug": "stary-niedzwiedz", + "pd": 0, + "title": "Stary nied\u017awied\u017a" + } + }, + { + "pk": 524, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Henryk Sienkiewicz", + "slug": "stary-sluga", + "pd": 0, + "title": "Stary s\u0142uga" + } + }, + { + "pk": 354, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Gabriel Garcia Marquez", + "slug": "sto-lat-samotnosci", + "pd": null, + "title": "Sto lat samotno\u015bci" + } + }, + { + "pk": 97, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "stoliczku-nakryj-sie", + "pd": 0, + "title": "Stoliczku nakryj si\u0119" + } + }, + { + "pk": 499, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "suka", + "pd": 0, + "title": "Suka" + } + }, + { + "pk": 50, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "sygnaly", + "pd": 0, + "title": "Sygna\u0142y" + } + }, + { + "pk": 160, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "synteza", + "pd": 0, + "title": "Synteza" + } + }, + { + "pk": 683, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stefan \u017beromski", + "slug": "syzyfowe-prace", + "pd": 0, + "title": "Syzyfowe prace" + } + }, + { + "pk": 352, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Kornel Makuszy\u0144ski", + "slug": "szatan-z-siodmej-klasy", + "pd": 2024, + "title": "Szatan z si\u00f3dmej klasy" + } + }, + { + "pk": 337, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "szczescie", + "pd": 0, + "title": "Szcz\u0119\u015bcie" + } + }, + { + "pk": 98, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "szesc-labedzi", + "pd": 0, + "title": "Sze\u015b\u0107 \u0142ab\u0119dzi" + } + }, + { + "pk": 669, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Gustawa Erynbergh", + "slug": "szlachta-w-roku-1831", + "pd": 0, + "title": "Szlachta w roku 1831" + } + }, + { + "pk": 392, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "szosta-klepka", + "pd": null, + "title": "Sz\u00f3sta klepka" + } + }, + { + "pk": 525, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Isaac Bashevis Singer", + "slug": "sztukmistrz-z-lublina", + "pd": null, + "title": "Sztukmistrz z Lublina" + } + }, + { + "pk": 161, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "smierc", + "pd": 0, + "title": "\u015amier\u0107" + } + }, + { + "pk": 500, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "reymont-smierc", + "pd": 0, + "title": "\u015amier\u0107" + } + }, + { + "pk": 338, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "smierc-buddy", + "pd": 0, + "title": "\u015amier\u0107 buddy" + } + }, + { + "pk": 51, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "smierc-kochankow", + "pd": 0, + "title": "\u015amier\u0107 Kochank\u00f3w" + } + }, + { + "pk": 52, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "smierc-nedzarzy", + "pd": 0, + "title": "\u015amier\u0107 N\u0119dzarzy" + } + }, + { + "pk": 339, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "smierc-wtora", + "pd": 0, + "title": "\u015amier\u0107 wt\u00f3ra" + } + }, + { + "pk": 584, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "smierc-co-trzynascie-lat-stala-kolo-mnie", + "pd": 0, + "title": "\u015amier\u0107, co trzyna\u015bcie \u0142at sta\u0142a ko\u0142o mnie" + } + }, + { + "pk": 581, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "sni-mi-sie-jakas-wielka-a-przez-wieki-idaca", + "pd": 0, + "title": "\u015ani mi si\u0119 jaka\u015b wielka a przez wieki id\u0105ca" + } + }, + { + "pk": 376, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "snila-sie-zima", + "pd": 0, + "title": "\u015ani\u0142a si\u0119 zima" + } + }, + { + "pk": 99, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "spiaca-krolewna", + "pd": 0, + "title": "\u015api\u0105ca kr\u00f3lewna" + } + }, + { + "pk": 670, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Rajnold Suchodolski", + "slug": "spiew", + "pd": 0, + "title": "\u015apiew" + } + }, + { + "pk": 162, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "spiewny-pocalunek", + "pd": 0, + "title": "\u015apiewny poca\u0142unek" + } + }, + { + "pk": 452, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "swiatlo-w-ruinach", + "pd": 0, + "title": "\u015awiat\u0142o w ruinach" + } + }, + { + "pk": 53, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "swit", + "pd": 0, + "title": "\u015awit" + } + }, + { + "pk": 163, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "ta-chwila", + "pd": 0, + "title": "Ta chwila" + } + }, + { + "pk": 178, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Artur Conan Doyle", + "slug": "tajemnica-baskervilleow", + "pd": 0, + "title": "Tajemnica Baskerville'\u00f3w" + } + }, + { + "pk": 112, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Frances Hodgson Burnett", + "slug": "tajemniczy-ogrod", + "pd": 2014, + "title": "Tajemniczy ogr\u00f3d" + } + }, + { + "pk": 585, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "tak-mi-boze-dopomoz", + "pd": 0, + "title": "Tak mi, Bo\u017ce, dopom\u00f3\u017c" + } + }, + { + "pk": 340, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "tango", + "pd": 0, + "title": "Tango" + } + }, + { + "pk": 283, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Irena Jurgielewiczowa", + "slug": "ten-obcy", + "pd": 2074, + "title": "Ten obcy" + } + }, + { + "pk": 586, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "ten-sam-duchowi-plomienny-szlak", + "pd": 0, + "title": "Ten sam duchowi p\u0142omienny szlak" + } + }, + { + "pk": 100, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "titelitury", + "pd": 0, + "title": "Titelitury" + } + }, + { + "pk": 164, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "to-wiem", + "pd": 0, + "title": "To wiem" + } + }, + { + "pk": 101, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "tomcio-paluszek", + "pd": 0, + "title": "Tomcio paluszek" + } + }, + { + "pk": 610, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Alfred Szklarski", + "slug": "tomek-w-krainie-kangurow", + "pd": 2063, + "title": "Tomek w krainie kangur\u00f3w" + } + }, + { + "pk": 165, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "torun", + "pd": 0, + "title": "Toru\u0144" + } + }, + { + "pk": 410, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Wies\u0142aw My\u015bliwski", + "slug": "traktat-o-luskaniu-fasoli", + "pd": null, + "title": "Traktat o \u0142uskaniu fasoli" + } + }, + { + "pk": 645, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "triumfy-krola-niebieskiego", + "pd": 0, + "title": "Triumfy Kr\u00f3la Niebieskiego" + } + }, + { + "pk": 282, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Karol Wojty\u0142a", + "slug": "tryptyk-rzymski", + "pd": 2076, + "title": "Tryptyk Rzymski" + } + }, + { + "pk": 377, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "trzech-budrysow", + "pd": 0, + "title": "Trzech Budrys\u00f3w" + } + }, + { + "pk": 671, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "trzeci-maj-litwina", + "pd": 0, + "title": "Trzeci Maj Litwina" + } + }, + { + "pk": 341, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "tu-jestem", + "pd": 0, + "title": "Tu jestem" + } + }, + { + "pk": 378, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "tukaj", + "pd": 0, + "title": "Tukaj" + } + }, + { + "pk": 616, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander \u015awi\u0119tochowski", + "slug": "twingo", + "pd": 0, + "title": "Twingo" + } + }, + { + "pk": 342, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "twoj-portret", + "pd": 0, + "title": "Tw\u00f3j portret" + } + }, + { + "pk": 587, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "ty-glos-cierpiacy-podnies-i-niech-w-tobie", + "pd": 0, + "title": "Ty g\u0142os cierpi\u0105cy podnie\u015b \u2014 i niech w tobie" + } + }, + { + "pk": 404, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "tygrys-i-roza", + "pd": null, + "title": "Tygrys i R\u00f3\u017ca" + } + }, + { + "pk": 379, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "uciec-z-dusza-na-listek", + "pd": 0, + "title": "Uciec z dusz\u0105 na listek" + } + }, + { + "pk": 380, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "ucieczka", + "pd": 0, + "title": "Ucieczka" + } + }, + { + "pk": 672, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Franciszek Kowalski", + "slug": "ulan-i-dziewczyna", + "pd": 0, + "title": "U\u0142an i dziewczyna" + } + }, + { + "pk": 588, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "uspokojenie", + "pd": 0, + "title": "Uspokojenie" + } + }, + { + "pk": 343, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "usta-i-oczy", + "pd": 0, + "title": "Usta i oczy" + } + }, + { + "pk": 623, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jules Gabriel Verne", + "slug": "w-80-dni-dokola-swiata", + "pd": 0, + "title": "W 80 dni doko\u0142a \u015bwiata" + } + }, + { + "pk": 590, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "w-albumie-e-hr-krasinskiej", + "pd": 0, + "title": "W albumie E. hr. Krasi\u0144skiej" + } + }, + { + "pk": 166, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "w-boju", + "pd": 0, + "title": "W boju" + } + }, + { + "pk": 188, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stefan Grabi\u0144ski", + "slug": "w-domu-sary", + "pd": 0, + "title": "W domu Sary" + } + }, + { + "pk": 591, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "w-dziecinne-moje-cudne-lata", + "pd": 0, + "title": "W dziecinne moje cudne lata" + } + }, + { + "pk": 381, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "w-imienniku-celiny-szymanowskiej", + "pd": 0, + "title": "W imienniku Celiny Szymanowskiej" + } + }, + { + "pk": 476, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "w-ogrodzie-saskim", + "pd": 0, + "title": "W Ogrodzie Saskim" + } + }, + { + "pk": 592, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "w-ostatni-dzien-w-ostatni-dzien", + "pd": 0, + "title": "W ostatni dzie\u0144 \u2014 w ostatni dzie\u0144" + } + }, + { + "pk": 501, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "w-palarni-opium", + "pd": 0, + "title": "W palarni opium" + } + }, + { + "pk": 593, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "w-pamietniku-zofii-bobrowny", + "pd": 0, + "title": "W pami\u0119tniku Zofii Bobr\u00f3wny" + } + }, + { + "pk": 594, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "w-sztambuchu-marii-wodzinskiej", + "pd": 0, + "title": "W sztambuchu Marii Wodzi\u0144skiej" + } + }, + { + "pk": 589, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "w-szwajcarii", + "pd": 0, + "title": "W Szwajcarii" + } + }, + { + "pk": 428, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "w-weronie", + "pd": 0, + "title": "W Weronie" + } + }, + { + "pk": 453, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "w-zimowy-wieczor", + "pd": 0, + "title": "W zimowy wiecz\u00f3r" + } + }, + { + "pk": 646, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Piotr Skarga", + "slug": "w-zlobie-lezy", + "pd": 0, + "title": "W \u017c\u0142obie le\u017cy" + } + }, + { + "pk": 595, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "waclaw", + "pd": 0, + "title": "Wac\u0142aw" + } + }, + { + "pk": 502, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "wampir", + "pd": 0, + "title": "Wampir" + } + }, + { + "pk": 427, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "wanda", + "pd": 0, + "title": "Wanda" + } + }, + { + "pk": 673, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "warszawianka", + "pd": 0, + "title": "Warszawianka" + } + }, + { + "pk": 678, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Wyspia\u0144ski", + "slug": "wyspianski-warszawianka", + "pd": 0, + "title": "Warszawianka" + } + }, + { + "pk": 674, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "warszawianka-1831", + "pd": 0, + "title": "Warszawianka 1831" + } + }, + { + "pk": 675, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "warszawianka-1905", + "pd": 0, + "title": "Warszawianka 1905" + } + }, + { + "pk": 344, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "wczesnym-rankiem", + "pd": 0, + "title": "Wczesnym rankiem" + } + }, + { + "pk": 503, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "we-mglach", + "pd": 0, + "title": "We mg\u0142ach" + } + }, + { + "pk": 518, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "wesole-kumoszki-z-windsoru", + "pd": 0, + "title": "Weso\u0142e kumoszki z Windsoru" + } + }, + { + "pk": 54, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "wesoly-zmarly", + "pd": 0, + "title": "Weso\u0142y Zmar\u0142y" + } + }, + { + "pk": 167, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "westchnienie", + "pd": 0, + "title": "Westchnienie" + } + }, + { + "pk": 55, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "widmo", + "pd": 0, + "title": "Widmo" + } + }, + { + "pk": 168, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "widzenie", + "pd": 0, + "title": "Widzenie" + } + }, + { + "pk": 477, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "widziadla", + "pd": 0, + "title": "Widziad\u0142a" + } + }, + { + "pk": 596, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "wielcysmy-byli-i-smiesznismy-byli", + "pd": 0, + "title": "Wielcy\u015bmy byli i \u015bmieszni\u015bmy byli" + } + }, + { + "pk": 102, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "wierny-jan", + "pd": 0, + "title": "Wierny Jan" + } + }, + { + "pk": 345, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "wiersz-konny", + "pd": 0, + "title": "Wiersz konny" + } + }, + { + "pk": 169, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "wiersz-o-smierci", + "pd": 0, + "title": "Wiersz o \u015bmierci" + } + }, + { + "pk": 597, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "wierze", + "pd": 0, + "title": "Wierz\u0119" + } + }, + { + "pk": 598, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "wiesz-panie-i-zem-zbiegal-swiat-szeroki", + "pd": 0, + "title": "Wiesz, Panie, i \u017cem zbiega\u0142 \u015bwiat szeroki" + } + }, + { + "pk": 170, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "wiezien-milosci", + "pd": 0, + "title": "Wi\u0119zie\u0144 mi\u0142o\u015bci" + } + }, + { + "pk": 56, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "wino-galganiarzy", + "pd": 0, + "title": "Wino Ga\u0142ganiarzy" + } + }, + { + "pk": 57, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "wino-mordercy", + "pd": 0, + "title": "Wino Mordercy" + } + }, + { + "pk": 58, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "wino-samotnika", + "pd": 0, + "title": "Wino Samotnika" + } + }, + { + "pk": 295, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Oskar Kolberg", + "slug": "wlazl-kotek-na-plotek", + "pd": 0, + "title": "Wlaz\u0142 kotek na p\u0142otek" + } + }, + { + "pk": 617, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Dorota Terakowska", + "slug": "wladca-lewawu", + "pd": 2075, + "title": "W\u0142adca Lewawu" + } + }, + { + "pk": 59, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "wrog", + "pd": 0, + "title": "Wr\u00f3g" + } + }, + { + "pk": 186, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Wiktor Gomulicki", + "slug": "wspomnienia-niebieskiego-mundurka", + "pd": 0, + "title": "Wspomnienia niebieskiego mundurka" + } + }, + { + "pk": 599, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "wspomnienie-pani-de-st-marcel-z-domu-chauveaux", + "pd": 0, + "title": "Wspomnienie pani de St Marcel z domu Chauveaux" + } + }, + { + "pk": 600, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "wstal-anhelli-z-grobu-za-nim-wszystkie-duchy", + "pd": 0, + "title": "Wsta\u0142 Anhelli z grobu \u2014 za nim wszystkie duchy" + } + }, + { + "pk": 647, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "wsrod-nocnej-ciszy", + "pd": 0, + "title": "W\u015br\u00f3d nocnej ciszy" + } + }, + { + "pk": 601, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "wyjdzie-stu-robotnikow", + "pd": 0, + "title": "Wyjdzie stu robotnik\u00f3w" + } + }, + { + "pk": 346, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "wyruszyla-dusza-w-droge", + "pd": 0, + "title": "Wyruszy\u0142a dusza w drog\u0119" + } + }, + { + "pk": 60, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "wyrzut-posmiertny", + "pd": 0, + "title": "Wyrzut Po\u015bmiertny" + } + }, + { + "pk": 608, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Robert Louis Stevenson", + "slug": "wyspa-skarbow", + "pd": 0, + "title": "Wyspa skarb\u00f3w" + } + }, + { + "pk": 679, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Wyspia\u0144ski", + "slug": "wyzwolenie", + "pd": 0, + "title": "Wyzwolenie" + } + }, + { + "pk": 61, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "wzlot", + "pd": 0, + "title": "Wzlot" + } + }, + { + "pk": 478, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "z-bielan", + "pd": 0, + "title": "Z Bielan" + } + }, + { + "pk": 292, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Kasprowicz", + "slug": "z-chalupy", + "pd": 0, + "title": "Z cha\u0142upy" + } + }, + { + "pk": 602, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "z-listu-do-ksiegarza", + "pd": 0, + "title": "Z listu do ksi\u0119garza" + } + }, + { + "pk": 648, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "z-narodzenia-pana", + "pd": 0, + "title": "Z narodzenia Pana" + } + }, + { + "pk": 504, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "z-pamietnika", + "pd": 0, + "title": "Z pami\u0119tnika" + } + }, + { + "pk": 505, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "z-wedrowek-haruna-al-reszyda", + "pd": 0, + "title": "Z w\u0119dr\u00f3wek Haruna al Reszyda" + } + }, + { + "pk": 479, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "z-wypracowan-malego-frania", + "pd": 0, + "title": "Z wypracowa\u0144 ma\u0142ego Frania" + } + }, + { + "pk": 429, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "za-kulisami", + "pd": 0, + "title": "Za kulisami" + } + }, + { + "pk": 506, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "zabilem", + "pd": 0, + "title": "Zabi\u0142em" + } + }, + { + "pk": 347, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "zachod", + "pd": 0, + "title": "Zach\u00f3d" + } + }, + { + "pk": 603, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "zachwycenie", + "pd": 0, + "title": "Zachwycenie" + } + }, + { + "pk": 62, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "zapach-egzotyczny", + "pd": 0, + "title": "Zapach Egzotyczny" + } + }, + { + "pk": 63, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "zaproszenie-do-podrozy", + "pd": 0, + "title": "Zaproszenie Do Podr\u00f3\u017cy" + } + }, + { + "pk": 296, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Oskar Kolberg", + "slug": "zasiali-gorale", + "pd": 0, + "title": "Zasiali g\u00f3rale" + } + }, + { + "pk": 348, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "zboj", + "pd": 0, + "title": "Zb\u00f3j" + } + }, + { + "pk": 176, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Fiodor Dostojewski", + "slug": "zbrodnia-i-kara", + "pd": 2027, + "title": "Zbrodnia i kara" + } + }, + { + "pk": 382, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "zdania-i-uwagi", + "pd": 0, + "title": "Zdania i uwagi" + } + }, + { + "pk": 300, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Hanna Krall", + "slug": "zdazyc-przed-panem-bogiem", + "pd": null, + "title": "Zd\u0105\u017cy\u0107 przed Panem Bogiem" + } + }, + { + "pk": 454, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "zefirek", + "pd": 0, + "title": "Zefirek" + } + }, + { + "pk": 64, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "zegar", + "pd": 0, + "title": "Zegar" + } + }, + { + "pk": 383, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "zima-w-miescie", + "pd": 0, + "title": "Zima w mie\u015bcie" + } + }, + { + "pk": 103, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "zlodziej-nad-zlodziejami", + "pd": 0, + "title": "Z\u0142odziej nad z\u0142odziejami" + } + }, + { + "pk": 455, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "zlota-nitka", + "pd": 0, + "title": "Z\u0142ota nitka" + } + }, + { + "pk": 175, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Tadeusz Do\u0142\u0119ga-Mostowicz", + "slug": "znachor", + "pd": 0, + "title": "Znachor" + } + }, + { + "pk": 65, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "zniszczenie", + "pd": 0, + "title": "Zniszczenie" + } + }, + { + "pk": 66, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "zwloki", + "pd": 0, + "title": "Zw\u0142oki" + } + }, + { + "pk": 407, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "zaba", + "pd": null, + "title": "\u017baba" + } + }, + { + "pk": 104, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "zabi-krol", + "pd": 0, + "title": "\u017babi kr\u00f3l" + } + }, + { + "pk": 171, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "zal", + "pd": 0, + "title": "\u017bal" + } + }, + { + "pk": 384, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "zeglarz", + "pd": 0, + "title": "\u017beglarz" + } + }, + { + "pk": 604, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "zmija", + "pd": 0, + "title": "\u017bmija" + } + }, + { + "pk": 67, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "zywa-pochodnia", + "pd": 0, + "title": "\u017bywa Pochodnia" + } + }, + { + "pk": 487, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Miko\u0142aj Rej", + "slug": "zywot-czlowieka-poczciwego", + "pd": 0, + "title": "\u017bywot cz\u0142owieka poczciwego" + } + } +] \ No newline at end of file diff --git a/src/pdcounter/locale/de/LC_MESSAGES/django.mo b/src/pdcounter/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..690e38b09 Binary files /dev/null and b/src/pdcounter/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/de/LC_MESSAGES/django.po b/src/pdcounter/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..89dcf4e0a --- /dev/null +++ b/src/pdcounter/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,144 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-04-15 13:43+0100\n" +"Last-Translator: Kamil \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" + +#: models.py:13 +msgid "name" +msgstr "Name" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "Slug" + +#: models.py:15 +msgid "sort key" +msgstr "Sortierschlüssel" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "Beschreibung" + +#: models.py:17 +msgid "year of death" +msgstr "Todesjahr" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "Autor" + +#: models.py:24 +#, fuzzy +msgid "authors" +msgstr "Autoren" + +#: models.py:62 +msgid "title" +msgstr "Titel" + +#: models.py:64 +msgid "goes to public domain" +msgstr "Gehe zu Public Domain" + +#: models.py:66 +msgid "translator" +msgstr "Übersetzer" + +#: models.py:70 +msgid "book stub" +msgstr "Buchvorschau" + +#: models.py:71 +msgid "book stubs" +msgstr "Buchvorschauen" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "Lesen Sie mehr über diesem Werk bei Lektury.Gazeta.pl" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "Lesen Sie einen Artikel über diesem Autor in Wikipedia" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "Die Urheberrechte für dieses Werk werden geschützt." + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"Find out why Internet libraries can't publish this author's works." +msgstr "" +"Erfahren " +"Sie warum Internetbibliotheken die Werke dieses Autors nicht publizieren " +"dürfen." + +#: templates/pdcounter/author_detail.html:40 +#, fuzzy +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" +"Die Werke dieses Autors sind in Public Domain und werden in Internet-" +"Schulbibliothek von Wolne Lektury bald publiziert." + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" +"Die Werke des Autors werden in Public Domain sein und werden unbegrenzt " +"publeziert werden dürfen in" + +#: templates/pdcounter/book_stub_detail.html:17 +#, fuzzy +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" +"Dieses Werk ist in Public Domain und wird in Internet Schulbibliothek von " +"Wolne Lektury bald publiziert." + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" +"Die Werke des Autors werden in Public Domain sein und werden unbegrenzt " +"publeziert werden dürfen in" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"Find out why Internet libraries can't publish this work." +msgstr "" +"Erfahren " +"Sie warum Internetbibliotheken dieses Werk nicht publizieren dürfen." + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "Dieses Werk wird durch das Urheberrecht geschützt." + +#~ msgid "year of translator's death" +#~ msgstr "Todesjahr des Übersetzers" diff --git a/src/pdcounter/locale/en/LC_MESSAGES/django.mo b/src/pdcounter/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..18f7c61b7 Binary files /dev/null and b/src/pdcounter/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/en/LC_MESSAGES/django.po b/src/pdcounter/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..7190a6c56 --- /dev/null +++ b/src/pdcounter/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,130 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 20:05+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" +"Plural-Forms: nplurals=2; plural=n != 1\n" + +#: models.py:13 +msgid "name" +msgstr "name" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "Slug" + +#: models.py:15 +msgid "sort key" +msgstr "Sort key" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "Description" + +#: models.py:17 +msgid "year of death" +msgstr "Year of death" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "author" + +#: models.py:24 +#, fuzzy +msgid "authors" +msgstr "author" + +#: models.py:62 +msgid "title" +msgstr "Title" + +#: models.py:64 +msgid "goes to public domain" +msgstr "Goes to public domain" + +#: models.py:66 +msgid "translator" +msgstr "Translator" + +#: models.py:70 +msgid "book stub" +msgstr "Book stub" + +#: models.py:71 +msgid "book stubs" +msgstr "Book stubs" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "" + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"Find out why Internet libraries can't publish this author's works." +msgstr "" + +#: templates/pdcounter/author_detail.html:40 +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:17 +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"Find out why Internet libraries can't publish this work." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "" + +#~ msgid "year of translator's death" +#~ msgstr "Year of translator's death" diff --git a/src/pdcounter/locale/es/LC_MESSAGES/django.mo b/src/pdcounter/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..21f9745a7 Binary files /dev/null and b/src/pdcounter/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/es/LC_MESSAGES/django.po b/src/pdcounter/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..a04dc78b7 --- /dev/null +++ b/src/pdcounter/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,143 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-05-17 22:05+0100\n" +"Last-Translator: KG \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" + +#: models.py:13 +msgid "name" +msgstr "nombre" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "slug" + +#: models.py:15 +msgid "sort key" +msgstr "clave de clasificación" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "descripción" + +#: models.py:17 +msgid "year of death" +msgstr "año de muerte" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "autor" + +#: models.py:24 +msgid "authors" +msgstr "autores" + +#: models.py:62 +msgid "title" +msgstr "título" + +#: models.py:64 +msgid "goes to public domain" +msgstr "pasa al dominio público" + +#: models.py:66 +msgid "translator" +msgstr "traductor" + +#: models.py:70 +msgid "book stub" +msgstr "vista previa del libro" + +#: models.py:71 +msgid "book stubs" +msgstr "vista previa de libros" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "Lea el estudio sobre las obras de este autor en Lektury.Gazeta.pl" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "Lea el artículo sobre este autor en Wikipedia" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "Las obras de este autor tienen todos los derechos de autor reservados." + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"Find out why Internet libraries can't publish this author's works." +msgstr "" +"Find out el porqué las bibliotecas virtuales no pueden publicar las obras de este " +"autor." + +#: templates/pdcounter/author_detail.html:40 +#, fuzzy +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" +"Las obras de este autor son de dominio público y pronto serán publicadas en " +"Biblioteca virtual de Wolne Lektury." + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" +"Las obras de este autor van a ser parte de dominio público y pronto serán " +"publicadas sin restricciones en" + +#: templates/pdcounter/book_stub_detail.html:17 +#, fuzzy +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" +"Esta obra es de dominio público y pronto será publicada en Biblioteca " +"virtual de Wolne Lektury." + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" +"Esta obra va a ser parte de dominio público y pronto será publicada sin " +"restricciones en" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"Find out why Internet libraries can't publish this work." +msgstr "" +"Find out el porqué las bibliotecas virtuales no pueden publicar esta obra." + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "Esta obra tiene todos los derechos de autor reservados." + +#~ msgid "year of translator's death" +#~ msgstr "año de la muerte del traductor" diff --git a/src/pdcounter/locale/fr/LC_MESSAGES/django.mo b/src/pdcounter/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c6e982cc8 Binary files /dev/null and b/src/pdcounter/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/fr/LC_MESSAGES/django.po b/src/pdcounter/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..6171e494f --- /dev/null +++ b/src/pdcounter/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,127 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-22 20:58+0100\n" +"Last-Translator: Ela Janota \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:13 +msgid "name" +msgstr "nom" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "ébauche" + +#: models.py:15 +msgid "sort key" +msgstr "critère de tri" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "description" + +#: models.py:17 +msgid "year of death" +msgstr "année de la mort" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "auteur" + +#: models.py:24 +msgid "authors" +msgstr "auteurs" + +#: models.py:62 +msgid "title" +msgstr "titre" + +#: models.py:64 +msgid "goes to public domain" +msgstr "entre dans le domaine public" + +#: models.py:66 +msgid "translator" +msgstr "traducteur" + +#: models.py:70 +msgid "book stub" +msgstr "ébauche du livre" + +#: models.py:71 +msgid "book stubs" +msgstr "ébauches des livres" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "" + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"Find out why Internet libraries can't publish this author's works." +msgstr "" + +#: templates/pdcounter/author_detail.html:40 +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:17 +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"Find out why Internet libraries can't publish this work." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "" + +#~ msgid "year of translator's death" +#~ msgstr "année de la mort du traducteur" diff --git a/src/pdcounter/locale/it/LC_MESSAGES/django.mo b/src/pdcounter/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..fc0347069 Binary files /dev/null and b/src/pdcounter/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/it/LC_MESSAGES/django.po b/src/pdcounter/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..e7a083ee4 --- /dev/null +++ b/src/pdcounter/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,152 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-21 17:06+0100\n" +"Last-Translator: xxx\n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: models.py:13 +msgid "name" +msgstr "" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "" + +#: models.py:15 +msgid "sort key" +msgstr "" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "" + +#: models.py:17 +msgid "year of death" +msgstr "" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "" + +#: models.py:24 +msgid "authors" +msgstr "" + +#: models.py:62 +msgid "title" +msgstr "" + +#: models.py:64 +msgid "goes to public domain" +msgstr "" + +#: models.py:66 +msgid "translator" +msgstr "" + +#: models.py:70 +msgid "book stub" +msgstr "" + +#: models.py:71 +msgid "book stubs" +msgstr "" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "" + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"Find out why Internet libraries can't publish this author's works." +msgstr "" + +#: templates/pdcounter/author_detail.html:40 +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:17 +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"Find out why Internet libraries can't publish this work." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "" + +#~ msgid "tags" +#~ msgstr "i tag" + +#~ msgid "tag" +#~ msgstr "tag" + +#~ msgid "content type" +#~ msgstr "tipo di contenuto" + +#~ msgid "object id" +#~ msgstr "oggetto id" + +#~ msgid "tagged_object_list must be called with a queryset or a model." +#~ msgstr "" +#~ "L'elenco degli oggetti taggati deve essere chiamato con un queryset o un " +#~ "modello." + +#~ msgid "tagged_object_list must be called with a tag model." +#~ msgstr "" +#~ "L’elenco degli oggetti taggati deve essere chiamato con un modello tag." + +#~ msgid "tagged_object_list must be called with a tag." +#~ msgstr "L’elenco degli oggetti taggati deve essere chiamato con un tag." + +#~ msgid "No tags found matching \"%s\"." +#~ msgstr "Non sono stati trovati tag corrispondenti \"%s\"." diff --git a/src/pdcounter/locale/jp/LC_MESSAGES/django.mo b/src/pdcounter/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c9739db34 Binary files /dev/null and b/src/pdcounter/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/jp/LC_MESSAGES/django.po b/src/pdcounter/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..358d71aa2 --- /dev/null +++ b/src/pdcounter/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,125 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:13 +msgid "name" +msgstr "" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "" + +#: models.py:15 +msgid "sort key" +msgstr "" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "" + +#: models.py:17 +msgid "year of death" +msgstr "" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "" + +#: models.py:24 +msgid "authors" +msgstr "" + +#: models.py:62 +msgid "title" +msgstr "" + +#: models.py:64 +msgid "goes to public domain" +msgstr "" + +#: models.py:66 +msgid "translator" +msgstr "" + +#: models.py:70 +msgid "book stub" +msgstr "" + +#: models.py:71 +msgid "book stubs" +msgstr "" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "" + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"Find out why Internet libraries can't publish this author's works." +msgstr "" + +#: templates/pdcounter/author_detail.html:40 +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:17 +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"Find out why Internet libraries can't publish this work." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "" diff --git a/src/pdcounter/locale/lt/LC_MESSAGES/django.mo b/src/pdcounter/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..dc721cf69 Binary files /dev/null and b/src/pdcounter/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/lt/LC_MESSAGES/django.po b/src/pdcounter/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..cedd34657 --- /dev/null +++ b/src/pdcounter/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,146 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-04-03 18:01+0100\n" +"Last-Translator: Karolina Zuber \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: models.py:13 +msgid "name" +msgstr "pavadinimas" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "slug" + +#: models.py:15 +msgid "sort key" +msgstr "rikiavimo raktas" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "aprašas" + +#: models.py:17 +msgid "year of death" +msgstr "mirties metai" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "autorius" + +#: models.py:24 +msgid "authors" +msgstr "autoriai" + +#: models.py:62 +msgid "title" +msgstr "pavadinimas" + +#: models.py:64 +msgid "goes to public domain" +msgstr "į viešąją sritį" + +#: models.py:66 +msgid "translator" +msgstr "vertėjas" + +#: models.py:70 +msgid "book stub" +msgstr "book stub" + +#: models.py:71 +msgid "book stubs" +msgstr "book stubs" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "" +"Skaitykite šio autoriaus kūrinio aprašymą interneto svetainėje Lektury." +"Gazeta.pl" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "Skaitykite straipsnį apie šį autorių Vikipedijoje" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "Šio autoriaus kūriniai yra autorinių teisių saugomi." + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"Find out why Internet libraries can't publish this author's works." +msgstr "" +"Sužinokite kodėl šio autoriaus kūriniai negali būti " +"publikuojami internetinėje bibliotekoje." + +#: templates/pdcounter/author_detail.html:40 +#, fuzzy +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" +"Šio autoriaus kūriniai yra viešai prieinami ir netrukus bus publikuoti " +"interneto svetainės Wolne Lektury internetinėje bibliotekoje. " + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" +"Šio autoriaus kūriniai netrukus bus viešai prieinami ir galės būti " +"publikuojami be apribojimų" + +#: templates/pdcounter/book_stub_detail.html:17 +#, fuzzy +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" +"Šis kūrinys yra viešai prieinamas ir netrukus bus publikuotas interneto " +"svetainės Wolne Lektury internetinėje bibliotekoje." + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" +"Šis kūrinys netrukus bus viešai prieinamas ir galės būti publikuojamas be " +"apribojimų" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"Find out why Internet libraries can't publish this work." +msgstr "" +"Sužinokite kodėl šis kūrinys negali būti publikuojamas " +"internetinėje bibliotekoje." + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "Šis kūrinis yra autorinių teisių saugomas." + +#~ msgid "year of translator's death" +#~ msgstr "vertėjo mirimo metai" diff --git a/src/pdcounter/locale/pl/LC_MESSAGES/django.mo b/src/pdcounter/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..8716191fe Binary files /dev/null and b/src/pdcounter/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/pl/LC_MESSAGES/django.po b/src/pdcounter/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..18cd84d7a --- /dev/null +++ b/src/pdcounter/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,142 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-06-11 15:47+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" +"X-Generator: Poedit 1.5.4\n" + +#: models.py:13 +msgid "name" +msgstr "nazwa" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "slug" + +#: models.py:15 +msgid "sort key" +msgstr "klucz sortowania" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "opis" + +#: models.py:17 +msgid "year of death" +msgstr "rok śmierci" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "autor" + +#: models.py:24 +msgid "authors" +msgstr "autorzy" + +#: models.py:62 +msgid "title" +msgstr "tytuł" + +#: models.py:64 +msgid "goes to public domain" +msgstr "trafia do domeny publicznej" + +#: models.py:66 +msgid "translator" +msgstr "tłumacz" + +#: models.py:70 +msgid "book stub" +msgstr "zapowiedź książki" + +#: models.py:71 +msgid "book stubs" +msgstr "zapowiedzi książek" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "Licznik domeny publicznej" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "Przeczytaj omówienia utworów autora w serwisie Lektury.Gazeta.pl" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "Przeczytaj artykuł o autorze w Wikipedii" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "Dzieła tego autora objęte są prawem autorskim." + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"Find out why Internet libraries can't publish this author's works." +msgstr "" +"Dowiedz " +"się, dlaczego biblioteki internetowe nie mogą udostępniać dzieł tego " +"autora." + +#: templates/pdcounter/author_detail.html:40 +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" +"Dzieła tego autora znajdują się w domenie publicznej i niedługo zostaną " +"opublikowane w bibliotece internetowej Wolne Lektury." + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" +"Dzieła tego autora przejdą do zasobów domeny publicznej i będą mogły być " +"publikowane bez żadnych ograniczeń za" + +#: templates/pdcounter/book_stub_detail.html:17 +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" +"Ten utwór znajduje się w domenie publicznej i niedługo zostanie opublikowany " +"w bibliotece internetowej Wolne Lektury." + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" +"Ten utwór przejdzie do zasobów domeny publicznej i będzie mógł być " +"publikowany bez żadnych ograniczeń za" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"Find out why Internet libraries can't publish this work." +msgstr "" +"Dowiedz " +"się, dlaczego biblioteki internetowe nie mogą udostępniać tego utworu." + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "Ten utwór objęty jest prawem autorskim." + +#~ msgid "year of translator's death" +#~ msgstr "rok śmierci tłumacza" diff --git a/src/pdcounter/locale/ru/LC_MESSAGES/django.mo b/src/pdcounter/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..9e6a2e2a4 Binary files /dev/null and b/src/pdcounter/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/ru/LC_MESSAGES/django.po b/src/pdcounter/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..e6ed8e13b --- /dev/null +++ b/src/pdcounter/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 22:11+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" + +#: models.py:13 +msgid "name" +msgstr "название" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "slug" + +#: models.py:15 +msgid "sort key" +msgstr "ключ сортировки " + +#: models.py:16 models.py:42 +msgid "description" +msgstr "описание" + +#: models.py:17 +msgid "year of death" +msgstr "год смерти" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "автор" + +#: models.py:24 +msgid "authors" +msgstr "авторы" + +#: models.py:62 +msgid "title" +msgstr "заглавие" + +#: models.py:64 +msgid "goes to public domain" +msgstr "идёт к публичной домене" + +#: models.py:66 +msgid "translator" +msgstr "переводчик" + +#: models.py:70 +msgid "book stub" +msgstr "анонс книги" + +#: models.py:71 +msgid "book stubs" +msgstr "анонсы книги" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "" + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"Find out why Internet libraries can't publish this author's works." +msgstr "" + +#: templates/pdcounter/author_detail.html:40 +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:17 +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"Find out why Internet libraries can't publish this work." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "" + +#~ msgid "year of translator's death" +#~ msgstr "год смерти переводчика" diff --git a/src/pdcounter/locale/uk/LC_MESSAGES/django.mo b/src/pdcounter/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..539ff49a7 Binary files /dev/null and b/src/pdcounter/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/uk/LC_MESSAGES/django.po b/src/pdcounter/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..bb7bd4f6c --- /dev/null +++ b/src/pdcounter/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,143 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-05-28 14:18+0100\n" +"Last-Translator: Natalia Kertyczak \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:13 +msgid "name" +msgstr "назва" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "slug" + +#: models.py:15 +msgid "sort key" +msgstr "ключ сортування" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "опис" + +#: models.py:17 +msgid "year of death" +msgstr "дата смерті" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "автор" + +#: models.py:24 +msgid "authors" +msgstr "автори" + +#: models.py:62 +msgid "title" +msgstr "заголовок" + +#: models.py:64 +msgid "goes to public domain" +msgstr "входить у суспільне надбання" + +#: models.py:66 +msgid "translator" +msgstr "перекладач" + +#: models.py:70 +msgid "book stub" +msgstr "заготовка книжки" + +#: models.py:71 +msgid "book stubs" +msgstr "заготовки книжок" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "Прочитати обговорення твору автора на Lektury.Gazeta.pl" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "Прочитати статтю про автора у Вікіпедії" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "Твори цього автора охороняються авторським правом." + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"Find out why Internet libraries can't publish this author's works." +msgstr "" +"Дізнайтеся, чому електронні бібліотеки не можуть " +"опублікувати творів цього автора." + +#: templates/pdcounter/author_detail.html:40 +#, fuzzy +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" +"Твори цього автора є частиною суспільного надбання і скоро будуть " +"опубліковані у шкільній електронній бібліотеці Wolne Lektury." + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" +"Твори цього автора стануть частиною суспільного надбання і можна буде їх " +"вільно публікувати у" + +#: templates/pdcounter/book_stub_detail.html:17 +#, fuzzy +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" +"Цей твір є частиною суспільного надбання і скоро буде опублікований у " +"шкільній електронній бібліотеці Wolne Lektury." + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" +"Цей твір стане частиною суспільного надбання і можна буде його вільно " +"публікувати у" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"Find out why Internet libraries can't publish this work." +msgstr "" +"Дізнайтеся, чому електронні бібліотеки не можуть " +"опублікувати цього твору." + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "Цей твір охороняється авторським правом." + +#~ msgid "year of translator's death" +#~ msgstr "рік смерті перекладача" diff --git a/src/pdcounter/migrations/0001_initial.py b/src/pdcounter/migrations/0001_initial.py new file mode 100644 index 000000000..fdd0a8e9b --- /dev/null +++ b/src/pdcounter/migrations/0001_initial.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Author', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=50, verbose_name='name', db_index=True)), + ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), + ('sort_key', models.CharField(max_length=120, verbose_name='Sort key', db_index=True)), + ('description', models.TextField(verbose_name='Description', blank=True)), + ('death', models.IntegerField(null=True, verbose_name='Year of death', blank=True)), + ('gazeta_link', models.CharField(max_length=240, blank=True)), + ('wiki_link', models.CharField(max_length=240, blank=True)), + ], + options={ + 'ordering': ('sort_key',), + 'verbose_name': 'author', + 'verbose_name_plural': 'authors', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='BookStub', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('title', models.CharField(max_length=120, verbose_name='Title')), + ('author', models.CharField(max_length=120, verbose_name='author')), + ('pd', models.IntegerField(null=True, verbose_name='Goes to public domain', blank=True)), + ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), + ('translator', models.TextField(verbose_name='Translator', blank=True)), + ], + options={ + 'ordering': ('title',), + 'verbose_name': 'Book stub', + 'verbose_name_plural': 'Book stubs', + }, + bases=(models.Model,), + ), + ] diff --git a/src/pdcounter/migrations/0002_auto_20151221_1225.py b/src/pdcounter/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..6447cc1d4 --- /dev/null +++ b/src/pdcounter/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pdcounter', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='bookstub', + options={'ordering': ('title',), 'verbose_name': 'book stub', 'verbose_name_plural': 'book stubs'}, + ), + migrations.AlterField( + model_name='author', + name='death', + field=models.IntegerField(null=True, verbose_name='year of death', blank=True), + ), + migrations.AlterField( + model_name='author', + name='description', + field=models.TextField(verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='author', + name='slug', + field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), + ), + migrations.AlterField( + model_name='author', + name='sort_key', + field=models.CharField(max_length=120, verbose_name='sort key', db_index=True), + ), + migrations.AlterField( + model_name='bookstub', + name='pd', + field=models.IntegerField(null=True, verbose_name='goes to public domain', blank=True), + ), + migrations.AlterField( + model_name='bookstub', + name='slug', + field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), + ), + migrations.AlterField( + model_name='bookstub', + name='title', + field=models.CharField(max_length=120, verbose_name='title'), + ), + migrations.AlterField( + model_name='bookstub', + name='translator', + field=models.TextField(verbose_name='translator', blank=True), + ), + ] diff --git a/src/pdcounter/migrations/__init__.py b/src/pdcounter/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/pdcounter/models.py b/src/pdcounter/models.py new file mode 100644 index 000000000..7c10f1e59 --- /dev/null +++ b/src/pdcounter/models.py @@ -0,0 +1,100 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django.db import models +from django.db.models import permalink +from django.utils.translation import ugettext_lazy as _ +from datetime import datetime +from django.db.models.signals import post_save, post_delete + +class Author(models.Model): + name = models.CharField(_('name'), max_length=50, db_index=True) + slug = models.SlugField(_('slug'), max_length=120, db_index=True, unique=True) + sort_key = models.CharField(_('sort key'), max_length=120, db_index=True) + description = models.TextField(_('description'), blank=True) + death = models.IntegerField(_(u'year of death'), blank=True, null=True) + gazeta_link = models.CharField(blank=True, max_length=240) + wiki_link = models.CharField(blank=True, max_length=240) + + class Meta: + ordering = ('sort_key',) + verbose_name = _('author') + verbose_name_plural = _('authors') + + @property + def category(self): + return "author" + + def __unicode__(self): + return self.name + + def __repr__(self): + return "Author(slug=%r)" % self.slug + + @permalink + def get_absolute_url(self): + return ('catalogue.views.tagged_object_list', [self.url_chunk]) + + def has_description(self): + return len(self.description) > 0 + has_description.short_description = _('description') + has_description.boolean = True + + def alive(self): + return self.death is None + + def in_pd(self): + """ tests whether an author is in public domain """ + return self.death is not None and self.goes_to_pd() <= datetime.now().year + + def goes_to_pd(self): + """ calculates the year of public domain entry for an author """ + return self.death + 71 if self.death is not None else None + + @property + def url_chunk(self): + return '/'.join(('autor', self.slug)) + + +class BookStub(models.Model): + title = models.CharField(_('title'), max_length=120) + author = models.CharField(_('author'), max_length=120) + pd = models.IntegerField(_('goes to public domain'), null=True, blank=True) + slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True) + translator = models.TextField(_('translator'), blank=True) + + class Meta: + ordering = ('title',) + verbose_name = _('book stub') + verbose_name_plural = _('book stubs') + + def __unicode__(self): + return self.title + + @permalink + def get_absolute_url(self): + return ('catalogue.views.book_detail', [self.slug]) + + def in_pd(self): + return self.pd is not None and self.pd <= datetime.now().year + + @property + def name(self): + return self.title + + def pretty_title(self, html_links=False): + return ', '.join((self.author, self.title)) + + +if not settings.NO_SEARCH_INDEX: + def update_index(sender, instance, **kwargs): + from search.index import Index + idx = Index() + idx.index_tags(instance, remove_only=not 'created' in kwargs) + + post_delete.connect(update_index, Author) + post_delete.connect(update_index, BookStub) + post_save.connect(update_index, Author) + post_save.connect(update_index, BookStub) diff --git a/src/pdcounter/static/pdcounter/pdcounter.js b/src/pdcounter/static/pdcounter/pdcounter.js new file mode 100755 index 000000000..a1ff53736 --- /dev/null +++ b/src/pdcounter/static/pdcounter/pdcounter.js @@ -0,0 +1,41 @@ +(function($) { + $(function() { + + $('.countdown').each(function() { + var $this = $(this); + + var serverTime = function() { + var time = null; + $.ajax({url: '/zegar/', + async: false, dataType: 'text', + success: function(text) { + time = new Date(text); + }, error: function(http, message, exc) { + time = new Date(); + }}); + return time; + } + + if (LANGUAGE_CODE != 'en') { + $.countdown.setDefaults($.countdown.regional[LANGUAGE_CODE]); + } + else { + $.countdown.setDefaults($.countdown.regional['']); + } + + var options = { + until: new Date($this.attr('data-until')), + format: 'ydHMS', + serverSync: serverTime, + onExpiry: function(){location.reload()}, // TODO: no reload + }; + if ($this.hasClass('inline')) { + options.layout = '{d<}{dn} {dl} {d>}{hnn}{sep}{mnn}{sep}{snn}'; + } + + $this.countdown(options); + }); + + + }); +})(jQuery); diff --git a/src/pdcounter/templates/pdcounter/author_detail.html b/src/pdcounter/templates/pdcounter/author_detail.html new file mode 100644 index 000000000..50eef63fb --- /dev/null +++ b/src/pdcounter/templates/pdcounter/author_detail.html @@ -0,0 +1,56 @@ +{% extends "base.html" %} +{% load i18n %} +{% load time_tags %} + +{% block titleextra %}{{ author.name }}{% endblock %} + +{% block metadescription %}{% trans "Public domain counter" %}: {{author.name}}.{% endblock %} + +{% block bodyid %}author-detail{% endblock %} + +{% block body %} + +
                        +

                        {{ author.name }}

                        +
                        + {% if author.has_description %} +
                        +
                        {{ author.description|safe }}
                        +
                        {{ author.description|safe|truncatewords_html:30 }}
                        +
                        +
                        +

                        + {% endif %} + {% if author.gazeta_link %} +

                        + {% trans "Read work's study of this author on Lektury.Gazeta.pl" %} +

                        + {% endif %} + {% if author.wiki_link %} +

                        + {% trans "Read article about this author on Wikipedia" %} +

                        + {% endif %} + + {% if author.alive %} +

                        {% trans "This author's works are copyrighted." %} + {% trans "Find out why Internet libraries can't publish this author's works." %}

                        + {% else %} + {% if author.in_pd %} +

                        {% trans "This author's works are in public domain and will be published on Internet library of Wolne Lektury soon." %}

                        + {% else %} +
                        +

                        {% trans "This author's works will become part of public domain and will be allowed to be published without restrictions in" %}

                        +
                        +

                        {% trans "Find out why Internet libraries can't publish this author's works." %}

                        +
                        + {% endif %} + {% endif %} + {% include "info/join_us.html" %} +
                        +
                        + +
                        + {% include "publishing_suggest.html" %} +
                        +{% endblock %} diff --git a/src/pdcounter/templates/pdcounter/book_stub_detail.html b/src/pdcounter/templates/pdcounter/book_stub_detail.html new file mode 100644 index 000000000..640d68ebe --- /dev/null +++ b/src/pdcounter/templates/pdcounter/book_stub_detail.html @@ -0,0 +1,35 @@ +{% extends "base.html" %} +{% load i18n %} +{% load time_tags %} + +{% block titleextra %}{{ book.title }}{% endblock %} + +{% block metadescription %}{% trans "Public domain counter" %}: {{ book.title }}.{% endblock %} + +{% block bodyid %}book-stub-detail{% endblock %} + +{% block body %} +
                        +

                        {{ book.author }}, {{ book.title }}

                        +
                        + + {% if book.in_pd %} +

                        {% trans "This work is in public domain and will be published on Internet library of Wolne Lektury soon." %}

                        + {% else %} + {% if book.pd %} +

                        {% trans "This work will become part of public domain and will be allowed to be published without restrictions in" %}

                        +
                        +

                        {% trans "Find out why Internet libraries can't publish this work." %}

                        + {% else %} +

                        {% trans "This work is copyrighted." %} + {% trans "Find out why Internet libraries can't publish this work." %}

                        + {% endif %} + {% endif %} + {% include "info/join_us.html" %} +
                        +
                        + +
                        + {% include "publishing_suggest.html" %} +
                        +{% endblock %} diff --git a/src/pdcounter/templatetags/__init__.py b/src/pdcounter/templatetags/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/src/pdcounter/templatetags/time_tags.py b/src/pdcounter/templatetags/time_tags.py new file mode 100755 index 000000000..7ea5c6055 --- /dev/null +++ b/src/pdcounter/templatetags/time_tags.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import datetime +import pytz +from django.conf import settings +from django import template +from django.utils import timezone + + +register = template.Library() + +@register.filter +def date_to_utc(date, day_end=False): + """ Converts a datetime.date to UTC datetime. + + The datetime represents the start (or end) of the given day in + the server's timezone. + """ + if day_end: + date += datetime.timedelta(1) + localtime = datetime.datetime.combine(date, datetime.time(0, 0)) + return timezone.utc.normalize( + pytz.timezone(settings.TIME_ZONE).localize(localtime) + ) + + +@register.filter +def utc_for_js(dt): + return dt.strftime('%Y/%m/%d %H:%M:%S UTC') diff --git a/src/pdcounter/views.py b/src/pdcounter/views.py new file mode 100644 index 000000000..e5b4421ce --- /dev/null +++ b/src/pdcounter/views.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from datetime import datetime +from django.template import RequestContext +from django.shortcuts import render_to_response, get_object_or_404 +from django.views.decorators import cache +from suggest.forms import PublishingSuggestForm +from . import models + + +@cache.never_cache +def book_stub_detail(request, slug): + book = get_object_or_404(models.BookStub, slug=slug) + if book.pd and not book.in_pd(): + pd_counter = datetime(book.pd, 1, 1) + + form = PublishingSuggestForm( + initial={"books": u"%s — %s, \n" % (book.author, book.title)}) + + return render_to_response('pdcounter/book_stub_detail.html', locals(), + context_instance=RequestContext(request)) + + +@cache.never_cache +def author_detail(request, slug): + author = get_object_or_404(models.Author, slug=slug) + if not author.alive(): + pd_counter = datetime(author.goes_to_pd(), 1, 1) + + form = PublishingSuggestForm(initial={"books": author.name + ", \n"}) + + return render_to_response('pdcounter/author_detail.html', locals(), + context_instance=RequestContext(request)) diff --git a/src/picture/__init__.py b/src/picture/__init__.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/src/picture/__init__.py @@ -0,0 +1 @@ + diff --git a/src/picture/admin.py b/src/picture/admin.py new file mode 100644 index 000000000..f107d3196 --- /dev/null +++ b/src/picture/admin.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin +from picture.models import Picture +from sorl.thumbnail.admin import AdminImageMixin + +class PictureAdmin(AdminImageMixin, admin.ModelAdmin): + pass + +admin.site.register(Picture, PictureAdmin) diff --git a/src/picture/engine.py b/src/picture/engine.py new file mode 100644 index 000000000..574e5a889 --- /dev/null +++ b/src/picture/engine.py @@ -0,0 +1,57 @@ +from sorl.thumbnail.engines import pil_engine +from sorl.thumbnail import parsers + +# +# Class developed by +# http://timmyomahony.com/blog/custom-cropping-engine-sorl-thumbnail/ +# +class CustomCroppingEngine(pil_engine.Engine): + """ + A custom sorl.thumbnail engine (using PIL) that first crops an image + according to 4 pixel/percentage values in the source image, then scales + that crop down to the size specified in the geometry. This is in contrast + to sorl.thumbnails default engine which first scales the image down to the + specified geometry and applies the crop afterward. + """ + def create(self, image, geometry, options): + image = self.orientation(image, geometry, options) + image = self.colorspace(image, geometry, options) + image = self.crop(image, geometry, options) + image = self.scale(image, geometry, options) + return image + + def _crop_parse(self, crop, xy_image, xy_window): + """ + Conver the crop string passed by the user to accurate cropping values + (This is adapter from the default sorl.thumbnail.parsers.parse_crop) + """ + crops = crop.split(' ') + if len(crops) != 4: + raise parsers.ThumbnailParseError('Unrecognized crop option: %s' % crop) + x1, y1, x2, y2 = crops + + def get_offset(crop, epsilon): + m = parsers.bgpos_pat.match(crop) + if not m: + raise parsers.ThumbnailParseError('Unrecognized crop option: %s' % crop) + value = int(m.group('value')) # we only take ints in the regexp + unit = m.group('unit') + if unit == '%': + value = epsilon * value / 100.0 + return int(max(0, min(value, epsilon))) + x1 = get_offset(x1, xy_image[0]) + y1 = get_offset(y1, xy_image[1]) + x2 = get_offset(x2, xy_image[0]) + y2 = get_offset(y2, xy_image[1]) + return x1, y1, x2, y2 + + def crop(self, image, geometry, options): + crop = options['crop'] + if not crop or crop == 'noop': + return image + x_image, y_image = self.get_image_size(image) + x1,y1,x2,y2 = self._crop_parse(crop, (x_image, y_image), geometry) + return self._crop(image, x1, y1, x2, y2) + + def _crop(self, image, x1, y1, x2, y2): + return image.crop((x1, y1, x2, y2)) diff --git a/src/picture/forms.py b/src/picture/forms.py new file mode 100644 index 000000000..2ad47b0b8 --- /dev/null +++ b/src/picture/forms.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import forms +from django.utils.translation import ugettext_lazy as _ +from picture.models import Picture + + +class PictureImportForm(forms.Form): + picture_xml_file = forms.FileField(required=False) + picture_xml = forms.CharField(required=False) + picture_image_file = forms.FileField(required=False) + picture_image_data = forms.CharField(required=False) + + def clean(self): + from base64 import b64decode + from django.core.files.base import ContentFile + + if not self.cleaned_data['picture_xml_file']: + if self.cleaned_data['picture_xml']: + self.cleaned_data['picture_xml_file'] = \ + ContentFile(self.cleaned_data['picture_xml'].encode('utf-8')) + else: + raise forms.ValidationError(_("Please supply an XML.")) + + if not self.cleaned_data['picture_image_file']: + if self.cleaned_data['picture_image_data']: + self.cleaned_data['picture_image_file'] = \ + ContentFile(b64decode( + self.cleaned_data['picture_image_data'])) + else: + raise forms.ValidationError(_("Please supply an image.")) + + return super(PictureImportForm, self).clean() + + def save(self, commit=True, **kwargs): + return Picture.from_xml_file(self.cleaned_data['picture_xml_file'], image_file=self.cleaned_data['picture_image_file'], + overwrite=True, **kwargs) diff --git a/src/picture/locale/de/LC_MESSAGES/django.mo b/src/picture/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..2ac6a07fc Binary files /dev/null and b/src/picture/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/de/LC_MESSAGES/django.po b/src/picture/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..7ed1f2669 --- /dev/null +++ b/src/picture/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,205 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/locale/en/LC_MESSAGES/django.mo b/src/picture/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c9739db34 Binary files /dev/null and b/src/picture/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/en/LC_MESSAGES/django.po b/src/picture/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..b62ffd4bb --- /dev/null +++ b/src/picture/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,204 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/locale/es/LC_MESSAGES/django.mo b/src/picture/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..2ac6a07fc Binary files /dev/null and b/src/picture/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/es/LC_MESSAGES/django.po b/src/picture/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..7ed1f2669 --- /dev/null +++ b/src/picture/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,205 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/locale/fr/LC_MESSAGES/django.mo b/src/picture/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..147f51a44 Binary files /dev/null and b/src/picture/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/fr/LC_MESSAGES/django.po b/src/picture/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..d196b01da --- /dev/null +++ b/src/picture/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,205 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/locale/it/LC_MESSAGES/django.mo b/src/picture/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..2ac6a07fc Binary files /dev/null and b/src/picture/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/it/LC_MESSAGES/django.po b/src/picture/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..7ed1f2669 --- /dev/null +++ b/src/picture/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,205 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/locale/jp/LC_MESSAGES/django.mo b/src/picture/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c9739db34 Binary files /dev/null and b/src/picture/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/jp/LC_MESSAGES/django.po b/src/picture/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..b62ffd4bb --- /dev/null +++ b/src/picture/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,204 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/locale/lt/LC_MESSAGES/django.mo b/src/picture/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..0be4a8ced Binary files /dev/null and b/src/picture/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/lt/LC_MESSAGES/django.po b/src/picture/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..4ef094735 --- /dev/null +++ b/src/picture/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,206 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \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" +"%100<10 || n%100>=20) ? 1 : 2);\n" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/locale/pl/LC_MESSAGES/django.mo b/src/picture/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..f3bc162ca Binary files /dev/null and b/src/picture/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/pl/LC_MESSAGES/django.po b/src/picture/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..63546c20d --- /dev/null +++ b/src/picture/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,219 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-10-24 11:44+0200\n" +"PO-Revision-Date: 2014-10-24 11:48+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \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%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 1.5.4\n" + +#: forms.py:25 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:33 +msgid "Please supply an image." +msgstr "" + +#: models.py:35 +msgid "area" +msgstr "obszar" + +#: models.py:36 +msgid "kind" +msgstr "typ" + +#: models.py:38 +msgid "thing" +msgstr "przedmiot" + +#: models.py:39 +msgid "theme" +msgstr "motyw" + +#: models.py:75 +msgid "title" +msgstr "tytuł" + +#: models.py:76 +msgid "slug" +msgstr "slug" + +#: models.py:77 +msgid "sort key" +msgstr "klucz sortowania" + +#: models.py:78 +#, fuzzy +msgid "sort key by author" +msgstr "klucz sortowania" + +#: models.py:79 models.py:80 +msgid "creation date" +msgstr "data stworzenia" + +#: models.py:82 +msgid "image_file" +msgstr "" + +#: models.py:84 +msgid "picture areas JSON" +msgstr "obszary w JSON" + +#: models.py:85 +msgid "extra information" +msgstr "dodatkowa informacja" + +#: models.py:105 +msgid "picture" +msgstr "obraz" + +#: models.py:106 +msgid "pictures" +msgstr "obrazy" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Image" +msgstr "Obraz" + +#: templates/admin/picture/picture/change_list.html:9 +msgid "Import picture" +msgstr "Importuj obraz" + +#: templates/picture/picture_detail.html:21 +msgid "See also" +msgstr "Zobacz też" + +#: templates/picture/picture_list_thumb.html:9 +#: templates/picture/picture_list_thumb.html:13 +msgctxt "gallery" +msgid "Listing of all works" +msgstr "Spis wszystkich dzieł" + +#: templates/picture/picture_short.html:40 +msgid "Epoch" +msgstr "Rodzaj" + +#: templates/picture/picture_short.html:48 +msgid "Kind" +msgstr "Typ" + +#: templates/picture/picture_short.html:56 +msgid "Genre" +msgstr "Gatunek" + +#: templates/picture/picture_short.html:71 +msgid "View online" +msgstr "Zobacz online" + +#: templates/picture/picture_short.html:74 +msgid "download original" +msgstr "pobierz oryginał" + +#: templates/picture/picture_viewer.html:36 +#: templates/picture/picture_wide.html:64 +msgid "Objects" +msgstr "Obiekty" + +#: templates/picture/picture_viewer.html:37 +msgid "Themes" +msgstr "Motywy" + +#: templates/picture/picture_viewer.html:41 +msgid "Infobox" +msgstr "Informacja" + +#: templates/picture/picture_wide.html:19 +msgid "Style" +msgstr "Styl" + +#: templates/picture/picture_wide.html:29 +msgid "Medium" +msgstr "Technika" + +#: templates/picture/picture_wide.html:36 +msgid "Dimensions" +msgstr "Wymiary pracy" + +#: templates/picture/picture_wide.html:42 +msgid "Date" +msgstr "Czas powstania" + +#: templates/picture/picture_wide.html:53 +msgid "Motifs, themes and objects" +msgstr "Motywy i obiekty" + +#: templates/picture/picture_wide.html:56 +msgid "Motifs and themes" +msgstr "Motywy" + +#: templates/picture/picture_wide.html:82 +msgid "See" +msgstr "Zobacz" + +#: templates/picture/picture_wide.html:85 +msgid "Source" +msgstr "Źródło" + +#: templates/picture/picture_wide.html:85 +msgid "of the picture" +msgstr "obrazu" + +#: templates/picture/picture_wide.html:87 +msgid "Source XML file" +msgstr "Źródło XML" + +#: templates/picture/picture_wide.html:89 +msgid "Picture on" +msgstr "Obraz na" + +#: templates/picture/picture_wide.html:89 +msgid "Editor's Platform" +msgstr "platformie edytorskiej" + +#: templates/picture/picture_wide.html:92 +msgid "Picture description on Wikipedia" +msgstr "Opis w Wikipedii" + +#: views.py:91 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:92 +msgid "Picture imported successfully" +msgstr "Obraz został zimportowany" + +#: views.py:94 +#, python-format +msgid "Error importing file: %r" +msgstr "Błąd importu pliku: %r" + +#~ msgid "Download" +#~ msgstr "Pobierz" + +#~ msgid "original" +#~ msgstr "oryginał" + +#~ msgid "Edit. note" +#~ msgstr "Nota edytorska" + +#~ msgid "Picture's page" +#~ msgstr "Strona obrazu" + +#~ msgid "Picture description on Lektury.Gazeta.pl" +#~ msgstr "Opis na Lektury.Gazeta.pl" diff --git a/src/picture/locale/ru/LC_MESSAGES/django.mo b/src/picture/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..714a042c1 Binary files /dev/null and b/src/picture/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/ru/LC_MESSAGES/django.po b/src/picture/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..0bb775710 --- /dev/null +++ b/src/picture/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,206 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/locale/uk/LC_MESSAGES/django.mo b/src/picture/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..714a042c1 Binary files /dev/null and b/src/picture/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/uk/LC_MESSAGES/django.po b/src/picture/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..0bb775710 --- /dev/null +++ b/src/picture/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,206 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/migrations/0001_initial.py b/src/picture/migrations/0001_initial.py new file mode 100644 index 000000000..59dbff64f --- /dev/null +++ b/src/picture/migrations/0001_initial.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from os.path import join +from django.conf import settings +from django.db import models, migrations +import sorl.thumbnail.fields +import jsonfield.fields +import django.core.files.storage +from django.utils.encoding import force_bytes + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Picture', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('title', models.CharField(max_length=120, verbose_name='Title')), + ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), + ('sort_key', models.CharField(verbose_name='Sort key', max_length=120, editable=False, db_index=True)), + ('sort_key_author', models.CharField(default='', verbose_name='sort key by author', max_length=120, editable=False, db_index=True)), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)), + ('changed_at', models.DateTimeField(auto_now=True, verbose_name='creation date', db_index=True)), + ('xml_file', models.FileField(upload_to=b'xml', storage=django.core.files.storage.FileSystemStorage(base_url=b'/media/pictures/', location=join(force_bytes(settings.MEDIA_ROOT), b'pictures')), verbose_name=b'xml_file')), + ('image_file', sorl.thumbnail.fields.ImageField(upload_to=b'images', storage=django.core.files.storage.FileSystemStorage(base_url=b'/media/pictures/', location=join(force_bytes(settings.MEDIA_ROOT), b'pictures')), verbose_name='image_file')), + ('html_file', models.FileField(upload_to=b'html', storage=django.core.files.storage.FileSystemStorage(base_url=b'/media/pictures/', location=join(force_bytes(settings.MEDIA_ROOT), b'pictures')), verbose_name=b'html_file')), + ('areas_json', jsonfield.fields.JSONField(default={}, verbose_name='picture areas JSON', editable=False)), + ('extra_info', jsonfield.fields.JSONField(default={}, verbose_name='Additional information')), + ('culturepl_link', models.CharField(max_length=240, blank=True)), + ('wiki_link', models.CharField(max_length=240, blank=True)), + ('_related_info', jsonfield.fields.JSONField(null=True, editable=False, blank=True)), + ('width', models.IntegerField(null=True)), + ('height', models.IntegerField(null=True)), + ], + options={ + 'ordering': ('sort_key',), + 'verbose_name': 'picture', + 'verbose_name_plural': 'pictures', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='PictureArea', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('area', jsonfield.fields.JSONField(default={}, verbose_name='area', editable=False)), + ('kind', models.CharField(db_index=True, max_length=10, verbose_name='form', choices=[(b'thing', 'thing'), (b'theme', 'motif')])), + ('picture', models.ForeignKey(related_name=b'areas', to='picture.Picture')), + ], + options={ + }, + bases=(models.Model,), + ), + ] diff --git a/src/picture/migrations/0002_remove_picture__related_info.py b/src/picture/migrations/0002_remove_picture__related_info.py new file mode 100644 index 000000000..10542c85b --- /dev/null +++ b/src/picture/migrations/0002_remove_picture__related_info.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('picture', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='picture', + name='_related_info', + ), + ] diff --git a/src/picture/migrations/0003_auto_20140924_1559.py b/src/picture/migrations/0003_auto_20140924_1559.py new file mode 100644 index 000000000..4e257d809 --- /dev/null +++ b/src/picture/migrations/0003_auto_20140924_1559.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('picture', '0002_remove_picture__related_info'), + ] + + operations = [ + migrations.AlterField( + model_name='picture', + name='title', + field=models.CharField(max_length=255, verbose_name='Title'), + ), + ] diff --git a/src/picture/migrations/0004_auto_20141016_1337.py b/src/picture/migrations/0004_auto_20141016_1337.py new file mode 100644 index 000000000..88d124934 --- /dev/null +++ b/src/picture/migrations/0004_auto_20141016_1337.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('picture', '0003_auto_20140924_1559'), + ] + + operations = [ + migrations.AlterField( + model_name='picture', + name='title', + field=models.CharField(max_length=32767, verbose_name='Title'), + ), + ] diff --git a/src/picture/migrations/0005_auto_20141022_1001.py b/src/picture/migrations/0005_auto_20141022_1001.py new file mode 100644 index 000000000..677877eae --- /dev/null +++ b/src/picture/migrations/0005_auto_20141022_1001.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.core.files.base import ContentFile +from django.db import models, migrations +from django.template.loader import render_to_string + + +def rebuild_extra_info(apps, schema_editor): + Picture = apps.get_model("picture", "Picture") + from librarian.picture import PictureInfo + from librarian import dcparser + for pic in Picture.objects.all(): + info = dcparser.parse(pic.xml_file.path, PictureInfo) + pic.extra_info = info.to_dict() + areas_json = pic.areas_json + for field in areas_json[u'things'].values(): + field[u'object'] = field[u'object'].capitalize() + pic.areas_json = areas_json + html_text = unicode(render_to_string('picture/picture_info.html', { + 'things': pic.areas_json['things'], + 'themes': pic.areas_json['themes'], + })) + pic.html_file.save("%s.html" % pic.slug, ContentFile(html_text)) + pic.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('picture', '0004_auto_20141016_1337'), + ] + + operations = [ + migrations.RunPython(rebuild_extra_info), + ] diff --git a/src/picture/migrations/0006_auto_20151221_1225.py b/src/picture/migrations/0006_auto_20151221_1225.py new file mode 100644 index 000000000..2f03ce591 --- /dev/null +++ b/src/picture/migrations/0006_auto_20151221_1225.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import jsonfield.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('picture', '0005_auto_20141022_1001'), + ] + + operations = [ + migrations.AlterField( + model_name='picture', + name='extra_info', + field=jsonfield.fields.JSONField(default={}, verbose_name='extra information'), + ), + migrations.AlterField( + model_name='picture', + name='slug', + field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), + ), + migrations.AlterField( + model_name='picture', + name='sort_key', + field=models.CharField(verbose_name='sort key', max_length=120, editable=False, db_index=True), + ), + migrations.AlterField( + model_name='picture', + name='title', + field=models.CharField(max_length=32767, verbose_name='title'), + ), + migrations.AlterField( + model_name='picturearea', + name='kind', + field=models.CharField(db_index=True, max_length=10, verbose_name='kind', choices=[(b'thing', 'thing'), (b'theme', 'theme')]), + ), + ] diff --git a/src/picture/migrations/__init__.py b/src/picture/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/picture/models.py b/src/picture/models.py new file mode 100644 index 000000000..5aabe3c89 --- /dev/null +++ b/src/picture/models.py @@ -0,0 +1,342 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.db import models, transaction +import catalogue.models +from django.db.models import permalink +from sorl.thumbnail import ImageField +from django.conf import settings +from django.contrib.contenttypes.fields import GenericRelation +from django.core.files.storage import FileSystemStorage +from django.utils.datastructures import SortedDict +from fnpdjango.utils.text.slughifi import slughifi +from ssify import flush_ssi_includes +from picture import tasks +from StringIO import StringIO +import jsonfield +import itertools +import logging + +from PIL import Image + +from django.utils.translation import ugettext_lazy as _ +from newtagging import managers +from os import path + + +picture_storage = FileSystemStorage(location=path.join( + settings.MEDIA_ROOT, 'pictures'), + base_url=settings.MEDIA_URL + "pictures/") + + +class PictureArea(models.Model): + picture = models.ForeignKey('picture.Picture', related_name='areas') + area = jsonfield.JSONField(_('area'), default={}, editable=False) + kind = models.CharField(_('kind'), max_length=10, blank=False, + null=False, db_index=True, + choices=(('thing', _('thing')), + ('theme', _('theme')))) + + objects = models.Manager() + tagged = managers.ModelTaggedItemManager(catalogue.models.Tag) + tags = managers.TagDescriptor(catalogue.models.Tag) + tag_relations = GenericRelation(catalogue.models.Tag.intermediary_table_model) + + short_html_url_name = 'picture_area_short' + + @classmethod + def rectangle(cls, picture, kind, coords): + pa = PictureArea() + pa.picture = picture + pa.kind = kind + pa.area = coords + return pa + + def flush_includes(self, languages=True): + if not languages: + return + if languages is True: + languages = [lc for (lc, _ln) in settings.LANGUAGES] + flush_ssi_includes([ + template % (self.pk, lang) + for template in [ + '/katalog/pa/%d/short.%s.html', + ] + for lang in languages + ]) + + +class Picture(models.Model): + """ + Picture resource. + + """ + title = models.CharField(_('title'), max_length=32767) + slug = models.SlugField(_('slug'), max_length=120, db_index=True, unique=True) + sort_key = models.CharField(_('sort key'), max_length=120, db_index=True, editable=False) + sort_key_author = models.CharField(_('sort key by author'), max_length=120, db_index=True, editable=False, default=u'') + created_at = models.DateTimeField(_('creation date'), auto_now_add=True, db_index=True) + changed_at = models.DateTimeField(_('creation date'), auto_now=True, db_index=True) + xml_file = models.FileField('xml_file', upload_to="xml", storage=picture_storage) + image_file = ImageField(_('image_file'), upload_to="images", storage=picture_storage) + html_file = models.FileField('html_file', upload_to="html", storage=picture_storage) + areas_json = jsonfield.JSONField(_('picture areas JSON'), default={}, editable=False) + extra_info = jsonfield.JSONField(_('extra information'), default={}) + culturepl_link = models.CharField(blank=True, max_length=240) + wiki_link = models.CharField(blank=True, max_length=240) + + width = models.IntegerField(null=True) + height = models.IntegerField(null=True) + + objects = models.Manager() + tagged = managers.ModelTaggedItemManager(catalogue.models.Tag) + tags = managers.TagDescriptor(catalogue.models.Tag) + tag_relations = GenericRelation(catalogue.models.Tag.intermediary_table_model) + + short_html_url_name = 'picture_short' + + class AlreadyExists(Exception): + pass + + class Meta: + ordering = ('sort_key',) + + verbose_name = _('picture') + verbose_name_plural = _('pictures') + + def save(self, force_insert=False, force_update=False, **kwargs): + from sortify import sortify + + self.sort_key = sortify(self.title)[:120] + + try: + author = self.tags.filter(category='author')[0].sort_key + except IndexError: + author = u'' + self.sort_key_author = author + + ret = super(Picture, self).save(force_insert, force_update) + + return ret + + def __unicode__(self): + return self.title + + @permalink + def get_absolute_url(self): + return ('picture.views.picture_detail', [self.slug]) + + @classmethod + def from_xml_file(cls, xml_file, image_file=None, image_store=None, overwrite=False): + """ + Import xml and it's accompanying image file. + If image file is missing, it will be fetched by librarian.picture.ImageStore + which looks for an image file in the same directory the xml is, with extension matching + its mime type. + """ + from sortify import sortify + from django.core.files import File + from librarian.picture import WLPicture, ImageStore + close_xml_file = False + close_image_file = False + + + if image_file is not None and not isinstance(image_file, File): + image_file = File(open(image_file)) + close_image_file = True + + if not isinstance(xml_file, File): + xml_file = File(open(xml_file)) + close_xml_file = True + + with transaction.atomic(): + # use librarian to parse meta-data + if image_store is None: + image_store = ImageStore(picture_storage.path('images')) + picture_xml = WLPicture.from_file(xml_file, image_store=image_store) + + picture, created = Picture.objects.get_or_create(slug=picture_xml.slug[:120]) + if not created and not overwrite: + raise Picture.AlreadyExists('Picture %s already exists' % picture_xml.slug) + + picture.areas.all().delete() + picture.title = unicode(picture_xml.picture_info.title) + picture.extra_info = picture_xml.picture_info.to_dict() + + picture_tags = set(catalogue.models.Tag.tags_from_info(picture_xml.picture_info)) + motif_tags = set() + thing_tags = set() + + area_data = {'themes':{}, 'things':{}} + + # Treat all names in picture XML as in default language. + lang = settings.LANGUAGE_CODE + + for part in picture_xml.partiter(): + if picture_xml.frame: + c = picture_xml.frame[0] + part['coords'] = [[p[0] - c[0], p[1] - c[1]] for p in part['coords']] + if part.get('object', None) is not None: + _tags = set() + for objname in part['object'].split(','): + objname = objname.strip().capitalize() + tag, created = catalogue.models.Tag.objects.get_or_create(slug=slughifi(objname), category='thing') + if created: + tag.name = objname + setattr(tag, 'name_%s' % lang, tag.name) + tag.sort_key = sortify(tag.name) + tag.save() + #thing_tags.add(tag) + area_data['things'][tag.slug] = { + 'object': objname, + 'coords': part['coords'], + } + + _tags.add(tag) + area = PictureArea.rectangle(picture, 'thing', part['coords']) + area.save() + area.tags = _tags + else: + _tags = set() + for motifs in part['themes']: + for motif in motifs.split(','): + tag, created = catalogue.models.Tag.objects.get_or_create(slug=slughifi(motif), category='theme') + if created: + tag.name = motif + tag.sort_key = sortify(tag.name) + tag.save() + #motif_tags.add(tag) + _tags.add(tag) + area_data['themes'][tag.slug] = { + 'theme': motif, + 'coords': part['coords'] + } + + logging.debug("coords for theme: %s" % part['coords']) + area = PictureArea.rectangle(picture, 'theme', part['coords']) + area.save() + area.tags = _tags.union(picture_tags) + + picture.tags = picture_tags.union(motif_tags).union(thing_tags) + picture.areas_json = area_data + + if image_file is not None: + img = image_file + else: + img = picture_xml.image_file() + + modified = cls.crop_to_frame(picture_xml, img) + modified = cls.add_source_note(picture_xml, modified) + + picture.width, picture.height = modified.size + + modified_file = StringIO() + modified.save(modified_file, format='JPEG', quality=95) + # FIXME: hardcoded extension - detect from DC format or orginal filename + picture.image_file.save(path.basename(picture_xml.image_path), File(modified_file)) + + picture.xml_file.save("%s.xml" % picture.slug, File(xml_file)) + picture.save() + tasks.generate_picture_html(picture.id) + + if close_xml_file: + xml_file.close() + if close_image_file: + image_file.close() + + return picture + + @classmethod + def crop_to_frame(cls, wlpic, image_file): + img = Image.open(image_file) + if wlpic.frame is None or wlpic.frame == [[0, 0], [-1, -1]]: + return img + img = img.crop(itertools.chain(*wlpic.frame)) + return img + + @staticmethod + def add_source_note(wlpic, img): + from PIL import ImageDraw, ImageFont + from librarian import get_resource + + annotated = Image.new(img.mode, + (img.size[0], img.size[1] + 40), + (255, 255, 255) + ) + annotated.paste(img, (0, 0)) + annotation = Image.new('RGB', (img.size[0] * 3, 120), (255, 255, 255)) + ImageDraw.Draw(annotation).text( + (30, 15), + wlpic.picture_info.source_name, + (0, 0, 0), + font=ImageFont.truetype(get_resource("fonts/DejaVuSerif.ttf"), 75) + ) + annotated.paste(annotation.resize((img.size[0], 40), Image.ANTIALIAS), (0, img.size[1])) + return annotated + + @classmethod + def picture_list(cls, filter=None): + """Generates a hierarchical listing of all pictures + Pictures are optionally filtered with a test function. + """ + + pics = cls.objects.all().order_by('sort_key')\ + .only('title', 'slug', 'image_file') + + if filter: + pics = pics.filter(filter).distinct() + + pics_by_author = SortedDict() + orphans = [] + for tag in catalogue.models.Tag.objects.filter(category='author'): + pics_by_author[tag] = [] + + for pic in pics.iterator(): + authors = list(pic.tags.filter(category='author')) + if authors: + for author in authors: + pics_by_author[author].append(pic) + else: + orphans.append(pic) + + return pics_by_author, orphans + + @property + def info(self): + if not hasattr(self, '_info'): + from librarian import dcparser + from librarian import picture + info = dcparser.parse(self.xml_file.path, picture.PictureInfo) + self._info = info + return self._info + + def pretty_title(self, html_links=False): + picture = self + names = [(tag.name, tag.get_absolute_url()) + for tag in self.tags.filter(category='author')] + names.append((self.title, self.get_absolute_url())) + + if html_links: + names = ['%s' % (tag[1], tag[0]) for tag in names] + else: + names = [tag[0] for tag in names] + return ', '.join(names) + + def related_themes(self): + return catalogue.models.Tag.objects.usage_for_queryset( + self.areas.all(), counts=True).filter(category__in=('theme', 'thing')) + + def flush_includes(self, languages=True): + if not languages: + return + if languages is True: + languages = [lc for (lc, _ln) in settings.LANGUAGES] + flush_ssi_includes([ + template % (self.pk, lang) + for template in [ + '/katalog/p/%d/short.%s.html', + '/katalog/p/%d/mini.%s.html', + ] + for lang in languages + ]) diff --git a/src/picture/tasks.py b/src/picture/tasks.py new file mode 100644 index 000000000..fc9eafa7a --- /dev/null +++ b/src/picture/tasks.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from celery.task import task +from django.core.files.base import ContentFile +from django.template.loader import render_to_string + + +@task +def generate_picture_html(picture_id): + import picture.models + pic = picture.models.Picture.objects.get(pk=picture_id) + + html_text = unicode(render_to_string('picture/picture_info.html', { + 'things': pic.areas_json['things'], + 'themes': pic.areas_json['themes'], + })) + pic.html_file.save("%s.html" % pic.slug, ContentFile(html_text)) + diff --git a/src/picture/templates/admin/picture/picture/change_list.html b/src/picture/templates/admin/picture/picture/change_list.html new file mode 100755 index 000000000..05566c0ab --- /dev/null +++ b/src/picture/templates/admin/picture/picture/change_list.html @@ -0,0 +1,12 @@ +{% extends "admin/change_list.html" %} +{% load i18n %} + +{% block content %} +
                        + {% csrf_token %} +

                        XML:
                        + {% trans "Image" %}:
                        +

                        +
                        + {{ block.super }} +{% endblock content %} diff --git a/src/picture/templates/picture/collection.html b/src/picture/templates/picture/collection.html new file mode 100644 index 000000000..f794fbfeb --- /dev/null +++ b/src/picture/templates/picture/collection.html @@ -0,0 +1,10 @@ +{% extends "picture/picture_list_thumb.html" %} +{% load i18n %} + +{% block titleextra %}{{ context.collection.title }}{% endblock %} + +{% block book_list_header %}{{ context.collection.title }}{% endblock %} + +{% block book_list_info %} +{{ context.collection.description|safe }} +{% endblock %} diff --git a/src/picture/templates/picture/picture_detail.html b/src/picture/templates/picture/picture_detail.html new file mode 100644 index 000000000..514f8c3e8 --- /dev/null +++ b/src/picture/templates/picture/picture_detail.html @@ -0,0 +1,26 @@ +{% extends "base.html" %} +{% load i18n %} +{% load picture_tags catalogue_tags pagination_tags %} +{% load thumbnail %} +{% load build_absolute_uri from fnp_common %} + + +{% block ogimage %}{% thumbnail picture.image_file "535" upscale="false" as thumb %}{{ thumb.url|build_absolute_uri:request }}{% endthumbnail %}{% endblock %} + + +{% block titleextra %}{{ picture.title }}{% endblock %} + +{% block bodyid %}picture-detail{% endblock %} + +{% block body %} + {% picture_wide picture %} + +{% spaceless %} + +
                        +

                        {% trans "See also" %}:

                        +{% related_books picture %} +
                        +{% endspaceless %} + +{% endblock %} diff --git a/src/picture/templates/picture/picture_info.html b/src/picture/templates/picture/picture_info.html new file mode 100644 index 000000000..c2d2c9aaa --- /dev/null +++ b/src/picture/templates/picture/picture_info.html @@ -0,0 +1,17 @@ + + + + + diff --git a/src/picture/templates/picture/picture_list_thumb.html b/src/picture/templates/picture/picture_list_thumb.html new file mode 100644 index 000000000..adfc25eb5 --- /dev/null +++ b/src/picture/templates/picture/picture_list_thumb.html @@ -0,0 +1,30 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} +{% load static %} +{% load ssi_include from ssify %} + +{% block bodyid %}picture-list{% endblock %} + +{% block titleextra %}{% trans "Listing of all works" context "gallery" %}{% endblock %} + + +{% block body %} +

                        {% block book_list_header %}{% trans "Listing of all works" context "gallery" %}{% endblock %}

                        + +
                        + {% block book_list_info %} + {% ssi_include 'chunk' key='picture-list' %} + {% endblock %} +
                        + +
                        + + + +{% work_list book_list %} + + + + +{% endblock %} diff --git a/src/picture/templates/picture/picture_mini_box.html b/src/picture/templates/picture/picture_mini_box.html new file mode 100644 index 000000000..d8ebbf77b --- /dev/null +++ b/src/picture/templates/picture/picture_mini_box.html @@ -0,0 +1,23 @@ +{% spaceless %} + +{% load thumbnail %} + + + +{% endspaceless %} \ No newline at end of file diff --git a/src/picture/templates/picture/picture_short.html b/src/picture/templates/picture/picture_short.html new file mode 100644 index 000000000..1bd70a11b --- /dev/null +++ b/src/picture/templates/picture/picture_short.html @@ -0,0 +1,84 @@ +{% load i18n %} +{% load thumbnail %} +{% load catalogue_tags social_tags %} +{% load picture_tags %} +
                        +
                        + +
                        + +
                        +
                        + {% for tag in tags.author %} + {{ tag }}{% if not forloop.last %}, + {% endif %}{% endfor %} +
                        + +
                        + + + +
                        + {% block picture-view %} + {% if main_link %}{% endif %} + {% thumbnail picture.image_file "216x288" crop="center" as thumb %} + + {% endthumbnail %} + {% if main_link %}{% endif %} + {% endblock %} + {# what about licensing icons here #} +
                        + +
                        + {% spaceless %} + + + {% trans "Epoch" %}:  + {% for tag in tags.epoch %} + {{ tag }} + {% if not forloop.last %}, {% endif %} + {% endfor %} + + + + {% trans "Kind" %}:  + {% for tag in tags.kind %} + {{ tag }} + {% if not forloop.last %}, {% endif %} + {% endfor %} + + + + {% trans "Genre" %}:  + {% for tag in tags.genre %} + {{ tag }} + {% if not forloop.last %}, {% endif %} + {% endfor %} + + + {% block extra_categories %} + {% endblock %} + + {% endspaceless %} +
                        +
                        + + {% block book-box-extra-info %}{% endblock %} + {% block box-append %} + {% endblock %} + {% block right-column %} + {% endblock %} +
                        +
                        +
                        diff --git a/src/picture/templates/picture/picture_viewer.html b/src/picture/templates/picture/picture_viewer.html new file mode 100644 index 000000000..e169dbe0f --- /dev/null +++ b/src/picture/templates/picture/picture_viewer.html @@ -0,0 +1,88 @@ +{% extends "catalogue/viewer_base.html" %} +{% load i18n %} +{% load static from staticfiles %} +{% load catalogue_tags %} +{% load thumbnail %} + + +{% block title %}{{ picture.pretty_title }}{% endblock %} + + +{% block body-id %}picture-viewer{% endblock %} + + +{% block js-dependencies %} + +{% endblock %} + + +{% block no-menu-extra %} +
                      • +
                      • -
                      • +{% endblock %} + + +{% block menu %} +
                      • +-
                      • + + +
                      • + {{ picture.pretty_title }} +
                      • + + +
                      • {% trans "Objects" %}
                      • +
                      • {% trans "Themes" %}
                      • + + + + +
                      • + {% for sponsor in sponsors %} + {% thumbnail sponsor.logo "80x200" as logo %} + {{ sponsor.name }} + {% endthumbnail %} + {% endfor %} +
                      • + +{% endblock %} + +{% block main %} +
                        + {% thumbnail picture.image_file "700x500" as pic %} +
                        +
                        + {% endthumbnail %} +
                        +{% endblock %} + + +{% block footer %} +{{ picture.html_file.read|safe }} + +
                        +
                        + Wolne Lektury + + {% for sponsor in sponsors %} + {% thumbnail sponsor.logo "220x220" as logo %} + {{ sponsor.name }} + {% endthumbnail %} + {% endfor %} +
                        + + {% book_info picture %} +
                        + +
                        + {{ picture.short_html }} +
                        + +{% endblock %} diff --git a/src/picture/templates/picture/picture_wide.html b/src/picture/templates/picture/picture_wide.html new file mode 100644 index 000000000..9f47c7baa --- /dev/null +++ b/src/picture/templates/picture/picture_wide.html @@ -0,0 +1,112 @@ +{% extends "picture/picture_short.html" %} +{% load i18n %} +{% load picture_tags thumbnail %} + + +{% block box-class %}book-wide-box{% endblock %} + +{% block picture-view %} + +{% thumbnail picture.image_file "535" upscale=0 as thumb %} + +{% endthumbnail %} +{% endblock %} + + +{% block extra_categories %} +{% if picture.extra_info.styles %} + + {% trans "Style" %}:  + {% for tag in picture.extra_info.styles %} + {{ tag }} + {% if not forloop.last %}, {% endif %} + {% endfor %} + +{% endif %} + +{% if picture.extra_info.medium %} + + {% trans "Medium" %}:  + {{ picture.extra_info.medium }} + +{% endif %} + +{% if picture.extra_info.original_dimensions %} + + {% trans "Dimensions" %}:  + {{ picture.extra_info.original_dimensions }} + +{% endif %} + + + {% trans "Date" %}:  + {{ picture.extra_info.created_at }} + + +{% endblock %} + + +{% block book-box-extra-info %} +{% if themes or things%} +
                        +

                        {% trans "Motifs, themes and objects" %}

                        +
                        + {% if themes %} +

                        {% trans "Motifs and themes" %}

                        +
                          + {% for theme in themes %} +
                        • {{ theme }}
                        • + {% endfor %} +
                        + {% endif %} + {% if things %} +

                        {% trans "Objects" %}

                        +
                          + {% for thing in things %} +
                        • {{ thing }}
                        • + {% endfor %} +
                        + {% endif %} +
                        +
                        +{% else %} +

                         

                        +{% endif %} +{% endblock %} + + +{% block right-column %} +
                        +
                        +

                        {% trans "See" %}

                        + +
                        + + {% comment %} +
                        +

                        {% trans "Download" %}

                        +
                          +
                        • + {% if related.media.mp3 or related.media.ogg or related.media.daisy %} + {% trans "Download all audiobooks for this book" %}: + {% download_audio book %}. + {% endif %} +
                        • + {% custom_pdf_link_li book %} +
                        +
                        + {% endcomment %} +
                        +{% endblock %} diff --git a/src/picture/templates/picture/picturearea_short.html b/src/picture/templates/picture/picturearea_short.html new file mode 100644 index 000000000..4fa97817d --- /dev/null +++ b/src/picture/templates/picture/picturearea_short.html @@ -0,0 +1,17 @@ +{% load i18n %} +{% load picture_tags %} +{% load catalogue_tags %} + +
                        +
                        + +
                        + {% with area.picture as picture %} +
                        +
                        + {% book_title_html picture %} +
                        +
                        +
                        + {% endwith %} +
                        diff --git a/src/picture/templatetags/__init__.py b/src/picture/templatetags/__init__.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/src/picture/templatetags/__init__.py @@ -0,0 +1 @@ + diff --git a/src/picture/templatetags/picture_tags.py b/src/picture/templatetags/picture_tags.py new file mode 100644 index 000000000..02d80b005 --- /dev/null +++ b/src/picture/templatetags/picture_tags.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import logging +from random import randint +from django import template +from django.core.urlresolvers import reverse +from django.utils.cache import add_never_cache_headers +import sorl.thumbnail.default +from ssify import ssi_variable +from catalogue.utils import split_tags +from ..engine import CustomCroppingEngine +from ..models import Picture + + +register = template.Library() + +cropper = CustomCroppingEngine() + +@register.inclusion_tag('picture/picture_wide.html', takes_context=True) +def picture_wide(context, picture): + context.update({ + 'picture': picture, + 'main_link': reverse('picture_viewer', args=[picture.slug]), + 'request': context.get('request'), + 'tags': split_tags(picture.tags), + }) + return context + + +@register.simple_tag() +def area_thumbnail_url(area, geometry): + def to_square(coords): + w = coords[1][0] - coords[0][0] + h = coords[1][1] - coords[0][1] + if w == h: + return coords + elif w > h: + return [[coords[0][0] + w/2 - h/2, coords[0][1]], + [coords[1][0] - w/2 + h/2, coords[1][1]]] + else: + return [[coords[0][0], coords[0][1] + h/2 - w/2], + [coords[1][0], coords[1][1] - h/2 + w/2, ]] + + # so much for sorl extensibility. + # what to do about this? + _engine = sorl.thumbnail.default.engine + sorl.thumbnail.default.engine = cropper + coords = to_square(area.area) + + try: + th = sorl.thumbnail.default.backend.get_thumbnail( + area.picture.image_file, + geometry, + crop="%dpx %dpx %dpx %dpx" % tuple(map(lambda d: max(0, d), tuple(coords[0] + coords[1])))) + except Exception, e: + logging.exception("Error creating a thumbnail for PictureArea") + return '' + + sorl.thumbnail.default.engine = _engine + + return th.url + + +@ssi_variable(register, patch_response=[add_never_cache_headers]) +def picture_random_picture(request, exclude_ids, unless=None): + if unless: + return None + queryset = Picture.objects.exclude(pk__in=exclude_ids).exclude(image_file='') + count = queryset.count() + if count: + return queryset[randint(0, count - 1)].pk + else: + return None diff --git a/src/picture/tests/__init__.py b/src/picture/tests/__init__.py new file mode 100644 index 000000000..b2e50b00f --- /dev/null +++ b/src/picture/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from picture.tests.picture_import import * diff --git a/src/picture/tests/files/kandinsky-composition-viii.png b/src/picture/tests/files/kandinsky-composition-viii.png new file mode 100644 index 000000000..a809eb5c4 Binary files /dev/null and b/src/picture/tests/files/kandinsky-composition-viii.png differ diff --git a/src/picture/tests/files/kandinsky-composition-viii.xml b/src/picture/tests/files/kandinsky-composition-viii.xml new file mode 100644 index 000000000..d9e79cbed --- /dev/null +++ b/src/picture/tests/files/kandinsky-composition-viii.xml @@ -0,0 +1,36 @@ + + + + Kandinsky, Vasily + composition 8 + Fundacja Nowoczesna Polska + Sekuła, Aleksandra + Kwiatkowska, Katarzyna + Trzeciak, Weronika + Modernizm + Obraz + Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez Bibliotekę Narodową z egzemplarza pochodzącego ze zbiorów BN. + 55 1/8 x 79 1/8 inches + Olej na płótnie + http://wolnelektury.pl/katalog/obraz/kandinsky-composition-viii + http://www.ibiblio.org/wm/paint/auth/kandinsky/kandinsky.comp-8.jpg + Muzeum Narodowe, inw. 00000001. + Domena publiczna - Vasily Kandinsky zm. ? + 1940 + Image + image/png + 1090 x 755 px + 122b590510ce70cc80e617557f82048ce20f1d7b + 1923 + eng + + + + +
                        + + +
                        + + + diff --git a/src/picture/tests/picture_import.py b/src/picture/tests/picture_import.py new file mode 100644 index 000000000..1e17289c3 --- /dev/null +++ b/src/picture/tests/picture_import.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from __future__ import with_statement + +from os import path +from picture.models import Picture +from catalogue.test_utils import WLTestCase + + +class PictureTest(WLTestCase): + + def test_import(self): + picture = Picture.from_xml_file(path.join(path.dirname(__file__), "files/kandinsky-composition-viii.xml")) + + themes = set() + for area in picture.areas.all(): + themes.update([(tag.category, tag.name) + for tag in area.tags if tag.category in (u'theme', u'thing')]) + assert themes == set([(u'theme', u'nieporządek'), (u'thing', u'Kosmos')]), \ + 'Bad themes on Picture areas: %s' % themes + + pic_themes = set([tag.name for tag in picture.tags if tag.category in ('theme', 'thing')]) + assert not pic_themes, 'Unwanted themes set on Pictures: %s' % pic_themes + + picture.delete() + + def test_import_with_explicit_image(self): + picture = Picture.from_xml_file(path.join(path.dirname(__file__), "files/kandinsky-composition-viii.xml"), + path.join(path.dirname(__file__), "files/kandinsky-composition-viii.png")) + + picture.delete() + + + def test_import_2(self): + picture = Picture.from_xml_file(path.join(path.dirname(__file__), "files/kandinsky-composition-viii.xml"), + path.join(path.dirname(__file__), "files/kandinsky-composition-viii.png"), + overwrite=True) + cats = set([t.category for t in picture.tags]) + assert 'epoch' in cats + assert 'kind' in cats + diff --git a/src/picture/views.py b/src/picture/views.py new file mode 100644 index 000000000..1f8738650 --- /dev/null +++ b/src/picture/views.py @@ -0,0 +1,128 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from collections import OrderedDict +from django.contrib.auth.decorators import permission_required +from django.shortcuts import render_to_response, get_object_or_404, render +from django.template import RequestContext +from picture.models import Picture, PictureArea +from catalogue.utils import split_tags +from ssify import ssi_included +from sponsors.models import Sponsor + +# was picture/picture_list.html list (without thumbs) +def picture_list(request, filter=None, get_filter=None, template_name='catalogue/picture_list.html', cache_key=None, context=None): + """ generates a listing of all books, optionally filtered with a test function """ + + if get_filter: + filt = get_filter() + pictures_by_author, orphans = Picture.picture_list(filt) + books_nav = OrderedDict() + for tag in pictures_by_author: + if pictures_by_author[tag]: + books_nav.setdefault(tag.sort_key[0], []).append(tag) + + return render_to_response(template_name, locals(), + context_instance=RequestContext(request)) + + +def picture_list_thumb(request, filter=None, get_filter=None, template_name='picture/picture_list_thumb.html', cache_key=None, context=None): + book_list = Picture.objects.all() + if filter: + book_list = book_list.filter(filter) + if get_filter: + book_list = book_list.filter(get_filter()) + book_list = book_list.order_by('sort_key_author') + book_list = list(book_list) + return render_to_response(template_name, locals(), + context_instance=RequestContext(request)) + +def picture_detail(request, slug): + picture = get_object_or_404(Picture, slug=slug) + + theme_things = split_tags(picture.related_themes()) + + # categories = SortedDict() + # for tag in picture.tags.iterator(): + # categories.setdefault(tag.category, []).append(tag) + + themes = theme_things.get('theme', []) + things = theme_things.get('thing', []) + + extra_info = picture.extra_info + + return render_to_response("picture/picture_detail.html", locals(), + context_instance=RequestContext(request)) + + +def picture_viewer(request, slug): + picture = get_object_or_404(Picture, slug=slug) + sponsors = [] + for sponsor in picture.extra_info.get('sponsors', []): + have_sponsors = Sponsor.objects.filter(name=sponsor) + if have_sponsors.exists(): + sponsors.append(have_sponsors[0]) + return render_to_response("picture/picture_viewer.html", locals(), + context_instance=RequestContext(request)) + + +# ========= +# = Admin = +# ========= +@permission_required('picture.add_picture') +def import_picture(request): + """docstring for import_book""" + from django.http import HttpResponse + from picture.forms import PictureImportForm + from django.utils.translation import ugettext as _ + + import_form = PictureImportForm(request.POST, request.FILES) + if import_form.is_valid(): + try: + import_form.save() + except: + import sys + import pprint + import traceback + info = sys.exc_info() + exception = pprint.pformat(info[1]) + tb = '\n'.join(traceback.format_tb(info[2])) + return HttpResponse(_("An error occurred: %(exception)s\n\n%(tb)s") % {'exception':exception, 'tb':tb}, mimetype='text/plain') + return HttpResponse(_("Picture imported successfully")) + else: + return HttpResponse(_("Error importing file: %r") % import_form.errors) + + +@ssi_included +def picture_mini(request, pk, with_link=True): + picture = get_object_or_404(Picture, pk=pk) + author_str = ", ".join(tag.name + for tag in picture.tags.filter(category='author')) + return render(request, 'picture/picture_mini_box.html', { + 'picture': picture, + 'author_str': author_str, + 'with_link': with_link, + }) + + +@ssi_included +def picture_short(request, pk): + picture = get_object_or_404(Picture, pk=pk) + + return render(request, 'picture/picture_short.html', { + 'picture': picture, + 'main_link': picture.get_absolute_url(), + 'request': request, + 'tags': split_tags(picture.tags), + }) + + +@ssi_included +def picturearea_short(request, pk): + area = get_object_or_404(PictureArea, pk=pk) + theme = area.tags.filter(category='theme') + theme = theme and theme[0] or None + thing = area.tags.filter(category='thing') + thing = thing and thing[0] or None + return render(request, 'picture/picturearea_short.html', locals()) diff --git a/src/polls/__init__.py b/src/polls/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/polls/admin.py b/src/polls/admin.py new file mode 100644 index 000000000..235e8f3c2 --- /dev/null +++ b/src/polls/admin.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin + +from .models import Poll, PollItem + + +class PollItemInline(admin.TabularInline): + model = PollItem + extra = 0 + readonly_fields = ('vote_count',) + + +class PollAdmin(admin.ModelAdmin): + inlines = [PollItemInline] + + +class PollItemAdmin(admin.ModelAdmin): + readonly_fields = ('vote_count',) + + +admin.site.register(Poll, PollAdmin) +admin.site.register(PollItem, PollItemAdmin) diff --git a/src/polls/forms.py b/src/polls/forms.py new file mode 100644 index 000000000..20d53fe33 --- /dev/null +++ b/src/polls/forms.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import forms + + +class PollForm(forms.Form): + vote = forms.ChoiceField(widget=forms.RadioSelect) + + def __init__(self, *args, **kwargs): + poll = kwargs.pop('poll', None) + super(PollForm, self).__init__(*args, **kwargs) + self.fields['vote'].choices = [(item.id, item.content) for item in poll.items.all()] diff --git a/src/polls/locale/pl/LC_MESSAGES/django.mo b/src/polls/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..b4fa6ec6b Binary files /dev/null and b/src/polls/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/polls/locale/pl/LC_MESSAGES/django.po b/src/polls/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..7334f63c4 --- /dev/null +++ b/src/polls/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,69 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \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%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" + +#: models.py:12 +msgid "question" +msgstr "Pytanie" + +#: models.py:13 +msgid "slug" +msgstr "slug" + +#: models.py:14 +msgid "open" +msgstr "otwarta" + +#: models.py:17 +msgid "Poll" +msgstr "Ankieta" + +#: models.py:18 +msgid "Polls" +msgstr "Ankiety" + +#: models.py:22 +msgid "Slug of an open poll needs to be unique" +msgstr "Slug otwartej ankiety musi być unikalny" + +#: models.py:42 +msgid "content" +msgstr "treść" + +#: models.py:43 +msgid "vote count" +msgstr "licznik głosów" + +#: models.py:46 +msgid "vote item" +msgstr "Pozycja ankiety" + +#: models.py:47 +msgid "vote items" +msgstr "Pozycje ankiety" + +#: templates/polls/poll.html:11 +msgid "Thanks for voting! You can see current results below." +msgstr "" +"Dziękujemy za oddanie głosu w ankiecie! Poniżej znajdują się bieżące wyniki." + +#: templates/polls/tags/poll.html:23 +msgid "Submit" +msgstr "Wyślij" diff --git a/src/polls/migrations/0001_initial.py b/src/polls/migrations/0001_initial.py new file mode 100644 index 000000000..91c68aa00 --- /dev/null +++ b/src/polls/migrations/0001_initial.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Poll', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('question', models.TextField(verbose_name='question')), + ('slug', models.SlugField(verbose_name='Slug')), + ('open', models.BooleanField(default=False, verbose_name='open')), + ], + options={ + 'verbose_name': 'Poll', + 'verbose_name_plural': 'Polls', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='PollItem', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('content', models.TextField(verbose_name='content')), + ('vote_count', models.IntegerField(default=0, verbose_name='vote count')), + ('poll', models.ForeignKey(related_name=b'items', to='polls.Poll')), + ], + options={ + 'verbose_name': 'vote item', + 'verbose_name_plural': 'vote items', + }, + bases=(models.Model,), + ), + ] diff --git a/src/polls/migrations/0002_auto_20151221_1225.py b/src/polls/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..e75948893 --- /dev/null +++ b/src/polls/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('polls', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='poll', + name='slug', + field=models.SlugField(verbose_name='slug'), + ), + ] diff --git a/src/polls/migrations/__init__.py b/src/polls/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/polls/models.py b/src/polls/models.py new file mode 100644 index 000000000..8e356683e --- /dev/null +++ b/src/polls/models.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from django.core.exceptions import ValidationError +from django.core.urlresolvers import reverse + + +USED_POLLS_KEY = 'used_polls' + + +class Poll(models.Model): + + question = models.TextField(_('question')) + slug = models.SlugField(_('slug')) + open = models.BooleanField(_('open'), default=False) + + class Meta: + verbose_name = _('Poll') + verbose_name_plural = _('Polls') + + def clean(self): + if self.open and Poll.objects.exclude(pk=self.pk).filter(slug=self.slug).exists(): + raise ValidationError(_('Slug of an open poll needs to be unique')) + return super(Poll, self).clean() + + def __unicode__(self): + return self.question[:100] + ' (' + self.slug + ')' + + def get_absolute_url(self): + return reverse('poll', args=[self.slug]) + + @property + def vote_count(self): + return self.items.all().aggregate(models.Sum('vote_count'))['vote_count__sum'] + + def voted(self, session): + return self.id in session.get(USED_POLLS_KEY, []) + + +class PollItem(models.Model): + + poll = models.ForeignKey(Poll, related_name='items') + content = models.TextField(_('content')) + vote_count = models.IntegerField(_('vote count'), default=0) + + class Meta: + verbose_name = _('vote item') + verbose_name_plural = _('vote items') + + def __unicode__(self): + return self.content + ' @ ' + unicode(self.poll) + + @property + def vote_ratio(self): + return (float(self.vote_count) / self.poll.vote_count) * 100 if self.poll.vote_count else 0 + + def vote(self, session): + self.vote_count = self.vote_count + 1 + self.save() + session.setdefault(USED_POLLS_KEY, []).append(self.poll.id) + session.save() diff --git a/src/polls/templates/polls/poll.html b/src/polls/templates/polls/poll.html new file mode 100644 index 000000000..edb14cf7b --- /dev/null +++ b/src/polls/templates/polls/poll.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} +{% load i18n %} +{% load polls_tags %} + +{% block titleextra %}{{poll.question}}{% endblock %} + + +{% block body %} +
                        + {% if voted_already %} +

                        {% trans "Thanks for voting! You can see current results below." %}

                        + {% endif %} + {% poll poll %} +
                        +{% endblock %} \ No newline at end of file diff --git a/src/polls/templates/polls/tags/poll.html b/src/polls/templates/polls/tags/poll.html new file mode 100644 index 000000000..4c4d2b50d --- /dev/null +++ b/src/polls/templates/polls/tags/poll.html @@ -0,0 +1,28 @@ +{% load i18n %} +{% load ssi_csrf_token from ssify %} + +{% if poll %} + {% if voted_already %} + {% if show_results %} +
                        +

                        {{poll.question}}

                        +
                          + {% for item in poll.items.all %} +
                        • + {{item.content}} +
                          +
                        • + {% endfor %} +
                        +
                        + {% endif %} + {% else %} +
                        +

                        {{poll.question}}

                        +
                        {% ssi_csrf_token %} + {{ form.vote }} + +
                        +
                        + {% endif %} +{% endif %} \ No newline at end of file diff --git a/src/polls/templatetags/__init__.py b/src/polls/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/polls/templatetags/polls_tags.py b/src/polls/templatetags/polls_tags.py new file mode 100644 index 000000000..38619c108 --- /dev/null +++ b/src/polls/templatetags/polls_tags.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import template +from ..forms import PollForm + + +register = template.Library() + +@register.inclusion_tag('polls/tags/poll.html', takes_context=True) +def poll(context, poll, show_results=True, redirect_to=''): + form = None + voted_already = poll.voted(context.get('request').session) + if not voted_already: + form = PollForm(poll=poll, initial=dict(redirect_to=redirect_to)) + return dict(poll=poll, + form=form, + voted_already=voted_already, + vote_count=poll.vote_count, + show_results=show_results, + request=context.get('request'), + ) diff --git a/src/polls/urls.py b/src/polls/urls.py new file mode 100644 index 000000000..fcd0ac6b7 --- /dev/null +++ b/src/polls/urls.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + + +urlpatterns = patterns('polls.views', + url(r'^(?P[^/]+)$', 'poll', name='poll'), +) diff --git a/src/polls/views.py b/src/polls/views.py new file mode 100644 index 000000000..79540c66a --- /dev/null +++ b/src/polls/views.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.core.urlresolvers import reverse +from django.shortcuts import get_object_or_404, redirect, render_to_response +from django.template import RequestContext +from django.views.decorators import cache +from django.views.decorators.http import require_http_methods + +from .models import Poll, PollItem +from .forms import PollForm + + +@cache.never_cache +@require_http_methods(['GET', 'POST']) +def poll(request, slug): + + poll = get_object_or_404(Poll, slug=slug, open=True) + + if request.method == 'POST': + redirect_to = reverse('poll', args = [slug]) + form = PollForm(request.POST, poll = poll) + if form.is_valid(): + if not poll.voted(request.session): + try: + poll_item = PollItem.objects.filter(pk=form.cleaned_data['vote'], poll=poll).get() + except PollItem.DoesNotExist: + pass + else: + poll_item.vote(request.session) + return redirect(redirect_to) + elif request.method == 'GET': + context = RequestContext(request) + context['poll'] = poll + context['voted_already'] = poll.voted(request.session) + return render_to_response('polls/poll.html', context) diff --git a/src/reporting/__init__.py b/src/reporting/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/reporting/locale/pl/LC_MESSAGES/django.mo b/src/reporting/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c09f3f0f1 Binary files /dev/null and b/src/reporting/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/reporting/locale/pl/LC_MESSAGES/django.po b/src/reporting/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..b811e0d91 --- /dev/null +++ b/src/reporting/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,23 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-01-27 16:40+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \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%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2)\n" + +#: templates/reporting/main.html:5 +msgid "Reports" +msgstr "Raporty" diff --git a/src/reporting/models.py b/src/reporting/models.py new file mode 100644 index 000000000..740b9276e --- /dev/null +++ b/src/reporting/models.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# + + +# import views here, so that signals are attached correctly +from reporting.views import catalogue_pdf diff --git a/src/reporting/templates/reporting/catalogue.csv b/src/reporting/templates/reporting/catalogue.csv new file mode 100755 index 000000000..eb2ebd982 --- /dev/null +++ b/src/reporting/templates/reporting/catalogue.csv @@ -0,0 +1 @@ +{% load catalogue_tags %}{% book_tree_texml "" orphans books_by_parent %}{% for author, group in books_by_author.items %}{% if group %}{% book_tree_csv author group books_by_parent %}{% endif %}{% endfor %} diff --git a/src/reporting/templates/reporting/catalogue.texml b/src/reporting/templates/reporting/catalogue.texml new file mode 100755 index 000000000..cb4a78f23 --- /dev/null +++ b/src/reporting/templates/reporting/catalogue.texml @@ -0,0 +1,118 @@ +{% load catalogue_tags %} + + + \documentclass[a4paper, oneside, 11pt]{book} + +\usepackage[MeX]{polski} + +\usepackage[xetex]{graphicx} +\usepackage{xltxtra} +\usepackage{xunicode} + +\usepackage{scalefnt} +\usepackage[colorlinks=true,linkcolor=black,setpagesize=false,urlcolor=black,xetex]{hyperref} + +\usepackage{longtable} + +\setmainfont [ +%ExternalLocation, +UprightFont = JunicodeWL-Regular, +ItalicFont = JunicodeWL-Italic, +BoldFont = JunicodeWL-Regular, +BoldItalicFont = JunicodeWL-Italic, +SmallCapsFont = JunicodeWL-Regular, +SmallCapsFeatures = {Letters={SmallCaps,UppercaseSmallCaps}}, +Numbers=OldStyle, +Scale=1.04, +LetterSpace=-1.0 +] {JunicodeWL} + +\pagestyle{plain} +\usepackage{fancyhdr} + +\makeatletter + +\usepackage{color} +\definecolor{note}{gray}{.3} + +\setlength{\hoffset}{-1cm} +\setlength{\oddsidemargin}{0pt} +\setlength{\marginparsep}{0pt} +\setlength{\marginparwidth}{0pt} + +\setlength{\voffset}{0pt} +\setlength{\topmargin}{0pt} +\setlength{\headheight}{0pt} +\setlength{\headsep}{0pt} +\setlength{\leftmargin}{0em} +\setlength{\rightmargin}{0em} +\setlength{\textheight}{24cm} +\setlength{\textwidth}{17.5cm} + + +\pagestyle{fancy} +\fancyhf{} +\renewcommand{\headrulewidth}{0pt} +\renewcommand{\footrulewidth}{0pt} +\lfoot{\footnotesize Katalog biblioteki internetowej WolneLektury.pl, \today} +\cfoot{} +\rfoot{\footnotesize \thepage} + +\clubpenalty=100000 +\widowpenalty=100000 + + +% see http://osdir.com/ml/tex.xetex/2005-10/msg00003.html +\newsavebox{\ximagebox}\newlength{\ximageheight} +\newsavebox{\xglyphbox}\newlength{\xglyphheight} +\newcommand{\xbox}[1] +{\savebox{\ximagebox}{#1}\settoheight{\ximageheight}{\usebox {\ximagebox}}% +\savebox{\xglyphbox}{\char32}\settoheight{\xglyphheight}{\usebox {\xglyphbox}}% +\raisebox{\ximageheight}[0pt][0pt]{%\raisebox{-\xglyphheight}[0pt] [0pt]{% +\makebox[0pt][l]{\usebox{\xglyphbox}}}%}% +\usebox{\ximagebox}% +\raisebox{0pt}[0pt][0pt]{\makebox[0pt][r]{\usebox{\xglyphbox}}}} + + +\newcommand{\name}[1]{% +\\ +\Large{#1}% +} + +\newcommand{\note}[1]{% +\small{\color{note}{#1}}% +} + + +\begin{document} + + \noindent \begin{minipage}[t]{.35\textwidth}\vspace{0pt} + \href{http://www.wolnelektury.pl}{\xbox{\includegraphics[width=\textwidth]{wl-logo.png}}} + \end{minipage} + + \begin{minipage}[t]{.65\textwidth}\vspace{0pt} + \begin{flushright} + \section*{Katalog biblioteki internetowej + \href{http://www.wolnelektury.pl/}{WolneLektury.pl}.} + stan na \today + \end{flushright} + \end{minipage} + + \begin{longtable}{p{9.5cm} p{5.5cm}r p{2cm}} + + + {% book_tree_texml orphans books_by_parent %} + {% for author, group in books_by_author.items %} + {% if group %} + {{ author }} + + + {% book_tree_texml group books_by_parent %} + {% endif %} + {% endfor %} + + + \end{longtable} + \end{document} + + \ No newline at end of file diff --git a/src/reporting/templates/reporting/main.html b/src/reporting/templates/reporting/main.html new file mode 100755 index 000000000..46d49c9ea --- /dev/null +++ b/src/reporting/templates/reporting/main.html @@ -0,0 +1,48 @@ +{% extends "base.html" %} +{% load i18n %} +{% load reporting_stats catalogue_tags %} + +{% block titleextra %}{% trans "Reports" %}{% endblock %} + +{% block bodyid %}reports-stats{% endblock %} + + +{% block body %} +

                        Statystyka

                        + +
                        + +

                        Audiobooki

                        + + + + + + + + + + {% for mt in media_types %} + + + + + + {% endfor %} +
                        Utwory
                        Utwory:{% count_books %}
                        Niezależne książki:{% count_books_root %}
                        Utwory nadrzędne:{% count_books_parent %}
                        Wszystkie utwory:{% count_books_all %}
                        MediaLiczbaRozmiarDo wymiany
                        {{ mt.type }}:{{ mt.count }}{{ mt.size|filesizeformat }}{{ mt.deprecated }} + {% for m in mt.deprecated_files %} +
                        {% book_title m.book %}: {{ m }} + {% endfor %} +
                        + +

                        Licencje

                        +
                          + {% for license, license_description in licenses %} +
                        • {{ license }} ({{ license_description }})
                        • + {% endfor %} +
                        + + +
                        + +{% endblock %} diff --git a/src/reporting/templatetags/__init__.py b/src/reporting/templatetags/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/src/reporting/templatetags/reporting_stats.py b/src/reporting/templatetags/reporting_stats.py new file mode 100755 index 000000000..7bbe23d03 --- /dev/null +++ b/src/reporting/templatetags/reporting_stats.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from functools import wraps +from django import template +from catalogue.models import Book + + +register = template.Library() + +class StatsNode(template.Node): + def __init__(self, value, varname=None): + self.value = value + self.varname = varname + + def render(self, context): + if self.varname: + context[self.varname] = self.value + return '' + else: + return self.value + + +def register_counter(f): + """Turns a simple counting function into a registered counter tag. + + You can run a counter tag as a simple {% tag_name %} tag, or + as {% tag_name var_name %} to store the result in a variable. + + """ + @wraps(f) + def wrapped(parser, token): + try: + tag_name, args = token.contents.split(None, 1) + except ValueError: + args = None + return StatsNode(f(), args) + + return register.tag(wrapped) + + +@register_counter +def count_books_all(): + return Book.objects.all().count() + +@register_counter +def count_books(): + return Book.objects.filter(children=None).count() + +@register_counter +def count_books_parent(): + return Book.objects.exclude(children=None).count() + +@register_counter +def count_books_root(): + return Book.objects.filter(parent=None).count() diff --git a/src/reporting/urls.py b/src/reporting/urls.py new file mode 100755 index 000000000..e78f961b2 --- /dev/null +++ b/src/reporting/urls.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + + +urlpatterns = patterns('reporting.views', + url(r'^$', 'stats_page', name='reporting_stats'), + url(r'^katalog.pdf$', 'catalogue_pdf', name='reporting_catalogue_pdf'), + url(r'^katalog.csv$', 'catalogue_csv', name='reporting_catalogue_csv'), +) + diff --git a/src/reporting/utils.py b/src/reporting/utils.py new file mode 100755 index 000000000..8ecb9b045 --- /dev/null +++ b/src/reporting/utils.py @@ -0,0 +1,123 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from errno import ENOENT +import os +import os.path +from django.conf import settings +import logging +from django.http import HttpResponse + +logger = logging.getLogger(__name__) + + +def render_to_pdf(output_path, template, context=None, add_files=None): + """Renders a TeXML document into a PDF file. + + :param str output_path: is where the PDF file should go + :param str template: is a TeXML template path + :param context: is context for rendering the template + :param dict add_files: a dictionary of additional files XeTeX will need + """ + + from StringIO import StringIO + import shutil + from tempfile import mkdtemp + import subprocess + import Texml.processor + from django.template.loader import render_to_string + + rendered = render_to_string(template, context) + texml = StringIO(rendered.encode('utf-8')) + tempdir = mkdtemp(prefix="render_to_pdf-") + tex_path = os.path.join(tempdir, "doc.tex") + with open(tex_path, 'w') as tex_file: + Texml.processor.process(texml, tex_file, encoding="utf-8") + + if add_files: + for add_name, src_file in add_files.items(): + add_path = os.path.join(tempdir, add_name) + if hasattr(src_file, "read"): + with open(add_path, 'w') as add_file: + add_file.write(add_file.read()) + else: + shutil.copy(src_file, add_path) + + cwd = os.getcwd() + os.chdir(tempdir) + try: + subprocess.check_call(['xelatex', '-interaction=batchmode', tex_path], + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + try: + os.makedirs(os.path.dirname(output_path)) + except: + pass + shutil.move(os.path.join(tempdir, "doc.pdf"), output_path) + finally: + os.chdir(cwd) + shutil.rmtree(tempdir) + + +def render_to_csv(output_path, template, context=None, add_files=None): + """Renders a TeXML document into a PDF file. + + :param str output_path: is where the PDF file should go + :param str template: is a TeXML template path + :param context: is context for rendering the template + :param dict add_files: a dictionary of additional files XeTeX will need + """ + + from django.template.loader import render_to_string + + try: + os.makedirs(os.path.dirname(output_path)) + except: + pass + + rendered = render_to_string(template, context) + with open(output_path, 'w') as csv_file: + csv_file.write(rendered.encode('utf-8')) + + +def read_chunks(f, size=8192): + chunk = f.read(size) + while chunk: + yield chunk + chunk = f.read(size) + + +def generated_file_view(file_name, mime_type, send_name=None, signals=None): + file_path = os.path.join(settings.MEDIA_ROOT, file_name) + if send_name is None: + send_name = os.path.basename(file_name) + + def signal_handler(*args, **kwargs): + try: + os.unlink(file_path) + except OSError as oe: + if oe.errno != ENOENT: + raise oe + + if signals: + for signal in signals: + signal.connect(signal_handler, weak=False) + + def decorator(func): + def view(request, *args, **kwargs): + if not os.path.exists(file_path): + func(file_path, *args, **kwargs) + + if hasattr(send_name, "__call__"): + name = send_name() + else: + name = send_name + + response = HttpResponse(content_type=mime_type) + response['Content-Disposition'] = 'attachment; filename=%s' % name + with open(file_path) as f: + for chunk in read_chunks(f): + response.write(chunk) + return response + return view + return decorator diff --git a/src/reporting/views.py b/src/reporting/views.py new file mode 100644 index 000000000..8cb2715d5 --- /dev/null +++ b/src/reporting/views.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import os.path +from datetime import date +from django.conf import settings +from django.contrib.admin.views.decorators import staff_member_required +from django.db.models import Count +from django.shortcuts import render_to_response +from django.template import RequestContext + +from catalogue.models import Book, BookMedia +from reporting.utils import render_to_pdf, render_to_csv, generated_file_view + + +@staff_member_required +def stats_page(request): + media = BookMedia.objects.count() + media_types = BookMedia.objects.values('type').\ + annotate(count=Count('type')).\ + order_by('type') + for mt in media_types: + mt['size'] = sum(b.file.size for b in BookMedia.objects.filter(type=mt['type']).iterator()) + if mt['type'] in ('mp3', 'ogg'): + deprecated = BookMedia.objects.filter( + type=mt['type'], source_sha1=None) + mt['deprecated'] = deprecated.count() + mt['deprecated_files'] = deprecated.order_by('book', 'name') + else: + mt['deprecated'] = '-' + + licenses = set(((b.extra_info.get('license'), b.extra_info.get('license_description')) + for b in Book.objects.all().iterator() if b.extra_info.get('license'))) + + return render_to_response('reporting/main.html', + locals(), context_instance=RequestContext(request)) + + +@generated_file_view('reports/katalog.pdf', 'application/pdf', + send_name=lambda: 'wolnelektury_%s.pdf' % date.today(), + signals=[Book.published]) +def catalogue_pdf(path): + books_by_author, orphans, books_by_parent = Book.book_list() + render_to_pdf(path, 'reporting/catalogue.texml', locals(), { + "wl-logo.png": os.path.join(settings.STATIC_ROOT, "img/logo-big.png"), + }) + + +@generated_file_view('reports/katalog.csv', 'application/csv', + send_name=lambda: 'wolnelektury_%s.csv' % date.today(), + signals=[Book.published]) +def catalogue_csv(path): + books_by_author, orphans, books_by_parent = Book.book_list() + render_to_csv(path, 'reporting/catalogue.csv', locals()) diff --git a/src/search/__init__.py b/src/search/__init__.py new file mode 100644 index 000000000..d38412449 --- /dev/null +++ b/src/search/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# diff --git a/src/search/context_processors.py b/src/search/context_processors.py new file mode 100644 index 000000000..3cb9256c6 --- /dev/null +++ b/src/search/context_processors.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.core.urlresolvers import reverse +from search.forms import SearchForm + + +def search_form(request): + return { 'search_form': SearchForm(reverse('search.views.hint'), request.GET) } diff --git a/src/search/custom.py b/src/search/custom.py new file mode 100644 index 000000000..b3b704d0b --- /dev/null +++ b/src/search/custom.py @@ -0,0 +1,191 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from sunburnt import sunburnt +from lxml import etree +import urllib +import warnings +from sunburnt import search +import copy +from httplib2 import socket +import re + + +class TermVectorOptions(search.Options): + def __init__(self, schema, original=None): + self.schema = schema + if original is None: + self.fields = set() + self.positions = False + else: + self.fields = copy.copy(original.fields) + self.positions = copy.copy(original.positions) + + def update(self, positions=False, fields=None): + if fields is None: + fields = [] + if isinstance(fields, basestring): + fields = [fields] + self.schema.check_fields(fields, {"stored": True}) + self.fields.update(fields) + self.positions = positions + + def options(self): + opts = {} + if self.positions or self.fields: + opts['tv'] = 'true' + if self.positions: + opts['tv.positions'] = 'true' + if self.fields: + opts['tv.fl'] = ','.join(sorted(self.fields)) + return opts + + +class CustomSolrConnection(sunburnt.SolrConnection): + def __init__(self, *args, **kw): + super(CustomSolrConnection, self).__init__(*args, **kw) + self.analysis_url = self.url + "analysis/field/" + + def analyze(self, params): + qs = urllib.urlencode(params) + url = "%s?%s" % (self.analysis_url, qs) + if len(url) > self.max_length_get_url: + warnings.warn("Long query URL encountered - POSTing instead of " + "GETting. This query will not be cached at the HTTP layer") + url = self.analysis_url + kwargs = dict( + method="POST", + body=qs, + headers={"Content-Type": "application/x-www-form-urlencoded"}, + ) + else: + kwargs = dict(method="GET") + r, c = self.request(url, **kwargs) + if r.status != 200: + raise sunburnt.SolrError(r, c) + return c + + +# monkey patching sunburnt SolrSearch +search.SolrSearch.option_modules += ('term_vectorer',) + + +def __term_vector(self, positions=False, fields=None): + newself = self.clone() + newself.term_vectorer.update(positions, fields) + return newself +setattr(search.SolrSearch, 'term_vector', __term_vector) + + +def __patched__init_common_modules(self): + __original__init_common_modules(self) + self.term_vectorer = TermVectorOptions(self.schema) +__original__init_common_modules = search.SolrSearch._init_common_modules +setattr(search.SolrSearch, '_init_common_modules', __patched__init_common_modules) + + +class CustomSolrInterface(sunburnt.SolrInterface): + # just copied from parent and SolrConnection -> CustomSolrConnection + def __init__(self, url, schemadoc=None, http_connection=None, mode='', retry_timeout=-1, max_length_get_url=sunburnt.MAX_LENGTH_GET_URL): + self.conn = CustomSolrConnection(url, http_connection, retry_timeout, max_length_get_url) + self.schemadoc = schemadoc + if 'w' not in mode: + self.writeable = False + elif 'r' not in mode: + self.readable = False + try: + self.init_schema() + except socket.error, e: + raise socket.error, "Cannot connect to Solr server, and search indexing is enabled (%s)" % str(e) + + def _analyze(self, **kwargs): + if not self.readable: + raise TypeError("This Solr instance is only for writing") + args = { + 'analysis_showmatch': True + } + if 'field' in kwargs: args['analysis_fieldname'] = kwargs['field'] + if 'text' in kwargs: args['analysis_fieldvalue'] = kwargs['text'] + if 'q' in kwargs: args['q'] = kwargs['q'] + if 'query' in kwargs: args['q'] = kwargs['q'] + + params = map(lambda (k, v): (k.replace('_', '.'), v), sunburnt.params_from_dict(**args)) + + content = self.conn.analyze(params) + doc = etree.fromstring(content) + return doc + + def highlight(self, **kwargs): + doc = self._analyze(**kwargs) + analyzed = doc.xpath("//lst[@name='index']/arr[last()]/lst[bool/@name='match']") + matches = set() + for wrd in analyzed: + start = int(wrd.xpath("int[@name='start']")[0].text) + end = int(wrd.xpath("int[@name='end']")[0].text) + matches.add((start, end)) + + if matches: + return self.substring(kwargs['text'], matches, + margins=kwargs.get('margins', 30), + mark=kwargs.get('mark', ("", ""))) + else: + return None + + def analyze(self, **kwargs): + doc = self._analyze(**kwargs) + terms = doc.xpath("//lst[@name='index']/arr[last()]/lst/str[1]") + terms = map(lambda n: unicode(n.text), terms) + return terms + + def expand_margins(self, text, start, end): + totlen = len(text) + + def is_boundary(x): + ws = re.compile(r"\W", re.UNICODE) + return bool(ws.match(x)) + + while start > 0: + if is_boundary(text[start - 1]): + break + start -= 1 + + while end < totlen - 1: + if is_boundary(text[end + 1]): + break + end += 1 + + return (start, end) + + def substring(self, text, matches, margins=30, mark=("", "")): + start = None + end = None + totlen = len(text) + matches_margins = map(lambda (s, e): + ((s, e), + (max(0, s - margins), min(totlen, e + margins))), + matches) + matches_margins = map(lambda (m, (s, e)): + (m, self.expand_margins(text, s, e)), + matches_margins) + + # lets start with first match + (start, end) = matches_margins[0][1] + matches = [matches_margins[0][0]] + + for (m, (s, e)) in matches_margins[1:]: + if end < s or start > e: + continue + start = min(start, s) + end = max(end, e) + matches.append(m) + + snip = text[start:end] + matches.sort(lambda a, b: cmp(b[0], a[0])) + + for (s, e) in matches: + off = - start + snip = snip[:e + off] + mark[1] + snip[e + off:] + snip = snip[:s + off] + mark[0] + snip[s + off:] + + return snip diff --git a/src/search/fields.py b/src/search/fields.py new file mode 100755 index 000000000..45d8b7ecf --- /dev/null +++ b/src/search/fields.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import forms +from django.forms.widgets import flatatt +from django.utils.encoding import smart_unicode +from django.utils.safestring import mark_safe +from json import dumps + + +class JQueryAutoCompleteWidget(forms.TextInput): + def __init__(self, options, *args, **kwargs): + self.options = dumps(options) + super(JQueryAutoCompleteWidget, self).__init__(*args, **kwargs) + + def render_js(self, field_id, options): + return u'$(\'#%s\').autocomplete(%s).result(autocomplete_result_handler);' % (field_id, options) + + def render(self, name, value=None, attrs=None): + final_attrs = self.build_attrs(attrs, name=name) + if value: + final_attrs['value'] = smart_unicode(value) + + if not self.attrs.has_key('id'): + final_attrs['id'] = 'id_%s' % name + + html = u''' + + ''' % { + 'attrs': flatatt(final_attrs), + 'js' : self.render_js(final_attrs['id'], self.options), + } + + return mark_safe(html) + + +class JQueryAutoCompleteSearchWidget(JQueryAutoCompleteWidget): + def __init__(self, *args, **kwargs): + super(JQueryAutoCompleteSearchWidget, self).__init__(*args, **kwargs) + + def render_js(self, field_id, options): + return u"" + + +class JQueryAutoCompleteField(forms.CharField): + def __init__(self, source, options={}, *args, **kwargs): + if 'widget' not in kwargs: + options['source'] = source + kwargs['widget'] = JQueryAutoCompleteWidget(options) + + super(JQueryAutoCompleteField, self).__init__(*args, **kwargs) + + +class JQueryAutoCompleteSearchField(forms.CharField): + def __init__(self, options={}, *args, **kwargs): + if 'widget' not in kwargs: + kwargs['widget'] = JQueryAutoCompleteSearchWidget(options) + + super(JQueryAutoCompleteSearchField, self).__init__(*args, **kwargs) diff --git a/src/search/forms.py b/src/search/forms.py new file mode 100755 index 000000000..9e0a07880 --- /dev/null +++ b/src/search/forms.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import forms +from django.utils.translation import ugettext_lazy as _ + +from search.fields import JQueryAutoCompleteSearchField + + +class SearchForm(forms.Form): + q = JQueryAutoCompleteSearchField(label=_('Search')) # {'minChars': 2, 'selectFirst': True, 'cacheLength': 50, 'matchContains': "word"}) + + def __init__(self, source, *args, **kwargs): + kwargs['auto_id'] = False + super(SearchForm, self).__init__(*args, **kwargs) + self.fields['q'].widget.attrs['id'] = 'search' + self.fields['q'].widget.attrs['autocomplete'] = 'off' + self.fields['q'].widget.attrs['data-source'] = source + if not 'q' in self.data: + self.fields['q'].widget.attrs['placeholder'] = _('title, author, theme/topic, epoch, kind, genre, phrase') diff --git a/src/search/index.py b/src/search/index.py new file mode 100644 index 000000000..31417ca87 --- /dev/null +++ b/src/search/index.py @@ -0,0 +1,946 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings + +import os +import re +import errno +from librarian import dcparser +from librarian.parser import WLDocument +from lxml import etree +import catalogue.models +from pdcounter.models import Author as PDCounterAuthor, BookStub as PDCounterBook +from itertools import chain +import traceback +import logging +log = logging.getLogger('search') +import sunburnt +import custom +import operator + +log = logging.getLogger('search') + +class SolrIndex(object): + def __init__(self, mode=None): + self.index = custom.CustomSolrInterface(settings.SOLR, mode=mode) + + +class Snippets(object): + """ + This class manages snippet files for indexed object (book) + the snippets are concatenated together, and their positions and + lengths are kept in lucene index fields. + """ + SNIPPET_DIR = "snippets" + + def __init__(self, book_id, revision=None): + try: + os.makedirs(os.path.join(settings.SEARCH_INDEX, self.SNIPPET_DIR)) + except OSError as exc: + if exc.errno == errno.EEXIST: + pass + else: raise + self.book_id = book_id + self.revision = revision + self.file = None + + @property + def path(self): + if self.revision: fn = "%d.%d" % (self.book_id, self.revision) + else: fn = "%d" % self.book_id + + return os.path.join(settings.SEARCH_INDEX, self.SNIPPET_DIR, fn) + + def open(self, mode='r'): + """ + Open the snippet file. Call .close() afterwards. + """ + if not 'b' in mode: + mode += 'b' + + if 'w' in mode: + if os.path.exists(self.path): + self.revision = 1 + while True: + if not os.path.exists(self.path): + break + self.revision += 1 + + self.file = open(self.path, mode) + self.position = 0 + return self + + def add(self, snippet): + """ + Append a snippet (unicode) to the snippet file. + Return a (position, length) tuple + """ + txt = snippet.encode('utf-8') + l = len(txt) + self.file.write(txt) + pos = (self.position, l) + self.position += l + return pos + + def get(self, pos): + """ + Given a tuple of (position, length) return an unicode + of the snippet stored there. + """ + self.file.seek(pos[0], 0) + txt = self.file.read(pos[1]).decode('utf-8') + return txt + + def close(self): + """Close snippet file""" + if self.file: + self.file.close() + + def remove(self): + self.revision = None + try: + os.unlink(self.path) + self.revision = 0 + while True: + self.revision += 1 + os.unlink(self.path) + except OSError: + pass + + +class Index(SolrIndex): + """ + Class indexing books. + """ + def __init__(self): + super(Index, self).__init__(mode='rw') + + def delete_query(self, *queries): + """ + index.delete(queries=...) doesn't work, so let's reimplement it + using deletion of list of uids. + """ + uids = set() + for q in queries: + if isinstance(q, sunburnt.search.LuceneQuery): + q = self.index.query(q) + q.field_limiter.update(['uid']) + st = 0 + rows = 100 + while True: + ids = q.paginate(start=st, rows=rows).execute() + if not len(ids): + break + for res in ids: + uids.add(res['uid']) + st += rows + if uids: + self.index.delete(uids) + return True + else: + return False + + def index_tags(self, *tags, **kw): + """ + Re-index global tag list. + Removes all tags from index, then index them again. + Indexed fields include: id, name (with and without polish stems), category + """ + log.debug("Indexing tags") + remove_only = kw.get('remove_only', False) + # first, remove tags from index. + if tags: + tag_qs = [] + for tag in tags: + q_id = self.index.Q(tag_id=tag.id) + + if isinstance(tag, PDCounterAuthor): + q_cat = self.index.Q(tag_category='pd_author') + elif isinstance(tag, PDCounterBook): + q_cat = self.index.Q(tag_category='pd_book') + else: + q_cat = self.index.Q(tag_category=tag.category) + + q_id_cat = self.index.Q(q_id & q_cat) + tag_qs.append(q_id_cat) + self.delete_query(*tag_qs) + else: # all + q = self.index.Q(tag_id__any=True) + self.delete_query(q) + + if not remove_only: + # then add them [all or just one passed] + if not tags: + tags = chain(catalogue.models.Tag.objects.exclude(category='set'), \ + PDCounterAuthor.objects.all(), \ + PDCounterBook.objects.all()) + + for tag in tags: + if isinstance(tag, PDCounterAuthor): + doc = { + "tag_id": int(tag.id), + "tag_name": tag.name, + "tag_name_pl": tag.name, + "tag_category": 'pd_author', + "is_pdcounter": True, + "uid": "tag%d_pd_a" % tag.id + } + elif isinstance(tag, PDCounterBook): + doc = { + "tag_id": int(tag.id), + "tag_name": tag.title, + "tag_name_pl": tag.title, + "tag_category": 'pd_book', + "is_pdcounter": True, + "uid": "tag%d_pd_b" % tag.id + } + else: + doc = { + "tag_id": int(tag.id), + "tag_name": tag.name, + "tag_name_pl": tag.name, + "tag_category": tag.category, + "is_pdcounter": False, + "uid": "tag%d" % tag.id + } + self.index.add(doc) + + def create_book_doc(self, book): + """ + Create a lucene document referring book id. + """ + doc = { + 'book_id': int(book.id), + } + if book.parent is not None: + doc["parent_id"] = int(book.parent.id) + return doc + + def remove_book(self, book_or_id, remove_snippets=True): + """Removes a book from search index. + book - Book instance.""" + if isinstance(book_or_id, catalogue.models.Book): + book_id = book_or_id.id + else: + book_id = book_or_id + + self.delete_query(self.index.Q(book_id=book_id)) + + if remove_snippets: + snippets = Snippets(book_id) + snippets.remove() + + def index_book(self, book, book_info=None, overwrite=True): + """ + Indexes the book. + Creates a lucene document for extracted metadata + and calls self.index_content() to index the contents of the book. + """ + if overwrite: + # we don't remove snippets, since they might be still needed by + # threads using not reopened index + self.remove_book(book, remove_snippets=False) + + book_doc = self.create_book_doc(book) + meta_fields = self.extract_metadata(book, book_info, dc_only=['source_name', 'authors', 'translators', 'title']) + # let's not index it - it's only used for extracting publish date + if 'source_name' in meta_fields: + del meta_fields['source_name'] + + for n, f in meta_fields.items(): + book_doc[n] = f + + book_doc['uid'] = "book%s" % book_doc['book_id'] + self.index.add(book_doc) + del book_doc + book_fields = { + 'title': meta_fields['title'], + 'authors': meta_fields['authors'], + 'published_date': meta_fields['published_date'] + } + + if 'translators' in meta_fields: + book_fields['translators'] = meta_fields['translators'] + + self.index_content(book, book_fields=book_fields) + + master_tags = [ + 'opowiadanie', + 'powiesc', + 'dramat_wierszowany_l', + 'dramat_wierszowany_lp', + 'dramat_wspolczesny', 'liryka_l', 'liryka_lp', + 'wywiad', + ] + + ignore_content_tags = [ + 'uwaga', 'extra', + 'zastepnik_tekstu', 'sekcja_asterysk', 'separator_linia', 'zastepnik_wersu', + 'didaskalia', + 'naglowek_aktu', 'naglowek_sceny', 'naglowek_czesc', + ] + + footnote_tags = ['pa', 'pt', 'pr', 'pe'] + + skip_header_tags = ['autor_utworu', 'nazwa_utworu', 'dzielo_nadrzedne', '{http://www.w3.org/1999/02/22-rdf-syntax-ns#}RDF'] + + published_date_re = re.compile("([0-9]+)[\]. ]*$") + + def extract_metadata(self, book, book_info=None, dc_only=None): + """ + Extract metadata from book and returns a map of fields keyed by fieldname + """ + fields = {} + + if book_info is None: + book_info = dcparser.parse(open(book.xml_file.path)) + + fields['slug'] = book.slug + fields['tags'] = [t.name for t in book.tags] + fields['is_book'] = True + + # validator, name + for field in dcparser.BookInfo.FIELDS: + if dc_only and field.name not in dc_only: + continue + if hasattr(book_info, field.name): + if not getattr(book_info, field.name): + continue + # since no type information is available, we use validator + type_indicator = field.validator + if type_indicator == dcparser.as_unicode: + s = getattr(book_info, field.name) + if field.multiple: + s = ', '.join(s) + fields[field.name] = s + elif type_indicator == dcparser.as_person: + p = getattr(book_info, field.name) + if isinstance(p, dcparser.Person): + persons = unicode(p) + else: + persons = ', '.join(map(unicode, p)) + fields[field.name] = persons + elif type_indicator == dcparser.as_date: + dt = getattr(book_info, field.name) + fields[field.name] = dt + + # get published date + pd = None + if hasattr(book_info, 'source_name') and book_info.source_name: + match = self.published_date_re.search(book_info.source_name) + if match is not None: + pd = str(match.groups()[0]) + if not pd: pd = "" + fields["published_date"] = pd + + return fields + + # def add_gaps(self, fields, fieldname): + # """ + # Interposes a list of fields with gap-fields, which are indexed spaces and returns it. + # This allows for doing phrase queries which do not overlap the gaps (when slop is 0). + # """ + # def gap(): + # while True: + # yield Field(fieldname, ' ', Field.Store.NO, Field.Index.NOT_ANALYZED) + # return reduce(lambda a, b: a + b, zip(fields, gap()))[0:-1] + + def get_master(self, root): + """ + Returns the first master tag from an etree. + """ + for master in root.iter(): + if master.tag in self.master_tags: + return master + + def index_content(self, book, book_fields={}): + """ + Walks the book XML and extract content from it. + Adds parts for each header tag and for each fragment. + """ + wld = WLDocument.from_file(book.xml_file.path, parse_dublincore=False) + root = wld.edoc.getroot() + + master = self.get_master(root) + if master is None: + return [] + + def walker(node, ignore_tags=[]): + + if node.tag not in ignore_tags: + yield node, None, None + if node.text is not None: + yield None, node.text, None + for child in list(node): + for b, t, e in walker(child): + yield b, t, e + yield None, None, node + + if node.tail is not None: + yield None, node.tail, None + return + + def fix_format(text): + # separator = [u" ", u"\t", u".", u";", u","] + if isinstance(text, list): + # need to join it first + text = filter(lambda s: s is not None, content) + text = u' '.join(text) + # for i in range(len(text)): + # if i > 0: + # if text[i][0] not in separator\ + # and text[i - 1][-1] not in separator: + # text.insert(i, u" ") + + return re.sub("(?m)/$", "", text) + + def add_part(snippets, **fields): + doc = self.create_book_doc(book) + for n, v in book_fields.items(): + doc[n] = v + + doc['header_index'] = fields["header_index"] + doc['header_span'] = 'header_span' in fields and fields['header_span'] or 1 + doc['header_type'] = fields['header_type'] + + doc['text'] = fields['text'] + + # snippets + snip_pos = snippets.add(fields["text"]) + + doc['snippets_position'] = snip_pos[0] + doc['snippets_length'] = snip_pos[1] + if snippets.revision: + doc["snippets_revision"] = snippets.revision + + if 'fragment_anchor' in fields: + doc["fragment_anchor"] = fields['fragment_anchor'] + + if 'themes' in fields: + doc['themes'] = fields['themes'] + doc['uid'] = "part%s%s%s" % (doc['header_index'], + doc['header_span'], + doc.get('fragment_anchor', '')) + return doc + + def give_me_utf8(s): + if isinstance(s, unicode): + return s.encode('utf-8') + else: + return s + + fragments = {} + snippets = Snippets(book.id).open('w') + try: + for header, position in zip(list(master), range(len(master))): + + if header.tag in self.skip_header_tags: + continue + if header.tag is etree.Comment: + continue + + # section content + content = [] + footnote = [] + + def all_content(text): + for frag in fragments.values(): + frag['text'].append(text) + content.append(text) + handle_text = [all_content] + + for start, text, end in walker(header, ignore_tags=self.ignore_content_tags): + # handle footnotes + if start is not None and start.tag in self.footnote_tags: + footnote = [] + + def collect_footnote(t): + footnote.append(t) + + handle_text.append(collect_footnote) + elif end is not None and footnote is not [] and end.tag in self.footnote_tags: + handle_text.pop() + doc = add_part(snippets, header_index=position, header_type=header.tag, + text=u''.join(footnote), + is_footnote=True) + self.index.add(doc) + footnote = [] + + # handle fragments and themes. + if start is not None and start.tag == 'begin': + fid = start.attrib['id'][1:] + fragments[fid] = {'text': [], 'themes': [], 'start_section': position, 'start_header': header.tag} + + # themes for this fragment + elif start is not None and start.tag == 'motyw': + fid = start.attrib['id'][1:] + handle_text.append(None) + if start.text is not None: + fragments[fid]['themes'] += map(unicode.strip, map(unicode, (start.text.split(',')))) + elif end is not None and end.tag == 'motyw': + handle_text.pop() + + elif start is not None and start.tag == 'end': + fid = start.attrib['id'][1:] + if fid not in fragments: + continue # a broken node, skip it + frag = fragments[fid] + if frag['themes'] == []: + continue # empty themes list. + del fragments[fid] + + doc = add_part(snippets, + header_type=frag['start_header'], + header_index=frag['start_section'], + header_span=position - frag['start_section'] + 1, + fragment_anchor=fid, + text=fix_format(frag['text']), + themes=frag['themes']) + self.index.add(doc) + + # Collect content. + + if text is not None and handle_text is not []: + hdl = handle_text[-1] + if hdl is not None: + hdl(text) + + # in the end, add a section text. + doc = add_part(snippets, header_index=position, + header_type=header.tag, text=fix_format(content)) + + self.index.add(doc) + + finally: + snippets.close() + + +class SearchResult(object): + def __init__(self, doc, how_found=None, query=None, query_terms=None): + # self.search = search + self.boost = 1.0 + self._hits = [] + self._processed_hits = None # processed hits + self.snippets = [] + self.query_terms = query_terms + + if 'score' in doc: + self._score = doc['score'] + else: + self._score = 0 + + self.book_id = int(doc["book_id"]) + + try: + self.published_date = int(doc.get("published_date")) + except ValueError: + self.published_date = 0 + + # content hits + header_type = doc.get("header_type", None) + # we have a content hit in some header of fragment + if header_type is not None: + sec = (header_type, int(doc["header_index"])) + header_span = doc['header_span'] + header_span = header_span is not None and int(header_span) or 1 + fragment = doc.get("fragment_anchor", None) + snippets_pos = (doc['snippets_position'], doc['snippets_length']) + snippets_rev = doc.get('snippets_revision', None) + + hit = (sec + (header_span,), fragment, self._score, { + 'how_found': how_found, + 'snippets_pos': snippets_pos, + 'snippets_revision': snippets_rev, + 'themes': doc.get('themes', []), + 'themes_pl': doc.get('themes_pl', []) + }) + + self._hits.append(hit) + + def __unicode__(self): + return u"" % \ + (self.book_id, len(self._hits), self._processed_hits and len(self._processed_hits) or -1, self._score, len(self.snippets)) + + def __str__(self): + return unicode(self).encode('utf-8') + + @property + def score(self): + return self._score * self.boost + + def merge(self, other): + if self.book_id != other.book_id: + raise ValueError("this search result is or book %d; tried to merge with %d" % (self.book_id, other.book_id)) + self._hits += other._hits + if other.score > self.score: + self._score = other._score + return self + + def get_book(self): + if hasattr(self, '_book'): + return self._book + self._book = catalogue.models.Book.objects.get(id=self.book_id) + return self._book + + book = property(get_book) + + POSITION = 0 + FRAGMENT = 1 + POSITION_INDEX = 1 + POSITION_SPAN = 2 + SCORE = 2 + OTHER = 3 + + @property + def hits(self): + if self._processed_hits is not None: + return self._processed_hits + + # to sections and fragments + frags = filter(lambda r: r[self.FRAGMENT] is not None, self._hits) + + sect = filter(lambda r: r[self.FRAGMENT] is None, self._hits) + + # sections not covered by fragments + sect = filter(lambda s: 0 == len(filter( + lambda f: s[self.POSITION][self.POSITION_INDEX] >= f[self.POSITION][self.POSITION_INDEX] + and s[self.POSITION][self.POSITION_INDEX] < f[self.POSITION][self.POSITION_INDEX] + f[self.POSITION][self.POSITION_SPAN], + frags)), sect) + + hits = [] + + def remove_duplicates(lst, keyfn, compare): + els = {} + for e in lst: + eif = keyfn(e) + if eif in els: + if compare(els[eif], e) >= 1: + continue + els[eif] = e + return els.values() + + # remove fragments with duplicated fid's and duplicated snippets + frags = remove_duplicates(frags, lambda f: f[self.FRAGMENT], lambda a, b: cmp(a[self.SCORE], b[self.SCORE])) + # frags = remove_duplicates(frags, lambda f: f[OTHER]['snippet_pos'] and f[OTHER]['snippet_pos'] or f[FRAGMENT], + # lambda a, b: cmp(a[SCORE], b[SCORE])) + + # remove duplicate sections + sections = {} + + for s in sect: + si = s[self.POSITION][self.POSITION_INDEX] + # skip existing + if si in sections: + if sections[si]['score'] >= s[self.SCORE]: + continue + + m = {'score': s[self.SCORE], + 'section_number': s[self.POSITION][self.POSITION_INDEX] + 1, + } + m.update(s[self.OTHER]) + sections[si] = m + + hits = sections.values() + + for f in frags: + try: + frag = catalogue.models.Fragment.objects.get(anchor=f[self.FRAGMENT], book__id=self.book_id) + except catalogue.models.Fragment.DoesNotExist: + # stale index + continue + # Figure out if we were searching for a token matching some word in theme name. + themes = frag.tags.filter(category='theme') + themes_hit = set() + if self.query_terms is not None: + for i in range(0, len(f[self.OTHER]['themes'])): + tms = f[self.OTHER]['themes'][i].split(r' +') + f[self.OTHER]['themes_pl'][i].split(' ') + tms = map(unicode.lower, tms) + for qt in self.query_terms: + if qt in tms: + themes_hit.add(f[self.OTHER]['themes'][i]) + break + + def theme_by_name(n): + th = filter(lambda t: t.name == n, themes) + if th: + return th[0] + else: + return None + themes_hit = filter(lambda a: a is not None, map(theme_by_name, themes_hit)) + + m = {'score': f[self.SCORE], + 'fragment': frag, + 'section_number': f[self.POSITION][self.POSITION_INDEX] + 1, + 'themes': themes, + 'themes_hit': themes_hit + } + m.update(f[self.OTHER]) + hits.append(m) + + hits.sort(lambda a, b: cmp(a['score'], b['score']), reverse=True) + + self._processed_hits = hits + + return hits + + @staticmethod + def aggregate(*result_lists): + books = {} + for rl in result_lists: + for r in rl: + if r.book_id in books: + books[r.book_id].merge(r) + else: + books[r.book_id] = r + return books.values() + + def __cmp__(self, other): + c = cmp(self.score, other.score) + if c == 0: + # this is inverted, because earlier date is better + return cmp(other.published_date, self.published_date) + else: + return c + + def __len__(self): + return len(self.hits) + + def snippet_pos(self, idx=0): + return self.hits[idx]['snippets_pos'] + + def snippet_revision(self, idx=0): + try: + return self.hits[idx]['snippets_revision'] + except: + return None + + +class Search(SolrIndex): + """ + Search facilities. + """ + def __init__(self, default_field="text"): + super(Search, self).__init__(mode='r') + + + def make_term_query(self, query, field='text', modal=operator.or_): + """ + Returns term queries joined by boolean query. + modal - applies to boolean query + fuzzy - should the query by fuzzy. + """ + if query is None: query = '' + q = self.index.Q() + q = reduce(modal, map(lambda s: self.index.Q(**{field: s}), + query.split(r" ")), q) + + return q + + def search_phrase(self, searched, field='text', book=False, + filters=None, + snippets=False): + if filters is None: filters = [] + if book: filters.append(self.index.Q(is_book=True)) + + q = self.index.query(**{field: searched}) + q = self.apply_filters(q, filters).field_limit(score=True, all_fields=True) + res = q.execute() + return [SearchResult(found, how_found=u'search_phrase') for found in res] + + def search_some(self, searched, fields, book=True, + filters=None, snippets=True, query_terms=None): + assert isinstance(fields, list) + if filters is None: filters = [] + if book: filters.append(self.index.Q(is_book=True)) + + query = self.index.Q() + + for fld in fields: + query = self.index.Q(query | self.make_term_query(searched, fld)) + + query = self.index.query(query) + query = self.apply_filters(query, filters).field_limit(score=True, all_fields=True) + res = query.execute() + return [SearchResult(found, how_found='search_some', query_terms=query_terms) for found in res] + + + def search_everywhere(self, searched, query_terms=None): + """ + Tries to use search terms to match different fields of book (or its parts). + E.g. one word can be an author survey, another be a part of the title, and the rest + are some words from third chapter. + """ + books = [] + # content only query : themes x content + q = self.make_term_query(searched, 'text') + q_themes = self.make_term_query(searched, 'themes_pl') + + query = self.index.query(q).query(q_themes).field_limit(score=True, all_fields=True) + res = query.execute() + + for found in res: + books.append(SearchResult(found, how_found='search_everywhere_themesXcontent', query_terms=query_terms)) + + # query themes/content x author/title/tags + in_content = self.index.Q() + in_meta = self.index.Q() + + for fld in ['themes_pl', 'text']: + in_content |= self.make_term_query(searched, field=fld) + + for fld in ['tags', 'authors', 'title']: + in_meta |= self.make_term_query(searched, field=fld) + + q = in_content & in_meta + res = self.index.query(q).field_limit(score=True, all_fields=True).execute() + + for found in res: + books.append(SearchResult(found, how_found='search_everywhere', query_terms=query_terms)) + + return books + + def get_snippets(self, searchresult, query, field='text', num=1): + """ + Returns a snippet for found scoreDoc. + """ + maxnum = len(searchresult) + if num is None or num < 0 or num > maxnum: + num = maxnum + book_id = searchresult.book_id + revision = searchresult.snippet_revision() + snippets = Snippets(book_id, revision=revision) + snips = [None] * maxnum + try: + snippets.open() + idx = 0 + while idx < maxnum and num > 0: + position, length = searchresult.snippet_pos(idx) + if position is None or length is None: + continue + text = snippets.get((int(position), + int(length))) + snip = self.index.highlight(text=text, field=field, q=query) + snips[idx] = snip + if snip: + num -= 1 + idx += 1 + + except IOError, e: + log.error("Cannot open snippet file for book id = %d [rev=%s], %s" % (book_id, revision, e)) + return [] + finally: + snippets.close() + + # remove verse end markers.. + snips = map(lambda s: s and s.replace("/\n", "\n"), snips) + + searchresult.snippets = snips + + return snips + + def hint_tags(self, query, pdcounter=True, prefix=True): + """ + Return auto-complete hints for tags + using prefix search. + """ + q = self.index.Q() + query = query.strip() + for field in ['tag_name', 'tag_name_pl']: + if prefix: + q |= self.index.Q(**{field: query + "*"}) + else: + q |= self.make_term_query(query, field=field) + qu = self.index.query(q) + + return self.search_tags(qu, pdcounter=pdcounter) + + def search_tags(self, query, filters=None, pdcounter=False): + """ + Search for Tag objects using query. + """ + if not filters: filters = [] + if not pdcounter: + filters.append(~self.index.Q(is_pdcounter=True)) + res = self.apply_filters(query, filters).execute() + + tags = [] + pd_tags = [] + + for doc in res: + is_pdcounter = doc.get('is_pdcounter', False) + category = doc.get('tag_category') + try: + if is_pdcounter == True: + if category == 'pd_author': + tag = PDCounterAuthor.objects.get(id=doc.get('tag_id')) + elif category == 'pd_book': + tag = PDCounterBook.objects.get(id=doc.get('tag_id')) + tag.category = 'pd_book' # make it look more lik a tag. + else: + print ("Warning. cannot get pdcounter tag_id=%d from db; cat=%s" % (int(doc.get('tag_id')), category)).encode('utf-8') + pd_tags.append(tag) + else: + tag = catalogue.models.Tag.objects.get(id=doc.get("tag_id")) + tags.append(tag) + + except catalogue.models.Tag.DoesNotExist: pass + except PDCounterAuthor.DoesNotExist: pass + except PDCounterBook.DoesNotExist: pass + + tags_slugs = set(map(lambda t: t.slug, tags)) + tags = tags + filter(lambda t: not t.slug in tags_slugs, pd_tags) + + log.debug('search_tags: %s' % tags) + + return tags + + def hint_books(self, query, prefix=True): + """ + Returns auto-complete hints for book titles + Because we do not index 'pseudo' title-tags. + Prefix search. + """ + q = self.index.Q() + query = query.strip() + if prefix: + q |= self.index.Q(title=query + "*") + else: + q |= self.make_term_query(query, field='title') + qu = self.index.query(q) + only_books = self.index.Q(is_book=True) + return self.search_books(qu, [only_books]) + + def search_books(self, query, filters=None, max_results=10): + """ + Searches for Book objects using query + """ + bks = [] + bks_found = set() + query = query.query(is_book=True) + res = self.apply_filters(query, filters).field_limit(['book_id']) + for r in res: + try: + bid = r['book_id'] + if not bid in bks_found: + bks.append(catalogue.models.Book.objects.get(id=bid)) + bks_found.add(bid) + except catalogue.models.Book.DoesNotExist: pass + return bks + + + @staticmethod + def apply_filters(query, filters): + """ + Apply filters to a query + """ + if filters is None: filters = [] + filters = filter(lambda x: x is not None, filters) + for f in filters: + query = query.query(f) + return query + + +if getattr(settings, 'SEARCH_MOCK', False): + from .mock_search import Search diff --git a/src/search/locale/de/LC_MESSAGES/django.mo b/src/search/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..831e52ac6 Binary files /dev/null and b/src/search/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/de/LC_MESSAGES/django.po b/src/search/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..6e98c6275 --- /dev/null +++ b/src/search/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,30 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-09 11:35+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "Suchen" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "Titel, Autor, Thema, Epoche, Art, Gattung, Satz" + +#: views.py:100 +msgid "book" +msgstr "Buch" diff --git a/src/search/locale/en/LC_MESSAGES/django.mo b/src/search/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..30dabdcd3 Binary files /dev/null and b/src/search/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/en/LC_MESSAGES/django.po b/src/search/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..05b74586c --- /dev/null +++ b/src/search/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,29 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-10 13:31+0100\n" +"Last-Translator: Kamil \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "Search" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "title, author, theme/topic, period, form, genre, phrase" + +#: views.py:100 +msgid "book" +msgstr "book" diff --git a/src/search/locale/es/LC_MESSAGES/django.mo b/src/search/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..6b996266e Binary files /dev/null and b/src/search/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/es/LC_MESSAGES/django.po b/src/search/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..c08ead943 --- /dev/null +++ b/src/search/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,30 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-05-17 23:20+0100\n" +"Last-Translator: KG \n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "Buscar" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "título, autor, tema, época , género, subgénero, frase" + +#: views.py:100 +msgid "book" +msgstr "libro" diff --git a/src/search/locale/fr/LC_MESSAGES/django.mo b/src/search/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..96e747616 Binary files /dev/null and b/src/search/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/fr/LC_MESSAGES/django.po b/src/search/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..70b0d42dd --- /dev/null +++ b/src/search/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,30 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: 2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 20:25+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "Rechercher" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "titre, auteur, thème/sujet, époque, type, genre" + +#: views.py:100 +msgid "book" +msgstr "le livre" diff --git a/src/search/locale/it/LC_MESSAGES/django.mo b/src/search/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..348bf827a Binary files /dev/null and b/src/search/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/it/LC_MESSAGES/django.po b/src/search/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..07c8c7a17 --- /dev/null +++ b/src/search/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,31 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "" + +#: views.py:100 +msgid "book" +msgstr "" diff --git a/src/search/locale/jp/LC_MESSAGES/django.mo b/src/search/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c9739db34 Binary files /dev/null and b/src/search/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/jp/LC_MESSAGES/django.po b/src/search/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..d991f75d4 --- /dev/null +++ b/src/search/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,30 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "" + +#: views.py:100 +msgid "book" +msgstr "" diff --git a/src/search/locale/lt/LC_MESSAGES/django.mo b/src/search/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..d012e915a Binary files /dev/null and b/src/search/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/lt/LC_MESSAGES/django.po b/src/search/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..8b9b64e3d --- /dev/null +++ b/src/search/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,31 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-02 18:24+0100\n" +"Last-Translator: Karolina Zuber \n" +"Language-Team: LANGUAGE \n" +"Language: \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" +"%100<10 || n%100>=20) ? 1 : 2)\n" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "Ieškoti" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "pavadinimas, autorius, motyvas/tema, epocha, rūšis, žanras, citata" + +#: views.py:100 +msgid "book" +msgstr "knyga" diff --git a/src/search/locale/pl/LC_MESSAGES/django.mo b/src/search/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..208692a08 Binary files /dev/null and b/src/search/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/pl/LC_MESSAGES/django.po b/src/search/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..1d89f7ca9 --- /dev/null +++ b/src/search/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-01-27 16:41+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \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%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2)\n" + +#: forms.py:12 templates/newsearch/search.html:16 +#, fuzzy +msgid "Search" +msgstr "szukaj" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "tytuł, autor, motyw/temat, epoka, rodzaj, gatunek, cytat" + +#: views.py:100 +msgid "book" +msgstr "utwór" + +#~ msgid "off" +#~ msgstr "wył." diff --git a/src/search/locale/ru/LC_MESSAGES/django.mo b/src/search/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..1f7051309 Binary files /dev/null and b/src/search/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/ru/LC_MESSAGES/django.po b/src/search/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..868db0581 --- /dev/null +++ b/src/search/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,30 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 22:11+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "Поиск" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "название, автор, тема/сюжет, епоха, вид, жанр, фраза" + +#: views.py:100 +msgid "book" +msgstr "книга" diff --git a/src/search/locale/uk/LC_MESSAGES/django.mo b/src/search/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..8e2b10c72 Binary files /dev/null and b/src/search/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/uk/LC_MESSAGES/django.po b/src/search/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..b24b885b7 --- /dev/null +++ b/src/search/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,31 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-04-10 22:12+0100\n" +"Last-Translator: Natalia Kertyczak \n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "Пошук" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "назва, автор, тема/мотив, епоха, рід, жанр, фраза" + +#: views.py:100 +msgid "book" +msgstr "книжка" diff --git a/src/search/management/__init__.py b/src/search/management/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/search/management/commands/__init__.py b/src/search/management/commands/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/search/management/commands/reindex.py b/src/search/management/commands/reindex.py new file mode 100755 index 000000000..4941354ce --- /dev/null +++ b/src/search/management/commands/reindex.py @@ -0,0 +1,88 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import sys +from django.core.management.base import BaseCommand + +from optparse import make_option + +def query_yes_no(question, default="yes"): + """Ask a yes/no question via raw_input() and return their answer. + + "question" is a string that is presented to the user. + "default" is the presumed answer if the user just hits . + It must be "yes" (the default), "no" or None (meaning + an answer is required of the user). + + The "answer" return value is one of "yes" or "no". + """ + valid = {"yes":True, "y":True, "ye":True, + "no":False, "n":False} + if default == None: + prompt = " [y/n] " + elif default == "yes": + prompt = " [Y/n] " + elif default == "no": + prompt = " [y/N] " + else: + raise ValueError("invalid default answer: '%s'" % default) + + while True: + sys.stdout.write(question + prompt) + choice = raw_input().lower() + if default is not None and choice == '': + return valid[default] + elif choice in valid: + return valid[choice] + else: + sys.stdout.write("Please respond with 'yes' or 'no' "\ + "(or 'y' or 'n').\n") + +class Command(BaseCommand): + help = 'Reindex everything.' + args = '' + + option_list = BaseCommand.option_list + ( + make_option('-n', '--book-id', action='store_true', dest='book_id', default=False, + help='book id instead of slugs'), + make_option('-t', '--just-tags', action='store_true', dest='just_tags', default=False, + help='just reindex tags'), + ) + def handle(self, *args, **opts): + from catalogue.models import Book + from search.index import Index + idx = Index() + + if not opts['just_tags']: + if args: + books = [] + for a in args: + if opts['book_id']: + books += Book.objects.filter(id=int(a)).all() + else: + books += Book.objects.filter(slug=a).all() + else: + books = list(Book.objects.all()) + + while books: + try: + b = books[0] + print b.title + idx.index_book(b) + idx.index.commit() + books.pop(0) + except Exception, e: + print "Error occured: %s" % e + try: + # we might not be able to rollback + idx.index.rollback() + except: + pass + retry = query_yes_no("Retry?") + if not retry: + break + + print 'Reindexing tags.' + idx.index_tags() + idx.index.commit() diff --git a/src/search/management/commands/snippets.py b/src/search/management/commands/snippets.py new file mode 100755 index 000000000..40310eda1 --- /dev/null +++ b/src/search/management/commands/snippets.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.core.management.base import BaseCommand + +from glob import glob +from optparse import make_option +from os import path +from sys import stdout +from django.conf import settings + +class Command(BaseCommand): + help = 'Reindex everything.' + args = '' + + option_list = BaseCommand.option_list + ( + make_option('-C', '--check-just-read', action='store_true', dest='check', default=False, + help='Check snippets utf-8'), + make_option('-c', '--check', action='store_true', dest='check2', default=False, + help='Check snippets utf-8 by walking through index'), + ) + + + def handle(self, *args, **opts): + from catalogue.models import Book + from search.index import Search + + if opts['check']: + sfn = glob(settings.SEARCH_INDEX+'snippets/*') + print sfn + for fn in sfn: + print fn + bkid = int(path.basename(fn)) + with open(fn) as f: + cont = f.read() + try: + uc = cont.decode('utf-8') + except UnicodeDecodeError, ude: + print "error in snippets %d" % bkid + if opts['check2']: + s = Search() + reader = s.searcher.getIndexReader() + numdocs = reader.numDocs() + for did in range(numdocs): + doc = reader.document(did) + if doc and doc.get('book_id'): + bkid = int(doc.get('book_id')) + #import pdb; pdb.set_trace() + stdout.write("\r%d / %d" % (did, numdocs)) + stdout.flush() + ss = doc.get('snippet_position') + sl = doc.get('snippet_length') + if ss and sl: + snips = Snippets(bkid) + try: + txt = snips.get((ss,sl)) + assert len(txt) == sl + except UnicodeDecodeError, ude: + stdout.write("\nerror in snippets %d\n" % bkid) + raise ude + + stdout.write("\ndone.\n") + diff --git a/src/search/mock_search.py b/src/search/mock_search.py new file mode 100644 index 000000000..253c277a8 --- /dev/null +++ b/src/search/mock_search.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from mock import Mock +from catalogue.models import Book, Tag +from random import randint, choice + + +class Search(Mock): + """ + Search mock for development without setting up Solr. + + Instead of connecting to an actual search server, it returns + some random results for any query. + """ + class MockIndex(Mock): + def analyze(*args, **kwargs): + return [] + + index = MockIndex() + + @staticmethod + def _find_some_books(snippets=False, query_terms=None, max_results=20): + from .index import SearchResult + + qs = Book.objects.order_by('?') + if snippets: + qs = qs.exclude(fragments=None) + results = [] + for book in qs[:randint(1, max_results)]: + doc = { + 'score': randint(0, 100), + 'book_id': book.pk, + 'published_date': randint(1000, 1920), + } + if snippets: + fragment = book.fragments.order_by('?')[0] + doc.update({ + 'header_type': choice(['strofa', 'akap']), + 'header_index': randint(100, 200), + 'header_span': randint(100, 200), + 'fragment_anchor': fragment.anchor, + 'snippets_position': randint(100, 200), + 'snippets_length': randint(100, 200), + 'snippets_revision': randint(1, 100), + 'themes_pl': fragment.tags.filter(category='theme'), + }) + res = SearchResult(doc, how_found='mock', query_terms=query_terms) + if snippets: + res.snippets = [fragment.short_text] + results.append(res) + return results + + def search_phrase(self, searched, field='text', book=False, + filters=None, snippets=False): + return self._find_some_books(snippets) + + def search_some(self, searched, fields, book=True, filters=None, snippets=True, query_terms=None): + return self._find_some_books(snippets, query_terms) + + def search_books(self, query, filters=None, max_results=10): + return self._find_some_books(snippets, max_results=max_results) + + def search_everywhere(self, searched, query_terms=None): + return [] + + def hint_tags(self, query, pdcounter=True, prefix=True): + return Tag.objects.exclude(category='set').order_by('?')[:randint(1, 10)] + + def hint_books(self, prefix): + return Book.objects.order_by('?')[:randint(1, 10)] diff --git a/src/search/templates/newsearch/search.html b/src/search/templates/newsearch/search.html new file mode 100644 index 000000000..0b0fad49d --- /dev/null +++ b/src/search/templates/newsearch/search.html @@ -0,0 +1,58 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} + +{% block title %}Search{% endblock %} + +{% block metadescription %}{% endblock %} + +{% block bodyid %}newsearch{% endblock %} + +{% block body %} +

                        Search

                        +
                        +

                        + + +
                        + fuzzy. +

                        +
                        + {% if did_you_mean %} + Czy miałeś na mysli {{did_you_mean}}? + {% endif %} + + +
                        +
                          + {% for result in results %} +
                        1. +

                          {{result.book.pretty_title}} (id: {{result.book_id}}, score: {{result.score}})

                          +
                            + {% for snip in hit.snippets %} +
                          • + {{snip|safe}}
                            +
                          • + {% endfor %} + + {% for part in result.parts %} + {% if part.header %} +
                          • W {{part.header}} nr {{part.position}}
                          • + {% else %} + {% if part.fragment %} +
                          • +
                            Tagi/Motywy: {% for tag in part.fragment.tags %}{{tag.name}} {% endfor %}
                            + {{part.fragment.short_html|safe}} +
                          • + {% endif %} + {% endif %} + {% endfor %} +
                          +
                        2. + {% empty %} +

                          No results.

                          + {% endfor %} +
                        +
                        + +{% endblock %} diff --git a/src/search/templatetags/__init__.py b/src/search/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/search/templatetags/search_tags.py b/src/search/templatetags/search_tags.py new file mode 100644 index 000000000..8dbad9dae --- /dev/null +++ b/src/search/templatetags/search_tags.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +# import feedparser +# import datetime + +from django import template +# from django.contrib.auth.forms import UserCreationForm, AuthenticationForm +# from django.db.models import Q +# from django.utils.translation import ugettext as _ +from catalogue.models import Book +import re +# from catalogue.forms import SearchForm +# from catalogue.utils import split_tags + + +register = template.Library() + + +@register.inclusion_tag('catalogue/book_searched.html', takes_context=True) +def book_searched(context, result): + book = Book.objects.get(pk=result.book_id) + + # snippets = [] + # for hit in result.hits: + # if hit['snippets']: + # snippets.append(hit['snippets']) + # elif hit['fragment']: + # snippets.append(hit['fragment'].short_text) + + # We don't need hits which lead to sections but do not have + # snippets. + hits = filter(lambda (idx, h): + result.snippets[idx] is not None + or 'fragment' in h, enumerate(result.hits)) + # print "[tmpl: from %d hits selected %d]" % (len(result.hits), len(hits)) + + for (idx, hit) in hits: + # currently we generate one snipper per hit though. + if result.snippets[idx] is None: + continue + snip = result.snippets[idx] + # fix some formattting + snip = re.subn(r"(^[ \t\n]+|[ \t\n]+$)", u"", + re.subn(r"[ \t\n]*\n[ \t\n]*", u"\n", snip)[0])[0] + + snip = snip.replace("\n", "
                        ").replace('---', '—') + hit['snippet'] = snip + + return { + 'request': context['request'], + 'book': book, + 'hits': hits and zip(*hits)[1] or [] + } diff --git a/src/search/tests/__init__.py b/src/search/tests/__init__.py new file mode 100644 index 000000000..80c974e58 --- /dev/null +++ b/src/search/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from search.tests.index import * diff --git a/src/search/tests/index.py b/src/search/tests/index.py new file mode 100644 index 000000000..b8d44726f --- /dev/null +++ b/src/search/tests/index.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from unittest import skipIf +from django.conf import settings +from django.test.utils import override_settings +from catalogue.test_utils import WLTestCase, get_fixture +from os import path +import tempfile +from catalogue.models import Book, Tag +from search.index import Index, Search, SearchResult +import catalogue +import opds + + +@override_settings( + SEARCH_INDEX = tempfile.mkdtemp(prefix='djangotest_search_'), +) +@skipIf(getattr(settings, 'NO_SEARCH_INDEX', False), + u'Requires search server and NO_SEARCH_INDEX=False.') +class BookSearchTests(WLTestCase): + def setUp(self): + WLTestCase.setUp(self) + + index = Index() + self.search = Search() + index.delete_query(self.search.index.query(uid="*")) + index.index.commit() + + self.do_doktora = Book.from_xml_file( + get_fixture('do-doktora.xml', opds)) + self.do_anusie = Book.from_xml_file( + get_fixture('fraszka-do-anusie.xml', catalogue)) + + def test_search_perfect_book_author(self): + books = self.search.search_books(self.search.index.query(authors=u"sęp szarzyński")) + assert len(books) == 1 + assert books[0].id == self.do_anusie.id + + # here we lack slop functionality as well + def test_search_perfect_book_title(self): + books = self.search.search_books(self.search.index.query(title=u"fraszka do anusie")) + assert len(books) == 1 + assert books[0].id == self.do_anusie.id + + # TODO: Add slop option to sunburnt + # def test_search_perfect_parts(self): + # books = self.search.search_phrase(u"Jakoż hamować") + # assert len(books) == 2 + # for b in books: + # b.book_id == self.book.id + # a = SearchResult.aggregate(books) + # # just one fragment hit. + # assert len(a[0].hits) == 1 + diff --git a/src/search/urls.py b/src/search/urls.py new file mode 100644 index 000000000..d77d7220a --- /dev/null +++ b/src/search/urls.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + +urlpatterns = patterns('search.views', + url(r'^$', 'main', name='search'), + url(r'^hint/$', 'hint', name='search_hint'), +) + diff --git a/src/search/views.py b/src/search/views.py new file mode 100644 index 000000000..f7aa77cd9 --- /dev/null +++ b/src/search/views.py @@ -0,0 +1,255 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django.shortcuts import render_to_response, get_object_or_404 +from django.template import RequestContext +from django.views.decorators import cache +from django.http import HttpResponse, HttpResponseRedirect, Http404, HttpResponsePermanentRedirect, JsonResponse +from django.utils.translation import ugettext as _ + +from catalogue.utils import split_tags +from catalogue.models import Book, Tag, Fragment +from pdcounter.models import Author as PDCounterAuthor, BookStub as PDCounterBook +from search.index import Search, SearchResult +from suggest.forms import PublishingSuggestForm +import re +#import enchant +import json + + +def match_word_re(word): + if 'sqlite' in settings.DATABASES['default']['ENGINE']: + return r"\b%s\b" % word + elif 'mysql' in settings.DATABASES['default']['ENGINE']: + return "[[:<:]]%s[[:>:]]" % word + + +query_syntax_chars = re.compile(r"[\\/*:(){}]") + + +def remove_query_syntax_chars(query, replace=' '): + return query_syntax_chars.sub(' ', query) + + +def did_you_mean(query, tokens): + return query + # change = {} + # for t in tokens: + # authors = Tag.objects.filter(category='author', name__iregex=match_word_re(t)) + # if len(authors) > 0: + # continue + + # if False: + # if not dictionary.check(t): + # try: + # change_to = dictionary.suggest(t)[0].lower() + # if change_to != t.lower(): + # change[t] = change_to + # except IndexError: + # pass + + # if change == {}: + # return None + + # for frm, to in change.items(): + # query = query.replace(frm, to) + + # return query + + +@cache.never_cache +def hint(request): + prefix = request.GET.get('term', '') + if len(prefix) < 2: + return JsonResponse([], safe=False) + + prefix = remove_query_syntax_chars(prefix) + + search = Search() + # tagi beda ograniczac tutaj + # ale tagi moga byc na ksiazce i na fragmentach + # jezeli tagi dot tylko ksiazki, to wazne zeby te nowe byly w tej samej ksiazce + # jesli zas dotycza themes, to wazne, zeby byly w tym samym fragmencie. + + def is_dupe(tag): + if isinstance(tag, PDCounterAuthor): + if filter(lambda t: t.slug == tag.slug and t != tag, tags): + return True + elif isinstance(tag, PDCounterBook): + if filter(lambda b: b.slug == tag.slug, tags): + return True + return False + + def category_name(c): + if c.startswith('pd_'): + c = c[len('pd_'):] + return _(c) + + try: + limit = int(request.GET.get('max', '')) + except ValueError: + limit = -1 + else: + if limit < 1: + limit = -1 + + data = [] + + tags = search.hint_tags(prefix, pdcounter=True) + tags = filter(lambda t: not is_dupe(t), tags) + for t in tags: + if not limit: + break + limit -= 1 + data.append({ + 'label': t.name, + 'category': category_name(t.category), + 'id': t.id, + 'url': t.get_absolute_url() + }) + if limit: + books = search.hint_books(prefix) + for b in books: + if not limit: + break + limit -= 1 + data.append({ + 'label': b.title, + 'category': _('book'), + 'id': b.id, + 'url': b.get_absolute_url() + }) + + callback = request.GET.get('callback', None) + if callback: + return HttpResponse("%s(%s);" % (callback, json.dumps(data)), + content_type="application/json; charset=utf-8") + else: + return JsonResponse(data, safe=False) + + +@cache.never_cache +def main(request): + results = {} + + results = None + query = None + + query = request.GET.get('q', '') + + if len(query) < 2: + return render_to_response('catalogue/search_too_short.html', + {'prefix': query}, + context_instance=RequestContext(request)) + + query = remove_query_syntax_chars(query) + + search = Search() + + theme_terms = search.index.analyze(text=query, field="themes_pl") \ + + search.index.analyze(text=query, field="themes") + + # change hints + tags = search.hint_tags(query, pdcounter=True, prefix=False) + tags = split_tags(tags) + + author_results = search.search_phrase(query, 'authors', book=True) + translator_results = search.search_phrase(query, 'translators', book=True) + + title_results = search.search_phrase(query, 'title', book=True) + + # Boost main author/title results with mixed search, and save some of its results for end of list. + # boost author, title results + author_title_mixed = search.search_some(query, ['authors', 'translators', 'title', 'tags'], query_terms=theme_terms) + author_title_rest = [] + + for b in author_title_mixed: + also_in_mixed = filter(lambda ba: ba.book_id == b.book_id, author_results + translator_results + title_results) + for b2 in also_in_mixed: + b2.boost *= 1.1 + if also_in_mixed is []: + author_title_rest.append(b) + + # Do a phrase search but a term search as well - this can give us better snippets then search_everywhere, + # Because the query is using only one field. + text_phrase = SearchResult.aggregate( + search.search_phrase(query, 'text', snippets=True, book=False), + search.search_some(query, ['text'], snippets=True, book=False, query_terms=theme_terms)) + + everywhere = search.search_everywhere(query, query_terms=theme_terms) + + def already_found(results): + def f(e): + for r in results: + if e.book_id == r.book_id: + e.boost = 0.9 + results.append(e) + return True + return False + return f + f = already_found(author_results + translator_results + title_results + text_phrase) + everywhere = filter(lambda x: not f(x), everywhere) + + author_results = SearchResult.aggregate(author_results) + translator_results = SearchResult.aggregate(translator_results) + title_results = SearchResult.aggregate(title_results) + + everywhere = SearchResult.aggregate(everywhere, author_title_rest) + + for field, res in [('authors', author_results), + ('translators', translator_results), + ('title', title_results), + ('text', text_phrase), + ('text', everywhere)]: + res.sort(reverse=True) + for r in res: + search.get_snippets(r, query, field, 3) + + suggestion = u'' + + def ensure_exists(r): + try: + return r.book + except Book.DoesNotExist: + return False + + author_results = filter(ensure_exists, author_results) + translator_results = filter(ensure_exists, translator_results) + title_results = filter(ensure_exists, title_results) + text_phrase = filter(ensure_exists, text_phrase) + everywhere = filter(ensure_exists, everywhere) + + results = author_results + translator_results + title_results + text_phrase + everywhere + # ensure books do exists & sort them + for res in (author_results, translator_results, title_results, text_phrase, everywhere): + res.sort(reverse=True) + + # We don't want to redirect to book text, but rather display result page even with one result. + # if len(results) == 1: + # fragment_hits = filter(lambda h: 'fragment' in h, results[0].hits) + # if len(fragment_hits) == 1: + # #anchor = fragment_hits[0]['fragment'] + # #frag = Fragment.objects.get(anchor=anchor) + # return HttpResponseRedirect(fragment_hits[0]['fragment'].get_absolute_url()) + # return HttpResponseRedirect(results[0].book.get_absolute_url()) + if len(results) == 0: + form = PublishingSuggestForm(initial={"books": query + ", "}) + return render_to_response('catalogue/search_no_hits.html', + {'tags': tags, + 'prefix': query, + "form": form, + 'did_you_mean': suggestion}, + context_instance=RequestContext(request)) + + return render_to_response('catalogue/search_multiple_hits.html', + {'tags': tags, + 'prefix': query, + 'results': {'author': author_results, + 'translator': translator_results, + 'title': title_results, + 'content': text_phrase, + 'other': everywhere}, + 'did_you_mean': suggestion}, + context_instance=RequestContext(request)) diff --git a/src/social/__init__.py b/src/social/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/social/admin.py b/src/social/admin.py new file mode 100755 index 000000000..3da4ae8c0 --- /dev/null +++ b/src/social/admin.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin +from django.utils.translation import ugettext_lazy as _ + +from social.models import Cite + + +class CiteAdmin(admin.ModelAdmin): + list_display = ['nonempty_text', 'sticky', 'vip', 'small', 'has_image'] + fieldsets = ( + (None, {'fields': ('book', 'text', 'small', 'vip', 'link', 'sticky')}), + ( + _('Background'), + {'fields': ('image', 'image_shift', 'image_title', 'image_author', + 'image_link', 'image_license', 'image_license_link') + } + ) + ) + + def nonempty_text(self, cite): + if cite.text.strip(): + return cite.text + return "(%s)" % (cite.image_title.strip() or cite.link) + nonempty_text.short_description = _('text') + + def has_image(self, cite): + return bool(cite.image) + has_image.short_description = _('image') + has_image.boolean = True + + +admin.site.register(Cite, CiteAdmin) diff --git a/src/social/forms.py b/src/social/forms.py new file mode 100755 index 000000000..5834ffa24 --- /dev/null +++ b/src/social/forms.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import forms +from django.utils.translation import ugettext_lazy as _ + +from catalogue.models import Tag +from catalogue import utils +from social.utils import get_set, set_sets + + +class UserSetsForm(forms.Form): + def __init__(self, book, user, *args, **kwargs): + super(UserSetsForm, self).__init__(*args, **kwargs) + self.fields['set_ids'] = forms.ChoiceField( + choices=[(tag.id, tag.name) for tag in + Tag.objects.filter(category='set', user=user).iterator()], + ) + + +class ObjectSetsForm(forms.Form): + tags = forms.CharField(label=_('Tags (comma-separated)'), required=False, + widget=forms.Textarea()) + + def __init__(self, obj, user, *args, **kwargs): + self._obj = obj + self._user = user + data = kwargs.setdefault('data', {}) + if 'tags' not in data and user.is_authenticated(): + data['tags'] = ', '.join(t.name + for t in obj.tags.filter(category='set', user=user).iterator() if t.name) + super(ObjectSetsForm, self).__init__(*args, **kwargs) + + def save(self, request): + tags = [get_set(self._user, tag_name.strip()) + for tag_name in self.cleaned_data['tags'].split(',')] + set_sets(self._user, self._obj, tags) + return {"like": True} + + +class NewSetForm(forms.Form): + name = forms.CharField(max_length=50, required=True) + + def __init__(self, *args, **kwargs): + super(NewSetForm, self).__init__(*args, **kwargs) + self.fields['name'].widget.attrs['title'] = _('Name of the new shelf') + + def save(self, user, commit=True): + name = self.cleaned_data['name'] + new_set = Tag(name=name, slug=utils.get_random_hash(name), sort_key=name.lower(), + category='set', user=user) + + new_set.save() + return new_set diff --git a/src/social/locale/pl/LC_MESSAGES/django.mo b/src/social/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..8b72b7b4c Binary files /dev/null and b/src/social/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/social/locale/pl/LC_MESSAGES/django.po b/src/social/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..a3053f7fe --- /dev/null +++ b/src/social/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,127 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-01-24 10:06+0100\n" +"PO-Revision-Date: 2014-01-24 10:06+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \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%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 1.5.4\n" + +#: admin.py:16 +msgid "Background" +msgstr "Obraz tła" + +#: admin.py:25 models.py:22 +msgid "image" +msgstr "obraz" + +#: forms.py:23 +msgid "Tags (comma-separated)" +msgstr "Tagi (rozdzielone przecinkami)" + +#: forms.py:47 +msgid "Name of the new shelf" +msgstr "Nazwa nowej półki" + +#: models.py:13 +msgid "book" +msgstr "książka" + +#: models.py:14 +msgid "text" +msgstr "tekst" + +#: models.py:15 +msgid "small" +msgstr "mały" + +#: models.py:16 +msgid "Make this cite display smaller." +msgstr "Sprawia, że cytat wyświetla się mniejszym fontem." + +#: models.py:17 +msgid "VIP" +msgstr "VIP" + +#: models.py:18 models.py:31 +msgid "link" +msgstr "odnośnik" + +#: models.py:19 +msgid "sticky" +msgstr "przyklejony" + +#: models.py:20 +msgid "Sticky cites will take precedense." +msgstr "Przyklejone cytaty mają pierwszeństwo." + +#: models.py:24 +msgid "Best image is exactly 975px wide and weights under 100kB." +msgstr "Najlepszy obraz ma szerokość 975px i waży poniżej 100kB." + +#: models.py:25 +msgid "shift" +msgstr "przesunięcie" + +#: models.py:26 +msgid "" +"Vertical shift, in percents. 0 means top, 100 is bottom. Default is 50%." +msgstr "" +"Przesunięcie w pionie, w procentach. 0 to wyrównanie do górnej krawędzi, 100 " +"do dolnej. Domyślne jest 50%." + +#: models.py:27 +msgid "title" +msgstr "tytuł" + +#: models.py:29 +msgid "author" +msgstr "autor" + +#: models.py:32 +msgid "license name" +msgstr "nazwa licencji" + +#: models.py:34 +msgid "license link" +msgstr "adres licencji" + +#: models.py:38 +msgid "cite" +msgstr "cytat" + +#: models.py:39 +msgid "cites" +msgstr "cytaty" + +#: templates/social/cite_promo.html:6 +msgid "recommends" +msgstr "poleca" + +#: templates/social/my_shelf.html:5 templates/social/my_shelf.html.py:11 +msgid "My shelf" +msgstr "Moja półka" + +#: templates/social/my_shelf.html:16 +msgid "" +"Add works to your shelf by clicking on the star on the page of the work. The " +"work will then show up on My shelf page." +msgstr "" +"Aby dodać pozycję do swojej półki, należy zaznaczyć gwiazdkę znajdującą się " +"na stronie utworu. Po jej zaznaczeniu publikacja pojawi się w zakładce Moja " +"półka." + +#: templates/social/sets_form.html:7 +msgid "Remove from my shelf" +msgstr "Usuń z mojej półki" diff --git a/src/social/migrations/0001_initial.py b/src/social/migrations/0001_initial.py new file mode 100644 index 000000000..2ad4a681d --- /dev/null +++ b/src/social/migrations/0001_initial.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Cite', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('text', models.TextField(verbose_name='text')), + ('small', models.BooleanField(default=False, help_text='Make this cite display smaller.', verbose_name='small')), + ('vip', models.CharField(max_length=128, null=True, verbose_name='VIP', blank=True)), + ('link', models.URLField(verbose_name='link')), + ('sticky', models.BooleanField(default=False, help_text='Sticky cites will take precedense.', db_index=True, verbose_name='sticky')), + ('image', models.ImageField(help_text='Best image is exactly 975px wide and weights under 100kB.', upload_to=b'social/cite', null=True, verbose_name='image', blank=True)), + ('image_shift', models.IntegerField(help_text='Vertical shift, in percents. 0 means top, 100 is bottom. Default is 50%.', null=True, verbose_name='shift', blank=True)), + ('image_title', models.CharField(max_length=255, null=True, verbose_name='Title', blank=True)), + ('image_author', models.CharField(max_length=255, null=True, verbose_name='author', blank=True)), + ('image_link', models.URLField(null=True, verbose_name='link', blank=True)), + ('image_license', models.CharField(max_length=255, null=True, verbose_name='license name', blank=True)), + ('image_license_link', models.URLField(null=True, verbose_name='license link', blank=True)), + ('book', models.ForeignKey(verbose_name='book', blank=True, to='catalogue.Book', null=True)), + ], + options={ + 'ordering': ('vip', 'text'), + 'verbose_name': 'cite', + 'verbose_name_plural': 'cites', + }, + bases=(models.Model,), + ), + ] diff --git a/src/social/migrations/0002_auto_20151221_1225.py b/src/social/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..f26e4f8fc --- /dev/null +++ b/src/social/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('social', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='cite', + name='image_title', + field=models.CharField(max_length=255, null=True, verbose_name='title', blank=True), + ), + ] diff --git a/src/social/migrations/__init__.py b/src/social/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/social/models.py b/src/social/models.py new file mode 100644 index 000000000..890280774 --- /dev/null +++ b/src/social/models.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from django.conf import settings +from django.core.urlresolvers import reverse +from ssify import flush_ssi_includes +from catalogue.models import Book + + +class Cite(models.Model): + book = models.ForeignKey(Book, verbose_name=_('book'), null=True, blank=True) + text = models.TextField(_('text')) + small = models.BooleanField(_('small'), default=False, + help_text=_('Make this cite display smaller.')) + vip = models.CharField(_('VIP'), max_length=128, null=True, blank=True) + link = models.URLField(_('link')) + sticky = models.BooleanField(_('sticky'), default=False, db_index=True, + help_text=_('Sticky cites will take precedense.')) + + image = models.ImageField(_('image'), upload_to='social/cite', + null=True, blank=True, + help_text=_('Best image is exactly 975px wide and weights under 100kB.')) + image_shift = models.IntegerField(_('shift'), null=True, blank=True, + help_text=_(u'Vertical shift, in percents. 0 means top, 100 is bottom. Default is 50%.')) + image_title = models.CharField(_('title'), max_length=255, + null=True, blank=True) + image_author = models.CharField(_('author'), + max_length=255, blank=True, null=True) + image_link = models.URLField(_('link'), blank=True, null=True) + image_license = models.CharField(_('license name'), + max_length=255, blank=True, null=True) + image_license_link = models.URLField(_('license link'), blank=True, null=True) + + class Meta: + ordering = ('vip', 'text') + verbose_name = _('cite') + verbose_name_plural = _('cites') + + def __unicode__(self): + return u"%s: %s…" % (self.vip, self.text[:60]) + + def get_absolute_url(self): + """This is used for testing.""" + return "%s?choose_cite=%d" % (reverse('main_page'), self.id) + + def save(self, *args, **kwargs): + ret = super(Cite, self).save(*args, **kwargs) + self.flush_includes() + return ret + + def flush_includes(self): + flush_ssi_includes([ + template % (self.pk, lang) + for template in [ + '/ludzie/cite/%s.%s.html', + '/ludzie/cite_main/%s.%s.html', + ] + for lang in [lc for (lc, _ln) in settings.LANGUAGES]] + + ['/ludzie/cite_info/%s.html' % self.pk]) diff --git a/src/social/templates/social/cite_info.html b/src/social/templates/social/cite_info.html new file mode 100644 index 000000000..8f8e16d11 --- /dev/null +++ b/src/social/templates/social/cite_info.html @@ -0,0 +1,19 @@ +{% spaceless %} + +{% if cite.image %} + {% if cite.image_link %}{% endif %} + {% if cite.image_title %} + {{ cite.image_title }}{% else %} + untitled{% endif %}{% if cite.image_link %}{% endif %}{% if cite.image_author %}, + {{ cite.image_author }}{% endif %}{% if cite.image_license %}, + {% if cite.image_license_link %}{% endif %} + {{ cite.image_license }} + {% if cite.image_license_link %}{% endif %} + {% endif %} +{% else %} + books about architecture, + saikofish@Flickr, + CC BY NC SA. +{% endif %} + +{% endspaceless %} diff --git a/src/social/templates/social/cite_promo.html b/src/social/templates/social/cite_promo.html new file mode 100755 index 000000000..15786cf3b --- /dev/null +++ b/src/social/templates/social/cite_promo.html @@ -0,0 +1,30 @@ +{% spaceless %} + +{% load i18n %} + +{% if main %} +
                        +{% endif %} + +{% if cite %} + + + {% if cite.vip %} +

                        {{ cite.vip }} {% trans "recommends" %}:

                        + {% endif %} +
                        + {{ cite.text|linebreaksbr|safe }} +
                        + {% if cite.book %} +

                        {{ cite.book.pretty_title }}

                        + {% endif %} +
                        + +{% endif %} + + +{% if main %} +
                        +{% endif %} + +{% endspaceless %} \ No newline at end of file diff --git a/src/social/templates/social/my_shelf.html b/src/social/templates/social/my_shelf.html new file mode 100755 index 000000000..f448ad220 --- /dev/null +++ b/src/social/templates/social/my_shelf.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} + +{% block titleextra %}{% trans "My shelf" %}{% endblock %} + +{% block logout %}/{% endblock %} + +{% block body %} + +

                        {% trans "My shelf" %}

                        + + {% work_list books %} + + {% if not books %} + {% trans "Add works to your shelf by clicking on the star on the page of the work. The work will then show up on My shelf page." %} + {# trans "Aby dodać pozycję do swojej półki, należy zaznaczyć gwiazdkę znajdującą się na stronie utworu. Po jej zaznaczeniu publikacja pojawi się w zakładce Moja półka" #} + {% endif %} +{% endblock %} diff --git a/src/social/templates/social/sets_form.html b/src/social/templates/social/sets_form.html new file mode 100755 index 000000000..5974a2a71 --- /dev/null +++ b/src/social/templates/social/sets_form.html @@ -0,0 +1,19 @@ +{% load i18n %} +{% load ssi_csrf_token from ssify %} +

                        {{ title }}

                        + +
                        +{% ssi_csrf_token %} + +
                        + +
                        +{% ssi_csrf_token %} +
                          +
                          + {{ form.as_ul }} +
                        1. +
                        +
                        diff --git a/src/social/templates/social/shelf_tags.html b/src/social/templates/social/shelf_tags.html new file mode 100755 index 000000000..2baa0f007 --- /dev/null +++ b/src/social/templates/social/shelf_tags.html @@ -0,0 +1,9 @@ +{% spaceless %} + + + +{% endspaceless %} \ No newline at end of file diff --git a/src/social/templatetags/__init__.py b/src/social/templatetags/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/src/social/templatetags/social_tags.py b/src/social/templatetags/social_tags.py new file mode 100755 index 000000000..7065467b4 --- /dev/null +++ b/src/social/templatetags/social_tags.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from random import randint +from django.db.models import Q +from django import template +from django.utils.functional import lazy +from django.utils.cache import add_never_cache_headers +from catalogue.models import Book, Tag +from ssify import ssi_variable +from ssify.utils import ssi_vary_on_cookie +from social.models import Cite +from social.utils import likes, cites_for_tags + +register = template.Library() + + +@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) +def likes_book(request, book_id): + return likes(request.user, Book.objects.get(pk=book_id), request) + + +def choose_cite(request, book_id=None, tag_ids=None): + """Choose a cite for main page, for book or for set of tags.""" + try: + assert request.user.is_staff + assert 'choose_cite' in request.GET + cite = Cite.objects.get(pk=request.GET['choose_cite']) + except (AssertionError, Cite.DoesNotExist): + if book_id is not None: + cites = Cite.objects.filter(Q(book=book_id) | Q(book__ancestor=book_id)) + elif tag_ids is not None: + tags = Tag.objects.filter(pk__in=tag_ids) + cites = cites_for_tags(tags) + else: + cites = Cite.objects.all() + stickies = cites.filter(sticky=True) + count = stickies.count() + if count: + cite = stickies[randint(0, count - 1)] + else: + count = cites.count() + if count: + cite = cites[randint(0, count - 1)] + else: + cite = None + return cite + + +@ssi_variable(register, name='choose_cite', patch_response=[add_never_cache_headers]) +def choose_cite_tag(request, book_id=None, tag_ids=None): + cite = choose_cite(request, book_id, tag_ids) + return cite.pk if cite is not None else None + + +@register.inclusion_tag('social/cite_promo.html') +def render_cite(cite): + return { + 'cite': cite, + } + + +@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) +def book_shelf_tags(request, book_id): + if not request.user.is_authenticated(): + return None + book = Book.objects.get(pk=book_id) + lks = likes(request.user, book, request) + def get_value(): + if not lks: + return '' + tags = book.tags.filter(category='set', user=request.user).exclude(name='') + if not tags: + return '' + ctx = {'tags': tags} + return template.loader.render_to_string('social/shelf_tags.html', ctx) + return lazy(get_value, unicode)() diff --git a/src/social/urls.py b/src/social/urls.py new file mode 100755 index 000000000..3642d91da --- /dev/null +++ b/src/social/urls.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url +from django.views.decorators.cache import never_cache +from social.views import ObjectSetsFormView + +urlpatterns = patterns('social.views', + url(r'^lektura/(?P[a-z0-9-]+)/lubie/$', 'like_book', name='social_like_book'), + url(r'^lektura/(?P[a-z0-9-]+)/nie_lubie/$', 'unlike_book', name='social_unlike_book'), + url(r'^lektura/(?P[a-z0-9-]+)/polki/$', never_cache(ObjectSetsFormView()), name='social_book_sets'), + url(r'^polka/$', 'my_shelf', name='social_my_shelf'), + + # Includes + url(r'^cite/(?P\d+)\.(?P.+)\.html$', 'cite', name='social_cite'), + url(r'^cite_main/(?P\d+)\.(?P.+)\.html$', 'cite', {'main': True}, name='social_cite_main'), + url(r'^cite_info/(?P\d+).html$', 'cite_info', name='social_cite_info'), + + #~ url(r'^polki/(?P[a-zA-Z0-9-]+)/formaty/$', 'shelf_book_formats', name='shelf_book_formats'), + #~ url(r'^polki/(?P[a-zA-Z0-9-]+)/(?P%s)/usun$' % SLUG, 'remove_from_shelf', name='remove_from_shelf'), + #~ url(r'^polki/$', 'user_shelves', name='user_shelves'), + #~ url(r'^polki/(?P[a-zA-Z0-9-]+)/usun/$', 'delete_shelf', name='delete_shelf'), + #~ url(r'^polki/(?P[a-zA-Z0-9-]+)\.zip$', 'download_shelf', name='download_shelf'), + #~ url(r'^polki/nowa/$', 'new_set', name='new_set'), +) diff --git a/src/social/utils.py b/src/social/utils.py new file mode 100755 index 000000000..bf1c24229 --- /dev/null +++ b/src/social/utils.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from collections import defaultdict +from django.contrib.contenttypes.models import ContentType +from django.db.models import Q +from django.utils.functional import lazy +from catalogue.models import Book, Tag +from catalogue import utils +from catalogue.tasks import touch_tag +from social.models import Cite + + +def likes(user, work, request=None): + if not user.is_authenticated(): + return False + + if request is None: + return work.tags.filter(category='set', user=user).exists() + + if not hasattr(request, 'social_likes'): + # tuple: unchecked, checked, liked + request.social_likes = defaultdict(lambda:(set(), set(), set())) + + ct = ContentType.objects.get_for_model(type(work)) + likes_t = request.social_likes[ct.pk] + if work.pk in likes_t[1]: + return work.pk in likes_t[2] + else: + likes_t[0].add(work.pk) + def _likes(): + if likes_t[0]: + ids = tuple(likes_t[0]) + likes_t[0].clear() + likes_t[2].update(Tag.intermediary_table_model.objects.filter( + content_type_id=ct.pk, tag__user_id=user.pk, + object_id__in=ids + ).distinct().values_list('object_id', flat=True)) + likes_t[1].update(ids) + return work.pk in likes_t[2] + return lazy(_likes, bool)() + + +def get_set(user, name): + """Returns a tag for use by the user. Creates it, if necessary.""" + try: + tag = Tag.objects.get(category='set', user=user, name=name) + except Tag.DoesNotExist: + tag = Tag.objects.create(category='set', user=user, name=name, + slug=utils.get_random_hash(name), sort_key=name.lower()) + return tag + + +def set_sets(user, work, sets): + """Set tags used for given work by a given user.""" + + old_sets = list(work.tags.filter(category='set', user=user)) + + work.tags = sets + list( + work.tags.filter(~Q(category='set') | ~Q(user=user))) + + for shelf in [shelf for shelf in old_sets if shelf not in sets]: + touch_tag(shelf) + for shelf in [shelf for shelf in sets if shelf not in old_sets]: + touch_tag(shelf) + + # delete empty tags + Tag.objects.filter(category='set', user=user, items=None).delete() + + +def cites_for_tags(tags): + """Returns a QuerySet with all Cites for books with given tags.""" + return Cite.objects.filter(book__in=Book.tagged.with_all(tags)) diff --git a/src/social/views.py b/src/social/views.py new file mode 100644 index 000000000..49c9b708a --- /dev/null +++ b/src/social/views.py @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.shortcuts import render, get_object_or_404, redirect +from django.http import HttpResponseForbidden, JsonResponse +from django.contrib.auth.decorators import login_required +from django.views.decorators.http import require_POST + +from ajaxable.utils import AjaxableFormView + +from catalogue.models import Book +from ssify import ssi_included +from social import forms +from .models import Cite +from social.utils import get_set, likes, set_sets + + +# ==================== +# = Shelf management = +# ==================== + + +@require_POST +def like_book(request, slug): + if not request.user.is_authenticated(): + return HttpResponseForbidden('Login required.') + book = get_object_or_404(Book, slug=slug) + if not likes(request.user, book): + tag = get_set(request.user, '') + set_sets(request.user, book, [tag]) + + if request.is_ajax(): + return JsonResponse({"success": True, "msg": "ok", "like": True}) + else: + return redirect(book) + + +@login_required +def my_shelf(request): + books = Book.tagged.with_any(request.user.tag_set.all()) + return render(request, 'social/my_shelf.html', locals()) + + +class ObjectSetsFormView(AjaxableFormView): + form_class = forms.ObjectSetsForm + placeholdize = True + template = 'social/sets_form.html' + ajax_redirect = True + POST_login = True + + def get_object(self, request, slug): + return get_object_or_404(Book, slug=slug) + + def context_description(self, request, obj): + return obj.pretty_title() + + def form_args(self, request, obj): + return (obj, request.user), {} + + +@require_POST +def unlike_book(request, slug): + if not request.user.is_authenticated(): + return HttpResponseForbidden('Login required.') + book = get_object_or_404(Book, slug=slug) + if likes(request.user, book): + set_sets(request.user, book, []) + + if request.is_ajax(): + return JsonResponse({"success": True, "msg": "ok", "like": False}) + else: + return redirect(book) + + +@ssi_included +def cite(request, pk, main=False): + cite = get_object_or_404(Cite, pk=pk) + return render(request, 'social/cite_promo.html', { + 'main': main, + 'cite': cite, + }) + + +@ssi_included(use_lang=False) +def cite_info(request, pk): + cite = get_object_or_404(Cite, pk=pk) + return render(request, 'social/cite_info.html', { + 'cite': cite, + }) diff --git a/src/sortify.py b/src/sortify.py new file mode 100644 index 000000000..642a5403f --- /dev/null +++ b/src/sortify.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +import re +from fnpdjango.utils.text.slughifi import char_map + + +# Specifies diacritics order. +# Default order is zero, max is 9 +char_order = { + u'ż': 1, u'Ż': 1, +} + + +def replace_char(m): + char = m.group() + if char_map.has_key(char): + order = char_order.get(char, 0) + return "%s~%d" % (char_map[char], order) + else: + return char + + +def sortify(value): + """ + Turns Unicode into ASCII-sortable str + + Examples : + + >>> sortify('a a') < sortify('aa') < sortify('ą') < sortify('b') + True + + >>> sortify('ź') < sortify('ż') + True + + """ + + if not isinstance(value, unicode): + value = unicode(value, 'utf-8') + + # try to replace chars + value = re.sub('[^a-zA-Z0-9\\s\\-]{1}', replace_char, value) + value = value.lower() + value = re.sub(r'[^a-z0-9~]+', ' ', value) + + return value.encode('ascii', 'ignore') diff --git a/src/sponsors/__init__.py b/src/sponsors/__init__.py new file mode 100644 index 000000000..f6a851dc5 --- /dev/null +++ b/src/sponsors/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +__author__ = u'Marek Stępniowski, ' +__version__ = '0.1' diff --git a/src/sponsors/admin.py b/src/sponsors/admin.py new file mode 100644 index 000000000..274fe901e --- /dev/null +++ b/src/sponsors/admin.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin +from jsonfield import JSONField +from sponsors import models +from sponsors import widgets + + +class SponsorAdmin(admin.ModelAdmin): + list_display = ('name',) + search_fields = ('name',) + ordering = ('name',) + + +class SponsorPageAdmin(admin.ModelAdmin): + formfield_overrides = { + JSONField: {'widget': widgets.SponsorPageWidget}, + } + list_display = ('name',) + search_fields = ('name',) + ordering = ('name',) + + +admin.site.register(models.Sponsor, SponsorAdmin) +admin.site.register(models.SponsorPage, SponsorPageAdmin) diff --git a/src/sponsors/locale/de/LC_MESSAGES/django.mo b/src/sponsors/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..f6cebe39b Binary files /dev/null and b/src/sponsors/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/de/LC_MESSAGES/django.po b/src/sponsors/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..1b8dc02d9 --- /dev/null +++ b/src/sponsors/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2010-06-23 11:48+0100\n" +"Last-Translator: Iwona Fiałkowska \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "Name" + +#: models.py:22 +msgid "description" +msgstr "Beschreibung" + +#: models.py:23 +msgid "logo" +msgstr "Logo" + +#: models.py:24 +msgid "url" +msgstr "URL" + +#: models.py:38 +msgid "sponsors" +msgstr "Sponsoren" diff --git a/src/sponsors/locale/en/LC_MESSAGES/django.mo b/src/sponsors/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..158ec2c73 Binary files /dev/null and b/src/sponsors/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/en/LC_MESSAGES/django.po b/src/sponsors/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..48676958f --- /dev/null +++ b/src/sponsors/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 20:05+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "name" + +#: models.py:22 +msgid "description" +msgstr "description" + +#: models.py:23 +msgid "logo" +msgstr "logo" + +#: models.py:24 +msgid "url" +msgstr "url" + +#: models.py:38 +msgid "sponsors" +msgstr "sponsors" diff --git a/src/sponsors/locale/es/LC_MESSAGES/django.mo b/src/sponsors/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..3e9d45667 Binary files /dev/null and b/src/sponsors/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/es/LC_MESSAGES/django.po b/src/sponsors/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..624e3f620 --- /dev/null +++ b/src/sponsors/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-28 12:01+0100\n" +"Last-Translator: Aneta \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "nombre" + +#: models.py:22 +msgid "description" +msgstr "descripción" + +#: models.py:23 +msgid "logo" +msgstr "logotipo" + +#: models.py:24 +msgid "url" +msgstr "url" + +#: models.py:38 +msgid "sponsors" +msgstr "patrocinadores" diff --git a/src/sponsors/locale/fr/LC_MESSAGES/django.mo b/src/sponsors/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..640e20521 Binary files /dev/null and b/src/sponsors/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/fr/LC_MESSAGES/django.po b/src/sponsors/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..d30e7605a --- /dev/null +++ b/src/sponsors/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-22 21:00+0100\n" +"Last-Translator: Ela Janota \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "nom" + +#: models.py:22 +msgid "description" +msgstr "description" + +#: models.py:23 +msgid "logo" +msgstr "logo" + +#: models.py:24 +msgid "url" +msgstr "url" + +#: models.py:38 +msgid "sponsors" +msgstr "sponsors" diff --git a/src/sponsors/locale/it/LC_MESSAGES/django.mo b/src/sponsors/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..1f8c95660 Binary files /dev/null and b/src/sponsors/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/it/LC_MESSAGES/django.po b/src/sponsors/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..d93d9fe79 --- /dev/null +++ b/src/sponsors/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-21 17:43+0100\n" +"Last-Translator: xxxx\n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "nome" + +#: models.py:22 +msgid "description" +msgstr "descrizione" + +#: models.py:23 +msgid "logo" +msgstr "logo" + +#: models.py:24 +msgid "url" +msgstr "url" + +#: models.py:38 +msgid "sponsors" +msgstr "gli sponsor" diff --git a/src/sponsors/locale/jp/LC_MESSAGES/django.mo b/src/sponsors/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c9739db34 Binary files /dev/null and b/src/sponsors/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/jp/LC_MESSAGES/django.po b/src/sponsors/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..9ecfa8db2 --- /dev/null +++ b/src/sponsors/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "" + +#: models.py:22 +msgid "description" +msgstr "" + +#: models.py:23 +msgid "logo" +msgstr "" + +#: models.py:24 +msgid "url" +msgstr "" + +#: models.py:38 +msgid "sponsors" +msgstr "" diff --git a/src/sponsors/locale/lt/LC_MESSAGES/django.mo b/src/sponsors/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..d6b7271df Binary files /dev/null and b/src/sponsors/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/lt/LC_MESSAGES/django.po b/src/sponsors/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..cf009fe85 --- /dev/null +++ b/src/sponsors/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-01 16:13+0100\n" +"Last-Translator: Aneta\n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "pavadinimas" + +#: models.py:22 +msgid "description" +msgstr "aprašymas" + +#: models.py:23 +msgid "logo" +msgstr "logotipas" + +#: models.py:24 +msgid "url" +msgstr "url" + +#: models.py:38 +msgid "sponsors" +msgstr "rėmėjai" diff --git a/src/sponsors/locale/pl/LC_MESSAGES/django.mo b/src/sponsors/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..7776cb4e1 Binary files /dev/null and b/src/sponsors/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/pl/LC_MESSAGES/django.po b/src/sponsors/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..54ae8ca3c --- /dev/null +++ b/src/sponsors/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2010-05-19 16:18\n" +"Last-Translator: \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "nazwa" + +#: models.py:22 +msgid "description" +msgstr "opis" + +#: models.py:23 +msgid "logo" +msgstr "logo" + +#: models.py:24 +msgid "url" +msgstr "url" + +#: models.py:38 +msgid "sponsors" +msgstr "sponsorzy" diff --git a/src/sponsors/locale/ru/LC_MESSAGES/django.mo b/src/sponsors/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..0a1946f76 Binary files /dev/null and b/src/sponsors/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/ru/LC_MESSAGES/django.po b/src/sponsors/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..cd162751b --- /dev/null +++ b/src/sponsors/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 22:11+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "Ф.И.О./название" + +#: models.py:22 +msgid "description" +msgstr "описание" + +#: models.py:23 +msgid "logo" +msgstr "логотип" + +#: models.py:24 +msgid "url" +msgstr "url" + +#: models.py:38 +msgid "sponsors" +msgstr "покровители" diff --git a/src/sponsors/locale/uk/LC_MESSAGES/django.mo b/src/sponsors/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..8236e6024 Binary files /dev/null and b/src/sponsors/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/uk/LC_MESSAGES/django.po b/src/sponsors/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..aaf57266b --- /dev/null +++ b/src/sponsors/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 17:30+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "назва" + +#: models.py:22 +msgid "description" +msgstr "опис" + +#: models.py:23 +msgid "logo" +msgstr "логотип" + +#: models.py:24 +msgid "url" +msgstr "url" + +#: models.py:38 +msgid "sponsors" +msgstr "спонсори" diff --git a/src/sponsors/migrations/0001_initial.py b/src/sponsors/migrations/0001_initial.py new file mode 100644 index 000000000..d672e846a --- /dev/null +++ b/src/sponsors/migrations/0001_initial.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import jsonfield.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Sponsor', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=120, verbose_name='name')), + ('_description', models.CharField(max_length=255, verbose_name='Description', blank=True)), + ('logo', models.ImageField(upload_to=b'sponsorzy/sponsor/logo', verbose_name='logo')), + ('url', models.URLField(verbose_name='url', blank=True)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='SponsorPage', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=120, verbose_name='name')), + ('sponsors', jsonfield.fields.JSONField(default={}, verbose_name='sponsors')), + ('_html', models.TextField(editable=False, blank=True)), + ('sprite', models.ImageField(upload_to=b'sponsorzy/sprite', blank=True)), + ], + options={ + }, + bases=(models.Model,), + ), + ] diff --git a/src/sponsors/migrations/0002_auto_20151221_1225.py b/src/sponsors/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..0110a8896 --- /dev/null +++ b/src/sponsors/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sponsors', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='sponsor', + name='_description', + field=models.CharField(max_length=255, verbose_name='description', blank=True), + ), + ] diff --git a/src/sponsors/migrations/__init__.py b/src/sponsors/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/sponsors/models.py b/src/sponsors/models.py new file mode 100644 index 000000000..0565b9744 --- /dev/null +++ b/src/sponsors/models.py @@ -0,0 +1,107 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import json +import time +from StringIO import StringIO +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from django.template.loader import render_to_string +from PIL import Image + +from jsonfield import JSONField +from django.core.files.base import ContentFile +from ssify import flush_ssi_includes + +THUMB_WIDTH = 120 +THUMB_HEIGHT = 120 + + +class Sponsor(models.Model): + name = models.CharField(_('name'), max_length=120) + _description = models.CharField(_('description'), blank=True, max_length=255) + logo = models.ImageField(_('logo'), upload_to='sponsorzy/sponsor/logo') + url = models.URLField(_('url'), blank=True) + + def __unicode__(self): + return self.name + + def description(self): + if len(self._description): + return self._description + else: + return self.name + + +class SponsorPage(models.Model): + name = models.CharField(_('name'), max_length=120) + sponsors = JSONField(_('sponsors'), default={}) + _html = models.TextField(blank=True, editable=False) + sprite = models.ImageField(upload_to='sponsorzy/sprite', blank=True) + + def populated_sponsors(self): + result = [] + offset = 0 + for column in self.sponsors: + result_group = {'name': column['name'], 'sponsors': []} + sponsor_objects = Sponsor.objects.in_bulk(column['sponsors']) + for sponsor_pk in column['sponsors']: + try: + result_group['sponsors'].append((offset, sponsor_objects[sponsor_pk])) + offset -= THUMB_HEIGHT + except KeyError: + pass + result.append(result_group) + return result + + def render_sprite(self): + sponsor_ids = [] + for column in self.sponsors: + sponsor_ids.extend(column['sponsors']) + sponsors = Sponsor.objects.in_bulk(sponsor_ids) + sprite = Image.new('RGBA', (THUMB_WIDTH, len(sponsors) * THUMB_HEIGHT)) + for i, sponsor_id in enumerate(sponsor_ids): + simg = Image.open(sponsors[sponsor_id].logo.path) + if simg.size[0] > THUMB_WIDTH or simg.size[1] > THUMB_HEIGHT: + size = ( + min(THUMB_WIDTH, + simg.size[0] * THUMB_HEIGHT / simg.size[1]), + min(THUMB_HEIGHT, + simg.size[1] * THUMB_WIDTH / simg.size[0]) + ) + simg = simg.resize(size, Image.ANTIALIAS) + sprite.paste(simg, ( + (THUMB_WIDTH - simg.size[0]) / 2, + i * THUMB_HEIGHT + (THUMB_HEIGHT - simg.size[1]) / 2, + )) + imgstr = StringIO() + sprite.save(imgstr, 'png') + + if self.sprite: + self.sprite.delete(save=False) + self.sprite.save('sponsorzy/sprite/%s-%d.png' % (self.name, time.time()), ContentFile(imgstr.getvalue()), save=False) + + def html(self): + return self._html + html = property(fget=html) + + def save(self, *args, **kwargs): + if isinstance(self.sponsors, basestring): + # Walkaround for weird jsonfield 'no-decode' optimization. + self.sponsors = json.loads(self.sponsors) + self.render_sprite() + self._html = render_to_string('sponsors/page.html', { + 'sponsors': self.populated_sponsors(), + 'page': self + }) + ret = super(SponsorPage, self).save(*args, **kwargs) + self.flush_includes() + return ret + + def flush_includes(self): + flush_ssi_includes(['/sponsors/page/%s.html' % self.name]) + + def __unicode__(self): + return self.name + diff --git a/src/sponsors/static/sponsors/css/footer_admin.css b/src/sponsors/static/sponsors/css/footer_admin.css new file mode 100644 index 000000000..fe19d30c9 --- /dev/null +++ b/src/sponsors/static/sponsors/css/footer_admin.css @@ -0,0 +1,73 @@ +.sponsors { + display: block; + clear: both; + margin-top: 5px; +} + +.sponsors .sponsors-sponsor-group { + float: left; + width: 180px; + border: 1px solid #CCC; + margin: 2px 2px 0 0; +} + +.sponsors .sponsors-sponsor-group-name { + border-bottom: 1px solid #CCC; + padding: 2px 2px 2px 4px; + margin: 0; + color: #FFF; + background-color: #7CA0C7; + font-weight: bold; + height: 15px; +} + +.sponsors .sponsors-sponsor-group-name input { + margin: -2px -2px -2px -4px; + padding: 0; + height: 15px; + width: 160px; +} + +.sponsors .sponsors-remove-sponsor-group { + float: right; + background-color: #CC3434; + color: #FFF; + width: 10px; + height: 15px; + padding: 2px; + text-align: center; + font-weight: bold; + display: block; + cursor: default; +} + +.sponsors .sponsors-remove-sponsor-group:hover { + color: #CC3434; + background-color: white; +} + +.sponsors .sponsors-unused-sponsor-group-name { + background-color: #FFF; + color: #666; +} + +.sponsors .sponsors-sponsor-group-list { + margin: 0; + padding: 2px; + list-style: none; + min-height: 400px; +} + +.sponsors-sponsor { + margin: 0 40px 2px 0; + width: 120px; + height: 120px; + border: 1px solid #CCC; + background-color: #EEE; + cursor: default; +} + +.sponsors-sponsor img { + max-width: 120px; + max-height: 120px; +} diff --git a/src/sponsors/static/sponsors/css/sponsors.css b/src/sponsors/static/sponsors/css/sponsors.css new file mode 100644 index 000000000..f35e56dd7 --- /dev/null +++ b/src/sponsors/static/sponsors/css/sponsors.css @@ -0,0 +1,24 @@ +.sponsors-page { + background: white; + margin-top: 1em; +} + +.sponsors-column { + float: left; + width: 150px; +} + +.sponsor-logos { + height: 130px; +} + +.sponsors-page img { + float: left; +} + +.sponsors-page a { + display: block; + width: 120px; + height: 120px; + background-repeat: no-repeat; +} diff --git a/src/sponsors/static/sponsors/js/footer_admin.js b/src/sponsors/static/sponsors/js/footer_admin.js new file mode 100644 index 000000000..33c794a3d --- /dev/null +++ b/src/sponsors/static/sponsors/js/footer_admin.js @@ -0,0 +1,131 @@ +(function($) { + $.fn.sponsorsFooter = function(options) { + var settings = { + sponsors: [] + }; + $.extend(settings, options); + + var input = $(this).hide(); + + var container = $('
                        ').appendTo(input.parent()); + var groups = $.evalJSON(input.val()); + + var unusedDiv = $('
                        ') + .appendTo(container) + .append('

                        dostępni sponsorzy

                        '); + var unusedList = $('
                          ') + .appendTo(unusedDiv) + .sortable({ + connectWith: '.sponsors-sponsor-group-list' + }); + + // Edit group name inline + function editNameInline(name) { + name.unbind('click.sponsorsFooter'); + var inlineInput = $('').val(name.html()); + name.html(''); + + function endEditing() { + name.html(inlineInput.val()); + inlineInput.remove(); + name.bind('click.sponsorsFooter', function() { + editNameInline($(this)); + }); + input.parents('form').unbind('submit.sponsorsFooter', endEditing); + return false; + } + + inlineInput.appendTo(name).focus().blur(endEditing); + input.parents('form').bind('submit.sponsorsFooter', endEditing); + } + + // Remove sponsor with passed id from sponsors array and return it + function popSponsor(id) { + for (var i=0; i < settings.sponsors.length; i++) { + if (settings.sponsors[i].id == id) { + var s = settings.sponsors[i]; + settings.sponsors.splice(i, 1); + return s; + } + } + return null; + } + + // Create sponsor group and bind events + function createGroup(name, sponsors) { + if (!sponsors) { + sponsors = []; + } + + var groupDiv = $('
                          '); + + $('X') + .click(function() { + groupDiv.fadeOut('slow', function() { + $('.sponsors-sponsor', groupDiv).hide().appendTo(unusedList).fadeIn(); + groupDiv.remove(); + }); + }).appendTo(groupDiv); + + $('

                          ' + name + '

                          ') + .bind('click.sponsorsFooter', function() { + editNameInline($(this)); + }).appendTo(groupDiv); + + var groupList = $('
                            ') + .appendTo(groupDiv) + .sortable({ + connectWith: '.sponsors-sponsor-group-list' + }); + + + for (var i = 0; i < sponsors.length; i++) { + $('
                          1. ' + sponsors[i].name + '
                          2. ') + .data('obj_id', sponsors[i].id) + .appendTo(groupList); + } + return groupDiv; + } + + // Create groups from data in input value + for (var i = 0; i < groups.length; i++) { + var group = groups[i]; + var sponsors = []; + + for (var j = 0; j < group.sponsors.length; j++) { + var s = popSponsor(group.sponsors[j]); + if (s) { + sponsors.push(s); + } + } + createGroup(group.name, sponsors).appendTo(container); + } + + // Serialize input value before submiting form + input.parents('form').submit(function(event) { + var groups = []; + $('.sponsors-sponsor-group', container).not('.sponsors-unused-sponsor-group').each(function() { + var group = {name: $('.sponsors-sponsor-group-name', this).html(), sponsors: []}; + $('.sponsors-sponsor', this).each(function() { + group.sponsors.push($(this).data('obj_id')); + }); + groups.push(group); + }); + input.val($.toJSON(groups)); + }); + + for (i = 0; i < settings.sponsors.length; i++) { + $('
                          3. ' + settings.sponsors[i].name + '
                          4. ') + .data('obj_id', settings.sponsors[i].id) + .appendTo(unusedList); + } + + $('') + .click(function() { + var newGroup = createGroup('').appendTo(container); + editNameInline($('.sponsors-sponsor-group-name', newGroup)); + }).prependTo(input.parent()); + + input.parent().append('
                            '); + }; +})(jQuery); diff --git a/src/sponsors/static/sponsors/js/jquery.json.min.js b/src/sponsors/static/sponsors/js/jquery.json.min.js new file mode 100644 index 000000000..bad4a0afa --- /dev/null +++ b/src/sponsors/static/sponsors/js/jquery.json.min.js @@ -0,0 +1,31 @@ + +(function($){$.toJSON=function(o) +{if(typeof(JSON)=='object'&&JSON.stringify) +return JSON.stringify(o);var type=typeof(o);if(o===null) +return"null";if(type=="undefined") +return undefined;if(type=="number"||type=="boolean") +return o+"";if(type=="string") +return $.quoteString(o);if(type=='object') +{if(typeof o.toJSON=="function") +return $.toJSON(o.toJSON());if(o.constructor===Date) +{var month=o.getUTCMonth()+1;if(month<10)month='0'+month;var day=o.getUTCDate();if(day<10)day='0'+day;var year=o.getUTCFullYear();var hours=o.getUTCHours();if(hours<10)hours='0'+hours;var minutes=o.getUTCMinutes();if(minutes<10)minutes='0'+minutes;var seconds=o.getUTCSeconds();if(seconds<10)seconds='0'+seconds;var milli=o.getUTCMilliseconds();if(milli<100)milli='0'+milli;if(milli<10)milli='0'+milli;return'"'+year+'-'+month+'-'+day+'T'+ +hours+':'+minutes+':'+seconds+'.'+milli+'Z"';} +if(o.constructor===Array) +{var ret=[];for(var i=0;i.sponsors-page a{background-image:url({{ page.sprite.url }});} +
                            + {% for column in sponsors %} +
                            +

                            {{ column.name|default:" " }}

                            + +
                            + {% endfor %} +
                            +
                            +{% endspaceless %} diff --git a/src/sponsors/urls.py b/src/sponsors/urls.py new file mode 100644 index 000000000..6da6186c3 --- /dev/null +++ b/src/sponsors/urls.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + +urlpatterns = patterns('sponsors.views', + url(r'^page/(?P.+)\.html$', 'page', name='sponsor_page'), +) diff --git a/src/sponsors/views.py b/src/sponsors/views.py new file mode 100644 index 000000000..9a340895c --- /dev/null +++ b/src/sponsors/views.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.http import HttpResponse +from ssify import ssi_included +from .models import SponsorPage + + +@ssi_included(use_lang=False) +def page(request, name): + try: + page = SponsorPage.objects.get(name=name) + except SponsorPage.DoesNotExist: + return HttpResponse(u'') + return HttpResponse(page.html) diff --git a/src/sponsors/widgets.py b/src/sponsors/widgets.py new file mode 100644 index 000000000..0ddab3809 --- /dev/null +++ b/src/sponsors/widgets.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django import forms +from django.utils.safestring import mark_safe + +from sponsors import models + + +class SponsorPageWidget(forms.Textarea): + class Media: + js = ( + 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js', + 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/jquery-ui.min.js', + settings.STATIC_URL + 'sponsors/js/jquery.json.min.js', + settings.STATIC_URL + 'sponsors/js/footer_admin.js', + ) + css = { + 'all': (settings.STATIC_URL + 'sponsors/css/footer_admin.css',), + } + + def render(self, name, value, attrs=None): + output = [super(SponsorPageWidget, self).render(name, value, attrs)] + sponsors = [(unicode(obj), obj.pk, obj.logo.url) for obj in models.Sponsor.objects.all().iterator()] + sponsors_js = ', '.join('{name: "%s", id: %d, image: "%s"}' % sponsor for sponsor in sponsors) + output.append(u'\n' % + (name, sponsors_js)) + return mark_safe(u''.join(output)) diff --git a/src/stats/__init__.py b/src/stats/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/stats/models.py b/src/stats/models.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/src/stats/models.py @@ -0,0 +1 @@ + diff --git a/src/stats/tasks.py b/src/stats/tasks.py new file mode 100644 index 000000000..dcd0a4bd7 --- /dev/null +++ b/src/stats/tasks.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from celery.task import task +from django.conf import settings +import httplib +import logging +import urlparse + +logger = logging.getLogger(__name__) + + +PIWIK_API_VERSION = 1 + +# Retrieve piwik information +try: + _host = urlparse.urlsplit(settings.PIWIK_URL).netloc +except AttributeError: + logger.debug("PIWIK_URL not configured.") + _host = None + + +@task(ignore_result=True) +def track_request(piwik_args): + piwik_url = "%s%s%s" % (settings.PIWIK_URL, u"/piwik.php?", piwik_args) + conn = httplib.HTTPConnection(_host) + conn.request('GET', piwik_url) + conn.close() diff --git a/src/stats/utils.py b/src/stats/utils.py new file mode 100644 index 000000000..474d1b59a --- /dev/null +++ b/src/stats/utils.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from datetime import datetime +import logging +from functools import update_wrapper +import urllib +from random import random +from inspect import isclass +from .tasks import track_request + +logger = logging.getLogger(__name__) + + +def piwik_url(request): + return urllib.urlencode(dict( + idsite=getattr(settings, 'PIWIK_SITE_ID', '0'), + rec=1, + url='http://%s%s' % (request.META['HTTP_HOST'], request.path), + rand=int(random() * 0x10000), + apiv=PIWIK_API_VERSION, + urlref=request.META.get('HTTP_REFERER', ''), + ua=request.META.get('HTTP_USER_AGENT', ''), + lang=request.META.get('HTTP_ACCEPT_LANGUAGE', ''), + token_auth=getattr(settings, 'PIWIK_TOKEN', ''), + cip=request.META['REMOTE_ADDR'], + cdt=datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S") + )) + +PIWIK_API_VERSION = 1 + + +def piwik_track(klass_or_method): + """Track decorated class or method using Piwik (according to configuration in settings and django-piwik) + Works for handler classes (executed by __call__) or handler methods. Expects request to be the first parameter + """ + if not getattr(settings, 'PIWIK_SITE_ID', 0): + return klass_or_method + + # get target method + if isclass(klass_or_method): + klass = klass_or_method + call_func = klass.__call__ + else: + call_func = klass_or_method + + def wrap(self, request, *args, **kw): + if getattr(request, 'piwik_track', True): + track_request.delay(piwik_url(request)) + return call_func(self, request, *args, **kw) + + # and wrap it + update_wrapper(wrap, call_func) + + if isclass(klass_or_method): + klass.__call__ = wrap + return klass + else: + return wrap diff --git a/src/suggest/__init__.py b/src/suggest/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/suggest/admin.py b/src/suggest/admin.py new file mode 100644 index 000000000..b5fcb5cf2 --- /dev/null +++ b/src/suggest/admin.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin + +from suggest.models import Suggestion, PublishingSuggestion + +class SuggestionAdmin(admin.ModelAdmin): + list_display = ('created_at', 'contact', 'user', 'description') + +admin.site.register(Suggestion, SuggestionAdmin) + + +class PublishingSuggestionAdmin(admin.ModelAdmin): + list_display = ('created_at', 'contact', 'user', 'books', 'audiobooks') + +admin.site.register(PublishingSuggestion, PublishingSuggestionAdmin) diff --git a/src/suggest/forms.py b/src/suggest/forms.py new file mode 100644 index 000000000..b98e0ae4a --- /dev/null +++ b/src/suggest/forms.py @@ -0,0 +1,118 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import forms +from django.contrib.sites.models import Site +from django.core.exceptions import ValidationError +from django.core.mail import send_mail, mail_managers +from django.core.urlresolvers import reverse +from django.core.validators import validate_email +from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext +from suggest.models import PublishingSuggestion, Suggestion + + +class SuggestForm(forms.Form): + contact = forms.CharField(label=_('Contact'), max_length=120, required=False) + description = forms.CharField(label=_('Description'), widget=forms.Textarea, required=True) + + def save(self, request): + contact = self.cleaned_data['contact'] + description = self.cleaned_data['description'] + + suggestion = Suggestion(contact=contact, + description=description, ip=request.META['REMOTE_ADDR']) + if request.user.is_authenticated(): + suggestion.user = request.user + suggestion.save() + + mail_managers(u'Nowa sugestia na stronie WolneLektury.pl', u'''\ +Zgłoszono nową sugestię w serwisie WolneLektury.pl. +http://%(site)s%(url)s + +Użytkownik: %(user)s +Kontakt: %(contact)s + +%(description)s''' % { + 'site': Site.objects.get_current().domain, + 'url': reverse('admin:suggest_suggestion_change', args=[suggestion.id]), + 'user': str(request.user) if request.user.is_authenticated() else '', + 'contact': contact, + 'description': description, + }, fail_silently=True) + + try: + validate_email(contact) + except ValidationError: + pass + else: + send_mail(u'[WolneLektury] ' + + ugettext(u'Thank you for your suggestion.'), + ugettext(u"""\ +Thank you for your comment on WolneLektury.pl. +The suggestion has been referred to the project coordinator.""") + +u""" + +-- +""" + ugettext(u'''Message sent automatically. Please do not reply.'''), + 'no-reply@wolnelektury.pl', [contact], fail_silently=True) + + +class PublishingSuggestForm(forms.Form): + contact = forms.CharField(label=_('Contact'), max_length=120, required=False) + books = forms.CharField(label=_('books'), widget=forms.Textarea, required=False) + audiobooks = forms.CharField(label=_('audiobooks'), widget=forms.Textarea, required=False) + + def clean(self, *args, **kwargs): + if not self.cleaned_data['books'] and not self.cleaned_data['audiobooks']: + msg = ugettext(u"One of these fields is required.") + self._errors["books"] = self.error_class([msg]) + self._errors["audiobooks"] = self.error_class([msg]) + return super(PublishingSuggestForm, self).clean(*args, **kwargs) + + def save(self, request): + contact = self.cleaned_data['contact'] + books = self.cleaned_data['books'] + audiobooks = self.cleaned_data['audiobooks'] + + suggestion = PublishingSuggestion(contact=contact, books=books, + audiobooks=audiobooks, ip=request.META['REMOTE_ADDR']) + if request.user.is_authenticated(): + suggestion.user = request.user + suggestion.save() + + mail_managers(u'Konsultacja planu wydawniczego na WolneLektury.pl', u'''\ +Zgłoszono nową sugestię nt. planu wydawniczego w serwisie WolneLektury.pl. +%(url)s + +Użytkownik: %(user)s +Kontakt: %(contact)s + +Książki: +%(books)s + +Audiobooki: +%(audiobooks)s''' % { + 'url': request.build_absolute_uri(reverse('admin:suggest_suggestion_change', args=[suggestion.id])), + 'user': str(request.user) if request.user.is_authenticated() else '', + 'contact': contact, + 'books': books, + 'audiobooks': audiobooks, + }, fail_silently=True) + + try: + validate_email(contact) + except ValidationError: + pass + else: + send_mail(u'[WolneLektury] ' + + ugettext(u'Thank you for your suggestion.'), + ugettext(u"""\ +Thank you for your comment on WolneLektury.pl. +The suggestion has been referred to the project coordinator.""") + +u""" + +-- +""" + ugettext(u'''Message sent automatically. Please do not reply.'''), + 'no-reply@wolnelektury.pl', [contact], fail_silently=True) diff --git a/src/suggest/locale/de/LC_MESSAGES/django.mo b/src/suggest/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..2531a86b7 Binary files /dev/null and b/src/suggest/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/de/LC_MESSAGES/django.po b/src/suggest/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..e96c86b0e --- /dev/null +++ b/src/suggest/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,106 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-08 11:33+0100\n" +"Last-Translator: \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "Kontakt" + +#: forms.py:17 +msgid "Description" +msgstr "Beschreibung" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "Vielen Dank für Ihren Vorschlag." + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"Vielen Dank für Ihren Kommentar zu WolneLekturz.pl\n" +"Ihr Kommentar ist an den Projekt - Koordinator weitergeleitet worden. " + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "" +"Diese Nachricht wird automatisch generiert. Bitte sie nicht beantworten." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "Bücher" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "Audiobücher" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "Erfüllen Sie bitte ein von diesen Feldern. " + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "Kontakt" + +#: models.py:11 +msgid "description" +msgstr "Beschreibung" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "Erstellungsdatum" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "IP-Adresse" + +#: models.py:18 +msgid "suggestion" +msgstr "Vorschlag" + +#: models.py:19 +msgid "suggestions" +msgstr "Vorschläge" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "Vorschlag publizieren" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "Vorschläge publizieren" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "Melden Sie einen Bug oder einen Vorschlag" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "Der Bericht wurde erfolgreich gesendet." + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "Bericht senden" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "Hast Du kein Buch gefunden? Mach einen Vorschlag." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl these…" +msgstr "Ich würde gerne auf WolneLektury ... finden." diff --git a/src/suggest/locale/en/LC_MESSAGES/django.mo b/src/suggest/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..69b20d038 Binary files /dev/null and b/src/suggest/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/en/LC_MESSAGES/django.po b/src/suggest/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..20bd3bb0a --- /dev/null +++ b/src/suggest/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,106 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-10 13:06+0100\n" +"Last-Translator: Kamil \n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "Contact" + +#: forms.py:17 +msgid "Description" +msgstr "Description" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "Thank you for your suggestion." + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"Thank you for your suggestion concerning WolneLektury.pl \n" +"Your suggestion was sent to the project coordinator." + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "This message was sent automatically. Please do not reply." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "books" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "audiobooks" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "One of these fields is required." + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "Contact" + +#: models.py:11 +msgid "description" +msgstr "description" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "creation date" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "IP address" + +#: models.py:18 +msgid "suggestion" +msgstr "suggestion" + +#: models.py:19 +msgid "suggestions" +msgstr "suggestions" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "publishing suggestion" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "publishing suggestions" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "Report an error or make a suggestion" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "publishing suggestion" + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "send a suggestion" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "Didn't find a book? Make a suggestion." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl these…" +msgstr "I would like to find the following items on WolneLektury.pl:" diff --git a/src/suggest/locale/es/LC_MESSAGES/django.mo b/src/suggest/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..11f8aa62a Binary files /dev/null and b/src/suggest/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/es/LC_MESSAGES/django.po b/src/suggest/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..67e142599 --- /dev/null +++ b/src/suggest/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,105 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-18 13:20+0100\n" +"Last-Translator: Anna Jopp \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "Contacto" + +#: forms.py:17 +msgid "Description" +msgstr "Descripción" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "Gracias por tu sugerencia" + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"Gracias por tu comentario en WolneLektury.pl La sugerencia ha sido remitida " +"a el coordinador del proyecto" + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "La mensaje enviado automaticamente. No conteste por favor." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "libros" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "audiolibros" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "Uno de estos campos es requerido" + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "Contacto" + +#: models.py:11 +msgid "description" +msgstr "Descripción" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "Fecha de creación" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "Dirección IP" + +#: models.py:18 +msgid "suggestion" +msgstr "sugerencia" + +#: models.py:19 +msgid "suggestions" +msgstr "sugerencias" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "Sugerencia de publicación" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "Sugerencias de publicación" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "Reporta un error o una sugerencia" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "la noticia ha sido enviada con éxito " + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "Envia un report" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "No encontraste un libro? Haz una sugerencia." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl these…" +msgstr "Me gustaría encontrar estos en WolneLektury.pl" diff --git a/src/suggest/locale/fr/LC_MESSAGES/django.mo b/src/suggest/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..04716bcac Binary files /dev/null and b/src/suggest/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/fr/LC_MESSAGES/django.po b/src/suggest/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..3b95f4739 --- /dev/null +++ b/src/suggest/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,105 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-23 17:55+0100\n" +"Last-Translator: Ela Janota \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "Contact" + +#: forms.py:17 +msgid "Description" +msgstr "Description" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "Merci pour votre suggestion." + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"Merci pour votre commentaire sur Wolne Lektury.pl.\n" +"Votre suggestion a été adressée au coordinateur du projet." + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "Message envoyé automatiquement. Merci de n'y pas répondre." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "livres" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "livres audio" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "L'une des ces rubriques est obligatoire." + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "contact" + +#: models.py:11 +msgid "description" +msgstr "description" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "date de création" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "adresse IP" + +#: models.py:18 +msgid "suggestion" +msgstr "suggestion" + +#: models.py:19 +msgid "suggestions" +msgstr "suggestions" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "suggestion sur publication" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "suggestions sur publication" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "Rapportez une erreur ou faites une suggestion" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "Votre rapport a été envoyé" + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "Envoyez un rapport" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "Vous n'avez pas trouvé un livre? Faites une suggestion." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl these…" +msgstr "J'aimerais trouver dans Wolne Lektury.pl:..." diff --git a/src/suggest/locale/it/LC_MESSAGES/django.mo b/src/suggest/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..38cbcb47f Binary files /dev/null and b/src/suggest/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/it/LC_MESSAGES/django.po b/src/suggest/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..70f0c346b --- /dev/null +++ b/src/suggest/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,107 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-21 17:57+0100\n" +"Last-Translator: xxx\n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "Contatto" + +#: forms.py:17 +msgid "Description" +msgstr "Descrizione" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "Grazie per la sua proposta" + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"Grazie per il commento su WolneLektury.pl. La sua proposta è stata inviata " +"al coordinatore del progetto. // " + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "" +"Il messaggio è stato inviato automaticamente. Si prega di non rispondere." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "libri" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "audiolibri" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "E' richiesto uno di questi campi. " + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "contatto" + +#: models.py:11 +msgid "description" +msgstr "descrizione" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "data di creazione" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "Indirizzo IP" + +#: models.py:18 +msgid "suggestion" +msgstr "proposta" + +#: models.py:19 +msgid "suggestions" +msgstr "proposte" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "pubblica la proposta" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "pubblica le proposte" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr " Segnala un'errore o un proposta" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "La notifica è stata inviata con successo." + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "Invia una notifica" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "Non hai trovato il libro?Fai una proposta." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl these…" +msgstr "Vorrei trovare in WolneLektury.pl questo..." diff --git a/src/suggest/locale/jp/LC_MESSAGES/django.mo b/src/suggest/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c9739db34 Binary files /dev/null and b/src/suggest/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/jp/LC_MESSAGES/django.po b/src/suggest/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..b02e371d3 --- /dev/null +++ b/src/suggest/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,104 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "" + +#: forms.py:17 +msgid "Description" +msgstr "" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "" + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "" + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "" + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "" + +#: models.py:11 +msgid "description" +msgstr "" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "" + +#: models.py:18 +msgid "suggestion" +msgstr "" + +#: models.py:19 +msgid "suggestions" +msgstr "" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "" + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "" + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl these…" +msgstr "" diff --git a/src/suggest/locale/lt/LC_MESSAGES/django.mo b/src/suggest/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..0dbad8e48 Binary files /dev/null and b/src/suggest/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/lt/LC_MESSAGES/django.po b/src/suggest/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..25759b3d7 --- /dev/null +++ b/src/suggest/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,105 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-02 18:19+0100\n" +"Last-Translator: Karolina Zuber \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "Kontaktas" + +#: forms.py:17 +msgid "Description" +msgstr "Aprašymas" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "Ačiū už jūsų pasiūlymą." + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"Ačiū už jūsų komentarą WolneLektury.pl interneto svetainėje \n" +"Pasiūlymas buvo pateiktas projekto koordinatoriui." + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "Tai automatiškai sugeneruotas laiškas. Prašome į jį neatsakyti." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "knygas" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "audio knygas" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "Vienas iš šių laukelių yra reikalaujamas." + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "kontaktas" + +#: models.py:11 +msgid "description" +msgstr "aprašymas" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "sukūrimo data" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "IP adresas" + +#: models.py:18 +msgid "suggestion" +msgstr "pasiūlymas" + +#: models.py:19 +msgid "suggestions" +msgstr "pasiūlymai" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "publikavimo pasiūlymas" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "publikavimo pasiūlymai" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "Praneškite apie klaidą arba teikite pasiūlymus" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "Pranešimas sėkmingai išsiųstas." + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "Siųsti pranešimą" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "Neradote knygos? Teikite pasiūlymus." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl these…" +msgstr "Interneto svetainėje WolneLektury.pl norėčiau rasti šias..." diff --git a/src/suggest/locale/pl/LC_MESSAGES/django.mo b/src/suggest/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..b2dcabd83 Binary files /dev/null and b/src/suggest/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/pl/LC_MESSAGES/django.po b/src/suggest/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..b5bfc9eae --- /dev/null +++ b/src/suggest/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,106 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2011-06-09 13:06+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "Kontakt" + +#: forms.py:17 +msgid "Description" +msgstr "Opis" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "Dziękujemy za zgłoszenie." + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"Dziękujemy za zgłoszenie uwag do serwisu Wolne Lektury.\n" +"Sugestia została przekazana koordynatorce projektu." + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "Wiadomość wysłana automatycznie. Proszę nie odpowiadać." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "książki" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "audiobooki" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "Proszę wypełnić co najmniej jedno z tych pól." + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "kontakt" + +#: models.py:11 +msgid "description" +msgstr "opis" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "data utworzenia" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "adres IP" + +#: models.py:18 +msgid "suggestion" +msgstr "sugestia" + +#: models.py:19 +msgid "suggestions" +msgstr "sugestie" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "sugestia publikacji" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "sugestie publikacji" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "Zgłoś błąd lub sugestię" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "Zgłoszenie zostało wysłane." + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "Wyślij zgłoszenie" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "Nie znalazłeś utworu na stronie? Zgłoś sugestię." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl these…" +msgstr "Chciałabym/chciałbym znaleźć w bibliotece Wolne Lektury następujące" diff --git a/src/suggest/locale/ru/LC_MESSAGES/django.mo b/src/suggest/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..0b7fe0c82 Binary files /dev/null and b/src/suggest/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/ru/LC_MESSAGES/django.po b/src/suggest/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..b6ba0f15e --- /dev/null +++ b/src/suggest/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,105 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 22:11+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "Контакт" + +#: forms.py:17 +msgid "Description" +msgstr "Описание" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "Спасибо за Ваше предложение." + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"Спасибо за Ваш комментарий на WolneLektury.pl. \n" +"Предложение было передано координатору проекта." + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "Сообщение отправлено автоматически. Пожалуйста, не отвечайте." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "книги" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "аудиокниги" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "Требуется одно из этих полей." + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "контакт" + +#: models.py:11 +msgid "description" +msgstr "описание" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "дата создания" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "IP-адрес" + +#: models.py:18 +msgid "suggestion" +msgstr "предложение" + +#: models.py:19 +msgid "suggestions" +msgstr "предложения" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "издательское предложение" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "издательские предложения" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "Сообщитe об ошибке или предложении" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "Отчет отправлен успешно." + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "Отправить отчет" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "Вы не нашли книгу? Сделайте предложение." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl these…" +msgstr "Я хотел/а бы найти на сайте WolneLektury.pl этих..." diff --git a/src/suggest/locale/uk/LC_MESSAGES/django.mo b/src/suggest/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..8e7f71016 Binary files /dev/null and b/src/suggest/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/uk/LC_MESSAGES/django.po b/src/suggest/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..5aaed2577 --- /dev/null +++ b/src/suggest/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,106 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 17:31+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "Контакт" + +#: forms.py:17 +msgid "Description" +msgstr "Опис" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "Дякуємо за Ваші пропозиції." + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"Дякуємо за Ваш коментар на WolneLektury.pl.\n" +"Вашу пропозицію передано координатору проекту." + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "Повідомлення надіслано автоматично. Просимо не відповідати." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "книжки" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "аудіокниги" + +#: forms.py:64 +#, fuzzy +msgid "One of these fields is required." +msgstr "Одне з цих полів є обов'язковим." + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "контакт" + +#: models.py:11 +msgid "description" +msgstr "опис" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "дата створення" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "IP-адреса" + +#: models.py:18 +msgid "suggestion" +msgstr "пропозиція" + +#: models.py:19 +msgid "suggestions" +msgstr "пропозиції" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "пропозиція публікації" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "пропозиції публікацій" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "Повідомити про помилку або надіслати пропозицію" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "Ваше повідомлення надіслано успішно." + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "Вислати повідомлення" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "Не знайшли книжки, якої шукали? Вишліть свої пропозиції." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl these…" +msgstr "Я хотів би/хотіла би знайти на сайті WolneLektury.pl наступні..." diff --git a/src/suggest/migrations/0001_initial.py b/src/suggest/migrations/0001_initial.py new file mode 100644 index 000000000..b02889762 --- /dev/null +++ b/src/suggest/migrations/0001_initial.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='PublishingSuggestion', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('contact', models.CharField(max_length=120, verbose_name='Contact', blank=True)), + ('books', models.TextField(null=True, verbose_name='Books', blank=True)), + ('audiobooks', models.TextField(null=True, verbose_name='audiobooks', blank=True)), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date')), + ('ip', models.GenericIPAddressField(verbose_name='IP address')), + ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + 'ordering': ('-created_at',), + 'verbose_name': 'publishing suggestion', + 'verbose_name_plural': 'publishing suggestions', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Suggestion', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('contact', models.CharField(max_length=120, verbose_name='Contact', blank=True)), + ('description', models.TextField(verbose_name='Description', blank=True)), + ('created_at', models.DateTimeField(auto_now=True, verbose_name='creation date')), + ('ip', models.GenericIPAddressField(verbose_name='IP address')), + ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + 'ordering': ('-created_at',), + 'verbose_name': 'suggestion', + 'verbose_name_plural': 'suggestions', + }, + bases=(models.Model,), + ), + ] diff --git a/src/suggest/migrations/0002_auto_20151221_1225.py b/src/suggest/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..126808b68 --- /dev/null +++ b/src/suggest/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('suggest', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='publishingsuggestion', + name='books', + field=models.TextField(null=True, verbose_name='books', blank=True), + ), + migrations.AlterField( + model_name='publishingsuggestion', + name='contact', + field=models.CharField(max_length=120, verbose_name='contact', blank=True), + ), + migrations.AlterField( + model_name='suggestion', + name='contact', + field=models.CharField(max_length=120, verbose_name='contact', blank=True), + ), + migrations.AlterField( + model_name='suggestion', + name='description', + field=models.TextField(verbose_name='description', blank=True), + ), + ] diff --git a/src/suggest/migrations/__init__.py b/src/suggest/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/suggest/models.py b/src/suggest/models.py new file mode 100644 index 000000000..c0f8658f5 --- /dev/null +++ b/src/suggest/models.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.db import models +from django.contrib.auth.models import User +from django.utils.translation import ugettext_lazy as _ + +class Suggestion(models.Model): + contact = models.CharField(_('contact'), blank=True, max_length=120) + description = models.TextField(_('description'), blank=True) + created_at = models.DateTimeField(_('creation date'), auto_now=True) + ip = models.GenericIPAddressField(_('IP address')) + user = models.ForeignKey(User, blank=True, null=True) + + class Meta: + ordering = ('-created_at',) + verbose_name = _('suggestion') + verbose_name_plural = _('suggestions') + + def __unicode__(self): + return unicode(self.created_at) + + +class PublishingSuggestion(models.Model): + contact = models.CharField(_('contact'), blank=True, max_length=120) + books = models.TextField(_('books'), null=True, blank=True) + audiobooks = models.TextField(_('audiobooks'), null=True, blank=True) + created_at = models.DateTimeField(_('creation date'), auto_now_add=True) + ip = models.GenericIPAddressField(_('IP address')) + user = models.ForeignKey(User, blank=True, null=True) + + class Meta: + ordering = ('-created_at',) + verbose_name = _('publishing suggestion') + verbose_name_plural = _('publishing suggestions') + + def __unicode__(self): + return unicode(self.created_at) diff --git a/src/suggest/templates/publishing_suggest.html b/src/suggest/templates/publishing_suggest.html new file mode 100755 index 000000000..2ac0ec245 --- /dev/null +++ b/src/suggest/templates/publishing_suggest.html @@ -0,0 +1,21 @@ +{% load i18n %} +{% load honeypot %} +{% load ssi_csrf_token from ssify %} + +

                            {% trans "Didn't find a book? Make a suggestion." %}

                            + +
                            +{% ssi_csrf_token %} +{% render_honeypot_field %} +
                              +
                            1. {{ form.contact.errors }} {{ form.contact }}
                            2. + +
                            3. {% trans "I'd like to find in WolneLektury.pl these…" %}
                            4. + +
                            5. {{ form.books.errors }} {{ form.books }}
                            6. + +
                            7. {{ form.audiobooks.errors }} {{ form.audiobooks }}
                            8. + +
                            9. +
                            +
                            diff --git a/src/suggest/urls.py b/src/suggest/urls.py new file mode 100644 index 000000000..2f7017213 --- /dev/null +++ b/src/suggest/urls.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url +from suggest import views + +urlpatterns = patterns('', + url(r'^$', views.SuggestionFormView(), name='suggest'), + url(r'^plan/$', views.PublishingSuggestionFormView(), name='suggest_publishing'), +) + diff --git a/src/suggest/views.py b/src/suggest/views.py new file mode 100644 index 000000000..035074d0a --- /dev/null +++ b/src/suggest/views.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.utils.translation import ugettext_lazy as _ + +from ajaxable.utils import AjaxableFormView +from suggest import forms + + +class PublishingSuggestionFormView(AjaxableFormView): + form_class = forms.PublishingSuggestForm + title = _('Report a bug or suggestion') + template = "publishing_suggest.html" + success_message = _('Report was sent successfully.') + honeypot = True + + +class SuggestionFormView(AjaxableFormView): + form_class = forms.SuggestForm + title = _('Report a bug or suggestion') + submit = _('Send report') + success_message = _('Report was sent successfully.') + honeypot = True diff --git a/src/waiter/__init__.py b/src/waiter/__init__.py new file mode 100644 index 000000000..9c83ee36e --- /dev/null +++ b/src/waiter/__init__.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +""" +Celery waiter. + +Takes orders for files generated by async Celery tasks. +Serves the file when ready. Kindly asks the user to wait if not. + +Author: Radek Czajka +""" diff --git a/src/waiter/locale/pl/LC_MESSAGES/django.mo b/src/waiter/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..dc750957f Binary files /dev/null and b/src/waiter/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/waiter/locale/pl/LC_MESSAGES/django.po b/src/waiter/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..28008ee37 --- /dev/null +++ b/src/waiter/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,70 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-22 15:54+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \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%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2)\n" + +#: templates/waiter/wait.html:7 templates/waiter/wait.html.py:33 +msgid "The file is ready for download!" +msgstr "Plik jest gotowy do pobrania!" + +#: templates/waiter/wait.html:10 templates/waiter/wait.html.py:43 +msgid "Your file is being prepared, please wait." +msgstr "Plik jest generowany, proszę czekać." + +#: templates/waiter/wait.html:12 templates/waiter/wait.html.py:52 +msgid "Something went wrong." +msgstr "Coś poszło nie tak." + +#: templates/waiter/wait.html:36 +#, python-format +msgid "" +"Your file is ready!\n" +" If the download doesn't start in a few seconds,\n" +" feel free to use this direct link." +msgstr "" +"Twój plik jest gotowy!\n" +"Jeśli pobieranie nie zacznie się w ciągu kilku sekund,\n" +"skorzystaj z tego bezpośredniego linku." + +#: templates/waiter/wait.html:42 +msgid "Please wait" +msgstr "" + +#: templates/waiter/wait.html:46 +#, python-format +msgid "The file you requested was: %(d)s." +msgstr "Zamówiony plik to: %(d)s." + +#: templates/waiter/wait.html:48 +msgid "" +"Be aware: Generating the file can take a while.\n" +" Please be patient, or bookmark this page and come back later.

                            " +msgstr "" +"Uwaga: Generowanie pliku może trwać dłuższą chwilę.\n" +"Poczekaj cierpliwie, albo dodaj tę stronę do zakładek i wróć później.

                            " + +#: templates/waiter/wait.html:56 +#, python-format +msgid "" +"Something seems to have gone wrong while generating your file.\n" +" Please order it again or complain to us about it." +msgstr "" +"Wygląda na to, że coś poszło źle podczas generowania Twojego pliku.\n" +"Spróbuj zamówić go jeszcze raz albo napisz do nas." diff --git a/src/waiter/migrations/0001_initial.py b/src/waiter/migrations/0001_initial.py new file mode 100644 index 000000000..a579d6efb --- /dev/null +++ b/src/waiter/migrations/0001_initial.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import picklefield.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='WaitedFile', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('path', models.CharField(unique=True, max_length=255, db_index=True)), + ('task_id', models.CharField(db_index=True, max_length=128, null=True, blank=True)), + ('task', picklefield.fields.PickledObjectField(null=True, editable=False)), + ('description', models.CharField(max_length=255, null=True, blank=True)), + ], + options={ + }, + bases=(models.Model,), + ), + ] diff --git a/src/waiter/migrations/__init__.py b/src/waiter/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/waiter/models.py b/src/waiter/models.py new file mode 100644 index 000000000..bffaf7f8a --- /dev/null +++ b/src/waiter/models.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from os.path import join, isfile +from django.core.urlresolvers import reverse +from django.db import models +from waiter.settings import WAITER_URL, WAITER_MAX_QUEUE +from waiter.utils import check_abspath +from picklefield import PickledObjectField + + +class WaitedFile(models.Model): + path = models.CharField(max_length=255, unique=True, db_index=True) + task_id = models.CharField(max_length=128, db_index=True, null=True, blank=True) + task = PickledObjectField(null=True, editable=False) + description = models.CharField(max_length=255, null=True, blank=True) + + @classmethod + def exists(cls, path): + """Returns opened file or None. + + `path` is relative to WAITER_ROOT. + Won't open a path leading outside of WAITER_ROOT. + """ + abs_path = check_abspath(path) + # Pre-fetch objects for deletion to avoid minor race condition + relevant = [o.id for o in cls.objects.filter(path=path)] + if isfile(abs_path): + cls.objects.filter(id__in=relevant).delete() + return True + else: + return False + + @classmethod + def can_order(cls, path): + return (cls.objects.filter(path=path).exists() or + cls.exists(path) or + cls.objects.count() < WAITER_MAX_QUEUE + ) + + @classmethod + def order(cls, path, task_creator, description=None): + """ + Returns an URL for the user to follow. + If the file is ready, returns download URL. + If not, starts preparing it and returns waiting URL. + + task_creator: function taking a path and generating the file; + description: a string or string proxy with a description for user; + """ + already = cls.exists(path) + if not already: + waited, created = cls.objects.get_or_create(path=path) + if created or waited.is_stale(): + waited.task = task_creator(check_abspath(path), waited.pk) + waited.task_id = waited.task.task_id + waited.description = description + waited.save() + return reverse("waiter", args=[path]) + return join(WAITER_URL, path) diff --git a/src/waiter/settings.py b/src/waiter/settings.py new file mode 100644 index 000000000..aaa9f03b3 --- /dev/null +++ b/src/waiter/settings.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from os.path import abspath, join +from django.conf import settings + +try: + WAITER_ROOT = abspath(settings.WAITER_ROOT) +except AttributeError: + WAITER_ROOT = abspath(join(settings.MEDIA_ROOT, 'waiter')) + +try: + WAITER_URL = settings.WAITER_URL +except AttributeError: + WAITER_URL = join(settings.MEDIA_URL, 'waiter') + +try: + WAITER_MAX_QUEUE = settings.WAITER_MAX_QUEUE +except AttributeError: + WAITER_MAX_QUEUE = 20 + diff --git a/src/waiter/tasks.py b/src/waiter/tasks.py new file mode 100644 index 000000000..89db402a3 --- /dev/null +++ b/src/waiter/tasks.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from celery.signals import task_postrun +from waiter.models import WaitedFile + + +def task_delete_after(task_id=None, **kwargs): + WaitedFile.objects.filter(task_id=task_id).delete() +task_postrun.connect(task_delete_after) diff --git a/src/waiter/templates/waiter/wait.html b/src/waiter/templates/waiter/wait.html new file mode 100644 index 000000000..6ef1b7751 --- /dev/null +++ b/src/waiter/templates/waiter/wait.html @@ -0,0 +1,93 @@ +{% extends "base.html" %} +{% load i18n %} +{% load static from staticfiles %} + +{% block titleextra %} +{% if file_url %} + {% trans "The file is ready for download!" %} +{% else %} + {% if waiting %} + {% trans "Your file is being prepared, please wait." %} + {% else %} + {% trans "Something went wrong." %} + {% endif %} +{% endif %} +{% endblock %} + + +{% block extrahead %} +{% if file_url %} + +{% else %} + {% if waiting %} + + {% endif %} +{% endif %} +{% endblock %} + + +{% block body %} +{% if file_url %} +

                            {% trans "The file is ready for download!" %}

                            + +
                            +

                            {% blocktrans %}Your file is ready! + If the download doesn't start in a few seconds, + feel free to use this direct link.{% endblocktrans %}

                            +
                            +{% else %} + {% if waiting %} +

                            {% trans 'Please wait' %} + {% trans "Your file is being prepared, please wait." %}

                            + +
                            +

                            {% blocktrans with d=waiting.description %}The file you requested was: {{d}}.{% endblocktrans %}

                            + +

                            {% blocktrans %}Be aware: Generating the file can take a while. + Please be patient, or bookmark this page and come back later.

                            {% endblocktrans %} +
                            + {% else %} +

                            {% trans "Something went wrong." %}

                            + +
                            + {% url 'suggest' as s %} +

                            {% blocktrans %}Something seems to have gone wrong while generating your file. + Please order it again or complain to us about it.{% endblocktrans %}

                            +
                            + {% endif %} +{% endif %} + +{% endblock %} + +{% block extrabody %} +{% if waiting %} + +{% endif %} +{% endblock %} diff --git a/src/waiter/urls.py b/src/waiter/urls.py new file mode 100644 index 000000000..21352c786 --- /dev/null +++ b/src/waiter/urls.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + +urlpatterns = patterns('waiter.views', + url(r'^(?P.*)$', 'wait', name='waiter'), +) diff --git a/src/waiter/utils.py b/src/waiter/utils.py new file mode 100644 index 000000000..68d21bd79 --- /dev/null +++ b/src/waiter/utils.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from os.path import abspath, join, exists +from shutil import rmtree +from waiter.settings import WAITER_ROOT + + +def check_abspath(path): + abs_path = abspath(join(WAITER_ROOT, path)) + if not abs_path.startswith(WAITER_ROOT): + raise ValueError('Path not inside WAITER_ROOT.') + return abs_path + + +def clear_cache(path): + abs_path = check_abspath(path) + if exists(abs_path): + rmtree(abs_path) diff --git a/src/waiter/views.py b/src/waiter/views.py new file mode 100644 index 000000000..b951cc4c8 --- /dev/null +++ b/src/waiter/views.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from os.path import join +from waiter.models import WaitedFile +from waiter.settings import WAITER_URL +from django.shortcuts import render, get_object_or_404 +from django.http import HttpResponse +from django.views.decorators.cache import never_cache + + +@never_cache +def wait(request, path): + if WaitedFile.exists(path): + file_url = join(WAITER_URL, path) + else: + file_url = "" + waiting = get_object_or_404(WaitedFile, path=path) + + if request.is_ajax(): + return HttpResponse(file_url) + else: + return render(request, "waiter/wait.html", locals()) diff --git a/src/wolnelektury/__init__.py b/src/wolnelektury/__init__.py new file mode 100644 index 000000000..c6098f4e9 --- /dev/null +++ b/src/wolnelektury/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from .celery import app as celery_app + +default_app_config = 'wolnelektury.apps.WLCoreConfig' diff --git a/src/wolnelektury/apps.py b/src/wolnelektury/apps.py new file mode 100644 index 000000000..a45bfe24f --- /dev/null +++ b/src/wolnelektury/apps.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.apps import AppConfig + +class WLCoreConfig(AppConfig): + name = 'wolnelektury' + + def ready(self): + from . import signals diff --git a/src/wolnelektury/celery.py b/src/wolnelektury/celery.py new file mode 100644 index 000000000..ae5ce20ce --- /dev/null +++ b/src/wolnelektury/celery.py @@ -0,0 +1,21 @@ +from __future__ import absolute_import + +import os +import sys + +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path = [ + os.path.join(ROOT, 'apps'), + os.path.join(ROOT, 'lib'), + os.path.join(ROOT, 'lib/librarian'), +] + sys.path + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'wolnelektury.settings') + +from celery import Celery +from django.conf import settings + +app = Celery('wolnelektury') + +app.config_from_object('django.conf:settings') +app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) diff --git a/src/wolnelektury/context_processors.py b/src/wolnelektury/context_processors.py new file mode 100644 index 000000000..5885e039b --- /dev/null +++ b/src/wolnelektury/context_processors.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings + +def extra_settings(request): + return { + 'STATIC_URL': settings.STATIC_URL, + 'FULL_STATIC_URL': request.build_absolute_uri(settings.STATIC_URL) + } diff --git a/src/wolnelektury/locale-contrib/de/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..9dfa5d3ef Binary files /dev/null and b/src/wolnelektury/locale-contrib/de/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/de/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..5c198ea2e --- /dev/null +++ b/src/wolnelektury/locale-contrib/de/LC_MESSAGES/django.po @@ -0,0 +1,668 @@ +# German translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-08-14 17:50+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: de \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "Einspeichern" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +#, fuzzy +msgid "E-mail address" +msgstr "E-Mail Adresse" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "E-Mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "Username" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "Dieses Account ist zurzeit inaktiv." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "Die E-Mail-Adresse und/oder das Password sind nicht korrekt." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "Der Username ist nicht korrekt." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +#, fuzzy +msgid "The login and/or password you specified are not correct." +msgstr "Der Username ist nicht korrekt." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "E-Mail (fakultativ)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +#, fuzzy +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "Usernamen können nur aus Buchstaben, Ziffern" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "Dieser Username ist schon besetzt. Wählen Sie bitte einen anderen." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +#, fuzzy +msgid "A user is already registered with this e-mail address." +msgstr "Ein User ist schon mit dieser E-Mail-Adresse verbunden." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "Password (nochmals)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "Sie müssen dasselbe Password jedesmal eintippen." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +#, fuzzy +msgid "This e-mail address is already associated with this account." +msgstr "Die E-Mail ist schon mit diesem Account verbunden." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +#, fuzzy +msgid "This e-mail address is already associated with another account." +msgstr "Diese E-Mail-Adresse ist schon mit einem anderen Account verbunden." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "Aktuelles Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "Neues Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "Neues Password (nochmals)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "Tippe Ihr Password ein." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "Diese E-Mail-Adresse ist noch mit keinem anderen Account verbunden." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +#, fuzzy +msgid "email address" +msgstr "E-Mail Adresse" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +#, fuzzy +msgid "email addresses" +msgstr "E-Mail Adresse" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +#, fuzzy +msgid "email confirmation" +msgstr "E-Mail-Adresse-Bestätigung" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +#, fuzzy +msgid "email confirmations" +msgstr "E-Mail-Adresse-Bestätigung" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "Erfolgreich als %(user)s eingeloggt." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "BestBestätigungsmail an %(email)s gesendet" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, fuzzy, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "Die E-Mail-Adresse %(email)s gelöscht." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "Die E-Mail-Adresse %(email)s gelöscht." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +#, fuzzy +msgid "Your primary e-mail address must be verified" +msgstr "Ihre E-Mail-Adresse wurd erfolgreich verifiziert." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "Die Haupt-Email-Adresse eingestellt" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "Password erfolgreich geändert." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "Password erfolgreich erstellt." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "Sie haben sich ausgeloggt." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +#, fuzzy +msgid "Your account has no password set up." +msgstr "Ihr lokales Account hat keine Schlüsselworteinstellung" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +#, fuzzy +msgid "Your account has no verified e-mail address." +msgstr "Ihr lokales Account hat keine verfizierte Email-Adresse" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +#, fuzzy +msgid "The social account has been connected" +msgstr "Das Social-Account wurde abgeschaltet." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "Das Social-Account wurde abgeschaltet." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "Falsche Antwort beim Erhalten des Fragentokens von \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "Falsche Antwort beim Erhalten des Zugangstokens von \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "Keine Fragentokens für \"%s\" gespeichert." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "Keine Zugangstokens für \"%s\" gespeichert." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "Kein Zugagng zu privaten Angaben bei \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "Account" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "E-Mail Adresse" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +#, fuzzy +msgid "The following e-mail addresses are associated with your account:" +msgstr "Die folgenden E-Mail-Adressen wurden mit Ihrem Account verbunden:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "Verifiziert" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "Unverifiziert" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "Primär" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "Stelle als primär ein" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "Verifizierung wiedersenden" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "Entfernen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "Warnung:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" +"Sie haben jetzt keine Email-Adresse eingestellt. Sie sollen eine Email-" +"Adresse einstellen, um Ihr Schlüsselwort zu resetieren, um wichtige " +"Informationen zu bekommen." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "E-Mail-Adress eintippen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "Add E-Mail eintippen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "Wollen Sie wirklich die angegebene E-Mail-Adresse löschen?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +#, fuzzy +msgid "Confirm E-mail Address" +msgstr "Die Haupt-Email-Adresse eingestellt" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, fuzzy, python-format +msgid "" +"Please confirm that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Sie haben bestätigt, dass %(email)s ist " +"mit dem User '%(user)s' verbunden." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, fuzzy, python-format +msgid "" +"You have confirmed that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Sie haben bestätigt, dass %(email)s ist " +"mit dem User '%(user)s' verbunden." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "Anmelden" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, fuzzy, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, sign up \n" +"for a %(site_name)s account and sign in below:" +msgstr "" +"Loggen Sie sich bitte ein mit einem\n" +"von Accounts einer dritten Partei. Oder, registrieren Sie for a %(site_name)s den " +"Account und loggen Sie sich ein\n" +"hierunter:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "oder" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "Password vergessen?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "Ausgeloggt" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "Password ändern" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "Password löschen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "" +"Sie können Ihr Schlüsselwort löschen, weil Sie jetzt durch OpenID " +"eingeloggt sind." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "Password löschen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "Password gelöscht" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "Password wurde gelöscht." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "Password neu erstellen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" +"Password vergessen? Tippe unten Ihre E-Mail-Adresse ein, dann senden wir " +"Ihnen eine E-Mail, um das Password zu ändern." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "Password neu erstellen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +#, fuzzy +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" +"Wir haben Ihnen eine Email geschickt. Falls Sie sie nicht innerhalb von " +"einigen Minuten erhalten, wenden Sie sich bitte an uns %(CONTACT_EMAIL)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "Falscher Token" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a new password " +"reset." +msgstr "" +"Der Passwort-Reset-Link war falsch, da er schon möglicherweise benutzt " +"worden war. Bitten Sie um ein Reset " +"eines neuen Passwortes." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "Password ändern" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "Password wurde geändert" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "Password erstellen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "Registrieren" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "Anmelden" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please sign " +"in." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "Verifizieren Sie Ihre E-Mail-Adresse" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to %(email)s for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"Note: you can still change " +"your e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" +"Sie bekommen diese Email an %(site_domain)s, weil Sie or jemand anderer " +"Ihr Schlüsselwort erhalten will. Sie können diese Nachricht ignorieren, " +"wenn Sie um Neustellung des Schlüssekworts nicht gebeten haben. Klicken " +"Sie an das Link unten, um Ihr Schlüsselwort neu zu stellen.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"Falls Sie vergessen haben, ist Ihr Benutzername: %(username)s.\n" +"\n" +"Vielen dank, dass Sie unsere Webseite benutzt haben!\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "Password neu stellen E-Mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "Notiz" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "Sie sind schon als %(user_display)s eingeloggt." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "OpenID Registrieren" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "Inaktives Account" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "Dieses Account ist inaktiv." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "Social-Networt-Login Fehler" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +#, fuzzy +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "Ein Fehler ist eingetreten beim Einloggen mithilfe Social-Networt-Account." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Account-Beziehungen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "Sie können sich einloggen mittels eines von folgenden Accounts Dritter:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +#, fuzzy +msgid "You currently have no social network accounts connected to this account." +msgstr "Das Social-Network-Account wurde mit Ihrem Account verbunden." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "Fügen Sie ein fremdes Account hinzu." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "Login annulliert" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, fuzzy, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" +"Sie haben sich entschieden, das Einloggen in unsere Webseite mittels " +"eines von Ihren existierenden Accounts. Falls dies ein Fehler war, gehen " +"Sie auf sign in." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" +"Sie werden Ihr %(provider_name)s Account benutzen, um\n" +"sich in %(site_name)s einzuloggen. Der letzte Schritt ist, den folgenden " +"Formular auszufüllen" + diff --git a/src/wolnelektury/locale-contrib/django.pot b/src/wolnelektury/locale-contrib/django.pot new file mode 100644 index 000000000..01486b24b --- /dev/null +++ b/src/wolnelektury/locale-contrib/django.pot @@ -0,0 +1,611 @@ +# Translations template for PROJECT. +# Copyright (C) 2013 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2013. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +msgid "E-mail address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +msgid "The login and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +msgid "A user is already registered with this e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +msgid "This e-mail address is already associated with this account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +msgid "This e-mail address is already associated with another account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +msgid "email address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +msgid "email addresses" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +msgid "email confirmation" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +msgid "email confirmations" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +msgid "Your primary e-mail address must be verified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +msgid "Your account has no password set up." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +msgid "Your account has no verified e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +msgid "The social account has been connected" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +msgid "The following e-mail addresses are associated with your account:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +msgid "Confirm E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, python-format +msgid "" +"Please confirm that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, python-format +msgid "" +"You have confirmed that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, sign up \n" +"for a %(site_name)s account and sign in below:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a new password " +"reset." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please sign " +"in." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to %(email)s for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"Note: you can still change " +"your e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +msgid "You currently have no social network accounts connected to this account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" + diff --git a/src/wolnelektury/locale-contrib/en/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..7a4cdebe4 Binary files /dev/null and b/src/wolnelektury/locale-contrib/en/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/en/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..f407f7ad8 --- /dev/null +++ b/src/wolnelektury/locale-contrib/en/LC_MESSAGES/django.po @@ -0,0 +1,671 @@ +# English translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-08-14 17:50+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: en \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "Remember Me" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +#, fuzzy +msgid "E-mail address" +msgstr "E-mail Addresses" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "E-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "Username" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "This account is currently inactive." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "The e-mail address and/or password you specified are not correct." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "The username and/or password you specified are not correct." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +#, fuzzy +msgid "The login and/or password you specified are not correct." +msgstr "The username and/or password you specified are not correct." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "E-mail (optional)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +#, fuzzy +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "Usernames can only contain letters, numbers and underscores." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "This username is already taken. Please choose another." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +#, fuzzy +msgid "A user is already registered with this e-mail address." +msgstr "A user is registered with this e-mail address." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "Password (again)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "You must type the same password each time." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +#, fuzzy +msgid "This e-mail address is already associated with this account." +msgstr "This e-mail address already associated with this account." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +#, fuzzy +msgid "This e-mail address is already associated with another account." +msgstr "This e-mail address already associated with another account." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "Current Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "New Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "New Password (again)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "Please type your current password." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "The e-mail address is not assigned to any user account" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +#, fuzzy +msgid "email address" +msgstr "E-mail Addresses" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +#, fuzzy +msgid "email addresses" +msgstr "E-mail Addresses" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +#, fuzzy +msgid "email confirmation" +msgstr "E-mail Address Confirmation" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +#, fuzzy +msgid "email confirmations" +msgstr "E-mail Address Confirmation" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "Successfully signed in as %(user)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "Confirmation e-mail sent to %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, fuzzy, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "Removed e-mail address %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "Removed e-mail address %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +#, fuzzy +msgid "Your primary e-mail address must be verified" +msgstr "Your e-mail address has already been verified" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "Primary e-mail address set" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "Password successfully changed." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "Password successfully set." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "You have signed out." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +#, fuzzy +msgid "Your account has no password set up." +msgstr "Your local account has no password setup." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +#, fuzzy +msgid "Your account has no verified e-mail address." +msgstr "Your local account has no verified e-mail address." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +#, fuzzy +msgid "The social account has been connected" +msgstr "The social account has been disconnected" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "The social account has been disconnected" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "Invalid response while obtaining request token from \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "Invalid response while obtaining access token from \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "No request token saved for \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "No access token saved for \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "No access to private resources at \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "Account" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "E-mail Addresses" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +#, fuzzy +msgid "The following e-mail addresses are associated with your account:" +msgstr "The following e-mail addresses are associated to your account:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "Verified" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "Unverified" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "Primary" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "Make Primary" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "Re-send Verification" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "Remove" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "Warning:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "Add E-mail Address" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "Add E-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "Do you really want to remove the selected e-mail address?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +#, fuzzy +msgid "Confirm E-mail Address" +msgstr "Primary e-mail address set" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, fuzzy, python-format +msgid "" +"Please confirm that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" +"You have confirmed that %(email)s is an " +"e-mail address for user '%(user)s'." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, fuzzy, python-format +msgid "" +"You have confirmed that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" +"You have confirmed that %(email)s is an " +"e-mail address for user '%(user)s'." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "Sign In" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, fuzzy, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, sign up \n" +"for a %(site_name)s account and sign in below:" +msgstr "" +"Please sign in with one\n" +"of your existing third party accounts. Or, sign up for a %(site_name)s account and sign " +"in\n" +"below:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "or" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "Forgot Password?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "Signed Out" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "Change Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "Delete Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "" +"You may delete your password since you are currently logged in using " +"OpenID." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "delete my password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "Password Deleted" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "Your password has been deleted." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "Password Reset" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "Reset My Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +#, fuzzy +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" +"We have sent you an e-mail. If you do not receive it within a few " +"minutes, contact us at %(CONTACT_EMAIL)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "Bad Token" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a new password " +"reset." +msgstr "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a new password " +"reset." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "change password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "Your password is now changed." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "Set Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "Signup" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "Sign Up" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please sign " +"in." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "Verify Your E-mail Address" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to %(email)s for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"Note: you can still change " +"your e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "Password Reset E-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "Note" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "you are already logged in as %(user_display)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "OpenID Sign In" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "Account Inactive" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "This account is inactive." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "Social Network Login Failure" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +#, fuzzy +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "" +"An error occured while attempting to login via your social network " +"account." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Account Connections" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"You can sign in to your account using any of the following third party " +"accounts:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +#, fuzzy +msgid "You currently have no social network accounts connected to this account." +msgstr "The social account has been connected to your existing account" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "Add a 3rd Party Account" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "Login Cancelled" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, fuzzy, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to sign in." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" + diff --git a/src/wolnelektury/locale-contrib/es/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..a5ad327ba Binary files /dev/null and b/src/wolnelektury/locale-contrib/es/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/es/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..bc180c5e3 --- /dev/null +++ b/src/wolnelektury/locale-contrib/es/LC_MESSAGES/django.po @@ -0,0 +1,674 @@ +# Spanish translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-08-14 17:50+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: es \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "Contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "Recuérdame" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +#, fuzzy +msgid "E-mail address" +msgstr "Direcciones de correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "Correo elctrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "Nombre de usuario" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "Esta cuenta de usuario está actualmente inactiva." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "El correo electrónico y/o contraseña son incorrectos." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "El nombre de usuario y/o contraseña son incorrectos." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +#, fuzzy +msgid "The login and/or password you specified are not correct." +msgstr "El nombre de usuario y/o contraseña son incorrectos." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "Correo elctrónico (opcional)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +#, fuzzy +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "Nombre de usuario sólo puede consistir de letras, números y guiones bajos" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "El nombre de usuario está ocupado. Por favor, elija otro." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +#, fuzzy +msgid "A user is already registered with this e-mail address." +msgstr "Un usuario está registrado con esta direccin de correo electrónico." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "Contraseña (otra vez)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "Tiene que introducir cada vez la misma contraseña." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +#, fuzzy +msgid "This e-mail address is already associated with this account." +msgstr "Este correo electrónico ya ha sido asociado a esta cuenta de usuario." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +#, fuzzy +msgid "This e-mail address is already associated with another account." +msgstr "Este correo electrónico ya ha sido asociado a otra cuenta de usuario." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "Contraseña actual" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "Nueva contarseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "Nueva contarseña (otra vez)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "Introduzca su contraseña actual, por favor." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "Este correo electrónico no ha sido asignado a ninguna cuenta de usuario." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +#, fuzzy +msgid "email address" +msgstr "Direcciones de correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +#, fuzzy +msgid "email addresses" +msgstr "Direcciones de correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +#, fuzzy +msgid "email confirmation" +msgstr "Confirmación de la dirección de correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +#, fuzzy +msgid "email confirmations" +msgstr "Confirmación de la dirección de correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "Ha iniciado sesión como %(user)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "La confirmación ha sido enviada a %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, fuzzy, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "Dirección de correo electrónico eliminado %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "Dirección de correo electrónico eliminado %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +#, fuzzy +msgid "Your primary e-mail address must be verified" +msgstr "Su correo electrónico ha sido verificado" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "La dirección de correo electrónico principal establecida" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "Contraseña ha sido cambiada con éxito." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "Contraseña ha sido establecida con éxito." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "Ha cerrado sesión." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +#, fuzzy +msgid "Your account has no password set up." +msgstr "Su cuenta de usuario local todavía no tiene la contraseña establecida." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +#, fuzzy +msgid "Your account has no verified e-mail address." +msgstr "" +"Su cuenta de usuario local no dispone de direcciones de correo " +"electrónico verificadas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +#, fuzzy +msgid "The social account has been connected" +msgstr "La cuenta social ha sido desconectada" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "La cuenta social ha sido desconectada" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "Respuesta inválida al obtener request token de \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "Respuesta inválida al obtener access token de \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, fuzzy, python-format +msgid "No request token saved for \"%s\"." +msgstr "No hay request token guardado para \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, fuzzy, python-format +msgid "No access token saved for \"%s\"." +msgstr "No hay acces token guardado para \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "No hay acceso a recursos privados en \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "Cuenta de usuario" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "Direcciones de correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +#, fuzzy +msgid "The following e-mail addresses are associated with your account:" +msgstr "" +"A su cuenta de usuario están asociados los siguientes direcciones de " +"correo electrónico:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "Verificado" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "No verificado" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "Principal" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "La dirección de correo electrónico principal" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "Reenviar verificación" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "Borrar" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "Aviso:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" +"Actualmente no tiene ninguna dirección de correo electrónico configurada." +" Debe agregar una para poder recibir notificaciones, restablecer su " +"contraseña etc." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "Agregar dirección de correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "Agregar correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "¿Está seguro que quiere borrar el correo electrónico seleccionado?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +#, fuzzy +msgid "Confirm E-mail Address" +msgstr "La dirección de correo electrónico principal establecida" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, fuzzy, python-format +msgid "" +"Please confirm that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Ha confirmado que %(email)s es la " +"dirección del correo electrónico para usuario '%(user)s'." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, fuzzy, python-format +msgid "" +"You have confirmed that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Ha confirmado que %(email)s es la " +"dirección del correo electrónico para usuario '%(user)s'." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "Iniciar sesión" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, fuzzy, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, sign up \n" +"for a %(site_name)s account and sign in below:" +msgstr "" +"Por favor, inicie sesión con una \n" +" de sus cuentas de terceros o regístrese en la cuenta de %(site_name)s e " +"inicie sesión \n" +"abajo:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "o" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "¿Olvidaste tu contraseña?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "Cerrar sesión" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "Cambia la contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "Borra la contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "Puede borrar su contraseña ya que ha iniciado sesión con OpenID." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "borra mi contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "La contraseña ha sido borrada" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "Su contraseña ha sido borrada. " + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "Restablecimiento de la contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" +"¿Olvidaste tu contraseña? Introduce aquí tu dirección de correo " +"electrónico y te enviamos un mensaje que te permitirá restablecerla. " + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "Restablecimiento de la contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +#, fuzzy +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" +"Le hemos enviado un correo. Si no recibe ningún correo dentro de unos " +"minutos, póngase en contacto con nosotros a través de %(CONTACT_EMAIL)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "Token incorrecto" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a new password " +"reset." +msgstr "" +"El enlace de restablecimiento de la contraseña ha sido inválido. Es " +"probable que ya haya sido usado. Por favor, solicite uno nuevo new password reset." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "cambia la contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "Su contraseña ya se ha cambiado." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "Establecer contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "Registrarse" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "Registrarse" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please sign " +"in." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "Verifique su dirección de correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to %(email)s for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"Note: you can still change " +"your e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" +"Ha recibido este correo porque usted u otra persona ha solicitado la " +"contraseña de su cuenta de usuario en %(site_domain)s. \n" +"Si no ha solicitado restablecimiento de su contraseña, pase de este " +"mensaje. Abra el enlace de abajo para restablecer su contraseña.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"Le recordamos que su nombre de usuario es %(username)s.\n" +" \n" +"¡Gracias por usar nuestra página!\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "La dirección de correo electrónico en caso de restablecer la contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "Nota" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "ya está conectado como %(user_display)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "Iniciar sesión con OpenID " + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "La cuenta de usuario inactiva" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "Esta cuenta de usuario está inactiva." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "Error al iniciar sesión en la red social" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +#, fuzzy +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "" +"Ha ocurrido un error al intentar iniciar sesión a través de su cuenta de " +"red social." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Conexiones de la cuenta de usuario" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"Puede iniciar sesión en su cuenta de usuario a través de cualquiera de " +"las siguientes cuentas de terceros:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +#, fuzzy +msgid "You currently have no social network accounts connected to this account." +msgstr "La cuenta social ha sido conectada con su cuenta de usuario existente " + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "Agrega una cuenta de terceros" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "Nombre de usuario ha sido cancelado" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, fuzzy, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" +"Ha decidido anular lo de iniciar sesión en nuestra página usando una de " +"sus cuentas de usuario existentes. Si se ha equivocado, pase asign in, por favor." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" +"Está a punto de usar su %(provider_name)s cuenta de usuario para iniciar " +"sesión en \n" +"%(site_name)s. El último paso es rellenar este formulario:" + diff --git a/src/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..047cbaefa Binary files /dev/null and b/src/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..7703f0209 --- /dev/null +++ b/src/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.po @@ -0,0 +1,612 @@ +# French translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2012. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-22 14:23+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: fr \n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +msgid "E-mail address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +msgid "The login and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +msgid "A user is already registered with this e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +msgid "This e-mail address is already associated with this account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +msgid "This e-mail address is already associated with another account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +msgid "email address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +msgid "email addresses" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +msgid "email confirmation" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +msgid "email confirmations" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +msgid "Your primary e-mail address must be verified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +msgid "Your account has no password set up." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +msgid "Your account has no verified e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +msgid "The social account has been connected" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +msgid "The following e-mail addresses are associated with your account:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +msgid "Confirm E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, python-format +msgid "" +"Please confirm that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, python-format +msgid "" +"You have confirmed that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, sign up \n" +"for a %(site_name)s account and sign in below:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a new password " +"reset." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please sign " +"in." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to %(email)s for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"Note: you can still change " +"your e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +msgid "You currently have no social network accounts connected to this account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" + diff --git a/src/wolnelektury/locale-contrib/it/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..ecc10676d Binary files /dev/null and b/src/wolnelektury/locale-contrib/it/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/it/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..c52eb4c4c --- /dev/null +++ b/src/wolnelektury/locale-contrib/it/LC_MESSAGES/django.po @@ -0,0 +1,612 @@ +# English translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2012. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-22 14:23+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: en \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +msgid "E-mail address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +msgid "The login and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +msgid "A user is already registered with this e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +msgid "This e-mail address is already associated with this account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +msgid "This e-mail address is already associated with another account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +msgid "email address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +msgid "email addresses" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +msgid "email confirmation" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +msgid "email confirmations" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +msgid "Your primary e-mail address must be verified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +msgid "Your account has no password set up." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +msgid "Your account has no verified e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +msgid "The social account has been connected" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +msgid "The following e-mail addresses are associated with your account:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +msgid "Confirm E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, python-format +msgid "" +"Please confirm that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, python-format +msgid "" +"You have confirmed that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, sign up \n" +"for a %(site_name)s account and sign in below:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a new password " +"reset." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please sign " +"in." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to %(email)s for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"Note: you can still change " +"your e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +msgid "You currently have no social network accounts connected to this account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" + diff --git a/src/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..b57074733 Binary files /dev/null and b/src/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..2d58ef078 --- /dev/null +++ b/src/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.po @@ -0,0 +1,671 @@ +# Lithuanian translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-08-14 17:50+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: lt \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"(n%100<10 || n%100>=20) ? 1 : 2)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "Slaptažodis" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "Įsiminti mane" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +#, fuzzy +msgid "E-mail address" +msgstr "El. pašto adresai" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "El. paštas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "Vartotojo vardas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "Ši paskyra yra šiuo metu neaktyvi." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "El. pašto adresas ir/arba slaptažodis nėra teisingas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "Vartotojo vardas ir/arba slaptažodis nėra teisingas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +#, fuzzy +msgid "The login and/or password you specified are not correct." +msgstr "Vartotojo vardas ir/arba slaptažodis nėra teisingas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "El. paštas (pasirenkamas)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +#, fuzzy +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "" +"Vartotojo vardas gali būti sudarytas tik iš raidžių, skaičių ir " +"pabraukimo brūkšnelių." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "Šis vartotojo vardas yra užimtas. Prašome pasirinkite kitą." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +#, fuzzy +msgid "A user is already registered with this e-mail address." +msgstr "Šiuo elektroninio pašto adresu jau yra užsiregistravęs vartotojas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "Slaptažodis (pakartoti)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "Kiekvieną kartą turite įvesti tokį patį slaptažodį." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +#, fuzzy +msgid "This e-mail address is already associated with this account." +msgstr "Šis el. pašto adresas jau yra susietas su šia paskyra." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +#, fuzzy +msgid "This e-mail address is already associated with another account." +msgstr "Šis el. pašto adresas jau yra susietas su kita paskyra." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "Dabartinis slaptažodis" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "Naujas slaptažodis" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "Naujas slaptažodis (pakartoti)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "Prašome įvesti jūsų dabartinį slaptažodį." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "Šis el. pašto adresas nėra priskirtas jokio vartotojo paskyrai." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +#, fuzzy +msgid "email address" +msgstr "El. pašto adresai" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +#, fuzzy +msgid "email addresses" +msgstr "El. pašto adresai" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +#, fuzzy +msgid "email confirmation" +msgstr "El. pašto adreso patvirtinimas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +#, fuzzy +msgid "email confirmations" +msgstr "El. pašto adreso patvirtinimas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "Sėkmingai prisijungęs kaip %(user)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "El. pašto patvirtinimas buvo išsiųstas į %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, fuzzy, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "Pašalintas el. pašto adresas %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "Pašalintas el. pašto adresas %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +#, fuzzy +msgid "Your primary e-mail address must be verified" +msgstr "Jūsų el.pašto adresas jau buvo patikrintas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "Nustatytas pagrindinis el. pašto adresas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "Slaptažodis sėkmingai pakeistas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "Slaptažodis sėkmingai nustatytas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "Jūs atsijungėte." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +#, fuzzy +msgid "Your account has no password set up." +msgstr "Jūsų vietinės paskyros slaptažodis dar yra nenustatytas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +#, fuzzy +msgid "Your account has no verified e-mail address." +msgstr "Jūsų vietinės paskyros el. pašto adresas dar nepatikrintas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +#, fuzzy +msgid "The social account has been connected" +msgstr "Socialinė paskyra buvo atjungta" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "Socialinė paskyra buvo atjungta" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "Neteisingas atsakas gaunant užklausos žetoną iš \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "Neteisingas atsakas gaunant prieigos žetoną iš \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "Nėra užklausos žetono įrašyto \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "Nėra prieigos žetono įrašyto \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "Trūksta prieigos prie privačių išteklių \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "Paskyra" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "El. pašto adresai" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +#, fuzzy +msgid "The following e-mail addresses are associated with your account:" +msgstr "Šie el. pašto adresai yra priskirti jūsų paskyrai:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "Patikrintas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "Nepatikrintas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "Pirminis" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "Padaryti pirminiu" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "Dar kartą siųsti patikrinimą" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "Pašalinti" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "Įspėjimas:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" +"Šiuo metu neturite nustatyto jokio el. pašto adreso. Jūs tikrai " +"turėtumėte pridėti el. pašto adresą, kad gautumėte pranešimus, " +"atstatytumėte jūsų slaptažodį ir t.t." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "Pridėti el. pašto adresą" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "Pridėti el. paštą" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "Ar esate tikri, kad norite pašalinti pasirinktą el. pašto adresą?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +#, fuzzy +msgid "Confirm E-mail Address" +msgstr "Nustatytas pagrindinis el. pašto adresas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, fuzzy, python-format +msgid "" +"Please confirm that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Patvirtinote, kad %(email)s yra " +"'%(user)s' vartotojo el. pašto adresas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, fuzzy, python-format +msgid "" +"You have confirmed that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Patvirtinote, kad %(email)s yra " +"'%(user)s' vartotojo el. pašto adresas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "Prisijungti" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, fuzzy, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, sign up \n" +"for a %(site_name)s account and sign in below:" +msgstr "" +"Prašome prisijungti su viena\n" +"iš jūsų third party paskyrų. Arba užsiregistruoti %(site_name)s paskyrai " +"sukurti ir prisijungti\n" +"žemiau:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "arba" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "Pamiršote slaptažodį?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "Atsijungęs" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "Keisti slaptažodį" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "Pašalinti slaptažodį" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "" +"Galite pašalinti jūsų slaptažodį, nes esate prisijungę naudodamiesi " +"OpenID." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "pašalinti mano slaptažodį" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "Slaptažodis pašalintas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "Jūsų slaptažodis pašalintas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "Slaptažodžio atstatymas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" +"Pamiršote slaptažodį? Įveskite jūsų el. pašto adresą žemiau ir mes " +"išsiųsime jums el. laišką leidžiantį jį atstatyti." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "Atstatyti mano slaptažodį" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +#, fuzzy +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" +"Jums išsiuntėme el. laišką. Jei to negausite per kelias minutes, " +"susisiekite su mumis %(CONTACT_EMAIL)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "Blogas žetonas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a new password " +"reset." +msgstr "" +"Atstatymo slaptažodžio nuoroda buvo netinkama, galbūt, nes jau buvo " +"panaudota. Prašome paprašyti naujo " +"slaptažodžio atstatymo." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "keisti slaptažodį" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "Jūsų slaptažodis pakeistas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "Nustatyti slaptažodį" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "Registracija" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "Registruotis" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please sign " +"in." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "Patikrinkite jūsų el. pašto adresą" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to %(email)s for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"Note: you can still change " +"your e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" +"Gavote šį el. laišką, nes paprašėte, arba kitas asmuo paprašė, atstatyti " +"slaptažodį jūsų paskyrai čia %(site_domain)s.\n" +"Galite į jį nekreipti dėmesio jei neprašėte slaptažodžio atstatymo. " +"Paspauskite jūsų slaptažodžio atstatymui skirtą nuorodą.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"Jūsų vartotojo vardas yra %(username)s\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "Slaptažodžio atstatymo el. laiškas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "Pastaba" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "jūs jau esate prisijungęs kaip %(user_display)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "OpenID prisijungimas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "Paskyra neaktyvi" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "Ši paskyra neaktyvi." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "Klaida " + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +#, fuzzy +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "Įvyko klaida prisijungiant per jūsų socialinio tinklo paskyrą." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Paskyros jungtys" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"Galite prisijungti prie jūsų paskyros naudodamiesi šiomis 3rd party " +"paskyromis:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +#, fuzzy +msgid "You currently have no social network accounts connected to this account." +msgstr "Ši socialinė paskyra buvo prijungta prie jūsų paskyros" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "Pridėti 3rd Party Paskyra" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "Prisijungimas atšauktas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, fuzzy, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" +"Nusprendėte atšaukti prisijungimą prie mūsų interneto svetainės " +"naudodamiesi viena iš jūsų paskyrų. Jei įvyko klaida, prašome pradėti čia" +" sign in." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" +"Jūs ruošiatės naudotis jūsų %(provider_name)s paskyra, kad " +"prisijungtumėte prie \n" +"%(site_name)s. Prašome užpildyti šią formą:" + diff --git a/src/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..3912839c1 Binary files /dev/null and b/src/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..c189ecd62 --- /dev/null +++ b/src/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.po @@ -0,0 +1,668 @@ +# Polish translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 15:46+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: 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" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "Hasło" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "Hasło musi składać się z co najmniej {0} znaków." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "Zapamiętaj mnie" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +msgid "E-mail address" +msgstr "Adres e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "E-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "Login" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "Nazwa użytkownika lub e-mail." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "Konto jest nieaktywne." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "Podany e-mail i/lub hasło są niepoprawne." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "Podany login i/lub hasło są niepoprawne." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +msgid "The login and/or password you specified are not correct." +msgstr "Podany login i/lub hasło są niepoprawne." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "E-mail (opcjonalnie)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "Login może zawierać tylko litery, cyfry i znaki @/./+/-/_." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "Ta nazwa użytkownika nie może zostać użyta. Prosimy użyć innej." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "Ten login jest zajęty. Proszę wybrać inny." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +msgid "A user is already registered with this e-mail address." +msgstr "Istnieje użytkownik o tym adresie e-mail." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "Hasło (ponownie)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "Proszę wpisać dwa razy to samo hasło." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +msgid "This e-mail address is already associated with this account." +msgstr "Ten adres e-mail jest już używany przez to konto." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +msgid "This e-mail address is already associated with another account." +msgstr "Ten adres e-mail jest już używany przez inne konto." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "Aktualne hasło" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "Nowe hasło" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "Nowe hasło (ponownie)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "Proszę wpisać swoje aktualne hasło." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "Ten adres e-mail nie jest używany przez żadne konto." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +msgid "email address" +msgstr "adres e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +msgid "email addresses" +msgstr "adresy e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +msgid "email confirmation" +msgstr "potwierdzenie adresu e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +msgid "email confirmations" +msgstr "potwierdzenia adresów e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "Zalogowano jako %(user)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "E-mail potwierdzający wysłany do %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "Adres %(email)s został potwierdzony." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "Nie można usunąć głównego adresu e-mail (%(email)s)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "Usunięto adres e-mail %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +msgid "Your primary e-mail address must be verified" +msgstr "Główny adres e-mail musi zostać potwierdzony" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "Ustawiono główny adres e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "Hasło zostało zmienione." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "Hasło zostało ustawione." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "Wylogowano." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +msgid "Your account has no password set up." +msgstr "Twoje konto nie ma ustawionego hasła." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +msgid "Your account has no verified e-mail address." +msgstr "Twoje konto nie ma potwierdzonego adresu e-mail." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +msgid "The social account has been connected" +msgstr "Konto społecznościowe zostało dołączone" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "Konto społecznościowe zostało odłączone." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "Brak dostępu do prywatnych zasobów pod adresem \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "Konto" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "Adresy e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +msgid "The following e-mail addresses are associated with your account:" +msgstr "Z Twoim kontem są związane następujące adresy e-mail:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "Potwierdzony" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "Nie potwierdzony" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "Główny" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "Ustaw główny" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "Ponownie prześlij link potwierdzający" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "Usuń" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "Uwaga:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" +"Nie masz ustawionego żadnego adresu e-mail. Dodanie adresu e-mail " +"umożliwi odzyskanie konta w przypadku utraty hasła." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "Dodaj adres e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "Dodaj e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "Czy na pewno usunąć wybrany adres e-mail?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +msgid "Confirm E-mail Address" +msgstr "Potwierdź adres e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, python-format +msgid "" +"Please confirm that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Proszę potwierdzić adres %(email)s jako " +"e-mail użytkownika '%(user_display)s'." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "Potwierdź" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." +msgstr "" +"Ten link z wiadomości e-mail jest nieprawidłowy lub nieaktualny. Możesz " +"zamówić kolejny link weryfikacyjny." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, python-format +msgid "" +"You have confirmed that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Adres %(email)s został właśnie " +"powierdzony jako e-mail dla użytkownika '%(user_display)s'." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "Zaloguj" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, sign up \n" +"for a %(site_name)s account and sign in below:" +msgstr "" +"Zaloguj za pomocą konta zewnętrznego, albo zarejestruj się w serwisie %(site_name)s i " +"zaloguj poniżej:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "lub" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "Nie pamiętasz hasła?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "Wylogowano" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "Zmień hasło" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "Usuń hasło" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "Możesz usunąć hasło, ponieważ jesteś zalogowany/-a za pomocą OpenID." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "usuń moje hasło" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "Hasło usunięte" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "Twoje hasło zostało usunięte." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "Odzyskiwanie hasła" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" +"Nie pamiętasz swojego hasła? Wpisz adres e-mail, a wyślemy Ci e-mail " +"umożliwiający zresetowanie go." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "Odzyskaj hasło" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "Prosimy o kontakt w przypadku problemów z uzyskaniem nowego hasła." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" +"E-mail został wysłany. Prosimy o kontakt, jeśli wiadomość nie dotrze w " +"ciągu kilku minut." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "Błędny klucz" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a new password " +"reset." +msgstr "" +"Link resetujący hasło jest nieprawidłowy, być może ponieważ został już " +"wcześniej użyty. Spróbuj zresetować " +"hasło ponownie." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "zmień hasło" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "Hasło zostało zmienione." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "Ustaw hasło" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "Rejestracja" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "Zarejestruj się" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please sign " +"in." +msgstr "Masz już konto? Zaloguj się." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "Rejestracja zamknięta" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "Przepraszamy, ale rejestracja jest obecnie zamknięta." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "Potwierdź swój adres e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to %(email)s for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" +"Na podany adres e-mail %(email)s została" +" wysłana wiadomość w celu weryfikacji. Proszę kliknąć w podany w tej " +"wiadomości link w celu zakończenia procesu rejestracji. Prosimy o " +"kontakt, jeśli wiadomość nie dotrze w ciągu kilku minut." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" +"W celu korzystania z tej części strony wymagamy\n" +"potwierdzenia tożsamości. W tym celu konieczne jest\n" +"potwierdzenie adresu e-mail. " + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" +"Na podany adres została wysłana wiadomość w celu\n" +"weryfikacji. Proszę kliknąć na link wewnątrz tej wiadomości. Prosimy\n" +"o kontakt, jeśli wiadomość nie dotrze w ciągu kilku minut." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"Note: you can still change " +"your e-mail address." +msgstr "" +"Uwaga: nadal możesz zmienić " +"swój adres e-mail." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" +"Użytkownik '%(user_display)s' podał ten adres e-mail na stronie " +"%(site_name)s.\n" +"\n" +"Aby go potwierdzić, przejdź do %(activate_url)s\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" +"Otrzymujesz tego e-maila, ponieważ zostaliśmy poproszeni o zresetowanie " +"hasła dla konta w serwisie %(site_domain)s.\n" +"Możesz go zignorować, jeśli prośba nie pochodzi od Ciebie. Wejdź pod " +"poniższy link, aby zresetować swoje hasło.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"W razie czego, Twój login to: %(username)s.\n" +"\n" +"Miłego czytania!\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "E-mail resetujący hasło" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "Zwróć uwagę" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "jesteś już zalogowany/-a jako %(user_display)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "Logowanie przy użyciu OpenID" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "Konto nieaktywne" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "To konto jest nieaktywne." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "Błąd podczas logowania przy użyciu sieci społecznościowej." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "" +"Podczas próby zalogowania za pośrednictwej konta w sieci społecznościowej" +" wystąpił błąd." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Powiązania konta" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"Możesz zalogować się na swoje konto używając następujących kont " +"zewnętrznych:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +msgid "You currently have no social network accounts connected to this account." +msgstr "" +"Aktualnie do Twojego konta nie są podłączone żadne konta w sieciach " +"społecznościowych." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "Dodaj konto zewnętrzne" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "Logowanie anulowane" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" +"Logowanie do serwisu za pomocą istniejącego konta zostało anulowane. " +"Jeśli był to błąd, przejdź do strony " +"logowania." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" +"Za chwilę użyjesz konta w serwisie %(provider_name)s aby zalogować się \n" +"do serwisu %(site_name)s. Zanim to nastąpi, wypełnij proszę ten krótki " +"formularz:" + diff --git a/src/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..df98508d7 Binary files /dev/null and b/src/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..9c9f8156b --- /dev/null +++ b/src/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.po @@ -0,0 +1,613 @@ +# Russian translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2012. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-22 14:23+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: ru \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" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +msgid "E-mail address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +msgid "The login and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +msgid "A user is already registered with this e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +msgid "This e-mail address is already associated with this account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +msgid "This e-mail address is already associated with another account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +msgid "email address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +msgid "email addresses" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +msgid "email confirmation" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +msgid "email confirmations" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +msgid "Your primary e-mail address must be verified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +msgid "Your account has no password set up." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +msgid "Your account has no verified e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +msgid "The social account has been connected" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +msgid "The following e-mail addresses are associated with your account:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +msgid "Confirm E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, python-format +msgid "" +"Please confirm that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, python-format +msgid "" +"You have confirmed that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, sign up \n" +"for a %(site_name)s account and sign in below:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a new password " +"reset." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please sign " +"in." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to %(email)s for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"Note: you can still change " +"your e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +msgid "You currently have no social network accounts connected to this account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" + diff --git a/src/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..d6335b97c Binary files /dev/null and b/src/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..0a86ef3e2 --- /dev/null +++ b/src/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.po @@ -0,0 +1,673 @@ +# Ukrainian translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-08-14 17:49+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: uk \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" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "Пароль" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "Запам’ятати мене" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +#, fuzzy +msgid "E-mail address" +msgstr "Електронні адреси" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "E-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "Ім’я користувача" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "Акаунт на даний момент є неактивним." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "Вказані електронна адреса та/або пароль неправильні." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "Вказані ім’я користувача та/або пароль неправильні." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +#, fuzzy +msgid "The login and/or password you specified are not correct." +msgstr "Вказані ім’я користувача та/або пароль неправильні." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "E-mail (факультативно)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +#, fuzzy +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "Ім’я користувача може містити тільки букви, цифри та підчеркування." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "Це ім’я користувача вже використано. Будь ласка, виберіть інше." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +#, fuzzy +msgid "A user is already registered with this e-mail address." +msgstr "Користувач з такою електронною адресою вже існує." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "Пароль (повторити)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "Впишіть двічі такий самий пароль." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +#, fuzzy +msgid "This e-mail address is already associated with this account." +msgstr "Ця електронна адреса вже пов'язана з цім акаунтом." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +#, fuzzy +msgid "This e-mail address is already associated with another account." +msgstr "Ця електронна адреса вже пов'язана з іншим акаунтом." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "Актуальний пароль" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "Новий пароль" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "Новий пароль (повторити)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "Введіть будь ласка Ваш теперішній пароль." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "Ця електронна адреса не пов'язана з жодним акаунтом." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +#, fuzzy +msgid "email address" +msgstr "Електронні адреси" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +#, fuzzy +msgid "email addresses" +msgstr "Електронні адреси" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +#, fuzzy +msgid "email confirmation" +msgstr "Підтвердження електронної адреси." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +#, fuzzy +msgid "email confirmations" +msgstr "Підтвердження електронної адреси." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "Ви успішно увійшли як %(user)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "Подвідомлення для підтвердження реєстрації вислано на %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, fuzzy, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "Видалено електронну адресу %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "Видалено електронну адресу %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +#, fuzzy +msgid "Your primary e-mail address must be verified" +msgstr "Вашу електронну адресу підтверджено." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "Встановлено основну електронну адресу" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "Пароль успішно змінено." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "Успішно встановлено пароль." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "Ви вийшли з акаунту." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +#, fuzzy +msgid "Your account has no password set up." +msgstr "Для Вашого локального акаунту не встановлено пароля." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +#, fuzzy +msgid "Your account has no verified e-mail address." +msgstr "" +"Для Вашого локального акаунту не встановлено перевіреної електронної " +"адреси." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +#, fuzzy +msgid "The social account has been connected" +msgstr "Обліковий запис в соціальній мережі від'єднано." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "Обліковий запис в соціальній мережі від'єднано." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "Акаунт" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "Електронні адреси" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +#, fuzzy +msgid "The following e-mail addresses are associated with your account:" +msgstr "З Вашим акаунтом пов'язані наступні електронні адреси:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "Перевірено" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "Неперевірено" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "Основна" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "Зробити основною" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "Надіслати ще раз повідомлення для перевірки" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "Видалити" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "Попередження:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" +"Ви не додали жодної електронної адреси. Рекомендуємо Вам додати адресу, " +"для цього щоб отримувати повідомлення, мати можливість відновлення паролю" +" тощо." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "Додати електронну адресу" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "Додати електронну адресу" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "Чи справді хочете видалити вибрану адресу?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +#, fuzzy +msgid "Confirm E-mail Address" +msgstr "Встановлено основну електронну адресу" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, fuzzy, python-format +msgid "" +"Please confirm that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Ви підтвердили, що адреса %(email)s є " +"адресою коричтувача '%(user)s'." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, fuzzy, python-format +msgid "" +"You have confirmed that %(email)s is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Ви підтвердили, що адреса %(email)s є " +"адресою коричтувача '%(user)s'." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "Увійти в акаунт" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, fuzzy, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, sign up \n" +"for a %(site_name)s account and sign in below:" +msgstr "" +"Увійдіть за допомогою\n" +"існуючого облікового запису у іншій системі. Можете також, увійти в акаунт %(site_name)s та увійти\n" +"нижче:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "або" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "Забули пароль?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "Ви вийшли з акаунту." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "Змінити пароль" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "Видалити пароль" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "Можете видалити свій пароль, тому що зараз ви увійшли за допомогою OpenID." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "видалити мій пароль" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "Пароль видалено" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "Ваш пароль видалено." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "Зміна паролю" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" +"Забули пароль? Введіть свою електронну адресу, щоб отримати інструкції " +"щодо встановлення нового паролю." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "Змінити мій пароль" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +#, fuzzy +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" +"Вам було вислано повідомлення. Якщо не отримаєте його протягом кількох " +"хвилин, напишіть на адресу %(CONTACT_EMAIL)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a new password " +"reset." +msgstr "" +"Посилання на зміну пароля було неправильним, тому що його вже " +"використали. Будь ласка, замовте ще одну" +" зміну пароля." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "змінити пароль" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "Ваш пароль змінено." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "Встановити пароль" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "Реєстрація" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "Реєструватися" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please sign " +"in." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "Перевірити електронну адресу" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to %(email)s for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"Note: you can still change " +"your e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" +"Ви отримали це повідомлення, тому що хтось попросив про зміну пароля для " +"Вашого акаунту на сайті %(site_domain)s.\n" +"Якщо ви не просили про зміну, можете проігнорувати це повідомлення. Для " +"зміни пароля натисніть посилання.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"Нагадуємо, що Ваше ім'я користувача це %(username)s.\n" +"\n" +"Дякуємо за користування нашим сайтом!\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "Повідомлення для встановлення нового паролю" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "Увага" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "ви вже увійшли як користувач %(user_display)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "Увійти за допомогою OpenID" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "Неактивний акаунт" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "Цей акаунт неактивний." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "Неможливо увійти в систему за допомогою соціальної мережі." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +#, fuzzy +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "" +"Під час спроби увійти за допомоги облікового запису у соціальній мережі " +"наступила помилка." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Пов’язані облікові записи" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"Можете увійти у Ваш акаунт за допомогою облікових записів у наступних " +"системах:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +#, fuzzy +msgid "You currently have no social network accounts connected to this account." +msgstr "Ваш обліковий запис у соціальній мережі пов'язано з існуючим акаунтом." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "Додати обліковий запис у іншій системі" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "Спробу увійти в систему скасовано." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, fuzzy, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" +"Ви вирішили скасувати спробу увійти в систему за допомогою вже існуючого " +"облікового запису. Якщо це помилка, перейдіть до увійти." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" +"Хочете скористатися вашим обліковим записом %(provider_name)s щоб увійти " +"на сайт \n" +"%(site_name)s. Для завершення процесу, заповніть будь ласка наступну " +"форму:" + diff --git a/src/wolnelektury/locale/de/LC_MESSAGES/django.mo b/src/wolnelektury/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..2a83addfe Binary files /dev/null and b/src/wolnelektury/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/de/LC_MESSAGES/django.po b/src/wolnelektury/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..df2e21286 --- /dev/null +++ b/src/wolnelektury/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,1126 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Einloggen" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "Eingeloggt als User %(user)s" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "Registrieren" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "Sie müssen eingeloggt sein, um fortzusetzen." + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Die gewünschte Webseite existiert nicht" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "Seite nicht gefunden." + +#: templates/404.html:14 +msgid "" +"We are sorry, but this page does not exist. Please check if you entered " +"correct address or go to " +msgstr "" +"Die gesuchte Seite existiert leider nicht mehr. Überprüfen Sie bitte, ob Sie " +"sich bei der Eingabe der URL in der Adresszeile des Browsers vertippt haben " +"oder gehen Sie zur Startseite" + +#: templates/404.html:14 +msgid "main page" +msgstr "Startseite" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "Serverfehler" + +#: templates/500.html:19 +msgid "" +"

                            The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"blog.

                            Inform our administrators about the " +"error.

                            " +msgstr "" +"

                            Wolnelektury.pl ist zurzeit nicht verfügbar. Besuchen Sie unsere " +"Startseite Blog . " +"Informieren Sie uns " +"Administratoren über den Fehler. " + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "Service nicht verfügbar" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "Wolnelektury.pl wegen Wartungsarbeiten momentan nicht verfügbar." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "Internetbibliothek WolneLektury.pl" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "Was Neues?" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "Letzte Publikationen" + +#: templates/main_page.html:41 +msgid "News" +msgstr "News" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "Leistungen" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "Melden Sie einen Bug oder Vorschlag." + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "Der Katalog als PDF-Datei herunterladen." + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "Widget" + +#: templates/main_page.html:59 +#, fuzzy +msgid "Missing a book?" +msgstr "Brauchen Sie ein Buch?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "Plan der Veröffentlichung" + +#: templates/main_page.html:71 +#, fuzzy +msgid "Information" +msgstr "Format öffnen" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "das genutzte Bild" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "in WolneLektury.pl" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" %(c)s free reading you have right to\n" +" " +msgid_plural "" +"\n" +" %(c)s free readings you have right to\n" +" " +msgstr[0] "" +"\n" +"Sie haben %(c)s freies Werk zur " +"Verfügung\n" +" " +msgstr[1] "" +"\n" +"Sie haben %(c)s freie Werke zur " +"Verfügung\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "Willkommen" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "Password" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "E-Mail" + +#: templates/superbase.html:74 templates/user.html:14 +#, fuzzy +msgid "Social accounts" +msgstr "oder melde dich an:" + +#: templates/superbase.html:77 +#, fuzzy +msgid "My shelf" +msgstr "Mein Bücherregal" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "Administration" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "Ausloggen" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "Suchen" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "Sprachversionen" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" +"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" +"\t\t\t\tHosting: ICM.\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tWolne Lektury ist das Projekt derStiftung Modernes Polen.\n" +"\t\t\t\tDigitalisierung wird von der Natonalbibliothek ausgeführt, Exemplare aus dem Bücherbestand der " +"NB. \n" +"\t\t\t\tHosting EO Networks.\n" +"\t\t\t\t" + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\t Stiftung Modernes Polen, 00-514 Warschau, Marszałkowska 84/92, " +"Wohnungsnummer 125, Telefon/Fax: +48 (22) 621-30-17\n" +" E-Mail: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "Schließen" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "Laden" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "User" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Webseite-Administration" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "Übersetzungen" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "fortgeschritten" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "vereinfacht " + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "Buch importieren" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "Password vergessen?" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +#, fuzzy +msgid "Sign in using:" +msgstr "Einloggen" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "oder Registrieren" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgstr[0] "" +"\n" +"Wir haben eine Arbeit in Wolne Lektury veröffentlicht!\n" +"Hilfen Sie uns bei der Entwicklung der Bibliothek und bereite neue Titel " +"frei von\n" +"Ünterstütze uns " +"vor\n" +"oder mit einer Überweisung 1% Ihrer Einkommensteuer .\n" +msgstr[1] "" +"\n" +"Wir haben %(c)s Arbeiten in Wolne Lektury veröffentlicht!\n" +"Hilfen Sie uns bei der Entwicklung der Bibliothek und bereite neue Titel " +"frei von\n" +"Ünterstütze uns " +"vor\n" +"oder mit einer Überweisung 1% Ihrer Einkommensteuer .\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" +"Werde Redakteur/in bei Wolne Lektury! Schau, ob wir gerade an der " +"Veröffentlichung der Schullektüre arbeiten, die du ausgesucht hast. Um " +"eigene Texte zu veröffentlichen, musst du vorher auf unserer redaktionellen " +"Online-Plattform eingeloggt sein. " + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "Mehr..." + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "OpenID registrieren" + +#: templates/openid/login.html:27 +#, fuzzy +msgid "Sign In" +msgstr "Einloggen" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "zurück" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "weiter" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "Den Zugang zu Wolne Lektury authorisieren" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user %(user)s." +msgstr "" +"Bitte bestätigen Sie den Zugang zu Wolne Lektury %(user)s." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Konto-Beziehungen" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "Sie können mithilfe folgenden fremden Accounts registrieren." + +#: templates/socialaccount/connections.html:36 +#, fuzzy +msgid "Remove" +msgstr "löschen" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "Sie haben noch kein Social-Networt-Konto mit diesem Konto verbunden." + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "Füge ein fremdes Konto hinzu" + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "Login annulliert" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" +"Sie haben entschieden, sich in dieser Seite nicht mit erschafftn Kontos " +"einzuloggen. Wenn es aus Versehen passiert ist, gehen Sie bitte Registrieren voran." + +#~ msgid "Listing of all audiobooks" +#~ msgstr "Audiobücherverzeichnis" + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "MP3-Werkverzeichnis" + +#, fuzzy +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "Werkverzeichnis" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "Die Audiothek der Schulbücher der Stiftung Nowoczesna Polska.\n" +#~ "Sie können diese Audiothek kostenlos und unbeschränkt nutzen.\n" +#~ "Die Audiobücher werden von bekannten Schauspielerinnen und Schauspielern, " +#~ "u. a. von Danuta Stenka und Jan Peszek, aufgenommen." + +#~ msgid "See also" +#~ msgstr "Sehe auch" + +#~ msgid "Theme" +#~ msgstr "Motiv" + +#~ msgid "in work " +#~ msgstr "im Werk" + +#~ msgid "This work is licensed under:" +#~ msgstr "Das Werk ist unter der Lizenz verfügbar" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " Creative Commons Attribution-ShareAlike 3.0\n" +#~ " license." +#~ msgstr "" +#~ "Dieses Werk ist nicht urheberrechtlich geschützt, dass sie frei benutzt " +#~ "werden kann, vervielfältigt und veröffentlicht. Wenn es irgendwelche " +#~ "zusätzlichen ürheberrechtlich geschützten Materialien an diesem Werk gibt " +#~ "(Anmerkungen, Motive), sind sie unter der Lizenz http://creativecommons." +#~ "org/licenses/by-sa/3.0/ verfügbar." + +#~ msgid "Text prepared based on:" +#~ msgstr "Der vorbereitete Text basiert auf:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Herausgegeben und mit Anmerkungen versehen von:" + +#~ msgid "Listing of all works" +#~ msgstr "Werkverzeichnis" + +#~ msgid "Table of Content" +#~ msgstr "Inhaltsverzeichnis" + +#~ msgid "↑ top ↑" +#~ msgstr "nach oben" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Leg das Buch aufs Regal ab!" + +#~ msgid "Create new shelf" +#~ msgstr "Neues Bücherregal erstellen" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Keine neue Bücherregale vorhanden. Wenn du willst, kannst du ein neues " +#~ "Bücherregal erstellen." + +#~ msgid "Put on the shelf!" +#~ msgstr "Leg aufs Regal ab!" + +#~ msgid "Epoch" +#~ msgstr "Epoche" + +#~ msgid "Kind" +#~ msgstr "Art" + +#~ msgid "Genre" +#~ msgstr "Gattung" + +#~ msgid "Read online" +#~ msgstr "Online lesen" + +#~ msgid "Download" +#~ msgstr "Herunterladen" + +#~ msgid "to print" +#~ msgstr "Drucken" + +#~ msgid "for an e-book reader" +#~ msgstr "für E-Book-Reader" + +#~ msgid "for Kindle" +#~ msgstr "für Kindle" + +#, fuzzy +#~ msgid "for advanced usage" +#~ msgstr "fortgeschritten" + +#~ msgid "Listen" +#~ msgstr "Hören" + +#~ msgid "Table of contents" +#~ msgstr "Inhalt" + +#~ msgid "Themes" +#~ msgstr "Motive" + +#~ msgid "Edit. note" +#~ msgstr "Edit. note" + +#~ msgid "Infobox" +#~ msgstr "Infobox" + +#~ msgid "Book's page" +#~ msgstr "Buchseite" + +#, fuzzy +#~ msgid "for a reader" +#~ msgstr "zum Lesen" + +#, fuzzy +#~ msgid "for advanced usege" +#~ msgstr "fortgeschritten" + +#, fuzzy +#~ msgid "Download a custom PDF" +#~ msgstr "PDF-Datei herunterladen" + +#~ msgid "Motifs and themes" +#~ msgstr "Motive und Themen" + +#~ msgid "See" +#~ msgstr "Siehe" + +#~ msgid "Source" +#~ msgstr "Quelle" + +#, fuzzy +#~ msgid "of the book" +#~ msgstr "Buchquelle" + +#~ msgid "Source XML file" +#~ msgstr "Quelle der XML-Datei" + +#~ msgid "Book on" +#~ msgstr "Buch über" + +#~ msgid "Editor's Platform" +#~ msgstr "Die Plattform des Editors" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "Buchbeschreibung in Lektury.Gazeta.pl" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "Buchbeschreibung in Wikipedia" + +#~ msgid "Mix this book" +#~ msgstr "Mische dieses Buch" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "Alle Audiobücher zu diesem Buch herunterladen" + +#~ msgid "Catalogue" +#~ msgstr "Katalog" + +#~ msgid "Authors" +#~ msgstr "Autoren" + +#~ msgid "Kinds" +#~ msgstr "Arten" + +#~ msgid "Genres" +#~ msgstr "Gattungen" + +#~ msgid "Epochs" +#~ msgstr "Epochen" + +#~ msgid "Themes and topics" +#~ msgstr "Motive und Themen" + +#, fuzzy +#~ msgid "Listing of all DAISY files" +#~ msgstr "Werkverzeichnis" + +#, fuzzy +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "Werkverzeichnis" + +#~ msgid "" +#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" +#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +#~ "ograniczeń." +#~ msgstr "" +#~ "DAISY-System ist ein weltweit populäres Format, Bücher zur Verfügung zu " +#~ "stellen \n" +#~ "Es ist angepasst an Bedüfnisse von Sehbehinderten, Blinden und anderen " +#~ "Menschen, die Leseprobleme haben.\n" +#~ "Sie können die Sammlung kostenlos und ohne Beschränkugen nutzen." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "" +#~ "Die Kriterien sind zweitdeutig. Bitte wählen Sie eine der folgenden " +#~ "Möglichkeiten." + +#~ msgid "Shelves containing fragment" +#~ msgstr "Regale mit Buchauszügen" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Keine neue Bücherregale vorhanden. Wenn du willst, kannst du ein neues " +#~ "Bücherregal erstellen." + +#~ msgid "Save all shelves" +#~ msgstr "Alle Bücherregale speichern" + +#~ msgid "Expand fragment" +#~ msgstr "Buchauszug aufklappen" + +#~ msgid "Hide fragment" +#~ msgstr "Buchauszug zuklappen" + +#~ msgid "See full category" +#~ msgstr "Alle Kategorien ansehen" + +#, fuzzy +#~ msgid "All books" +#~ msgstr "Alle Bücher" + +#~ msgid "Audiobooks" +#~ msgstr "Audiobücher" + +#~ msgid "DAISY" +#~ msgstr "DAISY" + +#~ msgid "Work is licensed under " +#~ msgstr "Das Werk ist unter der Lizenz verfügbar" + +#~ msgid "Based on" +#~ msgstr "Basiert auf" + +#~ msgid "Details" +#~ msgstr "Einzelheiten" + +#~ msgid "Author" +#~ msgstr "Autor" + +#~ msgid "Other resources" +#~ msgstr "Andere Ressourcen" + +#, fuzzy +#~ msgid "Source of the image" +#~ msgstr "Bildquelle" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "Image auf dem Platform des Editors" + +#~ msgid "View XML source" +#~ msgstr "Siehe die XML-Quelle" + +#~ msgid "Work's themes " +#~ msgstr "Werkmotive" + +#, fuzzy +#~ msgid "Listing of all pictures" +#~ msgstr "Abbildungenverzeichnis" + +#~ msgid "Download as" +#~ msgstr "Herunterladen als" + +#~ msgid "Artist" +#~ msgstr "Schriftsteller" + +#~ msgid "Director" +#~ msgstr "Regisseur" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "Audiobücher wurden als Teil der folgenden Projekte vorbereitet:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "%(cs)s, gestiftet von %(fb)s" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "Audiobücher wurden als Teil des Projektes %(cs)s, finanziert von: %(fb)s." + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "Audiobücher wurden als Teil des Projektes %(cs)s vorbereitet." + +#~ msgid "Did you mean" +#~ msgstr "Meinten Sie" + +#~ msgid "Results by authors" +#~ msgstr "Ergebnisse von Autoren" + +#~ msgid "Results by title" +#~ msgstr "Ergebnisse von Titeln" + +#~ msgid "Results in text" +#~ msgstr "Ergebnisse im Text" + +#, fuzzy +#~ msgid "Other results" +#~ msgstr "Andere Ergebnisse" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "Sorry! Die Suche ergab leider keine Treffer." + +#~ msgid "" +#~ "Search engine supports following criteria: title, author, theme/topic, " +#~ "epoch, kind and genre.\n" +#~ "\t\tAs for now we do not support full text search." +#~ msgstr "" +#~ "Die Suchemaschine berücksichtigt folgende Kriterien: Titel, Autor, Motiv/" +#~ "Thema, Epoche, Literaturgattung und Gattungsart. \n" +#~ "\t\tDie Suche nach Text-Phrasen wird momentan nicht unterstützt." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "Ihre Suchanfrage muss mindestens zwei Zeichen enthalten." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "in Lektury.Gazeta.pl" + +#~ msgid "in Wikipedia" +#~ msgstr "in Wikipedia" + +#~ msgid "Your shelves with books" +#~ msgstr "Deine Bücherregale" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "Keine neuen Bücherregale vorhanden. Wenn du willst, kannst du ein neues " +#~ "Bücherregal erstellen." + +#~ msgid "Create shelf" +#~ msgstr "Bücherregal erstellen" + +#~ msgid "author" +#~ msgstr "Autor" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "Lehrmaterialien" + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "Lese Werkanalyse dieses Autors in Lektury.Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "Lese den Beitrag über diesen Autor in Wikipedia" + +#~ msgid "This author's works are copyrighted." +#~ msgstr "Die Werke dieses Autors sind urheberrechtlich geschützt." + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "Finde " +#~ "heraus, warum Internet-Bibliotheken dürfen Werke dieses Autors nicht " +#~ "zugänglich machen." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "Dieses Werk ist zur öffentlichen Nutzung vorgesehen und wird bald in der " +#~ "Internetbibliothek Wolne Lektury veröffentlicht sein." + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "Die Werke dieses Autors werden bald zur öffentlichen Nutzung freigestellt " +#~ "und können in der Zukunft ohne weitere Einschränkungen veröffentlicht " +#~ "werden." + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "Dieses Werk ist zur öffentlichen Nutzung vorgesehen und wird bald in der " +#~ "Internetbibliothek Wolne Lektury veröffentlicht sein." + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "Dieses Werk wird bald zur öffentlichen Nutzung freigestellt und kann in " +#~ "der Zukunft ohne weitere Einschränkungen veröffentlicht werden" + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this work." +#~ msgstr "" +#~ "Finde " +#~ "heraus, warum Internet-Bibliotheken die Werke dieses Autors nicht " +#~ "veröffentlichen dürfen." + +#~ msgid "This work is copyrighted." +#~ msgstr "Dieses Werk ist urheberrechtlich geschützt." + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "Einloggen in WolneLektury.pl" + +#~ msgid "Login" +#~ msgstr "Login" + +#~ msgid "" +#~ "Internet Explorer cannot display this site properly. Click here to read " +#~ "more..." +#~ msgstr "" +#~ "Diese Seite kann nicht richtig im Internet Explorer angezeigt werden. " +#~ "Klicken Sie hier, um mehr zu lesen..." + +#~ msgid "Your shelves" +#~ msgstr "Deine Bücherregale" + +#~ msgid "Register on" +#~ msgstr "Registrieren" + +#~ msgid "or" +#~ msgstr "oder" + +#~ msgid "return to main page" +#~ msgstr "Zur Startseite wechseln" + +#, fuzzy +#~ msgid "Listing of all audiobooks on WolneLektury.pl" +#~ msgstr "Werkverzeichnis unter WolneLektury.pl" + +#~ msgid "Put a book" +#~ msgstr "Buch ablegen" + +#~ msgid "on the shelf!" +#~ msgstr "aufs Regal!" + +#~ msgid "and printing using" +#~ msgstr "drucken mit" + +#~ msgid "Download EPUB" +#~ msgstr "EPUB-Datei herunterladen" + +#~ msgid "Download TXT" +#~ msgstr "TXT-Datei herunterladen" + +#~ msgid "on small displays, for example mobile phones" +#~ msgstr "auf kleines Display, z. B. Handy" + +#~ msgid "Download ODT" +#~ msgstr "ODT-Datei herunterladen" + +#~ msgid "and editing using" +#~ msgstr "bearbeiten mit" + +#~ msgid "Book on project's wiki" +#~ msgstr "Schullektüre auf WikiProjekt" + +#~ msgid "on" +#~ msgstr "auf" + +#~ msgid "See description" +#~ msgstr "Beschreibung ansehen" + +#~ msgid "Listing of all works on WolneLektury.pl" +#~ msgstr "Werkverzeichnis unter WolneLektury.pl" + +#~ msgid "Jump to" +#~ msgstr "Überspringen" + +#~ msgid "Categories" +#~ msgstr "Kategorien" + +#, fuzzy +#~ msgid "Listing of all DAISY files on WolneLektury.pl" +#~ msgstr "Werkverzeichnis unter WolneLektury.pl" + +#~ msgid "Show full category" +#~ msgstr "Alle Kategorien anzeigen" + +#~ msgid "Hide" +#~ msgstr "weniger" + +#~ msgid "Browse books by categories" +#~ msgstr "Bücher nach ausgewählten Kategorien ansehen" + +#~ msgid "delete" +#~ msgstr "löschen" + +#~ msgid "" +#~ "Create your own book set. You can share it with friends by sending them " +#~ "link to your shelf." +#~ msgstr "" +#~ "Erstelle dein eigenes Bücherregal. Du kannst es später mal mit deinen " +#~ "Freunden teilen, indem du den Link an sie verschickst." + +#~ msgid "You need to " +#~ msgstr "Um deine Bücherregale zu verwalten " + +#~ msgid "sign in" +#~ msgstr "musst du angemeldet sein" + +#~ msgid "to manage your shelves." +#~ msgstr "Bücherregale verwalten" + +#~ msgid "" +#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." +#~ msgstr "" +#~ "Unterrichtsszenarien und andere Ideen für die Verwendung von Wolnelektury." +#~ "pl für das Unterricht" + +#~ msgid "" +#~ "are professional recordings of literary texts from our repository, " +#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " +#~ "DAISY system." +#~ msgstr "" +#~ "sind professionelle Aufnahmen literarischer Texte aus unserer Sammlung, " +#~ "die unter freier Lizenz in folgenden Formaten verfügbar sind: MP3-und Ogg-" +#~ "Vorbis-Formate sowie im DAISY-System." + +#~ msgid "Themes groups" +#~ msgstr "Motivketten" + +#~ msgid "See our blog" +#~ msgstr "Siehe unseren Blog" + +#~ msgid "You can help us!" +#~ msgstr "Du kannst uns helfen!" + +#~ msgid "" +#~ "We try our best to elaborate works appended to our library. It is " +#~ "possible only due to support of our volunteers." +#~ msgstr "" +#~ "Wir sind stets bemüht, unseren Bibliothekbestand ständig um neue Werke zu " +#~ "erweitern. Dies ist nur dank der Hilfe unserer Volontäre möglich." + +#~ msgid "" +#~ "We invite people who want to take part in developing Internet school " +#~ "library Wolne Lektury." +#~ msgstr "" +#~ "Wir laden herzlich alle Personen ein, die sich an der Mitgestaltung " +#~ "unserer Internet-Schulbibliothek beteiligen wollen." + +#~ msgid "About us" +#~ msgstr "Über das Projekt" + +#~ msgid "" +#~ "\n" +#~ "\t\t\tInternet library with school readings “Wolne Lektury” (www.wolnelektury.pl) is a project made by " +#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " +#~ "which are recommended by Ministry of National Education and are in public " +#~ "domain.\n" +#~ "\t\t\t" +#~ msgstr "" +#~ "\n" +#~ "\t\t\tSchulbücher “Wolne Lektury” in der Internetbibliothek(www.wolnelektury.pl) ist ein Projekt, das " +#~ "von der Stiftung Modernes Polen gefördert wird. Die Stiftung ist seit " +#~ "2007 tätig und hat bisher viele Schulbücher aus dem Bibliothekbestand zur " +#~ "öffentlichen Nutzung freigestellt. Die Schulbücher werden ausdrücklich " +#~ "vom Bildungsministerium empfohlen.\n" +#~ "\t\t\t" + +#~ msgid "Searching in" +#~ msgstr "Suchen in" + +#~ msgid "More than one result matching the criteria found." +#~ msgstr "Es wurden mehrere Treffer in dieser Kategorie gefunden." + +#~ msgid "Search in WolneLektury.pl" +#~ msgstr "Suche unter WolneLektury.pl" + +#~ msgid "Your shelf is empty" +#~ msgstr "Dein Bücherregal ist leer" + +#~ msgid "" +#~ "You can put a book on a shelf by entering page of the reading and " +#~ "clicking 'Put on the shelf'." +#~ msgstr "" +#~ "Du kannst das Buch aufs Regal ablegen, indem du \" aufs Regal!\" - Button " +#~ "anklickst." + +#~ msgid "Choose books' formats which you want to download:" +#~ msgstr "Wähle Buchformate aus, die du herunterladen möchtest:" + +#~ msgid "for listening" +#~ msgstr "zum Hören" + +#~ msgid "on favourite MP3 player" +#~ msgstr "auf Lieblings-MP3-Player" + +#~ msgid "Xiph.org Foundation" +#~ msgstr "Xiph.org Stiftung" + +#~ msgid "Updating list of books' formats on the shelf" +#~ msgstr "Liste der Buchformate auf dem Regal aktualisieren" + +#~ msgid "cancel" +#~ msgstr "löschen" + +#~ msgid "Share this shelf" +#~ msgstr "Teile dieses Bücherregal" + +#~ msgid "" +#~ "Copy this link and share it with other people to let them see your shelf." +#~ msgstr "" +#~ "Kopiere diesen Link und verschicke an Personen, mit denen du dein " +#~ "Bücherregal teilen willst." + +#, fuzzy +#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Lies Werkanalyse dieses Autors unter Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Lies Werkanalyse dieses Autors unter Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Lies Werkanalyse dieses Autors unter Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read related study on Lektury.Gazeta.pl" +#~ msgstr "Lies Werkanalyse dieses Autors unter Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" +#~ msgstr "Lies den Beitrag über diesen Autor auf Wikipedia" + +#, fuzzy +#~ msgid "Read article about kind %(last_tag)s on Wikipedia" +#~ msgstr "Lies den Beitrag über diesen Autor auf Wikipedia" + +#, fuzzy +#~ msgid "Read article about genre %(last_tag)s on Wikipedia" +#~ msgstr "Lies den Beitrag über diesen Autor auf Wikipedia" + +#, fuzzy +#~ msgid "Read related article on Wikipedia" +#~ msgstr "Lies den Beitrag über diesen Autor auf Wikipedia" + +#~ msgid "Delete" +#~ msgstr "Löschen" + +#~ msgid "return to the main page" +#~ msgstr "zur Startseite wechseln" + +#~ msgid "return to list of materials" +#~ msgstr "zurück zur Materialienliste" + +#~ msgid "Hand-outs for teachers on " +#~ msgstr "Lehrmaterialien" + +#, fuzzy +#~ msgid "" +#~ "Download TXT - for reading on small displays, for example mobile phones" +#~ msgstr "auf kleines Display, z. B. Handy" + +#~ msgid "Download MP3" +#~ msgstr "MP3-Datei herunterladen" + +#~ msgid "Download Ogg Vorbis" +#~ msgstr "Ogg Vorbis-Datei herunterladen" + +#~ msgid "Download DAISY" +#~ msgstr "DAISY10-Datei herunterladen" + +#~ msgid "check list of books" +#~ msgstr "Siehe Bücherliste" + +#~ msgid "in our repository" +#~ msgstr "in unserer Sammlung" + +#~ msgid "Polish" +#~ msgstr "Polnisch" + +#~ msgid "German" +#~ msgstr "Deutsch" + +#~ msgid "English" +#~ msgstr "Englisch" + +#~ msgid "Lithuanian" +#~ msgstr "Litauisch" + +#~ msgid "French" +#~ msgstr "Französisch" + +#~ msgid "Russian" +#~ msgstr "Russisch" + +#~ msgid "Spanish" +#~ msgstr "Spanisch" + +#~ msgid "Ukrainian" +#~ msgstr "Ukrainisch" + +#~ msgid "Choose your interface language: " +#~ msgstr "Wählen Sie Ihre Sprache:" + +#~ msgid "Choose language" +#~ msgstr "Sprache wählen" + +#~ msgid "Hide description" +#~ msgstr "Beschreibung ausblenden" + +#~ msgid "Read study of epoch" +#~ msgstr "Lies Epochenanalyse" + +#~ msgid "Read article about epoch" +#~ msgstr "Lies den Beitrag aus dieser Epoche" diff --git a/src/wolnelektury/locale/en/LC_MESSAGES/django.mo b/src/wolnelektury/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..54c22ef01 Binary files /dev/null and b/src/wolnelektury/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/en/LC_MESSAGES/django.po b/src/wolnelektury/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..d5cfb827e --- /dev/null +++ b/src/wolnelektury/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,796 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \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:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Sign in" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "Register" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "You have to be logged in to continue" + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Page does not exist" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "Page not found" + +#: templates/404.html:14 +msgid "" +"We are sorry, but this page does not exist. Please check if you entered " +"correct address or go to " +msgstr "" +"We are sorry, but this page does not exist. Please check if the address you " +"entered is correct you entered or go to " + +#: templates/404.html:14 +msgid "main page" +msgstr "main page" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "Server error" + +#: templates/500.html:19 +msgid "" +"

                            The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"blog.

                            Inform our administrators about the " +"error.

                            " +msgstr "" +"

                            Wolnelektury.pl is currently unavailable. Meanwhile, visit our website.

                            Inform our administrators about the " +"error.

                            " + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "Service unavailable" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "" +"The website Wolnelektury.pl is currently unavailable due to maintainance." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "Wolne Lektury Internet library" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "Latest publications" + +#: templates/main_page.html:41 +msgid "News" +msgstr "News" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "Tools" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "Report an error or make a suggestion" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "Download the catalogue in PDF format." + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "Widget" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "Missing a book?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "Publishing plan" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "Information" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "Image used:" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" %(c)s free reading you have right to\n" +" " +msgid_plural "" +"\n" +" %(c)s free readings you have right to\n" +" " +msgstr[0] "" +"\n" +" %(c)s free reading you have right to\n" +" " +msgstr[1] "" +"\n" +" %(c)s free readings you have right to\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "Welcome" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "" + +#: templates/superbase.html:74 templates/user.html:14 +#, fuzzy +msgid "Social accounts" +msgstr "or join accounts:" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "My shelf" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "Administration" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "Logout" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "Search" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "Language versions" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" +"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" +"\t\t\t\tHosting: ICM.\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tWolne Lektury is a project carried out by the Modern Poland Foundation.\n" +"\t\t\t\tDigital reproductions are made by The National Library, the " +"Silesian Library and the " +"Library of Elbląg, based on NL, US and LE resources.\n" +"\t\t\t\tHosting: ICM.\n" +"\t\t\t\t\"" + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "Close" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "Loading" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Site administration" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "Translations" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "advanced" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "simplified" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "Import book" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +#, fuzzy +msgid "Sign in using:" +msgstr "Sign in" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "or register" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgstr[0] "" +"\n" +"We have %(c)s works published at Wolne Lektury!\n" +"Help us expand our library and set new readings free by\n" +"making a donation\n" +"or donating 1% your income tax.\n" +msgstr[1] "" +"\n" +"We have %(c)s works published at Wolne Lektury!\n" +"Help us expand our library and set new readings free by\n" +"making a donation\n" +"or donating 1% of your income tax.\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" +"Become an editor of Wolne Lektury! Find out if\n" +"we are currently working on a reading you are looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "More..." + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "" + +#: templates/openid/login.html:27 +#, fuzzy +msgid "Sign In" +msgstr "Sign in" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "previous" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "next" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "Authorize access to Wolne Lektury" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user %(user)s." +msgstr "" +"Confirm to authorize access to Wolne Lektury as %(user)s." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: templates/socialaccount/connections.html:36 +#, fuzzy +msgid "Remove" +msgstr "remove" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "" + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" + +#~ msgid "Listing of all audiobooks" +#~ msgstr "List of the audiobooks" + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "Latest MP3 audiobooks" + +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "Latest Ogg Vorbis audiobooks" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "Audio library of required readings of Modern Poland Foundation.\n" +#~ "It is free of charge and you can use it without any limits. \n" +#~ "Audiobooks are recorded with the participation of famous Polish actors " +#~ "like Danuta Stenka or Jan Peszek." + +#~ msgid "See also" +#~ msgstr "See also" + +#~ msgid "Theme" +#~ msgstr "Theme" + +#~ msgid "in work " +#~ msgstr "in work " + +#~ msgid "This work is licensed under:" +#~ msgstr "This work is licensed under:" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " Creative Commons Attribution-ShareAlike 3.0\n" +#~ " license." +#~ msgstr "" +#~ "This work is not covered by copyright and is a part of the\n" +#~ " public domain, which means that it can be used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " Creative Commons Attribution-ShareAlike 3.0\n" +#~ " license." + +#~ msgid "Text prepared based on:" +#~ msgstr "Text based on:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Edited and annotated by:" + +#~ msgid "Listing of all works" +#~ msgstr "List of all works" + +#~ msgid "Table of Content" +#~ msgstr "Table of Contents" + +#~ msgid "↑ top ↑" +#~ msgstr "↑ top ↑" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Put this book on the shelf!" + +#~ msgid "Create new shelf" +#~ msgstr "Create new shelf" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "You do not have any shelves. You can create one below, if you want to." + +#~ msgid "Put on the shelf!" +#~ msgstr "Put on the shelf!" + +#~ msgid "Epoch" +#~ msgstr "Period" + +#~ msgid "Kind" +#~ msgstr "Form" + +#~ msgid "Genre" +#~ msgstr "Genre" + +#~ msgid "Read online" +#~ msgstr "Read online" + +#~ msgid "Download" +#~ msgstr "Download" + +#~ msgid "to print" +#~ msgstr "to print" + +#~ msgid "for an e-book reader" +#~ msgstr "for an e-book reader" + +#~ msgid "for Kindle" +#~ msgstr "for Kindle" + +#, fuzzy +#~ msgid "for advanced usage" +#~ msgstr "advanced" + +#~ msgid "Listen" +#~ msgstr "Listen" + +#~ msgid "Table of contents" +#~ msgstr "Table of contents" + +#~ msgid "Themes" +#~ msgstr "Themes" + +#~ msgid "Edit. note" +#~ msgstr "Edit. note" + +#~ msgid "Infobox" +#~ msgstr "Infobox" + +#~ msgid "Book's page" +#~ msgstr "Book's page" + +#~ msgid "for a reader" +#~ msgstr "for a reader" + +#, fuzzy +#~ msgid "for advanced usege" +#~ msgstr "advanced" + +#~ msgid "Download a custom PDF" +#~ msgstr "Download a custom PDF" + +#~ msgid "Motifs and themes" +#~ msgstr "Motifs and themes" + +#~ msgid "See" +#~ msgstr "See" + +#~ msgid "Source" +#~ msgstr "Source" + +#~ msgid "of the book" +#~ msgstr "of the book" + +#~ msgid "Source XML file" +#~ msgstr "Source XML file" + +#~ msgid "Book on" +#~ msgstr "Book on" + +#~ msgid "Editor's Platform" +#~ msgstr "Editor's Platform" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "Book description on Lektury.Gazeta.pl" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "Book description on Wikipedia" + +#~ msgid "Mix this book" +#~ msgstr "Mix this book" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "Download all audiobooks for this book" + +#~ msgid "Catalogue" +#~ msgstr "Catalogue" + +#~ msgid "Authors" +#~ msgstr "Authors" + +#~ msgid "Kinds" +#~ msgstr "Forms" + +#~ msgid "Genres" +#~ msgstr "Genres" + +#~ msgid "Epochs" +#~ msgstr "Periods" + +#~ msgid "Themes and topics" +#~ msgstr "Motifs and themes" + +#~ msgid "Listing of all DAISY files" +#~ msgstr "List of all DAISY files" + +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "Latest DAISY audiobooks" + +#~ msgid "" +#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" +#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +#~ "ograniczeń." +#~ msgstr "" +#~ "The internationally recognized DAISY book format \n" +#~ "provides the best possible standardized access to books for people who " +#~ "are \n" +#~ "partially sighted, blind or are dyslexic. It is free of charge and you " +#~ "can use it without any limits." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "" +#~ "The criteria are ambiguous. Please select one of the following options:" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Shelves containing fragment" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "You do not own any shelves. You can create one below, if you want to." + +#~ msgid "Save all shelves" +#~ msgstr "Save all shelves" + +#~ msgid "Expand fragment" +#~ msgstr "Expand fragment" + +#~ msgid "Hide fragment" +#~ msgstr "Hide fragment" + +#~ msgid "See full category" +#~ msgstr "See full category" + +#~ msgid "All books" +#~ msgstr "All books" + +#~ msgid "Audiobooks" +#~ msgstr "Audiobooks" + +#~ msgid "DAISY" +#~ msgstr "DAISY" + +#~ msgid "Work is licensed under " +#~ msgstr "Work is licensed under " + +#~ msgid "Based on" +#~ msgstr "Based on" + +#~ msgid "Details" +#~ msgstr "Details" + +#~ msgid "Author" +#~ msgstr "Author" + +#~ msgid "Other resources" +#~ msgstr "Other sources" + +#~ msgid "Source of the image" +#~ msgstr "Source of the image" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "Image on the Editor's Platform" + +#~ msgid "View XML source" +#~ msgstr "View XML source" + +#~ msgid "Work's themes " +#~ msgstr "Work's themes " + +#~ msgid "Listing of all pictures" +#~ msgstr "List of all pictures" + +#~ msgid "Download as" +#~ msgstr "Download as" + +#~ msgid "Artist" +#~ msgstr "Reader" + +#~ msgid "Director" +#~ msgstr "Director" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "Audiobooks were prepared as a part of the following projects:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "%(cs)s, funded by %(fb)s" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "Audiobooks were prepared as a part of the %(cs)s project." + +#~ msgid "Did you mean" +#~ msgstr "Did you mean" + +#~ msgid "Results by authors" +#~ msgstr "Results by authors" + +#~ msgid "Results by title" +#~ msgstr "Results by title" + +#~ msgid "Results in text" +#~ msgstr "Results in text" + +#~ msgid "Other results" +#~ msgstr "Other results" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "Sorry! Search cirteria did not match any resources." + +#~ msgid "" +#~ "Search engine supports following criteria: title, author, theme/topic, " +#~ "epoch, kind and genre.\n" +#~ "\t\tAs for now we do not support full text search." +#~ msgstr "" +#~ "Search engine supports following criteria: title, author, theme/topic, " +#~ "period, form and genre.\n" +#~ "\t\tAs for now we do not support full text search." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "Sorry! Search query must have at least two characters." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "in Lektury.Gazeta.pl" + +#~ msgid "in Wikipedia" +#~ msgstr "in Wikipedia" + +#~ msgid "Your shelves with books" +#~ msgstr "Your shelves with books" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "You do not own any shelves. You can create one below if you want to" + +#~ msgid "Create shelf" +#~ msgstr "Create shelf" + +#~ msgid "author" +#~ msgstr "author" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "Handouts for teachers" + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "Read work's study of this author on Lektury.Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "Read article about this author on Wikipedia" + +#~ msgid "This author's works are copyrighted." +#~ msgstr "This author's works are copyrighted." + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "Find " +#~ "out why Internet libraries cannot publish this author's works." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet library of Wolne Lektury soon." + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "This author's works will become part of public domain and will be " +#~ "published without restrictions in" + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "This work is in public domain and will be published on Internet library " +#~ "of Wolne Lektury soon." + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "This work will become part of public domain and will be published without " +#~ "restrictions in" + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this work." +#~ msgstr "" +#~ "Find " +#~ "out why Internet libraries cannot publish this work." + +#~ msgid "This work is copyrighted." +#~ msgstr "This work is copyrighted." + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "Login to Wolne Lektury" + +#~ msgid "Login" +#~ msgstr "Login" diff --git a/src/wolnelektury/locale/es/LC_MESSAGES/django.mo b/src/wolnelektury/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..b00c569b3 Binary files /dev/null and b/src/wolnelektury/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/es/LC_MESSAGES/django.po b/src/wolnelektury/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..e60b97811 --- /dev/null +++ b/src/wolnelektury/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,1105 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Iniciar sesión" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "Ya has iniciado sesión como usuario %(user)s" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "Registrarse" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "Tienes que iniciar sesión para continuar" + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Página no existe" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "Página no encontrada" + +#: templates/404.html:14 +msgid "" +"We are sorry, but this page does not exist. Please check if you entered " +"correct address or go to " +msgstr "" +"Lo sentimos, esta página no existe. Compruebue si la dirección es correcta o " +"pase a" + +#: templates/404.html:14 +msgid "main page" +msgstr "página principal" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "Error del servidor" + +#: templates/500.html:19 +msgid "" +"

                            The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"blog.

                            Inform our administrators about the " +"error.

                            " +msgstr "" +"

                            La página Wolnelektury.pl actualmente no está disponible. Mientras tanto " +"visita nuestro blog.

                            " +"

                            Informa a nuestros administradores sobre el error.

                            " + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "Servicio no está disponible" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "La página Wolnelektury.pl no está disponible debido al mantenimiento." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "La biblioteca virtual WolneLektury.pl" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "Novedades" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "Publicaciones recientes" + +#: templates/main_page.html:41 +msgid "News" +msgstr "Noticias" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "Herramientas" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "Reporta un error o una sugerencia" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "Descarga el catálogo en el formato PDF" + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "Widget" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "¿Falta un libro?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "Plan de publicación" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "Información" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "La imagen usada:" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "Regístrate en WolneLektury.pl" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" %(c)s free reading you have right to\n" +" " +msgid_plural "" +"\n" +" %(c)s free readings you have right to\n" +" " +msgstr[0] "" +"\n" +" %(c)s tienes lecturas libres right to\n" +" " +msgstr[1] "" +"\n" +" %(c)s free readings you have right to\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "Bienvenido" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "Contraseña" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "Correo electrónico" + +#: templates/superbase.html:74 templates/user.html:14 +msgid "Social accounts" +msgstr "Cuentas sociales" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "Mi estante" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "Administración" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "Cerrar sesión" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "Buscar" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "Versiones de idiomas" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" +"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" +"\t\t\t\tHosting: ICM.\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tWolne Lektury es un proyecto dirigido por la Fundación Polonia Moderna.\n" +"\t\t\t\tReproducciones digitales están preparadas por La Biblioteca Nacional, en base de los recursos de la BN. \n" +"\t\t\t\tHosting EO Networks.\n" +"\t\t\t\t " + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tFundación Polonia Moderna, c/ Marszałkowska 84/92, lok. 125, 00-514 " +"Varsovia, tel/fax: +48 (22) 621-30-17\n" +" e-mail: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "Cerrar" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "Cargando" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "Usuario" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Administración de la página" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "Traducciones" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "avanzado" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "simplificado" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "Importar libro" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "¿Olvidaste tu contraseña?" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +msgid "Sign in using:" +msgstr "Iniciar sesión con:" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "o registrarse" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgstr[0] "" +"\n" +"Tenemos %(c)s obras publicadas en Wolne Lektury!Ayúdanos ampliar la " +"biblioteca y libera lecturas nuevas \n" +" - haz una " +"donación \n" +" o dona 1 porcentaje de tu impuesto .\n" +msgstr[1] "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" +"Hazte el editor de Wolne Lektury! Averigua si\n" +"actualmente estamos preparando la lectura que te interesa y prepara\n" +"una publicación por ti mismo/a inscribiéndote en la Plataforma Editorial." + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "Más..." + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "Iniciar sesión con OpenID " + +#: templates/openid/login.html:27 +#, fuzzy +msgid "Sign In" +msgstr "Iniciar sesión" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "anterior" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "siguiente" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "Autoriza el acceso a Wolne Lektury" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user %(user)s." +msgstr "" +"Confirma para autorizar el acceso a Wolne Lektury como el usuario " +"%(user)s." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Conexiones de la cuenta de usuario" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"Puede iniciar sesión en su cuenta de usuario a través de cualquiera de las " +"siguientes cuentas de terceros:" + +#: templates/socialaccount/connections.html:36 +msgid "Remove" +msgstr "Borrar" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "" +"Actualmente no tiene ninguna cuenta social relacionada con esta cuenta de " +"usuario." + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "Agrega una cuenta de terceros" + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "Inicio de sesión cancelado" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" +"Ha decidido anular lo de iniciar sesión en nuestra página usando una de sus " +"cuentas de usuario existentes. Si se ha equivocado, pase asign in, por favor." + +#~ msgid "Listing of all audiobooks" +#~ msgstr "Lista de todos los audiolibros" + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "Los últimos audiolibros en el formato MP3" + +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "Los últimos audiolibros en el formato Ogg" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "Colección de grabaciones de libros de lectura obligatoria de la Fundación " +#~ "Polonia Moderna.Es gratuita y libre.Los audiolibros están grabados por " +#~ "actores y actrices conocidos/as, como Danuta Stenka y Jan Peszek." + +#~ msgid "See also" +#~ msgstr "Ve también" + +#~ msgid "Theme" +#~ msgstr "Tema" + +#~ msgid "in work " +#~ msgstr "de la obra" + +#~ msgid "This work is licensed under:" +#~ msgstr "Esta obra se distribuye bajo licencia" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " Creative Commons Attribution-ShareAlike 3.0\n" +#~ " license." +#~ msgstr "" +#~ "Esta obra está libre de derechos de autor y es de dominio público, por " +#~ "ende se puede usar,publicar y difundir libremente. Si esta obra tiene " +#~ "materiales adicionales (como notas a pie de pá gina, temas lutrarios, " +#~ "etc.), que no esten libres de derechos de autor, dichos materiales están " +#~ "publicados bajo la \n" +#~ "Creative " +#~ "Commons Attribution-ShareAlike 3.0\n" +#~ " licencia." + +#~ msgid "Text prepared based on:" +#~ msgstr "Texto preparado basado en:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Editado y anotado por:" + +#~ msgid "Listing of all works" +#~ msgstr "Lista de las obras" + +#~ msgid "Table of Content" +#~ msgstr "Índice" + +#~ msgid "↑ top ↑" +#~ msgstr "↑ la cabeza de página ↑" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "¡Poner un libro en el estante!" + +#~ msgid "Create new shelf" +#~ msgstr "Crear un estante nuevo" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "No tienes ningún estante. Puedes crear uno abajo si quieres." + +#~ msgid "Put on the shelf!" +#~ msgstr "¡Poner en el estante!" + +#~ msgid "Epoch" +#~ msgstr "Época" + +#~ msgid "Kind" +#~ msgstr "Género" + +#~ msgid "Genre" +#~ msgstr "Subgénero" + +#~ msgid "Read online" +#~ msgstr "Leer online" + +#~ msgid "Download" +#~ msgstr "Descargar" + +#~ msgid "to print" +#~ msgstr "imprimir" + +#~ msgid "for an e-book reader" +#~ msgstr "para los usuarios de e-libros" + +#~ msgid "for Kindle" +#~ msgstr "para Kindle" + +#~ msgid "for advanced usage" +#~ msgstr "para el uso avanzado" + +#~ msgid "Listen" +#~ msgstr "Escucha" + +#~ msgid "Table of contents" +#~ msgstr "Índice" + +#~ msgid "Themes" +#~ msgstr "Temas" + +#~ msgid "Edit. note" +#~ msgstr "Editar nota" + +#~ msgid "Infobox" +#~ msgstr "Infobox" + +#~ msgid "Book's page" +#~ msgstr "volver a la página del libro" + +#~ msgid "for a reader" +#~ msgstr "para el lector" + +#, fuzzy +#~ msgid "for advanced usege" +#~ msgstr "avanzado" + +#~ msgid "Download a custom PDF" +#~ msgstr "Descarga un PDF personalisado" + +#~ msgid "Motifs and themes" +#~ msgstr "Temas" + +#~ msgid "See" +#~ msgstr "Ve" + +#~ msgid "Source" +#~ msgstr "Fuente" + +#~ msgid "of the book" +#~ msgstr "del libro" + +#~ msgid "Source XML file" +#~ msgstr "Archivo XML fuente" + +#~ msgid "Book on" +#~ msgstr "Libro en" + +#~ msgid "Editor's Platform" +#~ msgstr "La plataforma de redactor" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "Descripción del libro en Lektury.Gazeta.pl" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "Descripción del libro en Wikipedia" + +#~ msgid "Mix this book" +#~ msgstr "Mezcla est elibro" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "Descarga todos los audiolibros de este libro" + +#~ msgid "Catalogue" +#~ msgstr "Catálogo" + +#~ msgid "Authors" +#~ msgstr "Autores" + +#~ msgid "Kinds" +#~ msgstr "Géneros" + +#~ msgid "Genres" +#~ msgstr "Subgéneros" + +#~ msgid "Epochs" +#~ msgstr "Épocas" + +#~ msgid "Themes and topics" +#~ msgstr "Temas y motivos" + +#~ msgid "Listing of all DAISY files" +#~ msgstr "Lista de todos los archivos DAISY" + +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "Los últimos audiolibros en el formato DAISY" + +#~ msgid "" +#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" +#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +#~ "ograniczeń." +#~ msgstr "" +#~ "El sistema DAISY es un formato multimedio que permite acceder a los " +#~ "libros, adaptado para las necesidades de personas con baja visión, " +#~ "invidentes o las que tienes problemas para leer. Los podeis usar de " +#~ "manera gratuita y libre." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "" +#~ "Estos criterios son ambiguous. Por favor, selecta una de las siguientes " +#~ "opciones:" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Estentes que contienen este fragmento" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "No tienes ningún estante. Puedes crear uno abajo si quieres." + +#~ msgid "Save all shelves" +#~ msgstr "Guardar todos los estantes" + +#~ msgid "Expand fragment" +#~ msgstr "Ampliar este fragmento" + +#~ msgid "Hide fragment" +#~ msgstr "Esconder este fragmento" + +#~ msgid "See full category" +#~ msgstr "Ver toda la categoría" + +#~ msgid "All books" +#~ msgstr "Todos los libros" + +#~ msgid "Audiobooks" +#~ msgstr "Audiolibros" + +#~ msgid "DAISY" +#~ msgstr "DAISY" + +#~ msgid "Work is licensed under " +#~ msgstr "Las obras se distribuyen bajo licencia" + +#~ msgid "Based on" +#~ msgstr "Basado en" + +#~ msgid "Details" +#~ msgstr "Detalles" + +#~ msgid "Author" +#~ msgstr "Autor" + +#~ msgid "Other resources" +#~ msgstr "Otros recursos" + +#~ msgid "Source of the image" +#~ msgstr "Fuente de la imagen" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "La imagen en la Plataforma de el Editor" + +#~ msgid "View XML source" +#~ msgstr "Ver XML fuente" + +#~ msgid "Work's themes " +#~ msgstr "Temas de la obra" + +#~ msgid "Listing of all pictures" +#~ msgstr "Lista de todas la imagenes" + +#~ msgid "Download as" +#~ msgstr "Descarga como" + +#~ msgid "Artist" +#~ msgstr "Artista" + +#~ msgid "Director" +#~ msgstr "Director" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "Los audiolibros fueron preparados como la parte de los proyectos:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "%(cs)s, financiado por %(fb)s" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "Los audiolibros fueron preparados como parte del %(cs)s proyecto fundado " +#~ "por %(fb)s." + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "Los audiolibros fueron preparados como parte del %(cs)s proyecto" + +#~ msgid "Did you mean" +#~ msgstr "Quizás quisiste decir" + +#~ msgid "Results by authors" +#~ msgstr "Resultados por autores" + +#~ msgid "Results by title" +#~ msgstr "Resultados por el título" + +#~ msgid "Results in text" +#~ msgstr "Resultados en el texto" + +#~ msgid "Other results" +#~ msgstr "Otros resultados" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "" +#~ "Lo sentimos, no hay resultados que corresponden con los criterios de la " +#~ "búsqueda." + +#~ msgid "" +#~ "Search engine supports following criteria: title, author, theme/topic, " +#~ "epoch, kind and genre.\n" +#~ "\t\tAs for now we do not support full text search." +#~ msgstr "" +#~ "El buscador admite los criterios siguientes: título, autor, tema/motivo, " +#~ "época, género y subgénero.\n" +#~ "\t\tActualmente no admitimos la búsqueda de texto entero." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "¡Perdón! La pregunta debe tener por lo menos dos letras." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "en Lektury.Gazeta.pl" + +#~ msgid "in Wikipedia" +#~ msgstr "en Wikipedia" + +#~ msgid "Your shelves with books" +#~ msgstr "Tus estantes con libros" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "No tienes ningún estante. Puedes crear uno abajo si quieres." + +#~ msgid "Create shelf" +#~ msgstr "Crear un estante" + +#~ msgid "author" +#~ msgstr "autor" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "Materiales para los profesores" + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "Leer el artículo sobre este autor en Wikipedia" + +#~ msgid "This author's works are copyrighted." +#~ msgstr "Las obras de este autor están protegidas por los derechos de autor." + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "Entérate por qué las bibliotecas virtuales no pueden " +#~ "publicar las obras de este autor." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "Las obras de este autor se encuentran en el dominio público y pronto " +#~ "serán publicadas en la biblioteca virtual de Wolne Lektury." + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "Las obras de este autor entrarán en los recursos del dominio público y " +#~ "podrán ser publicadas sin restricciones en " + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "Esta obra se encuentra en el dominio público y pronto será publicada en " +#~ "la biblioteca electrónica de Wolne Lektury." + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "Esta obra entrará en los recursos del dominio público y podrá ser " +#~ "publicada sin restricciones en" + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this work." +#~ msgstr "" +#~ "Entérate por qué las bibliotecas virtuales no pueden " +#~ "publicar esta obra." + +#~ msgid "This work is copyrighted." +#~ msgstr "Esta obra está protegida por los derechos de autor." + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "Registrate en WolneLektury.pl" + +#~ msgid "Login" +#~ msgstr "Login" + +#~ msgid "" +#~ "Internet Explorer cannot display this site properly. Click here to read " +#~ "more..." +#~ msgstr "" +#~ "Internet Explorer no puede mostrar esta página correctamente. Haz clic " +#~ "aquí para saber más..." + +#~ msgid "Your shelves" +#~ msgstr "Tus estantes" + +#~ msgid "Register on" +#~ msgstr "Registrarse en" + +#~ msgid "or" +#~ msgstr "o" + +#~ msgid "return to main page" +#~ msgstr "volver a la página principal" + +#, fuzzy +#~ msgid "Listing of all audiobooks on WolneLektury.pl" +#~ msgstr "Lista de las obras en WolneLektury.pl" + +#~ msgid "Put a book" +#~ msgstr "¡Poner un libro" + +#~ msgid "on the shelf!" +#~ msgstr "en el estante!" + +#~ msgid "and printing using" +#~ msgstr "e imprimir" + +#~ msgid "Download EPUB" +#~ msgstr "Descargar EPUB" + +#~ msgid "Download TXT" +#~ msgstr "Descargar TXT" + +#~ msgid "on small displays, for example mobile phones" +#~ msgstr "en pantallas pequeñas como las de teléfonos móviles" + +#~ msgid "Download ODT" +#~ msgstr "Descargar ODT" + +#~ msgid "and editing using" +#~ msgstr "y editar" + +#~ msgid "Book on project's wiki" +#~ msgstr "Libro en wiki del proyecto" + +#~ msgid "on" +#~ msgstr "en" + +#~ msgid "See description" +#~ msgstr "Ver la descripción" + +#~ msgid "Listing of all works on WolneLektury.pl" +#~ msgstr "Lista de las obras en WolneLektury.pl" + +#~ msgid "Jump to" +#~ msgstr "Saltar a" + +#~ msgid "Categories" +#~ msgstr "Categorías" + +#, fuzzy +#~ msgid "Listing of all DAISY files on WolneLektury.pl" +#~ msgstr "Lista de las obras en WolneLektury.pl" + +#~ msgid "Show full category" +#~ msgstr "Mostrar toda la categoría" + +#~ msgid "Hide" +#~ msgstr "Esconder" + +#~ msgid "Browse books by categories" +#~ msgstr "Mirar los libros según categoría" + +#~ msgid "delete" +#~ msgstr "borrar" + +#~ msgid "" +#~ "Create your own book set. You can share it with friends by sending them " +#~ "link to your shelf." +#~ msgstr "" +#~ "Crea tu propia colección de libros. Puedes compartirla con tus amigos " +#~ "enviándoles el enlace a tu estante." + +#~ msgid "You need to " +#~ msgstr "Tienes que" + +#~ msgid "sign in" +#~ msgstr "iniciar la sesión" + +#~ msgid "to manage your shelves." +#~ msgstr "para organizar tus estantes." + +#~ msgid "" +#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." +#~ msgstr "" +#~ "Esquemas de clases y otras ideas para usar WolneLektury.pl en la " +#~ "enseñanza." + +#~ msgid "" +#~ "are professional recordings of literary texts from our repository, " +#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " +#~ "DAISY system." +#~ msgstr "" +#~ "son grabaciones profesionales de textos literarios de nuestro depósito. " +#~ "Están disponibles gratis en formatos MP3, Ogg Vorbis y en el sistema " +#~ "DAISY. " + +#~ msgid "Themes groups" +#~ msgstr "Grupos de temas" + +#~ msgid "See our blog" +#~ msgstr "Ver nuestro blog" + +#~ msgid "You can help us!" +#~ msgstr "¡Puedes ayudarnos!" + +#~ msgid "" +#~ "We try our best to elaborate works appended to our library. It is " +#~ "possible only due to support of our volunteers." +#~ msgstr "" +#~ "Hacemos todo lo posible para elaborar las obras de nuestra biblioteca con " +#~ "la mayor perfección. Esto es posible sólo gracias al apoyo de nuestros " +#~ "voluntarios." + +#~ msgid "" +#~ "We invite people who want to take part in developing Internet school " +#~ "library Wolne Lektury." +#~ msgstr "" +#~ "Invitamos a todos quienes quieren formar parte en el desarrollo de la " +#~ "biblioteca virtual de Wolne Lektury." + +#~ msgid "About us" +#~ msgstr "Sobre nosotros" + +#~ msgid "" +#~ "\n" +#~ "\t\t\tInternet library with school readings “Wolne Lektury” (www.wolnelektury.pl) is a project made by " +#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " +#~ "which are recommended by Ministry of National Education and are in public " +#~ "domain.\n" +#~ "\t\t\t" +#~ msgstr "" +#~ "\n" +#~ "\t\t\tLa biblioteca virtual con lecturas “Wolne Lektury” (www.wolnelektury.pl)es un proyecto creado " +#~ "por la Fundación Polonia Moderna. Había comenzado su actividad en el año " +#~ "2007 y está compartiendo las lecturas recomendadas por el Ministerio de " +#~ "la Educación Nacional y que son del dominio público.\n" +#~ "\t\t\t" + +#~ msgid "Searching in" +#~ msgstr "Buscando en" + +#~ msgid "More than one result matching the criteria found." +#~ msgstr "" +#~ "Se ha encontrado más que un resultado que corresponde a tus criterios." + +#~ msgid "Search in WolneLektury.pl" +#~ msgstr "Buscar en WolneLektury.pl" + +#~ msgid "Your shelf is empty" +#~ msgstr "Tu estante está vacío" + +#~ msgid "" +#~ "You can put a book on a shelf by entering page of the reading and " +#~ "clicking 'Put on the shelf'." +#~ msgstr "" +#~ "Puedes poner un libro en el estante entrando en la página de aquella " +#~ "lectura y haciendo clic en \"Poner en el estante\"." + +#~ msgid "Choose books' formats which you want to download:" +#~ msgstr "Elige formatos de los libros que quieres descargar:" + +#~ msgid "for listening" +#~ msgstr "para escuchar" + +#~ msgid "on favourite MP3 player" +#~ msgstr "en tu reproductor de MP3 favorito." + +#~ msgid "Xiph.org Foundation" +#~ msgstr "Fundación Xiph.org" + +#~ msgid "Updating list of books' formats on the shelf" +#~ msgstr "Actualizando la lista de formatos de los libros en el estante" + +#~ msgid "cancel" +#~ msgstr "cancelar" + +#~ msgid "Share this shelf" +#~ msgstr "Compartir este estante" + +#~ msgid "" +#~ "Copy this link and share it with other people to let them see your shelf." +#~ msgstr "" +#~ "Copia este enlace y compártelo con otros para que puedan ver tu estante. " + +#, fuzzy +#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read related study on Lektury.Gazeta.pl" +#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" +#~ msgstr "Leer el artículo sobre este autor en Wikipedia" + +#, fuzzy +#~ msgid "Read article about kind %(last_tag)s on Wikipedia" +#~ msgstr "Leer el artículo sobre este autor en Wikipedia" + +#, fuzzy +#~ msgid "Read article about genre %(last_tag)s on Wikipedia" +#~ msgstr "Leer el artículo sobre este autor en Wikipedia" + +#, fuzzy +#~ msgid "Read related article on Wikipedia" +#~ msgstr "Leer el artículo sobre este autor en Wikipedia" + +#~ msgid "Delete" +#~ msgstr "Borrar" + +#~ msgid "return to the main page" +#~ msgstr "volver a la página principal" + +#~ msgid "return to list of materials" +#~ msgstr "volver a la lista de los materiales" + +#~ msgid "Hand-outs for teachers on " +#~ msgstr "Materiales para los profesores en" + +#, fuzzy +#~ msgid "" +#~ "Download TXT - for reading on small displays, for example mobile phones" +#~ msgstr "en pantallas pequeñas como las de teléfonos móviles" + +#~ msgid "Download MP3" +#~ msgstr "Descargar MP3" + +#~ msgid "Download Ogg Vorbis" +#~ msgstr "Descargar Ogg Vorbis" + +#~ msgid "Download DAISY" +#~ msgstr "Descargar DAISY" + +#~ msgid "check list of books" +#~ msgstr "Verificar la lista de libros" + +#~ msgid "in our repository" +#~ msgstr "en nuestra colección" + +#~ msgid "Polish" +#~ msgstr "polaco" + +#~ msgid "German" +#~ msgstr "alemán" + +#~ msgid "English" +#~ msgstr "inglés" + +#~ msgid "Lithuanian" +#~ msgstr "lituano" + +#~ msgid "French" +#~ msgstr "francés" + +#~ msgid "Russian" +#~ msgstr "ruso" + +#~ msgid "Spanish" +#~ msgstr "español" + +#~ msgid "Ukrainian" +#~ msgstr "ucraniano" + +#~ msgid "Choose your interface language: " +#~ msgstr "Elige el idioma de la interfaz:" + +#~ msgid "Choose language" +#~ msgstr "Elige el idioma" + +#~ msgid "Hide description" +#~ msgstr "Esconder la descripción" + +#~ msgid "Read study of epoch" +#~ msgstr "Leer el estudio sobre esta época" + +#~ msgid "Read article about epoch" +#~ msgstr "Leer el artículo sobre esta época" diff --git a/src/wolnelektury/locale/fr/LC_MESSAGES/django.mo b/src/wolnelektury/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..cb1d1c608 Binary files /dev/null and b/src/wolnelektury/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/fr/LC_MESSAGES/django.po b/src/wolnelektury/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..aed8199d8 --- /dev/null +++ b/src/wolnelektury/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,805 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \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:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Connexion" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "Inscrivez-vous" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "Vous devez être connecter pour continuer" + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Site n'existe pas" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "Composant non trouvé" + +#: templates/404.html:14 +msgid "" +"We are sorry, but this page does not exist. Please check if you entered " +"correct address or go to " +msgstr "" +"Désolé, cette page n'existe pas. Vérifiez si vous avez introduit l'adresse " +"correcte ou allez à" + +#: templates/404.html:14 +msgid "main page" +msgstr "accueil" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "Erreur du serveur" + +#: templates/500.html:19 +msgid "" +"

                            The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"blog.

                            Inform our administrators about the " +"error.

                            " +msgstr "" +"

                            Le site Wolnelektury.pl est temporairement inaccessible. En attendant, " +"visitez notre blog.

                            " +"Informez nos " +"administrateurs de l'erreur.

                            " + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "Site inaccessible" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "" +"Le site Wolnelektury.pl est temporairement inaccessible en raison " +"d'opérations de maintenance." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "Wolne Lektury - la bibliothèque en ligne" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "Publications récentes" + +#: templates/main_page.html:41 +msgid "News" +msgstr "Actualités" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "Outils" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "Rapportez une erreur ou faites une suggestion" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "Téléchargez le catalogue au format PDF" + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "Widget" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "Il vous manque un livre?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "Plan de publication" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "Informations" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "L'image utilisé:" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "Wolne Lektury (Lectures Libres)" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" %(c)s free reading you have right to\n" +" " +msgid_plural "" +"\n" +" %(c)s free readings you have right to\n" +" " +msgstr[0] "" +"\n" +" %(c)s lecture gratuite auxquelles vous avez droit\n" +" " +msgstr[1] "" +"\n" +" %(c)s lectures gratuites auxquelles vous avez droit\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "Bienvenue" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "" + +#: templates/superbase.html:74 templates/user.html:14 +#, fuzzy +msgid "Social accounts" +msgstr "ou utilisez votre compte" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "Mon étagère" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "Administration" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "Déconnexion" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "Rechercher" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "Version linguistique" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" +"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" +"\t\t\t\tHosting: ICM.\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tLectures Libres est un projet réalisé par la Fondation Pologne Moderne .\n" +"\t\t\t\tReproductions numériques sont préparées par laBibliothèque nationale, Bibliothèque de Silésie et Bibliothèque d'Elbląg et basées sur leurs ressources. \n" +"\t\t\t\tHosting: ICM.\n" +"\t\t\t\t" + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\t Fondation Pologne Moderne, 00-514 Warszawa (Varsovie), ul. " +"Marszałkowska 84/92 lok. 125, tél./fax: (+48) (22) 621-30-17\n" +" e-mail: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "Fermer" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "Chargement en cours" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Site de l'administrateur" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "Traductions" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "avancé(e)" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "simplifié(e)" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "Importez le livre" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +#, fuzzy +msgid "Sign in using:" +msgstr "Connexion" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "ou inscrivez-vous" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgstr[0] "" +"\n" +"Nous avons %(c)s d'ouvrages publiés sur Wolne Lektury!\n" +"Aidez-nous à élargir la bibliothèque et libérez des nouvelles lectures par\n" +"faire une donation\n" +"ou transférer 1% de vos impôts.\n" +msgstr[1] "" +"\n" +"Nous avons %(c)s d'ouvrages publiés sur Wolne Lektury!\n" +"Aidez-nous à élargir la bibliothèque et libérez des nouvelles lectures par\n" +"faire une donation\n" +"ou transférer 1% de vos impôts.\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" +"Devenez un éditeur de Wolne Lektury! Vérifiez si\n" +"nous sommes en train de préparer un texte que vous cherchez et rédigez\n" +"une publication vous-mêmes en se connectant sur la Plateforme des éditeurs." + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "Plus..." + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "" + +#: templates/openid/login.html:27 +#, fuzzy +msgid "Sign In" +msgstr "Connexion" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "précédent(e)" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "suivant(e)" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "Autorisez l'accès à Wolne Lektury" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user %(user)s." +msgstr "" +"Confirmez pour autoriser l'accès à Wolne Lektury comme l'utilisateur " +"%(user)s." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: templates/socialaccount/connections.html:36 +#, fuzzy +msgid "Remove" +msgstr "supprimer" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "" + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" + +#~ msgid "Listing of all audiobooks" +#~ msgstr "Liste des tous les livres audio" + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "Les plus nouveaux livres audio MP3" + +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "Les plus nouveaux livres audio Ogg Vorbis" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "Audiothèque des lectures scolaires de la Fondation Pologne Moderne.\n" +#~ "Vous pouvez l'utiliser gratuitement et sans limites. \n" +#~ "Les livres audio sont lus par les acteurs connus, comme par exemple: " +#~ "Danuta Stenka et Jan Peszek." + +#~ msgid "See also" +#~ msgstr "Voir aussi" + +#~ msgid "Theme" +#~ msgstr "Thème" + +#~ msgid "in work " +#~ msgstr "dans l'oeuvre" + +#~ msgid "This work is licensed under:" +#~ msgstr "Cet oeuvre est publié sous la licence" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " Creative Commons Attribution-ShareAlike 3.0\n" +#~ " license." +#~ msgstr "" +#~ "Cet ouvrage n'est pas protégé par le droit d'auteur et appartiennent au\n" +#~ "domaine public; c'est-à-dire qu'il peut être publié et divulgué " +#~ "librement.\n" +#~ "Si l'ouvrage est accompagné des matériaux supplémentaires (annotations, " +#~ "motifs littéraires, etc.),\n" +#~ "ces derniers sont donc distribués sous la licence:\n" +#~ "Paternité - Partage à l'Identique 3.0 non transposé." + +#~ msgid "Text prepared based on:" +#~ msgstr "Préparation du texte basée sur:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Les éditions et annotations par:" + +#~ msgid "Listing of all works" +#~ msgstr "Liste des tous les ouvrages" + +#~ msgid "Table of Content" +#~ msgstr "Table des matières" + +#~ msgid "↑ top ↑" +#~ msgstr "↑ top ↑" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Mettre un livre sur l'étagère!" + +#~ msgid "Create new shelf" +#~ msgstr "Créez une nouvelle étagère" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une au-dessous, si " +#~ "vous voulez." + +#~ msgid "Put on the shelf!" +#~ msgstr "Mettre sur l'étagère!" + +#~ msgid "Epoch" +#~ msgstr "Époque" + +#~ msgid "Kind" +#~ msgstr "Type" + +#~ msgid "Genre" +#~ msgstr "Genre" + +#~ msgid "Read online" +#~ msgstr "Lisez en ligne" + +#~ msgid "Download" +#~ msgstr "Téléchargez" + +#~ msgid "to print" +#~ msgstr "pour imprimer" + +#~ msgid "for an e-book reader" +#~ msgstr "pour un lecteur des livres numeriques" + +#~ msgid "for Kindle" +#~ msgstr "pour Kindle" + +#~ msgid "for advanced usage" +#~ msgstr "pour l’utilisation avancée" + +#~ msgid "Listen" +#~ msgstr "Écoutez" + +#~ msgid "Table of contents" +#~ msgstr "Table des matières" + +#~ msgid "Themes" +#~ msgstr "Thèmes" + +#~ msgid "Edit. note" +#~ msgstr "Note d'éditeur" + +#~ msgid "Infobox" +#~ msgstr "Infobox" + +#~ msgid "Book's page" +#~ msgstr "Site du livre" + +#~ msgid "for a reader" +#~ msgstr "pour un lecteur" + +#, fuzzy +#~ msgid "for advanced usege" +#~ msgstr "avancé(e)" + +#~ msgid "Download a custom PDF" +#~ msgstr "Téléchargez un PDF pérsonnalisé" + +#~ msgid "Motifs and themes" +#~ msgstr "Motifs et thèmes" + +#~ msgid "See" +#~ msgstr "Voir" + +#~ msgid "Source" +#~ msgstr "Source" + +#~ msgid "of the book" +#~ msgstr "du livre" + +#~ msgid "Source XML file" +#~ msgstr "Fichier source XML" + +#~ msgid "Book on" +#~ msgstr "Livre sur" + +#~ msgid "Editor's Platform" +#~ msgstr "Plateforme d'éditeur" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "Description du livre sur Lektury.Gazeta.pl" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "Description du livre sur Wikipédia" + +#~ msgid "Mix this book" +#~ msgstr "Mixez ce livre" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "Téléchargez tous les livres audio pour ce livre" + +#~ msgid "Catalogue" +#~ msgstr "Catalogue" + +#~ msgid "Authors" +#~ msgstr "Auteurs" + +#~ msgid "Kinds" +#~ msgstr "Types" + +#~ msgid "Genres" +#~ msgstr "Genres" + +#~ msgid "Epochs" +#~ msgstr "Époques" + +#~ msgid "Themes and topics" +#~ msgstr "Thèmes et sujets" + +#~ msgid "Listing of all DAISY files" +#~ msgstr "Liste des tous les livres audio DAISY" + +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "Le plus nouveaux livres audio DAISY" + +#~ msgid "" +#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" +#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +#~ "ograniczeń." +#~ msgstr "" +#~ "DAISY est un système pour rendre les livres accessibles, apprécié autour " +#~ "du monde, \n" +#~ "approprié à des non voyants et à des malvoyants et à des personnes \n" +#~ "qui ont des difficultés à lire. Vous pouvez l'utiliser gratuitement et " +#~ "sans limites." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "Les critères sont ambigus. Choisissez parmi les options ci-dessous:" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Étagères qui contiennent l'extrait" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une au-dessous, si " +#~ "vous voulez." + +#~ msgid "Save all shelves" +#~ msgstr "Enregistrer toutes les étagères" + +#~ msgid "Expand fragment" +#~ msgstr "Montrer l'extrait" + +#~ msgid "Hide fragment" +#~ msgstr "Cacher l'extrait" + +#~ msgid "See full category" +#~ msgstr "Voir catégorie entière" + +#~ msgid "All books" +#~ msgstr "Tous les livres" + +#~ msgid "Audiobooks" +#~ msgstr "Livres audio" + +#~ msgid "DAISY" +#~ msgstr "DAISY" + +#~ msgid "Work is licensed under " +#~ msgstr "Ouvrage sous la licence" + +#~ msgid "Based on" +#~ msgstr "Basé sur" + +#~ msgid "Details" +#~ msgstr "Détails" + +#~ msgid "Author" +#~ msgstr "Auteur" + +#~ msgid "Other resources" +#~ msgstr "Autres ressources" + +#~ msgid "Source of the image" +#~ msgstr "Source d'image" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "L'image sur la Plateforme d'éditeur" + +#~ msgid "View XML source" +#~ msgstr "Voir source XML" + +#~ msgid "Work's themes " +#~ msgstr "Les thèmes de l'oeuvre" + +#~ msgid "Listing of all pictures" +#~ msgstr "Liste de tous les images" + +#~ msgid "Download as" +#~ msgstr "Téléchargez comme" + +#~ msgid "Artist" +#~ msgstr "Artiste" + +#~ msgid "Director" +#~ msgstr "Metteur en scène" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "Livres audios ont été préparés comme une part des projets:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "%(cs)s, sponsorisé par %(fb)s" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "Livres audios ont été préparés comme une part du projet %(cs)s sponsorisé " +#~ "par %(fb)s." + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "Livres audios ont été préparés comme une part du projet %(cs)s." + +#~ msgid "Did you mean" +#~ msgstr "Est-ce que vous cherchez" + +#~ msgid "Results by authors" +#~ msgstr "Résultats par l'auteur" + +#~ msgid "Results by title" +#~ msgstr "Résultats par le titre" + +#~ msgid "Results in text" +#~ msgstr "Résultats dans le texte" + +#~ msgid "Other results" +#~ msgstr "Autres résultats" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "" +#~ "Nous sommes désolés, aucune ressource ne répond aux critères de recherche." + +#~ msgid "" +#~ "Search engine supports following criteria: title, author, theme/topic, " +#~ "epoch, kind and genre.\n" +#~ "\t\tAs for now we do not support full text search." +#~ msgstr "" +#~ "Le moteur de recherche permet de chercher selon le titre, auteur, sujet/" +#~ "thème, époque, type et genre.\n" +#~ "\t\tPour le moment nous n'assurons pas la recherche en plein texte." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "" +#~ "Nous sommes désolés, pour effectuer la recherche il faut entrer au moins " +#~ "deux caractères." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "sur Lektury.Gazeta.pl" + +#~ msgid "in Wikipedia" +#~ msgstr "sur Wikipédia" + +#~ msgid "Your shelves with books" +#~ msgstr "Vos étagères avec les livres" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une en-dessus, si " +#~ "vous voulez." + +#~ msgid "Create shelf" +#~ msgstr "Créez une étagère" + +#~ msgid "author" +#~ msgstr "auteur" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "Fiches pour les enseignants" + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "Lisez une élaboration d'oeuvres de cet auteur sur Lektury.Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "Lisez un article sur cet auteur sur Wikipédia." + +#~ msgid "This author's works are copyrighted." +#~ msgstr "Les oeuvres de cet auteur sont protégées par le droit d'auteur." + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "Apprenez pourquoi les bibliothèques en ligne ne peuvent " +#~ "pas publier les oeuvres de cet auteur." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "Les oeuvres de cet auteur appartiennent au domaine public et seront " +#~ "prochainement publiées dans la bibliothèque en ligne Wolne Lektury." + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "Les oeuvres de cet auteur entreront dans le domaine public et il sera " +#~ "possible de les publier sans restrictions" + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "Cette oeuvre appartient au domaine public et sera prochainement publiée " +#~ "dans la bibliothèque en ligne Wolne Lektury." + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "Cette oeuvre entrera dans le domaine public et il sera possible de la " +#~ "publier sans restrictions " + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this work." +#~ msgstr "" +#~ "Apprenez pourquoi les bibliothèques en ligne ne peuvent " +#~ "pas publier cette oeuvre." + +#~ msgid "This work is copyrighted." +#~ msgstr "Cette oeuvre est protégée par le droit d'auteur" + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "Se connecter à Wolne Lektury" + +#~ msgid "Login" +#~ msgstr "Connexion" diff --git a/src/wolnelektury/locale/it/LC_MESSAGES/django.mo b/src/wolnelektury/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..5e5748cb2 Binary files /dev/null and b/src/wolnelektury/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/it/LC_MESSAGES/django.po b/src/wolnelektury/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..38d521eb1 --- /dev/null +++ b/src/wolnelektury/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,787 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \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:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Accedi" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "Registrati" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr " Per poter continuare devi essere loggato" + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Questa pagina non esiste" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "La pagina non è stata trovata" + +#: templates/404.html:14 +msgid "" +"We are sorry, but this page does not exist. Please check if you entered " +"correct address or go to " +msgstr "" +"Siamo spiacenti, ma questa pagina non esiste. Si prega di verificare se " +"l'indirizzo è stato inserito correttamente oppure andare su" + +#: templates/404.html:14 +msgid "main page" +msgstr "pagina principale" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "Errore del server" + +#: templates/500.html:19 +msgid "" +"

                            The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"blog.

                            Inform our administrators about the " +"error.

                            " +msgstr "" +"

                            il sito di Wolnelektury.pl non è disponibile al momento. Nel frattempo " +"si prega di visitare il nostro blog.

                            Si prega di informare i nostri amministratori sull'errore.

                            " + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "Servizio non disponibile" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "" +"A causa di lavori di manutenzione il sito WolneLektury.pl non è " +"momentaneamente disponibile." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "Wolne Lektury biblioteca online" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "" + +#: templates/main_page.html:41 +msgid "News" +msgstr "" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "Segnala un'errore o una proposta" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "Scarica il catalogo nel formato PDF." + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "Widget" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "Manca un libro?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "Programma editoriale" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "Immagine usata" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" %(c)s free reading you have right to\n" +" " +msgid_plural "" +"\n" +" %(c)s free readings you have right to\n" +" " +msgstr[0] "" +"\n" +" %(c)s hai una lettura libera right to\n" +" " +msgstr[1] "" +"\n" +" %(c)s hai le letture libere right to\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "Benvenuti" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "" + +#: templates/superbase.html:74 templates/user.html:14 +msgid "Social accounts" +msgstr "" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "Il mio scaffale" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "Amministrazione" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "Esci" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "Cerca" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "Versioni in altre lingue" + +#: templates/superbase.html:165 +#, fuzzy +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" +"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" +"\t\t\t\tHosting: ICM.\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tWolne Lektury è il progetto condotto da Modern Poland Foundation.\n" +"\t\t\t\t Le riproduzioni digitali vengono fatte da Biblioteca Nazionale, Biblioteka ĹšlÄ…ska and Biblioteka ElblÄ…ska, sulla base di raccolte di BN, BĹš e BE.\n" +"\t\t\t\tHosting: ICM.\n" +"\t\t\t\t" + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tFondazione Polonia Moderna, 00-514 Varsavia, ul. Marszałkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "Chiudi" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "Caricamento" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Amministrazione del sito" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "Traduzioni" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "avanzato" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "semplificato" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "Importa un libro" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +#, fuzzy +msgid "Sign in using:" +msgstr "Accedi" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "oppure registrati" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgstr[0] "" +"\n" +"Abbiamo %(c)s dell'opera pubblicata in Wolne Lektury!\n" +"Aiutaci ad espandere la biblioteca e aggiungere nuove letture gratuite da\n" +"facendo una " +"donazione\n" +"oppure con un trasferimento 1% della tua imposta sul reddito.\n" +msgstr[1] "" +"\n" +"Abbiamo %(c)s dell'opera pubblicata in Wolne Lektury!\n" +"Aiutaci ad espandere la biblioteca e aggiungere nuove letture gratuite da\n" +"facendo una " +"donazione\n" +"oppure con un trasferimento 1% della tua imposta sul reddito.\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "Più" + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "" + +#: templates/openid/login.html:27 +#, fuzzy +msgid "Sign In" +msgstr "Accedi" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "precedente" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "seguente" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "Autorizza accesso a Wolne Lektury" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user %(user)s." +msgstr "" +"Conferma l'accesso autorizzato a Wolne Lektury come utente %(user)s." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: templates/socialaccount/connections.html:36 +#, fuzzy +msgid "Remove" +msgstr "elimina" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "" + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" + +#~ msgid "Listing of all audiobooks" +#~ msgstr "Elenco di tutti gli audiolibri " + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "Ultimi audiolibri MP3" + +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "Ultimi audiolibri Ogg Vorbis" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "MoĹĽecie z niej korzystać bezpĹ‚atnie i bez ograniczeĹ„.\n" +#~ "Audiobooki nagrywajÄ… znani aktorzy, wĹ›rĂłd nich Danuta Stenka i Jan " +#~ "Peszek." +#~ msgstr "" +#~ "Audioteca dei testi scolastici della Fondazione Nowoczesna Polska. \n" +#~ " Potete utilizzarla gratuitamente e senza limiti.\n" +#~ "Gli audiolibri vengono registrati da famosi attori, tra cui Danuta Stenka " +#~ "e Jan Peszek." + +#~ msgid "See also" +#~ msgstr "Vedi anche" + +#~ msgid "Theme" +#~ msgstr "tema" + +#~ msgid "in work " +#~ msgstr "in corso" + +#~ msgid "This work is licensed under:" +#~ msgstr "Questa opera è pubblicata su licenza:" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " Creative Commons Attribution-ShareAlike 3.0\n" +#~ " license." +#~ msgstr "" +#~ "Questa opera non è sotto il diritto d'autore e fa parte del\n" +#~ "pubblico dominio, il che significa che è possibile pubblicarla \n" +#~ "e distribuirla liberamente. Se un'opera è completata con i materiali " +#~ "aggiuntivi \n" +#~ "(le annotazioni, i motivi letterari ecc.) che sono protette dal diritto " +#~ "d'autore, quei\n" +#~ "materiali aggiuntivi sono disponibili secondo la \n" +#~ " Creative " +#~ "Commons Attribution-ShareAlike 3.0\n" +#~ "licenza." + +#~ msgid "Text prepared based on:" +#~ msgstr "Il testo preparato e basato su:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Curato ed elaborato da:" + +#~ msgid "Listing of all works" +#~ msgstr "Elenco di tutte le opere" + +#~ msgid "Table of Content" +#~ msgstr "Indice" + +#~ msgid "↑ top ↑" +#~ msgstr "↑ su ↑" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Metti il libro sullo scaffale" + +#~ msgid "Create new shelf" +#~ msgstr "Crea un nuovo scaffale" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "Non hai nessuno scaffale. se vuoi puoi crearne uno, qui sotto." + +#~ msgid "Put on the shelf!" +#~ msgstr "Metti sullo scaffale!" + +#~ msgid "Epoch" +#~ msgstr "Epoca" + +#~ msgid "Kind" +#~ msgstr "Categoria" + +#~ msgid "Genre" +#~ msgstr "Genere" + +#~ msgid "Read online" +#~ msgstr "Leggi online" + +#~ msgid "Download" +#~ msgstr "Scarica" + +#~ msgid "Listen" +#~ msgstr "Ascolta" + +#~ msgid "Table of contents" +#~ msgstr "Indice" + +#~ msgid "Themes" +#~ msgstr "Temi" + +#~ msgid "Edit. note" +#~ msgstr "Modifica. nota" + +#~ msgid "Infobox" +#~ msgstr "Infobox" + +#~ msgid "Book's page" +#~ msgstr "Pagina del libro" + +#~ msgid "Download a custom PDF" +#~ msgstr " Scarica un PDF personalizzato" + +#~ msgid "Motifs and themes" +#~ msgstr "Motivi e temi" + +#~ msgid "See" +#~ msgstr "Vedi" + +#~ msgid "Source" +#~ msgstr "Fonte" + +#~ msgid "of the book" +#~ msgstr "del libro" + +#~ msgid "Source XML file" +#~ msgstr "File di fonte XML" + +#~ msgid "Book on" +#~ msgstr "Libro su" + +#~ msgid "Editor's Platform" +#~ msgstr " Piattaforma del editore" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "Descrizione del libro su Lektury.Gazeta.pl" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "Descrizione del libro su Wikipedia" + +#~ msgid "Mix this book" +#~ msgstr "Combina questo libro" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "Scarica tutti gli audiolibri per questo libro." + +#~ msgid "Catalogue" +#~ msgstr "Catalogo" + +#~ msgid "Authors" +#~ msgstr "Autori" + +#~ msgid "Kinds" +#~ msgstr "Categorie" + +#~ msgid "Genres" +#~ msgstr "Generi" + +#~ msgid "Epochs" +#~ msgstr "Epoche" + +#~ msgid "Themes and topics" +#~ msgstr "temi e argomenti" + +#~ msgid "Listing of all DAISY files" +#~ msgstr "Elenco di tutti i file DAISY " + +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "Ultimi audiolibri DAISY" + +#~ msgid "" +#~ "System DAISY to uznany na caĹ‚ym Ĺ›wiecie format udostÄ™pniania ksiÄ…" +#~ "ĹĽek\n" +#~ "dostosowany do potrzeb osĂłb sĹ‚abowidzÄ…cych, niewidomych oraz innych " +#~ "osĂłb\n" +#~ "majÄ…cych trudnoĹ›ci z czytaniem. MoĹĽecie z nich korzystać bezpĹ‚atnie " +#~ "i bez ograniczeĹ„." +#~ msgstr "" +#~ "Il sistema DAISY è un formato conosciuto nel mondo che serve a fornire i " +#~ "libri\n" +#~ "adeguato ai bisogni delle persone non vedenti, ipovedenti \n" +#~ "e con difficoltà nel leggere. Potete usufruirne gratuitamente e senza " +#~ "limiti." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "" +#~ "Questi criteri sono ambigui. Si prega di selezionare una delle seguenti " +#~ "opzioni:" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Gli scaffali che contengono il frammento" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "Non hai nessuno scaffale. Se vuoi puoi crearne uno, qui sotto." + +#~ msgid "Save all shelves" +#~ msgstr "Salva tutti gli scaffali" + +#~ msgid "Expand fragment" +#~ msgstr "Espandi il frammento" + +#~ msgid "Hide fragment" +#~ msgstr "Nascondi il frammento" + +#~ msgid "See full category" +#~ msgstr "Vedi tutta la categoria" + +#~ msgid "All books" +#~ msgstr "Tutti i libri" + +#~ msgid "Audiobooks" +#~ msgstr "Audiolibri" + +#~ msgid "DAISY" +#~ msgstr "DAISY" + +#~ msgid "Work is licensed under " +#~ msgstr "L'opera è su licenza di" + +#~ msgid "Based on" +#~ msgstr "Basato su" + +#~ msgid "Details" +#~ msgstr "Dettagli" + +#~ msgid "Author" +#~ msgstr "Autore" + +#~ msgid "Other resources" +#~ msgstr "Altre fonti" + +#~ msgid "Source of the image" +#~ msgstr "Fonte dell'immagine" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "Immagine sulla piattaforma del editore" + +#~ msgid "View XML source" +#~ msgstr "Visualizza la fonte XML" + +#~ msgid "Work's themes " +#~ msgstr "Temi dell'opera" + +#~ msgid "Listing of all pictures" +#~ msgstr "Elenco di tutte le immagini" + +#~ msgid "Artist" +#~ msgstr "Artista" + +#~ msgid "Director" +#~ msgstr "Direttore" + +#~ msgid "Download as" +#~ msgstr "Scarica come" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "" +#~ "Gli audilobri sono stati preparati come parte dei seguenti progetti:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "%(cs)s, creato da %(fb)s // %(cs)s, finanziato da %(fb)s" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "Gli audiollibri sono stati preparati come parte del progetto %(cs)s, " +#~ "finanziato da %(fb)s" + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "Gli audiolibri sono stati preparati come parte di progetto %(cs)s." + +#~ msgid "Did you mean" +#~ msgstr "Volevi dire" + +#~ msgid "Results by authors" +#~ msgstr "Risultati per autore" + +#~ msgid "Results by title" +#~ msgstr "Risultati per titolo" + +#~ msgid "Results in text" +#~ msgstr "Risultati nel testo" + +#~ msgid "Other results" +#~ msgstr "Altri risultati" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "" +#~ "Siamo spiacenti!I criteri di ricerca non corrispondono alle risorse." + +#~ msgid "" +#~ "Search engine supports following criteria: title, author, theme/topic, " +#~ "epoch, kind and genre.\n" +#~ "\t\tAs for now we do not support full text search." +#~ msgstr "" +#~ "Il motore di ricerca supporta i seguenti criteri: titolo, autore, tema, " +#~ "epoca, genere.\n" +#~ "\t\t Per il momento non supportiamo i criteri del testo intero." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "" +#~ "Siamo spiacenti! La ricerca viene effettuata su parole con almeno due " +#~ "caratteri." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "su Lektury.Gazeta.pl" + +#~ msgid "in Wikipedia" +#~ msgstr "su Wikipedia" + +#~ msgid "Your shelves with books" +#~ msgstr "I tuoi scaffali con i libri" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "Non hai nessuno scaffale. se vuoi puoi crearne uno, qui sotto." + +#~ msgid "Create shelf" +#~ msgstr "Crea uno scaffale" + +#~ msgid "author" +#~ msgstr "autore" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "Materiali per gli insegnanti // " + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "Leggi lo studio dell'opera di questo autore su Lektury.Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "Leggi l'articolo di questo autore su Wikipedia" + +#~ msgid "This author's works are copyrighted." +#~ msgstr " Le opere di questo autore sono protette dai diritti d'autore." + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "Scopri perche le biblioteche online non possono pubblicare opere di questo " +#~ "autore." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "Le opere di questo autore sono di pubblico dominio e fra poco saranno " +#~ "pubblicate nella biblioteca scolastica di Wolne Lektury. " + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "Le opere di questo autore saranno di pubblico dominio e sarà possibile " +#~ "pubblicarle senza le restrizioni su" + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "Questa opera è di pubblico dominio e fra poco sarà pubblicata nella " +#~ "biblioteca scolastica di Wolne Lektury." + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "Questa opera sarà di pubblico dominio e sarà possibile pubblicarla senza " +#~ "le restrizioni su" + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this work." +#~ msgstr "" +#~ "Scopri perché le librerie online non possono pubblicare le opere di questo " +#~ "autore." + +#~ msgid "This work is copyrighted." +#~ msgstr "Quest'opera è protetta dal diritto d'autore." + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "Loggati in Wolne Lektury" + +#~ msgid "Login" +#~ msgstr "Login" diff --git a/src/wolnelektury/locale/jp/LC_MESSAGES/django.mo b/src/wolnelektury/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..6b700daec Binary files /dev/null and b/src/wolnelektury/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/jp/LC_MESSAGES/django.po b/src/wolnelektury/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..c2d5e8fd9 --- /dev/null +++ b/src/wolnelektury/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,345 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-07 15:50+0100\n" +"Last-Translator: Marcin Koziej \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Zaloguj" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "" + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "" + +#: templates/404.html:14 +msgid "" +"We are sorry, but this page does not exist. Please check if you entered " +"correct address or go to " +msgstr "" + +#: templates/404.html:14 +msgid "main page" +msgstr "" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "" + +#: templates/500.html:19 +msgid "" +"

                            The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"blog.

                            Inform our administrators about the " +"error.

                            " +msgstr "" + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "" + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "" + +#: templates/main_page.html:41 +msgid "News" +msgstr "" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "" + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" %(c)s free reading you have right to\n" +" " +msgid_plural "" +"\n" +" %(c)s free readings you have right to\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "" + +#: templates/superbase.html:74 templates/user.html:14 +msgid "Social accounts" +msgstr "" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" +"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" +"\t\t\t\tHosting: ICM.\n" +"\t\t\t\t" +msgstr "" + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" +msgstr "" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +#, fuzzy +msgid "Sign in using:" +msgstr "Zaloguj" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgstr[0] "" +msgstr[1] "" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "" + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "" + +#: templates/openid/login.html:27 +#, fuzzy +msgid "Sign In" +msgstr "Zaloguj" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user %(user)s." +msgstr "" + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: templates/socialaccount/connections.html:36 +msgid "Remove" +msgstr "" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "" + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" diff --git a/src/wolnelektury/locale/lt/LC_MESSAGES/django.mo b/src/wolnelektury/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..5d1dfb986 Binary files /dev/null and b/src/wolnelektury/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/lt/LC_MESSAGES/django.po b/src/wolnelektury/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..99e0dfa8e --- /dev/null +++ b/src/wolnelektury/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,1136 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\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" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Prisijungti " + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "Jau esate prisijungęs kaip vartotojas %(user)s" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "Registruotis " + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "Norėdami tęsti, turite būti prisijungę" + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Tinklalapis neegzistuoja" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "Puslapis nerastas" + +#: templates/404.html:14 +msgid "" +"We are sorry, but this page does not exist. Please check if you entered " +"correct address or go to " +msgstr "" +"Atsiprašome, bet šis tinklalapis neegzistuoja. Prašome patvirtinti ar " +"įvedėte teisingą adresą arba eikite į" + +#: templates/404.html:14 +msgid "main page" +msgstr "pagrindinį puslapį" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "Serverio klaida" + +#: templates/500.html:19 +msgid "" +"

                            The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"blog.

                            Inform our administrators about the " +"error.

                            " +msgstr "" +"

                            Interneto svetainė yra laikinai neprieinama. Aplankykite mūsų blogą.

                            Praneškiteadministratoriams apie " +"klaidą.

                            \"" + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "Paslauga neprieinama" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "" +"Interneto svetainė Wolnelektury.pl šiuo metu yra neprieinama dėl atliekamų " +"remonto darbų." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "Wolne Lektury internetinė biblioteka" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "Kas naujo?" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "Naujos publikacijos" + +#: templates/main_page.html:41 +msgid "News" +msgstr "Naujienos" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "Priemonės" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "Praneškite apie klaidą arba teikite pasiūlymus" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "Atsisiųsti katalogą PDF formatu." + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "Valdiklis" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "Neradote knygos?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "Publikavimo planas" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "Informacija" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "Panaudotas paveikslėlis:" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" %(c)s free reading you have right to\n" +" " +msgid_plural "" +"\n" +" %(c)s free readings you have right to\n" +" " +msgstr[0] "" +"\n" +" %(c)s nemokamas kūrinys į kurį turite teisę\n" +" " +msgstr[1] "" +"\n" +" %(c)s nemokami kūriniai į kuriuos turite teisę\n" +" " +msgstr[2] "" +"\n" +" %(c)s nemokamų kūrinių į kuriuos turite teisę\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "Sveiki atvykę" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "Slaptažodis" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "El- paštas" + +#: templates/superbase.html:74 templates/user.html:14 +msgid "Social accounts" +msgstr "Socialinės paskyros" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "Mano lentyna" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "Administracija " + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "Atsijungti" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "Ieškoti" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "Kalbų versijos" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" +"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" +"\t\t\t\tHosting: ICM.\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tProjektas Wolne Lektury yra fondo Šiuolaikinė Lenkija vadovaujamas.\n" +"\t\t\t\tSkaitmeninės reprodukcijos yra " +"Nacionalinės bibliotekos, Silezijos bibliotekos ir Elbingo bibliotekos paruoštos, remiantis šių bibliotekų ištekliais.\n" +"\t\t\t\tPriegloba: ICM.\n" +"\t\t\t\t" + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tFondas Šiuolaikinė Lenkija, 00-514 Warszawa, ul. Marszałkowska 84/92 " +"lok. 125, tel/faksas: (22) 621-30-17\n" +" el. paštas: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "Uždaryti" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "Kraunasi" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "Vartotojas" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Interneto svetainės administracija" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "Vertimai" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "papildomas" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "supaprastintas" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "Importuoti knygą" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "Pamiršote slaptažodį?" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +msgid "Sign in using:" +msgstr "Prisijungti naudojant:" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "arba registruotis " + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgstr[0] "" +"\n" +"Turime %(c)s kūrinį publikuotą Wolne Lektury interneto svetainėje!\n" +"Padėkite mums plėtoti biblioteką ir nemokamai bendrinti naujus kūrinius\n" +"remdami mus " +"finansiškai\n" +"arba skirdami 1% jūsų pajamų mokesčio.\n" +msgstr[1] "" +"\n" +"Turime %(c)s kūrinius publikuotus Wolne Lektury interneto svetainėje!\n" +"Padėkite mums plėtoti biblioteką ir nemokamai bendrinti naujus kūrinius\n" +"remdami mus " +"finansiškai\n" +"arba skirdami 1% jūsų pajamų mokesčio.\n" +msgstr[2] "" +"\n" +"Turime %(c)s kūrinių publikuotų Wolne Lektury interneto svetainėje!\n" +"Padėkite mums plėtoti biblioteką ir nemokamai bendrinti naujus kūrinius\n" +"remdami mus " +"finansiškai\n" +"arba skirdami 1% jūsų pajamų mokesčio.\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" +"Tapkite redaktoriumi Wolne Lektury interneto svetainės! Sužinokite ar\n" +"šiuo metu dirbame su jūsų ieškomu kūriniu ir paruoškite\n" +"jūsų leidinį prisijungdami prie Redakcinės Platformos." + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "Daugiau..." + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "OpenID Prisijungti" + +#: templates/openid/login.html:27 +msgid "Sign In" +msgstr "Prisijungti " + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "ankstėsnis" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "sekantis " + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "Leisti prieigą prie Wolne Lektury interneto svetainės" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user %(user)s." +msgstr "" +"Patvirtinkite, kad leistute prieigą prie Wolne Lektury interneto svetainės " +"kaip vartotojas %(user)s." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Paskyros jungtys" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"Galite prisijungti prie jūsų paskyros naudodamiesi šiomis third party " +"paskyromis:" + +#: templates/socialaccount/connections.html:36 +msgid "Remove" +msgstr "Pašalinti" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "Neturite socialinio tinklo paskyrų prijungtų prie šios paskyros." + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "Pridėti 3rd Party Paskyrą" + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "Prisijungimas atšauktas" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" +"Nusprendėte atšaukti prisijungimą prie mūsų interneto svetainės naudodamiesi " +"viena iš jūsų egzistuojančių paskyrų. Jei įvyko klaida, prašome pradėti čia " +"sign in." + +#~ msgid "Listing of all audiobooks" +#~ msgstr "Visų audio knygų sąrašas" + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "Naujosios MP3 audio knygos" + +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "Naujosios Ogg Vorbis audio knygos" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "Fondo Šiuolaikinė Lenkija privalomos literatūros audio knygų rinkinys.\n" +#~ "Galite juo naudotis nemokamai ir be apribojimų.\n" +#~ "Audio knygos yra garsių aktorių įrašomos, tokių kaip Danuta Stenka ir Jan " +#~ "Peszek." + +#~ msgid "See also" +#~ msgstr "Žiūrėti daugiau" + +#~ msgid "Theme" +#~ msgstr "Motyvas" + +#~ msgid "in work " +#~ msgstr "kūrinyje" + +#~ msgid "This work is licensed under:" +#~ msgstr "Šis kūrinys yra licencijuotas pagal:" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " Creative Commons Attribution-ShareAlike 3.0\n" +#~ " license." +#~ msgstr "" +#~ "Šio visuomenės srities kūrinio autorių teisė neapima,\n" +#~ "tai reiškia, kad gali būti laisvai naudojamas bei\n" +#~ "platinamas. Jei su šiuo kūriniu yra pateikiamos bet kokios\n" +#~ "papildomos autorinių teisių saugomos medžiagos (kaip pastabos, motyvai ir " +#~ "t.t.), šios\n" +#~ "medžiagos yra licencijuotos pagal\n" +#~ "Creative " +#~ "Commons Attribution-ShareAlike 3.0\n" +#~ "licenciją." + +#~ msgid "Text prepared based on:" +#~ msgstr "Tekstas paruoštas remiantis:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Redagavimas ir pastabos:" + +#~ msgid "Listing of all works" +#~ msgstr "Visų kūrinių sąrašas" + +#~ msgid "Table of Content" +#~ msgstr "Turinys" + +#~ msgid "↑ top ↑" +#~ msgstr "↑į viršų↑" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Padėkite knygą į lentyną!" + +#~ msgid "Create new shelf" +#~ msgstr "Sukurti naują lentyną" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naują lentyną " +#~ "žemiau." + +#~ msgid "Put on the shelf!" +#~ msgstr "Padėkite į lentyną!" + +#~ msgid "Epoch" +#~ msgstr "Epocha" + +#~ msgid "Kind" +#~ msgstr "Rūšis " + +#~ msgid "Genre" +#~ msgstr "Žanras" + +#~ msgid "Read online" +#~ msgstr "Skaityti online" + +#~ msgid "Download" +#~ msgstr "Atsisiųsti" + +#~ msgid "to print" +#~ msgstr "Spausdinti" + +#~ msgid "for an e-book reader" +#~ msgstr "e-knygos skaitytojui" + +#~ msgid "for Kindle" +#~ msgstr "skaityklei Kindle" + +#~ msgid "for advanced usage" +#~ msgstr "išplėstiniam naudojimui" + +#~ msgid "Listen" +#~ msgstr "Klausytis" + +#~ msgid "Table of contents" +#~ msgstr "Turinys" + +#~ msgid "Themes" +#~ msgstr "Motyvai" + +#~ msgid "Edit. note" +#~ msgstr "Redaguoti pastabą" + +#~ msgid "Infobox" +#~ msgstr "Infobox" + +#~ msgid "Book's page" +#~ msgstr "Knygos puslapis" + +#~ msgid "for a reader" +#~ msgstr "skaitytojui" + +#, fuzzy +#~ msgid "for advanced usege" +#~ msgstr "papildomas" + +#~ msgid "Download a custom PDF" +#~ msgstr "Atsisiųsti PDF failą" + +#~ msgid "Motifs and themes" +#~ msgstr "Motyvai ir temos" + +#~ msgid "See" +#~ msgstr "Žiūrėti" + +#~ msgid "Source" +#~ msgstr "Knygos" + +#~ msgid "of the book" +#~ msgstr "šaltinis" + +#~ msgid "Source XML file" +#~ msgstr "Šaltinio XML failas" + +#~ msgid "Book on" +#~ msgstr "Knyga " + +#~ msgid "Editor's Platform" +#~ msgstr "Redaktoriaus Platformoje" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "Knygos aprašymas Lektury.Gazeta.pl interneto svetainėje" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "Knygos aprašymas Vikipedijoje" + +#~ msgid "Mix this book" +#~ msgstr "Maišyti šią knygą" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "Atsisiųsti visas šios knygos audio knygas" + +#~ msgid "Catalogue" +#~ msgstr "Katalogas" + +#~ msgid "Authors" +#~ msgstr "Autoriai" + +#~ msgid "Kinds" +#~ msgstr "Rūšys" + +#~ msgid "Genres" +#~ msgstr "Žanrai" + +#~ msgid "Epochs" +#~ msgstr "Epochos" + +#~ msgid "Themes and topics" +#~ msgstr "Motyvai ir temos" + +#~ msgid "Listing of all DAISY files" +#~ msgstr "Visų DAISY failų sąrašas" + +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "Naujosios DAISY audio knygos" + +#~ msgid "" +#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" +#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +#~ "ograniczeń." +#~ msgstr "" +#~ "DAISY sistema yra visame pasaulyje pripažintas knygų bendrinimo formatas\n" +#~ "pritaikytas silpnesnio regėjimo žmonėms, akliesiems bei kitiems skaitymo " +#~ "problemų turintiems žmonėms.Galite jomis naudotis nemokamai ir be " +#~ "apribojimų." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "" +#~ "Paieškos kriterijai nėra tikslūs. Prašome išrinkti vieną iš žemiau " +#~ "nurodytų galimybių:" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Lentynos turinčios fragmentus " + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naują lentyną " +#~ "žemiau." + +#~ msgid "Save all shelves" +#~ msgstr "Įrašyti visas lentynas" + +#~ msgid "Expand fragment" +#~ msgstr "Išplėsti fragmentą" + +#~ msgid "Hide fragment" +#~ msgstr "Slėpti fragmentą" + +#~ msgid "See full category" +#~ msgstr "Žiūrėti visą kategoriją" + +#~ msgid "All books" +#~ msgstr "Visos knygos" + +#~ msgid "Audiobooks" +#~ msgstr "Audio knygos" + +#~ msgid "DAISY" +#~ msgstr "DAISY" + +#~ msgid "Work is licensed under " +#~ msgstr "Kūrinys yra licencijuotas pagal:" + +#~ msgid "Based on" +#~ msgstr "Remiantis" + +#~ msgid "Details" +#~ msgstr "Detalės " + +#~ msgid "Author" +#~ msgstr "Autorius" + +#~ msgid "Other resources" +#~ msgstr "Kiti ištekliai" + +#~ msgid "Source of the image" +#~ msgstr "Paveikslėlio šaltinis" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "Paveikslėlis Redaktoriaus Platformoje" + +#~ msgid "View XML source" +#~ msgstr "Žiūrėti XML šaltinį" + +#~ msgid "Work's themes " +#~ msgstr "Kūrinio motyvai" + +#~ msgid "Listing of all pictures" +#~ msgstr "Visų vaizdų sąrašas" + +#~ msgid "Download as" +#~ msgstr "Atsisiųsti kaip" + +#~ msgid "Artist" +#~ msgstr "Artistas" + +#~ msgid "Director" +#~ msgstr "Režisierus" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "Audio knygos buvo paruoštos kaip projektų dalis:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "\"%(cs)s, %(fb)s finansuotų" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "Audio knygos buvo paruoštos kaip dalis %(fb)s. finansuoto %(cs)s projekto." + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "Audio knygos buvo paruoštos kaip dalis %(cs)s projekto." + +#~ msgid "Did you mean" +#~ msgstr "Gal turėjote omenyje" + +#~ msgid "Results by authors" +#~ msgstr "Rezultatai pagal autorius" + +#~ msgid "Results by title" +#~ msgstr "Rezultatai pagal pavadinimą" + +#~ msgid "Results in text" +#~ msgstr "Rezultatai tekste" + +#~ msgid "Other results" +#~ msgstr "Kiti rezultatai" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "Atsiprašome! Rezultatų, atitinkančių paieškos kriterijus nėra." + +#~ msgid "" +#~ "Search engine supports following criteria: title, author, theme/topic, " +#~ "epoch, kind and genre.\n" +#~ "\t\tAs for now we do not support full text search." +#~ msgstr "" +#~ "Paieškos sistema palaiko nurodytus kriterijus: pavadinimas, autorius, " +#~ "tema, epocha, rūšis ir žanras.\n" +#~ "\t\t Kol kas negalima atlikti viso teksto paieškos." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "" +#~ "Atsiprašome! Paieškos užklausa turi susidėti mažiausiai iš dviejų " +#~ "simbolių." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "Lektury.Gazeta.pl interneto svetainėje" + +#~ msgid "in Wikipedia" +#~ msgstr "Vikipedijoje" + +#~ msgid "Your shelves with books" +#~ msgstr "Tavo lentynos su knygomis" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naują lentyną " +#~ "žemiau." + +#~ msgid "Create shelf" +#~ msgstr "Sukurti lentyną" + +#~ msgid "author" +#~ msgstr "autorius" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "Dalijamoji medžiaga mokytojams" + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "" +#~ "Skaitykite šio autoriaus kūrinio aprašymą interneto svetainėje Lektury." +#~ "Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "Skaitykite straipsnį apie šį autorių Vikipedijoje" + +#~ msgid "This author's works are copyrighted." +#~ msgstr "Šio autoriaus kūriniai yra autorinių teisių saugomi ." + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "Sužinokite kodėl šio autoriaus kūriniai negali būti " +#~ "publikuojami internetinėje bibliotekoje." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "Šio autoriaus kūriniai yra viešai prieinami ir netrukus bus publikuoti " +#~ "interneto svetainės Wolne Lektury internetinėje bibliotekoje. " + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "Šio autoriaus kūriniai netrukus bus viešai prieinami ir galės būti " +#~ "publikuojami be apribojimų" + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "Šis kūrinys yra viešai prieinamas ir netrukus bus publikuotas interneto " +#~ "svetainės Wolne Lektury internetinėje bibliotekoje." + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "Šis kūrinys netrukus bus viešai prieinamas ir galės būti publikuojamas be " +#~ "apribojimų" + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this work." +#~ msgstr "" +#~ "Sužinokite kodėl šis kūrinys negali būti publikuojamas " +#~ "internetinėje bibliotekoje." + +#~ msgid "This work is copyrighted." +#~ msgstr "Šis kūrinis yra autorinių teisių saugomas." + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "Prisijungti prie Wolne Lektury interneto svetainės" + +#~ msgid "Login" +#~ msgstr "Prisijungti" + +#~ msgid "" +#~ "Internet Explorer cannot display this site properly. Click here to read " +#~ "more..." +#~ msgstr "" +#~ "Internet Explorer nie sugeba teisingai parodyti šio tinklapio. Paspausti " +#~ "čia, kad sužinoti daugiau..." + +#~ msgid "Your shelves" +#~ msgstr "Tavo lentynos" + +#~ msgid "Register on" +#~ msgstr "Registruotis į" + +#~ msgid "or" +#~ msgstr "arba" + +#~ msgid "return to main page" +#~ msgstr "gryžk į pagrindinį puslapį" + +#, fuzzy +#~ msgid "Listing of all audiobooks on WolneLektury.pl" +#~ msgstr "Kūriniu sąrašas LaisvojiLiteratura.lt" + +#~ msgid "Put a book" +#~ msgstr "Prijung literatūrą" + +#~ msgid "on the shelf!" +#~ msgstr "į lentyną!" + +#~ msgid "for reading" +#~ msgstr "į skaitimą" + +#~ msgid "and printing using" +#~ msgstr "ir spausdinti su pagalbą" + +#~ msgid "Download EPUB" +#~ msgstr "atsisiųsk EPUB failą" + +#~ msgid "Download TXT" +#~ msgstr "atsisiųsk TXT failą" + +#~ msgid "on small displays, for example mobile phones" +#~ msgstr "ant displėjaus, pvz. mobilaus telefono " + +#~ msgid "Download ODT" +#~ msgstr "atsisiųsk ODT failą" + +#~ msgid "and editing using" +#~ msgstr "ir edituoti su pagalbą " + +#~ msgid "Book on project's wiki" +#~ msgstr "Sukurk straipsnį apie knygą vikiprojekte" + +#~ msgid "on" +#~ msgstr "ant" + +#~ msgid "See description" +#~ msgstr "Aprašymas" + +#, fuzzy +#~ msgid "Listing of all works on WolneLektury.pl" +#~ msgstr "Kūriniu sąrašas LaisvojiLiteratura.lt" + +#~ msgid "Jump to" +#~ msgstr "Santrumpa" + +#~ msgid "Categories" +#~ msgstr "Kūrinio kategorija " + +#, fuzzy +#~ msgid "Listing of all DAISY files on WolneLektury.pl" +#~ msgstr "Kūriniu sąrašas LaisvojiLiteratura.lt" + +#~ msgid "Show full category" +#~ msgstr "Apžiūrek visą kategoriją" + +#~ msgid "Hide" +#~ msgstr "Suvyniok" + +#~ msgid "Browse books by categories" +#~ msgstr "Peržiurinek literaturą pagal išrinktą kategoriją" + +#~ msgid "delete" +#~ msgstr "pašalink" + +#~ msgid "" +#~ "Create your own book set. You can share it with friends by sending them " +#~ "link to your shelf." +#~ msgstr "" +#~ "Sukurk savo knygų rinkiny. Gali juo veliau pasidalinti su kitais, " +#~ "persiūsk jiems nuorodą i tavo lentyną." + +#~ msgid "You need to " +#~ msgstr "Gali" + +#~ msgid "sign in" +#~ msgstr "Prisijungti " + +#~ msgid "to manage your shelves." +#~ msgstr "Kad valdti savo lentynom." + +#~ msgid "" +#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." +#~ msgstr "" +#~ "Pamokų scenarijai ir kiti sumanymai kaip panaudoti servisą " +#~ "LaisvojiLiteratura.lt mokslui." + +#~ msgid "" +#~ "are professional recordings of literary texts from our repository, " +#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " +#~ "DAISY system." +#~ msgstr "" +#~ "Tai profesjonalus literaturinių tekstų garso įrašai, mūsų rinkinių " +#~ "laisvai prieinami šiuose įrašymo formatouse: MP3, Ogg Vorbis ir sistema " +#~ "DAISY." + +#~ msgid "Themes groups" +#~ msgstr "Motyvų grupė" + +#~ msgid "See our blog" +#~ msgstr "Aplankyk mūsų blogą" + +#~ msgid "You can help us!" +#~ msgstr "Gali mums padėti!" + +#~ msgid "" +#~ "We try our best to elaborate works appended to our library. It is " +#~ "possible only due to support of our volunteers." +#~ msgstr "" +#~ "Dėka savanorių apršymai kūriniu, kurie yra prijungemi i mūsų biblioteką " +#~ "yra kiekvieną kartą kruopščiai paruošti" + +#~ msgid "" +#~ "We invite people who want to take part in developing Internet school " +#~ "library Wolne Lektury." +#~ msgstr "" +#~ "Kviečiame visus, kurie nori kartu su mumi kurti mokykline internetine " +#~ "biblioteką Laisvoji Literatura." + +#~ msgid "About us" +#~ msgstr "Apie projektą" + +#~ msgid "" +#~ "\n" +#~ "\t\t\tInternet library with school readings “Wolne Lektury” (www.wolnelektury.pl) is a project made by " +#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " +#~ "which are recommended by Ministry of National Education and are in public " +#~ "domain.\n" +#~ "\t\t\t" +#~ msgstr "" +#~ "\n" +#~ "\t\t\tInternetine biblioteka \"Laisvoji Literatura\" (www." +#~ "laisvojiliteratura.lt) siūlanti mokyklinę literaturą - tai " +#~ "Šiuolaikines Lenkijos Fondasto projektas. Fondas veike nou 2007 metų ir " +#~ "savo rinkinuose turi mokyklinę literaturą, kuri yra " +#~ "rekomenduojama per Švietimo ir Mokslo Ministeriją ir kuri jau\tpateko į " +#~ "viešią Interneto svetainę.\n" +#~ "\t\t\t" + +#~ msgid "Searching in" +#~ msgstr "Ieškoimas" + +#~ msgid "More than one result matching the criteria found." +#~ msgstr "Surasta daugiau nei vienas paješku rezultatas" + +#~ msgid "Search in WolneLektury.pl" +#~ msgstr "Ieškok šiame tinklapyje LasvojiLiteratura.lt " + +#~ msgid "Your shelf is empty" +#~ msgstr "Tavo lentyna yra tuščia" + +#~ msgid "" +#~ "You can put a book on a shelf by entering page of the reading and " +#~ "clicking 'Put on the shelf'." +#~ msgstr "" +#~ "Gali įmesti knygą į lentyną, įeik į knygos tinklapį ir išrink \"Į lentyną" +#~ "\". " + +#~ msgid "Choose books' formats which you want to download:" +#~ msgstr "Pasirink knygos persiuntimo formatą:" + +#~ msgid "for listening" +#~ msgstr "klausyti" + +#~ msgid "on favourite MP3 player" +#~ msgstr "numylėtam MP3 grotuve" + +#~ msgid "open format" +#~ msgstr "atviras formatas" + +#~ msgid "Xiph.org Foundation" +#~ msgstr "Fondo Xiph.Org" + +#~ msgid "Updating list of books' formats on the shelf" +#~ msgstr "Atnaujinti knygų formatų sąrašą lentynose. " + +#~ msgid "cancel" +#~ msgstr "anuliuoti" + +#~ msgid "Share this shelf" +#~ msgstr "Pasidalink šią lentyną." + +#~ msgid "" +#~ "Copy this link and share it with other people to let them see your shelf." +#~ msgstr "" +#~ "Sukopijuok šią nuorodą ir persiusk ją tiems, su kuriais noru pasidalinti " +#~ "savo lentyną." + +#, fuzzy +#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Perskaityk šio autoriaus aprašymą tinklapį Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Perskaityk šio autoriaus aprašymą tinklapį Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Perskaityk šio autoriaus aprašymą tinklapį Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read related study on Lektury.Gazeta.pl" +#~ msgstr "Perskaityk šio autoriaus aprašymą tinklapį Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" +#~ msgstr "Perskaityk straipsnį apie autorių Wikipedijoje" + +#, fuzzy +#~ msgid "Read article about kind %(last_tag)s on Wikipedia" +#~ msgstr "Perskaityk straipsnį apie autorių Wikipedijoje" + +#, fuzzy +#~ msgid "Read article about genre %(last_tag)s on Wikipedia" +#~ msgstr "Perskaityk straipsnį apie autorių Wikipedijoje" + +#, fuzzy +#~ msgid "Read related article on Wikipedia" +#~ msgstr "Perskaityk straipsnį apie autorių Wikipedijoje" + +#~ msgid "Delete" +#~ msgstr "pašalinti " + +#~ msgid "return to the main page" +#~ msgstr "sugryžk į pagrindinį puslapį " + +#~ msgid "return to list of materials" +#~ msgstr "gryžk i medžiagų sarašą" + +#~ msgid "Hand-outs for teachers on " +#~ msgstr "Pagalbinės medžiagos mokytojams" + +#, fuzzy +#~ msgid "" +#~ "Download TXT - for reading on small displays, for example mobile phones" +#~ msgstr "ant displėjaus, pvz. mobilaus telefono " + +#~ msgid "Polish" +#~ msgstr "Lenkų" + +#~ msgid "German" +#~ msgstr "Vokiečių" + +#~ msgid "English" +#~ msgstr "Anglų " + +#~ msgid "Lithuanian" +#~ msgstr "Lietuvių" + +#~ msgid "French" +#~ msgstr "Prancūzų" + +#~ msgid "Russian" +#~ msgstr "Rusų" + +#~ msgid "Spanish" +#~ msgstr "Ispanų" + +#~ msgid "Ukrainian" +#~ msgstr "Ukrainiečių" + +#~ msgid "Choose your interface language: " +#~ msgstr "Pasirink sąsajos kalbą:" + +#~ msgid "Choose language" +#~ msgstr "Pasirink kalbą" + +#~ msgid "Hide description" +#~ msgstr "Suvyniok aprašymą " + +#~ msgid "Download MP3" +#~ msgstr "atsisiųsk MP3 failą" + +#~ msgid "Download Ogg Vorbis" +#~ msgstr "atsisiųsk Ogg Vorbis failą" + +#~ msgid "Download DAISY" +#~ msgstr "atsisiųsk DAISY failą" + +#~ msgid "check list of books" +#~ msgstr "patikrink knygų sąrašą" + +#~ msgid "in our repository" +#~ msgstr "mūsų knygų rinkiny" + +#~ msgid "Read study of epoch" +#~ msgstr "Perskaityk gadynės aprašymą" + +#~ msgid "Read article about epoch" +#~ msgstr "Perskaityk straipsnį apie gadynę " diff --git a/src/wolnelektury/locale/pl/LC_MESSAGES/django.mo b/src/wolnelektury/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..b6919642f Binary files /dev/null and b/src/wolnelektury/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/pl/LC_MESSAGES/django.po b/src/wolnelektury/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..6a6ad3450 --- /dev/null +++ b/src/wolnelektury/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,1207 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: WolneLektury\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" +"X-Poedit-Language: Polish\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2)\n" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Zaloguj się" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "Zalogowano jako %(user)s" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "Załóż konto" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "Zaloguj się, aby kontynuować" + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Podana strona nie istnieje" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "Strona nie znaleziona" + +#: templates/404.html:14 +msgid "" +"We are sorry, but this page does not exist. Please check if you entered " +"correct address or go to " +msgstr "" +"Przepraszamy, ale ta strona nie istnieje. Sprawdź czy podałeś dobry adres, " +"lub przejdź do" + +#: templates/404.html:14 +msgid "main page" +msgstr "strony głównej" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "Błąd serwera" + +#: templates/500.html:19 +msgid "" +"

                            The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"blog.

                            Inform our administrators about the " +"error.

                            " +msgstr "" +"

                            Serwis Wolnelektury.pl jest chwilowo niedostępny. Odwiedź naszego bloga

                            \n" +"

                            Powiadom administratorów o błędzie.

                            " + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "Serwis niedostępny" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "" +"Serwis Wolnelektury.pl jest obecnie niedostępny z powodu prac " +"konserwacyjnych." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "Biblioteka internetowa Wolne Lektury" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "Co nowego?" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "Ostatnie publikacje" + +#: templates/main_page.html:41 +msgid "News" +msgstr "Aktualności" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "Narzędzia" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "Zgłoś błąd lub sugestię" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "Pobierz katalog w formacie PDF." + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "Widget" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "Nie znalazłeś/-aś utworu?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "Plan publikacji" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "Informacje" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "Polityka prywatności" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "Użyto obrazu:" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" %(c)s free reading you have right to\n" +" " +msgid_plural "" +"\n" +" %(c)s free readings you have right to\n" +" " +msgstr[0] "" +"\n" +" %(c)s darmowy utwór do której masz prawo\n" +" " +msgstr[1] "" +"\n" +" %(c)s darmowe utwory do których masz prawo\n" +" " +msgstr[2] "" +"\n" +" %(c)s darmowych utworów do których " +"masz prawo\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "Witaj" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "Hasło" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "E-mail" + +#: templates/superbase.html:74 templates/user.html:14 +msgid "Social accounts" +msgstr "Konta społecznościowe" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "Moja półka" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "Administracja" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "Wyloguj" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "Szukaj" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "Wersje językowe" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" +"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" +"\t\t\t\tHosting: ICM.\n" +"\t\t\t\t" +msgstr "" +"\n" +"Wolne Lektury to projekt prowadzony przez fundację Nowoczesna Polska. \n" +"Reprodukcje cyfrowe wykonane przez Bibliotekę Narodową, Bibliotekę Śląską i Bibliotekę Elbląską z egzemplarzy pochodzących ze zbiorów BN, BŚ i " +"BE.\n" +"Hosting: ICM." + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" +msgstr "" +"\n" +"Fundacja Nowoczesna Polska, 00-514 Warszawa, ul. Marszałkowska 84/92 lok. " +"125, tel/fax: (22) 621-30-17, e-mail: fundacja@nowoczesnapolska.org.pl" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "Zamknij" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "Ładowanie" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "Użytkownik" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Administracja stroną" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "Tłumaczenia" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "zaawansowane" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "uproszczone" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "Importuj książkę" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "Nie pamiętasz hasła?" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +msgid "Sign in using:" +msgstr "Zaloguj się używając:" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "albo załóż konto" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgstr[0] "" +"\n" +"W serwisie Wolne Lektury już teraz opublikowany jest %(c)s utwór! Pomóż w " +"rozwijaniu biblioteki i uwalnianiu nowych lektur przekazując nam darowiznę lub 1% " +"podatku.\n" +msgstr[1] "" +"\n" +"W serwisie Wolne Lektury już teraz opublikowane są %(c)s utwory! Pomóż w " +"rozwijaniu biblioteki i uwalnianiu nowych lektur przekazując nam darowiznę lub 1% " +"podatku.\n" +msgstr[2] "" +"\n" +"W serwisie Wolne Lektury już teraz opublikowanych jest %(c)s utworów! Pomóż " +"w rozwijaniu biblioteki i uwalnianiu nowych lektur przekazując nam darowiznę lub 1% " +"podatku.\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" +"Zostań redaktorem lub redaktorką Wolnych Lektur! Sprawdź, czy obecnie " +"pracujemy nad publikacją wyszukiwanej przez ciebie lektury i samodzielnie " +"przygotuj publikację logując się na Platformie Redakcyjnej." + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "Więcej..." + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "Logowanie przez OpenID" + +#: templates/openid/login.html:27 +msgid "Sign In" +msgstr "Zaloguj się" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "poprzedni" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "następny" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "Zezwól na dostęp do Wolnych Lektur" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user %(user)s." +msgstr "" +"Potwierdź dostęp do Wolnych Lektur jako użytkownik %(user)s." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Powiązania konta" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"Możesz się zalogować na swoje konto używając następujących kont zewnętrznych:" + +#: templates/socialaccount/connections.html:36 +msgid "Remove" +msgstr "Usuń" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "Aktualnie do Twojego konta nie są podłączone żadne konta zewnętrzne." + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "Dodaj konto zewnętrzne" + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "Anulowano logowanie" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" +"Logowanie przy użyciu zewnętrznego konta zostało anulowane. Jeśli był to " +"błąd, przejdź do strony logowania." + +#~ msgid "Listing of all audiobooks" +#~ msgstr "Spis wszystkich audiobooków" + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "Ostatnio dodane audiobooki w formacie MP3" + +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "Ostatnio dodane audiobooki w formacie Ogg Vorbis" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." + +#~ msgid "See also" +#~ msgstr "Zobacz też" + +#~ msgid "Theme" +#~ msgstr "Motyw" + +#~ msgid "in work " +#~ msgstr "w utworze" + +#~ msgid "This work is licensed under:" +#~ msgstr "Utwór jest udostępniony na licencji:" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " Creative Commons Attribution-ShareAlike 3.0\n" +#~ " license." +#~ msgstr "" +#~ "Ten utwór nie jest chroniony prawem autorskim i znajduje się w " +#~ "domenie publicznej, co oznacza że możesz go swobodnie wykorzystywać, " +#~ "publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi " +#~ "materiałami (przypisy, motywy literackie etc.), które podlegają prawu " +#~ "autorskiemu, to te dodatkowe materiały udostępnione są na licencji Uznanie " +#~ "autorstwa-Na tych samych warunkach 3.0." + +#~ msgid "Text prepared based on:" +#~ msgstr "Tekst opracowany na podstawie:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Opracowanie redakcyjne i przypisy:" + +#~ msgid "Listing of all works" +#~ msgstr "Spis wszystkich utworów" + +#~ msgid "Table of Content" +#~ msgstr "Spis treści" + +#~ msgid "↑ top ↑" +#~ msgstr "↑ góra ↑" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Wrzuć lekturę na półkę!" + +#~ msgid "Create new shelf" +#~ msgstr "Utwórz nową półkę" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć nową półkę " +#~ "poniżej." + +#~ msgid "Put on the shelf!" +#~ msgstr "Wrzuć na półkę" + +#~ msgid "Epoch" +#~ msgstr "Epoka" + +#~ msgid "Kind" +#~ msgstr "Rodzaj" + +#~ msgid "Genre" +#~ msgstr "Gatunek" + +#~ msgid "Read online" +#~ msgstr "Czytaj online" + +#~ msgid "Download" +#~ msgstr "Pobierz" + +#~ msgid "to print" +#~ msgstr "do druku" + +#~ msgid "for an e-book reader" +#~ msgstr "na czytnik e-booków" + +#~ msgid "for Kindle" +#~ msgstr "na Kindle" + +#~ msgid "for advanced usage" +#~ msgstr "do zadań specjalnych" + +#~ msgid "Listen" +#~ msgstr "Słuchaj" + +#~ msgid "Table of contents" +#~ msgstr "Spis treści" + +#~ msgid "Themes" +#~ msgstr "Motywy" + +#~ msgid "Edit. note" +#~ msgstr "Nota red." + +#~ msgid "Infobox" +#~ msgstr "Informacje" + +#~ msgid "Book's page" +#~ msgstr "Strona utworu" + +#~ msgid "for a reader" +#~ msgstr "na czytnik" + +#~ msgid "Download a custom PDF" +#~ msgstr "Stwórz własny plik PDF" + +#~ msgid "Motifs and themes" +#~ msgstr "Motywy i tematy" + +#~ msgid "See" +#~ msgstr "Zobacz" + +#~ msgid "Source" +#~ msgstr "Źródło" + +#~ msgid "of the book" +#~ msgstr "utworu" + +#~ msgid "Source XML file" +#~ msgstr "Źródłowy plik XML" + +#~ msgid "Book on" +#~ msgstr "Utwór na" + +#~ msgid "Editor's Platform" +#~ msgstr "Platformie Redakcyjnej" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "Opis lektury w Lektury.Gazeta.pl" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "Opis lektury w Wikipedii" + +#~ msgid "Mix this book" +#~ msgstr "Miksuj treść utworu" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "Pobierz wszystkie audiobooki tego utworu" + +#~ msgid "Catalogue" +#~ msgstr "Katalog" + +#~ msgid "Authors" +#~ msgstr "Autorzy" + +#~ msgid "Kinds" +#~ msgstr "Rodzaje" + +#~ msgid "Genres" +#~ msgstr "Gatunki" + +#~ msgid "Epochs" +#~ msgstr "Epoki" + +#~ msgid "Themes and topics" +#~ msgstr "Motywy i tematy" + +#~ msgid "Listing of all DAISY files" +#~ msgstr "Spis wszystkich plików DAISY" + +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "Ostatnio dodane audiobooki w formacie DAISY" + +#~ msgid "" +#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" +#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +#~ "ograniczeń." +#~ msgstr "" +#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" +#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +#~ "ograniczeń." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "" +#~ "Podane kryteria są niejednoznaczne. Proszę wybrać jedną z następujących " +#~ "możliwości:" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Półki zawierające fragment" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć nową półkę " +#~ "poniżej." + +#~ msgid "Save all shelves" +#~ msgstr "Zapisz półki" + +#~ msgid "Expand fragment" +#~ msgstr "Rozwiń fragment" + +#~ msgid "Hide fragment" +#~ msgstr "Zwiń fragment" + +#~ msgid "See full category" +#~ msgstr "Zobacz całą kategorię" + +#~ msgid "All books" +#~ msgstr "Wszystkie utwory" + +#~ msgid "Audiobooks" +#~ msgstr "Audiobooki" + +#~ msgid "DAISY" +#~ msgstr "DAISY" + +#~ msgid "Work is licensed under " +#~ msgstr "Utwór jest udostępniony na licencji" + +#~ msgid "Based on" +#~ msgstr "Na podstawie" + +#~ msgid "Details" +#~ msgstr "O utworze" + +#~ msgid "Author" +#~ msgstr "Autor" + +#~ msgid "Other resources" +#~ msgstr "W innych miejscach" + +#~ msgid "Source of the image" +#~ msgstr "Źródło obrazu" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "Obraz na Platformie Redakcyjnej" + +#~ msgid "View XML source" +#~ msgstr "Źródłowy plik XML" + +#~ msgid "Work's themes " +#~ msgstr "Motywy w utworze" + +#~ msgid "Listing of all pictures" +#~ msgstr "Spis wszystkich obrazów" + +#~ msgid "Download as" +#~ msgstr "Pobierz jako" + +#~ msgid "Artist" +#~ msgstr "Czyta" + +#~ msgid "Director" +#~ msgstr "Reżyseruje" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "Audiobooki przygotowane w ramach projektów:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "%(cs)s, finansowanego przez %(fb)s" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "Audiobooki przygotowane w ramach projektu %(cs)s finansowanego przez %(fb)" +#~ "s." + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "Audiobooki przygotowane w ramach projektu %(cs)s." + +#~ msgid "Did you mean" +#~ msgstr "Czy chodziło Ci o" + +#~ msgid "Results by authors" +#~ msgstr "Znalezieni autorzy" + +#~ msgid "Results by title" +#~ msgstr "Znalezione w tytułach" + +#~ msgid "Results in text" +#~ msgstr "Znalezione w treści" + +#~ msgid "Other results" +#~ msgstr "Inne wyniki" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "" +#~ "Przepraszamy! Brak wyników spełniających kryteria podane w zapytaniu." + +#~ msgid "" +#~ "Search engine supports following criteria: title, author, theme/topic, " +#~ "epoch, kind and genre.\n" +#~ "\t\tAs for now we do not support full text search." +#~ msgstr "" +#~ "Wyszukiwarka obsługuje takie kryteria jak tytuł, autor, motyw/temat, " +#~ "epoka, rodzaj i gatunek utworu. Obecnie nie obsługujemy wyszukiwania fraz " +#~ "w tekstach utworów." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "Przepraszamy! Zapytanie musi zawierać co najmniej dwa znaki." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "w serwisie Lektury.Gazeta.pl" + +#~ msgid "in Wikipedia" +#~ msgstr "w Wikipedii" + +#~ msgid "Your shelves with books" +#~ msgstr "Twoje półki z lekturami" + +#~ msgid "remove" +#~ msgstr "usuń" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć półkę poniżej." + +#~ msgid "Create shelf" +#~ msgstr "Utwórz półkę" + +#~ msgid "author" +#~ msgstr "autor" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "Materiały pomocnicze dla nauczycieli" + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "Przeczytaj omówienia utworów autora w serwisie Lektury.Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "Przeczytaj artykuł o autorze w Wikipedii" + +#~ msgid "This author's works are copyrighted." +#~ msgstr "Dzieła tego autora objęte są prawem autorskim." + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "Dowiedz " +#~ "się, dlaczego biblioteki internetowe nie mogą udostępniać dzieł tego " +#~ "autora." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "Dzieła tego autora znajdują się w domenie publicznej i niedługo zostaną " +#~ "opublikowane w szkolnej bibliotece internetowej Wolne Lektury." + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "Dzieła tego autora przejdą do zasobów domeny publicznej i będą mogły być " +#~ "publikowane bez żadnych ograniczeń za" + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "To dzieło znajduje się w domenie publicznej i niedługo zostanie " +#~ "opublikowane w szkolnej bibliotece internetowej Wolne Lektury." + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "To dzieło przejdzie do zasobów domeny publicznej i będzie mogło być " +#~ "publikowane bez żadnych ograniczeń za" + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this work." +#~ msgstr "" +#~ "Dowiedz " +#~ "się, dlaczego biblioteki internetowe nie mogą udostępniać tego dzieła." + +#~ msgid "This work is copyrighted." +#~ msgstr "To dzieło objęte jest prawem autorskim." + +#, fuzzy +#~ msgid "for advanced usege" +#~ msgstr "zaawansowane" + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "Zaloguj się do Wolnych Lektur" + +#~ msgid "Login" +#~ msgstr "Zaloguj się" + +#~ msgid "Mobile app" +#~ msgstr "Aplikacja mobilna" + +#~ msgid "See description" +#~ msgstr "Zobacz opis" + +#~ msgid "of the book " +#~ msgstr "utworu" + +#~ msgid "" +#~ "Internet Explorer cannot display this site properly. Click here to read " +#~ "more..." +#~ msgstr "" +#~ "Internet Explorer nie potrafi poprawnie wyświetlić tej strony. Kliknij " +#~ "tutaj, aby dowiedzieć się więcej..." + +#~ msgid "Your shelves" +#~ msgstr "Twoje półki" + +#~ msgid "Didn't find a book? Make a suggestion." +#~ msgstr "Nie znalazłeś utworu na stronie? Zgłoś sugestię." + +#~ msgid "Register on" +#~ msgstr "Zarejestruj się w" + +#~ msgid "or" +#~ msgstr "lub" + +#~ msgid "return to main page" +#~ msgstr "wróć do strony głównej" + +#~ msgid "Listing of all audiobooks on WolneLektury.pl" +#~ msgstr "Spis wszystkich audiobooków w WolneLektury.pl" + +#~ msgid "on WolneLektury.pl" +#~ msgstr "w WolneLektury.pl" + +#~ msgid "Put a book" +#~ msgstr "Wrzuć lekturę" + +#~ msgid "on the shelf!" +#~ msgstr "na półkę!" + +#~ msgid "and printing using" +#~ msgstr "i drukowania przy pomocy" + +#~ msgid "Download EPUB" +#~ msgstr "Pobierz plik EPUB" + +#~ msgid "on mobile devices" +#~ msgstr "na urządzeniach mobilnych" + +#~ msgid "Download TXT" +#~ msgstr "Pobierz plik TXT" + +#~ msgid "on small displays, for example mobile phones" +#~ msgstr "na małych ekranach, np. na komórce" + +#~ msgid "Download ODT" +#~ msgstr "Pobierz plik ODT" + +#~ msgid "and editing using" +#~ msgstr "i edytowania przy pomocy" + +#~ msgid "on" +#~ msgstr "w" + +#~ msgid "Listing of all works on WolneLektury.pl" +#~ msgstr "Spis wszystkich utworów w WolneLektury.pl" + +#~ msgid "audiobooks" +#~ msgstr "audiobooki" + +#~ msgid "Jump to" +#~ msgstr "Na skróty" + +#~ msgid "Categories" +#~ msgstr "Utwór w kategoriach" + +#~ msgid "Listing of all DAISY files on WolneLektury.pl" +#~ msgstr "Spis wszystkich plików DAISY w WolneLektury.pl" + +#~ msgid "Show full category" +#~ msgstr "Zobacz całą kategorię" + +#~ msgid "Hide" +#~ msgstr "Zwiń" + +#~ msgid "" +#~ "\n" +#~ "%(c)s book from public domain or " +#~ "under\n" +#~ "a free " +#~ "license.\n" +#~ msgid_plural "" +#~ "\n" +#~ "%(c)s books from public domain " +#~ "or under\n" +#~ "a free " +#~ "license.\n" +#~ msgstr[0] "" +#~ "\n" +#~ "%(c)s lektura z domeny publicznej\n" +#~ "lub na wolnej licencji.\n" +#~ msgstr[1] "" +#~ "\n" +#~ "%(c)s lektury z domeny publicznej\n" +#~ "i na wolnej licencji.\n" +#~ msgstr[2] "" +#~ "\n" +#~ "%(c)s lektur z domeny publicznej\n" +#~ "i na wolnej licencji.\n" + +#~ msgid "Browse books by categories" +#~ msgstr "Przeglądaj lektury według wybranych kategorii" + +#~ msgid "Books for every school level" +#~ msgstr "Lektury na każdy poziom edukacji" + +#~ msgid "primary school" +#~ msgstr "szkoła podstawowa" + +#~ msgid "gymnasium" +#~ msgstr "gimnazjum" + +#~ msgid "high school" +#~ msgstr "szkoła średnia" + +#~ msgid "delete" +#~ msgstr "usuń" + +#~ msgid "" +#~ "Create your own book set. You can share it with friends by sending them " +#~ "link to your shelf." +#~ msgstr "" +#~ "Stwórz własny zestaw lektur. Możesz się nim później podzielić z innymi, " +#~ "przesyłając im link do Twojej półki." + +#~ msgid "You need to " +#~ msgstr "Aby zarządzać swoimi półkami, musisz się" + +#~ msgid "sign in" +#~ msgstr "zalogować" + +#~ msgid "to manage your shelves." +#~ msgstr "." + +#~ msgid "" +#~ "Place our widget - search engine for Wolne Lektury which gives access to " +#~ "free books and audiobooks - on your homepage! Just copy the HTML code " +#~ "below onto your page:" +#~ msgstr "" +#~ "Umieść widżet – wyszukiwarkę Wolnych Lektur umożliwiającą dostęp do " +#~ "darmowych lektur i audiobooków – na swojej stronie WWW! Po prostu skopiuj " +#~ "poniższy kod HTML na swoją stronę:" + +#~ msgid "Insert this element in place where you want display the widget" +#~ msgstr "Umieść ten element w miejscu gdzie chcesz wyświetlić widżet" + +#~ msgid "Place this element just before closing body tag: </body>" +#~ msgstr "Umieść ten element tuż przed zamknięciem taga body: </body>" + +#~ msgid "" +#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." +#~ msgstr "" +#~ "Scenariusze lekcji i inne pomysły na wykorzytanie serwisu WolneLektury.pl " +#~ "podczas nauczania." + +#~ msgid "Themes groups" +#~ msgstr "Rodziny motywów" + +#~ msgid "See our blog" +#~ msgstr "Zobacz nasz blog" + +#~ msgid "You can help us!" +#~ msgstr "Możesz nam pomóc!" + +#~ msgid "Become a volunteer – an editor, developer or translator." +#~ msgstr "" +#~ "Zostań naszym redaktorem, programistą lub tłumaczem – wolontariuszem." + +#~ msgid "Gain new skills and experience." +#~ msgstr "Zdobądź nowe umiejętności i doświadczenie." + +#~ msgid "Join an open project of creating an innovative online library." +#~ msgstr "" +#~ "Weź udział w otwartym projekcie i twórz innowacyjną bibliotekę " +#~ "internetową." + +#~ msgid "About us" +#~ msgstr "O projekcie" + +#~ msgid "" +#~ "\n" +#~ "\t\t\tInternet library with school readings “Wolne Lektury” (www.wolnelektury.pl) is a project made by " +#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " +#~ "which are recommended by Ministry of National Education and are in public " +#~ "domain.\n" +#~ "\t\t\t" +#~ msgstr "" +#~ "\n" +#~ "Biblioteka internetowa z lekturami szkolnymi „Wolne Lektury” (www.wolnelektury.pl) to projekt " +#~ "realizowany przez fundację Nowoczesna Polska. Działa od 2007 roku i " +#~ "udostępnia w swoich zbiorach lektury szkolne, które są zalecane do użytku " +#~ "przez Ministerstwo Edukacji Narodowej i które trafiły już do domeny " +#~ "publicznej." + +#~ msgid "" +#~ "\n" +#~ "Portions of this page are modifications based on work created and shared by Google and used\n" +#~ "according to terms described in the Creative Commons\n" +#~ "3.0 Attribution License.\n" +#~ msgstr "" +#~ "\n" +#~ "Strona zawiera zmodyfikowane logo Androida, stworzone i udostępnione przez Google\n" +#~ "na warunkach licencji Creative Commons 3.0 Uznanie Autorstwa.\n" + +#~ msgid "return to the main page" +#~ msgstr "wróć do strony głównej" + +#~ msgid "Searching in" +#~ msgstr "Wyszukiwanie w" + +#~ msgid "More than one result matching the criteria found." +#~ msgstr "Znaleziono więcej niż jeden wynik wyszukiwania." + +#~ msgid "Search in WolneLektury.pl" +#~ msgstr "Wyszukiwanie w WolneLektury.pl" + +#~ msgid "Your shelf is empty" +#~ msgstr "Twoja półka jest pusta" + +#~ msgid "" +#~ "You can put a book on a shelf by entering page of the reading and " +#~ "clicking 'Put on the shelf'." +#~ msgstr "" +#~ "Możesz wrzucić książkę na półkę, wchodząc na stronę danej lektury i " +#~ "klikając na przycisk „Na półkę!”." + +#~ msgid "Choose books' formats which you want to download:" +#~ msgstr "Wybierz formaty książek, które chcesz pobrać:" + +#~ msgid "for listening" +#~ msgstr "do słuchania" + +#~ msgid "on favourite MP3 player" +#~ msgstr "w ulubionym odtwarzaczu MP3" + +#~ msgid "Xiph.org Foundation" +#~ msgstr "fundacji Xiph.Org" + +#~ msgid "Updating list of books' formats on the shelf" +#~ msgstr "Uaktualnianie listy formatów książek na półce." + +#~ msgid "cancel" +#~ msgstr "anuluj" + +#~ msgid "Share this shelf" +#~ msgstr "Podziel się tą półką" + +#~ msgid "" +#~ "Copy this link and share it with other people to let them see your shelf." +#~ msgstr "" +#~ "Skopiuj ten link i przekaż go osobom, z którymi chcesz się podzielić tą " +#~ "półką." + +#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "" +#~ "Przeczytaj omówienia z epoki %(last_tag)s w serwisie Lektury.Gazeta.pl" + +#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "" +#~ "Przeczytaj omówienia z rodzaju %(last_tag)s w serwisie Lektury.Gazeta.pl" + +#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "" +#~ "Przeczytaj omówienia z gatunku %(last_tag)s w serwisie Lektury.Gazeta.pl" + +#~ msgid "Read related study on Lektury.Gazeta.pl" +#~ msgstr "Przeczytaj powiązane omówienia w serwisie Lektury.Gazeta.pl" + +#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" +#~ msgstr "Przeczytaj artykuł o epoce %(last_tag)s w Wikipedii" + +#~ msgid "Read article about kind %(last_tag)s on Wikipedia" +#~ msgstr "Przeczytaj artykuł o rodzaju %(last_tag)s w Wikipedii" + +#~ msgid "Read article about genre %(last_tag)s on Wikipedia" +#~ msgstr "Przeczytaj artykuł o gatunku %(last_tag)s w Wikipedii" + +#~ msgid "Read related article on Wikipedia" +#~ msgstr "Przeczytaj powiązany artykuł w Wikipedii" + +#~ msgid "Delete" +#~ msgstr "Usuń" + +#~ msgid "Hand-outs for teachers on " +#~ msgstr "Materiały pomocnicze dla nauczycieli w " + +#~ msgid "" +#~ "We try our best to elaborate works appended to our library. It is " +#~ "possible only due to support of our volunteers." +#~ msgstr "" +#~ "Utwory włączane sukcesywnie do naszej biblioteki staramy się opracowywać " +#~ "jak najdokładniej. Jest to możliwe tylko dzięki współpracującym z nami " +#~ "wolontariuszom." + +#~ msgid "" +#~ "We invite people who want to take part in developing Internet school " +#~ "library Wolne Lektury." +#~ msgstr "" +#~ "Zapraszamy wszystkie osoby, które chcą współtworzyć szkolną bibliotekę " +#~ "internetową Wolne Lektury." + +#~ msgid "Latest audiobooks - all formats" +#~ msgstr "Ostatnio dodane audiobooki - wszystkie formaty" + +#~ msgid "return to list of materials" +#~ msgstr "wróć do listy materiałów" + +#~ msgid "Book on project's wiki" +#~ msgstr "Lektura na wiki projektu" + +#~ msgid "daisy" +#~ msgstr "daisy" + +#~ msgid "" +#~ "are professional recordings of literary texts from our repository, " +#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " +#~ "DAISY system." +#~ msgstr "" +#~ "to profesjonalne nagrania tekstów literackich z naszego zbioru dostępne " +#~ "na wolnej licencji w formatach MP3, Ogg Vorbis oraz w systemie DAISY." + +#~ msgid "Download MP3" +#~ msgstr "Pobierz plik MP3" + +#~ msgid "Download Ogg Vorbis" +#~ msgstr "Pobierz plik Ogg Vorbis" + +#~ msgid "Download DAISY" +#~ msgstr "Pobierz plik DAISY" + +#~ msgid "check list of books" +#~ msgstr "zobacz spis utworów" + +#~ msgid "in our repository" +#~ msgstr "w naszym zbiorze" + +#~ msgid "Polish" +#~ msgstr "polski" + +#~ msgid "German" +#~ msgstr "niemiecki" + +#~ msgid "English" +#~ msgstr "angielski" + +#~ msgid "Lithuanian" +#~ msgstr "litewski" + +#~ msgid "French" +#~ msgstr "francuski" + +#~ msgid "Russian" +#~ msgstr "rosyjski" + +#~ msgid "Spanish" +#~ msgstr "hiszpański" + +#~ msgid "Ukrainian" +#~ msgstr "ukraiński" + +#~ msgid "Choose your interface language: " +#~ msgstr "Wybierz język interfejsu:" + +#~ msgid "Choose language" +#~ msgstr "Wybierz język" + +#~ msgid "Hide description" +#~ msgstr "Zwiń opis" diff --git a/src/wolnelektury/locale/ru/LC_MESSAGES/django.mo b/src/wolnelektury/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..55de36919 Binary files /dev/null and b/src/wolnelektury/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/ru/LC_MESSAGES/django.po b/src/wolnelektury/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..f7eb548b3 --- /dev/null +++ b/src/wolnelektury/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,1122 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\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" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Вход" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "Зарегистроваться" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "Вы должны войти, чтобы продолжaть" + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Сайт не существует" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "Сайт не найден" + +#: templates/404.html:14 +msgid "" +"We are sorry, but this page does not exist. Please check if you entered " +"correct address or go to " +msgstr "" +"Извините! Этот сайт не существует. Проверьте, пожалуйста, набрали ли вы " +"хороший адрес или зайдите на" + +#: templates/404.html:14 +msgid "main page" +msgstr "главную страницу" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "Ошибка сервера" + +#: templates/500.html:19 +msgid "" +"

                            The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"blog.

                            Inform our administrators about the " +"error.

                            " +msgstr "" +"

                            The Wolnelektury.pl временно не работает. Тем времeнем зайдите на blog.

                            Сообщите нашим администраторам об " +"ошибке.

                            " + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "Сервис недоступен" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "" +"По поводу технической поддрежки сайт The Wolnelektury.pl временно не " +"работает." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "WolneLektury интернет библиотека" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "Последние публикации" + +#: templates/main_page.html:41 +msgid "News" +msgstr "Новости" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "Утилиты" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "Сообщить об ошибке или предложении" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "Скачать каталог в PDF формате." + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "Виджет" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "Потеряли книгу?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "Издательский план" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "Информация" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "Используемые изображения:" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "на WolneLektury.pl" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" %(c)s free reading you have right to\n" +" " +msgid_plural "" +"\n" +" %(c)s free readings you have right to\n" +" " +msgstr[0] "" +"\n" +" %(c)s бесплатное чтение, котором Вы " +"вправе пользоваться\n" +" " +msgstr[1] "" +"\n" +" %(c)s бесплатные чтения, которыми Вы " +"вправе пользоваться \n" +" " +msgstr[2] "" +"\n" +" %(c)s бесплатных чтений, которыми Вы " +"вправе пользоваться \n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "Добро пожаловать" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "" + +#: templates/superbase.html:74 templates/user.html:14 +#, fuzzy +msgid "Social accounts" +msgstr "или присоединитесь к пользователям" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "Создать полку" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "Администрация" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "Выход" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "Поиск" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "Языковые версии" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" +"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" +"\t\t\t\tHosting: ICM.\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tWolne Lektury - это проект под управлением Фонда Молодой Польши .\n" +"\t\t\t\t Цифровые копии создаются " +"Народная Библиотека , Силезская " +"Библиотека and Эльблонгская Библиотека, основанные на ресурсах TNL. \n" +"\t\t\t\tHosting EO Networks.\n" +"\t\t\t\t" + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tФонд Молодой Польши, 00-514 Варшава, ul. Marszałkowska 84/92 lok. " +"125, tel/fax: (22) 621-30-17\n" +" e-mail: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "Закройте" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "Погрузка" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Сайт администрации" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "Перевод" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "продвинутый" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "упрощенный" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "Импорт книги" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +#, fuzzy +msgid "Sign in using:" +msgstr "Вход" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "или зарегистрироваться" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgstr[0] "" +"\n" +"У нас %(c)s произведение опубликованное на Wolne Lektury\n" +"Помогите нам распространить библиотеку и поместить новые бесплатные чтения\n" +"при помощи денежного пожертвования\n" +"или перевода 1% вашего подоходного налога.\n" +msgstr[1] "" +"\n" +"У нас %(c)s произведения опубликованные на Wolne Lektury\n" +"Помогите нам распространить библиотеку и поместить новые бесплатные чтения\n" +"при помощи денежного пожертвования\n" +"или перевода 1% вашего подоходного налога.\n" +msgstr[2] "" +"\n" +"У нас %(c)s произведений опубликованных на Wolne Lektury\n" +"Помогите нам распространить библиотеку и поместить новые бесплатные чтения\n" +"при помощи денежного пожертвования\n" +"или перевода 1% вашего подоходного налога.\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" +"Станьте редактором Wolne Lektury! Узанйте работаем ли\n" +"мы сейчас над чтением, которoе вы ищите и сами подготовьте\n" +"публикацию, входя в платформу редактировки." + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "Подробнее..." + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "" + +#: templates/openid/login.html:27 +#, fuzzy +msgid "Sign In" +msgstr "Вход" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "предыдущая" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "следующая" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "Авторизация доступа к Wolne Lektury" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user %(user)s." +msgstr "" +"Подтверждение для авторизации доступа к Wolne Lektury как пользователь " +"%(user)s ." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: templates/socialaccount/connections.html:36 +#, fuzzy +msgid "Remove" +msgstr "убрать" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "" + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" + +#~ msgid "Listing of all audiobooks" +#~ msgstr "Список работ" + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "Последние MP3 аудиокниги" + +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "Последние Ogg Vorbis аудиокниги" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "Аудиотека школьных чтений Фонда Nowoczesna Polska.\n" +#~ ". Можете использовать ее бесплатно и без ограничений. \n" +#~ "Аудиокниги записывают известные актеры, в том числе Данута Стенка и Ян " +#~ "Пешек." + +#~ msgid "See also" +#~ msgstr "Подробнее" + +#~ msgid "Theme" +#~ msgstr "Мотив" + +#~ msgid "in work " +#~ msgstr "в труде" + +#~ msgid "This work is licensed under:" +#~ msgstr "Разрешение на работу со стороны" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " Creative Commons Attribution-ShareAlike 3.0\n" +#~ " license." +#~ msgstr "" +#~ "Этот труд не защищен авторским правом и является частью \n" +#~ "         общественного домена, что обозначает, нем можно свободно " +#~ "спользоваться, публиковать и \n" +#~ "         распространять. Если есть какие-либо дополнительные материалы, " +#~ "защищенные авторскими правами \n" +#~ "         предоставленные с этой работой (например, аннотации, мотивы и т." +#~ "д.), эти \n" +#~ "         материалы доступны по лицензией \n" +#~ "         " +#~ "Creative Commons Attribution-ShareAlike 3.0 " + +#~ msgid "Text prepared based on:" +#~ msgstr "Текст подготовлен на основе:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Под редакцией и с комментариями:" + +#~ msgid "Listing of all works" +#~ msgstr "Список работ" + +#~ msgid "Table of Content" +#~ msgstr "Оглавление" + +#~ msgid "↑ top ↑" +#~ msgstr "↑ топ ↑" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Поставьте книгу на полку!" + +#~ msgid "Create new shelf" +#~ msgstr "Создать новую полку" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "У вас нет никаких полок. Если вы хотите, вы можете создать одну ниже." + +#~ msgid "Put on the shelf!" +#~ msgstr "Поставьте на полку!" + +#~ msgid "Epoch" +#~ msgstr "эпоха" + +#~ msgid "Kind" +#~ msgstr "форма" + +#~ msgid "Genre" +#~ msgstr "жанр" + +#~ msgid "Read online" +#~ msgstr "Читать онлайн" + +#~ msgid "Download" +#~ msgstr "Скачать" + +#~ msgid "to print" +#~ msgstr "печатать" + +#~ msgid "for an e-book reader" +#~ msgstr "для читателя электронной книги" + +#~ msgid "for Kindle" +#~ msgstr "для Киндле" + +#~ msgid "for advanced usage" +#~ msgstr "продвинутое использование" + +#~ msgid "Listen" +#~ msgstr "Послушайте" + +#~ msgid "Table of contents" +#~ msgstr "Оглавление" + +#~ msgid "Themes" +#~ msgstr "Мотивы" + +#~ msgid "Edit. note" +#~ msgstr "Изменить примечание" + +#~ msgid "Infobox" +#~ msgstr "Инфобокс" + +#~ msgid "Book's page" +#~ msgstr "Возратитесь на сайт книги" + +#~ msgid "for a reader" +#~ msgstr "для читателя" + +#, fuzzy +#~ msgid "for advanced usege" +#~ msgstr "продвинутый" + +#~ msgid "Download a custom PDF" +#~ msgstr "Скачать PDF" + +#~ msgid "Motifs and themes" +#~ msgstr "Мотивы и темы" + +#~ msgid "See" +#~ msgstr "Посмотрите" + +#~ msgid "Source" +#~ msgstr "Источник" + +#~ msgid "of the book" +#~ msgstr "данной книги" + +#~ msgid "Source XML file" +#~ msgstr "Исходный файл" + +#~ msgid "Book on" +#~ msgstr "Книга на" + +#~ msgid "Editor's Platform" +#~ msgstr "Платформа редакторов" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "Описание книги на Lektury.Gazeta.pl" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "Описание книги на Wikipedia" + +#~ msgid "Mix this book" +#~ msgstr "данной книги" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "Скачать все книги с этой полки" + +#~ msgid "Catalogue" +#~ msgstr "Каталог" + +#~ msgid "Authors" +#~ msgstr "Авторы" + +#~ msgid "Kinds" +#~ msgstr "Формы" + +#~ msgid "Genres" +#~ msgstr "Жанры" + +#~ msgid "Epochs" +#~ msgstr "Эпохи" + +#~ msgid "Themes and topics" +#~ msgstr "Мотивы и темы" + +#~ msgid "Listing of all DAISY files" +#~ msgstr "Список всех DAISY файлов" + +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "Последние DAISY аудиокниги" + +#~ msgid "" +#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" +#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +#~ "ograniczeń." +#~ msgstr "" +#~ "Система DAISY это известный во всем мире формат записи книг\n" +#~ ", предназначен для людей с плохим зрением, плохо видящих и других лиц\n" +#~ ", имеющих проблемы с чтением. Книгами можно пользоваться бесплатно и без " +#~ "ограничений." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "" +#~ "Критерия являются неоднозначными. Пожалуйста, выберите один из следующих " +#~ "вариантов:" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Полки с фрагментом" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "У вас нет никакой полки. Если вы хотите, вы можете создать одну ниже." + +#~ msgid "Save all shelves" +#~ msgstr "Сохранить все полки" + +#~ msgid "Expand fragment" +#~ msgstr "Растянуть фрагмент" + +#~ msgid "Hide fragment" +#~ msgstr "Скрыть фрагмент" + +#~ msgid "See full category" +#~ msgstr "Вся категория" + +#~ msgid "All books" +#~ msgstr "Все книги" + +#~ msgid "Audiobooks" +#~ msgstr "Аудиокниги" + +#~ msgid "DAISY" +#~ msgstr "Даисы" + +#~ msgid "Work is licensed under " +#~ msgstr "Разрешение на работу со стороны" + +#~ msgid "Based on" +#~ msgstr "Основанный на" + +#~ msgid "Details" +#~ msgstr "Подробнее" + +#~ msgid "Author" +#~ msgstr "Автор" + +#~ msgid "Other resources" +#~ msgstr "другие ресурсы" + +#~ msgid "Source of the image" +#~ msgstr "Источник книги" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "Изображение на платформе редакторов" + +#~ msgid "View XML source" +#~ msgstr "Просмотр XML-источник" + +#~ msgid "Work's themes " +#~ msgstr "Темы труда" + +#~ msgid "Listing of all pictures" +#~ msgstr "Список работ" + +#~ msgid "Download as" +#~ msgstr "Скачать" + +#~ msgid "Artist" +#~ msgstr "Артист" + +#~ msgid "Director" +#~ msgstr "режиссер" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "Аудиокниги были подготовлены в рамках проекта:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "%(cs)s, финансируемого %(fb)s" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "Аудиокниги были подготовлены в рамках %(cs)s проектa, финансируемого %(fb)" +#~ "s." + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "Аудиокниги были подготовлены в рамках %(cs)s проектa." + +#~ msgid "Did you mean" +#~ msgstr "Вы имели в виду" + +#~ msgid "Results by authors" +#~ msgstr "Результаты по авторам" + +#~ msgid "Results by title" +#~ msgstr "Результаты по заглавиям" + +#~ msgid "Results in text" +#~ msgstr "Результаты в текстах" + +#~ msgid "Other results" +#~ msgstr "другие ресурсы" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "Извините! Критерий поиска не соответствует никаким ресурсам." + +#~ msgid "" +#~ "Search engine supports following criteria: title, author, theme/topic, " +#~ "epoch, kind and genre.\n" +#~ "\t\tAs for now we do not support full text search." +#~ msgstr "" +#~ "Искать поддержку двигателя используя критерии: заглавие, автор, тема/" +#~ "сюжет, эпоха, форма и жанр.\n" +#~ "\t\tПока мы не поддерживаем поиска всего текста." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "" +#~ "Извините! У искаемого вопроса должны быть по крайней мере два свойства." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "на Lektury.Gazeta.pl" + +#~ msgid "in Wikipedia" +#~ msgstr "в Википедии" + +#~ msgid "Your shelves with books" +#~ msgstr "Ваши книжные полки" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "У вас нет никаких полок. Если хотите, вы можете создать одну ниже." + +#~ msgid "Create shelf" +#~ msgstr "Создать полку" + +#~ msgid "author" +#~ msgstr "автор" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "Хендауты для учителей" + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "Читать очерк произведения данного автора на Lektury.Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "Прочитайте статью об авторе в Википедии" + +#~ msgid "This author's works are copyrighted." +#~ msgstr "На работы этого автора распространяется авторское право." + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "Узнайте, почему интернет-библиотеки не могут издать работ " +#~ "этого автора." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "Работы данного автора находятся в публичной области и скоро будут изданы " +#~ "в школьной библиотеке Интернета." + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "Труды данного автора будут частью публичной области и возможным будет их " +#~ "издание без ограничений на" + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "Этот труд находится в публичной области. Мы скоро поместим его в школьной " +#~ "библиотеке Wolne Lektury." + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "Этот труд будет частью публичной сферы. Его издание будет разрешено без " +#~ "ограничений" + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this work." +#~ msgstr "" +#~ "Узнайте, почему интернет-библиотеки не могут издать этого " +#~ "труда." + +#~ msgid "This work is copyrighted." +#~ msgstr "На эту работу распространяется авторское право." + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "Войти на WolneLektury.pl" + +#~ msgid "Login" +#~ msgstr "Войти" + +#~ msgid "" +#~ "Internet Explorer cannot display this site properly. Click here to read " +#~ "more..." +#~ msgstr "" +#~ "Internet Explorer не может хорошо показать сайта. Щелкните здесь, чтобы " +#~ "прочитать больше..." + +#~ msgid "Your shelves" +#~ msgstr "Ваши полки" + +#~ msgid "Register on" +#~ msgstr "Регистрация на" + +#~ msgid "or" +#~ msgstr "или" + +#~ msgid "return to main page" +#~ msgstr "возврат на главную страницу" + +#, fuzzy +#~ msgid "Listing of all audiobooks on WolneLektury.pl" +#~ msgstr "Список работ на WolneLektury.pl" + +#~ msgid "Put a book" +#~ msgstr "Поставьте книгу" + +#~ msgid "on the shelf!" +#~ msgstr "на полку" + +#~ msgid "and printing using" +#~ msgstr "и для печатки" + +#~ msgid "Download EPUB" +#~ msgstr "Скачать EPUB" + +#~ msgid "Download TXT" +#~ msgstr "Скачать TXT" + +#~ msgid "on small displays, for example mobile phones" +#~ msgstr "на маленьких дисплеях, напр. мобильных телефонов" + +#~ msgid "Download ODT" +#~ msgstr "Скачать ODT" + +#~ msgid "and editing using" +#~ msgstr "и для редактирования" + +#~ msgid "Book on project's wiki" +#~ msgstr "Книга по проекту вики" + +#~ msgid "on" +#~ msgstr "на" + +#~ msgid "See description" +#~ msgstr "Посмотрите описание" + +#~ msgid "Listing of all works on WolneLektury.pl" +#~ msgstr "Список работ на WolneLektury.pl" + +#~ msgid "Jump to" +#~ msgstr "Перейдите на" + +#~ msgid "Categories" +#~ msgstr "Категории" + +#, fuzzy +#~ msgid "Listing of all DAISY files on WolneLektury.pl" +#~ msgstr "Список работ на WolneLektury.pl" + +#~ msgid "Show full category" +#~ msgstr "Показать всю категорию" + +#~ msgid "Hide" +#~ msgstr "Скрыть" + +#~ msgid "Browse books by categories" +#~ msgstr "Просматривать книги по категориям" + +#~ msgid "delete" +#~ msgstr "удалить" + +#~ msgid "" +#~ "Create your own book set. You can share it with friends by sending them " +#~ "link to your shelf." +#~ msgstr "" +#~ "Создать собственный набор книг. Вы можете делиться ими со своими " +#~ "друзьями, посылая ссылку на свою полку." + +#~ msgid "You need to " +#~ msgstr "Вам необходимо" + +#~ msgid "sign in" +#~ msgstr "Войти в систему," + +#~ msgid "to manage your shelves." +#~ msgstr "чтобы управлять своими полками" + +#~ msgid "" +#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." +#~ msgstr "" +#~ "Конспекты уроков и другие идеи использования Wolnelektury.pl учителями." + +#~ msgid "" +#~ "are professional recordings of literary texts from our repository, " +#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " +#~ "DAISY system." +#~ msgstr "" +#~ "- это профессиональные записи литературных текстов из нашего хранилища. " +#~ "Они доступны по бесплатному разрешению ? в форматах MP3 и Ogg Vorbis, а " +#~ "также в системе DAISY." + +#~ msgid "Themes groups" +#~ msgstr "Тематические группы" + +#~ msgid "See our blog" +#~ msgstr "Посмотрите наш блог" + +#~ msgid "You can help us!" +#~ msgstr "Вы можете нам помочь!" + +#~ msgid "" +#~ "We try our best to elaborate works appended to our library. It is " +#~ "possible only due to support of our volunteers." +#~ msgstr "" +#~ "Мы стремимся тщательно разрабатывать труды, прибавляемые в нашу " +#~ "библиотеку. Это является возможным только благодаря помощи наших " +#~ "волонтеров." + +#~ msgid "" +#~ "We invite people who want to take part in developing Internet school " +#~ "library Wolne Lektury." +#~ msgstr "" +#~ "Мы приглашаем людей, которые хотят принять участие в развитии школьной " +#~ "библиотеки Интернета Wolne Lektury." + +#~ msgid "About us" +#~ msgstr "О нас" + +#~ msgid "" +#~ "\n" +#~ "\t\t\tInternet library with school readings “Wolne Lektury” (www.wolnelektury.pl) is a project made by " +#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " +#~ "which are recommended by Ministry of National Education and are in public " +#~ "domain.\n" +#~ "\t\t\t" +#~ msgstr "" +#~ "\n" +#~ "\t\t\tИнтернет-библиотека со школьными чтениями “Wolne Lektury” (www.wolnelektury.pl) является проектом, " +#~ "созданным фондом Современной Польши. Действуя с 2007 г., библиотека " +#~ "делает доступными школьные чтения публичного домена, предлагаемые " +#~ "министром народного образования. \n" +#~ "\t\t\t" + +#~ msgid "Searching in" +#~ msgstr "Искать в" + +#~ msgid "More than one result matching the criteria found." +#~ msgstr "Больше чем один критерий соответствует найденным критериям." + +#~ msgid "Search in WolneLektury.pl" +#~ msgstr "Искать в WolneLektury.pl" + +#~ msgid "Your shelf is empty" +#~ msgstr "У тебя пустая полка" + +#~ msgid "" +#~ "You can put a book on a shelf by entering page of the reading and " +#~ "clicking 'Put on the shelf'." +#~ msgstr "" +#~ "Вы можете поставить книгу на полку, заходя на сайт произведения или " +#~ "щелкнув 'Поставить на полку'." + +#~ msgid "Choose books' formats which you want to download:" +#~ msgstr "Выбрать формат книг, которые вы хотите скачать:" + +#~ msgid "for listening" +#~ msgstr "для слушания" + +#~ msgid "on favourite MP3 player" +#~ msgstr "на любимом MP3-плейере" + +#~ msgid "Xiph.org Foundation" +#~ msgstr "Фонд Xiph.org" + +#~ msgid "Updating list of books' formats on the shelf" +#~ msgstr "Обновить список форматов книг на полке" + +#~ msgid "cancel" +#~ msgstr "Отменить" + +#~ msgid "Share this shelf" +#~ msgstr "Делить эту полку" + +#~ msgid "" +#~ "Copy this link and share it with other people to let them see your shelf." +#~ msgstr "" +#~ "Копировать эту ссылку и делить с другими пользователями, чтобы они могли " +#~ "увидеть вашу полку." + +#, fuzzy +#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Читать очерк произведения данного автора на Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Читать очерк произведения данного автора на Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Читать очерк произведения данного автора на Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read related study on Lektury.Gazeta.pl" +#~ msgstr "Читать очерк произведения данного автора на Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" +#~ msgstr "Прочитайте статью об авторе в Википедии" + +#, fuzzy +#~ msgid "Read article about kind %(last_tag)s on Wikipedia" +#~ msgstr "Прочитайте статью об авторе в Википедии" + +#, fuzzy +#~ msgid "Read article about genre %(last_tag)s on Wikipedia" +#~ msgstr "Прочитайте статью об авторе в Википедии" + +#, fuzzy +#~ msgid "Read related article on Wikipedia" +#~ msgstr "Прочитайте статью об авторе в Википедии" + +#~ msgid "Delete" +#~ msgstr "Удалить" + +#~ msgid "return to the main page" +#~ msgstr "возвратитесь на главную страницу" + +#~ msgid "return to list of materials" +#~ msgstr "возвратитесь к списку материалов" + +#~ msgid "Hand-outs for teachers on " +#~ msgstr "хендауты для учителей на" + +#, fuzzy +#~ msgid "" +#~ "Download TXT - for reading on small displays, for example mobile phones" +#~ msgstr "на маленьких дисплеях, напр. мобильных телефонов" + +#~ msgid "Download MP3" +#~ msgstr "скачать MP3" + +#~ msgid "Download Ogg Vorbis" +#~ msgstr "Скачать Ogg Vorbis" + +#~ msgid "Download DAISY" +#~ msgstr "Скачать DAISY" + +#~ msgid "check list of books" +#~ msgstr "проверить список книг" + +#~ msgid "in our repository" +#~ msgstr "в нашем хранилище" + +#~ msgid "Polish" +#~ msgstr "польский" + +#~ msgid "German" +#~ msgstr "немецкий" + +#~ msgid "English" +#~ msgstr "английский" + +#~ msgid "Lithuanian" +#~ msgstr "литовский" + +#~ msgid "French" +#~ msgstr "французский" + +#~ msgid "Russian" +#~ msgstr "русский" + +#~ msgid "Spanish" +#~ msgstr "испанский" + +#~ msgid "Ukrainian" +#~ msgstr "украинский" + +#~ msgid "Choose your interface language: " +#~ msgstr "Выберите язык интерфейса" + +#~ msgid "Choose language" +#~ msgstr "Выберите язык" + +#~ msgid "Hide description" +#~ msgstr "Скрыть описание" + +#~ msgid "Read study of epoch" +#~ msgstr "Прочитайте очерк эпохи" + +#~ msgid "Read article about epoch" +#~ msgstr "Прочитайте статью об эпохе" diff --git a/src/wolnelektury/locale/uk/LC_MESSAGES/django.mo b/src/wolnelektury/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..a49a72656 Binary files /dev/null and b/src/wolnelektury/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/uk/LC_MESSAGES/django.po b/src/wolnelektury/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..e6f50aaff --- /dev/null +++ b/src/wolnelektury/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,1092 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \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" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Увійти" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "Ви вже увійшли як користувач %(user)s" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "Зареєструватися" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "Щоб продовжити, увійдіть в свій акаунт." + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Сторінка не існує" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "Сторінку не знайдено" + +#: templates/404.html:14 +msgid "" +"We are sorry, but this page does not exist. Please check if you entered " +"correct address or go to " +msgstr "" +"На жаль, ця сторінка не існує. Будь ласка, перевірте правильність адреси або " +"перейдіть на" + +#: templates/404.html:14 +msgid "main page" +msgstr "головна сторінка" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "Помилка сервера" + +#: templates/500.html:19 +msgid "" +"

                            The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"blog.

                            Inform our administrators about the " +"error.

                            " +msgstr "" +"

                            Сторінка Wolnelektury.pl тимчасово недоступна. В міжчасі, увійдіть на наш " +"блог.

                            Повідомте наших адміністраторів про " +"помилку.

                            " + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "Послуга недоступна" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "" +"У зв'язку з технічними роботами сервіс Wolnelektury.pl тимчасово недоступний." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "Електронна бібліотека WolneLektury.pl" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "Що нового?" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "останні публікації" + +#: templates/main_page.html:41 +msgid "News" +msgstr "Новості" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "утиліти" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "Повідомити про помилку або надіслати свої пропозиції" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "Завантажити каталог у форматі PDF." + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "Віджет" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "Не знайшли книжки?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "План публікації" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "інформація" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "Використано графіку:" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" %(c)s free reading you have right to\n" +" " +msgid_plural "" +"\n" +" %(c)s free readings you have right to\n" +" " +msgstr[0] "" +"\n" +" %(c)s безкоштовний текст, до якого " +"маєш право\n" +" " +msgstr[1] "" +"\n" +" %(c)s безкоштовні тексти, до яких " +"маєш право\n" +" " +msgstr[2] "" +"\n" +" %(c)s безкоштовні тексти, до яких " +"маєш право\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "Ласкаво просимо" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "Пароль" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "Електронна адреса" + +#: templates/superbase.html:74 templates/user.html:14 +msgid "Social accounts" +msgstr "Облікові записи в соціальних мережах" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "Моя полиця" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "Адміністрація" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "Вийти " + +#: templates/superbase.html:111 +msgid "Search" +msgstr "Пошук" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "Мовні версії" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" +"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" +"\t\t\t\tHosting: ICM.\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tWolne Lektury це проект Фонду Сучасна Польща (Fundacja Nowoczesna Polska).\n" +"\t\t\t\tЦифрові репродукції виконані Національною Бібліотекою, Сілезькою бібліотекою та Ельблонзькою бібліотекою, на основі їх засобів.\n" +"\t\t\t\tХостинг: ICM.\n" +"\t\t\t\t" + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tFundacja Nowoczesna Polska (Фонд Сучасна Польща), 00-514 Warszawa, " +"ul. Marszałkowska 84/92 lok. 125, тел/факс: (22) 621-30-17\n" +" eлектронна пошта: fundacja@nowoczesnapolska.org.pl\n" +"\t\t\t\t" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "Закрити" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "Завантажується" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "Користувач" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Адміністрація сайту" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "Переклади" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "розширений" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "спрощений" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "Імпортувати книжку" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "Забули пароль?" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +msgid "Sign in using:" +msgstr "Увійти за допомогою:" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "або зареєструватися" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"making a donation\n" +"or transferring 1% of your income tax.\n" +msgstr[0] "" +"\n" +"На сайті Wolne Lektury опубліковано вже %(c)s твір!\n" +"Допоможіть нам розвивати бібліотеку і надавати доступ до нових творів - \n" +"перекажіть нам " +"благодійний внесок\n" +"або 1% вашого податку на прибуток..\n" +msgstr[1] "" +"\n" +"На сайті Wolne Lektury опубліковано вже %(c)s творів!\n" +"Допоможіть нам розвивати бібліотеку і надавати доступ до нових творів - \n" +"перекажіть нам " +"благодійний внесок\n" +"або 1% вашого податку на прибуток..\n" +msgstr[2] "" +"\n" +"На сайті Wolne Lektury опубліковано вже %(c)s твір!\n" +"Допоможіть нам розвивати бібліотеку і надавати доступ до нових творів - \n" +"перекажіть нам " +"благодійний внесок\n" +"або 1% вашого податку на прибуток..\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" +"Стань редактором Wolne Lektury! Дізнайся чи\n" +"ми вже працюємо над текстом, якого шукаєш та сам підготуй\n" +"публікацію, реєструючись на Редакторській платформі." + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "Більше..." + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "Увійти за допомогою OpenID" + +#: templates/openid/login.html:27 +msgid "Sign In" +msgstr "Увійти" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "попередня" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "наступна" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "Авторизувати доступ до Wolne Lektury" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user %(user)s." +msgstr "" +"Підтвердити, щоб авторизувати доступ до Wolne Lektury від імені користувача " +"%(user)s." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Пов'язані акаунти" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"Можете увійти у Ваш акаунт за допомогою інших облікових записів таких, як:" + +#: templates/socialaccount/connections.html:36 +msgid "Remove" +msgstr "Видалити" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "У Вас немає зараз жодних облікових записів пов'язаних з цим акаунтом." + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "Додати інший обліковий запис " + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "Реєстрацію скасовано" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to sign in." +msgstr "" +"Реєстрацію на сайті за допомогою існуючого облікового запису було скасовано. " +"Якщо це помилка, перейдіть до сторінки реєстрації." + +#~ msgid "Listing of all audiobooks" +#~ msgstr "Список усіх аудіокниг" + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "Останні аудіокниги MP3" + +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "Останні аудіокниги Ogg Vorbis" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n" +#~ "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "Аудіотека шкільної літератури Фонду Сучасна Польща (Fundacja Nowoczesna " +#~ "Polska).\n" +#~ "Можна нею користуватися безкоштовно і без обмежень.\n" +#~ "Аудіокниги зачитують відомі актори, серед яких Данута Стенка та Ян Пешек." + +#~ msgid "See also" +#~ msgstr "Дивитись також" + +#~ msgid "Theme" +#~ msgstr "Тема" + +#~ msgid "in work " +#~ msgstr "у творі" + +#~ msgid "This work is licensed under:" +#~ msgstr "Цей твір доступний на умовах ліцензії:" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " Creative Commons Attribution-ShareAlike 3.0\n" +#~ " license." +#~ msgstr "" +#~ "Цей твір не охороняється авторським правом і є частиною\n" +#~ " суспільного надбання, тому його можна використовувати без " +#~ "обмежень, публікувати, та\n" +#~ " розповсюджувати. Якщо твір містить додаткові матеріали, котрі " +#~ "охороняються авторським правом\n" +#~ " (наприклад примітки, мотиви, тощо), доступ до цих\n" +#~ " додаткових матеріалів надається на умовах ліцензії \n" +#~ " Creative Commons Із зазначенням імені автора – На тих же умовах 3.0\n" +#~ " ." + +#~ msgid "Text prepared based on:" +#~ msgstr "Текст підготовлено на основі:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Редагування та примітки:" + +#~ msgid "Listing of all works" +#~ msgstr "Список усіх творів" + +#~ msgid "Table of Content" +#~ msgstr "Зміст" + +#~ msgid "↑ top ↑" +#~ msgstr "↑ вгору ↑" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Покласти книжку на полицю!" + +#~ msgid "Create new shelf" +#~ msgstr "Створити нову полицю" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "В вас немає жодних полиць. Нижче ви можете створити полицю, якщо бажаєте." + +#~ msgid "Put on the shelf!" +#~ msgstr "Покласти на полицю!" + +#~ msgid "Epoch" +#~ msgstr "Епоха" + +#~ msgid "Kind" +#~ msgstr "Рід" + +#~ msgid "Genre" +#~ msgstr "Жанр" + +#~ msgid "Read online" +#~ msgstr "Читати онлайн" + +#~ msgid "Download" +#~ msgstr "Завантажити" + +#~ msgid "to print" +#~ msgstr "друкувати" + +#~ msgid "for an e-book reader" +#~ msgstr "для інтернетного читача" + +#~ msgid "for Kindle" +#~ msgstr "для Kindle" + +#~ msgid "for advanced usage" +#~ msgstr "для досвіченого користувача" + +#~ msgid "Listen" +#~ msgstr "Слухати" + +#~ msgid "Table of contents" +#~ msgstr "Зміст" + +#~ msgid "Themes" +#~ msgstr "Теми" + +#~ msgid "Edit. note" +#~ msgstr "Коментар редактора" + +#~ msgid "Infobox" +#~ msgstr "Інфобокс" + +#~ msgid "Book's page" +#~ msgstr "Сторінка книжки" + +#~ msgid "for a reader" +#~ msgstr "для читача" + +#, fuzzy +#~ msgid "for advanced usege" +#~ msgstr "розширений" + +#~ msgid "Download a custom PDF" +#~ msgstr "Завантажити PDF" + +#~ msgid "Motifs and themes" +#~ msgstr "Мотиви та теми" + +#~ msgid "See" +#~ msgstr "Дивитись" + +#~ msgid "Source" +#~ msgstr "Джерело" + +#~ msgid "of the book" +#~ msgstr "книжки" + +#~ msgid "Source XML file" +#~ msgstr "Вихідний файл XML" + +#~ msgid "Book on" +#~ msgstr "Книжка на" + +#~ msgid "Editor's Platform" +#~ msgstr "Редакторська платформа" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "Опис книжки на Lektury.Gazeta.pl" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "Опис книжки у Вікіпедії" + +#~ msgid "Mix this book" +#~ msgstr "Міксувати цю книжку" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "Завантажити всі аудіокниги для цієї книжки" + +#~ msgid "Catalogue" +#~ msgstr "Каталог" + +#~ msgid "Authors" +#~ msgstr "Автори" + +#~ msgid "Kinds" +#~ msgstr "Роди" + +#~ msgid "Genres" +#~ msgstr "Жанри" + +#~ msgid "Epochs" +#~ msgstr "Епохи" + +#~ msgid "Themes and topics" +#~ msgstr "Теми та мотиви" + +#~ msgid "Listing of all DAISY files" +#~ msgstr "Список усіх файлів DAISY" + +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "Останні аудіокниги DAISY" + +#~ msgid "" +#~ "System DAISY to uznany na całym świecie format udostępniania książek\n" +#~ "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n" +#~ "mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez " +#~ "ograniczeń." +#~ msgstr "" +#~ "Система DAISY це визнаний у всьому світі формат надавання доступу до " +#~ "книжок,\n" +#~ "котрий відповідає потребам осіб слабозорих, сліпих, а також інших осіб,\n" +#~ "які мають труднощі з читанням. Можете ними користуватися безкоштовно і " +#~ "без обмежень." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "Вибрані критерії неоднозначні. Виберіть один з наступних варіантів:" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Полиці, які містять фрагмент" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "У вас немає жодних полиць. Нижче ви можете створити полицю, якщо бажаєте." + +#~ msgid "Save all shelves" +#~ msgstr "Зберегти всі полиці" + +#~ msgid "Expand fragment" +#~ msgstr "Показати фрагмент" + +#~ msgid "Hide fragment" +#~ msgstr "Сховати фрагмент" + +#~ msgid "See full category" +#~ msgstr "Дивитись всю категорію" + +#~ msgid "All books" +#~ msgstr "Всі книжки" + +#~ msgid "Audiobooks" +#~ msgstr "Аудіокниги" + +#~ msgid "DAISY" +#~ msgstr "DAISY" + +#~ msgid "Work is licensed under " +#~ msgstr "Твір на умовах ліцензії" + +#~ msgid "Based on" +#~ msgstr "На основі" + +#~ msgid "Details" +#~ msgstr "Подробиці" + +#~ msgid "Author" +#~ msgstr "Автор" + +#~ msgid "Other resources" +#~ msgstr "Інші засоби" + +#~ msgid "Source of the image" +#~ msgstr "Джерело графіки" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "Графіка на Редакторській платформі" + +#~ msgid "View XML source" +#~ msgstr "Дивитись вихідний XML" + +#~ msgid "Work's themes " +#~ msgstr "Теми твору" + +#~ msgid "Listing of all pictures" +#~ msgstr "Список всіх графік" + +#~ msgid "Download as" +#~ msgstr "Завантажити як" + +#~ msgid "Artist" +#~ msgstr "Митець" + +#~ msgid "Director" +#~ msgstr "Режисер" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "Аудіокниги виготовлено в рамах проектів:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "%(cs)s, фінансованого з коштів %(fb)s" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "Аудіокниги виготовлено в рамах проекту %(cs)s, фінансованого з коштів " +#~ "%(fb)s." + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "Аудіокниги виготовлено в рамах проекту %(cs)s." + +#~ msgid "Did you mean" +#~ msgstr "Чи йдеться про" + +#~ msgid "Results by authors" +#~ msgstr "Результати за автором" + +#~ msgid "Results by title" +#~ msgstr "Результати за заголовком" + +#~ msgid "Results in text" +#~ msgstr "Результати в тексті" + +#~ msgid "Other results" +#~ msgstr "Інші результати" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "На жаль, критеріям пошуку не відповідає жоден результат." + +#~ msgid "" +#~ "Search engine supports following criteria: title, author, theme/topic, " +#~ "epoch, kind and genre.\n" +#~ "\t\tAs for now we do not support full text search." +#~ msgstr "" +#~ "В пошуковій системі можливий пошук за критеріями: автор, тема/мотив, " +#~ "епоха, рід та жанр.\n" +#~ "\t\tПоки що неможливий пошук в цілому тексті." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "На жаль, для пошуку потрібно ввести щонайменше два знаки." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "на Lektury.Gazeta.pl" + +#~ msgid "in Wikipedia" +#~ msgstr "у Вікіпедії" + +#~ msgid "Your shelves with books" +#~ msgstr "Ваші полиці з книжками" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "У вас немає жодних полиць. Нижче ви можете створити полицю, якщо бажаєте" + +#~ msgid "Create shelf" +#~ msgstr "Створити полицю" + +#~ msgid "author" +#~ msgstr "автор" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "Матеріали для вчителів" + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "Прочитати обговорення цього автора на Lektury.Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "Прочитати статтю про цього автора у Вікіпедії" + +#~ msgid "This author's works are copyrighted." +#~ msgstr "Твори цього автора охороняються авторським правом." + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "Дізнатися чому електронні бібліотеки не можуть " +#~ "опублікувати творів цього автора." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "Твори цього автора є частиною суспільного надбання і незабаром будуть " +#~ "опубліковані на Wolne Lektury." + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "Твори цього автора стануть частиною суспільного надбання і можна буде їх " +#~ "публікувати без обмежень в" + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "Цей твір є частиною суспільного надбання і незабаром буде опублікований " +#~ "на Wolne Lektury" + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "Цей твір стане частиною суспільного надбання і можна буде його " +#~ "публікувати без обмежень у" + +#~ msgid "" +#~ "Find " +#~ "out why Internet libraries can't publish this work." +#~ msgstr "" +#~ "Дізнатися, чому електронні бібліотеки не можуть " +#~ "опублікувати цього твору" + +#~ msgid "This work is copyrighted." +#~ msgstr "Цей твір охороняється авторським правом" + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "Увійти у WolneLektury.pl" + +#~ msgid "Login" +#~ msgstr "Увійти" + +#~ msgid "" +#~ "Internet Explorer cannot display this site properly. Click here to read " +#~ "more..." +#~ msgstr "" +#~ "Інтернет Експолорер не може правильно відобразити цієї сторінки. " +#~ "Натисніть, щоб дізнатися більше..." + +#~ msgid "Your shelves" +#~ msgstr "Ваші полиці" + +#~ msgid "Register on" +#~ msgstr "Реєстрація на" + +#~ msgid "or" +#~ msgstr "або" + +#~ msgid "return to main page" +#~ msgstr "повернення на головну сторінку" + +#, fuzzy +#~ msgid "Listing of all audiobooks on WolneLektury.pl" +#~ msgstr "Алфавітний список творів на WolneLektury.pl" + +#~ msgid "Put a book" +#~ msgstr "Покласти книжку" + +#~ msgid "on the shelf!" +#~ msgstr "на полицю!" + +#~ msgid "and printing using" +#~ msgstr "та друку з використанням" + +#~ msgid "Download EPUB" +#~ msgstr "Завантажити EPUB" + +#~ msgid "Download TXT" +#~ msgstr "Завантажити TXT" + +#~ msgid "on small displays, for example mobile phones" +#~ msgstr "на невеликих екранах, на приклад на мобільному телефоні" + +#~ msgid "Download ODT" +#~ msgstr "Завантажити ODT" + +#~ msgid "and editing using" +#~ msgstr "та едиції з використанням" + +#~ msgid "Book on project's wiki" +#~ msgstr "Книжка на вікі проекту" + +#~ msgid "on" +#~ msgstr "на" + +#~ msgid "See description" +#~ msgstr "Дивитись опис" + +#~ msgid "Jump to" +#~ msgstr "Перейти до" + +#~ msgid "Categories" +#~ msgstr "Категорії" + +#, fuzzy +#~ msgid "Listing of all DAISY files on WolneLektury.pl" +#~ msgstr "Алфавітний список творів на WolneLektury.pl" + +#~ msgid "Show full category" +#~ msgstr "Показати всю категорію" + +#~ msgid "Hide" +#~ msgstr "Сховати" + +#~ msgid "Browse books by categories" +#~ msgstr "Переглядати книжки за категоріями" + +#~ msgid "delete" +#~ msgstr "видалити" + +#~ msgid "" +#~ "Create your own book set. You can share it with friends by sending them " +#~ "link to your shelf." +#~ msgstr "" +#~ "Створити свій вибір книжок. Ви можете поділитися ним з друзями висилаючи " +#~ "їм посилання на вашу полицю." + +#~ msgid "You need to " +#~ msgstr "Вам треба" + +#~ msgid "sign in" +#~ msgstr "увійти в акаунт" + +#~ msgid "to manage your shelves." +#~ msgstr "щоб управляти своїми полицями" + +#~ msgid "" +#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." +#~ msgstr "" +#~ "Плани уроків та інші ідеї як користуватися Wolnelektury.pl в навчанні" + +#~ msgid "" +#~ "are professional recordings of literary texts from our repository, " +#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " +#~ "DAISY system." +#~ msgstr "" +#~ "це професійні записи текстів літератури з нашої бази, доступні на вільній " +#~ "ліцензії у форматах MP3 та Ogg Vorbis, а також в системі DAISY." + +#~ msgid "Themes groups" +#~ msgstr "Групи мотивів" + +#~ msgid "See our blog" +#~ msgstr "Дивитись наш блог" + +#~ msgid "You can help us!" +#~ msgstr "Можете нам допомогти!" + +#~ msgid "" +#~ "We try our best to elaborate works appended to our library. It is " +#~ "possible only due to support of our volunteers." +#~ msgstr "" +#~ "Ми намагаємося якомога краще підготувати твори, які додаються до нашої " +#~ "бібліотеки. Це можливо тільки завдяки нашим волонтерам." + +#~ msgid "" +#~ "We invite people who want to take part in developing Internet school " +#~ "library Wolne Lektury." +#~ msgstr "" +#~ "Запрошуємо всіх, хто хоче брати участь у творенні шкільної інтернет-" +#~ "бібліотеки Wolne Lektury." + +#~ msgid "About us" +#~ msgstr "Про нас" + +#~ msgid "" +#~ "\n" +#~ "\t\t\tInternet library with school readings “Wolne Lektury” (www.wolnelektury.pl) is a project made by " +#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " +#~ "which are recommended by Ministry of National Education and are in public " +#~ "domain.\n" +#~ "\t\t\t" +#~ msgstr "" +#~ "\n" +#~ "\t\t\tІнтернет-бібліотека шкільної літератури “Wolne Lektury” (www.wolnelektury.pl) це проект " +#~ "реалізований Фондом Модерна Польща. Проект стартував у 2007 році та надає " +#~ "доступ до літератури, рекомендованої Міністерством національної освіти, " +#~ "яка є частиною суспільного надбання.\n" +#~ "\t\t\t" + +#~ msgid "Searching in" +#~ msgstr "Пошук в" + +#~ msgid "More than one result matching the criteria found." +#~ msgstr "Більше ніж один результат відповідає критеріям." + +#~ msgid "Search in WolneLektury.pl" +#~ msgstr "Пошук в WolneLektury.pl" + +#~ msgid "Your shelf is empty" +#~ msgstr "Ваша полиця порожня" + +#~ msgid "" +#~ "You can put a book on a shelf by entering page of the reading and " +#~ "clicking 'Put on the shelf'." +#~ msgstr "" +#~ "Щоб покласти книжку на полицю, увійдіть на сторінку книжки та натисніть " +#~ "\"Покласти на полицю\"." + +#~ msgid "Choose books' formats which you want to download:" +#~ msgstr "Вибрати формат, в якому хочете завантажити книжку:" + +#~ msgid "for listening" +#~ msgstr "для слухання" + +#~ msgid "on favourite MP3 player" +#~ msgstr "на улюбленому плеєрі MP3" + +#~ msgid "Xiph.org Foundation" +#~ msgstr "Фонд Xiph.org" + +#~ msgid "Updating list of books' formats on the shelf" +#~ msgstr "Оновити список форматів книжок, які на полиці" + +#~ msgid "cancel" +#~ msgstr "відхилити" + +#~ msgid "Share this shelf" +#~ msgstr "Поділитися цією полицею" + +#~ msgid "" +#~ "Copy this link and share it with other people to let them see your shelf." +#~ msgstr "Копіювати це посилання, щоб вислати іншим, та поділитися полицею." + +#, fuzzy +#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Прочитати обговорення цього автора на Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Прочитати обговорення цього автора на Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Прочитати обговорення цього автора на Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read related study on Lektury.Gazeta.pl" +#~ msgstr "Прочитати обговорення цього автора на Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" +#~ msgstr "Прочитати статтю про цього автора на Вікіпедії" + +#, fuzzy +#~ msgid "Read article about kind %(last_tag)s on Wikipedia" +#~ msgstr "Прочитати статтю про цього автора на Вікіпедії" + +#, fuzzy +#~ msgid "Read article about genre %(last_tag)s on Wikipedia" +#~ msgstr "Прочитати статтю про цього автора на Вікіпедії" + +#, fuzzy +#~ msgid "Read related article on Wikipedia" +#~ msgstr "Прочитати статтю про цього автора на Вікіпедії" + +#~ msgid "Delete" +#~ msgstr "Видалити" + +#~ msgid "return to the main page" +#~ msgstr "повернення на головну" + +#~ msgid "return to list of materials" +#~ msgstr "повернення до списку матеріалів" + +#~ msgid "Hand-outs for teachers on " +#~ msgstr "Матеріали для вчителів у" + +#, fuzzy +#~ msgid "" +#~ "Download TXT - for reading on small displays, for example mobile phones" +#~ msgstr "на невеликих екранах, на приклад на мобільному телефоні" + +#~ msgid "Choose your interface language: " +#~ msgstr "Вибрати мову інтерфейсу" + +#~ msgid "Choose language" +#~ msgstr "Вибрати мову" + +#~ msgid "Hide description" +#~ msgstr "Сховати опис" + +#~ msgid "Download MP3" +#~ msgstr "Завантажити MP3" + +#~ msgid "Download Ogg Vorbis" +#~ msgstr "Завантажити Ogg Vorbis" + +#~ msgid "Download DAISY" +#~ msgstr "Завантажити DAISY" + +#~ msgid "Alphabetical listing of works" +#~ msgstr "Алфавітний список творів" + +#~ msgid "check list of books" +#~ msgstr "перевірити список книжок" + +#~ msgid "in our repository" +#~ msgstr "в нашій базі" + +#~ msgid "Read study of epoch" +#~ msgstr "Прочитати обговорення епохи" + +#~ msgid "Read article about epoch" +#~ msgstr "Прочитати статтю про цю епоху" diff --git a/src/wolnelektury/management/__init__.py b/src/wolnelektury/management/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/wolnelektury/management/commands/__init__.py b/src/wolnelektury/management/commands/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/wolnelektury/management/commands/localepack.py b/src/wolnelektury/management/commands/localepack.py new file mode 100644 index 000000000..bd631928c --- /dev/null +++ b/src/wolnelektury/management/commands/localepack.py @@ -0,0 +1,243 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from optparse import make_option +from django.conf import settings +from django.core.management.base import BaseCommand +from django.core.management import call_command +from .translation2po import get_languages + +import os +import shutil +import tempfile +import sys + +import allauth + +ROOT = os.path.dirname(settings.PROJECT_DIR) + + +def is_our_app(mod): + return mod.__path__[0].startswith(ROOT) + + +class Locale(object): + def save(self, output_directory, languages): + pass + + def generate(self, languages): + pass + +def copy_f(frm, to): + "I can create a necessary dest directiories, yey!" + if not os.path.exists(os.path.dirname(to)): + os.makedirs(os.path.dirname(to)) + shutil.copyfile(frm, to) + +class AppLocale(Locale): + def __init__(self, appmod): + self.app = appmod + if not os.path.exists(os.path.join(self.path, 'locale')): + raise LookupError('No locale for app %s' % appmod) + + @property + def path(self): + return self.app.__path__[0] + + @property + def name(self): + return self.app.__name__ + + def save(self, output_directory, languages): + for lc in languages: + lc = lc[0] + if os.path.exists(os.path.join(self.path, 'locale', lc)): + copy_f(os.path.join(self.path, 'locale', lc, 'LC_MESSAGES', 'django.po'), + os.path.join(output_directory, lc, self.name + '.po')) + + + def load(self, input_directory, languages): + for lc in zip(*languages)[0]: + if os.path.exists(os.path.join(input_directory, lc, self.name + '.po')): + out = os.path.join(self.path, 'locale', lc, 'LC_MESSAGES', 'django.po') + if not os.path.exists(os.path.dirname(out)): + os.makedirs(os.path.dirname(out)) + copy_f(os.path.join(input_directory, lc, self.name + '.po'), + out) + + wd = os.getcwd() + os.chdir(self.path) + try: + call_command('compilemessages', settings='wolnelektury.settings') + except: + pass + finally: + os.chdir(wd) + + + def generate(self, languages): + wd = os.getcwd() + os.chdir(self.path) + try: + call_command('makemessages', all=True) + except: + pass + finally: + os.chdir(wd) + + +class ModelTranslation(Locale): + def __init__(self, appname, poname=None): + self.appname = appname + self.poname = poname and poname or appname + + def save(self, output_directory, languages): + call_command('translation2po', self.appname, directory=output_directory, poname=self.poname) + + def load(self, input_directory, languages): + call_command('translation2po', self.appname, directory=input_directory, + load=True, lang=','.join(zip(*languages)[0]), poname=self.poname, keep_running=True) + + +class CustomLocale(Locale): + def __init__(self, app_dir, + config=os.path.join(ROOT, "babel.cfg"), + out_file=os.path.join(ROOT, 'wolnelektury/locale-contrib/django.pot'), + name=None): + self.app_dir = app_dir + self.config = config + self.out_file = out_file + self.name = name + + def generate(self, languages): + os.system('pybabel extract -F "%s" -o "%s" "%s"' % (self.config, self.out_file, self.app_dir)) + os.system('pybabel update -D django -i %s -d %s' % (self.out_file, os.path.dirname(self.out_file))) + + def po_file(self, language): + d = os.path.dirname(self.out_file) + n = os.path.basename(self.out_file).split('.')[0] + return os.path.join(d, language, 'LC_MESSAGES', n + '.po') + + def save(self, output_directory, languages): + for lc in zip(*languages)[0]: + if os.path.exists(self.po_file(lc)): + copy_f(self.po_file(lc), + os.path.join(output_directory, lc, self.name + '.po')) + + def load(self, input_directory, languages): + for lc in zip(*languages)[0]: + copy_f(os.path.join(input_directory, lc, self.name + '.po'), + self.po_file(lc)) + os.system('pybabel compile -D django -d %s' % os.path.dirname(self.out_file)) + + +SOURCES = [] + +for appn in settings.INSTALLED_APPS: + app = __import__(appn) + if is_our_app(app): + try: + SOURCES.append(AppLocale(app)) + except LookupError, e: + print "no locales in %s" % app.__name__ + +SOURCES.append(ModelTranslation('infopages', 'infopages_db')) +SOURCES.append(CustomLocale(os.path.dirname(allauth.__file__), name='contrib')) + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-l', '--load', help='load locales back to source', action='store_true', dest='load', default=False), + make_option('-L', '--lang', help='load just one language', dest='lang', default=None), + make_option('-d', '--directory', help='load from this directory', dest='directory', default=None), + make_option('-o', '--outfile', help='Resulting zip file', dest='outfile', default='./wl-locale.zip'), + make_option('-m', '--merge', help='Use git to merge. Please use with clean working directory.', action='store_true', dest='merge', default=False), + make_option('-M', '--message', help='commit message', dest='message', default='New locale'), + + ) + help = 'Make a locale pack' + args = '' + + def current_rev(self): + return os.popen('git rev-parse HEAD').read() + + def current_branch(self): + return os.popen("git branch |grep '^[*]' | cut -c 3-").read() + + def save(self, options): + packname = options.get('outfile') + packname_b = os.path.basename(packname).split('.')[0] + fmt = '.'.join(os.path.basename(packname).split('.')[1:]) + + if fmt != 'zip': + raise NotImplementedError('Sorry. Only zip format supported at the moment.') + + tmp_dir = tempfile.mkdtemp('-wl-locale') + out_dir = os.path.join(tmp_dir, packname_b) + os.mkdir(out_dir) + + try: + for lang in settings.LANGUAGES: + os.mkdir(os.path.join(out_dir, lang[0])) + + for src in SOURCES: + src.generate(settings.LANGUAGES) + src.save(out_dir, settings.LANGUAGES) + # src.save(settings.LANGUAGES) + + # write out revision + rev = self.current_rev() + rf = open(os.path.join(out_dir, '.revision'), 'w') + rf.write(rev) + rf.close() + + + cwd = os.getcwd() + try: + os.chdir(os.path.dirname(out_dir)) + self.system('zip -r %s %s' % (os.path.join(cwd, packname_b+'.zip'), os.path.basename(out_dir))) + finally: + os.chdir(cwd) + # shutil.make_archive(packname_b, fmt, root_dir=os.path.dirname(out_dir), base_dir=os.path.basename(out_dir)) + finally: + shutil.rmtree(tmp_dir, ignore_errors=True) + + def load(self, options): + langs = get_languages(options['lang']) + + for src in SOURCES: + src.load(options['directory'], langs) + + def handle(self, *a, **options): + if options['load']: + if not options['directory'] or not os.path.exists(options['directory']): + print "Directory not provided or does not exist, please use -d" + sys.exit(1) + + if options['merge']: self.merge_setup(options['directory']) + self.load(options) + if options['merge']: self.merge_finish(options['message']) + else: + self.save(options) + + merge_branch = 'wl-locale-merge' + last_branch = None + + def merge_setup(self, directory): + self.last_branch = self.current_branch() + rev = open(os.path.join(directory, '.revision')).read() + + self.system('git checkout -b %s %s' % (self.merge_branch, rev)) + + def merge_finish(self, message): + self.system('git commit -a -m "%s"' % message.replace('"', '\\"')) + self.system('git checkout %s' % self.last_branch) + self.system('git merge -s recursive -X theirs %s' % self.merge_branch) + self.system('git branch -d %s' % self.merge_branch) + + def system(self, fmt, *args): + code = os.system(fmt % args) + if code != 0: + raise OSError('Command %s returned with exit code %d' % (fmt % args, code)) + return code diff --git a/src/wolnelektury/management/commands/translation2po.py b/src/wolnelektury/management/commands/translation2po.py new file mode 100644 index 000000000..6220006fe --- /dev/null +++ b/src/wolnelektury/management/commands/translation2po.py @@ -0,0 +1,135 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import os +import time +from optparse import make_option +from django.conf import settings +from django.core.management.base import BaseCommand +from django.core.management.color import color_style +from django.db import models + +import polib +import modeltranslation.models +from modeltranslation.translator import translator, NotRegistered + + +def metadata(language=''): + "get metadata for PO, given language code" + t = time.strftime('%Y-%m-%d %H:%M%z') + + return { + 'Project-Id-Version': '1.0', + 'Report-Msgid-Bugs-To': settings.CONTACT_EMAIL, + 'POT-Creation-Date': '%s' % t, + 'PO-Revision-Date': '%s' % t, + 'Last-Translator': 'you ', + 'Language-Team': '%s' % dict(settings.LANGUAGES).get(language, language), + 'MIME-Version': '1.0', + 'Content-Type': 'text/plain; charset=utf-8', + 'Content-Transfer-Encoding': '8bit', + } + + +def make_po(language=''): + "Create new POFile object for language code" + po = polib.POFile() + po.metadata = metadata(language) + return po + + +def get_languages(langs): + if not langs: return settings.LANGUAGES + langs = langs.split(',') + lm = dict(settings.LANGUAGES) + return map(lambda l: (l, lm.get(l, l)), langs) + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-d', '--directory', help='Specify which directory should hold generated PO files', dest='directory', default=''), + make_option('-l', '--load', help='load locales back to source', action='store_true', dest='load', default=False), + make_option('-L', '--language', help='locales to load', dest='lang', default=None), + make_option('-n', '--poname', help='name of the po file [no extension]', dest='poname', default=None), + make_option('-k', '--keep-running', help='keep running even when missing an input file', dest='keep_running', default=False, action='store_true'), + ) + help = 'Export models from app to po files' + args = 'app' + + def get_models(self, app): + for mdname in dir(app.models): + if mdname[0] == '_': continue + md = getattr(app.models, mdname) + try: + assert issubclass(md, models.Model) + except (AssertionError, TypeError): + continue + + try: + opts = translator.get_options_for_model(md) + except NotRegistered: + continue + else: + yield (md, opts) + + def handle(self, appname, **options): + if not options['poname']: options['poname'] = appname + app = __import__(appname) + + if options['load']: + objects = {} + modmod = {} + for md, opts in self.get_models(app): + if not md.__name__ in objects: + objects[md.__name__] = {} + modmod['model'] = md + + languages = get_languages(options['lang']) + + for lng in zip(*languages)[0]: + pofile = os.path.join(options['directory'], lng, options['poname'] + '.po') + if not os.path.exists(pofile): + if options['keep_running']: + continue + else: + raise OSError('%s po file: %s not found' % (appname, pofile)) + po = polib.pofile(pofile) + for entry in po: + loc, _ignored = entry.occurrences[0] + _appname, modelname, fieldname, pk = loc.split('/') + try: + obj = objects[modelname][pk] + except KeyError: + obj = modmod['model'].objects.get(pk=pk) + objects[modelname][pk] = obj + setattr(obj, fieldname, entry.msgstr) + + for mod, objcs in objects.items(): + for o in objcs.values(): + o.save() + + else: + pofiles = {} + for md, opts in self.get_models(app): + for obj in md.objects.all().order_by('pk'): + for fld, locflds in opts.local_fields.items(): + k = getattr(obj, '%s_%s' % (fld, settings.LANGUAGE_CODE)) or '' + for locfld in locflds: + cur_lang = locfld.language + try: + po = pofiles[cur_lang] + except: + po = make_po(cur_lang) + pofiles[cur_lang] = po + v = locfld.value_from_object(obj) or '' + entry = polib.POEntry( + msgid=k, + msgstr=v, + occurrences=[('%s/%s/%s/%s' % (appname, md.__name__, locfld.name, str(obj.pk)), 0)]) + po.append(entry) + + directory = options['directory'] + for lng, po in pofiles.items(): + os.makedirs(os.path.join(directory, lng)) + po.save(os.path.join(directory, lng, '%s.po' % options['poname'])) diff --git a/src/wolnelektury/management/profile.py b/src/wolnelektury/management/profile.py new file mode 100644 index 000000000..90e5ec5f5 --- /dev/null +++ b/src/wolnelektury/management/profile.py @@ -0,0 +1,17 @@ + +import cProfile +import functools +import os + +_object = None + +def profile(meth): + def _wrapper(self, *args, **kwargs): + object = self + setattr(object, "__%s" % meth.__name__, meth) + cProfile.runctx('object.__%s(object, *args, **kwargs)' % (meth.__name__, ), globals(), locals(), + "profile.%d" % os.getpid()) + + functools.update_wrapper(_wrapper, meth) + return _wrapper + diff --git a/src/wolnelektury/middleware.py b/src/wolnelektury/middleware.py new file mode 100644 index 000000000..60b382cd3 --- /dev/null +++ b/src/wolnelektury/middleware.py @@ -0,0 +1,126 @@ +# Orignal version taken from http://www.djangosnippets.org/snippets/186/ +# Original author: udfalkso +# Modified by: Shwagroo Team + +import sys +import os +import re +import hotshot, hotshot.stats +import tempfile +import StringIO +import pprint + +from django.conf import settings +from django.db import connection + + +words_re = re.compile( r'\s+' ) + +group_prefix_re = [ + re.compile( "^.*/django/[^/]+" ), + re.compile( "^(.*)/[^/]+$" ), # extract module path + re.compile( ".*" ), # catch strange entries +] + + +class ProfileMiddleware(object): + """ + Displays hotshot profiling for any view. + http://yoursite.com/yourview/?prof + + Add the "prof" key to query string by appending ?prof (or &prof=) + and you'll see the profiling results in your browser. + It's set up to only be available in django's debug mode, is available for superuser otherwise, + but you really shouldn't add this middleware to any production configuration. + + WARNING: It uses hotshot profiler which is not thread safe. + """ + def process_request(self, request): + if (settings.DEBUG or request.user.is_superuser) and request.GET.has_key('prof'): + connection.queries = [] + self.tmpfile = tempfile.mktemp() + self.prof = hotshot.Profile(self.tmpfile) + + def process_view(self, request, callback, callback_args, callback_kwargs): + if (settings.DEBUG or request.user.is_superuser) and request.GET.has_key('prof'): + return self.prof.runcall(callback, request, *callback_args, **callback_kwargs) + + def get_group(self, file): + for g in group_prefix_re: + name = g.findall( file ) + if name: + return name[0] + + def get_summary(self, results_dict, sum): + list = [ (item[1], item[0]) for item in results_dict.items() ] + list.sort( reverse = True ) + list = list[:40] + + res = " tottime\n" + for item in list: + if sum == 0: + foo = 0 + else: + foo = 100*item[0]/sum + res += "%4.1f%% %7.3f %s\n" % (foo, item[0], item[1] ) + + return res + + def summary_for_files(self, stats_str): + stats_str = stats_str.split("\n")[5:] + + mystats = {} + mygroups = {} + + sum = 0 + + for s in stats_str: + fields = words_re.split(s); + if len(fields) == 7: + time = float(fields[2]) + sum += time + file = fields[6].split(":")[0] + + if not file in mystats: + mystats[file] = 0 + mystats[file] += time + + group = self.get_group(file) + if not group in mygroups: + mygroups[ group ] = 0 + mygroups[ group ] += time + + return "
                            " + \
                            +               " ---- By file ----\n\n" + self.get_summary(mystats,sum) + "\n" + \
                            +               " ---- By group ---\n\n" + self.get_summary(mygroups,sum) + \
                            +               "
                            " + + def process_response(self, request, response): + if (settings.DEBUG or request.user.is_superuser) and request.GET.has_key('prof'): + self.prof.close() + + out = StringIO.StringIO() + old_stdout = sys.stdout + sys.stdout = out + + stats = hotshot.stats.load(self.tmpfile) + stats.sort_stats('time', 'calls') + stats.print_stats() + + sys.stdout = old_stdout + stats_str = out.getvalue() + + if response and response.content and stats_str: + response.content = "
                            " + stats_str + "
                            " + + response.content = "\n".join(response.content.split("\n")[:40]) + + response.content += self.summary_for_files(stats_str) + + os.unlink(self.tmpfile) + + response.content += '\n%d SQL Queries:\n' % len(connection.queries) + response.content += pprint.pformat(connection.queries) + + return response + diff --git a/src/wolnelektury/migrations/__init__.py b/src/wolnelektury/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/wolnelektury/migrations/getpaid/0001_initial.py b/src/wolnelektury/migrations/getpaid/0001_initial.py new file mode 100644 index 000000000..2ab2d3f64 --- /dev/null +++ b/src/wolnelektury/migrations/getpaid/0001_initial.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import getpaid.abstract_mixin + + +class Migration(migrations.Migration): + + dependencies = [ + ('funding', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Payment', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('amount', models.DecimalField(verbose_name='amount', max_digits=20, decimal_places=4)), + ('currency', models.CharField(max_length=3, verbose_name='currency')), + ('status', models.CharField(default=b'new', max_length=20, verbose_name='status', db_index=True, choices=[(b'new', 'new'), (b'in_progress', 'in progress'), (b'partially_paid', 'partially paid'), (b'paid', 'paid'), (b'failed', 'failed')])), + ('backend', models.CharField(max_length=50, verbose_name='backend')), + ('created_on', models.DateTimeField(auto_now_add=True, verbose_name='created on', db_index=True)), + ('paid_on', models.DateTimeField(default=None, null=True, verbose_name='paid on', db_index=True, blank=True)), + ('amount_paid', models.DecimalField(default=0, verbose_name='amount paid', max_digits=20, decimal_places=4)), + ('external_id', models.CharField(max_length=64, null=True, verbose_name='external id', blank=True)), + ('description', models.CharField(max_length=128, null=True, verbose_name='Description', blank=True)), + ('order', models.ForeignKey(related_name=b'payment', to='funding.Funding')), + ], + options={ + 'ordering': ('-created_on',), + 'verbose_name': 'Payment', + 'verbose_name_plural': 'Payments', + }, + bases=(models.Model, getpaid.abstract_mixin.AbstractMixin), + ), + ] diff --git a/src/wolnelektury/migrations/getpaid/0002_auto_20151221_1225.py b/src/wolnelektury/migrations/getpaid/0002_auto_20151221_1225.py new file mode 100644 index 000000000..c1a71771f --- /dev/null +++ b/src/wolnelektury/migrations/getpaid/0002_auto_20151221_1225.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('getpaid', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='payment', + name='description', + field=models.CharField(max_length=128, null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='payment', + name='status', + field=models.CharField(default=b'new', max_length=20, verbose_name='status', db_index=True, choices=[(b'new', 'new'), (b'in_progress', 'in progress'), (b'accepted_for_proc', 'accepted for processing'), (b'partially_paid', 'partially paid'), (b'paid', 'paid'), (b'cancelled', 'cancelled'), (b'failed', 'failed')]), + ), + ] diff --git a/src/wolnelektury/migrations/getpaid/__init__.py b/src/wolnelektury/migrations/getpaid/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/wolnelektury/migrations/piston/0001_initial.py b/src/wolnelektury/migrations/piston/0001_initial.py new file mode 100644 index 000000000..c2939b19a --- /dev/null +++ b/src/wolnelektury/migrations/piston/0001_initial.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Consumer', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=255)), + ('description', models.TextField()), + ('key', models.CharField(max_length=18)), + ('secret', models.CharField(max_length=32)), + ('status', models.CharField(default=b'pending', max_length=16, choices=[(b'pending', b'Pending approval'), (b'accepted', b'Accepted'), (b'canceled', b'Canceled')])), + ('user', models.ForeignKey(related_name='consumers', blank=True, to=settings.AUTH_USER_MODEL, null=True)), + ], + ), + migrations.CreateModel( + name='Nonce', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('token_key', models.CharField(max_length=18)), + ('consumer_key', models.CharField(max_length=18)), + ('key', models.CharField(max_length=255)), + ], + ), + migrations.CreateModel( + name='Resource', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=255)), + ('url', models.TextField(max_length=2047)), + ('is_readonly', models.BooleanField(default=True)), + ], + ), + migrations.CreateModel( + name='Token', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('key', models.CharField(max_length=18)), + ('secret', models.CharField(max_length=32)), + ('token_type', models.IntegerField(choices=[(1, 'Request'), (2, 'Access')])), + ('timestamp', models.IntegerField()), + ('is_approved', models.BooleanField(default=False)), + ('consumer', models.ForeignKey(to='piston.Consumer')), + ('user', models.ForeignKey(related_name='tokens', blank=True, to=settings.AUTH_USER_MODEL, null=True)), + ], + ), + ] diff --git a/src/wolnelektury/migrations/piston/__init__.py b/src/wolnelektury/migrations/piston/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/wolnelektury/settings/__init__.py b/src/wolnelektury/settings/__init__.py new file mode 100644 index 000000000..411202d6a --- /dev/null +++ b/src/wolnelektury/settings/__init__.py @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- +# Django settings for wolnelektury project. +from os import path + +from .basic import * +from .auth import * +from .cache import * +from .celery import * +from .contrib import * +from .custom import * +from .locale import * +from .static import * + + +TEMPLATE_CONTEXT_PROCESSORS = ( + 'django.contrib.auth.context_processors.auth', + 'django.core.context_processors.debug', + 'django.core.context_processors.i18n', + 'django.core.context_processors.media', + 'django.core.context_processors.request', + 'wolnelektury.context_processors.extra_settings', + 'search.context_processors.search_form', +) + +MIDDLEWARE_CLASSES = [ + 'django.middleware.csrf.CsrfViewMiddleware', + 'ssify.middleware.SsiMiddleware', + 'django.middleware.cache.UpdateCacheMiddleware', + 'ssify.middleware.PrepareForCacheMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.admindocs.middleware.XViewMiddleware', + 'pagination.middleware.PaginationMiddleware', + 'ssify.middleware.LocaleMiddleware', + 'maintenancemode.middleware.MaintenanceModeMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'fnpdjango.middleware.SetRemoteAddrFromXRealIP', + 'django.middleware.cache.FetchFromCacheMiddleware', +] + +ROOT_URLCONF = 'wolnelektury.urls' + +# These are the ones we should test. +INSTALLED_APPS_OUR = [ + 'wolnelektury', + # our + 'ajaxable', + 'api', + 'catalogue', + 'chunks', + 'dictionary', + 'infopages', + 'lesmianator', + 'newtagging', + 'opds', + 'pdcounter', + 'reporting', + 'sponsors', + 'stats', + 'suggest', + 'picture', + 'social', + 'waiter', + 'search', + 'oai', + 'funding', + 'polls', + 'libraries', + ] + +GETPAID_BACKENDS = ( + 'getpaid.backends.payu', +) + +INSTALLED_APPS_CONTRIB = [ + # Should be before django.contrib.admin + 'modeltranslation', + + # external + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.sites', + 'django.contrib.admin', + 'django.contrib.admindocs', + 'django.contrib.staticfiles', + 'pagination', + 'pipeline', + 'piston', + 'piwik', + 'sorl.thumbnail', + 'kombu.transport.django', + 'honeypot', + 'fnpdjango', + 'getpaid', + 'getpaid.backends.payu', + 'ssify', + + #allauth stuff + 'uni_form', + 'allauth', + 'allauth.account', + 'allauth.socialaccount', + 'allauth.socialaccount.providers.openid', + 'allauth.socialaccount.providers.facebook', + #'allauth.socialaccount.providers.twitter', + ] + +INSTALLED_APPS = INSTALLED_APPS_OUR + INSTALLED_APPS_CONTRIB + +# Load localsettings, if they exist +try: + from wolnelektury.localsettings import * +except ImportError: + pass diff --git a/src/wolnelektury/settings/auth.py b/src/wolnelektury/settings/auth.py new file mode 100644 index 000000000..4d3ea224a --- /dev/null +++ b/src/wolnelektury/settings/auth.py @@ -0,0 +1,19 @@ +AUTHENTICATION_BACKENDS = [ + 'django.contrib.auth.backends.ModelBackend', + 'allauth.account.auth_backends.AuthenticationBackend', +] +ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2 +LOGIN_URL = '/uzytkownik/login/' + +LOGIN_REDIRECT_URL = '/' + +SOCIALACCOUNT_AUTO_SIGNUP = False +SOCIALACCOUNT_QUERY_EMAIL = True + + +SOCIALACCOUNT_PROVIDERS = \ + { 'openid': + { 'SERVERS': + [dict(id='google', + name='Google', + openid_url='https://www.google.com/accounts/o8/id')]}} diff --git a/src/wolnelektury/settings/basic.py b/src/wolnelektury/settings/basic.py new file mode 100644 index 000000000..30812e516 --- /dev/null +++ b/src/wolnelektury/settings/basic.py @@ -0,0 +1,42 @@ +from os import path +from .paths import PROJECT_DIR + +DEBUG = False +TEMPLATE_DEBUG = DEBUG +MAINTENANCE_MODE = False + +ADMINS = [ + # ('Your Name', 'your_email@domain.com'), +] + +MANAGERS = ADMINS + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. + 'NAME': path.join(PROJECT_DIR, 'dev.db'), # Or path to database file if using sqlite3. + 'USER': '', # Not used with sqlite3. + 'PASSWORD': '', # Not used with sqlite3. + 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. + } +} + +SOLR = "http://localhost:8983/solr/wl/" +SOLR_TEST = "http://localhost:8983/solr/wl_test/" + +# Local time zone for this installation. Choices can be found here: +# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name +# although not all choices may be available on all operating systems. +# If running in a Windows environment this must be set to the same as your +# system time zone. +TIME_ZONE = 'Europe/Warsaw' +USE_TZ = True + +SITE_ID = 1 + +# List of callables that know how to import templates from various sources. +TEMPLATE_LOADERS = [ + 'django.template.loaders.filesystem.Loader', + 'django.template.loaders.app_directories.Loader', +# 'django.template.loaders.eggs.Loader', +] diff --git a/src/wolnelektury/settings/cache.py b/src/wolnelektury/settings/cache.py new file mode 100644 index 000000000..a9cc70f3b --- /dev/null +++ b/src/wolnelektury/settings/cache.py @@ -0,0 +1,18 @@ +CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + 'LOCATION': [ + '127.0.0.1:11211', + ] + }, + 'ssify': { + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + 'TIMEOUT': None, + 'KEY_PREFIX': 'ssify', + 'LOCATION': [ + '127.0.0.1:11211', + ], + }, +} + +CACHE_MIDDLEWARE_SECONDS = 24 * 60 * 60 diff --git a/src/wolnelektury/settings/celery.py b/src/wolnelektury/settings/celery.py new file mode 100644 index 000000000..77abfa658 --- /dev/null +++ b/src/wolnelektury/settings/celery.py @@ -0,0 +1,5 @@ +BROKER_URL = 'django://' + +CELERY_EAGER_PROPAGATES_EXCEPTIONS = True +CELERY_SEND_TASK_ERROR_EMAILS = True +CELERY_ACCEPT_CONTENT = ['pickle'] diff --git a/src/wolnelektury/settings/contrib.py b/src/wolnelektury/settings/contrib.py new file mode 100644 index 000000000..f0e8430a5 --- /dev/null +++ b/src/wolnelektury/settings/contrib.py @@ -0,0 +1,17 @@ +HONEYPOT_FIELD_NAME = 'miut' +PAGINATION_INVALID_PAGE_RAISES_404 = True +THUMBNAIL_QUALITY = 95 + +MODELTRANSLATION_DEFAULT_LANGUAGE = 'pl' +MODELTRANSLATION_PREPOPULATE_LANGUAGE = 'pl' + +MIGRATION_MODULES = { + 'getpaid' : 'wolnelektury.migrations.getpaid', + 'piston' : 'wolnelektury.migrations.piston', +} + +GETPAID_ORDER_DESCRIPTION = "{% load funding_tags %}{{ order|sanitize_payment_title }}" + +PIWIK_URL = '' +PIWIK_SITE_ID = 0 +PIWIK_TOKEN = '' diff --git a/src/wolnelektury/settings/custom.py b/src/wolnelektury/settings/custom.py new file mode 100644 index 000000000..8830ebe6f --- /dev/null +++ b/src/wolnelektury/settings/custom.py @@ -0,0 +1,17 @@ +# limit number of filtering tags +MAX_TAG_LIST = 6 + +NO_SEARCH_INDEX = False +NO_CUSTOM_PDF = True + +CATALOGUE_DEFAULT_LANGUAGE = 'pol' +PUBLISH_PLAN_FEED = 'http://redakcja.wolnelektury.pl/documents/track/editor-proofreading/?published=false' + +# limit rate for ebooks creation +CATALOGUE_CUSTOMPDF_RATE_LIMIT = '1/m' + +# set to 'new' or 'old' to skip time-consuming test +# for TeX morefloats library version +LIBRARIAN_PDF_MOREFLOATS = None + +LATEST_BLOG_POSTS = "http://nowoczesnapolska.org.pl/feed/?cat=-135" diff --git a/src/wolnelektury/settings/locale.py b/src/wolnelektury/settings/locale.py new file mode 100644 index 000000000..5069051f9 --- /dev/null +++ b/src/wolnelektury/settings/locale.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +from os import path +from .paths import PROJECT_DIR + +# If you set this to False, Django will make some optimizations so as not +# to load the internationalization machinery. +USE_I18N = True +USE_L10N = True + +LOCALE_PATHS = [ + path.join(PROJECT_DIR, 'locale-contrib') +] + +# Language code for this installation. All choices can be found here: +# http://www.i18nguy.com/unicode/language-identifiers.html +LANGUAGE_CODE = 'pl' + +gettext = lambda s: s + +LANGUAGES = tuple(sorted([ + ('pl', u'polski'), + ('de', u'Deutsch'), + ('en', u'English'), + ('lt', u'lietuvių'), + ('fr', u'français'), + ('ru', u'русский'), + ('es', u'español'), + ('uk', u'українська'), +# ('jp', u'日本語'), + ('it', u'italiano'), +], key=lambda x: x[0])) diff --git a/src/wolnelektury/settings/paths.py b/src/wolnelektury/settings/paths.py new file mode 100644 index 000000000..dfb99de04 --- /dev/null +++ b/src/wolnelektury/settings/paths.py @@ -0,0 +1,6 @@ +from os import path + +PROJECT_DIR = path.dirname(path.dirname(path.abspath(__file__))) +ROOT_DIR = path.dirname(path.dirname(PROJECT_DIR)) +VAR_DIR = path.join(ROOT_DIR, 'var') + diff --git a/src/wolnelektury/settings/static.py b/src/wolnelektury/settings/static.py new file mode 100644 index 000000000..027879a33 --- /dev/null +++ b/src/wolnelektury/settings/static.py @@ -0,0 +1,174 @@ +from os import path +from .paths import VAR_DIR + +# Absolute path to the directory that holds media. +# Example: "/home/media/media.lawrence.com/" +MEDIA_ROOT = path.join(VAR_DIR, 'media/') +STATIC_ROOT = path.join(VAR_DIR, 'static/') +SEARCH_INDEX = path.join(VAR_DIR, 'search_index/') + +# URL that handles the media served from MEDIA_ROOT. Make sure to use a +# trailing slash if there is a path component (optional in other cases). +# Examples: "http://media.lawrence.com", "http://example.com/media/" +MEDIA_URL = '/media/' +STATIC_URL = '/static/' + +# CSS and JavaScript file groups + +PIPELINE = { + 'STYLESHEETS': { + 'main': { + # styles both for mobile and for big screen + 'source_filenames': [ + 'css/jquery.countdown.css', + + 'sponsors/css/sponsors.css', + + 'uni_form/uni-form.css', + 'uni_form/default.uni-form.css', + + 'css/ui-lightness/jquery-ui-1.8.16.custom.css', + + 'scss/main.scss', + ], + 'output_filename': 'css/compressed/main.css', + }, + 'book': { + 'source_filenames': [ + 'css/master.book.css', + ], + 'output_filename': 'css/compressed/book.css', + }, + 'book_text': { + 'source_filenames': [ + 'scss/book_text.scss', + 'css/new.book.css', + + 'css/master.picture.css', + ], + 'output_filename': 'css/compressed/book_text.css', + }, + 'picture': { + 'source_filenames': [ + 'css/master.book.css', + 'css/master.picture.css', + ], + 'output_filename': 'css/compressed/picture.css', + }, + 'player': { + 'source_filenames': [ + 'jplayer/jplayer.blue.monday.css', + 'player/player.css', + ], + 'output_filename': 'css/compressed/player.css', + }, + 'simple': { + 'source_filenames': ('css/simple.css',), + 'output_filename': 'css/compressed/simple.css', + }, + 'widget': { + 'source_filenames': ('scss/widget.scss',), + 'output_filename': 'css/compressed/widget.css', + }, + }, + 'JAVASCRIPT': { + 'base': { + 'source_filenames': ( + 'js/contrib/jquery.cycle.min.js', + 'js/contrib/jquery.jqmodal.js', + 'js/contrib/jquery.form.js', + 'js/contrib/jquery.countdown.js', 'js/contrib/jquery.countdown-pl.js', + 'js/contrib/jquery.countdown-de.js', 'js/contrib/jquery.countdown-uk.js', + 'js/contrib/jquery.countdown-es.js', 'js/contrib/jquery.countdown-lt.js', + 'js/contrib/jquery.countdown-ru.js', 'js/contrib/jquery.countdown-fr.js', + + 'js/contrib/jquery-ui-1.8.16.custom.min.js', + + 'js/locale.js', + 'js/dialogs.js', + 'js/base.js', + 'pdcounter/pdcounter.js', + 'sponsors/js/sponsors.js', + 'player/openplayer.js', + 'js/search.js', + 'funding/funding.js', + + 'uni_form/uni-form.js', + ), + 'output_filename': 'js/base.min.js', + }, + 'player': { + 'source_filenames': [ + 'jplayer/jquery.jplayer.min.js', + 'jplayer/jplayer.playlist.min.js', + 'player/player.js', + ], + 'output_filename': 'js/player.min.js', + }, + 'book': { + 'source_filenames': [ + 'js/contrib/jquery.eventdelegation.js', + 'js/contrib/jquery.scrollto.js', + 'js/contrib/jquery.highlightfade.js', + 'js/book_text/other.js', + 'js/book.js', + + 'js/contrib/raphael-min.js', + 'js/contrib/progressSpin.min.js', + 'js/picture.js', + ], + 'output_filename': 'js/book.min.js', + }, + 'book_text': { + 'source_filenames': [ + 'js/contrib/jquery.form.js', + 'js/contrib/jquery.jqmodal.js', + 'js/book_text/*.js', + 'js/locale.js', + 'js/dialogs.js', + + 'js/contrib/jquery.highlightfade.js', + 'js/contrib/raphael-min.js', + 'player/openplayer.js', + 'js/contrib/progressSpin.min.js', + 'js/picture.js', + ], + 'output_filename': 'js/book_text.js', + }, + 'book_ie': { + 'source_filenames': ('js/contrib/ierange-m2.js',), + 'output_filename': 'js/book_ie.min.js', + }, + 'widget': { + 'source_filenames': ( + 'js/contrib/jquery.js', + 'js/contrib/jquery-ui-1.8.16.custom.min.js', + 'js/search.js', + 'js/widget_run.js', + ), + 'output_filename': 'js/widget.min.js', + }, + }, + 'CSS_COMPRESSOR': None, + 'JS_COMPRESSOR': 'pipeline.compressors.jsmin.JSMinCompressor', + 'COMPILERS': ( + 'pipeline.compilers.sass.SASSCompiler', + # We could probably use PySCSS instead, + # but they have some serious problems, like: + # https://github.com/Kronuz/pyScss/issues/166 (empty list syntax) + # https://github.com/Kronuz/pyScss/issues/258 (bad @media order) + #'pyscss_compiler.PySCSSCompiler', + ) +} + +#~ STATICFILES_STORAGE = 'fnpdjango.utils.pipeline_storage.GzipPipelineCachedStorage' + +#PIPELINE_PYSCSS_BINARY = '/usr/bin/env pyscss' +#PIPELINE_PYSCSS_ARGUMENTS = '' + + +STATICFILES_FINDERS = [ + 'django.contrib.staticfiles.finders.FileSystemFinder', + 'django.contrib.staticfiles.finders.AppDirectoriesFinder', + 'pipeline.finders.PipelineFinder', +] diff --git a/src/wolnelektury/signals.py b/src/wolnelektury/signals.py new file mode 100644 index 000000000..5eb7e8847 --- /dev/null +++ b/src/wolnelektury/signals.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django.core.cache import caches +from django.db.models.signals import post_save, post_delete +from django.dispatch import receiver + +from funding.models import Spent +from infopages.models import InfoPage +from libraries.models import Catalog, Library +from pdcounter.models import Author, BookStub + + +@receiver([post_save, post_delete]) +def flush_views_after_manual_change(sender, **kwargs): + """Flushes views cache after changes with some models. + + Changes to those models happen infrequently, so we can afford + to just flush the cache on those instances. + + If changes become too often, relevant bits should be separated + as ssi_included views and flushed individually when needed. + + """ + if sender in (Catalog, Library, InfoPage, Author, BookStub, Spent): + caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() diff --git a/src/wolnelektury/static/css/annoy.css b/src/wolnelektury/static/css/annoy.css new file mode 100755 index 000000000..7ffa414d5 --- /dev/null +++ b/src/wolnelektury/static/css/annoy.css @@ -0,0 +1,52 @@ +#annoy-on { + font-size: 13px; + line-height: 1.15em; + + padding: .1em 1em; + background: orange; + z-index: 200; + font-family: Arial, sans-serif; + display: block; + padding: 0 1em; + width: 1em; + text-align:center; + border-radius: 0 0 0 1em; + position: absolute; + top: 0; + right: 0; + color: black; +} + +#annoy { + font-size: 13px; + line-height: 1.15em; + padding: 1em 5em 1em 0; + display: none; + background: orange; + font-family: Arial, sans-serif; + position: relative; + z-index: 200; +} +#annoy p { + margin: 0 0 0 10em;; +} +#annoy a { + color: #4E56C8; +} + +#annoy a#annoy-off { + padding: .5em 1em .5em; + width: 1em; + text-align:center; + font-family: Arial, sans-serif; + display: block; + + border-radius: 0 0 0 1em; + position: absolute; + top: 0; + right: 0; + color: black; +} +#annoy a#annoy-off:hover { + cursor: pointer; +} diff --git a/src/wolnelektury/static/css/jquery.countdown.css b/src/wolnelektury/static/css/jquery.countdown.css new file mode 100644 index 000000000..3eca47676 --- /dev/null +++ b/src/wolnelektury/static/css/jquery.countdown.css @@ -0,0 +1,53 @@ +/* jQuery Countdown styles 1.5.7. */ +.hasCountdown { + /*border: 1px solid #ccc; + background-color: #eee;*/ + margin: 1em 0 7em 0; +} +.countdown_rtl { + direction: rtl; +} +.countdown_holding span { + background-color: #ccc; +} +.countdown_row { + clear: both; + width: 100%; + padding: 0px 2px; + text-align: center; +} +.countdown_show1 .countdown_section { + width: 98%; +} +.countdown_show2 .countdown_section { + width: 48%; +} +.countdown_show3 .countdown_section { + width: 32.5%; +} +.countdown_show4 .countdown_section { + width: 24.5%; +} +.countdown_show5 .countdown_section { + width: 19.5%; +} +.countdown_show6 .countdown_section { + width: 16.25%; +} +.countdown_show7 .countdown_section { + width: 14%; +} +.countdown_section { + display: block; + float: left; + font-size: 100%; + text-align: center; +} +.countdown_amount { + font-size: 3.5em; + line-height: 1.4em; +} +.countdown_descr { + display: block; + width: 100%; +} diff --git a/src/wolnelektury/static/css/master.book.css b/src/wolnelektury/static/css/master.book.css new file mode 100644 index 000000000..29c84765e --- /dev/null +++ b/src/wolnelektury/static/css/master.book.css @@ -0,0 +1,410 @@ +body { + font-size: 16px; + font: Georgia, "Times New Roman", serif; + line-height: 1.5em; + margin: 0; +} + +a { + color: blue; + text-decoration: none; +} + +#book-text { + margin: 0 3em; + max-width: 36em; +} + +#other-text #book-text { + width: 36em; +} + +/* ================================== */ +/* = Header with logo and menu = */ +/* ================================== */ +#header { + margin: 3.4em 0 0 1.4em; +} + +img { + border: none; +} + +#logo { + font-size: 1.5em; +} +#logo a { + color: black; +} + +#menu { + position: fixed; + left: 0em; + top: 0em; + width: 100%; + height: 1.5em; + background: #333; + color: #FFF; + opacity: 0.9; + z-index: 99; +} + +#menu ul { + list-style: none; + padding: 0; + margin: 0; +} + +#menu li a { + display: block; + float: left; + height: 1.5em; + margin-left: 0.5em; + text-align: center; + color: #FFF; + padding: 0 1em; +} +#menu li a.menu { + padding-right: 1.5em; +} + +#menu li a.menu:hover, #menu li a.menu:active { + color: #000; + background: #FFF url(/static/img/arrow-down.png) no-repeat center right; +} + +#menu li a.menu.selected { + color: #000; + background: #FFF url(/static/img/arrow-up.png) no-repeat center right; +} +#menu a.menu-link { + display: block; + float: left; + height: 1.5em; + margin-left: 0.5em; + text-align: center; + color: #FFF; +} +#menu span { + color: #888; + font-style: italic; + font-size: .75em; + margin-right: 0.5em; +} + + +#toc, #themes, #nota_red, #info, #other-versions, #objects { + position: fixed; + left: 0em; + top: 1.5em; + width: 37em; + padding: 1.5em; + background: #FFF; + border-bottom: 0.25em solid #DDD; + border-right: 0.25em solid #DDD; + display: none; + height: 16em; + overflow-x: hidden; + overflow-y: auto; + opacity: 0.9; + z-index: 99; +} +#download { + position: fixed; + left: 0em; + top: 1.5em; + width: 37em; + padding: 1.5em; + background: #FFF; + border-bottom: 0.25em solid #DDD; + border-right: 0.25em solid #DDD; + display: none; + height: 10em; + overflow-x: hidden; + overflow-y: auto; + opacity: 0.9; + z-index: 99; +} + +#toc ol, #themes ol, #objects ol { + list-style: none; + padding: 0; + margin: 0; +} + +#toc ol li { + font-weight: bold; +} + +#toc ol ol { + padding: 0 0 1.5em 1.5em; + margin: 0; +} + +#toc ol ol li { + font-weight: normal; +} + +#toc h2 { + display: none; +} + +#toc .anchor { + float: none; + margin: 0; + color: blue; + font-size: 16px; + position: inherit; +} + +#info p { + text-align: justify; + margin: 1.5em 0 0; +} + +/* =================================================== */ +/* = Common elements: headings, paragraphs and lines = */ +/* =================================================== */ +h1 { + font-size: 3em; + margin: 0 0 1.5em 0; + text-align: center; + line-height: 1.5em; + font-weight: bold; +} + +h2 { + font-size: 2em; + margin: 1.5em 0 0; + font-weight: bold; + line-height: 1.5em; +} + +h3 { + font-size: 1.5em; + margin: 1.5em 0 0; + font-weight: normal; + line-height: 1.5em; +} + +h4 { + font-size: 1em; + margin: 1.5em 0 0; + line-height: 1.5em; +} + +p { + margin: 0; +} + +/* ======================== */ +/* = Footnotes and themes = */ +/* ======================== */ +.theme-begin { + border-left: 0.1em solid #DDDDDD; + color: #777; + padding: 0 0.5em; + width: 7.5em; + + font-style: normal; + font-weight: normal; + font-variant: normal; + letter-spacing: 0; + text-transform: none; + text-decoration: none; + + font-size: 16px; + float: right; + margin-right: -9.5em; + margin-bottom: 0.5em; + clear: both; + left: 40em; + line-height: 1.5em; + text-align: left; +} + +.annotation { + font-style: normal; + font-weight: normal; + font-size: 12px; + padding-left: 2px; + position: relative; + top: -4px; +} + +#footnotes { + margin-top: 3em; +} + +#footnotes .annotation { + display: block; + float: left; + width: 2.5em; + clear: both; +} + +#footnotes div { + margin: 1.5em 0 0 0; +} + +#footnotes p, #footnotes ul { + margin-left: 2.5em; + font-size: 0.875em; +} + +#footnotes .permalink { + font-size: .75em; +} + +blockquote { + font-size: 0.875em; +} + +/* ============= */ +/* = Numbering = */ +/* ============= */ +.verse, .paragraph { + position:relative; +} +.anchor { + position: absolute; + margin: -0.25em -0.5em; + left: -3em; + color: #777; + font-size: 12px; + width: 2em; + text-align: center; + padding: 0.25em 0.5em; + line-height: 1.5em; +} + +.anchor:hover, #book-text .anchor:active { + color: #FFF; + background-color: #CCC; +} + +/* =================== */ +/* = Custom elements = */ +/* =================== */ +span.author { + font-size: 0.5em; + display: block; + line-height: 1.5em; + margin-bottom: 0.25em; +} + +span.collection { + font-size: 0.375em; + display: block; + line-height: 1.5em; + margin-bottom: -0.25em; +} + +span.subtitle { + font-size: 0.5em; + display: block; + line-height: 1.5em; + margin-top: -0.25em; +} + +span.translator { + font-size: 0.375em; + display: block; + line-height: 1.5em; + margin-top: 0.25em; +} + +div.didaskalia { + font-style: italic; + margin: 0.5em 0 0 1.5em; +} + +div.kwestia { + margin: 0.5em 0 0; +} + +div.stanza { + margin: 1.5em 0 0; +} + +div.kwestia div.stanza { + margin: 0; +} + +p.paragraph { + text-align: justify; + margin: 1.5em 0 0; +} + +p.motto { + text-align: justify; + font-style: italic; + margin: 1.5em 0 0; +} + +p.motto_podpis { + font-size: 0.875em; + text-align: right; +} + +div.fragment { + border-bottom: 0.1em solid #999; + padding-bottom: 1.5em; +} + +div.note p, div.dedication p, div.note p.paragraph, div.dedication p.paragraph { + text-align: right; + font-style: italic; +} + +hr.spacer { + height: 3em; + visibility: hidden; +} + +hr.spacer-line { + margin: 1.5em 0; + border: none; + border-bottom: 0.1em solid #000; +} + +p.spacer-asterisk { + padding: 0; + margin: 1.5em 0; + text-align: center; +} + +div.person-list ol { + list-style: none; + padding: 0 0 0 1.5em; +} + +p.place-and-time { + font-style: italic; +} + +em.math, em.foreign-word, em.book-title, em.didaskalia { + font-style: italic; +} + +em.author-emphasis { + letter-spacing: 0.1em; +} + +em.person { + font-style: normal; + font-variant: small-caps; +} + +.verse:after { + content: "\feff"; +} + + +/* =================================== */ +/* = Hide some elements for printing = */ +/* =================================== */ + +@media print { + #menu {display: none;} +} diff --git a/src/wolnelektury/static/css/master.picture.css b/src/wolnelektury/static/css/master.picture.css new file mode 100644 index 000000000..43abda40a --- /dev/null +++ b/src/wolnelektury/static/css/master.picture.css @@ -0,0 +1,60 @@ + +#picture-view { + left: 0; + right: 0; + position:absolute; + top: 0; + bottom: 0; + z-index: 10; +} + +#picture-view .picture-wrap { + background-repeat: no-repeat; + margin: 0 auto 0 auto; + display: block; + position: relative; + z-index: 10; +// cursor: move; + +} + +.picture-wrap .mark { + border: 2px solid rgba(200, 200, 200, 0.7); + position: absolute; + display: block; +} + +.picture-wrap .mark .label { + position: absolute; + display: block; + background-color: rgba(200, 200, 200, 0.7); + color: rgba(0,0,0,0.6); + font-size: 0.9rem; +// bottom: -1.5em; +} + +.button.inactive:active, +.button.inactive:link, +.button.inactive:visited +{ + color: #606060 !important; + cursor: not-allowed; +} + +#sponsors { + margin-top: 3em; +} +#sponsors img { + width: 100%; +} + +#spinner { + height: 1em; + z-index:10; +} + +.dropdown-body { + font-size: 0.8rem; + background-color: #444; +} + diff --git a/src/wolnelektury/static/css/new.book.css b/src/wolnelektury/static/css/new.book.css new file mode 100644 index 000000000..a5f4c0676 --- /dev/null +++ b/src/wolnelektury/static/css/new.book.css @@ -0,0 +1,275 @@ +body { + font-size: 16px; + font-family: Georgia, "Times New Roman", serif; + line-height: 1.5em; + margin: 0; +} + +a { + color: blue; + text-decoration: none; +} + +/* ================================== */ +/* = Header with logo and menu = */ +/* ================================== */ +#toc ol, #themes ol, #objects ol { + list-style: none; + padding: 0; + margin: 0; +} + +#toc ol li { + font-weight: bold; +} + +#toc ol ol { + padding: 0 0 1.5em 1.5em; + margin: 0; +} + +#toc ol ol li { + font-weight: normal; +} + +#toc h2 { + display: none; +} + +#toc .anchor { + float: none; + margin: 0; + color: blue; + font-size: 16px; + position: inherit; +} + +#info p { + margin: 1em 0 0; +} + +#info .sponsors img { + margin-bottom: 1em; +} + + +/* =================================================== */ +/* = Common elements: headings, paragraphs and lines = */ +/* =================================================== */ +h1 { + font-size: 3em; + margin: 1.5em 0; + text-align: center; + line-height: 1.5em; + font-weight: bold; +} + +h2 { + font-size: 2em; + margin: 1.5em 0 0; + font-weight: bold; + line-height: 1.5em; +} + +h3 { + font-size: 1.5em; + margin: 1.5em 0 0; + font-weight: normal; + line-height: 1.5em; +} + +h4 { + font-size: 1em; + margin: 1.5em 0 0; + line-height: 1.5em; +} + +p { + margin: 0; +} + +/* ======================== */ +/* = Footnotes and themes = */ +/* ======================== */ + +.annotation { + font-style: normal; + font-weight: normal; + font-size: .75em; + padding-left: 2px; + position: relative; + top: -4px; +} + +#footnotes { + margin-top: 3em; +} + +#footnotes .annotation { + display: block; + float: left; + width: 2.5em; + clear: both; +} + +#footnotes div { + margin: 1.5em 0 0 0; +} + +#footnotes p, #footnotes ul { + margin-left: 2.5em; + font-size: 0.875em; +} + +#footnotes .permalink { + font-size: .75em; +} + +blockquote { + font-size: 0.875em; +} + +/* ============= */ +/* = Numbering = */ +/* ============= */ +.verse, .paragraph { + position:relative; +} +/*.anchor { + position: absolute; + margin: -0.25em -0.5em; + color: #777; + font-size: 12px; + text-align: center; + padding: 0.25em 0.5em; + line-height: 1.5em; +}*/ + + +/* =================== */ +/* = Custom elements = */ +/* =================== */ +span.author { + font-size: 0.5em; + display: block; + line-height: 1.5em; + margin-bottom: 0.25em; +} + +span.collection { + font-size: 0.375em; + display: block; + line-height: 1.5em; + margin-bottom: -0.25em; +} + +span.subtitle { + font-size: 0.5em; + display: block; + line-height: 1.5em; + margin-top: -0.25em; +} + +span.translator { + font-size: 0.375em; + display: block; + line-height: 1.5em; + margin-top: 0.25em; +} + +div.didaskalia { + font-style: italic; + margin: 0.5em 0 0 1.5em; +} + +div.kwestia { + margin: 0.5em 0 0; +} + +div.stanza { + margin: 1.5em 0; +} + +div.kwestia div.stanza { + margin: 0; +} + +p.paragraph { + text-align: justify; + margin: 0; + text-indent: 1.5em; +} + +.motto { + text-align: justify; + font-style: italic; + margin: 1.5em 0 0; +} + +p.motto_podpis { + font-size: 0.875em; + text-align: right; + margin-bottom: 1.5em; +} + +div.fragment { + border-bottom: 0.1em solid #999; + padding-bottom: 1.5em; +} + +div.note p, div.dedication p, div.note p.paragraph, div.dedication p.paragraph { + text-align: right; + font-style: italic; +} + +hr.spacer { + height: 3em; + visibility: hidden; +} + +hr.spacer-line { + margin: 1.5em 0; + border: none; + border-bottom: 0.1em solid #000; +} + +p.spacer-asterisk { + padding: 0; + margin: 1.5em 0; + text-align: center; +} + +div.person-list ol { + list-style: none; + padding: 0 0 0 1.5em; +} + +p.place-and-time { + font-style: italic; +} + +em.math, em.foreign-word, em.book-title, em.didaskalia { + font-style: italic; +} + +em.author-emphasis { + letter-spacing: 0.1em; +} + +em.person { + font-style: normal; + font-variant: small-caps; +} + +.verse:after { + content: "\feff"; +} + + +/* =================================== */ +/* = Hide some elements for printing = */ +/* =================================== */ + +@media print { + #menu {display: none;} +} diff --git a/src/wolnelektury/static/css/picture_box.css b/src/wolnelektury/static/css/picture_box.css new file mode 100644 index 000000000..a2ab07d1f --- /dev/null +++ b/src/wolnelektury/static/css/picture_box.css @@ -0,0 +1,29 @@ +.book-wide-box.picture img.cover { + width: 53.5em; + height: auto; +} + +.picture.book-wide-box .book-box-tools { + margin-left: 50em; // 535px image + 15px margin @ 11pt +} + +.picture li.book-box-download { + width: 15em; +} + + +.Picture-item { + display: inline-block; + vertical-align: top; + float: left; +} + + +.picture.book-wide-box .other-tools { + margin: 5em 0 0 0; +} + + +.picture.book-wide-box #theme-list-wrapper { + margin-left: 55em; +} diff --git a/src/wolnelektury/static/css/simple.css b/src/wolnelektury/static/css/simple.css new file mode 100755 index 000000000..f723889a2 --- /dev/null +++ b/src/wolnelektury/static/css/simple.css @@ -0,0 +1,75 @@ +/* Legacy simple style for some very old pages. */ + +html { + margin: 0; +} + +body { + margin: 0; + padding: 1em; + color: #2F4110; + background: #FFF url(/static/img/bg.png) repeat-x; + font-size: .75em; + font-family: Verdana,Arial,Helvetica,sans-serif; +} + + + +#body { + margin-top: 2em; +/* + max-width: 900px; + margin:auto; +*/ + margin-left: 400px; +} + +#logo { + float: left; + margin-left: 100px; + margin-top: 4em; +} + +h1 { + font: bold 2.2em Arial,sans-serif; + padding-top: .7em; + margin-bottom: .2em; +} + + +h2 { + font-size: 1.1em; + margin:0; +} + +a { + color: #295158; + text-decoration: none; +} + + +.plain li { + list-style: none; +} + +li { + margin: 1em; +} + +.clr { + clear: both; +} + + +.more { + text-align: right; +} + +table { + margin-top: 1em; +} + +th { + font-weight: normal; + text-align: left; +} diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png new file mode 100644 index 000000000..954e22dbd Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png new file mode 100644 index 000000000..64ece5707 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png new file mode 100644 index 000000000..abdc01082 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png new file mode 100644 index 000000000..9b383f4d2 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png new file mode 100644 index 000000000..a23baad25 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 000000000..42ccba269 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png new file mode 100644 index 000000000..1b1972b56 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png new file mode 100644 index 000000000..f1273672d Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png new file mode 100644 index 000000000..359397acf Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-icons_222222_256x240.png b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_222222_256x240.png new file mode 100644 index 000000000..b273ff111 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_222222_256x240.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png new file mode 100644 index 000000000..a641a371a Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png new file mode 100644 index 000000000..85e63e9f6 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png new file mode 100644 index 000000000..e117effa3 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ffffff_256x240.png b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ffffff_256x240.png new file mode 100644 index 000000000..42f8f992c Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ffffff_256x240.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/jquery-ui-1.8.16.custom.css b/src/wolnelektury/static/css/ui-lightness/jquery-ui-1.8.16.custom.css new file mode 100644 index 000000000..da10fff71 --- /dev/null +++ b/src/wolnelektury/static/css/ui-lightness/jquery-ui-1.8.16.custom.css @@ -0,0 +1,342 @@ +/* + * jQuery UI CSS Framework 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } +.ui-widget-content a { color: #333333; } +.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } +.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } +.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* + * jQuery UI Autocomplete 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu 1.8.16 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} diff --git a/src/wolnelektury/static/img/1percent-big.png b/src/wolnelektury/static/img/1percent-big.png new file mode 100644 index 000000000..333413ee6 Binary files /dev/null and b/src/wolnelektury/static/img/1percent-big.png differ diff --git a/src/wolnelektury/static/img/android-poster.png b/src/wolnelektury/static/img/android-poster.png new file mode 100644 index 000000000..a518650d4 Binary files /dev/null and b/src/wolnelektury/static/img/android-poster.png differ diff --git a/src/wolnelektury/static/img/arrow-down.png b/src/wolnelektury/static/img/arrow-down.png new file mode 100644 index 000000000..0e32315c0 Binary files /dev/null and b/src/wolnelektury/static/img/arrow-down.png differ diff --git a/src/wolnelektury/static/img/arrow-gray.png b/src/wolnelektury/static/img/arrow-gray.png new file mode 100644 index 000000000..b1c590d04 Binary files /dev/null and b/src/wolnelektury/static/img/arrow-gray.png differ diff --git a/src/wolnelektury/static/img/arrow-gray.svg b/src/wolnelektury/static/img/arrow-gray.svg new file mode 100644 index 000000000..02d7075c3 --- /dev/null +++ b/src/wolnelektury/static/img/arrow-gray.svg @@ -0,0 +1,40 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/wolnelektury/static/img/arrow-teal.png b/src/wolnelektury/static/img/arrow-teal.png new file mode 100644 index 000000000..ce406336b Binary files /dev/null and b/src/wolnelektury/static/img/arrow-teal.png differ diff --git a/src/wolnelektury/static/img/arrow-teal.svg b/src/wolnelektury/static/img/arrow-teal.svg new file mode 100644 index 000000000..478ed07c2 --- /dev/null +++ b/src/wolnelektury/static/img/arrow-teal.svg @@ -0,0 +1,41 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/wolnelektury/static/img/arrow-up.png b/src/wolnelektury/static/img/arrow-up.png new file mode 100644 index 000000000..cdf9cf635 Binary files /dev/null and b/src/wolnelektury/static/img/arrow-up.png differ diff --git a/src/wolnelektury/static/img/auth/facebook.png b/src/wolnelektury/static/img/auth/facebook.png new file mode 100644 index 000000000..f9b6e7149 Binary files /dev/null and b/src/wolnelektury/static/img/auth/facebook.png differ diff --git a/src/wolnelektury/static/img/auth/google.png b/src/wolnelektury/static/img/auth/google.png new file mode 100644 index 000000000..bf7d11240 Binary files /dev/null and b/src/wolnelektury/static/img/auth/google.png differ diff --git a/src/wolnelektury/static/img/auth/openid.png b/src/wolnelektury/static/img/auth/openid.png new file mode 100644 index 000000000..83e97691f Binary files /dev/null and b/src/wolnelektury/static/img/auth/openid.png differ diff --git a/src/wolnelektury/static/img/auth/twitter.png b/src/wolnelektury/static/img/auth/twitter.png new file mode 100644 index 000000000..d2a55029d Binary files /dev/null and b/src/wolnelektury/static/img/auth/twitter.png differ diff --git a/src/wolnelektury/static/img/backdrop/boltron-3212284622.jpg b/src/wolnelektury/static/img/backdrop/boltron-3212284622.jpg new file mode 100644 index 000000000..7fe148c19 Binary files /dev/null and b/src/wolnelektury/static/img/backdrop/boltron-3212284622.jpg differ diff --git a/src/wolnelektury/static/img/backdrop/book-drawer2.jpg b/src/wolnelektury/static/img/backdrop/book-drawer2.jpg new file mode 100644 index 000000000..88a1ee4be Binary files /dev/null and b/src/wolnelektury/static/img/backdrop/book-drawer2.jpg differ diff --git a/src/wolnelektury/static/img/backdrop/horiavarlan-4268896468.jpg b/src/wolnelektury/static/img/backdrop/horiavarlan-4268896468.jpg new file mode 100644 index 000000000..acc80b6e7 Binary files /dev/null and b/src/wolnelektury/static/img/backdrop/horiavarlan-4268896468.jpg differ diff --git a/src/wolnelektury/static/img/bg-header.png b/src/wolnelektury/static/img/bg-header.png new file mode 100644 index 000000000..4e4cdf9a7 Binary files /dev/null and b/src/wolnelektury/static/img/bg-header.png differ diff --git a/src/wolnelektury/static/img/bg.png b/src/wolnelektury/static/img/bg.png new file mode 100644 index 000000000..be7d63a7c Binary files /dev/null and b/src/wolnelektury/static/img/bg.png differ diff --git a/src/wolnelektury/static/img/book-parent.png b/src/wolnelektury/static/img/book-parent.png new file mode 100644 index 000000000..566859807 Binary files /dev/null and b/src/wolnelektury/static/img/book-parent.png differ diff --git a/src/wolnelektury/static/img/book.png b/src/wolnelektury/static/img/book.png new file mode 100644 index 000000000..f26483979 Binary files /dev/null and b/src/wolnelektury/static/img/book.png differ diff --git a/src/wolnelektury/static/img/doodle/20110908-android.png b/src/wolnelektury/static/img/doodle/20110908-android.png new file mode 100644 index 000000000..664b579f5 Binary files /dev/null and b/src/wolnelektury/static/img/doodle/20110908-android.png differ diff --git a/src/wolnelektury/static/img/doodle/20110908-logo.png b/src/wolnelektury/static/img/doodle/20110908-logo.png new file mode 100644 index 000000000..f4ab58319 Binary files /dev/null and b/src/wolnelektury/static/img/doodle/20110908-logo.png differ diff --git a/src/wolnelektury/static/img/download.png b/src/wolnelektury/static/img/download.png new file mode 100644 index 000000000..54d1bf904 Binary files /dev/null and b/src/wolnelektury/static/img/download.png differ diff --git a/src/wolnelektury/static/img/download.svg b/src/wolnelektury/static/img/download.svg new file mode 100644 index 000000000..cb49aa2ba --- /dev/null +++ b/src/wolnelektury/static/img/download.svg @@ -0,0 +1,41 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/wolnelektury/static/img/epub-www.jpg b/src/wolnelektury/static/img/epub-www.jpg new file mode 100644 index 000000000..84016cf6e Binary files /dev/null and b/src/wolnelektury/static/img/epub-www.jpg differ diff --git a/src/wolnelektury/static/img/epub.png b/src/wolnelektury/static/img/epub.png new file mode 100644 index 000000000..32510fdfb Binary files /dev/null and b/src/wolnelektury/static/img/epub.png differ diff --git a/src/wolnelektury/static/img/favicon.ico b/src/wolnelektury/static/img/favicon.ico new file mode 100644 index 000000000..3f2aacc37 Binary files /dev/null and b/src/wolnelektury/static/img/favicon.ico differ diff --git a/src/wolnelektury/static/img/favicon.png b/src/wolnelektury/static/img/favicon.png new file mode 100644 index 000000000..9794f3588 Binary files /dev/null and b/src/wolnelektury/static/img/favicon.png differ diff --git a/src/wolnelektury/static/img/indicator.gif b/src/wolnelektury/static/img/indicator.gif new file mode 100644 index 000000000..085ccaeca Binary files /dev/null and b/src/wolnelektury/static/img/indicator.gif differ diff --git a/src/wolnelektury/static/img/kindle-poster-260.png b/src/wolnelektury/static/img/kindle-poster-260.png new file mode 100644 index 000000000..1fd435eee Binary files /dev/null and b/src/wolnelektury/static/img/kindle-poster-260.png differ diff --git a/src/wolnelektury/static/img/kindle-poster.png b/src/wolnelektury/static/img/kindle-poster.png new file mode 100644 index 000000000..63560d273 Binary files /dev/null and b/src/wolnelektury/static/img/kindle-poster.png differ diff --git a/src/wolnelektury/static/img/licenses/cc-by-sa.png b/src/wolnelektury/static/img/licenses/cc-by-sa.png new file mode 100644 index 000000000..7b15bc451 Binary files /dev/null and b/src/wolnelektury/static/img/licenses/cc-by-sa.png differ diff --git a/src/wolnelektury/static/img/licenses/cc-by-sa.svg b/src/wolnelektury/static/img/licenses/cc-by-sa.svg new file mode 100644 index 000000000..140e9b8c6 --- /dev/null +++ b/src/wolnelektury/static/img/licenses/cc-by-sa.svg @@ -0,0 +1,482 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/wolnelektury/static/img/listen.png b/src/wolnelektury/static/img/listen.png new file mode 100644 index 000000000..68627221c Binary files /dev/null and b/src/wolnelektury/static/img/listen.png differ diff --git a/src/wolnelektury/static/img/listen.svg b/src/wolnelektury/static/img/listen.svg new file mode 100644 index 000000000..714768f54 --- /dev/null +++ b/src/wolnelektury/static/img/listen.svg @@ -0,0 +1,41 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/wolnelektury/static/img/logo-220.png b/src/wolnelektury/static/img/logo-220.png new file mode 100644 index 000000000..9b15e88a3 Binary files /dev/null and b/src/wolnelektury/static/img/logo-220.png differ diff --git a/src/wolnelektury/static/img/logo-bez.png b/src/wolnelektury/static/img/logo-bez.png new file mode 100644 index 000000000..213c442d4 Binary files /dev/null and b/src/wolnelektury/static/img/logo-bez.png differ diff --git a/src/wolnelektury/static/img/logo-big.png b/src/wolnelektury/static/img/logo-big.png new file mode 100644 index 000000000..fae49ea96 Binary files /dev/null and b/src/wolnelektury/static/img/logo-big.png differ diff --git a/src/wolnelektury/static/img/logo-fbc.png b/src/wolnelektury/static/img/logo-fbc.png new file mode 100644 index 000000000..c7802d3d3 Binary files /dev/null and b/src/wolnelektury/static/img/logo-fbc.png differ diff --git a/src/wolnelektury/static/img/logo-neon.png b/src/wolnelektury/static/img/logo-neon.png new file mode 100644 index 000000000..c729463be Binary files /dev/null and b/src/wolnelektury/static/img/logo-neon.png differ diff --git a/src/wolnelektury/static/img/logo.png b/src/wolnelektury/static/img/logo.png new file mode 100644 index 000000000..398f45d01 Binary files /dev/null and b/src/wolnelektury/static/img/logo.png differ diff --git a/src/wolnelektury/static/img/logo_nck.jpg b/src/wolnelektury/static/img/logo_nck.jpg new file mode 100644 index 000000000..c030f6a9a Binary files /dev/null and b/src/wolnelektury/static/img/logo_nck.jpg differ diff --git a/src/wolnelektury/static/img/logo_nck_200horiz_trans.png b/src/wolnelektury/static/img/logo_nck_200horiz_trans.png new file mode 100644 index 000000000..897a8352b Binary files /dev/null and b/src/wolnelektury/static/img/logo_nck_200horiz_trans.png differ diff --git a/src/wolnelektury/static/img/logo_nck_200trans.png b/src/wolnelektury/static/img/logo_nck_200trans.png new file mode 100644 index 000000000..2731aacec Binary files /dev/null and b/src/wolnelektury/static/img/logo_nck_200trans.png differ diff --git a/src/wolnelektury/static/img/mobi.png b/src/wolnelektury/static/img/mobi.png new file mode 100644 index 000000000..1631b896d Binary files /dev/null and b/src/wolnelektury/static/img/mobi.png differ diff --git a/src/wolnelektury/static/img/odt.png b/src/wolnelektury/static/img/odt.png new file mode 100644 index 000000000..c0c2602f1 Binary files /dev/null and b/src/wolnelektury/static/img/odt.png differ diff --git a/src/wolnelektury/static/img/payu.png b/src/wolnelektury/static/img/payu.png new file mode 100644 index 000000000..2e8abf480 Binary files /dev/null and b/src/wolnelektury/static/img/payu.png differ diff --git a/src/wolnelektury/static/img/pdf.png b/src/wolnelektury/static/img/pdf.png new file mode 100644 index 000000000..5fe5bbe23 Binary files /dev/null and b/src/wolnelektury/static/img/pdf.png differ diff --git a/src/wolnelektury/static/img/procent.png b/src/wolnelektury/static/img/procent.png new file mode 100644 index 000000000..3d0f82d81 Binary files /dev/null and b/src/wolnelektury/static/img/procent.png differ diff --git a/src/wolnelektury/static/img/progress-pixel.png b/src/wolnelektury/static/img/progress-pixel.png new file mode 100644 index 000000000..5af1bfdfe Binary files /dev/null and b/src/wolnelektury/static/img/progress-pixel.png differ diff --git a/src/wolnelektury/static/img/read.png b/src/wolnelektury/static/img/read.png new file mode 100644 index 000000000..1d5ab0e7b Binary files /dev/null and b/src/wolnelektury/static/img/read.png differ diff --git a/src/wolnelektury/static/img/read.svg b/src/wolnelektury/static/img/read.svg new file mode 100644 index 000000000..f3fd5b65c --- /dev/null +++ b/src/wolnelektury/static/img/read.svg @@ -0,0 +1,41 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/wolnelektury/static/img/s5/blank.gif b/src/wolnelektury/static/img/s5/blank.gif new file mode 100644 index 000000000..75b945d25 Binary files /dev/null and b/src/wolnelektury/static/img/s5/blank.gif differ diff --git a/src/wolnelektury/static/img/s5/bodybg.gif b/src/wolnelektury/static/img/s5/bodybg.gif new file mode 100755 index 000000000..5f448a16f Binary files /dev/null and b/src/wolnelektury/static/img/s5/bodybg.gif differ diff --git a/src/wolnelektury/static/img/s5/iepngfix.htc b/src/wolnelektury/static/img/s5/iepngfix.htc new file mode 100644 index 000000000..bba2db756 --- /dev/null +++ b/src/wolnelektury/static/img/s5/iepngfix.htc @@ -0,0 +1,42 @@ + + + + + \ No newline at end of file diff --git a/src/wolnelektury/static/img/search.png b/src/wolnelektury/static/img/search.png new file mode 100644 index 000000000..8f032bf0b Binary files /dev/null and b/src/wolnelektury/static/img/search.png differ diff --git a/src/wolnelektury/static/img/social/bigfacebook.png b/src/wolnelektury/static/img/social/bigfacebook.png new file mode 100644 index 000000000..630416cf2 Binary files /dev/null and b/src/wolnelektury/static/img/social/bigfacebook.png differ diff --git a/src/wolnelektury/static/img/social/biggoogle.png b/src/wolnelektury/static/img/social/biggoogle.png new file mode 100644 index 000000000..19ad19df5 Binary files /dev/null and b/src/wolnelektury/static/img/social/biggoogle.png differ diff --git a/src/wolnelektury/static/img/social/bignk.png b/src/wolnelektury/static/img/social/bignk.png new file mode 100644 index 000000000..c119cd117 Binary files /dev/null and b/src/wolnelektury/static/img/social/bignk.png differ diff --git a/src/wolnelektury/static/img/social/bigtwitter.png b/src/wolnelektury/static/img/social/bigtwitter.png new file mode 100644 index 000000000..fafbe6412 Binary files /dev/null and b/src/wolnelektury/static/img/social/bigtwitter.png differ diff --git a/src/wolnelektury/static/img/social/f.png b/src/wolnelektury/static/img/social/f.png new file mode 100644 index 000000000..3261c6d7f Binary files /dev/null and b/src/wolnelektury/static/img/social/f.png differ diff --git a/src/wolnelektury/static/img/social/f.svg b/src/wolnelektury/static/img/social/f.svg new file mode 100644 index 000000000..fd25a0b1e --- /dev/null +++ b/src/wolnelektury/static/img/social/f.svg @@ -0,0 +1,36 @@ + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/wolnelektury/static/img/social/gplus.png b/src/wolnelektury/static/img/social/gplus.png new file mode 100644 index 000000000..c9a98cca4 Binary files /dev/null and b/src/wolnelektury/static/img/social/gplus.png differ diff --git a/src/wolnelektury/static/img/social/gplus.svg b/src/wolnelektury/static/img/social/gplus.svg new file mode 100644 index 000000000..ad8584c48 --- /dev/null +++ b/src/wolnelektury/static/img/social/gplus.svg @@ -0,0 +1,36 @@ + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/wolnelektury/static/img/social/nk.png b/src/wolnelektury/static/img/social/nk.png new file mode 100644 index 000000000..736918565 Binary files /dev/null and b/src/wolnelektury/static/img/social/nk.png differ diff --git a/src/wolnelektury/static/img/social/nk.svg b/src/wolnelektury/static/img/social/nk.svg new file mode 100644 index 000000000..143701f10 --- /dev/null +++ b/src/wolnelektury/static/img/social/nk.svg @@ -0,0 +1,36 @@ + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/wolnelektury/static/img/speaker.png b/src/wolnelektury/static/img/speaker.png new file mode 100644 index 000000000..5831f177a Binary files /dev/null and b/src/wolnelektury/static/img/speaker.png differ diff --git a/src/wolnelektury/static/img/turniej-maly.png b/src/wolnelektury/static/img/turniej-maly.png new file mode 100644 index 000000000..b11f0d676 Binary files /dev/null and b/src/wolnelektury/static/img/turniej-maly.png differ diff --git a/src/wolnelektury/static/img/txt.png b/src/wolnelektury/static/img/txt.png new file mode 100644 index 000000000..de699ea24 Binary files /dev/null and b/src/wolnelektury/static/img/txt.png differ diff --git a/src/wolnelektury/static/img/wiatrak.png b/src/wolnelektury/static/img/wiatrak.png new file mode 100644 index 000000000..e96a0c1a5 Binary files /dev/null and b/src/wolnelektury/static/img/wiatrak.png differ diff --git a/src/wolnelektury/static/img/wl_icon_64.png b/src/wolnelektury/static/img/wl_icon_64.png new file mode 100644 index 000000000..a9dded316 Binary files /dev/null and b/src/wolnelektury/static/img/wl_icon_64.png differ diff --git a/src/wolnelektury/static/img/zabawnik.png b/src/wolnelektury/static/img/zabawnik.png new file mode 100644 index 000000000..2a4621693 Binary files /dev/null and b/src/wolnelektury/static/img/zabawnik.png differ diff --git a/src/wolnelektury/static/js/annoy.js b/src/wolnelektury/static/js/annoy.js new file mode 100644 index 000000000..3104097a9 --- /dev/null +++ b/src/wolnelektury/static/js/annoy.js @@ -0,0 +1,29 @@ +(function($) { + $(function() { + + +$("#annoy-on").click(function(e) { + e.preventDefault(); + $("#annoy").slideDown('fast'); + $(this).hide(); + if (Modernizr.localstorage) localStorage.removeItem("annoyed2013"); +}); + +$("#annoy-off").click(function() { + $("#annoy").slideUp('fast'); + $("#annoy-on").show(); + if (Modernizr.localstorage) localStorage["annoyed2013"] = true; +}); + + +if (Modernizr.localstorage) { + if (!localStorage["annoyed2013"]) { + $("#annoy-on").hide(); + $("#annoy").show(); + } +} + + + + }); +})(jQuery); diff --git a/src/wolnelektury/static/js/base.js b/src/wolnelektury/static/js/base.js new file mode 100644 index 000000000..f2a8e262a --- /dev/null +++ b/src/wolnelektury/static/js/base.js @@ -0,0 +1,167 @@ +(function($) { + $(function() { + $.fn.toggle_slide = function(p) { + cont = $(this); + short_el = p['short_el'] || $(':first-child', this); + long_el = p['long_el'] || short_el.next(); + button = p['button']; + short_text = p['short_text'], + long_text = p['long_text']; + + var toggle_fun = function(cont, short_el, long_el, button, short_text, long_text) { + var toggle = function() { + if (cont.hasClass('short')) { + cont.animate({"height": long_el.attr("cont_h")+'px'}, {duration: "fast" }).removeClass('short'); + short_el.hide(); + long_el.show(); + if (button && long_text) button.html(long_text); + } else { + cont.animate({"height": short_el.attr("cont_h")+'px'}, {duration: "fast" }).addClass('short'); + long_el.hide(); + short_el.show(); + if (button && short_text) button.html(short_text); + } + return false; + } + return toggle; + } + if (long_el.html().length <= short_el.html().length) + return; + + // ensure long element shown first + long_el.show();short_el.hide(); + long_el.attr("cont_h", $(this).height()).hide(); + short_el.show().attr("cont_h", $(this).height()); + $(this).addClass('short'); + + if (button && short_text) button.html(short_text); + if (button) button.click(toggle_fun(cont, short_el, long_el, button, short_text, long_text)); + }; + + + // Fragments + $('.fragment-with-short').each(function() { + $(this).toggle_slide({ + short_el: $('.fragment-short-text', this), + long_el: $('.fragment-long-text', this), + button: $('.toggle', this) + }) + }); + $('#description').each(function() { + $(this).toggle_slide({ + short_el: $('#description-short', this), + long_el: $('#description-long', this), + button: $(this) + }) + }); + + + + (function() { + var $current = null; + var menu_loaded = false; + $('.hidden-box-wrapper').each(function() { + var $hidden = $('.hidden-box', this); + $('.hidden-box-trigger', this).click(function(event) { + event.preventDefault(); + if ($current == $hidden) { + $current = null; + $hidden.hide('fast'); + } else { + $current && $current.hide('fast'); + $hidden.show('fast'); + $current = $hidden; + if ($(this).hasClass('load-menu') && !menu_loaded) { + $.ajax({ + url: '/katalog/' + LANGUAGE_CODE + '.json', + dataType: "json", + }).done(function(data) { + $.each(data, function(index, value) { + var $menuitem = $('#menu-' + index); + $menuitem.html(value); + var $minisearch = $(""); + $minisearch.keyup(function() { + var s = $(this).val().toLowerCase(); + if (s) { + $("li", $menuitem).each(function() { + if ($("a", this).text().toLowerCase().indexOf(s) != -1) + $(this).show(); + else $(this).hide(); + }); + } + else { + $("li", $menuitem).css("display", ""); + } + }); + $menuitem.prepend($minisearch); + }); + menu_loaded = true; + }); + } + } + }); + }); + /* this kinda breaks the whole page. */ + $('body').click(function(e) { + if ($current == null) return; + var p = $(e.target); + while (p.length) { + if (p == $current) + return; + if (p.hasClass('hidden-box-trigger') + || p.hasClass('simple-toggler') + || p.hasClass('mini-search')) + return; + p = p.parent(); + } + $current.hide('fast'); + $current = null; + }); + })(); + + +$('#show-menu').click(function(event) { + event.preventDefault(); + $('#menu').toggle('slow'); +}); +$('#book-list-nav h2').click(function(event) { + event.preventDefault(); + $('#book-list-nav-index').toggle(); +}); + + +$('#themes-list-toggle').click(function(event) { + event.preventDefault(); + $('#themes-list').toggle('slow'); +}); + + + $('.book-list-index').click(function(){ + $('.book-list-show-index').hide('slow'); + if($(this).parent().next('ul:not(:hidden)').length == 0){ + $(this).parent().next('ul').toggle('slow'); + } + return false; + }); + + $('.hoverclick').click(function() {$(this).closest('.hoverget').toggleClass('hover');}); + + $(function(){ + $("#search").search();}); + + $('body').on('click', '.simple-toggler' , function(ev) { + ev.preventDefault(); + var scope = $(this).closest('.simple-toggler-scope'); + scope.find('.simple-hidden-box').each(function(){ + var $this = $(this); + if ($this.is(':hidden')) { + $this.show(); + } else { + $this.hide(); + } + }); + }); + + }); +})(jQuery); + diff --git a/src/wolnelektury/static/js/book.js b/src/wolnelektury/static/js/book.js new file mode 100644 index 000000000..72d8174fc --- /dev/null +++ b/src/wolnelektury/static/js/book.js @@ -0,0 +1,64 @@ +$(function() { + function scrollToAnchor(anchor) { + if (anchor) { + var anchor_name = anchor.slice(1); + var element = $('a[name="' + anchor_name + '"]'); + if (element.length > 0) { + $.scrollTo(element, 500, {offset: {top: -50, left: 0}}); + foot_elem = $('#footnotes a[name="' + anchor_name + '"]'); + if (foot_elem.length > 0) { + $(element).parent().highlightFade('yellow'); + } + window.location.hash = anchor; + } + } + } + + $.highlightFade.defaults.speed = 3000; + $('#toc').hide(); + if ($('#toc li').length == 0) { + $('#menu li a[href="#toc"]').remove(); + } + if ($('#themes li').length == 0) { + $('#menu li a[href="#themes"]').remove(); + } + if ($('#nota_red').length == 0) { + $('#menu li a[href="#nota_red"]').remove(); + } + + // On page load, scroll to anchor + scrollToAnchor(window.location.hash) + + $('#toc, #themes, #book-text').delegate('click', 'a', function(event) { + event.preventDefault(); + $('#menu li a.selected').click(); + scrollToAnchor($(this).attr('href')); + }); + + $('#menu li a.menu').toggle(function() { + $('#menu li a.selected').click(); + $(this).addClass('selected'); + $($(this).attr('href')).slideDown('fast'); + }, function() { + $(this).removeClass('selected'); + $($(this).attr('href')).slideUp('fast'); + }); + + + if (window.getSelection) { + $('.theme-begin').click(function() { + var selection = window.getSelection(); + selection.removeAllRanges(); + var range = document.createRange(); + + var e = $(".theme-end[fid='" + $(this).attr('fid') + "']")[0]; + + if (e) { + range.setStartAfter(this); + range.setEndBefore(e); + selection.addRange(range); + } + }); + } + +}); diff --git a/src/wolnelektury/static/js/book_text/info.js b/src/wolnelektury/static/js/book_text/info.js new file mode 100644 index 000000000..e69de29bb diff --git a/src/wolnelektury/static/js/book_text/menu.js b/src/wolnelektury/static/js/book_text/menu.js new file mode 100644 index 000000000..5bbc1a8d8 --- /dev/null +++ b/src/wolnelektury/static/js/book_text/menu.js @@ -0,0 +1,151 @@ +(function($){$(function(){ + + +function hide_menu_boxes() { + /* Closes any open menu boxes. */ + $("#menu .active").each(function() { + $(this).removeClass("active"); + $("#" + $(this).attr("data-box")).hide(); + if ($(this).hasClass('dropdown')) { + $($(this).attr('href')).slideUp('fast'); + } + }); + $("#box-underlay").hide(); +} + +function release_menu() { + /* Exits the menu. It only really disappears on small screens. */ + hide_menu_boxes(); + $("body").removeClass("menu-showed"); +} + +/* Show menu */ +$('#menu-toggle-on').click(function(e) { + e.preventDefault(); + var body = $("body"); + /* Just stop hiding the menu. This way, after narrowing the browser, + * menu will still disappear normally. */ + body.removeClass("menu-hidden"); + /* Menu still not visible? Really open it then. */ + if (!$("#menu").is(":visible")) { + body.addClass("menu-showed"); + } +}); + +/* Hide menu */ +$('#menu-toggle-off').click(function(e) { + e.preventDefault(); + /* Just release the menu. This way, after widening the browser, + * menu will still appear normally. */ + release_menu(); + /* Menu still visible after releasing it? Really hide it then. */ + if ($("#menu").is(":visible")) { + $("body").addClass("menu-hidden"); + } +}); + + +/* Exit menu by clicking anywhere else. */ +$("#box-underlay").click(release_menu); + + +/* Toggle hidden box on click. */ +$("#menu a").each(function() { + var boxid = $(this).attr("data-box"); + if (boxid) { + $("#" + $(this).attr("data-box")).hide(); + + $(this).click(function(e) { + e.preventDefault(); + var showing = $(this).hasClass("active"); + hide_menu_boxes(); + if (!showing) { + $("body").addClass("menu-showed"); + $(this).addClass("active"); + $("#box-underlay").show(); + $("#" + $(this).attr("data-box")).show(); + } + }); + } + else if ($(this).hasClass('dropdown')) { + $(this).click(function(e) { + e.preventDefault(); + var showing = $(this).hasClass("active"); + hide_menu_boxes(); + if (!showing) { + $("body").addClass("menu-showed"); + $("#sponsors:not(:hidden)").fadeOut(); + $(this).addClass("active"); + $($(this).attr('href')).slideDown('fast'); + } + }); + } + else if (!$(this).hasClass('button')) { + $(this).click(release_menu); + } +}); + + +/* Show menu item for other versions of text. + * It's only present if there are any. */ +$("#menu-other").show(); + + +/* Load other version of text. */ +$(".display-other").click(function(e) { + e.preventDefault(); + release_menu(); + + $("#other-text").show(); + $("body").addClass('with-other-text'); + + $.ajax($(this).attr('data-other'), { + success: function(text) { + $("#other-text-body").html(text); + $("#other-text-waiter").hide(); + $("#other-text-body").show(); + loaded_text($("#other-text-body")); + } + }); +}); + + +/* Remove other version of text. */ +$(".other-text-close").click(function(e) { + release_menu(); + e.preventDefault(); + $("#other-text").hide(); + $("body").removeClass('with-other-text'); + $("#other-text-body").html(""); +}); + + +/* Release menu after clicking inside TOC. */ +$("#toc a").click(release_menu); + + +if ($('#nota_red').length > 0) { + $("#menu-nota_red").show(); +} + +/* Show themes menu item, if there are any. */ +if ($('#themes li').length > 0) { + $("#menu-themes").show(); +} + +function loaded_text(text) { + /* Attach events to elements inside book texts here. + * This way they'll work for the other text when it's loaded. */ + + $(".theme-begin", text).click(function(e) { + e.preventDefault(); + if ($(this).css("overflow") == "hidden" || $(this).hasClass('showing')) { + $(this).toggleClass("showing"); + } + }); + +} +loaded_text("#book-text"); + + +})})(jQuery); diff --git a/src/wolnelektury/static/js/book_text/note.js b/src/wolnelektury/static/js/book_text/note.js new file mode 100644 index 000000000..2f0feaaea --- /dev/null +++ b/src/wolnelektury/static/js/book_text/note.js @@ -0,0 +1,10 @@ +(function($){$(function(){ + + +if ($('#nota_red li').length > 0) { + $("#menu-nota_red").show(); +} + + + +})})(jQuery); diff --git a/src/wolnelektury/static/js/book_text/settings.js b/src/wolnelektury/static/js/book_text/settings.js new file mode 100644 index 000000000..e398ba3ed --- /dev/null +++ b/src/wolnelektury/static/js/book_text/settings.js @@ -0,0 +1,12 @@ +(function($){$(function(){ + + +$("#menu-settings").show(); + +$(".settings-switch").click(function(e) { + e.preventDefault(); + $("body").toggleClass($(this).attr("data-setting")); +}); + + +})})(jQuery); diff --git a/src/wolnelektury/static/js/book_text/toc.js b/src/wolnelektury/static/js/book_text/toc.js new file mode 100644 index 000000000..31f4e9ffc --- /dev/null +++ b/src/wolnelektury/static/js/book_text/toc.js @@ -0,0 +1,9 @@ +(function($){$(function(){ + + +if ($('#toc li').length > 0) { + $('#menu-toc').show(); +} + + +})})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/ierange-m2.js b/src/wolnelektury/static/js/contrib/ierange-m2.js new file mode 100644 index 000000000..e87738b0c --- /dev/null +++ b/src/wolnelektury/static/js/contrib/ierange-m2.js @@ -0,0 +1,502 @@ +/* + DOM Ranges for Internet Explorer (m2) + + Copyright (c) 2009 Tim Cameron Ryan + Released under the MIT/X License + */ + +/* + Range reference: + http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html + http://mxr.mozilla.org/mozilla-central/source/content/base/src/nsRange.cpp + https://developer.mozilla.org/En/DOM:Range + Selection reference: + http://trac.webkit.org/browser/trunk/WebCore/page/DOMSelection.cpp + TextRange reference: + http://msdn.microsoft.com/en-us/library/ms535872.aspx + Other links: + http://jorgenhorstink.nl/test/javascript/range/range.js + http://jorgenhorstink.nl/2006/07/05/dom-range-implementation-in-ecmascript-completed/ + http://dylanschiemann.com/articles/dom2Range/dom2RangeExamples.html +*/ + +//[TODO] better exception support + +(function () { // sandbox + +/* + DOM functions + */ + +var DOMUtils = { + findChildPosition: function (node) { + for (var i = 0; node = node.previousSibling; i++) + continue; + return i; + }, + isDataNode: function (node) { + return node && node.nodeValue !== null && node.data !== null; + }, + isAncestorOf: function (parent, node) { + return !DOMUtils.isDataNode(parent) && + (parent.contains(DOMUtils.isDataNode(node) ? node.parentNode : node) || + node.parentNode == parent); + }, + isAncestorOrSelf: function (root, node) { + return DOMUtils.isAncestorOf(root, node) || root == node; + }, + findClosestAncestor: function (root, node) { + if (DOMUtils.isAncestorOf(root, node)) + while (node && node.parentNode != root) + node = node.parentNode; + return node; + }, + getNodeLength: function (node) { + return DOMUtils.isDataNode(node) ? node.length : node.childNodes.length; + }, + splitDataNode: function (node, offset) { + if (!DOMUtils.isDataNode(node)) + return false; + var newNode = node.cloneNode(false); + node.deleteData(offset, node.length); + newNode.deleteData(0, offset); + node.parentNode.insertBefore(newNode, node.nextSibling); + } +}; + +/* + Text Range utilities + functions to simplify text range manipulation in ie + */ + +var TextRangeUtils = { + convertToDOMRange: function (textRange, document) { + function adoptBoundary(domRange, textRange, bStart) { + // iterate backwards through parent element to find anchor location + var cursorNode = document.createElement('a'), cursor = textRange.duplicate(); + cursor.collapse(bStart); + var parent = cursor.parentElement(); + do { + parent.insertBefore(cursorNode, cursorNode.previousSibling); + cursor.moveToElementText(cursorNode); + } while (cursor.compareEndPoints(bStart ? 'StartToStart' : 'StartToEnd', textRange) > 0 && cursorNode.previousSibling); + + // when we exceed or meet the cursor, we've found the node + if (cursor.compareEndPoints(bStart ? 'StartToStart' : 'StartToEnd', textRange) == -1 && cursorNode.nextSibling) { + // data node + cursor.setEndPoint(bStart ? 'EndToStart' : 'EndToEnd', textRange); + domRange[bStart ? 'setStart' : 'setEnd'](cursorNode.nextSibling, cursor.text.length); + } else { + // element + domRange[bStart ? 'setStartBefore' : 'setEndBefore'](cursorNode); + } + cursorNode.parentNode.removeChild(cursorNode); + } + + // return a DOM range + var domRange = new DOMRange(document); + adoptBoundary(domRange, textRange, true); + adoptBoundary(domRange, textRange, false); + return domRange; + }, + + convertFromDOMRange: function (domRange) { + function adoptEndPoint(textRange, domRange, bStart) { + // find anchor node and offset + var container = domRange[bStart ? 'startContainer' : 'endContainer']; + var offset = domRange[bStart ? 'startOffset' : 'endOffset'], textOffset = 0; + var anchorNode = DOMUtils.isDataNode(container) ? container : container.childNodes[offset]; + var anchorParent = DOMUtils.isDataNode(container) ? container.parentNode : container; + // visible data nodes need a text offset + if (container.nodeType == 3 || container.nodeType == 4) + textOffset = offset; + + // create a cursor element node to position range (since we can't select text nodes) + var cursorNode = domRange._document.createElement('a'); + anchorParent.insertBefore(cursorNode, anchorNode); + var cursor = domRange._document.body.createTextRange(); + cursor.moveToElementText(cursorNode); + cursorNode.parentNode.removeChild(cursorNode); + // move range + textRange.setEndPoint(bStart ? 'StartToStart' : 'EndToStart', cursor); + textRange[bStart ? 'moveStart' : 'moveEnd']('character', textOffset); + } + + // return an IE text range + var textRange = domRange._document.body.createTextRange(); + adoptEndPoint(textRange, domRange, true); + adoptEndPoint(textRange, domRange, false); + return textRange; + } +}; + +/* + DOM Range + */ + +function DOMRange(document) { + // save document parameter + this._document = document; + + // initialize range +//[TODO] this should be located at document[0], document[0] + this.startContainer = this.endContainer = document.body; + this.endOffset = DOMUtils.getNodeLength(document.body); +} +DOMRange.START_TO_START = 0; +DOMRange.START_TO_END = 1; +DOMRange.END_TO_END = 2; +DOMRange.END_TO_START = 3; + +DOMRange.prototype = { + // public properties + startContainer: null, + startOffset: 0, + endContainer: null, + endOffset: 0, + commonAncestorContainer: null, + collapsed: false, + // private properties + _document: null, + + // private methods + _refreshProperties: function () { + // collapsed attribute + this.collapsed = (this.startContainer == this.endContainer && this.startOffset == this.endOffset); + // find common ancestor + var node = this.startContainer; + while (node && node != this.endContainer && !DOMUtils.isAncestorOf(node, this.endContainer)) + node = node.parentNode; + this.commonAncestorContainer = node; + }, + + // range methods +//[TODO] collapse if start is after end, end is before start + setStart: function(container, offset) { + this.startContainer = container; + this.startOffset = offset; + this._refreshProperties(); + }, + setEnd: function(container, offset) { + this.endContainer = container; + this.endOffset = offset; + this._refreshProperties(); + }, + setStartBefore: function (refNode) { + // set start to beore this node + this.setStart(refNode.parentNode, DOMUtils.findChildPosition(refNode)); + }, + setStartAfter: function (refNode) { + // select next sibling + this.setStart(refNode.parentNode, DOMUtils.findChildPosition(refNode) + 1); + }, + setEndBefore: function (refNode) { + // set end to beore this node + this.setEnd(refNode.parentNode, DOMUtils.findChildPosition(refNode)); + }, + setEndAfter: function (refNode) { + // select next sibling + this.setEnd(refNode.parentNode, DOMUtils.findChildPosition(refNode) + 1); + }, + selectNode: function (refNode) { + this.setStartBefore(refNode); + this.setEndAfter(refNode); + }, + selectNodeContents: function (refNode) { + this.setStart(refNode, 0); + this.setEnd(refNode, DOMUtils.getNodeLength(refNode)); + }, + collapse: function (toStart) { + if (toStart) + this.setEnd(this.startContainer, this.startOffset); + else + this.setStart(this.endContainer, this.endOffset); + }, + + // editing methods + cloneContents: function () { + // clone subtree + return (function cloneSubtree(iterator) { + for (var node, frag = document.createDocumentFragment(); node = iterator.next(); ) { + node = node.cloneNode(!iterator.hasPartialSubtree()); + if (iterator.hasPartialSubtree()) + node.appendChild(cloneSubtree(iterator.getSubtreeIterator())); + frag.appendChild(node); + } + return frag; + })(new RangeIterator(this)); + }, + extractContents: function () { + // cache range and move anchor points + var range = this.cloneRange(); + if (this.startContainer != this.commonAncestorContainer) + this.setStartAfter(DOMUtils.findClosestAncestor(this.commonAncestorContainer, this.startContainer)); + this.collapse(true); + // extract range + return (function extractSubtree(iterator) { + for (var node, frag = document.createDocumentFragment(); node = iterator.next(); ) { + iterator.hasPartialSubtree() ? node = node.cloneNode(false) : iterator.remove(); + if (iterator.hasPartialSubtree()) + node.appendChild(extractSubtree(iterator.getSubtreeIterator())); + frag.appendChild(node); + } + return frag; + })(new RangeIterator(range)); + }, + deleteContents: function () { + // cache range and move anchor points + var range = this.cloneRange(); + if (this.startContainer != this.commonAncestorContainer) + this.setStartAfter(DOMUtils.findClosestAncestor(this.commonAncestorContainer, this.startContainer)); + this.collapse(true); + // delete range + (function deleteSubtree(iterator) { + while (iterator.next()) + iterator.hasPartialSubtree() ? deleteSubtree(iterator.getSubtreeIterator()) : iterator.remove(); + })(new RangeIterator(range)); + }, + insertNode: function (newNode) { + // set original anchor and insert node + if (DOMUtils.isDataNode(this.startContainer)) { + DOMUtils.splitDataNode(this.startContainer, this.startOffset); + this.startContainer.parentNode.insertBefore(newNode, this.startContainer.nextSibling); + } else { + this.startContainer.insertBefore(newNode, this.startContainer.childNodes[this.startOffset]); + } + // resync start anchor + this.setStart(this.startContainer, this.startOffset); + }, + surroundContents: function (newNode) { + // extract and surround contents + var content = this.extractContents(); + this.insertNode(newNode); + newNode.appendChild(content); + this.selectNode(newNode); + }, + + // other methods + compareBoundaryPoints: function (how, sourceRange) { + // get anchors + var containerA, offsetA, containerB, offsetB; + switch (how) { + case DOMRange.START_TO_START: + case DOMRange.START_TO_END: + containerA = this.startContainer; + offsetA = this.startOffset; + break; + case DOMRange.END_TO_END: + case DOMRange.END_TO_START: + containerA = this.endContainer; + offsetA = this.endOffset; + break; + } + switch (how) { + case DOMRange.START_TO_START: + case DOMRange.END_TO_START: + containerB = sourceRange.startContainer; + offsetB = sourceRange.startOffset; + break; + case DOMRange.START_TO_END: + case DOMRange.END_TO_END: + containerB = sourceRange.endContainer; + offsetB = sourceRange.endOffset; + break; + } + + // compare + return containerA.sourceIndex < containerB.sourceIndex ? -1 : + containerA.sourceIndex == containerB.sourceIndex ? + offsetA < offsetB ? -1 : offsetA == offsetB ? 0 : 1 + : 1; + }, + cloneRange: function () { + // return cloned range + var range = new DOMRange(this._document); + range.setStart(this.startContainer, this.startOffset); + range.setEnd(this.endContainer, this.endOffset); + return range; + }, + detach: function () { +//[TODO] Releases Range from use to improve performance. + }, + toString: function () { + return TextRangeUtils.convertFromDOMRange(this).text; + }, + createContextualFragment: function (tagString) { + // parse the tag string in a context node + var content = (DOMUtils.isDataNode(this.startContainer) ? this.startContainer.parentNode : this.startContainer).cloneNode(false); + content.innerHTML = tagString; + // return a document fragment from the created node + for (var fragment = this._document.createDocumentFragment(); content.firstChild; ) + fragment.appendChild(content.firstChild); + return fragment; + } +}; + +/* + Range iterator + */ + +function RangeIterator(range) { + this.range = range; + if (range.collapsed) + return; + +//[TODO] ensure this works + // get anchors + var root = range.commonAncestorContainer; + this._next = range.startContainer == root && !DOMUtils.isDataNode(range.startContainer) ? + range.startContainer.childNodes[range.startOffset] : + DOMUtils.findClosestAncestor(root, range.startContainer); + this._end = range.endContainer == root && !DOMUtils.isDataNode(range.endContainer) ? + range.endContainer.childNodes[range.endOffset] : + DOMUtils.findClosestAncestor(root, range.endContainer).nextSibling; +} + +RangeIterator.prototype = { + // public properties + range: null, + // private properties + _current: null, + _next: null, + _end: null, + + // public methods + hasNext: function () { + return !!this._next; + }, + next: function () { + // move to next node + var current = this._current = this._next; + this._next = this._current && this._current.nextSibling != this._end ? + this._current.nextSibling : null; + + // check for partial text nodes + if (DOMUtils.isDataNode(this._current)) { + if (this.range.endContainer == this._current) + (current = current.cloneNode(true)).deleteData(this.range.endOffset, current.length - this.range.endOffset); + if (this.range.startContainer == this._current) + (current = current.cloneNode(true)).deleteData(0, this.range.startOffset); + } + return current; + }, + remove: function () { + // check for partial text nodes + if (DOMUtils.isDataNode(this._current) && + (this.range.startContainer == this._current || this.range.endContainer == this._current)) { + var start = this.range.startContainer == this._current ? this.range.startOffset : 0; + var end = this.range.endContainer == this._current ? this.range.endOffset : this._current.length; + this._current.deleteData(start, end - start); + } else + this._current.parentNode.removeChild(this._current); + }, + hasPartialSubtree: function () { + // check if this node be partially selected + return !DOMUtils.isDataNode(this._current) && + (DOMUtils.isAncestorOrSelf(this._current, this.range.startContainer) || + DOMUtils.isAncestorOrSelf(this._current, this.range.endContainer)); + }, + getSubtreeIterator: function () { + // create a new range + var subRange = new DOMRange(this.range._document); + subRange.selectNodeContents(this._current); + // handle anchor points + if (DOMUtils.isAncestorOrSelf(this._current, this.range.startContainer)) + subRange.setStart(this.range.startContainer, this.range.startOffset); + if (DOMUtils.isAncestorOrSelf(this._current, this.range.endContainer)) + subRange.setEnd(this.range.endContainer, this.range.endOffset); + // return iterator + return new RangeIterator(subRange); + } +}; + +/* + DOM Selection + */ + +//[NOTE] This is a very shallow implementation of the Selection object, based on Webkit's +// implementation and without redundant features. Complete selection manipulation is still +// possible with just removeAllRanges/addRange/getRangeAt. + +function DOMSelection(document) { + // save document parameter + this._document = document; + + // add DOM selection handler + var selection = this; + document.attachEvent('onselectionchange', function () { selection._selectionChangeHandler(); }); +} + +DOMSelection.prototype = { + // public properties + rangeCount: 0, + // private properties + _document: null, + + // private methods + _selectionChangeHandler: function () { + // check if there exists a range + this.rangeCount = this._selectionExists(this._document.selection.createRange()) ? 1 : 0; + }, + _selectionExists: function (textRange) { + // checks if a created text range exists or is an editable cursor + return textRange.compareEndPoints('StartToEnd', textRange) != 0 || + textRange.parentElement().isContentEditable; + }, + + // public methods + addRange: function (range) { + // add range or combine with existing range + var selection = this._document.selection.createRange(), textRange = TextRangeUtils.convertFromDOMRange(range); + if (!this._selectionExists(selection)) + { + // select range + textRange.select(); + } + else + { + // only modify range if it intersects with current range + if (textRange.compareEndPoints('StartToStart', selection) == -1) + if (textRange.compareEndPoints('StartToEnd', selection) > -1 && + textRange.compareEndPoints('EndToEnd', selection) == -1) + selection.setEndPoint('StartToStart', textRange); + else + if (textRange.compareEndPoints('EndToStart', selection) < 1 && + textRange.compareEndPoints('EndToEnd', selection) > -1) + selection.setEndPoint('EndToEnd', textRange); + selection.select(); + } + }, + removeAllRanges: function () { + // remove all ranges + this._document.selection.empty(); + }, + getRangeAt: function (index) { + // return any existing selection, or a cursor position in content editable mode + var textRange = this._document.selection.createRange(); + if (this._selectionExists(textRange)) + return TextRangeUtils.convertToDOMRange(textRange, this._document); + return null; + }, + toString: function () { + // get selection text + return this._document.selection.createRange().text; + } +}; + +/* + scripting hooks + */ + +document.createRange = function () { + return new DOMRange(document); +}; + +var selection = new DOMSelection(document); +window.getSelection = function () { + return selection; +}; + +//[TODO] expose DOMRange/DOMSelection to window.? + +})(); diff --git a/src/wolnelektury/static/js/contrib/jquery-ui-1.8.16.custom.min.js b/src/wolnelektury/static/js/contrib/jquery-ui-1.8.16.custom.min.js new file mode 100644 index 000000000..a9c6fa316 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery-ui-1.8.16.custom.min.js @@ -0,0 +1,149 @@ +/*! + * jQuery UI 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.16", +keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({propAttr:c.fn.prop||c.fn.attr,_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d= +this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this, +"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart": +"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight, +outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a, +"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&& +a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted= +false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); +;/* + * jQuery UI Position 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Position + */ +(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY, +left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+= +k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-= +m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left= +d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+= +a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b), +g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery); +;/* + * jQuery UI Draggable 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Draggables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== +"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b= +this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;if(b.iframeFix)d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('
                            ').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options; +this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}); +this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);return true}, +_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b= +false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration, +10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});d.ui.ddmanager&&d.ui.ddmanager.dragStop(this,a);return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle|| +!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&& +a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent= +this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"), +10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"), +10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[a.containment=="document"?0:d(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a.containment=="document"?0:d(window).scrollTop()-this.offset.relative.top-this.offset.parent.top, +(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!= +"hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"), +10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+ +this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&& +!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.leftg[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.topg[3])?h:!(h-this.offset.click.topg[2])?e:!(e-this.offset.click.left=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e
                          ").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&& +a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"); +d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&& +b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source= +this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length").data("item.autocomplete",b).append(d("").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, +"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery); +(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", +-1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); +this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b, +this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| +this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| +this.first()?":last":":first"))},hasScroll:function(){return this.element.height() 1 && !select.visible() ) { + onChange(0, true); + } + }).bind("search", function() { + // TODO why not just specifying both arguments? + var fn = (arguments.length > 1) ? arguments[1] : null; + function findValueCallback(q, data) { + var result; + if( data && data.length ) { + for (var i=0; i < data.length; i++) { + if( data[i].result.toLowerCase() == q.toLowerCase() ) { + result = data[i]; + break; + } + } + } + if( typeof fn == "function" ) fn(result); + else $input.trigger("result", result && [result.data, result.value]); + } + $.each(trimWords($input.val()), function(i, value) { + request(value, findValueCallback, findValueCallback); + }); + }).bind("flushCache", function() { + cache.flush(); + }).bind("setOptions", function() { + $.extend(options, arguments[1]); + // if we've updated the data, repopulate + if ( "data" in arguments[1] ) + cache.populate(); + }).bind("unautocomplete", function() { + select.unbind(); + $input.unbind(); + $(input.form).unbind(".autocomplete"); + }); + + + function selectCurrent() { + var selected = select.selected(); + if( !selected ) + return false; + + var v = selected.result; + previousValue = v; + + if ( options.multiple ) { + var words = trimWords($input.val()); + if ( words.length > 1 ) { + var seperator = options.multipleSeparator.length; + var cursorAt = $(input).selection().start; + var wordAt, progress = 0; + $.each(words, function(i, word) { + progress += word.length; + if (cursorAt <= progress) { + wordAt = i; + return false; + } + progress += seperator; + }); + words[wordAt] = v; + // TODO this should set the cursor to the right position, but it gets overriden somewhere + //$.Autocompleter.Selection(input, progress + seperator, progress + seperator); + v = words.join( options.multipleSeparator ); + } + v += options.multipleSeparator; + } + + $input.val(v); + hideResultsNow(); + $input.trigger("result", [selected.data, selected.value]); + return true; + } + + function onChange(crap, skipPrevCheck) { + if( lastKeyPressCode == KEY.DEL ) { + select.hide(); + return; + } + + var currentValue = $input.val(); + + if ( !skipPrevCheck && currentValue == previousValue ) + return; + + previousValue = currentValue; + + currentValue = lastWord(currentValue); + if ( currentValue.length >= options.minChars) { + $input.addClass(options.loadingClass); + if (!options.matchCase) + currentValue = currentValue.toLowerCase(); + request(currentValue, receiveData, hideResultsNow); + } else { + stopLoading(); + select.hide(); + } + }; + + function trimWords(value) { + if (!value) + return [""]; + if (!options.multiple) + return [$.trim(value)]; + return $.map(value.split(options.multipleSeparator), function(word) { + return $.trim(value).length ? $.trim(word) : null; + }); + } + + function lastWord(value) { + if ( !options.multiple ) + return value; + var words = trimWords(value); + if (words.length == 1) + return words[0]; + var cursorAt = $(input).selection().start; + if (cursorAt == value.length) { + words = trimWords(value) + } else { + words = trimWords(value.replace(value.substring(cursorAt), "")); + } + return words[words.length - 1]; + } + + // fills in the input box w/the first match (assumed to be the best match) + // q: the term entered + // sValue: the first matching result + function autoFill(q, sValue){ + // autofill in the complete box w/the first match as long as the user hasn't entered in more data + // if the last user key pressed was backspace, don't autofill + if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) { + // fill in the value (keep the case the user has typed) + $input.val($input.val() + sValue.substring(lastWord(previousValue).length)); + // select the portion of the value not typed by the user (so the next character will erase) + $(input).selection(previousValue.length, previousValue.length + sValue.length); + } + }; + + function hideResults() { + clearTimeout(timeout); + timeout = setTimeout(hideResultsNow, 200); + }; + + function hideResultsNow() { + var wasVisible = select.visible(); + select.hide(); + clearTimeout(timeout); + stopLoading(); + if (options.mustMatch) { + // call search and run callback + $input.search( + function (result){ + // if no value found, clear the input box + if( !result ) { + if (options.multiple) { + var words = trimWords($input.val()).slice(0, -1); + $input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") ); + } + else { + $input.val( "" ); + $input.trigger("result", null); + } + } + } + ); + } + }; + + function receiveData(q, data) { + if ( data && data.length && hasFocus ) { + stopLoading(); + select.display(data, q); + autoFill(q, data[0].value); + select.show(); + } else { + hideResultsNow(); + } + }; + + function request(term, success, failure) { + if (!options.matchCase) + term = term.toLowerCase(); + var data = cache.load(term); + // recieve the cached data + if (data && data.length) { + success(term, data); + // if an AJAX url has been supplied, try loading the data now + } else if( (typeof options.url == "string") && (options.url.length > 0) ){ + + var extraParams = { + timestamp: +new Date() + }; + $.each(options.extraParams, function(key, param) { + extraParams[key] = typeof param == "function" ? param() : param; + }); + + $.ajax({ + // try to leverage ajaxQueue plugin to abort previous requests + mode: "abort", + // limit abortion to this input + port: "autocomplete" + input.name, + dataType: options.dataType, + url: options.url, + data: $.extend({ + q: lastWord(term), + limit: options.max + }, extraParams), + success: function(data) { + var parsed = options.parse && options.parse(data) || parse(data); + cache.add(term, parsed); + success(term, parsed); + } + }); + } else { + // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match + select.emptyList(); + failure(term); + } + }; + + function parse(data) { + var parsed = []; + var rows = data.split("\n"); + for (var i=0; i < rows.length; i++) { + var row = $.trim(rows[i]); + if (row) { + row = row.split("|"); + parsed[parsed.length] = { + data: row, + value: row[0], + result: options.formatResult && options.formatResult(row, row[0]) || row[0] + }; + } + } + return parsed; + }; + + function stopLoading() { + $input.removeClass(options.loadingClass); + }; + +}; + +$.Autocompleter.defaults = { + inputClass: "ac_input", + resultsClass: "ac_results", + loadingClass: "ac_loading", + minChars: 1, + delay: 400, + matchCase: false, + matchSubset: true, + matchContains: false, + cacheLength: 10, + max: 100, + mustMatch: false, + extraParams: {}, + selectFirst: true, + formatItem: function(row) { return row[0]; }, + formatMatch: null, + autoFill: false, + width: 0, + multiple: false, + multipleSeparator: ", ", + regex_escape: function(term) { + term = term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1"); + /* no polish diacritics; should be more locale-aware */ + term = term.replace(/a/g, '[aą]') + .replace(/c/g, '[cć]') + .replace(/e/g, '[eę]') + .replace(/l/g, '[lł]') + .replace(/n/g, '[nń]') + .replace(/o/g, '[oó]') + .replace(/s/g, '[sś]') + .replace(/z/g, '[zźż]'); + return term; + }, + highlight: function(value, term) { + term = $.Autocompleter.defaults.regex_escape(term); + return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "$1"); + }, + scroll: true, + scrollHeight: 180 +}; + +$.Autocompleter.Cache = function(options) { + + var data = {}; + var length = 0; + + function matchSubset(s, sub) { + if (!options.matchCase) + s = s.toLowerCase(); + var i = s.indexOf(sub); + if (options.matchContains == "word"){ + query = $.Autocompleter.defaults.regex_escape(sub.toLowerCase()); + i = s.toLowerCase().search("\\b" + query); + } + if (i == -1) return false; + return i == 0 || options.matchContains; + }; + + function add(q, value) { + if (length > options.cacheLength){ + flush(); + } + if (!data[q]){ + length++; + } + data[q] = value; + } + + function populate(){ + if( !options.data ) return false; + // track the matches + var stMatchSets = {}, + nullData = 0; + + // no url was specified, we need to adjust the cache length to make sure it fits the local data store + if( !options.url ) options.cacheLength = 1; + + // track all options for minChars = 0 + stMatchSets[""] = []; + + // loop through the array and create a lookup structure + for ( var i = 0, ol = options.data.length; i < ol; i++ ) { + var rawValue = options.data[i]; + // if rawValue is a string, make an array otherwise just reference the array + rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue; + + var value = options.formatMatch(rawValue, i+1, options.data.length); + if ( value === false ) + continue; + + var firstChar = value.charAt(0).toLowerCase(); + // if no lookup array for this character exists, look it up now + if( !stMatchSets[firstChar] ) + stMatchSets[firstChar] = []; + + // if the match is a string + var row = { + value: value, + data: rawValue, + result: options.formatResult && options.formatResult(rawValue) || value + }; + + // push the current match into the set list + stMatchSets[firstChar].push(row); + + // keep track of minChars zero items + if ( nullData++ < options.max ) { + stMatchSets[""].push(row); + } + }; + + // add the data items to the cache + $.each(stMatchSets, function(i, value) { + // increase the cache size + options.cacheLength++; + // add to the cache + add(i, value); + }); + } + + // populate any existing data + setTimeout(populate, 25); + + function flush(){ + data = {}; + length = 0; + } + + return { + flush: flush, + add: add, + populate: populate, + load: function(q) { + if (!options.cacheLength || !length) + return null; + /* + * if dealing w/local data and matchContains than we must make sure + * to loop through all the data collections looking for matches + */ + if( !options.url && options.matchContains ){ + // track all matches + var csub = []; + // loop through all the data grids for matches + for( var k in data ){ + // don't search through the stMatchSets[""] (minChars: 0) cache + // this prevents duplicates + if( k.length > 0 ){ + var c = data[k]; + $.each(c, function(i, x) { + // if we've got a match, add it to the array + if (matchSubset(x.value, q)) { + csub.push(x); + } + }); + } + } + return csub; + } else + // if the exact item exists, use it + if (data[q]){ + return data[q]; + } else + if (options.matchSubset) { + for (var i = q.length - 1; i >= options.minChars; i--) { + var c = data[q.substr(0, i)]; + if (c) { + var csub = []; + $.each(c, function(i, x) { + if (matchSubset(x.value, q)) { + csub[csub.length] = x; + } + }); + return csub; + } + } + } + return null; + } + }; +}; + +$.Autocompleter.Select = function (options, input, select, config) { + var CLASSES = { + ACTIVE: "ac_over" + }; + + var listItems, + active = -1, + data, + term = "", + needsInit = true, + element, + list; + + // Create results + function init() { + if (!needsInit) + return; + element = $("
                          ") + .hide() + .addClass(options.resultsClass) + .css("position", "absolute") + .appendTo(document.body); + + list = $("
                            ").appendTo(element).mouseover( function(event) { + if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') { + active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event)); + $(target(event)).addClass(CLASSES.ACTIVE); + } + }).click(function(event) { + $(target(event)).addClass(CLASSES.ACTIVE); + select(); + // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus + input.focus(); + return false; + }).mousedown(function() { + config.mouseDownOnSelect = true; + }).mouseup(function() { + config.mouseDownOnSelect = false; + }); + + if( options.width > 0 ) + element.css("width", options.width); + + needsInit = false; + } + + function target(event) { + var element = event.target; + while(element && element.tagName != "LI") + element = element.parentNode; + // more fun with IE, sometimes event.target is empty, just ignore it then + if(!element) + return []; + return element; + } + + function moveSelect(step) { + listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE); + movePosition(step); + var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE); + if(options.scroll) { + var offset = 0; + listItems.slice(0, active).each(function() { + offset += this.offsetHeight; + }); + if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) { + list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight()); + } else if(offset < list.scrollTop()) { + list.scrollTop(offset); + } + } + }; + + function movePosition(step) { + active += step; + if (active < 0) { + active = listItems.size() - 1; + } else if (active >= listItems.size()) { + active = 0; + } + } + + function limitNumberOfItems(available) { + return options.max && options.max < available + ? options.max + : available; + } + + function fillList() { + list.empty(); + var max = limitNumberOfItems(data.length); + for (var i=0; i < max; i++) { + if (!data[i]) + continue; + var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term); + if ( formatted === false ) + continue; + var li = $("
                          • ").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0]; + $.data(li, "ac_data", data[i]); + } + listItems = list.find("li"); + if ( options.selectFirst ) { + listItems.slice(0, 1).addClass(CLASSES.ACTIVE); + active = 0; + } + // apply bgiframe if available + if ( $.fn.bgiframe ) + list.bgiframe(); + } + + return { + display: function(d, q) { + init(); + data = d; + term = q; + fillList(); + }, + next: function() { + moveSelect(1); + }, + prev: function() { + moveSelect(-1); + }, + pageUp: function() { + if (active != 0 && active - 8 < 0) { + moveSelect( -active ); + } else { + moveSelect(-8); + } + }, + pageDown: function() { + if (active != listItems.size() - 1 && active + 8 > listItems.size()) { + moveSelect( listItems.size() - 1 - active ); + } else { + moveSelect(8); + } + }, + hide: function() { + element && element.hide(); + listItems && listItems.removeClass(CLASSES.ACTIVE); + active = -1; + }, + visible : function() { + return element && element.is(":visible"); + }, + current: function() { + return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]); + }, + show: function() { + var offset = $(input).offset(); + element.css({ + width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(), + top: offset.top + input.offsetHeight, + left: offset.left + }).show(); + if(options.scroll) { + list.scrollTop(0); + list.css({ + maxHeight: options.scrollHeight, + overflow: 'auto' + }); + + if($.browser.msie && typeof document.body.style.maxHeight === "undefined") { + var listHeight = 0; + listItems.each(function() { + listHeight += this.offsetHeight; + }); + var scrollbarsVisible = listHeight > options.scrollHeight; + list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight ); + if (!scrollbarsVisible) { + // IE doesn't recalculate width when scrollbar disappears + listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) ); + } + } + + } + }, + selected: function() { + var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE); + return selected && selected.length && $.data(selected[0], "ac_data"); + }, + emptyList: function (){ + list && list.empty(); + }, + unbind: function() { + element && element.remove(); + } + }; +}; + +$.fn.selection = function(start, end) { + if (start !== undefined) { + return this.each(function() { + if( this.createTextRange ){ + var selRange = this.createTextRange(); + if (end === undefined || start == end) { + selRange.move("character", start); + selRange.select(); + } else { + selRange.collapse(true); + selRange.moveStart("character", start); + selRange.moveEnd("character", end); + selRange.select(); + } + } else if( this.setSelectionRange ){ + this.setSelectionRange(start, end); + } else if( this.selectionStart ){ + this.selectionStart = start; + this.selectionEnd = end; + } + }); + } + var field = this[0]; + if ( field.createTextRange ) { + var range = document.selection.createRange(), + orig = field.value, + teststring = "<->", + textLength = range.text.length; + range.text = teststring; + var caretAt = field.value.indexOf(teststring); + field.value = orig; + this.selection(caretAt, caretAt + textLength); + return { + start: caretAt, + end: caretAt + textLength + } + } else if( field.selectionStart !== undefined ){ + return { + start: field.selectionStart, + end: field.selectionEnd + } + } +}; + +})(jQuery); \ No newline at end of file diff --git a/src/wolnelektury/static/js/contrib/jquery.countdown-de.js b/src/wolnelektury/static/js/contrib/jquery.countdown-de.js new file mode 100644 index 000000000..5a3f43d78 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.countdown-de.js @@ -0,0 +1,12 @@ +/* http://keith-wood.name/countdown.html + German initialisation for the jQuery countdown extension + Written by Keith Wood (kbwood@virginbroadband.com.au) Jan 2008. */ +(function($) { + $.countdown.regional['de'] = { + labels: ['Jahren', 'Monate', 'Wochen', 'Tage', 'Stunden', 'Minuten', 'Sekunden'], + labels1: ['Jahre', 'Monat', 'Woche', 'Tag', 'Stunde', 'Minute', 'Sekunde'], + compactLabels: ['J', 'M', 'W', 'T'], + whichLabels: null, + timeSeparator: ':', isRTL: false}; + $.countdown.setDefaults($.countdown.regional['de']); +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.countdown-es.js b/src/wolnelektury/static/js/contrib/jquery.countdown-es.js new file mode 100644 index 000000000..362f58c7d --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.countdown-es.js @@ -0,0 +1,12 @@ +/* http://keith-wood.name/countdown.html + * Spanish initialisation for the jQuery countdown extension + * Written by Sergio Carracedo Martinez webmaster@neodisenoweb.com (2008) */ +(function($) { + $.countdown.regional['es'] = { + labels: ['Años', 'Meses', 'Semanas', 'Dias', 'Horas', 'Minutos', 'Segundos'], + labels1: ['Años', 'Meses', 'Semanas', 'Dias', 'Horas', 'Minutos', 'Segundos'], + compactLabels: ['a', 'm', 's', 'g'], + whichLabels: null, + timeSeparator: ':', isRTL: false}; + $.countdown.setDefaults($.countdown.regional['es']); +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.countdown-fr.js b/src/wolnelektury/static/js/contrib/jquery.countdown-fr.js new file mode 100644 index 000000000..70e17def7 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.countdown-fr.js @@ -0,0 +1,12 @@ +/* http://keith-wood.name/countdown.html + French initialisation for the jQuery countdown extension + Written by Keith Wood (kbwood{at}iinet.com.au) Jan 2008. */ +(function($) { + $.countdown.regional['fr'] = { + labels: ['Années', 'Mois', 'Semaines', 'Jours', 'Heures', 'Minutes', 'Secondes'], + labels1: ['Année', 'Mois', 'Semaine', 'Jour', 'Heure', 'Minute', 'Seconde'], + compactLabels: ['a', 'm', 's', 'j'], + whichLabels: null, + timeSeparator: ':', isRTL: false}; + $.countdown.setDefaults($.countdown.regional['fr']); +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.countdown-lt.js b/src/wolnelektury/static/js/contrib/jquery.countdown-lt.js new file mode 100644 index 000000000..ee11c71c5 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.countdown-lt.js @@ -0,0 +1,12 @@ +/* http://keith-wood.name/countdown.html + * Lithuanian localisation for the jQuery countdown extension + * Written by Moacir P. de Sá Pereira (moacir{at}gmail.com) (2009) */ +(function($) { + $.countdown.regional['lt'] = { + labels: ['Metų', 'Mėnesių', 'Savaičių', 'Dienų', 'Valandų', 'Minučių', 'Sekundžių'], + labels1: ['Metai', 'Mėnuo', 'Savaitė', 'Diena', 'Valanda', 'Minutė', 'Sekundė'], + compactLabels: ['m', 'm', 's', 'd'], + whichLabels: null, + timeSeparator: ':', isRTL: false}; + $.countdown.setDefaults($.countdown.regional['lt']); +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.countdown-pl.js b/src/wolnelektury/static/js/contrib/jquery.countdown-pl.js new file mode 100644 index 000000000..6860a4bab --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.countdown-pl.js @@ -0,0 +1,17 @@ +/* http://keith-wood.name/countdown.html + * Polish initialisation for the jQuery countdown extension + * Written by Pawel Lewtak lewtak@gmail.com (2008) */ +(function($) { + $.countdown.regional['pl'] = { + labels: ['lat', 'miesięcy', 'tygodni', 'dni', 'godzin', 'minut', 'sekund'], + labels1: ['rok', 'miesiąc', 'tydzień', 'dzień', 'godzina', 'minuta', 'sekunda'], + labels2: ['lata', 'miesiące', 'tygodnie', 'dni', 'godziny', 'minuty', 'sekundy'], + compactLabels: ['l', 'm', 't', 'd'], compactLabels1: ['r', 'm', 't', 'd'], + whichLabels: function(amount) { + var units = amount % 10; + var tens = Math.floor((amount % 100) / 10); + return (amount == 1 ? 1 : (units >= 2 && units <= 4 && tens != 1 ? 2 : 0)); + }, + timeSeparator: ':', isRTL: false}; + $.countdown.setDefaults($.countdown.regional['pl']); +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.countdown-ru.js b/src/wolnelektury/static/js/contrib/jquery.countdown-ru.js new file mode 100644 index 000000000..badd3eb01 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.countdown-ru.js @@ -0,0 +1,12 @@ +/* http://keith-wood.name/countdown.html + * Russian initialisation for the jQuery countdown extension + * Written by Dominus i3rixon@gmail.com (2008) */ +(function($) { + $.countdown.regional['ru'] = { + labels: ['Лет', 'Месяцев', 'Недель', 'Дней', 'Часов', 'Минут', 'Секунд'], + labels1: ['Год', 'Месяц', 'Неделя', 'День', 'Час', 'Минута', 'Секунда'], + compactLabels: ['l', 'm', 'n', 'd'], compactLabels1: ['g', 'm', 'n', 'd'], + whichLabels: null, + timeSeparator: ':', isRTL: false}; + $.countdown.setDefaults($.countdown.regional['ru']); +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.countdown-uk.js b/src/wolnelektury/static/js/contrib/jquery.countdown-uk.js new file mode 100644 index 000000000..c98791e53 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.countdown-uk.js @@ -0,0 +1,12 @@ +/* http://keith-wood.name/countdown.html + * Ukrainian initialisation for the jQuery countdown extension + * Written by Goloborodko M misha.gm@gmail.com (2009) */ +(function($) { + $.countdown.regional['uk'] = { + labels: ['Років', 'Місяців', 'Тижднів', 'Днів', 'Годин', 'Хвилин', 'Секунд'], + labels1: ['Рік', 'Місяць', 'Тиждень', 'День', 'Година', 'Хвилина', 'Секунда'], + compactLabels: ['r', 'm', 't', 'd'], + whichLabels: null, + timeSeparator: ':', isRTL: false}; + $.countdown.setDefaults($.countdown.regional['uk']); +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.countdown.js b/src/wolnelektury/static/js/contrib/jquery.countdown.js new file mode 100644 index 000000000..f9c58d370 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.countdown.js @@ -0,0 +1,759 @@ +/* http://keith-wood.name/countdown.html + Countdown for jQuery v1.5.8. + Written by Keith Wood (kbwood{at}iinet.com.au) January 2008. + Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and + MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. + Please attribute the author if you use it. */ + +/* Display a countdown timer. + Attach it with options like: + $('div selector').countdown( + {until: new Date(2009, 1 - 1, 1, 0, 0, 0), onExpiry: happyNewYear}); */ + +(function($) { // Hide scope, no $ conflict + +/* Countdown manager. */ +function Countdown() { + this.regional = []; // Available regional settings, indexed by language code + this.regional[''] = { // Default regional settings + // The display texts for the counters + labels: ['Years', 'Months', 'Weeks', 'Days', 'Hours', 'Minutes', 'Seconds'], + // The display texts for the counters if only one + labels1: ['Year', 'Month', 'Week', 'Day', 'Hour', 'Minute', 'Second'], + compactLabels: ['y', 'm', 'w', 'd'], // The compact texts for the counters + whichLabels: null, // Function to determine which labels to use + timeSeparator: ':', // Separator for time periods + isRTL: false // True for right-to-left languages, false for left-to-right + }; + this._defaults = { + until: null, // new Date(year, mth - 1, day, hr, min, sec) - date/time to count down to + // or numeric for seconds offset, or string for unit offset(s): + // 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds + since: null, // new Date(year, mth - 1, day, hr, min, sec) - date/time to count up from + // or numeric for seconds offset, or string for unit offset(s): + // 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds + timezone: null, // The timezone (hours or minutes from GMT) for the target times, + // or null for client local + serverSync: null, // A function to retrieve the current server time for synchronisation + format: 'dHMS', // Format for display - upper case for always, lower case only if non-zero, + // 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds + layout: '', // Build your own layout for the countdown + compact: false, // True to display in a compact format, false for an expanded one + significant: 0, // The number of periods with values to show, zero for all + description: '', // The description displayed for the countdown + expiryUrl: '', // A URL to load upon expiry, replacing the current page + expiryText: '', // Text to display upon expiry, replacing the countdown + alwaysExpire: false, // True to trigger onExpiry even if never counted down + onExpiry: null, // Callback when the countdown expires - + // receives no parameters and 'this' is the containing division + onTick: null, // Callback when the countdown is updated - + // receives int[7] being the breakdown by period (based on format) + // and 'this' is the containing division + tickInterval: 1 // Interval (seconds) between onTick callbacks + }; + $.extend(this._defaults, this.regional['']); + this._serverSyncs = []; +} + +var PROP_NAME = 'countdown'; + +var Y = 0; // Years +var O = 1; // Months +var W = 2; // Weeks +var D = 3; // Days +var H = 4; // Hours +var M = 5; // Minutes +var S = 6; // Seconds + +$.extend(Countdown.prototype, { + /* Class name added to elements to indicate already configured with countdown. */ + markerClassName: 'hasCountdown', + + /* Shared timer for all countdowns. */ + _timer: setInterval(function() { $.countdown._updateTargets(); }, 980), + /* List of currently active countdown targets. */ + _timerTargets: [], + + /* Override the default settings for all instances of the countdown widget. + @param options (object) the new settings to use as defaults */ + setDefaults: function(options) { + this._resetExtraLabels(this._defaults, options); + extendRemove(this._defaults, options || {}); + }, + + /* Convert a date/time to UTC. + @param tz (number) the hour or minute offset from GMT, e.g. +9, -360 + @param year (Date) the date/time in that timezone or + (number) the year in that timezone + @param month (number, optional) the month (0 - 11) (omit if year is a Date) + @param day (number, optional) the day (omit if year is a Date) + @param hours (number, optional) the hour (omit if year is a Date) + @param mins (number, optional) the minute (omit if year is a Date) + @param secs (number, optional) the second (omit if year is a Date) + @param ms (number, optional) the millisecond (omit if year is a Date) + @return (Date) the equivalent UTC date/time */ + UTCDate: function(tz, year, month, day, hours, mins, secs, ms) { + if (typeof year == 'object' && year.constructor == Date) { + ms = year.getMilliseconds(); + secs = year.getSeconds(); + mins = year.getMinutes(); + hours = year.getHours(); + day = year.getDate(); + month = year.getMonth(); + year = year.getFullYear(); + } + var d = new Date(); + d.setUTCFullYear(year); + d.setUTCDate(1); + d.setUTCMonth(month || 0); + d.setUTCDate(day || 1); + d.setUTCHours(hours || 0); + d.setUTCMinutes((mins || 0) - (Math.abs(tz) < 30 ? tz * 60 : tz)); + d.setUTCSeconds(secs || 0); + d.setUTCMilliseconds(ms || 0); + return d; + }, + + /* Convert a set of periods into seconds. + Averaged for months and years. + @param periods (number[7]) the periods per year/month/week/day/hour/minute/second + @return (number) the corresponding number of seconds */ + periodsToSeconds: function(periods) { + return periods[0] * 31557600 + periods[1] * 2629800 + periods[2] * 604800 + + periods[3] * 86400 + periods[4] * 3600 + periods[5] * 60 + periods[6]; + }, + + /* Retrieve one or more settings values. + @param name (string, optional) the name of the setting to retrieve + or 'all' for all instance settings or omit for all default settings + @return (any) the requested setting(s) */ + _settingsCountdown: function(target, name) { + if (!name) { + return $.countdown._defaults; + } + var inst = $.data(target, PROP_NAME); + return (name == 'all' ? inst.options : inst.options[name]); + }, + + /* Attach the countdown widget to a div. + @param target (element) the containing division + @param options (object) the initial settings for the countdown */ + _attachCountdown: function(target, options) { + var $target = $(target); + if ($target.hasClass(this.markerClassName)) { + return; + } + $target.addClass(this.markerClassName); + var inst = {options: $.extend({}, options), + _periods: [0, 0, 0, 0, 0, 0, 0]}; + $.data(target, PROP_NAME, inst); + this._changeCountdown(target); + }, + + /* Add a target to the list of active ones. + @param target (element) the countdown target */ + _addTarget: function(target) { + if (!this._hasTarget(target)) { + this._timerTargets.push(target); + } + }, + + /* See if a target is in the list of active ones. + @param target (element) the countdown target + @return (boolean) true if present, false if not */ + _hasTarget: function(target) { + return ($.inArray(target, this._timerTargets) > -1); + }, + + /* Remove a target from the list of active ones. + @param target (element) the countdown target */ + _removeTarget: function(target) { + this._timerTargets = $.map(this._timerTargets, + function(value) { return (value == target ? null : value); }); // delete entry + }, + + /* Update each active timer target. */ + _updateTargets: function() { + for (var i = this._timerTargets.length - 1; i >= 0; i--) { + this._updateCountdown(this._timerTargets[i]); + } + }, + + /* Redisplay the countdown with an updated display. + @param target (jQuery) the containing division + @param inst (object) the current settings for this instance */ + _updateCountdown: function(target, inst) { + var $target = $(target); + inst = inst || $.data(target, PROP_NAME); + if (!inst) { + return; + } + $target.html(this._generateHTML(inst)); + $target[(this._get(inst, 'isRTL') ? 'add' : 'remove') + 'Class']('countdown_rtl'); + var onTick = this._get(inst, 'onTick'); + if (onTick) { + var periods = inst._hold != 'lap' ? inst._periods : + this._calculatePeriods(inst, inst._show, this._get(inst, 'significant'), new Date()); + var tickInterval = this._get(inst, 'tickInterval'); + if (tickInterval == 1 || this.periodsToSeconds(periods) % tickInterval == 0) { + onTick.apply(target, [periods]); + } + } + var expired = inst._hold != 'pause' && + (inst._since ? inst._now.getTime() < inst._since.getTime() : + inst._now.getTime() >= inst._until.getTime()); + if (expired && !inst._expiring) { + inst._expiring = true; + if (this._hasTarget(target) || this._get(inst, 'alwaysExpire')) { + this._removeTarget(target); + var onExpiry = this._get(inst, 'onExpiry'); + if (onExpiry) { + onExpiry.apply(target, []); + } + var expiryText = this._get(inst, 'expiryText'); + if (expiryText) { + var layout = this._get(inst, 'layout'); + inst.options.layout = expiryText; + this._updateCountdown(target, inst); + inst.options.layout = layout; + } + var expiryUrl = this._get(inst, 'expiryUrl'); + if (expiryUrl) { + window.location = expiryUrl; + } + } + inst._expiring = false; + } + else if (inst._hold == 'pause') { + this._removeTarget(target); + } + $.data(target, PROP_NAME, inst); + }, + + /* Reconfigure the settings for a countdown div. + @param target (element) the containing division + @param options (object) the new settings for the countdown or + (string) an individual property name + @param value (any) the individual property value + (omit if options is an object) */ + _changeCountdown: function(target, options, value) { + options = options || {}; + if (typeof options == 'string') { + var name = options; + options = {}; + options[name] = value; + } + var inst = $.data(target, PROP_NAME); + if (inst) { + this._resetExtraLabels(inst.options, options); + extendRemove(inst.options, options); + this._adjustSettings(target, inst); + $.data(target, PROP_NAME, inst); + var now = new Date(); + if ((inst._since && inst._since < now) || + (inst._until && inst._until > now)) { + this._addTarget(target); + } + this._updateCountdown(target, inst); + } + }, + + /* Reset any extra labelsn and compactLabelsn entries if changing labels. + @param base (object) the options to be updated + @param options (object) the new option values */ + _resetExtraLabels: function(base, options) { + var changingLabels = false; + for (var n in options) { + if (n != 'whichLabels' && n.match(/[Ll]abels/)) { + changingLabels = true; + break; + } + } + if (changingLabels) { + for (var n in base) { // Remove custom numbered labels + if (n.match(/[Ll]abels[0-9]/)) { + base[n] = null; + } + } + } + }, + + /* Calculate interal settings for an instance. + @param target (element) the containing division + @param inst (object) the current settings for this instance */ + _adjustSettings: function(target, inst) { + var now; + var serverSync = this._get(inst, 'serverSync'); + var serverOffset = 0; + var serverEntry = null; + for (var i = 0; i < this._serverSyncs.length; i++) { + if (this._serverSyncs[i][0] == serverSync) { + serverEntry = this._serverSyncs[i][1]; + break; + } + } + if (serverEntry != null) { + serverOffset = (serverSync ? serverEntry : 0); + now = new Date(); + } + else { + var serverResult = (serverSync ? serverSync.apply(target, []) : null); + now = new Date(); + serverOffset = (serverResult ? now.getTime() - serverResult.getTime() : 0); + this._serverSyncs.push([serverSync, serverOffset]); + } + var timezone = this._get(inst, 'timezone'); + timezone = (timezone == null ? -now.getTimezoneOffset() : timezone); + inst._since = this._get(inst, 'since'); + if (inst._since != null) { + inst._since = this.UTCDate(timezone, this._determineTime(inst._since, null)); + if (inst._since && serverOffset) { + inst._since.setMilliseconds(inst._since.getMilliseconds() + serverOffset); + } + } + inst._until = this.UTCDate(timezone, this._determineTime(this._get(inst, 'until'), now)); + if (serverOffset) { + inst._until.setMilliseconds(inst._until.getMilliseconds() + serverOffset); + } + inst._show = this._determineShow(inst); + }, + + /* Remove the countdown widget from a div. + @param target (element) the containing division */ + _destroyCountdown: function(target) { + var $target = $(target); + if (!$target.hasClass(this.markerClassName)) { + return; + } + this._removeTarget(target); + $target.removeClass(this.markerClassName).empty(); + $.removeData(target, PROP_NAME); + }, + + /* Pause a countdown widget at the current time. + Stop it running but remember and display the current time. + @param target (element) the containing division */ + _pauseCountdown: function(target) { + this._hold(target, 'pause'); + }, + + /* Pause a countdown widget at the current time. + Stop the display but keep the countdown running. + @param target (element) the containing division */ + _lapCountdown: function(target) { + this._hold(target, 'lap'); + }, + + /* Resume a paused countdown widget. + @param target (element) the containing division */ + _resumeCountdown: function(target) { + this._hold(target, null); + }, + + /* Pause or resume a countdown widget. + @param target (element) the containing division + @param hold (string) the new hold setting */ + _hold: function(target, hold) { + var inst = $.data(target, PROP_NAME); + if (inst) { + if (inst._hold == 'pause' && !hold) { + inst._periods = inst._savePeriods; + var sign = (inst._since ? '-' : '+'); + inst[inst._since ? '_since' : '_until'] = + this._determineTime(sign + inst._periods[0] + 'y' + + sign + inst._periods[1] + 'o' + sign + inst._periods[2] + 'w' + + sign + inst._periods[3] + 'd' + sign + inst._periods[4] + 'h' + + sign + inst._periods[5] + 'm' + sign + inst._periods[6] + 's'); + this._addTarget(target); + } + inst._hold = hold; + inst._savePeriods = (hold == 'pause' ? inst._periods : null); + $.data(target, PROP_NAME, inst); + this._updateCountdown(target, inst); + } + }, + + /* Return the current time periods. + @param target (element) the containing division + @return (number[7]) the current periods for the countdown */ + _getTimesCountdown: function(target) { + var inst = $.data(target, PROP_NAME); + return (!inst ? null : (!inst._hold ? inst._periods : + this._calculatePeriods(inst, inst._show, this._get(inst, 'significant'), new Date()))); + }, + + /* Get a setting value, defaulting if necessary. + @param inst (object) the current settings for this instance + @param name (string) the name of the required setting + @return (any) the setting's value or a default if not overridden */ + _get: function(inst, name) { + return (inst.options[name] != null ? + inst.options[name] : $.countdown._defaults[name]); + }, + + /* A time may be specified as an exact value or a relative one. + @param setting (string or number or Date) - the date/time value + as a relative or absolute value + @param defaultTime (Date) the date/time to use if no other is supplied + @return (Date) the corresponding date/time */ + _determineTime: function(setting, defaultTime) { + var offsetNumeric = function(offset) { // e.g. +300, -2 + var time = new Date(); + time.setTime(time.getTime() + offset * 1000); + return time; + }; + var offsetString = function(offset) { // e.g. '+2d', '-4w', '+3h +30m' + offset = offset.toLowerCase(); + var time = new Date(); + var year = time.getFullYear(); + var month = time.getMonth(); + var day = time.getDate(); + var hour = time.getHours(); + var minute = time.getMinutes(); + var second = time.getSeconds(); + var pattern = /([+-]?[0-9]+)\s*(s|m|h|d|w|o|y)?/g; + var matches = pattern.exec(offset); + while (matches) { + switch (matches[2] || 's') { + case 's': second += parseInt(matches[1], 10); break; + case 'm': minute += parseInt(matches[1], 10); break; + case 'h': hour += parseInt(matches[1], 10); break; + case 'd': day += parseInt(matches[1], 10); break; + case 'w': day += parseInt(matches[1], 10) * 7; break; + case 'o': + month += parseInt(matches[1], 10); + day = Math.min(day, $.countdown._getDaysInMonth(year, month)); + break; + case 'y': + year += parseInt(matches[1], 10); + day = Math.min(day, $.countdown._getDaysInMonth(year, month)); + break; + } + matches = pattern.exec(offset); + } + return new Date(year, month, day, hour, minute, second, 0); + }; + var time = (setting == null ? defaultTime : + (typeof setting == 'string' ? offsetString(setting) : + (typeof setting == 'number' ? offsetNumeric(setting) : setting))); + if (time) time.setMilliseconds(0); + return time; + }, + + /* Determine the number of days in a month. + @param year (number) the year + @param month (number) the month + @return (number) the days in that month */ + _getDaysInMonth: function(year, month) { + return 32 - new Date(year, month, 32).getDate(); + }, + + /* Determine which set of labels should be used for an amount. + @param num (number) the amount to be displayed + @return (number) the set of labels to be used for this amount */ + _normalLabels: function(num) { + return num; + }, + + /* Generate the HTML to display the countdown widget. + @param inst (object) the current settings for this instance + @return (string) the new HTML for the countdown display */ + _generateHTML: function(inst) { + // Determine what to show + var significant = this._get(inst, 'significant'); + inst._periods = (inst._hold ? inst._periods : + this._calculatePeriods(inst, inst._show, significant, new Date())); + // Show all 'asNeeded' after first non-zero value + var shownNonZero = false; + var showCount = 0; + var sigCount = significant; + var show = $.extend({}, inst._show); + for (var period = Y; period <= S; period++) { + shownNonZero |= (inst._show[period] == '?' && inst._periods[period] > 0); + show[period] = (inst._show[period] == '?' && !shownNonZero ? null : inst._show[period]); + showCount += (show[period] ? 1 : 0); + sigCount -= (inst._periods[period] > 0 ? 1 : 0); + } + var showSignificant = [false, false, false, false, false, false, false]; + for (var period = S; period >= Y; period--) { // Determine significant periods + if (inst._show[period]) { + if (inst._periods[period]) { + showSignificant[period] = true; + } + else { + showSignificant[period] = sigCount > 0; + sigCount--; + } + } + } + var compact = this._get(inst, 'compact'); + var layout = this._get(inst, 'layout'); + var labels = (compact ? this._get(inst, 'compactLabels') : this._get(inst, 'labels')); + var whichLabels = this._get(inst, 'whichLabels') || this._normalLabels; + var timeSeparator = this._get(inst, 'timeSeparator'); + var description = this._get(inst, 'description') || ''; + var showCompact = function(period) { + var labelsNum = $.countdown._get(inst, + 'compactLabels' + whichLabels(inst._periods[period])); + return (show[period] ? inst._periods[period] + + (labelsNum ? labelsNum[period] : labels[period]) + ' ' : ''); + }; + var showFull = function(period) { + var labelsNum = $.countdown._get(inst, 'labels' + whichLabels(inst._periods[period])); + return ((!significant && show[period]) || (significant && showSignificant[period]) ? + '' + + inst._periods[period] + '
                            ' + + (labelsNum ? labelsNum[period] : labels[period]) + '
                            ' : ''); + }; + return (layout ? this._buildLayout(inst, show, layout, compact, significant, showSignificant) : + ((compact ? // Compact version + '' + + showCompact(Y) + showCompact(O) + showCompact(W) + showCompact(D) + + (show[H] ? this._minDigits(inst._periods[H], 2) : '') + + (show[M] ? (show[H] ? timeSeparator : '') + + this._minDigits(inst._periods[M], 2) : '') + + (show[S] ? (show[H] || show[M] ? timeSeparator : '') + + this._minDigits(inst._periods[S], 2) : '') : + // Full version + '' + + showFull(Y) + showFull(O) + showFull(W) + showFull(D) + + showFull(H) + showFull(M) + showFull(S)) + '' + + (description ? '' + description + '' : ''))); + }, + + /* Construct a custom layout. + @param inst (object) the current settings for this instance + @param show (string[7]) flags indicating which periods are requested + @param layout (string) the customised layout + @param compact (boolean) true if using compact labels + @param significant (number) the number of periods with values to show, zero for all + @param showSignificant (boolean[7]) other periods to show for significance + @return (string) the custom HTML */ + _buildLayout: function(inst, show, layout, compact, significant, showSignificant) { + var labels = this._get(inst, (compact ? 'compactLabels' : 'labels')); + var whichLabels = this._get(inst, 'whichLabels') || this._normalLabels; + var labelFor = function(index) { + return ($.countdown._get(inst, + (compact ? 'compactLabels' : 'labels') + whichLabels(inst._periods[index])) || + labels)[index]; + }; + var digit = function(value, position) { + return Math.floor(value / position) % 10; + }; + var subs = {desc: this._get(inst, 'description'), sep: this._get(inst, 'timeSeparator'), + yl: labelFor(Y), yn: inst._periods[Y], ynn: this._minDigits(inst._periods[Y], 2), + ynnn: this._minDigits(inst._periods[Y], 3), y1: digit(inst._periods[Y], 1), + y10: digit(inst._periods[Y], 10), y100: digit(inst._periods[Y], 100), + y1000: digit(inst._periods[Y], 1000), + ol: labelFor(O), on: inst._periods[O], onn: this._minDigits(inst._periods[O], 2), + onnn: this._minDigits(inst._periods[O], 3), o1: digit(inst._periods[O], 1), + o10: digit(inst._periods[O], 10), o100: digit(inst._periods[O], 100), + o1000: digit(inst._periods[O], 1000), + wl: labelFor(W), wn: inst._periods[W], wnn: this._minDigits(inst._periods[W], 2), + wnnn: this._minDigits(inst._periods[W], 3), w1: digit(inst._periods[W], 1), + w10: digit(inst._periods[W], 10), w100: digit(inst._periods[W], 100), + w1000: digit(inst._periods[W], 1000), + dl: labelFor(D), dn: inst._periods[D], dnn: this._minDigits(inst._periods[D], 2), + dnnn: this._minDigits(inst._periods[D], 3), d1: digit(inst._periods[D], 1), + d10: digit(inst._periods[D], 10), d100: digit(inst._periods[D], 100), + d1000: digit(inst._periods[D], 1000), + hl: labelFor(H), hn: inst._periods[H], hnn: this._minDigits(inst._periods[H], 2), + hnnn: this._minDigits(inst._periods[H], 3), h1: digit(inst._periods[H], 1), + h10: digit(inst._periods[H], 10), h100: digit(inst._periods[H], 100), + h1000: digit(inst._periods[H], 1000), + ml: labelFor(M), mn: inst._periods[M], mnn: this._minDigits(inst._periods[M], 2), + mnnn: this._minDigits(inst._periods[M], 3), m1: digit(inst._periods[M], 1), + m10: digit(inst._periods[M], 10), m100: digit(inst._periods[M], 100), + m1000: digit(inst._periods[M], 1000), + sl: labelFor(S), sn: inst._periods[S], snn: this._minDigits(inst._periods[S], 2), + snnn: this._minDigits(inst._periods[S], 3), s1: digit(inst._periods[S], 1), + s10: digit(inst._periods[S], 10), s100: digit(inst._periods[S], 100), + s1000: digit(inst._periods[S], 1000)}; + var html = layout; + // Replace period containers: {p<}...{p>} + for (var i = Y; i <= S; i++) { + var period = 'yowdhms'.charAt(i); + var re = new RegExp('\\{' + period + '<\\}(.*)\\{' + period + '>\\}', 'g'); + html = html.replace(re, ((!significant && show[i]) || + (significant && showSignificant[i]) ? '$1' : '')); + } + // Replace period values: {pn} + $.each(subs, function(n, v) { + var re = new RegExp('\\{' + n + '\\}', 'g'); + html = html.replace(re, v); + }); + return html; + }, + + /* Ensure a numeric value has at least n digits for display. + @param value (number) the value to display + @param len (number) the minimum length + @return (string) the display text */ + _minDigits: function(value, len) { + value = '' + value; + if (value.length >= len) { + return value; + } + value = '0000000000' + value; + return value.substr(value.length - len); + }, + + /* Translate the format into flags for each period. + @param inst (object) the current settings for this instance + @return (string[7]) flags indicating which periods are requested (?) or + required (!) by year, month, week, day, hour, minute, second */ + _determineShow: function(inst) { + var format = this._get(inst, 'format'); + var show = []; + show[Y] = (format.match('y') ? '?' : (format.match('Y') ? '!' : null)); + show[O] = (format.match('o') ? '?' : (format.match('O') ? '!' : null)); + show[W] = (format.match('w') ? '?' : (format.match('W') ? '!' : null)); + show[D] = (format.match('d') ? '?' : (format.match('D') ? '!' : null)); + show[H] = (format.match('h') ? '?' : (format.match('H') ? '!' : null)); + show[M] = (format.match('m') ? '?' : (format.match('M') ? '!' : null)); + show[S] = (format.match('s') ? '?' : (format.match('S') ? '!' : null)); + return show; + }, + + /* Calculate the requested periods between now and the target time. + @param inst (object) the current settings for this instance + @param show (string[7]) flags indicating which periods are requested/required + @param significant (number) the number of periods with values to show, zero for all + @param now (Date) the current date and time + @return (number[7]) the current time periods (always positive) + by year, month, week, day, hour, minute, second */ + _calculatePeriods: function(inst, show, significant, now) { + // Find endpoints + inst._now = now; + inst._now.setMilliseconds(0); + var until = new Date(inst._now.getTime()); + if (inst._since) { + if (now.getTime() < inst._since.getTime()) { + inst._now = now = until; + } + else { + now = inst._since; + } + } + else { + until.setTime(inst._until.getTime()); + if (now.getTime() > inst._until.getTime()) { + inst._now = now = until; + } + } + // Calculate differences by period + var periods = [0, 0, 0, 0, 0, 0, 0]; + if (show[Y] || show[O]) { + // Treat end of months as the same + var lastNow = $.countdown._getDaysInMonth(now.getFullYear(), now.getMonth()); + var lastUntil = $.countdown._getDaysInMonth(until.getFullYear(), until.getMonth()); + var sameDay = (until.getDate() == now.getDate() || + (until.getDate() >= Math.min(lastNow, lastUntil) && + now.getDate() >= Math.min(lastNow, lastUntil))); + var getSecs = function(date) { + return (date.getHours() * 60 + date.getMinutes()) * 60 + date.getSeconds(); + }; + var months = Math.max(0, + (until.getFullYear() - now.getFullYear()) * 12 + until.getMonth() - now.getMonth() + + ((until.getDate() < now.getDate() && !sameDay) || + (sameDay && getSecs(until) < getSecs(now)) ? -1 : 0)); + periods[Y] = (show[Y] ? Math.floor(months / 12) : 0); + periods[O] = (show[O] ? months - periods[Y] * 12 : 0); + // Adjust for months difference and end of month if necessary + now = new Date(now.getTime()); + var wasLastDay = (now.getDate() == lastNow); + var lastDay = $.countdown._getDaysInMonth(now.getFullYear() + periods[Y], + now.getMonth() + periods[O]); + if (now.getDate() > lastDay) { + now.setDate(lastDay); + } + now.setFullYear(now.getFullYear() + periods[Y]); + now.setMonth(now.getMonth() + periods[O]); + if (wasLastDay) { + now.setDate(lastDay); + } + } + var diff = Math.floor((until.getTime() - now.getTime()) / 1000); + var extractPeriod = function(period, numSecs) { + periods[period] = (show[period] ? Math.floor(diff / numSecs) : 0); + diff -= periods[period] * numSecs; + }; + extractPeriod(W, 604800); + extractPeriod(D, 86400); + extractPeriod(H, 3600); + extractPeriod(M, 60); + extractPeriod(S, 1); + if (diff > 0 && !inst._since) { // Round up if left overs + var multiplier = [1, 12, 4.3482, 7, 24, 60, 60]; + var lastShown = S; + var max = 1; + for (var period = S; period >= Y; period--) { + if (show[period]) { + if (periods[lastShown] >= max) { + periods[lastShown] = 0; + diff = 1; + } + if (diff > 0) { + periods[period]++; + diff = 0; + lastShown = period; + max = 1; + } + } + max *= multiplier[period]; + } + } + if (significant) { // Zero out insignificant periods + for (var period = Y; period <= S; period++) { + if (significant && periods[period]) { + significant--; + } + else if (!significant) { + periods[period] = 0; + } + } + } + return periods; + } +}); + +/* jQuery extend now ignores nulls! + @param target (object) the object to update + @param props (object) the new settings + @return (object) the updated object */ +function extendRemove(target, props) { + $.extend(target, props); + for (var name in props) { + if (props[name] == null) { + target[name] = null; + } + } + return target; +} + +/* Process the countdown functionality for a jQuery selection. + @param command (string) the command to run (optional, default 'attach') + @param options (object) the new settings to use for these countdown instances + @return (jQuery) for chaining further calls */ +$.fn.countdown = function(options) { + var otherArgs = Array.prototype.slice.call(arguments, 1); + if (options == 'getTimes' || options == 'settings') { + return $.countdown['_' + options + 'Countdown']. + apply($.countdown, [this[0]].concat(otherArgs)); + } + return this.each(function() { + if (typeof options == 'string') { + $.countdown['_' + options + 'Countdown'].apply($.countdown, [this].concat(otherArgs)); + } + else { + $.countdown._attachCountdown(this, options); + } + }); +}; + +/* Initialise the countdown functionality. */ +$.countdown = new Countdown(); // singleton instance + +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.cycle.min.js b/src/wolnelektury/static/js/contrib/jquery.cycle.min.js new file mode 100644 index 000000000..9311b63fe --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.cycle.min.js @@ -0,0 +1,11 @@ +/*! + * jQuery Cycle Lite Plugin + * http://malsup.com/jquery/cycle/lite/ + * Copyright (c) 2008 M. Alsup + * Version: 1.0 (06/08/2008) + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * Requires: jQuery v1.2.3 or later + */ +(function(D){var A="Lite-1.0";D.fn.cycle=function(E){return this.each(function(){E=E||{};if(this.cycleTimeout){clearTimeout(this.cycleTimeout)}this.cycleTimeout=0;this.cyclePause=0;var I=D(this);var J=E.slideExpr?D(E.slideExpr,this):I.children();var G=J.get();if(G.length<2){if(window.console&&window.console.log){window.console.log("terminating; too few slides: "+G.length)}return }var H=D.extend({},D.fn.cycle.defaults,E||{},D.metadata?I.metadata():D.meta?I.data():{});H.before=H.before?[H.before]:[];H.after=H.after?[H.after]:[];H.after.unshift(function(){H.busy=0});var F=this.className;H.width=parseInt((F.match(/w:(\d+)/)||[])[1])||H.width;H.height=parseInt((F.match(/h:(\d+)/)||[])[1])||H.height;H.timeout=parseInt((F.match(/t:(\d+)/)||[])[1])||H.timeout;if(I.css("position")=="static"){I.css("position","relative")}if(H.width){I.width(H.width)}if(H.height&&H.height!="auto"){I.height(H.height)}var K=0;J.css({position:"absolute",top:0,left:0}).hide().each(function(M){D(this).css("z-index",G.length-M)});D(G[K]).css("opacity",1).show();if(D.browser.msie){G[K].style.removeAttribute("filter")}if(H.fit&&H.width){J.width(H.width)}if(H.fit&&H.height&&H.height!="auto"){J.height(H.height)}if(H.pause){I.hover(function(){this.cyclePause=1},function(){this.cyclePause=0})}D.fn.cycle.transitions.fade(I,J,H);J.each(function(){var M=D(this);this.cycleH=(H.fit&&H.height)?H.height:M.height();this.cycleW=(H.fit&&H.width)?H.width:M.width()});J.not(":eq("+K+")").css({opacity:0});if(H.cssFirst){D(J[K]).css(H.cssFirst)}if(H.timeout){if(H.speed.constructor==String){H.speed={slow:600,fast:200}[H.speed]||400}if(!H.sync){H.speed=H.speed/2}while((H.timeout-H.speed)<250){H.timeout+=H.speed}}H.speedIn=H.speed;H.speedOut=H.speed;H.slideCount=G.length;H.currSlide=K;H.nextSlide=1;var L=J[K];if(H.before.length){H.before[0].apply(L,[L,L,H,true])}if(H.after.length>1){H.after[1].apply(L,[L,L,H,true])}if(H.click&&!H.next){H.next=H.click}if(H.next){D(H.next).bind("click",function(){return C(G,H,H.rev?-1:1)})}if(H.prev){D(H.prev).bind("click",function(){return C(G,H,H.rev?1:-1)})}if(H.timeout){this.cycleTimeout=setTimeout(function(){B(G,H,0,!H.rev)},H.timeout+(H.delay||0))}})};function B(J,E,I,K){if(E.busy){return }var H=J[0].parentNode,M=J[E.currSlide],L=J[E.nextSlide];if(H.cycleTimeout===0&&!I){return }if(I||!H.cyclePause){if(E.before.length){D.each(E.before,function(N,O){O.apply(L,[M,L,E,K])})}var F=function(){if(D.browser.msie){this.style.removeAttribute("filter")}D.each(E.after,function(N,O){O.apply(L,[M,L,E,K])})};if(E.nextSlide!=E.currSlide){E.busy=1;D.fn.cycle.custom(M,L,E,F)}var G=(E.nextSlide+1)==J.length;E.nextSlide=G?0:E.nextSlide+1;E.currSlide=G?J.length-1:E.nextSlide-1}if(E.timeout){H.cycleTimeout=setTimeout(function(){B(J,E,0,!E.rev)},E.timeout)}}function C(E,F,I){var H=E[0].parentNode,G=H.cycleTimeout;if(G){clearTimeout(G);H.cycleTimeout=0}F.nextSlide=F.currSlide+I;if(F.nextSlide<0){F.nextSlide=E.length-1}else{if(F.nextSlide>=E.length){F.nextSlide=0}}B(E,F,1,I>=0);return false}D.fn.cycle.custom=function(K,H,I,E){var J=D(K),G=D(H);G.css({opacity:0});var F=function(){G.animate({opacity:1},I.speedIn,I.easeIn,E)};J.animate({opacity:0},I.speedOut,I.easeOut,function(){J.css({display:"none"});if(!I.sync){F()}});if(I.sync){F()}};D.fn.cycle.transitions={fade:function(F,G,E){G.not(":eq(0)").css("opacity",0);E.before.push(function(){D(this).show()})}};D.fn.cycle.ver=function(){return A};D.fn.cycle.defaults={timeout:4000,speed:1000,next:null,prev:null,before:null,after:null,height:"auto",sync:1,fit:0,pause:0,delay:0,slideExpr:null}})(jQuery); \ No newline at end of file diff --git a/src/wolnelektury/static/js/contrib/jquery.eventdelegation.js b/src/wolnelektury/static/js/contrib/jquery.eventdelegation.js new file mode 100644 index 000000000..52fce074a --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.eventdelegation.js @@ -0,0 +1,55 @@ +/* + * jQuery Event Delegation Plugin - jquery.eventdelegation.js + * Fast flexible event handling + * + * January 2008 - Randy Morey (http://dev.distilldesign.com/) + */ + +(function ($) { + /* setup list of allowed events for event delegation + * only events that bubble are appropriate + */ + var allowed = {}; + $.each([ + 'click', + 'dblclick', + 'mousedown', + 'mouseup', + 'mousemove', + 'mouseover', + 'mouseout', + 'keydown', + 'keypress', + 'keyup' + ], function(i, eventName) { + allowed[eventName] = true; + }); + + $.fn.extend({ + delegate: function (event, selector, f) { + return $(this).each(function () { + if (allowed[event]) + $(this).bind(event, function (e) { + var el = $(e.target), + result = false; + + while (!$(el).is('body')) { + if ($(el).is(selector)) { + result = f.apply($(el)[0], [e]); + if (result === false) + e.preventDefault(); + return; + } + + el = $(el).parent(); + } + }); + }); + }, + undelegate: function (event) { + return $(this).each(function () { + $(this).unbind(event); + }); + } + }); +})(jQuery); \ No newline at end of file diff --git a/src/wolnelektury/static/js/contrib/jquery.form.js b/src/wolnelektury/static/js/contrib/jquery.form.js new file mode 100644 index 000000000..36af6b199 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.form.js @@ -0,0 +1,601 @@ +/* + * jQuery Form Plugin + * version: 2.12 (06/07/2008) + * @requires jQuery v1.2.2 or later + * + * Examples and documentation at: http://malsup.com/jquery/form/ + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * Revision: $Id$ + */ +(function($) { + +/* + Usage Note: + ----------- + Do not use both ajaxSubmit and ajaxForm on the same form. These + functions are intended to be exclusive. Use ajaxSubmit if you want + to bind your own submit handler to the form. For example, + + $(document).ready(function() { + $('#myForm').bind('submit', function() { + $(this).ajaxSubmit({ + target: '#output' + }); + return false; // <-- important! + }); + }); + + Use ajaxForm when you want the plugin to manage all the event binding + for you. For example, + + $(document).ready(function() { + $('#myForm').ajaxForm({ + target: '#output' + }); + }); + + When using ajaxForm, the ajaxSubmit function will be invoked for you + at the appropriate time. +*/ + +/** + * ajaxSubmit() provides a mechanism for immediately submitting + * an HTML form using AJAX. + */ +$.fn.ajaxSubmit = function(options) { + // fast fail if nothing selected (http://dev.jquery.com/ticket/2752) + if (!this.length) { + log('ajaxSubmit: skipping submit process - no element selected'); + return this; + } + + if (typeof options == 'function') + options = { success: options }; + + options = $.extend({ + url: this.attr('action') || window.location.toString(), + type: this.attr('method') || 'GET' + }, options || {}); + + // hook for manipulating the form data before it is extracted; + // convenient for use with rich editors like tinyMCE or FCKEditor + var veto = {}; + this.trigger('form-pre-serialize', [this, options, veto]); + if (veto.veto) { + log('ajaxSubmit: submit vetoed via form-pre-serialize trigger'); + return this; + } + + var a = this.formToArray(options.semantic); + if (options.data) { + options.extraData = options.data; + for (var n in options.data) + a.push( { name: n, value: options.data[n] } ); + } + + // give pre-submit callback an opportunity to abort the submit + if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) { + log('ajaxSubmit: submit aborted via beforeSubmit callback'); + return this; + } + + // fire vetoable 'validate' event + this.trigger('form-submit-validate', [a, this, options, veto]); + if (veto.veto) { + log('ajaxSubmit: submit vetoed via form-submit-validate trigger'); + return this; + } + + var q = $.param(a); + + if (options.type.toUpperCase() == 'GET') { + options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q; + options.data = null; // data is null for 'get' + } + else + options.data = q; // data is the query string for 'post' + + var $form = this, callbacks = []; + if (options.resetForm) callbacks.push(function() { $form.resetForm(); }); + if (options.clearForm) callbacks.push(function() { $form.clearForm(); }); + + // perform a load on the target only if dataType is not provided + if (!options.dataType && options.target) { + var oldSuccess = options.success || function(){}; + callbacks.push(function(data) { + $(options.target).html(data).each(oldSuccess, arguments); + }); + } + else if (options.success) + callbacks.push(options.success); + + options.success = function(data, status) { + for (var i=0, max=callbacks.length; i < max; i++) + callbacks[i](data, status, $form); + }; + + // are there files to upload? + var files = $('input:file', this).fieldValue(); + var found = false; + for (var j=0; j < files.length; j++) + if (files[j]) + found = true; + + // options.iframe allows user to force iframe mode + if (options.iframe || found) { + // hack to fix Safari hang (thanks to Tim Molendijk for this) + // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d + if ($.browser.safari && options.closeKeepAlive) + $.get(options.closeKeepAlive, fileUpload); + else + fileUpload(); + } + else + $.ajax(options); + + // fire 'notify' event + this.trigger('form-submit-notify', [this, options]); + return this; + + + // private function for handling file uploads (hat tip to YAHOO!) + function fileUpload() { + var form = $form[0]; + + if ($(':input[@name=submit]', form).length) { + alert('Error: Form elements must not be named "submit".'); + return; + } + + var opts = $.extend({}, $.ajaxSettings, options); + + var id = 'jqFormIO' + (new Date().getTime()); + var $io = $('').css({opacity:0}), +e=function(h){if(ie6)if(h.o)h.o.html('

                            ').prepend(i);else if(!$('iframe.jqm',h.w)[0])h.w.prepend(i); f(h);}, +f=function(h){try{$(':input:visible',h.w)[0].focus();}catch(_){}}, +L=function(t){$()[t]("keypress",m)[t]("keydown",m)[t]("mousedown",m);}, +m=function(e){var h=H[A[A.length-1]],r=(!$(e.target).parents('.jqmID'+h.s)[0]);if(r)f(h);return !r;}, +hs=function(w,t,c){return w.each(function(){var s=this._jqm;$(t).each(function() { + if(!this[c]){this[c]=[];$(this).click(function(){for(var i in {jqmShow:1,jqmHide:1})for(var s in this[i])if(H[this[i][s]])H[this[i][s]].w[i](this);return F;});}this[c].push(s);});});}; +})(jQuery); \ No newline at end of file diff --git a/src/wolnelektury/static/js/contrib/jquery.js b/src/wolnelektury/static/js/contrib/jquery.js new file mode 100644 index 000000000..7c2430802 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.js @@ -0,0 +1,154 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
                            a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

                            ";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
                            ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
                            ","
                            "],thead:[1,"","
                            "],tr:[2,"","
                            "],td:[3,"","
                            "],col:[2,"","
                            "],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
                            ","
                            "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
                            ").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
                            "; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/src/wolnelektury/static/js/contrib/jquery.scrollto.js b/src/wolnelektury/static/js/contrib/jquery.scrollto.js new file mode 100644 index 000000000..c403ab9df --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.scrollto.js @@ -0,0 +1,194 @@ +/** + * jQuery.ScrollTo + * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com + * Dual licensed under MIT and GPL. + * Date: 9/11/2008 + * + * @projectDescription Easy element scrolling using jQuery. + * http://flesler.blogspot.com/2007/10/jqueryscrollto.html + * Tested with jQuery 1.2.6. On FF 2/3, IE 6/7, Opera 9.2/5 and Safari 3. on Windows. + * + * @author Ariel Flesler + * @version 1.4 + * + * @id jQuery.scrollTo + * @id jQuery.fn.scrollTo + * @param {String, Number, DOMElement, jQuery, Object} target Where to scroll the matched elements. + * The different options for target are: + * - A number position (will be applied to all axes). + * - A string position ('44', '100px', '+=90', etc ) will be applied to all axes + * - A jQuery/DOM element ( logically, child of the element to scroll ) + * - A string selector, that will be relative to the element to scroll ( 'li:eq(2)', etc ) + * - A hash { top:x, left:y }, x and y can be any kind of number/string like above. + * @param {Number} duration The OVERALL length of the animation, this argument can be the settings object instead. + * @param {Object,Function} settings Optional set of settings or the onAfter callback. + * @option {String} axis Which axis must be scrolled, use 'x', 'y', 'xy' or 'yx'. + * @option {Number} duration The OVERALL length of the animation. + * @option {String} easing The easing method for the animation. + * @option {Boolean} margin If true, the margin of the target element will be deducted from the final position. + * @option {Object, Number} offset Add/deduct from the end position. One number for both axes or { top:x, left:y }. + * @option {Object, Number} over Add/deduct the height/width multiplied by 'over', can be { top:x, left:y } when using both axes. + * @option {Boolean} queue If true, and both axis are given, the 2nd axis will only be animated after the first one ends. + * @option {Function} onAfter Function to be called after the scrolling ends. + * @option {Function} onAfterFirst If queuing is activated, this function will be called after the first scrolling ends. + * @return {jQuery} Returns the same jQuery object, for chaining. + * + * @desc Scroll to a fixed position + * @example $('div').scrollTo( 340 ); + * + * @desc Scroll relatively to the actual position + * @example $('div').scrollTo( '+=340px', { axis:'y' } ); + * + * @dec Scroll using a selector (relative to the scrolled element) + * @example $('div').scrollTo( 'p.paragraph:eq(2)', 500, { easing:'swing', queue:true, axis:'xy' } ); + * + * @ Scroll to a DOM element (same for jQuery object) + * @example var second_child = document.getElementById('container').firstChild.nextSibling; + * $('#container').scrollTo( second_child, { duration:500, axis:'x', onAfter:function(){ + * alert('scrolled!!'); + * }}); + * + * @desc Scroll on both axes, to different values + * @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } ); + */ +;(function( $ ){ + + var $scrollTo = $.scrollTo = function( target, duration, settings ){ + $(window).scrollTo( target, duration, settings ); + }; + + $scrollTo.defaults = { + axis:'y', + duration:1 + }; + + // Returns the element that needs to be animated to scroll the window. + // Kept for backwards compatibility (specially for localScroll & serialScroll) + $scrollTo.window = function( scope ){ + return $(window).scrollable(); + }; + + // Hack, hack, hack... stay away! + // Returns the real elements to scroll (supports window/iframes, documents and regular nodes) + $.fn.scrollable = function(){ + return this.map(function(){ + // Just store it, we might need it + var win = this.parentWindow || this.defaultView, + // If it's a document, get its iframe or the window if it's THE document + elem = this.nodeName == '#document' ? win.frameElement || win : this, + // Get the corresponding document + doc = elem.contentDocument || (elem.contentWindow || elem).document, + isWin = elem.setInterval; + + return elem.nodeName == 'IFRAME' || isWin && $.browser.safari ? doc.body + : isWin ? doc.documentElement + : this; + }); + }; + + $.fn.scrollTo = function( target, duration, settings ){ + if( typeof duration == 'object' ){ + settings = duration; + duration = 0; + } + if( typeof settings == 'function' ) + settings = { onAfter:settings }; + + settings = $.extend( {}, $scrollTo.defaults, settings ); + // Speed is still recognized for backwards compatibility + duration = duration || settings.speed || settings.duration; + // Make sure the settings are given right + settings.queue = settings.queue && settings.axis.length > 1; + + if( settings.queue ) + // Let's keep the overall duration + duration /= 2; + settings.offset = both( settings.offset ); + settings.over = both( settings.over ); + + return this.scrollable().each(function(){ + var elem = this, + $elem = $(elem), + targ = target, toff, attr = {}, + win = $elem.is('html,body'); + + switch( typeof targ ){ + // A number will pass the regex + case 'number': + case 'string': + if( /^([+-]=)?\d+(px)?$/.test(targ) ){ + targ = both( targ ); + // We are done + break; + } + // Relative selector, no break! + targ = $(targ,this); + case 'object': + // DOMElement / jQuery + if( targ.is || targ.style ) + // Get the real position of the target + toff = (targ = $(targ)).offset(); + } + $.each( settings.axis.split(''), function( i, axis ){ + var Pos = axis == 'x' ? 'Left' : 'Top', + pos = Pos.toLowerCase(), + key = 'scroll' + Pos, + old = elem[key], + Dim = axis == 'x' ? 'Width' : 'Height', + dim = Dim.toLowerCase(); + + if( toff ){// jQuery / DOMElement + attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] ); + + // If it's a dom element, reduce the margin + if( settings.margin ){ + attr[key] -= parseInt(targ.css('margin'+Pos)) || 0; + attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0; + } + + attr[key] += settings.offset[pos] || 0; + + if( settings.over[pos] ) + // Scroll to a fraction of its width/height + attr[key] += targ[dim]() * settings.over[pos]; + }else + attr[key] = targ[pos]; + + // Number or 'number' + if( /^\d+$/.test(attr[key]) ) + // Check the limits + attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max(Dim) ); + + // Queueing axes + if( !i && settings.queue ){ + // Don't waste time animating, if there's no need. + if( old != attr[key] ) + // Intermediate animation + animate( settings.onAfterFirst ); + // Don't animate this axis again in the next iteration. + delete attr[key]; + } + }); + animate( settings.onAfter ); + + function animate( callback ){ + $elem.animate( attr, duration, settings.easing, callback && function(){ + callback.call(this, target, settings); + }); + }; + function max( Dim ){ + var attr ='scroll'+Dim, + doc = elem.ownerDocument; + + return win + ? Math.max( doc.documentElement[attr], doc.body[attr] ) + : elem[attr]; + }; + }).end(); + }; + + function both( val ){ + return typeof val == 'object' ? val : { top:val, left:val }; + }; + +})( jQuery ); \ No newline at end of file diff --git a/src/wolnelektury/static/js/contrib/modernizr.custom.19652.js b/src/wolnelektury/static/js/contrib/modernizr.custom.19652.js new file mode 100644 index 000000000..7ad5743b9 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/modernizr.custom.19652.js @@ -0,0 +1,4 @@ +/* Modernizr 2.6.2 (Custom Build) | MIT & BSD + * Build: http://modernizr.com/download/#-input-localstorage + */ +;window.Modernizr=function(a,b,c){function t(a){i.cssText=a}function u(a,b){return t(prefixes.join(a+";")+(b||""))}function v(a,b){return typeof a===b}function w(a,b){return!!~(""+a).indexOf(b)}function x(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:v(f,"function")?f.bind(d||b):f}return!1}function y(){e.input=function(c){for(var d=0,e=c.length;dp;p++)"zIndex"in h[p]&&(l.push(h[p].zIndex),h[p].zIndex<0&&(m[h[p].zIndex]=h[p]));for(l.sort(i);l[j]<0;)if(e=m[l[j++]],n.push(e.apply(d,g)),c)return c=f,n;for(p=0;q>p;p++)if(e=h[p],"zIndex"in e)if(e.zIndex==l[j]){if(n.push(e.apply(d,g)),c)break;do if(j++,e=m[l[j]],e&&n.push(e.apply(d,g)),c)break;while(e)}else m[e.zIndex]=e;else if(n.push(e.apply(d,g)),c)break;return c=f,b=o,n.length?n:null};k._events=j,k.listeners=function(a){var b,c,d,e,h,i,k,l,m=a.split(f),n=j,o=[n],p=[];for(e=0,h=m.length;h>e;e++){for(l=[],i=0,k=o.length;k>i;i++)for(n=o[i].n,c=[n[m[e]],n[g]],d=2;d--;)b=c[d],b&&(l.push(b),p=p.concat(b.f||[]));o=l}return p},k.on=function(a,b){if(a=String(a),"function"!=typeof b)return function(){};for(var c=a.split(f),d=j,e=0,g=c.length;g>e;e++)d=d.n,d=d.hasOwnProperty(c[e])&&d[c[e]]||(d[c[e]]={n:{}});for(d.f=d.f||[],e=0,g=d.f.length;g>e;e++)if(d.f[e]==b)return h;return d.f.push(b),function(a){+a==+a&&(b.zIndex=+a)}},k.f=function(a){var b=[].slice.call(arguments,1);return function(){k.apply(null,[a,null].concat(b).concat([].slice.call(arguments,0)))}},k.stop=function(){c=1},k.nt=function(a){return a?new RegExp("(?:\\.|\\/|^)"+a+"(?:\\.|\\/|$)").test(b):b},k.nts=function(){return b.split(f)},k.off=k.unbind=function(a,b){if(!a)return k._events=j={n:{}},void 0;var c,d,h,i,l,m,n,o=a.split(f),p=[j];for(i=0,l=o.length;l>i;i++)for(m=0;mi;i++)for(c=p[i];c.n;){if(b){if(c.f){for(m=0,n=c.f.length;n>m;m++)if(c.f[m]==b){c.f.splice(m,1);break}!c.f.length&&delete c.f}for(d in c.n)if(c.n[e](d)&&c.n[d].f){var q=c.n[d].f;for(m=0,n=q.length;n>m;m++)if(q[m]==b){q.splice(m,1);break}!q.length&&delete c.n[d].f}}else{delete c.f;for(d in c.n)c.n[e](d)&&c.n[d].f&&delete c.n[d].f}c=c.n}},k.once=function(a,b){var c=function(){return k.unbind(a,c),b.apply(this,arguments)};return k.on(a,c)},k.version=d,k.toString=function(){return"You are running Eve "+d},"undefined"!=typeof module&&module.exports?module.exports=k:"undefined"!=typeof define?define("eve",[],function(){return k}):a.eve=k}(this),function(a,b){"function"==typeof define&&define.amd?define(["eve"],function(c){return b(a,c)}):b(a,a.eve)}(this,function(a,b){function c(a){if(c.is(a,"function"))return u?a():b.on("raphael.DOMload",a);if(c.is(a,V))return c._engine.create[D](c,a.splice(0,3+c.is(a[0],T))).add(a);var d=Array.prototype.slice.call(arguments,0);if(c.is(d[d.length-1],"function")){var e=d.pop();return u?e.call(c._engine.create[D](c,d)):b.on("raphael.DOMload",function(){e.call(c._engine.create[D](c,d))})}return c._engine.create[D](c,arguments)}function d(a){if("function"==typeof a||Object(a)!==a)return a;var b=new a.constructor;for(var c in a)a[z](c)&&(b[c]=d(a[c]));return b}function e(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return a.push(a.splice(c,1)[0])}function f(a,b,c){function d(){var f=Array.prototype.slice.call(arguments,0),g=f.join("␀"),h=d.cache=d.cache||{},i=d.count=d.count||[];return h[z](g)?(e(i,g),c?c(h[g]):h[g]):(i.length>=1e3&&delete h[i.shift()],i.push(g),h[g]=a[D](b,f),c?c(h[g]):h[g])}return d}function g(){return this.hex}function h(a,b){for(var c=[],d=0,e=a.length;e-2*!b>d;d+=2){var f=[{x:+a[d-2],y:+a[d-1]},{x:+a[d],y:+a[d+1]},{x:+a[d+2],y:+a[d+3]},{x:+a[d+4],y:+a[d+5]}];b?d?e-4==d?f[3]={x:+a[0],y:+a[1]}:e-2==d&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[e-2],y:+a[e-1]}:e-4==d?f[3]=f[2]:d||(f[0]={x:+a[d],y:+a[d+1]}),c.push(["C",(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])}return c}function i(a,b,c,d,e){var f=-3*b+9*c-9*d+3*e,g=a*f+6*b-12*c+6*d;return a*g-3*b+3*c}function j(a,b,c,d,e,f,g,h,j){null==j&&(j=1),j=j>1?1:0>j?0:j;for(var k=j/2,l=12,m=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],n=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],o=0,p=0;l>p;p++){var q=k*m[p]+k,r=i(q,a,c,e,g),s=i(q,b,d,f,h),t=r*r+s*s;o+=n[p]*N.sqrt(t)}return k*o}function k(a,b,c,d,e,f,g,h,i){if(!(0>i||j(a,b,c,d,e,f,g,h)o;)m/=2,n+=(i>k?1:-1)*m,k=j(a,b,c,d,e,f,g,h,n);return n}}function l(a,b,c,d,e,f,g,h){if(!(O(a,c)O(e,g)||O(b,d)O(f,h))){var i=(a*d-b*c)*(e-g)-(a-c)*(e*h-f*g),j=(a*d-b*c)*(f-h)-(b-d)*(e*h-f*g),k=(a-c)*(f-h)-(b-d)*(e-g);if(k){var l=i/k,m=j/k,n=+l.toFixed(2),o=+m.toFixed(2);if(!(n<+P(a,c).toFixed(2)||n>+O(a,c).toFixed(2)||n<+P(e,g).toFixed(2)||n>+O(e,g).toFixed(2)||o<+P(b,d).toFixed(2)||o>+O(b,d).toFixed(2)||o<+P(f,h).toFixed(2)||o>+O(f,h).toFixed(2)))return{x:l,y:m}}}}function m(a,b,d){var e=c.bezierBBox(a),f=c.bezierBBox(b);if(!c.isBBoxIntersect(e,f))return d?0:[];for(var g=j.apply(0,a),h=j.apply(0,b),i=O(~~(g/5),1),k=O(~~(h/5),1),m=[],n=[],o={},p=d?0:[],q=0;i+1>q;q++){var r=c.findDotsAtSegment.apply(c,a.concat(q/i));m.push({x:r.x,y:r.y,t:q/i})}for(q=0;k+1>q;q++)r=c.findDotsAtSegment.apply(c,b.concat(q/k)),n.push({x:r.x,y:r.y,t:q/k});for(q=0;i>q;q++)for(var s=0;k>s;s++){var t=m[q],u=m[q+1],v=n[s],w=n[s+1],x=Q(u.x-t.x)<.001?"y":"x",y=Q(w.x-v.x)<.001?"y":"x",z=l(t.x,t.y,u.x,u.y,v.x,v.y,w.x,w.y);if(z){if(o[z.x.toFixed(4)]==z.y.toFixed(4))continue;o[z.x.toFixed(4)]=z.y.toFixed(4);var A=t.t+Q((z[x]-t[x])/(u[x]-t[x]))*(u.t-t.t),B=v.t+Q((z[y]-v[y])/(w[y]-v[y]))*(w.t-v.t);A>=0&&1.001>=A&&B>=0&&1.001>=B&&(d?p++:p.push({x:z.x,y:z.y,t1:P(A,1),t2:P(B,1)}))}}return p}function n(a,b,d){a=c._path2curve(a),b=c._path2curve(b);for(var e,f,g,h,i,j,k,l,n,o,p=d?0:[],q=0,r=a.length;r>q;q++){var s=a[q];if("M"==s[0])e=i=s[1],f=j=s[2];else{"C"==s[0]?(n=[e,f].concat(s.slice(1)),e=n[6],f=n[7]):(n=[e,f,e,f,i,j,i,j],e=i,f=j);for(var t=0,u=b.length;u>t;t++){var v=b[t];if("M"==v[0])g=k=v[1],h=l=v[2];else{"C"==v[0]?(o=[g,h].concat(v.slice(1)),g=o[6],h=o[7]):(o=[g,h,g,h,k,l,k,l],g=k,h=l);var w=m(n,o,d);if(d)p+=w;else{for(var x=0,y=w.length;y>x;x++)w[x].segment1=q,w[x].segment2=t,w[x].bez1=n,w[x].bez2=o;p=p.concat(w)}}}}}return p}function o(a,b,c,d,e,f){null!=a?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function p(){return this.x+H+this.y+H+this.width+" × "+this.height}function q(a,b,c,d,e,f){function g(a){return((l*a+k)*a+j)*a}function h(a,b){var c=i(a,b);return((o*c+n)*c+m)*c}function i(a,b){var c,d,e,f,h,i;for(e=a,i=0;8>i;i++){if(f=g(e)-a,Q(f)e)return c;if(e>d)return d;for(;d>c;){if(f=g(e),Q(f-a)f?c=e:d=e,e=(d-c)/2+c}return e}var j=3*b,k=3*(d-b)-j,l=1-j-k,m=3*c,n=3*(e-c)-m,o=1-m-n;return h(a,1/(200*f))}function r(a,b){var c=[],d={};if(this.ms=b,this.times=1,a){for(var e in a)a[z](e)&&(d[_(e)]=a[e],c.push(_(e)));c.sort(lb)}this.anim=d,this.top=c[c.length-1],this.percents=c}function s(a,d,e,f,g,h){e=_(e);var i,j,k,l,m,n,p=a.ms,r={},s={},t={};if(f)for(v=0,x=ic.length;x>v;v++){var u=ic[v];if(u.el.id==d.id&&u.anim==a){u.percent!=e?(ic.splice(v,1),k=1):j=u,d.attr(u.totalOrigin);break}}else f=+s;for(var v=0,x=a.percents.length;x>v;v++){if(a.percents[v]==e||a.percents[v]>f*a.top){e=a.percents[v],m=a.percents[v-1]||0,p=p/a.top*(e-m),l=a.percents[v+1],i=a.anim[e];break}f&&d.attr(a.anim[a.percents[v]])}if(i){if(j)j.initstatus=f,j.start=new Date-j.ms*f;else{for(var y in i)if(i[z](y)&&(db[z](y)||d.paper.customAttributes[z](y)))switch(r[y]=d.attr(y),null==r[y]&&(r[y]=cb[y]),s[y]=i[y],db[y]){case T:t[y]=(s[y]-r[y])/p;break;case"colour":r[y]=c.getRGB(r[y]);var A=c.getRGB(s[y]);t[y]={r:(A.r-r[y].r)/p,g:(A.g-r[y].g)/p,b:(A.b-r[y].b)/p};break;case"path":var B=Kb(r[y],s[y]),C=B[1];for(r[y]=B[0],t[y]=[],v=0,x=r[y].length;x>v;v++){t[y][v]=[0];for(var D=1,F=r[y][v].length;F>D;D++)t[y][v][D]=(C[v][D]-r[y][v][D])/p}break;case"transform":var G=d._,H=Pb(G[y],s[y]);if(H)for(r[y]=H.from,s[y]=H.to,t[y]=[],t[y].real=!0,v=0,x=r[y].length;x>v;v++)for(t[y][v]=[r[y][v][0]],D=1,F=r[y][v].length;F>D;D++)t[y][v][D]=(s[y][v][D]-r[y][v][D])/p;else{var K=d.matrix||new o,L={_:{transform:G.transform},getBBox:function(){return d.getBBox(1)}};r[y]=[K.a,K.b,K.c,K.d,K.e,K.f],Nb(L,s[y]),s[y]=L._.transform,t[y]=[(L.matrix.a-K.a)/p,(L.matrix.b-K.b)/p,(L.matrix.c-K.c)/p,(L.matrix.d-K.d)/p,(L.matrix.e-K.e)/p,(L.matrix.f-K.f)/p]}break;case"csv":var M=I(i[y])[J](w),N=I(r[y])[J](w);if("clip-rect"==y)for(r[y]=N,t[y]=[],v=N.length;v--;)t[y][v]=(M[v]-r[y][v])/p;s[y]=M;break;default:for(M=[][E](i[y]),N=[][E](r[y]),t[y]=[],v=d.paper.customAttributes[y].length;v--;)t[y][v]=((M[v]||0)-(N[v]||0))/p}var O=i.easing,P=c.easing_formulas[O];if(!P)if(P=I(O).match(Z),P&&5==P.length){var Q=P;P=function(a){return q(a,+Q[1],+Q[2],+Q[3],+Q[4],p)}}else P=nb;if(n=i.start||a.start||+new Date,u={anim:a,percent:e,timestamp:n,start:n+(a.del||0),status:0,initstatus:f||0,stop:!1,ms:p,easing:P,from:r,diff:t,to:s,el:d,callback:i.callback,prev:m,next:l,repeat:h||a.times,origin:d.attr(),totalOrigin:g},ic.push(u),f&&!j&&!k&&(u.stop=!0,u.start=new Date-p*f,1==ic.length))return kc();k&&(u.start=new Date-u.ms*f),1==ic.length&&jc(kc)}b("raphael.anim.start."+d.id,d,a)}}function t(a){for(var b=0;be;e++)for(i=a[e],f=1,h=i.length;h>f;f+=2)c=b.x(i[f],i[f+1]),d=b.y(i[f],i[f+1]),i[f]=c,i[f+1]=d;return a};if(c._g=A,c.type=A.win.SVGAngle||A.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")?"SVG":"VML","VML"==c.type){var sb,tb=A.doc.createElement("div");if(tb.innerHTML='',sb=tb.firstChild,sb.style.behavior="url(#default#VML)",!sb||"object"!=typeof sb.adj)return c.type=G;tb=null}c.svg=!(c.vml="VML"==c.type),c._Paper=C,c.fn=v=C.prototype=c.prototype,c._id=0,c._oid=0,c.is=function(a,b){return b=M.call(b),"finite"==b?!Y[z](+a):"array"==b?a instanceof Array:"null"==b&&null===a||b==typeof a&&null!==a||"object"==b&&a===Object(a)||"array"==b&&Array.isArray&&Array.isArray(a)||W.call(a).slice(8,-1).toLowerCase()==b},c.angle=function(a,b,d,e,f,g){if(null==f){var h=a-d,i=b-e;return h||i?(180+180*N.atan2(-i,-h)/S+360)%360:0}return c.angle(a,b,f,g)-c.angle(d,e,f,g)},c.rad=function(a){return a%360*S/180},c.deg=function(a){return 180*a/S%360},c.snapTo=function(a,b,d){if(d=c.is(d,"finite")?d:10,c.is(a,V)){for(var e=a.length;e--;)if(Q(a[e]-b)<=d)return a[e]}else{a=+a;var f=b%a;if(d>f)return b-f;if(f>a-d)return b-f+a}return b},c.createUUID=function(a,b){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=0|16*N.random(),c="x"==a?b:8|3&b;return c.toString(16)}),c.setWindow=function(a){b("raphael.setWindow",c,A.win,a),A.win=a,A.doc=A.win.document,c._engine.initWin&&c._engine.initWin(A.win)};var ub=function(a){if(c.vml){var b,d=/^\s+|\s+$/g;try{var e=new ActiveXObject("htmlfile");e.write(""),e.close(),b=e.body}catch(g){b=createPopup().document.body}var h=b.createTextRange();ub=f(function(a){try{b.style.color=I(a).replace(d,G);var c=h.queryCommandValue("ForeColor");return c=(255&c)<<16|65280&c|(16711680&c)>>>16,"#"+("000000"+c.toString(16)).slice(-6)}catch(e){return"none"}})}else{var i=A.doc.createElement("i");i.title="Raphaël Colour Picker",i.style.display="none",A.doc.body.appendChild(i),ub=f(function(a){return i.style.color=a,A.doc.defaultView.getComputedStyle(i,G).getPropertyValue("color")})}return ub(a)},vb=function(){return"hsb("+[this.h,this.s,this.b]+")"},wb=function(){return"hsl("+[this.h,this.s,this.l]+")"},xb=function(){return this.hex},yb=function(a,b,d){if(null==b&&c.is(a,"object")&&"r"in a&&"g"in a&&"b"in a&&(d=a.b,b=a.g,a=a.r),null==b&&c.is(a,U)){var e=c.getRGB(a);a=e.r,b=e.g,d=e.b}return(a>1||b>1||d>1)&&(a/=255,b/=255,d/=255),[a,b,d]},zb=function(a,b,d,e){a*=255,b*=255,d*=255;var f={r:a,g:b,b:d,hex:c.rgb(a,b,d),toString:xb};return c.is(e,"finite")&&(f.opacity=e),f};c.color=function(a){var b;return c.is(a,"object")&&"h"in a&&"s"in a&&"b"in a?(b=c.hsb2rgb(a),a.r=b.r,a.g=b.g,a.b=b.b,a.hex=b.hex):c.is(a,"object")&&"h"in a&&"s"in a&&"l"in a?(b=c.hsl2rgb(a),a.r=b.r,a.g=b.g,a.b=b.b,a.hex=b.hex):(c.is(a,"string")&&(a=c.getRGB(a)),c.is(a,"object")&&"r"in a&&"g"in a&&"b"in a?(b=c.rgb2hsl(a),a.h=b.h,a.s=b.s,a.l=b.l,b=c.rgb2hsb(a),a.v=b.b):(a={hex:"none"},a.r=a.g=a.b=a.h=a.s=a.v=a.l=-1)),a.toString=xb,a},c.hsb2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,a=a.h,d=a.o),a*=360;var e,f,g,h,i;return a=a%360/60,i=c*b,h=i*(1-Q(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],zb(e,f,g,d)},c.hsl2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h),(a>1||b>1||c>1)&&(a/=360,b/=100,c/=100),a*=360;var e,f,g,h,i;return a=a%360/60,i=2*b*(.5>c?c:1-c),h=i*(1-Q(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],zb(e,f,g,d)},c.rgb2hsb=function(a,b,c){c=yb(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;return f=O(a,b,c),g=f-P(a,b,c),d=0==g?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=60*((d+360)%6)/360,e=0==g?0:g/f,{h:d,s:e,b:f,toString:vb}},c.rgb2hsl=function(a,b,c){c=yb(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;return g=O(a,b,c),h=P(a,b,c),i=g-h,d=0==i?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=60*((d+360)%6)/360,f=(g+h)/2,e=0==i?0:.5>f?i/(2*f):i/(2-2*f),{h:d,s:e,l:f,toString:wb}},c._path2string=function(){return this.join(",").replace(gb,"$1")},c._preload=function(a,b){var c=A.doc.createElement("img");c.style.cssText="position:absolute;left:-9999em;top:-9999em",c.onload=function(){b.call(this),this.onload=null,A.doc.body.removeChild(this)},c.onerror=function(){A.doc.body.removeChild(this)},A.doc.body.appendChild(c),c.src=a},c.getRGB=f(function(a){if(!a||(a=I(a)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:g};if("none"==a)return{r:-1,g:-1,b:-1,hex:"none",toString:g};!(fb[z](a.toLowerCase().substring(0,2))||"#"==a.charAt())&&(a=ub(a));var b,d,e,f,h,i,j=a.match(X);return j?(j[2]&&(e=ab(j[2].substring(5),16),d=ab(j[2].substring(3,5),16),b=ab(j[2].substring(1,3),16)),j[3]&&(e=ab((h=j[3].charAt(3))+h,16),d=ab((h=j[3].charAt(2))+h,16),b=ab((h=j[3].charAt(1))+h,16)),j[4]&&(i=j[4][J](eb),b=_(i[0]),"%"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),"rgba"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&"%"==i[3].slice(-1)&&(f/=100)),j[5]?(i=j[5][J](eb),b=_(i[0]),"%"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),("deg"==i[0].slice(-3)||"°"==i[0].slice(-1))&&(b/=360),"hsba"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&"%"==i[3].slice(-1)&&(f/=100),c.hsb2rgb(b,d,e,f)):j[6]?(i=j[6][J](eb),b=_(i[0]),"%"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),("deg"==i[0].slice(-3)||"°"==i[0].slice(-1))&&(b/=360),"hsla"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&"%"==i[3].slice(-1)&&(f/=100),c.hsl2rgb(b,d,e,f)):(j={r:b,g:d,b:e,toString:g},j.hex="#"+(16777216|e|d<<8|b<<16).toString(16).slice(1),c.is(f,"finite")&&(j.opacity=f),j)):{r:-1,g:-1,b:-1,hex:"none",error:1,toString:g}},c),c.hsb=f(function(a,b,d){return c.hsb2rgb(a,b,d).hex}),c.hsl=f(function(a,b,d){return c.hsl2rgb(a,b,d).hex}),c.rgb=f(function(a,b,c){return"#"+(16777216|c|b<<8|a<<16).toString(16).slice(1)}),c.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);return b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b})),c.hex},c.getColor.reset=function(){delete this.start},c.parsePathString=function(a){if(!a)return null;var b=Ab(a);if(b.arr)return Cb(b.arr);var d={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},e=[];return c.is(a,V)&&c.is(a[0],V)&&(e=Cb(a)),e.length||I(a).replace(hb,function(a,b,c){var f=[],g=b.toLowerCase();if(c.replace(jb,function(a,b){b&&f.push(+b)}),"m"==g&&f.length>2&&(e.push([b][E](f.splice(0,2))),g="l",b="m"==b?"l":"L"),"r"==g)e.push([b][E](f));else for(;f.length>=d[g]&&(e.push([b][E](f.splice(0,d[g]))),d[g]););}),e.toString=c._path2string,b.arr=Cb(e),e},c.parseTransformString=f(function(a){if(!a)return null;var b=[];return c.is(a,V)&&c.is(a[0],V)&&(b=Cb(a)),b.length||I(a).replace(ib,function(a,c,d){var e=[];M.call(c),d.replace(jb,function(a,b){b&&e.push(+b)}),b.push([c][E](e))}),b.toString=c._path2string,b});var Ab=function(a){var b=Ab.ps=Ab.ps||{};return b[a]?b[a].sleep=100:b[a]={sleep:100},setTimeout(function(){for(var c in b)b[z](c)&&c!=a&&(b[c].sleep--,!b[c].sleep&&delete b[c])}),b[a]};c.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=R(j,3),l=R(j,2),m=i*i,n=m*i,o=k*a+3*l*i*c+3*j*i*i*e+n*g,p=k*b+3*l*i*d+3*j*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,w=j*e+i*g,x=j*f+i*h,y=90-180*N.atan2(q-s,r-t)/S;return(q>s||t>r)&&(y+=180),{x:o,y:p,m:{x:q,y:r},n:{x:s,y:t},start:{x:u,y:v},end:{x:w,y:x},alpha:y}},c.bezierBBox=function(a,b,d,e,f,g,h,i){c.is(a,"array")||(a=[a,b,d,e,f,g,h,i]);var j=Jb.apply(null,a);return{x:j.min.x,y:j.min.y,x2:j.max.x,y2:j.max.y,width:j.max.x-j.min.x,height:j.max.y-j.min.y}},c.isPointInsideBBox=function(a,b,c){return b>=a.x&&b<=a.x2&&c>=a.y&&c<=a.y2},c.isBBoxIntersect=function(a,b){var d=c.isPointInsideBBox;return d(b,a.x,a.y)||d(b,a.x2,a.y)||d(b,a.x,a.y2)||d(b,a.x2,a.y2)||d(a,b.x,b.y)||d(a,b.x2,b.y)||d(a,b.x,b.y2)||d(a,b.x2,b.y2)||(a.xb.x||b.xa.x)&&(a.yb.y||b.ya.y)},c.pathIntersection=function(a,b){return n(a,b)},c.pathIntersectionNumber=function(a,b){return n(a,b,1)},c.isPointInsidePath=function(a,b,d){var e=c.pathBBox(a);return c.isPointInsideBBox(e,b,d)&&1==n(a,[["M",b,d],["H",e.x2+10]],1)%2},c._removedFactory=function(a){return function(){b("raphael.log",null,"Raphaël: you are calling to method “"+a+"” of removed object",a)}};var Bb=c.pathBBox=function(a){var b=Ab(a);if(b.bbox)return d(b.bbox);if(!a)return{x:0,y:0,width:0,height:0,x2:0,y2:0};a=Kb(a);for(var c,e=0,f=0,g=[],h=[],i=0,j=a.length;j>i;i++)if(c=a[i],"M"==c[0])e=c[1],f=c[2],g.push(e),h.push(f);else{var k=Jb(e,f,c[1],c[2],c[3],c[4],c[5],c[6]);g=g[E](k.min.x,k.max.x),h=h[E](k.min.y,k.max.y),e=c[5],f=c[6]}var l=P[D](0,g),m=P[D](0,h),n=O[D](0,g),o=O[D](0,h),p=n-l,q=o-m,r={x:l,y:m,x2:n,y2:o,width:p,height:q,cx:l+p/2,cy:m+q/2};return b.bbox=d(r),r},Cb=function(a){var b=d(a);return b.toString=c._path2string,b},Db=c._pathToRelative=function(a){var b=Ab(a);if(b.rel)return Cb(b.rel);c.is(a,V)&&c.is(a&&a[0],V)||(a=c.parsePathString(a));var d=[],e=0,f=0,g=0,h=0,i=0;"M"==a[0][0]&&(e=a[0][1],f=a[0][2],g=e,h=f,i++,d.push(["M",e,f]));for(var j=i,k=a.length;k>j;j++){var l=d[j]=[],m=a[j];if(m[0]!=M.call(m[0]))switch(l[0]=M.call(m[0]),l[0]){case"a":l[1]=m[1],l[2]=m[2],l[3]=m[3],l[4]=m[4],l[5]=m[5],l[6]=+(m[6]-e).toFixed(3),l[7]=+(m[7]-f).toFixed(3);break;case"v":l[1]=+(m[1]-f).toFixed(3);break;case"m":g=m[1],h=m[2];default:for(var n=1,o=m.length;o>n;n++)l[n]=+(m[n]-(n%2?e:f)).toFixed(3)}else{l=d[j]=[],"m"==m[0]&&(g=m[1]+e,h=m[2]+f);for(var p=0,q=m.length;q>p;p++)d[j][p]=m[p]}var r=d[j].length;switch(d[j][0]){case"z":e=g,f=h;break;case"h":e+=+d[j][r-1];break;case"v":f+=+d[j][r-1];break;default:e+=+d[j][r-2],f+=+d[j][r-1]}}return d.toString=c._path2string,b.rel=Cb(d),d},Eb=c._pathToAbsolute=function(a){var b=Ab(a);if(b.abs)return Cb(b.abs);if(c.is(a,V)&&c.is(a&&a[0],V)||(a=c.parsePathString(a)),!a||!a.length)return[["M",0,0]];var d=[],e=0,f=0,g=0,i=0,j=0;"M"==a[0][0]&&(e=+a[0][1],f=+a[0][2],g=e,i=f,j++,d[0]=["M",e,f]);for(var k,l,m=3==a.length&&"M"==a[0][0]&&"R"==a[1][0].toUpperCase()&&"Z"==a[2][0].toUpperCase(),n=j,o=a.length;o>n;n++){if(d.push(k=[]),l=a[n],l[0]!=bb.call(l[0]))switch(k[0]=bb.call(l[0]),k[0]){case"A":k[1]=l[1],k[2]=l[2],k[3]=l[3],k[4]=l[4],k[5]=l[5],k[6]=+(l[6]+e),k[7]=+(l[7]+f);break;case"V":k[1]=+l[1]+f;break;case"H":k[1]=+l[1]+e;break;case"R":for(var p=[e,f][E](l.slice(1)),q=2,r=p.length;r>q;q++)p[q]=+p[q]+e,p[++q]=+p[q]+f;d.pop(),d=d[E](h(p,m));break;case"M":g=+l[1]+e,i=+l[2]+f;default:for(q=1,r=l.length;r>q;q++)k[q]=+l[q]+(q%2?e:f)}else if("R"==l[0])p=[e,f][E](l.slice(1)),d.pop(),d=d[E](h(p,m)),k=["R"][E](l.slice(-2));else for(var s=0,t=l.length;t>s;s++)k[s]=l[s];switch(k[0]){case"Z":e=g,f=i;break;case"H":e=k[1];break;case"V":f=k[1];break;case"M":g=k[k.length-2],i=k[k.length-1];default:e=k[k.length-2],f=k[k.length-1]}}return d.toString=c._path2string,b.abs=Cb(d),d},Fb=function(a,b,c,d){return[a,b,c,d,c,d]},Gb=function(a,b,c,d,e,f){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*e+h*c,g*f+h*d,e,f]},Hb=function(a,b,c,d,e,g,h,i,j,k){var l,m=120*S/180,n=S/180*(+e||0),o=[],p=f(function(a,b,c){var d=a*N.cos(c)-b*N.sin(c),e=a*N.sin(c)+b*N.cos(c);return{x:d,y:e}});if(k)y=k[0],z=k[1],w=k[2],x=k[3];else{l=p(a,b,-n),a=l.x,b=l.y,l=p(i,j,-n),i=l.x,j=l.y;var q=(N.cos(S/180*e),N.sin(S/180*e),(a-i)/2),r=(b-j)/2,s=q*q/(c*c)+r*r/(d*d);s>1&&(s=N.sqrt(s),c=s*c,d=s*d);var t=c*c,u=d*d,v=(g==h?-1:1)*N.sqrt(Q((t*u-t*r*r-u*q*q)/(t*r*r+u*q*q))),w=v*c*r/d+(a+i)/2,x=v*-d*q/c+(b+j)/2,y=N.asin(((b-x)/d).toFixed(9)),z=N.asin(((j-x)/d).toFixed(9));y=w>a?S-y:y,z=w>i?S-z:z,0>y&&(y=2*S+y),0>z&&(z=2*S+z),h&&y>z&&(y-=2*S),!h&&z>y&&(z-=2*S)}var A=z-y;if(Q(A)>m){var B=z,C=i,D=j;z=y+m*(h&&z>y?1:-1),i=w+c*N.cos(z),j=x+d*N.sin(z),o=Hb(i,j,c,d,e,0,h,C,D,[z,B,w,x])}A=z-y;var F=N.cos(y),G=N.sin(y),H=N.cos(z),I=N.sin(z),K=N.tan(A/4),L=4/3*c*K,M=4/3*d*K,O=[a,b],P=[a+L*G,b-M*F],R=[i+L*I,j-M*H],T=[i,j];if(P[0]=2*O[0]-P[0],P[1]=2*O[1]-P[1],k)return[P,R,T][E](o);o=[P,R,T][E](o).join()[J](",");for(var U=[],V=0,W=o.length;W>V;V++)U[V]=V%2?p(o[V-1],o[V],n).y:p(o[V],o[V+1],n).x;return U},Ib=function(a,b,c,d,e,f,g,h,i){var j=1-i;return{x:R(j,3)*a+3*R(j,2)*i*c+3*j*i*i*e+R(i,3)*g,y:R(j,3)*b+3*R(j,2)*i*d+3*j*i*i*f+R(i,3)*h}},Jb=f(function(a,b,c,d,e,f,g,h){var i,j=e-2*c+a-(g-2*e+c),k=2*(c-a)-2*(e-c),l=a-c,m=(-k+N.sqrt(k*k-4*j*l))/2/j,n=(-k-N.sqrt(k*k-4*j*l))/2/j,o=[b,h],p=[a,g];return Q(m)>"1e12"&&(m=.5),Q(n)>"1e12"&&(n=.5),m>0&&1>m&&(i=Ib(a,b,c,d,e,f,g,h,m),p.push(i.x),o.push(i.y)),n>0&&1>n&&(i=Ib(a,b,c,d,e,f,g,h,n),p.push(i.x),o.push(i.y)),j=f-2*d+b-(h-2*f+d),k=2*(d-b)-2*(f-d),l=b-d,m=(-k+N.sqrt(k*k-4*j*l))/2/j,n=(-k-N.sqrt(k*k-4*j*l))/2/j,Q(m)>"1e12"&&(m=.5),Q(n)>"1e12"&&(n=.5),m>0&&1>m&&(i=Ib(a,b,c,d,e,f,g,h,m),p.push(i.x),o.push(i.y)),n>0&&1>n&&(i=Ib(a,b,c,d,e,f,g,h,n),p.push(i.x),o.push(i.y)),{min:{x:P[D](0,p),y:P[D](0,o)},max:{x:O[D](0,p),y:O[D](0,o)}}}),Kb=c._path2curve=f(function(a,b){var c=!b&&Ab(a);if(!b&&c.curve)return Cb(c.curve);for(var d=Eb(a),e=b&&Eb(b),f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},h=(function(a,b,c){var d,e;if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];switch(!(a[0]in{T:1,Q:1})&&(b.qx=b.qy=null),a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"][E](Hb[D](0,[b.x,b.y][E](a.slice(1))));break;case"S":"C"==c||"S"==c?(d=2*b.x-b.bx,e=2*b.y-b.by):(d=b.x,e=b.y),a=["C",d,e][E](a.slice(1));break;case"T":"Q"==c||"T"==c?(b.qx=2*b.x-b.qx,b.qy=2*b.y-b.qy):(b.qx=b.x,b.qy=b.y),a=["C"][E](Gb(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"][E](Gb(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][E](Fb(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][E](Fb(b.x,b.y,a[1],b.y));break;case"V":a=["C"][E](Fb(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][E](Fb(b.x,b.y,b.X,b.Y))}return a}),i=function(a,b){if(a[b].length>7){a[b].shift();for(var c=a[b];c.length;)a.splice(b++,0,["C"][E](c.splice(0,6)));a.splice(b,1),l=O(d.length,e&&e.length||0)}},j=function(a,b,c,f,g){a&&b&&"M"==a[g][0]&&"M"!=b[g][0]&&(b.splice(g,0,["M",f.x,f.y]),c.bx=0,c.by=0,c.x=a[g][1],c.y=a[g][2],l=O(d.length,e&&e.length||0))},k=0,l=O(d.length,e&&e.length||0);l>k;k++){d[k]=h(d[k],f),i(d,k),e&&(e[k]=h(e[k],g)),e&&i(e,k),j(d,e,f,g,k),j(e,d,g,f,k);var m=d[k],n=e&&e[k],o=m.length,p=e&&n.length;f.x=m[o-2],f.y=m[o-1],f.bx=_(m[o-4])||f.x,f.by=_(m[o-3])||f.y,g.bx=e&&(_(n[p-4])||g.x),g.by=e&&(_(n[p-3])||g.y),g.x=e&&n[p-2],g.y=e&&n[p-1]}return e||(c.curve=Cb(d)),e?[d,e]:d},null,Cb),Lb=(c._parseDots=f(function(a){for(var b=[],d=0,e=a.length;e>d;d++){var f={},g=a[d].match(/^([^:]*):?([\d\.]*)/);if(f.color=c.getRGB(g[1]),f.color.error)return null;f.color=f.color.hex,g[2]&&(f.offset=g[2]+"%"),b.push(f)}for(d=1,e=b.length-1;e>d;d++)if(!b[d].offset){for(var h=_(b[d-1].offset||0),i=0,j=d+1;e>j;j++)if(b[j].offset){i=b[j].offset;break}i||(i=100,j=e),i=_(i);for(var k=(i-h)/(j-d+1);j>d;d++)h+=k,b[d].offset=h+"%"}return b}),c._tear=function(a,b){a==b.top&&(b.top=a.prev),a==b.bottom&&(b.bottom=a.next),a.next&&(a.next.prev=a.prev),a.prev&&(a.prev.next=a.next)}),Mb=(c._tofront=function(a,b){b.top!==a&&(Lb(a,b),a.next=null,a.prev=b.top,b.top.next=a,b.top=a)},c._toback=function(a,b){b.bottom!==a&&(Lb(a,b),a.next=b.bottom,a.prev=null,b.bottom.prev=a,b.bottom=a)},c._insertafter=function(a,b,c){Lb(a,c),b==c.top&&(c.top=a),b.next&&(b.next.prev=a),a.next=b.next,a.prev=b,b.next=a},c._insertbefore=function(a,b,c){Lb(a,c),b==c.bottom&&(c.bottom=a),b.prev&&(b.prev.next=a),a.prev=b.prev,b.prev=a,a.next=b},c.toMatrix=function(a,b){var c=Bb(a),d={_:{transform:G},getBBox:function(){return c}};return Nb(d,b),d.matrix}),Nb=(c.transformPath=function(a,b){return rb(a,Mb(a,b))},c._extractTransform=function(a,b){if(null==b)return a._.transform;b=I(b).replace(/\.{3}|\u2026/g,a._.transform||G);var d=c.parseTransformString(b),e=0,f=0,g=0,h=1,i=1,j=a._,k=new o;if(j.transform=d||[],d)for(var l=0,m=d.length;m>l;l++){var n,p,q,r,s,t=d[l],u=t.length,v=I(t[0]).toLowerCase(),w=t[0]!=v,x=w?k.invert():0;"t"==v&&3==u?w?(n=x.x(0,0),p=x.y(0,0),q=x.x(t[1],t[2]),r=x.y(t[1],t[2]),k.translate(q-n,r-p)):k.translate(t[1],t[2]):"r"==v?2==u?(s=s||a.getBBox(1),k.rotate(t[1],s.x+s.width/2,s.y+s.height/2),e+=t[1]):4==u&&(w?(q=x.x(t[2],t[3]),r=x.y(t[2],t[3]),k.rotate(t[1],q,r)):k.rotate(t[1],t[2],t[3]),e+=t[1]):"s"==v?2==u||3==u?(s=s||a.getBBox(1),k.scale(t[1],t[u-1],s.x+s.width/2,s.y+s.height/2),h*=t[1],i*=t[u-1]):5==u&&(w?(q=x.x(t[3],t[4]),r=x.y(t[3],t[4]),k.scale(t[1],t[2],q,r)):k.scale(t[1],t[2],t[3],t[4]),h*=t[1],i*=t[2]):"m"==v&&7==u&&k.add(t[1],t[2],t[3],t[4],t[5],t[6]),j.dirtyT=1,a.matrix=k}a.matrix=k,j.sx=h,j.sy=i,j.deg=e,j.dx=f=k.e,j.dy=g=k.f,1==h&&1==i&&!e&&j.bbox?(j.bbox.x+=+f,j.bbox.y+=+g):j.dirtyT=1}),Ob=function(a){var b=a[0];switch(b.toLowerCase()){case"t":return[b,0,0];case"m":return[b,1,0,0,1,0,0];case"r":return 4==a.length?[b,0,a[2],a[3]]:[b,0];case"s":return 5==a.length?[b,1,1,a[3],a[4]]:3==a.length?[b,1,1]:[b,1]}},Pb=c._equaliseTransform=function(a,b){b=I(b).replace(/\.{3}|\u2026/g,a),a=c.parseTransformString(a)||[],b=c.parseTransformString(b)||[];for(var d,e,f,g,h=O(a.length,b.length),i=[],j=[],k=0;h>k;k++){if(f=a[k]||Ob(b[k]),g=b[k]||Ob(f),f[0]!=g[0]||"r"==f[0].toLowerCase()&&(f[2]!=g[2]||f[3]!=g[3])||"s"==f[0].toLowerCase()&&(f[3]!=g[3]||f[4]!=g[4]))return;for(i[k]=[],j[k]=[],d=0,e=O(f.length,g.length);e>d;d++)d in f&&(i[k][d]=f[d]),d in g&&(j[k][d]=g[d]) +}return{from:i,to:j}};c._getContainer=function(a,b,d,e){var f;return f=null!=e||c.is(a,"object")?a:A.doc.getElementById(a),null!=f?f.tagName?null==b?{container:f,width:f.style.pixelWidth||f.offsetWidth,height:f.style.pixelHeight||f.offsetHeight}:{container:f,width:b,height:d}:{container:1,x:a,y:b,width:d,height:e}:void 0},c.pathToRelative=Db,c._engine={},c.path2curve=Kb,c.matrix=function(a,b,c,d,e,f){return new o(a,b,c,d,e,f)},function(a){function b(a){return a[0]*a[0]+a[1]*a[1]}function d(a){var c=N.sqrt(b(a));a[0]&&(a[0]/=c),a[1]&&(a[1]/=c)}a.add=function(a,b,c,d,e,f){var g,h,i,j,k=[[],[],[]],l=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],m=[[a,c,e],[b,d,f],[0,0,1]];for(a&&a instanceof o&&(m=[[a.a,a.c,a.e],[a.b,a.d,a.f],[0,0,1]]),g=0;3>g;g++)for(h=0;3>h;h++){for(j=0,i=0;3>i;i++)j+=l[g][i]*m[i][h];k[g][h]=j}this.a=k[0][0],this.b=k[1][0],this.c=k[0][1],this.d=k[1][1],this.e=k[0][2],this.f=k[1][2]},a.invert=function(){var a=this,b=a.a*a.d-a.b*a.c;return new o(a.d/b,-a.b/b,-a.c/b,a.a/b,(a.c*a.f-a.d*a.e)/b,(a.b*a.e-a.a*a.f)/b)},a.clone=function(){return new o(this.a,this.b,this.c,this.d,this.e,this.f)},a.translate=function(a,b){this.add(1,0,0,1,a,b)},a.scale=function(a,b,c,d){null==b&&(b=a),(c||d)&&this.add(1,0,0,1,c,d),this.add(a,0,0,b,0,0),(c||d)&&this.add(1,0,0,1,-c,-d)},a.rotate=function(a,b,d){a=c.rad(a),b=b||0,d=d||0;var e=+N.cos(a).toFixed(9),f=+N.sin(a).toFixed(9);this.add(e,f,-f,e,b,d),this.add(1,0,0,1,-b,-d)},a.x=function(a,b){return a*this.a+b*this.c+this.e},a.y=function(a,b){return a*this.b+b*this.d+this.f},a.get=function(a){return+this[I.fromCharCode(97+a)].toFixed(4)},a.toString=function(){return c.svg?"matrix("+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+")":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()},a.toFilter=function(){return"progid:DXImageTransform.Microsoft.Matrix(M11="+this.get(0)+", M12="+this.get(2)+", M21="+this.get(1)+", M22="+this.get(3)+", Dx="+this.get(4)+", Dy="+this.get(5)+", sizingmethod='auto expand')"},a.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},a.split=function(){var a={};a.dx=this.e,a.dy=this.f;var e=[[this.a,this.c],[this.b,this.d]];a.scalex=N.sqrt(b(e[0])),d(e[0]),a.shear=e[0][0]*e[1][0]+e[0][1]*e[1][1],e[1]=[e[1][0]-e[0][0]*a.shear,e[1][1]-e[0][1]*a.shear],a.scaley=N.sqrt(b(e[1])),d(e[1]),a.shear/=a.scaley;var f=-e[0][1],g=e[1][1];return 0>g?(a.rotate=c.deg(N.acos(g)),0>f&&(a.rotate=360-a.rotate)):a.rotate=c.deg(N.asin(f)),a.isSimple=!(+a.shear.toFixed(9)||a.scalex.toFixed(9)!=a.scaley.toFixed(9)&&a.rotate),a.isSuperSimple=!+a.shear.toFixed(9)&&a.scalex.toFixed(9)==a.scaley.toFixed(9)&&!a.rotate,a.noRotation=!+a.shear.toFixed(9)&&!a.rotate,a},a.toTransformString=function(a){var b=a||this[J]();return b.isSimple?(b.scalex=+b.scalex.toFixed(4),b.scaley=+b.scaley.toFixed(4),b.rotate=+b.rotate.toFixed(4),(b.dx||b.dy?"t"+[b.dx,b.dy]:G)+(1!=b.scalex||1!=b.scaley?"s"+[b.scalex,b.scaley,0,0]:G)+(b.rotate?"r"+[b.rotate,0,0]:G)):"m"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}}(o.prototype);var Qb=navigator.userAgent.match(/Version\/(.*?)\s/)||navigator.userAgent.match(/Chrome\/(\d+)/);v.safari="Apple Computer, Inc."==navigator.vendor&&(Qb&&Qb[1]<4||"iP"==navigator.platform.slice(0,2))||"Google Inc."==navigator.vendor&&Qb&&Qb[1]<8?function(){var a=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:"none"});setTimeout(function(){a.remove()})}:mb;for(var Rb=function(){this.returnValue=!1},Sb=function(){return this.originalEvent.preventDefault()},Tb=function(){this.cancelBubble=!0},Ub=function(){return this.originalEvent.stopPropagation()},Vb=function(a){var b=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,c=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft;return{x:a.clientX+c,y:a.clientY+b}},Wb=function(){return A.doc.addEventListener?function(a,b,c,d){var e=function(a){var b=Vb(a);return c.call(d,a,b.x,b.y)};if(a.addEventListener(b,e,!1),F&&L[b]){var f=function(b){for(var e=Vb(b),f=b,g=0,h=b.targetTouches&&b.targetTouches.length;h>g;g++)if(b.targetTouches[g].target==a){b=b.targetTouches[g],b.originalEvent=f,b.preventDefault=Sb,b.stopPropagation=Ub;break}return c.call(d,b,e.x,e.y)};a.addEventListener(L[b],f,!1)}return function(){return a.removeEventListener(b,e,!1),F&&L[b]&&a.removeEventListener(L[b],e,!1),!0}}:A.doc.attachEvent?function(a,b,c,d){var e=function(a){a=a||A.win.event;var b=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,e=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft,f=a.clientX+e,g=a.clientY+b;return a.preventDefault=a.preventDefault||Rb,a.stopPropagation=a.stopPropagation||Tb,c.call(d,a,f,g)};a.attachEvent("on"+b,e);var f=function(){return a.detachEvent("on"+b,e),!0};return f}:void 0}(),Xb=[],Yb=function(a){for(var c,d=a.clientX,e=a.clientY,f=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,g=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft,h=Xb.length;h--;){if(c=Xb[h],F&&a.touches){for(var i,j=a.touches.length;j--;)if(i=a.touches[j],i.identifier==c.el._drag.id){d=i.clientX,e=i.clientY,(a.originalEvent?a.originalEvent:a).preventDefault();break}}else a.preventDefault();var k,l=c.el.node,m=l.nextSibling,n=l.parentNode,o=l.style.display;A.win.opera&&n.removeChild(l),l.style.display="none",k=c.el.paper.getElementByPoint(d,e),l.style.display=o,A.win.opera&&(m?n.insertBefore(l,m):n.appendChild(l)),k&&b("raphael.drag.over."+c.el.id,c.el,k),d+=g,e+=f,b("raphael.drag.move."+c.el.id,c.move_scope||c.el,d-c.el._drag.x,e-c.el._drag.y,d,e,a)}},Zb=function(a){c.unmousemove(Yb).unmouseup(Zb);for(var d,e=Xb.length;e--;)d=Xb[e],d.el._drag={},b("raphael.drag.end."+d.el.id,d.end_scope||d.start_scope||d.move_scope||d.el,a);Xb=[]},$b=c.el={},_b=K.length;_b--;)!function(a){c[a]=$b[a]=function(b,d){return c.is(b,"function")&&(this.events=this.events||[],this.events.push({name:a,f:b,unbind:Wb(this.shape||this.node||A.doc,a,b,d||this)})),this},c["un"+a]=$b["un"+a]=function(b){for(var d=this.events||[],e=d.length;e--;)d[e].name!=a||!c.is(b,"undefined")&&d[e].f!=b||(d[e].unbind(),d.splice(e,1),!d.length&&delete this.events);return this}}(K[_b]);$b.data=function(a,d){var e=kb[this.id]=kb[this.id]||{};if(0==arguments.length)return e;if(1==arguments.length){if(c.is(a,"object")){for(var f in a)a[z](f)&&this.data(f,a[f]);return this}return b("raphael.data.get."+this.id,this,e[a],a),e[a]}return e[a]=d,b("raphael.data.set."+this.id,this,d,a),this},$b.removeData=function(a){return null==a?kb[this.id]={}:kb[this.id]&&delete kb[this.id][a],this},$b.getData=function(){return d(kb[this.id]||{})},$b.hover=function(a,b,c,d){return this.mouseover(a,c).mouseout(b,d||c)},$b.unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};var ac=[];$b.drag=function(a,d,e,f,g,h){function i(i){(i.originalEvent||i).preventDefault();var j=i.clientX,k=i.clientY,l=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,m=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft;if(this._drag.id=i.identifier,F&&i.touches)for(var n,o=i.touches.length;o--;)if(n=i.touches[o],this._drag.id=n.identifier,n.identifier==this._drag.id){j=n.clientX,k=n.clientY;break}this._drag.x=j+m,this._drag.y=k+l,!Xb.length&&c.mousemove(Yb).mouseup(Zb),Xb.push({el:this,move_scope:f,start_scope:g,end_scope:h}),d&&b.on("raphael.drag.start."+this.id,d),a&&b.on("raphael.drag.move."+this.id,a),e&&b.on("raphael.drag.end."+this.id,e),b("raphael.drag.start."+this.id,g||f||this,i.clientX+m,i.clientY+l,i)}return this._drag={},ac.push({el:this,start:i}),this.mousedown(i),this},$b.onDragOver=function(a){a?b.on("raphael.drag.over."+this.id,a):b.unbind("raphael.drag.over."+this.id)},$b.undrag=function(){for(var a=ac.length;a--;)ac[a].el==this&&(this.unmousedown(ac[a].start),ac.splice(a,1),b.unbind("raphael.drag.*."+this.id));!ac.length&&c.unmousemove(Yb).unmouseup(Zb),Xb=[]},v.circle=function(a,b,d){var e=c._engine.circle(this,a||0,b||0,d||0);return this.__set__&&this.__set__.push(e),e},v.rect=function(a,b,d,e,f){var g=c._engine.rect(this,a||0,b||0,d||0,e||0,f||0);return this.__set__&&this.__set__.push(g),g},v.ellipse=function(a,b,d,e){var f=c._engine.ellipse(this,a||0,b||0,d||0,e||0);return this.__set__&&this.__set__.push(f),f},v.path=function(a){a&&!c.is(a,U)&&!c.is(a[0],V)&&(a+=G);var b=c._engine.path(c.format[D](c,arguments),this);return this.__set__&&this.__set__.push(b),b},v.image=function(a,b,d,e,f){var g=c._engine.image(this,a||"about:blank",b||0,d||0,e||0,f||0);return this.__set__&&this.__set__.push(g),g},v.text=function(a,b,d){var e=c._engine.text(this,a||0,b||0,I(d));return this.__set__&&this.__set__.push(e),e},v.set=function(a){!c.is(a,"array")&&(a=Array.prototype.splice.call(arguments,0,arguments.length));var b=new mc(a);return this.__set__&&this.__set__.push(b),b.paper=this,b.type="set",b},v.setStart=function(a){this.__set__=a||this.set()},v.setFinish=function(){var a=this.__set__;return delete this.__set__,a},v.setSize=function(a,b){return c._engine.setSize.call(this,a,b)},v.setViewBox=function(a,b,d,e,f){return c._engine.setViewBox.call(this,a,b,d,e,f)},v.top=v.bottom=null,v.raphael=c;var bc=function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument,d=c.body,e=c.documentElement,f=e.clientTop||d.clientTop||0,g=e.clientLeft||d.clientLeft||0,h=b.top+(A.win.pageYOffset||e.scrollTop||d.scrollTop)-f,i=b.left+(A.win.pageXOffset||e.scrollLeft||d.scrollLeft)-g;return{y:h,x:i}};v.getElementByPoint=function(a,b){var c=this,d=c.canvas,e=A.doc.elementFromPoint(a,b);if(A.win.opera&&"svg"==e.tagName){var f=bc(d),g=d.createSVGRect();g.x=a-f.x,g.y=b-f.y,g.width=g.height=1;var h=d.getIntersectionList(g,null);h.length&&(e=h[h.length-1])}if(!e)return null;for(;e.parentNode&&e!=d.parentNode&&!e.raphael;)e=e.parentNode;return e==c.canvas.parentNode&&(e=d),e=e&&e.raphael?c.getById(e.raphaelid):null},v.getElementsByBBox=function(a){var b=this.set();return this.forEach(function(d){c.isBBoxIntersect(d.getBBox(),a)&&b.push(d)}),b},v.getById=function(a){for(var b=this.bottom;b;){if(b.id==a)return b;b=b.next}return null},v.forEach=function(a,b){for(var c=this.bottom;c;){if(a.call(b,c)===!1)return this;c=c.next}return this},v.getElementsByPoint=function(a,b){var c=this.set();return this.forEach(function(d){d.isPointInside(a,b)&&c.push(d)}),c},$b.isPointInside=function(a,b){var d=this.realPath=qb[this.type](this);return this.attr("transform")&&this.attr("transform").length&&(d=c.transformPath(d,this.attr("transform"))),c.isPointInsidePath(d,a,b)},$b.getBBox=function(a){if(this.removed)return{};var b=this._;return a?((b.dirty||!b.bboxwt)&&(this.realPath=qb[this.type](this),b.bboxwt=Bb(this.realPath),b.bboxwt.toString=p,b.dirty=0),b.bboxwt):((b.dirty||b.dirtyT||!b.bbox)&&((b.dirty||!this.realPath)&&(b.bboxwt=0,this.realPath=qb[this.type](this)),b.bbox=Bb(rb(this.realPath,this.matrix)),b.bbox.toString=p,b.dirty=b.dirtyT=0),b.bbox)},$b.clone=function(){if(this.removed)return null;var a=this.paper[this.type]().attr(this.attr());return this.__set__&&this.__set__.push(a),a},$b.glow=function(a){if("text"==this.type)return null;a=a||{};var b={width:(a.width||10)+(+this.attr("stroke-width")||1),fill:a.fill||!1,opacity:a.opacity||.5,offsetx:a.offsetx||0,offsety:a.offsety||0,color:a.color||"#000"},c=b.width/2,d=this.paper,e=d.set(),f=this.realPath||qb[this.type](this);f=this.matrix?rb(f,this.matrix):f;for(var g=1;c+1>g;g++)e.push(d.path(f).attr({stroke:b.color,fill:b.fill?b.color:"none","stroke-linejoin":"round","stroke-linecap":"round","stroke-width":+(b.width/c*g).toFixed(3),opacity:+(b.opacity/c).toFixed(3)}));return e.insertBefore(this).translate(b.offsetx,b.offsety)};var cc=function(a,b,d,e,f,g,h,i,l){return null==l?j(a,b,d,e,f,g,h,i):c.findDotsAtSegment(a,b,d,e,f,g,h,i,k(a,b,d,e,f,g,h,i,l))},dc=function(a,b){return function(d,e,f){d=Kb(d);for(var g,h,i,j,k,l="",m={},n=0,o=0,p=d.length;p>o;o++){if(i=d[o],"M"==i[0])g=+i[1],h=+i[2];else{if(j=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6]),n+j>e){if(b&&!m.start){if(k=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),l+=["C"+k.start.x,k.start.y,k.m.x,k.m.y,k.x,k.y],f)return l;m.start=l,l=["M"+k.x,k.y+"C"+k.n.x,k.n.y,k.end.x,k.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!a&&!b)return k=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),{x:k.x,y:k.y,alpha:k.alpha}}n+=j,g=+i[5],h=+i[6]}l+=i.shift()+i}return m.end=l,k=a?n:b?m:c.findDotsAtSegment(g,h,i[0],i[1],i[2],i[3],i[4],i[5],1),k.alpha&&(k={x:k.x,y:k.y,alpha:k.alpha}),k}},ec=dc(1),fc=dc(),gc=dc(0,1);c.getTotalLength=ec,c.getPointAtLength=fc,c.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6)return gc(a,b).end;var d=gc(a,c,1);return b?gc(d,b).end:d},$b.getTotalLength=function(){var a=this.getPath();if(a)return this.node.getTotalLength?this.node.getTotalLength():ec(a)},$b.getPointAtLength=function(a){var b=this.getPath();if(b)return fc(b,a)},$b.getPath=function(){var a,b=c._getPath[this.type];if("text"!=this.type&&"set"!=this.type)return b&&(a=b(this)),a},$b.getSubpath=function(a,b){var d=this.getPath();if(d)return c.getSubpath(d,a,b)};var hc=c.easing_formulas={linear:function(a){return a},"<":function(a){return R(a,1.7)},">":function(a){return R(a,.48)},"<>":function(a){var b=.48-a/1.04,c=N.sqrt(.1734+b*b),d=c-b,e=R(Q(d),1/3)*(0>d?-1:1),f=-c-b,g=R(Q(f),1/3)*(0>f?-1:1),h=e+g+.5;return 3*(1-h)*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a-=1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){return a==!!a?a:R(2,-10*a)*N.sin((a-.075)*2*S/.3)+1},bounce:function(a){var b,c=7.5625,d=2.75;return 1/d>a?b=c*a*a:2/d>a?(a-=1.5/d,b=c*a*a+.75):2.5/d>a?(a-=2.25/d,b=c*a*a+.9375):(a-=2.625/d,b=c*a*a+.984375),b}};hc.easeIn=hc["ease-in"]=hc["<"],hc.easeOut=hc["ease-out"]=hc[">"],hc.easeInOut=hc["ease-in-out"]=hc["<>"],hc["back-in"]=hc.backIn,hc["back-out"]=hc.backOut;var ic=[],jc=a.requestAnimationFrame||a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame||a.msRequestAnimationFrame||function(a){setTimeout(a,16)},kc=function(){for(var a=+new Date,d=0;dh))if(i>h){var q=j(h/i);for(var r in k)if(k[z](r)){switch(db[r]){case T:f=+k[r]+q*i*l[r];break;case"colour":f="rgb("+[lc($(k[r].r+q*i*l[r].r)),lc($(k[r].g+q*i*l[r].g)),lc($(k[r].b+q*i*l[r].b))].join(",")+")";break;case"path":f=[];for(var t=0,u=k[r].length;u>t;t++){f[t]=[k[r][t][0]];for(var v=1,w=k[r][t].length;w>v;v++)f[t][v]=+k[r][t][v]+q*i*l[r][t][v];f[t]=f[t].join(H)}f=f.join(H);break;case"transform":if(l[r].real)for(f=[],t=0,u=k[r].length;u>t;t++)for(f[t]=[k[r][t][0]],v=1,w=k[r][t].length;w>v;v++)f[t][v]=k[r][t][v]+q*i*l[r][t][v];else{var x=function(a){return+k[r][a]+q*i*l[r][a]};f=[["m",x(0),x(1),x(2),x(3),x(4),x(5)]]}break;case"csv":if("clip-rect"==r)for(f=[],t=4;t--;)f[t]=+k[r][t]+q*i*l[r][t];break;default:var y=[][E](k[r]);for(f=[],t=n.paper.customAttributes[r].length;t--;)f[t]=+y[t]+q*i*l[r][t]}o[r]=f}n.attr(o),function(a,c,d){setTimeout(function(){b("raphael.anim.frame."+a,c,d)})}(n.id,n,e.anim)}else{if(function(a,d,e){setTimeout(function(){b("raphael.anim.frame."+d.id,d,e),b("raphael.anim.finish."+d.id,d,e),c.is(a,"function")&&a.call(d)})}(e.callback,n,e.anim),n.attr(m),ic.splice(d--,1),e.repeat>1&&!e.next){for(g in m)m[z](g)&&(p[g]=e.totalOrigin[g]);e.el.attr(p),s(e.anim,e.el,e.anim.percents[0],null,e.totalOrigin,e.repeat-1)}e.next&&!e.stop&&s(e.anim,e.el,e.next,null,e.totalOrigin,e.repeat)}}}c.svg&&n&&n.paper&&n.paper.safari(),ic.length&&jc(kc)},lc=function(a){return a>255?255:0>a?0:a};$b.animateWith=function(a,b,d,e,f,g){var h=this;if(h.removed)return g&&g.call(h),h;var i=d instanceof r?d:c.animation(d,e,f,g);s(i,h,i.percents[0],null,h.attr());for(var j=0,k=ic.length;k>j;j++)if(ic[j].anim==b&&ic[j].el==a){ic[k-1].start=ic[j].start;break}return h},$b.onAnimation=function(a){return a?b.on("raphael.anim.frame."+this.id,a):b.unbind("raphael.anim.frame."+this.id),this},r.prototype.delay=function(a){var b=new r(this.anim,this.ms);return b.times=this.times,b.del=+a||0,b},r.prototype.repeat=function(a){var b=new r(this.anim,this.ms);return b.del=this.del,b.times=N.floor(O(a,0))||1,b},c.animation=function(a,b,d,e){if(a instanceof r)return a;(c.is(d,"function")||!d)&&(e=e||d||null,d=null),a=Object(a),b=+b||0;var f,g,h={};for(g in a)a[z](g)&&_(g)!=g&&_(g)+"%"!=g&&(f=!0,h[g]=a[g]);return f?(d&&(h.easing=d),e&&(h.callback=e),new r({100:h},b)):new r(a,b)},$b.animate=function(a,b,d,e){var f=this;if(f.removed)return e&&e.call(f),f;var g=a instanceof r?a:c.animation(a,b,d,e);return s(g,f,g.percents[0],null,f.attr()),f},$b.setTime=function(a,b){return a&&null!=b&&this.status(a,P(b,a.ms)/a.ms),this},$b.status=function(a,b){var c,d,e=[],f=0;if(null!=b)return s(a,this,-1,P(b,1)),this;for(c=ic.length;c>f;f++)if(d=ic[f],d.el.id==this.id&&(!a||d.anim==a)){if(a)return d.status;e.push({anim:d.anim,status:d.status})}return a?0:e},$b.pause=function(a){for(var c=0;cb;b++)!a[b]||a[b].constructor!=$b.constructor&&a[b].constructor!=mc||(this[this.items.length]=this.items[this.items.length]=a[b],this.length++)},nc=mc.prototype;nc.push=function(){for(var a,b,c=0,d=arguments.length;d>c;c++)a=arguments[c],!a||a.constructor!=$b.constructor&&a.constructor!=mc||(b=this.items.length,this[b]=this.items[b]=a,this.length++);return this},nc.pop=function(){return this.length&&delete this[this.length--],this.items.pop()},nc.forEach=function(a,b){for(var c=0,d=this.items.length;d>c;c++)if(a.call(b,this.items[c],c)===!1)return this;return this};for(var oc in $b)$b[z](oc)&&(nc[oc]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a][D](c,b)})}}(oc));return nc.attr=function(a,b){if(a&&c.is(a,V)&&c.is(a[0],"object"))for(var d=0,e=a.length;e>d;d++)this.items[d].attr(a[d]);else for(var f=0,g=this.items.length;g>f;f++)this.items[f].attr(a,b);return this},nc.clear=function(){for(;this.length;)this.pop()},nc.splice=function(a,b){a=0>a?O(this.length+a,0):a,b=O(0,P(this.length-a,b));var c,d=[],e=[],f=[];for(c=2;cc;c++)e.push(this[a+c]);for(;cc?f[c]:d[c-g];for(c=this.items.length=this.length-=b-g;this[c];)delete this[c++];return new mc(e)},nc.exclude=function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]==a)return this.splice(b,1),!0},nc.animate=function(a,b,d,e){(c.is(d,"function")||!d)&&(e=d||null);var f,g,h=this.items.length,i=h,j=this;if(!h)return this;e&&(g=function(){!--h&&e.call(j)}),d=c.is(d,U)?d:g;var k=c.animation(a,b,d,g);for(f=this.items[--i].animate(k);i--;)this.items[i]&&!this.items[i].removed&&this.items[i].animateWith(f,k,k),this.items[i]&&!this.items[i].removed||h--;return this},nc.insertAfter=function(a){for(var b=this.items.length;b--;)this.items[b].insertAfter(a);return this},nc.getBBox=function(){for(var a=[],b=[],c=[],d=[],e=this.items.length;e--;)if(!this.items[e].removed){var f=this.items[e].getBBox();a.push(f.x),b.push(f.y),c.push(f.x+f.width),d.push(f.y+f.height)}return a=P[D](0,a),b=P[D](0,b),c=O[D](0,c),d=O[D](0,d),{x:a,y:b,x2:c,y2:d,width:c-a,height:d-b}},nc.clone=function(a){a=this.paper.set();for(var b=0,c=this.items.length;c>b;b++)a.push(this.items[b].clone());return a},nc.toString=function(){return"Raphaël‘s set"},nc.glow=function(a){var b=this.paper.set();return this.forEach(function(c){var d=c.glow(a);null!=d&&d.forEach(function(a){b.push(a)})}),b},nc.isPointInside=function(a,b){var c=!1;return this.forEach(function(d){return d.isPointInside(a,b)?(console.log("runned"),c=!0,!1):void 0}),c},c.registerFont=function(a){if(!a.face)return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face["font-family"];for(var d in a.face)a.face[z](d)&&(b.face[d]=a.face[d]);if(this.fonts[c]?this.fonts[c].push(b):this.fonts[c]=[b],!a.svg){b.face["units-per-em"]=ab(a.face["units-per-em"],10);for(var e in a.glyphs)if(a.glyphs[z](e)){var f=a.glyphs[e];if(b.glyphs[e]={w:f.w,k:{},d:f.d&&"M"+f.d.replace(/[mlcxtrv]/g,function(a){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[a]||"M"})+"z"},f.k)for(var g in f.k)f[z](g)&&(b.glyphs[e].k[g]=f.k[g])}}return a},v.getFont=function(a,b,d,e){if(e=e||"normal",d=d||"normal",b=+b||{normal:400,bold:700,lighter:300,bolder:800}[b]||400,c.fonts){var f=c.fonts[a];if(!f){var g=new RegExp("(^|\\s)"+a.replace(/[^\w\d\s+!~.:_-]/g,G)+"(\\s|$)","i");for(var h in c.fonts)if(c.fonts[z](h)&&g.test(h)){f=c.fonts[h];break}}var i;if(f)for(var j=0,k=f.length;k>j&&(i=f[j],i.face["font-weight"]!=b||i.face["font-style"]!=d&&i.face["font-style"]||i.face["font-stretch"]!=e);j++);return i}},v.print=function(a,b,d,e,f,g,h,i){g=g||"middle",h=O(P(h||0,1),-1),i=O(P(i||1,3),1);var j,k=I(d)[J](G),l=0,m=0,n=G;if(c.is(e,"string")&&(e=this.getFont(e)),e){j=(f||16)/e.face["units-per-em"];for(var o=e.face.bbox[J](w),p=+o[0],q=o[3]-o[1],r=0,s=+o[1]+("baseline"==g?q+ +e.face.descent:q/2),t=0,u=k.length;u>t;t++){if("\n"==k[t])l=0,x=0,m=0,r+=q*i;else{var v=m&&e.glyphs[k[t-1]]||{},x=e.glyphs[k[t]];l+=m?(v.w||e.w)+(v.k&&v.k[k[t]]||0)+e.w*h:0,m=1}x&&x.d&&(n+=c.transformPath(x.d,["t",l*j,r*j,"s",j,j,p,s,"t",(a-p)/j,(b-s)/j]))}}return this.path(n).attr({fill:"#000",stroke:"none"})},v.add=function(a){if(c.is(a,"array"))for(var b,d=this.set(),e=0,f=a.length;f>e;e++)b=a[e]||{},x[z](b.type)&&d.push(this[b.type]().attr(b));return d},c.format=function(a,b){var d=c.is(b,V)?[0][E](b):arguments;return a&&c.is(a,U)&&d.length-1&&(a=a.replace(y,function(a,b){return null==d[++b]?G:d[b]})),a||G},c.fullfill=function(){var a=/\{([^\}]+)\}/g,b=/(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g,c=function(a,c,d){var e=d;return c.replace(b,function(a,b,c,d,f){b=b||d,e&&(b in e&&(e=e[b]),"function"==typeof e&&f&&(e=e()))}),e=(null==e||e==d?a:e)+""};return function(b,d){return String(b).replace(a,function(a,b){return c(a,b,d)})}}(),c.ninja=function(){return B.was?A.win.Raphael=B.is:delete Raphael,c},c.st=nc,function(a,b,d){function e(){/in/.test(a.readyState)?setTimeout(e,9):c.eve("raphael.DOMload")}null==a.readyState&&a.addEventListener&&(a.addEventListener(b,d=function(){a.removeEventListener(b,d,!1),a.readyState="complete"},!1),a.readyState="loading"),e()}(document,"DOMContentLoaded"),b.on("raphael.DOMload",function(){u=!0}),function(){if(c.svg){var a="hasOwnProperty",b=String,d=parseFloat,e=parseInt,f=Math,g=f.max,h=f.abs,i=f.pow,j=/[, ]+/,k=c.eve,l="",m=" ",n="http://www.w3.org/1999/xlink",o={block:"M5,0 0,2.5 5,5z",classic:"M5,0 0,2.5 5,5 3.5,3 3.5,2z",diamond:"M2.5,0 5,2.5 2.5,5 0,2.5z",open:"M6,1 1,3.5 6,6",oval:"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z"},p={};c.toString=function(){return"Your browser supports SVG.\nYou are running Raphaël "+this.version};var q=function(d,e){if(e){"string"==typeof d&&(d=q(d));for(var f in e)e[a](f)&&("xlink:"==f.substring(0,6)?d.setAttributeNS(n,f.substring(6),b(e[f])):d.setAttribute(f,b(e[f])))}else d=c._g.doc.createElementNS("http://www.w3.org/2000/svg",d),d.style&&(d.style.webkitTapHighlightColor="rgba(0,0,0,0)");return d},r=function(a,e){var j="linear",k=a.id+e,m=.5,n=.5,o=a.node,p=a.paper,r=o.style,s=c._g.doc.getElementById(k);if(!s){if(e=b(e).replace(c._radial_gradient,function(a,b,c){if(j="radial",b&&c){m=d(b),n=d(c);var e=2*(n>.5)-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&.5!=n&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\s*\-\s*/),"linear"==j){var t=e.shift();if(t=-d(t),isNaN(t))return null;var u=[0,0,f.cos(c.rad(t)),f.sin(c.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=c._parseDots(e);if(!w)return null;if(k=k.replace(/[\(\)\s,\xb0#]/g,"_"),a.gradient&&k!=a.gradient.id&&(p.defs.removeChild(a.gradient),delete a.gradient),!a.gradient){s=q(j+"Gradient",{id:k}),a.gradient=s,q(s,"radial"==j?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:a.matrix.invert()}),p.defs.appendChild(s);for(var x=0,y=w.length;y>x;x++)s.appendChild(q("stop",{offset:w[x].offset?w[x].offset:x?"100%":"0%","stop-color":w[x].color||"#fff"}))}}return q(o,{fill:"url(#"+k+")",opacity:1,"fill-opacity":1}),r.fill=l,r.opacity=1,r.fillOpacity=1,1},s=function(a){var b=a.getBBox(1);q(a.pattern,{patternTransform:a.matrix.invert()+" translate("+b.x+","+b.y+")"})},t=function(d,e,f){if("path"==d.type){for(var g,h,i,j,k,m=b(e).toLowerCase().split("-"),n=d.paper,r=f?"end":"start",s=d.node,t=d.attrs,u=t["stroke-width"],v=m.length,w="classic",x=3,y=3,z=5;v--;)switch(m[v]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":w=m[v];break;case"wide":y=5;break;case"narrow":y=2;break;case"long":x=5;break;case"short":x=2}if("open"==w?(x+=2,y+=2,z+=2,i=1,j=f?4:1,k={fill:"none",stroke:t.stroke}):(j=i=x/2,k={fill:t.stroke,stroke:"none"}),d._.arrows?f?(d._.arrows.endPath&&p[d._.arrows.endPath]--,d._.arrows.endMarker&&p[d._.arrows.endMarker]--):(d._.arrows.startPath&&p[d._.arrows.startPath]--,d._.arrows.startMarker&&p[d._.arrows.startMarker]--):d._.arrows={},"none"!=w){var A="raphael-marker-"+w,B="raphael-marker-"+r+w+x+y;c._g.doc.getElementById(A)?p[A]++:(n.defs.appendChild(q(q("path"),{"stroke-linecap":"round",d:o[w],id:A})),p[A]=1);var C,D=c._g.doc.getElementById(B);D?(p[B]++,C=D.getElementsByTagName("use")[0]):(D=q(q("marker"),{id:B,markerHeight:y,markerWidth:x,orient:"auto",refX:j,refY:y/2}),C=q(q("use"),{"xlink:href":"#"+A,transform:(f?"rotate(180 "+x/2+" "+y/2+") ":l)+"scale("+x/z+","+y/z+")","stroke-width":(1/((x/z+y/z)/2)).toFixed(4)}),D.appendChild(C),n.defs.appendChild(D),p[B]=1),q(C,k);var E=i*("diamond"!=w&&"oval"!=w);f?(g=d._.arrows.startdx*u||0,h=c.getTotalLength(t.path)-E*u):(g=E*u,h=c.getTotalLength(t.path)-(d._.arrows.enddx*u||0)),k={},k["marker-"+r]="url(#"+B+")",(h||g)&&(k.d=c.getSubpath(t.path,g,h)),q(s,k),d._.arrows[r+"Path"]=A,d._.arrows[r+"Marker"]=B,d._.arrows[r+"dx"]=E,d._.arrows[r+"Type"]=w,d._.arrows[r+"String"]=e}else f?(g=d._.arrows.startdx*u||0,h=c.getTotalLength(t.path)-g):(g=0,h=c.getTotalLength(t.path)-(d._.arrows.enddx*u||0)),d._.arrows[r+"Path"]&&q(s,{d:c.getSubpath(t.path,g,h)}),delete d._.arrows[r+"Path"],delete d._.arrows[r+"Marker"],delete d._.arrows[r+"dx"],delete d._.arrows[r+"Type"],delete d._.arrows[r+"String"];for(k in p)if(p[a](k)&&!p[k]){var F=c._g.doc.getElementById(k);F&&F.parentNode.removeChild(F)}}},u={"":[0],none:[0],"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},v=function(a,c,d){if(c=u[b(c).toLowerCase()]){for(var e=a.attrs["stroke-width"]||"1",f={round:e,square:e,butt:0}[a.attrs["stroke-linecap"]||d["stroke-linecap"]]||0,g=[],h=c.length;h--;)g[h]=c[h]*e+(h%2?1:-1)*f;q(a.node,{"stroke-dasharray":g.join(",")})}},w=function(d,f){var i=d.node,k=d.attrs,m=i.style.visibility;i.style.visibility="hidden";for(var o in f)if(f[a](o)){if(!c._availableAttrs[a](o))continue;var p=f[o];switch(k[o]=p,o){case"blur":d.blur(p);break;case"href":case"title":var u=q("title"),w=c._g.doc.createTextNode(p);u.appendChild(w),i.appendChild(u);break;case"target":var x=i.parentNode;if("a"!=x.tagName.toLowerCase()){var u=q("a");x.insertBefore(u,i),u.appendChild(i),x=u}"target"==o?x.setAttributeNS(n,"show","blank"==p?"new":p):x.setAttributeNS(n,o,p);break;case"cursor":i.style.cursor=p;break;case"transform":d.transform(p);break;case"arrow-start":t(d,p);break;case"arrow-end":t(d,p,1);break;case"clip-rect":var z=b(p).split(j);if(4==z.length){d.clip&&d.clip.parentNode.parentNode.removeChild(d.clip.parentNode);var A=q("clipPath"),B=q("rect");A.id=c.createUUID(),q(B,{x:z[0],y:z[1],width:z[2],height:z[3]}),A.appendChild(B),d.paper.defs.appendChild(A),q(i,{"clip-path":"url(#"+A.id+")"}),d.clip=B}if(!p){var C=i.getAttribute("clip-path");if(C){var D=c._g.doc.getElementById(C.replace(/(^url\(#|\)$)/g,l));D&&D.parentNode.removeChild(D),q(i,{"clip-path":l}),delete d.clip}}break;case"path":"path"==d.type&&(q(i,{d:p?k.path=c._pathToAbsolute(p):"M0,0"}),d._.dirty=1,d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1)));break;case"width":if(i.setAttribute(o,p),d._.dirty=1,!k.fx)break;o="x",p=k.x;case"x":k.fx&&(p=-k.x-(k.width||0));case"rx":if("rx"==o&&"rect"==d.type)break;case"cx":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case"height":if(i.setAttribute(o,p),d._.dirty=1,!k.fy)break;o="y",p=k.y;case"y":k.fy&&(p=-k.y-(k.height||0));case"ry":if("ry"==o&&"rect"==d.type)break;case"cy":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case"r":"rect"==d.type?q(i,{rx:p,ry:p}):i.setAttribute(o,p),d._.dirty=1;break;case"src":"image"==d.type&&i.setAttributeNS(n,"href",p);break;case"stroke-width":(1!=d._.sx||1!=d._.sy)&&(p/=g(h(d._.sx),h(d._.sy))||1),d.paper._vbSize&&(p*=d.paper._vbSize),i.setAttribute(o,p),k["stroke-dasharray"]&&v(d,k["stroke-dasharray"],f),d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"stroke-dasharray":v(d,p,f);break;case"fill":var E=b(p).match(c._ISURL);if(E){A=q("pattern");var F=q("image");A.id=c.createUUID(),q(A,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1}),q(F,{x:0,y:0,"xlink:href":E[1]}),A.appendChild(F),function(a){c._preload(E[1],function(){var b=this.offsetWidth,c=this.offsetHeight;q(a,{width:b,height:c}),q(F,{width:b,height:c}),d.paper.safari()})}(A),d.paper.defs.appendChild(A),q(i,{fill:"url(#"+A.id+")"}),d.pattern=A,d.pattern&&s(d);break}var G=c.getRGB(p);if(G.error){if(("circle"==d.type||"ellipse"==d.type||"r"!=b(p).charAt())&&r(d,p)){if("opacity"in k||"fill-opacity"in k){var H=c._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l));if(H){var I=H.getElementsByTagName("stop");q(I[I.length-1],{"stop-opacity":("opacity"in k?k.opacity:1)*("fill-opacity"in k?k["fill-opacity"]:1)})}}k.gradient=p,k.fill="none";break}}else delete f.gradient,delete k.gradient,!c.is(k.opacity,"undefined")&&c.is(f.opacity,"undefined")&&q(i,{opacity:k.opacity}),!c.is(k["fill-opacity"],"undefined")&&c.is(f["fill-opacity"],"undefined")&&q(i,{"fill-opacity":k["fill-opacity"]});G[a]("opacity")&&q(i,{"fill-opacity":G.opacity>1?G.opacity/100:G.opacity});case"stroke":G=c.getRGB(p),i.setAttribute(o,G.hex),"stroke"==o&&G[a]("opacity")&&q(i,{"stroke-opacity":G.opacity>1?G.opacity/100:G.opacity}),"stroke"==o&&d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"gradient":("circle"==d.type||"ellipse"==d.type||"r"!=b(p).charAt())&&r(d,p);break;case"opacity":k.gradient&&!k[a]("stroke-opacity")&&q(i,{"stroke-opacity":p>1?p/100:p});case"fill-opacity":if(k.gradient){H=c._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l)),H&&(I=H.getElementsByTagName("stop"),q(I[I.length-1],{"stop-opacity":p}));break}default:"font-size"==o&&(p=e(p,10)+"px");var J=o.replace(/(\-.)/g,function(a){return a.substring(1).toUpperCase()});i.style[J]=p,d._.dirty=1,i.setAttribute(o,p)}}y(d,f),i.style.visibility=m},x=1.2,y=function(d,f){if("text"==d.type&&(f[a]("text")||f[a]("font")||f[a]("font-size")||f[a]("x")||f[a]("y"))){var g=d.attrs,h=d.node,i=h.firstChild?e(c._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue("font-size"),10):10; +if(f[a]("text")){for(g.text=f.text;h.firstChild;)h.removeChild(h.firstChild);for(var j,k=b(f.text).split("\n"),m=[],n=0,o=k.length;o>n;n++)j=q("tspan"),n&&q(j,{dy:i*x,x:g.x}),j.appendChild(c._g.doc.createTextNode(k[n])),h.appendChild(j),m[n]=j}else for(m=h.getElementsByTagName("tspan"),n=0,o=m.length;o>n;n++)n?q(m[n],{dy:i*x,x:g.x}):q(m[0],{dy:0});q(h,{x:g.x,y:g.y}),d._.dirty=1;var p=d._getBBox(),r=g.y-(p.y+p.height/2);r&&c.is(r,"finite")&&q(m[0],{dy:r})}},z=function(a,b){this[0]=this.node=a,a.raphael=!0,this.id=c._oid++,a.raphaelid=this.id,this.matrix=c.matrix(),this.realPath=null,this.paper=b,this.attrs=this.attrs||{},this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1},!b.bottom&&(b.bottom=this),this.prev=b.top,b.top&&(b.top.next=this),b.top=this,this.next=null},A=c.el;z.prototype=A,A.constructor=z,c._engine.path=function(a,b){var c=q("path");b.canvas&&b.canvas.appendChild(c);var d=new z(c,b);return d.type="path",w(d,{fill:"none",stroke:"#000",path:a}),d},A.rotate=function(a,c,e){if(this.removed)return this;if(a=b(a).split(j),a.length-1&&(c=d(a[1]),e=d(a[2])),a=d(a[0]),null==e&&(c=e),null==c||null==e){var f=this.getBBox(1);c=f.x+f.width/2,e=f.y+f.height/2}return this.transform(this._.transform.concat([["r",a,c,e]])),this},A.scale=function(a,c,e,f){if(this.removed)return this;if(a=b(a).split(j),a.length-1&&(c=d(a[1]),e=d(a[2]),f=d(a[3])),a=d(a[0]),null==c&&(c=a),null==f&&(e=f),null==e||null==f)var g=this.getBBox(1);return e=null==e?g.x+g.width/2:e,f=null==f?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,c,e,f]])),this},A.translate=function(a,c){return this.removed?this:(a=b(a).split(j),a.length-1&&(c=d(a[1])),a=d(a[0])||0,c=+c||0,this.transform(this._.transform.concat([["t",a,c]])),this)},A.transform=function(b){var d=this._;if(null==b)return d.transform;if(c._extractTransform(this,b),this.clip&&q(this.clip,{transform:this.matrix.invert()}),this.pattern&&s(this),this.node&&q(this.node,{transform:this.matrix}),1!=d.sx||1!=d.sy){var e=this.attrs[a]("stroke-width")?this.attrs["stroke-width"]:1;this.attr({"stroke-width":e})}return this},A.hide=function(){return!this.removed&&this.paper.safari(this.node.style.display="none"),this},A.show=function(){return!this.removed&&this.paper.safari(this.node.style.display=""),this},A.remove=function(){if(!this.removed&&this.node.parentNode){var a=this.paper;a.__set__&&a.__set__.exclude(this),k.unbind("raphael.*.*."+this.id),this.gradient&&a.defs.removeChild(this.gradient),c._tear(this,a),"a"==this.node.parentNode.tagName.toLowerCase()?this.node.parentNode.parentNode.removeChild(this.node.parentNode):this.node.parentNode.removeChild(this.node);for(var b in this)this[b]="function"==typeof this[b]?c._removedFactory(b):null;this.removed=!0}},A._getBBox=function(){if("none"==this.node.style.display){this.show();var a=!0}var b={};try{b=this.node.getBBox()}catch(c){}finally{b=b||{}}return a&&this.hide(),b},A.attr=function(b,d){if(this.removed)return this;if(null==b){var e={};for(var f in this.attrs)this.attrs[a](f)&&(e[f]=this.attrs[f]);return e.gradient&&"none"==e.fill&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform,e}if(null==d&&c.is(b,"string")){if("fill"==b&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;if("transform"==b)return this._.transform;for(var g=b.split(j),h={},i=0,l=g.length;l>i;i++)b=g[i],h[b]=b in this.attrs?this.attrs[b]:c.is(this.paper.customAttributes[b],"function")?this.paper.customAttributes[b].def:c._availableAttrs[b];return l-1?h:h[g[0]]}if(null==d&&c.is(b,"array")){for(h={},i=0,l=b.length;l>i;i++)h[b[i]]=this.attr(b[i]);return h}if(null!=d){var m={};m[b]=d}else null!=b&&c.is(b,"object")&&(m=b);for(var n in m)k("raphael.attr."+n+"."+this.id,this,m[n]);for(n in this.paper.customAttributes)if(this.paper.customAttributes[a](n)&&m[a](n)&&c.is(this.paper.customAttributes[n],"function")){var o=this.paper.customAttributes[n].apply(this,[].concat(m[n]));this.attrs[n]=m[n];for(var p in o)o[a](p)&&(m[p]=o[p])}return w(this,m),this},A.toFront=function(){if(this.removed)return this;"a"==this.node.parentNode.tagName.toLowerCase()?this.node.parentNode.parentNode.appendChild(this.node.parentNode):this.node.parentNode.appendChild(this.node);var a=this.paper;return a.top!=this&&c._tofront(this,a),this},A.toBack=function(){if(this.removed)return this;var a=this.node.parentNode;return"a"==a.tagName.toLowerCase()?a.parentNode.insertBefore(this.node.parentNode,this.node.parentNode.parentNode.firstChild):a.firstChild!=this.node&&a.insertBefore(this.node,this.node.parentNode.firstChild),c._toback(this,this.paper),this.paper,this},A.insertAfter=function(a){if(this.removed)return this;var b=a.node||a[a.length-1].node;return b.nextSibling?b.parentNode.insertBefore(this.node,b.nextSibling):b.parentNode.appendChild(this.node),c._insertafter(this,a,this.paper),this},A.insertBefore=function(a){if(this.removed)return this;var b=a.node||a[0].node;return b.parentNode.insertBefore(this.node,b),c._insertbefore(this,a,this.paper),this},A.blur=function(a){var b=this;if(0!==+a){var d=q("filter"),e=q("feGaussianBlur");b.attrs.blur=a,d.id=c.createUUID(),q(e,{stdDeviation:+a||1.5}),d.appendChild(e),b.paper.defs.appendChild(d),b._blur=d,q(b.node,{filter:"url(#"+d.id+")"})}else b._blur&&(b._blur.parentNode.removeChild(b._blur),delete b._blur,delete b.attrs.blur),b.node.removeAttribute("filter");return b},c._engine.circle=function(a,b,c,d){var e=q("circle");a.canvas&&a.canvas.appendChild(e);var f=new z(e,a);return f.attrs={cx:b,cy:c,r:d,fill:"none",stroke:"#000"},f.type="circle",q(e,f.attrs),f},c._engine.rect=function(a,b,c,d,e,f){var g=q("rect");a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);return h.attrs={x:b,y:c,width:d,height:e,r:f||0,rx:f||0,ry:f||0,fill:"none",stroke:"#000"},h.type="rect",q(g,h.attrs),h},c._engine.ellipse=function(a,b,c,d,e){var f=q("ellipse");a.canvas&&a.canvas.appendChild(f);var g=new z(f,a);return g.attrs={cx:b,cy:c,rx:d,ry:e,fill:"none",stroke:"#000"},g.type="ellipse",q(f,g.attrs),g},c._engine.image=function(a,b,c,d,e,f){var g=q("image");q(g,{x:c,y:d,width:e,height:f,preserveAspectRatio:"none"}),g.setAttributeNS(n,"href",b),a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);return h.attrs={x:c,y:d,width:e,height:f,src:b},h.type="image",h},c._engine.text=function(a,b,d,e){var f=q("text");a.canvas&&a.canvas.appendChild(f);var g=new z(f,a);return g.attrs={x:b,y:d,"text-anchor":"middle",text:e,font:c._availableAttrs.font,stroke:"none",fill:"#000"},g.type="text",w(g,g.attrs),g},c._engine.setSize=function(a,b){return this.width=a||this.width,this.height=b||this.height,this.canvas.setAttribute("width",this.width),this.canvas.setAttribute("height",this.height),this._viewBox&&this.setViewBox.apply(this,this._viewBox),this},c._engine.create=function(){var a=c._getContainer.apply(0,arguments),b=a&&a.container,d=a.x,e=a.y,f=a.width,g=a.height;if(!b)throw new Error("SVG container not found.");var h,i=q("svg"),j="overflow:hidden;";return d=d||0,e=e||0,f=f||512,g=g||342,q(i,{height:g,version:1.1,width:f,xmlns:"http://www.w3.org/2000/svg"}),1==b?(i.style.cssText=j+"position:absolute;left:"+d+"px;top:"+e+"px",c._g.doc.body.appendChild(i),h=1):(i.style.cssText=j+"position:relative",b.firstChild?b.insertBefore(i,b.firstChild):b.appendChild(i)),b=new c._Paper,b.width=f,b.height=g,b.canvas=i,b.clear(),b._left=b._top=0,h&&(b.renderfix=function(){}),b.renderfix(),b},c._engine.setViewBox=function(a,b,c,d,e){k("raphael.setViewBox",this,this._viewBox,[a,b,c,d,e]);var f,h,i=g(c/this.width,d/this.height),j=this.top,l=e?"meet":"xMinYMin";for(null==a?(this._vbSize&&(i=1),delete this._vbSize,f="0 0 "+this.width+m+this.height):(this._vbSize=i,f=a+m+b+m+c+m+d),q(this.canvas,{viewBox:f,preserveAspectRatio:l});i&&j;)h="stroke-width"in j.attrs?j.attrs["stroke-width"]:1,j.attr({"stroke-width":h}),j._.dirty=1,j._.dirtyT=1,j=j.prev;return this._viewBox=[a,b,c,d,!!e],this},c.prototype.renderfix=function(){var a,b=this.canvas,c=b.style;try{a=b.getScreenCTM()||b.createSVGMatrix()}catch(d){a=b.createSVGMatrix()}var e=-a.e%1,f=-a.f%1;(e||f)&&(e&&(this._left=(this._left+e)%1,c.left=this._left+"px"),f&&(this._top=(this._top+f)%1,c.top=this._top+"px"))},c.prototype.clear=function(){c.eve("raphael.clear",this);for(var a=this.canvas;a.firstChild;)a.removeChild(a.firstChild);this.bottom=this.top=null,(this.desc=q("desc")).appendChild(c._g.doc.createTextNode("Created with Raphaël "+c.version)),a.appendChild(this.desc),a.appendChild(this.defs=q("defs"))},c.prototype.remove=function(){k("raphael.remove",this),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]="function"==typeof this[a]?c._removedFactory(a):null};var B=c.st;for(var C in A)A[a](C)&&!B[a](C)&&(B[C]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(C))}}(),function(){if(c.vml){var a="hasOwnProperty",b=String,d=parseFloat,e=Math,f=e.round,g=e.max,h=e.min,i=e.abs,j="fill",k=/[, ]+/,l=c.eve,m=" progid:DXImageTransform.Microsoft",n=" ",o="",p={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},q=/([clmz]),?([^clmz]*)/gi,r=/ progid:\S+Blur\([^\)]+\)/g,s=/-?[^,\s-]+/g,t="position:absolute;left:0;top:0;width:1px;height:1px",u=21600,v={path:1,rect:1,image:1},w={circle:1,ellipse:1},x=function(a){var d=/[ahqstv]/gi,e=c._pathToAbsolute;if(b(a).match(d)&&(e=c._path2curve),d=/[clmz]/g,e==c._pathToAbsolute&&!b(a).match(d)){var g=b(a).replace(q,function(a,b,c){var d=[],e="m"==b.toLowerCase(),g=p[b];return c.replace(s,function(a){e&&2==d.length&&(g+=d+p["m"==b?"l":"L"],d=[]),d.push(f(a*u))}),g+d});return g}var h,i,j=e(a);g=[];for(var k=0,l=j.length;l>k;k++){h=j[k],i=j[k][0].toLowerCase(),"z"==i&&(i="x");for(var m=1,r=h.length;r>m;m++)i+=f(h[m]*u)+(m!=r-1?",":o);g.push(i)}return g.join(n)},y=function(a,b,d){var e=c.matrix();return e.rotate(-a,.5,.5),{dx:e.x(b,d),dy:e.y(b,d)}},z=function(a,b,c,d,e,f){var g=a._,h=a.matrix,k=g.fillpos,l=a.node,m=l.style,o=1,p="",q=u/b,r=u/c;if(m.visibility="hidden",b&&c){if(l.coordsize=i(q)+n+i(r),m.rotation=f*(0>b*c?-1:1),f){var s=y(f,d,e);d=s.dx,e=s.dy}if(0>b&&(p+="x"),0>c&&(p+=" y")&&(o=-1),m.flip=p,l.coordorigin=d*-q+n+e*-r,k||g.fillsize){var t=l.getElementsByTagName(j);t=t&&t[0],l.removeChild(t),k&&(s=y(f,h.x(k[0],k[1]),h.y(k[0],k[1])),t.position=s.dx*o+n+s.dy*o),g.fillsize&&(t.size=g.fillsize[0]*i(b)+n+g.fillsize[1]*i(c)),l.appendChild(t)}m.visibility="visible"}};c.toString=function(){return"Your browser doesn’t support SVG. Falling down to VML.\nYou are running Raphaël "+this.version};var A=function(a,c,d){for(var e=b(c).toLowerCase().split("-"),f=d?"end":"start",g=e.length,h="classic",i="medium",j="medium";g--;)switch(e[g]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":h=e[g];break;case"wide":case"narrow":j=e[g];break;case"long":case"short":i=e[g]}var k=a.node.getElementsByTagName("stroke")[0];k[f+"arrow"]=h,k[f+"arrowlength"]=i,k[f+"arrowwidth"]=j},B=function(e,i){e.attrs=e.attrs||{};var l=e.node,m=e.attrs,p=l.style,q=v[e.type]&&(i.x!=m.x||i.y!=m.y||i.width!=m.width||i.height!=m.height||i.cx!=m.cx||i.cy!=m.cy||i.rx!=m.rx||i.ry!=m.ry||i.r!=m.r),r=w[e.type]&&(m.cx!=i.cx||m.cy!=i.cy||m.r!=i.r||m.rx!=i.rx||m.ry!=i.ry),s=e;for(var t in i)i[a](t)&&(m[t]=i[t]);if(q&&(m.path=c._getPath[e.type](e),e._.dirty=1),i.href&&(l.href=i.href),i.title&&(l.title=i.title),i.target&&(l.target=i.target),i.cursor&&(p.cursor=i.cursor),"blur"in i&&e.blur(i.blur),(i.path&&"path"==e.type||q)&&(l.path=x(~b(m.path).toLowerCase().indexOf("r")?c._pathToAbsolute(m.path):m.path),"image"==e.type&&(e._.fillpos=[m.x,m.y],e._.fillsize=[m.width,m.height],z(e,1,1,0,0,0))),"transform"in i&&e.transform(i.transform),r){var y=+m.cx,B=+m.cy,D=+m.rx||+m.r||0,E=+m.ry||+m.r||0;l.path=c.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x",f((y-D)*u),f((B-E)*u),f((y+D)*u),f((B+E)*u),f(y*u)),e._.dirty=1}if("clip-rect"in i){var G=b(i["clip-rect"]).split(k);if(4==G.length){G[2]=+G[2]+ +G[0],G[3]=+G[3]+ +G[1];var H=l.clipRect||c._g.doc.createElement("div"),I=H.style;I.clip=c.format("rect({1}px {2}px {3}px {0}px)",G),l.clipRect||(I.position="absolute",I.top=0,I.left=0,I.width=e.paper.width+"px",I.height=e.paper.height+"px",l.parentNode.insertBefore(H,l),H.appendChild(l),l.clipRect=H)}i["clip-rect"]||l.clipRect&&(l.clipRect.style.clip="auto")}if(e.textpath){var J=e.textpath.style;i.font&&(J.font=i.font),i["font-family"]&&(J.fontFamily='"'+i["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g,o)+'"'),i["font-size"]&&(J.fontSize=i["font-size"]),i["font-weight"]&&(J.fontWeight=i["font-weight"]),i["font-style"]&&(J.fontStyle=i["font-style"])}if("arrow-start"in i&&A(s,i["arrow-start"]),"arrow-end"in i&&A(s,i["arrow-end"],1),null!=i.opacity||null!=i["stroke-width"]||null!=i.fill||null!=i.src||null!=i.stroke||null!=i["stroke-width"]||null!=i["stroke-opacity"]||null!=i["fill-opacity"]||null!=i["stroke-dasharray"]||null!=i["stroke-miterlimit"]||null!=i["stroke-linejoin"]||null!=i["stroke-linecap"]){var K=l.getElementsByTagName(j),L=!1;if(K=K&&K[0],!K&&(L=K=F(j)),"image"==e.type&&i.src&&(K.src=i.src),i.fill&&(K.on=!0),(null==K.on||"none"==i.fill||null===i.fill)&&(K.on=!1),K.on&&i.fill){var M=b(i.fill).match(c._ISURL);if(M){K.parentNode==l&&l.removeChild(K),K.rotate=!0,K.src=M[1],K.type="tile";var N=e.getBBox(1);K.position=N.x+n+N.y,e._.fillpos=[N.x,N.y],c._preload(M[1],function(){e._.fillsize=[this.offsetWidth,this.offsetHeight]})}else K.color=c.getRGB(i.fill).hex,K.src=o,K.type="solid",c.getRGB(i.fill).error&&(s.type in{circle:1,ellipse:1}||"r"!=b(i.fill).charAt())&&C(s,i.fill,K)&&(m.fill="none",m.gradient=i.fill,K.rotate=!1)}if("fill-opacity"in i||"opacity"in i){var O=((+m["fill-opacity"]+1||2)-1)*((+m.opacity+1||2)-1)*((+c.getRGB(i.fill).o+1||2)-1);O=h(g(O,0),1),K.opacity=O,K.src&&(K.color="none")}l.appendChild(K);var P=l.getElementsByTagName("stroke")&&l.getElementsByTagName("stroke")[0],Q=!1;!P&&(Q=P=F("stroke")),(i.stroke&&"none"!=i.stroke||i["stroke-width"]||null!=i["stroke-opacity"]||i["stroke-dasharray"]||i["stroke-miterlimit"]||i["stroke-linejoin"]||i["stroke-linecap"])&&(P.on=!0),("none"==i.stroke||null===i.stroke||null==P.on||0==i.stroke||0==i["stroke-width"])&&(P.on=!1);var R=c.getRGB(i.stroke);P.on&&i.stroke&&(P.color=R.hex),O=((+m["stroke-opacity"]+1||2)-1)*((+m.opacity+1||2)-1)*((+R.o+1||2)-1);var S=.75*(d(i["stroke-width"])||1);if(O=h(g(O,0),1),null==i["stroke-width"]&&(S=m["stroke-width"]),i["stroke-width"]&&(P.weight=S),S&&1>S&&(O*=S)&&(P.weight=1),P.opacity=O,i["stroke-linejoin"]&&(P.joinstyle=i["stroke-linejoin"]||"miter"),P.miterlimit=i["stroke-miterlimit"]||8,i["stroke-linecap"]&&(P.endcap="butt"==i["stroke-linecap"]?"flat":"square"==i["stroke-linecap"]?"square":"round"),i["stroke-dasharray"]){var T={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};P.dashstyle=T[a](i["stroke-dasharray"])?T[i["stroke-dasharray"]]:o}Q&&l.appendChild(P)}if("text"==s.type){s.paper.canvas.style.display=o;var U=s.paper.span,V=100,W=m.font&&m.font.match(/\d+(?:\.\d*)?(?=px)/);p=U.style,m.font&&(p.font=m.font),m["font-family"]&&(p.fontFamily=m["font-family"]),m["font-weight"]&&(p.fontWeight=m["font-weight"]),m["font-style"]&&(p.fontStyle=m["font-style"]),W=d(m["font-size"]||W&&W[0])||10,p.fontSize=W*V+"px",s.textpath.string&&(U.innerHTML=b(s.textpath.string).replace(/"));var X=U.getBoundingClientRect();s.W=m.w=(X.right-X.left)/V,s.H=m.h=(X.bottom-X.top)/V,s.X=m.x,s.Y=m.y+s.H/2,("x"in i||"y"in i)&&(s.path.v=c.format("m{0},{1}l{2},{1}",f(m.x*u),f(m.y*u),f(m.x*u)+1));for(var Y=["x","y","text","font","font-family","font-weight","font-style","font-size"],Z=0,$=Y.length;$>Z;Z++)if(Y[Z]in i){s._.dirty=1;break}switch(m["text-anchor"]){case"start":s.textpath.style["v-text-align"]="left",s.bbx=s.W/2;break;case"end":s.textpath.style["v-text-align"]="right",s.bbx=-s.W/2;break;default:s.textpath.style["v-text-align"]="center",s.bbx=0}s.textpath.style["v-text-kern"]=!0}},C=function(a,f,g){a.attrs=a.attrs||{};var h=(a.attrs,Math.pow),i="linear",j=".5 .5";if(a.attrs.gradient=f,f=b(f).replace(c._radial_gradient,function(a,b,c){return i="radial",b&&c&&(b=d(b),c=d(c),h(b-.5,2)+h(c-.5,2)>.25&&(c=e.sqrt(.25-h(b-.5,2))*(2*(c>.5)-1)+.5),j=b+n+c),o}),f=f.split(/\s*\-\s*/),"linear"==i){var k=f.shift();if(k=-d(k),isNaN(k))return null}var l=c._parseDots(f);if(!l)return null;if(a=a.shape||a.node,l.length){a.removeChild(g),g.on=!0,g.method="none",g.color=l[0].color,g.color2=l[l.length-1].color;for(var m=[],p=0,q=l.length;q>p;p++)l[p].offset&&m.push(l[p].offset+n+l[p].color);g.colors=m.length?m.join():"0% "+g.color,"radial"==i?(g.type="gradientTitle",g.focus="100%",g.focussize="0 0",g.focusposition=j,g.angle=0):(g.type="gradient",g.angle=(270-k)%360),a.appendChild(g)}return 1},D=function(a,b){this[0]=this.node=a,a.raphael=!0,this.id=c._oid++,a.raphaelid=this.id,this.X=0,this.Y=0,this.attrs={},this.paper=b,this.matrix=c.matrix(),this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1},!b.bottom&&(b.bottom=this),this.prev=b.top,b.top&&(b.top.next=this),b.top=this,this.next=null},E=c.el;D.prototype=E,E.constructor=D,E.transform=function(a){if(null==a)return this._.transform;var d,e=this.paper._viewBoxShift,f=e?"s"+[e.scale,e.scale]+"-1-1t"+[e.dx,e.dy]:o;e&&(d=a=b(a).replace(/\.{3}|\u2026/g,this._.transform||o)),c._extractTransform(this,f+a);var g,h=this.matrix.clone(),i=this.skew,j=this.node,k=~b(this.attrs.fill).indexOf("-"),l=!b(this.attrs.fill).indexOf("url(");if(h.translate(1,1),l||k||"image"==this.type)if(i.matrix="1 0 0 1",i.offset="0 0",g=h.split(),k&&g.noRotation||!g.isSimple){j.style.filter=h.toFilter();var m=this.getBBox(),p=this.getBBox(1),q=m.x-p.x,r=m.y-p.y;j.coordorigin=q*-u+n+r*-u,z(this,1,1,q,r,0)}else j.style.filter=o,z(this,g.scalex,g.scaley,g.dx,g.dy,g.rotate);else j.style.filter=o,i.matrix=b(h),i.offset=h.offset();return d&&(this._.transform=d),this},E.rotate=function(a,c,e){if(this.removed)return this;if(null!=a){if(a=b(a).split(k),a.length-1&&(c=d(a[1]),e=d(a[2])),a=d(a[0]),null==e&&(c=e),null==c||null==e){var f=this.getBBox(1);c=f.x+f.width/2,e=f.y+f.height/2}return this._.dirtyT=1,this.transform(this._.transform.concat([["r",a,c,e]])),this}},E.translate=function(a,c){return this.removed?this:(a=b(a).split(k),a.length-1&&(c=d(a[1])),a=d(a[0])||0,c=+c||0,this._.bbox&&(this._.bbox.x+=a,this._.bbox.y+=c),this.transform(this._.transform.concat([["t",a,c]])),this)},E.scale=function(a,c,e,f){if(this.removed)return this;if(a=b(a).split(k),a.length-1&&(c=d(a[1]),e=d(a[2]),f=d(a[3]),isNaN(e)&&(e=null),isNaN(f)&&(f=null)),a=d(a[0]),null==c&&(c=a),null==f&&(e=f),null==e||null==f)var g=this.getBBox(1);return e=null==e?g.x+g.width/2:e,f=null==f?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,c,e,f]])),this._.dirtyT=1,this},E.hide=function(){return!this.removed&&(this.node.style.display="none"),this},E.show=function(){return!this.removed&&(this.node.style.display=o),this},E._getBBox=function(){return this.removed?{}:{x:this.X+(this.bbx||0)-this.W/2,y:this.Y-this.H,width:this.W,height:this.H}},E.remove=function(){if(!this.removed&&this.node.parentNode){this.paper.__set__&&this.paper.__set__.exclude(this),c.eve.unbind("raphael.*.*."+this.id),c._tear(this,this.paper),this.node.parentNode.removeChild(this.node),this.shape&&this.shape.parentNode.removeChild(this.shape);for(var a in this)this[a]="function"==typeof this[a]?c._removedFactory(a):null;this.removed=!0}},E.attr=function(b,d){if(this.removed)return this;if(null==b){var e={};for(var f in this.attrs)this.attrs[a](f)&&(e[f]=this.attrs[f]);return e.gradient&&"none"==e.fill&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform,e}if(null==d&&c.is(b,"string")){if(b==j&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;for(var g=b.split(k),h={},i=0,m=g.length;m>i;i++)b=g[i],h[b]=b in this.attrs?this.attrs[b]:c.is(this.paper.customAttributes[b],"function")?this.paper.customAttributes[b].def:c._availableAttrs[b];return m-1?h:h[g[0]]}if(this.attrs&&null==d&&c.is(b,"array")){for(h={},i=0,m=b.length;m>i;i++)h[b[i]]=this.attr(b[i]);return h}var n;null!=d&&(n={},n[b]=d),null==d&&c.is(b,"object")&&(n=b);for(var o in n)l("raphael.attr."+o+"."+this.id,this,n[o]);if(n){for(o in this.paper.customAttributes)if(this.paper.customAttributes[a](o)&&n[a](o)&&c.is(this.paper.customAttributes[o],"function")){var p=this.paper.customAttributes[o].apply(this,[].concat(n[o]));this.attrs[o]=n[o];for(var q in p)p[a](q)&&(n[q]=p[q])}n.text&&"text"==this.type&&(this.textpath.string=n.text),B(this,n)}return this},E.toFront=function(){return!this.removed&&this.node.parentNode.appendChild(this.node),this.paper&&this.paper.top!=this&&c._tofront(this,this.paper),this},E.toBack=function(){return this.removed?this:(this.node.parentNode.firstChild!=this.node&&(this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),c._toback(this,this.paper)),this)},E.insertAfter=function(a){return this.removed?this:(a.constructor==c.st.constructor&&(a=a[a.length-1]),a.node.nextSibling?a.node.parentNode.insertBefore(this.node,a.node.nextSibling):a.node.parentNode.appendChild(this.node),c._insertafter(this,a,this.paper),this)},E.insertBefore=function(a){return this.removed?this:(a.constructor==c.st.constructor&&(a=a[0]),a.node.parentNode.insertBefore(this.node,a.node),c._insertbefore(this,a,this.paper),this)},E.blur=function(a){var b=this.node.runtimeStyle,d=b.filter;return d=d.replace(r,o),0!==+a?(this.attrs.blur=a,b.filter=d+n+m+".Blur(pixelradius="+(+a||1.5)+")",b.margin=c.format("-{0}px 0 0 -{0}px",f(+a||1.5))):(b.filter=d,b.margin=0,delete this.attrs.blur),this},c._engine.path=function(a,b){var c=F("shape");c.style.cssText=t,c.coordsize=u+n+u,c.coordorigin=b.coordorigin;var d=new D(c,b),e={fill:"none",stroke:"#000"};a&&(e.path=a),d.type="path",d.path=[],d.Path=o,B(d,e),b.canvas.appendChild(c);var f=F("skew");return f.on=!0,c.appendChild(f),d.skew=f,d.transform(o),d},c._engine.rect=function(a,b,d,e,f,g){var h=c._rectPath(b,d,e,f,g),i=a.path(h),j=i.attrs;return i.X=j.x=b,i.Y=j.y=d,i.W=j.width=e,i.H=j.height=f,j.r=g,j.path=h,i.type="rect",i},c._engine.ellipse=function(a,b,c,d,e){var f=a.path();return f.attrs,f.X=b-d,f.Y=c-e,f.W=2*d,f.H=2*e,f.type="ellipse",B(f,{cx:b,cy:c,rx:d,ry:e}),f},c._engine.circle=function(a,b,c,d){var e=a.path();return e.attrs,e.X=b-d,e.Y=c-d,e.W=e.H=2*d,e.type="circle",B(e,{cx:b,cy:c,r:d}),e},c._engine.image=function(a,b,d,e,f,g){var h=c._rectPath(d,e,f,g),i=a.path(h).attr({stroke:"none"}),k=i.attrs,l=i.node,m=l.getElementsByTagName(j)[0];return k.src=b,i.X=k.x=d,i.Y=k.y=e,i.W=k.width=f,i.H=k.height=g,k.path=h,i.type="image",m.parentNode==l&&l.removeChild(m),m.rotate=!0,m.src=b,m.type="tile",i._.fillpos=[d,e],i._.fillsize=[f,g],l.appendChild(m),z(i,1,1,0,0,0),i},c._engine.text=function(a,d,e,g){var h=F("shape"),i=F("path"),j=F("textpath");d=d||0,e=e||0,g=g||"",i.v=c.format("m{0},{1}l{2},{1}",f(d*u),f(e*u),f(d*u)+1),i.textpathok=!0,j.string=b(g),j.on=!0,h.style.cssText=t,h.coordsize=u+n+u,h.coordorigin="0 0";var k=new D(h,a),l={fill:"#000",stroke:"none",font:c._availableAttrs.font,text:g};k.shape=h,k.path=i,k.textpath=j,k.type="text",k.attrs.text=b(g),k.attrs.x=d,k.attrs.y=e,k.attrs.w=1,k.attrs.h=1,B(k,l),h.appendChild(j),h.appendChild(i),a.canvas.appendChild(h);var m=F("skew");return m.on=!0,h.appendChild(m),k.skew=m,k.transform(o),k},c._engine.setSize=function(a,b){var d=this.canvas.style;return this.width=a,this.height=b,a==+a&&(a+="px"),b==+b&&(b+="px"),d.width=a,d.height=b,d.clip="rect(0 "+a+" "+b+" 0)",this._viewBox&&c._engine.setViewBox.apply(this,this._viewBox),this},c._engine.setViewBox=function(a,b,d,e,f){c.eve("raphael.setViewBox",this,this._viewBox,[a,b,d,e,f]);var h,i,j=this.width,k=this.height,l=1/g(d/j,e/k);return f&&(h=k/e,i=j/d,j>d*h&&(a-=(j-d*h)/2/h),k>e*i&&(b-=(k-e*i)/2/i)),this._viewBox=[a,b,d,e,!!f],this._viewBoxShift={dx:-a,dy:-b,scale:l},this.forEach(function(a){a.transform("...")}),this};var F;c._engine.initWin=function(a){var b=a.document;b.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!b.namespaces.rvml&&b.namespaces.add("rvml","urn:schemas-microsoft-com:vml"),F=function(a){return b.createElement("')}}catch(c){F=function(a){return b.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},c._engine.initWin(c._g.win),c._engine.create=function(){var a=c._getContainer.apply(0,arguments),b=a.container,d=a.height,e=a.width,f=a.x,g=a.y;if(!b)throw new Error("VML container not found.");var h=new c._Paper,i=h.canvas=c._g.doc.createElement("div"),j=i.style;return f=f||0,g=g||0,e=e||512,d=d||342,h.width=e,h.height=d,e==+e&&(e+="px"),d==+d&&(d+="px"),h.coordsize=1e3*u+n+1e3*u,h.coordorigin="0 0",h.span=c._g.doc.createElement("span"),h.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",i.appendChild(h.span),j.cssText=c.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",e,d),1==b?(c._g.doc.body.appendChild(i),j.left=f+"px",j.top=g+"px",j.position="absolute"):b.firstChild?b.insertBefore(i,b.firstChild):b.appendChild(i),h.renderfix=function(){},h},c.prototype.clear=function(){c.eve("raphael.clear",this),this.canvas.innerHTML=o,this.span=c._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},c.prototype.remove=function(){c.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]="function"==typeof this[a]?c._removedFactory(a):null;return!0};var G=c.st;for(var H in E)E[a](H)&&!G[a](H)&&(G[H]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(H))}}(),B.was?A.win.Raphael=c:Raphael=c,c}); \ No newline at end of file diff --git a/src/wolnelektury/static/js/dialogs.js b/src/wolnelektury/static/js/dialogs.js new file mode 100644 index 000000000..3b7553b30 --- /dev/null +++ b/src/wolnelektury/static/js/dialogs.js @@ -0,0 +1,199 @@ +(function($) { + $(function() { + + // create containers for all ajaxable form links + $('.ajaxable').each(function() { + var $window = $("#ajaxable-window").clone(); + $window.attr("id", this.id + "-window"); + $('body').append($window); + + var $trigger = $(this) + var trigger = '#' + this.id; + + $window.jqm({ + ajax: '@href', + ajaxText: '

                            * ' + gettext("Loading") + '

                            ', + target: $('.target', $window)[0], + overlay: 60, + trigger: trigger, + onShow: function(hash) { + var offset = $(hash.t).offset(); + var oleft = offset.left - hash.w.width() + $(hash.t).width(); + if (oleft < 0) oleft = 0; + hash.w.css({position: 'absolute', left: oleft, top: offset.top}); + var width = $(hash.t).width(); + width = width > 50 ? width : 50; + $('.header', hash.w).css({width: width}); + hash.w.show(); + }, + onLoad: function(hash) { + $('form', hash.w).ajaxForm({ + dataType: 'json', + target: $('.target', $window), + success: function(response) { + if (response.success) { + $('.target', $window).text(response.message); + setTimeout(function() { $window.jqmHide() }, 1000); + callback = ajaxable_callbacks[$trigger.attr('data-callback')]; + callback && callback($trigger, response); + if (response.redirect) + window.location = response.redirect; + } + else { + $('.error', $window).remove(); + $.each(response.errors, function(id, errors) { + $('#id_' + id, $window).before('' + errors[0] + ''); + }); + $('input[type=submit]', $window).removeAttr('disabled'); + return false; + } + } + }); + } + }); + }); + + + var login_and_retry = function($form) { + var $window = $("#ajaxable-window").clone(); + $window.attr("id", "context-login-window"); + $('body').append($window); + + $window.jqm({ + ajax: '/uzytkownik/zaloguj-utworz/?next=' + escape(window.location), + ajaxText: '

                            * ' + gettext("Loading") + '

                            ', + target: $('.target', $window)[0], + overlay: 60, + onShow: function(hash) { + var offset = $form.offset(); + hash.w.css({position: 'absolute', left: offset.left - hash.w.width() + $form.width(), top: offset.top}); + var width = $form.width(); + width = width > 50 ? width : 50; + $('.header', hash.w).css({width: width}); + hash.w.show(); + }, + onLoad: function(hash) { + $('form', hash.w).ajaxForm({ + dataType: 'json', + target: $('.target', $window), + success: function(response) { + if (response.success) { + $('.target', $window).text(response.message); + setTimeout(function() { $window.jqmHide() }, 1000); + $form.submit(); + location.reload(); + } + else { + $('.error', $window).remove(); + $.each(response.errors, function(id, errors) { + $('#id_' + id, $window).before('' + errors[0] + ''); + }); + $('input[type=submit]', $window).removeAttr('disabled'); + return false; + } + } + }); + } + }).jqmShow(); + + }; + + + $('.ajax-form').each(function() { + var $form = $(this); + $form.ajaxForm({ + dataType: 'json', + beforeSubmit: function() { + $('input[type=submit]', $form) + .attr('disabled', 'disabled') + .after(''); + }, + error: function(response) { + if (response.status == 403) + login_and_retry($form); + }, + success: function(response) { + if (response.success) { + callback = ajax_form_callbacks[$form.attr('data-callback')]; + callback && callback($form, response); + + } else { + $('span.error', $form).remove(); + $.each(response.errors, function(id, errors) { + $('#id_' + id, $form).before('' + errors[0] + ''); + }); + $('input[type=submit]', $form).removeAttr('disabled'); + $('img', $form).remove(); + } + } + }); + }); + + + var update_star = function($elem, response) { + /* updates the star after successful ajax */ + var $star = $elem.closest('.star'); + if (response.like) { + $star.addClass('like'); + $star.removeClass('unlike'); + } + else { + $star.addClass('unlike'); + $star.removeClass('like'); + } + }; + + var ajax_form_callbacks = { + 'social-like-book': update_star + }; + + var ajaxable_callbacks = { + 'social-book-sets': function() {location.reload();} + }; + + + + // check placeholder browser support + if (!Modernizr.input.placeholder) + { + // set placeholder values + $(this).find('[placeholder]').each(function() + { + $(this).val( $(this).attr('placeholder') ).addClass('placeholder'); + }); + + // focus and blur of placeholders + $('[placeholder]').focus(function() + { + if ($(this).val() == $(this).attr('placeholder')) + { + $(this).val(''); + $(this).removeClass('placeholder'); + } + }).blur(function() + { + if ($(this).val() == '' || $(this).val() == $(this).attr('placeholder')) + { + $(this).val($(this).attr('placeholder')); + $(this).addClass('placeholder'); + } + }); + + // remove placeholders on submit + $('[placeholder]').closest('form').submit(function() + { + $(this).find('[placeholder]').each(function() + { + if ($(this).val() == $(this).attr('placeholder')) + { + $(this).val(''); + } + }) + }); + } + + + + }); +})(jQuery); + diff --git a/src/wolnelektury/static/js/locale.js b/src/wolnelektury/static/js/locale.js new file mode 100644 index 000000000..e4c8f17aa --- /dev/null +++ b/src/wolnelektury/static/js/locale.js @@ -0,0 +1,35 @@ +var LOCALE_TEXTS = { + "pl": { + "Loading": "Ładowanie" + }, + "de": { + "Loading": "Herunterladen" + }, + "fr": { + "Loading": "Chargement" + }, + "en": { + "Loading": "Loading" + }, + "ru": { + "Loading": "Загрузка" + }, + "es": { + "Loading": "Cargando" + }, + "lt":{ + "Loading": "Krovimas" + }, + "uk":{ + "Loading": "Завантажується" + }, + "jp":{ + "Loading": "負荷" + }, + "it":{ + "Loading": "caricamento" + }, +} +function gettext(text) { + return LOCALE_TEXTS[LANGUAGE_CODE][text]; +} diff --git a/src/wolnelektury/static/js/picture.js b/src/wolnelektury/static/js/picture.js new file mode 100644 index 000000000..2464220e4 --- /dev/null +++ b/src/wolnelektury/static/js/picture.js @@ -0,0 +1,253 @@ + +(function($) { + $.widget('wl.pictureviewer', { + + options: { + step: 20, // step in % of initial image + plus_button: undefined, + minus_button: undefined, + }, + ORIGINAL_LOADING: 0, + ORIGINAL_AVAILABLE: 1, + ORIGINAL_SHOWN: 2, + + _create: function() { + var self = this; + self.initial_size = [ + self.element.data('width'), + self.element.data('height') + ]; + self.original_size = [ + self.element.data('original-width'), + self.element.data('original-height') + ]; + self._zoom = 0; + self._ratio = 1.0; + + self.original = $(''); + + self._original_avaialble = self.ORIGINAL_LOADING; + function original_loaded() { + self._original_avaialble = self.ORIGINAL_AVAILABLE; + self.options.plus_button.removeClass('inactive'); + self.options.minus_button.removeClass('inactive'); + console.log("Original image available, sizes initial: " + self.initial_size + ", original: " + self.original_size); + }; + self.original.load(original_loaded); + + self.element.width(self.initial_size[0]); + self.element.height(self.initial_size[1]); + + if (self.options.plus_button) + self.options.plus_button.click( + function(ev) { self.zoom(1); }); + if (self.options.minus_button) + self.options.minus_button.click( + function(ev) { self.zoom(-1); }); + + self._initial_mark = null; + function clean_initial_mark() { + if (self._initial_mark) { + self._initial_mark.remove(); + self._initial_mark = null; + } + } + var initial_hash = window.location.hash; + if (initial_hash) { + var mk = null, + objectPrefix = '#object-', + themePrefix = '#theme-'; + if (initial_hash.substr(0, objectPrefix.length) === objectPrefix) { + $("[href=#picture-objects]").trigger('click'); + } else if (initial_hash.substr(0, themePrefix.length) === themePrefix) { + $("[href=#picture-themes]").trigger('click'); + } + mk = $("[href=" + initial_hash + "]").eq(0); + self._initial_mark = self.createMark({ + label: mk.text(), + coords: mk.data('coords') + }); + } + + + self.options.areas_links.hover(function() { + clean_initial_mark(); + $this = $(this); + var coords = $this.data("coords"); + this._picture_mark = self.createMark({ +// label: $this.text(), + coords: coords, + }); + }, function() { + $(this._picture_mark).remove(); + this._picture_mark = undefined; + }).click(function(ev) { + ev.preventDefault(); + var $mark = self.element.find('.mark').eq(0); + var markPos = $mark.offset(); + markPos = [markPos.left, markPos.top]; + var markSize = [ $mark.width(), $mark.height() ] + var wSize = [ window.innerWidth, window.innerHeight ]; + window.scrollTo( + markPos[0] + markSize[0]/2 - wSize[0]/2, + markPos[1] + markSize[1]/2 - wSize[1]/2 + ); + + }); + + + + return self; + }, + + currentSize: function() { + return [this.element.width(), this.element.height() ]; + }, + + currentZoom: function() { return this._zoom; }, + + initOriginal: function() { + if (this._original_avaialble > this.ORIGINAL_LOADING && + this._original_avaialble < this.ORIGINAL_SHOWN) { + this.element.css({'background-image': 'url('+ this.original.attr('src')+')', 'background-size': this.initial_size[0]+'px'}); + this._original_avaialble = this.ORIGINAL_SHOWN; + }; + }, + + zoom: function(steps) { + this.initOriginal(); + var t = this._zoom + steps; + return this.zoomTo(t); + }, + + zoomForStep: function(step) { + // 0 => initial + // max_step-1 => max % + if (step < 0) step = 0; + var zoomperc = 100 + step * this.options.step; + if (zoomperc * this.initial_size[0] > this.original_size[0] * 100) { + zoomperc = this.original_size[0] * 100 / this.initial_size[0]; + }; + return zoomperc; + }, + + zoomTo: function(level) { + var ratio = this.zoomForStep(level) / 100; + var new_width = ratio * this.initial_size[0]; + var new_height = ratio * this.initial_size[1]; + var cs = this.currentSize(); + if (new_width == cs[0]) + return; + + var target = { + 'width': new_width + 'px', + 'height': new_height + 'px', + 'background-size': new_width + 'px', + }; + + this._zoom = level; + this._ratio = ratio; + + this.element.css(target); + if (this._initial_mark) { + this._initial_mark = this.redrawMark(this._initial_mark); + } + + }, + + allowedPosition: function(off) { + var x = undefined, fix_x = undefined; + var y = undefined, fix_y = undefined; + var w = this.element.width(); + var h = this.element.height(); + var cw = $(window).width(); + var ch = $(window).height(); + var off = off || this.element.offset(); + + if (w <= cw) { + var x = off.left; + if (x < 0) + fix_x = 0; + if (x + w > cw) + fix_x = cw - w; + } else { + if (x > 0) + fix_x = 0; + if (x + w < cw) + fix_x = cw - w; + } + + if (h <= ch) { + var y = off.top; + if (y < 0) + fix_y = 0; + if (y + h > ch) + fix_y = ch - h; + } else { + if (y > 0) + fix_y = 0; + if (y + h < ch) + fix_y = ch - h; + } + if (fix_x !== undefined || fix_y !== undefined) + return { top: fix_y, left: fix_x }; + return undefined; + + }, + redrawMark: function(mark) { + var $mark = $(mark); + var $newmark = this.createMark($mark.data('mark')); + $mark.remove(); + return $newmark; + }, + // mark + // { + // label: "...", + // coords: [x, y, w, h] + // } + createMark: function(mark) { + if (mark.label === undefined) + mark.label = ''; + var $mark = $('
                            ' + + mark.label + '
                            '); + var cs = this.currentSize() + var ratio = cs[0] / this.original_size[0]; + var scale = function (v) { + return v * ratio; + } + if (mark.coords[1][0] < 0 || mark.coords[1][1] < 0) { // whole + var s = this.original_size; + if (mark.coords[1][0] < 0) mark.coords[1][0] = s[0]; + if (mark.coords[1][1] < 0) mark.coords[1][1] = s[1]; + } + + var coords = [[scale(mark.coords[0][0]), scale(mark.coords[0][1])], + [scale(mark.coords[1][0]), scale(mark.coords[1][1])]]; + this.element.append($mark); + $mark.width(coords[1][0] - coords[0][0]); + $mark.height(coords[1][1] - coords[0][1]); + $mark.css({left: coords[0][0], top: coords[0][1]}); + + $mark.data('mark', mark); + return $mark.get(0); + }, + }); + + +$(document).ready(function() { + $.highlightFade.defaults.speed = 3000; + + $('#menu .dropdown').each(function() { + $t = $(this); + $($t.attr('href')).hide().insertAfter(this); + }); + + $(".picture-wrap").pictureviewer({ + plus_button: $(".button.plus"), + minus_button: $(".button.minus"), + areas_links: $("#picture-objects a, #picture-themes a"), + }); + +}); + +}(jQuery)); diff --git a/src/wolnelektury/static/js/search.js b/src/wolnelektury/static/js/search.js new file mode 100644 index 000000000..4d001e0c0 --- /dev/null +++ b/src/wolnelektury/static/js/search.js @@ -0,0 +1,49 @@ + +var __bind = function (self, fn) { + return function() { fn.apply(self, arguments); }; +}; + +(function($){ + $.widget("wl.search", { + options: { + minLength: 0, + dataType: "json", + host: '', + }, + + _create: function() { + var opts = { + minLength: this.options.minLength, + select: __bind(this, this.enter), + focus: function() { return false; }, + source: this.element.data('source'), + }; + + this.element.autocomplete($.extend(opts, this.options)) + .data("autocomplete")._renderItem = __bind(this, this.render_item); + }, + + enter: function(event, ui) { + if (ui.item.url != undefined) { + location.href = this.options.host+ui.item.url; + } else { + this.element.closest('form').submit(); + } + }, + + render_item: function (ul, item) { + return $("
                          • ").data('item.autocomplete', item) + .append(''+item.label+''+ + ''+item.category+'') + .appendTo(ul); + }, + + destroy: function() { + + }, + + + }); + + +})(jQuery); diff --git a/src/wolnelektury/static/js/widget.js b/src/wolnelektury/static/js/widget.js new file mode 100644 index 000000000..3b680fc7d --- /dev/null +++ b/src/wolnelektury/static/js/widget.js @@ -0,0 +1,8 @@ +var WOLNELEKTURY_LOADED; +if (WOLNELEKTURY_LOADED == undefined) { + var iframe = document.createElement('iframe'); + iframe.setAttribute('style', 'width: 100%; height: 140px; border: none; box-shadow: 0 0 .5rem #191919;'); + iframe.setAttribute('src', '//wolnelektury.pl/widget.html'); + document.getElementById('wl').appendChild(iframe); + WOLNELEKTURY_LOADED = true; +} \ No newline at end of file diff --git a/src/wolnelektury/static/js/widget_run.js b/src/wolnelektury/static/js/widget_run.js new file mode 100644 index 000000000..c2453e722 --- /dev/null +++ b/src/wolnelektury/static/js/widget_run.js @@ -0,0 +1,26 @@ +var s = $('#id_qq'); +var url = s.attr('data-source'); +s.search({ + source: function(req, cb) { + $.ajax({url: url, + dataType: "jsonp", + data: {term: req.term}, + type: "GET", + success: function(data) {cb(data);}, + error: function() {cb([]);} + }); + }, + dataType: "jsonp", + select: function(event, ui) { + if (ui.item.url != undefined) { + window.top.location.href = '//wolnelektury.pl' + ui.item.url; + } else { + $('form').submit(); + } + }, + position: { + my: "center bottom", + at: "center bottom", + of: "#wl a" + }, +}); diff --git a/src/wolnelektury/static/opensearch.xml b/src/wolnelektury/static/opensearch.xml new file mode 100644 index 000000000..3018db0cd --- /dev/null +++ b/src/wolnelektury/static/opensearch.xml @@ -0,0 +1,20 @@ + + + Wolne Lektury + Biblioteka internetowa WolneLektury.pl + UTF-8 + lektury + Fundacja Nowoczesna Polska + pl + fundacja@nowoczesnapolska.org.pl + https://static.wolnelektury.pl/static/img/favicon.ico + https://static.wolnelektury.pl/static/img/wl_icon_64.png + + + + https://wolnelektury.pl/ + + diff --git a/src/wolnelektury/static/scss/book_text.scss b/src/wolnelektury/static/scss/book_text.scss new file mode 100644 index 000000000..566ee4804 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text.scss @@ -0,0 +1,20 @@ +@import "tools"; + +@import "book_text/const"; +@import "book_text/body"; +@import "book_text/box"; +@import "book_text/info"; +@import "book_text/menu"; +@import "book_text/note"; +@import "book_text/numbering"; +@import "book_text/other"; +@import "book_text/settings"; +@import "book_text/themes"; +@import "book_text/toc"; + +@import "main/book_box"; +@import "main/picture_box"; +@import "book_text/book_box"; + +@import "main/auth"; +@import "main/dialogs"; diff --git a/src/wolnelektury/static/scss/book_text/body.scss b/src/wolnelektury/static/scss/book_text/body.scss new file mode 100644 index 000000000..912d55b85 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/body.scss @@ -0,0 +1,144 @@ +/* + * #big-pane + * Everything besides the menu. + */ +#big-pane { + justify-content: left; + position: relative; + @include min-screen($W_BOOK_TEXT_MAX) { + justify-content: center; + } +} +@include min-screen($S_MENU) { + #big-pane { + @include size(margin-left, $W_MENU); + } + .menu-hidden { + #big-pane { + margin-left: 0; + } + } +} + +#picture-viewer #big-pane { + @include size(margin-left, $W_NONUMBERS_TINY); + + @include min-screen($S_NONUMBERS_TINY_MAX) { + @include size(margin-left, $W_NONUMBERS); + } + + @include min-screen($S_NUMBERS) { + @include size(margin-left, 44px); + } +} + +@include min-screen($S_MENU) { + #picture-viewer #big-pane { + @include size(margin-left, $W_MENU); + } + .menu-hidden { + #big-pane { + margin-left: 44px; + } + } +} + + + + +/* + * #main-text + * + * This is where the text lives + * together with line numbers, themes and stuff. + */ + +@mixin left-without-numbers { + @include size(padding-left, $W_NONUMBERS_TINY); + @include min-screen($S_NONUMBERS_TINY_MAX) { + @include size(padding-left, $W_NONUMBERS); + } +} + +@mixin right-without-themes { + @include size(padding-right, $W_NOTHEMES_TINY); + @include min-screen($S_NOTHEMES_TINY_MAX) { + @include size(padding-right, $W_NOTHEMES_SMALL); + } + @include min-screen($S_NOTHEMES_SMALL_MAX) { + @include size(padding-right, $W_NOTHEMES); + } +} + +#main-text, #other-text { + @include left-without-numbers; + @include right-without-themes; + @include size(min-width, $W_BOOK_TEXT_MIN); + + /* make room for line numbers */ + @include min-screen($S_NUMBERS) { + @include size(padding-left, $W_NUMBERS); + } + + /* make room for themes */ + @include min-screen($S_THEMES) { + @include size(padding-right, $W_THEMES); + } +} + +.always-hide-line-numbers { + /* Cancel making room for line numbers. */ + #main-text, #other-text { + @include left-without-numbers; + } +} + +@include min-screen($S_THEMES) { + .always-hide-themes { + /* Cancel making room for themes. */ + #main-text, #other-text { + @include right-without-themes; + } + } +} + +.with-other-text { + #big-pane { + display: flex; + flex-direction: row; + } + #main-text, #other-text { + @include right-without-themes; + + @include min-screen($S_THEMES_WOTHER) { + @include size(padding-right, $W_THEMES); + } + } +} + + + + + +#book-text { + @include size(max-width, $W_BOOK_TEXT_MAX); + @include size(margin, 20px auto); + + font-size: .8em; + + @include min-screen($S_SMALL_TEXT_MAX) { + font-size: 1em; + } + + h1 { + margin-top: 0; + } +} +.with-other-text { + #book-text { + font-size: .8em; + @include min-screen($S_SMALL_TEXT_MAX_WOTHER) { + font-size: 1em; + } + } +} diff --git a/src/wolnelektury/static/scss/book_text/book_box.scss b/src/wolnelektury/static/scss/book_text/book_box.scss new file mode 100644 index 000000000..38550ce74 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/book_box.scss @@ -0,0 +1,15 @@ +#book-short { + margin: 0; + padding: 0; + overflow: visible; + max-width: 488px; + + .book-box .book-box-inner { + border: none; + box-shadow: none; + } + + .book-box-read { + opacity: .5; + } +} diff --git a/src/wolnelektury/static/scss/book_text/box.scss b/src/wolnelektury/static/scss/book_text/box.scss new file mode 100644 index 000000000..7a0423418 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/box.scss @@ -0,0 +1,50 @@ +/* TODO: +There should be a JS-less way of seeing at least some of +the hidden boxes (TOC and Themes). +*/ + +.box, #toc, #themes, #nota_red, #objects { + display: none; + + position: fixed; + @include size(left, $W_MENU); + top: 0; + right: 0; + + max-height: 100%; + @include size(max-width, 380px); + @include size(padding, 10px 10px 30px 10px); + margin: 0; + overflow-x: hidden; + overflow-y: auto; + z-index: 100; + + color: black; + background: #fff; + box-shadow: 2px 2px 2px #444; + + @include size(border-width, 0 1px 1px 0); + border-style: solid; + border-color: #444; + + @include size(font-size, 14px); + line-height: 1.2em; + + h2 { + margin-top: 0; + } +} + + + +#box-underlay { + display: none; + position: fixed; + @include size(left, $W_MENU); + top: 0; + bottom: 0; + right: 0; + background:#000; + opacity: .5; + z-index: 99; +} diff --git a/src/wolnelektury/static/scss/book_text/const.scss b/src/wolnelektury/static/scss/book_text/const.scss new file mode 100644 index 000000000..4c8ab8201 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/const.scss @@ -0,0 +1,26 @@ +$W_MENU: 80px; +$S_MENU: 600px; + +$W_BOOK_TEXT_MIN: 160px; +$W_BOOK_TEXT_MAX: 600px; +$S_SMALL_TEXT_MAX: 500px; +$S_SMALL_TEXT_MAX_WOTHER: 1100px; + +$W_NONUMBERS_TINY: 20px; +$S_NONUMBERS_TINY_MAX: 240px; +$W_NONUMBERS: 30px; +$S_NUMBERS: 320px; +$W_NUMBERS: 50px; + +$W_NOTHEMES_TINY: 20px; +$S_NOTHEMES_TINY_MAX: 240px; +$W_NOTHEMES_SMALL: 30px; +$S_NOTHEMES_SMALL_MAX: 320px; +$W_NOTHEMES: 44px; +$S_THEMES: 600px; +$S_THEMES_WOTHER: 1200px; +$W_THEMES: 160px; + +$W_BOOK_SHORT_FULL: 487.5px; +$S_BOOK_SHORT_FULL: $W_BOOK_SHORT_FULL + $W_MENU + 2px; +$S_BOOK_SHORT_MEDIUM: 400px; diff --git a/src/wolnelektury/static/scss/book_text/info.scss b/src/wolnelektury/static/scss/book_text/info.scss new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/info.scss @@ -0,0 +1 @@ + diff --git a/src/wolnelektury/static/scss/book_text/menu.scss b/src/wolnelektury/static/scss/book_text/menu.scss new file mode 100644 index 000000000..1a555733b --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/menu.scss @@ -0,0 +1,128 @@ +%menu-toggle { + position: relative; + padding: 0; + &:before { + content: ""; + position: absolute; + top: 8px; + height: 5px; + border-top: 15px double #ddd; + border-bottom: 5px solid #ddd; + } +} + +#no-menu { + @include size(width, $W_NONUMBERS_TINY); + + @include min-screen($S_NONUMBERS_TINY_MAX) { + @include size(width, $W_NONUMBERS); + } + + @include min-screen($S_NUMBERS) { + @include size(width, 44px); + } + + /* Button for showing menu */ + #menu-toggle-on { + @extend %menu-toggle; + display: block; + background: #191919; + color: #ddd; + text-align: center; + z-index: 100; + @include size(height, 44px); + padding: 0; + + &:before { + left: 5px; + right: 5px; + @include min-screen(240px) { + left: 8px; + right: 8px; + } + } + } +} + +#menu-toggle-off { + @extend %menu-toggle; + height: 24px; + &:before { + left: 25px; + right: 25px; + } +} + + +#menu { + display: none; + width: 80px; + height: 100%; +} + +#menu, #no-menu { + z-index: 101; + position: fixed; + top: 0; + left: 0; + text-align: center; + line-height: 1.1em; + background: #191919; + color: #ddd; + + ul { + list-style: none; + margin: 0; + padding: 0; + + li { + + a { + padding: 10px 0; + color: white; + display: block; + text-decoration: none; + + &.active { + background: white; + color: black; + } + + .label { + display: block; + font-size: 12px; + } + } + } + + } +} + +/* body class for showing menu */ +.menu-showed { + #menu { + display: block; + } + #no-menu { + display: none; + } +} + +/* menu showing by default */ +@include min-screen($S_MENU) { + #menu { + display: block; + } + #no-menu { + display: none; + } + /* body class for hiding menu */ + .menu-hidden { + #menu { + display: none; + } + #no-menu { + display: block; + } + } +} diff --git a/src/wolnelektury/static/scss/book_text/note.scss b/src/wolnelektury/static/scss/book_text/note.scss new file mode 100644 index 000000000..55dd76567 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/note.scss @@ -0,0 +1,3 @@ +#menu-nota_red { + display: none; +} diff --git a/src/wolnelektury/static/scss/book_text/numbering.scss b/src/wolnelektury/static/scss/book_text/numbering.scss new file mode 100644 index 000000000..e31b49403 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/numbering.scss @@ -0,0 +1,65 @@ +@mixin hide-line-numbers { + float: left; + margin-left: -$W_NONUMBERS_TINY; + + width: $W_NONUMBERS_TINY; + height: 100%; + padding: 0; + overflow: hidden; + + color: white; + text-align: right; + + &:hover, &:active { + color: #ccc; + background-color: #CCC; + } + + &:before { + content: "#"; + display: block; + float: left; + width: $W_NONUMBERS_TINY / 2 - 1px; + height: 100%; + overflow: hidden; + border-right: 1px solid #ccc; + } + + @include min-screen($S_NONUMBERS_TINY_MAX) { + width: $W_NONUMBERS; + margin-left: -$W_NONUMBERS; + + &:before { + width: $W_NONUMBERS / 2 - 1; + } + } +} + + +.anchor { + @include hide-line-numbers; + + @include min-screen($S_NUMBERS) { + /* Show line numbers. */ + font-size: .8em; + margin-left: -$W_NUMBERS; + width: $W_NUMBERS - 4px; + height: auto; + padding: 2px; + text-align: center; + color: #ccc; + + &:before { + display: none; + } + } +} + +@include min-screen($S_NUMBERS) { + .always-hide-line-numbers { + /* Cancel showing line numbers. */ + .anchor { + @include hide-line-numbers; + } + } +} diff --git a/src/wolnelektury/static/scss/book_text/other.scss b/src/wolnelektury/static/scss/book_text/other.scss new file mode 100644 index 000000000..9ccedd932 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/other.scss @@ -0,0 +1,52 @@ +nav #menu-other { + display: none; +} + + +#other { + ul { + list-style: none; + padding: 0; + margin: 1em 0; + + li { + display: inline-block; + + a { + display: block; + } + } + } +} + + +.other-text-close { + background: #000; + color: #ddd; + opacity: .5; + text-align: center; + padding: .5em; + font-weight: bold; +} + + +#other-text { + position: relative; + display: none; + + .other-text-close { + position: absolute; + top: 0; + right: 0; + } +} + +.other-text-close { + display: none; +} + +.with-other-text { + .other-text-close { + display: block; + } +} diff --git a/src/wolnelektury/static/scss/book_text/settings.scss b/src/wolnelektury/static/scss/book_text/settings.scss new file mode 100644 index 000000000..edcb8bfdb --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/settings.scss @@ -0,0 +1,47 @@ +@mixin switch-on { + background: #aaa; + border-top-color: #888; + border-left-color: #888; + border-bottom-color: #ddd; + border-right-color: #ddd; + + border-width: 2px; + border-style: solid; + +} +@mixin switch-off { + background: none; + border-color: #aaa; +} +.settings-switch { + display: block; + padding: .5em; + margin: .5em; + //border: 1px solid #aaa; + border-radius: 1em; + color: black; + border-width: 2px; + border-style: solid; +} + +nav #menu-settings { + display: none; +} + +#settings-annotations {@include switch-on;} +.no-annotations { + #settings-annotations {@include switch-off;} + .annotation {display: none;} +} + +#settings-themes {@include switch-on;} +.always-hide-themes { + #settings-themes {@include switch-off;} +} + +#settings-line-numbers {@include switch-on;} +.always-hide-line-numbers { + #settings-line-numbers {@include switch-off;} +} + + diff --git a/src/wolnelektury/static/scss/book_text/themes.scss b/src/wolnelektury/static/scss/book_text/themes.scss new file mode 100644 index 000000000..26ed14bdb --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/themes.scss @@ -0,0 +1,110 @@ +nav #menu-themes { + display: none; +} + +/* Add a missing header. */ +#themes:before { + content: "Motywy"; +} + + +@mixin theme-hidden { + width: 20px; + height: 20px; + overflow: hidden; + margin-right: -20px; + border: none; + padding: 0; + + &:before { + content: "▲"; + color: #ccc; + text-align: center; + display: block; + } + + @include min-screen(240px) { + width: 30px; + margin-right: -30px; + &:before { + font-size: 2em; + } + } + + @include min-screen(320px) { + width: 44px; + margin-right: -44px; + &:before { + font-size: 2.5em; + } + } + + &.showing { + @include theme-showing; + } + +} + +@mixin theme-showing { + @include size(width, 120px); + height: auto; + overflow: visible; + @include size(margin-left, 30px); + @include size(font-size, 14.4px); + text-indent: 0; + + @include size(border-left, 1px solid #DDDDDD); + color: #777; + @include size(padding, 0 0 0 8px); + + &:before { + display: none; + } +} + +.theme-begin { + @include theme-hidden; + + font-size: .9em; + position: relative; + float: right; + margin-bottom: 8px; + clear: both; + line-height: 1.5em; + text-align: left; + z-index: 60; + + font-style: normal; + font-weight: normal; + font-variant: normal; + letter-spacing: 0; + text-transform: none; + text-decoration: none; + + @include min-screen(600px) { + @include theme-showing; + margin-right: -160px; + } + + &.showing { + @include theme-showing; + } +} + + +.always-hide-themes { + .theme-begin { + @include theme-hidden; + } +} + +.with-other-text { + .theme-begin { + @include theme-hidden; + + @include min-screen(1200px) { + @include theme-showing; + margin-right: -160px; + } + } +} diff --git a/src/wolnelektury/static/scss/book_text/toc.scss b/src/wolnelektury/static/scss/book_text/toc.scss new file mode 100644 index 000000000..18975c760 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/toc.scss @@ -0,0 +1,3 @@ +nav #menu-toc { + display: none; +} diff --git a/src/wolnelektury/static/scss/dictionary/dictionary.scss b/src/wolnelektury/static/scss/dictionary/dictionary.scss new file mode 100644 index 000000000..a90059924 --- /dev/null +++ b/src/wolnelektury/static/scss/dictionary/dictionary.scss @@ -0,0 +1,9 @@ +.dictionary-note { + @include white-box; + @include size(padding, 8px); + @include size(margin, 10px 0); +} +.dictionary-note-source { + @include white-box; + @include size(padding, 8px); +} diff --git a/src/wolnelektury/static/scss/funding/funding.scss b/src/wolnelektury/static/scss/funding/funding.scss new file mode 100644 index 000000000..3b63e2037 --- /dev/null +++ b/src/wolnelektury/static/scss/funding/funding.scss @@ -0,0 +1,224 @@ +.funding { + background: orange; + margin: auto; + @include size(padding, 5px 0); + position: relative; + .close { + @include mono; + @include size(font-size, 16px); + position: absolute; + top: 0px; + right: 0; + @include size(padding, 1px 5px 10px 10px); + } + .call-area { + float:left; + @include size(padding-right, 6px); + } + a.call { + @include size(height, 18px); + + @include size(padding, 5.25px 7.5px); + @include size(margin, 7.5px); + display: inline-block; + vertical-align: middle; + text-align: center; + + background: lighten(#018189, .05); + @include size(width, 135px); + + @include min-screen(420px) { + vertical-align: top; + } + } + .learn-more { + text-align: center; + margin: auto; + @include size(font-size, 10px); + padding: .5em; + + @include min-screen(300px) { + display: inline; + } + @include min-screen(420px) { + padding: 0; + display: block; + } + } + .description { + @include size(padding-left, 6px); + + a { + display: block; + color: black; + @include size(padding, 0 3px); + } + } + strong { + @include size(font-size, 15px); + @include size(padding, 3px 0 0); + } + .progress { + .piece { + @include size(font-size, 13px); + @include size(padding, 4px 6px); + } + @include size(margin, 3px 12px 4px 0); + @include size(border-radius, 20px); + background-image: url(/static/img/progress-pixel.png); + background-repeat: repeat-y; + background-color: #F68900; + @include box-shadow(1px 1px 1px #888); + + .progress-collected { + float:left; + &:after { + content: " / "; + } + @include min-screen(500px) { + &:after { + content: none; + } + } + } + .progress-target { + float: left; + padding-left: 0; + @include min-screen(500px) { + float: right; + @include size(padding-left, 6px); + } + } + .progress-extralabel { + display: none; + @include min-screen(500px) { + display: inline; + } + } + .progress-until { + display: inline-block; + margin-right: 0em; + text-align: right; + @include min-screen(500px) { + text-align: center; + } + } + } + .with-button { + clear: left; + @include min-screen(420px) { + clear: none; + @include size(margin-left, 171px); + } + } + + .funding-title { + @include size(font-size, 11px); + display: block; + @include min-screen(640px) { + display: inline; + } + } + .funding-title-strong { + @extend .funding-title; + font-weight: bold; + @include size(font-size, 15px); + } +} + +.funding-top-header { + @extend .funding; + + @include min-screen(1000px) { + @include size(width, 975px); + } +} + + +.wlfund { + width: 100%; + border-spacing:0; + + td { + @include size(padding, 10px 5px 10px); + text-align: center; + @include size(border-top, 10px solid rgba(255, 255, 255, 0)); + @include size(border-bottom, 2px solid #DDDDDD); + + background-clip: padding-box; + -moz-background-clip: padding; + -webkit-background-clip: padding; + } + td.oneline { + white-space: nowrap; + } + + td:last-child { + text-align: right; + } + + .funding-plus td { + background-color: mix(#0D7E85, white, .2); + } + + .funding-minus td { + background-color: white; + } +} + + + +.honking { + background: #018189; + @include size(font-size, 15px); + @include size(padding, 7.5px); + color: white; + border: 0; + @include box-shadow(3px 3px 4.5px #888888); + position: relative; +} +.honking:hover { + @include box-shadow(none); + @include size(top, 1px); + @include size(left, 1px); +} + + + +.share { + a { + @include size(margin-right, 15px); + + img { + vertical-align: middle; + } + } +} + +#funding-closeable { + display: none; +} +#funding-handle { + position: absolute; + top: 0; + right: 0; + z-index: 2; + background: orange; + cursor: pointer; + @include size(padding, 2.6px 13px); + @include size(border-radius, 0 0 0 10px); + @include size(font-size, 13px); +} + +.funding-cover { + float: left; + @include size(margin-right, 10px); +} + +.funding-details-intro { + @include size(padding-top, 10px); + + h3:first-of-type { + margin-top: 0; + } +} diff --git a/src/wolnelektury/static/scss/main.scss b/src/wolnelektury/static/scss/main.scss new file mode 100644 index 000000000..bab1fb46f --- /dev/null +++ b/src/wolnelektury/static/scss/main.scss @@ -0,0 +1,29 @@ +@import "tools"; + +@import "main/const"; +@import "main/auth"; +@import "main/base"; +@import "main/book_box"; +@import "main/book_list"; +@import "main/catalogue"; +@import "main/cite"; +@import "main/dialogs"; +@import "main/footer"; +@import "main/form"; +@import "main/fragment"; +@import "main/header"; +@import "main/hidden"; +@import "main/main_content"; +@import "main/main_page"; +@import "main/menu"; +@import "main/picture_box"; +@import "main/search"; +@import "main/tag"; + +@import "dictionary/dictionary"; + +@import "funding/funding"; + +@import "polls/polls"; + +@import "social/shelf_tags"; diff --git a/src/wolnelektury/static/scss/main/auth.scss b/src/wolnelektury/static/scss/main/auth.scss new file mode 100755 index 000000000..793afe4f4 --- /dev/null +++ b/src/wolnelektury/static/scss/main/auth.scss @@ -0,0 +1,47 @@ +.email_list { + .verified { + display: inline-block; + margin-left: 2em; + font-style: italic; + } + .unverified { + display: inline-block; + margin-left: 2em; + color: #717171; + font-style: italic; + } + .primary { + display: inline-block; + margin-left: 2em; + font-weight: bold; + } +} + +.socialaccount_provider { + display: inline-block; + background-repeat: no-repeat; + color: transparent; + + @include size(height, 40px); + @include size(width, 40px); + vertical-align: middle; + + &.google { + background-image: url(/static/img/auth/google.png); + } + &.facebook { + background-image: url(/static/img/auth/facebook.png); + } +} + + +.socialaccount_providers { + @include size(margin, 10px 0); + padding: 0; + + li { + display: inline; + list-style: none; + @include size(margin-right, 10px); + } +} diff --git a/src/wolnelektury/static/scss/main/base.scss b/src/wolnelektury/static/scss/main/base.scss new file mode 100755 index 000000000..1f1021a9f --- /dev/null +++ b/src/wolnelektury/static/scss/main/base.scss @@ -0,0 +1,110 @@ +/* Basic layout */ +html, body { + margin: 0; + padding: 0; +} + + +.clearboth { + clear: both; +} + + + +/* Basic colors and fonts */ +body { + font-family: Georgia; + background: #f7f7f7; + color: black; + + @include size(font-size, 13px); +} + +a { + color: #0d7e85; + text-decoration: none; + + img { + border: 0; + } +} + +h1 { + @include size(font-size, 35px); + font-weight: normal; + @include size(margin-top, 14px); + + a { + color: inherit; + } +} + +h2 { + @include size(font-size, 20px); + font-weight: normal; +} + +h3 { + @include size(font-size, 15px); + font-weight: normal; +} + + +.normal-text { + line-height: 1.3em; + @include size(margin, 0 5px); + + @media screen and (min-width: 62.5em) { + margin: 0; + } +} + +.white-box { + @include size(padding, 10px); + @include white-box; +} + + +ul.plain { + list-style:none; + margin: 0; + padding: 0; +} + + +.theme-list-link { + @include mono; + @include size(font-size, 11px); + + &:after { + @include size(padding-left, 11px); + content: url("/static/img/arrow-teal.png"); + vertical-align: middle; + } +} + + +.left-column, .right-column { + @include size(max-width, 600px); +} +@media screen and (min-width: 62.5em) { + .left-column { + @include size(width, 470px); + float: left; + } + .right-column { + @include size(width, 470px); + float:right; + } +} + +.pagination { + display: block; + @include size(font-size, 12px); + @include size(padding, 6px); + text-align:center; +} + +.simple-hidden-initially { + display: none; +} diff --git a/src/wolnelektury/static/scss/main/book_box.scss b/src/wolnelektury/static/scss/main/book_box.scss new file mode 100755 index 000000000..d318fda34 --- /dev/null +++ b/src/wolnelektury/static/scss/main/book_box.scss @@ -0,0 +1,543 @@ +@mixin inner-box { + display: block; + color: black; + @include size(margin, 1px); + @include size(padding, 8px 10px); + @include white-box; +} + + +.cover-area { + float: left; + @include size(margin-right, 15px); + @include size(margin-bottom, 5px); + + @include min-screen($S_BOOK_SHORT_FULL) { + position: absolute; + top: 0; + left: 0; + margin-right: 0; + } + + img.cover { + @include size(height, 193px / 2); + @include size(width, 139px / 2); + + @include min-screen($S_BOOK_SHORT_MEDIUM) { + @include size(height, 193px); + @include size(width, 139px); + } + } +} + +.book-mini-box { + /* Original design fits 6 boxes horizontally in 975px (162.5px each), + * but we really want to fit 2 boxes on a 320px mobile screen. */ + + @include size(width, 160px); + display: inline-block; + vertical-align: top; + + @include min-screen(350px) { + @include size(width, 162.5px); + } + + .book-mini-box-inner { + @include inner-box; + @include size(height, 271px); + @include size(margin, 1px); + @include size(padding, 8px 9px); + overflow: hidden; + + @include min-screen(350px) { + @include size(padding, 8px 10px); + } + + a { + display: block; + } + } + img.cover { + @include size(height, 193px); + @include size(width, 139px); + @include size(margin-bottom, 18px); + } + .language { + color: #aaa; + float: right; + @include mono; + @include size(font-size, 10px); + text-transform: uppercase; + position: relative; + @include size(top, -20px); + } + .desc { + margin-left: 0; + } + .author { + @include size(font-size, 11px); + @include mono; + color: #6d7877; + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .title { + @include size(font-size, 14px); + color: #242424; + } +} + + + +.work-list { + margin: 0; + padding: 0; + list-style: none; + + .Book-item { + @include min-screen($S_BOOK_SHORT_FULL) { + display: inline-block; + } + vertical-align: top; + } +} + + +.book-box { + margin: 0; + vertical-align: top; + + /* */ + a { + color: #0D7E85; + } + + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(width, $W_BOOK_SHORT_FULL); + } + + .book-box-inner { + position: relative; + @include inner-box; + @include size(min-height, 197.5px); + } +} + + +.book-wide-box { + margin: 0; + vertical-align: top; + + @media screen and (min-width: 62.5em) { + @include size(width, 975px); + } + + .book-box-inner { + position: relative; + @include size(min-height, 244px); + @include inner-box; + @include size(margin-left, 0); + @include size(margin-right, 0); + + .book-left-column { /* FIXME */ + @media screen and (min-width: 62.5em) { + float: left; + @include size(width, 536px); + } + } + + .license-icon { + display: block; + @include size(margin-top, 5px); + } + + @include min-screen($S_BOOK_SHORT_FULL) { + // Show full title on the work's page. + + .book-box-body { + height: auto; + @include size(min-height, 170px); + + .book-box-head .title { + height: auto; + @include size(min-height, 57.6px); + } + } + } + + .book-box-head, + .tags, + .book-box-tools { + @media screen and (min-width: 62.5em) { + @include size(width, 382px); + } + } + + #theme-list-wrapper { + @include min-screen($S_BOOK_SHORT_MEDIUM) { + @include size(margin-left, 154px); + @include size(width, 300px); + } + margin-bottom: 0; + + p { + @include size(margin-top, 10px); + @include size(margin-bottom, 10px); + } + } + + .right-column { + @include size(margin-top, 16px); + // Eat the padding + @include size(margin-left, -10px); + @include size(margin-right, -10px); + max-width: none; + + @media screen and (min-width: 62.5em) { + @include size(width, 415px); + // Eat the padding + @include size(margin-top, -8px); + } + + .other-tools, + .other-download { + @include size(font-size, 11px); + clear: left; + @include size(margin-top, 25px); + line-height: 1.75em; + @include size(margin-left, 15px); + + h2 { + margin: 0; + @include size(font-size, 11px); + @include mono; + } + + @include min-screen($S_BOOK_SHORT_FULL) { + float: left; + clear: none; + @include size(width, 145px); + @include size(margin-top, 50px); + @include size(margin-right, 0); + @include size(margin-bottom, 0); + @include size(margin-left, 5px); + } + + @include min-screen(1000px) { + @include size(margin-top, 50px); + line-height: 1.2em; + } + } + .other-download { + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(margin-left, 15px); + @include size(width, 220px); + } + } + } + } +} + +@media screen and (min-width: 50em) { + .picture.book-wide-box .right-column { + float: none; + @include size(width, 415px); + top: 0; + @include size(margin-left, 550px); + margin-top: 0em; + } +} + + +.book-box-body { + @include size(margin-bottom, 10px); + @include min-screen($S_BOOK_SHORT_FULL) { + margin-bottom: 0; + @include size(height, 170px); + } + position: relative; + + .book-box-head, + .tags, + .book-box-tools { + @include min-screen($S_BOOK_SHORT_FULL) { + margin-left: 154px; + } + } + + .book-box-head { + @include size(padding-top, 14px); + @include size(margin-bottom, 10px); + + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(min-height, 70px); + } + + a { + color: black; + } + .author { + @include size(font-size, 11px); + @include mono; + @include size(line-height, 13.2px); + @include size(max-height, 26.4px); + overflow: hidden; + + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(max-width, 264px); + } + } + .title { + @include size(font-size, 24px); + line-height: 1.2em; + @include size(margin-top, 7.2px); + @include size(margin-bottom, 12px); + + @include min-screen($S_BOOK_SHORT_FULL) { + margin-bottom: 0; + @include size(height, 57.6px); + overflow: hidden; + } + } + } + + .tags { + @include size(font-size, 11px); + line-height: 1.2em; + margin-bottom: 5px; + + @include min-screen($S_BOOK_SHORT_FULL) { + clear: right; + @include size(max-height, 57.6px); + overflow: hidden; + } + + .category { + display: block; + @include size(margin-top, 6px); + @include size(margin-bottom, 6px); + + @include min-screen($S_BOOK_SHORT_FULL) { + display: inline; + } + + .mono { + @include mono; + } + + .book-box-tag { + @include size(margin-left, 4.4px); + @include size(margin-right, 5.5px); + } + } + } + +} + + + +.book-box-tools { + @include size(font-size, 11px); + margin: 0; + padding: 0; + list-style: none; + + clear: left; + + @include min-screen($S_BOOK_SHORT_MEDIUM) { + clear: none; + @include size(margin-left, 139px + 15px); + } + + li { + @include mono; + margin-top: 1em; + + @include min-screen($S_BOOK_SHORT_FULL) { + display: inline-block; + margin-top: 0; + } + } + + .book-box-read { + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(width, 126.5px); + } + + a { + @include mono; + } + + a:before { + content: url("/static/img/read.png"); + @include size(font-size, 25px); + @include size(margin-right, 3.71px); + vertical-align: middle; + font-weight: normal; + } + } + + .book-box-download { + position: relative; + + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(width, 93.5px); + } + + a { + position: relative; + z-index: 101; + + @mixin downarrow { + color: #0D7E85; + + &:before { + content: url("/static/img/download.png"); + @include size(font-size, 25px); + @include size(margin-right, 3.71px); + vertical-align: middle; + font-weight: normal; + display: inline; + } + } + + &.downarrow { + @include downarrow; + &.hoverclick { + color: black; + &:before { + display: none; + } + + @include min-screen($S_BOOK_SHORT_FULL) { + @include downarrow; + } + } + } + } + + .book-box-formats { + @include size(padding-left, 19px); + + @include min-screen($S_BOOK_SHORT_FULL) { + display: none; + position: absolute; + + @include size(width, 180px); + @include size(padding-top, 38px); + @include size(padding-bottom, 9px); + @include size(padding-left, 19px); + @include size(padding-right, 19px); + + @include white-box; + + z-index: 100; + + @include size(top, -16px); + @include size(left, -19px); + } + + span { + display: block; + @include size(margin-top, 16px); + + a { + &:before { + content: url("/static/img/download.png"); + @include size(font-size, 25px); + @include size(margin-right, 3.71px); + vertical-align: middle; + font-weight: normal; + } + } + + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(margin-top, 0); + + &:first-child { + @include size(margin-top, 16px); + } + a:before { + display:none; + } + } + } + } + + &:hover .book-box-formats, + &.hover .book-box-formats { + display: block; + } + } + + .book-box-audiobook { + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(width, 77px); + } + + a:before { + content: url("/static/img/listen.png"); + @include size(font-size, 25px); + @include size(margin-right, 3.71px); + vertical-align: middle; + font-weight: normal; + } + + } +} + + + + +.star { + @include size(font-size, 22.5px); + @include size(margin-right, 11.25px); + position: absolute; + right: 0; + + button::-moz-focus-inner { + padding: 0; + border: 0 + } + .if-unlike button { + font-size: 1em; + font-family: inherit; + border: 0; + background: none; + margin: 0; + padding: 0; + color: #757575; + } + .if-like a { + display:block; + text-align:right; + padding: 0; + } +} +.like .if-unlike { + display: none; +} +.unlike .if-like { + display: none; +} + + +#book-detail .see-also, +#picture-detail .see-also { + h1 { + @include size(height, 32px); + margin: 0; + @include size(padding-top, 19px); + @include size(padding-left, 10px); + + @include size(font-size, 11px); + @include mono; + font-weight: normal; + + @media screen and (min-width: 33em) { + @include size(padding-left, 19px); + } + } +} diff --git a/src/wolnelektury/static/scss/main/book_list.scss b/src/wolnelektury/static/scss/main/book_list.scss new file mode 100755 index 000000000..d4115dcbb --- /dev/null +++ b/src/wolnelektury/static/scss/main/book_list.scss @@ -0,0 +1,92 @@ +/* listing of all books */ + +#book-a-list { + #book-list-nav { + @include size(border-width, 0); + @include size(border-bottom-width, 1px); + border-style: solid; + border-color: #CFCFCF; + @include size(padding, 9.75px); + line-height: 2em; + + @media screen and (min-width: 30em) { + @include size(border-bottom-width, 0px); + @include size(border-left-width, 1px); + float: right; + width: 50%; + } + + @media screen and (min-width: 62.5em) { + line-height: 1.3em; + } + + h2 { + cursor: pointer; + + &:after { + @include size(padding-left, 10px); + content: url("/static/img/arrow-gray.png"); + vertical-align: top; + } + + @media screen and (min-width: 30em) { + font-size: 1em; + margin: 0; + cursor: regular; + + &:after { + display: none; + } + } + } + + #book-list-nav-index { + display: none; + @media screen and (min-width: 30em) { + display: block !important; + } + } + + ul { + list-style-type: none; + @include size(margin, 5px); + padding: 0; + } + .book-list-show-index { + display: none; + } + } + + #book-list { + @include size(padding-left, 5px); + line-height: 2em; + + @media screen and (min-width: 62.5em) { + @include size(padding-left, 50px); + line-height: 1.3em; + } + + ol { + @include size(padding-left, 13px); + @include size(margin, 4px 0 15.6px 0); + list-style: none; + } + h2 { + @include size(font-size, 13px); + margin: 0; + a { + color: black; + } + } + } + + #book-list-up { + display: block; + position: fixed; + @include size(bottom, 50px); + @include size(right, 50px); + @include size(border-left, solid 1px #CFCFCF); + @include size(padding, 20px 10px); + background-color: white; + } +} diff --git a/src/wolnelektury/static/scss/main/catalogue.scss b/src/wolnelektury/static/scss/main/catalogue.scss new file mode 100755 index 000000000..ba30e8271 --- /dev/null +++ b/src/wolnelektury/static/scss/main/catalogue.scss @@ -0,0 +1,29 @@ +/* listing of all books */ + +.catalogue-catalogue { + ul { + column-width: 25em; + -moz-column-width: 25em; + -webkit-column-width: 25em; + + @include size(padding-left, 10px); + + @media screen and (min-width: 20em) { + @include size(padding-left, 40px); + } + + li { + margin-bottom: 1em; + + @media screen and (min-width: 62.5em) { + margin-bottom: .5em; + } + } + } + + h2 { + @include size(font-size, 26px); + margin: 0; + @include size(padding, 26px); + } +} diff --git a/src/wolnelektury/static/scss/main/cite.scss b/src/wolnelektury/static/scss/main/cite.scss new file mode 100755 index 000000000..eb3a51139 --- /dev/null +++ b/src/wolnelektury/static/scss/main/cite.scss @@ -0,0 +1,61 @@ +.cite { + display: block; + color: black; + background: white; + @include size(padding, 30px 20px 1px 80px); + + .vip { + margin: 0; + color: #575C63; + @include size(font-size, 11px); + } + + .cite-body { + @include size(font-size, 18px); + line-height: 1.3em; + + h4 { + margin: 0; + } + .didaskalia { + font-style: italic; + } + .verse { + // Cancel any indentation. + padding-left: 0 !important; + } + .person { + font-style: inherit; + } + } + + blockquote { + padding: 0; + margin: 0; + + p { + margin: 0; + } + } + + .source + { + color: #444; + @include mono; + @include size(font-size, 11px); + @include size(margin-top, 16px); + } +} + + + + +.book-wide-box .cite { + background-color: #f7f7f7; + vertical-align: middle; + @include min-screen(1000px) { + @include size(width, 395px); + } + margin: 0; + @include size(padding, 10px); +} diff --git a/src/wolnelektury/static/scss/main/const.scss b/src/wolnelektury/static/scss/main/const.scss new file mode 100644 index 000000000..2ebc4b81c --- /dev/null +++ b/src/wolnelektury/static/scss/main/const.scss @@ -0,0 +1,3 @@ +$S_BOOK_SHORT_MEDIUM: 320px; +$S_BOOK_SHORT_FULL: 512px; +$W_BOOK_SHORT_FULL: 487.5px; diff --git a/src/wolnelektury/static/scss/main/dialogs.scss b/src/wolnelektury/static/scss/main/dialogs.scss new file mode 100755 index 000000000..2902862fc --- /dev/null +++ b/src/wolnelektury/static/scss/main/dialogs.scss @@ -0,0 +1,138 @@ +.dialog-window { + position: absolute; + display: none; + background-color: transparent; + @include size(margin-top, -5px); + @include size(margin-left, 10px); + @include size(width, 200px); + + @media screen and (max-width: 29.999999em) { + left: 0 !important; + right: 0; + @include size(margin-left, 0); + width: auto; + } + + div.header { + @include mono; + @include size(font-size, 11px); + width: 4em; + background-color: #FFF; + padding: 1em; + right: 0; + left: auto; + float: right; + text-align: center; + + @media screen and (min-width: 30em) { + padding-top: 0.5em; + padding-bottom: 0.5em; + border-right: 0.3em solid #DDD; + } + } + + div.target { + background-color: #FFF; + color: black; + border-bottom: 0.3em solid #DDD; + padding: 1em 10px; + clear: both; + + @media screen and (min-width: 30em) { + border-right: 0.3em solid #DDD; + padding-left: 1em; + padding-right: 1em; + } + } + + h1 { + @include size(font-size, 12px); + font-weight: normal; + margin-top: .4em; + } + + textarea, input { + width: 100%; + } +} + + + + + + + +.cuteform { + @include size(font-size, 11px); + + ol, ul { + padding: 0; + margin: 0; + list-style: none; + @include size(font-size, 11px); + + li { + margin-top: 0.7em; + } + } + + label { + display: block; + } + + span.help-text { + display: block; + font-size: 0.8em; + color: #999; + } + + .error { + color: #BF3024; + display: block; + } + + .errorlist { + color: #BF3024; + } +} + + +.jqmOverlay { background-color: #000; } + + + +.hidelabels label { + @include hidden-label; +} + + +@media screen and (min-width: 30em) { + #login-window { + @include size(width, 260px); + } + #register-window { + width: 26em; + } + #context-login-window { + width: 26em; + } + #suggest-window { + width: 26em; + } + #suggest-publishing-window { + width: 29em; + } + #custom-pdf-window { + width: 24em; + } +} + +#suggest-window textarea { + height: 6em; +} +#suggest-publishing-window textarea { + height: 3em; +} +#custom-pdf-window label { + display: inline; +} diff --git a/src/wolnelektury/static/scss/main/footer.scss b/src/wolnelektury/static/scss/main/footer.scss new file mode 100755 index 000000000..8969a5ad7 --- /dev/null +++ b/src/wolnelektury/static/scss/main/footer.scss @@ -0,0 +1,26 @@ +#footer-wrapper { + @include size(margin-top, 50px); + @include size(padding-top, 30px); + background: #fff; + color: #767676; + @include size(border-top, 1px solid #ddd); +} + +footer#main { + @include size(font-size, 10px); + @include size(margin-left, 5px); + @include size(margin-right, 5px); + + @media screen and (min-width: 62.5em) { + @include size(width, 975px); + margin: auto; + } + + p { + @include size(margin-top, 2.5px); + @include size(margin-bottom, 2.5px); + margin-left: 0; + margin-right: 0; + } +} + diff --git a/src/wolnelektury/static/scss/main/form.scss b/src/wolnelektury/static/scss/main/form.scss new file mode 100755 index 000000000..42e867595 --- /dev/null +++ b/src/wolnelektury/static/scss/main/form.scss @@ -0,0 +1,26 @@ +form table { + th { + vertical-align: top; + text-align: left; + font-weight: normal; + } + td { + padding-bottom: 1em; + } + + .required th:after { + content: " *"; + } + + .errorlist { + color: red; + margin: 0; + padding: 0; + list-style: none; + } + .helptext { + color: #888; + font-size: .9em; + font-style: italic; + } +} diff --git a/src/wolnelektury/static/scss/main/fragment.scss b/src/wolnelektury/static/scss/main/fragment.scss new file mode 100755 index 000000000..4c765f6fe --- /dev/null +++ b/src/wolnelektury/static/scss/main/fragment.scss @@ -0,0 +1,35 @@ +.Fragment-item, .PictureArea-item { + @include size(margin-bottom, 20px); + @include white-box; + + .fragment { + color: black; + display: block; + } + .toggle { + @include size(font-size, 11px); + display: block; + @include size(padding, 5px 0); + } +} + +.area { + display: block; + color: black; + background: white; + @include size(padding, 30px 20px 20px 20px); + position: relative; + clear: both; + + .area-thumbnail { + display:block; + @include size(width, 100px); + float: left; + } + + .area-description { + float: right; + @include size(padding, 10px); + @include size(width, 256px); + } +} diff --git a/src/wolnelektury/static/scss/main/header.scss b/src/wolnelektury/static/scss/main/header.scss new file mode 100755 index 000000000..63bd8677c --- /dev/null +++ b/src/wolnelektury/static/scss/main/header.scss @@ -0,0 +1,215 @@ +$header_bg: #191919; + + +#header-wrapper { + position: relative; + + /* Upper-half both sides dark background */ + &:before { + content: " "; + display: block; + z-index: -1; + position: absolute; + top: 0; + @include size(bottom, 45px); + left: 0; + width: 100%; + background-color: $header_bg; + } + + /* Left-side dark background */ + &:after { + content: " "; + display: block; + z-index: -1; + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 50%; + background-color: $header_bg; + } +} + + +header#main { + @include size(line-height, 20px); /* Make links easier to click when wrapped. */ + background-color: $header_bg; + color: #bbb; + + text-align:center; + + @media screen and (min-width: 62.5em) { + position: relative; + @include size(height, 94px); + @include size(width, 975px); + margin: auto; + } + + a { + color: #17CFDB; + } + + #logo { + display: block; + @include size(height, 94px); + + @media screen and (min-width: 24em) { + @include size(width, 173px); + float: left; + } + } + + #tagline { + margin-top: 0; + @include size(margin-left, 5px); + @include size(margin-right, 5px); + padding-top: 0; + @include size(font-size, 11px); + + @media screen and (min-width: 24em) { + @include size(padding-top, 6px); + @include size(font-size, 13px); + @include size(margin-left, 180px); + text-align: right; + } + + @media screen and (min-width: 62.5em) { + position: absolute; + @include size(top, 10px); + @include size(left, 255px); + @include size(margin-left, 0px); + } + } + + #user-info { + margin-top: 0; + @include size(margin-left, 5px); + @include size(margin-right, 5px); + padding-top: 0; + @include mono; + @include size(font-size, 10px); + position: relative; + + @media screen and (min-width: 24em) { + @include size(padding-top, 15px); + @include size(margin-left, 180px); + text-align: right; + } + @media screen and (min-width: 62.5em) { + position: absolute; + top: 0; + right: 0; + @include size(margin-left, 0); + @include size(margin-right, 0); + } + + /* We want submenu on far left on small screens. */ + .hidden-box-wrapper { + position: static; + @media screen and (min-width: 24em) { + position: relative; + } + } + + #user-menu { + display: none; + + text-align: left; + line-height:1.6em; + left: 0; + right: 0; + top: 2em; + + @media screen and (min-width: 15em) { + right: auto; + width: 15em; + } + + a { + color: #0D7E85; + } + } + } + + form#search-area { + position: relative; + clear: both; + @include size(height, 45px); + background: #444444; + color: white; + + @media screen and (min-width: 62.5em) { + position: absolute; + @include size(top, 49px); + @include size(left, 240px); + @include size(right, 0); + } + + #search-field { + position: absolute; + @include size(top, 5px); + @include size(left, 5px); + @include size(right, 113px); + + label { + @include hidden-label; + } + input#search { + z-index: 200; + position: relative; + @include size(height, 33px); + width: 100%; + padding: 0; + @include size(padding-left, 13px); + @include size(line-height, 32.5px); + + border: none; + @include size(border-radius, 5px); + @include box-shadow(0 0 6.5px #444444 inset); + + font-family: Georgia; + @include size(font-size, 13px); + background-color: white; + color: black; + + /* styling search placeholder */ + &::placeholder + { + font-family: Georgia; + font-style: italic; + color: #767676; + } + &::-webkit-input-placeholder + { + font-family: Georgia; + font-style: italic; + color: #767676; + } + &::-moz-placeholder + { + font-family: Georgia; + font-style: italic; + color: #767676; + } + } + } + button { + display: inline-block; + position: absolute; + top: 0; + right: 0; + @include size(height, 45px); + @include size(width, 94px); + margin: 0; + padding: 0; + + border: none; + + @include mono; + @include size(font-size, 11px); + background: #018189; + color: white; + } + } +} diff --git a/src/wolnelektury/static/scss/main/hidden.scss b/src/wolnelektury/static/scss/main/hidden.scss new file mode 100755 index 000000000..718525be0 --- /dev/null +++ b/src/wolnelektury/static/scss/main/hidden.scss @@ -0,0 +1,53 @@ +.hidden-box-wrapper { + position: relative; + + .hidden-box { + position: absolute; + left: 0; + display: none; + @include size(padding, 10px 10px 5px 10px); + @include white-box; + + z-index: 500; + + ul { + list-style: none; + padding: 0; + margin: 0; + @include size(font-size, 11px); + + @include size(column-width, 132px); + @include size(-moz-column-width, 132px); + @include size(-webkit-column-width, 132px); + + @media screen and (min-width: 24em) { + @include size(width, 320px); + } + + @media screen and (min-width: 34em) { + @include size(width, 480px); + } + + @media screen and (min-width: 62.5em) { + @include size(width, 528px); + } + + + + li { + margin-bottom: 1em; + + @media screen and (min-width: 62.5em) { + margin-bottom: .5em; + } + } + } + } +} + +@media screen and (min-width: 24em) { + #menu-collections ul { + @include size(width, 180px); + } +} + diff --git a/src/wolnelektury/static/scss/main/main_content.scss b/src/wolnelektury/static/scss/main/main_content.scss new file mode 100755 index 000000000..87e140232 --- /dev/null +++ b/src/wolnelektury/static/scss/main/main_content.scss @@ -0,0 +1,8 @@ +#main-content { + position: relative; + + @media screen and (min-width: 62.5em) { + @include size(width, 975px); + margin: auto; + } +} diff --git a/src/wolnelektury/static/scss/main/main_page.scss b/src/wolnelektury/static/scss/main/main_page.scss new file mode 100755 index 000000000..ddce4fc21 --- /dev/null +++ b/src/wolnelektury/static/scss/main/main_page.scss @@ -0,0 +1,256 @@ +#big-cite { + background-color: #444; + color: white; + padding: 0; + margin: 0; + background-size: 100%; + background-position: 50% 68%; + background-repeat: repeat-y; + + background-image: url(/static/img/backdrop/book-drawer2.jpg); + + @media screen and (min-width: 62.5em) { + background-image: url(/static/img/backdrop/book-drawer2.jpg); + } + + .cite { + @include size(padding, 46px 10px 48px 0); + background: none; + color: white; + + @media screen and (min-width: 30em) { + @include size(padding-right, 40px); + } + + .vip { + @include size(margin-left, 10px); + @include size(margin-top, 2.5px); + @include size(margin-bottom, 5px); + @include size(font-size, 11px); + + @media screen and (min-width: 16em) { + padding-left: 10%; + @include size(margin-left, -18px); + } + + @media screen and (min-width: 62.5em) { + float: left; + padding-left: 0; + @include size(margin-left, 16px); + text-align: right; + @include size(width, 147px); + } + } + + .cite-body { + @include size(margin, .5px); + @include size(font-size, 20px); + line-height: 1.16em; + + @media screen and (min-width: 30em) { + @include size(font-size, 30px); + } + } + + .source { + @include size(margin-top, 16px); + @include size(margin-bottom, 16px); + @include size(margin-right, 2px); + @include size(font-size, 12px); + } + + /* Make cite body and source slide to the left. */ + .cite-body, .source { + @include size(margin-left, 10px); + + @media screen and (min-width: 16em) { + padding-left: 21.9%; + @include size(margin-left, -38px); + } + + @media screen and (min-width: 62.5em) { + padding-left: 0; + @include size(margin-left, 175px); + } + } + + /* Semi-transparent background. */ + .cite-body span, + .vip span, + .source span { + color: white; + background-color: rgb(0, 0, 0); + background-color: rgba(0, 0, 0, 0.6); + /* For IE 5.5 - 7*/ + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); + /* For IE 8*/ + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; + } + } + + /* a long cite displays smaller */ + .cite-small .cite-body { + @include size(font-size, 16px); + @media screen and (min-width: 30em) { + @include size(font-size, 20px); + } + } + + h2 { + margin: 0; + @include size(font-size, 11px); + color: #575c63; + } +} + + +#promo-box { + @include size(margin-top, 16px); + + @media screen and (min-width: 33em) { + float: right; + @include size(margin-top, -51px); + @include size(width, 320px); + } + + h1 { + @include size(padding, 20px 5px 0 10px); + @include size(height, 31px); + margin: 0; + background: #191919; + color: white; + @include mono; + @include size(font-size, 13px); + font-weight: normal; + + @media screen and (min-width: 33em) { + @include size(padding-left, 25px); + @include size(padding-right, 25px); + } + } + + #promo-box-body { + @include size(padding, 20px 5px); + @include size(border-bottom, 2px solid #efefef); + background: #efefef; + + @media screen and (min-width: 33em) { + @include size(padding-left, 28px); + @include size(padding-right, 28px); + } + + @media screen and (min-width: 62.5em) { + @include size(height, 300px); + } + + a { + display: block; + color: #6c6c6c; + } + p { + margin-top: 0; + @include size(font-size, 12px); + line-height: 1.55em; + color: #6c6c6c; + } + h2, h3 { + color: #0d777e; + @include size(font-size, 11px); + @include size(height, 27.5px); + margin: 0; + @include mono; + font-weight: normal; + + &:after { + content: " >"; + } + } + } +} + + +#main-last { + h1 { + @include size(height, 32px); + margin: 0; + @include size(padding-top, 19px); + @include size(padding-left, 10px); + + @include size(font-size, 11px); + @include mono; + font-weight: normal; + + @media screen and (min-width: 33em) { + @include size(padding-left, 19px); + } + + a { + color: black; + + &:after { + content: " >"; + } + } + } + .book-mini-box:nth-child(3) { + @media screen and (min-width: 30em) { + margin-right: 3em; + } + @media screen and (min-width: 33em) { + margin-right: 0; + } + } +} + + +.infopages-box { + margin: 0; + @include size(margin-top, 5px); + @include size(padding, 0 5px); + vertical-align: top; + color: #989898; + + @media screen and (min-width: 20em) { + display: inline-block; + @include size(width, 206px); + @include size(padding-left, 17px); + @include size(padding-right, 17px); + } + + h1 { + @include size(height, 28px); + margin: 0; + @include size(padding-top, 25px); + @include size(font-size, 11px); + color: #017e85; + font-weight: normal; + @include mono; + } + + a { + color: black; + } + + ol, ul { + @include size(font-size, 11px); + list-style: none; + padding: 0; + margin: 0; + line-height: 1.45em; + + li { + @include size(margin-bottom, 8px); + @media screen and (min-width: 62.5em) { + @include size(margin-bottom, 2.5px); + } + } + } + + .social-links { + @include size(margin-top, 10px); + + a { + @include size(margin-right, 6px); + } + } +} diff --git a/src/wolnelektury/static/scss/main/menu.scss b/src/wolnelektury/static/scss/main/menu.scss new file mode 100755 index 000000000..846e4c88c --- /dev/null +++ b/src/wolnelektury/static/scss/main/menu.scss @@ -0,0 +1,177 @@ +#nav-line { + background-color: #e2e2e2; + position: relative; + + @media screen and (min-width: 62.5em) { + @include size(width, 975px); + margin: auto; + } + + #show-menu { + display: block; + float: left; + @include size(line-height, 13px); + @include size(padding, 18px 13px); + color: #0c7076; + @include size(font-size, 11px); + @include mono; + + .long { + display: none; + + &:after { + @include size(padding-left, 10px); + content: url("/static/img/arrow-gray.png"); + vertical-align: top; + } + } + + @media screen and (min-width: 20em) { + .long { display: inline; } + .short { display: none; } + } + + @media screen and (min-width: 53em) { + display: none; + } + } + + ul#menu { + list-style: none; + padding: 0; + margin: 0; + + display: none; + position: absolute; + @include size(top, 49px); + left: 0; + @include size(right, 10px); + z-index: 400; + + @media screen and (min-width: 24em) { + right: auto; + } + + @media screen and (min-width: 53em) { + display: block !important; + position: static; + @include size(margin-left, 6px); + } + + li.menu { + background-color: #e2e2e2; + + @media screen and (min-width: 53em) { + float: left; + } + + a.menu { + display: block; + @include size(line-height, 13px); + @include size(padding, 18px 12px 15px); + @include size(border-bottom, 3px solid #e2e2e2); + color: #0c7076; + @include size(font-size, 11px); + @include mono; + } + + a.hidden-box-trigger:hover { + border-bottom-color: white; + } + } + } + + #lang-menu { + display: block; + float: right; + + background: #f7f7f7; + @include mono; + + @media screen and (min-width: 15em) { + position: relative; + } + + #lang-button { + @include size(padding-left, 25px); + @include size(padding-right, 20px); + + display:block; + @include size(line-height, 17px); + @include size(padding-top, 16px); + @include size(padding-bottom, 16px); + + @include size(font-size, 10px); + color: #717171; + + .label { + display: none; + + @media screen and (min-width: 62.5em) { + display: inline; + } + + &:after { + @include size(padding-left, 10px); + content: url("/static/img/arrow-gray.png"); + vertical-align: top; + } + } + + .lang-flag { + @include size(font-size, 13px); + @include size(line-height, 15px); + } + } + + #lang-menu-items { + z-index: 9999; + + button { + @include mono; + display: none; + background: #f7f7f7; + color: #6f6f6f; + cursor: pointer; + width: 100%; + margin: 0; + @include size(padding, 10px 0); + + @media screen and (min-width: 62.5em) { + @include size(padding, 5px 0); + } + + border-width: 0; + @include size(border-bottom, 1px solid #ddd); + + @include size(font-size, 13px); + + &.active { + color: #000; + } + } + } + + &:hover, &.hover { + #lang-menu-items { + position: absolute; + padding: 0; + left: 0; + right: 0; + + @media screen and (min-width: 15em) { + left: auto; + @include size(width, 180px); + @include size(top, 49px); + } + @media screen and (min-width: 62.5em) { + width: 100%; + } + + button { + display: block; + } + } + } + } +} diff --git a/src/wolnelektury/static/scss/main/picture_box.scss b/src/wolnelektury/static/scss/main/picture_box.scss new file mode 100644 index 000000000..69d34a398 --- /dev/null +++ b/src/wolnelektury/static/scss/main/picture_box.scss @@ -0,0 +1,71 @@ +.picture { + &.book-wide-box { + .cover-area { + position: static; + @include size(margin-right, 15px); + @media screen and (min-width: 62.5em) { + margin-right: 0; + } + + img.cover { + @include size(width, 535px); + height: auto; + } + } + + .book-box-head, .tags, .book-box-tools { + margin-left: 0; + } + + + @media screen and (min-width: 62.5em) { + .book-box-head, .tags, .book-box-tools { + float: right; + @include size(width, 403px); + } + } + + .other-tools { + margin: 5em 0 0 0; + } + + .book-box-tools, .tags, #theme-list-wrapper { + clear: both; + margin-left: 0; + } + .book-box-body { + height: auto; + margin-bottom: 1em; + } + + @media screen and (min-width: 50em) { + .book-box-body { + height: auto; + @include size(min-height, 170px); + margin-bottom: 0; + } + .book-box-tools, .tags { + clear: right; + } + + #theme-list-wrapper { + clear: right; + @include size(margin-left, 550px); + } + } + } + + li.book-box-download { + width: 15em; + } +} + + +.work-list { + .Picture-item { + @include min-screen($S_BOOK_SHORT_FULL) { + display: inline-block; + } + vertical-align: top; + } +} diff --git a/src/wolnelektury/static/scss/main/search.scss b/src/wolnelektury/static/scss/main/search.scss new file mode 100755 index 000000000..d8a1e0622 --- /dev/null +++ b/src/wolnelektury/static/scss/main/search.scss @@ -0,0 +1,109 @@ +/* jquery UI overrides us */ +.ui-menu .ui-menu-item a { + color: #0d7e85 !important; + line-height: 1.636em !important; +} + +.ui-widget { + font-family: Georgia !important; + @include size(font-size, 10px !important); +} + +.ui-widget-content { + background: #EEEEEE !important; /* #E2E2E2 ? */ + border-radius: 0px !important; +} + + + +.inline-tag-lists p span:first-child { + color: #281d1c; +} + +/* just on search page */ +.top-tag-list { + @include size(margin-top, 22px); + @include size(margin-bottom, 16px); +} + + +.search-result { + @include size(border, 1px solid #ddd); + @include size(box-shadow, 2px 2px 2px #ddd); + @include size(margin, 1px); + background: white; + + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(width, $W_BOOK_SHORT_FULL -4px); + } + + @media screen and (min-width: 62.5em) { + @include size(width, 965px); + @include size(padding-right, 8px); + } + + .book-box { + display: inline-block; + + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(width, $W_BOOK_SHORT_FULL - 4px); + } + + .book-box-inner { + border: none; + box-shadow: none; + margin: 0; + } + } +} + + + +.book-list-header { + @media screen and (min-width: 62.5em) { + @include size(width, 975px); + } + padding: 0em; + @include size(margin-left, -1px); + + .book-box-inner { + min-height: 1em; + } + + p { + @include size(font-size, 24px); + @include size(margin, 5px); + } +} + +.snippets { + @media screen and (min-width: 62.5em) { + @include size(width, 440px); + float: right; + } + + .snippet-text { + @include size(font-size, 12px); + @include size(margin, 13px 0); + @include size(padding, 12px); + background: #f7f7f7; + } + + .anchor { + display: none; + } +} + + +.search-hint-label { + display: inline-block; + @include size(font-size, 11px); + @include size(width, 275px); + line-height: 1.636em; +} + +.search-hint-category { + @include size(font-size, 11px); + line-height: 1.636em; +} + diff --git a/src/wolnelektury/static/scss/main/tag.scss b/src/wolnelektury/static/scss/main/tag.scss new file mode 100755 index 000000000..d120a3f97 --- /dev/null +++ b/src/wolnelektury/static/scss/main/tag.scss @@ -0,0 +1,102 @@ +.page-desc { + @include size(margin-left, 15px); +} + +#tagged-object-list { + @media screen and (min-width: 62.5em) { + .left-column, .right-column { + @include size(width, 480px); + } + } + + .see-also, .download { + float: left; + @include size(margin-top, 20px); + @include size(margin-bottom, 20px); + + h2 { + @include mono; + @include size(font-size, 11px); + margin: 0; + } + + ul { + @include size(font-size, 11px); + list-style: none; + padding: 0; + margin: 0; + } + } + + .see-also { + @include size(margin-left, 80px); + @include size(width, 143px); + } + .download { + @include size(margin-left, 20px); + } + + .left-column .see-also { + margin-left: 0; + } +} + +#description { + @include size(margin-bottom, 26px); + cursor: pointer; + + dl { + margin-top: 0; + } + dt { + display: inline; + font-weight: bold; + margin: 0; + } + dd { + display: inline; + margin: 0; + } + p { + margin-top: 0; + } + #description .meta { + list-style: none; + padding: 0; + margin: 0; + } + #description .meta li { + text-align: right; + color: #666; + @include size(font-size, 11.7px); + } +} + +.inline-tag-lists { + @include size(font-size, 11px); + + .inline-header { + @include mono; + display: inline-block; + vertical-align: top; + @include size(width, 77px); + } + + .inline-body { + display: inline-block; + vertical-align: top; + @include size(margin-bottom, 5.5px); + @include size(max-width, 385px); + + ul { + list-style: none; + padding: 0; + margin: 0; + + li { + display: inline-block; + @include size(margin-right, 11px); + } + } + } +} diff --git a/src/wolnelektury/static/scss/polls/polls.scss b/src/wolnelektury/static/scss/polls/polls.scss new file mode 100644 index 000000000..28cd5a5cf --- /dev/null +++ b/src/wolnelektury/static/scss/polls/polls.scss @@ -0,0 +1,21 @@ +.poll { + width: 400px; + ul { + list-style-type: none; + } +} + +.poll-bar { + border: solid 1px #ddd; + height:6px; + margin-bottom: 10px; +} + +.poll-bar-inner { + background: orange; + height: 6px; +} + +.poll-msg { + font-weight: bold; +} \ No newline at end of file diff --git a/src/wolnelektury/static/scss/social/shelf_tags.scss b/src/wolnelektury/static/scss/social/shelf_tags.scss new file mode 100644 index 000000000..f20fba8b6 --- /dev/null +++ b/src/wolnelektury/static/scss/social/shelf_tags.scss @@ -0,0 +1,40 @@ +.social-shelf-tags { + list-style: none; + padding: 0; + margin: 10px 0; + + @include min-screen($S_BOOK_SHORT_FULL) { + position: absolute; + top: 134px; + left: 152px; + padding: 10px 10px 5px 10px; + margin: 10px 0; + width: 310px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + &:hover { + overflow: visible; + text-overflow: ellipsis; + white-space: normal; + z-index: 1000; + background: #fff; + box-shadow: 0 0 2px #ddd; + } + } + + li { + display: inline-block; + margin-right: .5em; + margin-bottom: .5em; + + a { + display: block; + padding: .2em .9em; + background: #ABDADE; + color: #08646b; + border-radius: 1em; + } + } +} diff --git a/src/wolnelektury/static/scss/tools.scss b/src/wolnelektury/static/scss/tools.scss new file mode 100644 index 000000000..76869c40d --- /dev/null +++ b/src/wolnelektury/static/scss/tools.scss @@ -0,0 +1,70 @@ +$default-em-size: 16px; + +@mixin size($name, $args) { + $rems: snowflake; + @each $val in $args { + $remval: $val; + @if type-of($val) == number { + @if unit($val) == "px" { + $remval: $val / $default-em-size * 1rem; + } + } + // Workaround for PySCSS issue with appending to empty lists. + @if $rems == snowflake { + $rems: $remval; + } + @else { + $rems: append($rems, $remval); + } + } + #{$name}: $args; + #{$name}: $rems; +} + +@mixin min-screen($size) { + @if unit($size) == "px" { + $size: $size / $default-em-size * 1em; + } + + @media screen and (min-width: $size) { + @content; + } +} + + +@mixin vendors($name, $args) { + @include size(-moz + $name, $args); + @include size(-webkit + $name, $args); + @include size(-moz + $name, $args); +} + +@mixin vendors($names, $args) { + @each $name in $names { + @include size($name, $args); + } +} + +@mixin box-shadow($args) { + @include vendors( + -moz-box-shadow + -webkit-box-shadow + box-shadow, + $args); +} + +@mixin mono { + font-family: "Andale Mono", "Lucida Sans Typewriter", "Courier New"; +} + +@mixin hidden-label { + display: block; + @include size(width, 1px); + @include size(height, 1px); + overflow: hidden; +} + +@mixin white-box { + @include size(border, 1px solid #ddd); + background: #fff; + @include box-shadow(2px 2px 2px #ddd); +} diff --git a/src/wolnelektury/static/scss/widget.scss b/src/wolnelektury/static/scss/widget.scss new file mode 100644 index 000000000..7d78730ef --- /dev/null +++ b/src/wolnelektury/static/scss/widget.scss @@ -0,0 +1,150 @@ +html, body { + padding: 0; + margin: 0; + overflow: hidden; +} + + +#wl { + background-color: #191919; + position:relative; + + a, a:visited, a:hover { + display: block; + line-height: 5.94rem; + border: 0; + + img { + border: 0; + max-width: 100%; + margin: 0; + vertical-align: middle; + } + } + + #wl-form { + background: #444; + color: white; + height: 2.8125rem; + position: relative; + } + #wl-search { + position: absolute; + left: .3125rem; + right: 2.9rem; + right: 22%; + top: .3125rem; + } + + #id_qq { + font-family: Georgia; + font-size: 0.8125rem; + + background-color: #FFFFFF; + border: medium none; + border-radius: 0.3125rem; + box-shadow: 0 0 0.40625rem #444444 inset; + color: #000000; + height: 2.0625rem; + width: 100%; + + line-height: 2.03125rem; + padding: 0 0 0 .8125rem; + position: relative; + box-sizing: border-box; + z-index: 200; + + &::-moz-placeholder { + color: #767676; + font-family: Georgia; + font-style: italic; + } + } + + button { + background: #018189; + border: none; + color: white; + display: inline-block; + font-size: .6875rem; + position: absolute; + right: 0; + top: 0; + width: 2rem; + + width: 20%; + height: 2.8125rem; + margin: 0; + padding: 0; + + img { + max-width: 100%; + } + } + +} + +.ui-menu { + width: 100%; + font-size: 0.7rem; + list-style-type: none; + padding: 0; + margin: 0; + border-style: solid; + border-color: #ddd; + border-width: 1px 0; + + li { + clear: right; + + &:nth-child(odd) { + background-color: rgba(255,255,255,.95); + } + + &:nth-child(even){ + background-color: rgba(238,238,238,.95); + } + + &:hover{ + background-color: #053469; + color:white; + } + + .ui-state-hover { + background-color: #fdf5ce; + } + + .search-hint-label { + line-height: 1.636em; + display: inline-block; + max-width: 80%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .search-hint-category { + display: none; + @media screen and (min-width: 10em) { + display: block; + } + float: right; + font-size: .9em; + } + } + + a:hover { + text-decoration: none; + } +} + +.ui-corner-all { + cursor: pointer; + display:block; + + a { + text-decoration: none; + color: #0D7E85; + padding: 5px; + } +} diff --git a/src/wolnelektury/templates/404.html b/src/wolnelektury/templates/404.html new file mode 100644 index 000000000..f3846aac4 --- /dev/null +++ b/src/wolnelektury/templates/404.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} +{% load i18n %} + + +{% block titleextra %}404 - {% trans "Page does not exist" %}{% endblock %} + + +{% block body %} + +

                            {% trans "Page not found" %}

                            + + +

                            +{% trans "We are sorry, but this page does not exist. Please check if you entered correct address or go to "%} {% trans "main page" %}. +

                            + + + +{% endblock body %} diff --git a/src/wolnelektury/templates/500.html b/src/wolnelektury/templates/500.html new file mode 100644 index 000000000..df74fe42d --- /dev/null +++ b/src/wolnelektury/templates/500.html @@ -0,0 +1,24 @@ +{% load i18n %} + + + + + Wolne Lektury :: 500 - {% trans "Server error" %} + + +
                            +
                            + +
                            +
                            + +
                            +
                            +

                            {% trans "Server error" %}

                            + +{% trans "

                            The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our blog.

                            Inform our administrators about the error.

                            " %} + +
                            +
                            + + \ No newline at end of file diff --git a/src/wolnelektury/templates/503.html b/src/wolnelektury/templates/503.html new file mode 100644 index 000000000..47689d122 --- /dev/null +++ b/src/wolnelektury/templates/503.html @@ -0,0 +1,24 @@ +{% load i18n %} + + + + + Wolne Lektury :: 503 - {% trans "Service unavailable" %} + + +
                            +
                            + +
                            +
                            + +
                            +
                            +

                            {% trans "Service unavailable" %}

                            +

                            +{% trans "The Wolnelektury.pl site is currently unavailable due to maintainance." %} +

                            +
                            +
                            + + diff --git a/src/wolnelektury/templates/account/base.html b/src/wolnelektury/templates/account/base.html new file mode 100755 index 000000000..6bcdf12cf --- /dev/null +++ b/src/wolnelektury/templates/account/base.html @@ -0,0 +1,10 @@ +{% extends "site_base.html" %} + +{% block body %} +{% block content %} {% endblock %} +{% endblock %} + +{% block extrabody %} +{% block extra_body %} +{% endblock %} +{% endblock %} diff --git a/src/wolnelektury/templates/admin/base_site.html b/src/wolnelektury/templates/admin/base_site.html new file mode 100644 index 000000000..ff381b554 --- /dev/null +++ b/src/wolnelektury/templates/admin/base_site.html @@ -0,0 +1,22 @@ +{% extends "admin/base.html" %} +{% load i18n %} + +{% block title %}{{ title }} | {% trans "Site administration" %} - WolneLektury.pl{% endblock %} + +{% block branding %} +

                            {% trans "Site administration" %} - WolneLektury.pl

                            +

                            + + promobox | + cytaty | + info | + książki | + tagi | + kolekcje | + licznik domeny | + sponsorzy | + sugestie +

                            +{% endblock %} + +{% block nav-global %}{% endblock %} \ No newline at end of file diff --git a/src/wolnelektury/templates/admin/catalogue/book/change_form.html b/src/wolnelektury/templates/admin/catalogue/book/change_form.html new file mode 100644 index 000000000..819ab62fc --- /dev/null +++ b/src/wolnelektury/templates/admin/catalogue/book/change_form.html @@ -0,0 +1,46 @@ +{% extends "admin/change_form.html" %} +{% load i18n %} + +{% block content_title %} + {% if change and 'advanced' in request.GET %} +

                            {{ title }} — {% trans "advanced" %}

                            + {% else %} + {{ block.super }} + {% endif %} +{% endblock %} + + +{# add an "Advanced" button to tools #} + +{% block extrastyle %} + {% if change and not is_popup %} + {{ block.super }} + + {% else %} + {{ block.super }} + {% endif %} +{% endblock %} + +{% block object-tools %} + {% if change and not is_popup %} +
                            + {{ block.super }} + +
                            + {% else %} + {{ block.super }} + {% endif %} +{% endblock %} + + + + diff --git a/src/wolnelektury/templates/admin/catalogue/book/change_list.html b/src/wolnelektury/templates/admin/catalogue/book/change_list.html new file mode 100644 index 000000000..9f1b8cbf4 --- /dev/null +++ b/src/wolnelektury/templates/admin/catalogue/book/change_list.html @@ -0,0 +1,10 @@ +{% extends "admin/change_list.html" %} +{% load i18n %} + +{% block content %} +
                            + {% csrf_token %} +

                            +
                            + {{ block.super }} +{% endblock content %} diff --git a/src/wolnelektury/templates/annoy.html b/src/wolnelektury/templates/annoy.html new file mode 100755 index 000000000..890b62d91 --- /dev/null +++ b/src/wolnelektury/templates/annoy.html @@ -0,0 +1,18 @@ +{% load static %} +1% +
                            + + Logo akcji 1% +

                            Droga użytkowniczko, drogi użytkowniku!

                            +

                            Czy wiesz, że biblioteka internetowa Wolne Lektury to jeden z projektów + fundacji Nowoczesna Polska – + organizacji pożytku publicznego działającej na rzecz wolności korzystania + z dóbr kultury? Wesprzyj nasze działania, przeznaczając na nie 1% swojego podatku. + Możesz to zrobić, wpisując w zeznaniu podatkowym numer + KRS 0000070056.

                            + +

                            Dowiedz się więcej

                            + + x +
                            +
                            diff --git a/src/wolnelektury/templates/auth/login.html b/src/wolnelektury/templates/auth/login.html new file mode 100644 index 000000000..756b8ad31 --- /dev/null +++ b/src/wolnelektury/templates/auth/login.html @@ -0,0 +1,26 @@ +{% load i18n %} +{% load ssi_csrf_token from ssify %} + +

                            {{ title }}

                            + +
                            +{% ssi_csrf_token %} +
                              +
                              + {{ form.as_ul }} +
                            1. {% trans "Forgot Password?" %}
                            2. +
                            3. +
                            +
                            + +

                            {% trans "Sign in using:" %}

                            + +
                              +{% include "socialaccount/snippets/provider_list.html" %} +
                            + +{% include "socialaccount/snippets/login_extra.html" %} + +{% block extra %} +{% endblock %} diff --git a/src/wolnelektury/templates/auth/login_register.html b/src/wolnelektury/templates/auth/login_register.html new file mode 100755 index 000000000..80d3d232a --- /dev/null +++ b/src/wolnelektury/templates/auth/login_register.html @@ -0,0 +1,24 @@ +{% extends "auth/login.html" %} +{% load i18n %} +{% load honeypot %} +{% load ssi_csrf_token from ssify %} + +{% block extra %} + +{{ block.super }} + +

                            {% trans "or register" %}:

                            + +
                            +{% ssi_csrf_token %} +{% render_honeypot_field %} +
                              +
                              + {{ register_form.as_ul }} +
                            1. +
                            +
                            + + +{% endblock %} diff --git a/src/wolnelektury/templates/auth/register.html b/src/wolnelektury/templates/auth/register.html new file mode 100644 index 000000000..9d2c28363 --- /dev/null +++ b/src/wolnelektury/templates/auth/register.html @@ -0,0 +1,15 @@ +{% extends "ajaxable/form.html" %} +{% load i18n %} + + +{% block extra %} + +

                            {% trans "Sign in using:" %}

                            + +
                              +{% include "socialaccount/snippets/provider_list.html" %} +
                            + +{% include "socialaccount/snippets/login_extra.html" %} + +{% endblock %} diff --git a/src/wolnelektury/templates/base.html b/src/wolnelektury/templates/base.html new file mode 100644 index 000000000..fac93191c --- /dev/null +++ b/src/wolnelektury/templates/base.html @@ -0,0 +1,4 @@ +{% extends "superbase.html" %} + + +{% block ogtitle %}{% block titleextra %}{% endblock %}{% endblock %} diff --git a/src/wolnelektury/templates/info/join_us.html b/src/wolnelektury/templates/info/join_us.html new file mode 100644 index 000000000..50479e120 --- /dev/null +++ b/src/wolnelektury/templates/info/join_us.html @@ -0,0 +1,22 @@ +{% load i18n %} +{% load reporting_stats %} + +{% count_books book_count %} +

                            +{% blocktrans count book_count as c %} +We have {{c}} work published in Wolne Lektury! +Help us expand the library and set new readings free by +making a donation +or transferring 1% of your income tax. +{% plural %} +We have {{c}} works published in Wolne Lektury! +Help us expand the library and set new readings free by +making a donation +or transferring 1% of your income tax. +{% endblocktrans %} +{% comment %}{% trans "More..." %}{% endcomment %}

                            + +

                            {% blocktrans %}Become an editor of Wolne Lektury! Find out if +we're currently working on a reading you're looking for and prepare +a publication by yourself by logging into the Editorial Platform.{% endblocktrans %} +{% trans "More..." %}

                            diff --git a/src/wolnelektury/templates/latest_blog_posts.html b/src/wolnelektury/templates/latest_blog_posts.html new file mode 100644 index 000000000..24d486ef1 --- /dev/null +++ b/src/wolnelektury/templates/latest_blog_posts.html @@ -0,0 +1,9 @@ +{% spaceless %} + +
                              +{% for post in posts %} +
                            1. {{ post.title }}
                            2. +{% endfor %} +
                            + +{% endspaceless %} \ No newline at end of file diff --git a/src/wolnelektury/templates/main_page.html b/src/wolnelektury/templates/main_page.html new file mode 100755 index 000000000..f1450cbd6 --- /dev/null +++ b/src/wolnelektury/templates/main_page.html @@ -0,0 +1,88 @@ +{% extends "base.html" %} +{% load static from staticfiles %} +{% load i18n catalogue_tags infopages_tags social_tags %} +{% load ssi_include from ssify %} + + +{% block title %}{% trans "Wolne Lektury internet library" %}{% endblock %} +{% block ogtitle %}{% trans "Wolne Lektury internet library" %}{% endblock %} + +{% block body %}{% spaceless %} + + {% choose_cite as cite_pk %} + {{ cite_pk.if }} + {% ssi_include 'social_cite_main' pk=cite_pk %} + {{ cite_pk.endif }} + + + +
                            +

                            {% trans "What's new?" %}

                            +
                            + {% ssi_include 'chunk' key='promo' %} +
                            +
                            + + +
                            +

                            {% trans "Recent publications" %}

                            + {% for book in last_published %} + {% ssi_include 'catalogue_book_mini' pk=book.pk %} + {% endfor %} +
                            + +
                            + +
                            +

                            {% trans "News" %}

                            + {% ssi_include 'latest_blog_posts' %} +
                            + + +
                            +

                            {% trans "Utilities" %}

                            + + +
                            + + +
                            +

                            {% trans "Information" %}

                            + + + +
                            + + +{% endspaceless %}{% endblock %} + + +{% block add_footer %}{% spaceless %} +{{ cite_pk.if }} +

                            {% trans "Image used:" %} + {% ssi_include 'social_cite_info' pk=cite_pk %} +

                            +{{ cite_pk.endif }} +{% endspaceless %}{% endblock %} diff --git a/src/wolnelektury/templates/openid/login.html b/src/wolnelektury/templates/openid/login.html new file mode 100644 index 000000000..41eafa479 --- /dev/null +++ b/src/wolnelektury/templates/openid/login.html @@ -0,0 +1,33 @@ +{% extends "site_base.html" %} + +{% load i18n %} +{% load uni_form_tags %} + +{% block head_title %}{% trans "OpenID Sign In" %}{% endblock %} + +{% block body %} + +

                            {% trans 'OpenID Sign In' %}

                            +
                            + + + +
                            +{% endblock %} diff --git a/src/wolnelektury/templates/pagination/pagination.html b/src/wolnelektury/templates/pagination/pagination.html new file mode 100644 index 000000000..432cf6954 --- /dev/null +++ b/src/wolnelektury/templates/pagination/pagination.html @@ -0,0 +1,26 @@ +{% load i18n %} +{% if is_paginated %} + +{% endif %} diff --git a/src/wolnelektury/templates/piston/authorize_token.html b/src/wolnelektury/templates/piston/authorize_token.html new file mode 100755 index 000000000..87450a20c --- /dev/null +++ b/src/wolnelektury/templates/piston/authorize_token.html @@ -0,0 +1,18 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block titleextra %}{% trans "Authorize access to Wolne Lektury" %}{% endblock %} + +{% block body %} +

                            {% trans "Authorize access to Wolne Lektury" %}

                            + +
                            +

                            {% blocktrans %}Confirm to authorize access to Wolne Lektury as user {{ user}}.{% endblocktrans %}

                            + +
                            + {% csrf_token %} + {{ form.as_p }} + +
                            +
                            +{% endblock %} diff --git a/src/wolnelektury/templates/publish_plan.html b/src/wolnelektury/templates/publish_plan.html new file mode 100755 index 000000000..c4c3d6e6a --- /dev/null +++ b/src/wolnelektury/templates/publish_plan.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block titleextra %}{% trans "Publishing plan" %}{% endblock titleextra %} + + +{% block body %} +

                            {% trans "Publishing plan" %}

                            + + + +{% endblock %} diff --git a/src/wolnelektury/templates/site_base.html b/src/wolnelektury/templates/site_base.html new file mode 100644 index 000000000..b0c2ca524 --- /dev/null +++ b/src/wolnelektury/templates/site_base.html @@ -0,0 +1,5 @@ +{% extends "base.html" %} +{# This is for allauth templates. #} + +{% block bodyid %}auth-page{% endblock %} +{% block titleextra %}{% block head_title %}{% endblock %}{% endblock %} diff --git a/src/wolnelektury/templates/socialaccount/connections.html b/src/wolnelektury/templates/socialaccount/connections.html new file mode 100644 index 000000000..3df16a8c5 --- /dev/null +++ b/src/wolnelektury/templates/socialaccount/connections.html @@ -0,0 +1,57 @@ +{% extends "site_base.html" %} + +{% load i18n %} + +{% block head_title %}{% trans "Account Connections" %}{% endblock %} + +{% block body %} +

                            {% trans "Account Connections" %}

                            + +
                            +{% if form.accounts %} +

                            {% blocktrans %}You can sign in to your account using any of the following third party accounts:{% endblocktrans %}

                            + + +
                            +{% csrf_token %} + +
                            +{% if form.non_field_errors %} +
                            {{form.non_field_errors}}
                            +{% endif %} + +{% for base_account in form.accounts %} +{% with base_account.get_provider_account as account %} +
                            + +
                            +{% endwith %} +{% endfor %} + +
                            + +
                            + +
                            + +
                            + +{% else %} +

                            {% trans "You currently have no social network accounts connected to this account." %}

                            +{% endif %} + +

                            {% trans 'Add a 3rd Party Account' %}

                            + +
                              +{% include "socialaccount/snippets/provider_list.html" with process="connect" %} +
                            + +{% include "socialaccount/snippets/login_extra.html" %} +
                            +{% endblock %} + + diff --git a/src/wolnelektury/templates/socialaccount/login_cancelled.html b/src/wolnelektury/templates/socialaccount/login_cancelled.html new file mode 100644 index 000000000..7e29b65c7 --- /dev/null +++ b/src/wolnelektury/templates/socialaccount/login_cancelled.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} + +{% load i18n %} + +{% block head_title %}{% trans "Login Cancelled" %}{% endblock %} + +{% block body %} + +

                            {% trans "Login Cancelled" %}

                            + +
                            +{% url 'socialaccount_login' as login_url %} +{{ login_url }} + +

                            {% blocktrans %}You decided to cancel logging in to our site using one of your exisiting accounts. If this was a mistake, please proceed to sign in.{% endblocktrans %}

                            +
                            + +{% endblock %} + diff --git a/src/wolnelektury/templates/socialaccount/snippets/login_extra.html b/src/wolnelektury/templates/socialaccount/snippets/login_extra.html new file mode 100644 index 000000000..ae067926b --- /dev/null +++ b/src/wolnelektury/templates/socialaccount/snippets/login_extra.html @@ -0,0 +1 @@ +{# This file intentionally left empty to disable loading FB JS. #} diff --git a/src/wolnelektury/templates/socialaccount/snippets/provider_list.html b/src/wolnelektury/templates/socialaccount/snippets/provider_list.html new file mode 100644 index 000000000..80f9c2f2d --- /dev/null +++ b/src/wolnelektury/templates/socialaccount/snippets/provider_list.html @@ -0,0 +1,22 @@ +{% load socialaccount %} +{% load static from staticfiles %} + +{% for provider in socialaccount.providers %} + {% if provider.id == "openid" %} + {% for brand in provider.get_brands %} +
                          • + {{ brand.name }} +
                          • + {% endfor %} + {% endif %} +
                          • + {{ provider.name }} +
                          • +{% endfor %} diff --git a/src/wolnelektury/templates/superbase.html b/src/wolnelektury/templates/superbase.html new file mode 100644 index 000000000..08d60a32a --- /dev/null +++ b/src/wolnelektury/templates/superbase.html @@ -0,0 +1,153 @@ + +{% spaceless %} + + {% load pipeline i18n %} + {% load static from staticfiles %} + {% load catalogue_tags funding_tags reporting_stats %} + {% load piwik_tags %} + {% load ssi_include ssi_csrf_token from ssify %} + {% load user_username user_is_staff from common_tags %} + + + + + + + + + + {% block ogextra %}{% endblock %} + + {% block title %}{% trans "Wolne Lektury" %} :: {% block titleextra %}{% endblock %}{% endblock %} + + + {% stylesheet "main" %} + {% block extrahead %} + {% endblock %} + + + + {% block bodycontent %} + + {% if not funding_no_show_current %} + {% current_offer as current_offer %} + {{ current_offer.if }} + {% ssi_include 'funding_top_bar' pk=current_offer %} + {{ current_offer.endif }} + {% endif %} + +
                            +
                            + + +

                            + {% user_username as user_username %} + {% user_is_staff as user_is_staff %} + {{ user_username.if }}{% trans "Welcome" %}, + + {{ user_username }} + + + {% trans "Password" %}
                            + {% trans "E-mail" %}
                            + {% trans "Social accounts" %}
                            +
                            +
                            | {% trans "My shelf" %} + {{ user_username.endif }} + {{ user_is_staff.if }} | {% trans "Administration" %} + {{ user_is_staff.endif }} + {{ user_username.if }} | {% trans "Logout" %} + {{ user_username.else }} + {% trans "Sign in" %} / {% trans "Register" %} + {{ user_username.endif }} +

                            + +

                            + {% url 'book_list' as b %} + {% url 'infopage' 'prawa' as r %} + {% count_books book_count %} + {% blocktrans count book_count as c %} + {{c}} free reading you have right to + {% plural %} + {{c}} free readings you have right to + {% endblocktrans %} +

                            + +
                            +
                            + + {{search_form.q}} +
                            +
                            + +
                            +
                            + + + + + +
                            + {% block body %} + {% endblock %} +
                            +
                            + + + + + + + {# template #} +
                            + +
                            +

                            * {% trans "Loading" %}

                            +
                            +
                            + + + {% endblock bodycontent %} + + + + + {% javascript "base" %} + + {% tracking_code %} + + {% block extrabody %} + {% endblock %} + + + + +{% endspaceless %} diff --git a/src/wolnelektury/templates/user.html b/src/wolnelektury/templates/user.html new file mode 100644 index 000000000..0ffdd62a9 --- /dev/null +++ b/src/wolnelektury/templates/user.html @@ -0,0 +1,17 @@ +{% extends "base.html" %} +{% load i18n %} + + +{% block titleextra %}{% trans "User" %}{% endblock %} + +{% block body %} + +

                            {% trans "User" %}

                            + + + +{% endblock %} diff --git a/src/wolnelektury/templates/widget.html b/src/wolnelektury/templates/widget.html new file mode 100644 index 000000000..444f466ab --- /dev/null +++ b/src/wolnelektury/templates/widget.html @@ -0,0 +1,37 @@ +{% spaceless %} + +{% load static from staticfiles %} +{% load pipeline %} + + + + + + + Widget Wolnych Lektur + {% stylesheet 'widget' %} + + +
                            + + + + + +
                            + + +
                            + +
                            + +{% javascript 'widget' %} + + + + +{% endspaceless %} diff --git a/src/wolnelektury/templatetags/__init__.py b/src/wolnelektury/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/wolnelektury/templatetags/common_tags.py b/src/wolnelektury/templatetags/common_tags.py new file mode 100644 index 000000000..ab08a3ee6 --- /dev/null +++ b/src/wolnelektury/templatetags/common_tags.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import template +from ssify import ssi_variable +from ssify.utils import ssi_vary_on_cookie + +register = template.Library() + + +@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) +def user_username(request): + return request.user.username + + +@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) +def user_is_staff(request): + return request.user.is_staff diff --git a/src/wolnelektury/templatetags/switch_tag.py b/src/wolnelektury/templatetags/switch_tag.py new file mode 100644 index 000000000..72476bef0 --- /dev/null +++ b/src/wolnelektury/templatetags/switch_tag.py @@ -0,0 +1,135 @@ +# Source: http://djangosnippets.org/snippets/967/ +# Author: adurdin +# Posted: August 13, 2008 +# +# +# We can use it based on djangosnippets Terms of Service: +# (http://djangosnippets.org/about/tos/) +# +# 2. That you grant any third party who sees the code you post +# a royalty-free, non-exclusive license to copy and distribute that code +# and to make and distribute derivative works based on that code. You may +# include license terms in snippets you post, if you wish to use +# a particular license (such as the BSD license or GNU GPL), but that +# license must permit royalty-free copying, distribution and modification +# of the code to which it is applied. + +from django import template +from django.template import Library, Node, VariableDoesNotExist + +register = Library() + + +@register.tag(name="switch") +def do_switch(parser, token): + """ + The ``{% switch %}`` tag compares a variable against one or more values in + ``{% case %}`` tags, and outputs the contents of the matching block. An + optional ``{% else %}`` tag sets off the default output if no matches + could be found:: + + {% switch result_count %} + {% case 0 %} + There are no search results. + {% case 1 %} + There is one search result. + {% else %} + Jackpot! Your search found {{ result_count }} results. + {% endswitch %} + + Each ``{% case %}`` tag can take multiple values to compare the variable + against:: + + {% switch username %} + {% case "Jim" "Bob" "Joe" %} + Me old mate {{ username }}! How ya doin? + {% else %} + Hello {{ username }} + {% endswitch %} + """ + bits = token.contents.split() + tag_name = bits[0] + if len(bits) != 2: + raise template.TemplateSyntaxError("'%s' tag requires one argument" % tag_name) + variable = parser.compile_filter(bits[1]) + + class BlockTagList(object): + # This is a bit of a hack, as it embeds knowledge of the behaviour + # of Parser.parse() relating to the "parse_until" argument. + def __init__(self, *names): + self.names = set(names) + def __contains__(self, token_contents): + name = token_contents.split()[0] + return name in self.names + + # Skip over everything before the first {% case %} tag + parser.parse(BlockTagList('case', 'endswitch')) + + cases = [] + token = parser.next_token() + got_case = False + got_else = False + while token.contents != 'endswitch': + nodelist = parser.parse(BlockTagList('case', 'else', 'endswitch')) + + if got_else: + raise template.TemplateSyntaxError("'else' must be last tag in '%s'." % tag_name) + + contents = token.contents.split() + token_name, token_args = contents[0], contents[1:] + + if token_name == 'case': + tests = map(parser.compile_filter, token_args) + case = (tests, nodelist) + got_case = True + else: + # The {% else %} tag + case = (None, nodelist) + got_else = True + cases.append(case) + token = parser.next_token() + + if not got_case: + raise template.TemplateSyntaxError("'%s' must have at least one 'case'." % tag_name) + + return SwitchNode(variable, cases) + +class SwitchNode(Node): + def __init__(self, variable, cases): + self.variable = variable + self.cases = cases + + def __repr__(self): + return "" + + def __iter__(self): + for tests, nodelist in self.cases: + for node in nodelist: + yield node + + def get_nodes_by_type(self, nodetype): + nodes = [] + if isinstance(self, nodetype): + nodes.append(self) + for tests, nodelist in self.cases: + nodes.extend(nodelist.get_nodes_by_type(nodetype)) + return nodes + + def render(self, context): + try: + value_missing = False + value = self.variable.resolve(context, True) + except VariableDoesNotExist: + no_value = True + value_missing = None + + for tests, nodelist in self.cases: + if tests is None: + return nodelist.render(context) + elif not value_missing: + for test in tests: + test_value = test.resolve(context, True) + if value == test_value: + return nodelist.render(context) + else: + return "" diff --git a/src/wolnelektury/urls.py b/src/wolnelektury/urls.py new file mode 100644 index 000000000..58e45ddb2 --- /dev/null +++ b/src/wolnelektury/urls.py @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import include, patterns, url +from django.conf import settings +from django.contrib import admin +from django.views.generic import RedirectView +import wolnelektury.views + + +urlpatterns = patterns('wolnelektury.views', + url(r'^$', 'main_page', name='main_page'), + url(r'^planowane/$', 'publish_plan', name='publish_plan'), + url(r'^widget\.html$', 'widget', name='widget'), + + url(r'^zegar/$', 'clock', name='clock'), + + # Authentication + url(r'^uzytkownik/$', 'user_settings', name='user_settings'), + url(r'^uzytkownik/login/$', wolnelektury.views.LoginFormView(), name='login'), + url(r'^uzytkownik/signup/$', wolnelektury.views.RegisterFormView(), name='register'), + url(r'^uzytkownik/logout/$', 'logout_then_redirect', name='logout'), + url(r'^uzytkownik/zaloguj-utworz/$', wolnelektury.views.LoginRegisterFormView(), name='login_register'), + + # Includes. + url(r'^latests_blog_posts.html$', + wolnelektury.views.latest_blog_posts, + name='latest_blog_posts'), +) + +urlpatterns += patterns('', + url(r'^katalog/', include('catalogue.urls')), + url(r'^opds/', include('opds.urls')), + url(r'^sugestia/', include('suggest.urls')), + url(r'^lesmianator/', include('lesmianator.urls')), + url(r'^przypisy/', include('dictionary.urls')), + url(r'^raporty/', include('reporting.urls')), + url(r'^info/', include('infopages.urls')), + url(r'^ludzie/', include('social.urls')), + url(r'^uzytkownik/', include('allauth.urls')), + url(r'^czekaj/', include('waiter.urls')), + url(r'^wesprzyj/', include('funding.urls')), + url(r'^ankieta/', include('polls.urls')), + url(r'^biblioteki/', include('libraries.urls')), + url(r'^chunks/', include('chunks.urls')), + url(r'^sponsors/', include('sponsors.urls')), + + # Admin panel + url(r'^admin/catalogue/book/import$', 'catalogue.views.import_book', name='import_book'), + url(r'^admin/catalogue/picture/import$', 'picture.views.import_picture', name='import_picture'), + url(r'^admin/doc/', include('django.contrib.admindocs.urls')), + url(r'^admin/', include(admin.site.urls)), + + # API + (r'^api/', include('api.urls')), + # OAIPMH + (r'^oaipmh/', include('oai.urls')), + + url(r'^szukaj/', include('search.urls')), + + # Static files + url(r'^%s(?P.*)$' % settings.MEDIA_URL[1:], 'django.views.static.serve', + {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}), + url(r'^%s(?P.*)$' % settings.STATIC_URL[1:], 'django.views.static.serve', + {'document_root': settings.STATIC_ROOT, 'show_indexes': True}), + url(r'^i18n/', include('django.conf.urls.i18n')), +) + +urlpatterns += patterns('', + # old static pages - redirected + url(r'^1procent/$', RedirectView.as_view( + url='http://nowoczesnapolska.org.pl/wesprzyj_nas/', permanent=True)), + url(r'^epub/$', RedirectView.as_view( + url='/katalog/lektury/', permanent=False)), + url(r'^mozesz-nam-pomoc/$', RedirectView.as_view( + url='/info/mozesz-nam-pomoc', permanent=True)), + url(r'^o-projekcie/$', RedirectView.as_view( + url='/info/o-projekcie', permanent=True)), + url(r'^widget/$', RedirectView.as_view( + url='/info/widget', permanent=True)), + url(r'^wolontariat/$', RedirectView.as_view( + url='/info/mozesz-nam-pomoc/', permanent=False)), +) diff --git a/src/wolnelektury/utils.py b/src/wolnelektury/utils.py new file mode 100644 index 000000000..0c256e5df --- /dev/null +++ b/src/wolnelektury/utils.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import pytz +from django.utils import timezone +from django.conf import settings + +tz = pytz.timezone(settings.TIME_ZONE) + +def localtime_to_utc(localtime): + return timezone.utc.normalize( + tz.localize(localtime) + ) + +def utc_for_js(dt): + return dt.strftime('%Y/%m/%d %H:%M:%S UTC') diff --git a/src/wolnelektury/views.py b/src/wolnelektury/views.py new file mode 100644 index 000000000..51371735a --- /dev/null +++ b/src/wolnelektury/views.py @@ -0,0 +1,152 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from datetime import date, datetime +import feedparser + +from django.conf import settings +from django.contrib import auth +from django.contrib.auth.decorators import login_required +from django.contrib.auth.forms import UserCreationForm, AuthenticationForm +from django.core.cache import cache +from django.http import HttpResponse, HttpResponseRedirect +from django.shortcuts import render +from django.utils.http import urlquote_plus +from django.utils.translation import ugettext_lazy as _ +from django.views.decorators.cache import never_cache + +from ajaxable.utils import AjaxableFormView +from ajaxable.utils import placeholdized +from catalogue.models import Book +from ssify import ssi_included + + +def main_page(request): + last_published = Book.objects.exclude(cover_thumb='').filter(parent=None).order_by('-created_at')[:4] + + return render(request, "main_page.html", { + 'last_published': last_published, + }) + + +class LoginFormView(AjaxableFormView): + form_class = AuthenticationForm + template = "auth/login.html" + placeholdize = True + title = _('Sign in') + submit = _('Sign in') + ajax_redirect = True + + def __call__(self, request): + if request.user.is_authenticated(): + return self.redirect_or_refresh(request, '/', + message=_('Already logged in as user %(user)s', ) % + {'user': request.user.username}) + return super(LoginFormView, self).__call__(request) + + def success(self, form, request): + auth.login(request, form.get_user()) + + +class RegisterFormView(AjaxableFormView): + form_class = UserCreationForm + template = "auth/register.html" + placeholdize = True + title = _('Register') + submit = _('Register') + ajax_redirect = True + form_prefix = 'register' + honeypot = True + + def __call__(self, request): + if request.user.is_authenticated(): + return self.redirect_or_refresh(request, '/', + message=_('Already logged in as user %(user)s', ) % + {'user': request.user.username}) + return super(RegisterFormView, self).__call__(request) + + def success(self, form, request): + form.save() + user = auth.authenticate( + username=form.cleaned_data['username'], + password=form.cleaned_data['password1'] + ) + auth.login(request, user) + + +class LoginRegisterFormView(LoginFormView): + template = 'auth/login_register.html' + title = _('You have to be logged in to continue') + + def extra_context(self, request, obj): + return { + "register_form": placeholdized(UserCreationForm(prefix='register')), + "register_submit": _('Register'), + } + + +@never_cache +def logout_then_redirect(request): + auth.logout(request) + return HttpResponseRedirect(urlquote_plus(request.GET.get('next', '/'), safe='/?=')) + + +@never_cache +def clock(request): + """ Provides server UTC time for jquery.countdown, + in a format suitable for Date.parse() + """ + return HttpResponse(datetime.utcnow().strftime('%Y/%m/%d %H:%M:%S UTC')) + + +def publish_plan(request): + cache_key = "publish_plan" + plan = cache.get(cache_key) + + if plan is None: + plan = [] + try: + feed = feedparser.parse(settings.PUBLISH_PLAN_FEED) + except: + pass + else: + for i in range(len(feed['entries'])): + plan.append({ + 'title': feed['entries'][i].title, + 'link': feed['entries'][i].link, + }) + cache.set(cache_key, plan, 1800) + + return render(request, "publish_plan.html", {'plan': plan}) + + +@login_required +def user_settings(request): + return render(request, "user.html") + + +@ssi_included(use_lang=False, timeout=1800) +def latest_blog_posts(request, feed_url=None, posts_to_show=5): + if feed_url is None: + feed_url = settings.LATEST_BLOG_POSTS + try: + feed = feedparser.parse(str(feed_url)) + posts = [] + for i in range(posts_to_show): + pub_date = feed['entries'][i].published_parsed + published = date(pub_date[0], pub_date[1], pub_date[2]) + posts.append({ + 'title': feed['entries'][i].title, + 'summary': feed['entries'][i].summary, + 'link': feed['entries'][i].link, + 'date': published, + }) + except: + posts = [] + return render(request, 'latest_blog_posts.html', {'posts': posts}) + + +@ssi_included(use_lang=False) +def widget(request): + return render(request, 'widget.html') diff --git a/src/wolnelektury/wsgi.py b/src/wolnelektury/wsgi.py new file mode 100644 index 000000000..01a8e1747 --- /dev/null +++ b/src/wolnelektury/wsgi.py @@ -0,0 +1,18 @@ +import os +import os.path +import sys + +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + +# Add apps and lib directories to PYTHONPATH +sys.path = [ + os.path.join(ROOT, '../lib/librarian'), +] + sys.path + + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "wolnelektury.settings") + +# This application object is used by the development server +# as well as any WSGI server configured to use this file. +from django.core.wsgi import get_wsgi_application +application = get_wsgi_application() diff --git a/wolnelektury/__init__.py b/wolnelektury/__init__.py deleted file mode 100644 index cf2e85f6d..000000000 --- a/wolnelektury/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .celery import app as celery_app diff --git a/wolnelektury/celery.py b/wolnelektury/celery.py deleted file mode 100644 index ae5ce20ce..000000000 --- a/wolnelektury/celery.py +++ /dev/null @@ -1,21 +0,0 @@ -from __future__ import absolute_import - -import os -import sys - -ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -sys.path = [ - os.path.join(ROOT, 'apps'), - os.path.join(ROOT, 'lib'), - os.path.join(ROOT, 'lib/librarian'), -] + sys.path - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'wolnelektury.settings') - -from celery import Celery -from django.conf import settings - -app = Celery('wolnelektury') - -app.config_from_object('django.conf:settings') -app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) diff --git a/wolnelektury/locale-contrib/de/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/de/LC_MESSAGES/django.mo deleted file mode 100644 index 9dfa5d3ef..000000000 Binary files a/wolnelektury/locale-contrib/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/de/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/de/LC_MESSAGES/django.po deleted file mode 100644 index 5c198ea2e..000000000 --- a/wolnelektury/locale-contrib/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,668 +0,0 @@ -# German translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-08-14 17:50+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: de \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "Einspeichern" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -#, fuzzy -msgid "E-mail address" -msgstr "E-Mail Adresse" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "E-Mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "Username" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "Dieses Account ist zurzeit inaktiv." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "Die E-Mail-Adresse und/oder das Password sind nicht korrekt." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "Der Username ist nicht korrekt." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -#, fuzzy -msgid "The login and/or password you specified are not correct." -msgstr "Der Username ist nicht korrekt." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "E-Mail (fakultativ)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -#, fuzzy -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "Usernamen können nur aus Buchstaben, Ziffern" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "Dieser Username ist schon besetzt. Wählen Sie bitte einen anderen." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -#, fuzzy -msgid "A user is already registered with this e-mail address." -msgstr "Ein User ist schon mit dieser E-Mail-Adresse verbunden." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "Password (nochmals)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "Sie müssen dasselbe Password jedesmal eintippen." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -#, fuzzy -msgid "This e-mail address is already associated with this account." -msgstr "Die E-Mail ist schon mit diesem Account verbunden." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -#, fuzzy -msgid "This e-mail address is already associated with another account." -msgstr "Diese E-Mail-Adresse ist schon mit einem anderen Account verbunden." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "Aktuelles Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "Neues Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "Neues Password (nochmals)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "Tippe Ihr Password ein." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "Diese E-Mail-Adresse ist noch mit keinem anderen Account verbunden." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -#, fuzzy -msgid "email address" -msgstr "E-Mail Adresse" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -#, fuzzy -msgid "email addresses" -msgstr "E-Mail Adresse" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -#, fuzzy -msgid "email confirmation" -msgstr "E-Mail-Adresse-Bestätigung" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -#, fuzzy -msgid "email confirmations" -msgstr "E-Mail-Adresse-Bestätigung" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "Erfolgreich als %(user)s eingeloggt." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "BestBestätigungsmail an %(email)s gesendet" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, fuzzy, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "Die E-Mail-Adresse %(email)s gelöscht." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "Die E-Mail-Adresse %(email)s gelöscht." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -#, fuzzy -msgid "Your primary e-mail address must be verified" -msgstr "Ihre E-Mail-Adresse wurd erfolgreich verifiziert." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "Die Haupt-Email-Adresse eingestellt" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "Password erfolgreich geändert." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "Password erfolgreich erstellt." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "Sie haben sich ausgeloggt." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -#, fuzzy -msgid "Your account has no password set up." -msgstr "Ihr lokales Account hat keine Schlüsselworteinstellung" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -#, fuzzy -msgid "Your account has no verified e-mail address." -msgstr "Ihr lokales Account hat keine verfizierte Email-Adresse" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -#, fuzzy -msgid "The social account has been connected" -msgstr "Das Social-Account wurde abgeschaltet." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "Das Social-Account wurde abgeschaltet." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "Falsche Antwort beim Erhalten des Fragentokens von \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "Falsche Antwort beim Erhalten des Zugangstokens von \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "Keine Fragentokens für \"%s\" gespeichert." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "Keine Zugangstokens für \"%s\" gespeichert." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "Kein Zugagng zu privaten Angaben bei \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "Account" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "E-Mail Adresse" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -#, fuzzy -msgid "The following e-mail addresses are associated with your account:" -msgstr "Die folgenden E-Mail-Adressen wurden mit Ihrem Account verbunden:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "Verifiziert" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "Unverifiziert" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "Primär" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "Stelle als primär ein" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "Verifizierung wiedersenden" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "Entfernen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "Warnung:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" -"Sie haben jetzt keine Email-Adresse eingestellt. Sie sollen eine Email-" -"Adresse einstellen, um Ihr Schlüsselwort zu resetieren, um wichtige " -"Informationen zu bekommen." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "E-Mail-Adress eintippen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "Add E-Mail eintippen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "Wollen Sie wirklich die angegebene E-Mail-Adresse löschen?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -#, fuzzy -msgid "Confirm E-mail Address" -msgstr "Die Haupt-Email-Adresse eingestellt" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, fuzzy, python-format -msgid "" -"Please confirm that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Sie haben bestätigt, dass %(email)s ist " -"mit dem User '%(user)s' verbunden." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, fuzzy, python-format -msgid "" -"You have confirmed that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Sie haben bestätigt, dass %(email)s ist " -"mit dem User '%(user)s' verbunden." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "Anmelden" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, fuzzy, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, sign up \n" -"for a %(site_name)s account and sign in below:" -msgstr "" -"Loggen Sie sich bitte ein mit einem\n" -"von Accounts einer dritten Partei. Oder, registrieren Sie for a %(site_name)s den " -"Account und loggen Sie sich ein\n" -"hierunter:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "oder" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "Password vergessen?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "Ausgeloggt" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "Password ändern" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "Password löschen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "" -"Sie können Ihr Schlüsselwort löschen, weil Sie jetzt durch OpenID " -"eingeloggt sind." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "Password löschen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "Password gelöscht" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "Password wurde gelöscht." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "Password neu erstellen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" -"Password vergessen? Tippe unten Ihre E-Mail-Adresse ein, dann senden wir " -"Ihnen eine E-Mail, um das Password zu ändern." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "Password neu erstellen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -#, fuzzy -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" -"Wir haben Ihnen eine Email geschickt. Falls Sie sie nicht innerhalb von " -"einigen Minuten erhalten, wenden Sie sich bitte an uns %(CONTACT_EMAIL)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "Falscher Token" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a new password " -"reset." -msgstr "" -"Der Passwort-Reset-Link war falsch, da er schon möglicherweise benutzt " -"worden war. Bitten Sie um ein Reset " -"eines neuen Passwortes." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "Password ändern" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "Password wurde geändert" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "Password erstellen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "Registrieren" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "Anmelden" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please sign " -"in." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "Verifizieren Sie Ihre E-Mail-Adresse" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to %(email)s for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"Note: you can still change " -"your e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" -"Sie bekommen diese Email an %(site_domain)s, weil Sie or jemand anderer " -"Ihr Schlüsselwort erhalten will. Sie können diese Nachricht ignorieren, " -"wenn Sie um Neustellung des Schlüssekworts nicht gebeten haben. Klicken " -"Sie an das Link unten, um Ihr Schlüsselwort neu zu stellen.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"Falls Sie vergessen haben, ist Ihr Benutzername: %(username)s.\n" -"\n" -"Vielen dank, dass Sie unsere Webseite benutzt haben!\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "Password neu stellen E-Mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "Notiz" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "Sie sind schon als %(user_display)s eingeloggt." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "OpenID Registrieren" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "Inaktives Account" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "Dieses Account ist inaktiv." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "Social-Networt-Login Fehler" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -#, fuzzy -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "Ein Fehler ist eingetreten beim Einloggen mithilfe Social-Networt-Account." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Account-Beziehungen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "Sie können sich einloggen mittels eines von folgenden Accounts Dritter:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -#, fuzzy -msgid "You currently have no social network accounts connected to this account." -msgstr "Das Social-Network-Account wurde mit Ihrem Account verbunden." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "Fügen Sie ein fremdes Account hinzu." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "Login annulliert" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, fuzzy, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" -"Sie haben sich entschieden, das Einloggen in unsere Webseite mittels " -"eines von Ihren existierenden Accounts. Falls dies ein Fehler war, gehen " -"Sie auf sign in." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" -"Sie werden Ihr %(provider_name)s Account benutzen, um\n" -"sich in %(site_name)s einzuloggen. Der letzte Schritt ist, den folgenden " -"Formular auszufüllen" - diff --git a/wolnelektury/locale-contrib/django.pot b/wolnelektury/locale-contrib/django.pot deleted file mode 100644 index 01486b24b..000000000 --- a/wolnelektury/locale-contrib/django.pot +++ /dev/null @@ -1,611 +0,0 @@ -# Translations template for PROJECT. -# Copyright (C) 2013 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2013. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -msgid "E-mail address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -msgid "The login and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -msgid "A user is already registered with this e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -msgid "This e-mail address is already associated with this account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -msgid "This e-mail address is already associated with another account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -msgid "email address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -msgid "email addresses" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -msgid "email confirmation" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -msgid "email confirmations" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -msgid "Your primary e-mail address must be verified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -msgid "Your account has no password set up." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -msgid "Your account has no verified e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -msgid "The social account has been connected" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -msgid "The following e-mail addresses are associated with your account:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -msgid "Confirm E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, python-format -msgid "" -"Please confirm that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, python-format -msgid "" -"You have confirmed that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, sign up \n" -"for a %(site_name)s account and sign in below:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a new password " -"reset." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please sign " -"in." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to %(email)s for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"Note: you can still change " -"your e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -msgid "You currently have no social network accounts connected to this account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" - diff --git a/wolnelektury/locale-contrib/en/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/en/LC_MESSAGES/django.mo deleted file mode 100644 index 7a4cdebe4..000000000 Binary files a/wolnelektury/locale-contrib/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/en/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/en/LC_MESSAGES/django.po deleted file mode 100644 index f407f7ad8..000000000 --- a/wolnelektury/locale-contrib/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,671 +0,0 @@ -# English translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-08-14 17:50+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: en \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "Remember Me" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -#, fuzzy -msgid "E-mail address" -msgstr "E-mail Addresses" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "E-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "Username" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "This account is currently inactive." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "The e-mail address and/or password you specified are not correct." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "The username and/or password you specified are not correct." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -#, fuzzy -msgid "The login and/or password you specified are not correct." -msgstr "The username and/or password you specified are not correct." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "E-mail (optional)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -#, fuzzy -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "Usernames can only contain letters, numbers and underscores." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "This username is already taken. Please choose another." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -#, fuzzy -msgid "A user is already registered with this e-mail address." -msgstr "A user is registered with this e-mail address." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "Password (again)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "You must type the same password each time." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -#, fuzzy -msgid "This e-mail address is already associated with this account." -msgstr "This e-mail address already associated with this account." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -#, fuzzy -msgid "This e-mail address is already associated with another account." -msgstr "This e-mail address already associated with another account." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "Current Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "New Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "New Password (again)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "Please type your current password." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "The e-mail address is not assigned to any user account" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -#, fuzzy -msgid "email address" -msgstr "E-mail Addresses" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -#, fuzzy -msgid "email addresses" -msgstr "E-mail Addresses" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -#, fuzzy -msgid "email confirmation" -msgstr "E-mail Address Confirmation" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -#, fuzzy -msgid "email confirmations" -msgstr "E-mail Address Confirmation" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "Successfully signed in as %(user)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "Confirmation e-mail sent to %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, fuzzy, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "Removed e-mail address %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "Removed e-mail address %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -#, fuzzy -msgid "Your primary e-mail address must be verified" -msgstr "Your e-mail address has already been verified" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "Primary e-mail address set" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "Password successfully changed." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "Password successfully set." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "You have signed out." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -#, fuzzy -msgid "Your account has no password set up." -msgstr "Your local account has no password setup." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -#, fuzzy -msgid "Your account has no verified e-mail address." -msgstr "Your local account has no verified e-mail address." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -#, fuzzy -msgid "The social account has been connected" -msgstr "The social account has been disconnected" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "The social account has been disconnected" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "Invalid response while obtaining request token from \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "Invalid response while obtaining access token from \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "No request token saved for \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "No access token saved for \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "No access to private resources at \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "Account" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "E-mail Addresses" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -#, fuzzy -msgid "The following e-mail addresses are associated with your account:" -msgstr "The following e-mail addresses are associated to your account:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "Verified" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "Unverified" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "Primary" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "Make Primary" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "Re-send Verification" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "Remove" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "Warning:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "Add E-mail Address" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "Add E-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "Do you really want to remove the selected e-mail address?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -#, fuzzy -msgid "Confirm E-mail Address" -msgstr "Primary e-mail address set" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, fuzzy, python-format -msgid "" -"Please confirm that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" -"You have confirmed that %(email)s is an " -"e-mail address for user '%(user)s'." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, fuzzy, python-format -msgid "" -"You have confirmed that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" -"You have confirmed that %(email)s is an " -"e-mail address for user '%(user)s'." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "Sign In" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, fuzzy, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, sign up \n" -"for a %(site_name)s account and sign in below:" -msgstr "" -"Please sign in with one\n" -"of your existing third party accounts. Or, sign up for a %(site_name)s account and sign " -"in\n" -"below:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "or" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "Forgot Password?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "Signed Out" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "Change Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "Delete Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "" -"You may delete your password since you are currently logged in using " -"OpenID." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "delete my password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "Password Deleted" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "Your password has been deleted." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "Password Reset" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "Reset My Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -#, fuzzy -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" -"We have sent you an e-mail. If you do not receive it within a few " -"minutes, contact us at %(CONTACT_EMAIL)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "Bad Token" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a new password " -"reset." -msgstr "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a new password " -"reset." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "change password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "Your password is now changed." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "Set Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "Signup" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "Sign Up" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please sign " -"in." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "Verify Your E-mail Address" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to %(email)s for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"Note: you can still change " -"your e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "Password Reset E-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "Note" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "you are already logged in as %(user_display)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "OpenID Sign In" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "Account Inactive" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "This account is inactive." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "Social Network Login Failure" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -#, fuzzy -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "" -"An error occured while attempting to login via your social network " -"account." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Account Connections" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"You can sign in to your account using any of the following third party " -"accounts:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -#, fuzzy -msgid "You currently have no social network accounts connected to this account." -msgstr "The social account has been connected to your existing account" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "Add a 3rd Party Account" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "Login Cancelled" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, fuzzy, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to sign in." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" - diff --git a/wolnelektury/locale-contrib/es/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/es/LC_MESSAGES/django.mo deleted file mode 100644 index a5ad327ba..000000000 Binary files a/wolnelektury/locale-contrib/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/es/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/es/LC_MESSAGES/django.po deleted file mode 100644 index bc180c5e3..000000000 --- a/wolnelektury/locale-contrib/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,674 +0,0 @@ -# Spanish translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-08-14 17:50+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: es \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "Contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "Recuérdame" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -#, fuzzy -msgid "E-mail address" -msgstr "Direcciones de correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "Correo elctrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "Nombre de usuario" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "Esta cuenta de usuario está actualmente inactiva." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "El correo electrónico y/o contraseña son incorrectos." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "El nombre de usuario y/o contraseña son incorrectos." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -#, fuzzy -msgid "The login and/or password you specified are not correct." -msgstr "El nombre de usuario y/o contraseña son incorrectos." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "Correo elctrónico (opcional)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -#, fuzzy -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "Nombre de usuario sólo puede consistir de letras, números y guiones bajos" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "El nombre de usuario está ocupado. Por favor, elija otro." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -#, fuzzy -msgid "A user is already registered with this e-mail address." -msgstr "Un usuario está registrado con esta direccin de correo electrónico." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "Contraseña (otra vez)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "Tiene que introducir cada vez la misma contraseña." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -#, fuzzy -msgid "This e-mail address is already associated with this account." -msgstr "Este correo electrónico ya ha sido asociado a esta cuenta de usuario." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -#, fuzzy -msgid "This e-mail address is already associated with another account." -msgstr "Este correo electrónico ya ha sido asociado a otra cuenta de usuario." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "Contraseña actual" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "Nueva contarseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "Nueva contarseña (otra vez)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "Introduzca su contraseña actual, por favor." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "Este correo electrónico no ha sido asignado a ninguna cuenta de usuario." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -#, fuzzy -msgid "email address" -msgstr "Direcciones de correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -#, fuzzy -msgid "email addresses" -msgstr "Direcciones de correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -#, fuzzy -msgid "email confirmation" -msgstr "Confirmación de la dirección de correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -#, fuzzy -msgid "email confirmations" -msgstr "Confirmación de la dirección de correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "Ha iniciado sesión como %(user)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "La confirmación ha sido enviada a %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, fuzzy, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "Dirección de correo electrónico eliminado %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "Dirección de correo electrónico eliminado %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -#, fuzzy -msgid "Your primary e-mail address must be verified" -msgstr "Su correo electrónico ha sido verificado" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "La dirección de correo electrónico principal establecida" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "Contraseña ha sido cambiada con éxito." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "Contraseña ha sido establecida con éxito." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "Ha cerrado sesión." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -#, fuzzy -msgid "Your account has no password set up." -msgstr "Su cuenta de usuario local todavía no tiene la contraseña establecida." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -#, fuzzy -msgid "Your account has no verified e-mail address." -msgstr "" -"Su cuenta de usuario local no dispone de direcciones de correo " -"electrónico verificadas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -#, fuzzy -msgid "The social account has been connected" -msgstr "La cuenta social ha sido desconectada" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "La cuenta social ha sido desconectada" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "Respuesta inválida al obtener request token de \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "Respuesta inválida al obtener access token de \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, fuzzy, python-format -msgid "No request token saved for \"%s\"." -msgstr "No hay request token guardado para \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, fuzzy, python-format -msgid "No access token saved for \"%s\"." -msgstr "No hay acces token guardado para \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "No hay acceso a recursos privados en \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "Cuenta de usuario" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "Direcciones de correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -#, fuzzy -msgid "The following e-mail addresses are associated with your account:" -msgstr "" -"A su cuenta de usuario están asociados los siguientes direcciones de " -"correo electrónico:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "Verificado" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "No verificado" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "Principal" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "La dirección de correo electrónico principal" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "Reenviar verificación" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "Borrar" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "Aviso:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" -"Actualmente no tiene ninguna dirección de correo electrónico configurada." -" Debe agregar una para poder recibir notificaciones, restablecer su " -"contraseña etc." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "Agregar dirección de correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "Agregar correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "¿Está seguro que quiere borrar el correo electrónico seleccionado?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -#, fuzzy -msgid "Confirm E-mail Address" -msgstr "La dirección de correo electrónico principal establecida" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, fuzzy, python-format -msgid "" -"Please confirm that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Ha confirmado que %(email)s es la " -"dirección del correo electrónico para usuario '%(user)s'." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, fuzzy, python-format -msgid "" -"You have confirmed that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Ha confirmado que %(email)s es la " -"dirección del correo electrónico para usuario '%(user)s'." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "Iniciar sesión" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, fuzzy, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, sign up \n" -"for a %(site_name)s account and sign in below:" -msgstr "" -"Por favor, inicie sesión con una \n" -" de sus cuentas de terceros o regístrese en la cuenta de %(site_name)s e " -"inicie sesión \n" -"abajo:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "o" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "¿Olvidaste tu contraseña?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "Cerrar sesión" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "Cambia la contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "Borra la contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "Puede borrar su contraseña ya que ha iniciado sesión con OpenID." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "borra mi contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "La contraseña ha sido borrada" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "Su contraseña ha sido borrada. " - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "Restablecimiento de la contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" -"¿Olvidaste tu contraseña? Introduce aquí tu dirección de correo " -"electrónico y te enviamos un mensaje que te permitirá restablecerla. " - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "Restablecimiento de la contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -#, fuzzy -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" -"Le hemos enviado un correo. Si no recibe ningún correo dentro de unos " -"minutos, póngase en contacto con nosotros a través de %(CONTACT_EMAIL)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "Token incorrecto" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a new password " -"reset." -msgstr "" -"El enlace de restablecimiento de la contraseña ha sido inválido. Es " -"probable que ya haya sido usado. Por favor, solicite uno nuevo new password reset." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "cambia la contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "Su contraseña ya se ha cambiado." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "Establecer contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "Registrarse" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "Registrarse" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please sign " -"in." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "Verifique su dirección de correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to %(email)s for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"Note: you can still change " -"your e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" -"Ha recibido este correo porque usted u otra persona ha solicitado la " -"contraseña de su cuenta de usuario en %(site_domain)s. \n" -"Si no ha solicitado restablecimiento de su contraseña, pase de este " -"mensaje. Abra el enlace de abajo para restablecer su contraseña.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"Le recordamos que su nombre de usuario es %(username)s.\n" -" \n" -"¡Gracias por usar nuestra página!\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "La dirección de correo electrónico en caso de restablecer la contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "Nota" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "ya está conectado como %(user_display)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "Iniciar sesión con OpenID " - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "La cuenta de usuario inactiva" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "Esta cuenta de usuario está inactiva." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "Error al iniciar sesión en la red social" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -#, fuzzy -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "" -"Ha ocurrido un error al intentar iniciar sesión a través de su cuenta de " -"red social." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Conexiones de la cuenta de usuario" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"Puede iniciar sesión en su cuenta de usuario a través de cualquiera de " -"las siguientes cuentas de terceros:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -#, fuzzy -msgid "You currently have no social network accounts connected to this account." -msgstr "La cuenta social ha sido conectada con su cuenta de usuario existente " - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "Agrega una cuenta de terceros" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "Nombre de usuario ha sido cancelado" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, fuzzy, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" -"Ha decidido anular lo de iniciar sesión en nuestra página usando una de " -"sus cuentas de usuario existentes. Si se ha equivocado, pase asign in, por favor." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" -"Está a punto de usar su %(provider_name)s cuenta de usuario para iniciar " -"sesión en \n" -"%(site_name)s. El último paso es rellenar este formulario:" - diff --git a/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.mo deleted file mode 100644 index 047cbaefa..000000000 Binary files a/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.po deleted file mode 100644 index 7703f0209..000000000 --- a/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,612 +0,0 @@ -# French translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2012. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-22 14:23+0100\n" -"Last-Translator: FULL NAME \n" -"Language-Team: fr \n" -"Plural-Forms: nplurals=2; plural=(n > 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -msgid "E-mail address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -msgid "The login and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -msgid "A user is already registered with this e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -msgid "This e-mail address is already associated with this account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -msgid "This e-mail address is already associated with another account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -msgid "email address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -msgid "email addresses" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -msgid "email confirmation" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -msgid "email confirmations" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -msgid "Your primary e-mail address must be verified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -msgid "Your account has no password set up." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -msgid "Your account has no verified e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -msgid "The social account has been connected" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -msgid "The following e-mail addresses are associated with your account:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -msgid "Confirm E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, python-format -msgid "" -"Please confirm that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, python-format -msgid "" -"You have confirmed that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, sign up \n" -"for a %(site_name)s account and sign in below:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a new password " -"reset." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please sign " -"in." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to %(email)s for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"Note: you can still change " -"your e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -msgid "You currently have no social network accounts connected to this account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" - diff --git a/wolnelektury/locale-contrib/it/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/it/LC_MESSAGES/django.mo deleted file mode 100644 index ecc10676d..000000000 Binary files a/wolnelektury/locale-contrib/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/it/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/it/LC_MESSAGES/django.po deleted file mode 100644 index c52eb4c4c..000000000 --- a/wolnelektury/locale-contrib/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,612 +0,0 @@ -# English translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2012. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-22 14:23+0100\n" -"Last-Translator: FULL NAME \n" -"Language-Team: en \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -msgid "E-mail address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -msgid "The login and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -msgid "A user is already registered with this e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -msgid "This e-mail address is already associated with this account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -msgid "This e-mail address is already associated with another account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -msgid "email address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -msgid "email addresses" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -msgid "email confirmation" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -msgid "email confirmations" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -msgid "Your primary e-mail address must be verified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -msgid "Your account has no password set up." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -msgid "Your account has no verified e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -msgid "The social account has been connected" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -msgid "The following e-mail addresses are associated with your account:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -msgid "Confirm E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, python-format -msgid "" -"Please confirm that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, python-format -msgid "" -"You have confirmed that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, sign up \n" -"for a %(site_name)s account and sign in below:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a new password " -"reset." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please sign " -"in." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to %(email)s for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"Note: you can still change " -"your e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -msgid "You currently have no social network accounts connected to this account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" - diff --git a/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.mo deleted file mode 100644 index b57074733..000000000 Binary files a/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.po deleted file mode 100644 index 2d58ef078..000000000 --- a/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,671 +0,0 @@ -# Lithuanian translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-08-14 17:50+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: lt \n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"(n%100<10 || n%100>=20) ? 1 : 2)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "Slaptažodis" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "Įsiminti mane" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -#, fuzzy -msgid "E-mail address" -msgstr "El. pašto adresai" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "El. paštas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "Vartotojo vardas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "Ši paskyra yra šiuo metu neaktyvi." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "El. pašto adresas ir/arba slaptažodis nėra teisingas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "Vartotojo vardas ir/arba slaptažodis nėra teisingas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -#, fuzzy -msgid "The login and/or password you specified are not correct." -msgstr "Vartotojo vardas ir/arba slaptažodis nėra teisingas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "El. paštas (pasirenkamas)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -#, fuzzy -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "" -"Vartotojo vardas gali būti sudarytas tik iš raidžių, skaičių ir " -"pabraukimo brūkšnelių." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "Šis vartotojo vardas yra užimtas. Prašome pasirinkite kitą." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -#, fuzzy -msgid "A user is already registered with this e-mail address." -msgstr "Šiuo elektroninio pašto adresu jau yra užsiregistravęs vartotojas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "Slaptažodis (pakartoti)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "Kiekvieną kartą turite įvesti tokį patį slaptažodį." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -#, fuzzy -msgid "This e-mail address is already associated with this account." -msgstr "Šis el. pašto adresas jau yra susietas su šia paskyra." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -#, fuzzy -msgid "This e-mail address is already associated with another account." -msgstr "Šis el. pašto adresas jau yra susietas su kita paskyra." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "Dabartinis slaptažodis" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "Naujas slaptažodis" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "Naujas slaptažodis (pakartoti)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "Prašome įvesti jūsų dabartinį slaptažodį." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "Šis el. pašto adresas nėra priskirtas jokio vartotojo paskyrai." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -#, fuzzy -msgid "email address" -msgstr "El. pašto adresai" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -#, fuzzy -msgid "email addresses" -msgstr "El. pašto adresai" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -#, fuzzy -msgid "email confirmation" -msgstr "El. pašto adreso patvirtinimas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -#, fuzzy -msgid "email confirmations" -msgstr "El. pašto adreso patvirtinimas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "Sėkmingai prisijungęs kaip %(user)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "El. pašto patvirtinimas buvo išsiųstas į %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, fuzzy, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "Pašalintas el. pašto adresas %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "Pašalintas el. pašto adresas %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -#, fuzzy -msgid "Your primary e-mail address must be verified" -msgstr "Jūsų el.pašto adresas jau buvo patikrintas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "Nustatytas pagrindinis el. pašto adresas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "Slaptažodis sėkmingai pakeistas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "Slaptažodis sėkmingai nustatytas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "Jūs atsijungėte." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -#, fuzzy -msgid "Your account has no password set up." -msgstr "Jūsų vietinės paskyros slaptažodis dar yra nenustatytas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -#, fuzzy -msgid "Your account has no verified e-mail address." -msgstr "Jūsų vietinės paskyros el. pašto adresas dar nepatikrintas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -#, fuzzy -msgid "The social account has been connected" -msgstr "Socialinė paskyra buvo atjungta" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "Socialinė paskyra buvo atjungta" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "Neteisingas atsakas gaunant užklausos žetoną iš \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "Neteisingas atsakas gaunant prieigos žetoną iš \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "Nėra užklausos žetono įrašyto \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "Nėra prieigos žetono įrašyto \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "Trūksta prieigos prie privačių išteklių \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "Paskyra" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "El. pašto adresai" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -#, fuzzy -msgid "The following e-mail addresses are associated with your account:" -msgstr "Šie el. pašto adresai yra priskirti jūsų paskyrai:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "Patikrintas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "Nepatikrintas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "Pirminis" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "Padaryti pirminiu" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "Dar kartą siųsti patikrinimą" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "Pašalinti" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "Įspėjimas:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" -"Šiuo metu neturite nustatyto jokio el. pašto adreso. Jūs tikrai " -"turėtumėte pridėti el. pašto adresą, kad gautumėte pranešimus, " -"atstatytumėte jūsų slaptažodį ir t.t." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "Pridėti el. pašto adresą" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "Pridėti el. paštą" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "Ar esate tikri, kad norite pašalinti pasirinktą el. pašto adresą?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -#, fuzzy -msgid "Confirm E-mail Address" -msgstr "Nustatytas pagrindinis el. pašto adresas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, fuzzy, python-format -msgid "" -"Please confirm that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Patvirtinote, kad %(email)s yra " -"'%(user)s' vartotojo el. pašto adresas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, fuzzy, python-format -msgid "" -"You have confirmed that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Patvirtinote, kad %(email)s yra " -"'%(user)s' vartotojo el. pašto adresas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "Prisijungti" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, fuzzy, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, sign up \n" -"for a %(site_name)s account and sign in below:" -msgstr "" -"Prašome prisijungti su viena\n" -"iš jūsų third party paskyrų. Arba užsiregistruoti %(site_name)s paskyrai " -"sukurti ir prisijungti\n" -"žemiau:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "arba" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "Pamiršote slaptažodį?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "Atsijungęs" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "Keisti slaptažodį" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "Pašalinti slaptažodį" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "" -"Galite pašalinti jūsų slaptažodį, nes esate prisijungę naudodamiesi " -"OpenID." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "pašalinti mano slaptažodį" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "Slaptažodis pašalintas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "Jūsų slaptažodis pašalintas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "Slaptažodžio atstatymas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" -"Pamiršote slaptažodį? Įveskite jūsų el. pašto adresą žemiau ir mes " -"išsiųsime jums el. laišką leidžiantį jį atstatyti." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "Atstatyti mano slaptažodį" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -#, fuzzy -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" -"Jums išsiuntėme el. laišką. Jei to negausite per kelias minutes, " -"susisiekite su mumis %(CONTACT_EMAIL)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "Blogas žetonas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a new password " -"reset." -msgstr "" -"Atstatymo slaptažodžio nuoroda buvo netinkama, galbūt, nes jau buvo " -"panaudota. Prašome paprašyti naujo " -"slaptažodžio atstatymo." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "keisti slaptažodį" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "Jūsų slaptažodis pakeistas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "Nustatyti slaptažodį" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "Registracija" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "Registruotis" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please sign " -"in." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "Patikrinkite jūsų el. pašto adresą" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to %(email)s for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"Note: you can still change " -"your e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" -"Gavote šį el. laišką, nes paprašėte, arba kitas asmuo paprašė, atstatyti " -"slaptažodį jūsų paskyrai čia %(site_domain)s.\n" -"Galite į jį nekreipti dėmesio jei neprašėte slaptažodžio atstatymo. " -"Paspauskite jūsų slaptažodžio atstatymui skirtą nuorodą.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"Jūsų vartotojo vardas yra %(username)s\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "Slaptažodžio atstatymo el. laiškas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "Pastaba" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "jūs jau esate prisijungęs kaip %(user_display)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "OpenID prisijungimas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "Paskyra neaktyvi" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "Ši paskyra neaktyvi." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "Klaida " - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -#, fuzzy -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "Įvyko klaida prisijungiant per jūsų socialinio tinklo paskyrą." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Paskyros jungtys" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"Galite prisijungti prie jūsų paskyros naudodamiesi šiomis 3rd party " -"paskyromis:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -#, fuzzy -msgid "You currently have no social network accounts connected to this account." -msgstr "Ši socialinė paskyra buvo prijungta prie jūsų paskyros" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "Pridėti 3rd Party Paskyra" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "Prisijungimas atšauktas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, fuzzy, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" -"Nusprendėte atšaukti prisijungimą prie mūsų interneto svetainės " -"naudodamiesi viena iš jūsų paskyrų. Jei įvyko klaida, prašome pradėti čia" -" sign in." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" -"Jūs ruošiatės naudotis jūsų %(provider_name)s paskyra, kad " -"prisijungtumėte prie \n" -"%(site_name)s. Prašome užpildyti šią formą:" - diff --git a/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 3912839c1..000000000 Binary files a/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.po deleted file mode 100644 index c189ecd62..000000000 --- a/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,668 +0,0 @@ -# Polish translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 15:46+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: 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" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "Hasło" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "Hasło musi składać się z co najmniej {0} znaków." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "Zapamiętaj mnie" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -msgid "E-mail address" -msgstr "Adres e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "E-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "Login" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "Nazwa użytkownika lub e-mail." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "Konto jest nieaktywne." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "Podany e-mail i/lub hasło są niepoprawne." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "Podany login i/lub hasło są niepoprawne." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -msgid "The login and/or password you specified are not correct." -msgstr "Podany login i/lub hasło są niepoprawne." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "E-mail (opcjonalnie)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "Login może zawierać tylko litery, cyfry i znaki @/./+/-/_." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "Ta nazwa użytkownika nie może zostać użyta. Prosimy użyć innej." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "Ten login jest zajęty. Proszę wybrać inny." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -msgid "A user is already registered with this e-mail address." -msgstr "Istnieje użytkownik o tym adresie e-mail." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "Hasło (ponownie)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "Proszę wpisać dwa razy to samo hasło." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -msgid "This e-mail address is already associated with this account." -msgstr "Ten adres e-mail jest już używany przez to konto." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -msgid "This e-mail address is already associated with another account." -msgstr "Ten adres e-mail jest już używany przez inne konto." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "Aktualne hasło" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "Nowe hasło" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "Nowe hasło (ponownie)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "Proszę wpisać swoje aktualne hasło." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "Ten adres e-mail nie jest używany przez żadne konto." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -msgid "email address" -msgstr "adres e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -msgid "email addresses" -msgstr "adresy e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -msgid "email confirmation" -msgstr "potwierdzenie adresu e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -msgid "email confirmations" -msgstr "potwierdzenia adresów e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "Zalogowano jako %(user)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "E-mail potwierdzający wysłany do %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "Adres %(email)s został potwierdzony." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "Nie można usunąć głównego adresu e-mail (%(email)s)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "Usunięto adres e-mail %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -msgid "Your primary e-mail address must be verified" -msgstr "Główny adres e-mail musi zostać potwierdzony" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "Ustawiono główny adres e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "Hasło zostało zmienione." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "Hasło zostało ustawione." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "Wylogowano." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -msgid "Your account has no password set up." -msgstr "Twoje konto nie ma ustawionego hasła." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -msgid "Your account has no verified e-mail address." -msgstr "Twoje konto nie ma potwierdzonego adresu e-mail." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -msgid "The social account has been connected" -msgstr "Konto społecznościowe zostało dołączone" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "Konto społecznościowe zostało odłączone." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "Brak dostępu do prywatnych zasobów pod adresem \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "Konto" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "Adresy e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -msgid "The following e-mail addresses are associated with your account:" -msgstr "Z Twoim kontem są związane następujące adresy e-mail:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "Potwierdzony" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "Nie potwierdzony" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "Główny" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "Ustaw główny" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "Ponownie prześlij link potwierdzający" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "Usuń" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "Uwaga:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" -"Nie masz ustawionego żadnego adresu e-mail. Dodanie adresu e-mail " -"umożliwi odzyskanie konta w przypadku utraty hasła." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "Dodaj adres e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "Dodaj e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "Czy na pewno usunąć wybrany adres e-mail?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -msgid "Confirm E-mail Address" -msgstr "Potwierdź adres e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, python-format -msgid "" -"Please confirm that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Proszę potwierdzić adres %(email)s jako " -"e-mail użytkownika '%(user_display)s'." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "Potwierdź" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." -msgstr "" -"Ten link z wiadomości e-mail jest nieprawidłowy lub nieaktualny. Możesz " -"zamówić kolejny link weryfikacyjny." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, python-format -msgid "" -"You have confirmed that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Adres %(email)s został właśnie " -"powierdzony jako e-mail dla użytkownika '%(user_display)s'." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "Zaloguj" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, sign up \n" -"for a %(site_name)s account and sign in below:" -msgstr "" -"Zaloguj za pomocą konta zewnętrznego, albo zarejestruj się w serwisie %(site_name)s i " -"zaloguj poniżej:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "lub" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "Nie pamiętasz hasła?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "Wylogowano" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "Zmień hasło" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "Usuń hasło" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "Możesz usunąć hasło, ponieważ jesteś zalogowany/-a za pomocą OpenID." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "usuń moje hasło" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "Hasło usunięte" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "Twoje hasło zostało usunięte." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "Odzyskiwanie hasła" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" -"Nie pamiętasz swojego hasła? Wpisz adres e-mail, a wyślemy Ci e-mail " -"umożliwiający zresetowanie go." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "Odzyskaj hasło" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "Prosimy o kontakt w przypadku problemów z uzyskaniem nowego hasła." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" -"E-mail został wysłany. Prosimy o kontakt, jeśli wiadomość nie dotrze w " -"ciągu kilku minut." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "Błędny klucz" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a new password " -"reset." -msgstr "" -"Link resetujący hasło jest nieprawidłowy, być może ponieważ został już " -"wcześniej użyty. Spróbuj zresetować " -"hasło ponownie." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "zmień hasło" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "Hasło zostało zmienione." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "Ustaw hasło" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "Rejestracja" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "Zarejestruj się" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please sign " -"in." -msgstr "Masz już konto? Zaloguj się." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "Rejestracja zamknięta" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "Przepraszamy, ale rejestracja jest obecnie zamknięta." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "Potwierdź swój adres e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to %(email)s for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" -"Na podany adres e-mail %(email)s została" -" wysłana wiadomość w celu weryfikacji. Proszę kliknąć w podany w tej " -"wiadomości link w celu zakończenia procesu rejestracji. Prosimy o " -"kontakt, jeśli wiadomość nie dotrze w ciągu kilku minut." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" -"W celu korzystania z tej części strony wymagamy\n" -"potwierdzenia tożsamości. W tym celu konieczne jest\n" -"potwierdzenie adresu e-mail. " - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" -"Na podany adres została wysłana wiadomość w celu\n" -"weryfikacji. Proszę kliknąć na link wewnątrz tej wiadomości. Prosimy\n" -"o kontakt, jeśli wiadomość nie dotrze w ciągu kilku minut." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"Note: you can still change " -"your e-mail address." -msgstr "" -"Uwaga: nadal możesz zmienić " -"swój adres e-mail." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" -"Użytkownik '%(user_display)s' podał ten adres e-mail na stronie " -"%(site_name)s.\n" -"\n" -"Aby go potwierdzić, przejdź do %(activate_url)s\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" -"Otrzymujesz tego e-maila, ponieważ zostaliśmy poproszeni o zresetowanie " -"hasła dla konta w serwisie %(site_domain)s.\n" -"Możesz go zignorować, jeśli prośba nie pochodzi od Ciebie. Wejdź pod " -"poniższy link, aby zresetować swoje hasło.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"W razie czego, Twój login to: %(username)s.\n" -"\n" -"Miłego czytania!\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "E-mail resetujący hasło" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "Zwróć uwagę" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "jesteś już zalogowany/-a jako %(user_display)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "Logowanie przy użyciu OpenID" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "Konto nieaktywne" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "To konto jest nieaktywne." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "Błąd podczas logowania przy użyciu sieci społecznościowej." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "" -"Podczas próby zalogowania za pośrednictwej konta w sieci społecznościowej" -" wystąpił błąd." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Powiązania konta" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"Możesz zalogować się na swoje konto używając następujących kont " -"zewnętrznych:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -msgid "You currently have no social network accounts connected to this account." -msgstr "" -"Aktualnie do Twojego konta nie są podłączone żadne konta w sieciach " -"społecznościowych." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "Dodaj konto zewnętrzne" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "Logowanie anulowane" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" -"Logowanie do serwisu za pomocą istniejącego konta zostało anulowane. " -"Jeśli był to błąd, przejdź do strony " -"logowania." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" -"Za chwilę użyjesz konta w serwisie %(provider_name)s aby zalogować się \n" -"do serwisu %(site_name)s. Zanim to nastąpi, wypełnij proszę ten krótki " -"formularz:" - diff --git a/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.mo deleted file mode 100644 index df98508d7..000000000 Binary files a/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.po deleted file mode 100644 index 9c9f8156b..000000000 --- a/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,613 +0,0 @@ -# Russian translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2012. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-22 14:23+0100\n" -"Last-Translator: FULL NAME \n" -"Language-Team: ru \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" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -msgid "E-mail address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -msgid "The login and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -msgid "A user is already registered with this e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -msgid "This e-mail address is already associated with this account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -msgid "This e-mail address is already associated with another account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -msgid "email address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -msgid "email addresses" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -msgid "email confirmation" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -msgid "email confirmations" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -msgid "Your primary e-mail address must be verified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -msgid "Your account has no password set up." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -msgid "Your account has no verified e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -msgid "The social account has been connected" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -msgid "The following e-mail addresses are associated with your account:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -msgid "Confirm E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, python-format -msgid "" -"Please confirm that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, python-format -msgid "" -"You have confirmed that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, sign up \n" -"for a %(site_name)s account and sign in below:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a new password " -"reset." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please sign " -"in." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to %(email)s for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"Note: you can still change " -"your e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -msgid "You currently have no social network accounts connected to this account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" - diff --git a/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.mo deleted file mode 100644 index d6335b97c..000000000 Binary files a/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.po deleted file mode 100644 index 0a86ef3e2..000000000 --- a/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,673 +0,0 @@ -# Ukrainian translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-08-14 17:49+0100\n" -"Last-Translator: Radek Czajka \n" -"Language-Team: uk \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" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "Пароль" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "Запам’ятати мене" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -#, fuzzy -msgid "E-mail address" -msgstr "Електронні адреси" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "E-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "Ім’я користувача" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "Акаунт на даний момент є неактивним." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "Вказані електронна адреса та/або пароль неправильні." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "Вказані ім’я користувача та/або пароль неправильні." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -#, fuzzy -msgid "The login and/or password you specified are not correct." -msgstr "Вказані ім’я користувача та/або пароль неправильні." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "E-mail (факультативно)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -#, fuzzy -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "Ім’я користувача може містити тільки букви, цифри та підчеркування." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "Це ім’я користувача вже використано. Будь ласка, виберіть інше." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -#, fuzzy -msgid "A user is already registered with this e-mail address." -msgstr "Користувач з такою електронною адресою вже існує." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "Пароль (повторити)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "Впишіть двічі такий самий пароль." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -#, fuzzy -msgid "This e-mail address is already associated with this account." -msgstr "Ця електронна адреса вже пов'язана з цім акаунтом." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -#, fuzzy -msgid "This e-mail address is already associated with another account." -msgstr "Ця електронна адреса вже пов'язана з іншим акаунтом." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "Актуальний пароль" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "Новий пароль" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "Новий пароль (повторити)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "Введіть будь ласка Ваш теперішній пароль." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "Ця електронна адреса не пов'язана з жодним акаунтом." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -#, fuzzy -msgid "email address" -msgstr "Електронні адреси" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -#, fuzzy -msgid "email addresses" -msgstr "Електронні адреси" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -#, fuzzy -msgid "email confirmation" -msgstr "Підтвердження електронної адреси." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -#, fuzzy -msgid "email confirmations" -msgstr "Підтвердження електронної адреси." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "Ви успішно увійшли як %(user)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "Подвідомлення для підтвердження реєстрації вислано на %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, fuzzy, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "Видалено електронну адресу %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "Видалено електронну адресу %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -#, fuzzy -msgid "Your primary e-mail address must be verified" -msgstr "Вашу електронну адресу підтверджено." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "Встановлено основну електронну адресу" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "Пароль успішно змінено." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "Успішно встановлено пароль." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "Ви вийшли з акаунту." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -#, fuzzy -msgid "Your account has no password set up." -msgstr "Для Вашого локального акаунту не встановлено пароля." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -#, fuzzy -msgid "Your account has no verified e-mail address." -msgstr "" -"Для Вашого локального акаунту не встановлено перевіреної електронної " -"адреси." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -#, fuzzy -msgid "The social account has been connected" -msgstr "Обліковий запис в соціальній мережі від'єднано." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "Обліковий запис в соціальній мережі від'єднано." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "Акаунт" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "Електронні адреси" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -#, fuzzy -msgid "The following e-mail addresses are associated with your account:" -msgstr "З Вашим акаунтом пов'язані наступні електронні адреси:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "Перевірено" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "Неперевірено" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "Основна" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "Зробити основною" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "Надіслати ще раз повідомлення для перевірки" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "Видалити" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "Попередження:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" -"Ви не додали жодної електронної адреси. Рекомендуємо Вам додати адресу, " -"для цього щоб отримувати повідомлення, мати можливість відновлення паролю" -" тощо." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "Додати електронну адресу" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "Додати електронну адресу" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "Чи справді хочете видалити вибрану адресу?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -#, fuzzy -msgid "Confirm E-mail Address" -msgstr "Встановлено основну електронну адресу" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, fuzzy, python-format -msgid "" -"Please confirm that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Ви підтвердили, що адреса %(email)s є " -"адресою коричтувача '%(user)s'." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, fuzzy, python-format -msgid "" -"You have confirmed that %(email)s is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Ви підтвердили, що адреса %(email)s є " -"адресою коричтувача '%(user)s'." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "Увійти в акаунт" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, fuzzy, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, sign up \n" -"for a %(site_name)s account and sign in below:" -msgstr "" -"Увійдіть за допомогою\n" -"існуючого облікового запису у іншій системі. Можете також, увійти в акаунт %(site_name)s та увійти\n" -"нижче:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "або" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "Забули пароль?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "Ви вийшли з акаунту." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "Змінити пароль" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "Видалити пароль" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "Можете видалити свій пароль, тому що зараз ви увійшли за допомогою OpenID." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "видалити мій пароль" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "Пароль видалено" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "Ваш пароль видалено." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "Зміна паролю" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" -"Забули пароль? Введіть свою електронну адресу, щоб отримати інструкції " -"щодо встановлення нового паролю." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "Змінити мій пароль" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -#, fuzzy -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" -"Вам було вислано повідомлення. Якщо не отримаєте його протягом кількох " -"хвилин, напишіть на адресу %(CONTACT_EMAIL)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a new password " -"reset." -msgstr "" -"Посилання на зміну пароля було неправильним, тому що його вже " -"використали. Будь ласка, замовте ще одну" -" зміну пароля." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "змінити пароль" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "Ваш пароль змінено." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "Встановити пароль" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "Реєстрація" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "Реєструватися" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please sign " -"in." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "Перевірити електронну адресу" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to %(email)s for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"Note: you can still change " -"your e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" -"Ви отримали це повідомлення, тому що хтось попросив про зміну пароля для " -"Вашого акаунту на сайті %(site_domain)s.\n" -"Якщо ви не просили про зміну, можете проігнорувати це повідомлення. Для " -"зміни пароля натисніть посилання.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"Нагадуємо, що Ваше ім'я користувача це %(username)s.\n" -"\n" -"Дякуємо за користування нашим сайтом!\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "Повідомлення для встановлення нового паролю" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "Увага" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "ви вже увійшли як користувач %(user_display)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "Увійти за допомогою OpenID" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "Неактивний акаунт" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "Цей акаунт неактивний." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "Неможливо увійти в систему за допомогою соціальної мережі." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -#, fuzzy -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "" -"Під час спроби увійти за допомоги облікового запису у соціальній мережі " -"наступила помилка." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Пов’язані облікові записи" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"Можете увійти у Ваш акаунт за допомогою облікових записів у наступних " -"системах:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -#, fuzzy -msgid "You currently have no social network accounts connected to this account." -msgstr "Ваш обліковий запис у соціальній мережі пов'язано з існуючим акаунтом." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "Додати обліковий запис у іншій системі" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "Спробу увійти в систему скасовано." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, fuzzy, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" -"Ви вирішили скасувати спробу увійти в систему за допомогою вже існуючого " -"облікового запису. Якщо це помилка, перейдіть до увійти." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" -"Хочете скористатися вашим обліковим записом %(provider_name)s щоб увійти " -"на сайт \n" -"%(site_name)s. Для завершення процесу, заповніть будь ласка наступну " -"форму:" - diff --git a/wolnelektury/middleware.py b/wolnelektury/middleware.py deleted file mode 100644 index 60b382cd3..000000000 --- a/wolnelektury/middleware.py +++ /dev/null @@ -1,126 +0,0 @@ -# Orignal version taken from http://www.djangosnippets.org/snippets/186/ -# Original author: udfalkso -# Modified by: Shwagroo Team - -import sys -import os -import re -import hotshot, hotshot.stats -import tempfile -import StringIO -import pprint - -from django.conf import settings -from django.db import connection - - -words_re = re.compile( r'\s+' ) - -group_prefix_re = [ - re.compile( "^.*/django/[^/]+" ), - re.compile( "^(.*)/[^/]+$" ), # extract module path - re.compile( ".*" ), # catch strange entries -] - - -class ProfileMiddleware(object): - """ - Displays hotshot profiling for any view. - http://yoursite.com/yourview/?prof - - Add the "prof" key to query string by appending ?prof (or &prof=) - and you'll see the profiling results in your browser. - It's set up to only be available in django's debug mode, is available for superuser otherwise, - but you really shouldn't add this middleware to any production configuration. - - WARNING: It uses hotshot profiler which is not thread safe. - """ - def process_request(self, request): - if (settings.DEBUG or request.user.is_superuser) and request.GET.has_key('prof'): - connection.queries = [] - self.tmpfile = tempfile.mktemp() - self.prof = hotshot.Profile(self.tmpfile) - - def process_view(self, request, callback, callback_args, callback_kwargs): - if (settings.DEBUG or request.user.is_superuser) and request.GET.has_key('prof'): - return self.prof.runcall(callback, request, *callback_args, **callback_kwargs) - - def get_group(self, file): - for g in group_prefix_re: - name = g.findall( file ) - if name: - return name[0] - - def get_summary(self, results_dict, sum): - list = [ (item[1], item[0]) for item in results_dict.items() ] - list.sort( reverse = True ) - list = list[:40] - - res = " tottime\n" - for item in list: - if sum == 0: - foo = 0 - else: - foo = 100*item[0]/sum - res += "%4.1f%% %7.3f %s\n" % (foo, item[0], item[1] ) - - return res - - def summary_for_files(self, stats_str): - stats_str = stats_str.split("\n")[5:] - - mystats = {} - mygroups = {} - - sum = 0 - - for s in stats_str: - fields = words_re.split(s); - if len(fields) == 7: - time = float(fields[2]) - sum += time - file = fields[6].split(":")[0] - - if not file in mystats: - mystats[file] = 0 - mystats[file] += time - - group = self.get_group(file) - if not group in mygroups: - mygroups[ group ] = 0 - mygroups[ group ] += time - - return "
                            " + \
                            -               " ---- By file ----\n\n" + self.get_summary(mystats,sum) + "\n" + \
                            -               " ---- By group ---\n\n" + self.get_summary(mygroups,sum) + \
                            -               "
                            " - - def process_response(self, request, response): - if (settings.DEBUG or request.user.is_superuser) and request.GET.has_key('prof'): - self.prof.close() - - out = StringIO.StringIO() - old_stdout = sys.stdout - sys.stdout = out - - stats = hotshot.stats.load(self.tmpfile) - stats.sort_stats('time', 'calls') - stats.print_stats() - - sys.stdout = old_stdout - stats_str = out.getvalue() - - if response and response.content and stats_str: - response.content = "
                            " + stats_str + "
                            " - - response.content = "\n".join(response.content.split("\n")[:40]) - - response.content += self.summary_for_files(stats_str) - - os.unlink(self.tmpfile) - - response.content += '\n%d SQL Queries:\n' % len(connection.queries) - response.content += pprint.pformat(connection.queries) - - return response - diff --git a/wolnelektury/migrations/__init__.py b/wolnelektury/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/wolnelektury/migrations/getpaid/0001_initial.py b/wolnelektury/migrations/getpaid/0001_initial.py deleted file mode 100644 index 2ab2d3f64..000000000 --- a/wolnelektury/migrations/getpaid/0001_initial.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import getpaid.abstract_mixin - - -class Migration(migrations.Migration): - - dependencies = [ - ('funding', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Payment', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('amount', models.DecimalField(verbose_name='amount', max_digits=20, decimal_places=4)), - ('currency', models.CharField(max_length=3, verbose_name='currency')), - ('status', models.CharField(default=b'new', max_length=20, verbose_name='status', db_index=True, choices=[(b'new', 'new'), (b'in_progress', 'in progress'), (b'partially_paid', 'partially paid'), (b'paid', 'paid'), (b'failed', 'failed')])), - ('backend', models.CharField(max_length=50, verbose_name='backend')), - ('created_on', models.DateTimeField(auto_now_add=True, verbose_name='created on', db_index=True)), - ('paid_on', models.DateTimeField(default=None, null=True, verbose_name='paid on', db_index=True, blank=True)), - ('amount_paid', models.DecimalField(default=0, verbose_name='amount paid', max_digits=20, decimal_places=4)), - ('external_id', models.CharField(max_length=64, null=True, verbose_name='external id', blank=True)), - ('description', models.CharField(max_length=128, null=True, verbose_name='Description', blank=True)), - ('order', models.ForeignKey(related_name=b'payment', to='funding.Funding')), - ], - options={ - 'ordering': ('-created_on',), - 'verbose_name': 'Payment', - 'verbose_name_plural': 'Payments', - }, - bases=(models.Model, getpaid.abstract_mixin.AbstractMixin), - ), - ] diff --git a/wolnelektury/migrations/getpaid/0002_auto_20151221_1225.py b/wolnelektury/migrations/getpaid/0002_auto_20151221_1225.py deleted file mode 100644 index c1a71771f..000000000 --- a/wolnelektury/migrations/getpaid/0002_auto_20151221_1225.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('getpaid', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='payment', - name='description', - field=models.CharField(max_length=128, null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='payment', - name='status', - field=models.CharField(default=b'new', max_length=20, verbose_name='status', db_index=True, choices=[(b'new', 'new'), (b'in_progress', 'in progress'), (b'accepted_for_proc', 'accepted for processing'), (b'partially_paid', 'partially paid'), (b'paid', 'paid'), (b'cancelled', 'cancelled'), (b'failed', 'failed')]), - ), - ] diff --git a/wolnelektury/migrations/getpaid/__init__.py b/wolnelektury/migrations/getpaid/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/wolnelektury/migrations/piston/0001_initial.py b/wolnelektury/migrations/piston/0001_initial.py deleted file mode 100644 index c2939b19a..000000000 --- a/wolnelektury/migrations/piston/0001_initial.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models -from django.conf import settings - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Consumer', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=255)), - ('description', models.TextField()), - ('key', models.CharField(max_length=18)), - ('secret', models.CharField(max_length=32)), - ('status', models.CharField(default=b'pending', max_length=16, choices=[(b'pending', b'Pending approval'), (b'accepted', b'Accepted'), (b'canceled', b'Canceled')])), - ('user', models.ForeignKey(related_name='consumers', blank=True, to=settings.AUTH_USER_MODEL, null=True)), - ], - ), - migrations.CreateModel( - name='Nonce', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('token_key', models.CharField(max_length=18)), - ('consumer_key', models.CharField(max_length=18)), - ('key', models.CharField(max_length=255)), - ], - ), - migrations.CreateModel( - name='Resource', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=255)), - ('url', models.TextField(max_length=2047)), - ('is_readonly', models.BooleanField(default=True)), - ], - ), - migrations.CreateModel( - name='Token', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('key', models.CharField(max_length=18)), - ('secret', models.CharField(max_length=32)), - ('token_type', models.IntegerField(choices=[(1, 'Request'), (2, 'Access')])), - ('timestamp', models.IntegerField()), - ('is_approved', models.BooleanField(default=False)), - ('consumer', models.ForeignKey(to='piston.Consumer')), - ('user', models.ForeignKey(related_name='tokens', blank=True, to=settings.AUTH_USER_MODEL, null=True)), - ], - ), - ] diff --git a/wolnelektury/migrations/piston/__init__.py b/wolnelektury/migrations/piston/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/wolnelektury/settings/__init__.py b/wolnelektury/settings/__init__.py deleted file mode 100644 index 9224484de..000000000 --- a/wolnelektury/settings/__init__.py +++ /dev/null @@ -1,117 +0,0 @@ -# -*- coding: utf-8 -*- -# Django settings for wolnelektury project. -from os import path - -from .basic import * -from .auth import * -from .cache import * -from .celery import * -from .contrib import * -from .custom import * -from .locale import * -from .static import * - - -TEMPLATE_CONTEXT_PROCESSORS = ( - 'django.contrib.auth.context_processors.auth', - 'django.core.context_processors.debug', - 'django.core.context_processors.i18n', - 'django.core.context_processors.media', - 'django.core.context_processors.request', - 'wolnelektury_core.context_processors.extra_settings', - 'search.context_processors.search_form', -) - -MIDDLEWARE_CLASSES = [ - 'django.middleware.csrf.CsrfViewMiddleware', - 'ssify.middleware.SsiMiddleware', - 'django.middleware.cache.UpdateCacheMiddleware', - 'ssify.middleware.PrepareForCacheMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.admindocs.middleware.XViewMiddleware', - 'pagination.middleware.PaginationMiddleware', - 'ssify.middleware.LocaleMiddleware', - 'maintenancemode.middleware.MaintenanceModeMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'fnpdjango.middleware.SetRemoteAddrFromXRealIP', - 'django.middleware.cache.FetchFromCacheMiddleware', -] - -ROOT_URLCONF = 'wolnelektury.urls' - -# These are the ones we should test. -INSTALLED_APPS_OUR = [ - 'wolnelektury_core', - # our - 'ajaxable', - 'api', - 'catalogue', - 'chunks', - 'dictionary', - 'infopages', - 'lesmianator', - 'newtagging', - 'opds', - 'pdcounter', - 'reporting', - 'sponsors', - 'stats', - 'suggest', - 'picture', - 'social', - 'waiter', - 'search', - 'oai', - 'funding', - 'polls', - 'libraries', - ] - -GETPAID_BACKENDS = ( - 'getpaid.backends.payu', -) - -INSTALLED_APPS_CONTRIB = [ - # Should be before django.contrib.admin - 'modeltranslation', - - # external - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.sites', - 'django.contrib.admin', - 'django.contrib.admindocs', - 'django.contrib.staticfiles', - 'pagination', - 'pipeline', - 'piston', - 'piwik', - 'sorl.thumbnail', - 'kombu.transport.django', - 'honeypot', - 'fnpdjango', - 'getpaid', - 'getpaid.backends.payu', - 'ssify', - - #allauth stuff - 'uni_form', - 'allauth', - 'allauth.account', - 'allauth.socialaccount', - 'allauth.socialaccount.providers.openid', - 'allauth.socialaccount.providers.facebook', - #'allauth.socialaccount.providers.twitter', - ] - -INSTALLED_APPS = INSTALLED_APPS_OUR + INSTALLED_APPS_CONTRIB - -# Load localsettings, if they exist -try: - from wolnelektury.localsettings import * -except ImportError: - pass diff --git a/wolnelektury/settings/auth.py b/wolnelektury/settings/auth.py deleted file mode 100644 index 4d3ea224a..000000000 --- a/wolnelektury/settings/auth.py +++ /dev/null @@ -1,19 +0,0 @@ -AUTHENTICATION_BACKENDS = [ - 'django.contrib.auth.backends.ModelBackend', - 'allauth.account.auth_backends.AuthenticationBackend', -] -ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2 -LOGIN_URL = '/uzytkownik/login/' - -LOGIN_REDIRECT_URL = '/' - -SOCIALACCOUNT_AUTO_SIGNUP = False -SOCIALACCOUNT_QUERY_EMAIL = True - - -SOCIALACCOUNT_PROVIDERS = \ - { 'openid': - { 'SERVERS': - [dict(id='google', - name='Google', - openid_url='https://www.google.com/accounts/o8/id')]}} diff --git a/wolnelektury/settings/basic.py b/wolnelektury/settings/basic.py deleted file mode 100644 index 30812e516..000000000 --- a/wolnelektury/settings/basic.py +++ /dev/null @@ -1,42 +0,0 @@ -from os import path -from .paths import PROJECT_DIR - -DEBUG = False -TEMPLATE_DEBUG = DEBUG -MAINTENANCE_MODE = False - -ADMINS = [ - # ('Your Name', 'your_email@domain.com'), -] - -MANAGERS = ADMINS - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. - 'NAME': path.join(PROJECT_DIR, 'dev.db'), # Or path to database file if using sqlite3. - 'USER': '', # Not used with sqlite3. - 'PASSWORD': '', # Not used with sqlite3. - 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. - } -} - -SOLR = "http://localhost:8983/solr/wl/" -SOLR_TEST = "http://localhost:8983/solr/wl_test/" - -# Local time zone for this installation. Choices can be found here: -# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name -# although not all choices may be available on all operating systems. -# If running in a Windows environment this must be set to the same as your -# system time zone. -TIME_ZONE = 'Europe/Warsaw' -USE_TZ = True - -SITE_ID = 1 - -# List of callables that know how to import templates from various sources. -TEMPLATE_LOADERS = [ - 'django.template.loaders.filesystem.Loader', - 'django.template.loaders.app_directories.Loader', -# 'django.template.loaders.eggs.Loader', -] diff --git a/wolnelektury/settings/cache.py b/wolnelektury/settings/cache.py deleted file mode 100644 index a9cc70f3b..000000000 --- a/wolnelektury/settings/cache.py +++ /dev/null @@ -1,18 +0,0 @@ -CACHES = { - 'default': { - 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', - 'LOCATION': [ - '127.0.0.1:11211', - ] - }, - 'ssify': { - 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', - 'TIMEOUT': None, - 'KEY_PREFIX': 'ssify', - 'LOCATION': [ - '127.0.0.1:11211', - ], - }, -} - -CACHE_MIDDLEWARE_SECONDS = 24 * 60 * 60 diff --git a/wolnelektury/settings/celery.py b/wolnelektury/settings/celery.py deleted file mode 100644 index 77abfa658..000000000 --- a/wolnelektury/settings/celery.py +++ /dev/null @@ -1,5 +0,0 @@ -BROKER_URL = 'django://' - -CELERY_EAGER_PROPAGATES_EXCEPTIONS = True -CELERY_SEND_TASK_ERROR_EMAILS = True -CELERY_ACCEPT_CONTENT = ['pickle'] diff --git a/wolnelektury/settings/contrib.py b/wolnelektury/settings/contrib.py deleted file mode 100644 index f0e8430a5..000000000 --- a/wolnelektury/settings/contrib.py +++ /dev/null @@ -1,17 +0,0 @@ -HONEYPOT_FIELD_NAME = 'miut' -PAGINATION_INVALID_PAGE_RAISES_404 = True -THUMBNAIL_QUALITY = 95 - -MODELTRANSLATION_DEFAULT_LANGUAGE = 'pl' -MODELTRANSLATION_PREPOPULATE_LANGUAGE = 'pl' - -MIGRATION_MODULES = { - 'getpaid' : 'wolnelektury.migrations.getpaid', - 'piston' : 'wolnelektury.migrations.piston', -} - -GETPAID_ORDER_DESCRIPTION = "{% load funding_tags %}{{ order|sanitize_payment_title }}" - -PIWIK_URL = '' -PIWIK_SITE_ID = 0 -PIWIK_TOKEN = '' diff --git a/wolnelektury/settings/custom.py b/wolnelektury/settings/custom.py deleted file mode 100644 index 8830ebe6f..000000000 --- a/wolnelektury/settings/custom.py +++ /dev/null @@ -1,17 +0,0 @@ -# limit number of filtering tags -MAX_TAG_LIST = 6 - -NO_SEARCH_INDEX = False -NO_CUSTOM_PDF = True - -CATALOGUE_DEFAULT_LANGUAGE = 'pol' -PUBLISH_PLAN_FEED = 'http://redakcja.wolnelektury.pl/documents/track/editor-proofreading/?published=false' - -# limit rate for ebooks creation -CATALOGUE_CUSTOMPDF_RATE_LIMIT = '1/m' - -# set to 'new' or 'old' to skip time-consuming test -# for TeX morefloats library version -LIBRARIAN_PDF_MOREFLOATS = None - -LATEST_BLOG_POSTS = "http://nowoczesnapolska.org.pl/feed/?cat=-135" diff --git a/wolnelektury/settings/locale.py b/wolnelektury/settings/locale.py deleted file mode 100644 index 5069051f9..000000000 --- a/wolnelektury/settings/locale.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -from os import path -from .paths import PROJECT_DIR - -# If you set this to False, Django will make some optimizations so as not -# to load the internationalization machinery. -USE_I18N = True -USE_L10N = True - -LOCALE_PATHS = [ - path.join(PROJECT_DIR, 'locale-contrib') -] - -# Language code for this installation. All choices can be found here: -# http://www.i18nguy.com/unicode/language-identifiers.html -LANGUAGE_CODE = 'pl' - -gettext = lambda s: s - -LANGUAGES = tuple(sorted([ - ('pl', u'polski'), - ('de', u'Deutsch'), - ('en', u'English'), - ('lt', u'lietuvių'), - ('fr', u'français'), - ('ru', u'русский'), - ('es', u'español'), - ('uk', u'українська'), -# ('jp', u'日本語'), - ('it', u'italiano'), -], key=lambda x: x[0])) diff --git a/wolnelektury/settings/paths.py b/wolnelektury/settings/paths.py deleted file mode 100644 index b3ef30438..000000000 --- a/wolnelektury/settings/paths.py +++ /dev/null @@ -1,3 +0,0 @@ -from os import path - -PROJECT_DIR = path.dirname(path.abspath(path.dirname(__file__))) diff --git a/wolnelektury/settings/static.py b/wolnelektury/settings/static.py deleted file mode 100644 index a5d7bb7c4..000000000 --- a/wolnelektury/settings/static.py +++ /dev/null @@ -1,174 +0,0 @@ -from os import path -from .paths import PROJECT_DIR - -# Absolute path to the directory that holds media. -# Example: "/home/media/media.lawrence.com/" -MEDIA_ROOT = path.join(PROJECT_DIR, '../media/') -STATIC_ROOT = path.join(PROJECT_DIR, '../static/') -SEARCH_INDEX = path.join(PROJECT_DIR, '../search_index/') - -# URL that handles the media served from MEDIA_ROOT. Make sure to use a -# trailing slash if there is a path component (optional in other cases). -# Examples: "http://media.lawrence.com", "http://example.com/media/" -MEDIA_URL = '/media/' -STATIC_URL = '/static/' - -# CSS and JavaScript file groups - -PIPELINE = { - 'STYLESHEETS': { - 'main': { - # styles both for mobile and for big screen - 'source_filenames': [ - 'css/jquery.countdown.css', - - 'sponsors/css/sponsors.css', - - 'uni_form/uni-form.css', - 'uni_form/default.uni-form.css', - - 'css/ui-lightness/jquery-ui-1.8.16.custom.css', - - 'scss/main.scss', - ], - 'output_filename': 'css/compressed/main.css', - }, - 'book': { - 'source_filenames': [ - 'css/master.book.css', - ], - 'output_filename': 'css/compressed/book.css', - }, - 'book_text': { - 'source_filenames': [ - 'scss/book_text.scss', - 'css/new.book.css', - - 'css/master.picture.css', - ], - 'output_filename': 'css/compressed/book_text.css', - }, - 'picture': { - 'source_filenames': [ - 'css/master.book.css', - 'css/master.picture.css', - ], - 'output_filename': 'css/compressed/picture.css', - }, - 'player': { - 'source_filenames': [ - 'jplayer/jplayer.blue.monday.css', - 'player/player.css', - ], - 'output_filename': 'css/compressed/player.css', - }, - 'simple': { - 'source_filenames': ('css/simple.css',), - 'output_filename': 'css/compressed/simple.css', - }, - 'widget': { - 'source_filenames': ('scss/widget.scss',), - 'output_filename': 'css/compressed/widget.css', - }, - }, - 'JAVASCRIPT': { - 'base': { - 'source_filenames': ( - 'js/contrib/jquery.cycle.min.js', - 'js/contrib/jquery.jqmodal.js', - 'js/contrib/jquery.form.js', - 'js/contrib/jquery.countdown.js', 'js/contrib/jquery.countdown-pl.js', - 'js/contrib/jquery.countdown-de.js', 'js/contrib/jquery.countdown-uk.js', - 'js/contrib/jquery.countdown-es.js', 'js/contrib/jquery.countdown-lt.js', - 'js/contrib/jquery.countdown-ru.js', 'js/contrib/jquery.countdown-fr.js', - - 'js/contrib/jquery-ui-1.8.16.custom.min.js', - - 'js/locale.js', - 'js/dialogs.js', - 'js/base.js', - 'pdcounter/pdcounter.js', - 'sponsors/js/sponsors.js', - 'player/openplayer.js', - 'js/search.js', - 'funding/funding.js', - - 'uni_form/uni-form.js', - ), - 'output_filename': 'js/base.min.js', - }, - 'player': { - 'source_filenames': [ - 'jplayer/jquery.jplayer.min.js', - 'jplayer/jplayer.playlist.min.js', - 'player/player.js', - ], - 'output_filename': 'js/player.min.js', - }, - 'book': { - 'source_filenames': [ - 'js/contrib/jquery.eventdelegation.js', - 'js/contrib/jquery.scrollto.js', - 'js/contrib/jquery.highlightfade.js', - 'js/book_text/other.js', - 'js/book.js', - - 'js/contrib/raphael-min.js', - 'js/contrib/progressSpin.min.js', - 'js/picture.js', - ], - 'output_filename': 'js/book.min.js', - }, - 'book_text': { - 'source_filenames': [ - 'js/contrib/jquery.form.js', - 'js/contrib/jquery.jqmodal.js', - 'js/book_text/*.js', - 'js/locale.js', - 'js/dialogs.js', - - 'js/contrib/jquery.highlightfade.js', - 'js/contrib/raphael-min.js', - 'player/openplayer.js', - 'js/contrib/progressSpin.min.js', - 'js/picture.js', - ], - 'output_filename': 'js/book_text.js', - }, - 'book_ie': { - 'source_filenames': ('js/contrib/ierange-m2.js',), - 'output_filename': 'js/book_ie.min.js', - }, - 'widget': { - 'source_filenames': ( - 'js/contrib/jquery.js', - 'js/contrib/jquery-ui-1.8.16.custom.min.js', - 'js/search.js', - 'js/widget_run.js', - ), - 'output_filename': 'js/widget.min.js', - }, - }, - 'CSS_COMPRESSOR': None, - 'JS_COMPRESSOR': 'pipeline.compressors.jsmin.JSMinCompressor', - 'COMPILERS': ( - 'pipeline.compilers.sass.SASSCompiler', - # We could probably use PySCSS instead, - # but they have some serious problems, like: - # https://github.com/Kronuz/pyScss/issues/166 (empty list syntax) - # https://github.com/Kronuz/pyScss/issues/258 (bad @media order) - #'pyscss_compiler.PySCSSCompiler', - ) -} - -#~ STATICFILES_STORAGE = 'fnpdjango.utils.pipeline_storage.GzipPipelineCachedStorage' - -#PIPELINE_PYSCSS_BINARY = '/usr/bin/env pyscss' -#PIPELINE_PYSCSS_ARGUMENTS = '' - - -STATICFILES_FINDERS = [ - 'django.contrib.staticfiles.finders.FileSystemFinder', - 'django.contrib.staticfiles.finders.AppDirectoriesFinder', - 'pipeline.finders.PipelineFinder', -] diff --git a/wolnelektury/urls.py b/wolnelektury/urls.py deleted file mode 100644 index a77a3d1b4..000000000 --- a/wolnelektury/urls.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import include, patterns, url -from django.conf import settings -from django.contrib import admin -from django.views.generic import RedirectView -import wolnelektury_core.views - - -urlpatterns = patterns('wolnelektury_core.views', - url(r'^$', 'main_page', name='main_page'), - url(r'^planowane/$', 'publish_plan', name='publish_plan'), - url(r'^widget\.html$', 'widget', name='widget'), - - url(r'^zegar/$', 'clock', name='clock'), - - # Authentication - url(r'^uzytkownik/$', 'user_settings', name='user_settings'), - url(r'^uzytkownik/login/$', wolnelektury_core.views.LoginFormView(), name='login'), - url(r'^uzytkownik/signup/$', wolnelektury_core.views.RegisterFormView(), name='register'), - url(r'^uzytkownik/logout/$', 'logout_then_redirect', name='logout'), - url(r'^uzytkownik/zaloguj-utworz/$', wolnelektury_core.views.LoginRegisterFormView(), name='login_register'), - - # Includes. - url(r'^latests_blog_posts.html$', - wolnelektury_core.views.latest_blog_posts, - name='latest_blog_posts'), -) - -urlpatterns += patterns('', - url(r'^katalog/', include('catalogue.urls')), - url(r'^opds/', include('opds.urls')), - url(r'^sugestia/', include('suggest.urls')), - url(r'^lesmianator/', include('lesmianator.urls')), - url(r'^przypisy/', include('dictionary.urls')), - url(r'^raporty/', include('reporting.urls')), - url(r'^info/', include('infopages.urls')), - url(r'^ludzie/', include('social.urls')), - url(r'^uzytkownik/', include('allauth.urls')), - url(r'^czekaj/', include('waiter.urls')), - url(r'^wesprzyj/', include('funding.urls')), - url(r'^ankieta/', include('polls.urls')), - url(r'^biblioteki/', include('libraries.urls')), - url(r'^chunks/', include('chunks.urls')), - url(r'^sponsors/', include('sponsors.urls')), - - # Admin panel - url(r'^admin/catalogue/book/import$', 'catalogue.views.import_book', name='import_book'), - url(r'^admin/catalogue/picture/import$', 'picture.views.import_picture', name='import_picture'), - url(r'^admin/doc/', include('django.contrib.admindocs.urls')), - url(r'^admin/', include(admin.site.urls)), - - # API - (r'^api/', include('api.urls')), - # OAIPMH - (r'^oaipmh/', include('oai.urls')), - - url(r'^szukaj/', include('search.urls')), - - # Static files - url(r'^%s(?P.*)$' % settings.MEDIA_URL[1:], 'django.views.static.serve', - {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}), - url(r'^%s(?P.*)$' % settings.STATIC_URL[1:], 'django.views.static.serve', - {'document_root': settings.STATIC_ROOT, 'show_indexes': True}), - url(r'^i18n/', include('django.conf.urls.i18n')), -) - -urlpatterns += patterns('', - # old static pages - redirected - url(r'^1procent/$', RedirectView.as_view( - url='http://nowoczesnapolska.org.pl/wesprzyj_nas/', permanent=True)), - url(r'^epub/$', RedirectView.as_view( - url='/katalog/lektury/', permanent=False)), - url(r'^mozesz-nam-pomoc/$', RedirectView.as_view( - url='/info/mozesz-nam-pomoc', permanent=True)), - url(r'^o-projekcie/$', RedirectView.as_view( - url='/info/o-projekcie', permanent=True)), - url(r'^widget/$', RedirectView.as_view( - url='/info/widget', permanent=True)), - url(r'^wolontariat/$', RedirectView.as_view( - url='/info/mozesz-nam-pomoc/', permanent=False)), -) diff --git a/wolnelektury/utils.py b/wolnelektury/utils.py deleted file mode 100644 index 0c256e5df..000000000 --- a/wolnelektury/utils.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import pytz -from django.utils import timezone -from django.conf import settings - -tz = pytz.timezone(settings.TIME_ZONE) - -def localtime_to_utc(localtime): - return timezone.utc.normalize( - tz.localize(localtime) - ) - -def utc_for_js(dt): - return dt.strftime('%Y/%m/%d %H:%M:%S UTC') diff --git a/wolnelektury/wsgi.py b/wolnelektury/wsgi.py deleted file mode 100644 index d688df00f..000000000 --- a/wolnelektury/wsgi.py +++ /dev/null @@ -1,21 +0,0 @@ -import os -import os.path -import sys - -ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - -# Add apps and lib directories to PYTHONPATH -sys.path = [ - ROOT, - os.path.join(ROOT, 'apps'), - os.path.join(ROOT, 'lib'), - os.path.join(ROOT, 'lib/librarian'), -] + sys.path - - -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "wolnelektury.settings") - -# This application object is used by the development server -# as well as any WSGI server configured to use this file. -from django.core.wsgi import get_wsgi_application -application = get_wsgi_application()