Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/archinstall/lib
diff options
context:
space:
mode:
authorDaniel Girtler <blackrabbit256@gmail.com>2022-06-07 01:26:27 +1000
committerGitHub <noreply@github.com>2022-06-06 17:26:27 +0200
commit2d4b2620462a0fb4c9496ed0629d7ab8930fc73a (patch)
treedf1850ae1c717a3f1ea5d0fd39351b6482b35770 /archinstall/lib
parentf2492ca574448fe4bd44604316da322720e70040 (diff)
Handle cyrillic characters (#1309)
* Handle cyrillic characters * Update Co-authored-by: Daniel Girtler <girtler.daniel@gmail.com>
Diffstat (limited to 'archinstall/lib')
-rw-r--r--archinstall/lib/menu/selection_menu.py10
-rw-r--r--archinstall/lib/translation.py34
-rw-r--r--archinstall/lib/user_interaction/general_conf.py9
3 files changed, 40 insertions, 13 deletions
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]: