diff --git a/README.md b/README.md index 3026f59a..290e6b4e 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ ***Sfvip All*** wraps ***[Sfvip Player](https://github.com/K4L4Uz/SFVIP-Player/tree/master)*** to add new features: * Insert an _All_ category when missing so you can easily **search your entire catalog**. -* Update ***[Mpv](https://mpv.io/)*** and ***[Sfvip Player](https://github.com/K4L4Uz/SFVIP-Player/tree/master)*** so you can enjoy their latest features. -* Translated in all ***Sfvip Player*** languages. +* Update ***[Mpv](https://mpv.io/)*** and **Sfvip Player** so you can enjoy their latest features. +* Translated in all **Sfvip Player** languages. * Support an **external EPG**[^1]. [^1]: External EPG doesn't work with **local** m3u accounts. @@ -17,32 +17,33 @@ []() * Check the [***changelog***](build/changelog.md) and ***notes***[^2]. -* [***Sfvip Player***](https://github.com/K4L4Uz/SFVIP-Player/tree/master) will be automatically installed if missing. -* Please use [***SfvipUserProxy***](user_proxy_cmd) to add or remove a proxy for ***all users*** in ***Sfvip Player*** database. +* **Sfvip Player** will be automatically installed if missing. +* Please use [***SfvipUserProxy***](user_proxy_cmd) to add or remove a proxy for **all users** in **Sfvip Player** database. [^2]:_**Sfvip All** will ask for network connection its first run because it relies on local proxies to do its magic._ _On **old systems** you might need to install [**vc redist**](https://learn.microsoft.com/en-GB/cpp/windows/latest-supported-vc-redist) for [**x86**](https://aka.ms/vs/17/release/vc_redist.x86.exe) or [**x64**](https://aka.ms/vs/17/release/vc_redist.x64.exe)._ # Settings -* Hover your mouse over the ***Sfvip All*** logo: - +Hover your mouse over the ***Sfvip All*** logo: + -* To open the settings: - +To open the settings: + -* Logo pulse meaning: - Color & pulse | Meaning - :--- | :--- - slow pulse | Everything is fine - quick pulse | _Sfvip All_ needs your attention +Logo color & pulse meaning: +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***) and they are in the app folder: +The logs go **in pairs**: one for each process (***main*** & ***mitmproxy***). +You'll find them in the app folder: # Build -[![version](https://custom-icon-badges.demolab.com/badge/Build%201.4.12.40-informational?logo=github)](/build_config.py#L27) +[![version](https://custom-icon-badges.demolab.com/badge/Build%201.4.12.41-informational?logo=github)](/build_config.py#L27) [![Sloc](https://custom-icon-badges.demolab.com/badge/Sloc%208.3k-informational?logo=file-code)](https://api.codetabs.com/v1/loc/?github=sebdelsol/sfvip-all) [![Ruff](https://custom-icon-badges.demolab.com/badge/Ruff-informational?logo=ruff-color)](https://docs.astral.sh/ruff/) [![Python](https://custom-icon-badges.demolab.com/badge/Python%203.11.8-linen?logo=python-color)](https://www.python.org/downloads/release/python-3118/) diff --git a/build/changelog.md b/build/changelog.md index 9889fe11..5fcfcf09 100644 --- a/build/changelog.md +++ b/build/changelog.md @@ -1,3 +1,6 @@ +## 1.4.12.41 +* Tooltips added. + ## 1.4.12.40 * Option to prefer the IPTV provider EPG over external EPG. * Faster EPG processing and loading that use less memory. diff --git a/build_config.py b/build_config.py index 4336f24e..e3226e89 100644 --- a/build_config.py +++ b/build_config.py @@ -24,7 +24,7 @@ class Build: main: ClassVar = "sfvip_all.py" company: ClassVar = "sebdelsol" name: ClassVar = "Sfvip All" - version: ClassVar = "1.4.12.40" + version: ClassVar = "1.4.12.41" dir: ClassVar = "build" enable_console: ClassVar = False logs_dir: ClassVar = "../logs" diff --git a/resources/README_template.md b/resources/README_template.md index a17d1409..3b1f713c 100644 --- a/resources/README_template.md +++ b/resources/README_template.md @@ -2,8 +2,8 @@ ***{name}*** wraps ***[Sfvip Player](https://github.com/K4L4Uz/SFVIP-Player/tree/master)*** to add new features: * Insert an _All_ category when missing so you can easily **search your entire catalog**. -* Update ***[Mpv](https://mpv.io/)*** and ***[Sfvip Player](https://github.com/K4L4Uz/SFVIP-Player/tree/master)*** so you can enjoy their latest features. -* Translated in all ***Sfvip Player*** languages. +* Update ***[Mpv](https://mpv.io/)*** and **Sfvip Player** so you can enjoy their latest features. +* Translated in all **Sfvip Player** languages. * Support an **external EPG**[^1]. [^1]: External EPG doesn't work with **local** m3u accounts. @@ -17,27 +17,28 @@ []() * Check the [***changelog***](build/changelog.md) and ***notes***[^2]. -* [***Sfvip Player***](https://github.com/K4L4Uz/SFVIP-Player/tree/master) will be automatically installed if missing. -* Please use [***SfvipUserProxy***](user_proxy_cmd) to add or remove a proxy for ***all users*** in ***Sfvip Player*** database. +* **Sfvip Player** will be automatically installed if missing. +* Please use [***SfvipUserProxy***](user_proxy_cmd) to add or remove a proxy for **all users** in **Sfvip Player** database. [^2]:_**{name}** will ask for network connection its first run because it relies on local proxies to do its magic._ _On **old systems** you might need to install [**vc redist**](https://learn.microsoft.com/en-GB/cpp/windows/latest-supported-vc-redist) for [**x86**](https://aka.ms/vs/17/release/vc_redist.x86.exe) or [**x64**](https://aka.ms/vs/17/release/vc_redist.x64.exe)._ # Settings -* Hover your mouse over the ***{name}*** logo: - +Hover your mouse over the ***{name}*** logo: + -* To open the settings: - +To open the settings: + -* Logo pulse meaning: - Color & pulse | Meaning - :--- | :--- - slow pulse | Everything is fine - quick pulse | _{name}_ needs your attention +Logo color & pulse meaning: +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***) and they are in the app folder: +The logs go **in pairs**: one for each process (***main*** & ***mitmproxy***). +You'll find them in the app folder: diff --git a/src/mitm/epg/update.py b/src/mitm/epg/update.py index bb2bd62c..7206ca48 100644 --- a/src/mitm/epg/update.py +++ b/src/mitm/epg/update.py @@ -32,7 +32,7 @@ class EPGstatus(Enum): - LOADING = auto() + DOWNLOADING = auto() LOAD_CACHE = auto() SAVE_CACHE = auto() PROCESSING = auto() @@ -202,7 +202,7 @@ class EPGupdate(NamedTuple): @contextmanager @staticmethod def _load_xml(url: str, epg_process: EPGProcess, timeout: int) -> Iterator[Optional[Path]]: - epg_process.update_status(EPGProgress(EPGstatus.LOADING)) + epg_process.update_status(EPGProgress(EPGstatus.DOWNLOADING)) if (xml := Path(url)).is_file(): # for debug purpose yield xml return @@ -218,7 +218,7 @@ def _load_xml(url: str, epg_process: EPGProcess, timeout: int) -> Iterator[Optio yield None return if progress_step and (progress := progress_step.progress(i * EPGupdate._chunk_size)): - epg_process.update_status(EPGProgress(EPGstatus.LOADING, progress)) + epg_process.update_status(EPGProgress(EPGstatus.DOWNLOADING, progress)) f.write(chunk) yield xml diff --git a/src/sfvip/player/updater.py b/src/sfvip/player/updater.py index 4e9a0364..c5f730cc 100644 --- a/src/sfvip/player/updater.py +++ b/src/sfvip/player/updater.py @@ -59,13 +59,17 @@ def set_version(self, version: Version, text: str) -> None: self._changelogs = dict(sorted(self._changelogs.items(), reverse=True)) self.save_all() + @staticmethod + def _sanitize(text: str) -> str: + text = re.sub(r"^\s?\-", "", text) + return text.replace("...", ".").strip().capitalize() + def __str__(self) -> str: return "\n\n".join( ( LOC.ChangeLog % "Sfvip Player", *( - f"{PlayerChangelogs._prefix}{version}:\n" - f"{PlayerChangelogs._tab}{text.capitalize().replace('...', '.')}" + f"{PlayerChangelogs._prefix}{version}:\n" f"{PlayerChangelogs._tab}- {self._sanitize(text)}" for i, (version, text) in enumerate(self._changelogs.items()) if i < self._n_logs_showed ), diff --git a/src/sfvip/ui/infos.py b/src/sfvip/ui/infos.py index 98bdf18e..28eb87fe 100644 --- a/src/sfvip/ui/infos.py +++ b/src/sfvip/ui/infos.py @@ -152,7 +152,7 @@ def _app_version_tooltip(app_info: AppInfo) -> Style: break lines.extend(("", f"{prefix}{text}:")) case "*": - lines.append(f"{tab}{text}") + lines.append(f"{tab}- {text}") except ValueError: if line: lines.append(f"{tab}{line}") @@ -228,7 +228,7 @@ def _epg_confidence_percent() -> Style: def _epg_status_styles(progress: str) -> dict[EPGstatus | None, Style]: return { - EPGstatus.LOADING: _InfoStyle.app(f"{LOC.Loading}{progress}").white, + EPGstatus.DOWNLOADING: _InfoStyle.app(f"{LOC.Downloading}{progress}").white, EPGstatus.PROCESSING: _InfoStyle.app(f"{LOC.Processing}{progress}").white, EPGstatus.LOAD_CACHE: _InfoStyle.app(f"{LOC.LoadCache}{progress}").white, EPGstatus.SAVE_CACHE: _InfoStyle.app(f"{LOC.SaveCache}{progress}").white, @@ -252,6 +252,14 @@ def _get_epg_prefer_label() -> Style: return _InfoStyle.app(LOC.EPGPrefer).grey.no_truncate +def _epg_url_tooltip() -> Style: + return _InfoStyle.app(LOC.EPGUrlTip).grey.no_truncate + + +def _epg_libmpv_tooltip() -> Style: + return _InfoStyle.app(LOC.LibmpvTip).grey.no_truncate + + def _epg_prefer_tooltip() -> Style: msg = "".join((f"\n\n • {text}" for text in (LOC.EPGPreferYes, LOC.EPGPreferNo))) return _InfoStyle.tooltip(f"{LOC.EPGPrefer}:{msg}") @@ -508,6 +516,8 @@ def __init__(self, app_info: AppInfo) -> None: set_tooltip(_app_version_tooltip(app_info), app_version) set_tooltip(_epg_confidence_tooltip(), epg_confidence_label) set_tooltip(_epg_prefer_tooltip(), epg_prefer_label) + set_tooltip(_epg_url_tooltip(), epg_label) + set_tooltip(_epg_libmpv_tooltip(), self._libmpv_version) def get_changelog(self) -> str: return self._changelog_callback() if self._changelog_callback else "" @@ -528,7 +538,7 @@ def _callback(_) -> None: self._epg_url.bind("", _callback) def set_epg_status(self, epg_status: EPGProgress) -> None: - self._epg_url.config(state=tk.DISABLED if epg_status.status is EPGstatus.LOADING else tk.NORMAL) + self._epg_url.config(state=tk.DISABLED if epg_status.status is EPGstatus.DOWNLOADING else tk.NORMAL) self._epg_status.config(**_epg_status(epg_status).to_tk) def set_epg_confidence_update(self, confidence: int, callback: Callable[[int], None]) -> None: diff --git a/translations/bulgarian.json b/translations/bulgarian.json index 00b048a2..a6f69bfe 100644 --- a/translations/bulgarian.json +++ b/translations/bulgarian.json @@ -34,9 +34,9 @@ "UpgradeFailed": "Обновяването на %s не е успешно. Искате ли да повторите опита ?", "LoadCache": "Зареждане на кеш", "SaveCache": "Запазване на кеш", - "Loading": "Зареждане на", - "Processing": "Обработка на", - "Ready": "Готов", + "Downloading": "Изтегляне на", + "Processing": "Обработка", + "Ready": "Готовност", "Failed": "Неуспешно", "NoEpg": "Няма EPG", "EpgUrl": "Външен EPG", @@ -55,5 +55,7 @@ "Yes": "Да", "No": "Не", "EPGPreferYes": "Да: Първо търсите в EPG на IPTV доставчика. Използвайте външния EPG само когато той не успее.", - "EPGPreferNo": "Не: Търсете първо във външния EPG. Използвайте EPG на доставчика на IPTV само когато той не успее." + "EPGPreferNo": "Не: Търсете първо във външния EPG. Използвайте EPG на доставчика на IPTV само когато той не успее.", + "EPGUrlTip": "Въведете URL адреса на външния EPG, който трябва да завършва с \"xml\" или \"xml.gz\".", + "LibmpvTip": "Libmpv декодира и визуализира аудио и видео. активирайте актуализирането, за да получите последната версия, оптимизирана за вашия компютър." } \ No newline at end of file diff --git a/translations/english.json b/translations/english.json index dd4799b6..f8f92044 100644 --- a/translations/english.json +++ b/translations/english.json @@ -34,7 +34,7 @@ "UpgradeFailed": "%s upgrade failed. Do you want to retry ?", "LoadCache": "Loading cache", "SaveCache": "Saving cache", - "Loading": "Loading", + "Downloading": "Downloading", "Processing": "Processing", "Ready": "Ready", "Failed": "Failed", @@ -55,5 +55,7 @@ "Yes": "Yes", "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." + "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." } \ No newline at end of file diff --git a/translations/french.json b/translations/french.json index f26a32a9..43c2feea 100644 --- a/translations/french.json +++ b/translations/french.json @@ -34,7 +34,7 @@ "UpgradeFailed": "La mise à jour de %s a échoué. Voulez-vous réessayer ?", "LoadCache": "Chargement du cache", "SaveCache": "Sauvegarde du cache", - "Loading": "Chargement", + "Downloading": "Téléchargement", "Processing": "Traitement", "Ready": "Prêt", "Failed": "Échec", @@ -55,5 +55,7 @@ "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." + "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." } \ No newline at end of file diff --git a/translations/german.json b/translations/german.json index 6b5fe018..5bf9bb01 100644 --- a/translations/german.json +++ b/translations/german.json @@ -34,7 +34,7 @@ "UpgradeFailed": "%s Upgrade fehlgeschlagen. Möchten Sie es erneut versuchen?", "LoadCache": "Cache laden", "SaveCache": "Cache speichern", - "Loading": "Laden von", + "Downloading": "Herunterladen von", "Processing": "Verarbeiten", "Ready": "Bereit", "Failed": "Fehlgeschlagen", @@ -55,5 +55,7 @@ "Yes": "Ja", "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 dieser 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." } \ No newline at end of file diff --git a/translations/greek.json b/translations/greek.json index 0ec81ad9..81d9327c 100644 --- a/translations/greek.json +++ b/translations/greek.json @@ -34,7 +34,7 @@ "UpgradeFailed": "Η αναβάθμιση %s απέτυχε. Θέλετε να ξαναπροσπαθήσετε;", "LoadCache": "Φόρτωση προσωρινής μνήμης", "SaveCache": "Αποθήκευση προσωρινής μνήμης", - "Loading": "Φόρτωση", + "Downloading": "Λήψη", "Processing": "Επεξεργασία", "Ready": "Έτοιμο", "Failed": "Απέτυχε", @@ -55,5 +55,7 @@ "Yes": "Ναι", "No": "Όχι", "EPGPreferYes": "Ναι: Αναζητήστε πρώτα το EPG του παρόχου IPTV. Χρησιμοποιείτε το εξωτερικό EPG μόνο όταν αυτό αποτυγχάνει.", - "EPGPreferNo": "Όχι: Αναζητήστε πρώτα το εξωτερικό EPG. Χρησιμοποιήστε το EPG του παρόχου IPTV μόνο όταν αυτό αποτύχει." + "EPGPreferNo": "Όχι: Αναζητήστε πρώτα το εξωτερικό EPG. Χρησιμοποιήστε το EPG του παρόχου IPTV μόνο όταν αυτό αποτύχει.", + "EPGUrlTip": "Εισάγετε τη διεύθυνση URL του εξωτερικού EPG, θα πρέπει να καταλήγει σε 'xml' ή 'xml.gz'.", + "LibmpvTip": "Το Libmpv αποκωδικοποιεί & αποδίδει ήχο και βίντεο. ενεργοποιήστε την ενημέρωση για να λάβετε την τελευταία έκδοση βελτιστοποιημένη για τον υπολογιστή σας." } \ No newline at end of file diff --git a/translations/italian.json b/translations/italian.json index 690c6427..21b6af60 100644 --- a/translations/italian.json +++ b/translations/italian.json @@ -34,7 +34,7 @@ "UpgradeFailed": "L'aggiornamento %s non è riuscito. Si desidera riprovare?", "LoadCache": "Caricamento della cache", "SaveCache": "Salvataggio della cache", - "Loading": "Caricamento", + "Downloading": "Scaricare", "Processing": "Elaborazione", "Ready": "Pronto", "Failed": "Non riuscita", @@ -55,5 +55,7 @@ "Yes": "Si", "No": "No", "EPGPreferYes": "Sì: cercate 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." + "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." } \ No newline at end of file diff --git a/translations/loc/texts.py b/translations/loc/texts.py index a0dbdc28..92151f76 100644 --- a/translations/loc/texts.py +++ b/translations/loc/texts.py @@ -42,7 +42,7 @@ class Texts: UpgradeFailed: str = "%s upgrade failed. Do you want to retry ?" LoadCache: str = "Loading cache" SaveCache: str = "Saving cache" - Loading: str = "Loading" + Downloading: str = "Downloading" Processing: str = "Processing" Ready: str = "Ready" Failed: str = "Failed" @@ -66,6 +66,11 @@ 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'" + LibmpvTip: str = ( + "Libmpv decodes & renders audio and video." + "Enable the update to get the last version optimized for your computer." + ) def as_dict(self) -> dict[str, str]: return dataclasses.asdict(self) diff --git a/translations/polish.json b/translations/polish.json index 301360ff..715ca1c2 100644 --- a/translations/polish.json +++ b/translations/polish.json @@ -34,7 +34,7 @@ "UpgradeFailed": "Aktualizacja %s nie powiodła się. Czy chcesz ponowić próbę?", "LoadCache": "Ładowanie pamięci podręcznej", "SaveCache": "Zapisywanie pamięci podręcznej", - "Loading": "Ładowanie", + "Downloading": "Pobieranie", "Processing": "Przetwarzanie", "Ready": "Gotowe", "Failed": "Nie powiodło się", @@ -55,5 +55,7 @@ "Yes": "Tak", "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." + "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." } \ No newline at end of file diff --git a/translations/russian.json b/translations/russian.json index 1ef0fa80..7b79c217 100644 --- a/translations/russian.json +++ b/translations/russian.json @@ -34,7 +34,7 @@ "UpgradeFailed": "Обновление %s не удалось. Вы хотите повторить попытку?", "LoadCache": "Загрузка кэша", "SaveCache": "Сохранение кэша", - "Loading": "Загрузка", + "Downloading": "Загрузка", "Processing": "Обработка", "Ready": "Готовность", "Failed": "Не удалось", @@ -55,5 +55,7 @@ "Yes": "Да", "No": "Нет", "EPGPreferYes": "Да: Сначала ищите EPG провайдера IPTV. Используйте внешний EPG только в случае неудачи.", - "EPGPreferNo": "Нет: Поиск внешнего EPG первым. Используйте EPG провайдера IPTV только в случае неудачи." + "EPGPreferNo": "Нет: Поиск внешнего EPG первым. Используйте EPG провайдера IPTV только в случае неудачи.", + "EPGUrlTip": "Введите URL-адрес внешнего EPG, в итоге он должен содержать 'xml' или 'xml.gz'.", + "LibmpvTip": "Libmpv декодирует и рендерит аудио и видео. Включите обновление, чтобы получить последнюю версию, оптимизированную для вашего компьютера." } \ No newline at end of file diff --git a/translations/serbian.json b/translations/serbian.json index 7cfe7f38..c1b772aa 100644 --- a/translations/serbian.json +++ b/translations/serbian.json @@ -34,7 +34,7 @@ "UpgradeFailed": "%s надоградња није успела. Да ли желите да покушате поново?", "LoadCache": "Учитавање кеша", "SaveCache": "Чување кеша", - "Loading": "Лоадинг", + "Downloading": "Преузимање", "Processing": "Обрада", "Ready": "Спреман", "Failed": "Није успео", @@ -55,5 +55,7 @@ "Yes": "да", "No": "Не", "EPGPreferYes": "Да: Прво претражите ЕПГ ИПТВ провајдера. Користите екстерни ЕПГ само када не успе.", - "EPGPreferNo": "Не: прво претражите екстерни ЕПГ. Користите ЕПГ ИПТВ провајдера само када не успе." + "EPGPreferNo": "Не: прво претражите екстерни ЕПГ. Користите ЕПГ ИПТВ провајдера само када не успе.", + "EPGUrlTip": "Унесите УРЛ спољног ЕПГ-а, требало би да се заврши са 'кмл' или 'кмл.гз'", + "LibmpvTip": "Либмпв декодира и приказује аудио и видео. Омогућите ажурирање да бисте добили последњу верзију оптимизовану за ваш рачунар." } \ No newline at end of file diff --git a/translations/slovenian.json b/translations/slovenian.json index a01891d5..67120a09 100644 --- a/translations/slovenian.json +++ b/translations/slovenian.json @@ -34,7 +34,7 @@ "UpgradeFailed": "Nadgradnja različice %s ni uspela. Ali želite ponoviti poskus ?", "LoadCache": "Nalaganje predpomnilnika", "SaveCache": "Shranjevanje predpomnilnika", - "Loading": "Nalaganje predpomnilnika", + "Downloading": "Prenašanje spletne strani", "Processing": "Obdelava", "Ready": "Pripravljen", "Failed": "Neuspešno", @@ -55,5 +55,7 @@ "Yes": "Da", "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." + "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." } \ No newline at end of file diff --git a/translations/spanish.json b/translations/spanish.json index 9b461843..ba9d7a69 100644 --- a/translations/spanish.json +++ b/translations/spanish.json @@ -34,7 +34,7 @@ "UpgradeFailed": "La actualización de %s ha fallado. ¿Desea reintentarlo?", "LoadCache": "Cargando caché", "SaveCache": "Guardando caché", - "Loading": "Cargando", + "Downloading": "Descargando", "Processing": "Procesando", "Ready": "Listo", "Failed": "Fallo", @@ -55,5 +55,7 @@ "Yes": "Sí", "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. Utiliza la EPG del proveedor de IPTV sólo cuando falla." + "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." } \ No newline at end of file diff --git a/translations/turkish.json b/translations/turkish.json index 69e73c48..0c4a62f0 100644 --- a/translations/turkish.json +++ b/translations/turkish.json @@ -34,7 +34,7 @@ "UpgradeFailed": "%s yükseltmesi başarısız oldu. Yeniden denemek ister misiniz?", "LoadCache": "Önbellek yükleniyor", "SaveCache": "Önbelleği kaydetme", - "Loading": "Yükleniyor", + "Downloading": "İndirme", "Processing": "İşleme", "Ready": "Hazır", "Failed": "Başarısız", @@ -55,5 +55,7 @@ "Yes": "Evet", "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." + "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." } \ No newline at end of file