Example #1
0
def test_get_all_supported_languages():
    """
    Test the util.get_all_supported_languages function.
    """
    temp_dir = tempfile.mkdtemp()

    # write a fake CSV file
    transstats = os.path.join(temp_dir, 'transstats.csv')
    ts_file = file(transstats, 'w')
    ts_file.write(('es_AR,564,343,27,60\n'
                   'en_US,564,0,1,0\n'
                   'hr,564,447,17,79\n'
                   'no,564,400,14,70'))
    ts_file.close()

    expected = set(['es_AR', 'en_US', 'hr', 'no'])
    results = util.get_all_supported_languages(transstats)
    assert results == expected

    # make sure it cached the old results
    assert util.CACHED_LANGUAGES_SUPPORTED[transstats] == expected

    # make sure the cache is actually used
    bs_results = set(["the internet", "near space altitude"])
    util.CACHED_LANGUAGES_SUPPORTED[transstats] = bs_results
    results = util.get_all_supported_languages(transstats)
    assert results == bs_results
Example #2
0
def get_target_lang_from_request(request, default_locale='en'):
    request_form = request.GET or request.POST

    if request_form.has_key('lang') and request_form['lang'] != '':
        return locale_to_lower_upper(request_form['lang'])

    try:
        if request.matchdict.has_key('target_lang'):
            target_lang = request.matchdict['target_lang']
        else:
            header_value = request.accept_language.header_value

            if ACCEPT_LANG_CACHE.has_key(header_value):
                return ACCEPT_LANG_CACHE[header_value]

            # clean the header into something we can use
            accept_lang = []
            for part in header_value.split(","):
                try:
                    locale, quality = map(str.strip, part.split(";"))
                    quality = float(quality)
                except ValueError:
                    locale = part.strip()
                    quality = 1
                accept_lang.append((locale_to_lower_upper(locale), quality))

            available = list(get_all_supported_languages())

            def run_matches(accept_lang, available):
                best = -1
                target_lang = None
                for locale, quality in accept_lang:
                    if quality > best and available.count(locale):
                        best = quality
                        target_lang = locale
                return target_lang

            # search for exact matches
            target_lang = run_matches(accept_lang, available)

            if not target_lang:
                # search for near matches
                reduced_accept = [(v.split("_")[0], q) for v, q in accept_lang]
                reduced_available = [i.split("_")[0] for i in available]
                target_lang = run_matches(reduced_accept, reduced_available)

    except AttributeError:
        # header was not defined
        header_value = default_locale
        target_lang = None

    if not target_lang:
        # screw it
        target_lang = default_locale

    try:
        ACCEPT_LANG_CACHE[header_value] = target_lang
    except NameError, e:
        # We didn't set the header_value, so don't try to use it as a key
        pass
Example #3
0
def get_target_lang_from_request(request, default_locale='en'):
    request_form = request.GET or request.POST

    if request_form.has_key('lang') and request_form['lang'] != '':
        return locale_to_lower_upper(request_form['lang'])

    try:
        if request.matchdict.has_key('target_lang'):
            target_lang = request.matchdict['target_lang']
        else:
            header_value = request.accept_language.header_value

            if ACCEPT_LANG_CACHE.has_key(header_value):
                return ACCEPT_LANG_CACHE[header_value]

            # clean the header into something we can use
            accept_lang = []
            for part in header_value.split(","):
                try:
                    locale, quality = map(str.strip, part.split(";"))
                    quality = float(quality)
                except ValueError:
                    locale = part.strip()
                    quality = 1
                accept_lang.append((locale_to_lower_upper(locale), quality))
            
            available = list(get_all_supported_languages())

            def run_matches(accept_lang, available):
                best = -1
                target_lang = None
                for locale, quality in accept_lang:
                    if quality > best and available.count(locale):
                        best = quality
                        target_lang = locale
                return target_lang

            # search for exact matches
            target_lang = run_matches(accept_lang, available)
        
            if not target_lang:
                # search for near matches
                reduced_accept = [(v.split("_")[0], q) for v,q in accept_lang]
                reduced_available = [i.split("_")[0] for i in available]
                target_lang = run_matches(reduced_accept, reduced_available)

    except AttributeError:
        # header was not defined
        header_value = default_locale
        target_lang = None
                              
    if not target_lang:
        # screw it
        target_lang = default_locale

    try:
        ACCEPT_LANG_CACHE[header_value] = target_lang
    except NameError, e:
        # We didn't set the header_value, so don't try to use it as a key
        pass
Example #4
0
def test_get_all_supported_languages():
    """
    Test the util.get_all_supported_languages function.
    """
    temp_dir = tempfile.mkdtemp()

    # write a fake CSV file
    transstats = os.path.join(temp_dir, "transstats.csv")
    ts_file = file(transstats, "w")
    ts_file.write(("es_AR,564,343,27,60\n" "en_US,564,0,1,0\n" "hr,564,447,17,79\n" "no,564,400,14,70"))
    ts_file.close()

    expected = set(["es_AR", "en_US", "hr", "no"])
    results = util.get_all_supported_languages(transstats)
    assert results == expected

    # make sure it cached the old results
    assert util.CACHED_LANGUAGES_SUPPORTED[transstats] == expected

    # make sure the cache is actually used
    bs_results = set(["the internet", "near space altitude"])
    util.CACHED_LANGUAGES_SUPPORTED[transstats] = bs_results
    results = util.get_all_supported_languages(transstats)
    assert results == bs_results