Compare commits

..

16 Commits

Author SHA1 Message Date
DYefremov
8155643098 version update -> 3.14.2 2026-01-26 22:27:21 +03:00
audi06_19
87a1cde859 translations update -> tr (#237) 2026-01-25 18:08:04 +03:00
DYefremov
a591d31d01 translations update -> [be, de, ru] 2026-01-18 22:16:34 +03:00
DYefremov
e863c41117 minor fix 2026-01-18 21:55:26 +03:00
DYefremov
811539ae19 enable extension manager permanently 2026-01-18 16:09:21 +03:00
DYefremov
bc7327a6d5 extension manager adjustment 2026-01-11 00:27:43 +03:00
DYefremov
0c114964f2 fav channels numbering adjustment (#236) 2026-01-01 12:36:16 +03:00
DYefremov
b8a3e5e4c1 *.spec files adjustment 2025-11-15 12:21:14 +03:00
DYefremov
1d16e9e220 version update -> 3.14.1 2025-11-14 13:25:02 +03:00
DYefremov
c96b464cbc prevent double data loading
* Fixes double data loading when opening an external folder from the start page.
2025-11-14 13:22:51 +03:00
DYefremov
43821e6f50 add t2mi pid value support (#232) 2025-11-10 11:56:53 +03:00
DYefremov
e0e642db5a sk *.mo file update 2025-11-10 09:11:06 +03:00
EnoSat
2266fd4d3d Slovak translations update (#234) 2025-11-10 09:09:14 +03:00
EnoSat
6b8145c674 Add Slovak translations to desktop entry (#233) 2025-11-09 21:07:50 +03:00
DYefremov
fa89ab8608 add Slovak translation 2025-11-09 19:32:04 +03:00
EnoSat
da70b0fb18 Slovak language (#231)
Added Slovak localization.
2025-11-09 18:57:38 +03:00
27 changed files with 1762 additions and 50 deletions

View File

@@ -64,7 +64,7 @@ Terrestrial = namedtuple("Terrestrial", ["name", "flags", "countrycode", "transp
Cable = namedtuple("Cable", ["name", "flags", "satfeed", "countrycode", "transponders"])
Transponder = namedtuple("Transponder", ["frequency", "symbol_rate", "polarization", "fec_inner", "system",
"modulation", "pls_mode", "pls_code", "is_id", "t2mi_plp_id"])
"modulation", "pls_mode", "pls_code", "is_id", "t2mi_plp_id", "t2mi_pid"])
TerTransponder = namedtuple("TerTransponder", ["centre_frequency", "system", "bandwidth", "constellation",
"code_rate_hp", "code_rate_lp", "guard_interval", "transmission_mode",
"hierarchy_information", "inversion", "plp_id"])

View File

@@ -2,7 +2,7 @@
#
# The MIT License (MIT)
#
# Copyright (c) 2018-2023 Dmitriy Yefremov
# Copyright (c) 2018-2025 Dmitriy Yefremov
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -88,7 +88,8 @@ def get_sat_transponders(elem):
e.get("pls_mode", None),
e.get("pls_code", None),
e.get("is_id", None),
e.get("t2mi_plp_id", None)) for e in elem.iter("transponder")]
e.get("t2mi_plp_id", None),
e.get("t2mi_pid", None)) for e in elem.iter("transponder")]
def get_terrestrial(path):

View File

@@ -338,7 +338,7 @@ class SatellitesParser(HTMLParser):
self.FEC.get(fec, None),
self.SYSTEM.get(sys, None),
self.MODULATION.get(mod, None),
pls_mode, pls_code, None, None)
pls_mode, pls_code, None, None, None)
if is_transponder_valid(tr):
trs.append(tr)
@@ -379,7 +379,7 @@ class SatellitesParser(HTMLParser):
self.FEC.get(fec, None),
self.SYSTEM.get(sys, None),
self.MODULATION.get(mod, None),
pls_mode, pls_code, is_id, None)
pls_mode, pls_code, is_id, None, None)
if is_transponder_valid(tr):
trs.append(tr)
@@ -421,7 +421,7 @@ class SatellitesParser(HTMLParser):
self.FEC.get(fec, None),
self.SYSTEM.get(sys, None),
self.MODULATION.get(mod, None),
pls_id, pls_code, is_id, None)
pls_id, pls_code, is_id, None, None)
if is_transponder_valid(tr):
trs.append(tr)

View File

@@ -3,7 +3,7 @@
The MIT License (MIT)
Copyright (c) 2018-2024 Dmitriy Yefremov
Copyright (c) 2018-2026 Dmitriy Yefremov
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -31,7 +31,7 @@ Author: Dmitriy Yefremov
<!-- interface-license-type mit -->
<!-- interface-name DemonEditor -->
<!-- interface-description Enigma2 channel and satellites list editor. -->
<!-- interface-copyright 2018-2025 Dmitriy Yefremov -->
<!-- interface-copyright 2018-2026 Dmitriy Yefremov -->
<!-- interface-authors Dmitriy Yefremov -->
<object class="GtkAboutDialog" id="about_dialog">
<property name="can_focus">False</property>
@@ -40,8 +40,8 @@ Author: Dmitriy Yefremov
<property name="icon_name">system-help</property>
<property name="type_hint">normal</property>
<property name="program_name">DemonEditor</property>
<property name="version">3.14.0 Beta</property>
<property name="copyright">2018-2025 Dmitriy Yefremov
<property name="version">3.14.2 Beta</property>
<property name="copyright">2018-2026 Dmitriy Yefremov
</property>
<property name="comments" translatable="yes">Enigma2 channel and satellite list editor.</property>
<property name="website">https://dyefremov.github.io/DemonEditor/</property>

View File

@@ -2,7 +2,7 @@
#
# The MIT License (MIT)
#
# Copyright (c) 2023-2024 Dmitriy Yefremov
# Copyright (c) 2023-2026 Dmitriy Yefremov
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -35,7 +35,7 @@ import requests
from gi.repository import Gtk, Gdk, GLib, Pango, GObject
from app.commons import log, run_task, run_idle
from app.ui.dialogs import translate
from app.ui.dialogs import translate, show_dialog, DialogType
from app.ui.uicommons import HeaderBar
EXT_URL = "https://api.github.com/repos/DYefremov/demoneditor-extensions/contents/extensions/"
@@ -48,7 +48,7 @@ HEADERS = {"User-Agent": "Mozilla/5.0 (X11; Linux i686; rv:112.0) Gecko/20100101
class ExtensionManager(Gtk.Window):
ICON_INFO = "emblem-important-symbolic"
ICON_INFO = "emblem-synchronizing-symbolic"
ICON_UPDATE = "network-receive-symbolic"
class Column(IntEnum):
@@ -193,6 +193,22 @@ class ExtensionManager(Gtk.Window):
self.connect("delete-event", lambda w, e: self._app.app_settings.add(ws_property, w.get_size()))
self.connect("realize", self.init)
self.connect("show", self.on_show)
def on_show(self, window):
enabled = self._app.app_settings.extensions_support
self.set_sensitive(enabled)
if not enabled:
msg = f"\n{translate('Extension support is disabled!')}\n\n\t{translate('Do you want to enable it?')}"
if show_dialog(DialogType.QUESTION, self, msg) != Gtk.ResponseType.OK:
self.close()
return True
self._app.app_settings.extensions_support = True
self._app.show_info_message(translate('Restart the program to apply all changes.'), Gtk.MessageType.WARNING)
self.close()
return False
def init(self, widget):
self._load_spinner.start()
@@ -281,6 +297,7 @@ class ExtensionManager(Gtk.Window):
ext_ver = ext[0].VERSION
path = ext[1]
if ext_ver < ver:
desc = f"[ Update -> ver. {ver} ] {desc}"
ver = ext_ver
info = self.ICON_INFO

Binary file not shown.

View File

@@ -1852,7 +1852,7 @@ Author: Dmitriy Yefremov
<object class="GtkLabel" id="app_ver_label">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label">3.14.0 Beta</property>
<property name="label">3.14.2 Beta</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>

View File

@@ -2,7 +2,7 @@
#
# The MIT License (MIT)
#
# Copyright (c) 2018-2025 Dmitriy Yefremov
# Copyright (c) 2018-2026 Dmitriy Yefremov
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -79,7 +79,7 @@ from .xml.edit import SatellitesTool
class Application(Gtk.Application):
""" Main application class. """
VERSION = "3.14.0"
VERSION = "3.14.2"
SERVICE_MODEL = "services_list_store"
FAV_MODEL = "fav_list_store"
@@ -88,12 +88,13 @@ class Application(Gtk.Application):
IPTV_MODEL = "iptv_list_store"
DRAG_SEP = "::::"
MARKER_TYPES = {BqServiceType.MARKER.name, BqServiceType.SPACE.name, BqServiceType.ALT.name}
MARKER_TYPES = {BqServiceType.MARKER.name, BqServiceType.SPACE.name}
NON_REF_TYPES = {BqServiceType.MARKER.name, BqServiceType.SPACE.name, BqServiceType.ALT.name}
DEL_FACTOR = 100 # Batch size to delete in one pass.
FAV_FACTOR = DEL_FACTOR * 5
_TV_TYPES = ("TV", "TV (HD)", "TV (UHD)", "TV (H264)")
_TV_TYPES = {"TV", "TV (HD)", "TV (UHD)", "TV (H264)"}
BG_TASK_LIMIT = 5
@@ -721,18 +722,21 @@ class Application(Gtk.Application):
self.on_iptv_list_configuration, self.on_remove_all_unavailable):
iptv_elem.bind_property("sensitive", self.set_action(h.__name__, h, False), "enabled")
if self._settings.extensions_support:
self.init_extensions(builder)
self.init_extensions(builder)
def init_extensions(self, builder):
import pkgutil
from importlib.util import module_from_spec
from app.ui.extensions.management import ExtensionManager
# 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(translate("Extension Manager"), "app.on_extension_manager"))
if not self._settings.extensions_support:
return
import pkgutil
from importlib.util import module_from_spec
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"]
extensions = {}
@@ -1288,7 +1292,7 @@ class Application(Gtk.Application):
def fav_service_data_func(self, column, renderer, model, itr, data):
if self._display_epg and self._s_type is SettingsType.ENIGMA_2:
srv_name = model.get_value(itr, Column.FAV_SERVICE)
if model.get_value(itr, Column.FAV_TYPE) in self.MARKER_TYPES:
if model.get_value(itr, Column.FAV_TYPE) in self.NON_REF_TYPES:
return True
event = self._epg_cache.get_current_event(srv_name)
@@ -2272,6 +2276,7 @@ class Application(Gtk.Application):
response = show_dialog(DialogType.CHOOSER, self._main_window, settings=self._settings, title="Open folder")
if response in (Gtk.ResponseType.CANCEL, Gtk.ResponseType.DELETE_EVENT):
return
self.open_data(response)
def on_data_extract(self, app, page):
@@ -2347,6 +2352,7 @@ class Application(Gtk.Application):
self._alt_revealer.set_visible(False)
self._filter_services_button.set_active(False)
self._wait_dialog.show()
self._services_progress_bar.show()
yield from self.clear_current_data()
# Reset of sorting
@@ -2405,6 +2411,7 @@ class Application(Gtk.Application):
finally:
self._profile_combo_box.set_sensitive(True)
self._wait_dialog.hide()
self._services_progress_bar.hide()
self.emit("data-load-done", self._settings.current_profile)
def append_data(self, bouquets, services):
@@ -2536,7 +2543,6 @@ class Application(Gtk.Application):
break
def append_services(self, services):
self._services_progress_bar.show()
to_add = []
for srv in services:
if srv.fav_id not in self._services:
@@ -2557,7 +2563,6 @@ class Application(Gtk.Application):
self._services_progress_bar.set_fraction(index / size)
yield True
self._services_progress_bar.hide()
yield True
def append_iptv_data(self, services=None):
@@ -2779,7 +2784,7 @@ class Application(Gtk.Application):
self._alt_revealer.set_visible(False)
self.on_info_bar_close()
if self._page is Page.EPG and srv.service_type not in self.MARKER_TYPES:
if self._page is Page.EPG and srv.service_type not in self.NON_REF_TYPES:
self.emit("fav-changed", srv)
def on_services_selection(self, model, path, column):
@@ -3676,7 +3681,7 @@ class Application(Gtk.Application):
row = self._fav_model[path][:]
srv_type, fav_id = row[Column.FAV_TYPE], row[Column.FAV_ID]
if srv_type in self.MARKER_TYPES and show_error:
if srv_type in self.NON_REF_TYPES and show_error:
self.show_error_message("Not allowed in this context!")
return
@@ -4036,7 +4041,7 @@ class Application(Gtk.Application):
if srv_type == BqServiceType.ALT.name:
return self.show_error_message("Operation not allowed in this context!")
if srv_type in self.MARKER_TYPES:
if srv_type in self.NON_REF_TYPES:
return self.on_rename(view)
elif srv_type == BqServiceType.IPTV.name:
return self.on_iptv_service_edit(model[paths][Column.FAV_ID], view)
@@ -4166,7 +4171,7 @@ class Application(Gtk.Application):
""" Marks services with duplicate [names] in the fav list. """
from collections import Counter
dup = Counter(r[Column.FAV_SERVICE] for r in self._fav_model if r[Column.FAV_TYPE] not in self.MARKER_TYPES)
dup = Counter(r[Column.FAV_SERVICE] for r in self._fav_model if r[Column.FAV_TYPE] not in self.NON_REF_TYPES)
dup = {k for k, v in dup.items() if v > 1}
for r in self._fav_model:

View File

@@ -2418,6 +2418,7 @@ Author: Dmitriy Yefremov
<item id="nl_NL">Nederlands</item>
<item id="pl_PL">Polski</item>
<item id="pt_PT">Português</item>
<item id="sk_SK">Slovák</item>
<item id="tr_TR">Türkçe</item>
<item id="be_BY">Беларуская</item>
<item id="ru_RU">Русский</item>

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2
<!-- Generated with glade 3.40.0
The MIT License (MIT)
Copyright (c) 2018-2024 Dmitriy Yefremov
Copyright (c) 2018-2025 Dmitriy Yefremov
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -31,7 +31,7 @@ Author: Dmitriy Yefremov
<!-- interface-css-provider-path style.css -->
<!-- interface-license-type mit -->
<!-- interface-name DemonEditor -->
<!-- interface-copyright 2018-2024 Dmitriy Yefremov -->
<!-- interface-copyright 2018-2025 Dmitriy Yefremov -->
<!-- interface-authors Dmitriy Yefremov -->
<!-- n-columns=2 n-rows=4 -->
<object class="GtkGrid" id="cable_tr_box">
@@ -879,7 +879,7 @@ Author: Dmitriy Yefremov
</packing>
</child>
<child>
<!-- n-columns=2 n-rows=4 -->
<!-- n-columns=2 n-rows=5 -->
<object class="GtkGrid" id="tr_dialog_grid2">
<property name="visible">True</property>
<property name="can-focus">False</property>
@@ -911,7 +911,7 @@ Author: Dmitriy Yefremov
<property name="max-width-chars">12</property>
<property name="primary-icon-name">document-edit-symbolic</property>
<property name="primary-icon-activatable">False</property>
<property name="placeholder-text" translatable="yes">0 - 262142</property>
<property name="placeholder-text">0 - 262142</property>
<property name="input-purpose">digits</property>
<signal name="changed" handler="on_entry_changed" swapped="no"/>
</object>
@@ -928,7 +928,7 @@ Author: Dmitriy Yefremov
<property name="max-width-chars">12</property>
<property name="primary-icon-name">document-edit-symbolic</property>
<property name="primary-icon-activatable">False</property>
<property name="placeholder-text" translatable="yes">0 - 255</property>
<property name="placeholder-text">0 - 255</property>
<property name="input-purpose">digits</property>
<signal name="changed" handler="on_entry_changed" swapped="no"/>
</object>
@@ -945,7 +945,7 @@ Author: Dmitriy Yefremov
<property name="max-width-chars">12</property>
<property name="primary-icon-name">document-edit-symbolic</property>
<property name="primary-icon-activatable">False</property>
<property name="placeholder-text" translatable="yes">0 - 255</property>
<property name="placeholder-text">0 - 255</property>
<property name="input-purpose">digits</property>
<signal name="changed" handler="on_entry_changed" swapped="no"/>
</object>
@@ -1095,6 +1095,58 @@ Author: Dmitriy Yefremov
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkLabel" id="tr_t2mi_pid_label">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">T2-MI PID</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label">:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">4</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="t2mi_pid_entry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="width-chars">5</property>
<property name="max-width-chars">12</property>
<property name="primary-icon-name">document-edit-symbolic</property>
<property name="primary-icon-activatable">False</property>
<property name="placeholder-text">0 - 8191</property>
<property name="input-purpose">digits</property>
<signal name="changed" handler="on_entry_changed" swapped="no"/>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>

View File

@@ -2,7 +2,7 @@
#
# The MIT License (MIT)
#
# Copyright (c) 2018-2024 Dmitriy Yefremov
# Copyright (c) 2018-2025 Dmitriy Yefremov
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -207,6 +207,7 @@ class SatTransponderDialog(TransponderDialog):
self._pls_code_entry = builder.get_object("pls_code_entry")
self._is_id_entry = builder.get_object("is_id_entry")
self._t2mi_plp_id_entry = builder.get_object("t2mi_plp_id_entry")
self._t2mi_pid_entry = builder.get_object("t2mi_pid_entry")
self.set_style_provider(self._freq_entry)
self.set_style_provider(self._rate_entry)
@@ -230,6 +231,7 @@ class SatTransponderDialog(TransponderDialog):
self._is_id_entry.set_text(transponder.is_id if transponder.is_id else "")
self._pls_code_entry.set_text(transponder.pls_code if transponder.pls_code else "")
self._t2mi_plp_id_entry.set_text(transponder.t2mi_plp_id if transponder.t2mi_plp_id else "")
self._t2mi_pid_entry.set_text(transponder.t2mi_pid if transponder.t2mi_pid else "")
def to_transponder(self):
return Transponder(frequency=self._freq_entry.get_text(),
@@ -241,7 +243,8 @@ class SatTransponderDialog(TransponderDialog):
pls_mode=get_key_by_value(PLS_MODE, self._pls_mode_box.get_active_id()),
pls_code=self._pls_code_entry.get_text(),
is_id=self._is_id_entry.get_text(),
t2mi_plp_id=self._t2mi_plp_id_entry.get_text())
t2mi_plp_id=self._t2mi_plp_id_entry.get_text(),
t2mi_pid=self._t2mi_pid_entry.get_text())
def is_accept(self):
tr = self.to_transponder()
@@ -255,6 +258,8 @@ class SatTransponderDialog(TransponderDialog):
return False
elif self.digit_pattern.search(tr.t2mi_plp_id):
return False
elif self.digit_pattern.search(tr.t2mi_pid):
return False
return True

View File

@@ -128,6 +128,8 @@ Author: Dmitriy Yefremov
<column type="gchararray"/>
<!-- column-name t2mi_plp_id -->
<column type="gchararray"/>
<!-- column-name t2mi_pid -->
<column type="gchararray"/>
</columns>
<signal name="row-deleted" handler="on_sat_tr_model_changed" swapped="no"/>
<signal name="row-inserted" handler="on_sat_tr_model_changed" swapped="no"/>

View File

@@ -1,5 +1,5 @@
#!/bin/bash
VER="3.14.0_Beta"
VER="3.14.2_Beta"
B_PATH="dist/DemonEditor"
DEB_PATH="$B_PATH/usr/share/demoneditor"

View File

@@ -1,5 +1,5 @@
Package: demon-editor
Version: 3.14.0-Beta
Version: 3.14.2-Beta
Section: utils
Priority: optional
Architecture: all

View File

@@ -5,7 +5,7 @@ Source: https://github.com/DYefremov/DemonEditor
Files: *
MIT License
Copyright (c) 2018-2025 Dmitriy Yefremov
Copyright (c) 2018-2026 Dmitriy Yefremov
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -37,8 +37,8 @@ a = Analysis([EXE_NAME],
runtime_hooks=[],
hooksconfig={
"gi": {
"languages": ["en", "be", "es", "it", "nl",
"pl", "pt", "ru", "tr", "zh_CN"],
"languages": ["en", "be", "es", "it", "nl", "pl",
"pt", "ru", "sk", "tr", "zh_CN"],
"module-versions": {
"Gtk": "3.0"
},
@@ -81,7 +81,7 @@ app = BUNDLE(coll,
'CFBundleGetInfoString': "Enigma2 channel and satellite editor",
'LSApplicationCategoryType': 'public.app-category.utilities',
'LSMinimumSystemVersion': '10.13',
'CFBundleShortVersionString': f"3.14.0.{BUILD_DATE} Beta",
'CFBundleShortVersionString': f"3.14.2.{BUILD_DATE} Beta",
'NSHumanReadableCopyright': u"Copyright © 2018-2025, Dmitriy Yefremov",
'NSRequiresAquaSystemAppearance': 'false',
'NSHighResolutionCapable': 'true'

View File

@@ -35,8 +35,8 @@ a = Analysis([EXE_NAME],
runtime_hooks=[],
hooksconfig={
"gi": {
"languages": ["en", "be", "es", "it", "nl",
"pl", "pt", "ru", "tr", "zh_CN"],
"languages": ["en", "be", "es", "it", "nl", "pl",
"pt", "ru", "sk", "tr", "zh_CN"],
"module-versions": {
"Gtk": "3.0",
"GtkSource": "3",

View File

@@ -10,6 +10,7 @@ GenericName[nl]=Enigma2 boeket editor
GenericName[pl]=Edytor bukietów Enigma2
GenericName[pt]=Editor de buquês Enigma2
GenericName[ru]=Редактор букетов Enigma2
GenericName[sk]=Enigma2 editor balíčkov
GenericName[tr]=Enigma2 buket düzenleyici
GenericName[zh_CN]=Enigma2频道编辑器
Comment=Channel and satellite list editor for Enigma2
@@ -21,6 +22,7 @@ Comment[nl]=Kanaal- en satellietlijsteditor voor Enigma2
Comment[pl]=Edytor list kanałów i satelitów dla Enigma2
Comment[pt]=Editor de lista de canais e satélites para Enigma2
Comment[ru]=Редактор списка каналов и спутников для Enigma2
Comment[sk]=Editor zoznamu kanálov a satelitov pre Enigma2
Comment[tr]=Enigma2 için Kanal ve uydu listesi düzenleyici
Comment[zh_CN]=Enigma2频道和卫星列表编辑器
Icon=demon-editor

View File

@@ -1,4 +1,4 @@
# Copyright (C) 2018-2025 Dmitriy Yefremov
# Copyright (C) 2018-2026 Dmitriy Yefremov
# This file is distributed under the MIT license.
#
#
@@ -1596,3 +1596,9 @@ msgstr "Захаваць бягучыя змены"
msgid "Create a new service"
msgstr "Стварыць новы сэрвіс"
msgid "Extension support is disabled!"
msgstr "Падтрымка пашырэнняў адключана!"
msgid "Do you want to enable it?"
msgstr "Жадаеце ўключыць?"

View File

@@ -1610,3 +1610,9 @@ msgstr "Aktuelle Änderungen speichern"
msgid "Create a new service"
msgstr "Erstellen eines neuen Service"
msgid "Extension support is disabled!"
msgstr "Die Unterstützung für Erweiterungen ist deaktiviert!"
msgid "Do you want to enable it?"
msgstr "Möchtest du aktivieren?"

View File

@@ -1,4 +1,4 @@
# Copyright (C) 2018-2025 Dmitriy Yefremov
# Copyright (C) 2018-2026 Dmitriy Yefremov
# This file is distributed under the MIT license.
#
#
@@ -1593,3 +1593,9 @@ msgstr "Сохранить текущие изменения"
msgid "Create a new service"
msgstr "Создать новый сервис"
msgid "Extension support is disabled!"
msgstr "Поддержка расширений отключена!"
msgid "Do you want to enable it?"
msgstr "Желаете включить?"

1603
po/sk/demon-editor.po Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: DemonEditor\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-16 15:59+0300\n"
"PO-Revision-Date: 2025-08-24 12:50+0300\n"
"PO-Revision-Date: 2026-01-25 17:07+0300\n"
"Last-Translator: audi06_19 <info@dreamosat-forum.com>\n"
"Language-Team: audi06_19 <info@dreamosat-forum.com>\n"
"Language: tr\n"
@@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.7\n"
"X-Generator: Poedit 3.8\n"
msgid "translator-credits"
msgstr "audi06_19 <info@dreamosat-forum.com>"
@@ -1627,3 +1627,9 @@ msgstr "Mevcut değişiklikleri kaydet"
msgid "Create a new service"
msgstr "Yeni bir hizmet oluşturun"
msgid "Extension support is disabled!"
msgstr "Uzantı desteği devre dışı bırakıldı!"
msgid "Do you want to enable it?"
msgstr "Etkinleştirmek ister misiniz?"