diff --git a/heat/common/wsgi.py b/heat/common/wsgi.py index 10fe6ad8a01..b1c04fdbded 100644 --- a/heat/common/wsgi.py +++ b/heat/common/wsgi.py @@ -426,10 +426,15 @@ def get_content_type(self, allowed_content_types): return content_type def best_match_language(self): - """Determine language for returned response.""" + """Determines best available locale from the Accept-Language header. + + :returns: the best language match or None if the 'Accept-Language' + header was not available in the request. + """ + if not self.accept_language: + return None all_languages = gettextutils.get_available_languages('heat') - return self.accept_language.best_match(all_languages, - default_match='en_US') + return self.accept_language.best_match(all_languages) def is_json_content_type(request): diff --git a/heat/tests/test_wsgi.py b/heat/tests/test_wsgi.py index 4db0c63180a..01d947725e8 100644 --- a/heat/tests/test_wsgi.py +++ b/heat/tests/test_wsgi.py @@ -80,19 +80,25 @@ def test_content_type_accept_default(self): self.assertEqual(result, "application/json") def test_best_match_language(self): - # Here we test that we are actually invoking language negotiation - # by webop and also that the default locale always available is en-US + # Test that we are actually invoking language negotiation by webop request = wsgi.Request.blank('/') accepted = 'unknown-lang' request.headers = {'Accept-Language': accepted} def fake_best_match(self, offers, default_match=None): - return default_match + # Best match on an unknown locale returns None + return None self.stubs.SmartSet(request.accept_language, 'best_match', fake_best_match) - self.assertEqual(request.best_match_language(), 'en_US') + self.assertEqual(request.best_match_language(), None) + + # If Accept-Language is missing or empty, match should be None + request.headers = {'Accept-Language': ''} + self.assertEqual(request.best_match_language(), None) + request.headers.pop('Accept-Language') + self.assertEqual(request.best_match_language(), None) class ResourceTest(HeatTestCase):