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
|
||||
# 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', '🇹🇼'),
|
||||
)
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<select class="language" id="language" name="language" tabindex="1">{{- '' -}}
|
||||
<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 -}}
|
||||
{%- if flag %}{{ flag }} {% endif%} {{- lang_name }} {% if country_name %}({{ country_name }}) {% endif -%}
|
||||
</option>
|
||||
{%- endfor -%}
|
||||
</select>
|
||||
|
|
|
@ -116,8 +116,8 @@
|
|||
<p class="value">{{- '' -}}
|
||||
<select name='language'>{{- '' -}}
|
||||
<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) -%}
|
||||
<option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>{{ lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id }}</option>
|
||||
{%- 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 %}>{% if flag %}{{ flag }} {% endif%} {{- lang_name }} {% if country_name %}({{ country_name }}) {% endif %}</option>
|
||||
{%- endfor -%}
|
||||
</select>{{- '' -}}
|
||||
</p>
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue