diff --git a/README.md b/README.md
index 290e6b4e..48392913 100644
--- a/README.md
+++ b/README.md
@@ -25,21 +25,20 @@ _On **old systems** you might need to install [**vc redist**](https://learn.micr
# Settings
Hover your mouse over the ***Sfvip All*** logo:
-
+
To open the settings:
-Logo color & pulse meaning:
+# Logo
Color & pulse | Meaning
:--- | :---
Green slow pulse | Everything is fine
Red quick pulse | _Sfvip All_ needs your attention
# Logs
-The logs go **in pairs**: one for each process (***main*** & ***mitmproxy***).
+The logs go **in pairs**, one for each process (***main*** & ***mitmproxy***).
You'll find them in the app folder:
-
# Build
diff --git a/resources/README_template.md b/resources/README_template.md
index 3b1f713c..e34a0fee 100644
--- a/resources/README_template.md
+++ b/resources/README_template.md
@@ -25,21 +25,20 @@ _On **old systems** you might need to install [**vc redist**](https://learn.micr
# Settings
Hover your mouse over the ***{name}*** logo:
-
+
To open the settings:
-Logo color & pulse meaning:
+# Logo
Color & pulse | Meaning
:--- | :---
Green slow pulse | Everything is fine
Red quick pulse | _{name}_ needs your attention
# Logs
-The logs go **in pairs**: one for each process (***main*** & ***mitmproxy***).
+The logs go **in pairs**, one for each process (***main*** & ***mitmproxy***).
You'll find them in the app folder:
-
# Build
diff --git a/resources/readme/arrow.png b/resources/readme/arrow.png
new file mode 100644
index 00000000..0f30c78e
Binary files /dev/null and b/resources/readme/arrow.png differ
diff --git a/resources/readme/logo_arrow.png b/resources/readme/logo_arrow.png
deleted file mode 100644
index 8d33aa25..00000000
Binary files a/resources/readme/logo_arrow.png and /dev/null differ
diff --git a/resources/readme/settings.png b/resources/readme/settings.png
index ec8fe5ed..756bae61 100644
Binary files a/resources/readme/settings.png and b/resources/readme/settings.png differ
diff --git a/src/sfvip/ui/infos.py b/src/sfvip/ui/infos.py
index 28eb87fe..746b79fb 100644
--- a/src/sfvip/ui/infos.py
+++ b/src/sfvip/ui/infos.py
@@ -37,7 +37,7 @@ class _InfoTheme:
bg_interact = "#1F1F1F"
bg_headers = "#242424"
bg_rows = "#2A2A2A"
- separator = "#303030"
+ separator = "#353535"
border = Border(
bg="#808080",
size=1,
@@ -253,7 +253,7 @@ def _get_epg_prefer_label() -> Style:
def _epg_url_tooltip() -> Style:
- return _InfoStyle.app(LOC.EPGUrlTip).grey.no_truncate
+ return _InfoStyle.app(LOC.EPGUrlTip % ("xml", "xml.gz")).grey.no_truncate
def _epg_libmpv_tooltip() -> Style:
@@ -265,6 +265,14 @@ def _epg_prefer_tooltip() -> Style:
return _InfoStyle.tooltip(f"{LOC.EPGPrefer}:{msg}")
+def _proxy_tooltip(app_info: AppInfo) -> Style:
+ return _InfoStyle.app(LOC.ProxyTip % app_info.name).grey.no_truncate
+
+
+def _user_proxy_tooltip() -> Style:
+ return _InfoStyle.app(LOC.UserProxyTip).grey.no_truncate
+
+
def _player_changelog_tooltip() -> Style:
return _InfoStyle.tooltip()
@@ -326,6 +334,9 @@ def __init__(self, app_info: AppInfo) -> None:
self.separator = tk.Frame(self._frame, bg=_InfoTheme.separator)
self._proxies.set_headers(_get_infos_headers(app_info.name))
self._proxies_button.bind("", self.show_proxies)
+ # tooltips
+ set_tooltip(_proxy_tooltip(app_info), self._proxies.headers[2])
+ set_tooltip(_user_proxy_tooltip(), self._proxies.headers[4])
def show_proxies(self, _) -> None:
proxies_shown = self.config.App.show_proxies = not self.config.App.show_proxies
@@ -409,19 +420,17 @@ def __init__(self, app_info: AppInfo) -> None:
self._app_update = CheckBox(
frame, bg=_InfoTheme.bg_rows, **_InfoTheme.checkbox, **_get_auto_update().to_tk
)
- separator2 = tk.Frame(frame, bg=_InfoTheme.separator)
self._player_version = tk.Label(frame, bg=_InfoTheme.bg_rows, **_get_player_version().to_tk)
self._player_update = CheckBox(
frame, bg=_InfoTheme.bg_rows, **_InfoTheme.checkbox, **_get_auto_update().to_tk
)
self._player_button = Button(frame, **_InfoTheme.button) # type: ignore
- separator3 = tk.Frame(frame, bg=_InfoTheme.separator)
self._libmpv_version = tk.Label(frame, bg=_InfoTheme.bg_rows, **_get_libmpv_version().to_tk)
self._libmpv_update = CheckBox(
frame, bg=_InfoTheme.bg_rows, **_InfoTheme.checkbox, **_get_auto_update().to_tk
)
self._libmpv_button = Button(frame, **_InfoTheme.button) # type: ignore
- separator4 = tk.Frame(frame, bg=_InfoTheme.separator)
+ separator2 = tk.Frame(frame, bg=_InfoTheme.separator)
epg_frame = tk.Frame(frame, bg=_InfoTheme.bg_rows)
epg_label = tk.Label(epg_frame, bg=_InfoTheme.bg_rows, **_epg().to_tk)
self._epg_url = tk.Entry(
@@ -460,7 +469,7 @@ def __init__(self, app_info: AppInfo) -> None:
self._epg_prefer_check = CheckBox(
epg_prefer_frame, bg=_InfoTheme.bg_rows, **_InfoTheme.checkbox, **_get_epg_prefer_update().to_tk
)
- separator5 = tk.Frame(frame, bg=_InfoTheme.separator)
+ separator3 = tk.Frame(frame, bg=_InfoTheme.separator)
# layout
pad = _InfoTheme.pad
button_pad = _InfoTheme.button_pad
@@ -475,21 +484,17 @@ def __init__(self, app_info: AppInfo) -> None:
self._app_button.grid(row=row, column=2, padx=button_pad, pady=button_pad, sticky=tk.EW)
self._app_button.grid_remove()
row += 1
- separator2.grid(row=row, columnspan=3, sticky=tk.EW)
- row += 1
- self._player_version.grid(row=row, column=0, padx=pad, pady=pad, sticky=tk.W)
+ self._player_version.grid(row=row, column=0, padx=pad, pady=0, sticky=tk.W)
self._player_update.grid(row=row, column=1, padx=pad, sticky=tk.EW)
self._player_button.grid(row=row, column=2, padx=button_pad, pady=button_pad, sticky=tk.EW)
self._player_button.grid_remove()
row += 1
- separator3.grid(row=row, columnspan=3, sticky=tk.EW)
- row += 1
self._libmpv_version.grid(row=row, column=0, padx=pad, pady=pad, sticky=tk.W)
self._libmpv_update.grid(row=row, column=1, padx=pad, sticky=tk.EW)
self._libmpv_button.grid(row=row, column=2, padx=button_pad, pady=button_pad, sticky=tk.EW)
self._libmpv_button.grid_remove()
row += 1
- separator4.grid(row=row, columnspan=3, sticky=tk.EW)
+ separator2.grid(row=row, columnspan=3, sticky=tk.EW)
row += 1
epg_frame.grid(row=row, columnspan=3, padx=pad, pady=pad, sticky=tk.NSEW)
epg_label.pack(side=tk.LEFT)
@@ -506,7 +511,7 @@ def __init__(self, app_info: AppInfo) -> None:
epg_prefer_label.pack(side=tk.LEFT)
self._epg_prefer_check.pack(side=tk.LEFT)
row += 1
- separator5.grid(row=row, columnspan=3, sticky=tk.EW)
+ separator3.grid(row=row, columnspan=3, sticky=tk.EW)
row += 1
super()._layout(row=row)
frame.columnconfigure(2, weight=1)
diff --git a/src/sfvip/ui/widgets.py b/src/sfvip/ui/widgets.py
index 3afed38b..40c354db 100644
--- a/src/sfvip/ui/widgets.py
+++ b/src/sfvip/ui/widgets.py
@@ -172,7 +172,7 @@ class ListView(tk.Frame):
Note: set_headers should be called before set_rows
"""
- # pylint: disable=too-many-arguments
+ # pylint: disable=too-many-arguments, too-many-instance-attributes
def __init__(
self,
master: tk.BaseWidget,
@@ -200,6 +200,7 @@ def __init__(
self._bg_separator = bg_separator
self._pad = pad
self._widths = []
+ self._headers = []
@staticmethod
def _clear(what: tk.BaseWidget) -> None:
@@ -215,8 +216,13 @@ def set_headers(self, headers: Collection[Style]) -> None:
label = tk.Label(self._frame_headers, bg=self._bg_headers, **text.to_tk)
label.grid(row=0, column=column, ipadx=pad, ipady=pad, sticky=tk.NSEW)
self._widths[column] = max(label.winfo_reqwidth() + pad * 2, self._widths[column])
+ self._headers.append(label)
self.set_column_widths()
+ @property
+ def headers(self) -> list[tk.Label]:
+ return self._headers
+
def set_rows(self, rows: Sequence[Collection[Style]]) -> None:
self._clear(self._frame_rows)
pad = self._pad
@@ -225,7 +231,7 @@ def set_rows(self, rows: Sequence[Collection[Style]]) -> None:
assert len(row_content) == n_column
for column, text in enumerate(row_content):
label = tk.Label(self._frame_rows, bg=self._bg_rows, **text.to_tk)
- label.grid(row=row * 2, column=column, ipadx=pad, ipady=pad, sticky=tk.NSEW)
+ label.grid(row=row * 2, column=column, ipadx=pad, ipady=0, sticky=tk.NSEW)
self._widths[column] = max(label.winfo_reqwidth() + pad * 2, self._widths[column])
# row separator
if row != len(rows) - 1:
diff --git a/translations/bulgarian.json b/translations/bulgarian.json
index a6f69bfe..094c35ef 100644
--- a/translations/bulgarian.json
+++ b/translations/bulgarian.json
@@ -56,6 +56,8 @@
"No": "Не",
"EPGPreferYes": "Да: Първо търсите в EPG на IPTV доставчика. Използвайте външния EPG само когато той не успее.",
"EPGPreferNo": "Не: Търсете първо във външния EPG. Използвайте EPG на доставчика на IPTV само когато той не успее.",
- "EPGUrlTip": "Въведете URL адреса на външния EPG, който трябва да завършва с \"xml\" или \"xml.gz\".",
- "LibmpvTip": "Libmpv декодира и визуализира аудио и видео. активирайте актуализирането, за да получите последната версия, оптимизирана за вашия компютър."
+ "EPGUrlTip": "Въведете URL адреса на външния EPG, който трябва да завършва с \"%s\" или \"%s\".",
+ "LibmpvTip": "Libmpv декодира и визуализира аудио и видео. Активирайте актуализациите, за да получите последната версия, оптимизирана за вашия компютър.",
+ "ProxyTip": "%s използва локален прокси сървър за прихващане на всички заявки към доставчика на IPTV и инжектиране на категориите 'all' и външния EPG",
+ "UserProxyTip": "Действително потребителско прокси, ако съществува такова"
}
\ No newline at end of file
diff --git a/translations/english.json b/translations/english.json
index f8f92044..76992fce 100644
--- a/translations/english.json
+++ b/translations/english.json
@@ -56,6 +56,8 @@
"No": "No",
"EPGPreferYes": "Yes: Search the IPTV provider EPG first. Use the external EPG only when it fails.",
"EPGPreferNo": "No: Search the external EPG first. Use the IPTV provider EPG only when it fails.",
- "EPGUrlTip": "Enter the URL of the external EPG, it should end up with 'xml' or 'xml.gz'",
- "LibmpvTip": "Libmpv decodes & renders audio and video.Enable the update to get the last version optimized for your computer."
+ "EPGUrlTip": "Enter the URL of the external EPG, it should end up with '%s' or '%s'",
+ "LibmpvTip": "Libmpv decodes & renders audio and video. Enable the updates to get the last version optimized for your computer.",
+ "ProxyTip": "%s uses a local proxy to intercept all requests to the IPTV provider and inject the 'all' categories and the external EPG",
+ "UserProxyTip": "Actual user proxy if it exists"
}
\ No newline at end of file
diff --git a/translations/french.json b/translations/french.json
index 43c2feea..8a6f746b 100644
--- a/translations/french.json
+++ b/translations/french.json
@@ -54,8 +54,10 @@
"EPGPrefer": "Chercher d'abord chez le fournisseur IPTV",
"Yes": "Oui",
"No": "Non",
- "EPGPreferYes": "Oui : Cherchez d'abord dans l'EPG du fournisseur de télévision par internet. N'utilisez l'EPG externe qu'en cas d'échec.",
- "EPGPreferNo": "Non : rechercher d'abord l'EPG externe. Utiliser l'EPG du fournisseur IPTV uniquement en cas d'échec.",
- "EPGUrlTip": "Entrez l'URL de l'EPG externe, qui devrait se terminer par 'xml' ou 'xml.gz'.",
- "LibmpvTip": "Libmpv décode et rend l'audio et la vidéo. Activez la mise à jour pour obtenir la dernière version optimisée pour votre ordinateur."
+ "EPGPreferYes": "Oui : Recherchez d'abord dans l'EPG du fournisseur de télévision par internet. N'utilisez l'EPG externe qu'en cas d'échec.",
+ "EPGPreferNo": "Non : rechercher l'EPG externe en premier. Utiliser l'EPG du fournisseur IPTV uniquement en cas d'échec.",
+ "EPGUrlTip": "Entrez l'URL de l'EPG externe, qui devrait se terminer par '%s' ou '%s'.",
+ "LibmpvTip": "Libmpv décode et rend l'audio et la vidéo. Activez les mises à jour pour obtenir la dernière version optimisée pour votre ordinateur.",
+ "ProxyTip": "%s utilise un proxy local pour intercepter toutes les requêtes adressées au fournisseur IPTV et injecter les catégories 'all' et l'EPG externe.",
+ "UserProxyTip": "Proxy de l'utilisateur actuel s'il existe"
}
\ No newline at end of file
diff --git a/translations/german.json b/translations/german.json
index 5bf9bb01..7e6a5d6f 100644
--- a/translations/german.json
+++ b/translations/german.json
@@ -56,6 +56,8 @@
"No": "Nein",
"EPGPreferYes": "Ja: Suchen Sie zuerst im EPG des IPTV-Anbieters. Verwenden Sie den externen EPG nur, wenn er nicht funktioniert.",
"EPGPreferNo": "Nein: Zuerst im externen EPG suchen. Verwenden Sie den EPG des IPTV-Anbieters nur, wenn er nicht funktioniert.",
- "EPGUrlTip": "Geben Sie die URL des externen EPGs ein, sie sollte mit 'xml' oder 'xml.gz' enden.",
- "LibmpvTip": "Libmpv dekodiert und rendert Audio und Video. Aktivieren Sie das Update, um die letzte für Ihren Computer optimierte Version zu erhalten."
+ "EPGUrlTip": "Geben Sie die URL des externen EPGs ein, sie sollte mit '%s' oder '%s' enden.",
+ "LibmpvTip": "Libmpv dekodiert und rendert Audio und Video. Aktivieren Sie die Updates, um die letzte für Ihren Computer optimierte Version zu erhalten.",
+ "ProxyTip": "%s verwendet einen lokalen Proxy, um alle Anfragen an den IPTV-Anbieter abzufangen und die 'all'-Kategorien und den externen EPG zu injizieren",
+ "UserProxyTip": "Tatsächlicher Benutzer-Proxy, wenn er existiert"
}
\ No newline at end of file
diff --git a/translations/greek.json b/translations/greek.json
index 81d9327c..08aa6bda 100644
--- a/translations/greek.json
+++ b/translations/greek.json
@@ -56,6 +56,8 @@
"No": "Όχι",
"EPGPreferYes": "Ναι: Αναζητήστε πρώτα το EPG του παρόχου IPTV. Χρησιμοποιείτε το εξωτερικό EPG μόνο όταν αυτό αποτυγχάνει.",
"EPGPreferNo": "Όχι: Αναζητήστε πρώτα το εξωτερικό EPG. Χρησιμοποιήστε το EPG του παρόχου IPTV μόνο όταν αυτό αποτύχει.",
- "EPGUrlTip": "Εισάγετε τη διεύθυνση URL του εξωτερικού EPG, θα πρέπει να καταλήγει σε 'xml' ή 'xml.gz'.",
- "LibmpvTip": "Το Libmpv αποκωδικοποιεί & αποδίδει ήχο και βίντεο. ενεργοποιήστε την ενημέρωση για να λάβετε την τελευταία έκδοση βελτιστοποιημένη για τον υπολογιστή σας."
+ "EPGUrlTip": "Εισάγετε τη διεύθυνση URL του εξωτερικού EPG, θα πρέπει να καταλήγει σε '%s' ή '%s'.",
+ "LibmpvTip": "Το Libmpv αποκωδικοποιεί και αποδίδει ήχο και βίντεο. Ενεργοποιήστε τις ενημερώσεις για να λάβετε την τελευταία έκδοση βελτιστοποιημένη για τον υπολογιστή σας.",
+ "ProxyTip": "Το %s χρησιμοποιεί έναν τοπικό μεσάζοντα για να υποκλέψει όλα τα αιτήματα προς τον πάροχο IPTV και να εισάγει τις κατηγορίες 'all' και το εξωτερικό EPG",
+ "UserProxyTip": "Πραγματικός μεσολάβησης χρήστη, εάν υπάρχει"
}
\ No newline at end of file
diff --git a/translations/italian.json b/translations/italian.json
index 21b6af60..8855ae94 100644
--- a/translations/italian.json
+++ b/translations/italian.json
@@ -54,8 +54,10 @@
"EPGPrefer": "Cercare prima il provider IPTV",
"Yes": "Si",
"No": "No",
- "EPGPreferYes": "Sì: cercate prima l'EPG del provider IPTV. Utilizzare l'EPG esterno solo in caso di errore.",
+ "EPGPreferYes": "Sì: cerca prima l'EPG del provider IPTV. Utilizzare l'EPG esterno solo in caso di errore.",
"EPGPreferNo": "No: Cerca prima l'EPG esterno. Utilizzare l'EPG del provider IPTV solo in caso di errore.",
- "EPGUrlTip": "Inserite l'URL dell'EPG esterno, che dovrebbe finire con 'xml' o 'xml.gz'.",
- "LibmpvTip": "Libmpv decodifica e rende audio e video. Attivare l'aggiornamento per ottenere l'ultima versione ottimizzata per il proprio computer."
+ "EPGUrlTip": "Immettere l'URL dell'EPG esterno, che dovrebbe finire con '%s' o '%s'.",
+ "LibmpvTip": "Libmpv decodifica e rende audio e video. Attivare gli aggiornamenti per ottenere l'ultima versione ottimizzata per il proprio computer.",
+ "ProxyTip": "%s utilizza un proxy locale per intercettare tutte le richieste al provider IPTV e iniettare le categorie 'all' e l'EPG esterno.",
+ "UserProxyTip": "Proxy utente effettivo, se esiste"
}
\ No newline at end of file
diff --git a/translations/loc/texts.py b/translations/loc/texts.py
index 92151f76..bf1fe75e 100644
--- a/translations/loc/texts.py
+++ b/translations/loc/texts.py
@@ -66,11 +66,16 @@ class Texts:
No: str = "No"
EPGPreferYes: str = "Yes: Search the IPTV provider EPG first. Use the external EPG only when it fails."
EPGPreferNo: str = "No: Search the external EPG first. Use the IPTV provider EPG only when it fails."
- EPGUrlTip: str = "Enter the URL of the external EPG, it should end up with 'xml' or 'xml.gz'"
+ EPGUrlTip: str = "Enter the URL of the external EPG, it should end up with '%s' or '%s'"
LibmpvTip: str = (
- "Libmpv decodes & renders audio and video."
- "Enable the update to get the last version optimized for your computer."
+ "Libmpv decodes & renders audio and video. "
+ "Enable the updates to get the last version optimized for your computer."
)
+ ProxyTip: str = (
+ "%s uses a local proxy to intercept all requests to the IPTV provider "
+ "and inject the 'all' categories and the external EPG"
+ )
+ UserProxyTip: str = "Actual user proxy if it exists"
def as_dict(self) -> dict[str, str]:
return dataclasses.asdict(self)
diff --git a/translations/polish.json b/translations/polish.json
index 715ca1c2..c972ec6e 100644
--- a/translations/polish.json
+++ b/translations/polish.json
@@ -56,6 +56,8 @@
"No": "Nie",
"EPGPreferYes": "Tak: Najpierw należy przeszukać EPG dostawcy IPTV. Używaj zewnętrznego EPG tylko wtedy, gdy zawiedzie.",
"EPGPreferNo": "Nie: Najpierw należy przeszukać zewnętrzne EPG. Użyj EPG dostawcy IPTV tylko w przypadku niepowodzenia.",
- "EPGUrlTip": "Wprowadź adres URL zewnętrznego EPG, powinien on kończyć się na \"xml\" lub \"xml.gz\".",
- "LibmpvTip": "Libmpv dekoduje i renderuje audio i wideo. Włącz aktualizację, aby uzyskać ostatnią wersję zoptymalizowaną dla twojego komputera."
+ "EPGUrlTip": "Wprowadź adres URL zewnętrznego EPG, powinien on kończyć się na \"%s\" lub \"%s\".",
+ "LibmpvTip": "Libmpv dekoduje i renderuje audio i wideo. Włącz aktualizacje, aby uzyskać ostatnią wersję zoptymalizowaną dla twojego komputera.",
+ "ProxyTip": "%s używa lokalnego proxy do przechwytywania wszystkich żądań do dostawcy IPTV i wstrzykiwania kategorii \"all\" i zewnętrznego EPG.",
+ "UserProxyTip": "Rzeczywiste proxy użytkownika, jeśli istnieje"
}
\ No newline at end of file
diff --git a/translations/russian.json b/translations/russian.json
index 7b79c217..e049deb6 100644
--- a/translations/russian.json
+++ b/translations/russian.json
@@ -56,6 +56,8 @@
"No": "Нет",
"EPGPreferYes": "Да: Сначала ищите EPG провайдера IPTV. Используйте внешний EPG только в случае неудачи.",
"EPGPreferNo": "Нет: Поиск внешнего EPG первым. Используйте EPG провайдера IPTV только в случае неудачи.",
- "EPGUrlTip": "Введите URL-адрес внешнего EPG, в итоге он должен содержать 'xml' или 'xml.gz'.",
- "LibmpvTip": "Libmpv декодирует и рендерит аудио и видео. Включите обновление, чтобы получить последнюю версию, оптимизированную для вашего компьютера."
+ "EPGUrlTip": "Введите URL-адрес внешнего EPG, в итоге должно получиться '%s' или '%s'.",
+ "LibmpvTip": "Libmpv декодирует и рендерит аудио и видео. Включите обновления, чтобы получить последнюю версию, оптимизированную для вашего компьютера.",
+ "ProxyTip": "%s использует локальный прокси для перехвата всех запросов к IPTV-провайдеру и введения категорий 'all' и внешнего EPG.",
+ "UserProxyTip": "Фактический пользовательский прокси, если он существует"
}
\ No newline at end of file
diff --git a/translations/serbian.json b/translations/serbian.json
index c1b772aa..667ebbfa 100644
--- a/translations/serbian.json
+++ b/translations/serbian.json
@@ -56,6 +56,8 @@
"No": "Не",
"EPGPreferYes": "Да: Прво претражите ЕПГ ИПТВ провајдера. Користите екстерни ЕПГ само када не успе.",
"EPGPreferNo": "Не: прво претражите екстерни ЕПГ. Користите ЕПГ ИПТВ провајдера само када не успе.",
- "EPGUrlTip": "Унесите УРЛ спољног ЕПГ-а, требало би да се заврши са 'кмл' или 'кмл.гз'",
- "LibmpvTip": "Либмпв декодира и приказује аудио и видео. Омогућите ажурирање да бисте добили последњу верзију оптимизовану за ваш рачунар."
+ "EPGUrlTip": "Унесите УРЛ спољног ЕПГ-а, требало би да се заврши са '%s' или '%s'",
+ "LibmpvTip": "Либмпв декодира и приказује аудио и видео. Омогућите ажурирања да бисте последњу верзију оптимизовали за ваш рачунар.",
+ "ProxyTip": "%s користи локални прокси да пресретне све захтеве ИПТВ провајдеру и убаци 'све' категорије и екстерни ЕПГ",
+ "UserProxyTip": "Стварни кориснички прокси ако постоји"
}
\ No newline at end of file
diff --git a/translations/slovenian.json b/translations/slovenian.json
index 67120a09..2f3d50a8 100644
--- a/translations/slovenian.json
+++ b/translations/slovenian.json
@@ -56,6 +56,8 @@
"No": "Ne",
"EPGPreferYes": "Da: najprej poiščete EPG ponudnika IPTV. Zunanji program EPG uporabite le, kadar ta ne uspe.",
"EPGPreferNo": "Ne: Najprej poiščite zunanji EPG. EPG ponudnika IPTV uporabite le, če je neuspešen.",
- "EPGUrlTip": "Vnesite URL zunanjega EPG, ki se mora končati z 'xml' ali 'xml.gz'.",
- "LibmpvTip": "Libmpv dekodira in upodablja zvok in video. omogočite posodobitev, da dobite zadnjo različico, optimizirano za vaš računalnik."
+ "EPGUrlTip": "Vnesite URL zunanjega EPG, ki se mora končati z \"%s\" ali \"%s\".",
+ "LibmpvTip": "Libmpv dekodira in prikazuje zvok in video. Omogočite posodobitve, da dobite zadnjo različico, optimizirano za vaš računalnik.",
+ "ProxyTip": "%s uporablja lokalni posrednik za prestrezanje vseh zahtevkov ponudniku IPTV in vnašanje kategorij 'all' ter zunanjega EPG",
+ "UserProxyTip": "Dejanski uporabniški proxy, če obstaja"
}
\ No newline at end of file
diff --git a/translations/spanish.json b/translations/spanish.json
index ba9d7a69..e0748740 100644
--- a/translations/spanish.json
+++ b/translations/spanish.json
@@ -56,6 +56,8 @@
"No": "No",
"EPGPreferYes": "Sí: Busca primero en la EPG del proveedor de IPTV. Utiliza la EPG externa sólo cuando falle.",
"EPGPreferNo": "No: Buscar primero en la EPG externa. Utilice la EPG del proveedor de IPTV sólo cuando falle.",
- "EPGUrlTip": "Introduce la URL de la EPG externa, debería terminar con 'xml' o 'xml.gz'.",
- "LibmpvTip": "Libmpv decodifica y renderiza audio y video.Activa la actualización para obtener la última versión optimizada para tu ordenador."
+ "EPGUrlTip": "Introduce la URL de la EPG externa, debe terminar con '%s' o '%s'.",
+ "LibmpvTip": "Libmpv decodifica y renderiza audio y video. Activa las actualizaciones para obtener la última versión optimizada para tu ordenador.",
+ "ProxyTip": "%s utiliza un proxy local para interceptar todas las peticiones al proveedor de IPTV e inyectar las categorías 'all' y la EPG externa",
+ "UserProxyTip": "Proxy de usuario real si existe"
}
\ No newline at end of file
diff --git a/translations/turkish.json b/translations/turkish.json
index 0c4a62f0..dd4a772d 100644
--- a/translations/turkish.json
+++ b/translations/turkish.json
@@ -56,6 +56,8 @@
"No": "Hayır",
"EPGPreferYes": "Evet: Önce IPTV sağlayıcısı EPG'sini arayın. Harici EPG'yi yalnızca başarısız olduğunda kullanın.",
"EPGPreferNo": "Hayır: Önce harici EPG'yi arayın. IPTV sağlayıcısı EPG'sini yalnızca başarısız olduğunda kullanın.",
- "EPGUrlTip": "Harici EPG'nin URL'sini girin, 'xml' veya 'xml.gz' ile bitmelidir",
- "LibmpvTip": "Libmpv ses ve videonun kodunu çözer ve işler Bilgisayarınız için optimize edilmiş son sürümü almak için güncellemeyi etkinleştirin."
+ "EPGUrlTip": "Harici EPG'nin URL'sini girin, '%s' veya '%s' ile bitmelidir",
+ "LibmpvTip": "Libmpv ses ve videonun kodunu çözer ve işler. Bilgisayarınız için optimize edilmiş son sürümü almak için güncellemeleri etkinleştirin.",
+ "ProxyTip": "%s, IPTV sağlayıcısına yapılan tüm istekleri kesmek ve 'tüm' kategorileri ve harici EPG'yi enjekte etmek için yerel bir proxy kullanır",
+ "UserProxyTip": "Varsa gerçek kullanıcı proxy'si"
}
\ No newline at end of file