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.
68 lines
2.2 KiB
68 lines
2.2 KiB
# -*- coding: utf-8 -*-
|
|
from settings.models import settings_dict, Setting
|
|
|
|
|
|
from django.conf import settings
|
|
from functions.translate import get_translated_fields
|
|
|
|
def fill_missing_languages(obj):
|
|
"""
|
|
looking for missing languages
|
|
and fill translated fields with first available language
|
|
|
|
uses in post_save signal
|
|
"""
|
|
|
|
# what languages must be
|
|
all_langs = [code for code, lang in settings.LANGUAGES]
|
|
# what languages are
|
|
obj_langs = obj.get_available_languages()
|
|
missing_languages = list(set(all_langs) - set(obj_langs))
|
|
# get first Translation object
|
|
translation = obj.translations.all()[0]
|
|
|
|
fields = get_translated_fields(obj)
|
|
|
|
for code in missing_languages:
|
|
# translate
|
|
obj.translate(code)
|
|
# go through all fields and set value
|
|
for field in fields:
|
|
setattr(obj, field, getattr(translation, field))
|
|
|
|
obj.save()
|
|
|
|
def fill_meta_information(obj):
|
|
"""
|
|
looking for available settings for this object
|
|
and fill empty field with settings rules
|
|
"""
|
|
# return list of settings for this object
|
|
s_list = settings_dict.get(obj.__class__.__name__)
|
|
if s_list:
|
|
|
|
for s in s_list:
|
|
# get Setting model object
|
|
setting = Setting.objects.get(key=s.get('key'))
|
|
field = s.get('field_name')
|
|
|
|
if setting.type != 'transl':
|
|
# simple field
|
|
if getattr(obj, field)=="":
|
|
setattr(obj, field, setting.get_value())
|
|
obj.save()
|
|
else:
|
|
# translated field
|
|
for code, lang in settings.LANGUAGES:
|
|
# get translation object
|
|
tr = obj._meta.translations_model.objects.get(language_code=code, master__id=getattr(obj, 'id'))
|
|
|
|
if getattr(tr, field)=="":
|
|
value = setting.get_value(code)
|
|
try:
|
|
value = value%tr.__dict__
|
|
except KeyError:
|
|
pass
|
|
# ! charfield -> textfield
|
|
setattr(tr, field, value[:250])
|
|
tr.save() |