2023-12-24 16:58:09 +08:00
|
|
|
import gettext
|
2024-01-05 12:27:57 +08:00
|
|
|
import os
|
2023-12-24 16:58:09 +08:00
|
|
|
from enum import Enum
|
|
|
|
|
|
|
|
|
|
|
|
class TUILanguage(Enum):
|
2023-12-24 17:31:35 +08:00
|
|
|
EN = ("en", "English")
|
|
|
|
ZH = ("zh", "Chinese")
|
|
|
|
Other = ("en", "English") # default to show English
|
2023-12-24 16:58:09 +08:00
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def from_str(cls, language: str) -> "TUILanguage":
|
2023-12-24 17:31:35 +08:00
|
|
|
if language.lower().startswith("en"):
|
2023-12-24 16:58:09 +08:00
|
|
|
return cls.EN
|
2023-12-24 17:31:35 +08:00
|
|
|
elif language.lower().startswith("zh"):
|
2023-12-24 16:58:09 +08:00
|
|
|
return cls.ZH
|
|
|
|
else:
|
|
|
|
return cls.Other
|
|
|
|
|
2023-12-24 17:31:35 +08:00
|
|
|
@property
|
|
|
|
def language_code(self) -> str:
|
|
|
|
return self.value[0]
|
|
|
|
|
|
|
|
@property
|
|
|
|
def chat_language(self) -> str:
|
|
|
|
return self.value[1]
|
|
|
|
|
2023-12-24 16:58:09 +08:00
|
|
|
|
|
|
|
def get_translation(tui_lang: TUILanguage) -> gettext.gettext:
|
|
|
|
"""
|
|
|
|
Get the translation function for the given language.
|
|
|
|
"""
|
|
|
|
localdir = os.path.join(os.path.dirname(__file__), "locales")
|
|
|
|
lang_translations = gettext.translation(
|
2023-12-24 17:31:35 +08:00
|
|
|
"base", localedir=localdir, languages=[tui_lang.language_code]
|
2023-12-24 16:58:09 +08:00
|
|
|
)
|
|
|
|
lang_translations.install()
|
|
|
|
|
|
|
|
return lang_translations.gettext
|