def translate_item_ids(self, item_ids, language, is_nested=None):
        if is_nested is None:
            def is_nested_fun(x):
                return True
        elif isinstance(is_nested, bool):
            def is_nested_fun(x):
                return is_nested
        else:
            is_nested_fun = is_nested
        all_item_type_ids = ItemType.objects.get_all_item_type_ids()
        groupped = proso.list.group_by(item_ids, by=lambda item_id: all_item_type_ids[item_id])
        result = {}
        for item_type_id, items in groupped.items():
            with timeit('translating item type {}'.format(item_type_id)):
                item_type = ItemType.objects.get_all_types()[item_type_id]
                model = ItemType.objects.get_model(item_type_id)
                kwargs = {'{}__in'.format(item_type['foreign_key']): items}
                if 'language' in item_type:
                    kwargs[item_type['language']] = language
                if any([not is_nested_fun(item_id) for item_id in items]) and hasattr(model.objects, 'prepare_related'):
                    objs = model.objects.prepare_related()
                elif hasattr(model.objects, 'prepare'):
                    objs = model.objects.prepare()
                else:
                    objs = model.objects
                for obj in objs.filter(**kwargs):
                    item_id = getattr(obj, item_type['foreign_key'])
                    result[item_id] = obj.to_json(nested=is_nested_fun(item_id))
        return result