Browse Source

searx.locales: improve support for languages not supported by babel

* refactor get_translations() to rely on ADDITIONAL_TRANSLATIONS and LOCALE_BEST_MATCH
* update RTL_LOCALES for languages in ADDITIONAL_TRANSLATIONS
Alexandre FLAMENT 2 years ago
parent
commit
20d951fc5c
1 changed files with 10 additions and 9 deletions
  1. 10 9
      searx/locales.py

+ 10 - 9
searx/locales.py

@@ -80,15 +80,11 @@ def localeselector():
 
 def get_translations():
     """Monkey patch of :py:obj:`flask_babel.get_translations`"""
-    if has_request_context() and flask.request.form.get('use-translation') == 'oc':
-        babel_ext = flask_babel.current_app.extensions['babel']
-        return Translations.load(next(babel_ext.translation_directories), 'oc')
-    if has_request_context() and flask.request.form.get('use-translation') == 'szl':
-        babel_ext = flask_babel.current_app.extensions['babel']
-        return Translations.load(next(babel_ext.translation_directories), 'szl')
-    if has_request_context() and flask.request.form.get('use-translation') == 'pap':
-        babel_ext = flask_babel.current_app.extensions['babel']
-        return Translations.load(next(babel_ext.translation_directories), 'pap')
+    if has_request_context():
+        use_translation = flask.request.form.get('use-translation')
+        if use_translation in ADDITIONAL_TRANSLATIONS:
+            babel_ext = flask_babel.current_app.extensions['babel']
+            return Translations.load(next(babel_ext.translation_directories), use_translation)
     return _flask_babel_get_translations()
 
 
@@ -136,13 +132,18 @@ def locales_initialize(directory=None):
     flask_babel.get_translations = get_translations
 
     for tag, descr in ADDITIONAL_TRANSLATIONS.items():
+        locale = Locale.parse(LOCALE_BEST_MATCH[tag], sep='-')
         LOCALE_NAMES[tag] = descr
+        if locale.text_direction == 'rtl':
+            RTL_LOCALES.add(tag)
 
     for tag in LOCALE_BEST_MATCH:
         descr = LOCALE_NAMES.get(tag)
         if not descr:
             locale = Locale.parse(tag, sep='-')
             LOCALE_NAMES[tag] = get_locale_descr(locale, tag.replace('-', '_'))
+            if locale.text_direction == 'rtl':
+                RTL_LOCALES.add(tag)
 
     for dirname in sorted(os.listdir(directory)):
         # Based on https://flask-babel.tkte.ch/_modules/flask_babel.html#Babel.list_translations