code: def fill_translation_cache(instance):
      
  
      if hasattr(instance, '_translation_cache'):
          # do not refill the cache
          return
      instance._translation_cache = {}
  
      # unsafed instances cannot have translations
      if not instance.pk:
          return
  
      for language_code in get_language_code_list():
          # see if translation for language_code was in the query
          field_alias = get_translated_field_alias('code', language_code)
          if getattr(instance, field_alias, None) is not None:
              field_names = [f.attname for f in instance._meta.translation_model._meta.fields]
  
              # if so, create a translation object and put it in the cache
              field_data = {}
              for fname in field_names:
                  field_data[fname] = getattr(instance,
                                              get_translated_field_alias(fname, language_code))
  
              translation = instance._meta.translation_model(**field_data)
              instance._translation_cache[language_code] = translation
  
      # In some situations an (existing in the DB) object is loaded
      # without using the normal QuerySet.  In such case fallback to
      # loading the translations using a separate query.
  
      # Unfortunately, this is indistinguishable from the situation when
      # an object does not have any translations.  Oh well, we'll have
      # to live with this for the time being.
      if len(instance._translation_cache.keys()) == 0:
          for translation in instance.translations.all():
              instance._translation_cache[translation.language_code] = translation
docs: Fill the translation cache using information received in the
      instance objects as extra fields.
  
      You can not do this in post_init because the extra fields are
      assigned by QuerySet.iterator after model initialization.