You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
3.0 KiB
98 lines
3.0 KiB
# 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
|