From 2672a1e24ed0ad0c189110eb04ddcba78cd48be5 Mon Sep 17 00:00:00 2001 From: "Luis A. Garcia" Date: Tue, 20 Aug 2013 16:47:38 +0000 Subject: [PATCH] Use system locale when Accept-Language header is not provided Remove en_US as the default language when no header is provided, and use None instead. Upon translation None will be defaulted to system as it was before the translation changes. Fixes bug: #1214476 Change-Id: I0fe22c526710e69ae0731e7d0b42170e6f3a8523 --- cinder/api/openstack/wsgi.py | 11 ++++++++--- cinder/tests/api/openstack/test_wsgi.py | 13 +++++++++---- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/cinder/api/openstack/wsgi.py b/cinder/api/openstack/wsgi.py index 89a4356ae..046a5601d 100644 --- a/cinder/api/openstack/wsgi.py +++ b/cinder/api/openstack/wsgi.py @@ -104,10 +104,15 @@ class Request(webob.Request): return content_type def best_match_language(self): - """Determines best available locale from the Accept-Language header.""" + """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('cinder') - return self.accept_language.best_match(all_languages, - default_match='en_US') + return self.accept_language.best_match(all_languages) class ActionDispatcher(object): diff --git a/cinder/tests/api/openstack/test_wsgi.py b/cinder/tests/api/openstack/test_wsgi.py index 0413a842e..69161189a 100644 --- a/cinder/tests/api/openstack/test_wsgi.py +++ b/cinder/tests/api/openstack/test_wsgi.py @@ -88,19 +88,24 @@ class RequestTest(test.TestCase): self.assertEqual(result, "application/json") def test_best_match_language(self): - # Here we test that we are actually invoking language negotiation - # by webob and also that the default locale always available is en-US + # Test that we are actually invoking language negotiation by webob request = wsgi.Request.blank('/') accepted = 'unknown-lang' request.headers = {'Accept-Language': accepted} def fake_best_match(self, offers, default_match=None): - return default_match + # Match would return None, if requested lang is not found + 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 not included 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 ActionDispatcherTest(test.TestCase): -- 2.45.2