Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 1e35c3cc authored by Alexandre Flament's avatar Alexandre Flament Committed by GitHub
Browse files

Merge pull request #2531 from MarcAbonce/fix-browser-locale

[fix] Get correct locale with country from browser
parents 321788f1 c937a9e8
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -142,6 +142,7 @@ babel = Babel(app)

rtl_locales = ['ar', 'arc', 'bcc', 'bqi', 'ckb', 'dv', 'fa', 'fa_IR', 'glk', 'he',
               'ku', 'mzn', 'pnb', 'ps', 'sd', 'ug', 'ur', 'yi']
ui_locale_codes = [l.replace('_', '-') for l in settings['locales'].keys()]

# used when translating category names
_category_names = (gettext('files'),
@@ -175,6 +176,9 @@ def _get_browser_or_settings_language(request, lang_list):
    for lang in request.headers.get("Accept-Language", "en").split(","):
        if ';' in lang:
            lang = lang.split(';')[0]
        if '-' in lang:
            lang_parts = lang.split('-')
            lang = "{}-{}".format(lang_parts[0], lang_parts[-1].upper())
        locale = match_language(lang, lang_list, fallback=None)
        if locale is not None:
            return locale
@@ -194,13 +198,10 @@ def get_locale():
        locale_source = 'preferences'
    else:
        # use local from the browser
        locale = _get_browser_or_settings_language(request, settings['locales'].keys())
        locale = _get_browser_or_settings_language(request, ui_locale_codes)
        locale = locale.replace('-', '_')
        locale_source = 'browser'

    #
    if locale == 'zh_TW':
        locale = 'zh_Hant_TW'

    # see _get_translations function
    # and https://github.com/searx/searx/pull/1863
    if locale == 'oc':
+14 −0
Original line number Diff line number Diff line
@@ -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)