[fix] get correct locale with country from browser

Some of our interface locales include uppercase country codes,
which are separated by `_` instead of the more common `-`.
Also, a browser's `Accept-Language` header could be in lowercase.

This commit attempts to normalize those cases so a browser's
language+country codes can better match with our locales.

This solution assumes that our UI locales have nothing more than
language and optionally country. If we ever add a script specific
locale like `zh-Hant-TW` this would have to change to accomodate
that, but the idea would be pretty much the same as this fix.
This commit is contained in:
Marc Abonce Seguin 2021-02-03 01:02:21 -07:00
parent 321788f14a
commit c937a9e85f
2 changed files with 20 additions and 5 deletions

View file

@ -198,6 +198,20 @@ class ViewsTestCase(SearxTestCase):
result.data
)
def test_browser_locale(self):
result = self.app.get('/preferences', headers={'Accept-Language': 'zh-tw;q=0.8'})
self.assertEqual(result.status_code, 200)
self.assertIn(
b'<option value="zh_TW" selected="selected">',
result.data,
'Interface locale ignored browser preference.'
)
self.assertIn(
b'<option value="zh-TW" selected="selected">',
result.data,
'Search language ignored browser preference.'
)
def test_stats(self):
result = self.app.get('/stats')
self.assertEqual(result.status_code, 200)