fix(babel): Improve locale logging.

This commit is contained in:
2023-09-20 23:06:36 +03:00
parent 519fb976aa
commit dd42c82b63
4 changed files with 70 additions and 52 deletions

View File

@@ -230,14 +230,15 @@ class BabelCog(LionCog):
supported = self.bot.translator.supported_locales
formatted = []
for locale in supported:
name = locale_names.get(locale.replace('_', '-'), None)
if name:
localestr = f"{locale} ({t(name)})"
names = locale_names.get(locale.replace('_', '-'), None)
if names:
local_name, native_name = names
localestr = f"{native_name} ({t(local_name)})"
else:
localestr = locale
formatted.append((locale, localestr))
matching = {item for item in formatted if partial in item[1]}
matching = {item for item in formatted if partial in item[1] or partial in item[0]}
if matching:
choices = [
appcmds.Choice(name=localestr, value=locale)

View File

@@ -38,37 +38,44 @@ class LocaleMap(Enum):
hebrew = 'he-IL'
# Original Discord names
locale_names = {
'en-US': _p('localenames|locale:en-US', "American English"),
'en-GB': _p('localenames|locale:en-GB', "British English"),
'bg': _p('localenames|locale:bg', "Bulgarian"),
'zh-CN': _p('localenames|locale:zh-CN', "Chinese"),
'zh-TW': _p('localenames|locale:zh-TW', "Taiwan Chinese"),
'hr': _p('localenames|locale:hr', "Croatian"),
'cs': _p('localenames|locale:cs', "Czech"),
'da': _p('localenames|locale:da', "Danish"),
'nl': _p('localenames|locale:nl', "Dutch"),
'fi': _p('localenames|locale:fi', "Finnish"),
'fr': _p('localenames|locale:fr', "French"),
'de': _p('localenames|locale:de', "German"),
'el': _p('localenames|locale:el', "Greek"),
'hi': _p('localenames|locale:hi', "Hindi"),
'hu': _p('localenames|locale:hu', "Hungarian"),
'it': _p('localenames|locale:it', "Italian"),
'ja': _p('localenames|locale:ja', "Japanese"),
'ko': _p('localenames|locale:ko', "Korean"),
'lt': _p('localenames|locale:lt', "Lithuanian"),
'no': _p('localenames|locale:no', "Norwegian"),
'pl': _p('localenames|locale:pl', "Polish"),
'pt-BR': _p('localenames|locale:pt-BR', "Brazil Portuguese"),
'ro': _p('localenames|locale:ro', "Romanian"),
'ru': _p('localenames|locale:ru', "Russian"),
'es-ES': _p('localenames|locale:es-ES', "Spain Spanish"),
'sv-SE': _p('localenames|locale:sv-SE', "Swedish"),
'th': _p('localenames|locale:th', "Thai"),
'tr': _p('localenames|locale:tr', "Turkish"),
'uk': _p('localenames|locale:uk', "Ukrainian"),
'vi': _p('localenames|locale:vi', "Vietnamese"),
'he': _p('localenames|locale:he', "Hebrew"),
'he-IL': _p('localenames|locale:he_IL', "Hebrew (Israel)"),
'id': (_p('localenames|locale:id', "Indonesian"), "Bahasa Indonesia"),
'da': (_p('localenames|locale:da', "Danish"), "Dansk"),
'de': (_p('localenames|locale:de', "German"), "Deutsch"),
'en-GB': (_p('localenames|locale:en-GB', "English, UK"), "English, UK"),
'en-US': (_p('localenames|locale:en-US', "English, US"), "English, US"),
'es-ES': (_p('localenames|locale:es-ES', "Spanish"), "Español"),
'fr': (_p('localenames|locale:fr', "French"), "Français"),
'hr': (_p('localenames|locale:hr', "Croatian"), "Hrvatski"),
'it': (_p('localenames|locale:it', "Italian"), "Italiano"),
'lt': (_p('localenames|locale:lt', "Lithuanian"), "Lietuviškai"),
'hu': (_p('localenames|locale:hu', "Hungarian"), "Magyar"),
'nl': (_p('localenames|locale:nl', "Dutch"), "Nederlands"),
'no': (_p('localenames|locale:no', "Norwegian"), "Norsk"),
'pl': (_p('localenames|locale:pl', "Polish"), "Polski"),
'pt-BR': (_p('localenames|locale:pt-BR', "Portuguese, Brazilian"), "Português do Brasil"),
'ro': (_p('localenames|locale:ro', "Romanian, Romania"), "Română"),
'fi': (_p('localenames|locale:fi', "Finnish"), "Suomi"),
'sv-SE': (_p('localenames|locale:sv-SE', "Swedish"), "Svenska"),
'vi': (_p('localenames|locale:vi', "Vietnamese"), "Tiếng Việt"),
'tr': (_p('localenames|locale:tr', "Turkish"), "Türkçe"),
'cs': (_p('localenames|locale:cs', "Czech"), "Čeština"),
'el': (_p('localenames|locale:el', "Greek"), "Ελληνικά"),
'bg': (_p('localenames|locale:bg', "Bulgarian"), "български"),
'ru': (_p('localenames|locale:ru', "Russian"), "Pусский"),
'uk': (_p('localenames|locale:uk', "Ukrainian"), "Українська"),
'hi': (_p('localenames|locale:hi', "Hindi"), "हिन्दी"),
'th': (_p('localenames|locale:th', "Thai"), "ไทย"),
'zh-CN': (_p('localenames|locale:zh-CN', "Chinese, China"), "中文"),
'ja': (_p('localenames|locale:ja', "Japanese"), "日本語"),
'zh-TW': (_p('localenames|locale:zh-TW', "Chinese, Taiwan"), "繁體中文"),
'ko': (_p('localenames|locale:ko', "Korean"), "한국어"),
}
# More names for languages not supported by Discord
locale_names |= {
'he': (_p('localenames|locale:he', "Hebrew"), "Hebrew"),
'he-IL': (_p('localenames|locale:he-IL', "Hebrew"), "Hebrew"),
'ceaser': (_p('localenames|locale:test', "Test Language"), "dfbtfs"),
}

View File

@@ -43,9 +43,9 @@ class LocaleSetting(StringSetting):
if data is None:
formatted = t(_p('settype:locale|formatted:unset', "Unset"))
else:
name = locale_names.get(data, None)
if name:
formatted = f"`{data} ({t(name)})`"
if data in locale_names:
local_name, native_name = locale_names[data]
formatted = f"`{native_name} ({t(local_name)})`"
else:
formatted = f"`{data}`"
return formatted

View File

@@ -47,33 +47,43 @@ class LeoBabel(Translator):
Initialise the gettext translators for the supported_locales.
"""
self.read_supported()
missing = []
loaded = []
for locale in self.supported_locales:
for domain in self.supported_domains:
if locale == SOURCE_LOCALE:
continue
try:
translator = gettext.translation(domain, "locales/", languages=[locale])
loaded.append(f"Loaded translator for <locale: {locale}> <domain: {domain}>")
except OSError:
# Presume translation does not exist
logger.warning(f"Could not load translator for supported <locale: {locale}> <domain: {domain}>")
pass
else:
logger.debug(f"Loaded translator for <locale: {locale}> <domain: {domain}>")
missing.append(f"Could not load translator for supported <locale: {locale}> <domain: {domain}>")
translator = null
self.translators[locale][domain] = translator
if missing:
logger.warning('\n'.join(("Missing Translators:", *missing)))
if loaded:
logger.debug('\n'.join(("Loaded Translators:", *loaded)))
async def unload(self):
self.translators.clear()
def get_translator(self, locale, domain):
if locale == SOURCE_LOCALE:
return null
translator = null
elif locale in self.supported_locales and domain in self.supported_domains:
translator = self.translators[locale].get(domain, None)
if translator is None:
# This should never really happen because we already loaded the supported translators
logger.warning(
f"Translator missing for requested <locale: {locale}> and <domain: {domain}>. Setting NullTranslator."
f"Translator missing for supported <locale: {locale}> "
"and <domain: {domain}>. Setting NullTranslator."
)
self.translators[locale][domain] = null
translator = self.translators[locale][domain] = null
else:
# Unsupported
translator = null
return translator