From 881a130ab10c28e19624602abb9fab82bba1b237 Mon Sep 17 00:00:00 2001
From: Aayush Gupta
Date: Mon, 20 Jul 2026 15:08:35 +0800
Subject: [PATCH 001/155] 0.29.0
Signed-off-by: Aayush Gupta
---
buildSrc/src/main/kotlin/ProjectConfig.kt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/buildSrc/src/main/kotlin/ProjectConfig.kt b/buildSrc/src/main/kotlin/ProjectConfig.kt
index 5d2489d39..8f4c4c709 100644
--- a/buildSrc/src/main/kotlin/ProjectConfig.kt
+++ b/buildSrc/src/main/kotlin/ProjectConfig.kt
@@ -8,8 +8,8 @@ const val NEWPIPE_VERSION_SDK_COMPILE_MINOR = 0
const val NEWPIPE_VERSION_SDK_MIN = 23
const val NEWPIPE_VERSION_SDK_TARGET = 35
-const val NEWPIPE_VERSION_CODE = 1013
-const val NEWPIPE_VERSION_NAME = "0.28.8"
+const val NEWPIPE_VERSION_CODE = 1014
+const val NEWPIPE_VERSION_NAME = "0.29.0"
const val NEWPIPE_APPLICATION_ID_OLD = "org.schabi.newpipe"
const val NEWPIPE_APPLICATION_ID_NEW = "net.newpipe.app"
From dcb7f1ced25963b9d7668bf52bfaea5e7c2ebc1d Mon Sep 17 00:00:00 2001
From: Hosted Weblate
Date: Sat, 25 Jul 2026 10:03:37 +0200
Subject: [PATCH 002/155] Translated using Weblate (Portuguese (Portugal))
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 100.0% (38 of 38 strings)
Translated using Weblate (French)
Currently translated at 100.0% (38 of 38 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (38 of 38 strings)
Translated using Weblate (French)
Currently translated at 97.3% (37 of 38 strings)
Translated using Weblate (Arabic)
Currently translated at 94.7% (36 of 38 strings)
Translated using Weblate (Icelandic)
Currently translated at 100.0% (38 of 38 strings)
Translated using Weblate (Icelandic)
Currently translated at 100.0% (38 of 38 strings)
Translated using Weblate (Japanese)
Currently translated at 100.0% (38 of 38 strings)
Translated using Weblate (Swedish)
Currently translated at 73.6% (28 of 38 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (38 of 38 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (38 of 38 strings)
Translated using Weblate (German)
Currently translated at 100.0% (38 of 38 strings)
Co-authored-by: Aster
Co-authored-by: Dot Max
Co-authored-by: Dvuevi
Co-authored-by: Hosted Weblate
Co-authored-by: MS-PC
Co-authored-by: Mazen Mohamed
Co-authored-by: Mickaël Binos
Co-authored-by: Mona Lisa
Co-authored-by: Sveinn í Felli
Co-authored-by: VfBFan
Co-authored-by: ssantos
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/ar/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/de/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/es/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/fr/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/id/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/is/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/ja/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/pt/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/pt_PT/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/sv/
Translation: NewPipe/compose
---
.../composeResources/values-ar/strings.xml | 9 +++++
.../composeResources/values-de/strings.xml | 8 ++--
.../composeResources/values-es/strings.xml | 14 +++----
.../composeResources/values-fr/strings.xml | 11 +++++
.../composeResources/values-in/strings.xml | 11 +++++
.../composeResources/values-is/strings.xml | 37 +++++++++++++++++
.../composeResources/values-ja/strings.xml | 40 ++++++++++++++++++-
.../values-pt-rPT/strings.xml | 40 ++++++++++++++++++-
.../composeResources/values-pt/strings.xml | 40 ++++++++++++++++++-
.../composeResources/values-sv/strings.xml | 13 +++---
10 files changed, 203 insertions(+), 20 deletions(-)
diff --git a/shared/src/commonMain/composeResources/values-ar/strings.xml b/shared/src/commonMain/composeResources/values-ar/strings.xml
index 451291930..850da900a 100644
--- a/shared/src/commonMain/composeResources/values-ar/strings.xml
+++ b/shared/src/commonMain/composeResources/values-ar/strings.xml
@@ -27,4 +27,13 @@
فتح في المتصفح
تم
غير متاح
+ الإعدادات
+ بحث
+ المحتوى
+ الإشعارات
+ الفيديو والصوت
+ تنزيل
+ المظهر
+ التحديثات
+ النسخ الاحتياطي والاستعادة
diff --git a/shared/src/commonMain/composeResources/values-de/strings.xml b/shared/src/commonMain/composeResources/values-de/strings.xml
index 6e7886987..d3007cb0c 100644
--- a/shared/src/commonMain/composeResources/values-de/strings.xml
+++ b/shared/src/commonMain/composeResources/values-de/strings.xml
@@ -16,13 +16,13 @@
Freies und schlankes Streaming für Android.
Beitragen
Ob Ideen, Übersetzungen, Design-Änderungen, Code-Aufräumen oder richtig große Code-Änderungen — Hilfe ist immer willkommen. Je mehr geholfen wird, desto besser wird NewPipe!
- NewPipe wird von Freiwilligen entwickelt, die ihre Freizeit dafür verwenden, dir die beste Nutzererfahrung zu bieten. Gib etwas zurück, indem du den Entwicklern hilfst, NewPipe noch weiter zu verbessern, während sie sich an einer Tasse Kaffee erfreuen.
+ NewPipe wird von Freiwilligen entwickelt, die ihre Freizeit dafür verwenden, dir die beste Nutzungserfahrung zu bieten. Gib etwas zurück, indem du den Entwicklern hilfst, NewPipe noch weiter zu verbessern, während sie sich an einer Tasse Kaffee erfreuen.
Zurückgeben
Website
Besuche die NewPipe-Website für weitere Informationen und Neuigkeiten.
- NewPipes Datenschutzbestimmung
- Dem NewPipe-Projekt ist Datenschutz sehr wichtig. Deshalb sammelt diese App keine Daten ohne deine Zustimmung.\nNewPipes Datenschutzbestimmungen erklären im Detail, welche Daten beim Absenden eines Absturzberichtes verschickt und gespeichert werden.
- Datenschutzbestimmungen lesen
+ NewPipes Datenschutzerklärung
+ Dem NewPipe-Projekt ist Datenschutz sehr wichtig. Deshalb sammelt diese App keine Daten ohne deine Zustimmung.\nNewPipes Datenschutzerklärung erklären im Detail, welche Daten beim Absenden eines Absturzberichtes verschickt und gespeichert werden.
+ Datenschutzerklärung lesen
NewPipes Lizenz
NewPipe ist freie Copyleft-Software: Du kannst sie nach Belieben benutzen, untersuchen, mit anderen teilen und verbessern. Insbesondere kannst du sie unter den von der Free Software Foundation veröffentlichten Bedingungen der GNU General Public License, in der Version 3 der Lizenz oder (nach deiner Wahl) jeder späteren Version, weitergeben und/oder verändern.
Wenn du Probleme bei der Verwendung der App hast, lies bitte die Antworten auf häufig gestellte Fragen!
diff --git a/shared/src/commonMain/composeResources/values-es/strings.xml b/shared/src/commonMain/composeResources/values-es/strings.xml
index cadde6cf6..66de23005 100644
--- a/shared/src/commonMain/composeResources/values-es/strings.xml
+++ b/shared/src/commonMain/composeResources/values-es/strings.xml
@@ -11,18 +11,18 @@
Tanto si tiene ideas de traducción, cambios de diseño, limpieza de código o modificaciones profundas en el código, la ayuda siempre es bienvenida. ¡Cuanto más se haga, mejor se vuelve!
Ver en GitHub
Donar
- NewPipe es desarrollado por voluntarios que dedican su tiempo libre a ofrecerle la mejor experiencia de usuario. Colabore para ayudar a los desarrolladores a hacer que NewPipe sea aún mejor mientras disfrutan de una taza de café.
+ NewPipe es desarrollado por voluntarios que dedican su tiempo libre a ofrecerle la mejor experiencia de usuario. Puedes hacer una donación para ayudar a los desarrolladores y hacer que NewPipe sea aún mejor mientras disfrutan de una taza de café.
Colaborar
Sito web
Visita el nuevo sitio web de NewPipe para más detalles y noticias.
Política de privacidad de NewPipe
- El proyecto NewPipe toma su privacidad muy en serio. Por ello, la aplicación no recopila ningún dato sin su consentimiento. \nLa política de privacidad de NewPipe explica en detalle qué datos se envían y almacenan al enviar un informe de fallo.
- Leer la política de privacidad
+ El proyecto NewPipe se toma muy en serio tu privacidad. Por ello, la aplicación no recopila ningún dato sin tu consentimiento. \nLa política de privacidad de NewPipe explica en detalle qué datos se envían y almacenan al enviar un informe de fallo.
+ Leer política de privacidad
Licencia de NewPipe
- NewPipe es software libre con copyleft: puede usarlo, estudiarlo, compartirlo y mejorarlo a su antojo. Específicamente, puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia o (a su elección) cualquier versión posterior.
- Leer la licencia
+ NewPipe es software libre con copyleft: puedes usarlo, estudiarlo, compartirlo y mejorarlo a voluntad. Específicamente, puedes redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU publicada por la Free Software Foundation, ya sea la versión 3 de la licencia o (a tu elección) cualquier versión posterior.
+ Leer licencia
Preguntas frecuentes
- Si tiene problemas al usar la aplicación, ¡asegúrese de consultar estas respuestas a las preguntas comunes!
+ Si tienes problemas al usar la aplicación, ¡Asegúrate de verificar estas respuestas a preguntas comunes!
Ver en el sitio web
Abrir en el navegador
Listo
@@ -31,7 +31,7 @@
Buscar
Contenido
Notificaciones
- Video y audio
+ Vídeo y audio
Descargar
Apariencia
Historial y caché
diff --git a/shared/src/commonMain/composeResources/values-fr/strings.xml b/shared/src/commonMain/composeResources/values-fr/strings.xml
index bf9dc2ea7..3e1b7a49a 100644
--- a/shared/src/commonMain/composeResources/values-fr/strings.xml
+++ b/shared/src/commonMain/composeResources/values-fr/strings.xml
@@ -27,4 +27,15 @@
Ouvrir dans le navigateur
Terminé
Indisponible
+ Paramètres
+ Chercher
+ Contenu
+ Notifications
+ Vidéo et audio
+ Téléchargement
+ Apparence
+ Historique et cache
+ Mises à jour
+ Sauvegarde et restauration
+ Corriger
diff --git a/shared/src/commonMain/composeResources/values-in/strings.xml b/shared/src/commonMain/composeResources/values-in/strings.xml
index 555d69b59..540f47b22 100644
--- a/shared/src/commonMain/composeResources/values-in/strings.xml
+++ b/shared/src/commonMain/composeResources/values-in/strings.xml
@@ -27,4 +27,15 @@
Baca lisensi
Jika Anda mengalami kesulitan menggunakan aplikasi, pastikan untuk memeriksa jawaban atas pertanyaan umum ini!
Aplikasi ini adalah perangkat lunak bebas copyleft: Anda dapat menggunakan, mempelajari, membagikan, dan memperbaikinya sesuka hati. Secara khusus, Anda dapat mendistribusikan dan/atau memodifikasinya berdasarkan ketentuan Lisensi Publik Umum GNU sebagaimana diterbitkan oleh Free Software Foundation, baik versi 3 dari Lisensi, atau (sesuai pilihan Anda) versi apapun yang lebih baru.
+ Pengaturan
+ Telusur
+ Konten
+ Notifikasi
+ Audio dan Video
+ Unduh
+ Penampilan
+ Riwayat & Cache
+ Pembaruan
+ Cadangkan dan Pulihkan
+ Debug
diff --git a/shared/src/commonMain/composeResources/values-is/strings.xml b/shared/src/commonMain/composeResources/values-is/strings.xml
index 8bffc4d23..1bf574be0 100644
--- a/shared/src/commonMain/composeResources/values-is/strings.xml
+++ b/shared/src/commonMain/composeResources/values-is/strings.xml
@@ -1,4 +1,41 @@
Frjáls og léttur streymisspilari fyrir Android.
+ Til baka
+ Um NewPipe
+ Um okkur & algengar spurningar
+ Vefsíða
+ NewPipe verkefnið tekur friðhelgi þína mjög alvarlega. Þess vegna safnar forritið engu án samþykkis þíns. \n\nPersónuverndarstefna NewPipe útskýrir í smáatriðum hvaða gögn eru send og geymd þegar þú sendir hrunskýrslu.
+ Notkunarleyfi utanaðkomandi aðila
+ Frá %1$s með %2$s
+ Hugbúnaðarleyfi
+ Taka þátt
+ Allt er velkomið — hugmyndir, þýðingar, endurhönnun, kóðahreinsun eða miklar kóðabreytingar. Því fleiri, því betra!
+ Skoða á GitHub
+ Styrkja
+ NewPipe er þróað af sjálfboðaliðum sem eyða frítíma sínum í að færa þér bestu notendaupplifunina. Gefðu til baka til að hjálpa forriturum að gera NewPipe enn betri á meðan þeir njóta kaffibolla.
+ Gefa til baka
+ Fyrir frekari upplýsingar og nýjustu fréttir um NewPipe geturðu skoðað heimasíðu okkar.
+ Persónuverndarstefna NewPipe
+ Lesa persónuverndarstefnu
+ Hugbúnaðarleyfi NewPipe
+ NewPipe er „copyleft“ frjáls hugbúnaður: Þú getur notað, rannsakað, deilt og bætt honum að vild. Þú getur endurdreift og breytt því samkvæmt skilmálum GNU GPL notendaleyfi eins og það er gefið út af Frjálsa Hugbúnaðarstofnuninni, annað hvort útgáfu 3 af leyfinu, eða (að eigin vali) hvaða síðari útgáfu sem er.
+ Lesa notkunarleyfi
+ Algengar spurningar
+ Ef þú átt í vandræðum með að nota forritið vertu viss um að skoða þessi svör við algengum spurningum!
+ Skoða á vefsíðu
+ Opna í vafra
+ Lokið
+ Ekki tiltækt
+ Stillingar
+ Leita
+ Efni
+ Tilkynningar
+ Mynd og hljóð
+ Niðurhal
+ Útlit
+ Ferill og skyndiminni
+ Uppfærslur
+ Öryggisafrita og endurheimta
+ Villuleit
diff --git a/shared/src/commonMain/composeResources/values-ja/strings.xml b/shared/src/commonMain/composeResources/values-ja/strings.xml
index 55344e519..307ca8fd5 100644
--- a/shared/src/commonMain/composeResources/values-ja/strings.xml
+++ b/shared/src/commonMain/composeResources/values-ja/strings.xml
@@ -1,3 +1,41 @@
-
\ No newline at end of file
+ 戻る
+ NewPipeについて
+ サードパーティライセンス
+ %1$s作、%2$sライセンス
+ 概要とよくある質問
+ ライセンス
+ Android向けの自由で軽量なストリーミングアプリ。
+ 貢献する
+ 翻訳、デザインの変更、コードの整理、大規模なコード変更など、どんな形の協力もいつでも歓迎します。手を加えるほど、より良いものになります!
+ GitHubで見る
+ 寄付する
+ NewPipeは、最高のユーザー体験を届けるために、ボランティアが自由時間を使って開発しています。開発者がコーヒーを楽しみながらNewPipeをさらに良くできるよう、ぜひ支援してください。
+ 支援する
+ ウェブサイト
+ 詳しい情報や最新ニュースについては、NewPipeのウェブサイトをご覧ください。
+ NewPipeのプライバシーポリシー
+ NewPipeプロジェクトは、ユーザーのプライバシーを非常に重視しています。そのため、このアプリがユーザーの同意なくデータを収集することはありません。\nNewPipeのプライバシーポリシーでは、クラッシュレポートを送信した際に、どのようなデータが送信および保存されるかを詳しく説明しています。
+ プライバシーポリシーを読む
+ NewPipeのライセンス
+ NewPipeは、コピーレフトの自由ソフトウェアです。自由に使用、研究、共有、改良できます。具体的には、フリーソフトウェア財団が公開しているGNU General Public Licenseのバージョン3、またはそれ以降の任意のバージョンの条件に従って、再配布や改変を行えます。
+ ライセンスを読む
+ よくある質問
+ アプリの使用中に問題が発生した場合は、よくある質問への回答をご確認ください!
+ ウェブサイトで見る
+ ブラウザで開く
+ 閉じる
+ 利用できません
+ 設定
+ 検索
+ コンテンツ
+ 通知
+ 動画と音声
+ ダウンロード
+ 外観
+ 履歴とキャッシュ
+ 更新
+ バックアップと復元
+ デバッグ
+
diff --git a/shared/src/commonMain/composeResources/values-pt-rPT/strings.xml b/shared/src/commonMain/composeResources/values-pt-rPT/strings.xml
index 55344e519..5a0e18a71 100644
--- a/shared/src/commonMain/composeResources/values-pt-rPT/strings.xml
+++ b/shared/src/commonMain/composeResources/values-pt-rPT/strings.xml
@@ -1,3 +1,41 @@
-
\ No newline at end of file
+ Voltar
+ Sobre o NewPipe
+ Licenças de terceiros
+ Por %1$s sob %2$s
+ Sobre & Perguntas Frequentes
+ Licenças
+ Streaming livre e gratuito no Android.
+ Contribuir
+ Caso tenha ideias; tradução, alterações de design, limpeza de código ou alterações realmente pesadas de código, a ajuda é sempre bem-vinda. Quanto mais for feito, melhor será!
+ Ver no GitHub
+ Doar
+ O NewPipe é desenvolvido por voluntários que passam o seu tempo livre a trazer-lhe a melhor experiência de utilizador. Retribua para ajudar os programadores a fazer o NewPipe ainda melhor enquanto tomam uma chávena de café.
+ Retribuir
+ Site
+ Visite o site do NewPipe para mais informações e novidades.
+ Política de Privacidade do NewPipe
+ O projeto NewPipe leva a sua privacidade muito a sério. Portanto, a app não coleta nenhum dado sem o seu consentimento.\nA política de privacidade do NewPipe explica detalhadamente quais dados são enviados e armazenados ao enviar um relatório de erro.
+ Leia a política de privacidade
+ Licença do NewPipe
+ NewPipe é um software copyleft libre: pode usá-lo, estudá-lo, partilhá-lo e melhorá-lo à vontade. Especificamente, pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU conforme publicada pela Free Software Foundation, seja a versão 3 da Licença ou (ao seu critério) qualquer versão posterior.
+ Ler licença
+ Perguntas frequentes
+ Se tem problemas a usar a app, verifique estas respostas para perguntas comuns!
+ Ver no site
+ Abrir no navegador
+ Concluído
+ Não disponível
+ Configurações
+ Pesquisar
+ Conteúdo
+ Notificações
+ Vídeo e áudio
+ Descarregar
+ Aparência
+ Histórico e cache
+ Atualizações
+ Backup e restauração
+ Depuração
+
diff --git a/shared/src/commonMain/composeResources/values-pt/strings.xml b/shared/src/commonMain/composeResources/values-pt/strings.xml
index 55344e519..5a0e18a71 100644
--- a/shared/src/commonMain/composeResources/values-pt/strings.xml
+++ b/shared/src/commonMain/composeResources/values-pt/strings.xml
@@ -1,3 +1,41 @@
-
\ No newline at end of file
+ Voltar
+ Sobre o NewPipe
+ Licenças de terceiros
+ Por %1$s sob %2$s
+ Sobre & Perguntas Frequentes
+ Licenças
+ Streaming livre e gratuito no Android.
+ Contribuir
+ Caso tenha ideias; tradução, alterações de design, limpeza de código ou alterações realmente pesadas de código, a ajuda é sempre bem-vinda. Quanto mais for feito, melhor será!
+ Ver no GitHub
+ Doar
+ O NewPipe é desenvolvido por voluntários que passam o seu tempo livre a trazer-lhe a melhor experiência de utilizador. Retribua para ajudar os programadores a fazer o NewPipe ainda melhor enquanto tomam uma chávena de café.
+ Retribuir
+ Site
+ Visite o site do NewPipe para mais informações e novidades.
+ Política de Privacidade do NewPipe
+ O projeto NewPipe leva a sua privacidade muito a sério. Portanto, a app não coleta nenhum dado sem o seu consentimento.\nA política de privacidade do NewPipe explica detalhadamente quais dados são enviados e armazenados ao enviar um relatório de erro.
+ Leia a política de privacidade
+ Licença do NewPipe
+ NewPipe é um software copyleft libre: pode usá-lo, estudá-lo, partilhá-lo e melhorá-lo à vontade. Especificamente, pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU conforme publicada pela Free Software Foundation, seja a versão 3 da Licença ou (ao seu critério) qualquer versão posterior.
+ Ler licença
+ Perguntas frequentes
+ Se tem problemas a usar a app, verifique estas respostas para perguntas comuns!
+ Ver no site
+ Abrir no navegador
+ Concluído
+ Não disponível
+ Configurações
+ Pesquisar
+ Conteúdo
+ Notificações
+ Vídeo e áudio
+ Descarregar
+ Aparência
+ Histórico e cache
+ Atualizações
+ Backup e restauração
+ Depuração
+
diff --git a/shared/src/commonMain/composeResources/values-sv/strings.xml b/shared/src/commonMain/composeResources/values-sv/strings.xml
index 6f9fca9ae..7dc8df6af 100644
--- a/shared/src/commonMain/composeResources/values-sv/strings.xml
+++ b/shared/src/commonMain/composeResources/values-sv/strings.xml
@@ -5,7 +5,7 @@
Om NewPipe
Tredjepartslicenser
Bidra
- Oavsett om du har idéer kring översättning, designändringar, uppstädning av kod eller riktigt tunga kodändringar är hjälp alltid välkommen. Ju mer som görs, desto bättre blir det!
+ Oavsett om du har idéer om översättningar, designförbättringar, kodstädning eller omfattande kodändringar är all hjälp välkommen. Ju fler som bidrar, desto bättre blir NewPipe!
NewPipe utvecklas av frivilliga som ägnar sin fritid åt att ge dig den bästa användarupplevelsen. Ge något tillbaka genom att hjälpa utvecklarna att göra NewPipe ännu bättre medan de njuter av en kopp kaffe.
Ge tillbaka
Webbplats
@@ -15,16 +15,17 @@
NewPipes licens
Licenser
Donera
- Om du har problem med att använda appen, se till att läsa dessa svar på några vanliga frågor!
+ Läs svaren på vanliga frågor om du har problem med att använda appen.
Klar
Icke tillgängligt
- Om & vanliga frågor
- Läs licens
+ Om och vanliga frågor
+ Läs hela licensen
Vanliga frågor
Visa på webbplatsen
Öppna i webbläsare
Av %1$s under %2$s
- Lättviktsströmning på Android med fri programvara.
+ Lättviktig strömning på Android med fri programvara.
Visa på GitHub
- NewPipe är copyleft-licensierad fri programvara: du får använda, studera, dela och förbättra den som du vill. Mer specifikt får du distribuera och/eller modifiera den enligt villkoren i GNU General Public License, såsom den publicerats av Free Software Foundation, antingen version 3 av licensen eller, om du så önskar, någon senare version.
+ NewPipe är fri programvara under en copyleft-licens: du får använda, studera, dela och förbättra programmet. Du får distribuera och ändra det enligt villkoren i GNU General Public License, version 3 eller, om du föredrar det, en senare version.
+ Hämtningar
From 98843e5dc5f4a6ca6b44ceaa0b7184cd4da1622a Mon Sep 17 00:00:00 2001
From: Hosted Weblate
Date: Sat, 25 Jul 2026 10:02:03 +0200
Subject: [PATCH 003/155] Translated using Weblate (Toki Pona)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 5.9% (46 of 776 strings)
Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (776 of 776 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (776 of 776 strings)
Translated using Weblate (French)
Currently translated at 100.0% (776 of 776 strings)
Translated using Weblate (Icelandic)
Currently translated at 97.4% (756 of 776 strings)
Translated using Weblate (Icelandic)
Currently translated at 97.4% (756 of 776 strings)
Translated using Weblate (Arabic)
Currently translated at 99.8% (775 of 776 strings)
Translated using Weblate (Japanese)
Currently translated at 100.0% (776 of 776 strings)
Translated using Weblate (French)
Currently translated at 99.8% (775 of 776 strings)
Translated using Weblate (Swedish)
Currently translated at 100.0% (776 of 776 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (776 of 776 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (776 of 776 strings)
Translated using Weblate (Persian)
Currently translated at 98.9% (768 of 776 strings)
Translated using Weblate (German)
Currently translated at 100.0% (776 of 776 strings)
Co-authored-by: Aster
Co-authored-by: Danial Behzadi
Co-authored-by: Dot Max
Co-authored-by: Dvuevi
Co-authored-by: Hosted Weblate
Co-authored-by: MS-PC
Co-authored-by: Mazen Mohamed
Co-authored-by: Mickaël Binos
Co-authored-by: Mona Lisa
Co-authored-by: Mæve Rey
Co-authored-by: Sveinn í Felli
Co-authored-by: VfBFan
Co-authored-by: ssantos
---
app/src/main/res/values-ar/strings.xml | 6 +-
app/src/main/res/values-de/strings.xml | 13 +-
app/src/main/res/values-es/strings.xml | 12 +-
app/src/main/res/values-fa/strings.xml | 1 +
app/src/main/res/values-fr/strings.xml | 4 +-
app/src/main/res/values-in/strings.xml | 12 +-
app/src/main/res/values-is/strings.xml | 14 +-
app/src/main/res/values-ja/strings.xml | 96 ++++--
app/src/main/res/values-pt-rPT/strings.xml | 32 +-
app/src/main/res/values-pt/strings.xml | 34 +-
app/src/main/res/values-sv/strings.xml | 373 ++++++++++-----------
app/src/main/res/values-tok/strings.xml | 3 +-
12 files changed, 311 insertions(+), 289 deletions(-)
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index d708138bc..2e34a1de9 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -26,7 +26,7 @@
فتح في المتصفح
الصوت
تشغيل بواسطة كودي
- البحث
+ بحث
اللغة الإفتراضية للمحتوى
الإعدادات
المظهر
@@ -59,7 +59,7 @@
الملفات المحملة
الجميع
الفيديو
- التنزيل
+ تنزيل
حول و الأسئلة الشائعة
التاريخ
التاريخ
@@ -862,7 +862,7 @@
قم بتحرير كل إجراء إعلام أدناه من خلال النقر عليه. يتم تعيين الإجراءات الثلاثة الأولى (تشغيل/إيقاف مؤقت، السابق والتالي) بواسطة النظام ولا يمكن تخصيصها.
لا توجد مساحة خالية كافية على الجهاز
اعادة ضبط الإعداداتِ
- النسخ الاحتياطيُّ والاستعادة
+ النسخ الاحتياطي والاستعادة
أعيدوا جميع الإعدادات إلى قيمهم الافتراضية
ستؤدي إعادة ضبط جميع الإعدادات إلى تجاهل جميع إعداداتك المفضلة وإعادة تشغيل التطبيق.
\n
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 31bc9d10b..182135a4b 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -186,7 +186,7 @@
Zurückgeben
Website
Besuche die NewPipe-Website für weitere Informationen und Neuigkeiten.
- NewPipe wird von Freiwilligen entwickelt, die ihre Freizeit dafür verwenden, dir die beste Nutzererfahrung zu bieten. Gib etwas zurück, indem du den Entwicklern hilfst, NewPipe noch weiter zu verbessern, während sie sich an einer Tasse Kaffee erfreuen.
+ NewPipe wird von Freiwilligen entwickelt, die ihre Freizeit dafür verwenden, dir die beste Nutzungserfahrung zu bieten. Gib etwas zurück, indem du den Entwicklern hilfst, NewPipe noch weiter zu verbessern, während sie sich an einer Tasse Kaffee erfreuen.
Kein Stream-Player gefunden (du kannst VLC installieren, um den Stream abzuspielen).
Bevorzugtes Land des Inhalts
Immer
@@ -306,13 +306,12 @@
1 Element gelöscht.
NewPipe ist freie Copyleft-Software: Du kannst sie nach Belieben benutzen, untersuchen, mit anderen teilen und verbessern. Insbesondere kannst du sie unter den von der Free Software Foundation veröffentlichten Bedingungen der GNU General Public License, in der Version 3 der Lizenz oder (nach deiner Wahl) jeder späteren Version, weitergeben und/oder verändern.
Möchtest du auch Einstellungen importieren\?
- NewPipes Datenschutzbestimmung
- Dem NewPipe-Projekt ist Datenschutz sehr wichtig. Deshalb sammelt diese App keine Daten ohne deine Zustimmung.\nNewPipes Datenschutzbestimmungen erklären im Detail, welche Daten beim Absenden eines Absturzberichtes verschickt und gespeichert werden.
- Datenschutzbestimmungen lesen
+ NewPipes Datenschutzerklärung
+ Dem NewPipe-Projekt ist Datenschutz sehr wichtig. Daher sammelt die App keinerlei Daten ohne deine Zustimmung.\nNewPipes Datenschutzerklärung erläutert ausführlich, welche Daten beim Senden eines Absturzberichts übermittelt und gespeichert werden.
+ Datenschutzerklärung lesen
Akzeptieren
Ablehnen
- Um der europäischen Datenschutz-Grundverordnung (DSGVO) gerecht zu werden, weisen wir hiermit auf NewPipes Datenschutzerklärung hin. Bitte lies sie sorgfältig durch.
-\nDu musst den Datenschutzrichtlinien zustimmen, um den Fehlerbericht an uns zu senden.
+ Um der europäischen Datenschutz-Grundverordnung (DSGVO) gerecht zu werden, weisen wir hiermit auf NewPipes Datenschutzerklärung hin. Bitte lies sie sorgfältig durch. \nDu musst dieser zustimmen, um den Fehlerbericht an uns zu senden.
Unbegrenzt
Auflösung bei Verwendung mobiler Daten begrenzen
Beim App-Wechsel minimieren
@@ -436,7 +435,7 @@
Instanz existiert bereits
Lokal
Kürzlich hinzugefügt
- Auto-generiert (kein Autor gefunden)
+ Automatisch erzeugt (kein Autor gefunden)
Eine Instanz wählen
Bevorzugte Peertube-Instanzen auswählen
Es werden nur HTTPS-Adressen unterstützt
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 78e359b6e..351f9da78 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -34,7 +34,7 @@
Los archivos de audio descargados se almacenan aquí
Elija la carpeta de descarga para los archivos de audio
Carpeta de descarga de audio
- Video y audio
+ Vídeo y audio
Error
Error de conexión
No se pudo cargar las miniaturas
@@ -110,7 +110,7 @@
Ver en GitHub
Licencia de NewPipe
Tanto si tiene ideas de traducción, cambios de diseño, limpieza de código o modificaciones profundas en el código, la ayuda siempre es bienvenida. ¡Cuanto más se haga, mejor se vuelve!
- Leer la licencia
+ Leer licencia
Contribuir
Suscribirse
Suscrito
@@ -184,7 +184,7 @@
Lo nuevo y lo mejor
Mantener pulsado para añadir a la cola
Donar
- NewPipe es desarrollado por voluntarios que dedican su tiempo libre a ofrecerle la mejor experiencia de usuario. Colabore para ayudar a los desarrolladores a hacer que NewPipe sea aún mejor mientras disfrutan de una taza de café.
+ NewPipe es desarrollado por voluntarios que dedican su tiempo libre a ofrecerle la mejor experiencia de usuario. Puedes hacer una donación para ayudar a los desarrolladores y hacer que NewPipe sea aún mejor mientras disfrutan de una taza de café.
Colaborar
Sito web
Visita el nuevo sitio web de NewPipe para más detalles y noticias.
@@ -301,12 +301,12 @@
¿Borrar todo el historial de búsqueda\?
Historial de búsquedas borrado
Se ha borrado 1 elemento.
- NewPipe es software libre con copyleft: puede usarlo, estudiarlo, compartirlo y mejorarlo a su antojo. Específicamente, puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia o (a su elección) cualquier versión posterior.
+ NewPipe es software libre con copyleft: puedes usarlo, estudiarlo, compartirlo y mejorarlo a voluntad. Específicamente, puedes redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU publicada por la Free Software Foundation, ya sea la versión 3 de la licencia o (a tu elección) cualquier versión posterior.
¿Quieres importar también los ajustes\?
Política de privacidad de NewPipe
El proyecto NewPipe toma tu privacidad muy en serio. Por ello, la aplicación no recopila ningún dato sin tu consentimiento.
\nLa política de privacidad de NewPipe explica en detalle qué datos se envían y almacenan al enviar un informe de fallo.
- Leer la política de privacidad
+ Leer política de privacidad
Para cumplir con el «Reglamento general europeo de protección de datos (GDPR)», atraemos su atención sobre la política de privacidad de NewPipe. Por favor léase cuidadosamente.
\nDebe aceptarlo para enviarnos el informe de error.
Aceptar
@@ -703,7 +703,7 @@
Tamaño del intervalo de carga de reproducción
Ver en el sitio web
Preguntas frecuentes
- Si tiene problemas al usar la aplicación, ¡asegúrese de consultar estas respuestas a las preguntas comunes!
+ Si tienes problemas al usar la aplicación, ¡Asegúrate de verificar estas respuestas a preguntas comunes!
Ordenar
Modo rápido
Importa o exporta las suscripciones desde el menú con los tres puntos
diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml
index 4934a4bdb..82fe492dd 100644
--- a/app/src/main/res/values-fa/strings.xml
+++ b/app/src/main/res/values-fa/strings.xml
@@ -854,4 +854,5 @@
برونریزی اشتراکهایتان به پروندهٔ .json
نیوپایپ دارد پشتیبانی از اندروید ۵ را رها میکند
هنگام پخش کردن کارساز خطای HTTP %1$s داد
+ برای استفاده از پخشکنندهٔ بالاپریدنی %1$s را در فهرست تنظیمات اندروید زیر گزیده و %2$s را به کار بیندازید.
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index b34ae522f..9fc9b9864 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -12,7 +12,7 @@
Aucun lecteur de flux trouvé. Installer VLC \?
Ouvrir dans le navigateur
Lire avec Kodi
- Rechercher
+ Chercher
Paramètres
Partager
Partager avec
@@ -253,7 +253,7 @@
Télécharger le flux
Ajout automatique du flux suivant à la file de lecture
Continue la file de lecture (non répétitive) en ajoutant un flux lié
- Débogage
+ Corriger
Remplir
Générés automatiquement
La surveillance des fuites de mémoire peut geler l’application durant le vidage du tas
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index be53db6bd..137818d74 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -7,7 +7,7 @@
Buka di peramban
Bagikan
Unduh
- Cari
+ Telusur
Pengaturan
Bagi dengan
Gunakan pemutar video lain
@@ -31,8 +31,8 @@
Video \'Berikutnya\' dan \'Serupa\'
URL tidak didukung
Bahasa konten
- Video dan audio
- Tampilan
+ Audio dan Video
+ Penampilan
Memutar di latar belakang
Konten
Tampilkan konten yang dibatasi usia
@@ -100,7 +100,7 @@
Saran pencarian
Menampilkan saran pencarian saat mencari
Kualitas terbaik
- Unduhan
+ Unduh
Karakter yang diizinkan sebagai nama berkas
Karakter yang tidak valid akan diganti dengan karakter ini
Karakter pengganti
@@ -139,7 +139,7 @@
Lokasi Konten
Pemutar
Perilaku
- Riwayat dan cache
+ Riwayat & Cache
Debug
Urungkan
Putar Semua
@@ -800,7 +800,7 @@
\nApakah Anda yakin ingin melanjutkan?
NewPipe dapat memeriksa versi baru secara berkala dan memberi tahu Anda ketika ada yang baru.
\nApakah Anda ingin mengaktifkan ini?
- Cadangkan dan pulihkan
+ Cadangkan dan Pulihkan
Pengaturan dalam ekspor yang diimpor menggunakan format rentan yang tidak digunakan lagi sejak NewPipe 0.27.0. Pastikan ekspor yang diimpor berasal dari sumber tepercaya, dan lebih memilih hanya menggunakan ekspor yang diperoleh dari NewPipe 0.27.0 atau yang lebih baru di masa mendatang. Dukungan untuk mengimpor pengaturan dalam format rentan ini akan segera dihapus sepenuhnya, dan NewPipe versi lama tidak akan dapat lagi mengimpor pengaturan ekspor dari versi baru.
sekunder
Daftar putar
diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml
index aa8c2e72c..854259735 100644
--- a/app/src/main/res/values-is/strings.xml
+++ b/app/src/main/res/values-is/strings.xml
@@ -53,7 +53,7 @@
Tilkynningar fyrir nýjar útgáfur NewPipe
Hreinsa vefkökur sem NewPipe geymir þegar þú leysir reCAPTCHA
NewPipe rakst á villu, ýttu til að tilkynna hana
- Um okkur og algengar spurningar
+ Um okkur & algengar spurningar
Gerast áskrifandi
Aðeins sum tæki geta spilað 2K/4K myndskeið
Spila með Kodi
@@ -133,7 +133,7 @@
NewPipe verkefnið tekur friðhelgi þína mjög alvarlega. Þess vegna safnar forritið ekkert án samþykkis þíns.
\nPersónuverndarstefna NewPipe útskýrir í smáatriðum hvaða gögn eru send og geymd þegar þú sendir hrunskýrslu.
Spilari
- Aflúsa
+ Villuleit
Sjálfgefið tungumál efnis
Tungumál
Bæta við
@@ -142,7 +142,7 @@
Svört
Setja næsta streymi sjálfkrafa í biðröð
Stokka
- Innihald
+ Efni
Ekkert
Hreinsa
Þema
@@ -250,19 +250,19 @@
Leysa
Lokið
Beðið eftir þraut reCAPTCHA
- Leyfi þriðja aðila
+ Notkunarleyfi utanaðkomandi aðila
Hugbúnaðarleyfi
© %1$s • %2$s • %3$s
Taka þátt
Allt er velkomið — hugmyndir, þýðingar, endurhönnun, kóðahreinsun eða miklar kóðabreytingar. Því fleiri, því betra!
Skoða á GitHub
- Gefa pening
- Gefa
+ Styrkja
+ Gefa til baka
Vefsíða
Lesa persónuverndarstefnu
Áhorf
Áhorf
- Lesa leyfi
+ Lesa notkunarleyfi
Nýlega spilað
Mest spilað
Aðalsíða
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index e915bb809..5fc287e20 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -101,15 +101,15 @@
検索候補の表示
検索時に表示する候補を選択します
最高
- NewPipe について
- サードパーティー ライセンス
+ NewPipeについて
+ サードパーティライセンス
© %1$s 作者 %2$s ライセンス %3$s
- バージョン情報とよくある質問
+ 概要とよくある質問
ライセンス
- Android 向けのフリーで軽量なストリーミング。
- GitHub で表示
- NewPipe のライセンス
- 翻訳、デザインの変更、コードの整理、動作の重いコードの変更など、アイデアをお持ちではありませんか?ヘルプはいつでも歓迎します。より良いものを一緒に作り上げましょう!
+ Android向けの自由で軽量なストリーミングアプリ。
+ GitHubで見る
+ NewPipeのライセンス
+ 翻訳、デザインの変更、コードの整理、大規模なコード変更など、どんな形の協力もいつでも歓迎します。手を加えるほど、より良いものになります!
ライセンスを読む
貢献する
チャンネル登録
@@ -138,26 +138,26 @@
一致する結果はありませんでした
チャンネル登録者なし
動画がありません
- 保存
+ ダウンロード
ファイル名に使用可能な文字
無効な文字はここで指定した文字に置き換えられます
ファイル名の自動修正
文字と数字
文字と数字と、多くの特殊文字
- 寄付
- NewPipe は、あなたに最高の体験を提供するために、ボランティアが自分たちの時間を使って開発しています。開発者たちがコーヒーを飲みながら NewPipe を継続的に改良できるよう、ご支援をお願いします。
- Webサイト
- NewPipe の詳しい情報や最新情報については、ウェブサイトをご覧ください。
+ 寄付する
+ NewPipeは、最高のユーザー体験を届けるために、ボランティアが自由時間を使って開発しています。開発者がコーヒーを楽しみながらNewPipeをさらに良くできるよう、ぜひ支援してください。
+ ウェブサイト
+ 詳しい情報や最新ニュースについては、NewPipeのウェブサイトをご覧ください。
履歴
履歴
このアイテムを検索履歴から削除しますか?
メインページのコンテンツ
空白ページ
- Kioskページ
+ キオスクページ
チャンネルページ
チャンネルを選択
登録しているチャンネルはありません
- Kioskを選択
+ キオスクを選択
人気
トップ50
削除
@@ -245,8 +245,8 @@
チャンネル
プレイリスト
ユーザー
- NewPipe プライバシーポリシー
- プライバシーポリシーを確認
+ NewPipeのプライバシーポリシー
+ プライバシーポリシーを読む
おおまかなシーク
おおまかなシークを使用することで精度が下がる代わりに高速にシークができます。5 秒、15 秒または 25 秒間隔のシークはできません
キューに関連動画を追加して再生を続ける (繰り返ししない場合)
@@ -262,9 +262,8 @@
1 つのアイテムが削除されました。
支援する
- NewPipe プロジェクトはあなたのプライバシーを非常に大切にしています。あなたの同意がない限り、アプリはいかなるデータも収集しません。
-\nNewPipe のプライバシー・ポリシーでは、クラッシュリポート送信時にどのような種類のデータが送信・記録されるかを詳細に説明しています。
- NewPipe はコピーレフトなソフトウェアです。あなたは自由にそれを使用し、研究し、共有し、そして改善することができます。あなたは、GNU フリーソフトウェア財団が公開する GNU General Public ライセンス バージョン3以降の下に、自由に再配布・修正を行うことができます。
+ NewPipeプロジェクトは、ユーザーのプライバシーを非常に重視しています。そのため、このアプリがユーザーの同意なくデータを収集することはありません。\nNewPipeのプライバシーポリシーでは、クラッシュレポートを送信した際に、どのようなデータが送信および保存されるかを詳しく説明しています。
+ NewPipeは、コピーレフトの自由ソフトウェアです。自由に使用、研究、共有、改良できます。具体的には、フリーソフトウェア財団が公開しているGNU General Public Licenseのバージョン3、またはそれ以降の任意のバージョンの条件に従って、再配布や改変を行えます。
最終再生日時
最も再生された動画
拡大
@@ -320,7 +319,7 @@
音階
登録解除
タブを選択
- アプリの更新
+ 更新
イベント
新しい NewPipe バージョンの通知
外部記憶装置は利用できません
@@ -406,7 +405,7 @@
- %s本の動画
- デフォルトのKiosk
+ デフォルトのキオスク
誰も見ていません
- %s人が視聴中
@@ -437,7 +436,7 @@
アプリの言語
システムの既定
解けたら「完了」を押してください
- 完了
+ 閉じる
動画
- %d 秒
@@ -497,7 +496,7 @@
この動画には年齢制限があります。
\n
\n閲覧したい場合、設定から \"%1$s\" を有効化してください。
- プレイリストに追加される前も追加された後も視聴した動画はプレイリストから削除されます。 \nよろしいですか?この操作は元に戻せません!
+ プレイリストへの追加前または追加後に視聴済みとなった動画が削除されます。\nよろしいですか?
はい、部分的に視聴した動画も削除します
視聴済みの動画を削除しますか?
視聴済みを削除
@@ -684,11 +683,11 @@
外部プレイヤーで利用可能な動画ストリームがありません
外部プレイヤーでの品質を選択
並び替え
- ウェブサイトを表示
+ ウェブサイトで見る
タップして%sをダウンロード
あなたはNewPipeの最新版を起動しています
よくある質問
- アプリの使い方に困ったときは、よくある質問に答えていますので、ぜひご覧ください!
+ アプリの使用中に問題が発生した場合は、よくある質問への回答をご確認ください!
%sがテーマに選択された場合のみ、この選択肢が利用可能です
高速モード
3点メニューから登録チャンネルの読み込みまたは書き出しが可能
@@ -804,8 +803,53 @@
インポートされているエクスポートの設定は、NewPipe 0.27.0以降は非推奨であった脆弱な形式を使用します。 インポートされているエクスポートは信頼できる情報源からであり、将来的にはNewPipe 0.27.0かこれより新しいバージョンから得られるエクスポートのみを優先して使用します。 この脆弱な形式で設定をインポートするための対応はすぐに完全に削除され、新しいバージョンからエクスポートの設定をインポートすることは出来ません。
YouTubeの一時的なプレイリストとして共有
二次的
- Google は、2026/2027 年から、認定 Android デバイス上のすべてのアプリについて、開発者が個人の身元情報を直接 Google に提出することを必須にすると発表しました。本アプリの開発者はこの要件に同意していないため、このアプリはその時点以降、認定 Android デバイス上で動作しなくなります。
+ 2025年8月、Googleは、2026年9月以降、Playストア以外からインストールするアプリを含め、認定済み端末上のすべてのAndroidアプリのインストールに開発者の確認が必要になると発表しました。NewPipeの開発者はこの要件に同意していないため、それ以降、NewPipeは認定済みAndroid端末で動作しなくなります。
詳細
解決
%sB
+ %1$sを検索
+ %1$s(%2$s)を検索
+ プレイリスト
+ ポップアッププレーヤーを使用するには、次のAndroid設定メニューで%1$sを選択し、%2$sを有効にしてください。
+ 「他のアプリの上に表示」を許可
+ %sK
+ %sM
+ ファイルを削除
+ エントリを削除
+ フィードグループを選択
+ フィードグループはまだ作成されていません
+
+ - %d件の登録チャンネルをエクスポートしています…
+
+
+ - %d件の登録チャンネルを読み込んでいます…
+
+
+ - %d件の登録チャンネルをインポートしています…
+
+ 登録チャンネルをインポート
+ 登録チャンネルをエクスポート
+ 以前エクスポートした.jsonファイルから登録チャンネルをインポート
+ 登録チャンネルを.jsonファイルにエクスポート
+ 以前のエクスポートからインポート
+ チャンネルグループページ
+ アカウントは停止されました\n\n%1$sによる理由: %2$s
+ 高評価
+ SoundCloudのトップ50ページを削除しました
+ SoundCloudは従来のトップ50チャートを終了しました。該当するタブはメインページから削除されました。
+ YouTubeの統合トレンドを削除しました
+ YouTubeは2025年7月21日をもって、統合トレンドページを終了しました。NewPipeでは、デフォルトのトレンドページをトレンドのライブ配信に置き換えました。\n\n設定 > コンテンツ > メインページのコンテンツから、別のトレンドページを選択することもできます。
+ ゲームのトレンド
+ トレンドのポッドキャスト
+ トレンドの映画と番組
+ トレンドの音楽
+ エントリを削除しました
+ 再生中にサーバーからHTTPエラー403を受信しました。ストリーミングURLの有効期限切れまたはIPアドレスのブロックが原因である可能性があります
+ 再生中にサーバーからHTTPエラー%1$sを受信しました
+ 再生中にサーバーからHTTPエラー403を受信しました。IPアドレスのブロックまたはストリーミングURLの難読化解除に関する問題が原因である可能性があります
+ %1$sは、リクエスト元がボットではないことを確認するためにログインを求め、データの提供を拒否しました。\n\nお使いのIPアドレスが%1$sによって一時的にブロックされている可能性があります。しばらく待つか、別のIPアドレスに切り替えてください(たとえば、VPNのオンとオフを切り替えるか、Wi-Fiからモバイルデータ通信に切り替えます)。\n\n詳しくは こちらのFAQ項目 をご覧ください。
+ このコンテンツは、現在選択されているコンテンツの国では利用できません。\n\n設定 > コンテンツ > デフォルトのコンテンツの国から選択を変更してください。
+ NewPipeはAndroid 5のサポートを終了します
+ 残念ながら、NewPipeが依存している一部のライブラリでAndroid 5.0および5.1のサポートが終了しました。そのため、次回リリースのNewPipeはAndroid 6以降の端末でのみ動作します。詳しくはブログ記事をご覧ください。
+ ブログ記事
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index b494e990e..bed536d37 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -74,7 +74,7 @@
Este vídeo está restringido a idades.
\n
\nPara o poder ver, tem que ativar \"%1$s\" nas definições.
- Ver licença
+ Ler licença
Apenas os URL HTTPS são suportados
Falha ao validar a instância
Limpar histórico de descargas
@@ -120,7 +120,7 @@
- %d selecionados
Partilhar
- Ver política de privacidade
+ Leia a política de privacidade
Ocorreu um erro compulsivo do reprodutor
Ativar \"Modo restrito\" do YouTube
Pasta inexistente
@@ -166,7 +166,7 @@
Miniatura da lista de reprodução alterada.
Não foi possível carregar os comentários
País padrão para conteúdo
- Aplicação livre de reprodução de transmissões para Android.
+ Streaming livre e gratuito no Android.
Idioma padrão para conteúdo
Importar subscrições do YouTube do Google Takeout:
\n
@@ -181,7 +181,7 @@
Desafio reCAPTCHA solicitado
Reprodução automática
Instância já existe
- NewPipe é desenvolvido por voluntários que utilizam o seu tempo livre para nos proporcionar a melhor experiência. Retribua para ajudar os programadores a tornarem NewPipe ainda melhor.
+ O NewPipe é desenvolvido por voluntários que passam o seu tempo livre a trazer-lhe a melhor experiência de utilizador. Retribua para ajudar os programadores a fazer o NewPipe ainda melhor enquanto tomam uma chávena de café.
Continuar (sem repetição) a fila de reprodução anexando um vídeo relacionado
Sempre
Para cumprir com o Regulamento Geral da Proteção de Dados (RGPD), chamamos a sua atenção para a política de privacidade do NewPipe. Por favor, leia com atenção.
@@ -203,7 +203,7 @@
Ação a executar ao trocar para outra aplicação a partir do menu principal - %s
Utilizar reprodutor de vídeo externo
O quê:\nPedido:\nIdioma do conteúdo:\nPaís do conteúdo\nIdioma da aplicação\nServiço:\nHora GMT:\nPacote:\nVersão:\nSO Versão:
- Se tem ideias para: tradução, alterações de desenho, limpeza de código, ou alterações significativas no código fonte - todas as ajudas são bem-vindas. Quanto mais se faz, melhor ficará!
+ Caso tenha ideias; tradução, alterações de design, limpeza de código ou alterações realmente pesadas de código, a ajuda é sempre bem-vinda. Quanto mais for feito, melhor será!
Limpar dados
Apenas uma vez
Não carregado: %d
@@ -242,7 +242,7 @@
Escolha a pasta para colocar os ficheiros de áudio
Atualização NewPipe disponível!
Eventos
- Política de privacidade do NewPipe
+ Política de Privacidade do NewPipe
Não foi possível carregar todas as miniaturas
Áudio
Cancelar
@@ -264,7 +264,7 @@
Duração da pesquisa de avanço/recuo rápido
Ficheiro movido ou eliminado
Última reprodução
- Visite o site NewPipe para obter mais informação e novidades.
+ Visite o site do NewPipe para mais informações e novidades.
Importe o seu perfil SoundCloud digitando o URL ou a ID.:
\n
\n1. Ative o modo desktop do seu navegador web (o site não está disponível para dispositivos móveis)
@@ -310,10 +310,10 @@
Mais caracteres especiais
Pasta para ficheiros de áudio
Detalhes:
- Transferências
+ Descarregar
Fonte
Página da lista de reprodução
- Definições
+ Configurações
Mais reproduzido
A mostrar resultados para: %s
Mudar para segundo plano
@@ -368,7 +368,7 @@
Aplicação terminou em erro
Deseja remover este item do histórico de pesquisas\?
Continuar reprodução
- NewPipe é um software livre \"copyleft\": pode utilizar, estudar, partilhar e melhorar a aplicação. Especificamente, pode redistribuir e/ou modificar a aplicação nos termos da GNU General Public License, conforme publicada pela Free Software Foundation, tanto a versão 3 da licença ou (por opção) qualquer versão posterior.
+ NewPipe é um software copyleft libre: pode usá-lo, estudá-lo, partilhá-lo e melhorá-lo à vontade. Especificamente, pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU conforme publicada pela Free Software Foundation, seja a versão 3 da Licença ou (ao seu critério) qualquer versão posterior.
∞ vídeos
A exportar…
Mais apreciados
@@ -386,7 +386,7 @@
Existe uma descarga pendente com este nome
Aceitar
O que ocorreu:
- Participar
+ Contribuir
Segundo plano
[Desconhecido]
Encontre as instâncias que gosta em %s
@@ -430,9 +430,9 @@
Não foi possível ler as guias gravadas, portanto usando as guias predefinidas
Fechar
Sem legendas
- Site oficial
+ Site
Subscrições
- Contribuir
+ Retribuir
Formato padrão de áudio
O ficheiro não existe ou não tem permissões para ler e/ou escrever
O nome do grupo está vazio
@@ -491,7 +491,7 @@
Conteúdo indisponível
Subscrito
Cache de imagens limpa
- Sobre e perguntas frequentes
+ Sobre & Perguntas Frequentes
Contagem de subscrições indisponível
Ação padrão ao abrir o conteúdo — %s
Repor
@@ -710,7 +710,7 @@
Selecione a qualidade para reprodutores externos
Tamanho do intervalo de carregamento da reprodução
Perguntas frequentes
- Se está a ter problemas a usar a aplicação, veja estas respostas para perguntas mais comuns!
+ Se tem problemas a usar a app, verifique estas respostas para perguntas comuns!
Ver no site
Modo rápido
Importar ou exportar subscrições do menu de 3 pontos
@@ -826,7 +826,7 @@
\nTem certeza que deseja continuar?
Sim
Não
- Cópia de segurança e restauro
+ Backup e restauração
Repor definições
Não há espaço suficiente no aparelho
As configurações na exportação a serem importadas usam um formato vulnerável depreciado desde NewPipe 0.27.0. Certifique-se de que a exportação que é importada é de uma fonte confiável e prefira usar apenas as exportações obtidas do NewPipe 0.27.0 ou mais recentes no futuro. O suporte para importar configurações neste formato vulnerável será removido em breve completamente e, em seguida, versões antigas do NewPipe não serão capazes de importar configurações de exportações de novas versões.
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 1b2f94adc..40821530e 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -8,7 +8,7 @@
Partilhar
Descarregar
Pesquisar
- Definições
+ Configurações
Será que queria dizer \"%1$s\"\?
Partilhar com
Utilizar reprodutor de vídeo externo
@@ -104,14 +104,14 @@
Sobre o NewPipe
Licenças de terceiros
© %1$s de %2$s nos termos da %3$s
- Sobre e perguntas frequentes
+ Sobre & Perguntas Frequentes
Licenças
- Aplicação de reprodução para Android.
+ Streaming livre e gratuito no Android.
Ver no GitHub
Licença do NewPipe
- Se tem ideias para: tradução, alterações de desenho, limpeza de código, ou alterações significativas no código fonte - todas as ajudas são bem-vindas. Quanto mais se faz, melhor ficará!
- Ver licença
- Participar
+ Caso tenha ideias; tradução, alterações de design, limpeza de código ou alterações realmente pesadas de código, a ajuda é sempre bem-vinda. Quanto mais for feito, melhor será!
+ Ler licença
+ Contribuir
Subscrever
Subscrito
Canal não subscrito
@@ -151,7 +151,7 @@
- %s vídeos
- %s vídeos
- Descargas
+ Descarregar
Carateres permitidos no nome dos ficheiros
Os carateres inválidos são substituídos por este valor
Carácter de substituição
@@ -212,8 +212,8 @@
Ocorreu um erro: %1$s
Não existem vídeos para descarregar
Rejeitar
- Site oficial
- Visite o site NewPipe para obter mais informação e novidades.
+ Site
+ Visite o site do NewPipe para mais informações e novidades.
Página \'kiosk\'
Exportado
Importado
@@ -291,14 +291,14 @@
Remover todo o histórico de pesquisas\?
Histórico de pesquisa removido
1 item eliminado.
- NewPipe é desenvolvido por voluntários que utilizam o seu tempo livre para nos proporcionar a melhor experiência. Retribua para ajudar os programadores a tornarem NewPipe ainda melhor.
- Contribuir
- Política de privacidade do NewPipe
+ O NewPipe é desenvolvido por voluntários que passam o seu tempo livre a trazer-lhe a melhor experiência de utilizador. Retribua para ajudar os programadores a fazer o NewPipe ainda melhor enquanto tomam uma chávena de café.
+ Retribuir
+ Política de Privacidade do NewPipe
O projeto NewPipe leva a sua privacidade muito a sério. Por isso, não recolhe dados sem o seu consentimento.
\nA polícia de privacidade do NewPipe explica, em detalhe, os tipos de dados enviados sempre que submete um relatório de erro.
- Ver política de privacidade
+ Leia a política de privacidade
Adicionar o próximo vídeo à fila automaticamente
- NewPipe é um software livre \"copyleft\": pode utilizar, estudar, partilhar e melhorar a aplicação. Especificamente, pode redistribuir e/ou modificar a aplicação nos termos da GNU General Public License, conforme publicada pela Free Software Foundation, tanto a versão 3 da licença ou (por opção) qualquer versão posterior.
+ NewPipe é um software copyleft libre: pode usá-lo, estudá-lo, partilhá-lo e melhorá-lo à vontade. Especificamente, pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU conforme publicada pela Free Software Foundation, seja a versão 3 da Licença ou (ao seu critério) qualquer versão posterior.
Também deseja importar as definições\?
Toque longo para colocar na fila
Ação de \'Abrir\' preferida
@@ -447,7 +447,7 @@
Idioma da aplicação
Predefinição do sistema
Prima \"Feito\" ao resolver
- Feito
+ Concluído
Acha que a fonte demora muito tempo a carregar? Se sim, tente ativar o carregamento rápido (pode alterar a opção nas definições ou no botão abaixo).
\n
\nNewPipe oferece duas estratégias de carregamento:
@@ -710,7 +710,7 @@
Tamanho do intervalo de carregamento da reprodução
Perguntas frequentes
Ver no site
- Se está a ter problemas a usar a aplicação, veja estas respostas para as perguntas mais comuns!
+ Se tem problemas a usar a app, verifique estas respostas para perguntas comuns!
Ordem
Modo rápido
Importe ou exporte subscrições no menu 3 pontos
@@ -821,7 +821,7 @@
Sim
Não
Repor valores originais de todas as definições
- Cópia de segurança e restauro
+ Backup e restauração
Repor definições
A restauração de todas as configurações descartará todas as suas configurações preferidas e reiniciará a aplicação.
\n
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index d92f0596c..e2f3b6b56 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -2,7 +2,7 @@
Tryck på förstoringsglaset för att komma igång.
Publicerad den %1$s
- Ingen strömspelare hittades. Vill du installera VLC?
+ Ingen extern spelare hittades. Vill du installera VLC?
Installera
Avbryt
Öppna i webbläsare
@@ -14,7 +14,7 @@
Menade du: %1$s\?
Dela med
Använd extern videospelare
- Tar bort ljud vid vissa upplösningar
+ Ljud saknas vid vissa upplösningar
Använd extern ljudspelare
Bakgrund
Popup
@@ -39,13 +39,13 @@
Ljust
Mörkt
Svart
- Kom ihåg popupinställningar
- Kom ihåg popup-rutans senaste storlek och position
+ Kom ihåg popupfönstrets inställningar
+ Kom ihåg popupfönstrets senaste storlek och placering
Sökförslag
- Välj förslag att visa i samband med sökning
+ Välj vilka förslag som ska visas när du söker
Hämta
- Visa \'Nästa\' och \'Liknande\' videor
- Webbadressen stöds inte
+ Visa ”Nästa” och ”Liknande videor”
+ URL:en stöds inte
Standardinnehållsspråk
Video och ljud
Utseende
@@ -67,21 +67,21 @@
Det gick inte att analysera webbplatsen
Innehållet är inte tillgängligt
Det gick inte att ställa in hämtningsmenyn
- App/Användargränssnittet kraschade
+ Appens användargränssnitt kraschade
Oj, det där skulle inte ha hänt.
Tyvärr gick någonting fel.
Rapportera
- Info:
- Vad som skedde:
+ Information:
+ Vad hände:
Din kommentar (på engelska):
Detaljer:
- Gillar
- Ogillar
+ Gilla-markeringar
+ Ogilla-markeringar
Prenumerera
Prenumererar
Prenumeration avslutad
- Kunde inte ändra prenumeration
- Kunde inte uppdatera prenumeration
+ Det gick inte att ändra prenumerationen
+ Det gick inte att uppdatera prenumerationen
Prenumerationer
Vad är nytt
Sökhistorik
@@ -90,8 +90,8 @@
Håll koll på videor som du tittat på
Återuppta uppspelning
Fortsätt uppspelning efter avbrott (t.ex. telefonsamtal)
- Visa \"Håll för att köa\"-tips
- Visa tips när bakgrunds- eller popup-knappen trycks på sidan för video \"Detaljer:\"
+ Visa tipset ”Håll ned för att köa”
+ Visa ett tips när du trycker på knappen för bakgrunds- eller popupuppspelning på videons detaljsida
Spelare
Beteende
Historik och cacheminne
@@ -100,15 +100,15 @@
NewPipe-avisering
Aviseringar för NewPipes spelare
[Okänd]
- Misslyckades med att spela denna ström
- Allvarligt spelarfel inträffade
- Återhämtar sig från spelarfel
+ Det gick inte att spela upp strömmen
+ Ett allvarligt spelarfel inträffade
+ Försöker återställa uppspelningen efter ett spelarfel
Rapportera via e-post
- Vad:\nBegäran:\nInnehållsspråk:\nInnehållsland:\nApp-språk:\nTjänst:\nGMT-tid:\nPaket:\nVersion:\nOS-version:
- Spela video, längd:
- Uppladdarens avatar-miniatyrbild
+ Vad:\nBegäran:\nInnehållsspråk:\nInnehållsland:\nAppspråk:\nTjänst:\nGMT-tid:\nPaket:\nVersion:\nOS-version:
+ Spela upp video, längd:
+ Uppladdarens profilbild
Inga resultat
- Här va\' det tomt
+ Här var det tomt
Video
Ljud
Försök igen
@@ -131,19 +131,19 @@
Pausa
Ta bort
Kontrollsumma
- Okej
+ OK
Filnamn
Trådar
Fel
- NewPipe-hämtning
- Tryck för detaljer
+ Hämtning i NewPipe
+ Tryck för att visa detaljer
Vänta…
- Kopierat till urklipp
+ Kopierat till urklippet
Ange en hämtningsmapp senare i inställningarna
- Denna behörighet krävs för att \nöppna i popup-läge
+ Den här behörigheten krävs för att \nöppna popupfönstret
reCAPTCHA-utmaning
reCAPTCHA-utmaning begärd
- Hämtning
+ Hämtningar
Tillåtna tecken i filnamn
Ogiltiga tecken ersätts med detta värde
Ersättningstecken
@@ -152,13 +152,13 @@
Om NewPipe
Tredjepartslicenser
© %1$s av %2$s under %3$s
- Om & vanliga frågor
+ Om och vanliga frågor
Licenser
- Lättviktsströmning på Android med fri programvara.
+ Lättviktig strömning på Android med fri programvara.
Visa på GitHub
NewPipes licens
- Oavsett om du har idéer kring översättning, designändringar, uppstädning av kod eller riktigt tunga kodändringar är hjälp alltid välkommen. Ju mer som görs, desto bättre blir det!
- Läs licens
+ Oavsett om du har idéer om översättningar, designförbättringar, kodstädning eller omfattande kodändringar är all hjälp välkommen. Ju fler som bidrar, desto bättre blir NewPipe!
+ Läs hela licensen
Bidra
Historik
Historik
@@ -184,23 +184,23 @@
Ge tillbaka
Webbplats
Besök NewPipes webbplats för mer information och nyheter.
- Visa info
+ Visa information
Bokmärkta spellistor
Lägg till i
- Använd snabb icke-exakt sökning
- Cacheminnet för bilder rensat
+ Använd snabb, ungefärlig spolning
+ Bildcachen har rensats
Felsökning
Alltid
Bara en gång
Fil
- Rensa metadata i cacheminnet
- Ingen strömspelare hittades (du kan installera VLC för att spela upp).
- Hämta strömfil
- Inexakt sökning gör det möjligt att söka snabbare med mindre precision. Att hoppa 5, 15 eller 25 sekunder fungerar inte med detta val
- Ta bort alla cachade webbsidor
+ Rensa metadatacachen
+ Ingen extern spelare hittades. Du kan installera VLC för att spela upp innehållet.
+ Hämta strömmen
+ Ungefärlig spolning går snabbare men är mindre exakt. Hopp på 5, 15 eller 25 sekunder fungerar inte när alternativet är aktiverat.
+ Ta bort all cachelagrad metadata
Metadatacachen har rensats
- Köa nästa strömning automatiskt
- Fortsätt en avslutad (icke-upprepande) uppspelningskö genom att lägga till en relaterad ström
+ Köa nästa ström automatiskt
+ Fortsätt en avslutad uppspelningskö som inte upprepas genom att lägga till en relaterad ström
Standardinnehållsland
Kanaler
Spellistor
@@ -211,10 +211,10 @@
Växla till huvudspelare
Importera databas
Exportera databas
- Skriver över din nuvarande historik, prenumerationer, spellistor och (valbart) inställningar
+ Skriver över din nuvarande historik, dina prenumerationer och spellistor samt, valfritt, dina inställningar
Exportera historik, prenumerationer, spellistor och inställningar
Rensa visningshistorik
- Tar bort historiken för spelade videoklipp och uppspelningspositioner
+ Tar bort historiken över uppspelade videor och sparade uppspelningspositioner
Ta bort hela visningshistoriken\?
Visningshistorik borttagen
Rensa sökhistorik
@@ -225,31 +225,31 @@
Inga videoströmningar hittades
Inga ljudspår hittades
Ingen sådan mapp
- Ingen sådan fil/innehållskälla
- Filen finns inte eller behörighet att läsa eller skriva till den saknas
+ Filen eller innehållskällan finns inte
+ Filen finns inte eller saknar läs- eller skrivbehörighet
Filnamnet får inte vara tomt
Ett fel uppstod: %1$s
- Inga strömningar tillgängliga för hämtning
+ Inga strömmar är tillgängliga för hämtning
Dra för att ändra ordning
Skapa
Avfärda
Byt namn
1 objekt borttaget.
NewPipes integritetspolicy
- NewPipe-projektet tar din integritet på största allvar. Appen samlar därför inte in några uppgifter utan ditt medgivande. \nNewPipes sekretesspolicy förklarar i detalj vad för data som skickas och lagras när du skickar en kraschrapport
+ NewPipe-projektet tar din integritet på största allvar. Appen samlar därför inte in några uppgifter utan ditt medgivande. \nNewPipes integritetspolicy beskriver vilka uppgifter som skickas och lagras när du skickar en kraschrapport.
Läs integritetspolicyn
- NewPipe är copyleft-licensierad fri programvara: du får använda, studera, dela och förbättra den som du vill. Mer specifikt får du distribuera och/eller modifiera den enligt villkoren i GNU General Public License, såsom den publicerats av Free Software Foundation, antingen version 3 av licensen eller, om du så önskar, någon senare version.
+ NewPipe är fri programvara under en copyleft-licens: du får använda, studera, dela och förbättra programmet. Du får distribuera och ändra det enligt villkoren i GNU General Public License, version 3 eller, om du föredrar det, en senare version.
Senast spelade
Mest spelade
Exporterad
Importerad
Ogiltig ZIP-fil
Varning: det gick inte att importera alla filer.
- Det här kommer skriva över dina nuvarande inställningar.
+ Det här skriver över dina nuvarande inställningar.
Vill du också importera inställningar?
Öppna navigationspanelen
Stäng navigationspanelen
- Föredragen \"öppna\" åtgärd
+ Föredragen öppningsåtgärd
Standardåtgärden när du öppnar innehåll — %s
Videospelare
Bakgrundsspelare
@@ -267,101 +267,86 @@
Ta bort spellista\?
Spellistan skapades
Tillagd i spellistan
- Spellistans miniatyrbild förändrades.
+ Spellistans miniatyrbild har ändrats.
Ingen textning
Passa
Fyll
Zoom
Automatiskt genererad
Textning
- Ändra spelarens textskala och bakgrundsstil. Kräver att appen startas om för att träda i kraft
- Minnesläcka övervakning kan orsaka att appen inte svarar under heap dumpning
- Rapportera out-of-lifecycle fel
- Tvinga rapportering av otillåtna Rx-undantag utanför fragment eller aktivitetslivscykel efter uppstädning
+ Ändra spelarens textstorlek och bakgrundsstil. Appen måste startas om innan ändringarna börjar gälla.
+ Övervakning av minnesläckor kan göra att appen inte svarar när en heap-dump skapas
+ Rapportera fel utanför livscykeln
+ Tvinga rapportering av otillåtna Rx-undantag utanför fragmentets eller aktivitetens livscykel efter rensning
Importera
Importera från
Exportera till
- Importera…
+ Importerar…
Exporterar…
Importera fil
Föregående export
- Kunde inte importera prenumerationer
- kunde inte exportera prenumerationer
- Importera YouTube-prenumerationer från Google takeout:
-\n
-\n1. Gå till följande webbadress: %1$s
-\n2. Logga in när du blir tillfrågad
-\n3. Klicka på \"All YouTube-data tas med\", sen på \"Avmarkera alla\", välj sen bara \"prenumerationer\" och klicka på \"OK\"
-\n4. Klicka på \"Nästa steg\" och sen på \"Skapa export\"
-\n5. Klicka på \"Hämta\"-knappen när den kommer fram
-\n6. Klicka på IMPORTERA FIL nedan och välj den nedladdade zip-filen
-\n7. [Om zip-importen misslyckas] Packa upp .csv-filen (vanligtvis under \"YouTube och YouTube Musik/subscriptions/subscriptions.csv\"), klicka på IMPORTERA FIL nedan och välj den uppackade csv-filen
- Importera en SoundCloud-profil genom att skriva in webbadressen eller ditt ID:
-\n
-\n1. Aktivera \"skrivbordsläge\" i en webbläsare (sidan är inte tillgänglig för mobila enheter)
-\n2. Gå till följande webbadress: %1$s
-\n3. Logga in när du blir tillfrågad
-\n4. Kopiera profilens webbadress som du blev omdirigerad till.
+ Det gick inte att importera prenumerationerna
+ Det gick inte att exportera prenumerationerna
+ Importera YouTube-prenumerationer från Google Takeout: \n \n1. Gå till följande URL: %1$s \n2. Logga in när du blir ombedd \n3. Klicka på ”All YouTube-data tas med”, sedan på ”Avmarkera alla”, välj endast ”prenumerationer” och klicka på ”OK” \n4. Klicka på ”Nästa steg” och sedan på ”Skapa export” \n5. Klicka på knappen ”Hämta” när den visas \n6. Klicka på IMPORTERA FIL nedan och välj den hämtade ZIP-filen \n7. [Om ZIP-importen misslyckas] Packa upp CSV-filen, klicka på IMPORTERA FIL nedan och välj den uppackade filen
+ Importera en SoundCloud-profil genom att ange profilens URL eller ditt ID: \n \n1. Aktivera skrivbordsläget i en webbläsare eftersom sidan inte är tillgänglig för mobila enheter \n2. Gå till följande URL: %1$s \n3. Logga in när du blir ombedd \n4. Kopiera URL:en till profilen som du omdirigerades till.
dittID, soundcloud.com/dittid
- Tänk på att denna operation kan vara nätverksintensiv.
-\n
-\nVill du fortsätta\?
+ Den här åtgärden kan använda mycket nätverksdata. \n \nVill du fortsätta?
Kontroller för uppspelningshastighet
Tempo
Tonhöjd
- Avlänka (kan orsaka förvrängning)
- Snabbspola vid frånvaro av ljud
+ Koppla isär (kan orsaka distorsion)
+ Hoppa över tystnad
Steg
Återställ
- För att uppfylla EU:s allmänna dataskyddsförordning (GDPR), uppmärksammar vi härmed NewPipes sekretesspolicy. Var god och läs den noggrant. \nDu måste acceptera den för att kunna skicka felrapporten.
+ Läs NewPipes integritetspolicy noggrant. \nDu måste godkänna den för att kunna skicka felrapporten.
Acceptera
Avböj
Ingen gräns
- Begränsa upplösningen när du använder mobil data
- Minimera vid växling av applikationen
- Åtgärd när du växlar till andra applikationer från huvudvideospelare — %s
+ Begränsa upplösningen när mobildata används
+ Minimera när du lämnar appen
+ Åtgärd när du växlar från huvudvideospelaren till en annan app — %s
Ingen
Minimera till bakgrundsspelare
Minimera till popup-spelare
Sluta prenumerera
Välj flik
Uppdateringar
- Fil raderad
+ Filen har tagits bort
Avisering för appuppdatering
Aviseringar för nya NewPipe-versioner
Extern lagring otillgänglig
- Fel vid läsning av sparade flikar, använder standardflikar
+ Det gick inte att läsa in de sparade flikarna. Standardflikarna används.
Återställ standardvärden
- Vill du återställa till standard\?
+ Vill du återställa standardvärdena?
Antalet prenumeranter är otillgängligt
Vilka flikar visas på huvudsidan
Uppdateringar
- Visa avisering för att uppdatera appen när en ny version finns tillgänglig
+ Visa en avisering när en ny version av appen finns tillgänglig
Listvy
Lista
Rutnät
Automatisk
En NewPipe-uppdatering är tillgänglig!
- Färdig
+ Slutförda
pausad
köad
efterbehandling
Köa
- Åtgärden nekas av systemet
+ Systemet nekade åtgärden
Hämtningen misslyckades
Generera unikt namn
Skriv över
Det finns en pågående hämtning med det namnet
Visa fel
- Kunde inte fastställa en säker anslutning
- Kunde inte hitta servern
- Kunde inte ansluta till servern
+ Det gick inte att upprätta en säker anslutning
+ Det gick inte att hitta servern
+ Det gick inte att ansluta till servern
Servern skickar ingen data
- Servern accepterar inte flertrådade hämtningar, försök igen med @string/msg_threads = 1
+ Servern stöder inte flertrådade hämtningar. Försök igen med @string/msg_threads = 1.
Hittades inte
- Efterbehandling misslyckades
- Stanna
- Max försök
+ Efterbehandlingen misslyckades
+ Stoppa
+ Maximalt antal försök
Maximalt antal försök innan hämtningen avbryts
Händelser
Konferenser
@@ -372,11 +357,11 @@
Positioner i listor
Spela automatiskt
Rensa data
- Spola framåt/bakåt sökvaraktighet
+ Hoppintervall framåt och bakåt
Visa indikatorer för uppspelningsposition i listor
Ta bort uppspelningspositioner
PeerTube-instanser
- Välj dina favoritpeertube-instanser
+ Välj dina favoritinstanser på PeerTube
Hitta de instanser du gillar på %s
Lägg till instans
Ange instansens URL
@@ -387,7 +372,7 @@
Ta bort alla uppspelningspositioner\?
Tar bort alla uppspelningspositioner
Filen har flyttats eller tagits bort
- Hämtning till externt SD-kort är inte möjligt. Återställ hämtningsmappens plats\?
+ Det går inte att hämta till det externa SD-kortet. Vill du återställa hämtningsmappens plats?
Uppspelningspositionerna har tagits bort
Artister
Album
@@ -396,7 +381,7 @@
\n
\nOm du vill visa den aktiverar du \"%1$s\" i inställningarna.
Inga kommentarer
- Tryck på \"Klar\" när det är löst
+ Tryck på ”Klar” när du är färdig
∞ videor
100+ videor
@@ -420,8 +405,8 @@
En fil med det namnet finns redan
återhämtar
Väntande
- Originaltexter från tjänster kommer att synas i streamobjekt
- Visa ursprungstid på objekt
+ Visa tjänsternas ursprungliga tidsangivelser för strömmar
+ Visa ursprungliga tidsangivelser
Automatiskt genererad (ingen uppladdare hittades)
Slå på ljudet
Tysta
@@ -433,11 +418,11 @@
Det gick inte att läsa in kommentarerna
Inaktivera snabbläge
Aktivera snabbläge
- Det är tillgängligt i vissa tjänster och är vanligtvis mycket snabbare, men kan returnera en begränsad mängd objekt och ofta ofullständig information (t.ex. ingen speltid, objekttyp, ingen live-status)
- Hämta från dedikerat flöde när det finns tillgängligt
+ Funktionen finns för vissa tjänster och är vanligtvis mycket snabbare, men kan ge färre objekt och ofullständig information, till exempel utan speltid, objekttyp eller direktsändningsstatus
+ Använd ett särskilt snabbflöde när det är tillgängligt
Uppdatera alltid
- Tid efter senaste uppdatering innan en prenumeration anses vara föråldrad — %s
- Tröskel för uppdatering av flöde
+ Tid sedan den senaste uppdateringen innan en prenumeration betraktas som inaktuell — %s
+ Tidsgräns för flödesuppdatering
Flöde
Ny
Vill du ta bort den här gruppen\?
@@ -469,35 +454,34 @@
- %d sekund
- %d sekunder
- På grund av ExoPlayer-begränsningar sattes söktiden till %d sekunder
+ På grund av begränsningar i ExoPlayer sattes hoppintervallet till %d sekunder
Ja, och delvis tittade videor
- Strömningar som har spelats före och efter att de har lagts till i spellistan kommer att tas bort. \nÄr du säker?
+ Strömmar som har spelats upp både före och efter att de lades till i spellistan tas bort. \nVill du fortsätta?
Ta bort tittade strömningar?
Ta bort tittade
- Systemstandard
+ Systemets standardspråk
Appspråk
Välj en instans
- \"Storage Access Framework\" möjliggör hämtningar till ett externt SD-kort
+ Med Storage Access Framework kan filer hämtas till ett externt SD-kort
Använd systemmappväljaren (SAF)
- Du kommer att bli tillfrågad var du vill spara varje hämtning.
-\nAktivera systemmappväljaren (SAF) om du vill hämta till ett externt SD-kort
+ Du får välja var varje hämtning ska sparas. \nAktivera systemmappväljaren (SAF) om du vill hämta till ett externt SD-kort
Fråga var filen ska sparas
Pausa hämtningar
Starta hämtningar
En hämtning körs samtidigt
Begränsa hämtningskön
- Stäng ner
- Användbart vid byte till mobildata, även om vissa hämtningar inte kan avbrytas
- Avbryt på uppmätta nätverk
+ Stäng
+ Användbart vid byte till mobildata, även om vissa hämtningar inte kan pausas
+ Pausa i nätverk med datagräns
Ta bort hämtade filer
Vill du rensa din hämtningshistorik eller ta bort alla hämtade filer\?
Rensa hämtningshistorik
Kan inte återställa den här hämtningen
- Anslutningsavbrott
- Förloppet gick förlorat eftersom filen togs bort
+ Tidsgränsen för anslutningen överskreds
+ Hämtningsförloppet gick förlorat eftersom filen togs bort
Inget utrymme kvar på enheten
- NewPipe stängdes under arbete med en fil
- Vänligen kontrollera om en felrapport som tar upp din krasch redan finns. Att skapa ärenden när en felrapport redan finns, tar av den tid som vi annars kunde ha ägnat åt att fixa den faktiska buggen.
+ NewPipe stängdes medan en fil bearbetades
+ Kontrollera först om det redan finns en felrapport om kraschen. Dubbletter tar tid från arbetet med att åtgärda själva felet.
Rapportera på GitHub
Kopiera formaterad felrapport
Visar resultat för: %s
@@ -508,14 +492,14 @@
Visa endast prenumerationer som inte grupperats
Beskär miniatyrbild till 1:1-bildförhållande
Endast över Wi-Fi
- Beskär videominiatyrbilden som visas i aviseringen från 16:9 till 1:1 bildförhållande
+ Beskär videominiatyrbilden i aviseringen från bildförhållandet 16:9 till 1:1
Starta uppspelning automatiskt — %s
Uppspelningskö
- Kunde inte känna igen URL:en. Vill du öppna med annan app\?
+ URL:en kunde inte identifieras. Vill du öppna den med en annan app?
Köa automatiskt
Den aktiva uppspelningskön kommer att ersättas
Att byta från en spelare till en annan kan ersätta din kö
- Fråga om bekräftelse innan en kö töms
+ Bekräfta innan uppspelningskön ersätts
Buffring
Upprepa
Femte åtgärdsknappen
@@ -523,9 +507,7 @@
Tredje åtgärdsknappen
Andra åtgärdsknappen
Första åtgärdsknappen
- Detta innehåll stöds ännu inte av NewPipe.
-\n
-\nDetta kommer förhoppningsvis ändras i en kommande version.
+ NewPipe stöder ännu inte det här innehållet. \n \nDet kan ändras i en kommande version.
Spellistesida
Aldrig
Ingenting
@@ -547,10 +529,10 @@
Tycker du att inläsningen av flödet är för långsamt? Testa i så fall att aktivera snabbinläsning (du kan ändra det i inställningarna eller genom att trycka på knappen nedan). \n \nNewPipe erbjuder två strategier för att ladda flödet: \n• Att hämta hela den prenumererade kanalen, vilket är långsamt, men komplett. \n• Att använda en \"särskild tjänsteslutpunkt\", vilket är snabbt, men vanligtvis inte komplett. \n \nSkillnaden mellan de två är att den snabba varianten ofta saknar viss information, som objektets speltid eller typ (kan inte skilja på livevideor och vanliga videor) och den kan returnera färre objekt. \n \nYouTube är ett exempel på en tjänst som erbjuder denna snabba metod genom sitt RSS-flöde. \n \nSå valet handlar i grunden om vad du föredrar: hastighet eller precis information.
Inaktivera för att dölja rutor med metainformation som ytterligare information om strömmens skapare, strömmens innehåll eller sökord
Inaktivera för att dölja videobeskrivning och ytterligare information
- Visa meta-information
+ Visa metainformation
Använd miniatyrbild som bakgrund till både låsskärm och aviseringar
Redigera varje aviseringsåtgärd nedan genom att trycka på den. Välj upp till tre av dem som ska visas i den kompakta aviseringen genom att använda kryssrutorna till höger.
- Låt Android färglägga varje avisering individuellt utifrån miniatyrbildens huvudsakliga färg (notera att detta inte är tillgängligt på alla enheter)
+ Låt Android färglägga varje avisering utifrån miniatyrbildens huvudsakliga färg. Funktionen finns inte på alla enheter.
Färglägg avisering
Du kan som mest välja tre åtgärder att visa i den kompakta aviseringen!
Lös
@@ -576,15 +558,13 @@
Denna video är endast tillgänglig för YouTube Music Premium-medlemmar, så den kan inte strömmas eller hämtas av NewPipe.
Detta innehåll är privat, så det kan inte strömmas eller hämtas av NewPipe.
Detta innehåll är inte tillgängligt i ditt land.
- Ingen app på din enhet kan öppna detta
+ Det finns ingen app på enheten som kan öppna detta
Kapitel
Det gick inte att läsa in flödet för \"%s\".
- Innehållsskaparens konto har avslutats.
-\nNewPipe kommer framöver inte kunna läsa in detta flöde.
-\nVill du avsluta din prenumeration på denna kanal\?
+ Innehållsskaparens konto har avslutats. \nNewPipe kommer inte längre att kunna läsa in flödet. \nVill du avsluta prenumerationen på kanalen?
Du kommer att tillfrågas var varje hämtning ska sparas
Visa kanaldetaljer
- Ingen hämtningsmapp har ställts in ännu, välj standardmapp för hämtning nu
+ Ingen hämtningsmapp har angetts. Välj en standardmapp för hämtningar.
Beräknar hash
Visa inte
Låg kvalitet (mindre)
@@ -599,20 +579,20 @@
Visa beskrivning
Öppna med
Visa miniatyrer
- Kanalens visningsminiatyr
+ Underkanalens miniatyrbild
Det snabba flödesläget ger inte mer information om detta.
Fel vid inläsning av flödet
Markera som sedd
- Ej listad
+ Olistad
Aktuellt
- Natt-tema
+ Nattema
Aviseringar för videohashningsframsteg
Inaktivera medietunnel om du upplever en svart skärm eller att videouppspelningen hackar.
Inaktivera medietunnel
Hjärtmärkt av innehållsskaparen
- Du kan välja det natt-tema du föredrar nedan
- Välj det natt-tema du föredrar — %s
- Sökradens förhandsvisningsminiatyr
+ Du kan välja önskat nattema nedan
+ Välj önskat nattema — %s
+ Förhandsvisning i sökfältet
Lokala sökförslag
- Tog bort %1$s nedladdning
@@ -629,7 +609,7 @@
Senaste
Svep objekt för att ta bort dem
Förslag via fjärrsökning
- Starta inte videor i minispelaren, utan byt till helskärmsläge direkt, om automatisk rotation är låst. Du kan fortfarande komma åt minispelaren genom att gå ut ur helskärmsläge
+ Starta videor direkt i helskärmsläge i stället för i minispelaren när automatisk rotation är låst. Du kan fortfarande öppna minispelaren genom att lämna helskärmsläget.
Sök efter uppdateringar
Sök manuellt efter nya versioner
Söker efter uppdateringar…
@@ -637,41 +617,40 @@
Visa \"Krascha spelaren\"
Krascha spelaren
Visar ett kraschalternativ vid användning av spelaren
- Felrapport-avisering
- Aviseringar om att rapportera fel
- NewPipe stötte på ett fel, tryck för att rapportera
- Ett fel uppstod, se aviseringen
- Visa ett felmeddelande i snackbar
+ Aviseringar om felrapporter
+ Aviseringar för rapportering av fel
+ NewPipe stötte på ett fel. Tryck för att rapportera det.
+ Ett fel inträffade. Se aviseringen.
+ Visa ett tillfälligt felmeddelande
Skapa en felavisering
- Ingen lämplig filhanterare hittades för denna åtgärd.
-\nInstallera en filhanterare eller testa att inaktivera \'%s\' i nedladdningsinställningarna
+ Ingen lämplig filhanterare hittades för åtgärden. \nInstallera en filhanterare eller prova att inaktivera \'%s\' i hämtningsinställningarna
Ingen lämplig filhanterare hittades för denna åtgärd.
\nInstallera en filhanterare som är kompatibel med Storage Access Framework
Fäst kommentar
LeakCanary är inte tillgänglig
ExoPlayer-standard
- Ändra storleken på laddningsintervallet för progressivt innehåll (för närvarande %s). Ett lägre värde kan påskynda den första laddningen
+ Ändra storleken på inläsningsintervallet för progressivt innehåll (för närvarande %s). Ett lägre värde kan påskynda den första inläsningen.
Uppdateringsintervall
Nödvändig nätverksanslutning
Alla nätverk
Radera alla nedladdade filer från disken\?
Aviseringar är avstängda
- Bli meddelad
+ Aktivera aviseringar
Du prenumererar nu på denna kanal
Aviseringar om nya strömningar för prenumerationer
- %s ny strömning
- %s nya strömningar
- Konfigurera meddelande om aktuell ström som spelas upp
+ Konfigurera aviseringen för strömmen som spelas upp
Sök efter nya strömningar
Meddela om nya strömningar från prenumerationer
Aviseringar
Nya strömningar
- Laddar strömdetaljer…
+ Läser in information om strömmen…
Aviseringar om nya strömningar
,
- Spelaravisering
+ Spelaraviseringar
Växla alla
Procent
Halvton
@@ -680,63 +659,63 @@
Inga ljudströmningar tillgängliga för externa spelare
Okänt format
Videoströmningar som ännu inte stöds av nedladdaren visas inte
- Inläsningsintervallsstorlek
+ Storlek på inläsningsintervall
Välj kvalitet för externa spelare
Den valda videoströmmen stöds inte av externa spelare
- Om du har problem med att använda appen, se till att läsa dessa svar på några vanliga frågor!
+ Läs svaren på vanliga frågor om du har problem med att använda appen.
Vanliga frågor
Visa på webbplatsen
Sortera
- Importera eller exportera prenumerationer från 3-punktsmenyn
- Snabbt läge
+ Importera eller exportera prenumerationer från trepunktsmenyn
+ Snabbläge
Du använder den senaste versionen av NewPipe
- Tryck för att ladda ner %s
- Det här alternativet är endast tillgängligt om %s har valts som Tema
- Inaktivera permanent miniatyrbild
+ Tryck för att hämta %s
+ Det här alternativet är endast tillgängligt när %s har valts som tema
+ Ta bort den permanenta miniatyrbilden
Det gick inte att kopiera till urklipp
Kort
- Dubblett tillagd %d gång(er)
+ Antal tillagda dubbletter: %d
Spellistor som är gråmarkerade innehåller redan det här objektet.
Användbart om du till exempel använder ett headset med trasiga fysiska knappar
Ignorera hårdvarans mediaknappar
Ta bort dubbletter\?
Visa följande strömningar
Delvis sedd
- Vill du ta bort alla duplicerade strömningar i den här spellistan\?
+ Vill du ta bort alla dubbletter i den här spellistan?
Ta bort dubbletter
- Visa/Dölj strömningar
+ Visa eller dölj strömmar
Fullständigt sedd
Kommande
Volym
Ingen
- Välj en gest för den vänstra halvan av spelarskärmen
+ Välj gest för vänstra halvan av spelarskärmen
Ljusstyrka
- Åtgärd för vänstergest
- Välj en gest för den högra halvan av spelarskärmen
- Åtgärd för högergest
+ Gest på vänster sida
+ Välj gest för högra halvan av spelarskärmen
+ Gest på höger sida
Ljud: %s
Ljudspår
- Ett ljudspår bör redan finnas i denna ström
+ Det finns redan ett ljudspår i den här strömmen
Välj ljudspår för externa spelare
Okänt
ExoPlayer-inställningar
- Hantera vissa ExoPlayer-inställningar. Ändringarna kräver att spelaren startas om för att träda i kraft
+ Hantera vissa ExoPlayer-inställningar. Spelaren måste startas om innan ändringarna börjar gälla.
Använd alltid ExoPlayers lösning för inställning av videoutgångsyta
Föredra originalljud
Välj originalljudspåret oavsett språk
- Föredra beskrivande ljud
- Välj ett ljudspår med beskrivningar för synskadade personer om det finns tillgängligt
- Använd ExoPlayers reservfunktion för avkodare
+ Föredra syntolkning
+ Välj ett syntolkat ljudspår för personer med synnedsättning när ett sådant finns
+ Använd ExoPlayers reservavkodare
Aktivera det här alternativet om du har problem med att initiera avkodare. ExoPlayer försöker då använda avkodare med lägre prioritet om de primära avkodarna inte kan initieras. Detta kan ge sämre uppspelningsprestanda än när de primära avkodarna används
Denna lösning frigör och skapar om videokodekar när videoytan ändras, i stället för att ställa in ytan direkt i kodeken. ExoPlayer använder redan detta på vissa enheter med det här problemet, så inställningen har bara effekt på Android 6 och senare.\n\nOm du aktiverar alternativet kan det förhindra uppspelningsfel när du byter videospelare eller växlar till fullskärm
%1$s %2$s
original
beskrivande
dubbad
- Flytta huvudfliksväljaren längst ned
- Huvudflikarnas position
+ Placera väljaren för huvudflikar längst ned
+ Huvudflikarnas placering
Inga strömningar
- Inga live-strömningar
+ Inga direktsändningar
Medietunnel har inaktiverats som standard på din enhet eftersom enhetsmodellen inte stöder funktionen.
Bildkvalitet
Videor
@@ -746,12 +725,12 @@
Kanalflikar
Shorts
Laddar metadata…
- Aktivera skärmorientering
+ Växla skärmorientering
Låg kvalitet
- Aktivera helskärm
+ Växla helskärmsläge
Hämta kanalflikar
Nästa strömning
- Öppna spelkö
+ Öppna uppspelningskön
Ladda inte bilder
Hög kvalitet
Om
@@ -769,25 +748,25 @@
Längd
Kanaler
Föregående strömning
- Live
+ Direktsändningar
\?
Dela med titlar
%1$s
\n%2$s
- Visningsbilder
- Underkanalens visningsbilder
+ Profilbilder
+ Underkanalens profilbilder
Flikar att hämta när flödet uppdateras. Det här alternativet har ingen effekt om en kanal uppdateras i snabbt läge.
- Uppladdarens visningsbilder
+ Uppladdarens profilbilder
Banderoller
- %1$s: %2$s
- Välj bildkvalitet och om bilder överhuvudtaget ska laddas för att minska data- och minnesanvändningen. Ändringar rensar både i minnet och bildcachen på disk – %s
+ Välj bildkvalitet eller inaktivera bildinläsning för att minska data- och minnesanvändningen. När inställningen ändras rensas både minnescachen och bildcachen på lagringsenheten — %s
Visa mer
- %s svar
- %s svar
Visa mindre
- Redigera varje aviseringsåtgärd nedan genom att trycka på den. De tre första åtgärderna (spela/pausa, föregående och nästa) är satta av systemet och kan inte ändras.
+ Redigera aviseringsåtgärderna genom att trycka på dem. De tre första åtgärderna – spela/pausa, föregående och nästa – bestäms av systemet och kan inte ändras.
Inte tillräckligt med ledigt utrymme på enheten
Nej
Säkerhetskopiering och återställning
@@ -795,10 +774,8 @@
NewPipe kan automatiskt söka efter nya versioner då och då och meddela dig när de är tillgängliga. \nVill du aktivera det?
Återställ inställningar
Återställ alla inställningar till deras standardvärden
- Om du återställer alla inställningar försvinner alla dina föredragna inställningar och appen startas om.
-\n
-\nÄr du säker på att du vill fortsätta?
- Inställningarna i exporten du importerar använder ett sårbart format som fasades ut i NewPipe 0.27.0. Kontrollera att exporten kommer från en betrodd källa och överväg att framöver bara använda exporter från NewPipe 0.27.0 eller senare. Stödet för att importera inställningar i det här sårbara formatet kommer snart att tas bort helt. Då kommer äldre versioner av NewPipe inte längre att kunna importera inställningsexporter från nyare versioner.
+ Om du återställer alla inställningar försvinner dina anpassningar och appen startas om. \n \nVill du fortsätta?
+ Inställningarna i exporten använder ett sårbart format som fasades ut i NewPipe 0.27.0. Kontrollera att exporten kommer från en betrodd källa och använd framöver exporter från NewPipe 0.27.0 eller senare. Stödet för det äldre formatet kommer snart att tas bort helt.
sekundär
Dela som tillfällig YouTube-spellista
Spellistor
@@ -814,22 +791,22 @@
SoundCloud Topp 50-sida borttagen
SoundCloud har lagt ner de ursprungliga topp 50-listorna. Motsvarande flik har tagits bort från din startsida.
YouTubes kombinerade trender har tagits bort
- YouTube har upphört med den kombinerade trendsidan från och med den 21 juli 2025. NewPipe ersatte standardtrendsidan med trendiga livestreams.\n\nDu kan också välja olika trendsidor i \"Inställningar > Innehåll > Innehåll på huvudsidan\".
+ YouTube tog bort den kombinerade trendsidan den 21 juli 2025. NewPipe ersatte standardtrendsidan med populära direktsändningar. \nDu kan välja andra trendsidor under ”Inställningar > Innehåll > Innehåll på huvudsidan”.
Speltrender
- Trendiga poddar
+ Populära poddar
Populära filmer och serier
Populär musik
- För att använda popupspelaren, välj %1$s i följande Android-inställningsmeny och aktivera %2$s.
+ För att använda popupspelaren väljer du %1$s i Android-inställningarna och aktiverar %2$s.
\"Tillåt visning över andra appar\"
Ta bort fil
Ta bort post
Konto avslutat\n\n%1$s anger denna anledning: %2$s
Posten borttagen
- HTTP-fel 403 mottogs från servern under uppspelning, troligen orsakat av att strömnings-URL:en har löpt ut eller att en IP-adress har blockerats
- HTTP-fel %1$s mottogs från servern under uppspelning
- HTTP-fel 403 mottogs från servern under uppspelning, troligen orsakat av en IP-blockering eller problem med deobfuskering av strömnings-URL:er
- %1$s vägrade att lämna ut data och bad om en inloggning för att bekräfta att den som begärde detta inte är en bot.\n\nDin IP-adress kan ha blivit tillfälligt avstängd av %1$s. Du kan vänta en stund eller byta till en annan IP-adress (till exempel genom att slå på/av ett VPN eller genom att byta från Wi-Fi till mobildata).\n\nSe denna FAQ-post för mer information.
- Detta innehåll är inte tillgängligt för det valda innehållslandet.\n\nÄndra ditt val från \"Inställningar > Innehåll > Standardinnehållsland\".
+ Servern svarade med HTTP-fel 403 under uppspelningen. Strömnings-URL:en kan ha löpt ut eller IP-adressen kan ha blockerats.
+ Servern svarade med HTTP-fel %1$s under uppspelningen
+ Servern svarade med HTTP-fel 403 under uppspelningen, troligen på grund av en IP-blockering eller problem med avobfuskering av strömnings-URL:er
+ %1$s vägrade att lämna ut uppgifter och krävde inloggning för att bekräfta att begäran inte kommer från en robot.\n\nDin IP-adress kan ha blockerats tillfälligt av %1$s. Vänta en stund eller byt IP-adress, till exempel genom att slå av och på en VPN-anslutning eller växla mellan Wi-Fi och mobildata.\n\nLäs avsnittet i vanliga frågor för mer information.
+ Innehållet är inte tillgängligt i det valda innehållslandet. \nÄndra valet under ”Inställningar > Innehåll > Standardinnehållsland”.
I augusti 2025 meddelade Google att från och med september 2026 kommer installation av appar att kräva utvecklarverifiering för alla Android-appar på certifierade enheter, inklusive de som installerats utanför Play Store. Eftersom utvecklarna av NewPipe inte godkänner detta krav kommer NewPipe inte längre att fungera på certifierade Android-enheter efter den tiden.
Detaljer
Lösning
@@ -843,14 +820,14 @@
Importera prenumerationer
Exportera prenumerationer
- Importera prenumerationer från en tidigare .json-export
- Exportera dina prenumerationer till en .json-fil
+ Importera prenumerationer från en tidigare JSON-export
+ Exportera prenumerationerna till en JSON-fil
Importera från tidigare export
- Läser in %d prenumeration…
- Läser in %d prenumerationer…
- NewPipe slutar stödja Android 5
+ NewPipe upphör med stödet för Android 5
Tyvärr är NewPipe beroende av ett fåtal bibliotek som slutat stödja Android 5.0 och 5.1. Nästa NewPipe-utgåva kommer därför tyvärr bara att fungera på enheter med Android 6 eller senare. Läs mer i blogginlägget.
Blogginlägg
diff --git a/app/src/main/res/values-tok/strings.xml b/app/src/main/res/values-tok/strings.xml
index 9004a656d..8b6fef40b 100644
--- a/app/src/main/res/values-tok/strings.xml
+++ b/app/src/main/res/values-tok/strings.xml
@@ -48,4 +48,5 @@
nasin lipu kalama mute
nasin lipu pi sitelen tawa mute
walo
-
\ No newline at end of file
+ open
+
From 7c42c8612ab747632ab03245a752c3af2a6a7013 Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Wed, 22 Jul 2026 07:55:35 +0530
Subject: [PATCH 004/155] Replace KeyboardUtil with library helper class
---
.../fragments/list/search/SearchFragment.java | 7 +-
.../newpipe/settings/SettingsActivity.java | 7 +-
.../org/schabi/newpipe/util/KeyboardUtil.java | 65 -------------------
3 files changed, 7 insertions(+), 72 deletions(-)
delete mode 100644 app/src/main/java/org/schabi/newpipe/util/KeyboardUtil.java
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
index 5c0d7d321..e37226c00 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
@@ -36,6 +36,7 @@ import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.TooltipCompat;
import androidx.collection.SparseArrayCompat;
import androidx.core.text.HtmlCompat;
+import androidx.core.view.SoftwareKeyboardControllerCompat;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView;
@@ -68,7 +69,6 @@ import org.schabi.newpipe.settings.NewPipeSettings;
import org.schabi.newpipe.util.Constants;
import org.schabi.newpipe.util.DeviceUtils;
import org.schabi.newpipe.util.ExtractorHelper;
-import org.schabi.newpipe.util.KeyboardUtil;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ServiceHelper;
@@ -683,15 +683,14 @@ public class SearchFragment extends BaseListFragment
- * See also https://stackoverflow.com/q/1109022
- *
- */
-public final class KeyboardUtil {
-
- /**
- * Flag for {@link #hideKeyboard(Activity, EditText)} to force the keyboard to hide.
- * This is required for non-touch devices like Fire TV where the system
- * flags the focus as an explicit user action.
- */
- private static final int CLEAR_SOFT_INPUT_FORCED = 0;
-
- private KeyboardUtil() {
- }
-
- public static void showKeyboard(final Activity activity, final EditText editText) {
- if (activity == null || editText == null) {
- return;
- }
-
- if (editText.requestFocus()) {
- final InputMethodManager imm = ContextCompat.getSystemService(activity,
- InputMethodManager.class);
-
- if (!imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED)) {
- /*
- * Sometimes the keyboard can't be shown because Android's ImeFocusController is in
- * a incorrect state e.g. when animations are disabled or the unfocus event of the
- * previous view arrives in the wrong moment (see #7647 for details).
- * The invalid state can be fixed by to re-focusing the editText.
- */
- editText.clearFocus();
- editText.requestFocus();
-
- // Try again
- imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
- }
- }
- }
-
- public static void hideKeyboard(final Activity activity, final EditText editText) {
- if (activity == null || editText == null) {
- return;
- }
-
- final InputMethodManager imm = ContextCompat.getSystemService(activity,
- InputMethodManager.class);
- if (imm != null) {
- imm.hideSoftInputFromWindow(editText.getWindowToken(), CLEAR_SOFT_INPUT_FORCED);
- }
-
- editText.clearFocus();
- }
-}
From a9f91e692870acfafcbbf1ef4bd43e210746cebb Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Wed, 22 Jul 2026 20:45:55 +0530
Subject: [PATCH 005/155] Fixed cursor issue
---
.../org/schabi/newpipe/fragments/list/search/SearchFragment.java | 1 +
.../main/java/org/schabi/newpipe/settings/SettingsActivity.java | 1 +
2 files changed, 2 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
index e37226c00..a84f95855 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
@@ -691,6 +691,7 @@ public class SearchFragment extends BaseListFragment
Date: Wed, 15 Jul 2026 17:39:55 +0200
Subject: [PATCH 006/155] Mention word mark in README
---
README.md | 2 ++
doc/README.de.md | 2 ++
2 files changed, 4 insertions(+)
diff --git a/README.md b/README.md
index 65a219481..02a75ab83 100644
--- a/README.md
+++ b/README.md
@@ -28,6 +28,8 @@
> THIS APP IS IN BETA, SO YOU MAY ENCOUNTER BUGS. IF YOU DO, OPEN AN ISSUE IN OUR GITHUB REPOSITORY BY FILLING OUT THE ISSUE TEMPLATE.
>
> PUTTING NEWPIPE, OR ANY FORK OF IT, INTO THE GOOGLE PLAY STORE VIOLATES THEIR TERMS AND CONDITIONS.
+>
+> "NewPipe" IS A REGISTERED WORD MARK SUBJECT TO [ITS TRADEMARK POLICY](https://newpipe-ev.de/policy/trademark/). INFINGING APPLICATIONS ARE NOT TOLERATED.
## Screenshots
diff --git a/doc/README.de.md b/doc/README.de.md
index 2c5a8849e..9ebd52957 100644
--- a/doc/README.de.md
+++ b/doc/README.de.md
@@ -28,6 +28,8 @@
> DIESE APP BEFINDET SICH IN EINER BETA-PHASE, DAHER KÖNNTEST DU BUGS BEGEGNEN. FALLS DIES PASSIERT, ERSTELLE EIN ISSUE (AUF ENGLISCH) IN UNSEREM GITHUB REPOSITORY, INDEM DU DIE VORLAGE DORT AUSFÜLLST.
>
> NEWPIPE, ODER JEGLICHEN FORK DAVON, IM GOOGLE PLAYSTORE ANZUBIETEN, VERLETZT DESSEN GESCHÄFTSBEDINGUNGEN.
+>
+> "NewPipe" IST EINE EINGETRAGENE WORTMARKE UND UNTERLIEGT [EINER MARKENRICHTLINIE](https://newpipe-ev.de/policy/trademark/). DAGEGEN VERSTOẞENDE APPS WERDEN NICHT TOLERIERT.
## Screenshots
From c0524d7c3133f32eeab8441334ce66c1ebe26515 Mon Sep 17 00:00:00 2001
From: fynngodau
Date: Wed, 15 Jul 2026 17:59:51 +0200
Subject: [PATCH 007/155] Improve word mark phrasing in README
Co-authored-by: Clippy <22662897+absurdlylongusername@users.noreply.github.com>
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 02a75ab83..b95bdd97a 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@
>
> PUTTING NEWPIPE, OR ANY FORK OF IT, INTO THE GOOGLE PLAY STORE VIOLATES THEIR TERMS AND CONDITIONS.
>
-> "NewPipe" IS A REGISTERED WORD MARK SUBJECT TO [ITS TRADEMARK POLICY](https://newpipe-ev.de/policy/trademark/). INFINGING APPLICATIONS ARE NOT TOLERATED.
+> "NewPipe" IS A REGISTERED WORD MARK SUBJECT TO [ITS TRADEMARK POLICY](https://newpipe-ev.de/policy/trademark/). INFINGING APPLICATIONS WILL NOT BE TOLERATED.
## Screenshots
From 10144cbf9ce52409ec39329558ec1e7f4109fe6a Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 30 Jul 2026 05:48:45 -0700
Subject: [PATCH 008/155] Improve look of search menu "titles" (#13605)
(#13738)
(cherry picked from commit 3a3eac0cf242a855165a3c064e890aeed7e61792)
Co-authored-by: Thompson3142 <115718208+Thompson3142@users.noreply.github.com>
---
.../fragments/list/search/SearchFragment.java | 36 +++++++++++++++----
1 file changed, 29 insertions(+), 7 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
index a84f95855..bb703d4f3 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
@@ -10,12 +10,19 @@ import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.graphics.Color;
+import android.graphics.Typeface;
import android.os.Bundle;
import android.text.Editable;
import android.text.Html;
+import android.text.Layout;
+import android.text.SpannableString;
import android.text.TextUtils;
import android.text.TextWatcher;
+import android.text.style.AlignmentSpan;
import android.text.style.CharacterStyle;
+import android.text.style.ForegroundColorSpan;
+import android.text.style.StyleSpan;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -453,22 +460,28 @@ public class SearchFragment extends BaseListFragment
Date: Sun, 1 Feb 2026 17:05:44 +0900
Subject: [PATCH 009/155] Fix audio ducking issue by using Android's automatic
audio focus management
Previously, manual audio focus handling caused volume to not be restored after transient ducking on some devices.
This change removes manual AudioFocusRequest management and relies on ExoPlayer's built-in audio focus handling (handleAudioFocus=true), which properly manages automatic ducking as recommended in: https://developer.android.com/media/optimize/audio-focus#automatic-ducking
Fixes #9710
---
.../org/schabi/newpipe/player/Player.java | 23 ++---
.../newpipe/player/helper/AudioReactor.java | 95 +------------------
2 files changed, 10 insertions(+), 108 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/Player.java b/app/src/main/java/org/schabi/newpipe/player/Player.java
index e458b707e..0605b262a 100644
--- a/app/src/main/java/org/schabi/newpipe/player/Player.java
+++ b/app/src/main/java/org/schabi/newpipe/player/Player.java
@@ -634,6 +634,15 @@ public final class Player implements PlaybackListener, Listener {
simpleExoPlayer.setWakeMode(C.WAKE_MODE_NETWORK);
simpleExoPlayer.setHandleAudioBecomingNoisy(true);
+ // Enable automatic audio focus management - let Android handle ducking automatically
+ simpleExoPlayer.setAudioAttributes(
+ new com.google.android.exoplayer2.audio.AudioAttributes.Builder()
+ .setUsage(C.USAGE_MEDIA)
+ .setContentType(C.AUDIO_CONTENT_TYPE_MUSIC)
+ .build(),
+ true // handleAudioFocus = true for automatic management
+ );
+
audioReactor = new AudioReactor(context, simpleExoPlayer);
registerBroadcastReceiver();
@@ -1173,10 +1182,6 @@ public final class Player implements PlaybackListener, Listener {
}
UIs.call(PlayerUi::onPrepared);
-
- if (playWhenReady && !isMuted()) {
- audioReactor.requestAudioFocus();
- }
}
private void onBlocked() {
@@ -1324,11 +1329,6 @@ public final class Player implements PlaybackListener, Listener {
public void toggleMute() {
final boolean wasMuted = isMuted();
simpleExoPlayer.setVolume(wasMuted ? 1 : 0);
- if (wasMuted) {
- audioReactor.requestAudioFocus();
- } else {
- audioReactor.abandonAudioFocus();
- }
UIs.call(playerUi -> playerUi.onMuteUnmuteChanged(!wasMuted));
notifyPlaybackUpdateToListeners();
}
@@ -1740,10 +1740,6 @@ public final class Player implements PlaybackListener, Listener {
return;
}
- if (!isMuted()) {
- audioReactor.requestAudioFocus();
- }
-
if (currentState == STATE_COMPLETED) {
if (playQueue.getIndex() == 0) {
seekToDefault();
@@ -1771,7 +1767,6 @@ public final class Player implements PlaybackListener, Listener {
return;
}
- audioReactor.abandonAudioFocus();
simpleExoPlayer.pause();
saveStreamProgressState();
}
diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java b/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java
index 084336d54..2ec33dc0f 100644
--- a/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java
+++ b/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java
@@ -1,54 +1,36 @@
package org.schabi.newpipe.player.helper;
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.audiofx.AudioEffect;
-import android.util.Log;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
-import androidx.media.AudioFocusRequestCompat;
import androidx.media.AudioManagerCompat;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.analytics.AnalyticsListener;
-public class AudioReactor implements AudioManager.OnAudioFocusChangeListener, AnalyticsListener {
+public class AudioReactor implements AnalyticsListener {
private static final String TAG = "AudioFocusReactor";
- private static final int DUCK_DURATION = 1500;
- private static final float DUCK_AUDIO_TO = .2f;
-
- private static final int FOCUS_GAIN_TYPE = AudioManagerCompat.AUDIOFOCUS_GAIN;
private static final int STREAM_TYPE = AudioManager.STREAM_MUSIC;
private final ExoPlayer player;
private final Context context;
private final AudioManager audioManager;
- private final AudioFocusRequestCompat request;
-
public AudioReactor(@NonNull final Context context,
@NonNull final ExoPlayer player) {
this.player = player;
this.context = context;
this.audioManager = ContextCompat.getSystemService(context, AudioManager.class);
player.addAnalyticsListener(this);
-
- request = new AudioFocusRequestCompat.Builder(FOCUS_GAIN_TYPE)
- //.setAcceptsDelayedFocusGain(true)
- .setWillPauseWhenDucked(true)
- .setOnAudioFocusChangeListener(this)
- .build();
}
public void dispose() {
- abandonAudioFocus();
player.removeAnalyticsListener(this);
notifyAudioSessionUpdate(false, player.getAudioSessionId());
}
@@ -57,14 +39,6 @@ public class AudioReactor implements AudioManager.OnAudioFocusChangeListener, An
// Audio Manager
//////////////////////////////////////////////////////////////////////////*/
- public void requestAudioFocus() {
- AudioManagerCompat.requestAudioFocus(audioManager, request);
- }
-
- public void abandonAudioFocus() {
- AudioManagerCompat.abandonAudioFocusRequest(audioManager, request);
- }
-
public int getVolume() {
return audioManager.getStreamVolume(STREAM_TYPE);
}
@@ -77,73 +51,6 @@ public class AudioReactor implements AudioManager.OnAudioFocusChangeListener, An
return AudioManagerCompat.getStreamMaxVolume(audioManager, STREAM_TYPE);
}
- /*//////////////////////////////////////////////////////////////////////////
- // AudioFocus
- //////////////////////////////////////////////////////////////////////////*/
-
- @Override
- public void onAudioFocusChange(final int focusChange) {
- Log.d(TAG, "onAudioFocusChange() called with: focusChange = [" + focusChange + "]");
- switch (focusChange) {
- case AudioManager.AUDIOFOCUS_GAIN:
- onAudioFocusGain();
- break;
- case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
- onAudioFocusLossCanDuck();
- break;
- case AudioManager.AUDIOFOCUS_LOSS:
- case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
- onAudioFocusLoss();
- break;
- }
- }
-
- private void onAudioFocusGain() {
- Log.d(TAG, "onAudioFocusGain() called");
- player.setVolume(DUCK_AUDIO_TO);
- animateAudio(DUCK_AUDIO_TO, 1.0f);
-
- if (PlayerHelper.isResumeAfterAudioFocusGain(context)) {
- player.play();
- }
- }
-
- private void onAudioFocusLoss() {
- Log.d(TAG, "onAudioFocusLoss() called");
- player.pause();
- }
-
- private void onAudioFocusLossCanDuck() {
- Log.d(TAG, "onAudioFocusLossCanDuck() called");
- // Set the volume to 1/10 on ducking
- player.setVolume(DUCK_AUDIO_TO);
- }
-
- private void animateAudio(final float from, final float to) {
- final ValueAnimator valueAnimator = new ValueAnimator();
- valueAnimator.setFloatValues(from, to);
- valueAnimator.setDuration(AudioReactor.DUCK_DURATION);
- valueAnimator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationStart(final Animator animation) {
- player.setVolume(from);
- }
-
- @Override
- public void onAnimationCancel(final Animator animation) {
- player.setVolume(to);
- }
-
- @Override
- public void onAnimationEnd(final Animator animation) {
- player.setVolume(to);
- }
- });
- valueAnimator.addUpdateListener(animation ->
- player.setVolume(((float) animation.getAnimatedValue())));
- valueAnimator.start();
- }
-
/*//////////////////////////////////////////////////////////////////////////
// Audio Processing
//////////////////////////////////////////////////////////////////////////*/
From f9bfd268a5dd72f49af565a09509756e009afb01 Mon Sep 17 00:00:00 2001
From: Yubi Lee
Date: Sat, 28 Mar 2026 09:14:30 +0900
Subject: [PATCH 010/155] Fix broken mute
It should play video with mute on even though another app is playing audio.
---
.../org/schabi/newpipe/player/Player.java | 27 +++++++++++++++++++
.../newpipe/player/helper/AudioReactor.java | 25 +++++++++++++++++
2 files changed, 52 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/player/Player.java b/app/src/main/java/org/schabi/newpipe/player/Player.java
index 0605b262a..7ce5244fa 100644
--- a/app/src/main/java/org/schabi/newpipe/player/Player.java
+++ b/app/src/main/java/org/schabi/newpipe/player/Player.java
@@ -1328,7 +1328,34 @@ public final class Player implements PlaybackListener, Listener {
public void toggleMute() {
final boolean wasMuted = isMuted();
+ final boolean wasPlaying = simpleExoPlayer.isPlaying();
+ Log.d(TAG, "toggleMute: wasMuted=" + wasMuted + ", wasPlaying=" + wasPlaying);
simpleExoPlayer.setVolume(wasMuted ? 1 : 0);
+ if (wasMuted) {
+ Log.d(TAG, "toggleMute: enabling audio focus, willPlay=" + wasPlaying);
+ simpleExoPlayer.setAudioAttributes(
+ new com.google.android.exoplayer2.audio.AudioAttributes.Builder()
+ .setUsage(C.USAGE_MEDIA)
+ .setContentType(C.AUDIO_CONTENT_TYPE_MUSIC)
+ .build(),
+ true // handleAudioFocus = true - ExoPlayer handles focus automatically
+ );
+ if (wasPlaying) {
+ Log.d(TAG, "toggleMute: calling play(), isPlaying=" + simpleExoPlayer.isPlaying());
+ simpleExoPlayer.play();
+ Log.d(TAG, "toggleMute: after play(), isPlaying=" + simpleExoPlayer.isPlaying());
+ }
+ } else {
+ Log.d(TAG, "toggleMute: disabling audio focus, abandoning focus");
+ simpleExoPlayer.setAudioAttributes(
+ new com.google.android.exoplayer2.audio.AudioAttributes.Builder()
+ .setUsage(C.USAGE_MEDIA)
+ .setContentType(C.AUDIO_CONTENT_TYPE_MUSIC)
+ .build(),
+ false // handleAudioFocus = false
+ );
+ audioReactor.abandonAudioFocus();
+ }
UIs.call(playerUi -> playerUi.onMuteUnmuteChanged(!wasMuted));
notifyPlaybackUpdateToListeners();
}
diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java b/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java
index 2ec33dc0f..a0cfea2c4 100644
--- a/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java
+++ b/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java
@@ -4,9 +4,11 @@ import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.audiofx.AudioEffect;
+import android.util.Log;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
+import androidx.media.AudioFocusRequestCompat;
import androidx.media.AudioManagerCompat;
import com.google.android.exoplayer2.ExoPlayer;
@@ -16,11 +18,13 @@ public class AudioReactor implements AnalyticsListener {
private static final String TAG = "AudioFocusReactor";
+ private static final int FOCUS_GAIN_TYPE = AudioManagerCompat.AUDIOFOCUS_GAIN;
private static final int STREAM_TYPE = AudioManager.STREAM_MUSIC;
private final ExoPlayer player;
private final Context context;
private final AudioManager audioManager;
+ private final AudioFocusRequestCompat request;
public AudioReactor(@NonNull final Context context,
@NonNull final ExoPlayer player) {
@@ -28,13 +32,34 @@ public class AudioReactor implements AnalyticsListener {
this.context = context;
this.audioManager = ContextCompat.getSystemService(context, AudioManager.class);
player.addAnalyticsListener(this);
+
+ request = new AudioFocusRequestCompat.Builder(FOCUS_GAIN_TYPE)
+ .setWillPauseWhenDucked(true)
+ .setOnAudioFocusChangeListener(focusChange -> {
+ })
+ .build();
}
public void dispose() {
+ abandonAudioFocus();
player.removeAnalyticsListener(this);
notifyAudioSessionUpdate(false, player.getAudioSessionId());
}
+ /*//////////////////////////////////////////////////////////////////////////
+ // Audio Focus
+ //////////////////////////////////////////////////////////////////////////*/
+
+ public void requestAudioFocus() {
+ Log.d(TAG, "requestAudioFocus() called");
+ AudioManagerCompat.requestAudioFocus(audioManager, request);
+ }
+
+ public void abandonAudioFocus() {
+ Log.d(TAG, "abandonAudioFocus() called");
+ AudioManagerCompat.abandonAudioFocusRequest(audioManager, request);
+ }
+
/*//////////////////////////////////////////////////////////////////////////
// Audio Manager
//////////////////////////////////////////////////////////////////////////*/
From 9ff614f2fc328d64291cd8abfb05e5f96c87cd37 Mon Sep 17 00:00:00 2001
From: AudricV <74829229+AudricV@users.noreply.github.com>
Date: Sat, 1 Aug 2026 16:44:00 +0200
Subject: [PATCH 011/155] Refactor automatic audio focus, drop unneeded manual
focus
The automatic audio focus can be just disabled when muting by updating
ExoPlayer audio attributes. It makes no sense to create a manual audio
focus request which is never used but only unregistered.
There should be no need to manually play when content is already
playing, to log each action for all build types and to duplicate the
code updating ExoPlayer audio attributes.
---
.../org/schabi/newpipe/player/Player.java | 42 ++++++-------------
.../newpipe/player/helper/AudioReactor.java | 27 ------------
2 files changed, 13 insertions(+), 56 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/Player.java b/app/src/main/java/org/schabi/newpipe/player/Player.java
index 7ce5244fa..7e72ff015 100644
--- a/app/src/main/java/org/schabi/newpipe/player/Player.java
+++ b/app/src/main/java/org/schabi/newpipe/player/Player.java
@@ -634,14 +634,13 @@ public final class Player implements PlaybackListener, Listener {
simpleExoPlayer.setWakeMode(C.WAKE_MODE_NETWORK);
simpleExoPlayer.setHandleAudioBecomingNoisy(true);
- // Enable automatic audio focus management - let Android handle ducking automatically
+ // Enable ExoPlayer automatic audio focus management
simpleExoPlayer.setAudioAttributes(
new com.google.android.exoplayer2.audio.AudioAttributes.Builder()
.setUsage(C.USAGE_MEDIA)
.setContentType(C.AUDIO_CONTENT_TYPE_MUSIC)
.build(),
- true // handleAudioFocus = true for automatic management
- );
+ true);
audioReactor = new AudioReactor(context, simpleExoPlayer);
@@ -1328,34 +1327,19 @@ public final class Player implements PlaybackListener, Listener {
public void toggleMute() {
final boolean wasMuted = isMuted();
- final boolean wasPlaying = simpleExoPlayer.isPlaying();
- Log.d(TAG, "toggleMute: wasMuted=" + wasMuted + ", wasPlaying=" + wasPlaying);
simpleExoPlayer.setVolume(wasMuted ? 1 : 0);
- if (wasMuted) {
- Log.d(TAG, "toggleMute: enabling audio focus, willPlay=" + wasPlaying);
- simpleExoPlayer.setAudioAttributes(
+
+ // Update audio focus
+ // When wasMuted is true, we want to play sound, so ExoPlayer has to handle audio focus in
+ // this case; when wasMuted is false, we don't want to play sound, so no audio focus should
+ // be done
+ simpleExoPlayer.setAudioAttributes(
new com.google.android.exoplayer2.audio.AudioAttributes.Builder()
- .setUsage(C.USAGE_MEDIA)
- .setContentType(C.AUDIO_CONTENT_TYPE_MUSIC)
- .build(),
- true // handleAudioFocus = true - ExoPlayer handles focus automatically
- );
- if (wasPlaying) {
- Log.d(TAG, "toggleMute: calling play(), isPlaying=" + simpleExoPlayer.isPlaying());
- simpleExoPlayer.play();
- Log.d(TAG, "toggleMute: after play(), isPlaying=" + simpleExoPlayer.isPlaying());
- }
- } else {
- Log.d(TAG, "toggleMute: disabling audio focus, abandoning focus");
- simpleExoPlayer.setAudioAttributes(
- new com.google.android.exoplayer2.audio.AudioAttributes.Builder()
- .setUsage(C.USAGE_MEDIA)
- .setContentType(C.AUDIO_CONTENT_TYPE_MUSIC)
- .build(),
- false // handleAudioFocus = false
- );
- audioReactor.abandonAudioFocus();
- }
+ .setUsage(C.USAGE_MEDIA)
+ .setContentType(C.AUDIO_CONTENT_TYPE_MUSIC)
+ .build(),
+ wasMuted);
+
UIs.call(playerUi -> playerUi.onMuteUnmuteChanged(!wasMuted));
notifyPlaybackUpdateToListeners();
}
diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java b/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java
index a0cfea2c4..eb6727da6 100644
--- a/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java
+++ b/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java
@@ -4,11 +4,9 @@ import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.audiofx.AudioEffect;
-import android.util.Log;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
-import androidx.media.AudioFocusRequestCompat;
import androidx.media.AudioManagerCompat;
import com.google.android.exoplayer2.ExoPlayer;
@@ -16,15 +14,11 @@ import com.google.android.exoplayer2.analytics.AnalyticsListener;
public class AudioReactor implements AnalyticsListener {
- private static final String TAG = "AudioFocusReactor";
-
- private static final int FOCUS_GAIN_TYPE = AudioManagerCompat.AUDIOFOCUS_GAIN;
private static final int STREAM_TYPE = AudioManager.STREAM_MUSIC;
private final ExoPlayer player;
private final Context context;
private final AudioManager audioManager;
- private final AudioFocusRequestCompat request;
public AudioReactor(@NonNull final Context context,
@NonNull final ExoPlayer player) {
@@ -32,34 +26,13 @@ public class AudioReactor implements AnalyticsListener {
this.context = context;
this.audioManager = ContextCompat.getSystemService(context, AudioManager.class);
player.addAnalyticsListener(this);
-
- request = new AudioFocusRequestCompat.Builder(FOCUS_GAIN_TYPE)
- .setWillPauseWhenDucked(true)
- .setOnAudioFocusChangeListener(focusChange -> {
- })
- .build();
}
public void dispose() {
- abandonAudioFocus();
player.removeAnalyticsListener(this);
notifyAudioSessionUpdate(false, player.getAudioSessionId());
}
- /*//////////////////////////////////////////////////////////////////////////
- // Audio Focus
- //////////////////////////////////////////////////////////////////////////*/
-
- public void requestAudioFocus() {
- Log.d(TAG, "requestAudioFocus() called");
- AudioManagerCompat.requestAudioFocus(audioManager, request);
- }
-
- public void abandonAudioFocus() {
- Log.d(TAG, "abandonAudioFocus() called");
- AudioManagerCompat.abandonAudioFocusRequest(audioManager, request);
- }
-
/*//////////////////////////////////////////////////////////////////////////
// Audio Manager
//////////////////////////////////////////////////////////////////////////*/
From 07421aaa6268a21255aa5e426747e5c7a2da1518 Mon Sep 17 00:00:00 2001
From: Hosted Weblate
Date: Tue, 4 Aug 2026 14:38:53 +0200
Subject: [PATCH 012/155] Translated using Weblate (Chinese (Traditional Han
script))
Currently translated at 100.0% (38 of 38 strings)
Translated using Weblate (German)
Currently translated at 100.0% (38 of 38 strings)
Translated using Weblate (Montenegrin)
Currently translated at 50.0% (19 of 38 strings)
Added translation using Weblate (Montenegrin)
Translated using Weblate (Arabic)
Currently translated at 100.0% (38 of 38 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (38 of 38 strings)
Translated using Weblate (Santali)
Currently translated at 7.8% (3 of 38 strings)
Co-authored-by: Hmomam Lazaref
Co-authored-by: Hosted Weblate
Co-authored-by: Jeff Huang
Co-authored-by: Oleh Hishak
Co-authored-by: Prasanta-Hembram
Co-authored-by: VfBFan
Co-authored-by: bogdan jasovic
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/ar/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/cnr/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/de/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/sat/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/uk/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/zh_Hant/
Translation: NewPipe/compose
---
.../composeResources/values-ar/strings.xml | 2 +
.../composeResources/values-cnr/strings.xml | 27 +++++++++++++
.../composeResources/values-de/strings.xml | 2 +-
.../composeResources/values-sat/strings.xml | 5 ++-
.../composeResources/values-uk/strings.xml | 40 ++++++++++++++++++-
.../values-zh-rTW/strings.xml | 11 +++++
6 files changed, 84 insertions(+), 3 deletions(-)
create mode 100644 shared/src/commonMain/composeResources/values-cnr/strings.xml
diff --git a/shared/src/commonMain/composeResources/values-ar/strings.xml b/shared/src/commonMain/composeResources/values-ar/strings.xml
index 850da900a..280183c95 100644
--- a/shared/src/commonMain/composeResources/values-ar/strings.xml
+++ b/shared/src/commonMain/composeResources/values-ar/strings.xml
@@ -36,4 +36,6 @@
المظهر
التحديثات
النسخ الاحتياطي والاستعادة
+ السجل والملفات المؤقتة
+ تصحيح الأخطاء
diff --git a/shared/src/commonMain/composeResources/values-cnr/strings.xml b/shared/src/commonMain/composeResources/values-cnr/strings.xml
new file mode 100644
index 000000000..582a0667b
--- /dev/null
+++ b/shared/src/commonMain/composeResources/values-cnr/strings.xml
@@ -0,0 +1,27 @@
+
+
+ Gornja Traka sa akcijama
+ Ekran o nama
+ Licence trećih strana
+ Obljavnjeno od %1$s pod %2$s
+ O Nama & Ćesto postavljana pitanja
+ Licence
+ Libre lako strimanje na Androidu
+ Doprinesi
+ Ako imate ideje; translacije, izmjene dizajnsa, ćistenje koda ili prave teske dizajna -- pomoc je uvijek dobrodośla. Śto viśe uradimo bolje će biti
+ Pogledajte na GitHub-u
+ Doniraj
+ Vrati Nazad
+ Website
+ Pogledaj NewPipe Website za viśe informacije i novosti.
+ Politka Privatnosti
+ Proćitaj politiku privatnosti
+ NewPipe License
+ Proćitaj License
+ Ćesto postavljana pitanja
+ Ako imate probleme koriśteći aplikaciju, budite sigurnu da pogledate odgovore na iobičajna pitanja
+ Pogledajte na Website
+ Otvorite u browser
+ Gotovo
+ Nije dostupno
+
diff --git a/shared/src/commonMain/composeResources/values-de/strings.xml b/shared/src/commonMain/composeResources/values-de/strings.xml
index d3007cb0c..8aaa9c57f 100644
--- a/shared/src/commonMain/composeResources/values-de/strings.xml
+++ b/shared/src/commonMain/composeResources/values-de/strings.xml
@@ -21,7 +21,7 @@
Website
Besuche die NewPipe-Website für weitere Informationen und Neuigkeiten.
NewPipes Datenschutzerklärung
- Dem NewPipe-Projekt ist Datenschutz sehr wichtig. Deshalb sammelt diese App keine Daten ohne deine Zustimmung.\nNewPipes Datenschutzerklärung erklären im Detail, welche Daten beim Absenden eines Absturzberichtes verschickt und gespeichert werden.
+ Dem NewPipe-Projekt ist Datenschutz sehr wichtig. Daher sammelt die App keinerlei Daten ohne deine Zustimmung.\nNewPipes Datenschutzerklärung erläutert ausführlich, welche Daten beim Senden eines Absturzberichts übermittelt und gespeichert werden.
Datenschutzerklärung lesen
NewPipes Lizenz
NewPipe ist freie Copyleft-Software: Du kannst sie nach Belieben benutzen, untersuchen, mit anderen teilen und verbessern. Insbesondere kannst du sie unter den von der Free Software Foundation veröffentlichten Bedingungen der GNU General Public License, in der Version 3 der Lizenz oder (nach deiner Wahl) jeder späteren Version, weitergeben und/oder verändern.
diff --git a/shared/src/commonMain/composeResources/values-sat/strings.xml b/shared/src/commonMain/composeResources/values-sat/strings.xml
index 55344e519..16aa94002 100644
--- a/shared/src/commonMain/composeResources/values-sat/strings.xml
+++ b/shared/src/commonMain/composeResources/values-sat/strings.xml
@@ -1,3 +1,6 @@
-
\ No newline at end of file
+ ᱛᱟᱭᱚᱢ
+ NewPipe ᱵᱚᱵᱚᱛ
+ ᱮᱱᱰᱨᱳᱭᱮᱰ ᱨᱮ ᱞᱤᱵᱽᱨᱮ ᱦᱟᱞᱠᱟ ᱚᱡᱚᱱ ᱥᱴᱨᱤᱢᱤᱝ ᱾
+
diff --git a/shared/src/commonMain/composeResources/values-uk/strings.xml b/shared/src/commonMain/composeResources/values-uk/strings.xml
index 55344e519..d612c4bea 100644
--- a/shared/src/commonMain/composeResources/values-uk/strings.xml
+++ b/shared/src/commonMain/composeResources/values-uk/strings.xml
@@ -1,3 +1,41 @@
-
\ No newline at end of file
+ Назад
+ Про NewPipe
+ Ліцензії третіх сторін
+ Про нас і ЧаПи
+ Ліцензії
+ Libre — легкий стримінг на Android
+ Зробіть внесок
+ Незалежно від того, чи у вас є ідеї щодо перекладу, змін дизайну, очищення коду або серйозних доопрацювань — будь-яка допомога завжди вітається. Чим більше зроблено, тим кращим стає проєкт!
+ Переглянути на GitHub
+ Пожертвувати
+ NewPipe розробляють волонтери, які у вільний час створюють для вас найкращий користувацький досвід. Підтримайте розробників, щоб допомогти зробити NewPipe ще кращим, поки вони насолоджуються чашкою кави.
+ Віддячити
+ Вебсайт
+ Відвідайте вебсайт NewPipe, щоб дізнатися більше інформації та новин.
+ Політика конфіденційності NewPipe
+ Проєкт NewPipe дуже серйозно ставиться до вашої конфіденційності. Тому застосунок не збирає жодних даних без вашої згоди.\nПолітика конфіденційності NewPipe детально пояснює, які дані надсилаються та зберігаються, коли ви надсилаєте звіт про збій.
+ Ознайомитися з політикою конфіденційності
+ Ліцензія NewPipe
+ NewPipe — це copyleft libre програмне забезпечення: ви можете вільно використовувати, вивчати, поширювати та вдосконалювати його. Зокрема, ви можете розповсюджувати та/або змінювати його на умовах GNU General Public License, опублікованої Free Software Foundation, версії 3 або (на ваш вибір) будь-якої пізнішої версії.
+ Ознайомитися з ліцензією
+ Поширені запитання
+ Якщо у вас виникають труднощі з використанням застосунку, обов’язково перегляньте відповіді на поширені запитання!
+ Переглянути на сайті
+ Відкрити в браузері
+ Готово
+ Недоступно
+ Налаштування
+ Пошук
+ Вміст
+ Сповіщення
+ Відео та аудіо
+ Завантажити
+ Зовнішній вигляд
+ Історія та кеш
+ Оновлення
+ Резервна копія та відновлення
+ Налагодження
+ %1$s за ліцензією %2$s
+
diff --git a/shared/src/commonMain/composeResources/values-zh-rTW/strings.xml b/shared/src/commonMain/composeResources/values-zh-rTW/strings.xml
index ac53eefde..b857424d0 100644
--- a/shared/src/commonMain/composeResources/values-zh-rTW/strings.xml
+++ b/shared/src/commonMain/composeResources/values-zh-rTW/strings.xml
@@ -27,4 +27,15 @@
以瀏覽器開啟
完成
不可用
+ 設定
+ 搜尋
+ 內容
+ 通知
+ 影片與音訊
+ 下載
+ 外觀
+ 歷史紀錄與快取
+ 更新
+ 備份與還原
+ 除錯
From 89d2423692918653134e79a841d96e065175e976 Mon Sep 17 00:00:00 2001
From: Hosted Weblate
Date: Tue, 4 Aug 2026 14:38:36 +0200
Subject: [PATCH 013/155] Translated using Weblate (Chinese (Traditional Han
script))
Currently translated at 100.0% (776 of 776 strings)
Translated using Weblate (Montenegrin)
Currently translated at 2.3% (18 of 776 strings)
Added translation using Weblate (Montenegrin)
Translated using Weblate (Arabic)
Currently translated at 99.8% (775 of 776 strings)
Translated using Weblate (Ukrainian)
Currently translated at 99.8% (775 of 776 strings)
Translated using Weblate (Santali)
Currently translated at 14.5% (113 of 776 strings)
Co-authored-by: Hmomam Lazaref
Co-authored-by: Hosted Weblate
Co-authored-by: Jeff Huang
Co-authored-by: Oleh Hishak
Co-authored-by: Prasanta-Hembram
Co-authored-by: bogdan jasovic
---
app/src/main/res/values-ar/strings.xml | 4 +-
app/src/main/res/values-cnr/strings.xml | 24 +++++++++
app/src/main/res/values-sat/strings.xml | 4 +-
app/src/main/res/values-uk/strings.xml | 62 +++++++++++++++-------
app/src/main/res/values-zh-rTW/strings.xml | 30 +++++------
5 files changed, 87 insertions(+), 37 deletions(-)
create mode 100644 app/src/main/res/values-cnr/strings.xml
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 2e34a1de9..ed22ebe0b 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -53,7 +53,7 @@
في الخلفية
أسود
سجل المشاهدة
- سجل المشاهدة و ذاكرة التخزين المؤقت
+ السجل والملفات المؤقتة
المحتوى
التحميلات
الملفات المحملة
@@ -212,7 +212,7 @@
تصدير السجل، وقوائم تشغيل، والإعدادات، والاشتراكات
عرض المعلومات
إضافة إلى
- تحليل
+ تصحيح الأخطاء
لم يتم العثور على أي بث مرئي
لم يتم العثور على أي بث صوتي
اسحب لإعادة ترتيب
diff --git a/app/src/main/res/values-cnr/strings.xml b/app/src/main/res/values-cnr/strings.xml
new file mode 100644
index 000000000..625723f2a
--- /dev/null
+++ b/app/src/main/res/values-cnr/strings.xml
@@ -0,0 +1,24 @@
+
+
+ Ekran o nama
+ Licence trećih strana
+ O Nama & Ćesto postavljana pitanja
+ Licence
+ Libre lako strimanje na Androidu
+ Doprinesi
+ Ako imate ideje; translacije, izmjene dizajnsa, ćistenje koda ili prave teske dizajna -- pomoc je uvijek dobrodośla. Śto viśe uradimo bolje će biti
+ Pogledajte na GitHub-u
+ Doniraj
+ Vrati Nazad
+ Website
+ Pogledaj NewPipe Website za viśe informacije i novosti.
+ Politka Privatnosti
+ Proćitaj politiku privatnosti
+ NewPipe License
+ Proćitaj License
+ Ćesto postavljana pitanja
+ Ako imate probleme koriśteći aplikaciju, budite sigurnu da pogledate odgovore na iobičajna pitanja
+ Pogledajte na Website
+ Otvorite u browser
+ Gotovo
+
diff --git a/app/src/main/res/values-sat/strings.xml b/app/src/main/res/values-sat/strings.xml
index 47ac2c53d..4f376cdfb 100644
--- a/app/src/main/res/values-sat/strings.xml
+++ b/app/src/main/res/values-sat/strings.xml
@@ -478,7 +478,7 @@
ᱚᱵᱷᱤᱱᱮᱛᱟᱨ ᱵᱟᱹᱱᱩᱜᱼᱟ
ᱚᱠᱚᱭ ᱦᱚᱸ ᱵᱟᱝ ᱧᱮᱞᱚᱜ ᱠᱟᱱᱟ
ᱜᱚᱴᱟ ᱟᱠᱟᱱᱟ
- ᱱᱤᱭᱩ ᱯᱟᱭᱯᱮ ᱵᱟᱵᱚᱛ
+ NewPipe ᱵᱚᱵᱚᱛ
ᱯᱮᱨᱟᱜ ᱞᱟᱭᱥᱮᱱᱥ
ᱰᱳᱱᱮᱴ ᱢᱮ
ᱡᱟᱦᱟᱸᱭ ᱜᱮᱭ ᱟᱸᱡᱚᱢᱟ
@@ -697,7 +697,7 @@
ᱭᱩᱴᱭᱩᱵᱽ ᱨᱮᱱᱟᱜ \"Restricted Mode\" ᱚᱞ ᱢᱮ
ᱡᱚᱛᱚ
ᱱᱮᱴᱣᱟᱨᱠ ᱵᱷᱩᱞ
- ᱟᱱᱰᱨᱚᱭᱮᱰ ᱨᱮ ᱞᱤᱵᱨᱮ ᱞᱟᱭᱤᱴᱣᱮᱴ ᱥᱴᱨᱤᱢᱤᱝ
+ ᱮᱱᱰᱨᱳᱭᱮᱰ ᱨᱮ ᱞᱤᱵᱽᱨᱮ ᱦᱟᱞᱠᱟ ᱚᱡᱚᱱ ᱥᱴᱨᱤᱢᱤᱝ ᱾
ᱴᱮᱜᱥ
ᱥᱚᱨᱠᱟᱨᱤ
ᱚᱱᱚᱞ ᱨᱮ ᱡᱟᱭᱜᱟ ᱵᱟᱹᱱᱩᱜᱼᱟ
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index c3595ebec..a64a6722f 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -4,7 +4,7 @@
Програвач потокового відео не знайдений. Встановити VLC\?
Встановити
Скасувати
- Відкрити в оглядачі
+ Відкрити в браузері
Поширити
Завантажити
Пошук
@@ -33,7 +33,7 @@
Показувати «Наступне» і «Схожі» відео
URL не підтримується
Переважна мова вмісту
- Відео та звук
+ Відео та аудіо
Зовнішній вигляд
Відтворення у фоновому режимі
Вміст
@@ -139,7 +139,7 @@
Немає відео
Цей дозвіл потрібен для перегляду
\nу віконному режимі
- Завантаження
+ Завантажити
Допустимі символи в назвах файлів
Недопустимі символи замінюватимуться цим значенням
Замінні символи
@@ -147,9 +147,9 @@
Більшість спеціальних символів
Про NewPipe
Ліцензії
- Посприяти
+ Зробіть внесок
Переглянути на GitHub
- Фінансова допомога
+ Пожертвувати
Вебсайт
Історія
Експортовано
@@ -190,9 +190,9 @@
Відхилити
Перейменувати
Ліцензії третіх сторін
- Про застосунок і ЧаП
- Вільне та легке потокове програвання на Android.
- Які б не були ваші ідеї: переклад, дизайн, легкий чи глобальний рефакторинг — будь-яка допомога завжди у пригоді. Що більше зроблено, то ліпшим стає NewPipe!
+ Про нас і ЧаПи
+ Libre — легкий стримінг на Android
+ Незалежно від того, чи у вас є ідеї щодо перекладу, змін дизайну, очищення коду або серйозних доопрацювань — будь-яка допомога завжди вітається. Чим більше зроблено, тим кращим стає проєкт!
Налагодження
Нічого немає… чути лише цвіркунів
Немає переглядів
@@ -203,12 +203,12 @@
Перевірка reCAPTCHA
Запит перевірки reCAPTCHA
- © %1$s, %2$s під %3$s
- NewPipe розроблений добровольцями, які витрачають власний час заради вашого задоволення. Допоможіть розробникам зробити NewPipe ще ліпшим, насолоджуючись філіжанкою кави.
- Ваша допомога
- Завітайте на офіційний сайт NewPipe, щоб отримати більше інформації та новин.
+ © %1$s від %2$s за ліцензією %3$s
+ NewPipe розробляють волонтери, які у вільний час створюють для вас найкращий користувацький досвід. Підтримайте розробників, щоб допомогти зробити NewPipe ще кращим, поки вони насолоджуються чашкою кави.
+ Віддячити
+ Відвідайте вебсайт NewPipe, щоб дізнатися більше інформації та новин.
Ліцензія NewPipe
- Прочитати ліцензію
+ Ознайомитися з ліцензією
Історія
Видалити цей елемент з історії пошуку\?
Відтворювалося останнім
@@ -310,12 +310,12 @@
Видалити всю історію пошуку\?
Історію пошуку видалено
Видалено 1 елемент.
- NewPipe є вільним (копілефт) застосунком: ви можете використовувати, поширювати та вдосконалювати його на власний розсуд. Зокрема ви можете розповсюджувати та/або змінювати його за умов дотримання вимог GNU General Public License 3-ї версії або (на ваш вибір) будь-якої пізнішої версії, опублікованої Free Software Foundation.
+ NewPipe — це copyleft libre програмне забезпечення: ви можете вільно використовувати, вивчати, поширювати та вдосконалювати його. Зокрема, ви можете розповсюджувати та/або змінювати його на умовах GNU General Public License, опублікованої Free Software Foundation, версії 3 або (на ваш вибір) будь-якої пізнішої версії.
Імпортувати разом з налаштуваннями\?
- Політика приватності NewPipe
+ Політика конфіденційності NewPipe
Проєкт NewPipe дуже серйозно ставиться до вашої приватності. Тому застосунок не збирає ніяких даних без вашої згоди.
\nПолітика приватності докладно NewPipe пояснює, які дані надсилаються і зберігаються у звіті про збій.
- Читати політику приватності
+ Ознайомитися з політикою конфіденційності
З метою дотримання Загального регламенту про захист даних ЄС (General Data Protection Regulation, GDPR) ми звертаємо вашу увагу на політику приватності NewPipe. Будь ласка, прочитайте уважно.
\nВи маєте прийняти її, аби надіслати нам звіт про помилку.
Прийняти
@@ -715,7 +715,7 @@
Розмір інтервалу завантаження відтворення
Переглянути на сайті
Поширені запитання
- Якщо у вас виникли проблеми з використанням застосунку, обов\'язково ознайомтеся з відповідями на поширені запитання!
+ Якщо у вас виникають труднощі з використанням застосунку, обов’язково перегляньте відповіді на поширені запитання!
Сортувати
Ви використовуєте найновішу версію NewPipe
Торкніться, щоб завантажити %s
@@ -825,7 +825,7 @@
Показати менше
Недостатньо вільного простору на пристрої
Скинути налаштування
- Резервне копіювання і відновлення
+ Резервна копія та відновлення
NewPipe може час від часу автоматично перевіряти наявність нових версій і сповіщати вас про їх появу.
\nХочете увімкнути цю функцію?
Так
@@ -869,4 +869,30 @@
У серпні 2025 року, Google анонсувала, що з вересня 2026 року, для встановлення застосунків буде потрібна верифікація розробника для всіх Android застосунків на сертифікованих пристроях, включаючи ті, що були встановлені не через Play Store. Оскільки розробники NewPipe не згодні з цією вимогою, NewPipe перестане працювати на сертифікованих Android пристроях після цієї дати.
Детальніше
Вирішення
+
+ - Експорт %d підписки…
+ - Експорт %d підписок…
+ - Експорт %d підписок…
+ - Експорт %d підписок…
+
+
+ - Завантаження %d підписки…
+ - Завантаження %d підписок…
+ - Завантаження %d підписок…
+ - Завантаження %d підписок…
+
+
+ - Імпорт %d підписки…
+ - Імпорт %d підписок…
+ - Імпорт %d підписок…
+ - Імпорт %d підписок…
+
+ Імпорт підписок
+ Експорт підписок
+ Імпорт підписок із попереднього експорту .json
+ Експорт підписок у файл .json
+ Імпорт із попереднього експорту
+ NewPipe припиняє підтримку Android 5
+ На жаль, NewPipe залежить від кількох бібліотек, які припинили підтримку Android 5.0 і 5.1. Тому наступна версія NewPipe працюватиме лише на пристроях з Android 6 або новішою версією. Докладніше читайте в дописі в блозі.
+ Допис у блозі
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index a6c6c4bb2..cf732dd24 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -108,15 +108,15 @@
無法更新訂閱
訂閱清單
新鮮事
- 搜尋記錄
- 在本機儲存搜尋記錄
- 觀看記錄
+ 搜尋歷史紀錄
+ 在本機儲存搜尋紀錄
+ 觀看歷史紀錄
記錄已觀看的影片
恢復播放
在干擾結束後繼續播放 (例如有來電)
播放器
行為
- 歷史記錄與快取
+ 歷史紀錄與快取
復原
NewPipe 通知
NewPipe 播放器的通知
@@ -148,9 +148,9 @@
不管您有什麼點子 ── 翻譯、設計、清理或撰寫大量程式碼 ── 我們永遠歡迎您來幫忙。做得越多,NewPipe 就會更好!
閱讀授權條款
貢獻
- 歷史記錄
- 歷史記錄
- 確定要刪除此項搜尋記錄嗎?
+ 歷史紀錄
+ 歷史紀錄
+ 確定要刪除此項搜尋紀錄嗎?
找不到串流播放器 (您可以安裝 VLC 來播放)。
顯示「長按以新增」提示
預設內容國家
@@ -172,8 +172,8 @@
網站
匯入資料庫
匯出資料庫
- 覆寫您目前的歷史記錄、訂閱與設定 (選用)
- 匯出歷史記錄、訂閱內容、播放清單、設定
+ 覆寫您目前的歷史紀錄、訂閱與設定(選擇性)
+ 匯出歷史紀錄、訂閱內容、播放清單、設定
回饋
如欲了解更多有關 NewPipe 的資訊和新聞,請造訪我們的網站。
首頁內容
@@ -281,12 +281,12 @@
調整播放器字幕文字大小與背景樣式。必須重新啟動應用程式才會生效
清除觀看歷史
刪除播放過的串流與播放位置歷史
- 刪除所有觀看歷史記錄?
+ 刪除所有觀看歷史紀錄?
觀看歷史已刪除
清除搜尋歷史
- 刪除搜尋關鍵字的記錄
- 刪除所有搜尋歷史記錄?
- 搜尋記錄已刪除
+ 刪除搜尋關鍵字的紀錄
+ 刪除所有搜尋歷史紀錄?
+ 搜尋紀錄已刪除
已刪除一個項目。
NewPipe 是一個 Copyleft 的自由軟體:您可以隨意使用、研究、分享並改進它。在遵守由自由軟體基金會所發佈的 GNU 通用公共授權條款的狀況下,您可以自由地再散佈及/或修改它;授權條款預設使用第三版,但您也可以選擇更新的版本。
您是否要同時匯入設定?
@@ -381,7 +381,7 @@
NewPipe 在處理檔案時被關閉
裝置上沒有剩餘的空間
進度遺失,因為檔案已被刪除
- 您想要清除您的下載歷史記錄,還是刪除所有已下載的檔案?
+ 您想要清除您的下載歷史紀錄,還是刪除所有已下載的檔案?
限制下載佇列
一次執行一個下載
開始下載
@@ -423,7 +423,7 @@
正在恢復
無法恢復此下載
選擇一個實例
- 清除下載歷史記錄
+ 清除下載歷史紀錄
刪除已下載的檔案
給予顯示在其他應用程式上層的權限
應用程式語言
From 4fb9c9c88b8e40ff0946fe7fb271efc3dcdb9a1b Mon Sep 17 00:00:00 2001
From: Tyler Sweat
Date: Tue, 11 Aug 2026 20:20:59 -0700
Subject: [PATCH 014/155] fix: blacklist JMGO N1S 4K and TCL 65Q651G for media
tunneling (#13756)
---
.../org/schabi/newpipe/util/DeviceUtils.java | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java b/app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java
index 83152a36d..e54426a08 100644
--- a/app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java
+++ b/app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java
@@ -44,7 +44,7 @@ public final class DeviceUtils {
* support media tunneling to match the upcoming version code.
* @see #shouldSupportMediaTunneling()
*/
- public static final int MEDIA_TUNNELING_DEVICE_BLACKLIST_VERSION = 994;
+ public static final int MEDIA_TUNNELING_DEVICE_BLACKLIST_VERSION = 1015;
// region: devices not supporting media tunneling / media tunneling blacklist
/**
@@ -120,6 +120,16 @@ public final class DeviceUtils {
* #10122
*/
private static final boolean HMB9213NW = Build.DEVICE.equals("HMB9213NW");
+ /**
+ * JMGO N1S 4K.
+ * Blacklist reason: fullscreen crash
+ */
+ private static final boolean LONAVLA = Build.DEVICE.equals("lonavla");
+ /**
+ * TCL 65Q651G.
+ * Blacklist reason: fullscreen crash
+ */
+ private static final boolean G10 = Build.DEVICE.equals("G10");
// endregion
private DeviceUtils() {
@@ -334,7 +344,9 @@ public final class DeviceUtils {
&& !BRAVIA_ATV3_4K
&& !PH7M_EU_5596
&& !TX_50JXW834
- && !HMB9213NW;
+ && !HMB9213NW
+ && !LONAVLA
+ && !G10;
}
/**
From 219324d9d757b225f27987dd16d64681e557476e Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Thu, 13 Aug 2026 06:22:03 +0530
Subject: [PATCH 015/155] Handle Description conversion to record class
---
.../detail/BaseDescriptionFragment.java | 16 +++++-----------
.../fragments/detail/DescriptionFragment.java | 7 +++----
.../list/channel/ChannelAboutFragment.java | 4 ++--
.../list/playlist/PlaylistFragment.java | 7 +++----
.../org/schabi/newpipe/util/ExtractorHelper.java | 2 +-
.../schabi/newpipe/util/text/TextLinkifier.java | 15 ++++++++-------
gradle/libs.versions.toml | 2 +-
7 files changed, 23 insertions(+), 30 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/BaseDescriptionFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/BaseDescriptionFragment.java
index bd174a121..462fbdc4a 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/BaseDescriptionFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/BaseDescriptionFragment.java
@@ -1,6 +1,5 @@
package org.schabi.newpipe.fragments.detail;
-import static android.text.TextUtils.isEmpty;
import static org.schabi.newpipe.extractor.utils.Utils.isBlank;
import static org.schabi.newpipe.util.text.TextLinkifier.SET_LINK_MOVEMENT_METHOD;
@@ -66,7 +65,7 @@ public abstract class BaseDescriptionFragment extends BaseFragment {
* Get the description to display.
* @return description object, if available
*/
- @Nullable
+ @NonNull
protected abstract Description getDescription();
/**
@@ -105,8 +104,7 @@ public abstract class BaseDescriptionFragment extends BaseFragment {
private void setupDescription() {
final Description description = getDescription();
- if (description == null || isEmpty(description.getContent())
- || description == Description.EMPTY_DESCRIPTION) {
+ if (Description.EMPTY_DESCRIPTION.equals(description)) {
binding.detailDescriptionView.setVisibility(View.GONE);
binding.detailSelectDescriptionButton.setVisibility(View.GONE);
return;
@@ -137,13 +135,9 @@ public abstract class BaseDescriptionFragment extends BaseFragment {
private void disableDescriptionSelection() {
// show description content again, otherwise some links are not clickable
- final Description description = getDescription();
- if (description != null) {
- TextLinkifier.fromDescription(binding.detailDescriptionView,
- description, HtmlCompat.FROM_HTML_MODE_LEGACY,
- getService(), getStreamUrl(),
- descriptionDisposables, SET_LINK_MOVEMENT_METHOD);
- }
+ TextLinkifier.fromDescription(binding.detailDescriptionView, getDescription(),
+ HtmlCompat.FROM_HTML_MODE_LEGACY, getService(), getStreamUrl(),
+ descriptionDisposables, SET_LINK_MOVEMENT_METHOD);
binding.detailDescriptionNoteView.setVisibility(View.GONE);
binding.detailDescriptionView.setTextIsSelectable(false);
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/DescriptionFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/DescriptionFragment.java
index 2b0d22a32..0c636de24 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/DescriptionFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/DescriptionFragment.java
@@ -8,7 +8,6 @@ import android.view.View;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import com.evernote.android.state.State;
@@ -34,11 +33,11 @@ public class DescriptionFragment extends BaseDescriptionFragment {
// keep empty constructor for State when resuming fragment from memory
}
-
- @Nullable
+ @NonNull
@Override
protected Description getDescription() {
- return streamInfo.getDescription();
+ return streamInfo.getDescription() != null ? streamInfo.getDescription()
+ : Description.EMPTY_DESCRIPTION;
}
@NonNull
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelAboutFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelAboutFragment.java
index e3a398139..f0efe409a 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelAboutFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelAboutFragment.java
@@ -40,10 +40,10 @@ public class ChannelAboutFragment extends BaseDescriptionFragment {
binding.constraintLayout.setPadding(0, DeviceUtils.dpToPx(8, requireContext()), 0, 0);
}
- @Nullable
+ @NonNull
@Override
protected Description getDescription() {
- return new Description(channelInfo.getDescription(), Description.PLAIN_TEXT);
+ return Description.of(channelInfo.getDescription(), Description.Type.PLAIN_TEXT);
}
@NonNull
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java
index 8f0c3ac98..8a3dfda5a 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java
@@ -1,6 +1,5 @@
package org.schabi.newpipe.fragments.list.playlist;
-import static org.schabi.newpipe.extractor.utils.Utils.isBlank;
import static org.schabi.newpipe.ktx.ViewUtils.animate;
import static org.schabi.newpipe.ktx.ViewUtils.animateHideRecyclerViewAllowingScrolling;
import static org.schabi.newpipe.util.ServiceHelper.getServiceById;
@@ -328,9 +327,9 @@ public class PlaylistFragment extends BaseListInfoFragment
diff --git a/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java b/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java
index 066d5f570..78fb52b1a 100644
--- a/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java
@@ -315,7 +315,7 @@ public final class ExtractorHelper {
.append(Localization.DOT_SEPARATOR);
}
- String content = metaInfo.getContent().getContent().trim();
+ String content = metaInfo.getContent().content().trim();
if (content.endsWith(".")) {
content = content.substring(0, content.length() - 1); // remove . at end
}
diff --git a/app/src/main/java/org/schabi/newpipe/util/text/TextLinkifier.java b/app/src/main/java/org/schabi/newpipe/util/text/TextLinkifier.java
index 4221da398..da195d0f1 100644
--- a/app/src/main/java/org/schabi/newpipe/util/text/TextLinkifier.java
+++ b/app/src/main/java/org/schabi/newpipe/util/text/TextLinkifier.java
@@ -67,17 +67,18 @@ public final class TextLinkifier {
@Nullable final String relatedStreamUrl,
@NonNull final CompositeDisposable disposables,
@Nullable final Consumer onCompletion) {
- switch (description.getType()) {
- case Description.HTML:
- TextLinkifier.fromHtml(textView, description.getContent(), htmlCompatFlag,
+ switch (description.type()) {
+ case Description.Type.HTML:
+ TextLinkifier.fromHtml(textView, description.content(), htmlCompatFlag,
relatedInfoService, relatedStreamUrl, disposables, onCompletion);
break;
- case Description.MARKDOWN:
- TextLinkifier.fromMarkdown(textView, description.getContent(),
+ case Description.Type.MARKDOWN:
+ TextLinkifier.fromMarkdown(textView, description.content(),
relatedInfoService, relatedStreamUrl, disposables, onCompletion);
break;
- case Description.PLAIN_TEXT: default:
- TextLinkifier.fromPlainText(textView, description.getContent(),
+ case Description.Type.PLAIN_TEXT:
+ default:
+ TextLinkifier.fromPlainText(textView, description.content(),
relatedInfoService, relatedStreamUrl, disposables, onCompletion);
break;
}
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 896dc6c98..d2e338ef1 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -73,7 +73,7 @@ teamnewpipe-nanojson = "e9d656ddb49a412a5a0a5d5ef20ca7ef09549996"
# the corresponding commit hash, since JitPack sometimes deletes artifacts.
# If there’s already a git hash, just add more of it to the end (or remove a letter)
# to cause jitpack to regenerate the artifact.
-teamnewpipe-newpipe-extractor = "4de221bf67ec0bf8dbdf573fbc9d4412a8561cb0"
+teamnewpipe-newpipe-extractor = "55cd9d7155ae92ec6b06886f86908294b78c25f3"
viewpager2 = "1.1.0"
webkit = "1.15.0" # New versions require minSdk 24
work = "2.11.2"
From 9e8be091560a69f35d44bd252eb00bc7911c977b Mon Sep 17 00:00:00 2001
From: tobigr
Date: Thu, 13 Aug 2026 11:33:53 +0200
Subject: [PATCH 016/155] Update extractor
---
gradle/libs.versions.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index d2e338ef1..e681ea6d5 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -73,7 +73,7 @@ teamnewpipe-nanojson = "e9d656ddb49a412a5a0a5d5ef20ca7ef09549996"
# the corresponding commit hash, since JitPack sometimes deletes artifacts.
# If there’s already a git hash, just add more of it to the end (or remove a letter)
# to cause jitpack to regenerate the artifact.
-teamnewpipe-newpipe-extractor = "55cd9d7155ae92ec6b06886f86908294b78c25f3"
+teamnewpipe-newpipe-extractor = "1ee1f8e38313d891deb9f4a3ed0d7e30780ed71a"
viewpager2 = "1.1.0"
webkit = "1.15.0" # New versions require minSdk 24
work = "2.11.2"
From 88468415ccb9f3380dec6d368247dcdd265dbb55 Mon Sep 17 00:00:00 2001
From: gajgaje2000
Date: Thu, 13 Aug 2026 18:05:09 +0530
Subject: [PATCH 017/155] Fix black video delay when entering fullscreen
---
.../fragments/detail/VideoDetailFragment.java | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
index ee93e3138..4780f7567 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
@@ -1295,9 +1295,15 @@ public final class VideoDetailFragment
player.UIs().get(MainPlayerUi.class).ifPresent(playerUi -> {
// sometimes binding would be null here, even though getView() != null above u.u
if (binding != null) {
- // prevent from re-adding a view multiple times
- playerUi.removeViewFromParent();
- binding.playerPlaceholder.addView(playerUi.getBinding().getRoot());
+ // Only reparent the view if it's not already in the playerPlaceholder.
+ // Removing and re-adding a SurfaceView destroys its native surface,
+ // causing a black screen until the video decoder hits the next
+ // keyframe (2-5 seconds on typical DASH/HLS streams).
+ if (playerUi.getBinding().getRoot().getParent()
+ != binding.playerPlaceholder) {
+ playerUi.removeViewFromParent();
+ binding.playerPlaceholder.addView(playerUi.getBinding().getRoot());
+ }
playerUi.setupVideoSurfaceIfNeeded();
}
});
From a652ee28c7ddc50b698cd76673d439b3c4585850 Mon Sep 17 00:00:00 2001
From: tobigr
Date: Fri, 14 Aug 2026 09:40:35 +0200
Subject: [PATCH 018/155] Update Piped and Invidious instances
---
app/src/main/AndroidManifest.xml | 31 ++++++-------------------------
1 file changed, 6 insertions(+), 25 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 67a33742b..2fc5ce26b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -273,34 +273,15 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
From 429ee2f6da5822412354f873b60bc09ee6ccf3c5 Mon Sep 17 00:00:00 2001
From: tobigr
Date: Fri, 14 Aug 2026 19:56:53 +0200
Subject: [PATCH 019/155] Remove Hooktube support
---
app/src/main/AndroidManifest.xml | 22 ----------------------
1 file changed, 22 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2fc5ce26b..31ebc123b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -240,28 +240,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
From a28859c941d7cdbc0d9a242c9b26d00ce42e7593 Mon Sep 17 00:00:00 2001
From: tobigr
Date: Fri, 14 Aug 2026 12:49:43 +0200
Subject: [PATCH 020/155] Update extractor
---
gradle/libs.versions.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index b15a61d42..0f518b3ae 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -73,7 +73,7 @@ teamnewpipe-nanojson = "e9d656ddb49a412a5a0a5d5ef20ca7ef09549996"
# the corresponding commit hash, since JitPack sometimes deletes artifacts.
# If there’s already a git hash, just add more of it to the end (or remove a letter)
# to cause jitpack to regenerate the artifact.
-teamnewpipe-newpipe-extractor = "7adafe2519cd4376ddb9c9bbf96237314e25725b"
+teamnewpipe-newpipe-extractor = "01fdde08af40f39f5736c921303218209bc9c13e"
viewpager2 = "1.1.0"
webkit = "1.15.0" # New versions require minSdk 24
work = "2.11.2"
From 5969042163a06652e9695c94e5b7f45ab58a36b7 Mon Sep 17 00:00:00 2001
From: Hosted Weblate
Date: Tue, 18 Aug 2026 05:51:45 +0200
Subject: [PATCH 021/155] Translated using Weblate (Estonian)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 100.0% (96 of 96 strings)
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (96 of 96 strings)
Translated using Weblate (French)
Currently translated at 100.0% (96 of 96 strings)
Translated using Weblate (Czech)
Currently translated at 100.0% (96 of 96 strings)
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (96 of 96 strings)
Translated using Weblate (Slovak)
Currently translated at 100.0% (96 of 96 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (96 of 96 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (96 of 96 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (96 of 96 strings)
Translated using Weblate (German)
Currently translated at 100.0% (96 of 96 strings)
Translated using Weblate (Icelandic)
Currently translated at 98.9% (768 of 776 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (776 of 776 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (776 of 776 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (776 of 776 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (776 of 776 strings)
Co-authored-by: Fjuro
Co-authored-by: Hmomam Lazaref
Co-authored-by: Hosted Weblate
Co-authored-by: Hosted Weblate user 54392
Co-authored-by: Igor Rückert
Co-authored-by: Ihor Hordiichuk
Co-authored-by: Jeff Huang
Co-authored-by: Mickaël Binos
Co-authored-by: Milan
Co-authored-by: Oğuz Ersen
Co-authored-by: Priit Jõerüüt
Co-authored-by: Simone Ognibene
Co-authored-by: Sveinn í Felli
Co-authored-by: VfBFan
Co-authored-by: Yaron Shahrabani
Co-authored-by: ginger-co
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/cs/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/et/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/fr/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/it/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sk/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/tr/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hant/
Translation: NewPipe/Metadata
---
app/src/main/res/values-ar/strings.xml | 287 +++++++++---------
app/src/main/res/values-he/strings.xml | 52 +++-
app/src/main/res/values-is/strings.xml | 21 ++
app/src/main/res/values-uk/strings.xml | 7 +-
.../metadata/android/cs/changelogs/1015.txt | 1 +
.../metadata/android/de/changelogs/1015.txt | 1 +
.../metadata/android/et/changelogs/1015.txt | 1 +
.../metadata/android/fr/changelogs/1015.txt | 1 +
.../metadata/android/it/changelogs/1015.txt | 1 +
.../android/pt-BR/changelogs/1015.txt | 1 +
.../metadata/android/sk/changelogs/1015.txt | 1 +
.../metadata/android/tr/changelogs/1015.txt | 1 +
.../android/zh-Hans/changelogs/1015.txt | 1 +
.../android/zh-Hant/changelogs/1015.txt | 1 +
14 files changed, 215 insertions(+), 162 deletions(-)
create mode 100644 fastlane/metadata/android/cs/changelogs/1015.txt
create mode 100644 fastlane/metadata/android/de/changelogs/1015.txt
create mode 100644 fastlane/metadata/android/et/changelogs/1015.txt
create mode 100644 fastlane/metadata/android/fr/changelogs/1015.txt
create mode 100644 fastlane/metadata/android/it/changelogs/1015.txt
create mode 100644 fastlane/metadata/android/pt-BR/changelogs/1015.txt
create mode 100644 fastlane/metadata/android/sk/changelogs/1015.txt
create mode 100644 fastlane/metadata/android/tr/changelogs/1015.txt
create mode 100644 fastlane/metadata/android/zh-Hans/changelogs/1015.txt
create mode 100644 fastlane/metadata/android/zh-Hant/changelogs/1015.txt
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index ed22ebe0b..edb4f142f 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -18,7 +18,7 @@
اختر مجلد التنزيل لملفات الفيديو
يتم تخزين ملفات الفيديو التي تم تنزيلها هنا
مجلد تحميل الفيديو
- ثبيت
+ تثبيت
تطبيق Kore غير موجود. هل تريد تثبيته؟
فاتح
خطأ في الشبكة
@@ -27,7 +27,7 @@
الصوت
تشغيل بواسطة كودي
بحث
- اللغة الإفتراضية للمحتوى
+ اللغة الافتراضية للمحتوى
الإعدادات
المظهر
الفيديو والصوت
@@ -61,8 +61,8 @@
الفيديو
تنزيل
حول و الأسئلة الشائعة
- التاريخ
- التاريخ
+ السجل
+ السجل
فتح في الوضع المنبثق
يزيل الصوت في بعض الجودات
تم إلغاء الاشتراك في القناة
@@ -108,8 +108,8 @@
عذرًا، حدث خطأ ما.
أبلِغ
معلومات:
- ماذا حدث:
- ماذا:\nطلب:\nلغة المحتوى:\nبلد المحتوى:\nلغة التطبيق:\nالخدمات:\nتوقيت جرينتش:\nالحزمة:\nالإصدار:\nOS نسخة:
+ مإذا حدث:
+ مإذا:\nطلب:\nلغة المحتوى:\nبلد المحتوى:\nلغة التطبيق:\nالخدمات:\nتوقيت جرينتش:\nالحزمة:\nالإصدار:\nOS نسخة:
تعليقك (باللغة الإنجليزية):
التفاصيل:
لم يتم العثور على نتائج
@@ -118,15 +118,15 @@
إعادة المحاولة
ليس هناك مشترِكون
- - %s مشارك
- - %s مشارك
- - %s مشاركين
- - %s مشترك
- - %s مشترك
+ - لا مشتركون
+ - مشترك واحد
+ - مشتركان
+ - %s مشتركين
+ - %s مشتركًا
- %s مشترك
- دون مشاهدات
- لاتوجد فيديوهات
+ لا توجد مشاهدات
+ لا توجد فيديوهات
ابدأ
إيقاف مؤقت
احذف
@@ -137,7 +137,7 @@
الخطأ
يقوم نيوبايب بالتنزيل
انقر للحصول على التفاصيل
- يُرجى الإنتظار…
+ يُرجى الانتظار…
تم نسخه إلى الحافظة
يرجى تحديد مجلد التنزيل لاحقا في الإعدادات
هذا الإذن مطلوب
@@ -153,7 +153,7 @@
بث مباشر خفيف الوزن مجاني على نظام أندرويد.
ساهم
سواءً كانت لديك أفكارٌ حول الترجمة، أو تغييرات التصميم، أو تنظيف الكود، أو حتى تغييرات جذرية فيه — فإن المساعدة مرحب بها دائمًا. كلما زاد العمل، كان ذلك أفضل!
- عرض علي GitHub
+ عرض على GitHub
تبرع
تم تطوير NewPipe بواسطة متطوعين يقضون أوقات فراغهم لتقديم أفضل تجربة مستخدم لكم. ساهموا في دعم المطورين لجعل NewPipe أفضل بينما يستمتعون بفنجان قهوة.
رد الجميل
@@ -169,7 +169,7 @@
لم يتم الاشتراك في أي قناة بعد
الشائعة
أفضل ٥٠
- جديد وساخن
+ جديد ورائج
أحذف
التفاصيل
إعدادات الصوت
@@ -177,33 +177,33 @@
تحدي الكابتشا
ضغط مطول للإدراج الى قائمة الانتظار
- - %s مشاهد
- - %s مشاهد
- - %s مشاهدة
- - %s مشاهدة
+ - لا مشاهدات
+ - مشاهدة واحدة
+ - مشاهدتان
+ - %s مشاهدات
- %s مشاهدة
- %s مشاهدة
- - %s فيديو
- - %s أشرطة فيديو
- - %s أشرطة فيديو
- - %s أشرطة فيديو
- - %s أشرطة فيديو
- - %s أشرطة فيديو
+ - لا فيديوهات
+ - فيديو واحد
+ - فيديوهان
+ - %s فيديوهات
+ - %s فيديو
+ - %s فيديو
طلب اختبار الكابتشا مطلوب
© %1$sبواسطة%2$sتحت%3$s
صفحة الكشك
حدد كشك
بدأ التشغيل في الخلفية
- المحتوى الإفتراضي حسب البلد
- الإنتقال إلى التشغيل في الخلفية
- الإنتقال إلى التشغيل في النافذة المنبثقة
- الإنتقال إلى الرئيسية
+ المحتوى الافتراضي حسب البلد
+ الانتقال إلى التشغيل في الخلفية
+ الانتقال إلى التشغيل في النافذة المنبثقة
+ الانتقال إلى الرئيسية
فتح الدرج
إغلاق الدرج
- دائماً
+ دائمًا
مرة واحدة فقط
لم يتم العثور على مشغل بث (يمكنك تثبيت VLC لتشغيله).
استيراد قاعدة البيانات
@@ -220,10 +220,10 @@
إلغاء
إعادة التسمية
تمت عملية التصدير
- تمَّت عملية الإستيراد
+ تمَّت عملية الاستيراد
تنبيه: تعذر استيراد كافة الملفات.
مشغل الفيديو
- السؤال دائماً
+ السؤال دائمًا
الحصول على المعلومات…
تحميل المحتوى المطلوب
إنشاء قائمة تشغيل جديدة
@@ -237,29 +237,29 @@
تكبير
تنزيل ملف البث
الإشارات المرجعية
- استعمال التقديم السريع الغير دقيق
- خاصية التقديم الغير دقيق تسمح للمشغل بالقفز خلال الفديو بشكل أسرع مع دقة قفز أقل. خاصية القفز ل5، 15 او 25 لا تعمل مع القفز الغير دقيق
+ استعمال التقديم السريع غير دقيق
+ خاصية التقديم غير دقيق تسمح للمشغل بالقفز خلال الفيديو بشكل أسرع مع دقة قفز أقل. خاصية القفز ل5، 15 او 25 لا تعمل مع القفز غير دقيق
تم إفراغ مساحة ذاكرة التخزين المؤقتة الخاصة بالصور
الملف
- لا يوجد مثل هذا المجلد
+ لا يوجد المجلد
لا يمكن أن يكون اسم الملف فارغًا
حدث خطأٌ ما: %1$s
ملف مضغوط ZIP غير صالح
إزالة الإشارة المرجعية
تناسب مع الشاشة
توليد تلقائي
- إستيراد
+ استيراد
استعادة مِن
تصدير إلى
عملية الاستعادة جارية …
عملية التصدير جارية …
- إستيراد ملف
+ استيراد ملف
معرفك, soundcloud.com/هويتك
امسح البيانات الوصفيّة المخزّنة مؤقّتًا
إزالة جميع بيانات صفحات الويب المخزنة مؤقّتًا
تم محو ذاكرة التخزين المؤقتّة للبيانات الوصفيّة
- وضع البث القادم تلقائيا في قائمة الإنتظار
- استمر عند إنهاء قائمة التشغيل (الغير المتكررة) من خلال إلحاق التدفق المرتبط
+ وضع البث القادم تلقائيا في قائمة الانتظار
+ استمر عند إنهاء قائمة التشغيل (غير المتكررة) من خلال إلحاق البث المرتبط
تعيين كصورة مصغرة لقائمة التشغيل
تفضيل قائمة التشغيل
تم تغيير الصورة المصغرة لقائمة التشغيل.
@@ -278,7 +278,7 @@
حذف سِجل البحث بالكامل؟
تم حذف سجل البحث
المشغل الخارجي لا يدعم هذه الأنواع من الروابط
- لا يوجد مثل هذا الملف/مصدر المحتوى
+ لا يوجد الملف/مصدر المحتوى
الملف غير موجود أو الإذن بالقراءة أو الكتابة إليه غير موجود
لا يوجد بث متاح للتنزيل
تم حذف عنصر واحد.
@@ -308,13 +308,11 @@
\n2. انتقل إلى عنوان URL هذا: %1$s
\n3. تسجيل الدخول عندما يطلب منك
\n4. انسخ عنوان URL للملف الشخصي الذي تمت إعادة توجيهك إليه.
- ضع في اعتبارك أن هذه العملية يمكن أن تكون مكلفة اذا كنت تستخدم بيانات اشتراك انترنت.
-\n
-\nهل تريد الاستمرار؟
+ ضع في اعتبارك أن هذه العملية يمكن أن تكون مكلفة إذا كنت تستخدم بيانات اشتراك انترنت. \n \nهل تريد الاستمرار؟
ضوابط سرعة التشغيل
سرعة الأداء
تردد الصوت
- إلغاء الإرتباط (قد يسبب تشويه)
+ إلغاء الارتباط (قد يسبب تشويه)
هل تريد أيضا استيراد الإعدادات؟
سياسة خصوصية NewPipe
يأخذ مشروع NewPipe خصوصيتك على محمل الجد. لذلك، لا يجمع التطبيق أي بيانات دون موافقتك.
@@ -331,7 +329,7 @@
إعادة تعيين
تصغير عند تبديل التطبيق
الإجراء عند التبديل إلى تطبيق آخر من مشغل الفيديو الرئيسي — %s
- لاشيء
+ لا شيء
تصغير إلى مشغل الخلفية
تصغير إلى مشغل منبثق
القنوات
@@ -425,20 +423,20 @@
لا توجد مشاهدة
لا أحد يستمع
- - %s مشاهدة
- - %s مشاهدة
- - %s مشاهدة
- - %s مشاهدات
- - %s مشاهدات
- - %s مشاهدات
+ - لا يشاهد أحد
+ - يشاهدها شخص واحد
+ - يشاهدها شخصان
+ - يشاهدها %s أشخاص
+ - يشاهدها %s شخصًا
+ - يشاهدها %s شخص
- - %s الاستماع
- - %s الاستماع
- - %s مستمعين
- - %s مستمعين
- - %s مستمعين
- - %s مستمعين
+ - لا يستمع أحد
+ - يستمع إليها شخص واحد
+ - يستمع إليها شخصان
+ - يستمع إليها %s أشخاص
+ - يستمع إليها %s شخصًا
+ - يستمع إليها %s شخص
تسريع إلى الأمام/-ترجيع وقت البحث
مثيلات خوادم پيرتيوب
@@ -466,9 +464,9 @@
الفيديوهات
- %d ثانية
- - %d ثانية
- - %d ثانية
- - %d ثواني
+ - ثانية واحدة
+ - ثانيتان
+ - %d ثوانٍ
- %d ثانية
- %d ثانية
@@ -495,12 +493,12 @@
هل تريد حذف هذه المجموعة؟
اسم المجموعة فارغ
- - %d تحديد
- - %d المحدد
- - %d المحدد
- - %d المحدد
- - %d المحدد
- - %d المحدد
+ - لا تحديد
+ - عنصر واحد محدَّد
+ - عنصران محدَّدان
+ - %d عناصر محدَّدة
+ - %d عنصرًا محدَّدًا
+ - %d عنصر محدَّد
لم يتم تحديد اشتراك
حدد الاشتراكات
@@ -512,7 +510,7 @@
- %d يوم
- %d يوم
- - %d أيام
+ - يومان
- %d أيام
- %d يومًا
- %d يومًا
@@ -520,7 +518,7 @@
- %d ساعة
- %d ساعة
- - %d ساعة
+ - ساعتان
- %d ساعات
- %d ساعة
- %d ساعة
@@ -528,12 +526,12 @@
- %d دقيقة
- %d دقيقة
- - %d دقيقة
+ - دقيقتان
- %d دقائق
- %d دقيقة
- %d دقيقة
- نظرا لقيود مشغل ExoPlayer مدة التقديم تم ضبطها الى %d ثانية
+ نظرًا لقيود مشغل ExoPlayer مدة التقديم تم ضبطها الى %d ثانية
إلغاء الكتم
كتم الصوت
هذا المحتوى ليس مدعومًا من قبل NewPipe.
@@ -541,8 +539,8 @@
\nنأمل أن يكون مدعومًا في التحديثات القادمة.
∞ فيديو
+100 فيديو
- الفنانين
- الالبومات
+ الفنانون
+ الألبومات
الأغاني
هذا الفيديو مقيد بالفئة العمرية.
\n
@@ -561,13 +559,13 @@
إظهار الاشتراكات غير المجمعة فقط
لا توجد إشارات مرجعية لقائمة التشغيل حتى الآن
اختر قائمة تشغيل
- يرجى مراجعة ما إذا توجد بالفعل مشكلة تناقش التحطم الموجود بالفعل. عند إنشاء تذاكر مكررة، فإنك تستغرق منا وقتًا يمكن أن نقضيه في إصلاح الخطأ الفعلي.
+ يرجى التحقق أولًا مما إذا كانت هناك مشكلة (issue) مطروحة بالفعل تتناول هذا العطل. إنشاء تذاكر مكررة يستهلك وقتًا كان يمكن استثماره في إصلاح الخطأ نفسه.
تقرير على GitHub
نسخ التقرير مُنسق
عرض نتائج ل: %s
أبدا
فقط على شبكة Wi-Fi
- بدء التشغيل تلقائياً — %s
+ بدء التشغيل تلقائيًا — %s
تشغيل قائمة الانتظار
تعذر التعرف على الرابط. فتح باستخدام تطبيق آخر؟
قائمة انتظار تلقائيّة
@@ -615,12 +613,11 @@
افتح باستخدام
يتوفر هذا المحتوى فقط للمستخدمين الذين قاموا بالدفع، لذلك لا يمكن بثه أو تنزيله عبر NewPipe.
يتوفر هذا الفيديو فقط لأعضاء YouTube Music Premium، لذلك لا يمكن بثه أو تنزيله من قبل NewPipe.
- هذا المحتوى خاص، لذلك لا يمكن دفقه أو تنزيله بواسطة NewPipe.
- هذا مسار SoundCloud Go+، على الأقل في بلدك، لذلك لا يمكن دفقه أو تنزيله بواسطة NewPipe.
+ هذا المحتوى خاص، لذلك لا يمكن بثّه أو تنزيله بواسطة NewPipe.
+ هذا مسار SoundCloud Go+، على الأقل في بلدك، لذلك لا يمكن بثّه أو تنزيله بواسطة NewPipe.
هذا المحتوى غير متوفر في بلدك.
- اغلق التطبيق قسريا
- هذا الفيديو مقيد بالفئة العمرية.
-\nنظرًا لسياسات YouTube الجديدة المتعلقة بمقاطع الفيديو المقيدة بالفئة العمرية، لا يمكن لـ NewPipe الوصول إلى أي من تدفقات الفيديو الخاصة به، وبالتالي لا يتمكن من تشغيلها.
+ أغلق التطبيق قسريًا
+ هذا الفيديو مقيد بالفئة العمرية. \nنظرًا لسياسات YouTube الجديدة المتعلقة بمقاطع الفيديو المقيدة بالفئة العمرية، لا يمكن لـ NewPipe الوصول إلى أي من بثوث الفيديو الخاصة به، وبالتالي لا يتمكن من تشغيلها.
إذاعة
المميزة
حل
@@ -672,18 +669,18 @@
اقتراحات البحث المحلية
اسحب العناصر لإزالتها
- - اكتمل %1$s تنزيل
- - اكتمل %1$s تنزيل
- - اكتمل %1$s تنزيل
+ - لم يكتمل أي تنزيل
+ - اكتمل تنزيل واحد
+ - اكتمل تنزيلان
- اكتملت %1$s تنزيلات
- - اكتمل %1$s تنزيل
+ - اكتمل %1$s تنزيلًا
- اكتمل %1$s تنزيل
- - اكتمل التنزيل
- - اكتمل التنزيل
- - اكتمل التنزيل
- - اكتمل تنزيل%s
+ - اكتمل التنزيل%s
+ - اكتمل التنزيل%s
+ - اكتمل التنزيلان%s
+ - اكتملت التنزيلات%s
- اكتملت التنزيلات%s
- اكتملت التنزيلات%s
@@ -693,7 +690,7 @@
تم وضع التالي على قائمة الانتظار
جاري المعالجة ... قد يستغرق لحظة
التحقق من وجود تحديثات
- التحقق يدويا من وجود إصدارات جديدة
+ التحقق يدويًا من وجود إصدارات جديدة
جاري التحقق من وجود تحديثات…
عناصر تغذية جديدة
إظهار خيار تعطل عند استخدام المشغل
@@ -719,10 +716,10 @@
بث جديد
إشعار المشغل
لقد اشتركت الآن في هذه القناة
- الإخطارات حول التدفقات الجديدة للاشتراكات
+ الإخطارات حول البثوث الجديدة للاشتراكات
إشعارات أحداث البث الجديدة
الإخطار بأحداث البث الجديدة من الاشتراكات
- تشغيل التحقق من وجود تدفقات جديدة
+ تشغيل التحقق من وجود بثوث جديدة
معدل البحث
مطلوب اتصال الشبكة
أي شبكة
@@ -731,19 +728,19 @@
,
تبديل الكل
- - %s دفق جديد
- - %s دفق جديد
- - %s دفق جديد
- - %s دفوق جديدة
- - %s دفق جديد
- - %s دفق جديد
+ - لا بثوث جديدة
+ - بث جديد واحد
+ - بثّان جديدان
+ - %s بثوث جديدة
+ - %s بثًا جديدًا
+ - %s بث جديد
النسبة المئوية
سيميتون
- لا يتم عرض التدفقات التي لم يدعمها برنامج التنزيل بعد
- الدفق المحدد غير مدعوم من قبل المشغلون الخارجيون
- لا توجد تدفقات صوتية متاحة للمشغلات الخارجية
- لا تتوفر تدفقات فيديو للاعبين الخارجيين
+ لا تُعرض البثوث التي لم يدعمها برنامج التنزيل بعد
+ البث المحدد غير مدعوم من المشغلات الخارجية
+ لا توجد بثوث صوتية متاحة للمشغلات الخارجية
+ لا تتوفر بثوث فيديو للمشغلات الخارجية
حدد الجودة للمشغلين الخارجيين
تنسيق غير معروف
جودة غير معروفة
@@ -763,17 +760,17 @@
تمت إضافة وقت (أوقات) مكررة %d
تحتوي قوائم التشغيل رمادية اللون بالفعل على هذا العنصر.
مفيد ، على سبيل المثال ، إذا كنت تستخدم سماعة رأس بأزرار مادية مكسورة
- تجاهل أحداث ازرار الوسائط الأجهزة
- هل تريد إزالة جميع التدفقات المكررة في قائمة التشغيل هذه؟
- إظهار/إخفاء التدفقات
+ تجاهل ضغطات أزرار الوسائط الفعلية على الجهاز
+ هل تريد إزالة جميع البثوث المكررة في قائمة التشغيل هذه؟
+ إظهار/إخفاء البثوث
تمت مشاهدته جزئيا
القادمة
إزالة التكرارات
إزالة التكرارات؟
- إظهار التدفقات التالية
+ إظهار البثوث التالية
شاهدت بالكامل
إجراء الإيماءة اليسرى
- اجراء الإيماءة اليمنى
+ إجراء الإيماءة اليمنى
السطوع
بدون
اختر إيماءة للنصف الأيسر من شاشة المشغل
@@ -804,19 +801,19 @@
انقل محدد علامة التبويب الرئيسي إلى الأسفل
موضع علامات التبويب الرئيسية
تم تعطيل نفق وسائل الإعلام عن طريق التقصير على جهازك لأن نموذج جهازك معروف بأنه لا يدعمه.
- لاتوجد بثوث
- لاتوجد بثوث مباشرة
- الفيديوات
+ لا توجد بثوث
+ لا توجد بثوث مباشرة
+ الفيديوهات
المشتركون
ما هي التبويبات المعروضة على صفحات القناة
تبويبات القنوات
- الفديوهات القصيرة
+ الفيديوهات القصيرة
جلب البيانات الوصفية…
تبديل تدوير الشاشة
- الانتقال إلى وضع ملئ الشاشة
+ الانتقال إلى وضع ملء الشاشة
اجلب تبويبات القنوات
البث التالي
- فتح قائمة انتظار التسغيل
+ فتح قائمة انتظار التشغيل
حول
تقديم المحتوى
الألبومات
@@ -850,12 +847,12 @@
مشاركة قائمة التشغيل
- %1$s: %2$s
- - رد %s
- - رد %s
- - ردان%s
- - ردود%s
- - ردود %s
- - ردود %s
+ - لا ردود
+ - رد واحد
+ - ردّان
+ - %s ردود
+ - %s ردًا
+ - %s رد
عرض المزيد
عرض أقل
@@ -885,14 +882,14 @@
أوقفت SoundCloud صفحة أفضل 50 الأصلية. تمت إزالة علامة التبويب المقابلة من صفحتك الرئيسية.
تمت إزالة تريندات YouTube المجمعة
أوقف YouTube صفحة الترند المدمجة اعتبارًا من 21 يوليو 2025. استبدلت NewPipe صفحة الموضوعات المتداولة الافتراضية بصفحة الموضوعات المتداولة الشائعة مع البث المباشر المتداول.\n\nيمكنك أيضًا تحديد صفحات رائجة مختلفة في \"الإعدادات > المحتوى > محتوى الصفحة الرئيسية\".
- توجهات الألعاب
- توجهات البث الصوتي
- الأفلام والعروض الأكثر رواجاً
+ الألعاب الرائجة
+ البودكاست الرائج
+ الأفلام والعروض الأكثر رواجًا
الموسيقى الرائجة
%s الف
%s مليون
%sمليار
- لاستخدام المشغل المنبثق، يرجى تحديد %1$s في قائمة إعدادات اندرويد التالية وتمكين %2$s.
+ لاستخدام المشغل المنبثق، يرجى تحديد %1$s في قائمة إعدادات أندرويد التالية وتمكين %2$s.
“السماح بالعرض فوق التطبيقات الاخرى”
حذف ملف
حذف المدخلات
@@ -907,35 +904,35 @@
تفاصيل
حل
- - تصدير %d إشتراك…
- - تصدير %d إشتراكات…
- - تصدير %d إشتراكات…
- - تصدير %d إشتراكات…
- - تصدير %d إشتراك…
- - تصدير %d إشتراك…
+ - تصدير الاشتراكات…
+ - تصدير اشتراك واحد…
+ - تصدير اشتراكين…
+ - تصدير %d اشتراكات…
+ - تصدير %d اشتراكًا…
+ - تصدير %d اشتراك…
- إستيراد الإشتراكات
- تصدير الإشتراكات
- إسترد الإشتراكات من ملف JSON تم تصديره مسبقاً
- قم بتصدير إشتراكاتك إلى ملف بصيغة .json
- الإستيراد من التصدير السابق
+ استيراد الاشتراكات
+ تصدير الاشتراكات
+ إسترد الاشتراكات من ملف JSON تم تصديره مسبقاً
+ قم بتصدير اشتراكاتك إلى ملف بصيغة .json
+ الاستيراد من التصدير السابق
سيوقف NewPipe الدعم لنظام أندرويد 5
لسوء الحظ، يعتمد تطبيق NewPipe على بعض المكتبات التي توقفت عن دعم نظامي Android 5.0 و5.1. لذا، سيعمل الإصدار القادم من NewPipe فقط على الأجهزة التي تعمل بنظام Android 6 أو أحدث. اقرأ المزيد في المقالة.
المدونة
- - تحميل %d إشتراكات…
- - تحميل %d إشتراكات…
- - تحميل %d إشتراك…
- - تحميل %d إشتراكات…
- - تحميل %d إشتراك…
- - تحميل %d إشتراك…
+ - تحميل الاشتراكات…
+ - تحميل اشتراك واحد…
+ - تحميل اشتراكين…
+ - تحميل %d اشتراكات…
+ - تحميل %d اشتراكًا…
+ - تحميل %d اشتراك…
- - إستيراد %d إشتراكات…
- - إستيراد %d إشتراكات…
- - إستيراد %d إشتراك…
- - إستيراد %d إشتراكات…
- - إستيراد %d إشتراك…
- - إستيراد %d إشتراك…
+ - استيراد الاشتراكات…
+ - استيراد اشتراك واحد…
+ - استيراد اشتراكين…
+ - استيراد %d اشتراكات…
+ - استيراد %d اشتراكًا…
+ - استيراد %d اشتراك…
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index cfcf05e6d..e54663a4f 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -47,8 +47,8 @@
להציג סרטונים דומים והבאים בתור
כתובת לא נתמכת
שפת התוכן המועדפת
- סרטונים ושמע
- תצוגה
+ וידאו ושמע
+ מראה
מתנגן ברקע
מתנגן בחלון צף
תוכן
@@ -156,20 +156,20 @@
תו חלופי
אותיות וספרות
רוב התווים המיוחדים
- על אודות NewPipe
- רישיונות צד שלישי
+ על NewPipe
+ רישיונות צד־שלישי
© %1$s ע״י %2$s תחת %3$s
על אודות ושו״ת
רישיונות
- נגן קל וחופשי להזרמת מדיה עבור Android.
+ הזרמה חופשית וקלילה ב־Android.
התנדבות
- אם יש לך רעיון כלשהו בנוגע לתרגום, שינויי עיצוב, ניקוי הקוד או שינויים מהותיים בקוד - אנו תמיד שמחים לקבל עזרה. ככל שיותר דברים מתבצעים כך היישומון משתפר!
+ אם יש לך רעיונות ליכולות מסוימות, בא לך לתרגם, לשנות את העיצוב או לבצע שינויים מהותיים בקוד - אנו תמיד שמחים לקבל עזרה. ככל שיותר דברים נעשים ככה הוא נהיה טוב יותר!
הצגה ב־GitHub
תרומה
- הפיתוח של NewPipe נערך ע״י מתנדבים שמשקיעים את זמנם הפנוי כדי להגיש לך את חווית השימוש הטובה ביותר. באפשרותך להעניק בחזרה כדי לסייע למפתחים לשפר את NewPipe בעודם נהנים מכוס קפה.
- לתרום בחזרה
- אתר הבית
- מומלץ לבקר באתר של NewPipe לפרטים נוספים ולחדשות.
+ NewPipe מפותח על ידי מתנדבים שמשקיעים את זמן החופשי כדי לספק לך את חוויית המשתמש הטובה ביותר. אפשר לתת בחזרה כדי לסייע למפתחים לשפר את NewPipe עוד יותר תוך שהם נהנים מכוס קפה.
+ לתת בחזרה
+ אתר
+ יש לבקר באתר של NewPipe למידע נוסף ולחדשות.
הרישיון של NewPipe
הצגת הרישיון
היסטוריה
@@ -724,8 +724,8 @@
גודל משך טעינת נגינה
מיון
הצגה באתר
- תשובות לשאלות נפוצות
- אם נתקלת בתקלות כשניסית להשתמש ביישומון, כדאי לעיין בתשובות לשאלות הנפוצות!
+ שאלות נפוצות
+ אם נתקלת בבעיות בשימוש ביישומון, חשוב לעיין בתשובות האלו לשאלות נפוצות!
ניתן לייבא או לייצא מינויים מתפריט 3 הנקודות
נגיעה כאן תוריד את %s
מצב מהיר
@@ -872,6 +872,32 @@
שגיאת HTTP 403 שהתקבלה מהשרת בזמן השמעה, ככל הנראה נגרמת עקב פקיעת כתובת URL של סטרימינג או חסימת IP
שגיאת HTTP %1$s התקבלה מהשרת בזמן הניגון
שגיאת HTTP 403 שהתקבלה מהשרת בזמן הניגון, ככל הנראה נגרמה עקב חסימת IP או בעיות בהסרת ערפול כתובת תזרים
- %1$s סירב לספק נתונים, וביקש התחברות כדי לאשר שהמבקש אינו בוט.\n\nכנראה שה־IP שלך נחסם זמנית על ידי %1$s, ניתן להמתין זמן מה או לעבור ל־IP אחר (לדוגמה על ידי הפעלה/כיבוי של VPN, או על ידי מעבר מרשת אלחוטית לתקשורת נתונים סלולרית).
+ %1$s סירב לספק נתונים, וביקש התחברות כדי לאשר שהמבקש אינו בוט.\n\nכנראה שה־IP שלך נחסם זמנית על ידי %1$s, ניתן להמתין זמן מה או לעבור ל־IP אחר (לדוגמה על ידי הפעלה/כיבוי של VPN, או על ידי מעבר מרשת אלחוטית לתקשורת נתונים סלולרית).\n\nנא לקרוא את רשומת FAQ הזאת למידע נוסף.
תוכן זה אינו זמין עבור מדינת התוכן שנבחרה כעת.\n\nניתן לשנות את בחירתך דרך „הגדרות > תוכן > מדינת תוכן ברירת מחדל”.
+
+ - מייצא מנוי %d …
+ - מייצא %d מנויים…
+ - מייצא %d מנויים…
+
+
+ - טוען מנוי %d …
+ - טוען %d מנויים…
+ - טוען %d מנויים…
+
+
+ - מייבא מנוי %d …
+ - מייבא %d מנויים…
+ - מייבא %d מנויים…
+
+ ייבוא מנויים
+ ייצוא מנויים
+ ייבוא מנויים מייצוא קודם בקובץ .json
+ ייצא את המינויים שלך לקובץ .json
+ ייבוא מייצוא קודם
+ באוגוסט 2025, גוגל הודיעה כי החל מספטמבר 2026, התקנת יישומים תדרוש אימות מפתח עבור כל יישומי אנדרואיד במכשירים מוסמכים, כולל אלה שהותקנו מחוץ לחנות Play. מכיוון שהמפתחים של NewPipe אינם מסכימים לדרישה זו, NewPipe כבר לא יעבוד על מכשירי אנדרואיד מוסמכים לאחר זמן זה.
+ פרטים
+ פתרון
+ NewPipe מורידה את התמיכה באנדרואיד 5
+ למרבה הצער, NewPipe תלויה במספר ספריות שהורידו את התמיכה באנדרואיד 5.0 ו־5.1. הגירסה החדשה הבאה תעבוד רק על מכשירים עם אנדרואיד 6 ומעלה, למרבה הצער. קרא עוד בבלוג.
+ פוסט בבלוג
diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml
index 854259735..a36968de3 100644
--- a/app/src/main/res/values-is/strings.xml
+++ b/app/src/main/res/values-is/strings.xml
@@ -821,4 +821,25 @@
Tók við HTTP-villu %1$s frá þjóni á meðan afspilun stóð
Tók við HTTP-villu 403 frá þjóni á meðan afspilun stóð, líklega vegna banns á IP-vistfang eða vandamála með afkóðun URL-slóðar streymis
Þetta efni er ekki í boði fyrir valið landsvæði efnis.\n\nBreyttu valinu með því að fara í \"Stillingar > Efni > Sjálfgefið landsvæði efnis\".
+
+ - Flyt út %d áskrift…
+ - Flyt út %d áskriftir…
+
+
+ - Hleð inn %d áskrift…
+ - Hleð inn %d áskriftum…
+
+
+ - Flyt út %d áskrift…
+ - Flyt út %d áskriftir…
+
+ Flytja inn áskriftir
+ Flytja út áskriftir
+ Flytja áskriftir inn úr fyrri .json útflutningsskrá
+ Flytja áskriftirnar þínar í .json-skrá
+ Flytja inn úr fyrri útflutningsskrá
+ Nánar
+ Lausn
+ NewPipe er að hætta stuðningi við Android 5
+ Bloggfærsla
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index a64a6722f..0fbeb67d4 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -191,7 +191,7 @@
Перейменувати
Ліцензії третіх сторін
Про нас і ЧаПи
- Libre — легкий стримінг на Android
+ Libre — легкий стримінг на Android.
Незалежно від того, чи у вас є ідеї щодо перекладу, змін дизайну, очищення коду або серйозних доопрацювань — будь-яка допомога завжди вітається. Чим більше зроблено, тим кращим стає проєкт!
Налагодження
Нічого немає… чути лише цвіркунів
@@ -313,8 +313,7 @@
NewPipe — це copyleft libre програмне забезпечення: ви можете вільно використовувати, вивчати, поширювати та вдосконалювати його. Зокрема, ви можете розповсюджувати та/або змінювати його на умовах GNU General Public License, опублікованої Free Software Foundation, версії 3 або (на ваш вибір) будь-якої пізнішої версії.
Імпортувати разом з налаштуваннями\?
Політика конфіденційності NewPipe
- Проєкт NewPipe дуже серйозно ставиться до вашої приватності. Тому застосунок не збирає ніяких даних без вашої згоди.
-\nПолітика приватності докладно NewPipe пояснює, які дані надсилаються і зберігаються у звіті про збій.
+ Проєкт NewPipe дуже серйозно ставиться до вашої приватності. Тому застосунок не збирає жодних даних без вашої згоди. \nПолітика приватності NewPipe докладно описує, які дані надсилаються і зберігаються у звіті про збій.
Ознайомитися з політикою конфіденційності
З метою дотримання Загального регламенту про захист даних ЄС (General Data Protection Regulation, GDPR) ми звертаємо вашу увагу на політику приватності NewPipe. Будь ласка, прочитайте уважно.
\nВи маєте прийняти її, аби надіслати нам звіт про помилку.
@@ -864,7 +863,7 @@
Під час відтворення від сервера отримано помилку HTTP 403, ймовірно, через закінчення терміну дії URL-адреси потокової передачі або заборону IP-адреси
Помилка HTTP %1$s отримана від сервера під час відтворення
Під час відтворення від сервера отримано помилку HTTP 403, ймовірно, через заборону IP-адреси або проблеми з деобфускацією URL-адреси потокової передачі
- %1$s відмовився надати дані, запитуючи логін для підтвердження того, що запитувач не є ботом.\n\nВаша IP-адреса могла бути тимчасово заблокована %1$s. Ви можете почекати деякий час або перейти на іншу IP-адресу (наприклад, увімкнувши/вимкнувши VPN або переключившись з Wi-Fi на мобільні дані).
+ %1$s відмовляється надати дані та запитує пароль для підтвердження, що запитувач не бот.\n\n%1$s міг тимчасово заблокувати вашу IP-адресу. Ви можете почекати деякий час або перейти на іншу IP-адресу (наприклад, увімкнувши/вимкнувши VPN або перемкнувшись з Wi-Fi на мобільні дані).\n\nЩоб дізнатися докладніше, перегляньте цю довідку.
Цей контент недоступний для вибраної країни контенту.\n\nЗмініть свій вибір у розділі \"Налаштування > Контент > Країна контенту за замовчуванням\".
У серпні 2025 року, Google анонсувала, що з вересня 2026 року, для встановлення застосунків буде потрібна верифікація розробника для всіх Android застосунків на сертифікованих пристроях, включаючи ті, що були встановлені не через Play Store. Оскільки розробники NewPipe не згодні з цією вимогою, NewPipe перестане працювати на сертифікованих Android пристроях після цієї дати.
Детальніше
diff --git a/fastlane/metadata/android/cs/changelogs/1015.txt b/fastlane/metadata/android/cs/changelogs/1015.txt
new file mode 100644
index 000000000..46d1965f3
--- /dev/null
+++ b/fastlane/metadata/android/cs/changelogs/1015.txt
@@ -0,0 +1 @@
+Toto je opravné vydání opravující živé přenosy na media.ccc.de. Šťastné hackování!
diff --git a/fastlane/metadata/android/de/changelogs/1015.txt b/fastlane/metadata/android/de/changelogs/1015.txt
new file mode 100644
index 000000000..d9bc5c754
--- /dev/null
+++ b/fastlane/metadata/android/de/changelogs/1015.txt
@@ -0,0 +1 @@
+Dies ist ein Hotfix, der Probleme mit den Live-Streams auf media.ccc.de behebt. Viel Spaß beim Hacken!
diff --git a/fastlane/metadata/android/et/changelogs/1015.txt b/fastlane/metadata/android/et/changelogs/1015.txt
new file mode 100644
index 000000000..df86a00d2
--- /dev/null
+++ b/fastlane/metadata/android/et/changelogs/1015.txt
@@ -0,0 +1 @@
+See on kiirparandus media.ccc.de voogedastuse jaoks. Jätkame samas stiilis!
diff --git a/fastlane/metadata/android/fr/changelogs/1015.txt b/fastlane/metadata/android/fr/changelogs/1015.txt
new file mode 100644
index 000000000..884960417
--- /dev/null
+++ b/fastlane/metadata/android/fr/changelogs/1015.txt
@@ -0,0 +1 @@
+Il s'agit d'un correctif visant à résoudre les problèmes liés aux diffusions en direct sur media.ccc.de. Bon hacking !
diff --git a/fastlane/metadata/android/it/changelogs/1015.txt b/fastlane/metadata/android/it/changelogs/1015.txt
new file mode 100644
index 000000000..4e10dc1f4
--- /dev/null
+++ b/fastlane/metadata/android/it/changelogs/1015.txt
@@ -0,0 +1 @@
+Si tratta di un aggiornamento che risolve i problemi relativi agli streaming live su media.ccc.de. Buon hacking!
diff --git a/fastlane/metadata/android/pt-BR/changelogs/1015.txt b/fastlane/metadata/android/pt-BR/changelogs/1015.txt
new file mode 100644
index 000000000..e5d33d25a
--- /dev/null
+++ b/fastlane/metadata/android/pt-BR/changelogs/1015.txt
@@ -0,0 +1 @@
+Este é um hotfix que corrige transmissões ao vivo de media.ccc.de. Feliz Hacking!
diff --git a/fastlane/metadata/android/sk/changelogs/1015.txt b/fastlane/metadata/android/sk/changelogs/1015.txt
new file mode 100644
index 000000000..615e94f4b
--- /dev/null
+++ b/fastlane/metadata/android/sk/changelogs/1015.txt
@@ -0,0 +1 @@
+Toto je verzia s opravou, ktorá rieši problémy so živými prenosmi na media.ccc.de. Príjemné hakovanie!
diff --git a/fastlane/metadata/android/tr/changelogs/1015.txt b/fastlane/metadata/android/tr/changelogs/1015.txt
new file mode 100644
index 000000000..04329c6ca
--- /dev/null
+++ b/fastlane/metadata/android/tr/changelogs/1015.txt
@@ -0,0 +1 @@
+Bu, media.ccc.de için canlı yayın sorunlarını gideren bir düzeltme sürümüdür. Keyifli kodlamalar!
diff --git a/fastlane/metadata/android/zh-Hans/changelogs/1015.txt b/fastlane/metadata/android/zh-Hans/changelogs/1015.txt
new file mode 100644
index 000000000..f02367bd2
--- /dev/null
+++ b/fastlane/metadata/android/zh-Hans/changelogs/1015.txt
@@ -0,0 +1 @@
+这是热修复版本,修复 media.ccc.de 直播。Happy Hacking!
diff --git a/fastlane/metadata/android/zh-Hant/changelogs/1015.txt b/fastlane/metadata/android/zh-Hant/changelogs/1015.txt
new file mode 100644
index 000000000..7f7a84741
--- /dev/null
+++ b/fastlane/metadata/android/zh-Hant/changelogs/1015.txt
@@ -0,0 +1 @@
+這是針對 media.ccc.de 直播功能所釋出的快速修復版本。祝您愉快!
From ff4a7b383e8c9421158273a562d26a5a369bb16e Mon Sep 17 00:00:00 2001
From: Hosted Weblate
Date: Sat, 15 Aug 2026 16:38:32 +0200
Subject: [PATCH 022/155] Translated using Weblate (Hebrew)
Currently translated at 97.3% (37 of 38 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (38 of 38 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (38 of 38 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (38 of 38 strings)
Co-authored-by: Hmomam Lazaref
Co-authored-by: Hosted Weblate
Co-authored-by: Ihor Hordiichuk
Co-authored-by: Random
Co-authored-by: Yaron Shahrabani
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/ar/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/he/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/it/
Translate-URL: https://hosted.weblate.org/projects/newpipe/compose/uk/
Translation: NewPipe/compose
---
.../composeResources/values-ar/strings.xml | 2 +-
.../composeResources/values-it/strings.xml | 2 +-
.../composeResources/values-iw/strings.xml | 39 ++++++++++++++++++-
.../composeResources/values-uk/strings.xml | 4 +-
4 files changed, 42 insertions(+), 5 deletions(-)
diff --git a/shared/src/commonMain/composeResources/values-ar/strings.xml b/shared/src/commonMain/composeResources/values-ar/strings.xml
index 280183c95..6b8ade022 100644
--- a/shared/src/commonMain/composeResources/values-ar/strings.xml
+++ b/shared/src/commonMain/composeResources/values-ar/strings.xml
@@ -9,7 +9,7 @@
بث مباشر خفيف الوزن مجاني على نظام أندرويد.
ساهم
سواءً كانت لديك أفكارٌ حول الترجمة، أو تغييرات التصميم، أو تنظيف الكود، أو حتى تغييرات جذرية فيه — فإن المساعدة مرحب بها دائمًا. كلما زاد العمل، كان ذلك أفضل!
- عرض علي GitHub
+ عرض على GitHub
تبرع
تم تطوير NewPipe بواسطة متطوعين يقضون أوقات فراغهم لتقديم أفضل تجربة مستخدم لكم. ساهموا في دعم المطورين لجعل NewPipe أفضل بينما يستمتعون بفنجان قهوة.
رد الجميل
diff --git a/shared/src/commonMain/composeResources/values-it/strings.xml b/shared/src/commonMain/composeResources/values-it/strings.xml
index 800a1e776..d862ef661 100644
--- a/shared/src/commonMain/composeResources/values-it/strings.xml
+++ b/shared/src/commonMain/composeResources/values-it/strings.xml
@@ -25,7 +25,7 @@
Fatto
Non disponibile
NewPipe è sviluppato da volontari che impiegano il loro tempo libero per offrirti un'esperienza d'uso migliore. Restituisci il favore, aiutandoli a rendere NewPipe ancora più piacevole mentre si gustano una tazza di caffè.
- Il progetto NewPipe tiene molto seriamente alla tua privacy. Perciò, l'app non raccoglie alcun dato senza il tuo consenso. \nL'informativa sulla privacy spiega nel dettaglio quali dati vengono trattati e memorizzati durante l'invio di segnalazioni per arresti anomali.
+ Il progetto NewPipe tiene molto alla tua privacy. Perciò, l'app non raccoglie alcun dato senza il tuo consenso. \nL'informativa sulla privacy spiega nel dettaglio quali dati vengono trattati e memorizzati durante l'invio di segnalazioni per arresti anomali.
NewPipe è software libre copyleft: puoi utilizzare, studiare, condividere e migliorare a volontà il suo codice sorgente. Nello specifico è possibile ridistribuirlo e/o modificarlo in base ai termini della GNU General Public License come pubblicato dalla Free Software Foundation, sia la versione 3 della licenza sia (a vostra scelta) qualsiasi versione successiva.
Impostazioni
Cerca
diff --git a/shared/src/commonMain/composeResources/values-iw/strings.xml b/shared/src/commonMain/composeResources/values-iw/strings.xml
index 55344e519..c64858600 100644
--- a/shared/src/commonMain/composeResources/values-iw/strings.xml
+++ b/shared/src/commonMain/composeResources/values-iw/strings.xml
@@ -1,3 +1,40 @@
-
\ No newline at end of file
+ חזרה
+ על NewPipe
+ רישיונות צד־שלישי
+ על ידי %1$s בכפוף לרישיון %2$s
+ על אודות ושו״ת
+ רישיונות
+ הזרמה חופשית וקלילה ב־Android.
+ התנדבות
+ הצגה ב־GitHub
+ תרומה
+ לתת בחזרה
+ אתר
+ יש לבקר באתר של NewPipe למידע נוסף ולחדשות.
+ מדיניות הפרטיות של NewPipe
+ הצגת מדיניות הפרטיות
+ הרישיון של NewPipe
+ הצגת הרישיון
+ שאלות נפוצות
+ סיום
+ לא זמין
+ פתיחה בדפדפן
+ הגדרות
+ חיפוש
+ תוכן
+ התראות
+ וידאו ושמע
+ הורדה
+ מראה
+ היסטוריה ומטמון
+ עדכונים
+ גיבוי ושחזור
+ ניפוי שגיאות
+ אם יש לך רעיונות ליכולות מסוימות, בא לך לתרגם, לשנות את העיצוב או לבצע שינויים מהותיים בקוד - אנו תמיד שמחים לקבל עזרה. ככל שיותר דברים נעשים ככה הוא נהיה טוב יותר!
+ NewPipe מפותח על ידי מתנדבים שמשקיעים את זמן החופשי כדי לספק לך את חוויית המשתמש הטובה ביותר. אפשר לתת בחזרה כדי לסייע למפתחים לשפר את NewPipe עוד יותר תוך שהם נהנים מכוס קפה.
+ מיזם NewPIpe לוקח את הפרטיות שלך ברצינות. לכן, היישומן לא אוסף נתונים עליך ללא הסכמתך.\nמדיניות הפרטיות של NewPipe מסבירה בפירוט אילו נתונים נשלחים ומאוחסנים בעת משלוח דיווח על קריסה.
+ אם נתקלת בבעיות בשימוש ביישומון, חשוב לעיין בתשובות האלו לשאלות נפוצות!
+ הצגה באתר
+
diff --git a/shared/src/commonMain/composeResources/values-uk/strings.xml b/shared/src/commonMain/composeResources/values-uk/strings.xml
index d612c4bea..d59fdbfc2 100644
--- a/shared/src/commonMain/composeResources/values-uk/strings.xml
+++ b/shared/src/commonMain/composeResources/values-uk/strings.xml
@@ -5,7 +5,7 @@
Ліцензії третіх сторін
Про нас і ЧаПи
Ліцензії
- Libre — легкий стримінг на Android
+ Libre — легкий стримінг на Android.
Зробіть внесок
Незалежно від того, чи у вас є ідеї щодо перекладу, змін дизайну, очищення коду або серйозних доопрацювань — будь-яка допомога завжди вітається. Чим більше зроблено, тим кращим стає проєкт!
Переглянути на GitHub
@@ -15,7 +15,7 @@
Вебсайт
Відвідайте вебсайт NewPipe, щоб дізнатися більше інформації та новин.
Політика конфіденційності NewPipe
- Проєкт NewPipe дуже серйозно ставиться до вашої конфіденційності. Тому застосунок не збирає жодних даних без вашої згоди.\nПолітика конфіденційності NewPipe детально пояснює, які дані надсилаються та зберігаються, коли ви надсилаєте звіт про збій.
+ Проєкт NewPipe дуже серйозно ставиться до вашої приватності. Тому застосунок не збирає жодних даних без вашої згоди. \nПолітика приватності NewPipe докладно описує, які дані надсилаються і зберігаються у звіті про збій.
Ознайомитися з політикою конфіденційності
Ліцензія NewPipe
NewPipe — це copyleft libre програмне забезпечення: ви можете вільно використовувати, вивчати, поширювати та вдосконалювати його. Зокрема, ви можете розповсюджувати та/або змінювати його на умовах GNU General Public License, опублікованої Free Software Foundation, версії 3 або (на ваш вибір) будь-якої пізнішої версії.
From ebd71388fe2cbe520c38a2cb678ad9668fd8e254 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Thu, 23 Jul 2026 17:34:48 +0200
Subject: [PATCH 023/155] [YouTube] Add support for"podcasts" and "courses"
tabs
---
.../settings/migration/SettingMigrations.java | 22 ++++++++++++++++++-
.../schabi/newpipe/util/ChannelTabHelper.java | 14 ++++++++++++
app/src/main/res/values/settings_keys.xml | 12 ++++++++++
app/src/main/res/values/strings.xml | 2 ++
4 files changed, 49 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/migration/SettingMigrations.java b/app/src/main/java/org/schabi/newpipe/settings/migration/SettingMigrations.java
index 92520ec7e..7350afb40 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/migration/SettingMigrations.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/migration/SettingMigrations.java
@@ -221,6 +221,25 @@ public final class SettingMigrations {
}
};
+ private static final Migration MIGRATION_8_9 = new Migration(8, 9) {
+ @Override
+ protected void migrate(@NonNull final Context context) {
+ // Support for courses and podcasts tabs were added.
+ // If the user changed the displayed tabs the new ones need to be added to the list
+ // of displayed tabs.
+ final Set enabledTabs = sp.getStringSet(context.getString(
+ R.string.show_channel_tabs_key), null);
+ if (enabledTabs != null) {
+ enabledTabs.add(context.getString(R.string.show_channel_tabs_courses));
+ enabledTabs.add(context.getString(R.string.show_channel_tabs_podcasts));
+ sp.edit()
+ .putStringSet(context.getString(R.string.show_channel_tabs_key),
+ enabledTabs)
+ .apply();
+ }
+ }
+ };
+
/**
* List of all implemented migrations.
*
@@ -236,12 +255,13 @@ public final class SettingMigrations {
MIGRATION_5_6,
MIGRATION_6_7,
MIGRATION_7_8,
+ MIGRATION_8_9,
};
/**
* Version number for preferences. Must be incremented every time a migration is necessary.
*/
- private static final int VERSION = 8;
+ private static final int VERSION = 9;
static void runMigrationsIfNeeded(@NonNull final Context context) {
diff --git a/app/src/main/java/org/schabi/newpipe/util/ChannelTabHelper.java b/app/src/main/java/org/schabi/newpipe/util/ChannelTabHelper.java
index cde6e3fef..57ed91a4d 100644
--- a/app/src/main/java/org/schabi/newpipe/util/ChannelTabHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/ChannelTabHelper.java
@@ -27,6 +27,8 @@ public final class ChannelTabHelper {
case ChannelTabs.LIKES:
case ChannelTabs.SHORTS:
case ChannelTabs.LIVESTREAMS:
+ case ChannelTabs.PODCASTS:
+ case ChannelTabs.COURSES:
return true;
default:
return false;
@@ -65,6 +67,10 @@ public final class ChannelTabHelper {
return R.string.show_channel_tabs_albums;
case ChannelTabs.LIKES:
return R.string.show_channel_tabs_likes;
+ case ChannelTabs.PODCASTS:
+ return R.string.show_channel_tabs_podcasts;
+ case ChannelTabs.COURSES:
+ return R.string.show_channel_tabs_courses;
default:
return -1;
}
@@ -83,6 +89,10 @@ public final class ChannelTabHelper {
return R.string.fetch_channel_tabs_livestreams;
case ChannelTabs.LIKES:
return R.string.fetch_channel_tabs_likes;
+ case ChannelTabs.PODCASTS:
+ return R.string.fetch_channel_tabs_podcasts;
+ case ChannelTabs.COURSES:
+ return R.string.fetch_channel_tabs_courses;
default:
return -1;
}
@@ -107,6 +117,10 @@ public final class ChannelTabHelper {
return R.string.channel_tab_albums;
case ChannelTabs.LIKES:
return R.string.channel_tab_likes;
+ case ChannelTabs.PODCASTS:
+ return R.string.channel_tab_podcasts;
+ case ChannelTabs.COURSES:
+ return R.string.channel_tab_courses;
default:
return R.string.unknown_content;
}
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 60ac20d0a..d5cc13014 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -297,6 +297,8 @@
show_channel_tabs_playlists
show_channel_tabs_albums
show_channel_tabs_likes
+ show_channel_tabs_podcasts
+ show_channel_tabs_courses
show_channel_tabs_about
- @string/show_channel_tabs_videos
@@ -307,6 +309,8 @@
- @string/show_channel_tabs_playlists
- @string/show_channel_tabs_albums
- @string/show_channel_tabs_likes
+ - @string/show_channel_tabs_podcasts
+ - @string/show_channel_tabs_courses
- @string/show_channel_tabs_about
@@ -318,6 +322,8 @@
- @string/channel_tab_playlists
- @string/channel_tab_albums
- @string/channel_tab_likes
+ - @string/channel_tab_podcasts
+ - @string/channel_tab_courses
- @string/channel_tab_about
show_search_suggestions
@@ -396,12 +402,16 @@
fetch_channel_tabs_shorts
fetch_channel_tabs_livestreams
fetch_channel_tabs_likes
+ fetch_channel_tabs_podcasts
+ fetch_channel_tabs_courses
- @string/fetch_channel_tabs_videos
- @string/fetch_channel_tabs_tracks
- @string/fetch_channel_tabs_shorts
- @string/fetch_channel_tabs_livestreams
- @string/fetch_channel_tabs_likes
+ - @string/fetch_channel_tabs_podcasts
+ - @string/fetch_channel_tabs_courses
- @string/channel_tab_videos
@@ -409,6 +419,8 @@
- @string/channel_tab_shorts
- @string/channel_tab_livestreams
- @string/channel_tab_likes
+ - @string/channel_tab_podcasts
+ - @string/channel_tab_courses
import_export_data_path
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 912ad3f36..d8d1fadee 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -849,6 +849,8 @@
Playlists
Albums
Likes
+ Podcasts
+ Courses
About
Channel tabs
What tabs are shown on the channel pages
From 1d1f801f548181d55619dee04e71e0fe922f74dc Mon Sep 17 00:00:00 2001
From: Thompson3142
Date: Wed, 19 Aug 2026 22:02:54 +0200
Subject: [PATCH 024/155] Fix opening links with timestamps
Fixes a regression from #13390 where the timestamp from links was immediately overridden.
---
app/src/main/java/org/schabi/newpipe/player/Player.java | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/Player.java b/app/src/main/java/org/schabi/newpipe/player/Player.java
index 7e72ff015..0b4c9884b 100644
--- a/app/src/main/java/org/schabi/newpipe/player/Player.java
+++ b/app/src/main/java/org/schabi/newpipe/player/Player.java
@@ -1762,7 +1762,6 @@ public final class Player implements PlaybackListener, Listener {
if (isStopped()) {
// Some phones suspend a paused player after 10 minutes. This causes the player to
// enter STATE_IDLE, causing playback to fail. So we try to recover from that here.
- setRecovery();
reloadPlayQueueManager();
}
From 2acfbab5f43dcf1b2bb9e97fe221fdd03dc1f6cd Mon Sep 17 00:00:00 2001
From: Elitenotavailable <138232793+Elitenotavailable@users.noreply.github.com>
Date: Wed, 29 Jul 2026 11:51:49 +0530
Subject: [PATCH 025/155] Fix playlist not clearing when navigating back
(#8888)
---
.../local/playlist/LocalPlaylistFragment.java | 129 +++------------
.../local/playlist/LocalPlaylistViewModel.kt | 148 ++++++++++++++++++
2 files changed, 167 insertions(+), 110 deletions(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistViewModel.kt
diff --git a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
index cb38d9bae..5047d4b7d 100644
--- a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
@@ -17,7 +17,6 @@ import android.os.Parcelable;
import android.text.InputType;
import android.text.TextUtils;
import android.util.Log;
-import android.util.Pair;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -31,6 +30,7 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
+import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView;
@@ -40,7 +40,6 @@ import org.reactivestreams.Subscription;
import org.schabi.newpipe.NewPipeDatabase;
import org.schabi.newpipe.R;
import org.schabi.newpipe.database.LocalItem;
-import org.schabi.newpipe.database.history.model.StreamHistoryEntry;
import org.schabi.newpipe.database.playlist.PlaylistStreamEntry;
import org.schabi.newpipe.database.playlist.model.PlaylistEntity;
import org.schabi.newpipe.database.stream.model.StreamEntity;
@@ -55,7 +54,6 @@ import org.schabi.newpipe.fragments.list.playlist.PlaylistControlViewHolder;
import org.schabi.newpipe.info_list.dialog.InfoItemDialog;
import org.schabi.newpipe.info_list.dialog.StreamDialogDefaultEntry;
import org.schabi.newpipe.local.BaseLocalListFragment;
-import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.player.playqueue.PlayQueue;
import org.schabi.newpipe.player.playqueue.SinglePlayQueue;
import org.schabi.newpipe.util.DeviceUtils;
@@ -72,13 +70,11 @@ import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Supplier;
-import java.util.stream.Collectors;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Single;
import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.disposables.Disposable;
-import io.reactivex.rxjava3.schedulers.Schedulers;
public class LocalPlaylistFragment extends BaseLocalListFragment, Void>
implements PlaylistControlViewHolder, DebounceSavable {
@@ -97,6 +93,7 @@ public class LocalPlaylistFragment extends BaseLocalListFragment {
+ if (state instanceof LocalPlaylistViewModel.WorkState.Loading) {
+ showLoading();
+ } else {
+ hideLoading();
+ if (state instanceof LocalPlaylistViewModel.WorkState.Error error) {
+ showError(new ErrorInfo(error.getThrowable(), UserAction.REQUESTED_BOOKMARK,
+ "Playlist operation"));
+ }
+ }
+ });
+
disposables = new CompositeDisposable();
isLoadingComplete = new AtomicBoolean();
@@ -369,13 +377,9 @@ public class LocalPlaylistFragment extends BaseLocalListFragment historyList.stream().map(StreamHistoryEntry::getStreamId)
- .collect(Collectors.toList()));
- final var streamsMaybe = playlistManager.getPlaylistStreams(playlistId)
- .firstElement()
- .zipWith(historyIdsMaybe, (playlist, historyStreamIds) -> {
- // Remove Watched, Functionality data
- final List itemsToKeep = new ArrayList<>();
- final boolean isThumbnailPermanent = playlistManager
- .getIsPlaylistThumbnailPermanent(playlistId);
- boolean thumbnailVideoRemoved = false;
-
- final var streamStates = recordManager
- .loadLocalStreamStateBatch(playlist).blockingGet();
-
- for (int i = 0; i < playlist.size(); i++) {
- final var playlistItem = playlist.get(i);
- final var streamStateEntity = streamStates.get(i);
- final int indexInHistory = Collections.binarySearch(historyStreamIds,
- playlistItem.getStreamId());
- final long duration = playlistItem.toStreamInfoItem().getDuration();
-
- if (indexInHistory < 0 // stream is not in history
- // stream is in history but the streamStateEntity is null
- // if the stream was played for less than 5 seconds, see
- // StreamStateEntity#PLAYBACK_SAVE_THRESHOLD_START_MILLISECONDS
- || streamStateEntity == null
- || (!removePartiallyWatched
- && !streamStateEntity.isFinished(duration))) {
- itemsToKeep.add(playlistItem);
- } else if (!isThumbnailPermanent && !thumbnailVideoRemoved
- && playlistManager.getPlaylistThumbnailStreamId(playlistId)
- == playlistItem.getStreamEntity().getUid()) {
- thumbnailVideoRemoved = true;
- }
- }
-
- return new Pair<>(itemsToKeep, thumbnailVideoRemoved);
- });
-
- disposables.add(streamsMaybe.subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(flow -> {
- final List itemsToKeep = flow.first;
- final boolean thumbnailVideoRemoved = flow.second;
-
- itemListAdapter.clearStreamItemList();
- itemListAdapter.addItems(itemsToKeep);
- debounceSaver.setHasChangesToSave();
- saveImmediate();
-
- if (thumbnailVideoRemoved) {
- updateThumbnailUrl();
- }
-
- final long videoCount = itemListAdapter.getItemsList().size();
- setStreamCountAndOverallDuration(itemListAdapter.getItemsList());
- if (videoCount == 0) {
- showEmptyState();
- }
-
- hideLoading();
- isRewritingPlaylist = false;
- }, throwable -> showError(new ErrorInfo(throwable, UserAction.REQUESTED_BOOKMARK,
- "Removing watched videos, partially watched=" + removePartiallyWatched))));
+ viewModel.removeWatchedStreams(playlistId, removePartiallyWatched);
}
@Override
@@ -633,29 +564,7 @@ public class LocalPlaylistFragment extends BaseLocalListFragment {
- itemListAdapter.clearStreamItemList();
- itemListAdapter.addItems(itemsToKeep);
- setStreamCountAndOverallDuration(itemListAdapter.getItemsList());
- debounceSaver.setHasChangesToSave();
- saveImmediate();
-
- hideLoading();
- isRewritingPlaylist = false;
- }, throwable -> showError(new ErrorInfo(throwable, UserAction.REQUESTED_BOOKMARK,
- "Removing duplicated streams"))));
+ viewModel.removeDuplicates(playlistId);
}
private void deleteItem(final PlaylistStreamEntry item) {
diff --git a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistViewModel.kt b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistViewModel.kt
new file mode 100644
index 000000000..954449bb4
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistViewModel.kt
@@ -0,0 +1,148 @@
+/*
+ * SPDX-FileCopyrightText: 2026 NewPipe e.V.
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+package org.schabi.newpipe.local.playlist
+
+import android.app.Application
+import android.util.Pair
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
+import io.reactivex.rxjava3.core.Completable
+import io.reactivex.rxjava3.disposables.CompositeDisposable
+import io.reactivex.rxjava3.schedulers.Schedulers
+import java.util.Collections
+import org.schabi.newpipe.NewPipeDatabase
+import org.schabi.newpipe.database.playlist.PlaylistStreamEntry
+import org.schabi.newpipe.database.playlist.model.PlaylistEntity
+import org.schabi.newpipe.local.history.HistoryRecordManager
+
+class LocalPlaylistViewModel(application: Application) : AndroidViewModel(application) {
+ private val playlistManager = LocalPlaylistManager(NewPipeDatabase.getInstance(application))
+ private val recordManager = HistoryRecordManager(application)
+ private val disposables = CompositeDisposable()
+
+ private val _workState = MutableLiveData(WorkState.Idle)
+ val workState: LiveData = _workState
+
+ sealed class WorkState {
+ object Idle : WorkState()
+ object Loading : WorkState()
+ data class Error(val throwable: Throwable) : WorkState()
+ object Success : WorkState()
+ }
+
+ /**
+ * Removes watched streams from the playlist.
+ * This operation is performed in the background and survives fragment destruction
+ * as it is not disposed when the ViewModel is cleared (to fix #8888).
+ */
+ fun removeWatchedStreams(playlistId: Long, removePartiallyWatched: Boolean) {
+ _workState.value = WorkState.Loading
+
+ val historyIdsMaybe = recordManager.streamHistorySortedById
+ .firstElement()
+ .map { historyList ->
+ historyList.map { it.streamId }
+ }
+
+ val streamsMaybe = playlistManager.getPlaylistStreams(playlistId)
+ .firstElement()
+ .zipWith(historyIdsMaybe) { playlist, historyStreamIds ->
+ val itemsToKeep = mutableListOf()
+ val isThumbnailPermanent = playlistManager.getIsPlaylistThumbnailPermanent(playlistId)
+ var thumbnailVideoRemoved = false
+
+ val streamStates = recordManager.loadLocalStreamStateBatch(playlist).blockingGet()
+
+ for (i in playlist.indices) {
+ val playlistItem = playlist[i]
+ val streamStateEntity = streamStates[i]
+ val indexInHistory = Collections.binarySearch(historyStreamIds, playlistItem.streamId)
+ val duration = playlistItem.toStreamInfoItem().duration
+
+ if (indexInHistory < 0 || streamStateEntity == null ||
+ (!removePartiallyWatched && !streamStateEntity.isFinished(duration))
+ ) {
+ itemsToKeep.add(playlistItem)
+ } else if (!isThumbnailPermanent && !thumbnailVideoRemoved &&
+ playlistManager.getPlaylistThumbnailStreamId(playlistId) ==
+ playlistItem.streamEntity.uid
+ ) {
+ thumbnailVideoRemoved = true
+ }
+ }
+
+ Pair(itemsToKeep, thumbnailVideoRemoved)
+ }
+
+ val disposable = streamsMaybe
+ .subscribeOn(Schedulers.io())
+ .flatMapCompletable { flow ->
+ val itemsToKeep = flow.first
+ val thumbnailVideoRemoved = flow.second
+ val streamIds = itemsToKeep.map { it.streamId }
+
+ playlistManager.updateJoin(playlistId, streamIds)
+ .andThen(
+ Completable.fromAction {
+ if (thumbnailVideoRemoved) {
+ updateThumbnailUrl(playlistId, itemsToKeep)
+ }
+ }
+ )
+ }
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(
+ { _workState.value = WorkState.Success },
+ { _workState.value = WorkState.Error(it) }
+ )
+
+ disposables.add(disposable)
+ }
+
+ /**
+ * Removes duplicate streams from the playlist.
+ */
+ fun removeDuplicates(playlistId: Long) {
+ _workState.value = WorkState.Loading
+
+ val disposable = playlistManager.getDistinctPlaylistStreams(playlistId)
+ .firstElement()
+ .subscribeOn(Schedulers.io())
+ .flatMapCompletable { itemsToKeep ->
+ val streamIds = itemsToKeep.map { it.streamId }
+ playlistManager.updateJoin(playlistId, streamIds)
+ }
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(
+ { _workState.value = WorkState.Success },
+ { _workState.value = WorkState.Error(it) }
+ )
+
+ disposables.add(disposable)
+ }
+
+ private fun updateThumbnailUrl(playlistId: Long, itemsToKeep: List) {
+ if (playlistManager.getIsPlaylistThumbnailPermanent(playlistId)) {
+ return
+ }
+
+ val thumbnailStreamId = if (itemsToKeep.isNotEmpty()) {
+ itemsToKeep[0].streamEntity.uid
+ } else {
+ PlaylistEntity.DEFAULT_THUMBNAIL_ID
+ }
+
+ playlistManager.changePlaylistThumbnail(playlistId, thumbnailStreamId, false).blockingGet()
+ }
+
+ override fun onCleared() {
+ super.onCleared()
+ // We deliberately do not clear disposables here to allow pending
+ // database mutations to finish even if the user leaves the screen.
+ }
+}
From 0245413725a0fec07958d1057652ef9e884ef2b7 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Thu, 20 Aug 2026 23:10:31 +0200
Subject: [PATCH 026/155] Update extractor
---
gradle/libs.versions.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 0f518b3ae..cb1a4836a 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -73,7 +73,7 @@ teamnewpipe-nanojson = "e9d656ddb49a412a5a0a5d5ef20ca7ef09549996"
# the corresponding commit hash, since JitPack sometimes deletes artifacts.
# If there’s already a git hash, just add more of it to the end (or remove a letter)
# to cause jitpack to regenerate the artifact.
-teamnewpipe-newpipe-extractor = "01fdde08af40f39f5736c921303218209bc9c13e"
+teamnewpipe-newpipe-extractor = "bf530ea1361a332964d8d0a4ec79b0e57221b7ec"
viewpager2 = "1.1.0"
webkit = "1.15.0" # New versions require minSdk 24
work = "2.11.2"
From aa937ea269a5a7a16c8b175a13fad349901d6c40 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Thu, 20 Aug 2026 23:39:45 +0200
Subject: [PATCH 027/155] Revert "Update extractor"
This reverts commit 0245413725a0fec07958d1057652ef9e884ef2b7.
---
gradle/libs.versions.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index cb1a4836a..0f518b3ae 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -73,7 +73,7 @@ teamnewpipe-nanojson = "e9d656ddb49a412a5a0a5d5ef20ca7ef09549996"
# the corresponding commit hash, since JitPack sometimes deletes artifacts.
# If there’s already a git hash, just add more of it to the end (or remove a letter)
# to cause jitpack to regenerate the artifact.
-teamnewpipe-newpipe-extractor = "bf530ea1361a332964d8d0a4ec79b0e57221b7ec"
+teamnewpipe-newpipe-extractor = "01fdde08af40f39f5736c921303218209bc9c13e"
viewpager2 = "1.1.0"
webkit = "1.15.0" # New versions require minSdk 24
work = "2.11.2"
From c0e530be37cf5dffded928f20cbde133775b15f3 Mon Sep 17 00:00:00 2001
From: Maxwellm34
Date: Fri, 21 Aug 2026 16:43:12 +0000
Subject: [PATCH 028/155] =?UTF-8?q?fix:=20correct=20typo=20INFINGING=20?=
=?UTF-8?q?=E2=86=92=20INFRINGING=20in=20README?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Maxwellm34
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index b95bdd97a..28a429ecb 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@
>
> PUTTING NEWPIPE, OR ANY FORK OF IT, INTO THE GOOGLE PLAY STORE VIOLATES THEIR TERMS AND CONDITIONS.
>
-> "NewPipe" IS A REGISTERED WORD MARK SUBJECT TO [ITS TRADEMARK POLICY](https://newpipe-ev.de/policy/trademark/). INFINGING APPLICATIONS WILL NOT BE TOLERATED.
+> "NewPipe" IS A REGISTERED WORD MARK SUBJECT TO [ITS TRADEMARK POLICY](https://newpipe-ev.de/policy/trademark/). INFRINGING APPLICATIONS WILL NOT BE TOLERATED.
## Screenshots
From 936ce4943da4fd76ef3a90f9d60b33f4ea9df902 Mon Sep 17 00:00:00 2001
From: Hosted Weblate
Date: Fri, 21 Aug 2026 13:56:21 +0200
Subject: [PATCH 029/155] Translated using Weblate (Japanese)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 100.0% (96 of 96 strings)
Translated using Weblate (Estonian)
Currently translated at 100.0% (778 of 778 strings)
Translated using Weblate (Bulgarian)
Currently translated at 100.0% (778 of 778 strings)
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (778 of 778 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (778 of 778 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (778 of 778 strings)
Translated using Weblate (Czech)
Currently translated at 100.0% (778 of 778 strings)
Translated using Weblate (Slovak)
Currently translated at 100.0% (778 of 778 strings)
Translated using Weblate (Romanian)
Currently translated at 99.6% (775 of 778 strings)
Translated using Weblate (Korean)
Currently translated at 100.0% (778 of 778 strings)
Translated using Weblate (Japanese)
Currently translated at 100.0% (778 of 778 strings)
Translated using Weblate (Dutch)
Currently translated at 100.0% (778 of 778 strings)
Translated using Weblate (Hungarian)
Currently translated at 100.0% (778 of 778 strings)
Translated using Weblate (French)
Currently translated at 100.0% (778 of 778 strings)
Translated using Weblate (German)
Currently translated at 100.0% (778 of 778 strings)
Translated using Weblate (Korean)
Currently translated at 100.0% (96 of 96 strings)
Translated using Weblate (Romanian)
Currently translated at 99.8% (775 of 776 strings)
Co-authored-by: Agnieszka C
Co-authored-by: Aster
Co-authored-by: Fjuro
Co-authored-by: Ghost of Sparta
Co-authored-by: Graweeld - (grwd)
Co-authored-by: Hosted Weblate
Co-authored-by: Hosted Weblate user 54392
Co-authored-by: Laur
Co-authored-by: Laur Ioniță
Co-authored-by: Mickaël Binos
Co-authored-by: Oğuz Ersen
Co-authored-by: Priit Jõerüüt
Co-authored-by: Trunars
Co-authored-by: VfBFan
Co-authored-by: justcontributor
Co-authored-by: ojppe
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ja/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ko/
Translation: NewPipe/Metadata
---
app/src/main/res/values-bg/strings.xml | 2 +
app/src/main/res/values-cs/strings.xml | 2 +
app/src/main/res/values-de/strings.xml | 2 +
app/src/main/res/values-et/strings.xml | 4 +-
app/src/main/res/values-fr/strings.xml | 2 +
app/src/main/res/values-hu/strings.xml | 2 +
app/src/main/res/values-ja/strings.xml | 2 +
app/src/main/res/values-ko/strings.xml | 2 +
app/src/main/res/values-nl/strings.xml | 2 +
app/src/main/res/values-pl/strings.xml | 2 +
app/src/main/res/values-ro/strings.xml | 50 +++++++++----------
app/src/main/res/values-sk/strings.xml | 2 +
app/src/main/res/values-tr/strings.xml | 2 +
app/src/main/res/values-zh-rCN/strings.xml | 2 +
.../metadata/android/ja/changelogs/1015.txt | 1 +
.../metadata/android/ko/changelogs/1015.txt | 1 +
16 files changed, 54 insertions(+), 26 deletions(-)
create mode 100644 fastlane/metadata/android/ja/changelogs/1015.txt
create mode 100644 fastlane/metadata/android/ko/changelogs/1015.txt
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
index 6a11d5470..dff8efa44 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/app/src/main/res/values-bg/strings.xml
@@ -854,4 +854,6 @@
NewPipe спира поддръжката си за Android 5
За съжаление NewPipe зависи от няколко библиотеки, които спряха поддръжката за Android 5.0 и 5.1. Следователно, за съжаление, следващата версия на NewPipe ще работи само на устройства с Android 6 или по-нова версия. Прочетете повече в публикацията в блога.
Публикация в блога
+ Подкасти
+ Курсове
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index cca86dacc..c77d895e0 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -890,4 +890,6 @@
NewPipe ukončuje podporu systému Android 5
NewPipe bohužel využívá několik knihoven, které již nepodporují Android 5.0 a 5.1. Příští verze NewPipe proto bude bohužel fungovat pouze na zařízeních s Androidem 6 nebo novějším. Více se dozvíte v tomto blogovém příspěvku.
Blogový příspěvek
+ Podcasty
+ Kurzy
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 182135a4b..c312bd7a1 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -868,4 +868,6 @@
Blogbeitrag
NewPipe stellt die Unterstützung für Android 5 ein
Leider ist NewPipe auf einige Bibliotheken angewiesen, welche die Unterstützung für Android 5.0 und 5.1 eingestellt haben. Die nächste Version von NewPipe wird daher leider nur auf Geräten mit Android 6 oder höher funktionieren. Mehr dazu im Blogbeitrag.
+ Podcasts
+ Kurse
diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml
index f3edefe57..a3b52a4b8 100644
--- a/app/src/main/res/values-et/strings.xml
+++ b/app/src/main/res/values-et/strings.xml
@@ -3,7 +3,7 @@
Alustamiseks toksa suurendusklaasi ikooni.
Avaldatud %1$s
Voogesituseks puudub pleier. Kas paigaldame VLC\?
- Voogesituseks puudub pleier (selleks võid paigaldada VLC).
+ Voogesituseks puudub pleier (selleks saad paigaldada VLC).
Paigalda
Tühista
Ava veebilehitsejas
@@ -855,4 +855,6 @@
NewPipe loobub Android 5 toest
Kahjuks sõltub NewPipe mõnest teegist, mis on lõpetanud Androidi versioonide 5.0 ja 5.1 toetamise. Seetõttu töötab järgmine NewPipe’i versioon kahjuks ainult nutiseadmetes, millel on Android 6 või uuem versioon. Lisateavet leiad ajaveebi postitusest.
Postitus meie ajaveebis
+ Taskuhäälingud
+ Kursused
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 9fc9b9864..ec768fb43 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -889,4 +889,6 @@
NewPipe ne prendra plus en charge Android 5
Malheureusement, NewPipe dépend de certaines bibliothèques qui ne prennent plus en charge Android 5.0 et 5.1. La prochaine version de NewPipe ne fonctionnera donc, à notre grand regret, que sur les appareils équipés d\'Android 6 ou d\'une version ultérieure. Pour en savoir plus, consultez l\'article de blog.
Article de blog
+ Podcasts
+ Cours
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 1f16890b0..21d8143ad 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -840,4 +840,6 @@
A NewPipe megszünteti az Android 5 támogatását
Sajnos a NewPipe néhány olyan programkönyvtárra támaszkodik, amelyek megszüntették az Android 5.0 és 5.1 verziójának támogatását. A NewPipe következő verziója ezért sajnos csak Android 6 vagy újabb rendszerrel rendelkező eszközökön fog működni. További információt a blogbejegyzésben olvashat.
Blogbejegyzés
+ Podcastok
+ Tanfolyamok
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 5fc287e20..d3760700d 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -852,4 +852,6 @@
NewPipeはAndroid 5のサポートを終了します
残念ながら、NewPipeが依存している一部のライブラリでAndroid 5.0および5.1のサポートが終了しました。そのため、次回リリースのNewPipeはAndroid 6以降の端末でのみ動作します。詳しくはブログ記事をご覧ください。
ブログ記事
+ ポッドキャスト
+ コース
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 0d7b5ef7d..73825fb10 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -853,4 +853,6 @@
NewPipe가 Android 5 지원을 중단합니다
NewPipe는 Android 5.0 및 5.1 지원을 중단한 몇 라이브러리에 의존합니다. 따라서 유감스럽게도 다음NewPipe 버전은 Android 6 이상 기기에서만 작동할 예정입니다. 자세한 내용은 블로그 게시글을 참조하세요.
블로그 게시글
+ 팟캐스트
+ 강의
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index ff07daa29..82a6f4a7c 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -870,4 +870,6 @@
NewPipe stopt met ondersteuning voor Android 5
NewPipe is afhankelijk van een aantal bibliotheken die geen ondersteuning meer bieden voor Android 5.0 en 5.1. De volgende versie van NewPipe zal daarom alleen werken op apparaten met Android 6 of hoger. Lees meer in het blogbericht.
Blogbericht
+ Podcasts
+ Cursussen
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index f3efb7db0..802b001a4 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -899,4 +899,6 @@
NewPipe przestaje obsługiwać Androida 5
Niestety, NewPipe zależy od kilku bibliotek, które przestały obsługiwać Androida 5.0 i 5.1. W związku z tym kolejna wersja NewPipe będzie działać wyłącznie na urządzeniach z Androidem 6 lub nowszym. Czytaj więcej we wpisie na blogu.
Wpis na blogu
+ Podcasty
+ Kursy
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 46526e418..f85aa1da9 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -4,10 +4,10 @@
Niciun player pentru streaming găsit. Instalați VLC\?
Instalare
Anulare
- Deschidere în browser
+ Deschide în browser
Distribuire
Descărcare
- Căutare
+ Caută
Setări
V-ați referit la: „%1$s” ?
Distribuiți cu
@@ -33,8 +33,8 @@
Arată videoclipurile care \'Urmează\' și cele \'Similare\'
URL nesuportat
Limba dorită a conținutului
- Video și Audio
- Aspect
+ Video și audio
+ Aparență
Redare în fundal
Conținut
Afișați conținutul restricționat de vârstă
@@ -116,7 +116,7 @@
Continuă redarea după întreruperi (ex: după apeluri)
Player
Comportament
- Istoric și cache
+ Istorie și cache
Anulare
Notificare NewPipe
Notificări pentru playerul NewPipe
@@ -140,23 +140,23 @@
- %s videoclipuri
- %s de videoclipuri
- Descărcări
+ Descarcă
Caractere permise în numele fișierelor
Caracterele nevalabile sunt înlocuite cu această valoare
Caracter de înlocuire
Litere și cifre
Caractere speciale
Despre NewPipe
- Licențe terță-parte
+ Licențe terți
© %1$s de %2$s sub %3$s
- Despre & FAQ
+ Despre & Întrebări Comune
Licențe
- Un player de streaming „ușor” liber, pentru Android.
- Vedeți pe GitHub
- Licența NewPipe
- Fie că aveți idei de: traducere, modificări de design, curățare a codului sau modificări de cod cu adevărat importante - ajutorul este întotdeauna binevenit. Cu cât se face mai mult, cu atât mai bine devine!
- Citiți licența
- Contribuiți
+ Streaming sursă-liberă pentru Android.
+ Vezi în GitHub
+ Licența a NewPipe
+ Când îți vine idea de; traduceri, schimbări de design, curățare cod sau schimbări reale de cod - Ajutorul este mereu binevenit. Cu cât mai mult, cu cât mai bine!
+ Citește licența
+ Contribuie
Istoric
Istoric
Doriți să ștergeți acest element din istoricul de căutare?
@@ -210,10 +210,10 @@
Fișierul nu există sau lipsește permisiunea de a citi sau scrie în el
Numele fișierului nu poate fi gol
A survenit o eroare: %1$s
- NewPipe este dezvoltat de voluntari care își petrec timpul liber pentru a vă oferi cea mai bună experiență de utilizare. Donează pentru a ajuta dezvoltatorii să facă NewPipe și mai bun în timp ce ei se bucură de o ceașcă de cafea.
- Dăruiește înapoi
- Site web
- Vizitați site-ul NewPipe pentru mai multe informații și noutăți.
+ NewPipe este creat de voluntari ce își oferă timpul lor liber pentru ați oferi cea mai bună experiență. Oferă înapoi creatorilor pentru a face aplicația și mai bună.
+ Oferă Înapoi
+ Site Web
+ Vizitează Site-ul NewPipe pentru mai multe informații și știri.
Ultimele vizionări
Cele mai multe vizionări
Exportat
@@ -240,7 +240,7 @@
Creați
Respingeți
Redenumiți
- Donați
+ Donează
De asemenea, doriți să importați setări?
Nume
Listă de redare creată
@@ -295,11 +295,11 @@
Mărire
Subtitrări
Modificați scara textului de legendă a playerului și stilurile de fundal. Necesită repornirea aplicației pentru a intra în vigoare
- NewPipe este un software liber cu copyleft: îl puteți folosi, studia, distribui și îmbunătăți în voie. Mai exact, îl puteți redistribui și/sau modifica în conformitate cu termenii Licenței Publice Generale GNU, așa cum a fost publicată de Free Software Foundation, fie versiunea 3 a Licenței, fie (la alegerea dumneavoastră) orice versiune ulterioară.
- Politica de confidențialitate a NewPipe
+ NewPipe este o aplicație liberă: Poți folosi, studia, partaja, și a o face mai bună după propria voință. Poți redistribui și/sau modifica aplicația în termenii GNU GPL publicate de Free Software Foundation, toate dintre cele 3 versiuni, or (la opțiunea dvs.) orice versiune mai nouă.
+ Politica de Confidențialitate NewPipe
Proiectul NewPipe ia foarte în serios confidențialitatea dumneavoastră. Prin urmare, aplicația nu colectează niciun fel de date fără consimțământul dumneavoastră.
\nPolitica de confidențialitate a NewPipe explică în detaliu ce date sunt trimise și stocate atunci când trimiteți un raport de eroare.
- Citiți politica de confidențialitate
+ Citește Politica de confidențialitate
Nu s-au putut citi filele salvate, deci se folosesc cele implicite
Restaurați valorile implicite
Doriți să restaurați valorile implicite\?
@@ -694,8 +694,8 @@
Format necunoscut
Calitate necunoscută
Dimensiunea intervalului de încărcare de redare
- Vedeți pe website
- Dacă întâmpinați probleme cu utilizarea aplicației, nu uitați să consultați aceste răspunsuri la întrebări frecvente!
+ Vezi în website
+ Dacă aveți probleme folosind aplicația, uitați-vă la răspunsurile celor mai comune întrebărilor puse!
Întrebări frecvente
Sortare
Modul rapid
@@ -804,7 +804,7 @@
Arată mai puține
Piste
Nu este suficient spațiu liber pe dispozitiv
- Backup și restabilire
+ Copie de rezervă și Restabilire
NewPipe poate verifica automat din când în când dacă există versiuni noi și vă poate anunța când acestea sunt disponibile.\nDoriți să activați această opțiune?
Resetați toate setările la valorile implicite
Da
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index 6d1459054..1f2a81de4 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -890,4 +890,6 @@
NewPipe ukončuje podporu pre Android 5
NewPipe je bohužiaľ závislý od niekoľkých knižníc, ktoré ukončili podporu pre Android 5.0 a 5.1. Ďalšia verzia NewPipe bude preto, žiaľ, fungovať len na zariadeniach s Androidom 6 alebo novším. Viac informácií nájdete v blogovom príspevku.
Blogový príspevok
+ Podcasty
+ Kurzy
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 315a1f8e8..40fe3d0f8 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -869,4 +869,6 @@
NewPipe, Android 5 desteğini bırakıyor
NewPipe ne yazık ki Android 5.0 ve 5.1 desteğini bırakan birkaç kitaplığa bağlıdır. Üzücü ki sıradaki NewPipe sürümü yalnızca Android 6 ve üstü aygıtlarda çalışacaktır. Daha çoğunu blog gönderisinde okuyun.
Blog gönderisi
+ Podcastler
+ Dersler
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 5d5804fd4..0ce46dfa3 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -853,4 +853,6 @@
NewPipe 正放弃对 Android 5 的支持
NewPipe 依赖几个已经不支持 Android 5 和 5.1 的库文件。下个 NewPipe 版本因此会只在 Android 6 或更高版本上工作。阅读博客文章了解更多信息。
博客文章
+ 播客
+ 课程
diff --git a/fastlane/metadata/android/ja/changelogs/1015.txt b/fastlane/metadata/android/ja/changelogs/1015.txt
new file mode 100644
index 000000000..a86ad1632
--- /dev/null
+++ b/fastlane/metadata/android/ja/changelogs/1015.txt
@@ -0,0 +1 @@
+これは、media.ccc.deのライブ配信を修正するホットフィックスリリースです。Happy Hacking!
diff --git a/fastlane/metadata/android/ko/changelogs/1015.txt b/fastlane/metadata/android/ko/changelogs/1015.txt
new file mode 100644
index 000000000..ceb383692
--- /dev/null
+++ b/fastlane/metadata/android/ko/changelogs/1015.txt
@@ -0,0 +1 @@
+media.ccc.de의 실시간 스트림 관련 오류를 수정한 핫픽스 릴리스입니다. 즐거운 해킹 되세요!
From f2a3530a24886ba45e6e950676360540055ff73e Mon Sep 17 00:00:00 2001
From: Aayush Gupta
Date: Sat, 22 Aug 2026 15:47:08 +0800
Subject: [PATCH 030/155] Update Gradle and dependencies to latest stable
release
Signed-off-by: Aayush Gupta
---
gradle/libs.versions.toml | 24 +++++++++++------------
gradle/wrapper/gradle-wrapper.jar | Bin 48462 -> 47505 bytes
gradle/wrapper/gradle-wrapper.properties | 4 ++--
3 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 0f518b3ae..682dacdc3 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -4,39 +4,39 @@
#
[versions]
-about-libraries = "15.0.3"
+about-libraries = "15.1.1"
acra = "5.13.1"
activity = "1.13.0"
-agp = "9.2.1"
-appcompat = "1.7.1"
+agp = "9.3.1"
+appcompat = "1.8.0"
assertj = "3.27.7"
autoservice-google = "1.1.1"
autoservice-zacsweers = "1.2.0"
bridge = "v2.0.2"
browser = "1.10.0"
cardview = "1.0.0"
-checkstyle = "13.8.0"
+checkstyle = "14.0.0"
coil = "3.5.0"
-compose = "1.11.4"
-constraintlayout = "2.2.1"
+compose = "1.12.0"
+constraintlayout = "2.2.2"
core = "1.19.0"
coroutines = "1.11.0"
desugar = "2.1.5"
documentfile = "1.1.0"
espresso = "3.7.0"
exoplayer = "2.19.1"
-fragment = "1.8.9"
+fragment = "1.9.0"
groupie = "2.10.1"
-jsoup = "1.22.2"
+jsoup = "1.23.1"
junit = "4.13.2"
junit-ext = "1.3.0"
kermit = "2.1.0"
koin = "4.2.2"
-koin-plugin = "1.0.2"
+koin-plugin = "1.1.0"
kotlin = "2.4.10"
kotlinx-coroutines-rx3 = "1.11.0"
kotlinx-serialization-json = "1.11.0"
-ksp = "2.3.9"
+ksp = "2.3.11"
ktlint = "1.8.0"
leakcanary = "2.14"
lifecycle = "2.11.0"
@@ -48,7 +48,7 @@ media = "1.7.1"
mockitoCore = "5.23.0"
multiplatform = "1.11.1"
navigation3 = "1.1.1"
-okhttp = "5.4.0"
+okhttp = "5.5.0"
phoenix = "3.0.0"
preference = "1.2.1"
prettytime = "5.0.8.Final"
@@ -59,7 +59,7 @@ rxandroid = "3.0.2"
rxbinding = "4.0.0"
rxjava = "3.1.12"
settings = "1.3.0"
-sonarqube = "7.3.1.8318"
+sonarqube = "7.4.0.8496"
statesaver = "1.4.1" # TODO: Drop because it is deprecated and incompatible with KSP2
stetho = "1.6.0"
swiperefreshlayout = "1.2.0"
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index b1b8ef56b44f16b14dc800fa8103a6d89abb526f..eddabd2eef8d94a5437d6168ff9c87a78ff725b3 100644
GIT binary patch
delta 39079
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