1# coding:utf8
2from syncplay import constants
3
4from . import messages_en
5from . import messages_ru
6from . import messages_de
7from . import messages_it
8from . import messages_es
9
10messages = {
11    "en": messages_en.en,
12    "ru": messages_ru.ru,
13    "de": messages_de.de,
14    "it": messages_it.it,
15    "es": messages_es.es,
16    "CURRENT": None
17}
18
19
20def getLanguages():
21    langList = {}
22    for lang in messages:
23        if lang != "CURRENT":
24            langList[lang] = getMessage("LANGUAGE", lang)
25    return langList
26
27
28def setLanguage(lang):
29    messages["CURRENT"] = lang
30
31
32def getMissingStrings():
33    missingStrings = ""
34    for lang in messages:
35        if lang != "en" and lang != "CURRENT":
36            for message in messages["en"]:
37                if message not in messages[lang]:
38                    missingStrings = missingStrings + "({}) Missing: {}\n".format(lang, message)
39            for message in messages[lang]:
40                if message not in messages["en"]:
41                    missingStrings = missingStrings + "({}) Unused: {}\n".format(lang, message)
42
43    return missingStrings
44
45
46def getInitialLanguage():
47    import locale
48    try:
49        initialLanguage = locale.getdefaultlocale()[0].split("_")[0]
50        if initialLanguage not in messages:
51            initialLanguage = constants.FALLBACK_INITIAL_LANGUAGE
52    except:
53        initialLanguage = constants.FALLBACK_INITIAL_LANGUAGE
54    return initialLanguage
55
56
57def isValidLanguage(language):
58    return language in messages
59
60
61def getMessage(type_, locale=None):
62    if constants.SHOW_TOOLTIPS == False:
63        if "-tooltip" in type_:
64            return ""
65
66    if not isValidLanguage(messages["CURRENT"]):
67        setLanguage(getInitialLanguage())
68
69    lang = messages["CURRENT"]
70    if locale and locale in messages:
71        if type_ in messages[locale]:
72            return str(messages[locale][type_])
73    if lang and lang in messages:
74        if type_ in messages[lang]:
75            return str(messages[lang][type_])
76    if type_ in messages["en"]:
77        return str(messages["en"][type_])
78    else:
79        print("WARNING: Cannot find message '{}'!".format(type_))
80        #return "!{}".format(type_)  # TODO: Remove
81        raise KeyError(type_)
82