From 94df913e0f2e68178ad64d385bbc453416b7e4b0 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Mon, 12 Sep 2022 05:23:21 +1000 Subject: Update handling of unsupported translations (#1467) * Handle unsupported fonts * Update archinstall/locales/README.md Co-authored-by: codefiles <11915375+codefiles@users.noreply.github.com> Co-authored-by: Daniel Girtler Co-authored-by: codefiles <11915375+codefiles@users.noreply.github.com> --- archinstall/lib/translationhandler.py | 42 +++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 14 deletions(-) (limited to 'archinstall/lib/translationhandler.py') diff --git a/archinstall/lib/translationhandler.py b/archinstall/lib/translationhandler.py index 08deb3e7..ef33b8ec 100644 --- a/archinstall/lib/translationhandler.py +++ b/archinstall/lib/translationhandler.py @@ -17,41 +17,55 @@ if TYPE_CHECKING: @dataclass class Language: abbr: str - lang: str + name_en: str translation: gettext.NullTranslations translation_percent: int translated_lang: Optional[str] + external_dep: Optional[str] @property def display_name(self) -> str: - if self.translated_lang: + if not self.external_dep and self.translated_lang: name = self.translated_lang else: - name = self.lang + name = self.name_en + return f'{name} ({self.translation_percent}%)' def is_match(self, lang_or_translated_lang: str) -> bool: - if self.lang == lang_or_translated_lang: + if self.name_en == lang_or_translated_lang: return True elif self.translated_lang == lang_or_translated_lang: return True return False def json(self) -> str: - return self.lang + return self.name_en class TranslationHandler: - _base_pot = 'base.pot' - _languages = 'languages.json' - def __init__(self): - # to display latin, greek, cyrillic characters - self._set_font('LatGrkCyr-8x16') + self._base_pot = 'base.pot' + self._languages = 'languages.json' + + # check if a custom font was provided, otherwise we'll + # use one that can display latin, greek, cyrillic characters + if self.is_custom_font_enabled(): + self._set_font(self.custom_font_path().name) + else: + self._set_font('LatGrkCyr-8x16') self._total_messages = self._get_total_active_messages() self._translated_languages = self._get_translations() + @classmethod + def custom_font_path(cls) -> Path: + return Path('/usr/share/kbd/consolefonts/archinstall_font.psfu.gz') + + @classmethod + def is_custom_font_enabled(cls) -> bool: + return cls.custom_font_path().exists() + @property def translated_languages(self) -> List[Language]: return self._translated_languages @@ -70,6 +84,7 @@ class TranslationHandler: abbr = mapping_entry['abbr'] lang = mapping_entry['lang'] translated_lang = mapping_entry.get('translated_lang', None) + external_dep = mapping_entry.get('external_dep', False) try: # get a translation for a specific language @@ -84,7 +99,7 @@ class TranslationHandler: # prevent cases where the .pot file is out of date and the percentage is above 100 percent = min(100, percent) - language = Language(abbr, lang, translation, percent, translated_lang) + language = Language(abbr, lang, translation, percent, translated_lang, external_dep) languages.append(language) except FileNotFoundError as error: raise TranslationError(f"Could not locate language file for '{lang}': {error}") @@ -138,7 +153,7 @@ class TranslationHandler: Get a language object by it's name, e.g. English """ try: - return next(filter(lambda x: x.lang == name, self._translated_languages)) + return next(filter(lambda x: x.name_en == name, self._translated_languages)) except Exception: raise ValueError(f'No language with name found: {name}') @@ -175,8 +190,7 @@ class TranslationHandler: translation_files = [] for filename in filenames: if len(filename) == 2 or filename == 'pt_BR': - if filename not in ['ur', 'ta']: - translation_files.append(filename) + translation_files.append(filename) return translation_files -- cgit v1.2.3-70-g09d2