From 378317b338ad950e0d28cf898963adbdc8906088 Mon Sep 17 00:00:00 2001 From: Monty Date: Wed, 2 Mar 2022 17:36:02 +0100 Subject: [PATCH] Update update_languages.py add flags --- searx/languages.py | 132 +++++++++--------- searx/query.py | 2 +- searx/templates/simple/filters/languages.html | 4 +- searx/templates/simple/preferences.html | 4 +- searxng_extra/update/update_languages.py | 95 ++++++++++++- 5 files changed, 159 insertions(+), 78 deletions(-) diff --git a/searx/languages.py b/searx/languages.py index e83f3b878..2e9fcf163 100644 --- a/searx/languages.py +++ b/searx/languages.py @@ -2,70 +2,70 @@ # list of language codes # this file is generated automatically by utils/fetch_languages.py language_codes = ( - ('af-ZA', 'Afrikaans', '', 'Afrikaans'), - ('ar-EG', 'العربية', '', 'Arabic'), - ('be-BY', 'Беларуская', '', 'Belarusian'), - ('bg-BG', 'Български', '', 'Bulgarian'), - ('ca-ES', 'Català', '', 'Catalan'), - ('cs-CZ', 'Čeština', '', 'Czech'), - ('da-DK', 'Dansk', '', 'Danish'), - ('de', 'Deutsch', '', 'German'), - ('de-AT', 'Deutsch', 'Österreich', 'German'), - ('de-CH', 'Deutsch', 'Schweiz', 'German'), - ('de-DE', 'Deutsch', 'Deutschland', 'German'), - ('el-GR', 'Ελληνικά', '', 'Greek'), - ('en', 'English', '', 'English'), - ('en-AU', 'English', 'Australia', 'English'), - ('en-CA', 'English', 'Canada', 'English'), - ('en-GB', 'English', 'United Kingdom', 'English'), - ('en-IE', 'English', 'Ireland', 'English'), - ('en-MY', 'English', 'Malaysia', 'English'), - ('en-NZ', 'English', 'New Zealand', 'English'), - ('en-US', 'English', 'United States', 'English'), - ('es', 'Español', '', 'Spanish'), - ('es-AR', 'Español', 'Argentina', 'Spanish'), - ('es-CL', 'Español', 'Chile', 'Spanish'), - ('es-ES', 'Español', 'España', 'Spanish'), - ('es-MX', 'Español', 'México', 'Spanish'), - ('et-EE', 'Eesti', '', 'Estonian'), - ('fa-IR', 'فارسی', '', 'Persian'), - ('fi-FI', 'Suomi', '', 'Finnish'), - ('fr', 'Français', '', 'French'), - ('fr-BE', 'Français', 'Belgique', 'French'), - ('fr-CA', 'Français', 'Canada', 'French'), - ('fr-CH', 'Français', 'Suisse', 'French'), - ('fr-FR', 'Français', 'France', 'French'), - ('he-IL', 'עברית', '', 'Hebrew'), - ('hi-IN', 'हिन्दी', '', 'Hindi'), - ('hr-HR', 'Hrvatski', '', 'Croatian'), - ('hu-HU', 'Magyar', '', 'Hungarian'), - ('id-ID', 'Indonesia', '', 'Indonesian'), - ('is-IS', 'Íslenska', '', 'Icelandic'), - ('it-IT', 'Italiano', '', 'Italian'), - ('ja-JP', '日本語', '', 'Japanese'), - ('ko-KR', '한국어', '', 'Korean'), - ('lt-LT', 'Lietuvių', '', 'Lithuanian'), - ('lv-LV', 'Latviešu', '', 'Latvian'), - ('nl', 'Nederlands', '', 'Dutch'), - ('nl-BE', 'Nederlands', 'België', 'Dutch'), - ('nl-NL', 'Nederlands', 'Nederland', 'Dutch'), - ('pl-PL', 'Polski', '', 'Polish'), - ('pt', 'Português', '', 'Portuguese'), - ('pt-BR', 'Português', 'Brasil', 'Portuguese'), - ('pt-PT', 'Português', 'Portugal', 'Portuguese'), - ('ro-RO', 'Română', '', 'Romanian'), - ('ru-RU', 'Русский', '', 'Russian'), - ('sk-SK', 'Slovenčina', '', 'Slovak'), - ('sl-SI', 'Slovenščina', '', 'Slovenian'), - ('sr-RS', 'Српски', '', 'Serbian'), - ('sv-SE', 'Svenska', '', 'Swedish'), - ('sw-TZ', 'Kiswahili', '', 'Swahili'), - ('th-TH', 'ไทย', '', 'Thai'), - ('tr-TR', 'Türkçe', '', 'Turkish'), - ('uk-UA', 'Українська', '', 'Ukrainian'), - ('vi-VN', 'Tiếng Việt', '', 'Vietnamese'), - ('zh', '中文', '', 'Chinese'), - ('zh-CN', '中文', '中国', 'Chinese'), - ('zh-HK', '中文', '中國香港特別行政區', 'Chinese'), - ('zh-TW', '中文', '台灣', 'Chinese'), + ('af-ZA', 'Afrikaans', '', 'Afrikaans', ''), + ('ar-EG', 'العربية', '', 'Arabic', '🇸🇦'), + ('be-BY', 'Беларуская', '', 'Belarusian', '🇧🇾'), + ('bg-BG', 'Български', '', 'Bulgarian', '🇧🇬'), + ('ca-ES', 'Català', '', 'Catalan', ''), + ('cs-CZ', 'Čeština', '', 'Czech', '🇨🇿'), + ('da-DK', 'Dansk', '', 'Danish', '🇩🇰'), + ('de', 'Deutsch', '', 'German', '🇩🇪'), + ('de-AT', 'Deutsch', 'Österreich', 'German', '🇦🇹'), + ('de-CH', 'Deutsch', 'Schweiz', 'German', '🇨🇭'), + ('de-DE', 'Deutsch', 'Deutschland', 'German', '🇩🇪'), + ('el-GR', 'Ελληνικά', '', 'Greek', '🇬🇷'), + ('en', 'English', '', 'English', '🇬🇧'), + ('en-AU', 'English', 'Australia', 'English', '🇦🇺'), + ('en-CA', 'English', 'Canada', 'English', '🇨🇦'), + ('en-GB', 'English', 'United Kingdom', 'English', '🇬🇧'), + ('en-IE', 'English', 'Ireland', 'English', '🇮🇪'), + ('en-MY', 'English', 'Malaysia', 'English', '🇲🇾'), + ('en-NZ', 'English', 'New Zealand', 'English', '🇳🇿'), + ('en-US', 'English', 'United States', 'English', '🇺🇸'), + ('es', 'Español', '', 'Spanish', '🇪🇸'), + ('es-AR', 'Español', 'Argentina', 'Spanish', '🇦🇷'), + ('es-CL', 'Español', 'Chile', 'Spanish', '🇨🇱'), + ('es-ES', 'Español', 'España', 'Spanish', '🇪🇸'), + ('es-MX', 'Español', 'México', 'Spanish', '🇲🇽'), + ('et-EE', 'Eesti', '', 'Estonian', '🇪🇪'), + ('fa-IR', 'فارسی', '', 'Persian', '🇮🇷'), + ('fi-FI', 'Suomi', '', 'Finnish', '🇫🇮'), + ('fr', 'Français', '', 'French', '🇫🇷'), + ('fr-BE', 'Français', 'Belgique', 'French', '🇧🇪'), + ('fr-CA', 'Français', 'Canada', 'French', '🇨🇦'), + ('fr-CH', 'Français', 'Suisse', 'French', '🇨🇭'), + ('fr-FR', 'Français', 'France', 'French', '🇫🇷'), + ('he-IL', 'עברית', '', 'Hebrew', '🇮🇱'), + ('hi-IN', 'हिन्दी', '', 'Hindi', '🇮🇳'), + ('hr-HR', 'Hrvatski', '', 'Croatian', '🇭🇷'), + ('hu-HU', 'Magyar', '', 'Hungarian', '🇭🇺'), + ('id-ID', 'Indonesia', '', 'Indonesian', '🇮🇩'), + ('is-IS', 'Íslenska', '', 'Icelandic', '🇮🇸'), + ('it-IT', 'Italiano', '', 'Italian', '🇮🇹'), + ('ja-JP', '日本語', '', 'Japanese', '🇯🇵'), + ('ko-KR', '한국어', '', 'Korean', '🇰🇷'), + ('lt-LT', 'Lietuvių', '', 'Lithuanian', '🇱🇹'), + ('lv-LV', 'Latviešu', '', 'Latvian', '🇱🇻'), + ('nl', 'Nederlands', '', 'Dutch', '🇳🇱'), + ('nl-BE', 'Nederlands', 'België', 'Dutch', '🇧🇪'), + ('nl-NL', 'Nederlands', 'Nederland', 'Dutch', '🇳🇱'), + ('pl-PL', 'Polski', '', 'Polish', '🇵🇱'), + ('pt', 'Português', '', 'Portuguese', '🇵🇹'), + ('pt-BR', 'Português', 'Brasil', 'Portuguese', '🇧🇷'), + ('pt-PT', 'Português', 'Portugal', 'Portuguese', '🇵🇹'), + ('ro-RO', 'Română', '', 'Romanian', '🇷🇴'), + ('ru-RU', 'Русский', '', 'Russian', '🇷🇺'), + ('sk-SK', 'Slovenčina', '', 'Slovak', '🇸🇰'), + ('sl-SI', 'Slovenščina', '', 'Slovenian', '🇸🇮'), + ('sr-RS', 'Српски', '', 'Serbian', '🇷🇸'), + ('sv-SE', 'Svenska', '', 'Swedish', '🇸🇪'), + ('sw-TZ', 'Kiswahili', '', 'Swahili', ''), + ('th-TH', 'ไทย', '', 'Thai', '🇹🇭'), + ('tr-TR', 'Türkçe', '', 'Turkish', '🇹🇷'), + ('uk-UA', 'Українська', '', 'Ukrainian', '🇺🇦'), + ('vi-VN', 'Tiếng Việt', '', 'Vietnamese', '🇻🇳'), + ('zh', '中文', '', 'Chinese', '🇨🇳'), + ('zh-CN', '中文', '中国', 'Chinese', '🇨🇳'), + ('zh-HK', '中文', '中國香港特別行政區', 'Chinese', '🇭🇰'), + ('zh-TW', '中文', '台灣', 'Chinese', '🇹🇼'), ) diff --git a/searx/query.py b/searx/query.py index f5f628823..c69c5ca0e 100644 --- a/searx/query.py +++ b/searx/query.py @@ -128,7 +128,7 @@ class LanguageParser(QueryPartParser): for lc in language_codes: if lc[0] not in settings['search']['languages']: continue - lang_id, lang_name, country, english_name = map(str.lower, lc) + lang_id, lang_name, country, english_name, flag = map(str.lower, lc) # check if query starts with language-id if lang_id.startswith(value): diff --git a/searx/templates/simple/filters/languages.html b/searx/templates/simple/filters/languages.html index 710c18c92..e9797a6af 100644 --- a/searx/templates/simple/filters/languages.html +++ b/searx/templates/simple/filters/languages.html @@ -1,8 +1,8 @@ diff --git a/searx/templates/simple/preferences.html b/searx/templates/simple/preferences.html index 275a53bf7..6d3b27fd2 100644 --- a/searx/templates/simple/preferences.html +++ b/searx/templates/simple/preferences.html @@ -116,8 +116,8 @@

{{- '' -}} {{- '' -}}

diff --git a/searxng_extra/update/update_languages.py b/searxng_extra/update/update_languages.py index 754180c47..dc13e4347 100755 --- a/searxng_extra/update/update_languages.py +++ b/searxng_extra/update/update_languages.py @@ -100,6 +100,7 @@ def join_language_lists(engines_languages): 'english_name': english_name, 'counter': set(), 'countries': {}, + 'flag': '', } # add language with country if not in list @@ -113,13 +114,87 @@ def join_language_lists(engines_languages): print("ERROR: %s --> %s" % (locale, exc)) locale = None - language_list[short_code]['countries'][lang_code] = {'country_name': country_name, 'counter': set()} + language_list[short_code]['countries'][lang_code] = { + 'country_name': country_name, + 'flag': '', + 'counter': set(), + } # count engine for both language_country combination and language alone language_list[short_code]['counter'].add(engine_name) if lang_code != short_code: language_list[short_code]['countries'][lang_code]['counter'].add(engine_name) - + flags = { + 'be': '🇧🇾', + 'bg-BG': '🇧🇬', + 'cs-CZ': '🇨🇿', + 'da-DK': '🇩🇰', + 'de': '🇩🇪', + 'de-AT': '🇦🇹', + 'de-CH': '🇨🇭', + 'de-DE': '🇩🇪', + 'el-GR': '🇬🇷', + 'en': '🇬🇧', + 'en-AU': '🇦🇺', + 'en-CA': '🇨🇦', + 'en-GB': '🇬🇧', + 'en-IE': '🇮🇪', + 'en-MY': '🇲🇾', + 'en-NZ': '🇳🇿', + 'en-US': '🇺🇸', + 'es': '🇪🇸', + 'es-AR': '🇦🇷', + 'es-CL': '🇨🇱', + 'es-ES': '🇪🇸', + 'es-MX': '🇲🇽', + 'et-EE': '🇪🇪', + 'fa': '🇮🇷', + 'fi-FI': '🇫🇮', + 'fr': '🇫🇷', + 'fr-BE': '🇧🇪', + 'fr-CA': '🇨🇦', + 'fr-CH': '🇨🇭', + 'fr-FR': '🇫🇷', + 'he': '🇮🇱', + 'hi': '🇮🇳', + 'hr-HR': '🇭🇷', + 'hu-HU': '🇭🇺', + 'id': '🇮🇩', + 'is': '🇮🇸', + 'it-IT': '🇮🇹', + 'ja': '🇯🇵', + 'ko': '🇰🇷', + 'lt-LT': '🇱🇹', + 'lv-LV': '🇱🇻', + 'nl': '🇳🇱', + 'nl-BE': '🇧🇪', + 'nl-NL': '🇳🇱', + 'pl-PL': '🇵🇱', + 'pt': '🇵🇹', + 'pt-BR': '🇧🇷', + 'pt-PT': '🇵🇹', + 'ro-RO': '🇷🇴', + 'ru-RU': '🇷🇺', + 'sk-SK': '🇸🇰', + 'sl': '🇸🇮', + 'sr': '🇷🇸', + 'sv-SE': '🇸🇪', + 'th-TH': '🇹🇭', + 'tr-TR': '🇹🇷', + 'uk': '🇺🇦', + 'vi': '🇻🇳', + 'zh': '🇨🇳', + 'zh-CN': '🇨🇳', + 'zh-HK': '🇭🇰', # Doesn't work --> takes short_code not lang_code + 'zh-TW': '🇹🇼', # The same as above + } + # Add flag to list + for code, flag in flags.items(): + short_code = code.split('-')[0] + if code in language_list: + language_list[code]['flag'] = flag + elif code in language_list[short_code]['countries']: + language_list[short_code]['countries'][code]['flag'] = flag return language_list @@ -146,28 +221,33 @@ def filter_language_list(all_languages): ) } - def _copy_lang_data(lang, country_name=None): + def _copy_lang_data(lang, country_name=None, flag=None): new_dict = {} new_dict['name'] = all_languages[lang]['name'] new_dict['english_name'] = all_languages[lang]['english_name'] if country_name: new_dict['country_name'] = country_name + if flag: + new_dict['flag'] = flag return new_dict # for each language get country codes supported by most engines or at least one country code filtered_languages_with_countries = {} for lang, lang_data in filtered_languages.items(): countries = lang_data['countries'] + flag = lang_data['flag'] filtered_countries = {} # get language's country codes with enough supported engines for lang_country, country_data in countries.items(): + # Get flags of languages with countries + country_flag = country_data['flag'] if len(country_data['counter']) >= min_engines_per_country: - filtered_countries[lang_country] = _copy_lang_data(lang, country_data['country_name']) + filtered_countries[lang_country] = _copy_lang_data(lang, country_data['country_name'], country_flag) # add language without countries too if there's more than one country to choose from if len(filtered_countries) > 1: - filtered_countries[lang] = _copy_lang_data(lang) + filtered_countries[lang] = _copy_lang_data(lang, None, flag) elif len(filtered_countries) == 1: # if there's only one country per language, it's not necessary to show country name lang_country = next(iter(filtered_countries)) @@ -183,9 +263,9 @@ def filter_language_list(all_languages): lang_country = "{lang}-{country}".format(lang=lang, country=country_code) if lang_country: - filtered_countries[lang_country] = _copy_lang_data(lang) + filtered_countries[lang_country] = _copy_lang_data(lang, None, flag) else: - filtered_countries[lang] = _copy_lang_data(lang) + filtered_countries[lang] = _copy_lang_data(lang, None, flag) filtered_languages_with_countries.update(filtered_countries) @@ -214,6 +294,7 @@ def write_languages_file(languages): languages[code]['name'].split(' (')[0], languages[code].get('country_name') or '', languages[code].get('english_name') or '', + languages[code].get('flag') or '', ) language_codes.append(item)