X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/f7179cd5fbb16e2454f1a193a213f6607592e22c..928238fa50be76c41c98d42d040d969ff14b5c37:/apps/catalogue/views.py diff --git a/apps/catalogue/views.py b/apps/catalogue/views.py index 0a048af9b..07fb7d349 100644 --- a/apps/catalogue/views.py +++ b/apps/catalogue/views.py @@ -7,6 +7,7 @@ import zipfile import sys import pprint import traceback +import re from django.conf import settings from django.template import RequestContext @@ -24,6 +25,7 @@ from django.utils.functional import Promise from django.utils.encoding import force_unicode from django.utils.http import urlquote_plus from django.views.decorators import cache +from django.utils.translation import ugettext as _ from catalogue import models from catalogue import forms @@ -171,16 +173,24 @@ def book_text(request, slug): # ========== # = Search = # ========== + +def _no_diacritics_regexp(query): + """ returns a regexp for searching for a query without diacritics + + should be locale-aware """ + names = {'a':u'Ä ', 'c':u'Ä', 'e':u'Ä', 'l': u'Å', 'n':u'Å', 'o':u'ó', 's':u'Å', 'z':u'ź|ż'} + def repl(m): + l = m.group() + return "(%s|%s)" % (l, names[l]) + return re.sub('[%s]'%(''.join(names.keys())), repl, query) + def _word_starts_with(name, prefix): """returns a Q object getting models having `name` contain a word starting with `prefix` """ kwargs = {} if settings.DATABASE_ENGINE in ('mysql', 'postgresql_psycopg2', 'postgresql'): - # we must escape `prefix` so that it only matches literally - for special in r'\^$.*+?|(){}[]': - prefix = prefix.replace(special, '\\' + special) - + prefix = _no_diacritics_regexp(re.escape(prefix)) # we could use a [[:<:]] (word start), # but we want both `xy` and `(xy` to catch `(xyz)` kwargs['%s__iregex' % name] = u"(^|[^[:alpha:]])%s" % prefix @@ -295,7 +305,7 @@ def book_sets(request, slug): book_sets = book.tags.filter(category='set', user=request.user) if not request.user.is_authenticated(): - return HttpResponse('
Aby zarzÄ dzaÄ swoimi póÅkami, musisz siÄ zalogowaÄ.
') + return HttpResponse(_('To maintain your shelves you need to be logged in.
')) if request.method == 'POST': form = forms.ObjectSetsForm(book, request.user, request.POST) @@ -313,7 +323,7 @@ def book_sets(request, slug): book.tags = new_shelves + list(book.tags.filter(~Q(category='set') | ~Q(user=request.user))) if request.is_ajax(): - return HttpResponse('PóÅki zostaÅy zapisane.
') + return HttpResponse(_('Shelves were sucessfully saved.
')) else: return HttpResponseRedirect('/') else: @@ -337,9 +347,9 @@ def remove_from_shelf(request, shelf, book): shelf.book_count -= 1 shelf.save() - return HttpResponse('UsuniÄto') + return HttpResponse(_('Book was successfully removed from the shelf')) else: - return HttpResponse('KsiÄ Å¼ki nie ma na póÅce') + return HttpResponse(_('This book is not on the shelf')) def collect_books(books): @@ -372,7 +382,7 @@ def download_shelf(request, slug): formats = ['pdf', 'odt', 'txt', 'mp3', 'ogg'] # Create a ZIP archive - temp = temp = tempfile.TemporaryFile() + temp = tempfile.TemporaryFile() archive = zipfile.ZipFile(temp, 'w') for book in collect_books(models.Book.tagged.with_all(shelf)): @@ -435,7 +445,7 @@ def new_set(request): new_set = new_set_form.save(request.user) if request.is_ajax(): - return HttpResponse(u'PóÅka %s zostaÅa utworzona
' % new_set) + return HttpResponse(_('Shelf %s was successfully created
') % new_set) else: return HttpResponseRedirect('/') @@ -450,7 +460,7 @@ def delete_shelf(request, slug): user_set.delete() if request.is_ajax(): - return HttpResponse(u'PóÅka %s zostaÅa usuniÄta
' % user_set.name) + return HttpResponse(_('Shelf %s was successfully removed
') % user_set.name) else: return HttpResponseRedirect('/') @@ -509,10 +519,10 @@ def import_book(request): info = sys.exc_info() exception = pprint.pformat(info[1]) tb = '\n'.join(traceback.format_tb(info[2])) - return HttpResponse("An error occurred: %s\n\n%s" % (exception, tb), mimetype='text/plain') - return HttpResponse("Book imported successfully") + return HttpResponse(_("An error occurred: %s\n\n%s") % (exception, tb), mimetype='text/plain') + return HttpResponse(_("Book imported successfully")) else: - return HttpResponse("Error importing file: %r" % book_import_form.errors) + return HttpResponse(_("Error importing file: %r") % book_import_form.errors) @@ -521,4 +531,4 @@ def clock(request): in a format suitable for Date.parse() """ from datetime import datetime - return HttpResponse(datetime.now().strftime('%Y/%m/%d %H:%M:%S')) + return HttpResponse(datetime.now().strftime('%Y/%m/%d %H:%M:%S')) \ No newline at end of file