#23689: Django detects HTTP Accept-Language header in case-sensitive manner
-------------------------------------+-------------------------------------
     Reporter:  wayneye              |                    Owner:  nobody
         Type:  Bug                  |                   Status:  closed
    Component:                       |                  Version:  1.7
  Internationalization               |
     Severity:  Normal               |               Resolution:  needsinfo
     Keywords:                       |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  1                    |                    UI/UX:  0
-------------------------------------+-------------------------------------

Comment (by Daniel Samuels):

 I've just hit this same problem today, here's some example code:

 views.py:
 {{{#!python
 class ExampleView(TemplateView):
     template_name = 'example.html'

     def get_context_data(self, **kwargs: Any) -> Dict[str, Any]:
         context = super().get_context_data(**kwargs)

         context['language_code'] = translation.get_language()
         #        ^-- should be pt-BR, but is pt
         return context
 }}}

 test_views.py
 {{{#!python
 def test_example_view(db, client):
     language_code = 'pt-BR'
     resp = client.get(reverse('example'),
 HTTP_ACCEPT_LANGUAGE=language_code)
     assert resp.context_data['language_code'] == language_code
     # ^-- AssertionError: pt-BR != pt
 }}}

 The code path that's going wrong is:

 * `LocaleMiddleware.process_request` calls
 `translation.get_language_from_request`
 * `get_language_from_request` calls `parse_accept_lang_header` which turns
 `pt-BR` ito `pt-br`
 * `get_language_from_request` then calls `get_supported_language_variant`,
 passing `pt-br` as the `lang_code`
 * `get_supported_language_variant` then runs `if code in
 supported_lang_codes`, which is `False` (note that `'pt-BR' in
 supported_lang_codes == True`)
 * `get_supported_language_variant` then returns the fallback lang_code
 `pt`

-- 
Ticket URL: <https://code.djangoproject.com/ticket/23689#comment:3>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/01070181628eb09e-bc7445ca-dc2a-4ddd-b9c7-7ee6cc91f4cd-000000%40eu-central-1.amazonses.com.

Reply via email to