using a fallback language for translation
This commit is contained in:
parent
6c8deb5f80
commit
30a58473c3
|
|
@ -1,7 +1,7 @@
|
||||||
"""Search indexes filters."""
|
"""Search indexes filters."""
|
||||||
from elasticsearch_dsl.query import Q
|
from elasticsearch_dsl.query import Q
|
||||||
from django_elasticsearch_dsl_drf.filter_backends import SearchFilterBackend
|
from django_elasticsearch_dsl_drf.filter_backends import SearchFilterBackend
|
||||||
from utils.models import get_current_language
|
from utils.models import get_current_locale
|
||||||
|
|
||||||
|
|
||||||
class CustomSearchFilterBackend(SearchFilterBackend):
|
class CustomSearchFilterBackend(SearchFilterBackend):
|
||||||
|
|
@ -12,7 +12,7 @@ class CustomSearchFilterBackend(SearchFilterBackend):
|
||||||
field_name = field
|
field_name = field
|
||||||
if hasattr(view, 'search_fields') and hasattr(view, 'translated_search_fields'):
|
if hasattr(view, 'search_fields') and hasattr(view, 'translated_search_fields'):
|
||||||
if field in view.translated_search_fields:
|
if field in view.translated_search_fields:
|
||||||
field_name = f'{field}.{get_current_language()}'
|
field_name = f'{field}.{get_current_locale()}'
|
||||||
return field_name
|
return field_name
|
||||||
|
|
||||||
def construct_search(self, request, view):
|
def construct_search(self, request, view):
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
"""Search indexes utils."""
|
"""Search indexes utils."""
|
||||||
from django_elasticsearch_dsl import fields
|
from django_elasticsearch_dsl import fields
|
||||||
from utils.models import get_current_language
|
from utils.models import get_current_locale, get_default_locale
|
||||||
|
|
||||||
|
|
||||||
# object field properties
|
# object field properties
|
||||||
|
|
@ -19,4 +19,8 @@ def get_translated_value(value):
|
||||||
field_dict = value.to_dict()
|
field_dict = value.to_dict()
|
||||||
elif isinstance(value, dict):
|
elif isinstance(value, dict):
|
||||||
field_dict = value
|
field_dict = value
|
||||||
return field_dict.get(get_current_language())
|
value = field_dict.get(get_current_locale())
|
||||||
|
# fallback
|
||||||
|
if value is None:
|
||||||
|
value = field_dict.get(get_default_locale())
|
||||||
|
return value
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ from django.contrib.postgres.fields.jsonb import KeyTextTransform
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.html import mark_safe
|
from django.utils.html import mark_safe
|
||||||
from django.utils.translation import ugettext_lazy as _, get_language
|
from django.utils.translation import ugettext_lazy as _, get_language
|
||||||
|
from configuration.models import TranslationSettings
|
||||||
from easy_thumbnails.fields import ThumbnailerImageField
|
from easy_thumbnails.fields import ThumbnailerImageField
|
||||||
from sorl.thumbnail import get_thumbnail
|
from sorl.thumbnail import get_thumbnail
|
||||||
from sorl.thumbnail.fields import ImageField as SORLImageField
|
from sorl.thumbnail.fields import ImageField as SORLImageField
|
||||||
|
|
@ -59,13 +60,26 @@ def to_locale(language):
|
||||||
return language + '-' + country
|
return language + '-' + country
|
||||||
|
|
||||||
|
|
||||||
|
def get_current_locale():
|
||||||
|
"""Get current language."""
|
||||||
|
return to_locale(get_language())
|
||||||
|
|
||||||
|
|
||||||
|
def get_default_locale():
|
||||||
|
return TranslationSettings.get_solo().default_language or \
|
||||||
|
settings.FALLBACK_LOCALE
|
||||||
|
|
||||||
|
|
||||||
def translate_field(self, field_name):
|
def translate_field(self, field_name):
|
||||||
def translate(self):
|
def translate(self):
|
||||||
field = getattr(self, field_name)
|
field = getattr(self, field_name)
|
||||||
if isinstance(field, dict):
|
if isinstance(field, dict):
|
||||||
return field.get(to_locale(get_language()))
|
value = field.get(to_locale(get_language()))
|
||||||
|
# fallback
|
||||||
|
if value is None:
|
||||||
|
value = field.get(get_default_locale())
|
||||||
|
return value
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return translate
|
return translate
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -111,15 +125,10 @@ class TranslatedFieldsMixin:
|
||||||
if self.STR_FIELD_NAME:
|
if self.STR_FIELD_NAME:
|
||||||
field = getattr(self, getattr(self, 'STR_FIELD_NAME'))
|
field = getattr(self, getattr(self, 'STR_FIELD_NAME'))
|
||||||
if isinstance(field, dict):
|
if isinstance(field, dict):
|
||||||
value = field.get(get_current_language())
|
value = field.get(get_current_locale())
|
||||||
return value if value else super(TranslatedFieldsMixin, self).__str__()
|
return value if value else super(TranslatedFieldsMixin, self).__str__()
|
||||||
|
|
||||||
|
|
||||||
def get_current_language():
|
|
||||||
"""Get current language."""
|
|
||||||
return to_locale(get_language())
|
|
||||||
|
|
||||||
|
|
||||||
class OAuthProjectMixin:
|
class OAuthProjectMixin:
|
||||||
"""OAuth2 mixin for project GM"""
|
"""OAuth2 mixin for project GM"""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -488,3 +488,5 @@ MEDIA_LOCATION = 'media'
|
||||||
|
|
||||||
PHONENUMBER_DB_FORMAT = 'NATIONAL'
|
PHONENUMBER_DB_FORMAT = 'NATIONAL'
|
||||||
PHONENUMBER_DEFAULT_REGION = "FR"
|
PHONENUMBER_DEFAULT_REGION = "FR"
|
||||||
|
|
||||||
|
FALLBACK_LOCALE = 'en-GB'
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user