index : archinstall32 | |
Archlinux32 installer | gitolite user |
summaryrefslogtreecommitdiff |
author | Daniel Girtler <blackrabbit256@gmail.com> | 2022-06-07 01:26:27 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-06 17:26:27 +0200 |
commit | 2d4b2620462a0fb4c9496ed0629d7ab8930fc73a (patch) | |
tree | df1850ae1c717a3f1ea5d0fd39351b6482b35770 | |
parent | f2492ca574448fe4bd44604316da322720e70040 (diff) |
-rw-r--r-- | .github/workflows/mypy.yaml | 2 | ||||
-rw-r--r-- | archinstall/__init__.py | 7 | ||||
-rw-r--r-- | archinstall/lib/menu/selection_menu.py | 10 | ||||
-rw-r--r-- | archinstall/lib/translation.py | 34 | ||||
-rw-r--r-- | archinstall/lib/user_interaction/general_conf.py | 9 | ||||
-rw-r--r-- | archinstall/locales/cyrillic.json | 19 |
diff --git a/.github/workflows/mypy.yaml b/.github/workflows/mypy.yaml index d14d8553..8463afda 100644 --- a/.github/workflows/mypy.yaml +++ b/.github/workflows/mypy.yaml @@ -15,4 +15,4 @@ jobs: # one day this will be enabled # run: mypy --strict --module archinstall || exit 0 - name: run mypy - run: mypy --follow-imports=silent archinstall/lib/menu/selection_menu.py archinstall/lib/menu/global_menu.py archinstall/lib/models/network_configuration.py archinstall/lib/menu/list_manager.py archinstall/lib/user_interaction/network_conf.py archinstall/lib/models/users.py + run: mypy --follow-imports=silent archinstall/lib/menu/selection_menu.py archinstall/lib/menu/global_menu.py archinstall/lib/models/network_configuration.py archinstall/lib/menu/list_manager.py archinstall/lib/user_interaction/network_conf.py archinstall/lib/models/users.py archinstall/lib/translation.py diff --git a/archinstall/__init__.py b/archinstall/__init__.py index ee5e5f45..abcad3ba 100644 --- a/archinstall/__init__.py +++ b/archinstall/__init__.py @@ -58,10 +58,6 @@ storage['__version__'] = __version__ DeferredTranslation.install() -def set_unicode_font(): - SysCommand('setfont UniCyr_8x16') - - def define_arguments(): """ Define which explicit arguments do we allow. @@ -249,9 +245,6 @@ def post_process_arguments(arguments): load_config() -# to ensure that cyrillic characters work in the installer -# set_unicode_font() - define_arguments() arguments = get_arguments() post_process_arguments(arguments) diff --git a/archinstall/lib/menu/selection_menu.py b/archinstall/lib/menu/selection_menu.py index d4a7ceef..8dd6fcce 100644 --- a/archinstall/lib/menu/selection_menu.py +++ b/archinstall/lib/menu/selection_menu.py @@ -15,15 +15,6 @@ if TYPE_CHECKING: _: Any -def select_archinstall_language(preset_value: str) -> Optional[Any]: - """ - copied from user_interaction/general_conf.py as a temporary measure - """ - languages = Translation.get_available_lang() - language = Menu(_('Archinstall language'), languages, preset_values=preset_value).run() - return language.value - - class Selector: def __init__( self, @@ -462,6 +453,7 @@ class GeneralMenu: return mandatory_fields, mandatory_waiting def _select_archinstall_language(self, preset_value: str) -> str: + from ... import select_archinstall_language language = select_archinstall_language(preset_value) if language is not None: self._translation.activate(language) diff --git a/archinstall/lib/translation.py b/archinstall/lib/translation.py index 79e0198a..c20a4285 100644 --- a/archinstall/lib/translation.py +++ b/archinstall/lib/translation.py @@ -1,6 +1,7 @@ from __future__ import annotations import json +import logging import os import gettext @@ -13,12 +14,19 @@ if TYPE_CHECKING: class LanguageDefinitions: + _languages = 'languages.json' + _cyrillic = 'cyrillic.json' + def __init__(self): self._mappings = self._get_language_mappings() + self._cyrillic_languages = self._get_cyrillic_languages() + + def is_cyrillic(self, language: str) -> bool: + return language in self._cyrillic_languages def _get_language_mappings(self) -> List[Dict[str, str]]: locales_dir = Translation.get_locales_dir() - languages = Path.joinpath(locales_dir, 'languages.json') + languages = Path.joinpath(locales_dir, self._languages) with open(languages, 'r') as fp: return json.load(fp) @@ -30,6 +38,14 @@ class LanguageDefinitions: raise ValueError(f'No language with abbreviation "{abbr}" found') + def _get_cyrillic_languages(self) -> List[str]: + locales_dir = Translation.get_locales_dir() + languages = Path.joinpath(locales_dir, self._cyrillic) + + with open(languages, 'r') as fp: + data = json.load(fp) + return data['languages'] + class DeferredTranslation: def __init__(self, message: str): @@ -78,10 +94,26 @@ class Translation: def activate(self, name): if language := self._languages.get(name, None): + languages = LanguageDefinitions() + + if languages.is_cyrillic(name): + self._set_font('UniCyr_8x16') + else: + # this will reset a possible previously set font to a default font + self._set_font('') + language.install() else: raise ValueError(f'Language not supported: {name}') + def _set_font(self, font: str): + from archinstall import SysCommand, log + try: + log(f'Setting new font: {font}', level=logging.DEBUG) + SysCommand(f'setfont {font}') + except Exception: + log(f'Unable to set font {font}', level=logging.ERROR) + @classmethod def load_nationalization(cls) -> Translation: locales_dir = cls.get_locales_dir() diff --git a/archinstall/lib/user_interaction/general_conf.py b/archinstall/lib/user_interaction/general_conf.py index 70a0e73f..15c42b86 100644 --- a/archinstall/lib/user_interaction/general_conf.py +++ b/archinstall/lib/user_interaction/general_conf.py @@ -118,10 +118,13 @@ def select_mirror_regions(preset_values: Dict[str, Any] = {}) -> Dict[str, Any]: case _: return {selected: mirrors[selected] for selected in selected_mirror.value} -def select_archinstall_language(default='English'): +def select_archinstall_language(preset_values: str): languages = Translation.get_available_lang() - language = Menu(_('Archinstall language'), languages, default_option=default).run() - return language + choice = Menu(_('Archinstall language'), languages, default_option=preset_values).run() + + match choice.type_: + case MenuSelectionType.Esc: return preset_values + case MenuSelectionType.Selection: return choice.value def select_profile(preset) -> Optional[Profile]: diff --git a/archinstall/locales/cyrillic.json b/archinstall/locales/cyrillic.json new file mode 100644 index 00000000..13f11ad0 --- /dev/null +++ b/archinstall/locales/cyrillic.json @@ -0,0 +1,19 @@ +{ + "languages": [ + "Abkhazian", + "Azerbaijani", + "Bashkir", + "Belarusian", + "Bulgarian", + "Chuvash", + "Komi", + "Macedonian", + "Mongolian", + "Russian", + "Serbo-Croatian", + "Tajik", + "Tatar", + "Ukrainian", + "Uzbek" + ] +} |