diff --git a/apps/web/src/assets/i18n/ar.json b/apps/web/src/assets/i18n/ar.json index 985a404b2..20aedac40 100644 --- a/apps/web/src/assets/i18n/ar.json +++ b/apps/web/src/assets/i18n/ar.json @@ -1048,6 +1048,14 @@ "TITLE": "التنزيلات", "DOWNLOAD": "تنزيل", "PLAY_LOCAL": "تشغيل محلي", + "DOWNLOAD_SEASON": "تنزيل الموسم ({{count}})", + "DOWNLOAD_SEASON_ARIA": "تنزيل الموسم، تتوفر {{count}} حلقات", + "ADDING_TO_QUEUE": "جارٍ الإضافة إلى قائمة الانتظار…", + "EPISODE_DOWNLOAD_ARIA": "تنزيل {{title}}", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} موجود بالفعل في قائمة انتظار التنزيل", + "EPISODE_DOWNLOAD_FAILED": "تعذّرت إضافة الحلقة إلى التنزيلات.", + "SEASON_QUEUE_RESULT": "تمت الإضافة: {{added}} · تم التخطي: {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "تمت الإضافة: {{added}} · تم التخطي: {{skipped}} · فشل: {{failed}}", "EMPTY": "لا توجد تنزيلات بعد", "EMPTY_HINT": "نزّل الأفلام والحلقات للمشاهدة دون اتصال", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/ary.json b/apps/web/src/assets/i18n/ary.json index 063ce9b93..727fddccc 100644 --- a/apps/web/src/assets/i18n/ary.json +++ b/apps/web/src/assets/i18n/ary.json @@ -1048,6 +1048,14 @@ "TITLE": "التحميلات", "DOWNLOAD": "تحميل", "PLAY_LOCAL": "شغل محلياً", + "DOWNLOAD_SEASON": "تحميل الموسم ({{count}})", + "DOWNLOAD_SEASON_ARIA": "تحميل الموسم، كاينين {{count}} حلقات متوفرين", + "ADDING_TO_QUEUE": "كيتزادو للطابور…", + "EPISODE_DOWNLOAD_ARIA": "تحميل {{title}}", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} راه ديجا فطابور التحميل", + "EPISODE_DOWNLOAD_FAILED": "ما قدرناش نزيدو الحلقة للتحميلات.", + "SEASON_QUEUE_RESULT": "تزادو {{added}} · تخطّاو {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "تزادو {{added}} · تخطّاو {{skipped}} · فشلو {{failed}}", "EMPTY": "مازال ما كاينش تحميلات", "EMPTY_HINT": "حمل أفلام وحلقات باش تشاف بدون أنترنت", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/by.json b/apps/web/src/assets/i18n/by.json index de8a54ec2..105e87309 100644 --- a/apps/web/src/assets/i18n/by.json +++ b/apps/web/src/assets/i18n/by.json @@ -1048,6 +1048,14 @@ "TITLE": "Спампаванні", "DOWNLOAD": "Спампаваць", "PLAY_LOCAL": "Прайграць лакальна", + "DOWNLOAD_SEASON": "Спампаваць сезон ({{count}})", + "DOWNLOAD_SEASON_ARIA": "Спампаваць сезон, даступна эпізодаў: {{count}}", + "ADDING_TO_QUEUE": "Дадаванне ў чаргу…", + "EPISODE_DOWNLOAD_ARIA": "Спампаваць {{title}}", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} ужо ў чарзе спампаванняў", + "EPISODE_DOWNLOAD_FAILED": "Не ўдалося дадаць эпізод да спампаванняў.", + "SEASON_QUEUE_RESULT": "Дададзена: {{added}} · Прапушчана: {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "Дададзена: {{added}} · Прапушчана: {{skipped}} · Памылак: {{failed}}", "EMPTY": "Пакуль няма спампаванняў", "EMPTY_HINT": "Спампоўвайце фільмы і эпізоды, каб глядзець іх без падключэння", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/de.json b/apps/web/src/assets/i18n/de.json index 79ba1139e..e62242692 100644 --- a/apps/web/src/assets/i18n/de.json +++ b/apps/web/src/assets/i18n/de.json @@ -1048,6 +1048,14 @@ "TITLE": "Downloads", "DOWNLOAD": "Herunterladen", "PLAY_LOCAL": "Lokal abspielen", + "DOWNLOAD_SEASON": "Staffel herunterladen ({{count}})", + "DOWNLOAD_SEASON_ARIA": "Staffel herunterladen, {{count}} Episoden verfügbar", + "ADDING_TO_QUEUE": "Wird zur Warteschlange hinzugefügt…", + "EPISODE_DOWNLOAD_ARIA": "{{title}} herunterladen", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} befindet sich bereits in der Download-Warteschlange", + "EPISODE_DOWNLOAD_FAILED": "Die Episode konnte nicht zu den Downloads hinzugefügt werden.", + "SEASON_QUEUE_RESULT": "Hinzugefügt {{added}} · Übersprungen {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "Hinzugefügt {{added}} · Übersprungen {{skipped}} · Fehlgeschlagen {{failed}}", "EMPTY": "Noch keine Downloads", "EMPTY_HINT": "Filme und Episoden zum Offline-Ansehen herunterladen", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/el.json b/apps/web/src/assets/i18n/el.json index 60460a449..be34d2704 100644 --- a/apps/web/src/assets/i18n/el.json +++ b/apps/web/src/assets/i18n/el.json @@ -1048,6 +1048,14 @@ "TITLE": "Λήψεις", "DOWNLOAD": "Λήψη", "PLAY_LOCAL": "Τοπική αναπαραγωγή", + "DOWNLOAD_SEASON": "Λήψη σεζόν ({{count}})", + "DOWNLOAD_SEASON_ARIA": "Λήψη σεζόν, {{count}} διαθέσιμα επεισόδια", + "ADDING_TO_QUEUE": "Προσθήκη στην ουρά…", + "EPISODE_DOWNLOAD_ARIA": "Λήψη {{title}}", + "EPISODE_DOWNLOAD_PENDING_ARIA": "Το {{title}} βρίσκεται ήδη στην ουρά λήψεων", + "EPISODE_DOWNLOAD_FAILED": "Δεν ήταν δυνατή η προσθήκη του επεισοδίου στις λήψεις.", + "SEASON_QUEUE_RESULT": "Προστέθηκαν {{added}} · Παραλείφθηκαν {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "Προστέθηκαν {{added}} · Παραλείφθηκαν {{skipped}} · Απέτυχαν {{failed}}", "EMPTY": "Δεν υπάρχουν ακόμα λήψεις", "EMPTY_HINT": "Κατεβάστε ταινίες και επεισόδια για παρακολούθηση εκτός σύνδεσης", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/en.json b/apps/web/src/assets/i18n/en.json index 7821ca2f8..e8c8f2284 100644 --- a/apps/web/src/assets/i18n/en.json +++ b/apps/web/src/assets/i18n/en.json @@ -1048,6 +1048,14 @@ "TITLE": "Downloads", "DOWNLOAD": "Download", "PLAY_LOCAL": "Play Local", + "DOWNLOAD_SEASON": "Download season ({{count}})", + "DOWNLOAD_SEASON_ARIA": "Download season, {{count}} episodes available", + "ADDING_TO_QUEUE": "Adding to queue…", + "EPISODE_DOWNLOAD_ARIA": "Download {{title}}", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} is already in the download queue", + "EPISODE_DOWNLOAD_FAILED": "The episode could not be added to downloads.", + "SEASON_QUEUE_RESULT": "Added {{added}} · Skipped {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "Added {{added}} · Skipped {{skipped}} · Failed {{failed}}", "EMPTY": "No downloads yet", "EMPTY_HINT": "Download movies and episodes to watch offline", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/es.json b/apps/web/src/assets/i18n/es.json index 1c678c123..7bd43f792 100644 --- a/apps/web/src/assets/i18n/es.json +++ b/apps/web/src/assets/i18n/es.json @@ -1048,6 +1048,14 @@ "TITLE": "Descargas", "DOWNLOAD": "Descargar", "PLAY_LOCAL": "Reproducir local", + "DOWNLOAD_SEASON": "Descargar temporada ({{count}})", + "DOWNLOAD_SEASON_ARIA": "Descargar temporada, {{count}} episodios disponibles", + "ADDING_TO_QUEUE": "Añadiendo a la cola…", + "EPISODE_DOWNLOAD_ARIA": "Descargar {{title}}", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} ya está en la cola de descargas", + "EPISODE_DOWNLOAD_FAILED": "No se pudo añadir el episodio a las descargas.", + "SEASON_QUEUE_RESULT": "Añadidos {{added}} · Omitidos {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "Añadidos {{added}} · Omitidos {{skipped}} · Fallidos {{failed}}", "EMPTY": "Sin descargas aún", "EMPTY_HINT": "Descarga películas y episodios para ver sin conexión", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/fr.json b/apps/web/src/assets/i18n/fr.json index 2806f61cd..bef4bf7e2 100644 --- a/apps/web/src/assets/i18n/fr.json +++ b/apps/web/src/assets/i18n/fr.json @@ -1048,6 +1048,14 @@ "TITLE": "Téléchargements", "DOWNLOAD": "Télécharger", "PLAY_LOCAL": "Lire local", + "DOWNLOAD_SEASON": "Télécharger la saison ({{count}})", + "DOWNLOAD_SEASON_ARIA": "Télécharger la saison, {{count}} épisodes disponibles", + "ADDING_TO_QUEUE": "Ajout à la file d’attente…", + "EPISODE_DOWNLOAD_ARIA": "Télécharger {{title}}", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} est déjà dans la file d’attente des téléchargements", + "EPISODE_DOWNLOAD_FAILED": "L’épisode n’a pas pu être ajouté aux téléchargements.", + "SEASON_QUEUE_RESULT": "Ajoutés {{added}} · Ignorés {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "Ajoutés {{added}} · Ignorés {{skipped}} · Échoués {{failed}}", "EMPTY": "Aucun téléchargement", "EMPTY_HINT": "Téléchargez des films et épisodes pour les regarder hors ligne", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/hu.json b/apps/web/src/assets/i18n/hu.json index 8800b87a5..bb9a6b994 100644 --- a/apps/web/src/assets/i18n/hu.json +++ b/apps/web/src/assets/i18n/hu.json @@ -1048,6 +1048,14 @@ "TITLE": "Letöltések", "DOWNLOAD": "Letöltés", "PLAY_LOCAL": "Helyi fájl lejátszása", + "DOWNLOAD_SEASON": "Évad letöltése ({{count}})", + "DOWNLOAD_SEASON_ARIA": "Évad letöltése, {{count}} epizód érhető el", + "ADDING_TO_QUEUE": "Hozzáadás a várólistához…", + "EPISODE_DOWNLOAD_ARIA": "{{title}} letöltése", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} már szerepel a letöltési várólistán", + "EPISODE_DOWNLOAD_FAILED": "Az epizódot nem sikerült hozzáadni a letöltésekhez.", + "SEASON_QUEUE_RESULT": "Hozzáadva: {{added}} · Kihagyva: {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "Hozzáadva: {{added}} · Kihagyva: {{skipped}} · Sikertelen: {{failed}}", "EMPTY": "Még nincs letöltés", "EMPTY_HINT": "Töltsön le filmeket és epizódokat offline megtekintéshez.", "NO_PLAYLISTS_TITLE": "A letöltéshez előbb adjon hozzá egy lejátszási listát", diff --git a/apps/web/src/assets/i18n/it.json b/apps/web/src/assets/i18n/it.json index 37e6aad3e..46772e971 100644 --- a/apps/web/src/assets/i18n/it.json +++ b/apps/web/src/assets/i18n/it.json @@ -1048,6 +1048,14 @@ "TITLE": "Download", "DOWNLOAD": "Scarica", "PLAY_LOCAL": "Riproduci locale", + "DOWNLOAD_SEASON": "Scarica la stagione ({{count}})", + "DOWNLOAD_SEASON_ARIA": "Scarica la stagione, {{count}} episodi disponibili", + "ADDING_TO_QUEUE": "Aggiunta alla coda…", + "EPISODE_DOWNLOAD_ARIA": "Scarica {{title}}", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} è già nella coda dei download", + "EPISODE_DOWNLOAD_FAILED": "Non è stato possibile aggiungere l'episodio ai download.", + "SEASON_QUEUE_RESULT": "Aggiunti {{added}} · Ignorati {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "Aggiunti {{added}} · Ignorati {{skipped}} · Non riusciti {{failed}}", "EMPTY": "Ancora nessun download", "EMPTY_HINT": "Scarica film ed episodi per guardarli offline", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/ja.json b/apps/web/src/assets/i18n/ja.json index ac99cd73b..7b0a72d43 100644 --- a/apps/web/src/assets/i18n/ja.json +++ b/apps/web/src/assets/i18n/ja.json @@ -1048,6 +1048,14 @@ "TITLE": "ダウンロード", "DOWNLOAD": "ダウンロード", "PLAY_LOCAL": "ローカル再生", + "DOWNLOAD_SEASON": "シーズンをダウンロード({{count}})", + "DOWNLOAD_SEASON_ARIA": "シーズンをダウンロード、ダウンロード可能なエピソードは{{count}}話です", + "ADDING_TO_QUEUE": "キューに追加中…", + "EPISODE_DOWNLOAD_ARIA": "{{title}}をダウンロード", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}}はすでにダウンロードキューに追加されています", + "EPISODE_DOWNLOAD_FAILED": "エピソードをダウンロード一覧に追加できませんでした。", + "SEASON_QUEUE_RESULT": "追加 {{added}} · スキップ {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "追加 {{added}} · スキップ {{skipped}} · 失敗 {{failed}}", "EMPTY": "ダウンロードはまだありません", "EMPTY_HINT": "映画やエピソードをダウンロードしてオフラインで視聴できます", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/ko.json b/apps/web/src/assets/i18n/ko.json index eb96e5988..167a63e40 100644 --- a/apps/web/src/assets/i18n/ko.json +++ b/apps/web/src/assets/i18n/ko.json @@ -1048,6 +1048,14 @@ "TITLE": "다운로드", "DOWNLOAD": "다운로드", "PLAY_LOCAL": "로컬 재생", + "DOWNLOAD_SEASON": "시즌 다운로드 ({{count}})", + "DOWNLOAD_SEASON_ARIA": "시즌 다운로드, 다운로드 가능한 에피소드 {{count}}개", + "ADDING_TO_QUEUE": "대기열에 추가 중…", + "EPISODE_DOWNLOAD_ARIA": "{{title}} 다운로드", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} 항목은 이미 다운로드 대기열에 있습니다", + "EPISODE_DOWNLOAD_FAILED": "에피소드를 다운로드 목록에 추가하지 못했습니다.", + "SEASON_QUEUE_RESULT": "추가 {{added}} · 건너뜀 {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "추가 {{added}} · 건너뜀 {{skipped}} · 실패 {{failed}}", "EMPTY": "아직 다운로드한 항목이 없습니다", "EMPTY_HINT": "오프라인 시청을 위해 영화와 에피소드를 다운로드하세요", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/nl.json b/apps/web/src/assets/i18n/nl.json index 304037f57..69a06d91f 100644 --- a/apps/web/src/assets/i18n/nl.json +++ b/apps/web/src/assets/i18n/nl.json @@ -1048,6 +1048,14 @@ "TITLE": "Downloads", "DOWNLOAD": "Downloaden", "PLAY_LOCAL": "Lokaal afspelen", + "DOWNLOAD_SEASON": "Seizoen downloaden ({{count}})", + "DOWNLOAD_SEASON_ARIA": "Seizoen downloaden, {{count}} afleveringen beschikbaar", + "ADDING_TO_QUEUE": "Toevoegen aan wachtrij…", + "EPISODE_DOWNLOAD_ARIA": "{{title}} downloaden", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} staat al in de downloadwachtrij", + "EPISODE_DOWNLOAD_FAILED": "De aflevering kon niet aan de downloads worden toegevoegd.", + "SEASON_QUEUE_RESULT": "Toegevoegd {{added}} · Overgeslagen {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "Toegevoegd {{added}} · Overgeslagen {{skipped}} · Mislukt {{failed}}", "EMPTY": "Nog geen downloads", "EMPTY_HINT": "Download films en afleveringen om offline te bekijken", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/pl.json b/apps/web/src/assets/i18n/pl.json index b12587b2d..9703c1cb7 100644 --- a/apps/web/src/assets/i18n/pl.json +++ b/apps/web/src/assets/i18n/pl.json @@ -1048,6 +1048,14 @@ "TITLE": "Pobrane", "DOWNLOAD": "Pobierz", "PLAY_LOCAL": "Odtwórz lokalnie", + "DOWNLOAD_SEASON": "Pobierz sezon ({{count}})", + "DOWNLOAD_SEASON_ARIA": "Pobierz sezon, dostępnych odcinków: {{count}}", + "ADDING_TO_QUEUE": "Dodawanie do kolejki…", + "EPISODE_DOWNLOAD_ARIA": "Pobierz {{title}}", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} jest już w kolejce pobierania", + "EPISODE_DOWNLOAD_FAILED": "Nie udało się dodać odcinka do pobrań.", + "SEASON_QUEUE_RESULT": "Dodano {{added}} · Pominięto {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "Dodano {{added}} · Pominięto {{skipped}} · Nieudane {{failed}}", "EMPTY": "Brak pobranych", "EMPTY_HINT": "Pobierz filmy i odcinki, aby oglądać offline", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/pt.json b/apps/web/src/assets/i18n/pt.json index 568d7c8d1..7403a4682 100644 --- a/apps/web/src/assets/i18n/pt.json +++ b/apps/web/src/assets/i18n/pt.json @@ -1048,6 +1048,14 @@ "TITLE": "Downloads", "DOWNLOAD": "Baixar", "PLAY_LOCAL": "Reproduzir local", + "DOWNLOAD_SEASON": "Baixar temporada ({{count}})", + "DOWNLOAD_SEASON_ARIA": "Baixar temporada, {{count}} episódios disponíveis", + "ADDING_TO_QUEUE": "Adicionando à fila…", + "EPISODE_DOWNLOAD_ARIA": "Baixar {{title}}", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} já está na fila de downloads", + "EPISODE_DOWNLOAD_FAILED": "Não foi possível adicionar o episódio aos downloads.", + "SEASON_QUEUE_RESULT": "Adicionados {{added}} · Ignorados {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "Adicionados {{added}} · Ignorados {{skipped}} · Falhas {{failed}}", "EMPTY": "Nenhum download ainda", "EMPTY_HINT": "Baixe filmes e episódios para assistir offline", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/ru.json b/apps/web/src/assets/i18n/ru.json index 7d7d470a5..1b730fc33 100644 --- a/apps/web/src/assets/i18n/ru.json +++ b/apps/web/src/assets/i18n/ru.json @@ -1048,6 +1048,14 @@ "TITLE": "Загрузки", "DOWNLOAD": "Скачать", "PLAY_LOCAL": "Воспроизвести локально", + "DOWNLOAD_SEASON": "Скачать сезон ({{count}})", + "DOWNLOAD_SEASON_ARIA": "Скачать сезон, доступно эпизодов: {{count}}", + "ADDING_TO_QUEUE": "Добавление в очередь…", + "EPISODE_DOWNLOAD_ARIA": "Скачать {{title}}", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} уже в очереди загрузок", + "EPISODE_DOWNLOAD_FAILED": "Не удалось добавить эпизод в загрузки.", + "SEASON_QUEUE_RESULT": "Добавлено: {{added}} · Пропущено: {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "Добавлено: {{added}} · Пропущено: {{skipped}} · Ошибок: {{failed}}", "EMPTY": "Пока нет загрузок", "EMPTY_HINT": "Скачивайте фильмы и эпизоды для просмотра офлайн", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/tr.json b/apps/web/src/assets/i18n/tr.json index 41defae57..02766c70d 100644 --- a/apps/web/src/assets/i18n/tr.json +++ b/apps/web/src/assets/i18n/tr.json @@ -1048,6 +1048,14 @@ "TITLE": "İndirilenler", "DOWNLOAD": "İndir", "PLAY_LOCAL": "Yerel Oynat", + "DOWNLOAD_SEASON": "Sezonu indir ({{count}})", + "DOWNLOAD_SEASON_ARIA": "Sezonu indir, indirilebilir {{count}} bölüm var", + "ADDING_TO_QUEUE": "Sıraya ekleniyor…", + "EPISODE_DOWNLOAD_ARIA": "{{title}} indir", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} zaten indirme kuyruğunda", + "EPISODE_DOWNLOAD_FAILED": "Bölüm indirilenlere eklenemedi.", + "SEASON_QUEUE_RESULT": "Eklendi {{added}} · Atlandı {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "Eklendi {{added}} · Atlandı {{skipped}} · Başarısız {{failed}}", "EMPTY": "Henüz indirme yok", "EMPTY_HINT": "Çevrimdışı izlemek için film ve dizileri indirin", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/zh.json b/apps/web/src/assets/i18n/zh.json index 1734eb2ec..ee147be59 100644 --- a/apps/web/src/assets/i18n/zh.json +++ b/apps/web/src/assets/i18n/zh.json @@ -1048,6 +1048,14 @@ "TITLE": "下载", "DOWNLOAD": "下载", "PLAY_LOCAL": "播放本地", + "DOWNLOAD_SEASON": "下载整季({{count}})", + "DOWNLOAD_SEASON_ARIA": "下载整季,有 {{count}} 集可用", + "ADDING_TO_QUEUE": "正在添加到队列…", + "EPISODE_DOWNLOAD_ARIA": "下载 {{title}}", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} 已在下载队列中", + "EPISODE_DOWNLOAD_FAILED": "无法添加该剧集的下载任务。", + "SEASON_QUEUE_RESULT": "已添加 {{added}} · 已跳过 {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "已添加 {{added}} · 已跳过 {{skipped}} · 失败 {{failed}}", "EMPTY": "暂无下载", "EMPTY_HINT": "下载电影和剧集以离线观看", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/apps/web/src/assets/i18n/zhtw.json b/apps/web/src/assets/i18n/zhtw.json index ac83eed93..6bd94458f 100644 --- a/apps/web/src/assets/i18n/zhtw.json +++ b/apps/web/src/assets/i18n/zhtw.json @@ -1048,6 +1048,14 @@ "TITLE": "下載", "DOWNLOAD": "下載", "PLAY_LOCAL": "播放本機檔案", + "DOWNLOAD_SEASON": "下載整季({{count}})", + "DOWNLOAD_SEASON_ARIA": "下載整季,有 {{count}} 集可用", + "ADDING_TO_QUEUE": "正在加入佇列…", + "EPISODE_DOWNLOAD_ARIA": "下載 {{title}}", + "EPISODE_DOWNLOAD_PENDING_ARIA": "{{title}} 已在下載佇列中", + "EPISODE_DOWNLOAD_FAILED": "無法加入此集的下載項目。", + "SEASON_QUEUE_RESULT": "已加入 {{added}} · 已略過 {{skipped}}", + "SEASON_QUEUE_RESULT_WITH_FAILURES": "已加入 {{added}} · 已略過 {{skipped}} · 失敗 {{failed}}", "EMPTY": "尚無下載項目", "EMPTY_HINT": "下載電影與集數以離線觀看", "NO_PLAYLISTS_TITLE": "Add a playlist to start downloading", diff --git a/libs/ui/components/src/lib/season-container/season-container.component.spec.ts b/libs/ui/components/src/lib/season-container/season-container.component.spec.ts index 0a70c6b46..332b5ad0d 100644 --- a/libs/ui/components/src/lib/season-container/season-container.component.spec.ts +++ b/libs/ui/components/src/lib/season-container/season-container.component.spec.ts @@ -3,7 +3,11 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MatDialog } from '@angular/material/dialog'; import { MatSnackBar } from '@angular/material/snack-bar'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { TranslateModule, TranslateService } from '@ngx-translate/core'; +import { + type InterpolatableTranslationObject, + TranslateModule, + TranslateService, +} from '@ngx-translate/core'; import { SeasonDownloadCoordinator, type EpisodeDownloadCandidate, @@ -15,6 +19,8 @@ import { type DownloadItem, type DownloadStartInput, } from '@iptvnator/services'; +import { readFileSync } from 'node:fs'; +import { resolve } from 'node:path'; import { of } from 'rxjs'; import { EPISODE_INFO_PLAY } from './episode-info-dialog.component'; import { SeasonContainerComponent } from './season-container.component'; @@ -42,25 +48,15 @@ interface Deferred { readonly resolve: (value: T) => void; } +const EN_TRANSLATIONS = JSON.parse( + readFileSync( + resolve(process.cwd(), 'apps/web/src/assets/i18n/en.json'), + 'utf8' + ) +) as InterpolatableTranslationObject; + const DOWNLOAD_TRANSLATIONS = { - DOWNLOADS: { - DOWNLOAD: 'Download', - PLAY_LOCAL: 'Play local', - RESUME: 'Resume', - NOT_AVAILABLE: 'Downloads not available', - DOWNLOAD_SEASON: 'Download season ({{count}})', - DOWNLOAD_SEASON_ARIA: 'Download {{count}} eligible episodes', - ADDING_TO_QUEUE: 'Adding to queue', - EPISODE_DOWNLOAD_ARIA: 'Download {{title}}', - EPISODE_DOWNLOAD_PENDING_ARIA: 'Adding {{title}} to queue', - EPISODE_DOWNLOAD_FAILED: 'The episode could not be added', - SEASON_QUEUE_RESULT: - 'Added {{added}}, skipped {{skipped}}, failed {{failed}}', - SEASON_QUEUE_RESULT_WITH_FAILURES: - 'Queue failed: {{added}} added, {{skipped}} skipped, {{failed}} failed', - STATUS: { DOWNLOADING: 'Downloading' }, - ARIA: { RESUME: 'Resume {{title}}' }, - }, + DOWNLOADS: EN_TRANSLATIONS['DOWNLOADS'], }; function createEpisode( @@ -564,7 +560,7 @@ describe('SeasonContainerComponent', () => { expect(episodeAction(101).disabled).toBe(true); expect(episodeAction(101).getAttribute('aria-label')).toBe( - 'Adding Pilot to queue' + 'Pilot is already in the download queue' ); expect(episodeAction(102).disabled).toBe(false); expect(episodeAction(102).getAttribute('aria-label')).toBe( @@ -598,7 +594,7 @@ describe('SeasonContainerComponent', () => { ) as HTMLButtonElement; expect(button.textContent).toContain('Download season (1)'); expect(button.getAttribute('aria-label')).toBe( - 'Download 1 eligible episodes' + 'Download season, 1 episodes available' ); expect(button.nextElementSibling?.classList).toContain('view-toggle'); @@ -607,7 +603,7 @@ describe('SeasonContainerComponent', () => { expect(downloadsServiceStub.startDownload).toHaveBeenCalledTimes(1); expect(snackBarOpen).toHaveBeenCalledWith( - 'Added 1, skipped 1, failed 0', + 'Added 1 · Skipped 1', undefined, { duration: 5000 } ); @@ -671,9 +667,9 @@ describe('SeasonContainerComponent', () => { seasonButton().click(); fixture.detectChanges(); - expect(seasonButton().textContent).toContain('Adding to queue'); + expect(seasonButton().textContent).toContain('Adding to queue…'); expect(seasonButton().getAttribute('aria-label')).toBe( - 'Adding to queue' + 'Adding to queue…' ); expect(seasonButton().getAttribute('aria-busy')).toBe('true'); @@ -689,7 +685,7 @@ describe('SeasonContainerComponent', () => { expect(seasonButton().hasAttribute('aria-busy')).toBe(false); expect(seasonButton().textContent).toContain('Download season (1)'); expect(seasonButton().getAttribute('aria-label')).toBe( - 'Download 1 eligible episodes' + 'Download season, 1 episodes available' ); }); @@ -786,11 +782,26 @@ describe('SeasonContainerComponent', () => { fixture.detectChanges(); const expected = [ - [101, true, 'Adding Pilot to queue', 'downloading'], - [102, true, 'Adding Queued to queue', 'downloading'], - [103, true, 'Adding Active to queue', 'downloading'], + [ + 101, + true, + 'Pilot is already in the download queue', + 'downloading', + ], + [ + 102, + true, + 'Queued is already in the download queue', + 'downloading', + ], + [ + 103, + true, + 'Active is already in the download queue', + 'downloading', + ], [104, false, 'Resume Paused', 'play_arrow'], - [105, false, 'Play local: Local', 'folder_open'], + [105, false, 'Play Local: Local', 'folder_open'], [106, true, 'Download Unknown', 'block'], [107, true, 'Download N/A', 'block'], [108, false, 'Download Failed', 'download'], @@ -936,7 +947,7 @@ describe('SeasonContainerComponent', () => { await fixture.whenStable(); expect(snackBarOpen).toHaveBeenCalledWith( - 'The episode could not be added', + 'The episode could not be added to downloads.', undefined, { duration: 5000 } ); @@ -1036,7 +1047,7 @@ describe('SeasonContainerComponent', () => { await fixture.whenStable(); expect(snackBarOpen).toHaveBeenCalledWith( - 'Queue failed: 1 added, 0 skipped, 1 failed', + 'Added 1 · Skipped 0 · Failed 1', undefined, { duration: 5000 } );