mirror of
https://github.com/searxng/searxng
synced 2024-01-01 19:24:07 +01:00
Update update_languages.py
add flags
This commit is contained in:
parent
8d937179ab
commit
378317b338
5 changed files with 159 additions and 78 deletions
|
@ -2,70 +2,70 @@
|
||||||
# list of language codes
|
# list of language codes
|
||||||
# this file is generated automatically by utils/fetch_languages.py
|
# this file is generated automatically by utils/fetch_languages.py
|
||||||
language_codes = (
|
language_codes = (
|
||||||
('af-ZA', 'Afrikaans', '', 'Afrikaans'),
|
('af-ZA', 'Afrikaans', '', 'Afrikaans', ''),
|
||||||
('ar-EG', 'العربية', '', 'Arabic'),
|
('ar-EG', 'العربية', '', 'Arabic', '🇸🇦'),
|
||||||
('be-BY', 'Беларуская', '', 'Belarusian'),
|
('be-BY', 'Беларуская', '', 'Belarusian', '🇧🇾'),
|
||||||
('bg-BG', 'Български', '', 'Bulgarian'),
|
('bg-BG', 'Български', '', 'Bulgarian', '🇧🇬'),
|
||||||
('ca-ES', 'Català', '', 'Catalan'),
|
('ca-ES', 'Català', '', 'Catalan', ''),
|
||||||
('cs-CZ', 'Čeština', '', 'Czech'),
|
('cs-CZ', 'Čeština', '', 'Czech', '🇨🇿'),
|
||||||
('da-DK', 'Dansk', '', 'Danish'),
|
('da-DK', 'Dansk', '', 'Danish', '🇩🇰'),
|
||||||
('de', 'Deutsch', '', 'German'),
|
('de', 'Deutsch', '', 'German', '🇩🇪'),
|
||||||
('de-AT', 'Deutsch', 'Österreich', 'German'),
|
('de-AT', 'Deutsch', 'Österreich', 'German', '🇦🇹'),
|
||||||
('de-CH', 'Deutsch', 'Schweiz', 'German'),
|
('de-CH', 'Deutsch', 'Schweiz', 'German', '🇨🇭'),
|
||||||
('de-DE', 'Deutsch', 'Deutschland', 'German'),
|
('de-DE', 'Deutsch', 'Deutschland', 'German', '🇩🇪'),
|
||||||
('el-GR', 'Ελληνικά', '', 'Greek'),
|
('el-GR', 'Ελληνικά', '', 'Greek', '🇬🇷'),
|
||||||
('en', 'English', '', 'English'),
|
('en', 'English', '', 'English', '🇬🇧'),
|
||||||
('en-AU', 'English', 'Australia', 'English'),
|
('en-AU', 'English', 'Australia', 'English', '🇦🇺'),
|
||||||
('en-CA', 'English', 'Canada', 'English'),
|
('en-CA', 'English', 'Canada', 'English', '🇨🇦'),
|
||||||
('en-GB', 'English', 'United Kingdom', 'English'),
|
('en-GB', 'English', 'United Kingdom', 'English', '🇬🇧'),
|
||||||
('en-IE', 'English', 'Ireland', 'English'),
|
('en-IE', 'English', 'Ireland', 'English', '🇮🇪'),
|
||||||
('en-MY', 'English', 'Malaysia', 'English'),
|
('en-MY', 'English', 'Malaysia', 'English', '🇲🇾'),
|
||||||
('en-NZ', 'English', 'New Zealand', 'English'),
|
('en-NZ', 'English', 'New Zealand', 'English', '🇳🇿'),
|
||||||
('en-US', 'English', 'United States', 'English'),
|
('en-US', 'English', 'United States', 'English', '🇺🇸'),
|
||||||
('es', 'Español', '', 'Spanish'),
|
('es', 'Español', '', 'Spanish', '🇪🇸'),
|
||||||
('es-AR', 'Español', 'Argentina', 'Spanish'),
|
('es-AR', 'Español', 'Argentina', 'Spanish', '🇦🇷'),
|
||||||
('es-CL', 'Español', 'Chile', 'Spanish'),
|
('es-CL', 'Español', 'Chile', 'Spanish', '🇨🇱'),
|
||||||
('es-ES', 'Español', 'España', 'Spanish'),
|
('es-ES', 'Español', 'España', 'Spanish', '🇪🇸'),
|
||||||
('es-MX', 'Español', 'México', 'Spanish'),
|
('es-MX', 'Español', 'México', 'Spanish', '🇲🇽'),
|
||||||
('et-EE', 'Eesti', '', 'Estonian'),
|
('et-EE', 'Eesti', '', 'Estonian', '🇪🇪'),
|
||||||
('fa-IR', 'فارسی', '', 'Persian'),
|
('fa-IR', 'فارسی', '', 'Persian', '🇮🇷'),
|
||||||
('fi-FI', 'Suomi', '', 'Finnish'),
|
('fi-FI', 'Suomi', '', 'Finnish', '🇫🇮'),
|
||||||
('fr', 'Français', '', 'French'),
|
('fr', 'Français', '', 'French', '🇫🇷'),
|
||||||
('fr-BE', 'Français', 'Belgique', 'French'),
|
('fr-BE', 'Français', 'Belgique', 'French', '🇧🇪'),
|
||||||
('fr-CA', 'Français', 'Canada', 'French'),
|
('fr-CA', 'Français', 'Canada', 'French', '🇨🇦'),
|
||||||
('fr-CH', 'Français', 'Suisse', 'French'),
|
('fr-CH', 'Français', 'Suisse', 'French', '🇨🇭'),
|
||||||
('fr-FR', 'Français', 'France', 'French'),
|
('fr-FR', 'Français', 'France', 'French', '🇫🇷'),
|
||||||
('he-IL', 'עברית', '', 'Hebrew'),
|
('he-IL', 'עברית', '', 'Hebrew', '🇮🇱'),
|
||||||
('hi-IN', 'हिन्दी', '', 'Hindi'),
|
('hi-IN', 'हिन्दी', '', 'Hindi', '🇮🇳'),
|
||||||
('hr-HR', 'Hrvatski', '', 'Croatian'),
|
('hr-HR', 'Hrvatski', '', 'Croatian', '🇭🇷'),
|
||||||
('hu-HU', 'Magyar', '', 'Hungarian'),
|
('hu-HU', 'Magyar', '', 'Hungarian', '🇭🇺'),
|
||||||
('id-ID', 'Indonesia', '', 'Indonesian'),
|
('id-ID', 'Indonesia', '', 'Indonesian', '🇮🇩'),
|
||||||
('is-IS', 'Íslenska', '', 'Icelandic'),
|
('is-IS', 'Íslenska', '', 'Icelandic', '🇮🇸'),
|
||||||
('it-IT', 'Italiano', '', 'Italian'),
|
('it-IT', 'Italiano', '', 'Italian', '🇮🇹'),
|
||||||
('ja-JP', '日本語', '', 'Japanese'),
|
('ja-JP', '日本語', '', 'Japanese', '🇯🇵'),
|
||||||
('ko-KR', '한국어', '', 'Korean'),
|
('ko-KR', '한국어', '', 'Korean', '🇰🇷'),
|
||||||
('lt-LT', 'Lietuvių', '', 'Lithuanian'),
|
('lt-LT', 'Lietuvių', '', 'Lithuanian', '🇱🇹'),
|
||||||
('lv-LV', 'Latviešu', '', 'Latvian'),
|
('lv-LV', 'Latviešu', '', 'Latvian', '🇱🇻'),
|
||||||
('nl', 'Nederlands', '', 'Dutch'),
|
('nl', 'Nederlands', '', 'Dutch', '🇳🇱'),
|
||||||
('nl-BE', 'Nederlands', 'België', 'Dutch'),
|
('nl-BE', 'Nederlands', 'België', 'Dutch', '🇧🇪'),
|
||||||
('nl-NL', 'Nederlands', 'Nederland', 'Dutch'),
|
('nl-NL', 'Nederlands', 'Nederland', 'Dutch', '🇳🇱'),
|
||||||
('pl-PL', 'Polski', '', 'Polish'),
|
('pl-PL', 'Polski', '', 'Polish', '🇵🇱'),
|
||||||
('pt', 'Português', '', 'Portuguese'),
|
('pt', 'Português', '', 'Portuguese', '🇵🇹'),
|
||||||
('pt-BR', 'Português', 'Brasil', 'Portuguese'),
|
('pt-BR', 'Português', 'Brasil', 'Portuguese', '🇧🇷'),
|
||||||
('pt-PT', 'Português', 'Portugal', 'Portuguese'),
|
('pt-PT', 'Português', 'Portugal', 'Portuguese', '🇵🇹'),
|
||||||
('ro-RO', 'Română', '', 'Romanian'),
|
('ro-RO', 'Română', '', 'Romanian', '🇷🇴'),
|
||||||
('ru-RU', 'Русский', '', 'Russian'),
|
('ru-RU', 'Русский', '', 'Russian', '🇷🇺'),
|
||||||
('sk-SK', 'Slovenčina', '', 'Slovak'),
|
('sk-SK', 'Slovenčina', '', 'Slovak', '🇸🇰'),
|
||||||
('sl-SI', 'Slovenščina', '', 'Slovenian'),
|
('sl-SI', 'Slovenščina', '', 'Slovenian', '🇸🇮'),
|
||||||
('sr-RS', 'Српски', '', 'Serbian'),
|
('sr-RS', 'Српски', '', 'Serbian', '🇷🇸'),
|
||||||
('sv-SE', 'Svenska', '', 'Swedish'),
|
('sv-SE', 'Svenska', '', 'Swedish', '🇸🇪'),
|
||||||
('sw-TZ', 'Kiswahili', '', 'Swahili'),
|
('sw-TZ', 'Kiswahili', '', 'Swahili', ''),
|
||||||
('th-TH', 'ไทย', '', 'Thai'),
|
('th-TH', 'ไทย', '', 'Thai', '🇹🇭'),
|
||||||
('tr-TR', 'Türkçe', '', 'Turkish'),
|
('tr-TR', 'Türkçe', '', 'Turkish', '🇹🇷'),
|
||||||
('uk-UA', 'Українська', '', 'Ukrainian'),
|
('uk-UA', 'Українська', '', 'Ukrainian', '🇺🇦'),
|
||||||
('vi-VN', 'Tiếng Việt', '', 'Vietnamese'),
|
('vi-VN', 'Tiếng Việt', '', 'Vietnamese', '🇻🇳'),
|
||||||
('zh', '中文', '', 'Chinese'),
|
('zh', '中文', '', 'Chinese', '🇨🇳'),
|
||||||
('zh-CN', '中文', '中国', 'Chinese'),
|
('zh-CN', '中文', '中国', 'Chinese', '🇨🇳'),
|
||||||
('zh-HK', '中文', '中國香港特別行政區', 'Chinese'),
|
('zh-HK', '中文', '中國香港特別行政區', 'Chinese', '🇭🇰'),
|
||||||
('zh-TW', '中文', '台灣', 'Chinese'),
|
('zh-TW', '中文', '台灣', 'Chinese', '🇹🇼'),
|
||||||
)
|
)
|
||||||
|
|
|
@ -128,7 +128,7 @@ class LanguageParser(QueryPartParser):
|
||||||
for lc in language_codes:
|
for lc in language_codes:
|
||||||
if lc[0] not in settings['search']['languages']:
|
if lc[0] not in settings['search']['languages']:
|
||||||
continue
|
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
|
# check if query starts with language-id
|
||||||
if lang_id.startswith(value):
|
if lang_id.startswith(value):
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<select class="language" id="language" name="language" tabindex="1">{{- '' -}}
|
<select class="language" id="language" name="language" tabindex="1">{{- '' -}}
|
||||||
<option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Default language') }}</option>
|
<option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Default language') }}</option>
|
||||||
{%- for lang_id,lang_name,country_name,english_name in language_codes | sort(attribute=1) -%}
|
{%- for lang_id,lang_name,country_name,english_name,flag in language_codes | sort(attribute=1) -%}
|
||||||
<option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>
|
<option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>
|
||||||
{{- lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id -}}
|
{%- if flag %}{{ flag }} {% endif%} {{- lang_name }} {% if country_name %}({{ country_name }}) {% endif -%}
|
||||||
</option>
|
</option>
|
||||||
{%- endfor -%}
|
{%- endfor -%}
|
||||||
</select>
|
</select>
|
||||||
|
|
|
@ -116,8 +116,8 @@
|
||||||
<p class="value">{{- '' -}}
|
<p class="value">{{- '' -}}
|
||||||
<select name='language'>{{- '' -}}
|
<select name='language'>{{- '' -}}
|
||||||
<option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Default language') }}</option>
|
<option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Default language') }}</option>
|
||||||
{%- for lang_id,lang_name,country_name,english_name in language_codes | sort(attribute=1) -%}
|
{%- for lang_id,lang_name,country_name,english_name,flag in language_codes | sort(attribute=1) -%}
|
||||||
<option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>{{ lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id }}</option>
|
<option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>{% if flag %}{{ flag }} {% endif%} {{- lang_name }} {% if country_name %}({{ country_name }}) {% endif %}</option>
|
||||||
{%- endfor -%}
|
{%- endfor -%}
|
||||||
</select>{{- '' -}}
|
</select>{{- '' -}}
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -100,6 +100,7 @@ def join_language_lists(engines_languages):
|
||||||
'english_name': english_name,
|
'english_name': english_name,
|
||||||
'counter': set(),
|
'counter': set(),
|
||||||
'countries': {},
|
'countries': {},
|
||||||
|
'flag': '',
|
||||||
}
|
}
|
||||||
|
|
||||||
# add language with country if not in list
|
# add language with country if not in list
|
||||||
|
@ -113,13 +114,87 @@ def join_language_lists(engines_languages):
|
||||||
print("ERROR: %s --> %s" % (locale, exc))
|
print("ERROR: %s --> %s" % (locale, exc))
|
||||||
locale = None
|
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
|
# count engine for both language_country combination and language alone
|
||||||
language_list[short_code]['counter'].add(engine_name)
|
language_list[short_code]['counter'].add(engine_name)
|
||||||
if lang_code != short_code:
|
if lang_code != short_code:
|
||||||
language_list[short_code]['countries'][lang_code]['counter'].add(engine_name)
|
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
|
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 = {}
|
||||||
new_dict['name'] = all_languages[lang]['name']
|
new_dict['name'] = all_languages[lang]['name']
|
||||||
new_dict['english_name'] = all_languages[lang]['english_name']
|
new_dict['english_name'] = all_languages[lang]['english_name']
|
||||||
if country_name:
|
if country_name:
|
||||||
new_dict['country_name'] = country_name
|
new_dict['country_name'] = country_name
|
||||||
|
if flag:
|
||||||
|
new_dict['flag'] = flag
|
||||||
return new_dict
|
return new_dict
|
||||||
|
|
||||||
# for each language get country codes supported by most engines or at least one country code
|
# for each language get country codes supported by most engines or at least one country code
|
||||||
filtered_languages_with_countries = {}
|
filtered_languages_with_countries = {}
|
||||||
for lang, lang_data in filtered_languages.items():
|
for lang, lang_data in filtered_languages.items():
|
||||||
countries = lang_data['countries']
|
countries = lang_data['countries']
|
||||||
|
flag = lang_data['flag']
|
||||||
filtered_countries = {}
|
filtered_countries = {}
|
||||||
|
|
||||||
# get language's country codes with enough supported engines
|
# get language's country codes with enough supported engines
|
||||||
for lang_country, country_data in countries.items():
|
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:
|
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
|
# add language without countries too if there's more than one country to choose from
|
||||||
if len(filtered_countries) > 1:
|
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:
|
elif len(filtered_countries) == 1:
|
||||||
# if there's only one country per language, it's not necessary to show country name
|
# if there's only one country per language, it's not necessary to show country name
|
||||||
lang_country = next(iter(filtered_countries))
|
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)
|
lang_country = "{lang}-{country}".format(lang=lang, country=country_code)
|
||||||
|
|
||||||
if lang_country:
|
if lang_country:
|
||||||
filtered_countries[lang_country] = _copy_lang_data(lang)
|
filtered_countries[lang_country] = _copy_lang_data(lang, None, flag)
|
||||||
else:
|
else:
|
||||||
filtered_countries[lang] = _copy_lang_data(lang)
|
filtered_countries[lang] = _copy_lang_data(lang, None, flag)
|
||||||
|
|
||||||
filtered_languages_with_countries.update(filtered_countries)
|
filtered_languages_with_countries.update(filtered_countries)
|
||||||
|
|
||||||
|
@ -214,6 +294,7 @@ def write_languages_file(languages):
|
||||||
languages[code]['name'].split(' (')[0],
|
languages[code]['name'].split(' (')[0],
|
||||||
languages[code].get('country_name') or '',
|
languages[code].get('country_name') or '',
|
||||||
languages[code].get('english_name') or '',
|
languages[code].get('english_name') or '',
|
||||||
|
languages[code].get('flag') or '',
|
||||||
)
|
)
|
||||||
|
|
||||||
language_codes.append(item)
|
language_codes.append(item)
|
||||||
|
|
Loading…
Add table
Reference in a new issue