using a fallback language for translation

This commit is contained in:
evgeniy-st 2019-10-31 16:11:46 +03:00
parent 6c8deb5f80
commit 30a58473c3
4 changed files with 27 additions and 12 deletions

View File

@ -1,7 +1,7 @@
"""Search indexes filters."""
from elasticsearch_dsl.query import Q
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):
@ -12,7 +12,7 @@ class CustomSearchFilterBackend(SearchFilterBackend):
field_name = field
if hasattr(view, 'search_fields') and hasattr(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
def construct_search(self, request, view):

View File

@ -1,6 +1,6 @@
"""Search indexes utils."""
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
@ -19,4 +19,8 @@ def get_translated_value(value):
field_dict = value.to_dict()
elif isinstance(value, dict):
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

View File

@ -10,6 +10,7 @@ from django.contrib.postgres.fields.jsonb import KeyTextTransform
from django.utils import timezone
from django.utils.html import mark_safe
from django.utils.translation import ugettext_lazy as _, get_language
from configuration.models import TranslationSettings
from easy_thumbnails.fields import ThumbnailerImageField
from sorl.thumbnail import get_thumbnail
from sorl.thumbnail.fields import ImageField as SORLImageField
@ -59,13 +60,26 @@ def to_locale(language):
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(self):
field = getattr(self, field_name)
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 translate
@ -111,15 +125,10 @@ class TranslatedFieldsMixin:
if self.STR_FIELD_NAME:
field = getattr(self, getattr(self, 'STR_FIELD_NAME'))
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__()
def get_current_language():
"""Get current language."""
return to_locale(get_language())
class OAuthProjectMixin:
"""OAuth2 mixin for project GM"""

View File

@ -488,3 +488,5 @@ MEDIA_LOCATION = 'media'
PHONENUMBER_DB_FORMAT = 'NATIONAL'
PHONENUMBER_DEFAULT_REGION = "FR"
FALLBACK_LOCALE = 'en-GB'