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

View file

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

View file

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

View file

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

View file

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