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 .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)

View File

@@ -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")

View File

@@ -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)

View File

@@ -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):

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.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)

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.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)

View File

@@ -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):

View File

@@ -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)

View File

@@ -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

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,
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):

View File

@@ -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()

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

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.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):

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 .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}"