Retrieve a list (not queryset) of languages from a list of codes
        The language objects retrieved by culture code will be annotated with the country and
        culture code.
        :param codes: list of strings that can be either iso codes (any of the three) or culture
        codes.
        :param sort: str name_en|name_native|sort_code
        :return: a list of languages

def filter_by_codes(self, codes, sort='name_en'):
        """
        Retrieve a list (not queryset) of languages from a list of codes
        The language objects retrieved by culture code will be annotated with the country and
        culture code.
        :param codes: list of strings that can be either iso codes (any of the three) or culture
        codes.
        :param sort: str name_en|name_native|sort_code
        :return: a list of languages
        """
        lang_codes = []
        cc_codes = []
        for code in codes:
            if any(x in code for x in ('_', '-')):
                cc_codes.append(code.replace('_', '-'))
            else:
                lang_codes.append(code)

        cc_langs = CultureCode.objects.filter(code__in=cc_codes).as_languages()

        qs = self.get_queryset().filter(Q(iso_639_1__in=lang_codes) |
                                        Q(iso_639_2T__in=lang_codes) |
                                        Q(iso_639_2B__in=lang_codes) |
                                        Q(iso_639_3__in=lang_codes))
        langs = list(qs)
        langs.extend(cc_langs)
        langs.sort(key=lambda x: getattr(x, sort))
        return langs