diff --git a/app/ui/control.py b/app/ui/control.py index 12241321..371c4486 100644 --- a/app/ui/control.py +++ b/app/ui/control.py @@ -32,7 +32,7 @@ import re from gi.repository import GLib -from .dialogs import get_builder, get_message +from .dialogs import get_builder, translate from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH from ..commons import run_task, run_with_delay, log, run_idle from ..connections import HttpAPI @@ -41,8 +41,8 @@ from ..settings import IS_DARWIN, IS_LINUX, IS_WIN class ControlTool(Gtk.Box): - def __init__(self, app, settings, *args, **kwargs): - super().__init__(*args, **kwargs) + def __init__(self, app, settings, **kwargs): + super().__init__(**kwargs) self._settings = settings self._app = app @@ -335,7 +335,7 @@ class ControlTool(Gtk.Box): except OSError as e: log(e) else: - state = get_message("On" if resp.get("e2instandby", "N/A").strip() == "false" else "Standby") + state = translate("On" if resp.get("e2instandby", "N/A").strip() == "false" else "Standby") GLib.idle_add(self._network_model.set_value, itr, 2, state) diff --git a/app/ui/dialogs.py b/app/ui/dialogs.py index 4c9728f7..38d02013 100644 --- a/app/ui/dialogs.py +++ b/app/ui/dialogs.py @@ -91,7 +91,7 @@ class WaitDialog: @run_idle def set_text(self, text): - self._label.set_text(get_message(text or self._default_text)) + self._label.set_text(translate(text or self._default_text)) @run_idle def hide(self): @@ -135,7 +135,7 @@ def get_chooser_dialog(transient, settings, name, patterns, title=None, file_fil def get_file_chooser_dialog(transient, text, settings, action_type, file_filter, buttons=None, title=None, dirs=False): action_type = Gtk.FileChooserAction.SELECT_FOLDER if action_type is None else action_type - dialog = Gtk.FileChooserNative.new(get_message(title) if title else "", transient, action_type) + dialog = Gtk.FileChooserNative.new(translate(title) if title else "", transient, action_type) dialog.set_create_folders(dirs) dialog.set_modal(True) @@ -174,7 +174,7 @@ def get_message_dialog(transient, message_type, buttons_type, text): builder.add_from_string(dialog_str) dialog = builder.get_object("message_dialog") dialog.set_transient_for(transient) - dialog.set_markup(get_message(text)) + dialog.set_markup(translate(text)) response = dialog.run() dialog.destroy() @@ -202,7 +202,7 @@ def get_dialog_from_xml(dialog_type, transient, use_header=0, title=""): return builder, dialog -def get_message(message): +def translate(message): """ returns translated message """ return gettext.dgettext(TEXT_DOMAIN, message) @@ -246,9 +246,9 @@ def translate_xml(path, tag="property"): root = et.getroot() for e in root.iter(): if e.tag == tag and e.attrib.get("translatable", None) == "yes": - e.text = get_message(e.text) + e.text = translate(e.text) elif e.tag == "item" and e.attrib.get("translatable", None) == "yes": - e.text = get_message(e.text) + e.text = translate(e.text) return ET.tostring(root, encoding="unicode", method="xml") diff --git a/app/ui/epg/epg.py b/app/ui/epg/epg.py index 37e88e55..8b9f2d06 100644 --- a/app/ui/epg/epg.py +++ b/app/ui/epg/epg.py @@ -45,7 +45,7 @@ from app.connections import download_data, DownloadType, HttpAPI from app.eparser.ecommons import BouquetService, BqServiceType from app.settings import SEP, EpgSource, IS_WIN from app.tools.epg import EPG, ChannelsParser, EpgEvent, XmlTvReader -from app.ui.dialogs import get_message, show_dialog, DialogType, get_builder +from app.ui.dialogs import translate, show_dialog, DialogType, get_builder from app.ui.tasks import BGTaskWidget from app.ui.timers import TimerTool from ..main_helper import on_popup_menu, update_entry_data, scroll_to, update_toggle_model, update_filter_sat_positions @@ -478,7 +478,7 @@ class EpgDialog: self._epg_dat_source_box = builder.get_object("epg_dat_source_box") if self._settings.use_header_bar: - header_bar = HeaderBar(title="EPG", subtitle=get_message("List configuration")) + header_bar = HeaderBar(title="EPG", subtitle=translate("List configuration")) self._dialog.set_titlebar(header_bar) builder.get_object("left_action_box").reparent(header_bar) right_box = builder.get_object("right_action_box") @@ -618,8 +618,8 @@ class EpgDialog: if content_type != "application/gzip": self._download_xml_is_active = False - raise ValueError("{} {} {}".format(get_message("Download XML file error."), - get_message("Unsupported file type:"), + raise ValueError("{} {} {}".format(translate("Download XML file error."), + translate("Unsupported file type:"), content_type)) file_name = os.path.basename(url) @@ -645,7 +645,7 @@ class EpgDialog: path = tfp.name.rstrip(".gz") except (HTTPError, URLError) as e: - raise ValueError(f"{get_message('Download XML file error.')} {e}") + raise ValueError(f"{translate('Download XML file error.')} {e}") else: try: with open(path, "wb") as f_out: @@ -653,7 +653,7 @@ class EpgDialog: shutil.copyfileobj(f, f_out) os.remove(tfp.name) except Exception as e: - raise ValueError(f"{get_message('Unpacking data error.')} {e}") + raise ValueError(f"{translate('Unpacking data error.')} {e}") finally: self._download_xml_is_active = False self.update_active_header_elements(True) @@ -662,7 +662,7 @@ class EpgDialog: s_refs, info = ChannelsParser.get_refs_from_xml(path) yield True except Exception as e: - raise ValueError(f"{get_message('XML parsing error:')} {e}") + raise ValueError(f"{translate('XML parsing error:')} {e}") else: refs = refs or {} factor = self._app.DEL_FACTOR / 4 @@ -718,7 +718,7 @@ class EpgDialog: if self._refs_source is RefsSource.XML: text = f"ID = {ch_id}" else: - text = f"{get_message('Service reference')}: {ch_id.rstrip('.png')}" + text = f"{translate('Service reference')}: {ch_id.rstrip('.png')}" tooltip.set_text(text) view.set_tooltip_row(tooltip, path) @@ -742,7 +742,7 @@ class EpgDialog: services.append(srv) ChannelsParser.write_refs_to_xml("{}{}.xml".format(response, self._bouquet_name), services) - self.show_info_message(get_message("Done!"), Gtk.MessageType.INFO) + self.show_info_message(translate("Done!"), Gtk.MessageType.INFO) @run_idle def on_auto_configuration(self, item): @@ -785,8 +785,8 @@ class EpgDialog: break self.update_epg_count() - self.show_info_message("{} {} {}".format(get_message("Done!"), - get_message("Count of successfully configured services:"), + self.show_info_message("{} {} {}".format(translate("Done!"), + translate("Count of successfully configured services:"), success_count), Gtk.MessageType.INFO) def assign_refs(self, model, paths, data): @@ -796,7 +796,7 @@ class EpgDialog: def assign_data(self, row, data, show_error=False): if row[Column.FAV_TYPE] != BqServiceType.IPTV.value: if not show_error: - self.show_info_message(get_message("Not allowed in this context!"), Gtk.MessageType.ERROR) + self.show_info_message(translate("Not allowed in this context!"), Gtk.MessageType.ERROR) return fav_id = row[Column.FAV_ID] @@ -814,8 +814,8 @@ class EpgDialog: row[Column.FAV_LOCKED] = EPG_ICON pos = f"({data[1] if self._refs_source is RefsSource.SERVICES else 'XML'})" - src = f"{get_message('EPG source')}: {(GLib.markup_escape_text(data[0] or ''))} {pos}" - row[Column.FAV_TOOLTIP] = f"{get_message('Service reference')}: {':'.join(fav_id_data[:10])}\n{src}" + src = f"{translate('EPG source')}: {(GLib.markup_escape_text(data[0] or ''))} {pos}" + row[Column.FAV_TOOLTIP] = f"{translate('Service reference')}: {':'.join(fav_id_data[:10])}\n{src}" def on_filter_toggled(self, button): self._filter_bar.set_visible(button.get_active()) @@ -888,7 +888,7 @@ class EpgDialog: source_count = len(self._services_model) self._source_count_label.set_text(str(source_count)) if self._enable_dat_filter and source_count == 0: - msg = get_message("Current epg.dat file does not contains references for the services of this bouquet!") + msg = translate("Current epg.dat file does not contains references for the services of this bouquet!") self.show_info_message(msg, Gtk.MessageType.WARNING) @run_idle @@ -933,7 +933,7 @@ class EpgDialog: if all(s_data[:-1]): data.set_text("::::".join(s_data), -1) else: - self.show_info_message(get_message("Source error!"), Gtk.MessageType.ERROR) + self.show_info_message(translate("Source error!"), Gtk.MessageType.ERROR) def on_drag_data_received(self, view, drag_context, x, y, data, info, time): path, pos = view.get_dest_row_at_pos(x, y) diff --git a/app/ui/extensions/management.py b/app/ui/extensions/management.py index c23a1377..459f111a 100644 --- a/app/ui/extensions/management.py +++ b/app/ui/extensions/management.py @@ -29,13 +29,14 @@ import os import pkgutil import shutil +from enum import IntEnum from pathlib import Path import requests from gi.repository import Gtk, Gdk, GLib from app.commons import log, run_task, run_idle -from app.ui.dialogs import get_message +from app.ui.dialogs import translate from app.ui.uicommons import HeaderBar EXT_URL = "https://api.github.com/repos/DYefremov/demoneditor-extensions/contents/extensions" @@ -44,9 +45,15 @@ HEADERS = {"User-Agent": "Mozilla/5.0 (X11; Linux i686; rv:112.0) Gecko/20100101 class ExtensionManager(Gtk.Window): + class Column(IntEnum): + TITLE = 0 + DESC = 1 + STATUS = 2 + URL = 3 + PATH = 4 def __init__(self, app, **kwargs): - super().__init__(title=get_message("Extensions"), icon_name="demon-editor", application=app, + super().__init__(title=translate("Extensions"), icon_name="demon-editor", application=app, transient_for=app.app_window, destroy_with_parent=True, window_position=Gtk.WindowPosition.CENTER_ON_PARENT, default_width=560, default_height=320, modal=True, **kwargs) @@ -54,7 +61,7 @@ class ExtensionManager(Gtk.Window): self._app = app self._ext_path = f"{self._app.app_settings.default_data_path}tools{os.sep}extensions" - titles = (get_message("Title"), get_message("Description"), get_message("Status")) + titles = (translate("Title"), translate("Description"), translate("Status")) margin = {"margin_start": 5, "margin_end": 5, "margin_top": 5, "margin_bottom": 5} # Title, Description, Satus, URL, Path. self._model = Gtk.ListStore.new((str, str, str, str, object)) @@ -92,11 +99,11 @@ class ExtensionManager(Gtk.Window): # Popup menu. menu = Gtk.Menu() item = Gtk.ImageMenuItem.new_from_stock("gtk-goto-bottom") - item.set_label(get_message("Download")) + item.set_label(translate("Download")) item.connect("activate", self.on_download) menu.append(item) item = Gtk.ImageMenuItem.new_from_stock("gtk-remove") - item.set_label(get_message("Remove")) + item.set_label(translate("Remove")) item.connect("activate", self.on_remove) menu.append(item) menu.show_all() @@ -104,11 +111,11 @@ class ExtensionManager(Gtk.Window): # Header and toolbar. download_button = Gtk.Button.new_from_icon_name("go-bottom-symbolic", Gtk.IconSize.BUTTON) - download_button.set_label(get_message("Download")) + download_button.set_label(translate("Download")) download_button.set_always_show_image(True) download_button.connect("clicked", self.on_download) remove_button = Gtk.Button.new_from_icon_name("user-trash-symbolic", Gtk.IconSize.BUTTON) - remove_button.set_label(get_message("Remove")) + remove_button.set_label(translate("Remove")) remove_button.set_always_show_image(True) remove_button.connect("clicked", self.on_remove) @@ -175,8 +182,8 @@ class ExtensionManager(Gtk.Window): except OSError as e: log(f"{self.__class__.__name__} [remove] error: {e}") else: - model[paths][-1] = None - model[paths][2] = get_message("Removed") + model[paths][self.Column.PATH] = None + model[paths][self.Column.STATUS] = translate("Removed") @run_task def on_download(self, item): @@ -184,7 +191,7 @@ class ExtensionManager(Gtk.Window): if not paths: return - url = model[paths][-2] + url = model[paths][self.Column.URL] if not url: return @@ -206,9 +213,9 @@ class ExtensionManager(Gtk.Window): os.makedirs(os.path.dirname(path), exist_ok=True) if all((self.download_file(u, f"{path}{n}") for u, n in urls.items())): itr = model.get_iter(paths) - GLib.idle_add(model.set_value, itr, 2, "Downloaded") - GLib.idle_add(model.set_value, itr, 4, path) - msg = f"Extension is downloaded. {get_message('Restart the program to apply all changes.')}" + GLib.idle_add(model.set_value, itr, self.Column.STATUS, "Downloaded") + GLib.idle_add(model.set_value, itr, self.Column.PATH, path) + msg = translate('Restart the program to apply all changes.') self._app.show_info_message(msg, Gtk.MessageType.WARNING) def download_file(self, url, path): diff --git a/app/ui/ftp.py b/app/ui/ftp.py index 1d63149c..b1178822 100644 --- a/app/ui/ftp.py +++ b/app/ui/ftp.py @@ -43,7 +43,7 @@ from gi.repository import GLib from app.commons import log, run_task, run_idle, get_size_from_bytes from app.connections import UtfFTP from app.settings import IS_LINUX, IS_DARWIN, IS_WIN, SEP, USE_HEADER_BAR -from app.ui.dialogs import show_dialog, DialogType, get_builder, get_message +from app.ui.dialogs import show_dialog, DialogType, get_builder, translate from app.ui.main_helper import on_popup_menu from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, KeyboardKey, MOD_MASK, Page @@ -147,7 +147,7 @@ class AttributesDialog(BaseDialog): """ Dialog for editing file attributes (permissions). """ def __init__(self, attrs, use_header_bar=0, *args, **kwargs): - super().__init__(title=get_message("Permissions"), use_header_bar=use_header_bar, *args, **kwargs) + super().__init__(title=translate("Permissions"), use_header_bar=use_header_bar, *args, **kwargs) self.set_default_size(360, 100) self.set_resizable(False) diff --git a/app/ui/imports.py b/app/ui/imports.py index 4c367f8b..0fb28e81 100644 --- a/app/ui/imports.py +++ b/app/ui/imports.py @@ -35,7 +35,7 @@ from app.eparser import get_bouquets, get_services, BouquetsReader from app.eparser.ecommons import BqType, BqServiceType, Bouquet from app.eparser.neutrino.bouquets import parse_webtv, parse_bouquets as get_neutrino_bouquets from app.settings import SettingsType, IS_DARWIN, SEP -from app.ui.dialogs import show_dialog, DialogType, get_chooser_dialog, get_message, get_builder +from app.ui.dialogs import show_dialog, DialogType, get_chooser_dialog, translate, get_builder from app.ui.main_helper import on_popup_menu, get_iptv_data from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, KeyboardKey, Column, Page, HeaderBar @@ -219,7 +219,7 @@ class ImportDialog: def on_import(self, item): if self._page is Page.SERVICES: if not any(r[-1] for r in self._bq_model): - self.show_info_message(get_message("No selected item!"), Gtk.MessageType.ERROR) + self.show_info_message(translate("No selected item!"), Gtk.MessageType.ERROR) return if not self._bouquets or show_dialog(DialogType.QUESTION, self._dialog_window) != Gtk.ResponseType.OK: @@ -346,8 +346,8 @@ class ImportDialog: row = self._services_model[path][:] if row[1] == "IPTV": ref, url = get_iptv_data(row[-1]) - ref = f"{get_message('Service reference')}: {ref}" - info = f"{get_message('Name')}: {row[0]}\n{ref}\nURL: {url}" + ref = f"{translate('Service reference')}: {ref}" + info = f"{translate('Name')}: {row[0]}\n{ref}\nURL: {url}" self._service_info_label.set_text(info) else: srv = self._services.get(row[-1], None) diff --git a/app/ui/iptv.py b/app/ui/iptv.py index 93eabbe9..449c5145 100644 --- a/app/ui/iptv.py +++ b/app/ui/iptv.py @@ -43,7 +43,7 @@ from app.eparser.iptv import (NEUTRINO_FAV_ID_FORMAT, StreamType, ENIGMA2_FAV_ID parse_m3u, PICON_FORMAT) from app.settings import SettingsType from app.tools.yt import YouTubeException, YouTube -from app.ui.dialogs import Action, show_dialog, DialogType, get_message, get_builder +from app.ui.dialogs import Action, show_dialog, DialogType, translate, get_builder from app.ui.main_helper import get_iptv_url, on_popup_menu, get_picon_pixbuf from app.ui.uicommons import (Gtk, Gdk, UI_RESOURCES_PATH, IPTV_ICON, Column, KeyboardKey, get_yt_icon, HeaderBar) @@ -164,14 +164,14 @@ class IptvDialog: self.on_url_changed(self._url_entry) if not is_data_correct(self._digit_elems) or self._url_entry.get_name() == _DIGIT_ENTRY_NAME: - self.show_info_message(get_message("Error. Verify the data!"), Gtk.MessageType.ERROR) + self.show_info_message(translate("Error. Verify the data!"), Gtk.MessageType.ERROR) return url = self._url_entry.get_text() if all((self._url_prefix_box.get_visible(), self._url_prefix_combobox.get_active_id(), url.count("http") > 1 or urlparse(url).scheme.upper() in _URL_PREFIXES)): - self.show_info_message(get_message("Invalid prefix for the given URL!"), Gtk.MessageType.ERROR) + self.show_info_message(translate("Invalid prefix for the given URL!"), Gtk.MessageType.ERROR) return if show_dialog(DialogType.QUESTION, self._dialog) in (Gtk.ResponseType.CANCEL, Gtk.ResponseType.DELETE_EVENT): @@ -297,7 +297,7 @@ class IptvDialog: links, title = self._yt_dl.get_yt_link(video_id, entry.get_text()) yield True except urllib.error.URLError as e: - self.show_info_message(f"{get_message('Getting link error:')} {e}", Gtk.MessageType.ERROR) + self.show_info_message(f"{translate('Getting link error:')} {e}", Gtk.MessageType.ERROR) return except YouTubeException as e: self.show_info_message((str(e)), Gtk.MessageType.ERROR) @@ -312,7 +312,7 @@ class IptvDialog: entry.set_text(links[sorted(links, key=lambda x: int(x.rstrip("p")), reverse=True)[0]]) self._yt_links = links else: - msg = f"{get_message('Getting link error:')} No link received for id: {video_id}" + msg = f"{translate('Getting link error:')} No link received for id: {video_id}" self.show_info_message(msg, Gtk.MessageType.ERROR) finally: entry.set_sensitive(True) @@ -697,14 +697,14 @@ class M3uImportDialog(IptvListDialog): self._max_count = 0 self._is_download = False self._cancellable = Gio.Cancellable() - self._dialog.set_title(get_message("Playlist import")) + self._dialog.set_title(translate("Playlist import")) self._dialog.connect("delete-event", self.on_close) - self._apply_button.set_label(get_message("Import")) + self._apply_button.set_label(translate("Import")) # Progress self._progress_bar = Gtk.ProgressBar(visible=False, valign="center") self._spinner = Gtk.Spinner(active=False) self._info_label = Gtk.Label(visible=True, ellipsize="end", max_width_chars=30) - load_label = Gtk.Label(label=get_message("Loading data...")) + load_label = Gtk.Label(label=translate("Loading data...")) self._spinner.bind_property("active", self._spinner, "visible") self._spinner.bind_property("visible", load_label, "visible") self._spinner.bind_property("active", self._start_values_grid, "sensitive", 4) @@ -717,7 +717,7 @@ class M3uImportDialog(IptvListDialog): self._picons_switch = Gtk.Switch(visible=True) self._picon_box = Gtk.HBox(visible=True, sensitive=False, spacing=5) self._picon_box.pack_end(self._picons_switch, False, False, 0) - self._picon_box.pack_end(Gtk.Label(visible=True, label=get_message("Download picons")), False, False, 0) + self._picon_box.pack_end(Gtk.Label(visible=True, label=translate("Download picons")), False, False, 0) # Extra box extra_box = Gtk.HBox(visible=True, spacing=2, margin_bottom=5, margin_top=5) extra_box.set_center_widget(progress_box) @@ -740,7 +740,7 @@ class M3uImportDialog(IptvListDialog): GLib.idle_add(self._picon_box.set_sensitive, True) break finally: - msg = f"{get_message('Streams detected:')} {len(self._services) if self._services else 0}." + msg = f"{translate('Streams detected:')} {len(self._services) if self._services else 0}." GLib.idle_add(self._info_label.set_text, msg) GLib.idle_add(self._spinner.set_property, "active", False) @@ -941,7 +941,7 @@ class YtListImportDialog: builder.get_object("yt_url_prefix_box").set_visible(self._s_type is SettingsType.ENIGMA_2) if self._settings.use_header_bar: - header_bar = HeaderBar(title="YouTube", subtitle=get_message("Playlist import")) + header_bar = HeaderBar(title="YouTube", subtitle=translate("Playlist import")) self._dialog.set_titlebar(header_bar) actions_box = builder.get_object("yt_actions_box") import_box = builder.get_object("yt_import_box") @@ -1073,7 +1073,7 @@ class YtListImportDialog: srvs.append(srv) self.appender(srvs) - self.show_info_message(get_message("Done!"), Gtk.MessageType.INFO) + self.show_info_message(translate("Done!"), Gtk.MessageType.INFO) @run_idle def update_active_elements(self, sensitive): diff --git a/app/ui/main.py b/app/ui/main.py index e22dce93..0d493bf0 100644 --- a/app/ui/main.py +++ b/app/ui/main.py @@ -60,7 +60,7 @@ from app.ui.telnet import TelnetClient from app.ui.timers import TimerTool from app.ui.transmitter import LinksTransmitter from .backup import BackupDialog, backup_data, clear_data_path, restore_data -from .dialogs import show_dialog, DialogType, get_chooser_dialog, WaitDialog, get_message, get_builder +from .dialogs import show_dialog, DialogType, get_chooser_dialog, WaitDialog, translate, get_builder from .imports import ImportDialog, import_bouquet from .iptv import IptvDialog, SearchUnavailableDialog, IptvListConfigurationDialog, YtListImportDialog, M3uImportDialog from .main_helper import * @@ -659,12 +659,12 @@ class Application(Gtk.Application): else: tools_menu = builder.get_object("tools_menu") tools_button = Gtk.MenuButton(visible=True, menu_model=tools_menu, direction=Gtk.ArrowType.NONE) - tools_button.set_tooltip_text(get_message("Tools")) + tools_button.set_tooltip_text(translate("Tools")) tools_button.set_image(Gtk.Image.new_from_icon_name("applications-utilities-symbolic", Gtk.IconSize.BUTTON)) view_menu = builder.get_object("view_menu") view_button = Gtk.MenuButton(visible=True, menu_model=view_menu, direction=Gtk.ArrowType.NONE) - view_button.set_tooltip_text(get_message("View")) + view_button.set_tooltip_text(translate("View")) box = Gtk.ButtonBox(visible=True, layout_style="expand") box.add(tools_button) @@ -686,7 +686,7 @@ class Application(Gtk.Application): # Extensions (Plugins) section. ext_section = builder.get_object(f"{'mac_' if IS_DARWIN else ''}extension_section") self.set_action("on_extension_manager", lambda a, v: ExtensionManager(self).show()) - ext_section.append_item(Gio.MenuItem.new(get_message("Extension Manager"), "app.on_extension_manager")) + ext_section.append_item(Gio.MenuItem.new(translate("Extension Manager"), "app.on_extension_manager")) ext_path = f"{self._settings.default_data_path}tools{os.sep}extensions" ext_paths = [f"{os.path.dirname(__file__)}{os.sep}extensions", ext_path, "extensions"] @@ -1031,13 +1031,13 @@ class Application(Gtk.Application): self._settings.add("fav_paned_position", self._fav_paned.get_position()) if self.is_data_loading(): - msg = f"{get_message('Data loading in progress!')}\n\n\t{get_message('Are you sure?')}" + msg = f"{translate('Data loading in progress!')}\n\n\t{translate('Are you sure?')}" if show_dialog(DialogType.QUESTION, self._main_window, msg) != Gtk.ResponseType.OK: return True if self._recorder: if self._recorder.is_record(): - msg = f"{get_message('Recording in progress!')}\n\n\t{get_message('Are you sure?')}" + msg = f"{translate('Recording in progress!')}\n\n\t{translate('Are you sure?')}" if show_dialog(DialogType.QUESTION, self._main_window, msg) != Gtk.ResponseType.OK: return True self._recorder.release() @@ -1145,10 +1145,10 @@ class Application(Gtk.Application): value = bool(value) self._settings.use_header_bar = bool(value) - msg = get_message("Restart the program to apply all changes.") + msg = translate("Restart the program to apply all changes.") if value: warn = "It can cause some problems." - msg = f"{get_message('EXPERIMENTAL!')} {warn} {msg}" + msg = f"{translate('EXPERIMENTAL!')} {warn} {msg}" self.show_info_message(msg, Gtk.MessageType.WARNING) @run_idle @@ -1156,8 +1156,8 @@ class Application(Gtk.Application): is_alt = bool(value) self.reverse_main_elements(is_alt) if self._settings.play_streams_mode is PlayStreamsMode.BUILT_IN: - msg = get_message("Layout of elements has been changed!") - msg = f"{msg} {get_message('Restart the program to apply all changes.')}" + msg = translate("Layout of elements has been changed!") + msg = f"{msg} {translate('Restart the program to apply all changes.')}" self.show_info_message(msg, Gtk.MessageType.WARNING) self.emit("layout-changed", is_alt) @@ -1384,7 +1384,7 @@ class Application(Gtk.Application): returns deleted rows list! """ if self.is_data_loading(): - show_dialog(DialogType.ERROR, self._main_window, get_message("Data loading in progress!")) + show_dialog(DialogType.ERROR, self._main_window, translate("Data loading in progress!")) return selection = view.get_selection() @@ -1525,7 +1525,7 @@ class Application(Gtk.Application): key = f"{response}:{bq_type}" while key in self._bouquets: - self.show_error_message(get_message("A bouquet with that name exists!")) + self.show_error_message(translate("A bouquet with that name exists!")) response = show_dialog(DialogType.INPUT, self._main_window, bq_name) if response == Gtk.ResponseType.CANCEL: return @@ -1652,7 +1652,7 @@ class Application(Gtk.Application): model, paths = self._fav_view.get_selection().get_selected_rows() if len(paths) < 2 and len(bq) > self.FAV_FACTOR or len(paths) > self.FAV_FACTOR: - self._wait_dialog.show(get_message("Sorting data...")) + self._wait_dialog.show(translate("Sorting data...")) GLib.idle_add(self.sort_fav, c_num, bq, paths, order, 0 if c_num == Column.FAV_NUM else "") def sort_fav(self, c_num, bq, paths, rev=False, nv=""): @@ -1711,7 +1711,7 @@ class Application(Gtk.Application): counter = Counter(s.service_type for s in filter(None, (self._services.get(f_id, None) for f_id in bq))) services_txt = "\n".join(f"{k}: {v}" for k, v in counter.items()) - n_msg, s_msg, f_msg = get_message("Name"), get_message("Services"), get_message("File") + n_msg, s_msg, f_msg = translate("Name"), translate("Services"), translate("File") f = f"\n\n{f_msg}: *.{self._bq_file.get(b_id, None)}.{b_type}" if self._s_type is SettingsType.ENIGMA_2 else "" tooltip.set_text(f"{n_msg}: {name}\n{s_msg}:\n{services_txt}{f}") view.set_tooltip_row(tooltip, path) @@ -1754,7 +1754,7 @@ class Application(Gtk.Application): tooltip.set_icon(self.get_tooltip_picon(srv)) fav_id = srv.fav_id names = (b[:b.rindex(":")] for b, ids in self._bouquets.items() if fav_id in ids) - text = f"{get_message('Name')}: {srv.service}\n{get_message('Bouquets')}: {', '.join(names)}" + text = f"{translate('Name')}: {srv.service}\n{translate('Bouquets')}: {', '.join(names)}" tooltip.set_text(text) view.set_tooltip_row(tooltip, path) return True @@ -1781,14 +1781,14 @@ class Application(Gtk.Application): if srv.service_type == BqServiceType.IPTV.name: return f"{header}{ref}" - pol = ", {}: {},".format(get_message("Pol"), srv.pol) if srv.pol else "," + pol = ", {}: {},".format(translate("Pol"), srv.pol) if srv.pol else "," fec = "{}: {}".format("FEC", srv.fec) if srv.fec else "," ht = "{}{}: {}\n{}: {}\n{}: {}\n{}: {}{} {}, {}\n{}" return ht.format(header, - get_message("Package"), srv.package, - get_message("System"), srv.system, - get_message("Freq"), srv.freq, - get_message("Rate"), srv.rate, pol, fec, + translate("Package"), srv.package, + translate("System"), srv.system, + translate("Freq"), srv.freq, + translate("Rate"), srv.rate, pol, fec, self.get_ssid_info(srv), ref) @@ -1798,8 +1798,8 @@ class Application(Gtk.Application): return f"{header}{self.get_ssid_info(srv)}\n{ref}" def get_hint_header_info(self, srv): - header = f"{get_message('Name')}: {srv.service}\n{get_message('Type')}: {srv.service_type}\n" - ref = f"{get_message('Service reference')}: {get_service_reference(srv)}" + header = f"{translate('Name')}: {srv.service}\n{translate('Type')}: {srv.service_type}\n" + ref = f"{translate('Service reference')}: {get_service_reference(srv)}" return header, ref def get_ssid_info(self, srv): @@ -2298,7 +2298,7 @@ class Application(Gtk.Application): services = get_services(data_path, prf, self.get_format_version() if prf is SettingsType.ENIGMA_2 else 0) yield True except FileNotFoundError as e: - msg = get_message("Please, download files from receiver or setup your path for read data!") + msg = translate("Please, download files from receiver or setup your path for read data!") self.show_error_message(getattr(e, "message", str(e)) + "\n\n" + msg) return except SyntaxError as e: @@ -2307,7 +2307,7 @@ class Application(Gtk.Application): except Exception as e: msg = "Reading data error: {}" log(msg.format(e), debug=self._settings.debug_mode, fmt_message=msg) - self.show_error_message("{}\n{}".format(get_message("Reading data error!"), e)) + self.show_error_message("{}\n{}".format(translate("Reading data error!"), e)) return else: self.append_blacklist(black_list) @@ -2550,8 +2550,8 @@ class Application(Gtk.Application): return if os.listdir(response): - msg = "{}\n\n\t\t{}".format(get_message("The selected folder already contains files!"), - get_message("Are you sure?")) + msg = "{}\n\n\t\t{}".format(translate("The selected folder already contains files!"), + translate("Are you sure?")) if show_dialog(DialogType.QUESTION, self._main_window, msg) != Gtk.ResponseType.OK: return @@ -2991,8 +2991,8 @@ class Application(Gtk.Application): model.set_value(itr, 1 if flag is Flag.LOCK else 2, value) if self._s_type is SettingsType.ENIGMA_2: - msg = get_message("After uploading the changes you may need to completely reboot the receiver!") - self.show_info_message(f"{get_message('EXPERIMENTAL!')} {msg}", Gtk.MessageType.WARNING) + msg = translate("After uploading the changes you may need to completely reboot the receiver!") + self.show_info_message(f"{translate('EXPERIMENTAL!')} {msg}", Gtk.MessageType.WARNING) else: if self._s_type is SettingsType.ENIGMA_2: set_flags(flag, self._services_view, self._fav_view, self._services, self._blacklist) @@ -3964,7 +3964,7 @@ class Application(Gtk.Application): bq = f"{response}:{bq_type}" if bq in self._bouquets: - self.show_error_message(get_message("A bouquet with that name exists!")) + self.show_error_message(translate("A bouquet with that name exists!")) return model.set_value(itr, Column.BQ_NAME, response) @@ -4080,9 +4080,9 @@ class Application(Gtk.Application): return gen = self.remove_favs(to_remove, self._fav_model) GLib.idle_add(lambda: next(gen, False)) - self.show_info_message(f"{get_message('Done!')} {get_message('Removed')}: {count}") + self.show_info_message(f"{translate('Done!')} {translate('Removed')}: {count}") else: - self.show_info_message(f"{get_message('Done!')} {get_message('Found')}: {count}") + self.show_info_message(f"{translate('Done!')} {translate('Found')}: {count}") def on_services_mark_not_in_bouquets(self, item): if self.is_data_loading(): @@ -4436,7 +4436,7 @@ class Application(Gtk.Application): self._current_ip_label.set_text(f"{label}: {self._settings.host}") profile_name = self._profile_combo_box.get_active_text() - msg = get_message("Profile:") + msg = translate("Profile:") if self._s_type is SettingsType.ENIGMA_2: title = f"DemonEditor [{msg} {profile_name} - Enigma2 v.{self.get_format_version()}]" @@ -4453,7 +4453,7 @@ class Application(Gtk.Application): @run_idle def show_info_message(self, text, message_type=Gtk.MessageType.INFO): self._info_bar.set_visible(False) - self._info_label.set_text(get_message(text)) + self._info_label.set_text(translate(text)) self._info_bar.set_message_type(message_type) self._info_bar.set_visible(True) @@ -4579,16 +4579,16 @@ def start_app(): try: Settings.get_instance() except SettingsReadException as e: - msg = f"{get_message('Error reading or writing program settings!')}\n {e}" + msg = f"{translate('Error reading or writing program settings!')}\n {e}" show_dialog(DialogType.INFO, transient=Gtk.Dialog(), text=msg) except SettingsException as e: - msg = f"{e}\n\n{get_message('It is recommended to load the default settings!')}" + msg = f"{e}\n\n{translate('It is recommended to load the default settings!')}" dlg = Gtk.Dialog() if show_dialog(DialogType.QUESTION, dlg, msg) != Gtk.ResponseType.OK: return True Settings.reset_to_default() - show_dialog(DialogType.INFO, transient=dlg, text=get_message("All setting were reset. Restart the program!")) + show_dialog(DialogType.INFO, transient=dlg, text=translate("All setting were reset. Restart the program!")) else: app = Application() app.run(sys.argv) diff --git a/app/ui/main_helper.py b/app/ui/main_helper.py index 7c113db2..46b4e304 100644 --- a/app/ui/main_helper.py +++ b/app/ui/main_helper.py @@ -50,7 +50,7 @@ from app.eparser import Service from app.eparser.ecommons import Flag, BouquetService, Bouquet, BqType from app.eparser.enigma.bouquets import BqServiceType, to_bouquet_id from app.settings import SettingsType, SEP, IS_WIN, IS_DARWIN, IS_LINUX -from .dialogs import show_dialog, DialogType, get_message +from .dialogs import show_dialog, DialogType, translate from .uicommons import ViewTarget, BqGenType, Gtk, Gdk, HIDE_ICON, LOCKED_ICON, KeyboardKey, Column @@ -430,7 +430,7 @@ def assign_picons(target, srv_view, fav_view, transient, picons, settings, servi picons_files = [] if not src_path: - dialog = get_picon_dialog(transient, get_message("Picon selection"), get_message("Open"), False) + dialog = get_picon_dialog(transient, translate("Picon selection"), translate("Open"), False) if dialog.run() in (Gtk.ResponseType.CANCEL, Gtk.ResponseType.DELETE_EVENT) or not dialog.get_filenames(): return picons_files @@ -607,7 +607,7 @@ def gen_bouquets(app, gen_type): cond = srv.package if gen_type is BqGenType.PACKAGE else srv.pos if gen_type is BqGenType.SAT else srv.service_type if gen_type is BqGenType.TYPE and cond == "Data": - msg = f"{get_message('Selected type:')} '{cond}'\n\n{get_message('Are you sure?')}" + msg = f"{translate('Selected type:')} '{cond}'\n\n{translate('Are you sure?')}" if show_dialog(DialogType.QUESTION, app.app_window, msg) != Gtk.ResponseType.OK: return diff --git a/app/ui/picons.py b/app/ui/picons.py index 53d92d40..bb92de08 100644 --- a/app/ui/picons.py +++ b/app/ui/picons.py @@ -41,7 +41,7 @@ from app.settings import SettingsType, Settings, SEP, IS_DARWIN from app.tools.picons import (PiconsParser, parse_providers, Provider, convert_to, download_picon, PiconsCzDownloader, PiconsError) from app.tools.satellites import SatellitesParser, SatelliteSource -from .dialogs import show_dialog, DialogType, get_message, get_builder, get_chooser_dialog +from .dialogs import show_dialog, DialogType, translate, get_builder, get_chooser_dialog from .main_helper import (scroll_to, on_popup_menu, get_base_model, set_picon, get_picon_pixbuf, get_picon_dialog, get_picon_file_name, get_pixbuf_from_data, get_pixbuf_at_scale) from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, TV_ICON, Column, KeyboardKey, Page, ViewTarget @@ -201,7 +201,7 @@ class PiconManager(Gtk.Box): self.show() if not len(self._picon_ids) and self._s_type is SettingsType.ENIGMA_2: - message = get_message("To automatically set the identifiers for picons,\n" + message = translate("To automatically set the identifiers for picons,\n" "first load the required services list into the main application window.") self.show_info_message(message, Gtk.MessageType.WARNING) self._satellite_label.show() @@ -439,7 +439,7 @@ class PiconManager(Gtk.Box): def on_add(self, item): """ Adds (copies) picons from an external folder to the profile picons folder. """ - dialog = get_picon_dialog(self._app_window, get_message("Add picons"), get_message("Add")) + dialog = get_picon_dialog(self._app_window, translate("Add picons"), translate("Add")) if dialog.run() in (Gtk.ResponseType.CANCEL, Gtk.ResponseType.DELETE_EVENT): return @@ -531,10 +531,10 @@ class PiconManager(Gtk.Box): settings = Settings(self._settings.settings) settings.profile_picons_path = f"{dest_path}{SEP}" settings.current_profile = self._settings.current_profile - self.show_info_message(get_message("Please, wait..."), Gtk.MessageType.INFO) + self.show_info_message(translate("Please, wait..."), Gtk.MessageType.INFO) self.run_func(lambda: upload_data(settings=settings, download_type=DownloadType.PICONS, - done_callback=lambda: self.show_info_message(get_message("Done!"), + done_callback=lambda: self.show_info_message(translate("Done!"), Gtk.MessageType.INFO), files_filter=files_filter)) @@ -556,7 +556,7 @@ class PiconManager(Gtk.Box): return self.run_func(lambda: remove_picons(settings=self._settings, - done_callback=lambda: self.show_info_message(get_message("Done!"), + done_callback=lambda: self.show_info_message(translate("Done!"), Gtk.MessageType.INFO), files_filter=files_filter)) @@ -620,7 +620,7 @@ class PiconManager(Gtk.Box): tooltip = f"{link} (by ChocholouĊĦek)" elif self._download_src is self.DownloadSource.LYNG_SAT: link = "https://www.lyngsat.com" - tooltip = f"{get_message('Providers')} [{link}]" + tooltip = f"{translate('Providers')} [{link}]" else: link = "" tooltip = "" @@ -724,14 +724,14 @@ class PiconManager(Gtk.Box): for prv in providers: if self._download_src is self.DownloadSource.LYNG_SAT and not self._POS_PATTERN.match(prv[2]): self.show_info_message( - get_message("Specify the correct position value for the provider!"), Gtk.MessageType.ERROR) + translate("Specify the correct position value for the provider!"), Gtk.MessageType.ERROR) scroll_to(prv.path, self._providers_view) return try: picons_path = self._current_path_label.get_text() os.makedirs(os.path.dirname(picons_path), exist_ok=True) - self.show_info_message(get_message("Please, wait..."), Gtk.MessageType.INFO) + self.show_info_message(translate("Please, wait..."), Gtk.MessageType.INFO) providers = (Provider(*p) for p in providers) if self._download_src is self.DownloadSource.LYNG_SAT: @@ -773,7 +773,7 @@ class PiconManager(Gtk.Box): for future in not_done: future.cancel() concurrent.futures.wait(not_done) - self.show_info_message(get_message("Done!"), Gtk.MessageType.INFO) + self.show_info_message(translate("Done!"), Gtk.MessageType.INFO) def get_picons_for_picon_cz(self, path, providers): p_ids = None @@ -789,7 +789,7 @@ class PiconManager(Gtk.Box): log(f"Error: {str(e)}\n") self.show_info_message(str(e), Gtk.MessageType.ERROR) else: - self.show_info_message(get_message("Done!"), Gtk.MessageType.INFO) + self.show_info_message(translate("Done!"), Gtk.MessageType.INFO) def get_bouquet_picon_ids(self): """ Returns picon ids for selected bouquet or None. """ @@ -817,13 +817,13 @@ class PiconManager(Gtk.Box): @run_task def resize(self, path): - self.show_info_message(get_message("Resizing..."), Gtk.MessageType.INFO) + self.show_info_message(translate("Resizing..."), Gtk.MessageType.INFO) try: from pathlib import Path from PIL import Image except ImportError as e: - self.show_info_message(f"{get_message('Conversion error.')} {e}", Gtk.MessageType.ERROR) + self.show_info_message(f"{translate('Conversion error.')} {e}", Gtk.MessageType.ERROR) else: res = (220, 132) if self._resize_220_132_radio_button.get_active() else (100, 60) @@ -832,7 +832,7 @@ class PiconManager(Gtk.Box): img = img.resize(res, Image.ANTIALIAS) img.save(img_file, "PNG", optimize=True) - self.show_info_message(get_message("Done!"), Gtk.MessageType.INFO) + self.show_info_message(translate("Done!"), Gtk.MessageType.INFO) def on_cancel(self, item=None): if self._is_downloading and show_dialog(DialogType.QUESTION, self._app_window) == Gtk.ResponseType.CANCEL: @@ -844,7 +844,7 @@ class PiconManager(Gtk.Box): def terminate_task(self): self._terminate = True self._is_downloading = False - self.show_info_message(get_message("The task is canceled!"), Gtk.MessageType.WARNING) + self.show_info_message(translate("The task is canceled!"), Gtk.MessageType.WARNING) @run_task def run_func(self, func, update=False): @@ -951,8 +951,8 @@ class PiconManager(Gtk.Box): return self._app.get_hint_for_srv_list(srv) header, ref = self._app.get_hint_header_info(srv) - return "{} {}: {}\n{}: {} {}: {}\n{}".format(header.rstrip(), get_message("Package"), srv.package, - get_message("System"), srv.system, get_message("Freq"), srv.freq, + return "{} {}: {}\n{}: {} {}: {}\n{}".format(header.rstrip(), translate("Package"), srv.package, + translate("System"), srv.system, translate("Freq"), srv.freq, ref) def on_view_query_tooltip(self, view, x, y, keyboard_mode, tooltip): @@ -1002,7 +1002,7 @@ class PiconManager(Gtk.Box): convert_to(src_path=picons_path, dest_path=save_path, s_type=SettingsType.ENIGMA_2, - done_callback=lambda: self.show_info_message(get_message("Done!"), Gtk.MessageType.INFO)) + done_callback=lambda: self.show_info_message(translate("Done!"), Gtk.MessageType.INFO)) @run_idle def update_receive_button_state(self): diff --git a/app/ui/playback.py b/app/ui/playback.py index 59f0e039..081d9d36 100644 --- a/app/ui/playback.py +++ b/app/ui/playback.py @@ -36,7 +36,7 @@ from app.connections import HttpAPI from app.eparser.ecommons import BqServiceType from app.settings import PlayStreamsMode, PlaybackMode, IS_DARWIN, SettingsType, USE_HEADER_BAR from app.tools.media import Player -from app.ui.dialogs import get_builder, get_message +from app.ui.dialogs import get_builder, translate from app.ui.main_helper import get_iptv_url from app.ui.uicommons import Gtk, Gdk, UI_RESOURCES_PATH, Column, Page @@ -391,8 +391,8 @@ class PlayerBox(Gtk.Overlay): if path: return f"DemonEditor [{self._app.fav_view.get_model()[path][:][Column.FAV_SERVICE]}]" else: - return f"DemonEditor [{get_message('Recordings')}]" - return f"DemonEditor [{get_message('Playback')}]" + return f"DemonEditor [{translate('Recordings')}]" + return f"DemonEditor [{translate('Playback')}]" def on_play_stream(self): path, column = self._fav_view.get_cursor() diff --git a/app/ui/settings_dialog.py b/app/ui/settings_dialog.py index 2a3c07d4..09041236 100644 --- a/app/ui/settings_dialog.py +++ b/app/ui/settings_dialog.py @@ -33,7 +33,7 @@ from collections import Counter from app.commons import run_task, run_idle, log from app.connections import test_telnet, test_ftp, TestException, test_http, HttpApiException from app.settings import SettingsType, Settings, PlayStreamsMode, PlaybackMode, IS_LINUX, SEP, IS_WIN -from app.ui.dialogs import show_dialog, DialogType, get_message, get_chooser_dialog, get_builder +from app.ui.dialogs import show_dialog, DialogType, translate, get_chooser_dialog, get_builder from .main_helper import update_entry_data, scroll_to, get_picon_pixbuf from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, DEFAULT_ICON, APP_FONT, HeaderBar @@ -264,9 +264,9 @@ class SettingsDialog: def update_title(self): title = "{} [{}]" if self._s_type is SettingsType.ENIGMA_2: - self._dialog.set_title(title.format(get_message("Options"), self._enigma_radio_button.get_label())) + self._dialog.set_title(title.format(translate("Options"), self._enigma_radio_button.get_label())) elif self._s_type is SettingsType.NEUTRINO_MP: - self._dialog.set_title(title.format(get_message("Options"), self._neutrino_radio_button.get_label())) + self._dialog.set_title(title.format(translate("Options"), self._neutrino_radio_button.get_label())) def update_picon_paths(self): model = self._picons_paths_box.get_model() @@ -497,7 +497,7 @@ class SettingsDialog: def show_info_message(self, text, message_type): self._info_bar.set_visible(False) self._info_bar.set_message_type(message_type) - self._message_label.set_text(get_message(text)) + self._message_label.set_text(translate(text)) self._info_bar.set_visible(True) @run_idle @@ -661,7 +661,7 @@ class SettingsDialog: self._ext_settings.picons_paths = tuple(r[0] for r in model) def on_remove_picon_path(self, button): - msg = f"{get_message('This may change the settings of other profiles!')}\n\n\t\t{get_message('Are you sure?')}" + msg = f"{translate('This may change the settings of other profiles!')}\n\n\t\t{translate('Are you sure?')}" if show_dialog(DialogType.QUESTION, self._dialog, msg) != Gtk.ResponseType.OK: return diff --git a/app/ui/tasks.py b/app/ui/tasks.py index ae96329f..011fc73b 100644 --- a/app/ui/tasks.py +++ b/app/ui/tasks.py @@ -24,7 +24,7 @@ # # Author: Dmitriy Yefremov # -from app.ui.dialogs import get_message +from app.ui.dialogs import translate from .uicommons import Gtk, GLib @@ -37,7 +37,7 @@ class BGTaskWidget(Gtk.Box): super().__init__(spacing=2, orientation=Gtk.Orientation.HORIZONTAL, valign=Gtk.Align.CENTER) self._app = app - self._label = Gtk.Label(get_message(text)) + self._label = Gtk.Label(translate(text)) self.pack_start(self._label, False, False, 0) self._spinner = Gtk.Spinner(active=True) @@ -46,7 +46,7 @@ class BGTaskWidget(Gtk.Box): close_button = Gtk.Button.new_from_icon_name("window-close", Gtk.IconSize.MENU) close_button.set_relief(Gtk.ReliefStyle.NONE) close_button.set_valign(Gtk.Align.CENTER) - close_button.set_tooltip_text(get_message("Cancel")) + close_button.set_tooltip_text(translate("Cancel")) close_button.set_name("task-button") close_button.connect("clicked", lambda b: self._app.emit("task-cancel", self)) self.pack_start(close_button, False, False, 0) diff --git a/app/ui/timers.py b/app/ui/timers.py index 465b79b9..739a546d 100644 --- a/app/ui/timers.py +++ b/app/ui/timers.py @@ -33,7 +33,7 @@ from urllib.parse import quote from app.settings import USE_HEADER_BAR from app.ui.main_helper import on_popup_menu -from .dialogs import get_builder, get_message, show_dialog, DialogType +from .dialogs import get_builder, translate, show_dialog, DialogType from .uicommons import Gtk, Gdk, GLib, UI_RESOURCES_PATH, Page, Column, KeyboardKey, MOD_MASK from ..commons import run_idle, log from ..connections import HttpAPI @@ -71,7 +71,7 @@ class TimerTool(Gtk.Box): "min_end_adjustment", "timer_begins_popover", "begins_hour_adjustment", "min_begins_adjustment")) - self.set_title(get_message("Timer")) + self.set_title(translate("Timer")) self.set_modal(True) self.set_skip_pager_hint(True) self.set_skip_taskbar_hint(True) @@ -111,7 +111,7 @@ class TimerTool(Gtk.Box): self._timer_desc_entry.drag_dest_unset() self._timer_service_entry.drag_dest_unset() - self.add_buttons(get_message("Cancel"), Gtk.ResponseType.CANCEL, get_message("Save"), Gtk.ResponseType.OK) + self.add_buttons(translate("Cancel"), Gtk.ResponseType.CANCEL, translate("Save"), Gtk.ResponseType.OK) self.get_content_area().pack_start(builder.get_object("timer_dialog_frame"), True, True, 5) if self._action is TimerTool.TimerAction.ADD: @@ -489,8 +489,8 @@ class TimerTool(Gtk.Box): self._info_enabled_switch.set_active((timer.get("e2disabled", "0") == "0")) self._ref_info_label.set_text(timer.get("e2servicereference", "")) self._event_id_info_label.set_text(timer.get("e2eit", "")) - self._action_info_label.set_text(get_message(self.ACTION.get(timer.get("e2justplay", "0"), "0"))) - self._after_info_label.set_text(get_message(self.AFTER_EVENT.get(timer.get("e2afterevent", "0"), "0"))) + self._action_info_label.set_text(translate(self.ACTION.get(timer.get("e2justplay", "0"), "0"))) + self._after_info_label.set_text(translate(self.AFTER_EVENT.get(timer.get("e2afterevent", "0"), "0"))) self._begins_info_label.set_text(str(datetime.fromtimestamp(int(timer.get("e2timebegin", "0"))))) self._ends_info_label.set_text(str(datetime.fromtimestamp(int(timer.get("e2timeend", "0"))))) self.set_repetition_flags(int(timer.get("e2repeated", "0")), self._days_buttons) diff --git a/app/ui/xml/dialogs.py b/app/ui/xml/dialogs.py index d05abb98..03b6584c 100644 --- a/app/ui/xml/dialogs.py +++ b/app/ui/xml/dialogs.py @@ -45,7 +45,7 @@ from app.eparser.ecommons import (PLS_MODE, get_key_by_value, POLARIZATION, FEC, from app.eparser.satxml import get_pos_str from app.settings import USE_HEADER_BAR, Settings, CONFIG_PATH from app.tools.satellites import SatellitesParser, SatelliteSource, ServicesParser -from ..dialogs import show_dialog, DialogType, get_message, get_builder +from ..dialogs import show_dialog, DialogType, translate, get_builder from ..main_helper import append_text_to_tview, get_base_model, on_popup_menu, get_services_type_groups from ..search import SearchProvider from ..uicommons import Gtk, Gdk, UI_RESOURCES_PATH, HeaderBar @@ -58,7 +58,7 @@ class DVBDialog(Gtk.Dialog): def __init__(self, parent, title, data=None, *args, **kwargs): super().__init__(transient_for=parent, - title=get_message(title), + title=translate(title), modal=True, resizable=False, default_width=320, @@ -85,7 +85,7 @@ class TransponderDialog(DVBDialog): def __init__(self, parent, title, data=None, *args, **kwargs): super().__init__(parent, title, data, *args, **kwargs) - self.frame.set_label(get_message("Transponder properties:")) + self.frame.set_label(translate("Transponder properties:")) # Pattern for digits entries. self.digit_pattern = re.compile(r"\D") # Style @@ -125,7 +125,7 @@ class TCDialog(DVBDialog): self._entry = Gtk.Entry(margin=5) self.frame.add(self._entry) - self.frame.set_label(get_message("Name:")) + self.frame.set_label(translate("Name:")) self.show_all() if data: @@ -141,7 +141,7 @@ class SatelliteDialog(DVBDialog): objects=("sat_dialog_box", "side_store", "pos_adjustment")) self.frame.add(builder.get_object("sat_dialog_box")) - self.frame.set_label(get_message("Satellite properties:")) + self.frame.set_label(translate("Satellite properties:")) self._sat_name = builder.get_object("sat_name_entry") self._sat_position = builder.get_object("sat_position_button") self._side = builder.get_object("side_box") @@ -687,7 +687,7 @@ class SatellitesUpdateDialog(UpdateDialog): self._merge_sat_switch = Gtk.Switch(active=self._dialog_settings.get("merge_satellites", False)) self._merge_sat_switch.connect("state-set", lambda b, s: self._dialog_settings.update({"merge_satellites": s})) box = Gtk.Box(spacing=5, orientation=Gtk.Orientation.HORIZONTAL) - box.pack_start(Gtk.Label(get_message("Merge satellites by positions")), False, True, 0) + box.pack_start(Gtk.Label(translate("Merge satellites by positions")), False, True, 0) box.pack_end(self._merge_sat_switch, False, True, 0) self._general_options_box.pack_start(box, True, True, 0) self._general_options_box.show_all() @@ -829,7 +829,7 @@ class ServicesUpdateDialog(UpdateDialog): select_all_item.connect("activate", lambda w: self.update_transponder_selection(True)) tr_popup_menu.append(select_all_item) remove_selection_item = Gtk.ImageMenuItem.new_from_stock("gtk-undo") - remove_selection_item.set_label(get_message("Remove selection")) + remove_selection_item.set_label(translate("Remove selection")) remove_selection_item.connect("activate", lambda w: self.update_transponder_selection(False)) tr_popup_menu.append(remove_selection_item) tr_popup_menu.show_all() @@ -849,11 +849,11 @@ class ServicesUpdateDialog(UpdateDialog): self._kos_bq_lang_switch.connect("state-set", lambda b, s: self._dialog_settings.update({"kos_bq_lang": s})) self._kos_options_box = Gtk.Box(spacing=5, orientation=Gtk.Orientation.VERTICAL) box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5, margin_top=5) - box.pack_start(Gtk.Label(get_message("Create Category bouquets")), False, True, 0) + box.pack_start(Gtk.Label(translate("Create Category bouquets")), False, True, 0) box.pack_end(self._kos_bq_groups_switch, False, True, 0) self._kos_options_box.add(box) box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5, margin_bottom=5) - box.pack_start(Gtk.Label(get_message("Create Regional bouquets")), False, True, 0) + box.pack_start(Gtk.Label(translate("Create Regional bouquets")), False, True, 0) box.pack_end(self._kos_bq_lang_switch, False, True, 0) self._kos_options_box.add(box) self._kos_options_box.connect("realize", self.on_source_changed) @@ -874,7 +874,7 @@ class ServicesUpdateDialog(UpdateDialog): if not is_kos: self._kos_bq_groups_switch.set_active(False) self._kos_bq_lang_switch.set_active(False) - self._kos_options_box.set_tooltip_text(None if is_kos else get_message("KingOfSat only!")) + self._kos_options_box.set_tooltip_text(None if is_kos else translate("KingOfSat only!")) @run_task def receive_services(self): diff --git a/app/ui/xml/edit.py b/app/ui/xml/edit.py index 6b732a1b..b45448c8 100644 --- a/app/ui/xml/edit.py +++ b/app/ui/xml/edit.py @@ -40,7 +40,7 @@ from app.eparser.ecommons import (POLARIZATION, FEC, SYSTEM, MODULATION, T_SYSTE from app.eparser.satxml import get_terrestrial, get_cable, write_terrestrial, write_cable, get_pos_str from .dialogs import (SatelliteDialog, SatellitesUpdateDialog, TerrestrialDialog, CableDialog, SatTransponderDialog, CableTransponderDialog, TerTransponderDialog) -from ..dialogs import show_dialog, DialogType, get_chooser_dialog, get_message, get_builder +from ..dialogs import show_dialog, DialogType, get_chooser_dialog, translate, get_builder from ..main_helper import move_items, on_popup_menu, scroll_to from ..uicommons import Gtk, Gdk, UI_RESOURCES_PATH, MOVE_KEYS, KeyboardKey, MOD_MASK, Page @@ -368,7 +368,7 @@ class SatellitesTool(Gtk.Box): data = func(path) yield True except FileNotFoundError as e: - msg = get_message("Please, download files from receiver or setup your path for read data!") + msg = translate("Please, download files from receiver or setup your path for read data!") self._app.show_error_message(f"{e}\n{msg}") except ExpatError as e: msg = f"The file [{path}] is not formatted correctly or contains invalid characters! Cause: {e}"