translate refactoring

This commit is contained in:
DYefremov
2023-05-13 13:31:42 +03:00
parent 1546baab30
commit 4ff7129750
16 changed files with 149 additions and 142 deletions

View File

@@ -32,7 +32,7 @@ import re
from gi.repository import GLib 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 .uicommons import Gtk, Gdk, UI_RESOURCES_PATH
from ..commons import run_task, run_with_delay, log, run_idle from ..commons import run_task, run_with_delay, log, run_idle
from ..connections import HttpAPI from ..connections import HttpAPI
@@ -41,8 +41,8 @@ from ..settings import IS_DARWIN, IS_LINUX, IS_WIN
class ControlTool(Gtk.Box): class ControlTool(Gtk.Box):
def __init__(self, app, settings, *args, **kwargs): def __init__(self, app, settings, **kwargs):
super().__init__(*args, **kwargs) super().__init__(**kwargs)
self._settings = settings self._settings = settings
self._app = app self._app = app
@@ -335,7 +335,7 @@ class ControlTool(Gtk.Box):
except OSError as e: except OSError as e:
log(e) log(e)
else: 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) GLib.idle_add(self._network_model.set_value, itr, 2, state)

View File

@@ -91,7 +91,7 @@ class WaitDialog:
@run_idle @run_idle
def set_text(self, text): 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 @run_idle
def hide(self): 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): 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 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_create_folders(dirs)
dialog.set_modal(True) dialog.set_modal(True)
@@ -174,7 +174,7 @@ def get_message_dialog(transient, message_type, buttons_type, text):
builder.add_from_string(dialog_str) builder.add_from_string(dialog_str)
dialog = builder.get_object("message_dialog") dialog = builder.get_object("message_dialog")
dialog.set_transient_for(transient) dialog.set_transient_for(transient)
dialog.set_markup(get_message(text)) dialog.set_markup(translate(text))
response = dialog.run() response = dialog.run()
dialog.destroy() dialog.destroy()
@@ -202,7 +202,7 @@ def get_dialog_from_xml(dialog_type, transient, use_header=0, title=""):
return builder, dialog return builder, dialog
def get_message(message): def translate(message):
""" returns translated message """ """ returns translated message """
return gettext.dgettext(TEXT_DOMAIN, message) return gettext.dgettext(TEXT_DOMAIN, message)
@@ -246,9 +246,9 @@ def translate_xml(path, tag="property"):
root = et.getroot() root = et.getroot()
for e in root.iter(): for e in root.iter():
if e.tag == tag and e.attrib.get("translatable", None) == "yes": 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": 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") return ET.tostring(root, encoding="unicode", method="xml")

View File

@@ -45,7 +45,7 @@ from app.connections import download_data, DownloadType, HttpAPI
from app.eparser.ecommons import BouquetService, BqServiceType from app.eparser.ecommons import BouquetService, BqServiceType
from app.settings import SEP, EpgSource, IS_WIN from app.settings import SEP, EpgSource, IS_WIN
from app.tools.epg import EPG, ChannelsParser, EpgEvent, XmlTvReader 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.tasks import BGTaskWidget
from app.ui.timers import TimerTool 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 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") self._epg_dat_source_box = builder.get_object("epg_dat_source_box")
if self._settings.use_header_bar: 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) self._dialog.set_titlebar(header_bar)
builder.get_object("left_action_box").reparent(header_bar) builder.get_object("left_action_box").reparent(header_bar)
right_box = builder.get_object("right_action_box") right_box = builder.get_object("right_action_box")
@@ -618,8 +618,8 @@ class EpgDialog:
if content_type != "application/gzip": if content_type != "application/gzip":
self._download_xml_is_active = False self._download_xml_is_active = False
raise ValueError("{} {} {}".format(get_message("Download XML file error."), raise ValueError("{} {} {}".format(translate("Download XML file error."),
get_message("Unsupported file type:"), translate("Unsupported file type:"),
content_type)) content_type))
file_name = os.path.basename(url) file_name = os.path.basename(url)
@@ -645,7 +645,7 @@ class EpgDialog:
path = tfp.name.rstrip(".gz") path = tfp.name.rstrip(".gz")
except (HTTPError, URLError) as e: 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: else:
try: try:
with open(path, "wb") as f_out: with open(path, "wb") as f_out:
@@ -653,7 +653,7 @@ class EpgDialog:
shutil.copyfileobj(f, f_out) shutil.copyfileobj(f, f_out)
os.remove(tfp.name) os.remove(tfp.name)
except Exception as e: except Exception as e:
raise ValueError(f"{get_message('Unpacking data error.')} {e}") raise ValueError(f"{translate('Unpacking data error.')} {e}")
finally: finally:
self._download_xml_is_active = False self._download_xml_is_active = False
self.update_active_header_elements(True) self.update_active_header_elements(True)
@@ -662,7 +662,7 @@ class EpgDialog:
s_refs, info = ChannelsParser.get_refs_from_xml(path) s_refs, info = ChannelsParser.get_refs_from_xml(path)
yield True yield True
except Exception as e: except Exception as e:
raise ValueError(f"{get_message('XML parsing error:')} {e}") raise ValueError(f"{translate('XML parsing error:')} {e}")
else: else:
refs = refs or {} refs = refs or {}
factor = self._app.DEL_FACTOR / 4 factor = self._app.DEL_FACTOR / 4
@@ -718,7 +718,7 @@ class EpgDialog:
if self._refs_source is RefsSource.XML: if self._refs_source is RefsSource.XML:
text = f"ID = {ch_id}" text = f"ID = {ch_id}"
else: else:
text = f"{get_message('Service reference')}: {ch_id.rstrip('.png')}" text = f"{translate('Service reference')}: {ch_id.rstrip('.png')}"
tooltip.set_text(text) tooltip.set_text(text)
view.set_tooltip_row(tooltip, path) view.set_tooltip_row(tooltip, path)
@@ -742,7 +742,7 @@ class EpgDialog:
services.append(srv) services.append(srv)
ChannelsParser.write_refs_to_xml("{}{}.xml".format(response, self._bouquet_name), services) 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 @run_idle
def on_auto_configuration(self, item): def on_auto_configuration(self, item):
@@ -785,8 +785,8 @@ class EpgDialog:
break break
self.update_epg_count() self.update_epg_count()
self.show_info_message("{} {} {}".format(get_message("Done!"), self.show_info_message("{} {} {}".format(translate("Done!"),
get_message("Count of successfully configured services:"), translate("Count of successfully configured services:"),
success_count), Gtk.MessageType.INFO) success_count), Gtk.MessageType.INFO)
def assign_refs(self, model, paths, data): def assign_refs(self, model, paths, data):
@@ -796,7 +796,7 @@ class EpgDialog:
def assign_data(self, row, data, show_error=False): def assign_data(self, row, data, show_error=False):
if row[Column.FAV_TYPE] != BqServiceType.IPTV.value: if row[Column.FAV_TYPE] != BqServiceType.IPTV.value:
if not show_error: 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 return
fav_id = row[Column.FAV_ID] fav_id = row[Column.FAV_ID]
@@ -814,8 +814,8 @@ class EpgDialog:
row[Column.FAV_LOCKED] = EPG_ICON row[Column.FAV_LOCKED] = EPG_ICON
pos = f"({data[1] if self._refs_source is RefsSource.SERVICES else 'XML'})" 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}" src = f"{translate('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}" row[Column.FAV_TOOLTIP] = f"{translate('Service reference')}: {':'.join(fav_id_data[:10])}\n{src}"
def on_filter_toggled(self, button): def on_filter_toggled(self, button):
self._filter_bar.set_visible(button.get_active()) self._filter_bar.set_visible(button.get_active())
@@ -888,7 +888,7 @@ class EpgDialog:
source_count = len(self._services_model) source_count = len(self._services_model)
self._source_count_label.set_text(str(source_count)) self._source_count_label.set_text(str(source_count))
if self._enable_dat_filter and source_count == 0: 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) self.show_info_message(msg, Gtk.MessageType.WARNING)
@run_idle @run_idle
@@ -933,7 +933,7 @@ class EpgDialog:
if all(s_data[:-1]): if all(s_data[:-1]):
data.set_text("::::".join(s_data), -1) data.set_text("::::".join(s_data), -1)
else: 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): def on_drag_data_received(self, view, drag_context, x, y, data, info, time):
path, pos = view.get_dest_row_at_pos(x, y) path, pos = view.get_dest_row_at_pos(x, y)

View File

@@ -29,13 +29,14 @@
import os import os
import pkgutil import pkgutil
import shutil import shutil
from enum import IntEnum
from pathlib import Path from pathlib import Path
import requests import requests
from gi.repository import Gtk, Gdk, GLib from gi.repository import Gtk, Gdk, GLib
from app.commons import log, run_task, run_idle 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 from app.ui.uicommons import HeaderBar
EXT_URL = "https://api.github.com/repos/DYefremov/demoneditor-extensions/contents/extensions" 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 ExtensionManager(Gtk.Window):
class Column(IntEnum):
TITLE = 0
DESC = 1
STATUS = 2
URL = 3
PATH = 4
def __init__(self, app, **kwargs): 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, transient_for=app.app_window, destroy_with_parent=True,
window_position=Gtk.WindowPosition.CENTER_ON_PARENT, window_position=Gtk.WindowPosition.CENTER_ON_PARENT,
default_width=560, default_height=320, modal=True, **kwargs) default_width=560, default_height=320, modal=True, **kwargs)
@@ -54,7 +61,7 @@ class ExtensionManager(Gtk.Window):
self._app = app self._app = app
self._ext_path = f"{self._app.app_settings.default_data_path}tools{os.sep}extensions" 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} margin = {"margin_start": 5, "margin_end": 5, "margin_top": 5, "margin_bottom": 5}
# Title, Description, Satus, URL, Path. # Title, Description, Satus, URL, Path.
self._model = Gtk.ListStore.new((str, str, str, str, object)) self._model = Gtk.ListStore.new((str, str, str, str, object))
@@ -92,11 +99,11 @@ class ExtensionManager(Gtk.Window):
# Popup menu. # Popup menu.
menu = Gtk.Menu() menu = Gtk.Menu()
item = Gtk.ImageMenuItem.new_from_stock("gtk-goto-bottom") 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) item.connect("activate", self.on_download)
menu.append(item) menu.append(item)
item = Gtk.ImageMenuItem.new_from_stock("gtk-remove") 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) item.connect("activate", self.on_remove)
menu.append(item) menu.append(item)
menu.show_all() menu.show_all()
@@ -104,11 +111,11 @@ class ExtensionManager(Gtk.Window):
# Header and toolbar. # Header and toolbar.
download_button = Gtk.Button.new_from_icon_name("go-bottom-symbolic", Gtk.IconSize.BUTTON) 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.set_always_show_image(True)
download_button.connect("clicked", self.on_download) download_button.connect("clicked", self.on_download)
remove_button = Gtk.Button.new_from_icon_name("user-trash-symbolic", Gtk.IconSize.BUTTON) 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.set_always_show_image(True)
remove_button.connect("clicked", self.on_remove) remove_button.connect("clicked", self.on_remove)
@@ -175,8 +182,8 @@ class ExtensionManager(Gtk.Window):
except OSError as e: except OSError as e:
log(f"{self.__class__.__name__} [remove] error: {e}") log(f"{self.__class__.__name__} [remove] error: {e}")
else: else:
model[paths][-1] = None model[paths][self.Column.PATH] = None
model[paths][2] = get_message("Removed") model[paths][self.Column.STATUS] = translate("Removed")
@run_task @run_task
def on_download(self, item): def on_download(self, item):
@@ -184,7 +191,7 @@ class ExtensionManager(Gtk.Window):
if not paths: if not paths:
return return
url = model[paths][-2] url = model[paths][self.Column.URL]
if not url: if not url:
return return
@@ -206,9 +213,9 @@ class ExtensionManager(Gtk.Window):
os.makedirs(os.path.dirname(path), exist_ok=True) os.makedirs(os.path.dirname(path), exist_ok=True)
if all((self.download_file(u, f"{path}{n}") for u, n in urls.items())): if all((self.download_file(u, f"{path}{n}") for u, n in urls.items())):
itr = model.get_iter(paths) itr = model.get_iter(paths)
GLib.idle_add(model.set_value, itr, 2, "Downloaded") GLib.idle_add(model.set_value, itr, self.Column.STATUS, "Downloaded")
GLib.idle_add(model.set_value, itr, 4, path) GLib.idle_add(model.set_value, itr, self.Column.PATH, path)
msg = f"Extension is downloaded. {get_message('Restart the program to apply all changes.')}" msg = translate('Restart the program to apply all changes.')
self._app.show_info_message(msg, Gtk.MessageType.WARNING) self._app.show_info_message(msg, Gtk.MessageType.WARNING)
def download_file(self, url, path): def download_file(self, url, path):

View File

@@ -43,7 +43,7 @@ from gi.repository import GLib
from app.commons import log, run_task, run_idle, get_size_from_bytes from app.commons import log, run_task, run_idle, get_size_from_bytes
from app.connections import UtfFTP from app.connections import UtfFTP
from app.settings import IS_LINUX, IS_DARWIN, IS_WIN, SEP, USE_HEADER_BAR 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 app.ui.main_helper import on_popup_menu
from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, KeyboardKey, MOD_MASK, Page 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). """ """ Dialog for editing file attributes (permissions). """
def __init__(self, attrs, use_header_bar=0, *args, **kwargs): 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_default_size(360, 100)
self.set_resizable(False) self.set_resizable(False)

View File

@@ -35,7 +35,7 @@ from app.eparser import get_bouquets, get_services, BouquetsReader
from app.eparser.ecommons import BqType, BqServiceType, Bouquet from app.eparser.ecommons import BqType, BqServiceType, Bouquet
from app.eparser.neutrino.bouquets import parse_webtv, parse_bouquets as get_neutrino_bouquets from app.eparser.neutrino.bouquets import parse_webtv, parse_bouquets as get_neutrino_bouquets
from app.settings import SettingsType, IS_DARWIN, SEP 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 app.ui.main_helper import on_popup_menu, get_iptv_data
from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, KeyboardKey, Column, Page, HeaderBar from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, KeyboardKey, Column, Page, HeaderBar
@@ -219,7 +219,7 @@ class ImportDialog:
def on_import(self, item): def on_import(self, item):
if self._page is Page.SERVICES: if self._page is Page.SERVICES:
if not any(r[-1] for r in self._bq_model): 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 return
if not self._bouquets or show_dialog(DialogType.QUESTION, self._dialog_window) != Gtk.ResponseType.OK: 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][:] row = self._services_model[path][:]
if row[1] == "IPTV": if row[1] == "IPTV":
ref, url = get_iptv_data(row[-1]) ref, url = get_iptv_data(row[-1])
ref = f"{get_message('Service reference')}: {ref}" ref = f"{translate('Service reference')}: {ref}"
info = f"{get_message('Name')}: {row[0]}\n{ref}\nURL: {url}" info = f"{translate('Name')}: {row[0]}\n{ref}\nURL: {url}"
self._service_info_label.set_text(info) self._service_info_label.set_text(info)
else: else:
srv = self._services.get(row[-1], None) srv = self._services.get(row[-1], None)

View File

@@ -43,7 +43,7 @@ from app.eparser.iptv import (NEUTRINO_FAV_ID_FORMAT, StreamType, ENIGMA2_FAV_ID
parse_m3u, PICON_FORMAT) parse_m3u, PICON_FORMAT)
from app.settings import SettingsType from app.settings import SettingsType
from app.tools.yt import YouTubeException, YouTube 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.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) 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) self.on_url_changed(self._url_entry)
if not is_data_correct(self._digit_elems) or self._url_entry.get_name() == _DIGIT_ENTRY_NAME: 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 return
url = self._url_entry.get_text() url = self._url_entry.get_text()
if all((self._url_prefix_box.get_visible(), if all((self._url_prefix_box.get_visible(),
self._url_prefix_combobox.get_active_id(), self._url_prefix_combobox.get_active_id(),
url.count("http") > 1 or urlparse(url).scheme.upper() in _URL_PREFIXES)): 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 return
if show_dialog(DialogType.QUESTION, self._dialog) in (Gtk.ResponseType.CANCEL, Gtk.ResponseType.DELETE_EVENT): 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()) links, title = self._yt_dl.get_yt_link(video_id, entry.get_text())
yield True yield True
except urllib.error.URLError as e: 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 return
except YouTubeException as e: except YouTubeException as e:
self.show_info_message((str(e)), Gtk.MessageType.ERROR) 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]]) entry.set_text(links[sorted(links, key=lambda x: int(x.rstrip("p")), reverse=True)[0]])
self._yt_links = links self._yt_links = links
else: 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) self.show_info_message(msg, Gtk.MessageType.ERROR)
finally: finally:
entry.set_sensitive(True) entry.set_sensitive(True)
@@ -697,14 +697,14 @@ class M3uImportDialog(IptvListDialog):
self._max_count = 0 self._max_count = 0
self._is_download = False self._is_download = False
self._cancellable = Gio.Cancellable() 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._dialog.connect("delete-event", self.on_close)
self._apply_button.set_label(get_message("Import")) self._apply_button.set_label(translate("Import"))
# Progress # Progress
self._progress_bar = Gtk.ProgressBar(visible=False, valign="center") self._progress_bar = Gtk.ProgressBar(visible=False, valign="center")
self._spinner = Gtk.Spinner(active=False) self._spinner = Gtk.Spinner(active=False)
self._info_label = Gtk.Label(visible=True, ellipsize="end", max_width_chars=30) 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("active", self._spinner, "visible")
self._spinner.bind_property("visible", load_label, "visible") self._spinner.bind_property("visible", load_label, "visible")
self._spinner.bind_property("active", self._start_values_grid, "sensitive", 4) 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._picons_switch = Gtk.Switch(visible=True)
self._picon_box = Gtk.HBox(visible=True, sensitive=False, spacing=5) 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(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
extra_box = Gtk.HBox(visible=True, spacing=2, margin_bottom=5, margin_top=5) extra_box = Gtk.HBox(visible=True, spacing=2, margin_bottom=5, margin_top=5)
extra_box.set_center_widget(progress_box) extra_box.set_center_widget(progress_box)
@@ -740,7 +740,7 @@ class M3uImportDialog(IptvListDialog):
GLib.idle_add(self._picon_box.set_sensitive, True) GLib.idle_add(self._picon_box.set_sensitive, True)
break break
finally: 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._info_label.set_text, msg)
GLib.idle_add(self._spinner.set_property, "active", False) 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) builder.get_object("yt_url_prefix_box").set_visible(self._s_type is SettingsType.ENIGMA_2)
if self._settings.use_header_bar: 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) self._dialog.set_titlebar(header_bar)
actions_box = builder.get_object("yt_actions_box") actions_box = builder.get_object("yt_actions_box")
import_box = builder.get_object("yt_import_box") import_box = builder.get_object("yt_import_box")
@@ -1073,7 +1073,7 @@ class YtListImportDialog:
srvs.append(srv) srvs.append(srv)
self.appender(srvs) self.appender(srvs)
self.show_info_message(get_message("Done!"), Gtk.MessageType.INFO) self.show_info_message(translate("Done!"), Gtk.MessageType.INFO)
@run_idle @run_idle
def update_active_elements(self, sensitive): def update_active_elements(self, sensitive):

View File

@@ -60,7 +60,7 @@ from app.ui.telnet import TelnetClient
from app.ui.timers import TimerTool from app.ui.timers import TimerTool
from app.ui.transmitter import LinksTransmitter from app.ui.transmitter import LinksTransmitter
from .backup import BackupDialog, backup_data, clear_data_path, restore_data 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 .imports import ImportDialog, import_bouquet
from .iptv import IptvDialog, SearchUnavailableDialog, IptvListConfigurationDialog, YtListImportDialog, M3uImportDialog from .iptv import IptvDialog, SearchUnavailableDialog, IptvListConfigurationDialog, YtListImportDialog, M3uImportDialog
from .main_helper import * from .main_helper import *
@@ -659,12 +659,12 @@ class Application(Gtk.Application):
else: else:
tools_menu = builder.get_object("tools_menu") tools_menu = builder.get_object("tools_menu")
tools_button = Gtk.MenuButton(visible=True, menu_model=tools_menu, direction=Gtk.ArrowType.NONE) 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)) tools_button.set_image(Gtk.Image.new_from_icon_name("applications-utilities-symbolic", Gtk.IconSize.BUTTON))
view_menu = builder.get_object("view_menu") view_menu = builder.get_object("view_menu")
view_button = Gtk.MenuButton(visible=True, menu_model=view_menu, direction=Gtk.ArrowType.NONE) 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 = Gtk.ButtonBox(visible=True, layout_style="expand")
box.add(tools_button) box.add(tools_button)
@@ -686,7 +686,7 @@ class Application(Gtk.Application):
# Extensions (Plugins) section. # Extensions (Plugins) section.
ext_section = builder.get_object(f"{'mac_' if IS_DARWIN else ''}extension_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()) 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_path = f"{self._settings.default_data_path}tools{os.sep}extensions"
ext_paths = [f"{os.path.dirname(__file__)}{os.sep}extensions", ext_path, "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()) self._settings.add("fav_paned_position", self._fav_paned.get_position())
if self.is_data_loading(): 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: if show_dialog(DialogType.QUESTION, self._main_window, msg) != Gtk.ResponseType.OK:
return True return True
if self._recorder: if self._recorder:
if self._recorder.is_record(): 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: if show_dialog(DialogType.QUESTION, self._main_window, msg) != Gtk.ResponseType.OK:
return True return True
self._recorder.release() self._recorder.release()
@@ -1145,10 +1145,10 @@ class Application(Gtk.Application):
value = bool(value) value = bool(value)
self._settings.use_header_bar = 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: if value:
warn = "It can cause some problems." 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) self.show_info_message(msg, Gtk.MessageType.WARNING)
@run_idle @run_idle
@@ -1156,8 +1156,8 @@ class Application(Gtk.Application):
is_alt = bool(value) is_alt = bool(value)
self.reverse_main_elements(is_alt) self.reverse_main_elements(is_alt)
if self._settings.play_streams_mode is PlayStreamsMode.BUILT_IN: if self._settings.play_streams_mode is PlayStreamsMode.BUILT_IN:
msg = get_message("Layout of elements has been changed!") msg = translate("Layout of elements has been changed!")
msg = f"{msg} {get_message('Restart the program to apply all changes.')}" msg = f"{msg} {translate('Restart the program to apply all changes.')}"
self.show_info_message(msg, Gtk.MessageType.WARNING) self.show_info_message(msg, Gtk.MessageType.WARNING)
self.emit("layout-changed", is_alt) self.emit("layout-changed", is_alt)
@@ -1384,7 +1384,7 @@ class Application(Gtk.Application):
returns deleted rows list! returns deleted rows list!
""" """
if self.is_data_loading(): 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 return
selection = view.get_selection() selection = view.get_selection()
@@ -1525,7 +1525,7 @@ class Application(Gtk.Application):
key = f"{response}:{bq_type}" key = f"{response}:{bq_type}"
while key in self._bouquets: 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) response = show_dialog(DialogType.INPUT, self._main_window, bq_name)
if response == Gtk.ResponseType.CANCEL: if response == Gtk.ResponseType.CANCEL:
return return
@@ -1652,7 +1652,7 @@ class Application(Gtk.Application):
model, paths = self._fav_view.get_selection().get_selected_rows() 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: 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 "") 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=""): 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))) 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()) 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 "" 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}") tooltip.set_text(f"{n_msg}: {name}\n{s_msg}:\n{services_txt}{f}")
view.set_tooltip_row(tooltip, path) view.set_tooltip_row(tooltip, path)
@@ -1754,7 +1754,7 @@ class Application(Gtk.Application):
tooltip.set_icon(self.get_tooltip_picon(srv)) tooltip.set_icon(self.get_tooltip_picon(srv))
fav_id = srv.fav_id fav_id = srv.fav_id
names = (b[:b.rindex(":")] for b, ids in self._bouquets.items() if fav_id in ids) 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) tooltip.set_text(text)
view.set_tooltip_row(tooltip, path) view.set_tooltip_row(tooltip, path)
return True return True
@@ -1781,14 +1781,14 @@ class Application(Gtk.Application):
if srv.service_type == BqServiceType.IPTV.name: if srv.service_type == BqServiceType.IPTV.name:
return f"{header}{ref}" 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 "," fec = "{}: {}".format("FEC", srv.fec) if srv.fec else ","
ht = "{}{}: {}\n{}: {}\n{}: {}\n{}: {}{} {}, {}\n{}" ht = "{}{}: {}\n{}: {}\n{}: {}\n{}: {}{} {}, {}\n{}"
return ht.format(header, return ht.format(header,
get_message("Package"), srv.package, translate("Package"), srv.package,
get_message("System"), srv.system, translate("System"), srv.system,
get_message("Freq"), srv.freq, translate("Freq"), srv.freq,
get_message("Rate"), srv.rate, pol, fec, translate("Rate"), srv.rate, pol, fec,
self.get_ssid_info(srv), self.get_ssid_info(srv),
ref) ref)
@@ -1798,8 +1798,8 @@ class Application(Gtk.Application):
return f"{header}{self.get_ssid_info(srv)}\n{ref}" return f"{header}{self.get_ssid_info(srv)}\n{ref}"
def get_hint_header_info(self, srv): def get_hint_header_info(self, srv):
header = f"{get_message('Name')}: {srv.service}\n{get_message('Type')}: {srv.service_type}\n" header = f"{translate('Name')}: {srv.service}\n{translate('Type')}: {srv.service_type}\n"
ref = f"{get_message('Service reference')}: {get_service_reference(srv)}" ref = f"{translate('Service reference')}: {get_service_reference(srv)}"
return header, ref return header, ref
def get_ssid_info(self, srv): 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) services = get_services(data_path, prf, self.get_format_version() if prf is SettingsType.ENIGMA_2 else 0)
yield True yield True
except FileNotFoundError as e: 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) self.show_error_message(getattr(e, "message", str(e)) + "\n\n" + msg)
return return
except SyntaxError as e: except SyntaxError as e:
@@ -2307,7 +2307,7 @@ class Application(Gtk.Application):
except Exception as e: except Exception as e:
msg = "Reading data error: {}" msg = "Reading data error: {}"
log(msg.format(e), debug=self._settings.debug_mode, fmt_message=msg) 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 return
else: else:
self.append_blacklist(black_list) self.append_blacklist(black_list)
@@ -2550,8 +2550,8 @@ class Application(Gtk.Application):
return return
if os.listdir(response): if os.listdir(response):
msg = "{}\n\n\t\t{}".format(get_message("The selected folder already contains files!"), msg = "{}\n\n\t\t{}".format(translate("The selected folder already contains files!"),
get_message("Are you sure?")) translate("Are you sure?"))
if show_dialog(DialogType.QUESTION, self._main_window, msg) != Gtk.ResponseType.OK: if show_dialog(DialogType.QUESTION, self._main_window, msg) != Gtk.ResponseType.OK:
return return
@@ -2991,8 +2991,8 @@ class Application(Gtk.Application):
model.set_value(itr, 1 if flag is Flag.LOCK else 2, value) model.set_value(itr, 1 if flag is Flag.LOCK else 2, value)
if self._s_type is SettingsType.ENIGMA_2: if self._s_type is SettingsType.ENIGMA_2:
msg = get_message("After uploading the changes you may need to completely reboot the receiver!") msg = translate("After uploading the changes you may need to completely reboot the receiver!")
self.show_info_message(f"{get_message('EXPERIMENTAL!')} {msg}", Gtk.MessageType.WARNING) self.show_info_message(f"{translate('EXPERIMENTAL!')} {msg}", Gtk.MessageType.WARNING)
else: else:
if self._s_type is SettingsType.ENIGMA_2: if self._s_type is SettingsType.ENIGMA_2:
set_flags(flag, self._services_view, self._fav_view, self._services, self._blacklist) 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}" bq = f"{response}:{bq_type}"
if bq in self._bouquets: 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 return
model.set_value(itr, Column.BQ_NAME, response) model.set_value(itr, Column.BQ_NAME, response)
@@ -4080,9 +4080,9 @@ class Application(Gtk.Application):
return return
gen = self.remove_favs(to_remove, self._fav_model) gen = self.remove_favs(to_remove, self._fav_model)
GLib.idle_add(lambda: next(gen, False)) 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: 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): def on_services_mark_not_in_bouquets(self, item):
if self.is_data_loading(): if self.is_data_loading():
@@ -4436,7 +4436,7 @@ class Application(Gtk.Application):
self._current_ip_label.set_text(f"{label}: {self._settings.host}") self._current_ip_label.set_text(f"{label}: {self._settings.host}")
profile_name = self._profile_combo_box.get_active_text() profile_name = self._profile_combo_box.get_active_text()
msg = get_message("Profile:") msg = translate("Profile:")
if self._s_type is SettingsType.ENIGMA_2: if self._s_type is SettingsType.ENIGMA_2:
title = f"DemonEditor [{msg} {profile_name} - Enigma2 v.{self.get_format_version()}]" title = f"DemonEditor [{msg} {profile_name} - Enigma2 v.{self.get_format_version()}]"
@@ -4453,7 +4453,7 @@ class Application(Gtk.Application):
@run_idle @run_idle
def show_info_message(self, text, message_type=Gtk.MessageType.INFO): def show_info_message(self, text, message_type=Gtk.MessageType.INFO):
self._info_bar.set_visible(False) 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_message_type(message_type)
self._info_bar.set_visible(True) self._info_bar.set_visible(True)
@@ -4579,16 +4579,16 @@ def start_app():
try: try:
Settings.get_instance() Settings.get_instance()
except SettingsReadException as e: 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) show_dialog(DialogType.INFO, transient=Gtk.Dialog(), text=msg)
except SettingsException as e: 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() dlg = Gtk.Dialog()
if show_dialog(DialogType.QUESTION, dlg, msg) != Gtk.ResponseType.OK: if show_dialog(DialogType.QUESTION, dlg, msg) != Gtk.ResponseType.OK:
return True return True
Settings.reset_to_default() 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: else:
app = Application() app = Application()
app.run(sys.argv) app.run(sys.argv)

View File

@@ -50,7 +50,7 @@ from app.eparser import Service
from app.eparser.ecommons import Flag, BouquetService, Bouquet, BqType from app.eparser.ecommons import Flag, BouquetService, Bouquet, BqType
from app.eparser.enigma.bouquets import BqServiceType, to_bouquet_id from app.eparser.enigma.bouquets import BqServiceType, to_bouquet_id
from app.settings import SettingsType, SEP, IS_WIN, IS_DARWIN, IS_LINUX 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 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 = [] picons_files = []
if not src_path: 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(): if dialog.run() in (Gtk.ResponseType.CANCEL, Gtk.ResponseType.DELETE_EVENT) or not dialog.get_filenames():
return picons_files 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 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": 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: if show_dialog(DialogType.QUESTION, app.app_window, msg) != Gtk.ResponseType.OK:
return return

View File

@@ -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, from app.tools.picons import (PiconsParser, parse_providers, Provider, convert_to, download_picon, PiconsCzDownloader,
PiconsError) PiconsError)
from app.tools.satellites import SatellitesParser, SatelliteSource 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, 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) 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 from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, TV_ICON, Column, KeyboardKey, Page, ViewTarget
@@ -201,7 +201,7 @@ class PiconManager(Gtk.Box):
self.show() self.show()
if not len(self._picon_ids) and self._s_type is SettingsType.ENIGMA_2: 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.") "first load the required services list into the main application window.")
self.show_info_message(message, Gtk.MessageType.WARNING) self.show_info_message(message, Gtk.MessageType.WARNING)
self._satellite_label.show() self._satellite_label.show()
@@ -439,7 +439,7 @@ class PiconManager(Gtk.Box):
def on_add(self, item): def on_add(self, item):
""" Adds (copies) picons from an external folder to the profile picons folder. """ """ 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): if dialog.run() in (Gtk.ResponseType.CANCEL, Gtk.ResponseType.DELETE_EVENT):
return return
@@ -531,10 +531,10 @@ class PiconManager(Gtk.Box):
settings = Settings(self._settings.settings) settings = Settings(self._settings.settings)
settings.profile_picons_path = f"{dest_path}{SEP}" settings.profile_picons_path = f"{dest_path}{SEP}"
settings.current_profile = self._settings.current_profile 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, self.run_func(lambda: upload_data(settings=settings,
download_type=DownloadType.PICONS, 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), Gtk.MessageType.INFO),
files_filter=files_filter)) files_filter=files_filter))
@@ -556,7 +556,7 @@ class PiconManager(Gtk.Box):
return return
self.run_func(lambda: remove_picons(settings=self._settings, 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), Gtk.MessageType.INFO),
files_filter=files_filter)) files_filter=files_filter))
@@ -620,7 +620,7 @@ class PiconManager(Gtk.Box):
tooltip = f"{link} (by Chocholoušek)" tooltip = f"{link} (by Chocholoušek)"
elif self._download_src is self.DownloadSource.LYNG_SAT: elif self._download_src is self.DownloadSource.LYNG_SAT:
link = "https://www.lyngsat.com" link = "https://www.lyngsat.com"
tooltip = f"{get_message('Providers')} [{link}]" tooltip = f"{translate('Providers')} [{link}]"
else: else:
link = "" link = ""
tooltip = "" tooltip = ""
@@ -724,14 +724,14 @@ class PiconManager(Gtk.Box):
for prv in providers: for prv in providers:
if self._download_src is self.DownloadSource.LYNG_SAT and not self._POS_PATTERN.match(prv[2]): if self._download_src is self.DownloadSource.LYNG_SAT and not self._POS_PATTERN.match(prv[2]):
self.show_info_message( 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) scroll_to(prv.path, self._providers_view)
return return
try: try:
picons_path = self._current_path_label.get_text() picons_path = self._current_path_label.get_text()
os.makedirs(os.path.dirname(picons_path), exist_ok=True) 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) providers = (Provider(*p) for p in providers)
if self._download_src is self.DownloadSource.LYNG_SAT: if self._download_src is self.DownloadSource.LYNG_SAT:
@@ -773,7 +773,7 @@ class PiconManager(Gtk.Box):
for future in not_done: for future in not_done:
future.cancel() future.cancel()
concurrent.futures.wait(not_done) 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): def get_picons_for_picon_cz(self, path, providers):
p_ids = None p_ids = None
@@ -789,7 +789,7 @@ class PiconManager(Gtk.Box):
log(f"Error: {str(e)}\n") log(f"Error: {str(e)}\n")
self.show_info_message(str(e), Gtk.MessageType.ERROR) self.show_info_message(str(e), Gtk.MessageType.ERROR)
else: 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): def get_bouquet_picon_ids(self):
""" Returns picon ids for selected bouquet or None. """ """ Returns picon ids for selected bouquet or None. """
@@ -817,13 +817,13 @@ class PiconManager(Gtk.Box):
@run_task @run_task
def resize(self, path): def resize(self, path):
self.show_info_message(get_message("Resizing..."), Gtk.MessageType.INFO) self.show_info_message(translate("Resizing..."), Gtk.MessageType.INFO)
try: try:
from pathlib import Path from pathlib import Path
from PIL import Image from PIL import Image
except ImportError as e: 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: else:
res = (220, 132) if self._resize_220_132_radio_button.get_active() else (100, 60) 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 = img.resize(res, Image.ANTIALIAS)
img.save(img_file, "PNG", optimize=True) 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): def on_cancel(self, item=None):
if self._is_downloading and show_dialog(DialogType.QUESTION, self._app_window) == Gtk.ResponseType.CANCEL: 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): def terminate_task(self):
self._terminate = True self._terminate = True
self._is_downloading = False 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 @run_task
def run_func(self, func, update=False): def run_func(self, func, update=False):
@@ -951,8 +951,8 @@ class PiconManager(Gtk.Box):
return self._app.get_hint_for_srv_list(srv) return self._app.get_hint_for_srv_list(srv)
header, ref = self._app.get_hint_header_info(srv) header, ref = self._app.get_hint_header_info(srv)
return "{} {}: {}\n{}: {} {}: {}\n{}".format(header.rstrip(), get_message("Package"), srv.package, return "{} {}: {}\n{}: {} {}: {}\n{}".format(header.rstrip(), translate("Package"), srv.package,
get_message("System"), srv.system, get_message("Freq"), srv.freq, translate("System"), srv.system, translate("Freq"), srv.freq,
ref) ref)
def on_view_query_tooltip(self, view, x, y, keyboard_mode, tooltip): 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, convert_to(src_path=picons_path,
dest_path=save_path, dest_path=save_path,
s_type=SettingsType.ENIGMA_2, 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 @run_idle
def update_receive_button_state(self): def update_receive_button_state(self):

View File

@@ -36,7 +36,7 @@ from app.connections import HttpAPI
from app.eparser.ecommons import BqServiceType from app.eparser.ecommons import BqServiceType
from app.settings import PlayStreamsMode, PlaybackMode, IS_DARWIN, SettingsType, USE_HEADER_BAR from app.settings import PlayStreamsMode, PlaybackMode, IS_DARWIN, SettingsType, USE_HEADER_BAR
from app.tools.media import Player 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.main_helper import get_iptv_url
from app.ui.uicommons import Gtk, Gdk, UI_RESOURCES_PATH, Column, Page from app.ui.uicommons import Gtk, Gdk, UI_RESOURCES_PATH, Column, Page
@@ -391,8 +391,8 @@ class PlayerBox(Gtk.Overlay):
if path: if path:
return f"DemonEditor [{self._app.fav_view.get_model()[path][:][Column.FAV_SERVICE]}]" return f"DemonEditor [{self._app.fav_view.get_model()[path][:][Column.FAV_SERVICE]}]"
else: else:
return f"DemonEditor [{get_message('Recordings')}]" return f"DemonEditor [{translate('Recordings')}]"
return f"DemonEditor [{get_message('Playback')}]" return f"DemonEditor [{translate('Playback')}]"
def on_play_stream(self): def on_play_stream(self):
path, column = self._fav_view.get_cursor() path, column = self._fav_view.get_cursor()

View File

@@ -33,7 +33,7 @@ from collections import Counter
from app.commons import run_task, run_idle, log from app.commons import run_task, run_idle, log
from app.connections import test_telnet, test_ftp, TestException, test_http, HttpApiException 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.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 .main_helper import update_entry_data, scroll_to, get_picon_pixbuf
from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, DEFAULT_ICON, APP_FONT, HeaderBar from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, DEFAULT_ICON, APP_FONT, HeaderBar
@@ -264,9 +264,9 @@ class SettingsDialog:
def update_title(self): def update_title(self):
title = "{} [{}]" title = "{} [{}]"
if self._s_type is SettingsType.ENIGMA_2: 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: 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): def update_picon_paths(self):
model = self._picons_paths_box.get_model() model = self._picons_paths_box.get_model()
@@ -497,7 +497,7 @@ class SettingsDialog:
def show_info_message(self, text, message_type): def show_info_message(self, text, message_type):
self._info_bar.set_visible(False) self._info_bar.set_visible(False)
self._info_bar.set_message_type(message_type) 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) self._info_bar.set_visible(True)
@run_idle @run_idle
@@ -661,7 +661,7 @@ class SettingsDialog:
self._ext_settings.picons_paths = tuple(r[0] for r in model) self._ext_settings.picons_paths = tuple(r[0] for r in model)
def on_remove_picon_path(self, button): 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: if show_dialog(DialogType.QUESTION, self._dialog, msg) != Gtk.ResponseType.OK:
return return

View File

@@ -24,7 +24,7 @@
# #
# Author: Dmitriy Yefremov # Author: Dmitriy Yefremov
# #
from app.ui.dialogs import get_message from app.ui.dialogs import translate
from .uicommons import Gtk, GLib 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) super().__init__(spacing=2, orientation=Gtk.Orientation.HORIZONTAL, valign=Gtk.Align.CENTER)
self._app = app 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.pack_start(self._label, False, False, 0)
self._spinner = Gtk.Spinner(active=True) 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 = Gtk.Button.new_from_icon_name("window-close", Gtk.IconSize.MENU)
close_button.set_relief(Gtk.ReliefStyle.NONE) close_button.set_relief(Gtk.ReliefStyle.NONE)
close_button.set_valign(Gtk.Align.CENTER) 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.set_name("task-button")
close_button.connect("clicked", lambda b: self._app.emit("task-cancel", self)) close_button.connect("clicked", lambda b: self._app.emit("task-cancel", self))
self.pack_start(close_button, False, False, 0) self.pack_start(close_button, False, False, 0)

View File

@@ -33,7 +33,7 @@ from urllib.parse import quote
from app.settings import USE_HEADER_BAR from app.settings import USE_HEADER_BAR
from app.ui.main_helper import on_popup_menu 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 .uicommons import Gtk, Gdk, GLib, UI_RESOURCES_PATH, Page, Column, KeyboardKey, MOD_MASK
from ..commons import run_idle, log from ..commons import run_idle, log
from ..connections import HttpAPI from ..connections import HttpAPI
@@ -71,7 +71,7 @@ class TimerTool(Gtk.Box):
"min_end_adjustment", "timer_begins_popover", "begins_hour_adjustment", "min_end_adjustment", "timer_begins_popover", "begins_hour_adjustment",
"min_begins_adjustment")) "min_begins_adjustment"))
self.set_title(get_message("Timer")) self.set_title(translate("Timer"))
self.set_modal(True) self.set_modal(True)
self.set_skip_pager_hint(True) self.set_skip_pager_hint(True)
self.set_skip_taskbar_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_desc_entry.drag_dest_unset()
self._timer_service_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) self.get_content_area().pack_start(builder.get_object("timer_dialog_frame"), True, True, 5)
if self._action is TimerTool.TimerAction.ADD: 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._info_enabled_switch.set_active((timer.get("e2disabled", "0") == "0"))
self._ref_info_label.set_text(timer.get("e2servicereference", "")) self._ref_info_label.set_text(timer.get("e2servicereference", ""))
self._event_id_info_label.set_text(timer.get("e2eit", "")) 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._action_info_label.set_text(translate(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._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._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._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) self.set_repetition_flags(int(timer.get("e2repeated", "0")), self._days_buttons)

View File

@@ -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.eparser.satxml import get_pos_str
from app.settings import USE_HEADER_BAR, Settings, CONFIG_PATH from app.settings import USE_HEADER_BAR, Settings, CONFIG_PATH
from app.tools.satellites import SatellitesParser, SatelliteSource, ServicesParser 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 ..main_helper import append_text_to_tview, get_base_model, on_popup_menu, get_services_type_groups
from ..search import SearchProvider from ..search import SearchProvider
from ..uicommons import Gtk, Gdk, UI_RESOURCES_PATH, HeaderBar 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): def __init__(self, parent, title, data=None, *args, **kwargs):
super().__init__(transient_for=parent, super().__init__(transient_for=parent,
title=get_message(title), title=translate(title),
modal=True, modal=True,
resizable=False, resizable=False,
default_width=320, default_width=320,
@@ -85,7 +85,7 @@ class TransponderDialog(DVBDialog):
def __init__(self, parent, title, data=None, *args, **kwargs): def __init__(self, parent, title, data=None, *args, **kwargs):
super().__init__(parent, title, data, *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. # Pattern for digits entries.
self.digit_pattern = re.compile(r"\D") self.digit_pattern = re.compile(r"\D")
# Style # Style
@@ -125,7 +125,7 @@ class TCDialog(DVBDialog):
self._entry = Gtk.Entry(margin=5) self._entry = Gtk.Entry(margin=5)
self.frame.add(self._entry) self.frame.add(self._entry)
self.frame.set_label(get_message("Name:")) self.frame.set_label(translate("Name:"))
self.show_all() self.show_all()
if data: if data:
@@ -141,7 +141,7 @@ class SatelliteDialog(DVBDialog):
objects=("sat_dialog_box", "side_store", "pos_adjustment")) objects=("sat_dialog_box", "side_store", "pos_adjustment"))
self.frame.add(builder.get_object("sat_dialog_box")) 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_name = builder.get_object("sat_name_entry")
self._sat_position = builder.get_object("sat_position_button") self._sat_position = builder.get_object("sat_position_button")
self._side = builder.get_object("side_box") 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 = 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})) 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 = 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) box.pack_end(self._merge_sat_switch, False, True, 0)
self._general_options_box.pack_start(box, True, True, 0) self._general_options_box.pack_start(box, True, True, 0)
self._general_options_box.show_all() 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)) select_all_item.connect("activate", lambda w: self.update_transponder_selection(True))
tr_popup_menu.append(select_all_item) tr_popup_menu.append(select_all_item)
remove_selection_item = Gtk.ImageMenuItem.new_from_stock("gtk-undo") 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)) remove_selection_item.connect("activate", lambda w: self.update_transponder_selection(False))
tr_popup_menu.append(remove_selection_item) tr_popup_menu.append(remove_selection_item)
tr_popup_menu.show_all() 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_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) 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 = 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) box.pack_end(self._kos_bq_groups_switch, False, True, 0)
self._kos_options_box.add(box) self._kos_options_box.add(box)
box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5, margin_bottom=5) 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) box.pack_end(self._kos_bq_lang_switch, False, True, 0)
self._kos_options_box.add(box) self._kos_options_box.add(box)
self._kos_options_box.connect("realize", self.on_source_changed) self._kos_options_box.connect("realize", self.on_source_changed)
@@ -874,7 +874,7 @@ class ServicesUpdateDialog(UpdateDialog):
if not is_kos: if not is_kos:
self._kos_bq_groups_switch.set_active(False) self._kos_bq_groups_switch.set_active(False)
self._kos_bq_lang_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 @run_task
def receive_services(self): def receive_services(self):

View File

@@ -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 app.eparser.satxml import get_terrestrial, get_cable, write_terrestrial, write_cable, get_pos_str
from .dialogs import (SatelliteDialog, SatellitesUpdateDialog, TerrestrialDialog, CableDialog, SatTransponderDialog, from .dialogs import (SatelliteDialog, SatellitesUpdateDialog, TerrestrialDialog, CableDialog, SatTransponderDialog,
CableTransponderDialog, TerTransponderDialog) 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 ..main_helper import move_items, on_popup_menu, scroll_to
from ..uicommons import Gtk, Gdk, UI_RESOURCES_PATH, MOVE_KEYS, KeyboardKey, MOD_MASK, Page 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) data = func(path)
yield True yield True
except FileNotFoundError as e: 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}") self._app.show_error_message(f"{e}\n{msg}")
except ExpatError as e: except ExpatError as e:
msg = f"The file [{path}] is not formatted correctly or contains invalid characters! Cause: {e}" msg = f"The file [{path}] is not formatted correctly or contains invalid characters! Cause: {e}"