Source code for devilry.apps.i18n.utils

import re
from django.utils.translation.trans_real import parse_accept_lang_header
from django.conf import settings

def get_languagecode_from_httpheader(accept_language_header, languagemapping):
    for languagecode , priority in parse_accept_lang_header(accept_language_header): # NOTE: parse_accept_lang_header returns accept_lang sorted by priority
        if languagecode == '*':
            break
        if languagecode in languagemapping:
            return languagecode
    return None


[docs]def get_languagecode(user, accept_language_header=None, languagecodemapping=settings.DEVILRY_I18N_LANGCODEMAPPING, default_languagecode=settings.DEVILRY_I18N_DEFAULT_LANGCODE): """ Get the appropriate language code from the provided information: 1. If the user has a valid languagecode in their preferences, use it. 2. Check the ACCEPT_LANGUAGE HTTP header, and use it as long as parsing it yields a language code that is is ``languagecodemapping``. 3. Return the default_languagecode as the last fallback. As long as ``default_languagecode`` is in ``languagecodemapping``, this function is guaranteed to yield a language code that is present as a key in ``languagecodemapping``. """ if user.is_authenticated(): languagecode = user.get_profile().languagecode if languagecode and languagecode in languagecodemapping: return languagecode if accept_language_header: languagecode = get_languagecode_from_httpheader(accept_language_header, languagecodemapping) if languagecode: return languagecode return default_languagecode
find_all_translatestrings_patt = re.compile(r"""dtranslate\(['"]([a-z._-]+)['"]\)""") def find_all_translatestrings(data): return find_all_translatestrings_patt.findall(data)