Collection of helpers for multilingual websites.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

38 lines
1.5 KiB

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.conf import settings
from django.utils import translation
from haystack import connections
from haystack.constants import DEFAULT_ALIAS
from xapian_backend import \
XapianSearchBackend, XapianSearchQuery, XapianEngine
class MultilingualXapianSearchBackend(XapianSearchBackend):
def update(self, index, iterable, commit=True, language_specific=False):
if not language_specific and self.connection_alias == "default":
current_language = (translation.get_language() or settings.LANGUAGE_CODE)[:2]
for lang_code, lang_name in settings.LANGUAGES:
using = "default_%s" % lang_code
translation.activate(lang_code)
backend = connections[using].get_backend()
backend.update(index, iterable, commit,
language_specific=True)
translation.activate(current_language)
elif language_specific:
super(MultilingualXapianSearchBackend, self).\
update(index, iterable, commit)
class MultilingualXapianSearchQuery(XapianSearchQuery):
def __init__(self, using=DEFAULT_ALIAS):
lang_code = translation.get_language()[:2]
using = "default_%s" % lang_code
super(MultilingualXapianSearchQuery, self).__init__(using)
class MultilingualXapianEngine(XapianEngine):
backend = MultilingualXapianSearchBackend
query = MultilingualXapianSearchQuery