BonPrinter v1.2.0
Thermal Printer tool
Loading...
Searching...
No Matches
language.py
Go to the documentation of this file.
1"""!
2********************************************************************************
3@file language.py
4@brief Supported languages and widget text translation
5********************************************************************************
6"""
7
8import logging
9from typing import Any, TYPE_CHECKING
10
11from Source.version import __title__
12from Source.Util.app_data import read_language, write_language, ELanguages
13from Source.Util.gui_toolkit import config_menu, config_btn
14
15
16if TYPE_CHECKING:
17 from Source.Controller.main_window import MainWindow
18
19log = logging.getLogger(__title__)
20
21L_MENU_PRINTS = ["Prints", "Ausdrucke"]
22L_MENU_SHOW_STATUS = ["Show Status", "Zwischenstand anzeigen"]
23L_MENU_OPEN_FOLDER = ["Open Folder", "Ordner öffnen"]
24L_MENU_COMBINE_REPORT = ["Combine Report", "Bericht kombinieren"]
25L_MENU_MANUAL_COMBINE = ["Manual Selection (CSV files)", "Manuelle Auswahl (CSV-Dateien)"]
26L_MENU_AUTO_COMBINE = ["Auto Selection (Folder)", "Automatische Auswahl (Ordner)"]
27L_MENU_PRINT_FILE = ["Print File", "Datei drucken"]
28L_MENU_ARTICLE_PREVIEW = ["Article Print Preview", "Artikel Druckvorschau"]
29L_MENU_ENABLE_PRINT_REPORT = ["Enable Print Report", "Druckbericht aktivieren"]
30L_MENU_CREATE_REPORT = ["Create Report", "Bericht erstellen"]
31L_MENU_CONFIG = ["Configuration", "Konfiguration"]
32L_MENU_USER = ["User", "Benutzer"]
33L_MENU_EDIT = ["Edit", "Bearbeiten"]
34L_MENU_IMPORT = ["Import", "Importieren"]
35L_MENU_EXPORT = ["Export", "Exportieren"]
36L_MENU_SET_DEFAULT = ["Reset (set default)", "Zurücksetzen (Standard Werte)"]
37L_MENU_ARTICLE = ["Articles", "Artikel"]
38L_MENU_CHANGE_PATH = ["Change Output Path", "Ausgabeverzeichnis ändern"]
39L_MENU_PRINTER_PORT = ["Printer COM-Port", "Drucker COM-Anschluss"]
40L_MENU_PAPER_WIDTH = ["Paper Width", "Papierbreite"]
41L_MENU_SETTINGS = ["Settings", "Einstellungen"]
42L_MENU_SOUND = ["Sound", "Ton"]
43L_MENU_THEME = ["Theme", "Thema"]
44L_MENU_AUTO = ["Automatic", "Automatisch"]
45L_MENU_LIGHT = ["Light", "Hell"]
46L_MENU_DARK = ["Dark", "Dunkel"]
47L_MENU_CLASSIC = ["Classic", "Klassisch"]
48L_MENU_SYSTEM = ["System Default", "System Standard"]
49L_MENU_LANGUAGE = ["Language", "Sprache"]
50L_MENU_LANGUAGE_ENGLISH = ["English", "Englisch"]
51L_MENU_LANGUAGE_GERMAN = ["German", "Deutsch"]
52L_MENU_SHOW_PRICE = ["Show Price", "Preis anzeigen"]
53L_MENU_LOG_VERBOSITY = ["Log Verbosity", "Log Verbosität"]
54L_MENU_LOG_ERROR = ["Error", "Fehler"]
55L_MENU_LOG_WARNING = ["Warning", "Warnung"]
56L_MENU_LOG_INFO = ["Info", "Infos"]
57L_MENU_LOG_DEBUG = ["Debug", "Debuggen"]
58L_MENU_HELP = ["Help", "Hilfe"]
59L_MENU_SHOW_HELP = ["Show Help", "Hilfe anzeigen"]
60L_MENU_ABOUT = ["About", "Über"]
61L_MENU_RESET = ["Reset", "Zurücksetzen"]
62
63L_COMBINED_TITLE = ["Combined Report of printouts", "Kombinierter Bericht der Ausdrucke"]
64L_REPORT_TITLE = ["Report of printouts", "Bericht der Ausdrucke"]
65L_REPORT_STATUS_TITLE = ["Status of printouts", "Zwischenstand der Ausdrucke"]
66L_USER_STATUS_TITLE = ["User Status of printouts", "Benutzerstand der Ausdrucke"]
67
68L_PRICE = ["Price", "Preis"]
69L_SAVE = ["FINISH", "FERTIG"]
70L_PRINT = ["PRINT", "DRUCKEN"]
71L_OPEN = ["OPEN", "ÖFFNEN"]
72L_CLEAR = ["CLR", "ENTF"]
73L_CALC = ["CALC", "RCH"]
74
75L_YES = ["Yes", "Ja"]
76L_NO = ["No", "Nein"]
77L_CLOSE = ["Close", "Schließen"]
78L_CANCEL = ["Cancel", "Abbrechen"]
79L_COPY_URL = ["Copy URL", "URL kopieren"]
80L_REPAIR = ["Repair", "Reparieren"]
81L_YOU_SURE = ["You sure?", "Sind Sie sicher?"]
82L_UNEXP_ERROR = ["Unexpected error occurred", "Ein unerwarteter Fehler ist aufgetreten"]
83L_TOTAL = ["Total", "Gesamt"]
84L_SUM = ["Sum", "Summe"]
85
86
88 """!
89 @brief Class to set language.
90 @param ui : main window object
91 """
92
93 def __init__(self, ui: "MainWindow") -> None:
94 self.ui = ui
95 self.e_language = read_language()
96 log.debug("Select Language: %s", self.e_language)
97 self.update_widgets(b_update_screen=False)
98
99 def update_language(self, e_language: ELanguages) -> None:
100 """!
101 @brief Update dark mode status.
102 @param e_language : select language mode
103 """
104 self.e_language = e_language
105 write_language(self.e_language)
106 self.update_widgets()
107 match self.e_language:
108 case ELanguages.ENGLISH:
109 language = self.get_language_text(L_MENU_LANGUAGE_ENGLISH)
110 case ELanguages.GERMAN:
111 language = self.get_language_text(L_MENU_LANGUAGE_GERMAN)
112 case _:
113 language = "Unknown"
114 self.ui.set_status([f"Language set to {language}",
115 f"Sprache geändert zu {language}"])
116
117 def get_language_text(self, l_text: list[Any]) -> Any:
118 """!
119 @brief Get language text
120 @param l_text : list with possible language text
121 @return text of active language
122 """
123 index = list(ELanguages).index(self.e_language)
124 if len(l_text) > index:
125 text = l_text[index]
126 if not text:
127 text = l_text[0] # get default language if translate
128 else:
129 text = l_text[0]
130 log.debug("Not all Languages supported: %s", l_text)
131 return text
132
133 def update_widgets(self, b_update_screen: bool = True) -> None:
134 """!
135 @brief Update widgets to actual language
136 @param b_update_screen : status if screen should updated
137 """
138 config_menu(self.ui.menu_prints, text=self.get_language_text(L_MENU_PRINTS))
139 config_menu(self.ui.action_show_interim, text=self.get_language_text(L_MENU_SHOW_STATUS))
140 config_menu(self.ui.action_open_folder, text=self.get_language_text(L_MENU_OPEN_FOLDER))
141 config_menu(self.ui.menu_combine_report, text=self.get_language_text(L_MENU_COMBINE_REPORT))
142 config_menu(self.ui.action_combine_manual, text=self.get_language_text(L_MENU_MANUAL_COMBINE))
143 config_menu(self.ui.action_combine_auto, text=self.get_language_text(L_MENU_AUTO_COMBINE))
144 config_menu(self.ui.action_print_file, text=self.get_language_text(L_MENU_PRINT_FILE))
145 config_menu(self.ui.action_article_preview, text=self.get_language_text(L_MENU_ARTICLE_PREVIEW))
146 config_menu(self.ui.action_enable_report, text=self.get_language_text(L_MENU_ENABLE_PRINT_REPORT))
147 config_menu(self.ui.action_create_billing, text=self.get_language_text(L_MENU_CREATE_REPORT))
148
149 config_menu(self.ui.menu_configuration, text=self.get_language_text(L_MENU_CONFIG))
150 config_menu(self.ui.menu_user, text=self.get_language_text(L_MENU_USER))
151 config_menu(self.ui.action_user_edit, text=self.get_language_text(L_MENU_EDIT))
152 config_menu(self.ui.action_user_import, text=self.get_language_text(L_MENU_IMPORT))
153 config_menu(self.ui.action_user_export, text=self.get_language_text(L_MENU_EXPORT))
154 config_menu(self.ui.action_user_new, text=self.get_language_text(L_MENU_SET_DEFAULT))
155 config_menu(self.ui.menu_articles, text=self.get_language_text(L_MENU_ARTICLE))
156 config_menu(self.ui.action_articles_edit, text=self.get_language_text(L_MENU_EDIT))
157 config_menu(self.ui.action_articles_import, text=self.get_language_text(L_MENU_IMPORT))
158 config_menu(self.ui.action_articles_export, text=self.get_language_text(L_MENU_EXPORT))
159 config_menu(self.ui.action_articles_new, text=self.get_language_text(L_MENU_SET_DEFAULT))
160 config_menu(self.ui.action_change_path, text=self.get_language_text(L_MENU_CHANGE_PATH))
161 config_menu(self.ui.menu_com_port, text=self.get_language_text(L_MENU_PRINTER_PORT))
162 config_menu(self.ui.menu_paper_width, text=self.get_language_text(L_MENU_PAPER_WIDTH))
163
164 config_menu(self.ui.menu_settings, text=self.get_language_text(L_MENU_SETTINGS))
165 config_menu(self.ui.action_sound, text=self.get_language_text(L_MENU_SOUND))
166 config_menu(self.ui.menu_style, text=self.get_language_text(L_MENU_THEME))
167 config_menu(self.ui.action_auto, text=self.get_language_text(L_MENU_AUTO))
168 config_menu(self.ui.action_light, text=self.get_language_text(L_MENU_LIGHT))
169 config_menu(self.ui.action_dark, text=self.get_language_text(L_MENU_DARK))
170 config_menu(self.ui.action_normal, text=self.get_language_text(L_MENU_CLASSIC))
171 config_menu(self.ui.action_system, text=self.get_language_text(L_MENU_SYSTEM))
172 config_menu(self.ui.menu_language, text=self.get_language_text(L_MENU_LANGUAGE))
173 config_menu(self.ui.action_english, text=self.get_language_text(L_MENU_LANGUAGE_ENGLISH))
174 config_menu(self.ui.action_german, text=self.get_language_text(L_MENU_LANGUAGE_GERMAN))
175 config_menu(self.ui.action_show_price, text=self.get_language_text(L_MENU_SHOW_PRICE))
176 config_menu(self.ui.menu_log_verbosity, text=self.get_language_text(L_MENU_LOG_VERBOSITY))
177 config_menu(self.ui.action_log_error, text=f"(0) {self.get_language_text(L_MENU_LOG_ERROR)}")
178 config_menu(self.ui.action_log_warning, text=f"(1) {self.get_language_text(L_MENU_LOG_WARNING)}")
179 config_menu(self.ui.action_log_info, text=f"(2) {self.get_language_text(L_MENU_LOG_INFO)}")
180 config_menu(self.ui.action_log_debug, text=f"(3) {self.get_language_text(L_MENU_LOG_DEBUG)}")
181
182 config_menu(self.ui.menu_help, text=self.get_language_text(L_MENU_HELP))
183 config_menu(self.ui.action_help, text=self.get_language_text(L_MENU_SHOW_HELP))
184 config_menu(self.ui.action_about_app, text=f"{self.get_language_text(L_MENU_ABOUT)} {__title__}")
185 config_menu(self.ui.action_reset, text=self.get_language_text(L_MENU_RESET))
186
187 config_btn(self.ui.btn_calc, text=self.get_language_text(L_CALC))
188
189 if b_update_screen:
190 self.ui.update_screen()
191
192 def get_table_row_description(self) -> list[str]:
193 """!
194 @brief Get table row description
195 @return list with table description
196 """
197 l_table_row_description = ["n", self.get_language_text(L_MENU_ARTICLE), self.get_language_text(L_PRICE)]
198 return l_table_row_description
Class to set language.
Definition language.py:87
None update_language(self, ELanguages e_language)
Update dark mode status.
Definition language.py:99
list[str] get_table_row_description(self)
Get table row description.
Definition language.py:192
Any get_language_text(self, list[Any] l_text)
Get language text.
Definition language.py:117
None update_widgets(self, bool b_update_screen=True)
Update widgets to actual language.
Definition language.py:133
None __init__(self, "MainWindow" ui)
Definition language.py:93