Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/archinstall/lib/translationhandler.py
diff options
context:
space:
mode:
authorDaniel Girtler <blackrabbit256@gmail.com>2022-09-12 05:23:21 +1000
committerGitHub <noreply@github.com>2022-09-11 21:23:21 +0200
commit94df913e0f2e68178ad64d385bbc453416b7e4b0 (patch)
tree7daa03555a3a0ff9834f91166481c41a2a6e0346 /archinstall/lib/translationhandler.py
parentc373607f8c9548bf9de55988629b747f32d67b3d (diff)
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 <girtler.daniel@gmail.com> Co-authored-by: codefiles <11915375+codefiles@users.noreply.github.com>
Diffstat (limited to 'archinstall/lib/translationhandler.py')
-rw-r--r--archinstall/lib/translationhandler.py42
1 files changed, 28 insertions, 14 deletions
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