diff --git a/panels/language_select.py b/panels/language_select.py new file mode 100644 index 00000000..296ae123 --- /dev/null +++ b/panels/language_select.py @@ -0,0 +1,61 @@ +import logging +import gi + +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk, GLib +from ks_includes.screen_panel import ScreenPanel + +class Panel(ScreenPanel): + def __init__(self, screen, title): + title = title or "Select Language" + super().__init__(screen, title) + self.language_map = { + 'cs': 'Čeština', + 'da': 'Dansk', + 'de': 'Deutsch', + 'de_formal': 'Höfliches Deutsch', + 'en': 'English', + 'es': 'Español', + 'et': 'Eesti', + 'fr': 'Français', + 'he': 'עברית', + 'hu': 'Magyar', + 'it': 'Italiano', + 'jp': '日本語', + 'ko': '한국어', + 'lt': 'Lietuvių', + 'nl': 'Nederlands', + 'pl': 'Polski', + 'pt': 'Português', + 'pt_BR': 'Português (Brasil)', + 'ru': 'Русский', + 'sl': 'Slovenščina', + 'sv': 'Svenska', + 'tr': 'Türkçe', + 'uk': 'Українська', + 'vi': 'Tiếng Việt', + 'zh_CN': '简体中文', + 'zh_TW': '繁體中文', + } + self.langs = {} + self.labels['lang_menu'] = self._gtk.ScrolledWindow() + self.labels['lang'] = Gtk.Grid() + self.labels['lang_menu'].add(self.labels['lang']) + self.labels['lang'].set_margin_start(50) + for lang in self._config.lang_list: + name = self.language_map.get(lang) + if name: + self.langs[lang] = { + "name": name, + "type": "button", + "callback": self.change_language, + } + self.add_option("lang", self.langs, lang, self.langs[lang]) + self.content.add(self.labels["lang_menu"]) + self.content.show_all() + + def change_language(self, widget, lang): + reverse_language_map = {v: k for k, v in self.language_map.items()} + language_code = reverse_language_map.get(lang, 'en') + self._screen.change_language(widget, language_code) + self._screen.initial_connection() diff --git a/panels/settings.py b/panels/settings.py index 09bc678b..5b0f6d05 100644 --- a/panels/settings.py +++ b/panels/settings.py @@ -24,15 +24,50 @@ class Panel(ScreenPanel): name = list(option)[0] self.add_option('settings', self.settings, name, option[name]) + self.language_map = { + 'cs': 'Čeština', + 'da': 'Dansk', + 'de': 'Deutsch', + 'de_formal': 'Höfliches Deutsch', + 'en': 'English', + 'es': 'Español', + 'et': 'Eesti', + 'fr': 'Français', + 'he': 'עברית', + 'hu': 'Magyar', + 'it': 'Italiano', + 'jp': '日本語', + 'ko': '한국어', + 'lt': 'Lietuvių', + 'nl': 'Nederlands', + 'pl': 'Polski', + 'pt': 'Português', + 'pt_BR': 'Português (Brasil)', + 'ru': 'Русский', + 'sl': 'Slovenščina', + 'sv': 'Svenska', + 'tr': 'Türkçe', + 'uk': 'Українська', + 'vi': 'Tiếng Việt', + 'zh_CN': '简体中文', + 'zh_TW': '繁體中文', + } + self.labels['lang_menu'] = self._gtk.ScrolledWindow() self.labels['lang'] = Gtk.Grid() self.labels['lang_menu'].add(self.labels['lang']) - for lang in ["system_lang", *self._config.lang_list]: + for lang in self._config.lang_list: + name = self.language_map.get(lang) self.langs[lang] = { - "name": lang, + "name": name, "type": "button", - "callback": self._screen.change_language, + "callback": self.change_language, } self.add_option("lang", self.langs, lang, self.langs[lang]) self.content.add(self.labels['settings_menu']) + + def change_language(self, widget, lang): + reverse_language_map = {v: k for k, v in self.language_map.items()} + language_code = reverse_language_map.get(lang, 'en') + self._screen.change_language(widget, language_code) \ No newline at end of file diff --git a/screen.py b/screen.py index 010e59f4..eae28b92 100755 --- a/screen.py +++ b/screen.py @@ -167,7 +167,10 @@ class KlipperScreen(Gtk.Window): self.base_panel.activate() self.set_screenblanking_timeout(self._config.get_main_config().get('screen_blanking')) self.log_notification("KlipperScreen Started", 1) - self.initial_connection() + + lang = self._config.get_main_config().get("language", 'system_lang') + (self.show_language_select() if lang == 'system_lang' else self.initial_connection()) + def state_execute(self, state, callback): self.close_screensaver() @@ -716,6 +719,9 @@ class KlipperScreen(Gtk.Window): self.reset_screensaver_timeout() return + def show_language_select(self, widget=None): + self.show_panel("language_select", remove_all=True) + def show_printer_select(self, widget=None): if 'printer_select' not in self._cur_panels: self.base_panel.show_heaters(False)