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.
39 lines
1.5 KiB
39 lines
1.5 KiB
8 years ago
|
# -*- 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
|