# coding=utf-8 import pycountry from subzero.language import Language from .custom_lang import CustomLanguage from app.database import TableSettingsLanguages, database, insert, update, select def load_language_in_db(): # Get languages list in langs tuple langs = [{'code3': lang.alpha_3, 'code2': lang.alpha_2, 'name': lang.name, 'enabled': 0} for lang in pycountry.languages if hasattr(lang, 'alpha_2')] # Insert standard languages in database table database.execute( insert(TableSettingsLanguages) .values(langs) .on_conflict_do_nothing()) # Update standard languages with code3b if available langs = [{'code3b': lang.bibliographic, 'code3': lang.alpha_3} for lang in pycountry.languages if hasattr(lang, 'alpha_2') and hasattr(lang, 'bibliographic')] # Update languages in database table database.execute( update(TableSettingsLanguages), langs) # Insert custom languages in database table CustomLanguage.register(TableSettingsLanguages) # Create languages dictionary for faster conversion than calling database create_languages_dict() def create_languages_dict(): global languages_dict # replace chinese by chinese simplified database.execute( update(TableSettingsLanguages) .values(name='Chinese Simplified') .where(TableSettingsLanguages.code3 == 'zho')) languages_dict = [{ 'code3': x.code3, 'code2': x.code2, 'name': x.name, 'code3b': x.code3b, } for x in database.execute( select(TableSettingsLanguages.code3, TableSettingsLanguages.code2, TableSettingsLanguages.name, TableSettingsLanguages.code3b)) .all()] def language_from_alpha2(lang): return next((item['name'] for item in languages_dict if item['code2'] == lang[:2]), None) def language_from_alpha3(lang): return next((item['name'] for item in languages_dict if lang[:3] in [item['code3'], item['code3b']]), None) def alpha2_from_alpha3(lang): return next((item['code2'] for item in languages_dict if lang[:3] in [item['code3'], item['code3b']]), None) def alpha2_from_language(lang): return next((item['code2'] for item in languages_dict if item['name'] == lang), None) def alpha3_from_alpha2(lang): return next((item['code3'] for item in languages_dict if item['code2'] == lang[:2]), None) def alpha3_from_language(lang): return next((item['code3'] for item in languages_dict if item['name'] == lang), None) def get_language_set(): languages = database.execute( select(TableSettingsLanguages.code3) .where(TableSettingsLanguages.enabled == 1))\ .all() language_set = set() for lang in languages: custom = CustomLanguage.from_value(lang.code3, "alpha3") if custom is None: language_set.add(Language(lang.code3)) else: language_set.add(custom.subzero_language()) return language_set