Update update_languages.py

add flags
This commit is contained in:
Monty 2022-03-02 17:36:02 +01:00
parent 8d937179ab
commit 378317b338
5 changed files with 159 additions and 78 deletions

View file

@ -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', '🇹🇼'),
)

View file

@ -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):

View file

@ -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>

View file

@ -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>

View file

@ -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)