|
9 | 9 | from rest_framework.filters import BaseFilterBackend |
10 | 10 |
|
11 | 11 | from geonode.indexing.models import ResourceIndex |
12 | | -from geonode.metadata.multilang.utils import get_2letters_languages, get_pg_language |
| 12 | +from geonode.metadata.multilang.utils import get_2letters_languages, get_pg_language, get_default_language |
13 | 13 |
|
14 | 14 |
|
15 | 15 | logger = logging.getLogger(__name__) |
@@ -45,18 +45,28 @@ def validate_lang(search_lang): |
45 | 45 | if search_index not in settings.METADATA_INDEXES: |
46 | 46 | raise serializers.ValidationError(f"Unknown index '{search_index}'") |
47 | 47 |
|
48 | | - search_lang = request.query_params.get("search_lang", None) |
49 | | - if search_lang: |
50 | | - search_lang = validate_lang(search_lang) |
51 | | - if not search_lang: |
52 | | - search_lang = get_language_from_request(request)[:2] |
53 | | - search_lang = validate_lang(search_lang) |
54 | | - |
55 | | - lang_filter = Q(lang__isnull=True) |
56 | | - if search_lang: |
57 | | - lang_filter = lang_filter | Q(lang=search_lang) |
58 | | - |
59 | | - pg_lang = get_pg_language(search_lang) |
| 48 | + if any(field in settings.METADATA_INDEXES[search_index] for field in settings.MULTILANG_FIELDS): |
| 49 | + # We have at least one field in the index that is multilang |
| 50 | + |
| 51 | + # first option: get a language as query param |
| 52 | + search_lang = request.query_params.get("search_lang", None) |
| 53 | + if search_lang: |
| 54 | + search_lang = validate_lang(search_lang) |
| 55 | + if not search_lang: |
| 56 | + # 2nd option: check standard config: http headers, cookies |
| 57 | + search_lang = get_language_from_request(request)[:2] |
| 58 | + search_lang = validate_lang(search_lang) |
| 59 | + if not search_lang: |
| 60 | + # fallback: just take the default lang |
| 61 | + logger.info("search language not found, forcing default") |
| 62 | + search_lang = get_default_language() |
| 63 | + |
| 64 | + pg_lang = get_pg_language(search_lang) |
| 65 | + lang_filter = Q(lang=search_lang) |
| 66 | + |
| 67 | + else: # the index has no multilang entry |
| 68 | + pg_lang = get_pg_language(get_default_language()) |
| 69 | + lang_filter = Q(lang__isnull=True) |
60 | 70 |
|
61 | 71 | queryset = queryset.filter( |
62 | 72 | pk__in=Subquery( |
|
0 commit comments