mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-26 02:44:08 +01:00
Compare commits
56 Commits
v5.12.0-de
...
v5.13.0-de
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a2185bce09 | ||
|
|
1b60a72ede | ||
|
|
12b4ee04ad | ||
|
|
f9a6cc96de | ||
|
|
93ea250bf3 | ||
|
|
fdb946a2cc | ||
|
|
7cc939ab03 | ||
|
|
228d72428d | ||
|
|
4db7ab4207 | ||
|
|
329f993024 | ||
|
|
7cd1fb22d8 | ||
|
|
ae111bc0b9 | ||
|
|
79f1dfd3e8 | ||
|
|
f5dd902915 | ||
|
|
10e2b08eb2 | ||
|
|
4ae1155e51 | ||
|
|
69fbfaea19 | ||
|
|
f44fede67c | ||
|
|
3c52ab8017 | ||
|
|
d1641a6e3d | ||
|
|
09773e8934 | ||
|
|
d77d5bfbdd | ||
|
|
a84bded9e7 | ||
|
|
e664a24f73 | ||
|
|
5bf964fff6 | ||
|
|
0c0bbb8713 | ||
|
|
8afe48cd92 | ||
|
|
dde8ea31cb | ||
|
|
d3abbe3e93 | ||
|
|
c8179776ed | ||
|
|
c6c6516b12 | ||
|
|
d6eae01e12 | ||
|
|
ba88603f4b | ||
|
|
d5aab3d464 | ||
|
|
fca2f70c0e | ||
|
|
348f7e12cb | ||
|
|
b6b7208eeb | ||
|
|
a2c79f1349 | ||
|
|
4f5bb3c915 | ||
|
|
4b77d27c77 | ||
|
|
7991c80129 | ||
|
|
6baf4ea2ac | ||
|
|
c89538c8f5 | ||
|
|
94fb367618 | ||
|
|
354835966d | ||
|
|
168f9b769e | ||
|
|
e4c4b3a73a | ||
|
|
fce98b4960 | ||
|
|
839aa81e9c | ||
|
|
905bb0ea5f | ||
|
|
a94a663859 | ||
|
|
04b37dd55a | ||
|
|
2382e9d09e | ||
|
|
97f504976a | ||
|
|
0a6c5158e0 | ||
|
|
a959d798e8 |
161
CHANGELOG.md
161
CHANGELOG.md
@@ -1,3 +1,164 @@
|
||||
# [5.13.0-dev.17](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.16...v5.13.0-dev.17) (2025-02-27)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Hide filter bar:** Fix `Hide in feed` not working in subscriptions feed ([#4512](https://github.com/ReVanced/revanced-patches/issues/4512)) ([634d0ee](https://github.com/ReVanced/revanced-patches/commit/634d0ee12e31491c7ee1d4ceb002daf8366a3c15))
|
||||
|
||||
# [5.13.0-dev.16](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.15...v5.13.0-dev.16) (2025-02-27)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **NU.nl:** Add `Hide ads` and `Spoof Certificate` patch ([#4368](https://github.com/ReVanced/revanced-patches/issues/4368)) ([f3268fb](https://github.com/ReVanced/revanced-patches/commit/f3268fb03ca25fb5465e36015b6c9dec2c84a655))
|
||||
|
||||
# [5.13.0-dev.15](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.14...v5.13.0-dev.15) (2025-02-25)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Hide player components:** Show correct end video thumbnail if `Hide end screen suggested video` is enabled ([#4502](https://github.com/ReVanced/revanced-patches/issues/4502)) ([6c4885a](https://github.com/ReVanced/revanced-patches/commit/6c4885a1d5dfff50100b01840b5552d92e83ee4a))
|
||||
|
||||
# [5.13.0-dev.14](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.13...v5.13.0-dev.14) (2025-02-25)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Swipe controls:** Adjust the overlay text size ([#4503](https://github.com/ReVanced/revanced-patches/issues/4503)) ([6dc4bf7](https://github.com/ReVanced/revanced-patches/commit/6dc4bf75e09ed6f05534919d7b769b720043abce))
|
||||
|
||||
# [5.13.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.12...v5.13.0-dev.13) (2025-02-24)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube:** Resolve button flickering when taping seekbar ([#4500](https://github.com/ReVanced/revanced-patches/issues/4500)) ([1f08047](https://github.com/ReVanced/revanced-patches/commit/1f08047b48cc9555a4887d16ec7219a55a77251f))
|
||||
|
||||
# [5.13.0-dev.12](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.11...v5.13.0-dev.12) (2025-02-24)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Return YouTube Dislike:** Use correct number formatting if using a different ReVanced language ([edf66f4](https://github.com/ReVanced/revanced-patches/commit/edf66f4e16d46156cb8b8e31d18cb8dbcb87737e))
|
||||
|
||||
# [5.13.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.10...v5.13.0-dev.11) (2025-02-23)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **TikTok:** Resolve startup app crash ([18c0fc2](https://github.com/ReVanced/revanced-patches/commit/18c0fc2a7f186f50a904fd25dbaa739abdd24993))
|
||||
|
||||
# [5.13.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.9...v5.13.0-dev.10) (2025-02-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Copy video URL:** Use correct button ordering ([5e622cc](https://github.com/ReVanced/revanced-patches/commit/5e622ccf66d34af31c6026fa7f4d332460c6ecb0))
|
||||
|
||||
# [5.13.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.8...v5.13.0-dev.9) (2025-02-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube:** Do not hide player controls when using double tap to skip forward ([#4487](https://github.com/ReVanced/revanced-patches/issues/4487)) ([63fe870](https://github.com/ReVanced/revanced-patches/commit/63fe870d48ca2217327b952bde241b7f16ced850))
|
||||
|
||||
# [5.13.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.7...v5.13.0-dev.8) (2025-02-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof app version:** Force old settings menus if spoofing to older app targets ([#4490](https://github.com/ReVanced/revanced-patches/issues/4490)) ([45e7c46](https://github.com/ReVanced/revanced-patches/commit/45e7c46dd9c70c926b8b1a97ada668f90f5f6f8c))
|
||||
|
||||
# [5.13.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.6...v5.13.0-dev.7) (2025-02-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **TikTok:** Resolve startup app crash ([6466398](https://github.com/ReVanced/revanced-patches/commit/64663983b84de1f28636205f61bf0a24c83968d1))
|
||||
|
||||
# [5.13.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.5...v5.13.0-dev.6) (2025-02-21)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Navigation buttons:** Add 'Hide notifications' setting ([#4485](https://github.com/ReVanced/revanced-patches/issues/4485)) ([506d241](https://github.com/ReVanced/revanced-patches/commit/506d2414bbc760e764e5a514b32926083d6ecb6b))
|
||||
|
||||
# [5.13.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.4...v5.13.0-dev.5) (2025-02-19)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **TikTok:** Resolve startup app crash ([c14bc24](https://github.com/ReVanced/revanced-patches/commit/c14bc244550de30eca975ca7c09e8eb0c47534b5))
|
||||
|
||||
# [5.13.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.3...v5.13.0-dev.4) (2025-02-19)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **TikTok:** Resolve startup app crash ([d700076](https://github.com/ReVanced/revanced-patches/commit/d7000768a5e5a688c9f4e48858ac34e352222c1e))
|
||||
|
||||
# [5.13.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.2...v5.13.0-dev.3) (2025-02-19)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube:** Fix player button fade out animations ([#4469](https://github.com/ReVanced/revanced-patches/issues/4469)) ([bf8e775](https://github.com/ReVanced/revanced-patches/commit/bf8e7759f9bdbdfef419a879fb3dd7cf0dff0098))
|
||||
|
||||
# [5.13.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.1...v5.13.0-dev.2) (2025-02-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Hide video action buttons:** Move 'Disable Like and Subscribe glow' to action buttons settings menu ([29b265d](https://github.com/ReVanced/revanced-patches/commit/29b265d8fdaa48502650be9623bfc518a57a0bb1))
|
||||
|
||||
# [5.13.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.12.0...v5.13.0-dev.1) (2025-02-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Hide layout components:** Do not hide 'Show anyway' button in search results ([4ac8854](https://github.com/ReVanced/revanced-patches/commit/4ac8854b99808a8957f3b0b7438e1e0cdedffbaf))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Swipe controls:** Swipe controls UI improvements ([#4422](https://github.com/ReVanced/revanced-patches/issues/4422)) ([198e4d2](https://github.com/ReVanced/revanced-patches/commit/198e4d2a2315c24a09eb9ecfefbd131a75384d2c))
|
||||
|
||||
# [5.12.0](https://github.com/ReVanced/revanced-patches/compare/v5.11.0...v5.12.0) (2025-02-17)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Allow changing default settings for existing app installs ([#4464](https://github.com/ReVanced/revanced-patches/issues/4464)) ([1bd7986](https://github.com/ReVanced/revanced-patches/commit/1bd7986823e774a929c8a9102a7cc96e245d5274))
|
||||
* **Windy.app:** Remove obsolete `Unlock pro` patch ([#4428](https://github.com/ReVanced/revanced-patches/issues/4428)) ([83d116e](https://github.com/ReVanced/revanced-patches/commit/83d116e8fd3935ee431cfdf0b8e095d04ee77259))
|
||||
* **YouTube - Spoof video streams:** Change default client to `Android TV` ([#4465](https://github.com/ReVanced/revanced-patches/issues/4465)) ([0412c79](https://github.com/ReVanced/revanced-patches/commit/0412c7901dc8599b6079d9c3ba26452f88af642b))
|
||||
* **YouTube:** Remove obsolete 18.x targets ([#4454](https://github.com/ReVanced/revanced-patches/issues/4454)) ([a006758](https://github.com/ReVanced/revanced-patches/commit/a0067581d0f877e1b4eb1f888a25786f09676b2e))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Return YouTube Dislike:** add `Show estimated likes` setting ([#4443](https://github.com/ReVanced/revanced-patches/issues/4443)) ([9a88b42](https://github.com/ReVanced/revanced-patches/commit/9a88b4239fd63d5f91105fec8e7d59d318a5d09a))
|
||||
* **YouTube - SponsorBlock:** Redesign skip buttons ([#4427](https://github.com/ReVanced/revanced-patches/issues/4427)) ([8f4883f](https://github.com/ReVanced/revanced-patches/commit/8f4883fc002420bfb4056401e23445c99e1d3fce))
|
||||
* **YouTube Music:** Support version `8.05.50` ([#4439](https://github.com/ReVanced/revanced-patches/issues/4439)) ([b31fed9](https://github.com/ReVanced/revanced-patches/commit/b31fed98901fcda1bce6f05eb0de63280c689fa0))
|
||||
* **YouTube Music:** Support version `8.05.51` ([128441e](https://github.com/ReVanced/revanced-patches/commit/128441e78bc0d096c3fc2f57782ab90c39c3ae4b))
|
||||
|
||||
# [5.12.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.12.0-dev.6...v5.12.0-dev.7) (2025-02-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Change default client to `Android TV` ([#4465](https://github.com/ReVanced/revanced-patches/issues/4465)) ([0412c79](https://github.com/ReVanced/revanced-patches/commit/0412c7901dc8599b6079d9c3ba26452f88af642b))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube Music:** Support version `8.05.51` ([128441e](https://github.com/ReVanced/revanced-patches/commit/128441e78bc0d096c3fc2f57782ab90c39c3ae4b))
|
||||
|
||||
# [5.12.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.12.0-dev.5...v5.12.0-dev.6) (2025-02-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Allow changing default settings for existing app installs ([#4464](https://github.com/ReVanced/revanced-patches/issues/4464)) ([1bd7986](https://github.com/ReVanced/revanced-patches/commit/1bd7986823e774a929c8a9102a7cc96e245d5274))
|
||||
|
||||
# [5.12.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.12.0-dev.4...v5.12.0-dev.5) (2025-02-13)
|
||||
|
||||
|
||||
|
||||
4
extensions/nunl/build.gradle.kts
Normal file
4
extensions/nunl/build.gradle.kts
Normal file
@@ -0,0 +1,4 @@
|
||||
dependencies {
|
||||
compileOnly(project(":extensions:shared:library"))
|
||||
compileOnly(project(":extensions:nunl:stub"))
|
||||
}
|
||||
1
extensions/nunl/src/main/AndroidManifest.xml
Normal file
1
extensions/nunl/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1 @@
|
||||
<manifest/>
|
||||
@@ -0,0 +1,114 @@
|
||||
package app.revanced.extension.nunl.ads;
|
||||
|
||||
import nl.nu.performance.api.client.interfaces.Block;
|
||||
import nl.nu.performance.api.client.unions.SmallArticleLinkFlavor;
|
||||
import nl.nu.performance.api.client.objects.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class HideAdsPatch {
|
||||
private static final String[] blockedHeaderBlocks = {
|
||||
"Aanbiedingen (Adverteerders)",
|
||||
"Aangeboden door NUshop"
|
||||
};
|
||||
|
||||
// "Rubrieken" menu links to ads.
|
||||
private static final String[] blockedLinkBlocks = {
|
||||
"Van onze adverteerders"
|
||||
};
|
||||
|
||||
public static void filterAds(List<Block> blocks) {
|
||||
try {
|
||||
ArrayList<Block> cleanedList = new ArrayList<>();
|
||||
|
||||
boolean skipFullHeader = false;
|
||||
boolean skipUntilDivider = false;
|
||||
|
||||
int index = 0;
|
||||
while (index < blocks.size()) {
|
||||
Block currentBlock = blocks.get(index);
|
||||
|
||||
// Because of pagination, we might not see the Divider in front of it.
|
||||
// Just remove it as is and leave potential extra spacing visible on the screen.
|
||||
if (currentBlock instanceof DpgBannerBlock) {
|
||||
index++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (index + 1 < blocks.size()) {
|
||||
// Filter Divider -> DpgMediaBanner -> Divider.
|
||||
if (currentBlock instanceof DividerBlock
|
||||
&& blocks.get(index + 1) instanceof DpgBannerBlock) {
|
||||
index += 2;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Filter Divider -> LinkBlock (... -> LinkBlock -> LinkBlock-> LinkBlock -> Divider).
|
||||
if (currentBlock instanceof DividerBlock
|
||||
&& blocks.get(index + 1) instanceof LinkBlock linkBlock) {
|
||||
Link link = linkBlock.getLink();
|
||||
if (link != null && link.getTitle() != null) {
|
||||
for (String blockedLinkBlock : blockedLinkBlocks) {
|
||||
if (blockedLinkBlock.equals(link.getTitle().getText())) {
|
||||
skipUntilDivider = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (skipUntilDivider) {
|
||||
index++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Skip LinkBlocks with a "flavor" claiming to be "isPartner" (sponsored inline ads).
|
||||
if (currentBlock instanceof LinkBlock linkBlock
|
||||
&& linkBlock.getLink() != null
|
||||
&& linkBlock.getLink().getLinkFlavor() instanceof SmallArticleLinkFlavor smallArticleLinkFlavor
|
||||
&& smallArticleLinkFlavor.isPartner() != null
|
||||
&& smallArticleLinkFlavor.isPartner()) {
|
||||
index++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (currentBlock instanceof DividerBlock) {
|
||||
skipUntilDivider = false;
|
||||
}
|
||||
|
||||
// Filter HeaderBlock with known ads until next HeaderBlock.
|
||||
if (currentBlock instanceof HeaderBlock headerBlock) {
|
||||
StyledText headerText = headerBlock.component20();
|
||||
if (headerText != null) {
|
||||
skipFullHeader = false;
|
||||
for (String blockedHeaderBlock : blockedHeaderBlocks) {
|
||||
if (blockedHeaderBlock.equals(headerText.getText())) {
|
||||
skipFullHeader = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (skipFullHeader) {
|
||||
index++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!skipFullHeader && !skipUntilDivider) {
|
||||
cleanedList.add(currentBlock);
|
||||
}
|
||||
index++;
|
||||
}
|
||||
|
||||
// Replace list in-place to not deal with moving the result to the correct register in smali.
|
||||
blocks.clear();
|
||||
blocks.addAll(cleanedList);
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "filterAds failure", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
17
extensions/nunl/stub/build.gradle.kts
Normal file
17
extensions/nunl/stub/build.gradle.kts
Normal file
@@ -0,0 +1,17 @@
|
||||
plugins {
|
||||
id(libs.plugins.android.library.get().pluginId)
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "app.revanced.extension"
|
||||
compileSdk = 34
|
||||
|
||||
defaultConfig {
|
||||
minSdk = 26
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
}
|
||||
1
extensions/nunl/stub/src/main/AndroidManifest.xml
Normal file
1
extensions/nunl/stub/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1 @@
|
||||
<manifest/>
|
||||
@@ -0,0 +1,5 @@
|
||||
package nl.nu.performance.api.client.interfaces;
|
||||
|
||||
public class Block {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package nl.nu.performance.api.client.objects;
|
||||
|
||||
import nl.nu.performance.api.client.interfaces.Block;
|
||||
|
||||
public class DividerBlock extends Block {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package nl.nu.performance.api.client.objects;
|
||||
|
||||
import nl.nu.performance.api.client.interfaces.Block;
|
||||
|
||||
public class DpgBannerBlock extends Block {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package nl.nu.performance.api.client.objects;
|
||||
|
||||
import nl.nu.performance.api.client.interfaces.Block;
|
||||
|
||||
public class HeaderBlock extends Block {
|
||||
// returns title
|
||||
public final StyledText component20() {
|
||||
throw new UnsupportedOperationException("Stub");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package nl.nu.performance.api.client.objects;
|
||||
|
||||
import nl.nu.performance.api.client.unions.LinkFlavor;
|
||||
|
||||
public class Link {
|
||||
public final StyledText getTitle() {
|
||||
throw new UnsupportedOperationException("Stub");
|
||||
}
|
||||
|
||||
public final LinkFlavor getLinkFlavor() {
|
||||
throw new UnsupportedOperationException("Stub");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package nl.nu.performance.api.client.objects;
|
||||
|
||||
import android.os.Parcelable;
|
||||
import nl.nu.performance.api.client.interfaces.Block;
|
||||
|
||||
public abstract class LinkBlock extends Block implements Parcelable {
|
||||
public final Link getLink() {
|
||||
throw new UnsupportedOperationException("Stub");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package nl.nu.performance.api.client.objects;
|
||||
|
||||
public class StyledText {
|
||||
public final String getText() {
|
||||
throw new UnsupportedOperationException("Stub");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package nl.nu.performance.api.client.unions;
|
||||
|
||||
public interface LinkFlavor {
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package nl.nu.performance.api.client.unions;
|
||||
|
||||
public class SmallArticleLinkFlavor implements LinkFlavor {
|
||||
public final Boolean isPartner() {
|
||||
throw new UnsupportedOperationException("Stub");
|
||||
}
|
||||
}
|
||||
@@ -356,7 +356,7 @@ public class Utils {
|
||||
|
||||
public static Context getContext() {
|
||||
if (context == null) {
|
||||
Logger.initializationException(Utils.class, "Context is null, returning null!", null);
|
||||
Logger.initializationException(Utils.class, "Context is not set by extension hook, returning null", null);
|
||||
}
|
||||
return context;
|
||||
}
|
||||
|
||||
@@ -29,6 +29,6 @@ public class BaseSettings {
|
||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS_IOS_FORCE_AVC = new BooleanSetting("revanced_spoof_video_streams_ios_force_avc", FALSE, true,
|
||||
"revanced_spoof_video_streams_ios_force_avc_user_dialog_message", new SpoofiOSAvailability());
|
||||
// Client type must be last spoof setting due to cyclic references.
|
||||
public static final EnumSetting<ClientType> SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client_type", ClientType.ANDROID_VR, true, parent(SPOOF_VIDEO_STREAMS));
|
||||
public static final EnumSetting<ClientType> SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client_type", ClientType.ANDROID_UNPLUGGED, true, parent(SPOOF_VIDEO_STREAMS));
|
||||
|
||||
}
|
||||
|
||||
@@ -47,6 +47,10 @@ public class BooleanSetting extends Setting<Boolean> {
|
||||
*/
|
||||
public static void privateSetValue(@NonNull BooleanSetting setting, @NonNull Boolean newValue) {
|
||||
setting.value = Objects.requireNonNull(newValue);
|
||||
|
||||
if (setting.isSetToDefault()) {
|
||||
setting.removeFromPreferences();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -65,10 +69,8 @@ public class BooleanSetting extends Setting<Boolean> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(@NonNull Boolean newValue) {
|
||||
// Must set before saving to preferences (otherwise importing fails to update UI correctly).
|
||||
value = Objects.requireNonNull(newValue);
|
||||
preferences.saveBoolean(key, newValue);
|
||||
public void saveToPreferences() {
|
||||
preferences.saveBoolean(key, value);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
||||
@@ -89,10 +89,8 @@ public class EnumSetting<T extends Enum<?>> extends Setting<T> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(@NonNull T newValue) {
|
||||
// Must set before saving to preferences (otherwise importing fails to update UI correctly).
|
||||
value = Objects.requireNonNull(newValue);
|
||||
preferences.saveEnumAsString(key, newValue);
|
||||
public void saveToPreferences() {
|
||||
preferences.saveEnumAsString(key, value);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
||||
@@ -55,10 +55,8 @@ public class FloatSetting extends Setting<Float> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(@NonNull Float newValue) {
|
||||
// Must set before saving to preferences (otherwise importing fails to update UI correctly).
|
||||
value = Objects.requireNonNull(newValue);
|
||||
preferences.saveFloatString(key, newValue);
|
||||
public void saveToPreferences() {
|
||||
preferences.saveFloatString(key, value);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
||||
@@ -55,10 +55,8 @@ public class IntegerSetting extends Setting<Integer> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(@NonNull Integer newValue) {
|
||||
// Must set before saving to preferences (otherwise importing fails to update UI correctly).
|
||||
value = Objects.requireNonNull(newValue);
|
||||
preferences.saveIntegerString(key, newValue);
|
||||
public void saveToPreferences() {
|
||||
preferences.saveIntegerString(key, value);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
||||
@@ -55,10 +55,8 @@ public class LongSetting extends Setting<Long> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(@NonNull Long newValue) {
|
||||
// Must set before saving to preferences (otherwise importing fails to update UI correctly).
|
||||
value = Objects.requireNonNull(newValue);
|
||||
preferences.saveLongString(key, newValue);
|
||||
public void saveToPreferences() {
|
||||
preferences.saveLongString(key, value);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
||||
@@ -14,7 +14,6 @@ import java.util.*;
|
||||
|
||||
import static app.revanced.extension.shared.StringRef.str;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public abstract class Setting<T> {
|
||||
|
||||
/**
|
||||
@@ -288,6 +287,13 @@ public abstract class Setting<T> {
|
||||
*/
|
||||
public static void privateSetValueFromString(@NonNull Setting<?> setting, @NonNull String newValue) {
|
||||
setting.setValueFromString(newValue);
|
||||
|
||||
// Clear the preference value since default is used, to allow changing
|
||||
// the changing the default for a future release. Without this after upgrading
|
||||
// the saved value will be whatever was the default when the app was first installed.
|
||||
if (setting.isSetToDefault()) {
|
||||
setting.removeFromPreferences();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -303,7 +309,33 @@ public abstract class Setting<T> {
|
||||
/**
|
||||
* Persistently saves the value.
|
||||
*/
|
||||
public abstract void save(@NonNull T newValue);
|
||||
public final void save(@NonNull T newValue) {
|
||||
if (value.equals(newValue)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Must set before saving to preferences (otherwise importing fails to update UI correctly).
|
||||
value = Objects.requireNonNull(newValue);
|
||||
|
||||
if (defaultValue.equals(newValue)) {
|
||||
removeFromPreferences();
|
||||
} else {
|
||||
saveToPreferences();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Save {@link #value} to {@link #preferences}.
|
||||
*/
|
||||
protected abstract void saveToPreferences();
|
||||
|
||||
/**
|
||||
* Remove {@link #value} from {@link #preferences}.
|
||||
*/
|
||||
protected final void removeFromPreferences() {
|
||||
Logger.printDebug(() -> "Clearing stored preference value (reset to default): " + key);
|
||||
preferences.removeKey(key);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public abstract T get();
|
||||
|
||||
@@ -55,10 +55,8 @@ public class StringSetting extends Setting<String> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(@NonNull String newValue) {
|
||||
// Must set before saving to preferences (otherwise importing fails to update UI correctly).
|
||||
value = Objects.requireNonNull(newValue);
|
||||
preferences.saveString(key, newValue);
|
||||
public void saveToPreferences() {
|
||||
preferences.saveString(key, value);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
||||
@@ -66,22 +66,6 @@ public enum ClientType {
|
||||
true,
|
||||
"Android Creator"
|
||||
),
|
||||
ANDROID_VR(
|
||||
ANDROID_VR_NO_AUTH.id,
|
||||
ANDROID_VR_NO_AUTH.clientName,
|
||||
ANDROID_VR_NO_AUTH.packageName,
|
||||
ANDROID_VR_NO_AUTH.deviceMake,
|
||||
ANDROID_VR_NO_AUTH.deviceModel,
|
||||
ANDROID_VR_NO_AUTH.osName,
|
||||
ANDROID_VR_NO_AUTH.osVersion,
|
||||
ANDROID_VR_NO_AUTH.androidSdkVersion,
|
||||
ANDROID_VR_NO_AUTH.buildId,
|
||||
ANDROID_VR_NO_AUTH.cronetVersion,
|
||||
ANDROID_VR_NO_AUTH.clientVersion,
|
||||
ANDROID_VR_NO_AUTH.requiresAuth,
|
||||
true,
|
||||
"Android VR"
|
||||
),
|
||||
IOS_UNPLUGGED(
|
||||
33,
|
||||
"IOS_UNPLUGGED",
|
||||
@@ -112,6 +96,22 @@ public enum ClientType {
|
||||
forceAVC()
|
||||
? "iOS TV Force AVC"
|
||||
: "iOS TV"
|
||||
),
|
||||
ANDROID_VR_AUTH(
|
||||
ANDROID_VR_NO_AUTH.id,
|
||||
ANDROID_VR_NO_AUTH.clientName,
|
||||
ANDROID_VR_NO_AUTH.packageName,
|
||||
ANDROID_VR_NO_AUTH.deviceMake,
|
||||
ANDROID_VR_NO_AUTH.deviceModel,
|
||||
ANDROID_VR_NO_AUTH.osName,
|
||||
ANDROID_VR_NO_AUTH.osVersion,
|
||||
ANDROID_VR_NO_AUTH.androidSdkVersion,
|
||||
ANDROID_VR_NO_AUTH.buildId,
|
||||
ANDROID_VR_NO_AUTH.cronetVersion,
|
||||
ANDROID_VR_NO_AUTH.clientVersion,
|
||||
ANDROID_VR_NO_AUTH.requiresAuth,
|
||||
true,
|
||||
"Android VR Auth"
|
||||
);
|
||||
|
||||
private static boolean forceAVC() {
|
||||
|
||||
@@ -1,37 +1,60 @@
|
||||
package app.revanced.extension.tiktok.spoof.sim;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.tiktok.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class SpoofSimPatch {
|
||||
|
||||
private static final boolean ENABLED = Settings.SIM_SPOOF.get();
|
||||
/**
|
||||
* During app startup native code can be called with no obvious way to set the context.
|
||||
* Cannot check if sim spoofing is enabled or the app will crash since no context is set.
|
||||
*/
|
||||
private static boolean isContextNotSet(String fieldSpoofed) {
|
||||
if (Utils.getContext() != null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Logger.initializationException(SpoofSimPatch.class,
|
||||
"Context is not yet set, cannot spoof: " + fieldSpoofed, null);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static String getCountryIso(String value) {
|
||||
if (ENABLED) {
|
||||
if (isContextNotSet("countryIso")) return value;
|
||||
|
||||
if (Settings.SIM_SPOOF.get()) {
|
||||
String iso = Settings.SIM_SPOOF_ISO.get();
|
||||
Logger.printDebug(() -> "Spoofing sim ISO from: " + value + " to: " + iso);
|
||||
Logger.printDebug(() -> "Spoofing countryIso from: " + value + " to: " + iso);
|
||||
return iso;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
public static String getOperator(String value) {
|
||||
if (ENABLED) {
|
||||
if (isContextNotSet("MCC-MNC")) return value;
|
||||
|
||||
if (Settings.SIM_SPOOF.get()) {
|
||||
String mcc_mnc = Settings.SIMSPOOF_MCCMNC.get();
|
||||
Logger.printDebug(() -> "Spoofing sim MCC-MNC from: " + value + " to: " + mcc_mnc);
|
||||
return mcc_mnc;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
public static String getOperatorName(String value) {
|
||||
if (ENABLED) {
|
||||
if (isContextNotSet("operatorName")) return value;
|
||||
|
||||
if (Settings.SIM_SPOOF.get()) {
|
||||
String operator = Settings.SIMSPOOF_OP_NAME.get();
|
||||
Logger.printDebug(() -> "Spoofing sim operator from: " + value + " to: " + operator);
|
||||
Logger.printDebug(() -> "Spoofing sim operatorName from: " + value + " to: " + operator);
|
||||
return operator;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,8 +5,6 @@ dependencies {
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdk = 33 // TODO: Update Swipe controls code to allow updating this to the latest sdk.
|
||||
|
||||
defaultConfig {
|
||||
minSdk = 26
|
||||
}
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
package app.revanced.extension.youtube.patches;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
/** @noinspection unused*/
|
||||
public final class DisableSuggestedVideoEndScreenPatch {
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
private static ImageView lastView;
|
||||
|
||||
public static void closeEndScreen(final ImageView imageView) {
|
||||
if (!Settings.DISABLE_SUGGESTED_VIDEO_END_SCREEN.get()) return;
|
||||
|
||||
// Prevent adding the listener multiple times.
|
||||
if (lastView == imageView) return;
|
||||
lastView = imageView;
|
||||
|
||||
imageView.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
|
||||
if (imageView.isShown()) imageView.callOnClick();
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package app.revanced.extension.youtube.patches;
|
||||
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class HideEndScreenSuggestedVideoPatch {
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean hideEndScreenSuggestedVideo() {
|
||||
return Settings.HIDE_END_SCREEN_SUGGESTED_VIDEO.get();
|
||||
}
|
||||
}
|
||||
@@ -21,6 +21,7 @@ public final class NavigationButtonsPatch {
|
||||
{
|
||||
put(NavigationButton.HOME, Settings.HIDE_HOME_BUTTON.get());
|
||||
put(NavigationButton.CREATE, Settings.HIDE_CREATE_BUTTON.get());
|
||||
put(NavigationButton.NOTIFICATIONS, Settings.HIDE_NOTIFICATIONS_BUTTON.get());
|
||||
put(NavigationButton.SHORTS, Settings.HIDE_SHORTS_BUTTON.get());
|
||||
put(NavigationButton.SUBSCRIPTIONS, Settings.HIDE_SUBSCRIPTIONS_BUTTON.get());
|
||||
}
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
package app.revanced.extension.youtube.patches;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Build;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Objects;
|
||||
@@ -58,7 +55,6 @@ public class ShortsAutoplayPatch {
|
||||
/**
|
||||
* @return If the app is currently in background PiP mode.
|
||||
*/
|
||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||
private static boolean isAppInBackgroundPiPMode() {
|
||||
Activity activity = mainActivityRef.get();
|
||||
return activity != null && activity.isInPictureInPictureMode();
|
||||
@@ -80,7 +76,6 @@ public class ShortsAutoplayPatch {
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||
public static Enum<?> changeShortsRepeatBehavior(Enum<?> original) {
|
||||
try {
|
||||
final boolean autoplay;
|
||||
|
||||
@@ -7,13 +7,10 @@ import static app.revanced.extension.youtube.patches.announcements.requests.Anno
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.os.Build;
|
||||
import android.text.Html;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import org.json.JSONArray;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -31,7 +28,6 @@ public final class AnnouncementsPatch {
|
||||
private AnnouncementsPatch() {
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||
private static boolean isLatestAlready() throws IOException {
|
||||
HttpURLConnection connection =
|
||||
AnnouncementsRoutes.getAnnouncementsConnectionFromRoute(GET_LATEST_ANNOUNCEMENT_IDS);
|
||||
@@ -70,7 +66,6 @@ public final class AnnouncementsPatch {
|
||||
return Settings.ANNOUNCEMENT_LAST_ID.get() == id;
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||
public static void showAnnouncement(final Activity context) {
|
||||
if (!Settings.ANNOUNCEMENTS.get()) return;
|
||||
|
||||
|
||||
@@ -6,8 +6,12 @@ import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
final class ButtonsFilter extends Filter {
|
||||
private static final String COMPACT_CHANNEL_BAR_PATH_PREFIX = "compact_channel_bar.eml";
|
||||
private static final String VIDEO_ACTION_BAR_PATH_PREFIX = "video_action_bar.eml";
|
||||
private static final String VIDEO_ACTION_BAR_PATH = "video_action_bar.eml";
|
||||
private static final String ANIMATED_VECTOR_TYPE_PATH = "AnimatedVectorType";
|
||||
|
||||
private final StringFilterGroup likeSubscribeGlow;
|
||||
private final StringFilterGroup actionBarGroup;
|
||||
private final StringFilterGroup bufferFilterPathGroup;
|
||||
private final ByteArrayFilterGroupList bufferButtonsGroupList = new ByteArrayFilterGroupList();
|
||||
@@ -20,11 +24,19 @@ final class ButtonsFilter extends Filter {
|
||||
addIdentifierCallbacks(actionBarGroup);
|
||||
|
||||
|
||||
likeSubscribeGlow = new StringFilterGroup(
|
||||
Settings.DISABLE_LIKE_SUBSCRIBE_GLOW,
|
||||
"animated_button_border.eml"
|
||||
);
|
||||
|
||||
bufferFilterPathGroup = new StringFilterGroup(
|
||||
null,
|
||||
"|ContainerType|button.eml|"
|
||||
);
|
||||
|
||||
addPathCallbacks(
|
||||
likeSubscribeGlow,
|
||||
bufferFilterPathGroup,
|
||||
new StringFilterGroup(
|
||||
Settings.HIDE_LIKE_DISLIKE_BUTTON,
|
||||
"|segmented_like_dislike_button"
|
||||
@@ -40,8 +52,7 @@ final class ButtonsFilter extends Filter {
|
||||
new StringFilterGroup(
|
||||
Settings.HIDE_CLIP_BUTTON,
|
||||
"|clip_button.eml|"
|
||||
),
|
||||
bufferFilterPathGroup
|
||||
)
|
||||
);
|
||||
|
||||
bufferButtonsGroupList.addAll(
|
||||
@@ -83,6 +94,15 @@ final class ButtonsFilter extends Filter {
|
||||
@Override
|
||||
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
|
||||
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
|
||||
if (matchedGroup == likeSubscribeGlow) {
|
||||
if ((path.startsWith(VIDEO_ACTION_BAR_PATH_PREFIX) || path.startsWith(COMPACT_CHANNEL_BAR_PATH_PREFIX))
|
||||
&& path.contains(ANIMATED_VECTOR_TYPE_PATH)) {
|
||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// If the current matched group is the action bar group,
|
||||
// in case every filter group is enabled, hide the action bar.
|
||||
if (matchedGroup == actionBarGroup) {
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
package app.revanced.extension.youtube.patches.components;
|
||||
|
||||
import android.os.Build;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
@@ -44,13 +41,11 @@ abstract class FilterGroupList<V, T extends FilterGroup<V>> implements Iterable<
|
||||
return filterGroups.iterator();
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||
@Override
|
||||
public void forEach(@NonNull Consumer<? super T> action) {
|
||||
filterGroups.forEach(action);
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||
@NonNull
|
||||
@Override
|
||||
public Spliterator<T> spliterator() {
|
||||
|
||||
@@ -4,11 +4,8 @@ import static app.revanced.extension.shared.StringRef.str;
|
||||
import static app.revanced.extension.youtube.shared.NavigationBar.NavigationButton;
|
||||
import static java.lang.Character.UnicodeBlock.*;
|
||||
|
||||
import android.os.Build;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.LinkedHashMap;
|
||||
@@ -44,7 +41,6 @@ import app.revanced.extension.youtube.shared.PlayerType;
|
||||
* - When using whole word syntax, some keywords may need additional pluralized variations.
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||
final class KeywordContentFilter extends Filter {
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,11 +3,9 @@ package app.revanced.extension.youtube.patches.components;
|
||||
import static app.revanced.extension.youtube.shared.NavigationBar.NavigationButton;
|
||||
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
@@ -18,10 +16,6 @@ import app.revanced.extension.youtube.shared.PlayerType;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class LayoutComponentsFilter extends Filter {
|
||||
private static final String COMPACT_CHANNEL_BAR_PATH_PREFIX = "compact_channel_bar.eml";
|
||||
private static final String VIDEO_ACTION_BAR_PATH_PREFIX = "video_action_bar.eml";
|
||||
private static final String ANIMATED_VECTOR_TYPE_PATH = "AnimatedVectorType";
|
||||
|
||||
private static final StringTrieSearch mixPlaylistsExceptions = new StringTrieSearch(
|
||||
"V.ED", // Playlist browse id.
|
||||
"java.lang.ref.WeakReference"
|
||||
@@ -38,16 +32,15 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
private final StringTrieSearch exceptions = new StringTrieSearch();
|
||||
private final StringFilterGroup inFeedSurvey;
|
||||
private final StringFilterGroup notifyMe;
|
||||
private final StringFilterGroup singleItemInformationPanel;
|
||||
private final StringFilterGroup expandableMetadata;
|
||||
private final ByteArrayFilterGroup searchResultRecommendations;
|
||||
private final StringFilterGroup searchResultVideo;
|
||||
private final StringFilterGroup compactChannelBarInner;
|
||||
private final StringFilterGroup compactChannelBarInnerButton;
|
||||
private final ByteArrayFilterGroup joinMembershipButton;
|
||||
private final StringFilterGroup likeSubscribeGlow;
|
||||
private final StringFilterGroup horizontalShelves;
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||
public LayoutComponentsFilter() {
|
||||
exceptions.addPatterns(
|
||||
"home_video_with_context",
|
||||
@@ -105,6 +98,11 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
"compact_banner"
|
||||
);
|
||||
|
||||
final var subscriptionsChipBar = new StringFilterGroup(
|
||||
Settings.HIDE_FILTER_BAR_FEED_IN_FEED,
|
||||
"subscriptions_chip_bar"
|
||||
);
|
||||
|
||||
inFeedSurvey = new StringFilterGroup(
|
||||
Settings.HIDE_FEED_SURVEY,
|
||||
"in_feed_survey",
|
||||
@@ -123,8 +121,12 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
);
|
||||
|
||||
final var infoPanel = new StringFilterGroup(
|
||||
Settings.HIDE_HIDE_INFO_PANELS,
|
||||
"publisher_transparency_panel",
|
||||
Settings.HIDE_INFO_PANELS,
|
||||
"publisher_transparency_panel"
|
||||
);
|
||||
|
||||
singleItemInformationPanel = new StringFilterGroup(
|
||||
Settings.HIDE_INFO_PANELS,
|
||||
"single_item_information_panel"
|
||||
);
|
||||
|
||||
@@ -217,10 +219,6 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
"sponsorships"
|
||||
);
|
||||
|
||||
likeSubscribeGlow = new StringFilterGroup(
|
||||
Settings.DISABLE_LIKE_SUBSCRIBE_GLOW,
|
||||
"animated_button_border.eml"
|
||||
);
|
||||
|
||||
final var channelWatermark = new StringFilterGroup(
|
||||
Settings.HIDE_VIDEO_CHANNEL_WATERMARK,
|
||||
@@ -254,7 +252,6 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
expandableMetadata,
|
||||
inFeedSurvey,
|
||||
notifyMe,
|
||||
likeSubscribeGlow,
|
||||
compactChannelBar,
|
||||
communityPosts,
|
||||
paidPromotion,
|
||||
@@ -269,8 +266,10 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
compactChannelBarInner,
|
||||
medicalPanel,
|
||||
infoPanel,
|
||||
singleItemInformationPanel,
|
||||
emergencyBox,
|
||||
subscribersCommunityGuidelines,
|
||||
subscriptionsChipBar,
|
||||
channelGuidelines,
|
||||
audioTrackButton,
|
||||
artistCard,
|
||||
@@ -285,6 +284,19 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
@Override
|
||||
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
|
||||
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
|
||||
// This identifier is used not only in players but also in search results:
|
||||
// https://github.com/ReVanced/revanced-patches/issues/3245
|
||||
// Until 2024, medical information panels such as Covid 19 also used this identifier and were shown in the search results.
|
||||
// From 2025, the medical information panel is no longer shown in the search results.
|
||||
// Therefore, this identifier does not filter when the search bar is activated.
|
||||
if (matchedGroup == singleItemInformationPanel) {
|
||||
if (PlayerType.getCurrent().isMaximizedOrFullscreen() || !NavigationBar.isSearchBarActive()) {
|
||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (matchedGroup == searchResultVideo) {
|
||||
if (searchResultRecommendations.check(protobufBufferArray).isFiltered()) {
|
||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
||||
@@ -292,15 +304,6 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (matchedGroup == likeSubscribeGlow) {
|
||||
if ((path.startsWith(VIDEO_ACTION_BAR_PATH_PREFIX) || path.startsWith(COMPACT_CHANNEL_BAR_PATH_PREFIX))
|
||||
&& path.contains(ANIMATED_VECTOR_TYPE_PATH)) {
|
||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// The groups are excluded from the filter due to the exceptions list below.
|
||||
// Filter them separately here.
|
||||
if (matchedGroup == notifyMe || matchedGroup == inFeedSurvey || matchedGroup == expandableMetadata)
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
package app.revanced.extension.youtube.patches.components;
|
||||
|
||||
import android.os.Build;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.youtube.shared.PlayerType;
|
||||
@@ -16,7 +13,6 @@ public class PlayerFlyoutMenuItemsFilter extends Filter {
|
||||
private final ByteArrayFilterGroup exception;
|
||||
private final StringFilterGroup videoQualityMenuFooter;
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||
public PlayerFlyoutMenuItemsFilter() {
|
||||
exception = new ByteArrayFilterGroup(
|
||||
// Whitelist Quality menu item when "Hide Additional settings menu" is enabled
|
||||
|
||||
@@ -352,13 +352,16 @@ public class ReturnYouTubeDislike {
|
||||
}
|
||||
|
||||
private static String formatDislikeCount(long dislikeCount) {
|
||||
synchronized (ReturnYouTubeDislike.class) { // number formatter is not thread safe, must synchronize
|
||||
synchronized (ReturnYouTubeDislike.class) { // Number formatter is not thread safe.
|
||||
if (dislikeCountFormatter == null) {
|
||||
Locale locale = Objects.requireNonNull(Utils.getContext()).getResources().getConfiguration().locale;
|
||||
// Must use default locale and not Utils context locale,
|
||||
// otherwise if using a different settings language then the
|
||||
// formatting will use that of the different language.
|
||||
Locale locale = Locale.getDefault();
|
||||
dislikeCountFormatter = CompactDecimalFormat.getInstance(locale, CompactDecimalFormat.CompactStyle.SHORT);
|
||||
|
||||
// YouTube disregards locale specific number characters
|
||||
// and instead shows english number characters everywhere.
|
||||
// and instead shows English number characters everywhere.
|
||||
// To use the same behavior, override the digit characters to use English
|
||||
// so languages such as Arabic will show "1.234" instead of the native "۱,۲۳٤"
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
@@ -375,15 +378,15 @@ public class ReturnYouTubeDislike {
|
||||
private static String formatDislikePercentage(float dislikePercentage) {
|
||||
synchronized (ReturnYouTubeDislike.class) { // Number formatter is not thread safe, must synchronize.
|
||||
if (dislikePercentageFormatter == null) {
|
||||
Locale locale = Objects.requireNonNull(Utils.getContext()).getResources().getConfiguration().locale;
|
||||
Locale locale = Locale.getDefault();
|
||||
dislikePercentageFormatter = NumberFormat.getPercentInstance(locale);
|
||||
|
||||
// Want to set the digit strings, and the simplest way is to cast to the implementation NumberFormat returns.
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P
|
||||
&& dislikePercentageFormatter instanceof DecimalFormat) {
|
||||
&& dislikePercentageFormatter instanceof DecimalFormat decimalFormatter) {
|
||||
DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(locale);
|
||||
symbols.setDigitStrings(DecimalFormatSymbols.getInstance(Locale.ENGLISH).getDigitStrings());
|
||||
((DecimalFormat) dislikePercentageFormatter).setDecimalFormatSymbols(symbols);
|
||||
decimalFormatter.setDecimalFormatSymbols(symbols);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,15 +5,12 @@ import static app.revanced.extension.shared.Utils.getResourceIdentifier;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.util.TypedValue;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toolbar;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
@@ -22,6 +19,7 @@ import app.revanced.extension.shared.settings.AppLanguage;
|
||||
import app.revanced.extension.shared.settings.BaseSettings;
|
||||
import app.revanced.extension.youtube.ThemeHelper;
|
||||
import app.revanced.extension.youtube.patches.VersionCheckPatch;
|
||||
import app.revanced.extension.youtube.patches.spoof.SpoofAppVersionPatch;
|
||||
import app.revanced.extension.youtube.settings.preference.ReVancedPreferenceFragment;
|
||||
import app.revanced.extension.youtube.settings.preference.ReturnYouTubeDislikePreferenceFragment;
|
||||
import app.revanced.extension.youtube.settings.preference.SponsorBlockPreferenceFragment;
|
||||
@@ -66,6 +64,10 @@ public class LicenseActivityHook {
|
||||
if (Settings.RESTORE_OLD_SETTINGS_MENUS.get()) {
|
||||
return false;
|
||||
}
|
||||
// Spoofing can cause half broken settings menus of old and new settings.
|
||||
if (SpoofAppVersionPatch.isSpoofingToLessThan("19.35.36")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// On the first launch of a clean install, forcing the cairo menu can give a
|
||||
// half broken appearance because all the preference icons may not be available yet.
|
||||
@@ -79,7 +81,6 @@ public class LicenseActivityHook {
|
||||
* <p>
|
||||
* Hooks LicenseActivity#onCreate in order to inject our own fragment.
|
||||
*/
|
||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||
public static void initialize(Activity licenseActivity) {
|
||||
try {
|
||||
ThemeHelper.setActivityTheme(licenseActivity);
|
||||
@@ -119,15 +120,13 @@ public class LicenseActivityHook {
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||
@SuppressLint("UseCompatLoadingForDrawables")
|
||||
private static void createToolbar(Activity activity, String toolbarTitleResourceName) {
|
||||
// Replace dummy placeholder toolbar.
|
||||
// This is required to fix submenu title alignment issue with Android ASOP 15+
|
||||
ViewGroup toolBarParent = activity.findViewById(
|
||||
getResourceIdentifier("revanced_toolbar_parent", "id"));
|
||||
ViewGroup dummyToolbar = toolBarParent.findViewById(getResourceIdentifier(
|
||||
"revanced_toolbar", "id"));
|
||||
ViewGroup dummyToolbar = Utils.getChildViewByResourceName(toolBarParent,"revanced_toolbar");
|
||||
toolbarLayoutParams = dummyToolbar.getLayoutParams();
|
||||
toolBarParent.removeView(dummyToolbar);
|
||||
|
||||
|
||||
@@ -124,9 +124,7 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting COPY_VIDEO_URL = new BooleanSetting("revanced_copy_video_url", FALSE);
|
||||
public static final BooleanSetting COPY_VIDEO_URL_TIMESTAMP = new BooleanSetting("revanced_copy_video_url_timestamp", TRUE);
|
||||
public static final BooleanSetting DISABLE_FULLSCREEN_AMBIENT_MODE = new BooleanSetting("revanced_disable_fullscreen_ambient_mode", TRUE, true);
|
||||
public static final BooleanSetting DISABLE_LIKE_SUBSCRIBE_GLOW = new BooleanSetting("revanced_disable_like_subscribe_glow", FALSE);
|
||||
public static final BooleanSetting DISABLE_ROLLING_NUMBER_ANIMATIONS = new BooleanSetting("revanced_disable_rolling_number_animations", FALSE);
|
||||
public static final BooleanSetting DISABLE_SUGGESTED_VIDEO_END_SCREEN = new BooleanSetting("revanced_disable_suggested_video_end_screen", FALSE, true);
|
||||
public static final EnumSetting<FullscreenMode> EXIT_FULLSCREEN = new EnumSetting<>("revanced_exit_fullscreen", FullscreenMode.DISABLED);
|
||||
public static final BooleanSetting HIDE_AUTOPLAY_BUTTON = new BooleanSetting("revanced_hide_autoplay_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_CAPTIONS_BUTTON = new BooleanSetting("revanced_hide_captions_button", FALSE);
|
||||
@@ -136,8 +134,9 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_COMMUNITY_GUIDELINES = new BooleanSetting("revanced_hide_community_guidelines", TRUE);
|
||||
public static final BooleanSetting HIDE_EMERGENCY_BOX = new BooleanSetting("revanced_hide_emergency_box", TRUE);
|
||||
public static final BooleanSetting HIDE_ENDSCREEN_CARDS = new BooleanSetting("revanced_hide_endscreen_cards", FALSE);
|
||||
public static final BooleanSetting HIDE_END_SCREEN_SUGGESTED_VIDEO = new BooleanSetting("revanced_end_screen_suggested_video", FALSE, true);
|
||||
public static final BooleanSetting HIDE_HIDE_CHANNEL_GUIDELINES = new BooleanSetting("revanced_hide_channel_guidelines", TRUE);
|
||||
public static final BooleanSetting HIDE_HIDE_INFO_PANELS = new BooleanSetting("revanced_hide_info_panels", TRUE);
|
||||
public static final BooleanSetting HIDE_INFO_PANELS = new BooleanSetting("revanced_hide_info_panels", TRUE);
|
||||
public static final BooleanSetting HIDE_INFO_CARDS = new BooleanSetting("revanced_hide_info_cards", FALSE);
|
||||
public static final BooleanSetting HIDE_JOIN_MEMBERSHIP_BUTTON = new BooleanSetting("revanced_hide_join_membership_button", TRUE);
|
||||
public static final BooleanSetting HIDE_MEDICAL_PANELS = new BooleanSetting("revanced_hide_medical_panels", TRUE);
|
||||
@@ -185,6 +184,7 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_PODCAST_SECTION = new BooleanSetting("revanced_hide_podcast_section", TRUE);
|
||||
public static final BooleanSetting HIDE_TRANSCRIPT_SECTION = new BooleanSetting("revanced_hide_transcript_section", TRUE);
|
||||
// Action buttons
|
||||
public static final BooleanSetting DISABLE_LIKE_SUBSCRIBE_GLOW = new BooleanSetting("revanced_disable_like_subscribe_glow", FALSE);
|
||||
public static final BooleanSetting HIDE_CLIP_BUTTON = new BooleanSetting("revanced_hide_clip_button", TRUE);
|
||||
public static final BooleanSetting HIDE_DOWNLOAD_BUTTON = new BooleanSetting("revanced_hide_download_button", FALSE);
|
||||
public static final BooleanSetting HIDE_LIKE_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_like_dislike_button", FALSE);
|
||||
@@ -228,7 +228,9 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_SHORTS_BUTTON = new BooleanSetting("revanced_hide_shorts_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_SUBSCRIPTIONS_BUTTON = new BooleanSetting("revanced_hide_subscriptions_button", FALSE, true);
|
||||
public static final BooleanSetting HIDE_NAVIGATION_BUTTON_LABELS = new BooleanSetting("revanced_hide_navigation_button_labels", FALSE, true);
|
||||
public static final BooleanSetting SWITCH_CREATE_WITH_NOTIFICATIONS_BUTTON = new BooleanSetting("revanced_switch_create_with_notifications_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_NOTIFICATIONS_BUTTON = new BooleanSetting("revanced_hide_notifications_button", FALSE, true);
|
||||
public static final BooleanSetting SWITCH_CREATE_WITH_NOTIFICATIONS_BUTTON = new BooleanSetting("revanced_switch_create_with_notifications_button", TRUE, true,
|
||||
"revanced_switch_create_with_notifications_button_user_dialog_message");
|
||||
public static final BooleanSetting DISABLE_TRANSLUCENT_STATUS_BAR = new BooleanSetting("revanced_disable_translucent_status_bar", FALSE, true);
|
||||
public static final BooleanSetting DISABLE_TRANSLUCENT_NAVIGATION_BAR_LIGHT = new BooleanSetting("revanced_disable_translucent_navigation_bar_light", FALSE, true);
|
||||
public static final BooleanSetting DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK = new BooleanSetting("revanced_disable_translucent_navigation_bar_dark", FALSE, true);
|
||||
@@ -282,7 +284,6 @@ public class Settings extends BaseSettings {
|
||||
"revanced_seekbar_thumbnails_high_quality_dialog_message", new SeekbarThumbnailsHighQualityAvailability());
|
||||
public static final BooleanSetting SLIDE_TO_SEEK = new BooleanSetting("revanced_slide_to_seek", FALSE, true);
|
||||
public static final BooleanSetting SEEKBAR_CUSTOM_COLOR = new BooleanSetting("revanced_seekbar_custom_color", FALSE, true);
|
||||
private static final StringSetting DEPRECATED_SEEKBAR_CUSTOM_COLOR_PRIMARY = new StringSetting("revanced_seekbar_custom_color_value", "#FF0033");
|
||||
public static final StringSetting SEEKBAR_CUSTOM_COLOR_PRIMARY = new StringSetting("revanced_seekbar_custom_color_primary", "#FF0033", true, parent(SEEKBAR_CUSTOM_COLOR));
|
||||
public static final StringSetting SEEKBAR_CUSTOM_COLOR_ACCENT = new StringSetting("revanced_seekbar_custom_color_accent", "#FF2791", true, parent(SEEKBAR_CUSTOM_COLOR));
|
||||
|
||||
@@ -306,20 +307,19 @@ public class Settings extends BaseSettings {
|
||||
|
||||
// Swipe controls
|
||||
public static final BooleanSetting SWIPE_CHANGE_VIDEO = new BooleanSetting("revanced_swipe_change_video", FALSE, true);
|
||||
public static final BooleanSetting SWIPE_BRIGHTNESS = new BooleanSetting("revanced_swipe_brightness", FALSE);
|
||||
public static final BooleanSetting SWIPE_VOLUME = new BooleanSetting("revanced_swipe_volume", FALSE);
|
||||
public static final BooleanSetting SWIPE_BRIGHTNESS = new BooleanSetting("revanced_swipe_brightness", FALSE, true);
|
||||
public static final BooleanSetting SWIPE_VOLUME = new BooleanSetting("revanced_swipe_volume", FALSE, true);
|
||||
public static final BooleanSetting SWIPE_PRESS_TO_ENGAGE = new BooleanSetting("revanced_swipe_press_to_engage", FALSE, true,
|
||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||
public static final BooleanSetting SWIPE_HAPTIC_FEEDBACK = new BooleanSetting("revanced_swipe_haptic_feedback", TRUE, true,
|
||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||
public static final IntegerSetting SWIPE_MAGNITUDE_THRESHOLD = new IntegerSetting("revanced_swipe_threshold", 30, true,
|
||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||
public static final IntegerSetting SWIPE_OVERLAY_OPACITY = new IntegerSetting("revanced_swipe_overlay_background_opacity", 50, true,
|
||||
public static final BooleanSetting SWIPE_SHOW_CIRCULAR_OVERLAY = new BooleanSetting("revanced_swipe_show_circular_overlay", FALSE, true,
|
||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||
private static final IntegerSetting DEPRECATED_SWIPE_OVERLAY_BACKGROUND_ALPHA = new IntegerSetting("revanced_swipe_overlay_background_alpha", 127);
|
||||
|
||||
// Debugging
|
||||
public static final IntegerSetting SWIPE_OVERLAY_TEXT_SIZE = new IntegerSetting("revanced_swipe_text_overlay_size", 22, true,
|
||||
public static final BooleanSetting SWIPE_OVERLAY_MINIMAL_STYLE = new BooleanSetting("revanced_swipe_overlay_minimal_style", FALSE, true,
|
||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||
public static final IntegerSetting SWIPE_OVERLAY_OPACITY = new IntegerSetting("revanced_swipe_overlay_background_opacity", 60, true,
|
||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||
public static final LongSetting SWIPE_OVERLAY_TIMEOUT = new LongSetting("revanced_swipe_overlay_timeout", 500L, true,
|
||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||
@@ -382,9 +382,12 @@ public class Settings extends BaseSettings {
|
||||
public static final StringSetting SB_CATEGORY_UNSUBMITTED_COLOR = new StringSetting("sb_unsubmitted_color", "#FFFFFF");
|
||||
|
||||
// Deprecated migrations
|
||||
public static final StringSetting DEPRECATED_SB_UUID_OLD_MIGRATION_SETTING = new StringSetting("uuid", ""); // Delete sometime in 2024
|
||||
private static final StringSetting DEPRECATED_SB_UUID_OLD_MIGRATION_SETTING = new StringSetting("uuid", ""); // Delete sometime in 2024
|
||||
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_BUTTONS = new BooleanSetting("revanced_hide_player_buttons", FALSE, true);
|
||||
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER = new BooleanSetting("revanced_hide_video_quality_menu_footer", FALSE);
|
||||
private static final IntegerSetting DEPRECATED_SWIPE_OVERLAY_BACKGROUND_ALPHA = new IntegerSetting("revanced_swipe_overlay_background_alpha", 127);
|
||||
private static final StringSetting DEPRECATED_SEEKBAR_CUSTOM_COLOR_PRIMARY = new StringSetting("revanced_seekbar_custom_color_value", "#FF0033");
|
||||
private static final BooleanSetting DEPRECATED_DISABLE_SUGGESTED_VIDEO_END_SCREEN = new BooleanSetting("revanced_disable_suggested_video_end_screen", FALSE);
|
||||
|
||||
static {
|
||||
// region Migration
|
||||
@@ -403,11 +406,7 @@ public class Settings extends BaseSettings {
|
||||
|
||||
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER, HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER);
|
||||
|
||||
// Old spoof versions that no longer work reliably.
|
||||
if (SPOOF_APP_VERSION_TARGET.get().compareTo(SPOOF_APP_VERSION_TARGET.defaultValue) < 0) {
|
||||
Logger.printInfo(() -> "Resetting spoof app version target");
|
||||
SPOOF_APP_VERSION_TARGET.resetToDefault();
|
||||
}
|
||||
migrateOldSettingToNew(DEPRECATED_DISABLE_SUGGESTED_VIDEO_END_SCREEN, HIDE_END_SCREEN_SUGGESTED_VIDEO);
|
||||
|
||||
// Migrate renamed enum.
|
||||
//noinspection deprecation
|
||||
|
||||
@@ -3,18 +3,14 @@ package app.revanced.extension.youtube.settings.preference;
|
||||
import static android.text.Html.FROM_HTML_MODE_COMPACT;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.preference.Preference;
|
||||
import android.text.Html;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
/**
|
||||
* Allows using basic html for the summary text.
|
||||
*/
|
||||
@SuppressWarnings({"unused", "deprecation"})
|
||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||
public class HtmlPreference extends Preference {
|
||||
{
|
||||
setSummary(Html.fromHtml(getSummary().toString(), FROM_HTML_MODE_COMPACT));
|
||||
|
||||
@@ -17,8 +17,6 @@ import android.view.WindowInsets;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toolbar;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -98,7 +96,6 @@ public class ReVancedPreferenceFragment extends AbstractPreferenceFragment {
|
||||
listPreference.setEntryValues(sortedEntryValues);
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||
@Override
|
||||
protected void initialize() {
|
||||
super.initialize();
|
||||
|
||||
@@ -85,7 +85,7 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference {
|
||||
String summary = str(key + "_summary");
|
||||
|
||||
// Android VR supports AV1 but all other clients do not.
|
||||
if (clientType != ClientType.ANDROID_VR && clientType != ClientType.ANDROID_VR_NO_AUTH) {
|
||||
if (clientType != ClientType.ANDROID_VR_AUTH && clientType != ClientType.ANDROID_VR_NO_AUTH) {
|
||||
summary += '\n' + str("revanced_spoof_video_streams_about_no_av1");
|
||||
}
|
||||
|
||||
|
||||
@@ -3,11 +3,9 @@ package app.revanced.extension.youtube.shared;
|
||||
import static app.revanced.extension.youtube.shared.NavigationBar.NavigationButton.CREATE;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Build;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Arrays;
|
||||
@@ -257,7 +255,6 @@ public final class NavigationBar {
|
||||
* Injection point.
|
||||
* Fixes missing drawable.
|
||||
*/
|
||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
public static void setCairoNotificationFilledIcon(EnumMap enumMap, Enum tabActivityCairo) {
|
||||
if (fillBellCairoBlack != 0) {
|
||||
|
||||
@@ -21,9 +21,6 @@ enum class PlayerType {
|
||||
|
||||
/**
|
||||
* A regular video is minimized.
|
||||
*
|
||||
* When spoofing to 16.x YouTube and watching a short with a regular video in the background,
|
||||
* the type can be this (and not [HIDDEN]).
|
||||
*/
|
||||
WATCH_WHILE_MINIMIZED,
|
||||
WATCH_WHILE_MAXIMIZED,
|
||||
@@ -56,8 +53,7 @@ enum class PlayerType {
|
||||
val newType = nameToPlayerType[enumName]
|
||||
if (newType == null) {
|
||||
Logger.printException { "Unknown PlayerType encountered: $enumName" }
|
||||
} else if (current != newType) {
|
||||
Logger.printDebug { "PlayerType changed to: $newType" }
|
||||
} else {
|
||||
current = newType
|
||||
}
|
||||
}
|
||||
@@ -68,9 +64,13 @@ enum class PlayerType {
|
||||
@JvmStatic
|
||||
var current
|
||||
get() = currentPlayerType
|
||||
private set(value) {
|
||||
currentPlayerType = value
|
||||
onChange(currentPlayerType)
|
||||
private set(type) {
|
||||
if (currentPlayerType != type) {
|
||||
Logger.printDebug { "Changed to: $type" }
|
||||
|
||||
currentPlayerType = type
|
||||
onChange(type)
|
||||
}
|
||||
}
|
||||
|
||||
@Volatile // Read/write from different threads.
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
package app.revanced.extension.youtube.sponsorblock.ui;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.youtube.patches.VideoInformation;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.youtube.videoplayer.PlayerControlButton;
|
||||
|
||||
public class CreateSegmentButton {
|
||||
@Nullable
|
||||
private static PlayerControlButton instance;
|
||||
|
||||
public static void hideControls() {
|
||||
if (instance != null) instance.hide();
|
||||
}
|
||||
|
||||
/**
|
||||
* injection point
|
||||
*/
|
||||
public static void initialize(View controlsView) {
|
||||
try {
|
||||
instance = new PlayerControlButton(
|
||||
controlsView,
|
||||
"revanced_sb_create_segment_button",
|
||||
null,
|
||||
CreateSegmentButton::shouldBeShown,
|
||||
v -> SponsorBlockViewController.toggleNewSegmentLayoutVisibility(),
|
||||
null
|
||||
);
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "initialize failure", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point
|
||||
*/
|
||||
public static void setVisibilityImmediate(boolean visible) {
|
||||
if (instance != null) instance.setVisibilityImmediate(visible);
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point
|
||||
*/
|
||||
public static void setVisibility(boolean visible, boolean animated) {
|
||||
if (instance != null) instance.setVisibility(visible, animated);
|
||||
}
|
||||
|
||||
private static boolean shouldBeShown() {
|
||||
return Settings.SB_ENABLED.get() && Settings.SB_CREATE_NEW_SEGMENT.get()
|
||||
&& !VideoInformation.isAtEndOfVideo();
|
||||
}
|
||||
}
|
||||
@@ -1,111 +0,0 @@
|
||||
package app.revanced.extension.youtube.sponsorblock.ui;
|
||||
|
||||
import static app.revanced.extension.shared.Utils.getResourceIdentifier;
|
||||
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Objects;
|
||||
|
||||
import app.revanced.extension.youtube.patches.VideoInformation;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.youtube.videoplayer.PlayerControlButton;
|
||||
|
||||
// Edit: This should be a subclass of PlayerControlButton
|
||||
public class CreateSegmentButtonController {
|
||||
private static WeakReference<ImageView> buttonReference = new WeakReference<>(null);
|
||||
private static boolean isShowing;
|
||||
|
||||
/**
|
||||
* injection point
|
||||
*/
|
||||
public static void initialize(View youtubeControlsLayout) {
|
||||
try {
|
||||
Logger.printDebug(() -> "initializing new segment button");
|
||||
ImageView imageView = Objects.requireNonNull(Utils.getChildViewByResourceName(
|
||||
youtubeControlsLayout, "revanced_sb_create_segment_button"));
|
||||
imageView.setVisibility(View.GONE);
|
||||
imageView.setOnClickListener(v -> SponsorBlockViewController.toggleNewSegmentLayoutVisibility());
|
||||
|
||||
buttonReference = new WeakReference<>(imageView);
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "initialize failure", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* injection point
|
||||
*/
|
||||
public static void changeVisibilityImmediate(boolean visible) {
|
||||
if (visible) {
|
||||
// Fix button flickering, by pushing this call to the back of
|
||||
// the main thread and letting other layout code run first.
|
||||
Utils.runOnMainThread(() -> setVisibility(true, false));
|
||||
} else {
|
||||
setVisibility(false, false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* injection point
|
||||
*/
|
||||
public static void changeVisibility(boolean visible, boolean animated) {
|
||||
// Ignore this call, otherwise with full screen thumbnails the buttons are visible while seeking.
|
||||
if (visible && !animated) return;
|
||||
|
||||
setVisibility(visible, animated);
|
||||
}
|
||||
|
||||
private static void setVisibility(boolean visible, boolean animated) {
|
||||
try {
|
||||
if (isShowing == visible) return;
|
||||
isShowing = visible;
|
||||
|
||||
ImageView iView = buttonReference.get();
|
||||
if (iView == null) return;
|
||||
|
||||
if (visible) {
|
||||
iView.clearAnimation();
|
||||
if (!shouldBeShown()) {
|
||||
return;
|
||||
}
|
||||
if (animated) {
|
||||
iView.startAnimation(PlayerControlButton.getButtonFadeIn());
|
||||
}
|
||||
iView.setVisibility(View.VISIBLE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (iView.getVisibility() == View.VISIBLE) {
|
||||
iView.clearAnimation();
|
||||
if (animated) {
|
||||
iView.startAnimation(PlayerControlButton.getButtonFadeOut());
|
||||
}
|
||||
iView.setVisibility(View.GONE);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "changeVisibility failure", ex);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean shouldBeShown() {
|
||||
return Settings.SB_ENABLED.get() && Settings.SB_CREATE_NEW_SEGMENT.get()
|
||||
&& !VideoInformation.isAtEndOfVideo();
|
||||
}
|
||||
|
||||
public static void hide() {
|
||||
if (!isShowing) {
|
||||
return;
|
||||
}
|
||||
Utils.verifyOnMainThread();
|
||||
View v = buttonReference.get();
|
||||
if (v == null) {
|
||||
return;
|
||||
}
|
||||
v.setVisibility(View.GONE);
|
||||
isShowing = false;
|
||||
}
|
||||
}
|
||||
@@ -238,8 +238,8 @@ public class SponsorBlockViewController {
|
||||
// but if buttons are showing when the end of the video is reached then they need
|
||||
// to be forcefully hidden
|
||||
if (!Settings.AUTO_REPEAT.get()) {
|
||||
CreateSegmentButtonController.hide();
|
||||
VotingButtonController.hide();
|
||||
CreateSegmentButton.hideControls();
|
||||
VotingButton.hideControls();
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "endOfVideoReached failure", ex);
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
package app.revanced.extension.youtube.sponsorblock.ui;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.youtube.patches.VideoInformation;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.youtube.sponsorblock.SegmentPlaybackController;
|
||||
import app.revanced.extension.youtube.sponsorblock.SponsorBlockUtils;
|
||||
import app.revanced.extension.youtube.videoplayer.PlayerControlButton;
|
||||
|
||||
public class VotingButton {
|
||||
@Nullable
|
||||
private static PlayerControlButton instance;
|
||||
|
||||
public static void hideControls() {
|
||||
if (instance != null) instance.hide();
|
||||
}
|
||||
|
||||
/**
|
||||
* injection point
|
||||
*/
|
||||
public static void initialize(View controlsView) {
|
||||
try {
|
||||
instance = new PlayerControlButton(
|
||||
controlsView,
|
||||
"revanced_sb_voting_button",
|
||||
null,
|
||||
VotingButton::shouldBeShown,
|
||||
v -> SponsorBlockUtils.onVotingClicked(v.getContext()),
|
||||
null
|
||||
);
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "initialize failure", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point
|
||||
*/
|
||||
public static void setVisibilityImmediate(boolean visible) {
|
||||
if (instance != null) instance.setVisibilityImmediate(visible);
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point
|
||||
*/
|
||||
public static void setVisibility(boolean visible, boolean animated) {
|
||||
if (instance != null) instance.setVisibility(visible, animated);
|
||||
}
|
||||
|
||||
private static boolean shouldBeShown() {
|
||||
return Settings.SB_ENABLED.get() && Settings.SB_VOTING_BUTTON.get()
|
||||
&& SegmentPlaybackController.videoHasSegments() && !VideoInformation.isAtEndOfVideo();
|
||||
}
|
||||
}
|
||||
@@ -1,116 +0,0 @@
|
||||
package app.revanced.extension.youtube.sponsorblock.ui;
|
||||
|
||||
import static app.revanced.extension.shared.Utils.getResourceIdentifier;
|
||||
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Objects;
|
||||
|
||||
import app.revanced.extension.youtube.patches.VideoInformation;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.youtube.sponsorblock.SegmentPlaybackController;
|
||||
import app.revanced.extension.youtube.sponsorblock.SponsorBlockUtils;
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.youtube.videoplayer.PlayerControlButton;
|
||||
|
||||
// Edit: This should be a subclass of PlayerControlButton
|
||||
public class VotingButtonController {
|
||||
private static WeakReference<ImageView> buttonReference = new WeakReference<>(null);
|
||||
private static boolean isShowing;
|
||||
|
||||
/**
|
||||
* injection point
|
||||
*/
|
||||
public static void initialize(View youtubeControlsLayout) {
|
||||
try {
|
||||
Logger.printDebug(() -> "initializing voting button");
|
||||
ImageView imageView = Objects.requireNonNull(Utils.getChildViewByResourceName(
|
||||
youtubeControlsLayout, "revanced_sb_voting_button"));
|
||||
imageView.setVisibility(View.GONE);
|
||||
imageView.setOnClickListener(v -> SponsorBlockUtils.onVotingClicked(v.getContext()));
|
||||
|
||||
buttonReference = new WeakReference<>(imageView);
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "initialize failure", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* injection point
|
||||
*/
|
||||
public static void changeVisibilityImmediate(boolean visible) {
|
||||
if (visible) {
|
||||
// Fix button flickering, by pushing this call to the back of
|
||||
// the main thread and letting other layout code run first.
|
||||
Utils.runOnMainThread(() -> setVisibility(true, false));
|
||||
} else {
|
||||
setVisibility(false, false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* injection point
|
||||
*/
|
||||
public static void changeVisibility(boolean visible, boolean animated) {
|
||||
// Ignore this call, otherwise with full screen thumbnails the buttons are visible while seeking.
|
||||
if (visible && !animated) return;
|
||||
|
||||
setVisibility(visible, animated);
|
||||
}
|
||||
|
||||
/**
|
||||
* injection point
|
||||
*/
|
||||
private static void setVisibility(boolean visible, boolean animated) {
|
||||
try {
|
||||
if (isShowing == visible) return;
|
||||
isShowing = visible;
|
||||
|
||||
ImageView iView = buttonReference.get();
|
||||
if (iView == null) return;
|
||||
|
||||
if (visible) {
|
||||
iView.clearAnimation();
|
||||
if (!shouldBeShown()) {
|
||||
return;
|
||||
}
|
||||
if (animated) {
|
||||
iView.startAnimation(PlayerControlButton.getButtonFadeIn());
|
||||
}
|
||||
iView.setVisibility(View.VISIBLE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (iView.getVisibility() == View.VISIBLE) {
|
||||
iView.clearAnimation();
|
||||
if (animated) {
|
||||
iView.startAnimation(PlayerControlButton.getButtonFadeOut());
|
||||
}
|
||||
iView.setVisibility(View.GONE);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "changeVisibility failure", ex);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean shouldBeShown() {
|
||||
return Settings.SB_ENABLED.get() && Settings.SB_VOTING_BUTTON.get()
|
||||
&& SegmentPlaybackController.videoHasSegments() && !VideoInformation.isAtEndOfVideo();
|
||||
}
|
||||
|
||||
public static void hide() {
|
||||
if (!isShowing) {
|
||||
return;
|
||||
}
|
||||
Utils.verifyOnMainThread();
|
||||
View v = buttonReference.get();
|
||||
if (v == null) {
|
||||
return;
|
||||
}
|
||||
v.setVisibility(View.GONE);
|
||||
isShowing = false;
|
||||
}
|
||||
}
|
||||
@@ -20,19 +20,17 @@ class SwipeControlsConfigurationProvider(
|
||||
* should swipe controls be enabled? (global setting)
|
||||
*/
|
||||
val enableSwipeControls: Boolean
|
||||
get() = isFullscreenVideo && (enableVolumeControls || enableBrightnessControl)
|
||||
get() = (enableVolumeControls || enableBrightnessControl) && isFullscreenVideo
|
||||
|
||||
/**
|
||||
* should swipe controls for volume be enabled?
|
||||
*/
|
||||
val enableVolumeControls: Boolean
|
||||
get() = Settings.SWIPE_VOLUME.get()
|
||||
val enableVolumeControls = Settings.SWIPE_VOLUME.get()
|
||||
|
||||
/**
|
||||
* should swipe controls for volume be enabled?
|
||||
*/
|
||||
val enableBrightnessControl: Boolean
|
||||
get() = Settings.SWIPE_BRIGHTNESS.get()
|
||||
val enableBrightnessControl = Settings.SWIPE_BRIGHTNESS.get()
|
||||
|
||||
/**
|
||||
* is the video player currently in fullscreen mode?
|
||||
@@ -46,7 +44,7 @@ class SwipeControlsConfigurationProvider(
|
||||
* should volume key controls be overwritten? (global setting)
|
||||
*/
|
||||
val overwriteVolumeKeyControls: Boolean
|
||||
get() = isFullscreenVideo && enableVolumeControls
|
||||
get() = enableVolumeControls && isFullscreenVideo
|
||||
//endregion
|
||||
|
||||
//region gesture adjustments
|
||||
@@ -65,7 +63,6 @@ class SwipeControlsConfigurationProvider(
|
||||
//endregion
|
||||
|
||||
//region overlay adjustments
|
||||
|
||||
/**
|
||||
* should the overlay enable haptic feedback?
|
||||
*/
|
||||
@@ -79,15 +76,10 @@ class SwipeControlsConfigurationProvider(
|
||||
get() = Settings.SWIPE_OVERLAY_TIMEOUT.get()
|
||||
|
||||
/**
|
||||
* text size for the overlay, in sp
|
||||
* Gets the opacity value (0-100%) is converted to an alpha value (0-255) for transparency.
|
||||
* If the opacity value is out of range, it resets to the default and displays a warning message.
|
||||
*/
|
||||
val overlayTextSize: Int
|
||||
get() = Settings.SWIPE_OVERLAY_TEXT_SIZE.get()
|
||||
|
||||
/**
|
||||
* get the background color for text on the overlay, as a color int
|
||||
*/
|
||||
val overlayTextBackgroundColor: Int
|
||||
val overlayBackgroundOpacity: Int
|
||||
get() {
|
||||
var opacity = Settings.SWIPE_OVERLAY_OPACITY.get()
|
||||
|
||||
@@ -102,11 +94,34 @@ class SwipeControlsConfigurationProvider(
|
||||
}
|
||||
|
||||
/**
|
||||
* get the foreground color for text on the overlay, as a color int
|
||||
* The color of the progress overlay.
|
||||
*/
|
||||
val overlayForegroundColor: Int
|
||||
val overlayProgressColor: Int
|
||||
get() = 0xBFFFFFFF.toInt()
|
||||
|
||||
/**
|
||||
* The color used for the background of the progress overlay fill.
|
||||
*/
|
||||
val overlayFillBackgroundPaint: Int
|
||||
get() = 0x80D3D3D3.toInt()
|
||||
|
||||
/**
|
||||
* The color used for the text and icons in the overlay.
|
||||
*/
|
||||
val overlayTextColor: Int
|
||||
get() = Color.WHITE
|
||||
|
||||
/**
|
||||
* A flag that determines if the overlay should only show the icon.
|
||||
*/
|
||||
val overlayShowOverlayMinimalStyle: Boolean
|
||||
get() = Settings.SWIPE_OVERLAY_MINIMAL_STYLE.get()
|
||||
|
||||
/**
|
||||
* A flag that determines if the progress bar should be circular.
|
||||
*/
|
||||
val isCircularProgressBar: Boolean
|
||||
get() = Settings.SWIPE_SHOW_CIRCULAR_OVERLAY.get()
|
||||
//endregion
|
||||
|
||||
//region behaviour
|
||||
|
||||
@@ -82,11 +82,15 @@ abstract class BaseGestureController(
|
||||
}
|
||||
|
||||
override fun onScroll(
|
||||
from: MotionEvent,
|
||||
from: MotionEvent?,
|
||||
to: MotionEvent,
|
||||
distanceX: Float,
|
||||
distanceY: Float,
|
||||
): Boolean {
|
||||
if (from == null) {
|
||||
return false
|
||||
}
|
||||
|
||||
// submit to swipe detector
|
||||
submitForSwipe(from, to, distanceX, distanceY)
|
||||
|
||||
|
||||
@@ -1,138 +1,145 @@
|
||||
package app.revanced.extension.youtube.swipecontrols.views
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Paint
|
||||
import android.graphics.RectF
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.graphics.drawable.GradientDrawable
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.util.TypedValue
|
||||
import android.util.AttributeSet
|
||||
import android.view.HapticFeedbackConstants
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RelativeLayout
|
||||
import android.widget.TextView
|
||||
import app.revanced.extension.shared.StringRef.str
|
||||
import app.revanced.extension.shared.Utils
|
||||
import app.revanced.extension.youtube.swipecontrols.SwipeControlsConfigurationProvider
|
||||
import app.revanced.extension.youtube.swipecontrols.misc.SwipeControlsOverlay
|
||||
import app.revanced.extension.youtube.swipecontrols.misc.applyDimension
|
||||
import kotlin.math.min
|
||||
import kotlin.math.round
|
||||
|
||||
/**
|
||||
* main overlay layout for volume and brightness swipe controls
|
||||
*
|
||||
* @param context context to create in
|
||||
* Main overlay layout for displaying volume and brightness level with both circular and horizontal progress bars.
|
||||
*/
|
||||
class SwipeControlsOverlayLayout(
|
||||
context: Context,
|
||||
private val config: SwipeControlsConfigurationProvider,
|
||||
) : RelativeLayout(context), SwipeControlsOverlay {
|
||||
/**
|
||||
* DO NOT use this, for tools only
|
||||
*/
|
||||
|
||||
constructor(context: Context) : this(context, SwipeControlsConfigurationProvider(context))
|
||||
|
||||
private val feedbackTextView: TextView
|
||||
private val autoBrightnessIcon: Drawable
|
||||
private val manualBrightnessIcon: Drawable
|
||||
private val mutedVolumeIcon: Drawable
|
||||
private val normalVolumeIcon: Drawable
|
||||
// Drawable icons for brightness and volume
|
||||
private val autoBrightnessIcon: Drawable = getDrawable("revanced_ic_sc_brightness_auto")
|
||||
private val lowBrightnessIcon: Drawable = getDrawable("revanced_ic_sc_brightness_low")
|
||||
private val mediumBrightnessIcon: Drawable = getDrawable("revanced_ic_sc_brightness_medium")
|
||||
private val highBrightnessIcon: Drawable = getDrawable("revanced_ic_sc_brightness_high")
|
||||
private val fullBrightnessIcon: Drawable = getDrawable("revanced_ic_sc_brightness_full")
|
||||
private val mutedVolumeIcon: Drawable = getDrawable("revanced_ic_sc_volume_mute")
|
||||
private val lowVolumeIcon: Drawable = getDrawable("revanced_ic_sc_volume_low")
|
||||
private val normalVolumeIcon: Drawable = getDrawable("revanced_ic_sc_volume_normal")
|
||||
private val fullVolumeIcon: Drawable = getDrawable("revanced_ic_sc_volume_high")
|
||||
|
||||
private fun getDrawable(name: String, width: Int, height: Int): Drawable {
|
||||
return resources.getDrawable(
|
||||
// Function to retrieve drawable resources by name
|
||||
private fun getDrawable(name: String): Drawable {
|
||||
val drawable = resources.getDrawable(
|
||||
Utils.getResourceIdentifier(context, name, "drawable"),
|
||||
context.theme,
|
||||
).apply {
|
||||
setTint(config.overlayForegroundColor)
|
||||
setBounds(
|
||||
0,
|
||||
0,
|
||||
width,
|
||||
height,
|
||||
)
|
||||
}
|
||||
)
|
||||
drawable.setTint(config.overlayTextColor)
|
||||
return drawable
|
||||
}
|
||||
|
||||
// Initialize progress bars
|
||||
private val circularProgressView: CircularProgressView
|
||||
private val horizontalProgressView: HorizontalProgressView
|
||||
|
||||
init {
|
||||
// init views
|
||||
val feedbackTextViewPadding = 2.applyDimension(context, TypedValue.COMPLEX_UNIT_DIP)
|
||||
val compoundIconPadding = 4.applyDimension(context, TypedValue.COMPLEX_UNIT_DIP)
|
||||
feedbackTextView = TextView(context).apply {
|
||||
layoutParams = LayoutParams(
|
||||
LayoutParams.WRAP_CONTENT,
|
||||
LayoutParams.WRAP_CONTENT,
|
||||
).apply {
|
||||
// Initialize circular progress bar
|
||||
circularProgressView = CircularProgressView(
|
||||
context,
|
||||
config.overlayBackgroundOpacity,
|
||||
config.overlayShowOverlayMinimalStyle,
|
||||
config.overlayProgressColor,
|
||||
config.overlayFillBackgroundPaint,
|
||||
config.overlayTextColor
|
||||
).apply {
|
||||
layoutParams = LayoutParams(300, 300).apply {
|
||||
addRule(CENTER_IN_PARENT, TRUE)
|
||||
setPadding(
|
||||
feedbackTextViewPadding,
|
||||
feedbackTextViewPadding,
|
||||
feedbackTextViewPadding,
|
||||
feedbackTextViewPadding,
|
||||
)
|
||||
}
|
||||
background = GradientDrawable().apply {
|
||||
cornerRadius = 8f
|
||||
setColor(config.overlayTextBackgroundColor)
|
||||
}
|
||||
setTextColor(config.overlayForegroundColor)
|
||||
setTextSize(TypedValue.COMPLEX_UNIT_SP, config.overlayTextSize.toFloat())
|
||||
compoundDrawablePadding = compoundIconPadding
|
||||
visibility = GONE
|
||||
visibility = GONE // Initially hidden
|
||||
}
|
||||
addView(feedbackTextView)
|
||||
addView(circularProgressView)
|
||||
|
||||
// get icons scaled, assuming square icons
|
||||
val iconHeight = round(feedbackTextView.lineHeight * .8).toInt()
|
||||
autoBrightnessIcon = getDrawable("revanced_ic_sc_brightness_auto", iconHeight, iconHeight)
|
||||
manualBrightnessIcon = getDrawable("revanced_ic_sc_brightness_manual", iconHeight, iconHeight)
|
||||
mutedVolumeIcon = getDrawable("revanced_ic_sc_volume_mute", iconHeight, iconHeight)
|
||||
normalVolumeIcon = getDrawable("revanced_ic_sc_volume_normal", iconHeight, iconHeight)
|
||||
// Initialize horizontal progress bar
|
||||
val screenWidth = resources.displayMetrics.widthPixels
|
||||
val layoutWidth = (screenWidth * 2 / 3).toInt() // 2/3 of screen width
|
||||
horizontalProgressView = HorizontalProgressView(
|
||||
context,
|
||||
config.overlayBackgroundOpacity,
|
||||
config.overlayShowOverlayMinimalStyle,
|
||||
config.overlayProgressColor,
|
||||
config.overlayFillBackgroundPaint,
|
||||
config.overlayTextColor
|
||||
).apply {
|
||||
layoutParams = LayoutParams(layoutWidth, 100).apply {
|
||||
addRule(CENTER_HORIZONTAL)
|
||||
topMargin = 40 // Top margin
|
||||
}
|
||||
visibility = GONE // Initially hidden
|
||||
}
|
||||
addView(horizontalProgressView)
|
||||
}
|
||||
|
||||
// Handler and callback for hiding progress bars
|
||||
private val feedbackHideHandler = Handler(Looper.getMainLooper())
|
||||
private val feedbackHideCallback = Runnable {
|
||||
feedbackTextView.visibility = GONE
|
||||
circularProgressView.visibility = GONE
|
||||
horizontalProgressView.visibility = GONE
|
||||
}
|
||||
|
||||
/**
|
||||
* show the feedback view for a given time
|
||||
*
|
||||
* @param message the message to show
|
||||
* @param icon the icon to use
|
||||
* Displays the progress bar with the appropriate value, icon, and type (brightness or volume).
|
||||
*/
|
||||
private fun showFeedbackView(message: String, icon: Drawable) {
|
||||
private fun showFeedbackView(value: String, progress: Int, max: Int, icon: Drawable, isBrightness: Boolean) {
|
||||
feedbackHideHandler.removeCallbacks(feedbackHideCallback)
|
||||
feedbackHideHandler.postDelayed(feedbackHideCallback, config.overlayShowTimeoutMillis)
|
||||
feedbackTextView.apply {
|
||||
text = message
|
||||
setCompoundDrawablesRelative(
|
||||
icon,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
)
|
||||
|
||||
val viewToShow = if (config.isCircularProgressBar) circularProgressView else horizontalProgressView
|
||||
viewToShow.apply {
|
||||
setProgress(progress, max, value, isBrightness)
|
||||
this.icon = icon
|
||||
visibility = VISIBLE
|
||||
}
|
||||
}
|
||||
|
||||
// Handle volume change
|
||||
override fun onVolumeChanged(newVolume: Int, maximumVolume: Int) {
|
||||
showFeedbackView(
|
||||
"$newVolume",
|
||||
if (newVolume > 0) normalVolumeIcon else mutedVolumeIcon,
|
||||
)
|
||||
val volumePercentage = (newVolume.toFloat() / maximumVolume) * 100
|
||||
val icon = when {
|
||||
newVolume == 0 -> mutedVolumeIcon
|
||||
volumePercentage < 33 -> lowVolumeIcon
|
||||
volumePercentage < 66 -> normalVolumeIcon
|
||||
else -> fullVolumeIcon
|
||||
}
|
||||
showFeedbackView("$newVolume", newVolume, maximumVolume, icon, isBrightness = false)
|
||||
}
|
||||
|
||||
// Handle brightness change
|
||||
override fun onBrightnessChanged(brightness: Double) {
|
||||
if (config.shouldLowestValueEnableAutoBrightness && brightness <= 0) {
|
||||
showFeedbackView(
|
||||
str("revanced_swipe_lowest_value_enable_auto_brightness_overlay_text"),
|
||||
autoBrightnessIcon,
|
||||
)
|
||||
} else if (brightness >= 0) {
|
||||
showFeedbackView("${round(brightness).toInt()}%", manualBrightnessIcon)
|
||||
showFeedbackView("Auto", 0, 100, autoBrightnessIcon, isBrightness = true)
|
||||
} else {
|
||||
val brightnessValue = round(brightness).toInt()
|
||||
val icon = when {
|
||||
brightnessValue < 25 -> lowBrightnessIcon
|
||||
brightnessValue < 50 -> mediumBrightnessIcon
|
||||
brightnessValue < 75 -> highBrightnessIcon
|
||||
else -> fullBrightnessIcon
|
||||
}
|
||||
showFeedbackView("$brightnessValue%", brightnessValue, 100, icon, isBrightness = true)
|
||||
}
|
||||
}
|
||||
|
||||
// Begin swipe session
|
||||
override fun onEnterSwipeSession() {
|
||||
if (config.shouldEnableHapticFeedback) {
|
||||
@Suppress("DEPRECATION")
|
||||
@@ -143,3 +150,229 @@ class SwipeControlsOverlayLayout(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Abstract base class for progress views.
|
||||
*/
|
||||
abstract class AbstractProgressView(
|
||||
context: Context,
|
||||
protected val overlayBackgroundOpacity: Int,
|
||||
protected val overlayShowOverlayMinimalStyle: Boolean,
|
||||
protected val overlayProgressColor: Int,
|
||||
protected val overlayFillBackgroundPaint: Int,
|
||||
protected val overlayTextColor: Int,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : View(context, attrs, defStyleAttr) {
|
||||
|
||||
// Combined paint creation function for both fill and stroke styles
|
||||
private fun createPaint(color: Int, style: Paint.Style = Paint.Style.FILL, strokeCap: Paint.Cap = Paint.Cap.BUTT, strokeWidth: Float = 0f) = Paint(Paint.ANTI_ALIAS_FLAG).apply {
|
||||
this.style = style
|
||||
this.color = color
|
||||
this.strokeCap = strokeCap
|
||||
this.strokeWidth = strokeWidth
|
||||
}
|
||||
|
||||
// Initialize paints
|
||||
public val backgroundPaint = createPaint(overlayBackgroundOpacity, style = Paint.Style.FILL)
|
||||
public val progressPaint = createPaint(overlayProgressColor, style = Paint.Style.STROKE, strokeCap = Paint.Cap.ROUND, strokeWidth = 20f)
|
||||
public val fillBackgroundPaint = createPaint(overlayFillBackgroundPaint, style = Paint.Style.FILL)
|
||||
public val textPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
|
||||
color = overlayTextColor
|
||||
textAlign = Paint.Align.CENTER
|
||||
textSize = 40f // Can adjust based on need
|
||||
}
|
||||
|
||||
protected var progress = 0
|
||||
protected var maxProgress = 100
|
||||
protected var displayText: String = "0"
|
||||
protected var isBrightness = true
|
||||
public var icon: Drawable? = null
|
||||
|
||||
init {
|
||||
// Stroke widths are now set in createPaint for progressPaint and fillBackgroundPaint
|
||||
}
|
||||
|
||||
fun setProgress(value: Int, max: Int, text: String, isBrightnessMode: Boolean) {
|
||||
progress = value
|
||||
maxProgress = max
|
||||
displayText = text
|
||||
isBrightness = isBrightnessMode
|
||||
invalidate()
|
||||
}
|
||||
|
||||
override fun onDraw(canvas: Canvas) {
|
||||
// Base class implementation can be empty
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom view for rendering a circular progress indicator with icons and text.
|
||||
*/
|
||||
class CircularProgressView(
|
||||
context: Context,
|
||||
overlayBackgroundOpacity: Int,
|
||||
overlayShowOverlayMinimalStyle: Boolean,
|
||||
overlayProgressColor: Int,
|
||||
overlayFillBackgroundPaint: Int,
|
||||
overlayTextColor: Int,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : AbstractProgressView(
|
||||
context,
|
||||
overlayBackgroundOpacity,
|
||||
overlayShowOverlayMinimalStyle,
|
||||
overlayProgressColor,
|
||||
overlayFillBackgroundPaint,
|
||||
overlayTextColor,
|
||||
attrs,
|
||||
defStyleAttr
|
||||
) {
|
||||
private val rectF = RectF()
|
||||
|
||||
init {
|
||||
textPaint.textSize = 40f // Override default text size for circular view
|
||||
progressPaint.strokeWidth = 20f
|
||||
fillBackgroundPaint.strokeWidth = 20f
|
||||
progressPaint.strokeCap = Paint.Cap.ROUND
|
||||
fillBackgroundPaint.strokeCap = Paint.Cap.BUTT
|
||||
progressPaint.style = Paint.Style.STROKE
|
||||
fillBackgroundPaint.style = Paint.Style.STROKE
|
||||
}
|
||||
|
||||
override fun onDraw(canvas: Canvas) {
|
||||
super.onDraw(canvas)
|
||||
|
||||
val size = min(width, height).toFloat()
|
||||
rectF.set(20f, 20f, size - 20f, size - 20f)
|
||||
|
||||
canvas.drawOval(rectF, fillBackgroundPaint) // Draw the outer ring.
|
||||
canvas.drawCircle(width / 2f, height / 2f, size / 3, backgroundPaint) // Draw the inner circle.
|
||||
|
||||
// Select the paint for drawing based on whether it's brightness or volume.
|
||||
val sweepAngle = (progress.toFloat() / maxProgress) * 360
|
||||
canvas.drawArc(rectF, -90f, sweepAngle, false, progressPaint) // Draw the progress arc.
|
||||
|
||||
// Draw the icon in the center.
|
||||
icon?.let {
|
||||
val iconSize = if (overlayShowOverlayMinimalStyle) 100 else 80
|
||||
val iconX = (width - iconSize) / 2
|
||||
val iconY = (height / 2) - if (overlayShowOverlayMinimalStyle) 50 else 80
|
||||
it.setBounds(iconX, iconY, iconX + iconSize, iconY + iconSize)
|
||||
it.draw(canvas)
|
||||
}
|
||||
|
||||
// If not a minimal style mode, draw the text inside the ring.
|
||||
if (!overlayShowOverlayMinimalStyle) {
|
||||
canvas.drawText(displayText, width / 2f, height / 2f + 60f, textPaint)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom view for rendering a rectangular progress bar with icons and text.
|
||||
*/
|
||||
class HorizontalProgressView(
|
||||
context: Context,
|
||||
overlayBackgroundOpacity: Int,
|
||||
overlayShowOverlayMinimalStyle: Boolean,
|
||||
overlayProgressColor: Int,
|
||||
overlayFillBackgroundPaint: Int,
|
||||
overlayTextColor: Int,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : AbstractProgressView(
|
||||
context,
|
||||
overlayBackgroundOpacity,
|
||||
overlayShowOverlayMinimalStyle,
|
||||
overlayProgressColor,
|
||||
overlayFillBackgroundPaint,
|
||||
overlayTextColor,
|
||||
attrs,
|
||||
defStyleAttr
|
||||
) {
|
||||
|
||||
private val iconSize = 60f
|
||||
private val padding = 40f
|
||||
|
||||
init {
|
||||
textPaint.textSize = 36f // Override default text size for horizontal view
|
||||
progressPaint.strokeWidth = 0f
|
||||
progressPaint.strokeCap = Paint.Cap.BUTT
|
||||
progressPaint.style = Paint.Style.FILL
|
||||
fillBackgroundPaint.style = Paint.Style.FILL
|
||||
}
|
||||
|
||||
override fun onDraw(canvas: Canvas) {
|
||||
super.onDraw(canvas)
|
||||
|
||||
val width = width.toFloat()
|
||||
val height = height.toFloat()
|
||||
|
||||
// Radius for rounded corners
|
||||
val cornerRadius = min(width, height) / 2
|
||||
|
||||
// Calculate the total width for the elements
|
||||
val minimalElementWidth = 5 * padding + iconSize
|
||||
|
||||
// Calculate the starting point (X) to center the elements
|
||||
val minimalStartX = (width - minimalElementWidth) / 2
|
||||
|
||||
// Draw the background
|
||||
if (!overlayShowOverlayMinimalStyle) {
|
||||
canvas.drawRoundRect(0f, 0f, width, height, cornerRadius, cornerRadius, backgroundPaint)
|
||||
} else {
|
||||
canvas.drawRoundRect(minimalStartX, 0f, minimalStartX + minimalElementWidth, height, cornerRadius, cornerRadius, backgroundPaint)
|
||||
}
|
||||
|
||||
if (!overlayShowOverlayMinimalStyle) {
|
||||
// Draw the fill background
|
||||
val startX = 2 * padding + iconSize
|
||||
val endX = width - 4 * padding
|
||||
val fillWidth = endX - startX
|
||||
|
||||
canvas.drawRoundRect(
|
||||
startX,
|
||||
height / 2 - 5f,
|
||||
endX,
|
||||
height / 2 + 5f,
|
||||
10f, 10f,
|
||||
fillBackgroundPaint
|
||||
)
|
||||
|
||||
// Draw the progress
|
||||
val progressWidth = (progress.toFloat() / maxProgress) * fillWidth
|
||||
canvas.drawRoundRect(
|
||||
startX,
|
||||
height / 2 - 5f,
|
||||
startX + progressWidth,
|
||||
height / 2 + 5f,
|
||||
10f, 10f,
|
||||
progressPaint
|
||||
)
|
||||
}
|
||||
|
||||
// Draw the icon
|
||||
icon?.let {
|
||||
val iconX = if (!overlayShowOverlayMinimalStyle) {
|
||||
padding
|
||||
} else {
|
||||
padding + minimalStartX
|
||||
}
|
||||
val iconY = height / 2 - iconSize / 2
|
||||
it.setBounds(iconX.toInt(), iconY.toInt(), (iconX + iconSize).toInt(), (iconY + iconSize).toInt())
|
||||
it.draw(canvas)
|
||||
}
|
||||
|
||||
// Draw the text on the right
|
||||
val textX = if (!overlayShowOverlayMinimalStyle) {
|
||||
width - 2 * padding
|
||||
} else {
|
||||
minimalStartX + minimalElementWidth - 2 * padding
|
||||
}
|
||||
val textY = height / 2 + textPaint.textSize / 3
|
||||
|
||||
// Draw the text
|
||||
canvas.drawText(displayText, textX, textY, textPaint)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,38 +1,35 @@
|
||||
package app.revanced.extension.youtube.videoplayer;
|
||||
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.youtube.patches.CopyVideoUrlPatch;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.youtube.shared.PlayerType;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class CopyVideoUrlButton extends PlayerControlButton {
|
||||
public class CopyVideoUrlButton {
|
||||
@Nullable
|
||||
private static CopyVideoUrlButton instance;
|
||||
|
||||
public CopyVideoUrlButton(ViewGroup viewGroup) {
|
||||
super(
|
||||
viewGroup,
|
||||
"revanced_copy_video_url_button",
|
||||
Settings.COPY_VIDEO_URL,
|
||||
view -> CopyVideoUrlPatch.copyUrl(false),
|
||||
view -> {
|
||||
CopyVideoUrlPatch.copyUrl(true);
|
||||
return true;
|
||||
}
|
||||
);
|
||||
}
|
||||
private static PlayerControlButton instance;
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static void initializeButton(View view) {
|
||||
public static void initializeButton(View controlsView) {
|
||||
try {
|
||||
instance = new CopyVideoUrlButton((ViewGroup) view);
|
||||
instance = new PlayerControlButton(
|
||||
controlsView,
|
||||
"revanced_copy_video_url_button",
|
||||
"revanced_copy_video_url_button_placeholder",
|
||||
Settings.COPY_VIDEO_URL::get,
|
||||
view -> CopyVideoUrlPatch.copyUrl(false),
|
||||
view -> {
|
||||
CopyVideoUrlPatch.copyUrl(true);
|
||||
return true;
|
||||
}
|
||||
);
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "initializeButton failure", ex);
|
||||
}
|
||||
@@ -41,14 +38,14 @@ public class CopyVideoUrlButton extends PlayerControlButton {
|
||||
/**
|
||||
* injection point
|
||||
*/
|
||||
public static void changeVisibilityImmediate(boolean visible) {
|
||||
public static void setVisibilityImmediate(boolean visible) {
|
||||
if (instance != null) instance.setVisibilityImmediate(visible);
|
||||
}
|
||||
|
||||
/**
|
||||
* injection point
|
||||
*/
|
||||
public static void changeVisibility(boolean visible, boolean animated) {
|
||||
public static void setVisibility(boolean visible, boolean animated) {
|
||||
if (instance != null) instance.setVisibility(visible, animated);
|
||||
}
|
||||
}
|
||||
@@ -1,38 +1,35 @@
|
||||
package app.revanced.extension.youtube.videoplayer;
|
||||
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.youtube.patches.CopyVideoUrlPatch;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.youtube.shared.PlayerType;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class CopyVideoUrlTimestampButton extends PlayerControlButton {
|
||||
public class CopyVideoUrlTimestampButton {
|
||||
@Nullable
|
||||
private static CopyVideoUrlTimestampButton instance;
|
||||
|
||||
public CopyVideoUrlTimestampButton(ViewGroup bottomControlsViewGroup) {
|
||||
super(
|
||||
bottomControlsViewGroup,
|
||||
"revanced_copy_video_url_timestamp_button",
|
||||
Settings.COPY_VIDEO_URL_TIMESTAMP,
|
||||
view -> CopyVideoUrlPatch.copyUrl(true),
|
||||
view -> {
|
||||
CopyVideoUrlPatch.copyUrl(false);
|
||||
return true;
|
||||
}
|
||||
);
|
||||
}
|
||||
private static PlayerControlButton instance;
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static void initializeButton(View bottomControlsViewGroup) {
|
||||
public static void initializeButton(View controlsView) {
|
||||
try {
|
||||
instance = new CopyVideoUrlTimestampButton((ViewGroup) bottomControlsViewGroup);
|
||||
instance = new PlayerControlButton(
|
||||
controlsView,
|
||||
"revanced_copy_video_url_timestamp_button",
|
||||
"revanced_copy_video_url_timestamp_button_placeholder",
|
||||
Settings.COPY_VIDEO_URL_TIMESTAMP::get,
|
||||
view -> CopyVideoUrlPatch.copyUrl(true),
|
||||
view -> {
|
||||
CopyVideoUrlPatch.copyUrl(false);
|
||||
return true;
|
||||
}
|
||||
);
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "initializeButton failure", ex);
|
||||
}
|
||||
@@ -41,14 +38,14 @@ public class CopyVideoUrlTimestampButton extends PlayerControlButton {
|
||||
/**
|
||||
* injection point
|
||||
*/
|
||||
public static void changeVisibilityImmediate(boolean visible) {
|
||||
public static void setVisibilityImmediate(boolean visible) {
|
||||
if (instance != null) instance.setVisibilityImmediate(visible);
|
||||
}
|
||||
|
||||
/**
|
||||
* injection point
|
||||
*/
|
||||
public static void changeVisibility(boolean visible, boolean animated) {
|
||||
public static void setVisibility(boolean visible, boolean animated) {
|
||||
if (instance != null) instance.setVisibility(visible, animated);
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
package app.revanced.extension.youtube.videoplayer;
|
||||
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
@@ -11,26 +10,23 @@ import app.revanced.extension.youtube.patches.VideoInformation;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class ExternalDownloadButton extends PlayerControlButton {
|
||||
public class ExternalDownloadButton {
|
||||
@Nullable
|
||||
private static ExternalDownloadButton instance;
|
||||
|
||||
public ExternalDownloadButton(ViewGroup viewGroup) {
|
||||
super(
|
||||
viewGroup,
|
||||
"revanced_external_download_button",
|
||||
Settings.EXTERNAL_DOWNLOADER,
|
||||
ExternalDownloadButton::onDownloadClick,
|
||||
null
|
||||
);
|
||||
}
|
||||
private static PlayerControlButton instance;
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static void initializeButton(View view) {
|
||||
public static void initializeButton(View controlsView) {
|
||||
try {
|
||||
instance = new ExternalDownloadButton((ViewGroup) view);
|
||||
instance = new PlayerControlButton(
|
||||
controlsView,
|
||||
"revanced_external_download_button",
|
||||
"revanced_external_download_button_placeholder",
|
||||
Settings.EXTERNAL_DOWNLOADER::get,
|
||||
ExternalDownloadButton::onDownloadClick,
|
||||
null
|
||||
);
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "initializeButton failure", ex);
|
||||
}
|
||||
@@ -39,14 +35,14 @@ public class ExternalDownloadButton extends PlayerControlButton {
|
||||
/**
|
||||
* injection point
|
||||
*/
|
||||
public static void changeVisibilityImmediate(boolean visible) {
|
||||
public static void setVisibilityImmediate(boolean visible) {
|
||||
if (instance != null) instance.setVisibilityImmediate(visible);
|
||||
}
|
||||
|
||||
/**
|
||||
* injection point
|
||||
* Injection point
|
||||
*/
|
||||
public static void changeVisibility(boolean visible, boolean animated) {
|
||||
public static void setVisibility(boolean visible, boolean animated) {
|
||||
if (instance != null) instance.setVisibility(visible, animated);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,35 +1,31 @@
|
||||
package app.revanced.extension.youtube.videoplayer;
|
||||
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.youtube.patches.playback.speed.CustomPlaybackSpeedPatch;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.shared.Logger;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class PlaybackSpeedDialogButton extends PlayerControlButton {
|
||||
public class PlaybackSpeedDialogButton {
|
||||
@Nullable
|
||||
private static PlaybackSpeedDialogButton instance;
|
||||
|
||||
public PlaybackSpeedDialogButton(ViewGroup viewGroup) {
|
||||
super(
|
||||
viewGroup,
|
||||
"revanced_playback_speed_dialog_button",
|
||||
Settings.PLAYBACK_SPEED_DIALOG_BUTTON,
|
||||
view -> CustomPlaybackSpeedPatch.showOldPlaybackSpeedMenu(),
|
||||
null
|
||||
);
|
||||
}
|
||||
private static PlayerControlButton instance;
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static void initializeButton(View view) {
|
||||
public static void initializeButton(View controlsView) {
|
||||
try {
|
||||
instance = new PlaybackSpeedDialogButton((ViewGroup) view);
|
||||
instance = new PlayerControlButton(
|
||||
controlsView,
|
||||
"revanced_playback_speed_dialog_button",
|
||||
"revanced_playback_speed_dialog_button_placeholder",
|
||||
Settings.PLAYBACK_SPEED_DIALOG_BUTTON::get,
|
||||
view -> CustomPlaybackSpeedPatch.showOldPlaybackSpeedMenu(),
|
||||
null
|
||||
);
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "initializeButton failure", ex);
|
||||
}
|
||||
@@ -38,14 +34,14 @@ public class PlaybackSpeedDialogButton extends PlayerControlButton {
|
||||
/**
|
||||
* injection point
|
||||
*/
|
||||
public static void changeVisibilityImmediate(boolean visible) {
|
||||
public static void setVisibilityImmediate(boolean visible) {
|
||||
if (instance != null) instance.setVisibilityImmediate(visible);
|
||||
}
|
||||
|
||||
/**
|
||||
* injection point
|
||||
*/
|
||||
public static void changeVisibility(boolean visible, boolean animated) {
|
||||
public static void setVisibility(boolean visible, boolean animated) {
|
||||
if (instance != null) instance.setVisibility(visible, animated);
|
||||
}
|
||||
}
|
||||
@@ -1,73 +1,92 @@
|
||||
package app.revanced.extension.youtube.videoplayer;
|
||||
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.animation.Animation;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Objects;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.settings.BooleanSetting;
|
||||
import app.revanced.extension.youtube.shared.PlayerType;
|
||||
import kotlin.Unit;
|
||||
|
||||
public abstract class PlayerControlButton {
|
||||
private static final Animation fadeIn;
|
||||
private static final Animation fadeOut;
|
||||
public class PlayerControlButton {
|
||||
public interface PlayerControlButtonVisibility {
|
||||
/**
|
||||
* @return If the button should be shown when the player overlay is visible.
|
||||
*/
|
||||
boolean shouldBeShown();
|
||||
}
|
||||
|
||||
private static final int fadeInDuration;
|
||||
private static final int fadeOutDuration;
|
||||
|
||||
private static final Animation fadeInAnimation;
|
||||
private static final Animation fadeOutAnimation;
|
||||
private static final Animation fadeOutImmediate;
|
||||
|
||||
private final WeakReference<ImageView> buttonRef;
|
||||
protected final BooleanSetting setting;
|
||||
protected boolean isVisible;
|
||||
|
||||
static {
|
||||
// TODO: check if these durations are correct.
|
||||
fadeIn = Utils.getResourceAnimation("fade_in");
|
||||
fadeIn.setDuration(Utils.getResourceInteger("fade_duration_fast"));
|
||||
fadeInDuration = Utils.getResourceInteger("fade_duration_fast");
|
||||
fadeOutDuration = Utils.getResourceInteger("fade_duration_scheduled");
|
||||
|
||||
fadeOut = Utils.getResourceAnimation("fade_out");
|
||||
fadeOut.setDuration(Utils.getResourceInteger("fade_duration_scheduled"));
|
||||
fadeInAnimation = Utils.getResourceAnimation("fade_in");
|
||||
fadeInAnimation.setDuration(fadeInDuration);
|
||||
|
||||
fadeOutAnimation = Utils.getResourceAnimation("fade_out");
|
||||
fadeOutAnimation.setDuration(fadeOutDuration);
|
||||
|
||||
// Animation for the fast fade out after tapping the overlay.
|
||||
// Currently not used but should be.
|
||||
fadeOutImmediate = Utils.getResourceAnimation("abc_fade_out");
|
||||
fadeOutImmediate.setDuration(Utils.getResourceInteger("fade_duration_fast"));
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static Animation getButtonFadeIn() {
|
||||
return fadeIn;
|
||||
}
|
||||
private final WeakReference<View> buttonRef;
|
||||
/**
|
||||
* Empty view with the same layout size as the button. Used to fill empty space while the
|
||||
* fade out animation runs. Without this the chapter titles overlapping the button when fading out.
|
||||
*/
|
||||
private final WeakReference<View> placeHolderRef;
|
||||
private final PlayerControlButtonVisibility visibilityCheck;
|
||||
private boolean isVisible;
|
||||
|
||||
@NonNull
|
||||
public static Animation getButtonFadeOut() {
|
||||
return fadeOut;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static Animation getButtonFadeOutImmediately() {
|
||||
return fadeOutImmediate;
|
||||
}
|
||||
|
||||
public PlayerControlButton(@NonNull ViewGroup bottomControlsViewGroup, @NonNull String imageViewButtonId,
|
||||
@NonNull BooleanSetting booleanSetting, @NonNull View.OnClickListener onClickListener,
|
||||
public PlayerControlButton(View controlsViewGroup,
|
||||
String imageViewButtonId,
|
||||
@Nullable String placeholderId,
|
||||
PlayerControlButtonVisibility buttonVisibility,
|
||||
View.OnClickListener onClickListener,
|
||||
@Nullable View.OnLongClickListener longClickListener) {
|
||||
Logger.printDebug(() -> "Initializing button: " + imageViewButtonId);
|
||||
|
||||
ImageView imageView = Objects.requireNonNull(bottomControlsViewGroup.findViewById(
|
||||
Utils.getResourceIdentifier(imageViewButtonId, "id")
|
||||
));
|
||||
ImageView imageView = Utils.getChildViewByResourceName(controlsViewGroup, imageViewButtonId);
|
||||
imageView.setVisibility(View.GONE);
|
||||
|
||||
View tempPlaceholder = null;
|
||||
if (placeholderId != null) {
|
||||
tempPlaceholder = Utils.getChildViewByResourceName(controlsViewGroup, placeholderId);
|
||||
tempPlaceholder.setVisibility(View.GONE);
|
||||
}
|
||||
placeHolderRef = new WeakReference<>(tempPlaceholder);
|
||||
|
||||
imageView.setOnClickListener(onClickListener);
|
||||
if (longClickListener != null) {
|
||||
imageView.setOnLongClickListener(longClickListener);
|
||||
}
|
||||
|
||||
setting = booleanSetting;
|
||||
visibilityCheck = buttonVisibility;
|
||||
buttonRef = new WeakReference<>(imageView);
|
||||
isVisible = false;
|
||||
|
||||
// Update the visibility after the player type changes.
|
||||
// This ensures that button animations are cleared and their states are updated correctly
|
||||
// when switching between states like minimized, maximized, or fullscreen, preventing
|
||||
// "stuck" animations or incorrect visibility. Without this fix the issue is most noticable
|
||||
// when maximizing type 3 miniplayer.
|
||||
PlayerType.getOnChange().addObserver((PlayerType type) -> {
|
||||
playerTypeChanged(type);
|
||||
return Unit.INSTANCE;
|
||||
});
|
||||
}
|
||||
|
||||
public void setVisibilityImmediate(boolean visible) {
|
||||
@@ -92,26 +111,80 @@ public abstract class PlayerControlButton {
|
||||
if (isVisible == visible) return;
|
||||
isVisible = visible;
|
||||
|
||||
ImageView iView = buttonRef.get();
|
||||
if (iView == null) {
|
||||
return;
|
||||
}
|
||||
View button = buttonRef.get();
|
||||
if (button == null) return;
|
||||
|
||||
if (visible && setting.get()) {
|
||||
iView.clearAnimation();
|
||||
View placeholder = placeHolderRef.get();
|
||||
final boolean shouldBeShown = visibilityCheck.shouldBeShown();
|
||||
|
||||
if (visible && shouldBeShown) {
|
||||
button.clearAnimation();
|
||||
if (animated) {
|
||||
iView.startAnimation(PlayerControlButton.getButtonFadeIn());
|
||||
button.startAnimation(PlayerControlButton.fadeInAnimation);
|
||||
}
|
||||
iView.setVisibility(View.VISIBLE);
|
||||
} else if (iView.getVisibility() == View.VISIBLE) {
|
||||
iView.clearAnimation();
|
||||
if (animated) {
|
||||
iView.startAnimation(PlayerControlButton.getButtonFadeOut());
|
||||
button.setVisibility(View.VISIBLE);
|
||||
|
||||
if (placeholder != null) {
|
||||
placeholder.setVisibility(View.GONE);
|
||||
}
|
||||
} else {
|
||||
if (button.getVisibility() == View.VISIBLE) {
|
||||
button.clearAnimation();
|
||||
if (animated) {
|
||||
button.startAnimation(PlayerControlButton.fadeOutAnimation);
|
||||
}
|
||||
button.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
if (placeholder != null) {
|
||||
placeholder.setVisibility(shouldBeShown
|
||||
? View.VISIBLE
|
||||
: View.GONE);
|
||||
}
|
||||
iView.setVisibility(View.GONE);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "setVisibility failure", ex);
|
||||
Logger.printException(() -> "private_setVisibility failure", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Synchronizes the button state after the player state changes.
|
||||
*/
|
||||
private void playerTypeChanged(PlayerType newType) {
|
||||
if (newType != PlayerType.WATCH_WHILE_MINIMIZED && !newType.isMaximizedOrFullscreen()) {
|
||||
return;
|
||||
}
|
||||
|
||||
View button = buttonRef.get();
|
||||
if (button == null) return;
|
||||
|
||||
button.clearAnimation();
|
||||
View placeholder = placeHolderRef.get();
|
||||
|
||||
if (visibilityCheck.shouldBeShown()) {
|
||||
if (isVisible) {
|
||||
button.setVisibility(View.VISIBLE);
|
||||
if (placeholder != null) placeholder.setVisibility(View.GONE);
|
||||
} else {
|
||||
button.setVisibility(View.GONE);
|
||||
if (placeholder != null) placeholder.setVisibility(View.VISIBLE);
|
||||
}
|
||||
} else {
|
||||
button.setVisibility(View.GONE);
|
||||
if (placeholder != null) placeholder.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
public void hide() {
|
||||
if (!isVisible) return;
|
||||
|
||||
Utils.verifyOnMainThread();
|
||||
View view = buttonRef.get();
|
||||
if (view == null) return;
|
||||
view.setVisibility(View.GONE);
|
||||
|
||||
view = placeHolderRef.get();
|
||||
if (view != null) view.setVisibility(View.GONE);
|
||||
isVisible = false;
|
||||
}
|
||||
}
|
||||
@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
|
||||
org.gradle.parallel = true
|
||||
android.useAndroidX = true
|
||||
kotlin.code.style = official
|
||||
version = 5.12.0-dev.5
|
||||
version = 5.13.0-dev.17
|
||||
|
||||
@@ -348,6 +348,14 @@ public final class app/revanced/patches/nfctoolsse/misc/pro/UnlockProPatchKt {
|
||||
public static final fun getUnlockProPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/nunl/ads/HideAdsPatchKt {
|
||||
public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/nunl/firebase/SpoofCertificatePatchKt {
|
||||
public static final fun getSpoofCertificatePatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/nyx/misc/pro/UnlockProPatchKt {
|
||||
public static final fun getUnlockProPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -1116,6 +1124,10 @@ public final class app/revanced/patches/youtube/layout/hide/endscreencards/HideE
|
||||
public static final fun getHideEndscreenCardsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/youtube/layout/hide/endscreensuggestion/HideEndScreenSuggestedVideoPatchKt {
|
||||
public static final fun getHideEndScreenSuggestedVideoPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/youtube/layout/hide/fullscreenambientmode/DisableFullscreenAmbientModePatchKt {
|
||||
public static final fun getDisableFullscreenAmbientModePatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ val hideVideoAdsPatch = bytecodePatch(
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.16.53",
|
||||
"8.05.50"
|
||||
"8.05.51"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ val enableExclusiveAudioPlaybackPatch = bytecodePatch(
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.16.53",
|
||||
"8.05.50"
|
||||
"8.05.51"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ val permanentRepeatPatch = bytecodePatch(
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.16.53",
|
||||
"8.05.50"
|
||||
"8.05.51"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ val hideCategoryBar = bytecodePatch(
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.16.53",
|
||||
"8.05.50"
|
||||
"8.05.51"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ val hideGetPremiumPatch = bytecodePatch(
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.16.53",
|
||||
"8.05.50"
|
||||
"8.05.51"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ val removeUpgradeButtonPatch = bytecodePatch(
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.16.53",
|
||||
"8.05.50"
|
||||
"8.05.51"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ val bypassCertificateChecksPatch = bytecodePatch(
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.16.53",
|
||||
"8.05.50"
|
||||
"8.05.51"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ val backgroundPlaybackPatch = bytecodePatch(
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.16.53",
|
||||
"8.05.50"
|
||||
"8.05.51"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ val spoofClientPatch = bytecodePatch(
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.16.53",
|
||||
"8.05.50"
|
||||
"8.05.51"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
package app.revanced.patches.nunl.ads
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val jwUtilCreateAdvertisementFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.STATIC)
|
||||
custom { methodDef, classDef ->
|
||||
classDef.type == "Lnl/sanomamedia/android/nu/video/util/JWUtil;" && methodDef.name == "createAdvertising"
|
||||
}
|
||||
}
|
||||
|
||||
internal val screenMapperFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Lnl/nu/android/bff/domain/models/screen/ScreenEntity;")
|
||||
parameters("Lnl/nu/performance/api/client/objects/Screen;")
|
||||
|
||||
opcodes(
|
||||
Opcode.MOVE_RESULT_OBJECT,
|
||||
Opcode.IF_EQZ,
|
||||
Opcode.CHECK_CAST
|
||||
)
|
||||
|
||||
custom { methodDef, classDef ->
|
||||
classDef.type == "Lnl/nu/android/bff/data/mappers/ScreenMapper;" && methodDef.name == "map"
|
||||
}
|
||||
}
|
||||
|
||||
internal val nextPageRepositoryImplFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
|
||||
returns("Lnl/nu/android/bff/domain/models/Page;")
|
||||
parameters("Lnl/nu/performance/api/client/PacResponse;", "Ljava/lang/String;")
|
||||
|
||||
opcodes(
|
||||
Opcode.MOVE_RESULT_OBJECT,
|
||||
Opcode.IF_EQZ,
|
||||
Opcode.CHECK_CAST
|
||||
)
|
||||
|
||||
custom { methodDef, classDef ->
|
||||
classDef.type == "Lnl/nu/android/bff/data/repositories/NextPageRepositoryImpl;" && methodDef.name == "mapToPage"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package app.revanced.patches.nunl.ads
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.shared.misc.extension.sharedExtensionPatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@Suppress("unused")
|
||||
val hideAdsPatch = bytecodePatch(
|
||||
name = "Hide ads",
|
||||
description = "Hide ads and sponsored articles in list pages and remove pre-roll ads on videos.",
|
||||
) {
|
||||
compatibleWith("nl.sanomamedia.android.nu"("11.0.0", "11.0.1", "11.1.0"))
|
||||
|
||||
dependsOn(sharedExtensionPatch("nunl", mainActivityOnCreateHook))
|
||||
|
||||
execute {
|
||||
// Disable video pre-roll ads.
|
||||
// Whenever the app tries to create an ad via JWUtils.createAdvertising, don't actually tell the underlying JWPlayer library to do so => JWPlayer will not display ads.
|
||||
jwUtilCreateAdvertisementFingerprint.method.addInstructions(
|
||||
0,
|
||||
"""
|
||||
new-instance v0, Lcom/jwplayer/pub/api/configuration/ads/VastAdvertisingConfig${'$'}Builder;
|
||||
invoke-direct { v0 }, Lcom/jwplayer/pub/api/configuration/ads/VastAdvertisingConfig${'$'}Builder;-><init>()V
|
||||
invoke-virtual { v0 }, Lcom/jwplayer/pub/api/configuration/ads/VastAdvertisingConfig${'$'}Builder;->build()Lcom/jwplayer/pub/api/configuration/ads/VastAdvertisingConfig;
|
||||
move-result-object v0
|
||||
return-object v0
|
||||
""",
|
||||
)
|
||||
|
||||
// Filter injected content from API calls out of lists.
|
||||
arrayOf(screenMapperFingerprint, nextPageRepositoryImplFingerprint).forEach {
|
||||
// Index of instruction moving result of BlockPage;->getBlocks(...).
|
||||
val moveGetBlocksResultObjectIndex = it.patternMatch!!.startIndex
|
||||
it.method.apply {
|
||||
val moveInstruction = getInstruction<OneRegisterInstruction>(moveGetBlocksResultObjectIndex)
|
||||
|
||||
val listRegister = moveInstruction.registerA
|
||||
|
||||
// Add instruction after moving List<Block> to register and then filter this List<Block> in place.
|
||||
addInstructions(
|
||||
moveGetBlocksResultObjectIndex + 1,
|
||||
"""
|
||||
invoke-static { v$listRegister }, Lapp/revanced/extension/nunl/ads/HideAdsPatch;->filterAds(Ljava/util/List;)V
|
||||
""",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package app.revanced.patches.nunl.ads
|
||||
|
||||
import app.revanced.patches.shared.misc.extension.extensionHook
|
||||
|
||||
internal val mainActivityOnCreateHook = extensionHook {
|
||||
custom { method, classDef ->
|
||||
classDef.type == "Lnl/sanomamedia/android/nu/main/NUMainActivity;" && method.name == "onCreate"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package app.revanced.patches.nunl.firebase
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val getFingerprintHashForPackageFingerprints = arrayOf(
|
||||
"Lcom/google/firebase/installations/remote/FirebaseInstallationServiceClient;",
|
||||
"Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;",
|
||||
"Lcom/google/firebase/remoteconfig/internal/ConfigRealtimeHttpClient;"
|
||||
).map { className ->
|
||||
fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE)
|
||||
parameters()
|
||||
returns("Ljava/lang/String;")
|
||||
|
||||
custom { methodDef, classDef ->
|
||||
classDef.type == className && methodDef.name == "getFingerprintHashForPackage"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package app.revanced.patches.nunl.firebase
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val spoofCertificatePatch = bytecodePatch(
|
||||
name = "Spoof certificate",
|
||||
description = "Spoofs the X-Android-Cert header to allow push messages.",
|
||||
) {
|
||||
compatibleWith("nl.sanomamedia.android.nu")
|
||||
|
||||
execute {
|
||||
getFingerprintHashForPackageFingerprints.forEach { fingerprint ->
|
||||
fingerprint.method.addInstructions(
|
||||
0,
|
||||
"""
|
||||
const-string v0, "eae41fc018df2731a9b6ae1ac327da44a288667b"
|
||||
return-object v0
|
||||
""",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,4 +2,4 @@ package app.revanced.patches.tiktok.misc.extension
|
||||
|
||||
import app.revanced.patches.shared.misc.extension.sharedExtensionPatch
|
||||
|
||||
val sharedExtensionPatch = sharedExtensionPatch("tiktok", initHook)
|
||||
val sharedExtensionPatch = sharedExtensionPatch("tiktok", initHook, jatoInitHook, storeRegionInitHook)
|
||||
|
||||
@@ -3,12 +3,35 @@ package app.revanced.patches.tiktok.misc.extension
|
||||
import app.revanced.patches.shared.misc.extension.extensionHook
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val initHook = extensionHook(
|
||||
insertIndexResolver = { 1 }, // Insert after call to super class.
|
||||
) {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
||||
internal val initHook = extensionHook {
|
||||
custom { method, classDef ->
|
||||
classDef.endsWith("/AwemeHostApplication;") &&
|
||||
method.name == "<init>"
|
||||
classDef.type == "Lcom/ss/android/ugc/aweme/main/MainActivity;" &&
|
||||
method.name == "onCreate"
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* In some cases the extension code can be called before
|
||||
* the app main activity onCreate is called.
|
||||
*
|
||||
* This class is called from startup code titled "BPEA RunnableGuardLancet".
|
||||
*/
|
||||
internal val jatoInitHook = extensionHook(
|
||||
contextRegisterResolver = { "p1" }
|
||||
) {
|
||||
parameters("Landroid/content/Context;")
|
||||
custom { method, classDef ->
|
||||
classDef.type == "Lcom/ss/android/ugc/aweme/legoImp/task/JatoInitTask;" &&
|
||||
method.name == "run"
|
||||
}
|
||||
}
|
||||
|
||||
internal val storeRegionInitHook = extensionHook(
|
||||
contextRegisterResolver = { "p1" }
|
||||
) {
|
||||
parameters("Landroid/content/Context;")
|
||||
custom { method, classDef ->
|
||||
classDef.type == "Lcom/ss/android/ugc/aweme/legoImp/task/StoreRegionInitTask;" &&
|
||||
method.name == "run"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,9 +42,10 @@ private val swipeControlsResourcePatch = resourcePatch {
|
||||
SwitchPreference("revanced_swipe_haptic_feedback"),
|
||||
SwitchPreference("revanced_swipe_save_and_restore_brightness"),
|
||||
SwitchPreference("revanced_swipe_lowest_value_enable_auto_brightness"),
|
||||
TextPreference("revanced_swipe_overlay_timeout", inputType = InputType.NUMBER),
|
||||
TextPreference("revanced_swipe_text_overlay_size", inputType = InputType.NUMBER),
|
||||
SwitchPreference("revanced_swipe_show_circular_overlay"),
|
||||
SwitchPreference("revanced_swipe_overlay_minimal_style"),
|
||||
TextPreference("revanced_swipe_overlay_background_opacity", inputType = InputType.NUMBER),
|
||||
TextPreference("revanced_swipe_overlay_timeout", inputType = InputType.NUMBER),
|
||||
TextPreference("revanced_swipe_threshold", inputType = InputType.NUMBER),
|
||||
)
|
||||
|
||||
@@ -53,7 +54,12 @@ private val swipeControlsResourcePatch = resourcePatch {
|
||||
ResourceGroup(
|
||||
"drawable",
|
||||
"revanced_ic_sc_brightness_auto.xml",
|
||||
"revanced_ic_sc_brightness_manual.xml",
|
||||
"revanced_ic_sc_brightness_full.xml",
|
||||
"revanced_ic_sc_brightness_high.xml",
|
||||
"revanced_ic_sc_brightness_low.xml",
|
||||
"revanced_ic_sc_brightness_medium.xml",
|
||||
"revanced_ic_sc_volume_high.xml",
|
||||
"revanced_ic_sc_volume_low.xml",
|
||||
"revanced_ic_sc_volume_mute.xml",
|
||||
"revanced_ic_sc_volume_normal.xml",
|
||||
),
|
||||
|
||||
@@ -39,6 +39,7 @@ val hideButtonsPatch = resourcePatch(
|
||||
PreferenceScreenPreference(
|
||||
"revanced_hide_buttons_screen",
|
||||
preferences = setOf(
|
||||
SwitchPreference("revanced_disable_like_subscribe_glow"),
|
||||
SwitchPreference("revanced_hide_like_dislike_button"),
|
||||
SwitchPreference("revanced_hide_share_button"),
|
||||
SwitchPreference("revanced_hide_report_button"),
|
||||
|
||||
@@ -58,6 +58,7 @@ val navigationButtonsPatch = bytecodePatch(
|
||||
SwitchPreference("revanced_hide_shorts_button"),
|
||||
SwitchPreference("revanced_hide_create_button"),
|
||||
SwitchPreference("revanced_hide_subscriptions_button"),
|
||||
SwitchPreference("revanced_hide_notifications_button"),
|
||||
SwitchPreference("revanced_switch_create_with_notifications_button"),
|
||||
SwitchPreference("revanced_hide_navigation_button_labels"),
|
||||
)
|
||||
|
||||
@@ -44,6 +44,9 @@ private val hideEndscreenCardsResourcePatch = resourcePatch {
|
||||
}
|
||||
}
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/HideEndscreenCardsPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val hideEndscreenCardsPatch = bytecodePatch(
|
||||
name = "Hide endscreen cards",
|
||||
@@ -78,9 +81,7 @@ val hideEndscreenCardsPatch = bytecodePatch(
|
||||
|
||||
addInstruction(
|
||||
insertIndex,
|
||||
"invoke-static { v$viewRegister }, " +
|
||||
"Lapp/revanced/extension/youtube/patches/HideEndscreenCardsPatch;->" +
|
||||
"hideEndscreen(Landroid/view/View;)V",
|
||||
"invoke-static { v$viewRegister }, $EXTENSION_CLASS_DESCRIPTOR->hideEndscreen(Landroid/view/View;)V",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package app.revanced.patches.youtube.layout.hide.endscreensuggestion
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstruction
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
internal val autoNavConstructorFingerprint = fingerprint {
|
||||
returns("V")
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
||||
strings("main_app_autonav")
|
||||
}
|
||||
|
||||
internal val autoNavStatusFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Z")
|
||||
parameters()
|
||||
}
|
||||
|
||||
internal val removeOnLayoutChangeListenerFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
parameters()
|
||||
opcodes(
|
||||
Opcode.IPUT,
|
||||
Opcode.INVOKE_VIRTUAL
|
||||
)
|
||||
// This is the only reference present in the entire smali.
|
||||
custom { method, _ ->
|
||||
method.indexOfFirstInstruction {
|
||||
val reference = getReference<MethodReference>()
|
||||
reference?.name == "removeOnLayoutChangeListener" &&
|
||||
reference.definingClass.endsWith("/YouTubePlayerOverlaysLayout;")
|
||||
} >= 0
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package app.revanced.patches.youtube.layout.hide.endscreensuggestion
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.util.smali.ExternalLabel
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.indexOfFirstInstructionReversedOrThrow
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/HideEndScreenSuggestedVideoPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val hideEndScreenSuggestedVideoPatch = bytecodePatch(
|
||||
name = "Hide end screen suggested video",
|
||||
description = "Adds an option to hide the recommended video at the end of each video.",
|
||||
) {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
addResourcesPatch,
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"19.16.39",
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
"19.46.42",
|
||||
"19.47.53",
|
||||
),
|
||||
)
|
||||
|
||||
execute {
|
||||
addResources("youtube", "layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch")
|
||||
|
||||
PreferenceScreen.PLAYER.addPreferences(
|
||||
SwitchPreference("revanced_end_screen_suggested_video"),
|
||||
)
|
||||
|
||||
removeOnLayoutChangeListenerFingerprint.let {
|
||||
val endScreenMethod = navigate(it.originalMethod).to(it.patternMatch!!.endIndex).stop()
|
||||
|
||||
endScreenMethod.apply {
|
||||
val autoNavStatusMethodName = autoNavStatusFingerprint.match(
|
||||
autoNavConstructorFingerprint.classDef
|
||||
).originalMethod.name
|
||||
|
||||
val invokeIndex = indexOfFirstInstructionOrThrow {
|
||||
val reference = getReference<MethodReference>()
|
||||
reference?.name == autoNavStatusMethodName &&
|
||||
reference.returnType == "Z" &&
|
||||
reference.parameterTypes.isEmpty()
|
||||
}
|
||||
val iGetObjectIndex = indexOfFirstInstructionReversedOrThrow(invokeIndex, Opcode.IGET_OBJECT)
|
||||
val invokeReference = getInstruction<ReferenceInstruction>(invokeIndex).reference
|
||||
val iGetObjectReference = getInstruction<ReferenceInstruction>(iGetObjectIndex).reference
|
||||
val opcodeName = getInstruction(invokeIndex).opcode.name
|
||||
|
||||
addInstructionsWithLabels(
|
||||
0,
|
||||
"""
|
||||
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->hideEndScreenSuggestedVideo()Z
|
||||
move-result v0
|
||||
if-eqz v0, :show_end_screen_recommendation
|
||||
|
||||
iget-object v0, p0, $iGetObjectReference
|
||||
|
||||
# This reference checks whether autoplay is turned on.
|
||||
$opcodeName { v0 }, $invokeReference
|
||||
move-result v0
|
||||
|
||||
# Hide suggested video end screen only when autoplay is turned off.
|
||||
if-nez v0, :show_end_screen_recommendation
|
||||
return-void
|
||||
""",
|
||||
ExternalLabel("show_end_screen_recommendation", getInstruction(0))
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -172,7 +172,6 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
||||
SwitchPreference("revanced_hide_emergency_box"),
|
||||
SwitchPreference("revanced_hide_info_panels"),
|
||||
SwitchPreference("revanced_hide_join_membership_button"),
|
||||
SwitchPreference("revanced_disable_like_subscribe_glow"),
|
||||
SwitchPreference("revanced_hide_medical_panels"),
|
||||
SwitchPreference("revanced_hide_quick_actions"),
|
||||
SwitchPreference("revanced_hide_related_videos"),
|
||||
|
||||
@@ -1,79 +1,9 @@
|
||||
package app.revanced.patches.youtube.layout.hide.suggestedvideoendscreen
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.misc.mapping.get
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import app.revanced.patches.youtube.layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch
|
||||
|
||||
internal var sizeAdjustableLiteAutoNavOverlay = -1L
|
||||
private set
|
||||
|
||||
internal val disableSuggestedVideoEndScreenResourcePatch = resourcePatch {
|
||||
dependsOn(
|
||||
settingsPatch,
|
||||
resourceMappingPatch,
|
||||
addResourcesPatch,
|
||||
)
|
||||
|
||||
execute {
|
||||
addResources("youtube", "layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch")
|
||||
|
||||
PreferenceScreen.PLAYER.addPreferences(
|
||||
SwitchPreference("revanced_disable_suggested_video_end_screen"),
|
||||
)
|
||||
|
||||
sizeAdjustableLiteAutoNavOverlay = resourceMappings[
|
||||
"layout",
|
||||
"size_adjustable_lite_autonav_overlay",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/DisableSuggestedVideoEndScreenPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val disableSuggestedVideoEndScreenPatch = bytecodePatch(
|
||||
name = "Disable suggested video end screen",
|
||||
description = "Adds an option to disable the suggested video end screen at the end of videos.",
|
||||
) {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
disableSuggestedVideoEndScreenResourcePatch,
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"19.16.39",
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
"19.46.42",
|
||||
"19.47.53",
|
||||
),
|
||||
)
|
||||
|
||||
execute {
|
||||
createEndScreenViewFingerprint.method.apply {
|
||||
val addOnClickEventListenerIndex = createEndScreenViewFingerprint.patternMatch!!.endIndex - 1
|
||||
val viewRegister = getInstruction<FiveRegisterInstruction>(addOnClickEventListenerIndex).registerC
|
||||
|
||||
addInstruction(
|
||||
addOnClickEventListenerIndex + 1,
|
||||
"invoke-static {v$viewRegister}, " +
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->closeEndScreen(Landroid/widget/ImageView;)V",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@Deprecated("Use 'Hide suggested video end screen' instead.")
|
||||
val disableSuggestedVideoEndScreenPatch = bytecodePatch {
|
||||
dependsOn(hideEndScreenSuggestedVideoPatch)
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
package app.revanced.patches.youtube.layout.hide.suggestedvideoendscreen
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.util.literal
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val createEndScreenViewFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Landroid/view/View;")
|
||||
parameters("Landroid/content/Context;")
|
||||
opcodes(
|
||||
Opcode.INVOKE_DIRECT,
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.CONST,
|
||||
)
|
||||
literal { sizeAdjustableLiteAutoNavOverlay }
|
||||
}
|
||||
@@ -82,9 +82,9 @@ private val sponsorBlockResourcePatch = resourcePatch {
|
||||
private const val EXTENSION_SEGMENT_PLAYBACK_CONTROLLER_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/sponsorblock/SegmentPlaybackController;"
|
||||
private const val EXTENSION_CREATE_SEGMENT_BUTTON_CONTROLLER_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/sponsorblock/ui/CreateSegmentButtonController;"
|
||||
"Lapp/revanced/extension/youtube/sponsorblock/ui/CreateSegmentButton;"
|
||||
private const val EXTENSION_VOTING_BUTTON_CONTROLLER_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/sponsorblock/ui/VotingButtonController;"
|
||||
"Lapp/revanced/extension/youtube/sponsorblock/ui/VotingButton;"
|
||||
private const val EXTENSION_SPONSORBLOCK_VIEW_CONTROLLER_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/sponsorblock/ui/SponsorBlockViewController;"
|
||||
|
||||
|
||||
@@ -1,8 +1,29 @@
|
||||
package app.revanced.patches.youtube.layout.spoofappversion
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.util.containsLiteralInstruction
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstruction
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.Method
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
internal val toolBarButtonFingerprint = fingerprint {
|
||||
returns("V")
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
parameters("Landroid/view/MenuItem;")
|
||||
custom { method, _ ->
|
||||
method.containsLiteralInstruction(menuItemView) &&
|
||||
indexOfGetDrawableInstruction(method) >= 0
|
||||
}
|
||||
}
|
||||
|
||||
internal fun indexOfGetDrawableInstruction(method: Method) = method.indexOfFirstInstruction {
|
||||
val reference = getReference<MethodReference>()
|
||||
reference?.definingClass == "Landroid/content/res/Resources;" &&
|
||||
reference.name == "getDrawable"
|
||||
}
|
||||
|
||||
internal val spoofAppVersionFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
||||
|
||||
@@ -1,10 +1,16 @@
|
||||
package app.revanced.patches.youtube.layout.spoofappversion
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.util.smali.ExternalLabel
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.misc.mapping.get
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
||||
import app.revanced.patches.shared.misc.settings.preference.ListPreference
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
@@ -12,7 +18,25 @@ import app.revanced.patches.youtube.misc.playservice.is_19_17_or_greater
|
||||
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.indexOfFirstInstructionReversedOrThrow
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
internal var menuItemView = -1L
|
||||
private set
|
||||
|
||||
internal val spoofAppVersionResourcePatch = resourcePatch {
|
||||
dependsOn(
|
||||
resourceMappingPatch
|
||||
)
|
||||
|
||||
execute {
|
||||
menuItemView = resourceMappings["id", "menu_item_view"]
|
||||
}
|
||||
}
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/spoof/SpoofAppVersionPatch;"
|
||||
@@ -24,6 +48,7 @@ val spoofAppVersionPatch = bytecodePatch(
|
||||
"Patching 19.16.39 includes additional older spoofing targets.",
|
||||
) {
|
||||
dependsOn(
|
||||
spoofAppVersionResourcePatch,
|
||||
sharedExtensionPatch,
|
||||
settingsPatch,
|
||||
addResourcesPatch,
|
||||
@@ -62,6 +87,32 @@ val spoofAppVersionPatch = bytecodePatch(
|
||||
}
|
||||
)
|
||||
|
||||
/**
|
||||
* If a user really wants to spoof to very old versions with the latest app target
|
||||
* they can modify the import/export spoof version. But when spoofing the 19.20.xx
|
||||
* or earlier the Library tab can crash due to missing image resources trying to load.
|
||||
* As a temporary workaround, do not set an image in the toolbar when the enum name is UNKNOWN.
|
||||
*/
|
||||
toolBarButtonFingerprint.method.apply {
|
||||
val getDrawableIndex = indexOfGetDrawableInstruction(this)
|
||||
val enumOrdinalIndex = indexOfFirstInstructionReversedOrThrow(getDrawableIndex) {
|
||||
opcode == Opcode.INVOKE_INTERFACE &&
|
||||
getReference<MethodReference>()?.returnType == "I"
|
||||
}
|
||||
val insertIndex = enumOrdinalIndex + 2
|
||||
val insertRegister = getInstruction<OneRegisterInstruction>(insertIndex - 1).registerA
|
||||
val jumpIndex = indexOfFirstInstructionOrThrow(insertIndex) {
|
||||
opcode == Opcode.INVOKE_VIRTUAL &&
|
||||
getReference<MethodReference>()?.name == "setImageDrawable"
|
||||
} + 1
|
||||
|
||||
addInstructionsWithLabels(
|
||||
insertIndex,
|
||||
"if-eqz v$insertRegister, :ignore",
|
||||
ExternalLabel("ignore", getInstruction(jumpIndex))
|
||||
)
|
||||
}
|
||||
|
||||
val insertIndex = spoofAppVersionFingerprint.patternMatch!!.startIndex + 1
|
||||
val buildOverrideNameRegister =
|
||||
spoofAppVersionFingerprint.method.getInstruction<OneRegisterInstruction>(insertIndex - 1).registerA
|
||||
@@ -71,7 +122,7 @@ val spoofAppVersionPatch = bytecodePatch(
|
||||
"""
|
||||
invoke-static {v$buildOverrideNameRegister}, $EXTENSION_CLASS_DESCRIPTOR->getYouTubeVersionOverride(Ljava/lang/String;)Ljava/lang/String;
|
||||
move-result-object v$buildOverrideNameRegister
|
||||
""",
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,12 +77,9 @@ val playerControlsResourcePatch = resourcePatch {
|
||||
).item(0)
|
||||
|
||||
val bottomTargetDocumentChildNodes = bottomTargetDocument.childNodes
|
||||
var bottomInsertBeforeNode: Node = bottomTargetDocumentChildNodes.findElementByAttributeValue(
|
||||
var bottomInsertBeforeNode: Node = bottomTargetDocumentChildNodes.findElementByAttributeValueOrThrow(
|
||||
"android:inflatedId",
|
||||
bottomLastLeftOf,
|
||||
) ?: bottomTargetDocumentChildNodes.findElementByAttributeValueOrThrow(
|
||||
"android:id", // Older targets use non-inflated id.
|
||||
bottomLastLeftOf,
|
||||
)
|
||||
|
||||
addTopControl = { resourceDirectoryName ->
|
||||
@@ -123,7 +120,7 @@ val playerControlsResourcePatch = resourcePatch {
|
||||
).item(0).childNodes
|
||||
|
||||
// Copy the patch layout xml into the target layout file.
|
||||
for (index in 1 until sourceElements.length) {
|
||||
for (index in sourceElements.length - 1 downTo 1) {
|
||||
val element = sourceElements.item(index).cloneNode(true)
|
||||
|
||||
// If the element has no attributes there's no point adding it to the destination.
|
||||
@@ -189,7 +186,7 @@ fun initializeBottomControl(descriptor: String) {
|
||||
fun injectVisibilityCheckCall(descriptor: String) {
|
||||
visibilityMethod.addInstruction(
|
||||
visibilityInsertIndex++,
|
||||
"invoke-static { p1 , p2 }, $descriptor->changeVisibility(ZZ)V",
|
||||
"invoke-static { p1 , p2 }, $descriptor->setVisibility(ZZ)V",
|
||||
)
|
||||
|
||||
if (!visibilityImmediateCallbacksExistModified) {
|
||||
@@ -199,7 +196,7 @@ fun injectVisibilityCheckCall(descriptor: String) {
|
||||
|
||||
visibilityImmediateMethod.addInstruction(
|
||||
visibilityImmediateInsertIndex++,
|
||||
"invoke-static { p0 }, $descriptor->changeVisibilityImmediate(Z)V",
|
||||
"invoke-static { p0 }, $descriptor->setVisibilityImmediate(Z)V",
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ Second \"item\" text"</string>
|
||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
||||
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
@@ -130,7 +130,7 @@ Second \"item\" text"</string>
|
||||
<!-- 'remix' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<!-- 'share' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
</patch>
|
||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||
</patch>
|
||||
<patch id="layout.hide.time.hideTimestampPatch">
|
||||
</patch>
|
||||
@@ -206,6 +206,7 @@ Second \"item\" text"</string>
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<!-- 'Spoof video streams' should be the same translation used for revanced_spoof_video_streams_screen_title -->
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
@@ -223,7 +224,6 @@ Second \"item\" text"</string>
|
||||
<patch id="interaction.seekbar.enableSlideToSeekPatch">
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<!-- 'no auth' means no authentication -->
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
|
||||
@@ -45,7 +45,7 @@ Second \"item\" text"</string>
|
||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
||||
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
@@ -130,7 +130,7 @@ Second \"item\" text"</string>
|
||||
<!-- 'remix' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<!-- 'share' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
</patch>
|
||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||
</patch>
|
||||
<patch id="layout.hide.time.hideTimestampPatch">
|
||||
</patch>
|
||||
@@ -206,6 +206,7 @@ Second \"item\" text"</string>
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<!-- 'Spoof video streams' should be the same translation used for revanced_spoof_video_streams_screen_title -->
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
@@ -223,7 +224,6 @@ Second \"item\" text"</string>
|
||||
<patch id="interaction.seekbar.enableSlideToSeekPatch">
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<!-- 'no auth' means no authentication -->
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
|
||||
@@ -168,9 +168,6 @@ Second \"item\" text"</string>
|
||||
لن يتم إعلامك بأي أخطاء غير متوقعة."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">تعطيل توهُّج زِرّي أعجبني واشتراك</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">لن يتوهَّج زرّي أعجبني واشتراك عند ذكرهما</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">سيتوهَّج زرّي أعجبني واشتراك عند ذكرهما</string>
|
||||
<string name="revanced_hide_album_cards_title">إخفاء بطاقات الألبوم</string>
|
||||
<string name="revanced_hide_album_cards_summary_on">تم إخفاء بطاقات الألبوم</string>
|
||||
<string name="revanced_hide_album_cards_summary_off">يتم عرض بطاقات الألبوم</string>
|
||||
@@ -193,22 +190,22 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">يتم عرض الرفوف</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<string name="revanced_hide_join_membership_button_title">إخفاء زر \'الانضمام\'</string>
|
||||
<string name="revanced_hide_join_membership_button_title">إخفاء زر الانضمام</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">تم إخفاء الزر</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">يتم عرض الزر</string>
|
||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">إخفاء رف \"لـك\" في صفحة القناة</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">تم إخفاء الرف</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">يتم عرض الرف</string>
|
||||
<string name="revanced_hide_for_you_shelf_title">إخفاء رف \'مقترحات لك\'</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">تم إخفاء الرف في صفحة القناة</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">يتم عرض الرف في صفحة القناة</string>
|
||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
||||
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||
<string name="revanced_hide_notify_me_button_title">إخفاء زر \'تنبيهي\'</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">تم إخفاء الزر</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">يتم عرض الزر</string>
|
||||
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">إخفاء توصيات \'شاهد الأشخاص أيضًا\'</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">تم إخفاء التوصيات</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">يتم عرض التوصيات</string>
|
||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">إخفاء علامة \'الأشخاص الذين شاهدوا أيضًا\'</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">تم إخفاء العلامة</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">يتم عرض العلامة</string>
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">إخفاء زر \'عرض المزيد\'</string>
|
||||
@@ -224,8 +221,8 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_on">تم إخفاء رف الشرائح</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_off">يتم عرض رف الشرائح</string>
|
||||
<string name="revanced_hide_expandable_chip_title">إخفاء الشريحة القابلة للتوسيع تحت الفيديوهات</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">تم إخفاء الشرائح القابلة للتوسيع</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">يتم عرض الشرائح القابلة للتوسيع</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">تم إخفاء البطاقة القابلة للتوسيع</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">يتم عرض البطاقة القابلة للتوسيع</string>
|
||||
<string name="revanced_hide_community_posts_title">إخفاء مشاركات المجتمع</string>
|
||||
<string name="revanced_hide_community_posts_summary_on">تم إخفاء مشاركات المجتمع</string>
|
||||
<string name="revanced_hide_community_posts_summary_off">يتم عرض مشاركات المجتمع</string>
|
||||
@@ -241,7 +238,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_community_guidelines_title">إخفاء إرشادات المجتمع</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_on">تم إخفاء إرشادات المجتمع</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_off">يتم عرض إرشادات المجتمع</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">إخفاء إرشادات مجتمع المشتركين</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">إخفاء إرشادات المشتركين</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_on">تم إخفاء إرشادات مجتمع المشتركين</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">يتم عرض إرشادات مجتمع المشتركين</string>
|
||||
<string name="revanced_hide_channel_member_shelf_title">إخفاء رف أعضاء القناة</string>
|
||||
@@ -280,25 +277,25 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_artist_cards_title">إخفاء بطاقات الفنان</string>
|
||||
<string name="revanced_hide_artist_cards_summary_on">تم إخفاء بطاقات الفنان</string>
|
||||
<string name="revanced_hide_artist_cards_summary_off">يتم عرض بطاقات الفنان</string>
|
||||
<string name="revanced_hide_attributes_section_title">إخفاء قسم الصفات</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">تم إخفاء \'الأماكن المميزة\'، أقسام الألعاب والموسيقى</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">يتم عرض \'الأماكن المميزة\'، أقسام الألعاب والموسيقى</string>
|
||||
<string name="revanced_hide_chapters_section_title">إخفاء قسم الفصول</string>
|
||||
<string name="revanced_hide_attributes_section_title">إخفاء الصفات</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">تم إخفاء أقسام الأماكن المميزة، الألعاب، الموسيقى والأشخاص المذكورون</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">يتم عرض أقسام الأماكن المميزة، الألعاب، الموسيقى والأشخاص المذكورون</string>
|
||||
<string name="revanced_hide_chapters_section_title">إخفاء الفصول</string>
|
||||
<string name="revanced_hide_chapters_section_summary_on">تم إخفاء قسم الفصول</string>
|
||||
<string name="revanced_hide_chapters_section_summary_off">يتم عرض قسم الفصول</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">إخفاء قسم \"كيف تم إنشاء هذا المحتوى\"</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">تم إخفاء قسم \"كيف تم إنشاء هذا المحتوى\"</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">يتم عرض قسم \"كيف تم إنشاء هذا المحتوى\"</string>
|
||||
<string name="revanced_hide_podcast_section_title">إخفاء قسم \'استكشاف البودكاست\'</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">تم إخفاء قسم \"استكشاف البودكاست\"</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">يتم عرض قسم \"استكشاف البودكاست\"</string>
|
||||
<string name="revanced_hide_info_cards_section_title">إخفاء قسم بطاقات المعلومات</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">إخفاء \'كيف تم إنشاء هذا المحتوى\'</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">تم إخفاء قسم كيف تم إنشاء هذا المحتوى</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">يتم عرض قسم كيف تم إنشاء هذا المحتوى</string>
|
||||
<string name="revanced_hide_podcast_section_title">إخفاء \'استكشاف البودكاست\'</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">تم إخفاء قسم استكشاف البودكاست</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">يتم عرض قسم استكشاف البودكاست</string>
|
||||
<string name="revanced_hide_info_cards_section_title">إخفاء بطاقات المعلومات</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">تم إخفاء قسم بطاقات المعلومات</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">يتم عرض قسم بطاقات المعلومات</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">إخفاء قسم \'المفاهيم الأساسية\'</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">تم إخفاء قسم \'المفاهيم الأساسية\'</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">يتم عرض قسم \'المفاهيم الأساسية\'</string>
|
||||
<string name="revanced_hide_transcript_section_title">إخفاء قسم النص</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">إخفاء \'المفاهيم الأساسية\'</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">تم إخفاء قسم المفاهيم الأساسية</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">يتم عرض قسم المفاهيم الأساسية</string>
|
||||
<string name="revanced_hide_transcript_section_title">إخفاء النص</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">تم إخفاء قسم النص</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">يتم عرض قسم النص</string>
|
||||
<string name="revanced_hide_description_components_screen_title">وصف الفيديو</string>
|
||||
@@ -316,27 +313,27 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">يعرض في الفيديوهات ذات الصلة</string>
|
||||
<string name="revanced_comments_screen_title">التعليقات</string>
|
||||
<string name="revanced_comments_screen_summary">إخفاء أو عرض مكونات قسم التعليقات</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">إخفاء \"ملخص الدردشة\" </string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">تم إخفاء “ملخص الدردشة”</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">يتم عرض “ملخص الدردشة”</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">إخفاء \'ملخص المحادثة\'</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">تم إخفاء ملخص المحادثات</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">يتم عرض ملخص المحادثات</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">إخفاء رأس \'تعليقات الأعضاء\'</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">تم إخفاء رأس \'تعليقات الأعضاء\'</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">يتم عرض رأس \'تعليقات الأعضاء\'</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">تم إخفاء علامة تعليقات من الأعضاء</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">يتم عرض علامة تعليقات من الأعضاء</string>
|
||||
<string name="revanced_hide_comments_section_title">إخفاء قسم التعليقات</string>
|
||||
<string name="revanced_hide_comments_section_summary_on">تم إخفاء قسم التعليقات</string>
|
||||
<string name="revanced_hide_comments_section_summary_off">يتم عرض قسم التعليقات</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_title">إخفاء زر \'إنشاء مقطع Short\'</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">تم إخفاء زر \'إنشاء Short\'</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">يتم عرض زر \'إنشاء Short\'</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">تم إخفاء زر إنشاء Short</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">يتم عرض زر إنشاء Short</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">إخفاء أزرار الرموز التعبيرية والطوابع الزمنية</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">تم إخفاء أزرار الرموز التعبيرية والطوابع الزمنية</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">يتم عرض أزرار الرموز التعبيرية والطوابع الزمنية</string>
|
||||
<string name="revanced_hide_comments_preview_comment_title">إخفاء تعليق المعاينة</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_on">تم إخفاء تعليق المعاينة</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_off">يتم عرض تعليق المعاينة</string>
|
||||
<string name="revanced_hide_comments_thanks_button_title">إخفاء زر شكرًا</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_on">تم إخفاء زر شكرًا</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_off">يتم عرض زر شكرًا</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">إخفاء أزرار الطابع الزمني والرموز التعبيرية</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">تم إخفاء أزرار الطابع الزمني والرموز التعبيرية</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">يتم عرض أزرار الطابع الزمني والرموز التعبيرية</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">إخفاء رسومات YouTube</string>
|
||||
<string name="revanced_hide_doodles_summary_on">تم إخفاء رسومات شريط البحث</string>
|
||||
@@ -417,12 +414,12 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_on">تم إخفاء رفوف التسوق</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_off">يتم عرض رفوف التسوق</string>
|
||||
<string name="revanced_hide_shopping_links_title">إخفاء روابط التسوق في وصف الفيديو</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">تم إخفاء روابط التسوق</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">يتم عرض روابط التسوق</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">تم إخفاء روابط التسوق في وصف الفيديو</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">يتم عرض روابط التسوق في وصف الفيديو</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">إخفاء زر \"زيارة المتجر\" على صفحات القناة</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">تم إخفاء الزر</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">يتم عرض الزر</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">تم إخفاء الزر في صفحة القناة</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">يتم عرض الزر في صفحة القناة</string>
|
||||
<string name="revanced_hide_web_search_results_title">إخفاء نتائج بحث الويب</string>
|
||||
<string name="revanced_hide_web_search_results_summary_on">تم إخفاء نتائج البحث على الويب</string>
|
||||
<string name="revanced_hide_web_search_results_summary_off">يتم عرض نتائج البحث على الويب</string>
|
||||
@@ -446,10 +443,10 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_share_copy_url_success">تم نسخ URL إلى الحافظة</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">تم نسخ عنوان URL مع الطابع الزمني</string>
|
||||
<string name="revanced_copy_video_url_title">عرض زر نسخ عنوان URL للفيديو</string>
|
||||
<string name="revanced_copy_video_url_summary_on">يتم عرض الزر. انقر لنسخ رابط الفيديو. انقر مع الاستمرار لنسخ URL الفيديو مع الطابع الزمني</string>
|
||||
<string name="revanced_copy_video_url_summary_on">يتم عرض الزر. انقر لنسخ عنوان URL للفيديو. انقر مع الاستمرار للنسخ مع الطابع الزمني</string>
|
||||
<string name="revanced_copy_video_url_summary_off">لا يتم عرض الزر</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">عرض زر نسخ URL مع الطابع الزمني</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">يتم عرض الزر. انقر لنسخ عنوان URL للفيديو مع الطابع الزمني. انقر مع الاستمرار لنسخ الفيديو بدون الطابع الزمني</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">يتم عرض الزر. انقر لنسخ عنوان URL للفيديو مع الطابع الزمني. انقر مع الاستمرار للنسخ بدون الطابع الزمني</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">لا يتم عرض الزر</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
@@ -484,11 +481,15 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
||||
<string name="revanced_swipe_brightness_title">التحكم بالسطوع عن طريق ايماءة التمرير</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">تم تمكين التحكم بمستوى السطوع عن طريق الإيماءة</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">تم تعطيل التحكم بمستوى السطوع عن طريق الإيماءة</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">"تم تمكين التمرير السريع لضبط السطوع في وضع ملء الشاشة
|
||||
|
||||
اضبط السطوع عن طريق التمرير عموديًا على الجانب الأيسر من الشاشة"</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">تم تعطيل التمرير السريع لضبط السطوع في وضع ملء الشاشة</string>
|
||||
<string name="revanced_swipe_volume_title">تمكين التحكم بالصوت عن طريق إيماءة التمرير</string>
|
||||
<string name="revanced_swipe_volume_summary_on">تم تمكين التحكم بمستوى الصوت عن طريق الإيماءة</string>
|
||||
<string name="revanced_swipe_volume_summary_off">تم تعطيل التحكم بمستوى الصوت عن طريق الإيماءة</string>
|
||||
<string name="revanced_swipe_volume_summary_on">"تم تمكين التمرير السريع لضبط مستوى الصوت في وضع ملء الشاشة
|
||||
|
||||
اضبط مستوى الصوت عن طريق التمرير عموديًا على الجانب الأيمن من الشاشة"</string>
|
||||
<string name="revanced_swipe_volume_summary_off">تم تعطيل التمرير السريع لضبط مستوى الصوت في وضع ملء الشاشة</string>
|
||||
<string name="revanced_swipe_press_to_engage_title">تمكين إيماءة الضغط للتمرير</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_on">يتم تنشيط عناصر التحكم عن طريق إيماءة التمرير فقط بضغطة طويلة</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">تنشيط عناصر التحكم عن طريق إيماءة التمرير عند الضغط مباشرة</string>
|
||||
@@ -501,16 +502,19 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">تمكين إيماءة السطوع التلقائي</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">التمرير لأسفل إلى أدنى قيمة للسطوع يمكّن السطوع التلقائي</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">لا يؤدي التمرير لأسفل إلى أدنى قيمة إلى تمكين السطوع التلقائي</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">تلقائي</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">مهلة واجهة التمرير</string>
|
||||
<string name="revanced_swipe_overlay_timeout_summary">مقدار الوقت الذي تظهر فيه واجهة التمرير بعد التغيير بجزء الثانية</string>
|
||||
<string name="revanced_swipe_text_overlay_size_title">حجم نص واجهة التمرير</string>
|
||||
<string name="revanced_swipe_text_overlay_size_summary">حجم النص على واجهة التمرير</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_title">تعتيم خلفية واجهة التمرير السريع</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_summary">قيمة التعتيم بين 0-100</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_invalid_toast">يجب أن يكون تعتيم التمرير السريع بين 0-100</string>
|
||||
<string name="revanced_swipe_threshold_title">مقدار حد التمرير</string>
|
||||
<string name="revanced_swipe_threshold_summary">الحد الأدنى من التمرير قبل اكتشاف الإيماءة</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_title">عرض الواجهة الدائرية</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_summary_on">يتم عرض التراكب الدائري</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_summary_off">يتم عرض التراكب الأفقي</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_title">تمكين النمط الأدنى</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_summary_on">تم تمكين النمط الواجهة الأدنى</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_summary_off">تم تعطيل نمط الواجهة الأدنى</string>
|
||||
<string name="revanced_swipe_change_video_title">تمكين إيماءة التمرير لتغيير الفيديو</string>
|
||||
<string name="revanced_swipe_change_video_summary_on">سيؤدي التمرير في وضع ملء الشاشة إلى التغيير للفيديو التالي/السابق</string>
|
||||
<string name="revanced_swipe_change_video_summary_off">لن يؤدي التمرير في وضع ملء الشاشة إلى التغيير للفيديو التالي/السابق</string>
|
||||
@@ -523,6 +527,9 @@ Second \"item\" text"</string>
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<string name="revanced_hide_buttons_screen_title">أزرار الإجراء</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">إخفاء أو عرض الأزرار تحت الفيديوهات</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_title">إيقاف تفعيل توهج الإعجاب والاشتراك</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">لن يتوهَّج زرّي أعجبني واشتراك عند ذكرهما</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">سيتوهَّج زرّي أعجبني واشتراك عند ذكرهما</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">إخفاء أعجبني ولم يعجبني</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">تم إخفاء أزرار أعجبني ولم يعجبني</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">يتم عرض أزرار أعجبني ولم يعجبني</string>
|
||||
@@ -575,12 +582,18 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_subscriptions_button_title">إخفاء الاشتراكات</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_on">تم إخفاء زر الاشتراكات</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">يتم عرض زر الاشتراكات</string>
|
||||
<string name="revanced_hide_notifications_button_title">إخفاء الإشعارات</string>
|
||||
<string name="revanced_hide_notifications_button_summary_on">تم إخفاء زر الإشعارات</string>
|
||||
<string name="revanced_hide_notifications_button_summary_off">يتم عرض زر الإشعارات</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">تبديل الإنشاء مع الإشعارات</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"تم تبديل زر الإنشاء بـزر الإشعارات
|
||||
|
||||
ملاحظة: يؤدي تمكين هذا أيضًا إلى إخفاء إعلانات الفيديو بالقوة"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">لا يتم تبديل زر الإنشاء بزر الإشعارات</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_user_dialog_message">"سيؤدي تعطيل هذا الإعداد أيضًا إلى تعطيل حظر إعلانات Shorts.
|
||||
|
||||
إذا لم يتم تفعيل تغيير هذا الإعداد، فحاول التبديل إلى وضع التصفُّح المتخفي."</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">إخفاء تسميات زر التنقل</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">تم إخفاء التسميات</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">يتم عرض التسميات</string>
|
||||
@@ -795,10 +808,13 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_on">تم إخفاء شريط التنقل</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">يتم عرض شريط التنقل</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
||||
<string name="revanced_disable_suggested_video_end_screen_title">تعطيل شاشة نهاية الفيديو المقترح</string>
|
||||
<string name="revanced_disable_suggested_video_end_screen_summary_on">الفيديوهات المقترحة سيتم تعطيلها</string>
|
||||
<string name="revanced_disable_suggested_video_end_screen_summary_off">الفيديوهات المقترحة سيتم عرضها</string>
|
||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||
<string name="revanced_end_screen_suggested_video_title">إخفاء الفيديو المقترح في شاشة النهاية</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_on">"يتم إخفاء الفيديو المقترح في شاشة النهاية عند إيقاف التشغيل التلقائي
|
||||
|
||||
يمكن تغيير التشغيل التلقائي في إعدادات YouTube:
|
||||
الإعدادات ← التشغيل ← تشغيل الفيديو التالي تلقائيًا"</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_off">يتم عرض الفيديو المقترح في شاشة النهاية</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.time.hideTimestampPatch">
|
||||
<string name="revanced_hide_timestamp_title">إخفاء الطابع الزمني للفيديو</string>
|
||||
@@ -831,7 +847,7 @@ Second \"item\" text"</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_ryd_failure_connection_timeout">لم يعجبني غير متاح مؤقتًا (انتهت مهلة API)</string>
|
||||
<string name="revanced_ryd_failure_connection_status_code">لم يعجبني غير متاح (الحالة %d)</string>
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">لم يعجبني غير متاح (تم الوصول إلى حد API العميل)</string>
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">مرات عدم الإعجاب غير متوفرة (حد واجهة برمجة تطبيقات العميل)</string>
|
||||
<string name="revanced_ryd_failure_generic">لم يعجبني غير متاح (%s)</string>
|
||||
<!-- Toast shown if the user enables RYD while a video is opened, and then tries to vote for the video. -->
|
||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">أعد تحميل الفيديو للتصويت بـ Return YouTube Dislike</string>
|
||||
@@ -840,14 +856,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_ryd_enable_summary_on">يتم عرض لم يعجبني</string>
|
||||
<string name="revanced_ryd_enable_summary_off">لا يتم عرض لم يعجبني</string>
|
||||
<string name="revanced_ryd_shorts_title">عرض لم يعجني في فيديوهات Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">يتم عرض لم يعجني في فيديوهات Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"إبداءات لم يعجبني التي تظهر على فيديوهات Shorts
|
||||
<string name="revanced_ryd_shorts_summary_on">يتم عرض عدم الإعجاب على فيديوهات Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"يتم عرض مرات عدم الإعجاب في فيديوهات Shorts
|
||||
|
||||
التقييد: قد لا تظهر إبداءات لم يعجبني في وضع التصفح المتخفي"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">تم إخفاء لم يعجني في فيديوهات Shorts</string>
|
||||
التقييد: قد لا تظهر مرات عدم الإعجاب في وضع التصفح المتخفي"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">لا يتم عرض مرات عدم الإعجاب في فيديوهات Shorts</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">لم يعجبني كــ نسبة مئوية</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">يعرض عدد لم يعجبني كـ نسبة مئوية</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">يعرض عدد لم يعجبني كـ رَقَم</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">يتم عرض مرات عدم الإعجاب كنسبة مئوية</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">يتم عرض مرات عدم الإعجاب كرقم</string>
|
||||
<!-- Translations should use language similar to 'revanced_sb_enable_compact_skip_button' -->
|
||||
<string name="revanced_ryd_compact_layout_title">مقاس زر أعجبني</string>
|
||||
<string name="revanced_ryd_compact_layout_summary_on">زر أعجبني مصمم لأدنى عرض</string>
|
||||
@@ -914,8 +930,8 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_off">زر التخطي مصمم لأفضل مظهر</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button">إخفاء زر التخطي تلقائيًا</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">إخفاء زر التخطي بعد بضع ثوانٍ</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">يتم عرض زر \"التخطي\" للمقطع بأكمله</string>
|
||||
<string name="revanced_sb_general_skiptoast">عرض ملاحظة عند تخطي المقطع تلقائيًا</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">يتم عرض زر التخطي للمقطع بأكمله</string>
|
||||
<string name="revanced_sb_general_skiptoast">عرض ملاحظة عند التخطي</string>
|
||||
<string name="revanced_sb_general_skiptoast_sum_on">يتم عرض ملاحظة عندما يتم تخطي مقطع تلقائيًا. انقر هنا لمشاهدة مثال</string>
|
||||
<string name="revanced_sb_general_skiptoast_sum_off">لن يتم عرض الملاحظة. انقر هنا لمشاهدة مثال</string>
|
||||
<string name="revanced_sb_general_time_without">عرض مدة الفيديو بدون المقاطع</string>
|
||||
@@ -1016,7 +1032,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_sb_skipped_multiple_segments">تم تخطي عدة مقاطع</string>
|
||||
<string name="revanced_sb_skip_automatically">التخطي تلقائيًا</string>
|
||||
<string name="revanced_sb_skip_automatically_once">التخطي تلقائيًا مرة واحدة</string>
|
||||
<string name="revanced_sb_skip_showbutton">عرض زر التخطي</string>
|
||||
<string name="revanced_sb_skip_showbutton">عرض زر \"التخطي\"</string>
|
||||
<string name="revanced_sb_skip_seekbaronly">عرض في شريط تقدم الفيديو</string>
|
||||
<string name="revanced_sb_skip_ignore">تعطيل</string>
|
||||
<string name="revanced_sb_submit_failed_invalid">غير قادر على إرسال المقطع: الحالة: %s</string>
|
||||
@@ -1065,7 +1081,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">الوقت المحدد غير صحيح</string>
|
||||
<string name="revanced_sb_stats">إحصائيات</string>
|
||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||
<string name="revanced_sb_stats_connection_failure">الإحصائيات غير متوفرة مؤقتًا (API معطل)</string>
|
||||
<string name="revanced_sb_stats_connection_failure">الإحصائيات غير متوفرة مؤقتًا (الواجهة غير متوفرة)</string>
|
||||
<string name="revanced_sb_stats_loading">جارٍ التحميل...</string>
|
||||
<string name="revanced_sb_stats_sb_disabled">تم تعطيل SponsorBlock</string>
|
||||
<string name="revanced_sb_stats_username">اسم المستخدم الخاص بك: <b>%s</b></string>
|
||||
@@ -1339,10 +1355,10 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">تم تمكين الاهتزاز</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">فرض الصوت الأصلي</string>
|
||||
<string name="revanced_force_original_audio_summary_on">استخدام الصوت الأصلي</string>
|
||||
<string name="revanced_force_original_audio_summary_on">استخدام لغة الصوت الأصلية</string>
|
||||
<string name="revanced_force_original_audio_summary_off">استخدام الصوت الافتراضي</string>
|
||||
<string name="revanced_force_original_audio_not_available">لاستخدام هذه الميزة، قم بتغيير محاكاة بث المحتوى إلى نوع العميل iOS</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for revanced_spoof_video_streams_screen_title -->
|
||||
<string name="revanced_force_original_audio_not_available">لاستخدام هذه الميزة، غيّر \"انتحال دفقات الفيديو\" إلى iOS TV</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
@@ -1405,8 +1421,6 @@ Second \"item\" text"</string>
|
||||
قد لا يعمل تشغيل الفيديو"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">إيقاف تشغيل هذا الإعداد قد يسبب مشاكل في تشغيل الفيديو.</string>
|
||||
<string name="revanced_spoof_video_streams_client_type_title">العميل الافتراضي</string>
|
||||
<!-- 'no auth' means no authentication -->
|
||||
<string name="revanced_spoof_video_streams_client_type_android_vr_no_auth">Android VR (بدون مصادقة)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">فرض iOS AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">يتم فرض ترميز فيديو على AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">يتم تحديد ترميز الفيديو تلقائيًا</string>
|
||||
|
||||
@@ -45,7 +45,7 @@ Second \"item\" text"</string>
|
||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
||||
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
@@ -130,7 +130,7 @@ Second \"item\" text"</string>
|
||||
<!-- 'remix' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<!-- 'share' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
</patch>
|
||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||
</patch>
|
||||
<patch id="layout.hide.time.hideTimestampPatch">
|
||||
</patch>
|
||||
@@ -208,6 +208,7 @@ Second \"item\" text"</string>
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<!-- 'Spoof video streams' should be the same translation used for revanced_spoof_video_streams_screen_title -->
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
@@ -225,7 +226,6 @@ Second \"item\" text"</string>
|
||||
<patch id="interaction.seekbar.enableSlideToSeekPatch">
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<!-- 'no auth' means no authentication -->
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
|
||||
@@ -161,16 +161,13 @@ Davam et düyməsinə toxun və optimallaşdırma dəyişikliklərin qəbul et."
|
||||
<string name="revanced_debug_stacktrace_summary_on">Sazlama jurnalına yığın izləri daxildir</string>
|
||||
<string name="revanced_debug_stacktrace_summary_off">Sazlama jurnalına yığın izləri daxil deyil</string>
|
||||
<string name="revanced_debug_toast_on_error_title">ReVanced xətasında ani bildiriş göstər</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Xəta baş verərsə bildiriş göstər</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">Xəta baş verərsə bildiriş göstərmə</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Xəta baş verərsə ani bildiriş görünür</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">Xəta baş verərsə ani bildiriş görünmür</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"Xəta ani bildirişlərin qapatmaq, bütün ReVanced xəta bildirişlərin gizlədir.
|
||||
|
||||
Gözlənilməz hallardan xəbərdar olmayacaqsınız."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Bəyən və Abunə ol düyməsi parıltısın söndür</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">Bəyən və Abunə ol düyməsinə toxunanda parlamayacaq</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">Bəyən və Abunə ol düyməsinə toxunanda parlayacaq</string>
|
||||
<string name="revanced_hide_album_cards_title">Albom kartlarını gizlət</string>
|
||||
<string name="revanced_hide_album_cards_summary_on">Albom kartları gizlidir</string>
|
||||
<string name="revanced_hide_album_cards_summary_off">Albom kartları göstərilir</string>
|
||||
@@ -193,22 +190,22 @@ Gözlənilməz hallardan xəbərdar olmayacaqsınız."</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">Hissələr göstərilir</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<string name="revanced_hide_join_membership_button_title">\"Qoşul\" düyməsini gizlət</string>
|
||||
<string name="revanced_hide_join_membership_button_title">Qoşul düyməsin gizlət</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">Düymə gizlidir</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">Düymə göstərilir</string>
|
||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Kanal yerində \"Sizin üçün\" qismin gizlə</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Bölmə gizlidir</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Bölmə göstərilir</string>
|
||||
<string name="revanced_hide_for_you_shelf_title">\"Sizin üçün\" bölməsin gizlət</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Kanal səhifəsində bölmə gizlidir</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Kanal səhifəsində bölmə görünür</string>
|
||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
||||
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||
<string name="revanced_hide_notify_me_button_title">\"Mənə bildir\" düyməsini gizlət</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">Düymə gizlidir</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">Düymə göstərilir</string>
|
||||
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">\'İnsanların baxdıqları\' tövsiyələrin gizlə</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">Tövsiyələr gizlidir</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">Tövsiyələr göstərilir</string>
|
||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">\"İnsanlar həmçinin izləyiblər\" etiketin gizlət</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">Etiket gizlidir</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">Etiket göstərilir</string>
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">\'Daha çox göstər\' düyməsini gizlət</string>
|
||||
@@ -224,8 +221,8 @@ Gözlənilməz hallardan xəbərdar olmayacaqsınız."</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_on">Çip bölməsi gizlidir</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_off">Çip bölməsi göstərilir</string>
|
||||
<string name="revanced_hide_expandable_chip_title">Videoların aşağısında açılan kartı gizlət</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">Açılan kartlar gizlidir</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">Açılan kartlar görünür</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">Genişləndirilən kart gizlidir</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">Genişləndirilən kart görünür</string>
|
||||
<string name="revanced_hide_community_posts_title">İcma elanların gizlət</string>
|
||||
<string name="revanced_hide_community_posts_summary_on">İcma elanları gizlədilib</string>
|
||||
<string name="revanced_hide_community_posts_summary_off">İcma elanları göstərilir</string>
|
||||
@@ -241,7 +238,7 @@ Gözlənilməz hallardan xəbərdar olmayacaqsınız."</string>
|
||||
<string name="revanced_hide_community_guidelines_title">İcma təlimatlarını gizlət</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_on">İcma təlimatları gizlidir</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_off">İcma təlimatları göstərilir</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">Abunəliklərin icma təlimatlarını gizlət</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">Abunəçi təlimatlarını gizlət</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_on">Abunəliklərin icma təlimatları gizlidir</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">Abunəliklərin icma təlimatları göstərilir</string>
|
||||
<string name="revanced_hide_channel_member_shelf_title">Kanal üzvü bölməsin gizlət</string>
|
||||
@@ -280,25 +277,25 @@ Gözlənilməz hallardan xəbərdar olmayacaqsınız."</string>
|
||||
<string name="revanced_hide_artist_cards_title">Sənətçi kartlarını gizlət</string>
|
||||
<string name="revanced_hide_artist_cards_summary_on">Sənətçi kartları gizlidir</string>
|
||||
<string name="revanced_hide_artist_cards_summary_off">Sənətçi kartları göstərilir</string>
|
||||
<string name="revanced_hide_attributes_section_title">Atributlar bölməsini gizlət</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">\"Seçilən məkanlar\", Oyunlar və Musiqi bölmələri gizlidir</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">\"Seçilən məkanlar\", Oyunlar və Musiqi bölmələri göstərilir</string>
|
||||
<string name="revanced_hide_chapters_section_title">Bölümlər bölməsini gizlət</string>
|
||||
<string name="revanced_hide_attributes_section_title">Atributları Gizlət</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">Seçilən məkanlar, Oyunlar, Musiqi və qeyd edilən insanlar bölmələri gizlədilir</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">Seçilən məkanlar, Oyunlar, Musiqi və qeyd edilən insanlar bölmələri görünür</string>
|
||||
<string name="revanced_hide_chapters_section_title">Fəsilləri Gizlət</string>
|
||||
<string name="revanced_hide_chapters_section_summary_on">Bölümlər bölməsi gizlidir</string>
|
||||
<string name="revanced_hide_chapters_section_summary_off">Bölümlər bölməsi göstərilir</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">\"Bu məzmun necə hazırlanıb\" bölməsini gizlət</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">\"Bu məzmun necə hazırlanıb\" bölməsi gizlidir</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">\"Bu məzmun necə hazırlanıb\" bölməsi görünür</string>
|
||||
<string name="revanced_hide_podcast_section_title">\'Podkastı kəşf et\' bölməsini gizlət</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">\"Podkastı kəşf et\" bölməsi gizlədilir</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">\"Podkastı kəşf et\" bölməsi göstərilir</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Məlumat kartları bölməsini gizlət</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">\'Bu məzmun necə hazırlanıb\'ı Gizlət</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">Bu məzmunun necə hazırlandığı bölməsi gizlidir</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">Bu məzmunun necə hazırlandığı bölməsi görünür</string>
|
||||
<string name="revanced_hide_podcast_section_title">\'Podkastı araşdırın\"-ı Gizlət</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Podkast bölməsin araşdırın gizlidir</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Podkast bölməsin araşdırın görünür</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Məlumat Kartlarını Gizlət</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Məlumat kartları bölməsi gizlədilir</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Məlumat kartları bölməsi göstərilir</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">\"Əsas anlayışlar\" bölməsini gizlət</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">\"Əsas anlayışlar\" bölməsi gizlidir</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">\"Əsas anlayışlar\" bölməsi göstərilir</string>
|
||||
<string name="revanced_hide_transcript_section_title">Transkripsiya bölməsini gizlət</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">\"Əsas anlayışları\" gizlət</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Əsas anlayışlar bölməsi gizlidir</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Əsas anlayışlar bölməsi görünür</string>
|
||||
<string name="revanced_hide_transcript_section_title">Transkript-i Gizlət</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Transkripsiya bölməsi gizlidir</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Transkripsiya bölməsi göstərilir</string>
|
||||
<string name="revanced_hide_description_components_screen_title">Video açıqlaması</string>
|
||||
@@ -316,27 +313,27 @@ Gözlənilməz hallardan xəbərdar olmayacaqsınız."</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Əlaqəli videolarda görünür</string>
|
||||
<string name="revanced_comments_screen_title">Şərhlər</string>
|
||||
<string name="revanced_comments_screen_summary">Şərhlər bölməsi elementlərin gizlət və ya göstər</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">\'Söhbət yekunun\' gizlət </string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">\"Söhbət yekunu\" gizlədilir</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">\'Söhbət yekunu\' göstərilir</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">\'Söhbət yekunun\' Gizlət</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">Söhbət yekunu gizlidir </string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">Söhbət yekunu görünür</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">\'Üzvlərin şərhləri\' başlığını gizlət</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">\"Üzvlərin şərhləri\" başlığı gizlədilib</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">\"Üzvlərin şərhləri\" başlığı göstərilir</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">Üzvlərin şərhləri başlığı gizlidir</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">Üzvlərin şərhləri başlığı görünür</string>
|
||||
<string name="revanced_hide_comments_section_title">Şərhlər bölməsini gizlət</string>
|
||||
<string name="revanced_hide_comments_section_summary_on">Şərhlər bölməsi gizlidir</string>
|
||||
<string name="revanced_hide_comments_section_summary_off">Şərhlər bölməsi göstərilir</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_title">\"Shorts Yarat\" düyməsini gizlət</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">\"Shorts yarat\" düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">\"Shorts yarat\" düyməsi göstərilir</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">Short yarat düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Short yarat düyməsi görünür</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">Emoji və vaxt möhürü düymələrin gizlət</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">Emoji və vaxt möhürü düymələri gizlidir</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">Emoji və vaxt möhürü düymələri görünür</string>
|
||||
<string name="revanced_hide_comments_preview_comment_title">Önbaxış şərhin gizlət</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_on">Önbaxış şərhi gizlədilib</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_off">Önbaxış şərhi göstərilir</string>
|
||||
<string name="revanced_hide_comments_thanks_button_title">Təşəkkür Düyməsini Gizlət</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_on">Təşəkkür düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_off">Təşəkkür düyməsi göstərilir</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">Vaxt möhürü və emoji düymələrin gizlə</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">Vaxt möhürü və emoji düymələri gizlədilib</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">Vaxt möhürü və emoji düymələri göstərilir</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodle-ları gizlət</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Axtarış çubuğu Doodle-ları gizlidir</string>
|
||||
@@ -417,12 +414,12 @@ Bu xüsusiyyət yalnız köhnə cihazlar üçün mövcuddur"</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_on">Alış-veriş rəfi gizlidir</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_off">Alış-veriş rəfi göstərilir</string>
|
||||
<string name="revanced_hide_shopping_links_title">Video açıqlamada alış-veriş linklərin gizlə</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">Alış-veriş bağlantıları gizlədilir</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">Alış-veriş bağlantıları göstərilir</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">Video təsvirində alış-veriş linkləri gizlədilib</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">Video təsvirində alış-veriş linkləri görünür</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Kanalda \"Mağazaya ziyarət\" düyməsin gizlə</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Düymə gizlidir</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Düymə göstərilir</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Kanal səhifəsindəki düymə gizlidir</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Kanal səhifəsindəki düymə görünür</string>
|
||||
<string name="revanced_hide_web_search_results_title">Veb axtarış nəticələrini gizlət</string>
|
||||
<string name="revanced_hide_web_search_results_summary_on">Veb axtarış nəticələri gizlədilir</string>
|
||||
<string name="revanced_hide_web_search_results_summary_off">Veb axtarış nəticələri göstərilir</string>
|
||||
@@ -446,10 +443,10 @@ Bu xüsusiyyət yalnız köhnə cihazlar üçün mövcuddur"</string>
|
||||
<string name="revanced_share_copy_url_success">URL buferə köçürüldü</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">Vaxt möhürlü URL köçürüldü</string>
|
||||
<string name="revanced_copy_video_url_title">Video URL-i köçürmə düyməsin göstər</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Düymə göstərilir. Video URL-sini köçürmək üçün toxun. Vaxt möhürlü video URL-sini köçürmək üçün basılı saxla</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Düymə göstərilir. Video URL-ni köçürmək üçün toxun. Vaxt möhürü ilə köçürmək üçün basıb saxlayın</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Düymə göstərilmir</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Vaxt möhürü URL köçür düyməsi göstər</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Düymə göstərilir. Vaxt möhürlü video URL-sini köçürmək üçün toxun. Vaxt möhürü olmadan köçürmək üçün basılı saxla</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Düymə göstərilir. Video URL-ni vaxt möhürü ilə köçürmək üçün toxun. Vaxt möhürü olmadan köçürmək üçün basıb saxlayın</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Düymə göstərilmir</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
@@ -462,8 +459,8 @@ Bu xüsusiyyət yalnız köhnə cihazlar üçün mövcuddur"</string>
|
||||
<string name="revanced_external_downloader_screen_title">Xarici yükləmələr</string>
|
||||
<string name="revanced_external_downloader_screen_summary">Xarici yükləyici istifadəsi üçün tənzimləmələr</string>
|
||||
<string name="revanced_external_downloader_title">Xarici yükləmə düyməsini göstər</string>
|
||||
<string name="revanced_external_downloader_summary_on">Yükləmə düyməsi oynadıcıda göstərilir</string>
|
||||
<string name="revanced_external_downloader_summary_off">Yükləmə düyməsi oynadıcıda göstərilmir</string>
|
||||
<string name="revanced_external_downloader_summary_on">Endirin düyməsi oynadıcıda göstərilir</string>
|
||||
<string name="revanced_external_downloader_summary_off">Endirin düyməsi oynadıcıda göstərilmir</string>
|
||||
<!-- 'download action button' should be translated using the same wording as the translation of 'revanced_hide_download_button_title' -->
|
||||
<string name="revanced_external_downloader_action_button_title">Yükləmə fəaliyyət düyməsin qəbul etmə</string>
|
||||
<string name="revanced_external_downloader_action_button_summary_on">Yükləmə düyməsi, xarici yükləyicinizi açır</string>
|
||||
@@ -484,11 +481,15 @@ Bu xüsusiyyət yalnız köhnə cihazlar üçün mövcuddur"</string>
|
||||
</patch>
|
||||
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
||||
<string name="revanced_swipe_brightness_title">Parlaqlıq jestini aktivləşdir</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">Parlaqlıq sürüşdürmə aktivdir</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">Parlaqlıq sürüşdürmə qeyri-aktivdir</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">"Tam ekran parlaqlıq sürüşdürməsi aktivdir
|
||||
|
||||
Ekranın sol tərəfində dikinə sürüşdürərək parlaqlığı tənzimləyin"</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">Tam ekran parlaqlıq sürüşdürməsi qapalıdır</string>
|
||||
<string name="revanced_swipe_volume_title">Səs səviyyəsi jestini aktivləşdir</string>
|
||||
<string name="revanced_swipe_volume_summary_on">Səs səviyyəsin sürüşdürmə aktivdir</string>
|
||||
<string name="revanced_swipe_volume_summary_off">Səs səviyyəsin sürüşdürmə qeyri-aktivdir</string>
|
||||
<string name="revanced_swipe_volume_summary_on">"Tam ekran səs sürüşdürməsi aktivdir
|
||||
|
||||
Ekranın sağ tərəfində düzünə sürüşdürərək səs səviyyəsini tənzimlə"</string>
|
||||
<string name="revanced_swipe_volume_summary_off">Tam ekran səs sürüşdürməsi qapalıdır</string>
|
||||
<string name="revanced_swipe_press_to_engage_title">Basıb sürüşdürmə jestini aktivləşdir</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_on">Sürüşdürmək üçün basma aktivdir</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">Sürüşdürmək üçün basma qeyri-aktivdir</string>
|
||||
@@ -501,16 +502,19 @@ Bu xüsusiyyət yalnız köhnə cihazlar üçün mövcuddur"</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">Avto-parlaqlıq jestini aktivləşdir</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">Parlaqlıq ən aşağı dəyərinə sürüşdürüləndə avto-parlaqlıq aktivləşir</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">Parlaqlığı ən aşağı dəyərə sürüşdürəndə avto-parlaqlıq aktivləşmir</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">Birbaşa</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">Sürüşdürmə örtüyü müddəti</string>
|
||||
<string name="revanced_swipe_overlay_timeout_summary">Örtüyün göründüyü millisaniyələrin sayı</string>
|
||||
<string name="revanced_swipe_text_overlay_size_title">Örtük mətn ölçüsü dəyişdirmə</string>
|
||||
<string name="revanced_swipe_text_overlay_size_summary">Sürüşdürmə örtüyü üçün mətn ölçüsü</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_title">Sürüşdürmə cildi arxa plan qeyri-şəffaflığı</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_summary">0-100 arası qeyri-şəffaflıq dəyəri</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_invalid_toast">Sürüşmə qeyri-şəffaflığı 0-100 arası olmalıdır</string>
|
||||
<string name="revanced_swipe_threshold_title">Sürüşdürmə böyüklük həddi</string>
|
||||
<string name="revanced_swipe_threshold_summary">Sürüşdürmənin icra edilməsi üçün son dəyər</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_title">Dairəvi örtüyü göstər</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_summary_on">Dairəvi örtük göstərilir</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_summary_off">Düzünə örtük göstərilir</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_title">Ən kiçik üslubu aktivləşdir</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_summary_on">Ən kiçik örtük üslubu aktivləşdirilib</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_summary_off">Ən kiçik örtük üslubu qapalıdır</string>
|
||||
<string name="revanced_swipe_change_video_title">Videoları ötürmək üçün sürüşdürməni aktiv et</string>
|
||||
<string name="revanced_swipe_change_video_summary_on">Tam ekran rejimində sürüşdürmə növbəti/əvvəlki videoya ötürəcək</string>
|
||||
<string name="revanced_swipe_change_video_summary_off">Tam ekran rejimində sürüşdürmə növbəti/əvvəlki videoya ötürməyəcək</string>
|
||||
@@ -523,6 +527,9 @@ Bu xüsusiyyət yalnız köhnə cihazlar üçün mövcuddur"</string>
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<string name="revanced_hide_buttons_screen_title">Fəaliyyət düymələri</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">Videonun altındakı düymələri gizlət və ya göstər</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Bəyən və Abunə Ol parıltısını söndür</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">Bəyən və Abunə ol düyməsinə toxunanda parlamayacaq</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">Bəyən və Abunə ol düyməsinə toxunanda parlayacaq</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">\"Bəyənmə\" və \"Bəyənməmə\"ni gizlət</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">Bəyənmə və Bəyənməmə düymələri gizlidir</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">Bəyənmə və Bəyənməmə düymələri göstərilir</string>
|
||||
@@ -575,12 +582,18 @@ Bu xüsusiyyət yalnız köhnə cihazlar üçün mövcuddur"</string>
|
||||
<string name="revanced_hide_subscriptions_button_title">\"Abunəliklər\"i gizlət</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_on">Abunəliklər düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Abunəliklər düyməsi göstərilir</string>
|
||||
<string name="revanced_hide_notifications_button_title">Bildirişləri Gizlət</string>
|
||||
<string name="revanced_hide_notifications_button_summary_on">Bildirişlər düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_notifications_button_summary_off">Bildirişlər düyməsi görünür</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">\"Yarat\"ı \"Bildirişlər\" ilə dəyişdir</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"Yarat düyməsi Bildirişlər düyməsi ilə dəyişdirilir
|
||||
|
||||
Qeyd: Bunu aktivləşdirmə video reklamları da məcburi olaraq gizlədir"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">\"Yarat\" düyməsi, \"Bildirişlər\" düyməsi ilə əvəzlənmir</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_user_dialog_message">"Bu seçimin qapanması Shorts reklam əngəllənməsin də qapadacaq.
|
||||
|
||||
Bu seçimi dəyişdirmə işə düşmürsə, Gizli rejimə keçməyə çalışın."</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">Fəaliyyət düymə etiketlərini gizlət</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">Etiketlər gizlidir</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">Etiketlər göstərilir</string>
|
||||
@@ -795,10 +808,12 @@ Qeyd: Bunu aktivləşdirmə video reklamları da məcburi olaraq gizlədir"</str
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_on">Fəaliyyət çubuğu gizlidir</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">Fəaliyyət çubuğu göstərilir</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
||||
<string name="revanced_disable_suggested_video_end_screen_title">Təklif edilən video bitiş ekranın qapadın</string>
|
||||
<string name="revanced_disable_suggested_video_end_screen_summary_on">Təklif olunan videolar qeyri-aktiv ediləcək</string>
|
||||
<string name="revanced_disable_suggested_video_end_screen_summary_off">Təklif olunan videolar göstəriləcək</string>
|
||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||
<string name="revanced_end_screen_suggested_video_title">Son ekran bildirilən videonu gizlət</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_on">"Avtomatik oynatma qapadılanda son ekran bildirilən video gizlədilir
|
||||
|
||||
Avtomatik oynatma YouTube ayarlarında dəyişdirilə bilər: Ayarlar → Oxunuş → Növbəti videonu avtomatik oxudun"</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_off">Son ekranda bildirilən video göstərilir</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.time.hideTimestampPatch">
|
||||
<string name="revanced_hide_timestamp_title">Video vaxt möhürünü gizlət</string>
|
||||
@@ -831,7 +846,7 @@ Qeyd: Bunu aktivləşdirmə video reklamları da məcburi olaraq gizlədir"</str
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_ryd_failure_connection_timeout">\"Bəyənməmə\" müvəqqəti əlçatmazdır (API vaxtı bitdi)</string>
|
||||
<string name="revanced_ryd_failure_connection_status_code">Bəyənməmə əlçatmazdır (status %d)</string>
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">Bəyənməmə əlçatmazdır (qəbuledici API limitinə çatdı)</string>
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">Bəyənməmələr mövcud deyil (qəbuledici API limiti)</string>
|
||||
<string name="revanced_ryd_failure_generic">Bəyənməmə əlçatmazdır (%s)</string>
|
||||
<!-- Toast shown if the user enables RYD while a video is opened, and then tries to vote for the video. -->
|
||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Ryd ilə səsvermə üçün videonu yenidən yüklə</string>
|
||||
@@ -840,14 +855,14 @@ Qeyd: Bunu aktivləşdirmə video reklamları da məcburi olaraq gizlədir"</str
|
||||
<string name="revanced_ryd_enable_summary_on">Bəyənməmələr göstərilir</string>
|
||||
<string name="revanced_ryd_enable_summary_off">Bəyənməmələr göstərilmir</string>
|
||||
<string name="revanced_ryd_shorts_title">\"Shorts\"da bəyənməmə sayını göstər</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Bəyənməmə sayı \"Shorts\"da göstərilir</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Shorts-da görünən bəyənməmələr
|
||||
<string name="revanced_ryd_shorts_summary_on">Bəyənməmələr Shorts-da göstərilir</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Bəyənməmələr Shorts-da göstərilir
|
||||
|
||||
Məhdudiyyət: Bəyənməmələr gizli rejimdə görünmür"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">\"Bəyənməmə\"lər \"Shorts\"da gizlidir</string>
|
||||
Məhdudiyyət: Bəyənməmələr gizli rejimdə görünməyə bilər"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Bəyənməmələr Shorts-da göstərilmir</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">\"Bəyənməmə\"lər faiz olaraq</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">\"Bəyənməmə\"lər faiz olaraq göstərilir</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">\"Bəyənməmə\"lər nömrəylə göstərilir</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Bəyənməmələr faiz kimi göstərilir</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">Bəyənməmələr nömrə kimi göstərilir</string>
|
||||
<!-- Translations should use language similar to 'revanced_sb_enable_compact_skip_button' -->
|
||||
<string name="revanced_ryd_compact_layout_title">Yığcam Bəyən Düyməsi</string>
|
||||
<string name="revanced_ryd_compact_layout_summary_on">Daha kiçik en üçün hazırlanmış Bəyən düyməsi</string>
|
||||
@@ -909,20 +924,20 @@ Bu funksiya 720p və ya daha aşağı video keyfiyyəti ilə və çox sürətli
|
||||
<string name="revanced_sb_square_layout_sum_on">Düymələr və idarəedicilər kvadratdır </string>
|
||||
<string name="revanced_sb_square_layout_sum_off">Düymələr və idarəedicilər dairəvidir</string>
|
||||
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
|
||||
<string name="revanced_sb_enable_compact_skip_button">Yığcam ötürmə düyməsini istifadə et</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button">Yığcam Ötürmə düyməsini istifadə et</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_on">Ən kiçik en üçün hazırlanmış ötürmə düyməsi</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_off">Ən yaxşı görünüş üçün hazırlanan ötürmə düyməsi</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Ötürmə düyməsini avtomatik gizlət</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Ötürmə düyməsi bir neçə saniyə sonra gizlənir</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Tam bölüm üçün göstərilən ötürmə düyməsi</string>
|
||||
<string name="revanced_sb_general_skiptoast">Birbaşa ötürüləndə ani bildiriş göstər</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Ötürmə düyməsi bütün bölüm ərzində göstərilir</string>
|
||||
<string name="revanced_sb_general_skiptoast">Ötürüləndə ani bildiriş göstər</string>
|
||||
<string name="revanced_sb_general_skiptoast_sum_on">Bölüm avto-ötürüləndə bildiriş göstərilir. Nümunə görmək üçün bura toxun</string>
|
||||
<string name="revanced_sb_general_skiptoast_sum_off">Bildiriş göstərilmir. Nümunə görmək üçün bura toxun</string>
|
||||
<string name="revanced_sb_general_time_without">Bölümsüz video uzunluğun göstər</string>
|
||||
<string name="revanced_sb_general_time_without_sum_on">Video uzunluğu bütün bölümləri silir, tam video uzunluğu yanaşı mötərizədə göstərilir</string>
|
||||
<string name="revanced_sb_general_time_without_sum_off">Tam video uzunluğu göstərilir</string>
|
||||
<string name="revanced_sb_create_segment_category">Yeni bölümlər yaradılır</string>
|
||||
<string name="revanced_sb_enable_create_segment">Yeni bölüm yarat düyməsini göstər</string>
|
||||
<string name="revanced_sb_enable_create_segment">Yeni Bölüm Yarat Düyməsini Göstər</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_on">Yeni bölüm yarat düyməsi göstərilir</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_off">Yeni bölüm yarat düyməsi göstərilmir</string>
|
||||
<string name="revanced_sb_general_adjusting">Yeni bölüm irəliləyişini tənzimlə</string>
|
||||
@@ -1016,7 +1031,7 @@ Sizin istifadəçi Id-niz parol kimidir və heç vaxt paylaşmaq olmaz.
|
||||
<string name="revanced_sb_skipped_multiple_segments">Çoxlu bölümlər ötürüldü</string>
|
||||
<string name="revanced_sb_skip_automatically">Birbaşa ötür</string>
|
||||
<string name="revanced_sb_skip_automatically_once">Bir dəfə avtomatik ötür</string>
|
||||
<string name="revanced_sb_skip_showbutton">Ötürmə düyməsini göstər</string>
|
||||
<string name="revanced_sb_skip_showbutton">Ötürmə Düyməsini Göstər</string>
|
||||
<string name="revanced_sb_skip_seekbaronly">İrəliləmə cizgisində göstər</string>
|
||||
<string name="revanced_sb_skip_ignore">Qapadın</string>
|
||||
<string name="revanced_sb_submit_failed_invalid">Bölüm göndərilmir: %s</string>
|
||||
@@ -1042,9 +1057,9 @@ Artıq mövcuddur"</string>
|
||||
<string name="revanced_sb_new_segment_disabled_category">Seçimlərdə kateqoriya qeyri-aktivdir. Göndərmək üçün kateqoriyanı aktiv et.</string>
|
||||
<string name="revanced_sb_new_segment_title">Yeni SponsorBlock bölümü</string>
|
||||
<string name="revanced_sb_new_segment_mark_time_as_question">%s, yeni bölümün başlanğıcı və ya sonu kimi təyin edilsin?</string>
|
||||
<string name="revanced_sb_new_segment_mark_start">başlanğıc</string>
|
||||
<string name="revanced_sb_new_segment_mark_end">bitiş</string>
|
||||
<string name="revanced_sb_new_segment_now">indi</string>
|
||||
<string name="revanced_sb_new_segment_mark_start">Başlanğıc</string>
|
||||
<string name="revanced_sb_new_segment_mark_end">Bitmə</string>
|
||||
<string name="revanced_sb_new_segment_now">İndi</string>
|
||||
<string name="revanced_sb_new_segment_time_start">Bölüm başladığı vaxt</string>
|
||||
<string name="revanced_sb_new_segment_time_end">Bölümün bitmə vaxtı</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">Vaxtlar düzgündür?</string>
|
||||
@@ -1065,7 +1080,7 @@ Təqdim etməyə hazırdır?"</string>
|
||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Yanlış vaxt verilmişdir</string>
|
||||
<string name="revanced_sb_stats">Statistikalar</string>
|
||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||
<string name="revanced_sb_stats_connection_failure">Statistikalar müvəqqəti olaraq əlçatmazdır (API zəifdir)</string>
|
||||
<string name="revanced_sb_stats_connection_failure">Statistikalar müvəqqəti mövcud deyil (API işləmir)</string>
|
||||
<string name="revanced_sb_stats_loading">Yüklənir...</string>
|
||||
<string name="revanced_sb_stats_sb_disabled">SponsorBlock qapadıldı</string>
|
||||
<string name="revanced_sb_stats_username">İstifadəçi adınız: <b>%s</b></string>
|
||||
@@ -1283,13 +1298,13 @@ DeArrow haqqında ətraflı öyrənmək üçün bura toxun"</string>
|
||||
<string name="revanced_alt_thumbnail_stills_time_entry_2">Videonun ortası</string>
|
||||
<string name="revanced_alt_thumbnail_stills_time_entry_3">Videonun sonu</string>
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_alt_thumbnail_dearrow_error">DeArrow müvəqqəti əlçatan deyil (status kodu: %s)</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow müvəqqəti olaraq əlçatan deyil</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_error">DeArrow müvəqqəti mövcud deyil (status kodu: %s) </string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow müvəqqəti olaraq mövcud deyil</string>
|
||||
</patch>
|
||||
<patch id="misc.announcements.announcementsPatch">
|
||||
<string name="revanced_announcements_title">ReVanced elanlarını göstər</string>
|
||||
<string name="revanced_announcements_summary_on">Elanlar açılışda göstərilir</string>
|
||||
<string name="revanced_announcements_summary_off">Elanlar açılışda göstərilmir</string>
|
||||
<string name="revanced_announcements_summary_on">Elanlar başlanğıcda göstərilir</string>
|
||||
<string name="revanced_announcements_summary_off">Elanlar başlanğıcda göstərilmir</string>
|
||||
<string name="revanced_announcements_enabled_summary">Elanları açılışda göstər</string>
|
||||
<string name="revanced_announcements_connection_failed">Elan provayderinə bağlanmaq olmadı</string>
|
||||
<string name="revanced_announcements_dialog_dismiss">Ləğv et</string>
|
||||
@@ -1339,10 +1354,11 @@ Bunu aktivləşdirmə daha yüksək video keyfiyyətləri əngəlin silə bilər
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Reaksiya aktivdir</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">Orijinal səsi tələb et</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Orijinal səs istifadəsi</string>
|
||||
<string name="revanced_force_original_audio_title">Orijinal səs dilini zorla</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Orijinal səs dilini istifadə</string>
|
||||
<string name="revanced_force_original_audio_summary_off">İlkin səs istifadəsi</string>
|
||||
<string name="revanced_force_original_audio_not_available">Bu xüsusiyyəti işlətmək üçün yayım saxtalaşdırmanı iOS ötürücü növünə dəyiş</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for revanced_spoof_video_streams_screen_title -->
|
||||
<string name="revanced_force_original_audio_not_available">Bu xüsusiyyəti istifadə etmək üçün \"Saxta video yayımların\" iOS TV-yə dəyiş</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
@@ -1405,8 +1421,6 @@ Bunu aktivləşdirmə daha yüksək video keyfiyyətləri əngəlin silə bilər
|
||||
Video oynatma işləməyə bilər"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">Bu seçimi bağlamaq, video oynatma problemlərinə səbəb olar.</string>
|
||||
<string name="revanced_spoof_video_streams_client_type_title">İlkin qəbuledici</string>
|
||||
<!-- 'no auth' means no authentication -->
|
||||
<string name="revanced_spoof_video_streams_client_type_android_vr_no_auth">Android VR (təsdiqlənmə yoxdur)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">IOS-da AVC (H.264)-ni məcbur et</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video kodlama AVC (H.264)-yə məcbur edilir</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video kodlayıcı avtomatik müəyyən edilir</string>
|
||||
|
||||
@@ -161,16 +161,13 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_debug_stacktrace_summary_on">Журналы адладкі ўключаюць трасіроўку стэка</string>
|
||||
<string name="revanced_debug_stacktrace_summary_off">Журналы адладкі не ўключаюць трасіроўку стэка</string>
|
||||
<string name="revanced_debug_toast_on_error_title">Паказаць тост пры памылцы ReVanced</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Тост паказваецца, калі ўзнікае памылка</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">Тост не паказваецца, калі ўзнікае памылка</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Паказваць toast у выпадку памылкі</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">Не паказваць toast у выпадку памылкі</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"Адключэнне паведамленняў пра памылкі схавае ўсе апавяшчэнні ReVanced пра памылкі.
|
||||
|
||||
Вы не будзеце атрымліваць апавяшчэнні пра нечаканыя падзеі."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Адключыць свецянне кнопак «Мне падабаецца» і «Падпісацца»</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">Кнопкі «Падабаецца» і «Падпісацца» не будуць мігцець пры згадванні</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">Кнопкі «Падабаецца» і «Падпісацца» будуць мігцець пры згадванні</string>
|
||||
<string name="revanced_hide_album_cards_title">Схаваць карты альбома</string>
|
||||
<string name="revanced_hide_album_cards_summary_on">Карткі альбомаў схаваныя</string>
|
||||
<string name="revanced_hide_album_cards_summary_off">Паказваюцца альбомныя карткі</string>
|
||||
@@ -193,22 +190,22 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">Паказаны паліцы</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<string name="revanced_hide_join_membership_button_title">Схаваць кнопку \"Далучыцца\"</string>
|
||||
<string name="revanced_hide_join_membership_button_title">Схаваць кнопку «Далучыцца»</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">Кнопка схавана</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">Паказана кнопка</string>
|
||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Схаваць паліцу \"Для вас\" на старонцы канала</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Паліца схаваная</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Паказана паліца</string>
|
||||
<string name="revanced_hide_for_you_shelf_title">Схаваць паліцу «Для вас»</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Паліца на старонцы канала схаваная</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Паліца на старонцы канала паказаная</string>
|
||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
||||
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||
<string name="revanced_hide_notify_me_button_title">Схаваць кнопку \"Паведаміць мне\"</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">Кнопка схавана</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">Паказана кнопка</string>
|
||||
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">Схаваць рэкамендацыі \"Людзі таксама глядзелі\"</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">Рэкамендацыі схаваныя</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">Паказаны рэкамендацыі</string>
|
||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">Схаваць надпіс «Людзі таксама глядзелі»</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">Надпіс схаваны</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">Надпіс паказаны</string>
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">Схаваць кнопку \"Паказаць больш\"</string>
|
||||
@@ -224,8 +221,8 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_on">Паліца для чыпсаў схаваная</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_off">Паказана паліца для чыпсаў</string>
|
||||
<string name="revanced_hide_expandable_chip_title">Схаваць пашыраную картку пад відэа</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">Пашыраныя карткі схаваныя</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">Пашыраныя карткі паказаныя</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">Разгортваемая картка схаваная</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">Разгортваемая картка паказаная</string>
|
||||
<string name="revanced_hide_community_posts_title">Схаваць паведамленні ў супольнасці</string>
|
||||
<string name="revanced_hide_community_posts_summary_on">Паведамленні ў супольнасці схаваны</string>
|
||||
<string name="revanced_hide_community_posts_summary_off">Паказваюцца паведамленні ў супольнасці</string>
|
||||
@@ -241,7 +238,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_community_guidelines_title">Схаваць правілы супольнасці</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_on">Правілы супольнасці схаваныя</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_off">Паказаны правілы супольнасці</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">Схаваць правілы супольнасці падпісчыкаў</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">Схаваць рэкамендацыі для падпісчыкаў</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_on">Правілы супольнасці падпісчыкаў схаваны</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">Паказаны правілы супольнасці падпісчыкаў</string>
|
||||
<string name="revanced_hide_channel_member_shelf_title">Схаваць паліцу ўдзельніка канала</string>
|
||||
@@ -280,25 +277,25 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_artist_cards_title">Схаваць карткі выканаўцаў</string>
|
||||
<string name="revanced_hide_artist_cards_summary_on">Карткі выканаўцаў схаваныя</string>
|
||||
<string name="revanced_hide_artist_cards_summary_off">Паказваюцца карткі выканаўцаў</string>
|
||||
<string name="revanced_hide_attributes_section_title">Схаваць раздзел атрыбутаў</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">Раздзелы \"Выбраныя месцы\", гульні і музыка схаваны</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">Паказваюцца раздзелы \"Выбраныя месцы\", Гульні і Музыка</string>
|
||||
<string name="revanced_hide_chapters_section_title">Схаваць раздзел \"Раздзелы\"</string>
|
||||
<string name="revanced_hide_attributes_section_title">Схаваць атрыбуты</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">Раздзелы «Папулярныя месцы», «Гульні», «Музыка» і «Людзі, якіх згадвалі» схаваныя</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">Раздзелы «Папулярныя месцы», «Гульні», «Музыка» і «Людзі, якіх згадвалі» паказаныя</string>
|
||||
<string name="revanced_hide_chapters_section_title">Схаваць раздзелы</string>
|
||||
<string name="revanced_hide_chapters_section_summary_on">Раздзел раздзелаў схаваны</string>
|
||||
<string name="revanced_hide_chapters_section_summary_off">Паказваецца раздзел раздзелаў</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">Схаваць раздзел «Як быў зроблены гэты кантэнт»</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">Раздзел «Як быў зроблены гэты кантэнт» схаваны</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">Раздзел «Як быў зроблены гэты кантэнт» паказаны</string>
|
||||
<string name="revanced_hide_podcast_section_title">Схаваць раздзел \"Даследаваць падкаст\"</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Раздзел \"Агляд падкаста\" схаваны</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Паказаны раздзел \"Агляд падкаста\"</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Схаваць раздзел інфармацыйных карт</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">Схаваць «Як быў створаны гэты кантэнт»</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">Раздзел «Як быў створаны гэты кантэнт» схаваны</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">Раздзел «Як быў створаны гэты кантэнт» паказаны</string>
|
||||
<string name="revanced_hide_podcast_section_title">Схаваць «Пазнаёмцеся з падкастам»</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Раздзел «Пазнаёмцеся з падкастам» схаваны</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Раздзел «Пазнаёмцеся з падкастам» паказаны</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Схаваць інфармацыйныя карткі</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Раздзел інфармацыйных картак схаваны</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Паказваецца раздзел інфармацыйных карт</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Схаваць раздзел «Ключавыя паняцці»</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Раздзел \"Ключавыя паняцці\" схаваны</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Паказаны раздзел «Ключавыя паняцці»</string>
|
||||
<string name="revanced_hide_transcript_section_title">Схаваць раздзел стэнаграмы</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Схаваць «Ключавыя канцэпцыі»</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Раздзел «Ключавыя канцэпцыі» схаваны</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Раздзел «Ключавыя канцэпцыі» паказаны</string>
|
||||
<string name="revanced_hide_transcript_section_title">Схаваць стэнаграму</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Раздзел стэнаграмы схаваны</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Паказваецца раздзел стэнаграмы</string>
|
||||
<string name="revanced_hide_description_components_screen_title">Апісанне відэа</string>
|
||||
@@ -316,27 +313,27 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Паказана ў звязаных відэа</string>
|
||||
<string name="revanced_comments_screen_title">Каментарыі</string>
|
||||
<string name="revanced_comments_screen_summary">Схаваць або паказаць кампаненты раздзела каментарыяў</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">Схаваць \"Зводка чата\" </string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">«Агляд чата» схаваны</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">«Агляд чата» паказаны</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">Схаваць «Зводку чата»</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">Зводка чата схаваная</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">Зводка чата паказаная</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">Схаваць загаловак \"Каментарыі ўдзельнікаў\"</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">Загаловак \"Каментарыі ўдзельнікаў\" схаваны</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">Паказаны загаловак \"Каментарыі ўдзельнікаў\"</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">Загаловак «Каментары ўдзельнікаў» схаваны</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">Загаловак «Каментары ўдзельнікаў» паказаны</string>
|
||||
<string name="revanced_hide_comments_section_title">Схаваць раздзел каментарыяў</string>
|
||||
<string name="revanced_hide_comments_section_summary_on">Раздзел каментарыяў схаваны</string>
|
||||
<string name="revanced_hide_comments_section_summary_off">Паказваецца раздзел каментарыяў</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_title">Схаваць кнопку \"Створиць Short\"</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">Кнопка \"Створиць Short\" схавана</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Кнопка \"Створиць Short\" паказана</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">Кнопка «Стварыць Shorts» схаваная</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Кнопка «Стварыць Shorts» паказаная</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">Схаваць кнопкі эмодзі і адзнак часу</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">Кнопкі эмодзі і адзнак часу схаваныя</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">Кнопкі эмодзі і адзнак часу паказаныя</string>
|
||||
<string name="revanced_hide_comments_preview_comment_title">Схаваць каментарый для папярэдняга прагляду</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_on">Каментарый перад праглядам схаваны</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_off">Паказваецца папярэдні прагляд каментарыя</string>
|
||||
<string name="revanced_hide_comments_thanks_button_title">Схаваць кнопку \"Дзякуй\"\"</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_on">Кнопка падзякі схавана</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_off">Паказана кнопка падзякі</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">Схаваць метку часу і кнопкі эмодзі</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">Кнопкі меткі часу і эмодзі схаваны</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">Паказваюцца кнопкі меткі часу і эмодзі</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">Схаваць YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Doodles у панэлі пошуку схаваны</string>
|
||||
@@ -417,12 +414,12 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_on">Паліца крамы схавана</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_off">Паліца крамы паказана</string>
|
||||
<string name="revanced_hide_shopping_links_title">Схаваць спасылкі на пакупкі ў апісанні відэа</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">Спасылкі на пакупкі схаваныя</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">Паказваюцца спасылкі на пакупкі</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">Спасылкі на пакупкі ў апісанні відэа схаваныя</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">Спасылкі на пакупкі ў апісанні відэа паказаныя</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Схавайце кнопку \"Наведайце краму\" на старонках канала</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Кнопка схавана</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Паказана кнопка</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Кнопка на старонцы канала схаваная</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Кнопка на старонцы канала паказаная</string>
|
||||
<string name="revanced_hide_web_search_results_title">Схаваць вынікі вэб-пошуку</string>
|
||||
<string name="revanced_hide_web_search_results_summary_on">Вынікі вэб-пошуку схаваныя</string>
|
||||
<string name="revanced_hide_web_search_results_summary_off">Паказваюцца вынікі вэб-пошуку</string>
|
||||
@@ -446,10 +443,10 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_share_copy_url_success">URL скапіраваны ў буфер абмену</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">URL-адрас з пазнакай часу скапіраваны</string>
|
||||
<string name="revanced_copy_video_url_title">Паказаць кнопку скапіравання URL відэа</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Паказана кнопка. Націсніце, каб скапіяваць URL відэа. Націсніце і ўтрымлівайце, каб скапіяваць URL відэа з пазнакай часу</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Кнопка паказана. Націсніце, каб скапіяваць URL відэа. Націсніце і ўтрымлівайце, каб скапіяваць з пазнакай часу</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Кнопка не паказваецца</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Паказаць кнопку URL-адрас з часовай пазнакай</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Паказана кнопка. Націсніце, каб скапіяваць URL відэа з пазнакай часу. Націсніце і ўтрымлівайце, каб скапіяваць відэа без пазнакі часу</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Кнопка паказана. Націсніце, каб скапіяваць URL відэа з пазнакай часу. Націсніце і ўтрымлівайце, каб скапіяваць без пазнакі часу</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Кнопка не паказваецца</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
@@ -462,8 +459,8 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_external_downloader_screen_title">Знешнія загрузкі</string>
|
||||
<string name="revanced_external_downloader_screen_summary">Налады для выкарыстання вонкавага загрузніка</string>
|
||||
<string name="revanced_external_downloader_title">Паказаць знешнюю кнопку загрузкі</string>
|
||||
<string name="revanced_external_downloader_summary_on">Кнопка загрузкі паказваецца ў плэеры</string>
|
||||
<string name="revanced_external_downloader_summary_off">Кнопка загрузкі не адлюстроўваецца ў плэеры</string>
|
||||
<string name="revanced_external_downloader_summary_on">Кнопка загрузкі ў прайгравальніку паказаная</string>
|
||||
<string name="revanced_external_downloader_summary_off">Кнопка загрузкі ў прайгравальніку не паказаная</string>
|
||||
<!-- 'download action button' should be translated using the same wording as the translation of 'revanced_hide_download_button_title' -->
|
||||
<string name="revanced_external_downloader_action_button_title">Перавызначыць кнопку дзеянні спампоўкі</string>
|
||||
<string name="revanced_external_downloader_action_button_summary_on">Кнопка \"Спампаваць\" адкрывае ваш знешні загрузнік</string>
|
||||
@@ -484,11 +481,15 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
||||
<string name="revanced_swipe_brightness_title">Уключыць жэст яркасці</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">Правядзенне па яркасці ўключана</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">Правядзенне пальцам па яркасці адключана</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">"Поўнаэкранны жэст правядзення для яркасці ўключаны
|
||||
|
||||
Наладжвайце яркасць, праводзячы вертыкальна па левым баку экрана"</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">Поўнаэкранны жэст правядзення для яркасці выключаны</string>
|
||||
<string name="revanced_swipe_volume_title">Уключыць жэст гучнасці</string>
|
||||
<string name="revanced_swipe_volume_summary_on">Правядзенне пальцам па гучнасці ўключана</string>
|
||||
<string name="revanced_swipe_volume_summary_off">Правядзенне пальцам па гучнасці адключана</string>
|
||||
<string name="revanced_swipe_volume_summary_on">"Правядзенне пальцам для рэгулявання гучнасці ва ўвесь экран уключана
|
||||
|
||||
Рэгулюйце гучнасць, праводзячы пальцам вертыкальна па правай частцы экрана"</string>
|
||||
<string name="revanced_swipe_volume_summary_off">Правядзенне пальцам для рэгулявання гучнасці ва ўвесь экран выключана</string>
|
||||
<string name="revanced_swipe_press_to_engage_title">Уключыць жэст \"націсканне для правядзення пальцам\"</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_on">Правядзенне пальцам уключана</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">Правядзенне пальцам адключана</string>
|
||||
@@ -501,16 +502,19 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">Уключыць жэст аўтаматычнай яркасці</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">Правядзіце пальцам уніз да самага нізкага значэння яркасці, каб уключыць аўтаматычную яркасць</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">Правядзенне пальцам уніз да самага нізкага значэння не ўключае аўтаматычную яркасць</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">Аўто</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">Тайм-аўт накладання пальцам</string>
|
||||
<string name="revanced_swipe_overlay_timeout_summary">Працягласць бачнага накладання ў мілісекундах</string>
|
||||
<string name="revanced_swipe_text_overlay_size_title">Памер накладанага тэксту</string>
|
||||
<string name="revanced_swipe_text_overlay_size_summary">Памер тэксту для накладання пальцам</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_title">Непразрыстасць фону накладкі пракруткі</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_summary">Значэнне непразрыстасці паміж 0-100</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_invalid_toast">Непразрыстасць пракруткі павінна быць паміж 0-100</string>
|
||||
<string name="revanced_swipe_threshold_title">Парог велічыні пальцам</string>
|
||||
<string name="revanced_swipe_threshold_summary">Велічыня парогавага значэння для правядзення пальцам</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_title">Паказваць кругавое накладанне</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_summary_on">Кругавое накладанне паказваецца</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_summary_off">Гарызантальнае накладанне паказваецца</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_title">Уключыць мінімальны стыль</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_summary_on">Уключаны мінімальны стыль накладання</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_summary_off">Мінімальны стыль накладання выключаны</string>
|
||||
<string name="revanced_swipe_change_video_title">Уключыць зьмену відэа праз правядзенне пальцам</string>
|
||||
<string name="revanced_swipe_change_video_summary_on">Правядзенне пальцам у рэжыме поўнага экрана зьменіць відэа на наступнае/папярэдняе</string>
|
||||
<string name="revanced_swipe_change_video_summary_off">Правядзенне пальцам у рэжыме поўнага экрана не зьменіць відэа на наступнае/папярэдняе</string>
|
||||
@@ -523,6 +527,9 @@ Second \"item\" text"</string>
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<string name="revanced_hide_buttons_screen_title">Кнопкі дзеянняў</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">Схаваць або паказаць кнопкі пад відэа</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Адключыць свецянне кнопак «Мне падабаецца» і «Падпісацца»</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">Кнопкі «Падабаецца» і «Падпісацца» не будуць мігцець пры згадванні</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">Кнопкі «Падабаецца» і «Падпісацца» будуць мігцець пры згадванні</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">Схаваць \"Падабаецца\" і \"Не падабаецца\"</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">Кнопкі \"Падабаецца\" і \"Не падабаецца\" схаваны</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">Паказваюцца кнопкі \"Падабаецца\" і \"Не падабаецца\"</string>
|
||||
@@ -575,12 +582,18 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_subscriptions_button_title">Схаваць падпіскі</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_on">Кнопка \"Падпіскі\" схавана</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Паказана кнопка \"Падпіскі\"</string>
|
||||
<string name="revanced_hide_notifications_button_title">Схаваць апавяшчэнні</string>
|
||||
<string name="revanced_hide_notifications_button_summary_on">Кнопка апавяшчэнняў схаваная</string>
|
||||
<string name="revanced_hide_notifications_button_summary_off">Кнопка апавяшчэнняў паказаная</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">Пераключальнік \"Стварыць з апавяшчэннямі\"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"Кнопка «Стварыць» заменена кнопкай «Апавяшчэнні»
|
||||
|
||||
Заўвага: Уключэнне гэтага таксама прымусова схавае відэарэкламу"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">Кнопка \"Стварыць\" не ўзаемадзейнічае з кнопкай \"Апавяшчэнні\"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_user_dialog_message">"Адключэнне гэтай налады таксама адключыць блакіроўку рэкламы Shorts.
|
||||
|
||||
Калі змена гэтай налады не ўступае ў сілу, паспрабуйце пераключыцца ў рэжым інкогніта."</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">Схаваць меткі кнопак навігацыі</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">Цэтлікі схаваныя</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">Этыкеткі паказаны</string>
|
||||
@@ -795,10 +808,13 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_on">Панэль навігацыі схавана</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">Паказана панэль навігацыі</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
||||
<string name="revanced_disable_suggested_video_end_screen_title">Адключыць канчатковы экран прапанаванага відэа</string>
|
||||
<string name="revanced_disable_suggested_video_end_screen_summary_on">Прапанаваныя відэа будуць адключаны</string>
|
||||
<string name="revanced_disable_suggested_video_end_screen_summary_off">Будуць паказаны прапанаваныя відэа</string>
|
||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||
<string name="revanced_end_screen_suggested_video_title">Схаваць прапанаванае відэа на канчатковым экране</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_on">"Прапанаванае відэа на канчатковым экране будзе схавана, калі аўтаматычнае прайграванне выключана.
|
||||
|
||||
Аўтаматычнае прайграванне можна змяніць у наладах YouTube:
|
||||
Налады → Прайграванне → Аўтаматычнае прайграванне наступнага відэа"</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_off">Паказваць прапанаванае відэа на канчатковым экране</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.time.hideTimestampPatch">
|
||||
<string name="revanced_hide_timestamp_title">Схаваць метку часу відэа</string>
|
||||
@@ -831,7 +847,7 @@ Second \"item\" text"</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_ryd_failure_connection_timeout">Адзнакі \"Не падабаецца\" часова недаступныя (час чакання API скончыўся)</string>
|
||||
<string name="revanced_ryd_failure_connection_status_code">Дызлайкі недаступныя (статус %d)</string>
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">Дызлайкі недаступныя (дасягнуты ліміт кліенцкага API)</string>
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">Недаступныя дызлайкі (ліміт API кліента)</string>
|
||||
<string name="revanced_ryd_failure_generic">Не падабаецца (%s)</string>
|
||||
<!-- Toast shown if the user enables RYD while a video is opened, and then tries to vote for the video. -->
|
||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Перазагрузіце відэа, каб прагаласаваць з дапамогай функцыі \"Вярнуць не падабаецца YouTube\"</string>
|
||||
@@ -840,14 +856,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_ryd_enable_summary_on">Дызлайкі паказаны</string>
|
||||
<string name="revanced_ryd_enable_summary_off">Дызлайкі не паказваюцца</string>
|
||||
<string name="revanced_ryd_shorts_title">Паказвайце \"не падабаецца\" на Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Адзнакі \"не падабаецца\" ў Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Непападання паказаны на Shorts
|
||||
<string name="revanced_ryd_shorts_summary_on">Дызлайкі на Shorts паказаныя</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Дызлайкі на Shorts паказаныя
|
||||
|
||||
Абмежаванне: Непападання могуць не з'яўляцца ў рэжыме інкогніта"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Дызлакі схаваныя ў Shorts</string>
|
||||
Абмежаванне: дызлайкі могуць не адлюстроўвацца ў рэжыме інкогніта"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Дызлайкі на Shorts не паказаныя</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">Дызлайкі ў працэнтах</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Неўпадабанні паказаны ў працэнтах</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">Неўпадабанні паказаны ў выглядзе колькасці</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Дызлайкі паказаны ў працэнтах</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">Дызлайкі паказаны лічбай</string>
|
||||
<!-- Translations should use language similar to 'revanced_sb_enable_compact_skip_button' -->
|
||||
<string name="revanced_ryd_compact_layout_title">Кампактны дызайн кнопак «Падабаецца» і «Не падабаецца»</string>
|
||||
<string name="revanced_ryd_compact_layout_summary_on">Кнопка \"Падабаецца\" ў стылі мінімальнай шырыні</string>
|
||||
@@ -909,20 +925,20 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_sb_square_layout_sum_on">Кнопкі і элементы кіравання квадратныя</string>
|
||||
<string name="revanced_sb_square_layout_sum_off">Кнопкі і элементы кіравання закруглены</string>
|
||||
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
|
||||
<string name="revanced_sb_enable_compact_skip_button">Выкарыстоўвайце кнопку кампактнага пропуску</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button">Выкарыстоўваць кампактную кнопку «Прапусціць»</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_on">Кнопка \"Прапусціць\" у стылі мінімальнай шырыні</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_off">Кнопка \"Прапусціць\" аформлена для лепшага выгляду</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Аўтаматычна хаваць кнопку пропуску</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Аўтаматычна хаваць кнопку «Прапусціць»</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Кнопка \"Прапусціць\" скрываецца праз некалькі секунд</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Кнопка \"Прапусціць\" адлюстроўваецца для ўсяго сегмента</string>
|
||||
<string name="revanced_sb_general_skiptoast">Паказаць тост пры аўтаматычным пропуску</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Кнопка «Прапусціць» паказана для ўсяго сегмента</string>
|
||||
<string name="revanced_sb_general_skiptoast">Паказваць toast пры пропуску</string>
|
||||
<string name="revanced_sb_general_skiptoast_sum_on">Тост паказваецца, калі сегмент аўтаматычна прапускаецца. Націсніце тут, каб убачыць прыклад</string>
|
||||
<string name="revanced_sb_general_skiptoast_sum_off">Тост не паказваецца. Націсніце тут, каб убачыць прыклад</string>
|
||||
<string name="revanced_sb_general_time_without">Паказаць працягласць відэа без сегментаў</string>
|
||||
<string name="revanced_sb_general_time_without_sum_on">Працягласць відэа мінус усе сегменты, паказана ў дужках побач з поўнай працягласцю відэа</string>
|
||||
<string name="revanced_sb_general_time_without_sum_off">Паказана поўная даўжыня відэа</string>
|
||||
<string name="revanced_sb_create_segment_category">Стварэнне новых сегментаў</string>
|
||||
<string name="revanced_sb_enable_create_segment">Паказаць кнопку стварэння новага сегмента</string>
|
||||
<string name="revanced_sb_enable_create_segment">Паказваць кнопку «Стварыць новы сегмент»</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_on">Паказана кнопка \"Стварыць новы сегмент\"</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_off">Кнопка \"Стварыць новы сегмент\" не паказваецца</string>
|
||||
<string name="revanced_sb_general_adjusting">Адрэгулюйце новы крок сегмента</string>
|
||||
@@ -1017,7 +1033,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_sb_skipped_multiple_segments">Прапушчаны некалькі сегментаў</string>
|
||||
<string name="revanced_sb_skip_automatically">Прапусціць аўтаматычна</string>
|
||||
<string name="revanced_sb_skip_automatically_once">Прапусціць аўтаматычна адзін раз</string>
|
||||
<string name="revanced_sb_skip_showbutton">Паказаць кнопку пропуску</string>
|
||||
<string name="revanced_sb_skip_showbutton">Паказваць кнопку «Прапусціць»</string>
|
||||
<string name="revanced_sb_skip_seekbaronly">Паказаць на панэлі пошуку</string>
|
||||
<string name="revanced_sb_skip_ignore">Адключыць</string>
|
||||
<string name="revanced_sb_submit_failed_invalid">Немагчыма адправіць сегмент: %s</string>
|
||||
@@ -1043,9 +1059,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_sb_new_segment_disabled_category">Катэгорыя адключана ў наладах. Уключыце катэгорыю для адпраўкі.</string>
|
||||
<string name="revanced_sb_new_segment_title">Новы сегмент SponsorBlock</string>
|
||||
<string name="revanced_sb_new_segment_mark_time_as_question">Усталяваць %s у якасці пачатку або канца новага сегмента?</string>
|
||||
<string name="revanced_sb_new_segment_mark_start">пачаць</string>
|
||||
<string name="revanced_sb_new_segment_mark_end">канец</string>
|
||||
<string name="revanced_sb_new_segment_now">зараз</string>
|
||||
<string name="revanced_sb_new_segment_mark_start">Пачатак</string>
|
||||
<string name="revanced_sb_new_segment_mark_end">Канец</string>
|
||||
<string name="revanced_sb_new_segment_now">Цяпер</string>
|
||||
<string name="revanced_sb_new_segment_time_start">Час пачатку сегмента</string>
|
||||
<string name="revanced_sb_new_segment_time_end">Час заканчэння сегмента</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">Ці правільны час?</string>
|
||||
@@ -1289,8 +1305,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.announcements.announcementsPatch">
|
||||
<string name="revanced_announcements_title">Паказаць аб\"явы ReVanced</string>
|
||||
<string name="revanced_announcements_summary_on">Аб\"явы паказваюцца пры запуску</string>
|
||||
<string name="revanced_announcements_summary_off">Аб\"явы не паказваюцца пры запуску</string>
|
||||
<string name="revanced_announcements_summary_on">Анонсы пры запуску паказаны</string>
|
||||
<string name="revanced_announcements_summary_off">Анонсы пры запуску не паказаны</string>
|
||||
<string name="revanced_announcements_enabled_summary">Паказваць аб\"явы пры запуску</string>
|
||||
<string name="revanced_announcements_connection_failed">Не ўдалося падключыцца да пастаўшчыка аб\"яў</string>
|
||||
<string name="revanced_announcements_dialog_dismiss">расслабіцца</string>
|
||||
@@ -1340,10 +1356,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Тактыльныя сігналы ўключаны</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">Вымушанае арыгінальнае аўдыё</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Выкарыстанне арыгінальнага аўдыё</string>
|
||||
<string name="revanced_force_original_audio_title">Вымушаная арыгінальная мова аўдыё</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Выкарыстоўваць арыгінальную мову аўдыя</string>
|
||||
<string name="revanced_force_original_audio_summary_off">Выкарыстанне аўдыё па змаўчанні</string>
|
||||
<string name="revanced_force_original_audio_not_available">Каб выкарыстоўваць гэтую функцыю, зменіце спафінг патоку на тып кліента iOS</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for revanced_spoof_video_streams_screen_title -->
|
||||
<string name="revanced_force_original_audio_not_available">Каб выкарыстоўваць гэту функцыю, змяніце параметр \"Падрабляць відэаструмені\" на iOS TV</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
@@ -1406,8 +1423,6 @@ Second \"item\" text"</string>
|
||||
Прайграванне відэа можа не працаваць"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">Адключэнне гэтай налады можа выклікаць праблемы з прайграваннем відэа.</string>
|
||||
<string name="revanced_spoof_video_streams_client_type_title">Клиент по умолчанию</string>
|
||||
<!-- 'no auth' means no authentication -->
|
||||
<string name="revanced_spoof_video_streams_client_type_android_vr_no_auth">Android VR (няма аўтэнтыфікацыі)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Вымусіць iOS AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Відэакaдэк зафіксаваны ў AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Відэакaдэк вызначаецца аўтаматычна</string>
|
||||
|
||||
@@ -161,16 +161,13 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_debug_stacktrace_summary_on">Дневникът за отстраняване на грешки съдържа следи от стека</string>
|
||||
<string name="revanced_debug_stacktrace_summary_off">Дневникът за отстраняване на грешки не съдържа следи от стека</string>
|
||||
<string name="revanced_debug_toast_on_error_title">Покажи системно съобщение при ReVanced грешка</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Системно съобщение ще бъде показано, ако се появи грешка</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">Системно съобщение няма да бъде показано, ако се появи грешка</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Показва се toast, ако възникне грешка</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">Не се показва toast, ако възникне грешка</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"Изключването на изскачащи съобщения за грешки крие всички известия за грешки на ReVanced.
|
||||
|
||||
Няма да бъдете уведомени за неочаквани събития."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Деактивиране на светенето на бутон Like и Subscribe</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">Бутон Like и Subscribe няма да светят при споменаване</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">Бутон Like и Subscribe ще светят при споменаване</string>
|
||||
<string name="revanced_hide_album_cards_title">\"Карти на албумите\"</string>
|
||||
<string name="revanced_hide_album_cards_summary_on">Албумните карти са скрити</string>
|
||||
<string name="revanced_hide_album_cards_summary_off">Албумните карти се показват</string>
|
||||
@@ -193,22 +190,22 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">Хоризонтални секции се показват</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<string name="revanced_hide_join_membership_button_title">Скриване на бутона \'Присъедини се\'</string>
|
||||
<string name="revanced_hide_join_membership_button_title">Скриване на бутона \"Присъединяване\"</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">Бутона Покажи още е скрит</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">Бутона \"Уведоми ме\" се показва</string>
|
||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Скриване на секцията \'За вас\' в страницата на канала</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Секцията \'За Вас\' е скрита</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Секцията \'За Вас\' се показва</string>
|
||||
<string name="revanced_hide_for_you_shelf_title">Скриване на рафта \"За вас\"</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Рафтът в страницата на канала е скрит</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Рафтът в страницата на канала е показан</string>
|
||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
||||
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||
<string name="revanced_hide_notify_me_button_title">Скриване на бутона \"Уведоми ме\"</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">Бутона \"Уведоми ме\" е скрит</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">Бутона \"Уведоми ме\" се показва</string>
|
||||
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">Скриване на препоръките \'Други харесват също\'</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">Препоръките са скрити</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">Препоръките се показват</string>
|
||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">Скриване на етикета \"Хората също гледаха\"</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">Етикетът е скрит</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">Етикетът е показан</string>
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">Скриване на бутона \"Покажи още\"</string>
|
||||
@@ -224,8 +221,8 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_on">Рафтът \"Chip\" е скрит</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_off">Рафтовете със снимки се показват</string>
|
||||
<string name="revanced_hide_expandable_chip_title">Скрий разширяемата карта под видеоклиповете</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">Разширяемите карти са скрити</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">Разширяемите карти се показват</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">Разгъваемата карта е скрита</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">Разгъваемата карта е показана</string>
|
||||
<string name="revanced_hide_community_posts_title">Скриване на публикациите от общността</string>
|
||||
<string name="revanced_hide_community_posts_summary_on">Насоките на общността са скрити</string>
|
||||
<string name="revanced_hide_community_posts_summary_off">Последните публикации са показани</string>
|
||||
@@ -241,7 +238,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_community_guidelines_title">Скриване на насоките на общността</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_on">Насоките на общността са скрити</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_off">Скриване на насоките за общността на абонатите</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">Скриване на насоките за общността на абонатите</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">Скриване на указанията за абонатори</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_on">Насоките за общността са скрити</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">Насоките за общността са показани</string>
|
||||
<string name="revanced_hide_channel_member_shelf_title">Скриване на секцията с членуващи</string>
|
||||
@@ -280,25 +277,25 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_artist_cards_title">Скриване на картите на артистите</string>
|
||||
<string name="revanced_hide_artist_cards_summary_on">Картите на изпълнителите са скрити</string>
|
||||
<string name="revanced_hide_artist_cards_summary_off">Показват се карти на артисти</string>
|
||||
<string name="revanced_hide_attributes_section_title">Скриване на секцията с атрибути</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">„Популярни места“, „Игри“ и „Музика“ под описанието са скрити</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">„Популярни места“, „Игри“ и „Музика“ под описанието се показват</string>
|
||||
<string name="revanced_hide_chapters_section_title">Скриване на секцията с заглавия</string>
|
||||
<string name="revanced_hide_attributes_section_title">Скриване на атрибути</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">Секциите \"Препоръчани места\", \"Игри\", \"Музика\" и \"Споменати хора\" са скрити</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">Секциите \"Препоръчани места\", \"Игри\", \"Музика\" и \"Споменати хора\" са показани</string>
|
||||
<string name="revanced_hide_chapters_section_title">Скриване на глави</string>
|
||||
<string name="revanced_hide_chapters_section_summary_on">Секцията с заглавия е скрита</string>
|
||||
<string name="revanced_hide_chapters_section_summary_off">Секцията с заглавия се показва</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">Скриване на секцията \'Как е създадено това съдържание\'</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">Секцията \'Как е създадено това съдържание\' е скрита</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">Секцията \'Как е създадено това съдържание\' се показва</string>
|
||||
<string name="revanced_hide_podcast_section_title">Скриване секцията „Разгледайте подкаста“</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">\"Разгледайте подкаста\" е скрита</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">\"Разгледайте подкаста\" се показва</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Скриване на раздела за информационни карти</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">Скриване на \"Как е създадено това съдържание\"</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">Секцията \"Как е създадено това съдържание\" е скрита</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">Секцията \"Как е създадено това съдържание\" е показана</string>
|
||||
<string name="revanced_hide_podcast_section_title">Скриване на \"Разгледайте подкаста\"</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Секцията \"Разгледайте подкаста\" е скрита</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Секцията \"Разгледайте подкаста\" е показана</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Скриване на инфо. карти</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Разделът за информационни карти е скрит</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Разделът за информационни карти е показан</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Раздел „Ключови понятия“</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Раздел „Ключови понятия“ са скрит</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Раздел „Ключови понятия“ се показва</string>
|
||||
<string name="revanced_hide_transcript_section_title">Скриване на раздела за транскрипция</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Скриване на \"Основни концепции\"</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Секцията \"Основни концепции\" е скрита</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Секцията \"Основни концепции\" е показана</string>
|
||||
<string name="revanced_hide_transcript_section_title">Скриване на транскрипт</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Разделът за транскрипция е скрит</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Разделът за транскрипция е показан</string>
|
||||
<string name="revanced_hide_description_components_screen_title">Описание на видеото</string>
|
||||
@@ -316,27 +313,27 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Показано в сродни видеоклипове</string>
|
||||
<string name="revanced_comments_screen_title">Коментари</string>
|
||||
<string name="revanced_comments_screen_summary">Скриване или показване на секцията за коментари</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">Скрий „Резюме на чата“</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">\'Резюме на чата\' е скрито</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">\'Резюме на чата\' е показано</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">Скриване на \"Резюме на чата\"</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">Резюмето на чата е скрито</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">Резюмето на чата е показано</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">Скриване на „Коментари, направени от членове“</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">„Коментари от членове“ са скрити</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">„Коментари от членове“ се показват</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">Заглавието на коментарите от членове е скрито</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">Заглавието на коментарите от членове е показано</string>
|
||||
<string name="revanced_hide_comments_section_title">Скриване на секцията с коментари</string>
|
||||
<string name="revanced_hide_comments_section_summary_on">Секцията с коментари е скрита</string>
|
||||
<string name="revanced_hide_comments_section_summary_off">Секцията с коментари се показва</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_title">Бутон за създаване на Shorts</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">Бутон за създаване на Shorts е скрит</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Бутон за създаване на Shorts се показва</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">Бутонът \"Създаване на Short\" е скрит</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Бутонът \"Създаване на Short\" е показан</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">Скриване на бутоните за емоджи и времеви печат</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">Бутоните за емоджи и времеви печат са скрити</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">Бутоните за емоджи и времеви печат са показани</string>
|
||||
<string name="revanced_hide_comments_preview_comment_title">Преглед на коментари</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_on">Прегледа на коментари е скрит</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_off">Прегледа на коментари се показва</string>
|
||||
<string name="revanced_hide_comments_thanks_button_title">Скрий бутона за харесване</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_on">Бутона за благодарност е скрит</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_off">Бутона за благодарност се показва</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">Бутони в лентата на прогреса и емотикони</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">Бутоните са скрити</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">Бутоните се показват</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Doodles в лентата за търсене са скрити</string>
|
||||
@@ -417,12 +414,12 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_on">Рафта за пазаруване е скрит</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_off">Рафта за пазаруване се показва</string>
|
||||
<string name="revanced_hide_shopping_links_title">Скриване на връзки за пазаруване</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">Връзките за пазаруване са скрити</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">Връзките за пазаруване се показват</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">Връзките за пазаруване в описанието на видеоклипа са скрити</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">Връзките за пазаруване в описанието на видеоклипа са показани</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Скрийте бутона „Посетете магазина“ на страниците на каналите</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Бутона Покажи още е скрит</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Бутона \"Уведоми ме\" се показва</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Бутонът в страницата на канала е скрит</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Бутонът в страницата на канала е показан</string>
|
||||
<string name="revanced_hide_web_search_results_title">Скриване на резултатите от уеб търсенето</string>
|
||||
<string name="revanced_hide_web_search_results_summary_on">Резултатите от уеб търсенето са скрити</string>
|
||||
<string name="revanced_hide_web_search_results_summary_off">Резултатите от уеб търсенето са показани.</string>
|
||||
@@ -446,10 +443,10 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_share_copy_url_success">Връзката е копирана в клипборда.</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">URL адрес с отметка за време, копиран в клипборда.</string>
|
||||
<string name="revanced_copy_video_url_title">Показване на бутона за копиране на URL адреса на видеоклипа</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Показан е бутон. Докоснете, за да копирате URL на видеото. Докоснете и задръжте, за да копирате URL адреса на видеоклипа с клеймо за време</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Бутонът е показан. Докоснете, за да копирате URL адреса на видеоклипа. Докоснете и задръжте, за да копирате с времеви печат</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Бутонът не е показан</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Показване на бутона за копиране на URL адреса на времевия отпечатък на видеоклипа</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Показан е бутон. Докоснете, за да копирате URL адреса на видеоклипа с клеймо за време. Докоснете и задръжте, за да копирате видеоклип без клеймо за време</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Бутонът е показан. Докоснете, за да копирате URL адреса на видеоклипа с времеви печат. Докоснете и задръжте, за да копирате без времеви печат</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Бутонът не е показан</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
@@ -462,8 +459,8 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_external_downloader_screen_title">Външни изтегляния</string>
|
||||
<string name="revanced_external_downloader_screen_summary">Настройки за използване на външно приложение за изтегляне</string>
|
||||
<string name="revanced_external_downloader_title">Показване на бутона за изтегляне чрез външно приложение</string>
|
||||
<string name="revanced_external_downloader_summary_on">Бутонът за изтегляне е показан в плейъра</string>
|
||||
<string name="revanced_external_downloader_summary_off">Бутонът за изтегляне не е показан в плейъра</string>
|
||||
<string name="revanced_external_downloader_summary_on">Бутонът за изтегляне в плейъра е показан</string>
|
||||
<string name="revanced_external_downloader_summary_off">Бутонът за изтегляне в плейъра не е показан</string>
|
||||
<!-- 'download action button' should be translated using the same wording as the translation of 'revanced_hide_download_button_title' -->
|
||||
<string name="revanced_external_downloader_action_button_title">Заместване на бутона Download</string>
|
||||
<string name="revanced_external_downloader_action_button_summary_on">Бутонът за изтегляне отваря избраното от Вас външно приложение за изтегляне</string>
|
||||
@@ -484,11 +481,15 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
||||
<string name="revanced_swipe_brightness_title">Задаване на яркост чрез плъзгане</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">Опцията за превъртане с плъзгане за промяна на яркостта е активирана</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">Опцията за превъртане с плъзгане за промяна на яркостта е деактивирана</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">"Плъзгането за яркост на цял екран е активирано
|
||||
|
||||
Регулирайте яркостта, като плъзгате вертикално от лявата страна на екрана"</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">Плъзгането за яркост на цял екран е деактивирано</string>
|
||||
<string name="revanced_swipe_volume_title">Настройване на звука чрез плъзгане</string>
|
||||
<string name="revanced_swipe_volume_summary_on">Обемът чрез плъзване е активен</string>
|
||||
<string name="revanced_swipe_volume_summary_off">Обемът чрез плъзване е деактивиран</string>
|
||||
<string name="revanced_swipe_volume_summary_on">"Плъзгането за сила на звука на цял екран е активирано
|
||||
|
||||
Регулирайте силата на звука, като плъзнете вертикално от дясната страна на екрана"</string>
|
||||
<string name="revanced_swipe_volume_summary_off">Плъзгането за сила на звука на цял екран е деактивирано</string>
|
||||
<string name="revanced_swipe_press_to_engage_title">Активиране на жеста натискане за преместване</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_on">Плъзгането чрез натискане е активирано</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">Плъзгането чрез натискане е деактивирано</string>
|
||||
@@ -501,16 +502,19 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">Задаване на яркост чрез плъзгане</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">Плъзгането надолу до най-ниската стойност на жеста за яркост, за да се активира автоматичната яркост</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">Плъзгането надолу до най-ниската стойност на жеста за яркост, без дасе активира автоматичната яркост</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">Авто</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">Задръжка на плъзгащата контрола за показване</string>
|
||||
<string name="revanced_swipe_overlay_timeout_summary">Време за което плъзгащата контрола е видима.</string>
|
||||
<string name="revanced_swipe_text_overlay_size_title">Размер на текста при плъзгане</string>
|
||||
<string name="revanced_swipe_text_overlay_size_summary">Размера на текста на плъзгащите контроли</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_title">Плъзгане на фона на наслагването непрозрачност</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_summary">Стойност на непрозрачността между 0-100</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_invalid_toast">Непрозрачността на плъзгането трябва да е между 0-100</string>
|
||||
<string name="revanced_swipe_threshold_title">Праг на величината на плъзгане</string>
|
||||
<string name="revanced_swipe_threshold_summary">Праг преди да се осъществи плъзгането</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_title">Показване на кръгъл овърлей</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_summary_on">Показва се кръгъл овърлей</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_summary_off">Показва се хоризонтален овърлей</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_title">Активиране на минимален стил</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_summary_on">Минималният стил на наслагване е активиран</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_summary_off">Минималният стил на овърлея е деактивиран</string>
|
||||
<string name="revanced_swipe_change_video_title">Включване на превключване на видеото чрез плъзване</string>
|
||||
<string name="revanced_swipe_change_video_summary_on">Плъзването в режим на цял екран ще превключи към следващото/предишно видео</string>
|
||||
<string name="revanced_swipe_change_video_summary_off">Плъзването в режим на цял екран няма да превключи към следващото/предишно видео</string>
|
||||
@@ -523,6 +527,9 @@ Second \"item\" text"</string>
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<string name="revanced_hide_buttons_screen_title">Бутони за действия</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">Скриване или показване на бутони под видеото</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Деактивиране на светенето на бутон Like и Subscribe</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">Бутон Like и Subscribe няма да светят при споменаване</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">Бутон Like и Subscribe ще светят при споменаване</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">Бутони \"Харесвам\" и \"Не харесвам\"</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">Бутоните \"Харесвам\" и \"Не харесвам\" са скрити</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">Бутоните \"Харесвам\" и \"Не харесвам\" се показват</string>
|
||||
@@ -575,12 +582,18 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_subscriptions_button_title">Абонаменти</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_on">Бутона за абонаменти е скрит</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Бутона за абонаменти се показва</string>
|
||||
<string name="revanced_hide_notifications_button_title">Скриване на известията</string>
|
||||
<string name="revanced_hide_notifications_button_summary_on">Бутонът за известия е скрит</string>
|
||||
<string name="revanced_hide_notifications_button_summary_off">Бутонът за известия е показан</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">Заменете бутона „Създаване“ с бутона „Известия“</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"Бутонът за създаване е сменен с бутона Известия
|
||||
|
||||
Забележка: Активирането на това също принудително скрива видео рекламите"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">Бутоните \"Създаване\" и \"Известия\" не са разменени</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_user_dialog_message">"Деактивирането на тази настройка също ще деактивира блокирането на рекламите за Shorts.
|
||||
|
||||
Ако промяната на тази настройка не влезе в сила, опитайте да превключите в режим „инкогнито“."</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">Имена на бутоните на лентата за навигация</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">Етикетите са скрити</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">Етикетите се показват</string>
|
||||
@@ -795,10 +808,13 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_on">Навигационната лента е скрита</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">Навигационната лента се показва</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
||||
<string name="revanced_disable_suggested_video_end_screen_title">Препоръчани видеоклипове в края</string>
|
||||
<string name="revanced_disable_suggested_video_end_screen_summary_on">Препоръчаните видеоклипове в края са скрити</string>
|
||||
<string name="revanced_disable_suggested_video_end_screen_summary_off">Препоръчаните видеоклипове в края се показват</string>
|
||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||
<string name="revanced_end_screen_suggested_video_title">Скриване на предложеното видео в края на екрана</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_on">"Предложеното видео в края на екрана е скрито, когато автоматичното пускане е изключено
|
||||
|
||||
Автоматичното пускане може да бъде променено в настройките на YouTube:
|
||||
Настройки → Възпроизвеждане → Автоматично пускане на следващото видео"</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_off">Предложеното видео в края на екрана е показано</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.time.hideTimestampPatch">
|
||||
<string name="revanced_hide_timestamp_title">Скриване на клеймото за време на видеоклипа</string>
|
||||
@@ -831,7 +847,7 @@ Second \"item\" text"</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_ryd_failure_connection_timeout">Нехаресванията временно не са налични (API timed out)</string>
|
||||
<string name="revanced_ryd_failure_connection_status_code">Нехаресванията не са налични (status %d)</string>
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">Нехаресванията не са достъпни (достигнат лимит на API)</string>
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">Не са налични нехаресвания (ограничение на клиентския API)</string>
|
||||
<string name="revanced_ryd_failure_generic">Нехаресванията не са налични (%s)</string>
|
||||
<!-- Toast shown if the user enables RYD while a video is opened, and then tries to vote for the video. -->
|
||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Презареди видеото за гласуване с ReturnYouTubeDislike</string>
|
||||
@@ -840,14 +856,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_ryd_enable_summary_on">Нехаресванията се показват</string>
|
||||
<string name="revanced_ryd_enable_summary_off">Нехаресванията не се показват</string>
|
||||
<string name="revanced_ryd_shorts_title">Пок. нехаресвания в кратките клипове</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Нехаресванията се показват в кратките клипове</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Нехаресванията се показват на шорти
|
||||
<string name="revanced_ryd_shorts_summary_on">Нехаресванията на Shorts са показани</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Нехаресванията на Shorts са показани
|
||||
|
||||
Ограничение: Нехаресванията може да не се появят в режим инкогнито"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Нехаресванията са скрити в кратките клипове</string>
|
||||
Ограничение: Нехаресванията може да не се показват в режим инкогнито"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Нехаресванията на Shorts не са показани</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">Нехаресвания като процент</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Нехаресванията се показват като процент</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">Нехаресванията се показват като число</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Нехаресванията са показани като процент</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">Нехаресванията са показани като число</string>
|
||||
<!-- Translations should use language similar to 'revanced_sb_enable_compact_skip_button' -->
|
||||
<string name="revanced_ryd_compact_layout_title">Компактен Like бутон</string>
|
||||
<string name="revanced_ryd_compact_layout_summary_on">Включен компактен бутон \"Харесва ми\"</string>
|
||||
@@ -909,20 +925,20 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_sb_square_layout_sum_on">Бутоните и контролите са квадратни</string>
|
||||
<string name="revanced_sb_square_layout_sum_off">Бутоните и контролите са заоблени</string>
|
||||
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
|
||||
<string name="revanced_sb_enable_compact_skip_button">Компактен бутон за пропускане</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button">Използване на компактен бутон \"Пропускане\"</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_on">Мин. ширина на бутона за пропускане</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_off">Най-добър изглед на бутона за пропускане</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Авт. скриване на бутона за пропускане</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Автоматично скриване на бутона \"Пропускане\"</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Бутона за пропускане се скрива след няколко секунди</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Бутона за пропускане се показва за цялата част</string>
|
||||
<string name="revanced_sb_general_skiptoast">Показв. известие при автом. пропуск. част</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Бутонът \"Пропускане\" е показан за целия сегмент</string>
|
||||
<string name="revanced_sb_general_skiptoast">Показване на toast при пропускане</string>
|
||||
<string name="revanced_sb_general_skiptoast_sum_on">Показване на известие при автоматично пропусната част. Докоснете тук за пример</string>
|
||||
<string name="revanced_sb_general_skiptoast_sum_off">Известието не се показва. Докоснете тук за пример</string>
|
||||
<string name="revanced_sb_general_time_without">Показване на дължината на видеото без сигментите</string>
|
||||
<string name="revanced_sb_general_time_without_sum_on">Дължината на видеото без всички части показана в скоби до цялата дължина</string>
|
||||
<string name="revanced_sb_general_time_without_sum_off">Цялата дължина на видето се показва</string>
|
||||
<string name="revanced_sb_create_segment_category">Създаване на нови части</string>
|
||||
<string name="revanced_sb_enable_create_segment">Показване на бутона за нова част</string>
|
||||
<string name="revanced_sb_enable_create_segment">Показване на бутон \"Създаване на нов сегмент\"</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_on">Бутона създаване за нова част се показва</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_off">Бутона създаване за нова част не се показва</string>
|
||||
<string name="revanced_sb_general_adjusting">Настройване стъпка на новата част</string>
|
||||
@@ -1016,7 +1032,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_sb_skipped_multiple_segments">Пропуснати множество части</string>
|
||||
<string name="revanced_sb_skip_automatically">Автоматично пропускане</string>
|
||||
<string name="revanced_sb_skip_automatically_once">Авт. пропускане веднъж</string>
|
||||
<string name="revanced_sb_skip_showbutton">Показвай бутон за пропускане</string>
|
||||
<string name="revanced_sb_skip_showbutton">Показване на бутон \"Пропускане\"</string>
|
||||
<string name="revanced_sb_skip_seekbaronly">Показв. в лентата за време</string>
|
||||
<string name="revanced_sb_skip_ignore">Деактивиране</string>
|
||||
<string name="revanced_sb_submit_failed_invalid">Не може да се изпрати сегмент: %s</string>
|
||||
@@ -1042,9 +1058,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_sb_new_segment_disabled_category">Категорията е изкл. в настройките. Вкл. я за да можете да изпратите.</string>
|
||||
<string name="revanced_sb_new_segment_title">Нова част в SponsorBlock</string>
|
||||
<string name="revanced_sb_new_segment_mark_time_as_question">Задаване на %s като начало или край на нов раздел?</string>
|
||||
<string name="revanced_sb_new_segment_mark_start">начало</string>
|
||||
<string name="revanced_sb_new_segment_mark_end">край</string>
|
||||
<string name="revanced_sb_new_segment_now">сега</string>
|
||||
<string name="revanced_sb_new_segment_mark_start">Начало</string>
|
||||
<string name="revanced_sb_new_segment_mark_end">Край</string>
|
||||
<string name="revanced_sb_new_segment_now">Сега</string>
|
||||
<string name="revanced_sb_new_segment_time_start">Частта започва от</string>
|
||||
<string name="revanced_sb_new_segment_time_end">Частта свършва до</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">Времената точни ли са?</string>
|
||||
@@ -1065,7 +1081,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Зададено е невалидно време</string>
|
||||
<string name="revanced_sb_stats">Статистика</string>
|
||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||
<string name="revanced_sb_stats_connection_failure">Статистиката е враменно недостъпна (API не работи)</string>
|
||||
<string name="revanced_sb_stats_connection_failure">Статистиките временно не са налични (API не работи)</string>
|
||||
<string name="revanced_sb_stats_loading">Зареждане...</string>
|
||||
<string name="revanced_sb_stats_sb_disabled">SponsorBlock е деактивиран.</string>
|
||||
<string name="revanced_sb_stats_username">Вашето потреб. име: <b>%s</b></string>
|
||||
@@ -1283,13 +1299,13 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_alt_thumbnail_stills_time_entry_2">Средата на видеото</string>
|
||||
<string name="revanced_alt_thumbnail_stills_time_entry_3">Края на видеото</string>
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_alt_thumbnail_dearrow_error">DeArrow временно не е наличен. (код на състоянието: %s)</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_error">DeArrow временно не е наличен (код на състоянието: %s)</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow временно не е наличен</string>
|
||||
</patch>
|
||||
<patch id="misc.announcements.announcementsPatch">
|
||||
<string name="revanced_announcements_title">Показване на ReVanced съобщения</string>
|
||||
<string name="revanced_announcements_summary_on">Съобщенията се показват при стартиране</string>
|
||||
<string name="revanced_announcements_summary_off">Съобщенията не се показват при стартиране</string>
|
||||
<string name="revanced_announcements_summary_on">Обявите при стартиране са показани</string>
|
||||
<string name="revanced_announcements_summary_off">Обявите при стартиране не са показани</string>
|
||||
<string name="revanced_announcements_enabled_summary">Показване на съобщения при стартиране</string>
|
||||
<string name="revanced_announcements_connection_failed">Неуспешно свързване с доставчик на съобщения</string>
|
||||
<string name="revanced_announcements_dialog_dismiss">Отхвърли</string>
|
||||
@@ -1339,10 +1355,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Вибрациите са активирани</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">Принудително оригинално аудио</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Използване на оригинално аудио</string>
|
||||
<string name="revanced_force_original_audio_title">Принудително оригинално аудио език</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Използване на оригиналния език на аудиото</string>
|
||||
<string name="revanced_force_original_audio_summary_off">Използване на аудио по подразбиране</string>
|
||||
<string name="revanced_force_original_audio_not_available">За да използвате тази функция, променете имитацията на поточно предаване на тип клиент на iOS</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for revanced_spoof_video_streams_screen_title -->
|
||||
<string name="revanced_force_original_audio_not_available">За да използвате тази функция, сменете „Фалшифициране на видео потоци“ на iOS TV</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
@@ -1405,8 +1422,6 @@ Second \"item\" text"</string>
|
||||
Възпроизвеждането на видеоклипове може да не работи"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">Деактивирането на тази настройка ще доведе до проблеми с възпроизвеждането на видео.</string>
|
||||
<string name="revanced_spoof_video_streams_client_type_title">Клиент по подразбиране</string>
|
||||
<!-- 'no auth' means no authentication -->
|
||||
<string name="revanced_spoof_video_streams_client_type_android_vr_no_auth">Android VR (bez avtorizaciq)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Принудително използване на AVC (H.264) на iOS</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Видео кодекът е принудително зададен на AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Видео кодекът се определя автоматично</string>
|
||||
|
||||
@@ -161,16 +161,13 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_debug_stacktrace_summary_on">ডিবাগ লগ স্টেক ট্রেস সংযুক্ত করবে</string>
|
||||
<string name="revanced_debug_stacktrace_summary_off">ডিবাগ লগ স্টেক ট্রেস সংযুক্ত করবে না</string>
|
||||
<string name="revanced_debug_toast_on_error_title">ReVanced এর ত্রুটির ক্ষেত্রে টোস্ট দেখান</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">কোন ত্রুটি দেখা গেলে টোস্ট দেখায়</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">কোন ত্রুটি দেখা গেলে টোস্ট দেখায় না</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">যদি ত্রুটি ঘটে তবে toast দেখানো হবে</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">যদি ত্রুটি ঘটে তবে toast দেখানো হবে না</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"ত্রুটি \"toast\" বন্ধ করে ReVanced ত্রুটি বিজ্ঞপ্তিগুলি লুকানো হয়।
|
||||
|
||||
আপনি কোনও অপ্রত্যাশিত ঘটনার বিষয়ে অবহিত হবেন না।"</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">সক্রিয়করন বোতাম গ্লো বন্ধ করুন</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">উল্লেখ করলে সক্রিয়করন এবং সাবস্ক্রাইব বোতাম উজ্জ্বল হবে না</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">উল্লেখ করলে সক্রিয়করন এবং সাবস্ক্রাইব বোতাম উজ্জ্বল হবে</string>
|
||||
<string name="revanced_hide_album_cards_title">অ্যালবাম কার্ড লুকান</string>
|
||||
<string name="revanced_hide_album_cards_summary_on">অ্যালবাম কার্ড লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_album_cards_summary_off">অ্যালবাম কার্ড প্রদর্শিত হয়েছে</string>
|
||||
@@ -193,22 +190,22 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">শেলফ প্রদর্শিত হয়েছে</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<string name="revanced_hide_join_membership_button_title">\'জয়েন করুন\' বোতাম লুকান</string>
|
||||
<string name="revanced_hide_join_membership_button_title">যোগদান বোতাম লুকান</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">বোতাম দেখানো আছে</string>
|
||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">চ্যানেল পাতায় \'আপনার জন্য\' শেলফ লুকান</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">শেলফ লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">শেলফ প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_for_you_shelf_title">\'আপনার জন্য\' শেল্ফ লুকান</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">চ্যানেল পৃষ্ঠায় শেল্ফ লুকানো আছে</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">চ্যানেল পৃষ্ঠায় শেল্ফ দেখানো হয়েছে</string>
|
||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
||||
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||
<string name="revanced_hide_notify_me_button_title">\'আমাকে জানান\' বোতাম লুকান</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">বোতাম দেখানো আছে</string>
|
||||
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">\'মানুষ আরও দেখছে\' প্রস্তাবনাগুলো লুকান</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">প্রস্তাবনাগুলো লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">প্রস্তাবনাগুলো প্রদর্শিত হয়েছে</string>
|
||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">\'People also watched\' লেবেল লুকান</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">লেবেল লুকানো আছে</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">লেবেল দেখানো হয়েছে</string>
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">\'আরও দেখান\' বোতাম লুকান</string>
|
||||
@@ -224,8 +221,8 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_chips_shelf_summary_on">চিপ শেলপ লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_off">চিপ শেলপ প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_expandable_chip_title">ভিডিওর নীচে সম্প্রসারণযোগ্য কার্ড লুকান</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">সম্প্রসারণযোগ্য কার্ডগুলি লুকানো আছে</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">সম্প্রসারণযোগ্য কার্ডগুলি প্রদর্শিত হচ্ছে</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">প্রসারণযোগ্য কার্ড লুকানো আছে</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">প্রসারণযোগ্য কার্ড দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_community_posts_title">সম্প্রদায় পোস্ট লুকান</string>
|
||||
<string name="revanced_hide_community_posts_summary_on">সম্প্রদায় পোস্ট লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_community_posts_summary_off">সম্প্রদায় পোস্ট প্রদর্শিত হয়েছে</string>
|
||||
@@ -241,7 +238,7 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_community_guidelines_title">সম্প্রদায় নির্দেশিকা লুকান</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_on">সম্প্রদায় নির্দেশিকা লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_off">সম্প্রদায় নির্দেশিকা প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">সাবস্ক্রাইবারদের সম্পদ্রায় নির্দেশিকা লুকান</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">সাবস্ক্রাইবার নির্দেশিকা লুকান</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_on">সাবস্ক্রাইবারদের সম্পদ্রায় নির্দেশিকা লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">সাবস্ক্রাইবারদের সম্পদ্রায় নির্দেশিকা প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_channel_member_shelf_title">চ্যানেল মেম্বার শেলফ লুকান</string>
|
||||
@@ -280,25 +277,25 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_artist_cards_title">আর্টিস্ট কার্ড লুকান</string>
|
||||
<string name="revanced_hide_artist_cards_summary_on">আর্টিস্ট কার্ড লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_artist_cards_summary_off">আর্টিস্ট কার্ড প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_attributes_section_title">বৈশিষ্ট্য বিভাগ লুকান</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">\'বৈশিষ্ট্যযুক্ত স্থান\', গেম এবং সঙ্গীত বিভাগগুলি লুকানো আছে</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">\'বৈশিষ্ট্যযুক্ত স্থান\', গেম এবং সঙ্গীত বিভাগগুলি প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_chapters_section_title">চ্যাপ্টার বিভাগ লুকান</string>
|
||||
<string name="revanced_hide_attributes_section_title">বৈশিষ্ট্যাবলী লুকান</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">বৈশিষ্ট্যযুক্ত স্থান, গেমস, সঙ্গীত, এবং উল্লিখিত ব্যক্তি বিভাগগুলি লুকানো আছে</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">বৈশিষ্ট্যযুক্ত স্থান, গেমস, সঙ্গীত, এবং উল্লিখিত ব্যক্তি বিভাগগুলি দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_chapters_section_title">অধ্যায় লুকান</string>
|
||||
<string name="revanced_hide_chapters_section_summary_on">চ্যাপ্টার বিভাগ লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_chapters_section_summary_off">চ্যাপ্টার বিভাগ প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">\'এই কীভাবে তৈরি হল কনটেন্ট\' সেকশনটি লুকান</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">\'এই কীভাবে তৈরি হল কনটেন্ট\' সেকশনটি লুকানো আছে</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">\'এই কীভাবে তৈরি হল কনটেন্ট\' সেকশনটি প্রদর্শিত হচ্ছে</string>
|
||||
<string name="revanced_hide_podcast_section_title">‘পডকাস্ট বিভাগ লুকান’</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">‘পডকাস্ট বিভাগ’ লুকানো আছে</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">‘পডকাস্ট বিভাগ’ প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_info_cards_section_title">তথ্য কার্ড সেকশন লুকান</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">\'How this content was made\' লুকান</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">How this content was made বিভাগটি লুকানো আছে</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">How this content was made বিভাগটি দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_podcast_section_title">\'Explore the podcast\' লুকান</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Explore the podcast বিভাগটি লুকানো আছে</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Explore the podcast বিভাগটি দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_info_cards_section_title">তথ্য কার্ড লুকান</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">তথ্য কার্ড সেকশন লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">তথ্য কার্ড সেকশন প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">‘মূল বিষয়বস্তু’ বিভাগ লুকানো আছে</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">‘মূল বিষয়বস্তু’ বিভাগ লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">‘मुख्य संकल्पना’ अनुभाग प्रदर्शित होता है</string>
|
||||
<string name="revanced_hide_transcript_section_title">ट्रांसक्रिप्ट अनुभाग छिपाएँ</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">\'Key concepts\' লুকান</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Key concepts বিভাগটি লুকানো আছে</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Key concepts বিভাগটি দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_transcript_section_title">নথি লুকান</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">ট্রান্সস্ক্রিপ্ট বিভাগ লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">ট্রান্সস্ক্রিপ্ট বিভাগ প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_description_components_screen_title">ভিডিওর বিবরণ</string>
|
||||
@@ -316,27 +313,27 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">সম্পর্কিত ভিডিওতে প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_comments_screen_title">মন্তব্য</string>
|
||||
<string name="revanced_comments_screen_summary">মন্তব্য বিভাগের উপাদানগুলি লুকান বা দেখান৷</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title"> \'চ্যাটের সারাংশ\' লুকান</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">“চ্যাট সারাংশ” লুকানো আছে</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">“চ্যাট সারাংশ” দেখানো হচ্ছে</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">\'Chat summary\' লুকান</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">চ্যাট সারসংক্ষেপ লুকানো আছে</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">চ্যাট সারসংক্ষেপ দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">\'মেম্বারদের মন্তব্য\' হেডার লুকান</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">\'মেম্বারদের মন্তব্য\' হেডার লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">\'মেম্বারদের মন্তব্য\' হেডার প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">সদস্যদের দ্বারা মন্তব্য হেডার লুকানো আছে</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">সদস্যদের দ্বারা মন্তব্য হেডার দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_comments_section_title">মন্তব্য বিভাগ লুকান</string>
|
||||
<string name="revanced_hide_comments_section_summary_on">মন্তব্য বিভাগ লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_comments_section_summary_off">মন্তব্য বিভাগ প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_title">\'Short তৈরি করুন\' বোতাম লুকান</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">\'Short তৈরি করুন\' বোতাম লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">\'Short তৈরি করুন\' বোতাম প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">একটি Shorts বোতাম তৈরি করুন লুকানো আছে</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">একটি Shorts বোতাম তৈরি করুন দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">ইমোজি এবং টাইমস্ট্যাম্প বোতাম লুকান</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">ইমোজি এবং টাইমস্ট্যাম্প বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">ইমোজি এবং টাইমস্ট্যাম্প বোতাম দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_comments_preview_comment_title">মন্তব্যের পূর্বরূপ লুকান</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_on">মন্তব্যের পূর্বরূপ লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_off">মন্তব্যের পূর্বরূপ প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_comments_thanks_button_title">ধন্যবাদ বাটন লুকান</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_on">ধন্যবাদ বোতাম লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_off">ধন্যবাদ বোতাম প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">টাইমস্ট্যাম্প ও ইমোজি বোতাম লুকান</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">টাইমস্ট্যাম্প ও ইমোজি বোতাম লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">টাইমস্ট্যাম্প ও ইমোজি বোতাম প্রদর্শিত হয়েছে</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodles छिपाएँ</string>
|
||||
<string name="revanced_hide_doodles_summary_on">सर्च बार Doodles छिपे हुए हैं</string>
|
||||
@@ -417,12 +414,12 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_player_store_shelf_summary_on">শপিং শেলফ লুকানো আছে</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_off">শপিং শেলফ দেখানো হচ্ছে</string>
|
||||
<string name="revanced_hide_shopping_links_title">ভিডিওর বিবরণে কেনাকাটার লিঙ্ক লুকান</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">কেনাকাটার লিঙ্ক লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">কেনাকাটার লিঙ্ক প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">ভিডিও বিবরণে শপিং লিঙ্ক লুকানো আছে</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">ভিডিও বিবরণে শপিং লিঙ্ক দেখানো হয়েছে</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">চ্যানেল পাতায় \'স্টোরে যান\' বোতাম লুকান</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">বোতাম দেখানো আছে</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">চ্যানেল পৃষ্ঠায় বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">চ্যানেল পৃষ্ঠায় বোতাম দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_web_search_results_title">লোকেরা এইগুলিও সার্চ করছে লুকান</string>
|
||||
<string name="revanced_hide_web_search_results_summary_on">লোকেরা এইগুলিও সার্চ করছে লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_web_search_results_summary_off">লোকেরা এইগুলিও সার্চ করছে প্রদর্শিত হয়েছে</string>
|
||||
@@ -446,10 +443,10 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_share_copy_url_success">ক্লিপবোর্ডে URL অনুলিপি করা হয়েছে</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">টাইমস্ট্যাম্প সহ URL অনুলিপি করা হয়েছে</string>
|
||||
<string name="revanced_copy_video_url_title">ভিডিও URL অনুলিপি বোতাম দেখান</string>
|
||||
<string name="revanced_copy_video_url_summary_on">বোতাম প্রদর্শিত হয়েছে। URL অনুলিপি করতে ট্যাপ করুন। টাইমস্ট্যাম্প সহ URL অনুলিপি করতে ট্যাপ করে ধরে রাখুন।</string>
|
||||
<string name="revanced_copy_video_url_summary_on">বোতামটি দেখানো হয়েছে। ভিডিও URL কপি করতে আলতো চাপুন। টাইমস্ট্যাম্প সহ কপি করতে টিপুন এবং ধরে রাখুন।</string>
|
||||
<string name="revanced_copy_video_url_summary_off">বোতাম প্রদর্শিত হয়নি</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">টাইমস্ট্যাম্প URL অনুলিপি বোতাম দেখান</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">বোতাম প্রদর্শিত হয়েছে। টাইমস্ট্যাম্প সহ URL অনুলিপি করতে ট্যাপ করুন। টাইমস্ট্যাম্প ছাড়া URL অনুলিপি করতে ট্যাপ করে ধরে রাখুন।</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">বোতামটি দেখানো হয়েছে। টাইমস্ট্যাম্প সহ ভিডিও URL কপি করতে আলতো চাপুন। টাইমস্ট্যাম্প ছাড়া কপি করতে টিপুন এবং ধরে রাখুন।</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">বোতাম প্রদর্শিত হয়নি</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
@@ -462,8 +459,8 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_external_downloader_screen_title">বাহিরে ডাউনলোড</string>
|
||||
<string name="revanced_external_downloader_screen_summary">বাহিরের ডাউনলোডার ব্যবহার করার সেটিং</string>
|
||||
<string name="revanced_external_downloader_title">বাহিরের ডাউনলোডার বাটন দেখান</string>
|
||||
<string name="revanced_external_downloader_summary_on">প্লেয়ারে ডাউনলোড বোতাম প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_external_downloader_summary_off">প্লেয়ারে ডাউনলোড বোতাম প্রদর্শিত হয়নি</string>
|
||||
<string name="revanced_external_downloader_summary_on">প্লেয়ারে ডাউনলোড বোতাম দেখানো হয়েছে</string>
|
||||
<string name="revanced_external_downloader_summary_off">প্লেয়ারে ডাউনলোড বোতাম দেখানো হয়নি</string>
|
||||
<!-- 'download action button' should be translated using the same wording as the translation of 'revanced_hide_download_button_title' -->
|
||||
<string name="revanced_external_downloader_action_button_title">ডাউনলোড অ্যাকশন বোতামটি ওভাররাইড করুন</string>
|
||||
<string name="revanced_external_downloader_action_button_summary_on">ডাউনলোড বোতামটি আপনার বাহিরের ডাউনলোডার খুলবে</string>
|
||||
@@ -484,11 +481,15 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
</patch>
|
||||
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
||||
<string name="revanced_swipe_brightness_title">উজ্জ্বলতার সোয়াইপ অঙ্গভঙ্গি সক্রিয় করুন</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">উজ্জ্বলতা সোয়াইপ সক্রিয় করা হয়েছে</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">উজ্জ্বলতা সোয়াইপ নিষ্ক্রিয় করা হয়েছে</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">"Fullscreen brightness swipe enabled আছে
|
||||
|
||||
স্ক্রিনের বাম দিকে উল্লম্বভাবে সোয়াইপ করে উজ্জ্বলতা সামঞ্জস্য করুন"</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">Fullscreen brightness swipe disabled করা হয়েছে</string>
|
||||
<string name="revanced_swipe_volume_title">ভলিউম অঙ্গভঙ্গি সক্রিয় করুন</string>
|
||||
<string name="revanced_swipe_volume_summary_on">ভলিউম সোয়াইপ সক্রিয় করা হয়েছে</string>
|
||||
<string name="revanced_swipe_volume_summary_off">ভলিউম সোয়াইপ নিষ্ক্রিয় করা হয়েছে</string>
|
||||
<string name="revanced_swipe_volume_summary_on">"পূর্ণ স্ক্রীন ভলিউম সোয়াইপ সক্রিয় করা হয়েছে
|
||||
|
||||
স্ক্রিনের ডান দিকে উল্লম্বভাবে সোয়াইপ করে ভলিউম সামঞ্জস্য করুন"</string>
|
||||
<string name="revanced_swipe_volume_summary_off">পূর্ণ স্ক্রীন ভলিউম সোয়াইপ নিষ্ক্রিয় করা হয়েছে</string>
|
||||
<string name="revanced_swipe_press_to_engage_title">প্রেস-টু-সোয়াইপ অঙ্গভঙ্গি সক্রিয় করুন</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_on">প্রেস-টু-সোয়াইপ সক্রিয় করা হয়েছে</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">প্রেস-টু-সোয়াইপ নিষ্ক্রিয় করা হয়েছে</string>
|
||||
@@ -501,16 +502,19 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">স্বয়ংক্রিয়-উজ্জ্বলতার অঙ্গভঙ্গি সক্রিয় করুন</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">উজ্জ্বলতার অঙ্গভঙ্গির সর্বনিম্ন মানে সোয়াইপ ডাউন করলে অটো-উজ্জ্বলতা সক্ষম হয়</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">সর্বনিম্ন মানে সোয়াইপ ডাউন করলে অটো-উজ্জ্বলতা সক্ষম হয় না</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">স্বতস্ফূর্তভাবে</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">ওভার-লে টাইম আউট</string>
|
||||
<string name="revanced_swipe_overlay_timeout_summary">কত মিলিসেকেন্ডের জন্য ওভারলে দৃশ্যমান হবে</string>
|
||||
<string name="revanced_swipe_text_overlay_size_title">সোয়াইপ ওভারলে টেক্সট সাইজ</string>
|
||||
<string name="revanced_swipe_text_overlay_size_summary">সোয়াইপ ওভারলে এর টেক্সট সাইজ</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_title">অস্বচ্ছতা</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_summary">0-100 এর মধ্যে অস্বচ্ছতার মান</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_invalid_toast">সোয়াইপের অস্বচ্ছতা অবশ্যই 0-100 এর মধ্যে হতে হবে</string>
|
||||
<string name="revanced_swipe_threshold_title">সোয়াইপ থ্রেশহোল্ড এর মাত্রা</string>
|
||||
<string name="revanced_swipe_threshold_summary">সোয়াইপ করার থ্রেশহোল্ডের পরিমাণ</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_title">বৃত্তাকার ওভারলে দেখান</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_summary_on">বৃত্তাকার ওভারলে দেখানো হয়েছে</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_summary_off">অনুভূমিক ওভারলে দেখানো হয়েছে</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_title">ন্যূনতম শৈলী সক্ষম করুন</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_summary_on">Minimal overlay style enabled করা হয়েছে</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_summary_off">ন্যূনতম ওভারলে শৈলী নিষ্ক্রিয় করা হয়েছে</string>
|
||||
<string name="revanced_swipe_change_video_title">ভিডিও পরিবর্তন করতে সোয়াইপ করে সক্ষম করুন</string>
|
||||
<string name="revanced_swipe_change_video_summary_on">ফুলস্ক্রিন মোডে সোয়াইপ করলে পরবর্তী/পূর্ববর্তী ভিডিওতে পরিবর্তন হবে</string>
|
||||
<string name="revanced_swipe_change_video_summary_off">ফুলস্ক্রিন মোডে সোয়াইপ করলে পরবর্তী /পূর্ববর্তী ভিডিওতে পরিবর্তন হবে না</string>
|
||||
@@ -523,6 +527,9 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<string name="revanced_hide_buttons_screen_title">অ্যাকশন বোতাম</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">ভিডিওর নীচে বোতাম লুকানো বা দেখানো</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_title">লাইক এবং সাবস্ক্রাইব বোতাম গ্লো বন্ধ করুন</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">উল্লেখ করলে সক্রিয়করন এবং সাবস্ক্রাইব বোতাম উজ্জ্বল হবে না</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">উল্লেখ করলে সক্রিয়করন এবং সাবস্ক্রাইব বোতাম উজ্জ্বল হবে</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">Like এবং Dislike লুকান</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">Like এবং Dislike বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">Like এবং Dislike বোতাম দেখানো হচ্ছে</string>
|
||||
@@ -581,6 +588,9 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
|
||||
মনে রাখবেন: এটি সক্রিয় করা ভিডিও বিজ্ঞাপনগুলিও জোর করে লুকিয়ে দেয়"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">তৈরি বোতামকে বিজ্ঞপ্তি বোতাম দ্বারা সুইচ করা হয়নি</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_user_dialog_message">"এই সেটিংস নিষ্ক্রিয় করলে Shorts বিজ্ঞাপন ব্লকিংও নিষ্ক্রিয় হয়ে যাবে।
|
||||
|
||||
যদি এই সেটিংস পরিবর্তন করার পরে কাজ না করে, তাহলে Incognito মোডে চেষ্টা করুন।"</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">নেভিগেশন বোতাম লেবেল লুকান</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">লেবেল লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">লেবেল প্রদর্শিত হয়েছে</string>
|
||||
@@ -795,10 +805,13 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_on">নেভিগেশন বার লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">পনেভিগেশন বার প্রদর্শিত হয়েছে</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
||||
<string name="revanced_disable_suggested_video_end_screen_title">ভিডিওর শেষ স্ক্রিণে সাজেস্ট করা ভিডিও নিষ্ক্রিয় করুন</string>
|
||||
<string name="revanced_disable_suggested_video_end_screen_summary_on">সাজেস্ট করা ভিডিও নিস্ক্রিয় করা হবে</string>
|
||||
<string name="revanced_disable_suggested_video_end_screen_summary_off">সাজেস্ট করা ভিডিও প্রদর্শিত হবে</string>
|
||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||
<string name="revanced_end_screen_suggested_video_title">শেষ স্ক্রীনে প্রস্তাবিত ভিডিও লুকানো হবে</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_on">"অটো প্লে বন্ধ থাকলে শেষ স্ক্রীনে প্রস্তাবিত ভিডিও লুকানো থাকে
|
||||
|
||||
YouTube সেটিংসে অটো প্লে পরিবর্তন করা যেতে পারে:
|
||||
সেটিংস → প্লেব্যাক → অটো প্লে পরবর্তী ভিডিও"</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_off">শেষ স্ক্রীনে প্রস্তাবিত ভিডিও দেখানো হয়েছে</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.time.hideTimestampPatch">
|
||||
<string name="revanced_hide_timestamp_title">ভিডিওর সময়স্ট্যাম্প লুকান</string>
|
||||
@@ -831,7 +844,7 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_ryd_failure_connection_timeout">অপছন্দ সাময়িকভাবে উপলভ্য নয় (API সময় শেষ হয়েছে)</string>
|
||||
<string name="revanced_ryd_failure_connection_status_code">অপছন্দ উপলভ্য নয় (অবস্থা %d)</string>
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">অপছন্দ উপলভ্য নয় (ক্লায়েন্ট API সীমা পৌঁছেছে)</string>
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">অপছন্দগুলি উপলব্ধ নেই (ক্লায়েন্ট API সীমা)</string>
|
||||
<string name="revanced_ryd_failure_generic">অপছন্দ উপলভ্য নয় (%s)</string>
|
||||
<!-- Toast shown if the user enables RYD while a video is opened, and then tries to vote for the video. -->
|
||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">ReturnYouTubeDislike দিয়ে ভোট দিতে ভিডিও আবার লোড করুন</string>
|
||||
@@ -840,14 +853,14 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_ryd_enable_summary_on">অপছন্দগুলো প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_ryd_enable_summary_off">অপছন্দগুলো প্রদর্শিত হয়নি</string>
|
||||
<string name="revanced_ryd_shorts_title">Shorts এ অপছন্দ দেখান</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Shorts এ অপছন্দ পদর্শিত হয়েছে</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Shorts-এ ডিসলাইক দেখানো হচ্ছে
|
||||
<string name="revanced_ryd_shorts_summary_on">Shorts-এ অপছন্দগুলি দেখানো হয়েছে</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Shorts-এ অপছন্দগুলি দেখানো হয়েছে
|
||||
|
||||
সীমাবদ্ধতা: গোপন মোডে ডিসলাইক প্রদর্শিত নাও হতে পারে"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Shorts এ অপছন্দ লুকিয়ে রয়েছে</string>
|
||||
সীমাবদ্ধতা: ছদ্মবেশী মোডে অপছন্দগুলি নাও দেখা যেতে পারে"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Shorts-এ অপছন্দগুলি দেখানো হয়নি</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">অপছন্দগুলো শতাংশ অনুযায়ী</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">অপছন্দগুলো শতাংশ অনুযায়ী প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">অপছন্দগুলো সংখ্যা অনুযায়ী প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">অপছন্দগুলি শতাংশ হিসাবে দেখানো হয়েছে</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">অপছন্দগুলি একটি সংখ্যা হিসাবে দেখানো হয়েছে</string>
|
||||
<!-- Translations should use language similar to 'revanced_sb_enable_compact_skip_button' -->
|
||||
<string name="revanced_ryd_compact_layout_title">কম্প্যাক্ট লাইক বোতাম</string>
|
||||
<string name="revanced_ryd_compact_layout_summary_on">পছন্দ বোতামটি ন্যূনতম প্রস্থের জন্য সাজানো হয়েছে</string>
|
||||
@@ -909,20 +922,20 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_sb_square_layout_sum_on">বোতাম এবং নিয়ন্ত্রণগুলি বর্গক্ষেত্র</string>
|
||||
<string name="revanced_sb_square_layout_sum_off">বোতাম এবং নিয়ন্ত্রণগুলি গোলাকার</string>
|
||||
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
|
||||
<string name="revanced_sb_enable_compact_skip_button">সংক্ষিপ্ত স্কিপ বাটন ব্যবহার করুন</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button">সংক্ষিপ্ত Skip বোতাম ব্যবহার করুন</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_on">স্কিপ বোতামটি ন্যূনতম প্রস্থের জন্য সাজানো হয়েছে</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_off">স্কিপ বোতামটি সেরা চেহারার জন্য সাজানো হয়েছে</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button">স্কিপ বোতাম স্বয়ংক্রিয়ভাবে লুকান</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Skip বোতামটি স্বয়ংক্রিয়ভাবে লুকান</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">কয়েক সেকেন্ড পরে স্কিপ বোতাম লুকিয়ে যায়</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">স্কিপ বোতাম পুরো সেগমেন্টে দৃশ্যমান থাকে</string>
|
||||
<string name="revanced_sb_general_skiptoast">স্বয়ংক্রিয়ভাবে এড়িয়ে যাওয়ার সময় একটি টোস্ট দেখান</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">পুরো অংশের জন্য Skip বোতাম দেখানো হয়েছে</string>
|
||||
<string name="revanced_sb_general_skiptoast">বাদ দেওয়ার সময় একটি toast দেখান</string>
|
||||
<string name="revanced_sb_general_skiptoast_sum_on">সেগমেন্ট স্বয়ংক্রিয়ভাবে এড়িয়ে যেতে একটি টোস্ট দেখানো হয়। উদাহরণ দেখতে এখানে ট্যাপ করুন</string>
|
||||
<string name="revanced_sb_general_skiptoast_sum_off">টোস্ট দেখানো হচ্ছে না। উদাহরণ দেখতে এখানে ট্যাপ করুন</string>
|
||||
<string name="revanced_sb_general_time_without">সেগমেন্ট ছাড়া ভিডিওর দৈর্ঘ্য দেখান</string>
|
||||
<string name="revanced_sb_general_time_without_sum_on">সমস্ত সেগমেন্ট ছাড়াই ভিডিওর দৈর্ঘ্য, পূর্ণ ভিডিওর দৈর্ঘ্যের পাশে বন্ধনীতে উল্লেখ করা হয়</string>
|
||||
<string name="revanced_sb_general_time_without_sum_off">সম্পূর্ণ ভিডিও দৈর্ঘ্য প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_sb_create_segment_category">নতুন সেগমন্ট তৈরি হচ্ছে</string>
|
||||
<string name="revanced_sb_enable_create_segment">নতুন সেগমেন্ট তৈরির বাটন দেখান</string>
|
||||
<string name="revanced_sb_enable_create_segment">নতুন বিভাগ তৈরি করুন বোতামটি দেখান</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_on">নতুন সেগমেন্ট তৈরির বাটন প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_off">নতুন সেগমেন্ট তৈরির বাটন প্রদর্শিত হয়নি</string>
|
||||
<string name="revanced_sb_general_adjusting">নতুন সেগমেন্টের পদক্ষেপ সামঞ্জস্য করুন</string>
|
||||
@@ -1015,7 +1028,7 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_sb_skipped_multiple_segments">একটানা একাধিক সেগমেন্ট এড়িয়ে গেছে</string>
|
||||
<string name="revanced_sb_skip_automatically">স্বয়ংক্রিয়ভাবে এড়িয়ে যান</string>
|
||||
<string name="revanced_sb_skip_automatically_once">একবার স্বয়ংক্রিয়ভাবে এড়িয়ে যান</string>
|
||||
<string name="revanced_sb_skip_showbutton">এড়িয়ে যান বোতামটি দেখান</string>
|
||||
<string name="revanced_sb_skip_showbutton">একটি Skip বোতাম দেখান</string>
|
||||
<string name="revanced_sb_skip_seekbaronly">সিকবারে দেখান</string>
|
||||
<string name="revanced_sb_skip_ignore">নিষ্ক্রিয় করুন</string>
|
||||
<string name="revanced_sb_submit_failed_invalid">%s সেগমেন্ট জমা দিতে সক্ষম হয়নি</string>
|
||||
@@ -1065,7 +1078,7 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">ভুল সময় দেয়া হয়েছে</string>
|
||||
<string name="revanced_sb_stats">পরিসংখ্যান</string>
|
||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||
<string name="revanced_sb_stats_connection_failure">পরিসংখ্যান সাময়িকভাবে উপলভ্য নয় (API ডাউন)</string>
|
||||
<string name="revanced_sb_stats_connection_failure">পরিসংখ্যান সাময়িকভাবে উপলব্ধ নেই (API ডাউন)</string>
|
||||
<string name="revanced_sb_stats_loading">লোড হচ্ছে...</string>
|
||||
<string name="revanced_sb_stats_sb_disabled">SponsorBlock নিস্ক্রিয় হয়েছে</string>
|
||||
<string name="revanced_sb_stats_username">আপনার ব্যবহারকারী নাম: <b>%s</b></string>
|
||||
@@ -1283,13 +1296,13 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট
|
||||
<string name="revanced_alt_thumbnail_stills_time_entry_2">ভিডিওর মধ্যাংশ</string>
|
||||
<string name="revanced_alt_thumbnail_stills_time_entry_3">ভিডিওর শেষাংশ</string>
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_alt_thumbnail_dearrow_error">সাময়িকভাবে DeArrow উপলভ্য নয় (স্টাটাস কোড: %s)</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow সাময়িকভাবে উপলভ্য নয়</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_error">DeArrow সাময়িকভাবে উপলব্ধ নেই (স্ট্যাটাস কোড: %s)</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow সাময়িকভাবে উপলব্ধ নেই</string>
|
||||
</patch>
|
||||
<patch id="misc.announcements.announcementsPatch">
|
||||
<string name="revanced_announcements_title">ReVanced ঘোষণা দেখান</string>
|
||||
<string name="revanced_announcements_summary_on">শুরুতে ঘোষণা প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_announcements_summary_off">শুরুতে ঘোষণা প্রদর্শিত হয়নি</string>
|
||||
<string name="revanced_announcements_summary_on">স্টার্টআপে ঘোষণাগুলি দেখানো হয়েছে</string>
|
||||
<string name="revanced_announcements_summary_off">স্টার্টআপে ঘোষণাগুলি দেখানো হয়নি</string>
|
||||
<string name="revanced_announcements_enabled_summary">শুরুতে ঘোষণা দেখান</string>
|
||||
<string name="revanced_announcements_connection_failed">ঘোষনাদাতার সাথে সম্পর্ক স্থাপন ব্যর্থ হয়েছে</string>
|
||||
<string name="revanced_announcements_dialog_dismiss">বাতিল করুন</string>
|
||||
@@ -1339,10 +1352,11 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">কম্পন সক্রিয় করা হয়েছে</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">মূল অডিও বলপূর্বক চালু করুন</string>
|
||||
<string name="revanced_force_original_audio_summary_on">মূল অডিও ব্যবহার করছে</string>
|
||||
<string name="revanced_force_original_audio_title">মূল অডিও ভাষা বলপূর্বক চালু করুন</string>
|
||||
<string name="revanced_force_original_audio_summary_on">মূল অডিও ভাষা ব্যবহার করা হচ্ছে</string>
|
||||
<string name="revanced_force_original_audio_summary_off">ডিফল্ট অডিও ব্যবহার করছে</string>
|
||||
<string name="revanced_force_original_audio_not_available">এই বৈশিষ্ট্যটি ব্যবহার করার জন্য, iOS ক্লায়েন্ট প্রকারে স্ট্রিম স্পুফিং পরিবর্তন করুন</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for revanced_spoof_video_streams_screen_title -->
|
||||
<string name="revanced_force_original_audio_not_available">এই বৈশিষ্ট্যটি ব্যবহার করতে, \'স্পুফ ভিডিও স্ট্রীম\' কে iOS TV-তে পরিবর্তন করুন</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
@@ -1405,8 +1419,6 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট
|
||||
ভিডিও প্লেব্যাক কাজ নাও করতে পারে"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">এই সেটিংটি বন্ধ করার ফলে ভিডিও প্লেব্যাক ত্রুটি হতে পারে।</string>
|
||||
<string name="revanced_spoof_video_streams_client_type_title">ডিফল্ট ক্লায়েন্ট</string>
|
||||
<!-- 'no auth' means no authentication -->
|
||||
<string name="revanced_spoof_video_streams_client_type_android_vr_no_auth">Android VR (স্বীকৃতি ছাড়া)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">iOS AVC (H.264) বাধ্যতামূলক করুন</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ভিডিও কোডেক AVC (H.264) এ বাধ্যতামূলক করা হয়েছে</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ভিডিও কোডেক স্বয়ংক্রিয়ভাবে নির্ধারিত হয়</string>
|
||||
|
||||
@@ -45,7 +45,7 @@ Second \"item\" text"</string>
|
||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
||||
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
@@ -130,7 +130,7 @@ Second \"item\" text"</string>
|
||||
<!-- 'remix' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<!-- 'share' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
</patch>
|
||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||
</patch>
|
||||
<patch id="layout.hide.time.hideTimestampPatch">
|
||||
</patch>
|
||||
@@ -206,6 +206,7 @@ Second \"item\" text"</string>
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<!-- 'Spoof video streams' should be the same translation used for revanced_spoof_video_streams_screen_title -->
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
@@ -223,7 +224,6 @@ Second \"item\" text"</string>
|
||||
<patch id="interaction.seekbar.enableSlideToSeekPatch">
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<!-- 'no auth' means no authentication -->
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
|
||||
@@ -161,16 +161,13 @@ Toca el botó Continua i permet els canvis d'optimització."</string>
|
||||
<string name="revanced_debug_stacktrace_summary_on">Els registres de depuració inclouen el rastreig de la pila</string>
|
||||
<string name="revanced_debug_stacktrace_summary_off">Els registres de depuració no inclouen el rastreig de la pila</string>
|
||||
<string name="revanced_debug_toast_on_error_title">Mostrar una notificació emergent quan hi ha un error de ReVanced</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">S\'ha mostrat la notificació si es produeix un error</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">No es mostra la notificació si es produeix un error</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Es mostra un toast si es produeix un error</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">No es mostra un toast si es produeix un error</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"Desactivar els missatges d'error d'avis oculta totes les notificacions d'error de ReVanced.
|
||||
|
||||
No se t'informarà de cap esdeveniment inesperat."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Desactiva l\'efecte brillant dels botons M\'agrada i Subscriu-te</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">Els botons M\'agrada i Subscriu-te no brillaran quan es mencionin</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">Els botons M\'agrada i Subscriu-te brillaran quan es mencionin</string>
|
||||
<string name="revanced_hide_album_cards_title">Amagar les targetes d\'àlbums</string>
|
||||
<string name="revanced_hide_album_cards_summary_on">Les targetes d\'àlbums estan amagades</string>
|
||||
<string name="revanced_hide_album_cards_summary_off">Es mostren les targetes d\'àlbum</string>
|
||||
@@ -193,22 +190,22 @@ No se t'informarà de cap esdeveniment inesperat."</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">Els prestatges es mostren</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<string name="revanced_hide_join_membership_button_title">Amaga el botó \"Uneix-te\"</string>
|
||||
<string name="revanced_hide_join_membership_button_title">Amaga el botó Uneix-te</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">El botó està amagat</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">El botó es mostra</string>
|
||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Amaga la prestatgeria \"Per a tu\" a la pàgina del canal</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">La prestatgeria està amagada</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">La prestatgeria es mostra</string>
|
||||
<string name="revanced_hide_for_you_shelf_title">Amaga la secció \"Per a tu\"</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">La secció a la pàgina del canal s\'amaga</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">La secció a la pàgina del canal es mostra</string>
|
||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
||||
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||
<string name="revanced_hide_notify_me_button_title">Amaga el botó \"M\'avisa\"</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">El botó està amagat</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">El botó es mostra</string>
|
||||
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">Amaga les recomanacions \'La gent també ha vist\'</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">Les recomanacions estan amagades</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">Les recomanacions es mostren</string>
|
||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">Amaga l\'etiqueta \"La gent també ha mirat\"</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">L\'etiqueta s\'amaga</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">L\'etiqueta es mostra</string>
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">Amaga el botó \'Mostra més\'</string>
|
||||
@@ -224,8 +221,8 @@ No se t'informarà de cap esdeveniment inesperat."</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_on">El prestatge de xip està amagat</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_off">El prestatge de xip es mostra</string>
|
||||
<string name="revanced_hide_expandable_chip_title">Amaga la targeta desplegable sota els vídeos</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">Les targetes desplegables estan amagades</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">Les targetes desplegables es mostren</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">La targeta expandible s\'amaga</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">La targeta expandible es mostra</string>
|
||||
<string name="revanced_hide_community_posts_title">Amaga les publicacions de la comunitat</string>
|
||||
<string name="revanced_hide_community_posts_summary_on">Comunitatnya ezkutatzen dira</string>
|
||||
<string name="revanced_hide_community_posts_summary_off">Comunitateak erakusten dira</string>
|
||||
@@ -241,7 +238,7 @@ No se t'informarà de cap esdeveniment inesperat."</string>
|
||||
<string name="revanced_hide_community_guidelines_title">Amaga les normes de la comunitat</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_on">Les normes de la comunitat estan amagades</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_off">Les normes de la comunitat es mostren</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">Amaga les normes de la comunitat per als subscriptors</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">Amaga les directrius per als subscriptors</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_on">Les normes de la comunitat dels subscriptors estan amagades</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">Es mostren les directrius de la comunitat per a subscriptors</string>
|
||||
<string name="revanced_hide_channel_member_shelf_title">Amaga la prestatgeria de membres del canal</string>
|
||||
@@ -280,25 +277,25 @@ No se t'informarà de cap esdeveniment inesperat."</string>
|
||||
<string name="revanced_hide_artist_cards_title">Amaga les targetes d\'artista</string>
|
||||
<string name="revanced_hide_artist_cards_summary_on">Les targetes d\'artista estan amagades</string>
|
||||
<string name="revanced_hide_artist_cards_summary_off">Es mostren les targetes d\'artista</string>
|
||||
<string name="revanced_hide_attributes_section_title">Amaga la secció d\'atributs</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">Les seccions \"Llocs destacats\", Jocs i Música estan amagades</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">Les seccions \"Llocs destacats\", Jocs i Música es mostren</string>
|
||||
<string name="revanced_hide_chapters_section_title">Amaga la secció de capítols</string>
|
||||
<string name="revanced_hide_attributes_section_title">Amaga els atributs</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">Les seccions Llocs destacats, Jocs, Música i Persones esmentades s\'amaguen</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">Les seccions Llocs destacats, Jocs, Música i Persones esmentades es mostren</string>
|
||||
<string name="revanced_hide_chapters_section_title">Amaga els capítols</string>
|
||||
<string name="revanced_hide_chapters_section_summary_on">La secció de capítols està amagada</string>
|
||||
<string name="revanced_hide_chapters_section_summary_off">La secció de capítols es mostra</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">Amaga la secció \'Com s\'ha fet aquest contingut\'</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">La secció \'Com s\'ha fet aquest contingut\' està amagada</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">La secció \'Com s\'ha fet aquest contingut\' es mostra</string>
|
||||
<string name="revanced_hide_podcast_section_title">Amaga la secció \"Explora el podcast\"</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">\'Explorar el podcast\' section is hidden</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">\'Explorar el podcast\' section is shown</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Amagar secció de targetes d\'informació</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">Amaga \"Com s\'ha creat aquest contingut\"</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">La secció Com s\'ha creat aquest contingut s\'amaga</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">La secció Com s\'ha creat aquest contingut es mostra</string>
|
||||
<string name="revanced_hide_podcast_section_title">Amaga \"Explora el podcast\"</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">La secció Explora el podcast s\'amaga</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">La secció Explora el podcast es mostra</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Amaga les targetes d\'informació</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">La secció de targetes d\'informació està amagada</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">La secció de targetes d\'informació es mostra</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Amaga la secció \'Conceptes clau\'</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">La secció \'Conceptes clau\' està oculta</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">La secció \'Conceptes clau\' es mostra</string>
|
||||
<string name="revanced_hide_transcript_section_title">Amaga la secció \'Llegendes\'</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Amaga \"Conceptes clau\"</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">La secció Conceptes clau s\'amaga</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">La secció Conceptes clau es mostra</string>
|
||||
<string name="revanced_hide_transcript_section_title">Amaga la transcripció</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">La secció \'Llegendes\' està oculta</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">La secció \'Llegendes\' es mostra</string>
|
||||
<string name="revanced_hide_description_components_screen_title">Descripció del vídeo</string>
|
||||
@@ -317,26 +314,26 @@ No se t'informarà de cap esdeveniment inesperat."</string>
|
||||
<string name="revanced_comments_screen_title">Comentaris</string>
|
||||
<string name="revanced_comments_screen_summary">Amaga o mostra els comentaris</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">Amaga \"Resum del xat\"</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">El \"Resum del xat\" està amagat</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">Es mostra \"Resum del xat\"</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">El resum del xat s\'amaga</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">El resum del xat es mostra</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">Amaga el títol \'Comentaris dels membres\'</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">S\'ha amagat el títol \"Comentaris dels membres\"</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">Es mostra el títol \"Comentaris dels membres\"</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">La capçalera Comentaris dels membres s\'amaga</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">La capçalera Comentaris dels membres es mostra</string>
|
||||
<string name="revanced_hide_comments_section_title">Amaga la secció de comentaris</string>
|
||||
<string name="revanced_hide_comments_section_summary_on">La secció de comentaris està amagada</string>
|
||||
<string name="revanced_hide_comments_section_summary_off">Es mostra la secció de comentaris</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_title">Amaga el botó \"Crear un Short\"</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">S\'ha amagat el botó \"Crear un Short\"</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Es mostra el botó \"Crear un Short\"</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">El botó Crea un Short s\'amaga</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">El botó Crea un Short es mostra</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">Amaga els botons d\'emojis i marca de temps</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">Els botons d\'emojis i marca de temps s\'amaguen</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">Els botons d\'emojis i marca de temps es mostren</string>
|
||||
<string name="revanced_hide_comments_preview_comment_title">Amaga la vista prèvia del comentari</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_on">La vista prèvia del comentari s\'amaga</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_off">La vista prèvia del comentari es mostra</string>
|
||||
<string name="revanced_hide_comments_thanks_button_title">Amaga el botó de Gràcies</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_on">El botó Gràcies s\'amaga</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_off">El botó Gràcies es mostra</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">Amaga els botons d\'emojis i marca de temps</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">Els botons d\'emojis i marca de temps s\'amaguen</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">El botó de la marca de temps del comentari i els botons d\'emoji s\'ensenyen</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">Amaga els Doodles de YouTube</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Els Doodles de la barra de cerca es queden ocults</string>
|
||||
@@ -417,12 +414,12 @@ Aquesta funció només està disponible per a dispositius antics"</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_on">La prestatgeria de compres s\'amaga</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_off">La prestatgeria de compres es mostra</string>
|
||||
<string name="revanced_hide_shopping_links_title">Amaga els enllaços de compra a la descripció del vídeo</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">Els enllaços de compra s\'amaguen</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">Els enllaços de compra es mostren</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">Els enllaços de compra a la descripció del vídeo s\'amaguen</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">Els enllaços de compra a la descripció del vídeo es mostren</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Amaga l\'opció \"Visita la botiga\" a les pàgines dels canals</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Botó amagat</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Botó mostrat</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">El botó a la pàgina del canal s\'amaga</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">El botó a la pàgina del canal es mostra</string>
|
||||
<string name="revanced_hide_web_search_results_title">Amaga els resultats de la cerca al web</string>
|
||||
<string name="revanced_hide_web_search_results_summary_on">Els resultats de la cerca al web estan ocults</string>
|
||||
<string name="revanced_hide_web_search_results_summary_off">Els resultats de la cerca al web estant mostrats</string>
|
||||
@@ -446,10 +443,10 @@ Aquesta funció només està disponible per a dispositius antics"</string>
|
||||
<string name="revanced_share_copy_url_success">S\'ha copiat l\'URL al porta-retalls</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">S\'ha copiat l\'URL amb data i hora</string>
|
||||
<string name="revanced_copy_video_url_title">Mostra el botó de l\'URL</string>
|
||||
<string name="revanced_copy_video_url_summary_on">El botó es mostra. Toca per copiar l\'URL del vídeo. Mantén premut per copiar l\'URL del vídeo amb marca de temps</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Es mostra el botó. Toqueu per copiar l\'URL del vídeo. Toqueu i manteniu premut per copiar-lo amb la marca de temps</string>
|
||||
<string name="revanced_copy_video_url_summary_off">El botó no es mostra</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Mostra el botó per copiar l\'URL amb marca de temps</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Es mostra el botó. Toqueu per copiar l\'URL del vídeo amb segell de temps. Toqueu i manteniu premut per copiar el vídeo sense segell de temps</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Es mostra el botó. Toqueu per copiar l\'URL del vídeo amb la marca de temps. Toqueu i manteniu premut per copiar-lo sense la marca de temps</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">No es mostra el botó</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
@@ -462,8 +459,8 @@ Aquesta funció només està disponible per a dispositius antics"</string>
|
||||
<string name="revanced_external_downloader_screen_title">Descarregues externes</string>
|
||||
<string name="revanced_external_downloader_screen_summary">Configuració per utilitzar un descarregador extern</string>
|
||||
<string name="revanced_external_downloader_title">Mostra el botó de descàrrega extern</string>
|
||||
<string name="revanced_external_downloader_summary_on">Botó de descàrrega mostrat al reproductor</string>
|
||||
<string name="revanced_external_downloader_summary_off">El botó de descàrrega no es mostra al reproductor</string>
|
||||
<string name="revanced_external_downloader_summary_on">El botó de descàrrega al reproductor es mostra</string>
|
||||
<string name="revanced_external_downloader_summary_off">El botó de descàrrega al reproductor no es mostra</string>
|
||||
<!-- 'download action button' should be translated using the same wording as the translation of 'revanced_hide_download_button_title' -->
|
||||
<string name="revanced_external_downloader_action_button_title">Sobrescriu el botó d\'acció de Desa</string>
|
||||
<string name="revanced_external_downloader_action_button_summary_on">El botó de descàrrega obre el vostre descarregador extern</string>
|
||||
@@ -484,11 +481,15 @@ Aquesta funció només està disponible per a dispositius antics"</string>
|
||||
</patch>
|
||||
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
||||
<string name="revanced_swipe_brightness_title">Habilita el control de brillo por gesto</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">El control lliscant de brillantor està habilitat</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">El control lliscant de brillantor està inhabilitat</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">"S'ha activat el lliscament de la brillantor a pantalla completa
|
||||
|
||||
Ajusteu la brillantor lliscant verticalment a la part esquerra de la pantalla"</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">S\'ha desactivat el lliscament de la brillantor a pantalla completa</string>
|
||||
<string name="revanced_swipe_volume_title">Habilita el control de volumen por gesto</string>
|
||||
<string name="revanced_swipe_volume_summary_on">Actiu el canvi de volum amb gestos</string>
|
||||
<string name="revanced_swipe_volume_summary_off">Desactivat el canvi de volum amb gestos</string>
|
||||
<string name="revanced_swipe_volume_summary_on">"Lliscar el dit a pantalla completa per al volum està activat
|
||||
|
||||
Ajusteu el volum lliscant verticalment a la part dreta de la pantalla"</string>
|
||||
<string name="revanced_swipe_volume_summary_off">Lliscar el dit a pantalla completa per al volum està desactivat</string>
|
||||
<string name="revanced_swipe_press_to_engage_title">Activa el gest de polsar per lliscar</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_on">Activat el gest de prémer per lliscar</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">Desactivat el gest de prémer per lliscar</string>
|
||||
@@ -501,16 +502,19 @@ Aquesta funció només està disponible per a dispositius antics"</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">Activa el gest de la brillantor automàtica</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">Deslizar hacia abajo hasta el valor más bajo del gesto de brillo activa el brillo automático</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">Deslizar hacia abajo hasta el valor más bajo no activa el brillo automático</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">Automàtic</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">Temps límite de superposició de lliscament</string>
|
||||
<string name="revanced_swipe_overlay_timeout_summary">La quantitat de mil·lisegons que la superposició és visible</string>
|
||||
<string name="revanced_swipe_text_overlay_size_title">Mida del text de la superposició lliscant</string>
|
||||
<string name="revanced_swipe_text_overlay_size_summary">La mida del text per a la superposició lliscant</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_title">Opacitat del fons de la superposició de lliscament</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_summary">Valor d\'opacitat entre 0 i 100</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_invalid_toast">L\'opacitat de lliscament ha d\'estar entre 0 i 100</string>
|
||||
<string name="revanced_swipe_threshold_title">Llindar de magnitud de lliscament</string>
|
||||
<string name="revanced_swipe_threshold_summary">La quantitat de llindar per a què es produeixi el desplaçament</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_title">Mostra la superposició circular</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_summary_on">Es mostra la superposició circular</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_summary_off">Es mostra la superposició horitzontal</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_title">Activa l\'estil minimalista</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_summary_on">S\'ha activat l\'estil de superposició minimalista</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_summary_off">L\'estil de superposició mínima està desactivat</string>
|
||||
<string name="revanced_swipe_change_video_title">Activa la funció de lliscament per canviar vídeos</string>
|
||||
<string name="revanced_swipe_change_video_summary_on">Lliscar en mode de pantalla completa canviarà al vídeo següent/anterior</string>
|
||||
<string name="revanced_swipe_change_video_summary_off">Lliscar en mode de pantalla completa no canviarà al vídeo següent/anterior</string>
|
||||
@@ -523,6 +527,9 @@ Aquesta funció només està disponible per a dispositius antics"</string>
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<string name="revanced_hide_buttons_screen_title">Botons d\'acció</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">Amaga o mostra botons sota els vídeos</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Desactiva l\'efecte brillant de M\'agrada i Subscriu-te</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">Els botons M\'agrada i Subscriu-te no brillaran quan es mencionin</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">Els botons M\'agrada i Subscriu-te brillaran quan es mencionin</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">Amaga M\'agrada i No m\'agrada</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">Els botons M\'agrada i No m\'agrada estan ocults</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">Els botons M\'agrada i No m\'agrada es mostren</string>
|
||||
@@ -575,12 +582,18 @@ Aquesta funció només està disponible per a dispositius antics"</string>
|
||||
<string name="revanced_hide_subscriptions_button_title">Amaga les subscripcions</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_on">El botó de subscripcions està ocult</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">El botó de subscripcions es mostra</string>
|
||||
<string name="revanced_hide_notifications_button_title">Amaga les notificacions</string>
|
||||
<string name="revanced_hide_notifications_button_summary_on">El botó de notificacions està amagat</string>
|
||||
<string name="revanced_hide_notifications_button_summary_off">El botó de notificacions es mostra</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">Canvia Crea amb notificacions</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"El botó Crea es canvia pel botó Notificacions
|
||||
|
||||
Nota: si actives aquesta opció, també s'amaguen els anuncis de vídeo per força"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">El botó Crear no s\'intercanvia amb el botó Notificacions</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_user_dialog_message">"Desactivar aquesta opció també desactivarà el bloqueig d'anuncis de Shorts.
|
||||
|
||||
Si canviar aquesta opció no té cap efecte, prova a canviar al mode d'incògnit."</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">Amagueu les etiquetes dels botons de navegació</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">Les etiquetes estan amagades</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">Les etiquetes es mostren</string>
|
||||
@@ -795,10 +808,13 @@ Nota: si actives aquesta opció, també s'amaguen els anuncis de vídeo per for
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_on">La barra de navegació està oculta</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">La barra de navegació està visible</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
||||
<string name="revanced_disable_suggested_video_end_screen_title">Deshabilitar pantalla final amb vídeos suggerits</string>
|
||||
<string name="revanced_disable_suggested_video_end_screen_summary_on">Els vídeos suggerits estaran desactivats</string>
|
||||
<string name="revanced_disable_suggested_video_end_screen_summary_off">Els vídeos suggerits estaran visibles</string>
|
||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||
<string name="revanced_end_screen_suggested_video_title">Amaga el vídeo suggerit de la pantalla final</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_on">"El vídeo suggerit de la pantalla final s'amaga quan la reproducció automàtica està desactivada
|
||||
|
||||
La reproducció automàtica es pot canviar a la configuració de YouTube:
|
||||
Configuració → Reproducció → Reprodueix el vídeo següent automàticament"</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_off">Es mostra el vídeo suggerit de la pantalla final</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.time.hideTimestampPatch">
|
||||
<string name="revanced_hide_timestamp_title">Amagar segell de temps del vídeo</string>
|
||||
@@ -831,7 +847,7 @@ Nota: si actives aquesta opció, també s'amaguen els anuncis de vídeo per for
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_ryd_failure_connection_timeout">Els \"no m\'agrada\" no estan disponibles temporalment (temps d\'espera de l\'API)</string>
|
||||
<string name="revanced_ryd_failure_connection_status_code">Els \"no m\'agrada\" no estan disponibles (estat %d)</string>
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">Els \"no m\'agrada\" no estan disponibles (límit de l\'API del client assolit)</string>
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">No hi ha \"no m\'agrada\" disponibles (límit de l\'API del client)</string>
|
||||
<string name="revanced_ryd_failure_generic">Els \"no m\'agrada\" no estan disponibles (%s)</string>
|
||||
<!-- Toast shown if the user enables RYD while a video is opened, and then tries to vote for the video. -->
|
||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Recarrega el vídeo per votar utilitzant Return YouTube Dislike</string>
|
||||
@@ -840,14 +856,14 @@ Nota: si actives aquesta opció, també s'amaguen els anuncis de vídeo per for
|
||||
<string name="revanced_ryd_enable_summary_on">Els \"no m\'agrada\" es mostren</string>
|
||||
<string name="revanced_ryd_enable_summary_off">Els \"no m\'agrada\" no es mostren</string>
|
||||
<string name="revanced_ryd_shorts_title">Mostrar \"no m\'agrada\" a Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Els \"no m\'agrada\" es mostren a Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"No m'agrades es mostren als Shorts
|
||||
<string name="revanced_ryd_shorts_summary_on">Els \"no m\'agrada\" als Shorts es mostren</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Els \"no m'agrada\" als Shorts es mostren
|
||||
|
||||
Limitació: és possible que els No m'agrades no apareguin en mode d'incògnit"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Els \"no m\'agrada\" estan ocults a Shorts</string>
|
||||
Limitació: és possible que els \"no m'agrada\" no apareguin en mode d'incògnit"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Els \"no m\'agrada\" als Shorts no es mostren</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">\"No m\'agrada\" com a percentatge</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Els \"no m\'agrada\" es mostren com a percentatge</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">Els \"no m\'agrada\" es mostren com a nombre</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">Els \"no m\'agrada\" es mostren com un número</string>
|
||||
<!-- Translations should use language similar to 'revanced_sb_enable_compact_skip_button' -->
|
||||
<string name="revanced_ryd_compact_layout_title">Botó Compact Like</string>
|
||||
<string name="revanced_ryd_compact_layout_summary_on">Botó \"m\'agrada\" estilitzat per a l\'amplada mínima</string>
|
||||
@@ -909,20 +925,20 @@ Aquesta funció funciona millor amb una qualitat de vídeo de 720p o inferior i
|
||||
<string name="revanced_sb_square_layout_sum_on">Els botons i controls són quadrats</string>
|
||||
<string name="revanced_sb_square_layout_sum_off">Els botons i els controls són arrodonits</string>
|
||||
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
|
||||
<string name="revanced_sb_enable_compact_skip_button">Utilitzar el botó de salt compacte</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button">Utilitza el botó Omet compacte</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_on">El botó de salt té un estil per a una amplada mínima</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_off">El botó de salt té un estil per a una millor aparença</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Ocultar automàticament el botó de salt</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Amaga automàticament el botó Omet</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">El botó \"Skip\" es tanca després d\'uns segons</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">El botó de salt es mostra durant tot el segment</string>
|
||||
<string name="revanced_sb_general_skiptoast">Mostrar una notificació quan es salti automàticament</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">El botó Omet es mostra per a tot el segment</string>
|
||||
<string name="revanced_sb_general_skiptoast">Mostra un toast quan s\'omet</string>
|
||||
<string name="revanced_sb_general_skiptoast_sum_on">Es mostra una notificació quan un segment es salti automàticament. Toqueu aquí per veure un exemple</string>
|
||||
<string name="revanced_sb_general_skiptoast_sum_off">No es mostra cap notificació. Toqueu aquí per veure un exemple</string>
|
||||
<string name="revanced_sb_general_time_without">Mostrar la durada del vídeo sense segments</string>
|
||||
<string name="revanced_sb_general_time_without_sum_on">La durada del vídeo menys tots els segments, es mostra entre parèntesis al costat de la durada completa del vídeo</string>
|
||||
<string name="revanced_sb_general_time_without_sum_off">Es mostra la durada completa del vídeo</string>
|
||||
<string name="revanced_sb_create_segment_category">Creació de nous segments</string>
|
||||
<string name="revanced_sb_enable_create_segment">Mostrar el botó de crear un nou segment</string>
|
||||
<string name="revanced_sb_enable_create_segment">Mostra el botó Crea un segment nou</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_on">El botó de crear un nou segment es mostra</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_off">El botó de crear un nou segment no es mostra</string>
|
||||
<string name="revanced_sb_general_adjusting">Ajustar el pas del nou segment</string>
|
||||
@@ -1015,7 +1031,7 @@ El teu ID d'usuari és com una contrasenya i no l'hauries de compartir mai."</st
|
||||
<string name="revanced_sb_skipped_multiple_segments">Múltiples segments omesos</string>
|
||||
<string name="revanced_sb_skip_automatically">Omet automàticament</string>
|
||||
<string name="revanced_sb_skip_automatically_once">Omet automàticament una vegada</string>
|
||||
<string name="revanced_sb_skip_showbutton">Mostra un botó d\'omissió</string>
|
||||
<string name="revanced_sb_skip_showbutton">Mostra un botó Omet</string>
|
||||
<string name="revanced_sb_skip_seekbaronly">Mostra a la barra de cerca</string>
|
||||
<string name="revanced_sb_skip_ignore">Desactiva</string>
|
||||
<string name="revanced_sb_submit_failed_invalid">No s\'ha pogut enviar el segment: %s</string>
|
||||
@@ -1041,9 +1057,9 @@ Ja existeix"</string>
|
||||
<string name="revanced_sb_new_segment_disabled_category">La categoria està desactivada a la configuració. Habiliteu la categoria per enviar.</string>
|
||||
<string name="revanced_sb_new_segment_title">Nou segment de SponsorBlock</string>
|
||||
<string name="revanced_sb_new_segment_mark_time_as_question">Definir %s com a inici o final d\'un nou segment?</string>
|
||||
<string name="revanced_sb_new_segment_mark_start">inici</string>
|
||||
<string name="revanced_sb_new_segment_mark_end">final</string>
|
||||
<string name="revanced_sb_new_segment_now">ara</string>
|
||||
<string name="revanced_sb_new_segment_mark_start">Inici</string>
|
||||
<string name="revanced_sb_new_segment_mark_end">Final</string>
|
||||
<string name="revanced_sb_new_segment_now">Ara</string>
|
||||
<string name="revanced_sb_new_segment_time_start">Temps en què comença el segment</string>
|
||||
<string name="revanced_sb_new_segment_time_end">Temps en què acaba el segment</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">Els temps són correctes?</string>
|
||||
@@ -1064,7 +1080,7 @@ Preparat per enviar?"</string>
|
||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Temps invàlid proporcionat</string>
|
||||
<string name="revanced_sb_stats">Estadístiques</string>
|
||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||
<string name="revanced_sb_stats_connection_failure">Les estadístiques no estan disponibles temporalment (API està avall)</string>
|
||||
<string name="revanced_sb_stats_connection_failure">Les estadístiques no estan disponibles temporalment (l\'API no funciona)</string>
|
||||
<string name="revanced_sb_stats_loading">S\'està carregant...</string>
|
||||
<string name="revanced_sb_stats_sb_disabled">SponsorBlock està desactivat</string>
|
||||
<string name="revanced_sb_stats_username">El teu nom d\'usuari: <b>%s</b></string>
|
||||
@@ -1282,13 +1298,13 @@ Toca aquí per obtenir més informació sobre DeArrow"</string>
|
||||
<string name="revanced_alt_thumbnail_stills_time_entry_2">Centre del vídeo</string>
|
||||
<string name="revanced_alt_thumbnail_stills_time_entry_3">Final del vídeo</string>
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_alt_thumbnail_dearrow_error">DeArrow temporalment no disponible (codi d\'estat: %s)</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow temporalment no disponible</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_error">DeArrow no està disponible temporalment (codi d\'estat: %s)</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow no està disponible temporalment</string>
|
||||
</patch>
|
||||
<patch id="misc.announcements.announcementsPatch">
|
||||
<string name="revanced_announcements_title">Mostra els anuncis de ReVanced</string>
|
||||
<string name="revanced_announcements_summary_on">Els anuncis es mostren a l\'inici</string>
|
||||
<string name="revanced_announcements_summary_off">Els anuncis no es mostren a l\'inici</string>
|
||||
<string name="revanced_announcements_summary_on">Els anuncis a l\'inici es mostren</string>
|
||||
<string name="revanced_announcements_summary_off">Els anuncis a l\'inici no es mostren</string>
|
||||
<string name="revanced_announcements_enabled_summary">Mostra els anuncis a l\'inici</string>
|
||||
<string name="revanced_announcements_connection_failed">Error de connexió al proveïdor d\'anuncis</string>
|
||||
<string name="revanced_announcements_dialog_dismiss">Descarta</string>
|
||||
@@ -1338,10 +1354,11 @@ Si actives aquesta opció, es poden desbloquejar qualitats de vídeo més altes"
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Els hàptics estan habilitats</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">Forçar àudio original</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Utilitzant àudio original</string>
|
||||
<string name="revanced_force_original_audio_title">Forçar l\'idioma d\'àudio original</string>
|
||||
<string name="revanced_force_original_audio_summary_on">S\'utilitza l\'idioma d\'àudio original</string>
|
||||
<string name="revanced_force_original_audio_summary_off">Utilitzant àudio predeterminat</string>
|
||||
<string name="revanced_force_original_audio_not_available">Per utilitzar aquesta funció, canvia la suplantació de flux al tipus de client iOS</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for revanced_spoof_video_streams_screen_title -->
|
||||
<string name="revanced_force_original_audio_not_available">Per utilitzar aquesta funció, canvieu \"Suplantació de fluxos de vídeo\" a iOS TV</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
@@ -1404,8 +1421,6 @@ Si actives aquesta opció, es poden desbloquejar qualitats de vídeo més altes"
|
||||
La reproducció de vídeo pot no funcionar"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">Desactivar aquesta configuració pot causar problemes de reproducció de vídeo.</string>
|
||||
<string name="revanced_spoof_video_streams_client_type_title">Client predeterminat</string>
|
||||
<!-- 'no auth' means no authentication -->
|
||||
<string name="revanced_spoof_video_streams_client_type_android_vr_no_auth">Android VR (sense autorització)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Forza iOS AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">El còdec de vídeo es força a AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">El còdec de vídeo es determina automàticament.</string>
|
||||
|
||||
@@ -161,16 +161,13 @@ Klepněte na tlačítko Pokračovat a povolte změny optimalizace."</string>
|
||||
<string name="revanced_debug_stacktrace_summary_on">Protokoly ladění obsahují trasování zásobníku</string>
|
||||
<string name="revanced_debug_stacktrace_summary_off">Ladící protokoly nezahrnují sledování zásobníku</string>
|
||||
<string name="revanced_debug_toast_on_error_title">Zobrazit oznámení v případě chyby ReVanced</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Oznámení se zobrazí, pokud dojde k chybě</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">Oznámení se nezobrazí, pokud dojde k chybě</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Zobrazí se toast, pokud dojde k chybě</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">Toast se nezobrazí, pokud dojde k chybě</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"Vypnutí chybových toastů skryje všechna chybová oznámení ReVanced.
|
||||
|
||||
Nebudete informováni o žádné neočekávané události."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Deaktivovat zvýraznění tlačítek Like a Subscribe</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">Tlačítka Like a Subscribe po zmínce nebudou zvýrazněna</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">Tlačítka Like a Subscribe po zmínce budou zvýrazněna</string>
|
||||
<string name="revanced_hide_album_cards_title">Skrýt karty alb</string>
|
||||
<string name="revanced_hide_album_cards_summary_on">Karty alb jsou skryté</string>
|
||||
<string name="revanced_hide_album_cards_summary_off">Karty alb jsou zobrazeny</string>
|
||||
@@ -193,22 +190,22 @@ Nebudete informováni o žádné neočekávané události."</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">Police sú zobrazené</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<string name="revanced_hide_join_membership_button_title">Skryť tlačidlo \"Pripojiť sa\"</string>
|
||||
<string name="revanced_hide_join_membership_button_title">Skrýt tlačítko Připojit se</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">Tlačidlo je skryté</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">Tlačítko je zobrazeno</string>
|
||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Skryť police \"Pre vás\" na stránke kanála</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Police je skrytá</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Polička je prikazana</string>
|
||||
<string name="revanced_hide_for_you_shelf_title">Skrýt panel „Pro vás“</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Panel polic ve stránce kanálu je skrytý</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Panel polic ve stránce kanálu je zobrazen</string>
|
||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
||||
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||
<string name="revanced_hide_notify_me_button_title">Skryť tlačidlo \'Upozornite ma\'</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">Tlačítko je skryté</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">Tlačítko je zobrazeno</string>
|
||||
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">Skryť odporúčania \'Ľudia pozerali aj\'</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">Odporúčania sú skryté</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">Odporúčania sú zobrazené</string>
|
||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">Skrýt štítek „Lidé také sledovali“</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">Štítek je skrytý</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">Štítek je zobrazen</string>
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">Skrýt tlačítko „Zobrazit více“</string>
|
||||
@@ -224,8 +221,8 @@ Nebudete informováni o žádné neočekávané události."</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_on">Police \"Další videá\" sa nezobrazuje</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_off">Zobrazuje sa polícia \"Další videá\"</string>
|
||||
<string name="revanced_hide_expandable_chip_title">Skrýt rozbalovací kartu pod videy</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">Rozbalovací karty jsou skryty</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">Rozbalovací karty se zobrazují</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">Rozbalitelná karta je skrytá</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">Rozbalitelná karta je zobrazena</string>
|
||||
<string name="revanced_hide_community_posts_title">Skrýt příspěvky komunity</string>
|
||||
<string name="revanced_hide_community_posts_summary_on">Příspěvky komunity jsou skryté</string>
|
||||
<string name="revanced_hide_community_posts_summary_off">Příspěvky komunity jsou zobrazeny</string>
|
||||
@@ -241,7 +238,7 @@ Nebudete informováni o žádné neočekávané události."</string>
|
||||
<string name="revanced_hide_community_guidelines_title">Skrýt pokyny pro komunitu</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_on">Pokyny pro komunitu jsou skryty</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_off">Pokyny pro komunitu se zobrazují</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">Skryj pokyny pro komunitu predplatitelů</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">Skrýt pokyny pro odběratele</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_on">Pokyny pro komunitu předplatitelů jsou skryté</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">Pokyny pro komunitu odběratelů se zobrazují</string>
|
||||
<string name="revanced_hide_channel_member_shelf_title">Skryj polici členů kanálu</string>
|
||||
@@ -280,25 +277,25 @@ Nebudete informováni o žádné neočekávané události."</string>
|
||||
<string name="revanced_hide_artist_cards_title">Skrýt karty umělců</string>
|
||||
<string name="revanced_hide_artist_cards_summary_on">Karty umělců jsou skryty</string>
|
||||
<string name="revanced_hide_artist_cards_summary_off">Karty umělců se zobrazují</string>
|
||||
<string name="revanced_hide_attributes_section_title">Skrýt sekci s atributy</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">\"Místa na videu\", sekce s Hrami a Hudbou jsou skryty</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">\'Mista vybraná\', sekce Hry a Hudba se zobrazují</string>
|
||||
<string name="revanced_hide_chapters_section_title">Skryj sekcję Rozdziały</string>
|
||||
<string name="revanced_hide_attributes_section_title">Skrýt atributy</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">Sekce Doporučená místa, Hry, Hudba a Zmínění lidé jsou skryté</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">Sekce Doporučená místa, Hry, Hudba a Zmínění lidé jsou zobrazené</string>
|
||||
<string name="revanced_hide_chapters_section_title">Skrýt kapitoly</string>
|
||||
<string name="revanced_hide_chapters_section_summary_on">Sekcja Rozdziały jest ukryta</string>
|
||||
<string name="revanced_hide_chapters_section_summary_off">Sekcja Rozdziały jest widoczna</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">Skrýt sekci „Jak vznikl tento obsah“</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">Sekce „Jak vznikl tento obsah“ je skrytá</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">Sekce „Jak vznikl tento obsah“ je zobrazena</string>
|
||||
<string name="revanced_hide_podcast_section_title">Ukryj sekcję \'Odkryj podcast\'</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Sekcja \'Odkryj podcast\' jest ukryta</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Sekcja \'Odkryj podcast\' jest widoczna</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Skrýt sekci informačních karet</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">Skrýt „Jak tento obsah vznikl“</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">Sekce Jak tento obsah vznikl je skrytá</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">Sekce Jak tento obsah vznikl je zobrazena</string>
|
||||
<string name="revanced_hide_podcast_section_title">Skrýt „Prozkoumat podcast“</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Sekce Prozkoumat podcast je skrytá</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Sekce Prozkoumat podcast je zobrazena</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Skrýt informační karty</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Sekce informačních karet je skrytá</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Sekce informačních karet je zobrazena</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Skrýt sekci \'Klíčové koncepty\'</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Sekce klíčových konceptů je skrytá</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Sekce klíčových konceptů je zobrazena</string>
|
||||
<string name="revanced_hide_transcript_section_title">Skrýt sekci přepisu</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Skrýt „Klíčové koncepty“</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Sekce Klíčové koncepty je skrytá</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Sekce Klíčové koncepty je zobrazena</string>
|
||||
<string name="revanced_hide_transcript_section_title">Skrýt přepis</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Sekce přepisu je skrytá</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Sekce přepisu je zobrazena</string>
|
||||
<string name="revanced_hide_description_components_screen_title">Popis videa</string>
|
||||
@@ -316,27 +313,27 @@ Nebudete informováni o žádné neočekávané události."</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">V souvisejících videích zobrazeno</string>
|
||||
<string name="revanced_comments_screen_title">Komentáře</string>
|
||||
<string name="revanced_comments_screen_summary">Skrýt nebo zobrazit komponenty sekce komentářů</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">Skrýt \'Souhrn chatu\'</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on"> \'Souhrn chatu\' je skrytý</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">\'Souhrn chatu\' je zobrazen</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">Skrýt „Shrnutí chatu“</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">Shrnutí chatu je skryto</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">Shrnutí chatu je zobrazeno</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">Skrýt záhlaví \"Komentáře od členů\"</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">Záhlaví \"Komentáře od členů\" je skryto</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">Záhlaví \"Komentáře od členů\" je zobrazeno</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">Záhlaví Komentáře od členů je skryto</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">Záhlaví Komentáře od členů je zobrazeno</string>
|
||||
<string name="revanced_hide_comments_section_title">Skrýt sekci komentářů</string>
|
||||
<string name="revanced_hide_comments_section_summary_on">Sekce komentářů je skrytá</string>
|
||||
<string name="revanced_hide_comments_section_summary_off">Sekce komentářů je zobrazena</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_title">Skrýt tlačítko \"Vytvořit Short\"</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">Tlačítko \"Vytvořit Short\" je skryté</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Tlačítko \"Vytvořit Short\" je viditelné</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">Tlačítko Vytvořit Short je skryté</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Tlačítko Vytvořit Short je zobrazeno</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">Skrýt tlačítka emoji a časového razítka</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">Tlačítka emoji a časového razítka jsou skryta</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">Tlačítka emoji a časového razítka jsou zobrazena</string>
|
||||
<string name="revanced_hide_comments_preview_comment_title">Skrýt náhled komentáře</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_on">Náhled komentáře je skryt</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_off">Náhled komentáře je zobrazen</string>
|
||||
<string name="revanced_hide_comments_thanks_button_title">Skrýt tlačítko děk」、「</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_on">Tlačítko poděkování je skryto</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_off">Tlačítko poděkování je zobrazeno</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">Skrýt tlačítka s časovými údaji a emoji</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">Tlačítka s časovými údaji a emoji jsou skryta</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">Tlačítka s časovými údaji a emoji jsou zobrazena</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">Skrýt YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Doodles na liště vyhledávání jsou skryty</string>
|
||||
@@ -417,12 +414,12 @@ Tato funkce je dostupná pouze pro starší zařízení"</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_on">Nákupní police je skryta</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_off">Nákupní police je zobrazena</string>
|
||||
<string name="revanced_hide_shopping_links_title">Skrýt odkazy na nakupování v popisu videa</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">Odkazy na nakupování jsou skryty</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">Odkazy na nakupování jsou zobrazeny</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">Nákupní odkazy v popisu videa jsou skryty</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">Nákupní odkazy v popisu videa jsou zobrazeny</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Skrýt tlačítko \'Navštívit obchod\' na stránkách kanálů</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Tlačítko je skryté</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Tlačítko je zobrazeno</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Tlačítko na stránce kanálu je skryto</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Tlačítko na stránce kanálu je zobrazeno</string>
|
||||
<string name="revanced_hide_web_search_results_title">Skryté webové výsledky vyhledávání</string>
|
||||
<string name="revanced_hide_web_search_results_summary_on">Webové výsledky vyhledávání jsou skryté</string>
|
||||
<string name="revanced_hide_web_search_results_summary_off">Webové výsledky vyhledávání jsou zobrazeny</string>
|
||||
@@ -446,10 +443,10 @@ Tato funkce je dostupná pouze pro starší zařízení"</string>
|
||||
<string name="revanced_share_copy_url_success">URL zkopírováno do schránky</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">Adresa URL s časovým razítkem zkopírována</string>
|
||||
<string name="revanced_copy_video_url_title">Zobrazit tlačítko pro kopírování adresy URL videa</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Tlačítko je zobrazeno. Klepnutím zkopírujete adresu URL videa. Klepnutím a podržením zkopírujete adresu URL videa s časovým razítkem</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Zobrazí se tlačítko. Klepnutím zkopírujete URL videa. Klepnutím a podržením zkopírujete s časovou značkou</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Tlačítko se nezobrazuje</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Zobrazit tlačítko pro kopírování adresy URL videa s časovým razítkem</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Tlačítko je zobrazeno. Klepnutím zkopírujete adresu URL videa s časovým razítkem. Klepnutím a podržením zkopírujete adresu URL videa bez časového razítka</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Zobrazí se tlačítko. Klepnutím zkopírujete URL videa s časovou značkou. Klepnutím a podržením zkopírujete bez časové značky</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Tlačítko se nezobrazuje</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
@@ -462,8 +459,8 @@ Tato funkce je dostupná pouze pro starší zařízení"</string>
|
||||
<string name="revanced_external_downloader_screen_title">Externí stahování</string>
|
||||
<string name="revanced_external_downloader_screen_summary">Nastavení pro použití externího stahování</string>
|
||||
<string name="revanced_external_downloader_title">Zobrazit tlačítko pro externí stahování</string>
|
||||
<string name="revanced_external_downloader_summary_on">Tlačítko pro stahování se zobrazuje v přehrávači</string>
|
||||
<string name="revanced_external_downloader_summary_off">Tlačítko pro stahování se v přehrávači nezobrazuje</string>
|
||||
<string name="revanced_external_downloader_summary_on">Tlačítko stahování v přehrávači je zobrazeno</string>
|
||||
<string name="revanced_external_downloader_summary_off">Tlačítko stahování v přehrávači není zobrazeno</string>
|
||||
<!-- 'download action button' should be translated using the same wording as the translation of 'revanced_hide_download_button_title' -->
|
||||
<string name="revanced_external_downloader_action_button_title">Přepsat tlačítko akce Stahování</string>
|
||||
<string name="revanced_external_downloader_action_button_summary_on">Tlačítko pro stahování otevře váš externí stahovač</string>
|
||||
@@ -484,11 +481,15 @@ Tato funkce je dostupná pouze pro starší zařízení"</string>
|
||||
</patch>
|
||||
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
||||
<string name="revanced_swipe_brightness_title">Povolit gesto pro jas</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">Přejetí pro jas je povoleno</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">Přejetí pro jas je zakázáno</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">"Potažení jasu na celou obrazovku je povoleno
|
||||
|
||||
Upravte jas přejetím svisle po levé straně obrazovky"</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">Potažení jasu na celou obrazovku je zakázáno</string>
|
||||
<string name="revanced_swipe_volume_title">Povolit gesto pro hlasitost</string>
|
||||
<string name="revanced_swipe_volume_summary_on">Posuvník hlasitosti je povolen</string>
|
||||
<string name="revanced_swipe_volume_summary_off">Posuvník hlasitosti je zakázán</string>
|
||||
<string name="revanced_swipe_volume_summary_on">"Přejetím prstem na celou obrazovku je povoleno
|
||||
|
||||
Hlasitost se upravuje svislým přejetím po pravé straně obrazovky"</string>
|
||||
<string name="revanced_swipe_volume_summary_off">Přejetí prstem na celou obrazovku je zakázáno</string>
|
||||
<string name="revanced_swipe_press_to_engage_title">Povolit gesto stisknutí pro přejetí</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_on">Stisknutí pro přejetí je povoleno</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">Stisknutí pro přejetí je zakázáno</string>
|
||||
@@ -501,16 +502,19 @@ Tato funkce je dostupná pouze pro starší zařízení"</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">Povolit gesto pro automatický jas</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">Přejetím dolů na nejnižší hodnotu gesta pro jas aktivujete automatický jas</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">Přejetím dolů na nejnižší hodnotu neaktivujete automatický jas</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">Automat</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">Timeout překrytí gesta</string>
|
||||
<string name="revanced_swipe_overlay_timeout_summary">Doba v milisekundách, po kterou je překrytí viditelné</string>
|
||||
<string name="revanced_swipe_text_overlay_size_title">Velikost textu překrytí gesta</string>
|
||||
<string name="revanced_swipe_text_overlay_size_summary">Velikost textu pro překrytí gesta</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_title">Průsvitnost pozadí překrytí tažením</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_summary">Hodnota průsvitnosti mezi 0-100</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_invalid_toast">Průsvitnost tažení musí být mezi 0-100</string>
|
||||
<string name="revanced_swipe_threshold_title">Práh vynucení gesta</string>
|
||||
<string name="revanced_swipe_threshold_summary">Velikost prahu pro provedení gesta</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_title">Zobrazit kruhovou překryvnou vrstvu</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_summary_on">Zobrazuje se kruhová překryvná vrstva</string>
|
||||
<string name="revanced_swipe_show_circular_overlay_summary_off">Zobrazuje se vodorovná překryvná vrstva</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_title">Povolit minimální styl</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_summary_on">Minimální styl překrytí je povolen</string>
|
||||
<string name="revanced_swipe_overlay_minimal_style_summary_off">Minimální styl překryvné vrstvy je zakázán</string>
|
||||
<string name="revanced_swipe_change_video_title">Povolit přejetí prstem pro změnu videa</string>
|
||||
<string name="revanced_swipe_change_video_summary_on">Přejetí prstem v režimu celé obrazovky změní video na další/předchozí</string>
|
||||
<string name="revanced_swipe_change_video_summary_off">Přejetí prstem v režimu celé obrazovky nebude video měnit na další/předchozí</string>
|
||||
@@ -523,6 +527,9 @@ Tato funkce je dostupná pouze pro starší zařízení"</string>
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<string name="revanced_hide_buttons_screen_title">Akční tlačítka</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">Skrýt nebo zobrazit tlačítka pod videi</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Deaktivovat zvýraznění tlačítek Like a Subscribe</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">Tlačítka Like a Subscribe po zmínce nebudou zvýrazněna</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">Tlačítka Like a Subscribe po zmínce budou zvýrazněna</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">Skrýt Like a Dislike</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">Tlačítka Like a Dislike jsou skryta</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">Tlačítka Like a Dislike jsou zobrazena</string>
|
||||
@@ -575,12 +582,18 @@ Tato funkce je dostupná pouze pro starší zařízení"</string>
|
||||
<string name="revanced_hide_subscriptions_button_title">Skrýt Odběry</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_on">Tlačítko Odběry je skryto</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Tlačítko Odběry je zobrazeno</string>
|
||||
<string name="revanced_hide_notifications_button_title">Skrýt oznámení</string>
|
||||
<string name="revanced_hide_notifications_button_summary_on">Tlačítko oznámení je skryto</string>
|
||||
<string name="revanced_hide_notifications_button_summary_off">Tlačítko oznámení je zobrazeno</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">Zaměnit Vytvořit s Oznámeními</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"Tlačítko Vytvořit se přepne s tlačítkem Oznámení
|
||||
|
||||
Poznámka: Povolení této funkce také vynuceně skryje video reklamy"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">Tlačítko Vytvořit není zaměněno s tlačítkem Oznámení</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_user_dialog_message">"Zakázáním tohoto nastavení také zakážete blokování reklam u položek Shorts.
|
||||
|
||||
Pokud změna tohoto nastavení nemá žádný účinek, zkuste přepnout do režimu anonymního prohlížení."</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">Skrýt štítky navigačních tlačítek</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">Štítky jsou skryty</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">Štítky jsou zobrazeny</string>
|
||||
@@ -795,10 +808,13 @@ Poznámka: Povolení této funkce také vynuceně skryje video reklamy"</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_on">Navigační panel je skrytý</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">Navigační panel je zobrazen</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
||||
<string name="revanced_disable_suggested_video_end_screen_title">Zakázat koncovou obrazovku s doporučenými videi</string>
|
||||
<string name="revanced_disable_suggested_video_end_screen_summary_on">Doporučená videa budou zakázána</string>
|
||||
<string name="revanced_disable_suggested_video_end_screen_summary_off">Doporučená videa budou zobrazena</string>
|
||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||
<string name="revanced_end_screen_suggested_video_title">Skrýt navrhované video na konci obrazovky</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_on">"Navrhované video na konci obrazovky je skryté, když je automatické přehrávání vypnuté.
|
||||
|
||||
Automatické přehrávání lze změnit v nastavení YouTube:
|
||||
Nastavení → Přehrávání → Automatické přehrávání dalšího videa"</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_off">Navrhované video na konci obrazovky se zobrazuje</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.time.hideTimestampPatch">
|
||||
<string name="revanced_hide_timestamp_title">Skrýt čas videa</string>
|
||||
@@ -831,7 +847,7 @@ Poznámka: Povolení této funkce také vynuceně skryje video reklamy"</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_ryd_failure_connection_timeout">Nelíbí se se dočasně nedají použít (časový limit API)</string>
|
||||
<string name="revanced_ryd_failure_connection_status_code">Nelíbí se se nedají použít (stav %d)</string>
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">Nelíbí se se nedají použít (limit klient API dosažen)</string>
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">Počty „Nelíbí se mi“ nejsou k dispozici (limit rozhraní API klienta)</string>
|
||||
<string name="revanced_ryd_failure_generic">Nelíbí se se nedají použít (%s)</string>
|
||||
<!-- Toast shown if the user enables RYD while a video is opened, and then tries to vote for the video. -->
|
||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Načtěte video znovu, abyste hlasovali pomocí Return YouTube Dislike</string>
|
||||
@@ -840,14 +856,14 @@ Poznámka: Povolení této funkce také vynuceně skryje video reklamy"</string>
|
||||
<string name="revanced_ryd_enable_summary_on">Nelíbí se se zobrazují</string>
|
||||
<string name="revanced_ryd_enable_summary_off">Nelíbí se se nezobrazují</string>
|
||||
<string name="revanced_ryd_shorts_title">Zobrazit nelíbí se v Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Nelíbí se se zobrazují v Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Nelíbí se zobrazují v Shorts
|
||||
<string name="revanced_ryd_shorts_summary_on">Počty „Nelíbí se mi“ u Shorts jsou zobrazeny</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Počty „Nelíbí se mi“ u Shorts jsou zobrazeny
|
||||
|
||||
Omezení: Nelíbí se se nemusí zobrazit v režimu inkognito"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Nelíbí se se neskryvají v Shorts</string>
|
||||
Omezení: Počty „Nelíbí se mi“ se nemusí zobrazit v anonymním režimu"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Počty „Nelíbí se mi“ u Shorts nejsou zobrazeny</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">Nelíbí se v procentech</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Nelíbí se se zobrazují v procentech</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">Nelíbí se se zobrazují jako číslo</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Počty „Nelíbí se mi“ se zobrazují jako procento</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">Počty „Nelíbí se mi“ se zobrazují jako číslo</string>
|
||||
<!-- Translations should use language similar to 'revanced_sb_enable_compact_skip_button' -->
|
||||
<string name="revanced_ryd_compact_layout_title">Kompaktní tlačítko To se mi líbí</string>
|
||||
<string name="revanced_ryd_compact_layout_summary_on">Tlačítko lajku stylizované pro minimální šířku</string>
|
||||
@@ -909,20 +925,20 @@ Tato funkce funguje nejlépe s kvalitou videa 720p nebo nižší a při použit
|
||||
<string name="revanced_sb_square_layout_sum_on">Tlačítka a ovládací prvky jsou čtvercové</string>
|
||||
<string name="revanced_sb_square_layout_sum_off">Tlačítka a ovládací prvky jsou zaoblené</string>
|
||||
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
|
||||
<string name="revanced_sb_enable_compact_skip_button">Použít kompaktní tlačítko pro přeskočení</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button">Použít kompaktní tlačítko Přeskočit</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_on">Tlačítko pro přeskočení je stylizováno pro minimální šířku</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_off">Tlačítko pro přeskočení je stylizováno pro nejlepší vzhled</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Automaticky skrýt tlačítko pro přeskočení</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Automaticky skrýt tlačítko Přeskočit</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Tlačítko pro přeskočení se skrývá po několika sekundách</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Tlačítko pro přeskočení je zobrazeno pro celý segment</string>
|
||||
<string name="revanced_sb_general_skiptoast">Zobrazit \"toast\", když se přeskočí automaticky</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Tlačítko Přeskočit se zobrazuje pro celý segment</string>
|
||||
<string name="revanced_sb_general_skiptoast">Zobrazit toast při přeskakování</string>
|
||||
<string name="revanced_sb_general_skiptoast_sum_on">\"Toast\" se zobrazí, když se segment automaticky přeskočí. Klepněte zde, abyste se podívali na příklad</string>
|
||||
<string name="revanced_sb_general_skiptoast_sum_off">\"Toast\" se nezobrazí. Klepněte zde, abyste se podívali na příklad</string>
|
||||
<string name="revanced_sb_general_time_without">Zobrazit délku videa bez segmentů</string>
|
||||
<string name="revanced_sb_general_time_without_sum_on">Délka videa minus všechny segmenty, zobrazená v závorkách vedle úplné délky videa</string>
|
||||
<string name="revanced_sb_general_time_without_sum_off">Zobrazena úplná délka videa</string>
|
||||
<string name="revanced_sb_create_segment_category">Vytváření nových segmentů</string>
|
||||
<string name="revanced_sb_enable_create_segment">Zobrazit tlačítko pro vytvoření nového segmentu</string>
|
||||
<string name="revanced_sb_enable_create_segment">Zobrazit tlačítko Vytvořit nový segment</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_on">Tlačítko pro vytvoření nového segmentu je zobrazeno</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_off">Tlačítko pro vytvoření nového segmentu není zobrazeno</string>
|
||||
<string name="revanced_sb_general_adjusting">Upravit krok nového segmentu</string>
|
||||
@@ -1015,7 +1031,7 @@ Vaše ID uživatele je jako heslo a nikdy by nemělo být sdíleno."</string>
|
||||
<string name="revanced_sb_skipped_multiple_segments">Přeskočeno více segmentů</string>
|
||||
<string name="revanced_sb_skip_automatically">Automaticky přeskočit</string>
|
||||
<string name="revanced_sb_skip_automatically_once">Přeskočit automaticky jednou</string>
|
||||
<string name="revanced_sb_skip_showbutton">Zobrazit tlačítko \"Přeskočit\"</string>
|
||||
<string name="revanced_sb_skip_showbutton">Zobrazit tlačítko Přeskočit</string>
|
||||
<string name="revanced_sb_skip_seekbaronly">Zobrazit v posuvníku</string>
|
||||
<string name="revanced_sb_skip_ignore">Zakázat</string>
|
||||
<string name="revanced_sb_submit_failed_invalid">Nelze odeslat segment: %s</string>
|
||||
@@ -1041,9 +1057,9 @@ Již existuje"</string>
|
||||
<string name="revanced_sb_new_segment_disabled_category">Kategorie je v nastavení zakázána. Povolte kategorii, abyste ji mohli odeslat.</string>
|
||||
<string name="revanced_sb_new_segment_title">Nový segment SponsorBlock</string>
|
||||
<string name="revanced_sb_new_segment_mark_time_as_question">Nastavit %s jako začátek nebo konec nového segmentu?</string>
|
||||
<string name="revanced_sb_new_segment_mark_start">začátek</string>
|
||||
<string name="revanced_sb_new_segment_mark_end">konec</string>
|
||||
<string name="revanced_sb_new_segment_now">nyní</string>
|
||||
<string name="revanced_sb_new_segment_mark_start">Začátek</string>
|
||||
<string name="revanced_sb_new_segment_mark_end">Konec</string>
|
||||
<string name="revanced_sb_new_segment_now">Teď</string>
|
||||
<string name="revanced_sb_new_segment_time_start">Čas, kdy segment začíná</string>
|
||||
<string name="revanced_sb_new_segment_time_end">Čas, kdy segment končí</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">Jsou časy správné?</string>
|
||||
@@ -1064,7 +1080,7 @@ Jste připraveni k odeslání?"</string>
|
||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Zadán neplatný čas</string>
|
||||
<string name="revanced_sb_stats">Statistiky</string>
|
||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||
<string name="revanced_sb_stats_connection_failure">Statistiky jsou dočasně nedostupné (API je vypnuté)</string>
|
||||
<string name="revanced_sb_stats_connection_failure">Statistiky jsou dočasně nedostupné (server API je mimo provoz)</string>
|
||||
<string name="revanced_sb_stats_loading">Načítání...</string>
|
||||
<string name="revanced_sb_stats_sb_disabled">SponsorBlock je zakázán</string>
|
||||
<string name="revanced_sb_stats_username">Vaše uživatelské jméno: <b>%s</b></string>
|
||||
@@ -1287,8 +1303,8 @@ Klepnutím sem se dozvíte více o DeArrow"</string>
|
||||
</patch>
|
||||
<patch id="misc.announcements.announcementsPatch">
|
||||
<string name="revanced_announcements_title">Zobrazit oznámení ReVanced</string>
|
||||
<string name="revanced_announcements_summary_on">Oznámení se zobrazují při spuštění</string>
|
||||
<string name="revanced_announcements_summary_off">Oznámení se nezobrazují při spuštění</string>
|
||||
<string name="revanced_announcements_summary_on">Oznámení při spuštění jsou zobrazena</string>
|
||||
<string name="revanced_announcements_summary_off">Oznámení při spuštění nejsou zobrazena</string>
|
||||
<string name="revanced_announcements_enabled_summary">Zobrazit oznámení při spuštění</string>
|
||||
<string name="revanced_announcements_connection_failed">Nepodařilo se připojit k poskytovateli oznámení</string>
|
||||
<string name="revanced_announcements_dialog_dismiss">Zrušit</string>
|
||||
@@ -1338,10 +1354,11 @@ Povolením této funkce lze odemknout vyšší kvality videa"</string>
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Haptika je povolena</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">Vynutit původní zvuk</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Používání původního zvuku</string>
|
||||
<string name="revanced_force_original_audio_title">Vynutit původní jazyk zvuku</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Použít původní jazyk zvuku</string>
|
||||
<string name="revanced_force_original_audio_summary_off">Používání výchozího zvuku</string>
|
||||
<string name="revanced_force_original_audio_not_available">Pro použití této funkce změňte typ klienta streamu na iOS</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for revanced_spoof_video_streams_screen_title -->
|
||||
<string name="revanced_force_original_audio_not_available">Chcete-li používat tuto funkci, změňte možnost „Zfalšovat datové proudy videa“ na iOS TV</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
@@ -1404,8 +1421,6 @@ Povolením této funkce lze odemknout vyšší kvality videa"</string>
|
||||
Přehrávání videa nemusí fungovat"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">Vypnutí tohoto nastavení může způsobit problémy s přehráváním videa.</string>
|
||||
<string name="revanced_spoof_video_streams_client_type_title">Výchozí klient</string>
|
||||
<!-- 'no auth' means no authentication -->
|
||||
<string name="revanced_spoof_video_streams_client_type_android_vr_no_auth">Android VR (bez ověření)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Vynucení kodeku iOS AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Kodek videa je vynucen na AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Kodek videa je určen automaticky</string>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user