2007-10-26 20:08:56 +00:00
|
|
|
tests = """
|
|
|
|
>>> from django.utils.translation.trans_real import parse_accept_lang_header
|
|
|
|
>>> p = parse_accept_lang_header
|
|
|
|
|
2008-02-06 01:04:30 +00:00
|
|
|
#
|
|
|
|
# Testing HTTP header parsing. First, we test that we can parse the values
|
|
|
|
# according to the spec (and that we extract all the pieces in the right order).
|
|
|
|
#
|
|
|
|
|
2007-10-26 20:08:56 +00:00
|
|
|
Good headers.
|
|
|
|
>>> p('de')
|
|
|
|
[('de', 1.0)]
|
|
|
|
>>> p('en-AU')
|
|
|
|
[('en-AU', 1.0)]
|
|
|
|
>>> p('*;q=1.00')
|
|
|
|
[('*', 1.0)]
|
|
|
|
>>> p('en-AU;q=0.123')
|
|
|
|
[('en-AU', 0.123)]
|
|
|
|
>>> p('en-au;q=0.1')
|
|
|
|
[('en-au', 0.10000000000000001)]
|
|
|
|
>>> p('en-au;q=1.0')
|
|
|
|
[('en-au', 1.0)]
|
|
|
|
>>> p('da, en-gb;q=0.25, en;q=0.5')
|
|
|
|
[('da', 1.0), ('en', 0.5), ('en-gb', 0.25)]
|
|
|
|
>>> p('en-au-xx')
|
|
|
|
[('en-au-xx', 1.0)]
|
|
|
|
>>> p('de,en-au;q=0.75,en-us;q=0.5,en;q=0.25,es;q=0.125,fa;q=0.125')
|
|
|
|
[('de', 1.0), ('en-au', 0.75), ('en-us', 0.5), ('en', 0.25), ('es', 0.125), ('fa', 0.125)]
|
|
|
|
>>> p('*')
|
|
|
|
[('*', 1.0)]
|
|
|
|
>>> p('de;q=0.')
|
|
|
|
[('de', 1.0)]
|
|
|
|
>>> p('')
|
|
|
|
[]
|
|
|
|
|
|
|
|
Bad headers; should always return [].
|
|
|
|
>>> p('en-gb;q=1.0000')
|
|
|
|
[]
|
|
|
|
>>> p('en;q=0.1234')
|
|
|
|
[]
|
|
|
|
>>> p('en;q=.2')
|
|
|
|
[]
|
|
|
|
>>> p('abcdefghi-au')
|
|
|
|
[]
|
|
|
|
>>> p('**')
|
|
|
|
[]
|
|
|
|
>>> p('en,,gb')
|
|
|
|
[]
|
|
|
|
>>> p('en-au;q=0.1.0')
|
|
|
|
[]
|
|
|
|
>>> p('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZ,en')
|
|
|
|
[]
|
|
|
|
>>> p('da, en-gb;q=0.8, en;q=0.7,#')
|
|
|
|
[]
|
|
|
|
>>> p('de;q=2.0')
|
|
|
|
[]
|
|
|
|
>>> p('de;q=0.a')
|
|
|
|
[]
|
|
|
|
>>> p('')
|
|
|
|
[]
|
|
|
|
|
2008-02-06 01:04:30 +00:00
|
|
|
#
|
|
|
|
# Now test that we parse a literal HTTP header correctly.
|
|
|
|
#
|
|
|
|
|
|
|
|
>>> from django.utils.translation.trans_real import get_language_from_request
|
|
|
|
>>> g = get_language_from_request
|
|
|
|
>>> from django.http import HttpRequest
|
|
|
|
>>> r = HttpRequest
|
|
|
|
>>> r.COOKIES = {}
|
|
|
|
|
|
|
|
These tests assumes the es, es_AR, pt and pt_BR translations exit in the Django
|
|
|
|
source tree.
|
|
|
|
>>> r.META = {'HTTP_ACCEPT_LANGUAGE': 'pt-br'}
|
|
|
|
>>> g(r)
|
|
|
|
'pt-br'
|
|
|
|
>>> r.META = {'HTTP_ACCEPT_LANGUAGE': 'pt'}
|
|
|
|
>>> g(r)
|
|
|
|
'pt'
|
|
|
|
>>> r.META = {'HTTP_ACCEPT_LANGUAGE': 'es,de'}
|
|
|
|
>>> g(r)
|
|
|
|
'es'
|
|
|
|
>>> r.META = {'HTTP_ACCEPT_LANGUAGE': 'es-ar,de'}
|
|
|
|
>>> g(r)
|
|
|
|
'es-ar'
|
|
|
|
|
|
|
|
This test assumes there won't be a Django translation to a US variation
|
|
|
|
of the Spanish language, a safe assumption. When the user sets it
|
|
|
|
as the preferred language, the main 'es' translation should be selected
|
|
|
|
instead.
|
|
|
|
>>> r.META = {'HTTP_ACCEPT_LANGUAGE': 'es-us'}
|
|
|
|
>>> g(r)
|
|
|
|
'es'
|
|
|
|
|
|
|
|
This tests the following scenario: there isn't a main language (zh)
|
|
|
|
translation of Django but there is a translation to variation (zh_CN)
|
|
|
|
the user sets zh-cn as the preferred language, it should be selected by
|
|
|
|
Django without falling back nor ignoring it.
|
|
|
|
>>> r.META = {'HTTP_ACCEPT_LANGUAGE': 'zh-cn,de'}
|
|
|
|
>>> g(r)
|
|
|
|
'zh-cn'
|
2007-10-26 20:08:56 +00:00
|
|
|
"""
|