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 supported = self.bot.translator.supported_locales
formatted = [] formatted = []
for locale in supported: for locale in supported:
name = locale_names.get(locale.replace('_', '-'), None) names = locale_names.get(locale.replace('_', '-'), None)
if name: if names:
localestr = f"{locale} ({t(name)})" local_name, native_name = names
localestr = f"{native_name} ({t(local_name)})"
else: else:
localestr = locale localestr = locale
formatted.append((locale, localestr)) 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: if matching:
choices = [ choices = [
appcmds.Choice(name=localestr, value=locale) appcmds.Choice(name=localestr, value=locale)

View File

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

View File

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