mirror of
https://github.com/ReVanced/revanced-patches.git
synced 2026-01-23 18:51:03 +00:00
Compare commits
59 Commits
v5.12.0-de
...
v5.13.0-de
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f147b7b73d | ||
|
|
fb8dbb4723 | ||
|
|
1e0d27e689 | ||
|
|
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 |
168
CHANGELOG.md
168
CHANGELOG.md
@@ -1,3 +1,171 @@
|
|||||||
|
# [5.13.0-dev.18](https://github.com/ReVanced/revanced-patches/compare/v5.13.0-dev.17...v5.13.0-dev.18) (2025-02-28)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **Infinity for Reddit:** Add support for Infinity for Reddit Plus ([#4511](https://github.com/ReVanced/revanced-patches/issues/4511)) ([d74732b](https://github.com/ReVanced/revanced-patches/commit/d74732b7596104321bde263201d95649e4bd0eee))
|
||||||
|
|
||||||
|
# [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)
|
# [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() {
|
public static Context getContext() {
|
||||||
if (context == null) {
|
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;
|
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,
|
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());
|
"revanced_spoof_video_streams_ios_force_avc_user_dialog_message", new SpoofiOSAvailability());
|
||||||
// Client type must be last spoof setting due to cyclic references.
|
// 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) {
|
public static void privateSetValue(@NonNull BooleanSetting setting, @NonNull Boolean newValue) {
|
||||||
setting.value = Objects.requireNonNull(newValue);
|
setting.value = Objects.requireNonNull(newValue);
|
||||||
|
|
||||||
|
if (setting.isSetToDefault()) {
|
||||||
|
setting.removeFromPreferences();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -65,10 +69,8 @@ public class BooleanSetting extends Setting<Boolean> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save(@NonNull Boolean newValue) {
|
public void saveToPreferences() {
|
||||||
// Must set before saving to preferences (otherwise importing fails to update UI correctly).
|
preferences.saveBoolean(key, value);
|
||||||
value = Objects.requireNonNull(newValue);
|
|
||||||
preferences.saveBoolean(key, newValue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|||||||
@@ -89,10 +89,8 @@ public class EnumSetting<T extends Enum<?>> extends Setting<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save(@NonNull T newValue) {
|
public void saveToPreferences() {
|
||||||
// Must set before saving to preferences (otherwise importing fails to update UI correctly).
|
preferences.saveEnumAsString(key, value);
|
||||||
value = Objects.requireNonNull(newValue);
|
|
||||||
preferences.saveEnumAsString(key, newValue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|||||||
@@ -55,10 +55,8 @@ public class FloatSetting extends Setting<Float> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save(@NonNull Float newValue) {
|
public void saveToPreferences() {
|
||||||
// Must set before saving to preferences (otherwise importing fails to update UI correctly).
|
preferences.saveFloatString(key, value);
|
||||||
value = Objects.requireNonNull(newValue);
|
|
||||||
preferences.saveFloatString(key, newValue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|||||||
@@ -55,10 +55,8 @@ public class IntegerSetting extends Setting<Integer> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save(@NonNull Integer newValue) {
|
public void saveToPreferences() {
|
||||||
// Must set before saving to preferences (otherwise importing fails to update UI correctly).
|
preferences.saveIntegerString(key, value);
|
||||||
value = Objects.requireNonNull(newValue);
|
|
||||||
preferences.saveIntegerString(key, newValue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|||||||
@@ -55,10 +55,8 @@ public class LongSetting extends Setting<Long> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save(@NonNull Long newValue) {
|
public void saveToPreferences() {
|
||||||
// Must set before saving to preferences (otherwise importing fails to update UI correctly).
|
preferences.saveLongString(key, value);
|
||||||
value = Objects.requireNonNull(newValue);
|
|
||||||
preferences.saveLongString(key, newValue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import java.util.*;
|
|||||||
|
|
||||||
import static app.revanced.extension.shared.StringRef.str;
|
import static app.revanced.extension.shared.StringRef.str;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public abstract class Setting<T> {
|
public abstract class Setting<T> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -288,6 +287,13 @@ public abstract class Setting<T> {
|
|||||||
*/
|
*/
|
||||||
public static void privateSetValueFromString(@NonNull Setting<?> setting, @NonNull String newValue) {
|
public static void privateSetValueFromString(@NonNull Setting<?> setting, @NonNull String newValue) {
|
||||||
setting.setValueFromString(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.
|
* 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
|
@NonNull
|
||||||
public abstract T get();
|
public abstract T get();
|
||||||
|
|||||||
@@ -55,10 +55,8 @@ public class StringSetting extends Setting<String> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save(@NonNull String newValue) {
|
public void saveToPreferences() {
|
||||||
// Must set before saving to preferences (otherwise importing fails to update UI correctly).
|
preferences.saveString(key, value);
|
||||||
value = Objects.requireNonNull(newValue);
|
|
||||||
preferences.saveString(key, newValue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|||||||
@@ -66,22 +66,6 @@ public enum ClientType {
|
|||||||
true,
|
true,
|
||||||
"Android Creator"
|
"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(
|
IOS_UNPLUGGED(
|
||||||
33,
|
33,
|
||||||
"IOS_UNPLUGGED",
|
"IOS_UNPLUGGED",
|
||||||
@@ -112,6 +96,22 @@ public enum ClientType {
|
|||||||
forceAVC()
|
forceAVC()
|
||||||
? "iOS TV Force AVC"
|
? "iOS TV Force AVC"
|
||||||
: "iOS TV"
|
: "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() {
|
private static boolean forceAVC() {
|
||||||
|
|||||||
@@ -1,37 +1,60 @@
|
|||||||
package app.revanced.extension.tiktok.spoof.sim;
|
package app.revanced.extension.tiktok.spoof.sim;
|
||||||
|
|
||||||
import app.revanced.extension.shared.Logger;
|
import app.revanced.extension.shared.Logger;
|
||||||
|
import app.revanced.extension.shared.Utils;
|
||||||
import app.revanced.extension.tiktok.settings.Settings;
|
import app.revanced.extension.tiktok.settings.Settings;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class SpoofSimPatch {
|
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) {
|
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();
|
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 iso;
|
||||||
}
|
}
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getOperator(String 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();
|
String mcc_mnc = Settings.SIMSPOOF_MCCMNC.get();
|
||||||
Logger.printDebug(() -> "Spoofing sim MCC-MNC from: " + value + " to: " + mcc_mnc);
|
Logger.printDebug(() -> "Spoofing sim MCC-MNC from: " + value + " to: " + mcc_mnc);
|
||||||
return mcc_mnc;
|
return mcc_mnc;
|
||||||
}
|
}
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getOperatorName(String 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();
|
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 operator;
|
||||||
}
|
}
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ dependencies {
|
|||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdk = 33 // TODO: Update Swipe controls code to allow updating this to the latest sdk.
|
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdk = 26
|
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.HOME, Settings.HIDE_HOME_BUTTON.get());
|
||||||
put(NavigationButton.CREATE, Settings.HIDE_CREATE_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.SHORTS, Settings.HIDE_SHORTS_BUTTON.get());
|
||||||
put(NavigationButton.SUBSCRIPTIONS, Settings.HIDE_SUBSCRIPTIONS_BUTTON.get());
|
put(NavigationButton.SUBSCRIPTIONS, Settings.HIDE_SUBSCRIPTIONS_BUTTON.get());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
package app.revanced.extension.youtube.patches;
|
package app.revanced.extension.youtube.patches;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.os.Build;
|
|
||||||
|
|
||||||
import androidx.annotation.RequiresApi;
|
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -58,7 +55,6 @@ public class ShortsAutoplayPatch {
|
|||||||
/**
|
/**
|
||||||
* @return If the app is currently in background PiP mode.
|
* @return If the app is currently in background PiP mode.
|
||||||
*/
|
*/
|
||||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
|
||||||
private static boolean isAppInBackgroundPiPMode() {
|
private static boolean isAppInBackgroundPiPMode() {
|
||||||
Activity activity = mainActivityRef.get();
|
Activity activity = mainActivityRef.get();
|
||||||
return activity != null && activity.isInPictureInPictureMode();
|
return activity != null && activity.isInPictureInPictureMode();
|
||||||
@@ -80,7 +76,6 @@ public class ShortsAutoplayPatch {
|
|||||||
/**
|
/**
|
||||||
* Injection point.
|
* Injection point.
|
||||||
*/
|
*/
|
||||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
|
||||||
public static Enum<?> changeShortsRepeatBehavior(Enum<?> original) {
|
public static Enum<?> changeShortsRepeatBehavior(Enum<?> original) {
|
||||||
try {
|
try {
|
||||||
final boolean autoplay;
|
final boolean autoplay;
|
||||||
|
|||||||
@@ -7,13 +7,10 @@ import static app.revanced.extension.youtube.patches.announcements.requests.Anno
|
|||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.os.Build;
|
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
import android.text.method.LinkMovementMethod;
|
import android.text.method.LinkMovementMethod;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.annotation.RequiresApi;
|
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -31,7 +28,6 @@ public final class AnnouncementsPatch {
|
|||||||
private AnnouncementsPatch() {
|
private AnnouncementsPatch() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
|
||||||
private static boolean isLatestAlready() throws IOException {
|
private static boolean isLatestAlready() throws IOException {
|
||||||
HttpURLConnection connection =
|
HttpURLConnection connection =
|
||||||
AnnouncementsRoutes.getAnnouncementsConnectionFromRoute(GET_LATEST_ANNOUNCEMENT_IDS);
|
AnnouncementsRoutes.getAnnouncementsConnectionFromRoute(GET_LATEST_ANNOUNCEMENT_IDS);
|
||||||
@@ -70,7 +66,6 @@ public final class AnnouncementsPatch {
|
|||||||
return Settings.ANNOUNCEMENT_LAST_ID.get() == id;
|
return Settings.ANNOUNCEMENT_LAST_ID.get() == id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
|
||||||
public static void showAnnouncement(final Activity context) {
|
public static void showAnnouncement(final Activity context) {
|
||||||
if (!Settings.ANNOUNCEMENTS.get()) return;
|
if (!Settings.ANNOUNCEMENTS.get()) return;
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,12 @@ import app.revanced.extension.youtube.settings.Settings;
|
|||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
final class ButtonsFilter extends Filter {
|
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 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 actionBarGroup;
|
||||||
private final StringFilterGroup bufferFilterPathGroup;
|
private final StringFilterGroup bufferFilterPathGroup;
|
||||||
private final ByteArrayFilterGroupList bufferButtonsGroupList = new ByteArrayFilterGroupList();
|
private final ByteArrayFilterGroupList bufferButtonsGroupList = new ByteArrayFilterGroupList();
|
||||||
@@ -20,11 +24,19 @@ final class ButtonsFilter extends Filter {
|
|||||||
addIdentifierCallbacks(actionBarGroup);
|
addIdentifierCallbacks(actionBarGroup);
|
||||||
|
|
||||||
|
|
||||||
|
likeSubscribeGlow = new StringFilterGroup(
|
||||||
|
Settings.DISABLE_LIKE_SUBSCRIBE_GLOW,
|
||||||
|
"animated_button_border.eml"
|
||||||
|
);
|
||||||
|
|
||||||
bufferFilterPathGroup = new StringFilterGroup(
|
bufferFilterPathGroup = new StringFilterGroup(
|
||||||
null,
|
null,
|
||||||
"|ContainerType|button.eml|"
|
"|ContainerType|button.eml|"
|
||||||
);
|
);
|
||||||
|
|
||||||
addPathCallbacks(
|
addPathCallbacks(
|
||||||
|
likeSubscribeGlow,
|
||||||
|
bufferFilterPathGroup,
|
||||||
new StringFilterGroup(
|
new StringFilterGroup(
|
||||||
Settings.HIDE_LIKE_DISLIKE_BUTTON,
|
Settings.HIDE_LIKE_DISLIKE_BUTTON,
|
||||||
"|segmented_like_dislike_button"
|
"|segmented_like_dislike_button"
|
||||||
@@ -40,8 +52,7 @@ final class ButtonsFilter extends Filter {
|
|||||||
new StringFilterGroup(
|
new StringFilterGroup(
|
||||||
Settings.HIDE_CLIP_BUTTON,
|
Settings.HIDE_CLIP_BUTTON,
|
||||||
"|clip_button.eml|"
|
"|clip_button.eml|"
|
||||||
),
|
)
|
||||||
bufferFilterPathGroup
|
|
||||||
);
|
);
|
||||||
|
|
||||||
bufferButtonsGroupList.addAll(
|
bufferButtonsGroupList.addAll(
|
||||||
@@ -83,6 +94,15 @@ final class ButtonsFilter extends Filter {
|
|||||||
@Override
|
@Override
|
||||||
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
|
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
|
||||||
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
|
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,
|
// If the current matched group is the action bar group,
|
||||||
// in case every filter group is enabled, hide the action bar.
|
// in case every filter group is enabled, hide the action bar.
|
||||||
if (matchedGroup == actionBarGroup) {
|
if (matchedGroup == actionBarGroup) {
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
package app.revanced.extension.youtube.patches.components;
|
package app.revanced.extension.youtube.patches.components;
|
||||||
|
|
||||||
import android.os.Build;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.RequiresApi;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
@@ -44,13 +41,11 @@ abstract class FilterGroupList<V, T extends FilterGroup<V>> implements Iterable<
|
|||||||
return filterGroups.iterator();
|
return filterGroups.iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
|
||||||
@Override
|
@Override
|
||||||
public void forEach(@NonNull Consumer<? super T> action) {
|
public void forEach(@NonNull Consumer<? super T> action) {
|
||||||
filterGroups.forEach(action);
|
filterGroups.forEach(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public Spliterator<T> spliterator() {
|
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 app.revanced.extension.youtube.shared.NavigationBar.NavigationButton;
|
||||||
import static java.lang.Character.UnicodeBlock.*;
|
import static java.lang.Character.UnicodeBlock.*;
|
||||||
|
|
||||||
import android.os.Build;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.RequiresApi;
|
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.LinkedHashMap;
|
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.
|
* - When using whole word syntax, some keywords may need additional pluralized variations.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
|
||||||
final class KeywordContentFilter extends Filter {
|
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 static app.revanced.extension.youtube.shared.NavigationBar.NavigationButton;
|
||||||
|
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Build;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.RequiresApi;
|
|
||||||
|
|
||||||
import app.revanced.extension.shared.Logger;
|
import app.revanced.extension.shared.Logger;
|
||||||
import app.revanced.extension.shared.Utils;
|
import app.revanced.extension.shared.Utils;
|
||||||
@@ -18,10 +16,6 @@ import app.revanced.extension.youtube.shared.PlayerType;
|
|||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final class LayoutComponentsFilter extends Filter {
|
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(
|
private static final StringTrieSearch mixPlaylistsExceptions = new StringTrieSearch(
|
||||||
"V.ED", // Playlist browse id.
|
"V.ED", // Playlist browse id.
|
||||||
"java.lang.ref.WeakReference"
|
"java.lang.ref.WeakReference"
|
||||||
@@ -38,16 +32,15 @@ public final class LayoutComponentsFilter extends Filter {
|
|||||||
private final StringTrieSearch exceptions = new StringTrieSearch();
|
private final StringTrieSearch exceptions = new StringTrieSearch();
|
||||||
private final StringFilterGroup inFeedSurvey;
|
private final StringFilterGroup inFeedSurvey;
|
||||||
private final StringFilterGroup notifyMe;
|
private final StringFilterGroup notifyMe;
|
||||||
|
private final StringFilterGroup singleItemInformationPanel;
|
||||||
private final StringFilterGroup expandableMetadata;
|
private final StringFilterGroup expandableMetadata;
|
||||||
private final ByteArrayFilterGroup searchResultRecommendations;
|
private final ByteArrayFilterGroup searchResultRecommendations;
|
||||||
private final StringFilterGroup searchResultVideo;
|
private final StringFilterGroup searchResultVideo;
|
||||||
private final StringFilterGroup compactChannelBarInner;
|
private final StringFilterGroup compactChannelBarInner;
|
||||||
private final StringFilterGroup compactChannelBarInnerButton;
|
private final StringFilterGroup compactChannelBarInnerButton;
|
||||||
private final ByteArrayFilterGroup joinMembershipButton;
|
private final ByteArrayFilterGroup joinMembershipButton;
|
||||||
private final StringFilterGroup likeSubscribeGlow;
|
|
||||||
private final StringFilterGroup horizontalShelves;
|
private final StringFilterGroup horizontalShelves;
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
|
||||||
public LayoutComponentsFilter() {
|
public LayoutComponentsFilter() {
|
||||||
exceptions.addPatterns(
|
exceptions.addPatterns(
|
||||||
"home_video_with_context",
|
"home_video_with_context",
|
||||||
@@ -105,6 +98,11 @@ public final class LayoutComponentsFilter extends Filter {
|
|||||||
"compact_banner"
|
"compact_banner"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
final var subscriptionsChipBar = new StringFilterGroup(
|
||||||
|
Settings.HIDE_FILTER_BAR_FEED_IN_FEED,
|
||||||
|
"subscriptions_chip_bar"
|
||||||
|
);
|
||||||
|
|
||||||
inFeedSurvey = new StringFilterGroup(
|
inFeedSurvey = new StringFilterGroup(
|
||||||
Settings.HIDE_FEED_SURVEY,
|
Settings.HIDE_FEED_SURVEY,
|
||||||
"in_feed_survey",
|
"in_feed_survey",
|
||||||
@@ -123,8 +121,12 @@ public final class LayoutComponentsFilter extends Filter {
|
|||||||
);
|
);
|
||||||
|
|
||||||
final var infoPanel = new StringFilterGroup(
|
final var infoPanel = new StringFilterGroup(
|
||||||
Settings.HIDE_HIDE_INFO_PANELS,
|
Settings.HIDE_INFO_PANELS,
|
||||||
"publisher_transparency_panel",
|
"publisher_transparency_panel"
|
||||||
|
);
|
||||||
|
|
||||||
|
singleItemInformationPanel = new StringFilterGroup(
|
||||||
|
Settings.HIDE_INFO_PANELS,
|
||||||
"single_item_information_panel"
|
"single_item_information_panel"
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -217,10 +219,6 @@ public final class LayoutComponentsFilter extends Filter {
|
|||||||
"sponsorships"
|
"sponsorships"
|
||||||
);
|
);
|
||||||
|
|
||||||
likeSubscribeGlow = new StringFilterGroup(
|
|
||||||
Settings.DISABLE_LIKE_SUBSCRIBE_GLOW,
|
|
||||||
"animated_button_border.eml"
|
|
||||||
);
|
|
||||||
|
|
||||||
final var channelWatermark = new StringFilterGroup(
|
final var channelWatermark = new StringFilterGroup(
|
||||||
Settings.HIDE_VIDEO_CHANNEL_WATERMARK,
|
Settings.HIDE_VIDEO_CHANNEL_WATERMARK,
|
||||||
@@ -254,7 +252,6 @@ public final class LayoutComponentsFilter extends Filter {
|
|||||||
expandableMetadata,
|
expandableMetadata,
|
||||||
inFeedSurvey,
|
inFeedSurvey,
|
||||||
notifyMe,
|
notifyMe,
|
||||||
likeSubscribeGlow,
|
|
||||||
compactChannelBar,
|
compactChannelBar,
|
||||||
communityPosts,
|
communityPosts,
|
||||||
paidPromotion,
|
paidPromotion,
|
||||||
@@ -269,8 +266,10 @@ public final class LayoutComponentsFilter extends Filter {
|
|||||||
compactChannelBarInner,
|
compactChannelBarInner,
|
||||||
medicalPanel,
|
medicalPanel,
|
||||||
infoPanel,
|
infoPanel,
|
||||||
|
singleItemInformationPanel,
|
||||||
emergencyBox,
|
emergencyBox,
|
||||||
subscribersCommunityGuidelines,
|
subscribersCommunityGuidelines,
|
||||||
|
subscriptionsChipBar,
|
||||||
channelGuidelines,
|
channelGuidelines,
|
||||||
audioTrackButton,
|
audioTrackButton,
|
||||||
artistCard,
|
artistCard,
|
||||||
@@ -285,6 +284,19 @@ public final class LayoutComponentsFilter extends Filter {
|
|||||||
@Override
|
@Override
|
||||||
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
|
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
|
||||||
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
|
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 (matchedGroup == searchResultVideo) {
|
||||||
if (searchResultRecommendations.check(protobufBufferArray).isFiltered()) {
|
if (searchResultRecommendations.check(protobufBufferArray).isFiltered()) {
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
||||||
@@ -292,15 +304,6 @@ public final class LayoutComponentsFilter extends Filter {
|
|||||||
return false;
|
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.
|
// The groups are excluded from the filter due to the exceptions list below.
|
||||||
// Filter them separately here.
|
// Filter them separately here.
|
||||||
if (matchedGroup == notifyMe || matchedGroup == inFeedSurvey || matchedGroup == expandableMetadata)
|
if (matchedGroup == notifyMe || matchedGroup == inFeedSurvey || matchedGroup == expandableMetadata)
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
package app.revanced.extension.youtube.patches.components;
|
package app.revanced.extension.youtube.patches.components;
|
||||||
|
|
||||||
import android.os.Build;
|
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.RequiresApi;
|
|
||||||
|
|
||||||
import app.revanced.extension.youtube.settings.Settings;
|
import app.revanced.extension.youtube.settings.Settings;
|
||||||
import app.revanced.extension.youtube.shared.PlayerType;
|
import app.revanced.extension.youtube.shared.PlayerType;
|
||||||
@@ -16,7 +13,6 @@ public class PlayerFlyoutMenuItemsFilter extends Filter {
|
|||||||
private final ByteArrayFilterGroup exception;
|
private final ByteArrayFilterGroup exception;
|
||||||
private final StringFilterGroup videoQualityMenuFooter;
|
private final StringFilterGroup videoQualityMenuFooter;
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
|
||||||
public PlayerFlyoutMenuItemsFilter() {
|
public PlayerFlyoutMenuItemsFilter() {
|
||||||
exception = new ByteArrayFilterGroup(
|
exception = new ByteArrayFilterGroup(
|
||||||
// Whitelist Quality menu item when "Hide Additional settings menu" is enabled
|
// Whitelist Quality menu item when "Hide Additional settings menu" is enabled
|
||||||
|
|||||||
@@ -352,13 +352,16 @@ public class ReturnYouTubeDislike {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static String formatDislikeCount(long dislikeCount) {
|
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) {
|
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);
|
dislikeCountFormatter = CompactDecimalFormat.getInstance(locale, CompactDecimalFormat.CompactStyle.SHORT);
|
||||||
|
|
||||||
// YouTube disregards locale specific number characters
|
// 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
|
// 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 "۱,۲۳٤"
|
// so languages such as Arabic will show "1.234" instead of the native "۱,۲۳٤"
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||||
@@ -375,15 +378,15 @@ public class ReturnYouTubeDislike {
|
|||||||
private static String formatDislikePercentage(float dislikePercentage) {
|
private static String formatDislikePercentage(float dislikePercentage) {
|
||||||
synchronized (ReturnYouTubeDislike.class) { // Number formatter is not thread safe, must synchronize.
|
synchronized (ReturnYouTubeDislike.class) { // Number formatter is not thread safe, must synchronize.
|
||||||
if (dislikePercentageFormatter == null) {
|
if (dislikePercentageFormatter == null) {
|
||||||
Locale locale = Objects.requireNonNull(Utils.getContext()).getResources().getConfiguration().locale;
|
Locale locale = Locale.getDefault();
|
||||||
dislikePercentageFormatter = NumberFormat.getPercentInstance(locale);
|
dislikePercentageFormatter = NumberFormat.getPercentInstance(locale);
|
||||||
|
|
||||||
// Want to set the digit strings, and the simplest way is to cast to the implementation NumberFormat returns.
|
// 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
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P
|
||||||
&& dislikePercentageFormatter instanceof DecimalFormat) {
|
&& dislikePercentageFormatter instanceof DecimalFormat decimalFormatter) {
|
||||||
DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(locale);
|
DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(locale);
|
||||||
symbols.setDigitStrings(DecimalFormatSymbols.getInstance(Locale.ENGLISH).getDigitStrings());
|
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.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Build;
|
|
||||||
import android.preference.PreferenceFragment;
|
import android.preference.PreferenceFragment;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toolbar;
|
import android.widget.Toolbar;
|
||||||
|
|
||||||
import androidx.annotation.RequiresApi;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import app.revanced.extension.shared.Logger;
|
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.shared.settings.BaseSettings;
|
||||||
import app.revanced.extension.youtube.ThemeHelper;
|
import app.revanced.extension.youtube.ThemeHelper;
|
||||||
import app.revanced.extension.youtube.patches.VersionCheckPatch;
|
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.ReVancedPreferenceFragment;
|
||||||
import app.revanced.extension.youtube.settings.preference.ReturnYouTubeDislikePreferenceFragment;
|
import app.revanced.extension.youtube.settings.preference.ReturnYouTubeDislikePreferenceFragment;
|
||||||
import app.revanced.extension.youtube.settings.preference.SponsorBlockPreferenceFragment;
|
import app.revanced.extension.youtube.settings.preference.SponsorBlockPreferenceFragment;
|
||||||
@@ -66,6 +64,10 @@ public class LicenseActivityHook {
|
|||||||
if (Settings.RESTORE_OLD_SETTINGS_MENUS.get()) {
|
if (Settings.RESTORE_OLD_SETTINGS_MENUS.get()) {
|
||||||
return false;
|
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
|
// 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.
|
// half broken appearance because all the preference icons may not be available yet.
|
||||||
@@ -79,7 +81,6 @@ public class LicenseActivityHook {
|
|||||||
* <p>
|
* <p>
|
||||||
* Hooks LicenseActivity#onCreate in order to inject our own fragment.
|
* Hooks LicenseActivity#onCreate in order to inject our own fragment.
|
||||||
*/
|
*/
|
||||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
|
||||||
public static void initialize(Activity licenseActivity) {
|
public static void initialize(Activity licenseActivity) {
|
||||||
try {
|
try {
|
||||||
ThemeHelper.setActivityTheme(licenseActivity);
|
ThemeHelper.setActivityTheme(licenseActivity);
|
||||||
@@ -119,15 +120,13 @@ public class LicenseActivityHook {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
|
||||||
@SuppressLint("UseCompatLoadingForDrawables")
|
@SuppressLint("UseCompatLoadingForDrawables")
|
||||||
private static void createToolbar(Activity activity, String toolbarTitleResourceName) {
|
private static void createToolbar(Activity activity, String toolbarTitleResourceName) {
|
||||||
// Replace dummy placeholder toolbar.
|
// Replace dummy placeholder toolbar.
|
||||||
// This is required to fix submenu title alignment issue with Android ASOP 15+
|
// This is required to fix submenu title alignment issue with Android ASOP 15+
|
||||||
ViewGroup toolBarParent = activity.findViewById(
|
ViewGroup toolBarParent = activity.findViewById(
|
||||||
getResourceIdentifier("revanced_toolbar_parent", "id"));
|
getResourceIdentifier("revanced_toolbar_parent", "id"));
|
||||||
ViewGroup dummyToolbar = toolBarParent.findViewById(getResourceIdentifier(
|
ViewGroup dummyToolbar = Utils.getChildViewByResourceName(toolBarParent,"revanced_toolbar");
|
||||||
"revanced_toolbar", "id"));
|
|
||||||
toolbarLayoutParams = dummyToolbar.getLayoutParams();
|
toolbarLayoutParams = dummyToolbar.getLayoutParams();
|
||||||
toolBarParent.removeView(dummyToolbar);
|
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 = 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 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_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_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 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_AUTOPLAY_BUTTON = new BooleanSetting("revanced_hide_autoplay_button", TRUE, true);
|
||||||
public static final BooleanSetting HIDE_CAPTIONS_BUTTON = new BooleanSetting("revanced_hide_captions_button", FALSE);
|
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_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_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_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_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_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_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);
|
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_PODCAST_SECTION = new BooleanSetting("revanced_hide_podcast_section", TRUE);
|
||||||
public static final BooleanSetting HIDE_TRANSCRIPT_SECTION = new BooleanSetting("revanced_hide_transcript_section", TRUE);
|
public static final BooleanSetting HIDE_TRANSCRIPT_SECTION = new BooleanSetting("revanced_hide_transcript_section", TRUE);
|
||||||
// Action buttons
|
// 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_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_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);
|
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_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_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 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_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_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);
|
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());
|
"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 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);
|
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_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));
|
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
|
// Swipe controls
|
||||||
public static final BooleanSetting SWIPE_CHANGE_VIDEO = new BooleanSetting("revanced_swipe_change_video", FALSE, true);
|
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_BRIGHTNESS = new BooleanSetting("revanced_swipe_brightness", FALSE, true);
|
||||||
public static final BooleanSetting SWIPE_VOLUME = new BooleanSetting("revanced_swipe_volume", FALSE);
|
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,
|
public static final BooleanSetting SWIPE_PRESS_TO_ENGAGE = new BooleanSetting("revanced_swipe_press_to_engage", FALSE, true,
|
||||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||||
public static final BooleanSetting SWIPE_HAPTIC_FEEDBACK = new BooleanSetting("revanced_swipe_haptic_feedback", TRUE, true,
|
public static final BooleanSetting SWIPE_HAPTIC_FEEDBACK = new BooleanSetting("revanced_swipe_haptic_feedback", TRUE, true,
|
||||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||||
public static final IntegerSetting SWIPE_MAGNITUDE_THRESHOLD = new IntegerSetting("revanced_swipe_threshold", 30, true,
|
public static final IntegerSetting SWIPE_MAGNITUDE_THRESHOLD = new IntegerSetting("revanced_swipe_threshold", 30, true,
|
||||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
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));
|
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||||
private static final IntegerSetting DEPRECATED_SWIPE_OVERLAY_BACKGROUND_ALPHA = new IntegerSetting("revanced_swipe_overlay_background_alpha", 127);
|
public static final BooleanSetting SWIPE_OVERLAY_MINIMAL_STYLE = new BooleanSetting("revanced_swipe_overlay_minimal_style", FALSE, true,
|
||||||
|
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||||
// Debugging
|
public static final IntegerSetting SWIPE_OVERLAY_OPACITY = new IntegerSetting("revanced_swipe_overlay_background_opacity", 60, true,
|
||||||
public static final IntegerSetting SWIPE_OVERLAY_TEXT_SIZE = new IntegerSetting("revanced_swipe_text_overlay_size", 22, true,
|
|
||||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||||
public static final LongSetting SWIPE_OVERLAY_TIMEOUT = new LongSetting("revanced_swipe_overlay_timeout", 500L, true,
|
public static final LongSetting SWIPE_OVERLAY_TIMEOUT = new LongSetting("revanced_swipe_overlay_timeout", 500L, true,
|
||||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
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");
|
public static final StringSetting SB_CATEGORY_UNSUBMITTED_COLOR = new StringSetting("sb_unsubmitted_color", "#FFFFFF");
|
||||||
|
|
||||||
// Deprecated migrations
|
// 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_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 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 {
|
static {
|
||||||
// region Migration
|
// 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);
|
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER, HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER);
|
||||||
|
|
||||||
// Old spoof versions that no longer work reliably.
|
migrateOldSettingToNew(DEPRECATED_DISABLE_SUGGESTED_VIDEO_END_SCREEN, HIDE_END_SCREEN_SUGGESTED_VIDEO);
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Migrate renamed enum.
|
// Migrate renamed enum.
|
||||||
//noinspection deprecation
|
//noinspection deprecation
|
||||||
|
|||||||
@@ -3,18 +3,14 @@ package app.revanced.extension.youtube.settings.preference;
|
|||||||
import static android.text.Html.FROM_HTML_MODE_COMPACT;
|
import static android.text.Html.FROM_HTML_MODE_COMPACT;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Build;
|
|
||||||
import android.preference.Preference;
|
import android.preference.Preference;
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
|
|
||||||
import androidx.annotation.RequiresApi;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows using basic html for the summary text.
|
* Allows using basic html for the summary text.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({"unused", "deprecation"})
|
@SuppressWarnings({"unused", "deprecation"})
|
||||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
|
||||||
public class HtmlPreference extends Preference {
|
public class HtmlPreference extends Preference {
|
||||||
{
|
{
|
||||||
setSummary(Html.fromHtml(getSummary().toString(), FROM_HTML_MODE_COMPACT));
|
setSummary(Html.fromHtml(getSummary().toString(), FROM_HTML_MODE_COMPACT));
|
||||||
|
|||||||
@@ -17,8 +17,6 @@ import android.view.WindowInsets;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toolbar;
|
import android.widget.Toolbar;
|
||||||
|
|
||||||
import androidx.annotation.RequiresApi;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -98,7 +96,6 @@ public class ReVancedPreferenceFragment extends AbstractPreferenceFragment {
|
|||||||
listPreference.setEntryValues(sortedEntryValues);
|
listPreference.setEntryValues(sortedEntryValues);
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
|
||||||
@Override
|
@Override
|
||||||
protected void initialize() {
|
protected void initialize() {
|
||||||
super.initialize();
|
super.initialize();
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference {
|
|||||||
String summary = str(key + "_summary");
|
String summary = str(key + "_summary");
|
||||||
|
|
||||||
// Android VR supports AV1 but all other clients do not.
|
// 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");
|
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 static app.revanced.extension.youtube.shared.NavigationBar.NavigationButton.CREATE;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.os.Build;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.RequiresApi;
|
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@@ -257,7 +255,6 @@ public final class NavigationBar {
|
|||||||
* Injection point.
|
* Injection point.
|
||||||
* Fixes missing drawable.
|
* Fixes missing drawable.
|
||||||
*/
|
*/
|
||||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
|
||||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||||
public static void setCairoNotificationFilledIcon(EnumMap enumMap, Enum tabActivityCairo) {
|
public static void setCairoNotificationFilledIcon(EnumMap enumMap, Enum tabActivityCairo) {
|
||||||
if (fillBellCairoBlack != 0) {
|
if (fillBellCairoBlack != 0) {
|
||||||
|
|||||||
@@ -21,9 +21,6 @@ enum class PlayerType {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A regular video is minimized.
|
* 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_MINIMIZED,
|
||||||
WATCH_WHILE_MAXIMIZED,
|
WATCH_WHILE_MAXIMIZED,
|
||||||
@@ -56,8 +53,7 @@ enum class PlayerType {
|
|||||||
val newType = nameToPlayerType[enumName]
|
val newType = nameToPlayerType[enumName]
|
||||||
if (newType == null) {
|
if (newType == null) {
|
||||||
Logger.printException { "Unknown PlayerType encountered: $enumName" }
|
Logger.printException { "Unknown PlayerType encountered: $enumName" }
|
||||||
} else if (current != newType) {
|
} else {
|
||||||
Logger.printDebug { "PlayerType changed to: $newType" }
|
|
||||||
current = newType
|
current = newType
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -68,9 +64,13 @@ enum class PlayerType {
|
|||||||
@JvmStatic
|
@JvmStatic
|
||||||
var current
|
var current
|
||||||
get() = currentPlayerType
|
get() = currentPlayerType
|
||||||
private set(value) {
|
private set(type) {
|
||||||
currentPlayerType = value
|
if (currentPlayerType != type) {
|
||||||
onChange(currentPlayerType)
|
Logger.printDebug { "Changed to: $type" }
|
||||||
|
|
||||||
|
currentPlayerType = type
|
||||||
|
onChange(type)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Volatile // Read/write from different threads.
|
@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
|
// but if buttons are showing when the end of the video is reached then they need
|
||||||
// to be forcefully hidden
|
// to be forcefully hidden
|
||||||
if (!Settings.AUTO_REPEAT.get()) {
|
if (!Settings.AUTO_REPEAT.get()) {
|
||||||
CreateSegmentButtonController.hide();
|
CreateSegmentButton.hideControls();
|
||||||
VotingButtonController.hide();
|
VotingButton.hideControls();
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.printException(() -> "endOfVideoReached failure", 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)
|
* should swipe controls be enabled? (global setting)
|
||||||
*/
|
*/
|
||||||
val enableSwipeControls: Boolean
|
val enableSwipeControls: Boolean
|
||||||
get() = isFullscreenVideo && (enableVolumeControls || enableBrightnessControl)
|
get() = (enableVolumeControls || enableBrightnessControl) && isFullscreenVideo
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* should swipe controls for volume be enabled?
|
* should swipe controls for volume be enabled?
|
||||||
*/
|
*/
|
||||||
val enableVolumeControls: Boolean
|
val enableVolumeControls = Settings.SWIPE_VOLUME.get()
|
||||||
get() = Settings.SWIPE_VOLUME.get()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* should swipe controls for volume be enabled?
|
* should swipe controls for volume be enabled?
|
||||||
*/
|
*/
|
||||||
val enableBrightnessControl: Boolean
|
val enableBrightnessControl = Settings.SWIPE_BRIGHTNESS.get()
|
||||||
get() = Settings.SWIPE_BRIGHTNESS.get()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* is the video player currently in fullscreen mode?
|
* is the video player currently in fullscreen mode?
|
||||||
@@ -46,7 +44,7 @@ class SwipeControlsConfigurationProvider(
|
|||||||
* should volume key controls be overwritten? (global setting)
|
* should volume key controls be overwritten? (global setting)
|
||||||
*/
|
*/
|
||||||
val overwriteVolumeKeyControls: Boolean
|
val overwriteVolumeKeyControls: Boolean
|
||||||
get() = isFullscreenVideo && enableVolumeControls
|
get() = enableVolumeControls && isFullscreenVideo
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
//region gesture adjustments
|
//region gesture adjustments
|
||||||
@@ -65,7 +63,6 @@ class SwipeControlsConfigurationProvider(
|
|||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
//region overlay adjustments
|
//region overlay adjustments
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* should the overlay enable haptic feedback?
|
* should the overlay enable haptic feedback?
|
||||||
*/
|
*/
|
||||||
@@ -79,15 +76,10 @@ class SwipeControlsConfigurationProvider(
|
|||||||
get() = Settings.SWIPE_OVERLAY_TIMEOUT.get()
|
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
|
val overlayBackgroundOpacity: Int
|
||||||
get() = Settings.SWIPE_OVERLAY_TEXT_SIZE.get()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get the background color for text on the overlay, as a color int
|
|
||||||
*/
|
|
||||||
val overlayTextBackgroundColor: Int
|
|
||||||
get() {
|
get() {
|
||||||
var opacity = Settings.SWIPE_OVERLAY_OPACITY.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
|
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
|
//endregion
|
||||||
|
|
||||||
//region behaviour
|
//region behaviour
|
||||||
|
|||||||
@@ -82,11 +82,15 @@ abstract class BaseGestureController(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onScroll(
|
override fun onScroll(
|
||||||
from: MotionEvent,
|
from: MotionEvent?,
|
||||||
to: MotionEvent,
|
to: MotionEvent,
|
||||||
distanceX: Float,
|
distanceX: Float,
|
||||||
distanceY: Float,
|
distanceY: Float,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
|
if (from == null) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// submit to swipe detector
|
// submit to swipe detector
|
||||||
submitForSwipe(from, to, distanceX, distanceY)
|
submitForSwipe(from, to, distanceX, distanceY)
|
||||||
|
|
||||||
|
|||||||
@@ -1,138 +1,145 @@
|
|||||||
package app.revanced.extension.youtube.swipecontrols.views
|
package app.revanced.extension.youtube.swipecontrols.views
|
||||||
|
|
||||||
import android.content.Context
|
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.Drawable
|
||||||
import android.graphics.drawable.GradientDrawable
|
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.util.TypedValue
|
import android.util.AttributeSet
|
||||||
import android.view.HapticFeedbackConstants
|
import android.view.HapticFeedbackConstants
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.widget.RelativeLayout
|
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.shared.Utils
|
||||||
import app.revanced.extension.youtube.swipecontrols.SwipeControlsConfigurationProvider
|
import app.revanced.extension.youtube.swipecontrols.SwipeControlsConfigurationProvider
|
||||||
import app.revanced.extension.youtube.swipecontrols.misc.SwipeControlsOverlay
|
import app.revanced.extension.youtube.swipecontrols.misc.SwipeControlsOverlay
|
||||||
import app.revanced.extension.youtube.swipecontrols.misc.applyDimension
|
import kotlin.math.min
|
||||||
import kotlin.math.round
|
import kotlin.math.round
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* main overlay layout for volume and brightness swipe controls
|
* Main overlay layout for displaying volume and brightness level with both circular and horizontal progress bars.
|
||||||
*
|
|
||||||
* @param context context to create in
|
|
||||||
*/
|
*/
|
||||||
class SwipeControlsOverlayLayout(
|
class SwipeControlsOverlayLayout(
|
||||||
context: Context,
|
context: Context,
|
||||||
private val config: SwipeControlsConfigurationProvider,
|
private val config: SwipeControlsConfigurationProvider,
|
||||||
) : RelativeLayout(context), SwipeControlsOverlay {
|
) : RelativeLayout(context), SwipeControlsOverlay {
|
||||||
/**
|
|
||||||
* DO NOT use this, for tools only
|
|
||||||
*/
|
|
||||||
constructor(context: Context) : this(context, SwipeControlsConfigurationProvider(context))
|
constructor(context: Context) : this(context, SwipeControlsConfigurationProvider(context))
|
||||||
|
|
||||||
private val feedbackTextView: TextView
|
// Drawable icons for brightness and volume
|
||||||
private val autoBrightnessIcon: Drawable
|
private val autoBrightnessIcon: Drawable = getDrawable("revanced_ic_sc_brightness_auto")
|
||||||
private val manualBrightnessIcon: Drawable
|
private val lowBrightnessIcon: Drawable = getDrawable("revanced_ic_sc_brightness_low")
|
||||||
private val mutedVolumeIcon: Drawable
|
private val mediumBrightnessIcon: Drawable = getDrawable("revanced_ic_sc_brightness_medium")
|
||||||
private val normalVolumeIcon: Drawable
|
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 {
|
// Function to retrieve drawable resources by name
|
||||||
return resources.getDrawable(
|
private fun getDrawable(name: String): Drawable {
|
||||||
|
val drawable = resources.getDrawable(
|
||||||
Utils.getResourceIdentifier(context, name, "drawable"),
|
Utils.getResourceIdentifier(context, name, "drawable"),
|
||||||
context.theme,
|
context.theme,
|
||||||
).apply {
|
)
|
||||||
setTint(config.overlayForegroundColor)
|
drawable.setTint(config.overlayTextColor)
|
||||||
setBounds(
|
return drawable
|
||||||
0,
|
|
||||||
0,
|
|
||||||
width,
|
|
||||||
height,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Initialize progress bars
|
||||||
|
private val circularProgressView: CircularProgressView
|
||||||
|
private val horizontalProgressView: HorizontalProgressView
|
||||||
|
|
||||||
init {
|
init {
|
||||||
// init views
|
// Initialize circular progress bar
|
||||||
val feedbackTextViewPadding = 2.applyDimension(context, TypedValue.COMPLEX_UNIT_DIP)
|
circularProgressView = CircularProgressView(
|
||||||
val compoundIconPadding = 4.applyDimension(context, TypedValue.COMPLEX_UNIT_DIP)
|
context,
|
||||||
feedbackTextView = TextView(context).apply {
|
config.overlayBackgroundOpacity,
|
||||||
layoutParams = LayoutParams(
|
config.overlayShowOverlayMinimalStyle,
|
||||||
LayoutParams.WRAP_CONTENT,
|
config.overlayProgressColor,
|
||||||
LayoutParams.WRAP_CONTENT,
|
config.overlayFillBackgroundPaint,
|
||||||
).apply {
|
config.overlayTextColor
|
||||||
|
).apply {
|
||||||
|
layoutParams = LayoutParams(300, 300).apply {
|
||||||
addRule(CENTER_IN_PARENT, TRUE)
|
addRule(CENTER_IN_PARENT, TRUE)
|
||||||
setPadding(
|
|
||||||
feedbackTextViewPadding,
|
|
||||||
feedbackTextViewPadding,
|
|
||||||
feedbackTextViewPadding,
|
|
||||||
feedbackTextViewPadding,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
background = GradientDrawable().apply {
|
visibility = GONE // Initially hidden
|
||||||
cornerRadius = 8f
|
|
||||||
setColor(config.overlayTextBackgroundColor)
|
|
||||||
}
|
|
||||||
setTextColor(config.overlayForegroundColor)
|
|
||||||
setTextSize(TypedValue.COMPLEX_UNIT_SP, config.overlayTextSize.toFloat())
|
|
||||||
compoundDrawablePadding = compoundIconPadding
|
|
||||||
visibility = GONE
|
|
||||||
}
|
}
|
||||||
addView(feedbackTextView)
|
addView(circularProgressView)
|
||||||
|
|
||||||
// get icons scaled, assuming square icons
|
// Initialize horizontal progress bar
|
||||||
val iconHeight = round(feedbackTextView.lineHeight * .8).toInt()
|
val screenWidth = resources.displayMetrics.widthPixels
|
||||||
autoBrightnessIcon = getDrawable("revanced_ic_sc_brightness_auto", iconHeight, iconHeight)
|
val layoutWidth = (screenWidth * 2 / 3).toInt() // 2/3 of screen width
|
||||||
manualBrightnessIcon = getDrawable("revanced_ic_sc_brightness_manual", iconHeight, iconHeight)
|
horizontalProgressView = HorizontalProgressView(
|
||||||
mutedVolumeIcon = getDrawable("revanced_ic_sc_volume_mute", iconHeight, iconHeight)
|
context,
|
||||||
normalVolumeIcon = getDrawable("revanced_ic_sc_volume_normal", iconHeight, iconHeight)
|
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 feedbackHideHandler = Handler(Looper.getMainLooper())
|
||||||
private val feedbackHideCallback = Runnable {
|
private val feedbackHideCallback = Runnable {
|
||||||
feedbackTextView.visibility = GONE
|
circularProgressView.visibility = GONE
|
||||||
|
horizontalProgressView.visibility = GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* show the feedback view for a given time
|
* Displays the progress bar with the appropriate value, icon, and type (brightness or volume).
|
||||||
*
|
|
||||||
* @param message the message to show
|
|
||||||
* @param icon the icon to use
|
|
||||||
*/
|
*/
|
||||||
private fun showFeedbackView(message: String, icon: Drawable) {
|
private fun showFeedbackView(value: String, progress: Int, max: Int, icon: Drawable, isBrightness: Boolean) {
|
||||||
feedbackHideHandler.removeCallbacks(feedbackHideCallback)
|
feedbackHideHandler.removeCallbacks(feedbackHideCallback)
|
||||||
feedbackHideHandler.postDelayed(feedbackHideCallback, config.overlayShowTimeoutMillis)
|
feedbackHideHandler.postDelayed(feedbackHideCallback, config.overlayShowTimeoutMillis)
|
||||||
feedbackTextView.apply {
|
|
||||||
text = message
|
val viewToShow = if (config.isCircularProgressBar) circularProgressView else horizontalProgressView
|
||||||
setCompoundDrawablesRelative(
|
viewToShow.apply {
|
||||||
icon,
|
setProgress(progress, max, value, isBrightness)
|
||||||
null,
|
this.icon = icon
|
||||||
null,
|
|
||||||
null,
|
|
||||||
)
|
|
||||||
visibility = VISIBLE
|
visibility = VISIBLE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle volume change
|
||||||
override fun onVolumeChanged(newVolume: Int, maximumVolume: Int) {
|
override fun onVolumeChanged(newVolume: Int, maximumVolume: Int) {
|
||||||
showFeedbackView(
|
val volumePercentage = (newVolume.toFloat() / maximumVolume) * 100
|
||||||
"$newVolume",
|
val icon = when {
|
||||||
if (newVolume > 0) normalVolumeIcon else mutedVolumeIcon,
|
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) {
|
override fun onBrightnessChanged(brightness: Double) {
|
||||||
if (config.shouldLowestValueEnableAutoBrightness && brightness <= 0) {
|
if (config.shouldLowestValueEnableAutoBrightness && brightness <= 0) {
|
||||||
showFeedbackView(
|
showFeedbackView("Auto", 0, 100, autoBrightnessIcon, isBrightness = true)
|
||||||
str("revanced_swipe_lowest_value_enable_auto_brightness_overlay_text"),
|
} else {
|
||||||
autoBrightnessIcon,
|
val brightnessValue = round(brightness).toInt()
|
||||||
)
|
val icon = when {
|
||||||
} else if (brightness >= 0) {
|
brightnessValue < 25 -> lowBrightnessIcon
|
||||||
showFeedbackView("${round(brightness).toInt()}%", manualBrightnessIcon)
|
brightnessValue < 50 -> mediumBrightnessIcon
|
||||||
|
brightnessValue < 75 -> highBrightnessIcon
|
||||||
|
else -> fullBrightnessIcon
|
||||||
|
}
|
||||||
|
showFeedbackView("$brightnessValue%", brightnessValue, 100, icon, isBrightness = true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Begin swipe session
|
||||||
override fun onEnterSwipeSession() {
|
override fun onEnterSwipeSession() {
|
||||||
if (config.shouldEnableHapticFeedback) {
|
if (config.shouldEnableHapticFeedback) {
|
||||||
@Suppress("DEPRECATION")
|
@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;
|
package app.revanced.extension.youtube.videoplayer;
|
||||||
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import app.revanced.extension.shared.Logger;
|
||||||
import app.revanced.extension.youtube.patches.CopyVideoUrlPatch;
|
import app.revanced.extension.youtube.patches.CopyVideoUrlPatch;
|
||||||
import app.revanced.extension.youtube.settings.Settings;
|
import app.revanced.extension.youtube.settings.Settings;
|
||||||
import app.revanced.extension.shared.Logger;
|
import app.revanced.extension.youtube.shared.PlayerType;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class CopyVideoUrlButton extends PlayerControlButton {
|
public class CopyVideoUrlButton {
|
||||||
@Nullable
|
@Nullable
|
||||||
private static CopyVideoUrlButton instance;
|
private static PlayerControlButton 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;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Injection point.
|
* Injection point.
|
||||||
*/
|
*/
|
||||||
public static void initializeButton(View view) {
|
public static void initializeButton(View controlsView) {
|
||||||
try {
|
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) {
|
} catch (Exception ex) {
|
||||||
Logger.printException(() -> "initializeButton failure", ex);
|
Logger.printException(() -> "initializeButton failure", ex);
|
||||||
}
|
}
|
||||||
@@ -41,14 +38,14 @@ public class CopyVideoUrlButton extends PlayerControlButton {
|
|||||||
/**
|
/**
|
||||||
* injection point
|
* injection point
|
||||||
*/
|
*/
|
||||||
public static void changeVisibilityImmediate(boolean visible) {
|
public static void setVisibilityImmediate(boolean visible) {
|
||||||
if (instance != null) instance.setVisibilityImmediate(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);
|
if (instance != null) instance.setVisibility(visible, animated);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,38 +1,35 @@
|
|||||||
package app.revanced.extension.youtube.videoplayer;
|
package app.revanced.extension.youtube.videoplayer;
|
||||||
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import app.revanced.extension.shared.Logger;
|
||||||
import app.revanced.extension.youtube.patches.CopyVideoUrlPatch;
|
import app.revanced.extension.youtube.patches.CopyVideoUrlPatch;
|
||||||
import app.revanced.extension.youtube.settings.Settings;
|
import app.revanced.extension.youtube.settings.Settings;
|
||||||
import app.revanced.extension.shared.Logger;
|
import app.revanced.extension.youtube.shared.PlayerType;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class CopyVideoUrlTimestampButton extends PlayerControlButton {
|
public class CopyVideoUrlTimestampButton {
|
||||||
@Nullable
|
@Nullable
|
||||||
private static CopyVideoUrlTimestampButton instance;
|
private static PlayerControlButton 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;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Injection point.
|
* Injection point.
|
||||||
*/
|
*/
|
||||||
public static void initializeButton(View bottomControlsViewGroup) {
|
public static void initializeButton(View controlsView) {
|
||||||
try {
|
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) {
|
} catch (Exception ex) {
|
||||||
Logger.printException(() -> "initializeButton failure", ex);
|
Logger.printException(() -> "initializeButton failure", ex);
|
||||||
}
|
}
|
||||||
@@ -41,14 +38,14 @@ public class CopyVideoUrlTimestampButton extends PlayerControlButton {
|
|||||||
/**
|
/**
|
||||||
* injection point
|
* injection point
|
||||||
*/
|
*/
|
||||||
public static void changeVisibilityImmediate(boolean visible) {
|
public static void setVisibilityImmediate(boolean visible) {
|
||||||
if (instance != null) instance.setVisibilityImmediate(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);
|
if (instance != null) instance.setVisibility(visible, animated);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
package app.revanced.extension.youtube.videoplayer;
|
package app.revanced.extension.youtube.videoplayer;
|
||||||
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
@@ -11,26 +10,23 @@ import app.revanced.extension.youtube.patches.VideoInformation;
|
|||||||
import app.revanced.extension.youtube.settings.Settings;
|
import app.revanced.extension.youtube.settings.Settings;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class ExternalDownloadButton extends PlayerControlButton {
|
public class ExternalDownloadButton {
|
||||||
@Nullable
|
@Nullable
|
||||||
private static ExternalDownloadButton instance;
|
private static PlayerControlButton instance;
|
||||||
|
|
||||||
public ExternalDownloadButton(ViewGroup viewGroup) {
|
|
||||||
super(
|
|
||||||
viewGroup,
|
|
||||||
"revanced_external_download_button",
|
|
||||||
Settings.EXTERNAL_DOWNLOADER,
|
|
||||||
ExternalDownloadButton::onDownloadClick,
|
|
||||||
null
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Injection point.
|
* Injection point.
|
||||||
*/
|
*/
|
||||||
public static void initializeButton(View view) {
|
public static void initializeButton(View controlsView) {
|
||||||
try {
|
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) {
|
} catch (Exception ex) {
|
||||||
Logger.printException(() -> "initializeButton failure", ex);
|
Logger.printException(() -> "initializeButton failure", ex);
|
||||||
}
|
}
|
||||||
@@ -39,14 +35,14 @@ public class ExternalDownloadButton extends PlayerControlButton {
|
|||||||
/**
|
/**
|
||||||
* injection point
|
* injection point
|
||||||
*/
|
*/
|
||||||
public static void changeVisibilityImmediate(boolean visible) {
|
public static void setVisibilityImmediate(boolean visible) {
|
||||||
if (instance != null) instance.setVisibilityImmediate(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);
|
if (instance != null) instance.setVisibility(visible, animated);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,35 +1,31 @@
|
|||||||
package app.revanced.extension.youtube.videoplayer;
|
package app.revanced.extension.youtube.videoplayer;
|
||||||
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import app.revanced.extension.shared.Logger;
|
||||||
import app.revanced.extension.youtube.patches.playback.speed.CustomPlaybackSpeedPatch;
|
import app.revanced.extension.youtube.patches.playback.speed.CustomPlaybackSpeedPatch;
|
||||||
import app.revanced.extension.youtube.settings.Settings;
|
import app.revanced.extension.youtube.settings.Settings;
|
||||||
import app.revanced.extension.shared.Logger;
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class PlaybackSpeedDialogButton extends PlayerControlButton {
|
public class PlaybackSpeedDialogButton {
|
||||||
@Nullable
|
@Nullable
|
||||||
private static PlaybackSpeedDialogButton instance;
|
private static PlayerControlButton instance;
|
||||||
|
|
||||||
public PlaybackSpeedDialogButton(ViewGroup viewGroup) {
|
|
||||||
super(
|
|
||||||
viewGroup,
|
|
||||||
"revanced_playback_speed_dialog_button",
|
|
||||||
Settings.PLAYBACK_SPEED_DIALOG_BUTTON,
|
|
||||||
view -> CustomPlaybackSpeedPatch.showOldPlaybackSpeedMenu(),
|
|
||||||
null
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Injection point.
|
* Injection point.
|
||||||
*/
|
*/
|
||||||
public static void initializeButton(View view) {
|
public static void initializeButton(View controlsView) {
|
||||||
try {
|
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) {
|
} catch (Exception ex) {
|
||||||
Logger.printException(() -> "initializeButton failure", ex);
|
Logger.printException(() -> "initializeButton failure", ex);
|
||||||
}
|
}
|
||||||
@@ -38,14 +34,14 @@ public class PlaybackSpeedDialogButton extends PlayerControlButton {
|
|||||||
/**
|
/**
|
||||||
* injection point
|
* injection point
|
||||||
*/
|
*/
|
||||||
public static void changeVisibilityImmediate(boolean visible) {
|
public static void setVisibilityImmediate(boolean visible) {
|
||||||
if (instance != null) instance.setVisibilityImmediate(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);
|
if (instance != null) instance.setVisibility(visible, animated);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,73 +1,92 @@
|
|||||||
package app.revanced.extension.youtube.videoplayer;
|
package app.revanced.extension.youtube.videoplayer;
|
||||||
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.view.animation.Animation;
|
import android.view.animation.Animation;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import app.revanced.extension.shared.Logger;
|
import app.revanced.extension.shared.Logger;
|
||||||
import app.revanced.extension.shared.Utils;
|
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 {
|
public class PlayerControlButton {
|
||||||
private static final Animation fadeIn;
|
public interface PlayerControlButtonVisibility {
|
||||||
private static final Animation fadeOut;
|
/**
|
||||||
|
* @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 static final Animation fadeOutImmediate;
|
||||||
|
|
||||||
private final WeakReference<ImageView> buttonRef;
|
|
||||||
protected final BooleanSetting setting;
|
|
||||||
protected boolean isVisible;
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
// TODO: check if these durations are correct.
|
fadeInDuration = Utils.getResourceInteger("fade_duration_fast");
|
||||||
fadeIn = Utils.getResourceAnimation("fade_in");
|
fadeOutDuration = Utils.getResourceInteger("fade_duration_scheduled");
|
||||||
fadeIn.setDuration(Utils.getResourceInteger("fade_duration_fast"));
|
|
||||||
|
|
||||||
fadeOut = Utils.getResourceAnimation("fade_out");
|
fadeInAnimation = Utils.getResourceAnimation("fade_in");
|
||||||
fadeOut.setDuration(Utils.getResourceInteger("fade_duration_scheduled"));
|
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 = Utils.getResourceAnimation("abc_fade_out");
|
||||||
fadeOutImmediate.setDuration(Utils.getResourceInteger("fade_duration_fast"));
|
fadeOutImmediate.setDuration(Utils.getResourceInteger("fade_duration_fast"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
private final WeakReference<View> buttonRef;
|
||||||
public static Animation getButtonFadeIn() {
|
/**
|
||||||
return fadeIn;
|
* 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 PlayerControlButton(View controlsViewGroup,
|
||||||
public static Animation getButtonFadeOut() {
|
String imageViewButtonId,
|
||||||
return fadeOut;
|
@Nullable String placeholderId,
|
||||||
}
|
PlayerControlButtonVisibility buttonVisibility,
|
||||||
|
View.OnClickListener onClickListener,
|
||||||
@NonNull
|
|
||||||
public static Animation getButtonFadeOutImmediately() {
|
|
||||||
return fadeOutImmediate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlayerControlButton(@NonNull ViewGroup bottomControlsViewGroup, @NonNull String imageViewButtonId,
|
|
||||||
@NonNull BooleanSetting booleanSetting, @NonNull View.OnClickListener onClickListener,
|
|
||||||
@Nullable View.OnLongClickListener longClickListener) {
|
@Nullable View.OnLongClickListener longClickListener) {
|
||||||
Logger.printDebug(() -> "Initializing button: " + imageViewButtonId);
|
ImageView imageView = Utils.getChildViewByResourceName(controlsViewGroup, imageViewButtonId);
|
||||||
|
|
||||||
ImageView imageView = Objects.requireNonNull(bottomControlsViewGroup.findViewById(
|
|
||||||
Utils.getResourceIdentifier(imageViewButtonId, "id")
|
|
||||||
));
|
|
||||||
imageView.setVisibility(View.GONE);
|
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);
|
imageView.setOnClickListener(onClickListener);
|
||||||
if (longClickListener != null) {
|
if (longClickListener != null) {
|
||||||
imageView.setOnLongClickListener(longClickListener);
|
imageView.setOnLongClickListener(longClickListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
setting = booleanSetting;
|
visibilityCheck = buttonVisibility;
|
||||||
buttonRef = new WeakReference<>(imageView);
|
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) {
|
public void setVisibilityImmediate(boolean visible) {
|
||||||
@@ -92,26 +111,80 @@ public abstract class PlayerControlButton {
|
|||||||
if (isVisible == visible) return;
|
if (isVisible == visible) return;
|
||||||
isVisible = visible;
|
isVisible = visible;
|
||||||
|
|
||||||
ImageView iView = buttonRef.get();
|
View button = buttonRef.get();
|
||||||
if (iView == null) {
|
if (button == null) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (visible && setting.get()) {
|
View placeholder = placeHolderRef.get();
|
||||||
iView.clearAnimation();
|
final boolean shouldBeShown = visibilityCheck.shouldBeShown();
|
||||||
|
|
||||||
|
if (visible && shouldBeShown) {
|
||||||
|
button.clearAnimation();
|
||||||
if (animated) {
|
if (animated) {
|
||||||
iView.startAnimation(PlayerControlButton.getButtonFadeIn());
|
button.startAnimation(PlayerControlButton.fadeInAnimation);
|
||||||
}
|
}
|
||||||
iView.setVisibility(View.VISIBLE);
|
button.setVisibility(View.VISIBLE);
|
||||||
} else if (iView.getVisibility() == View.VISIBLE) {
|
|
||||||
iView.clearAnimation();
|
if (placeholder != null) {
|
||||||
if (animated) {
|
placeholder.setVisibility(View.GONE);
|
||||||
iView.startAnimation(PlayerControlButton.getButtonFadeOut());
|
}
|
||||||
|
} 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) {
|
} 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
|
org.gradle.parallel = true
|
||||||
android.useAndroidX = true
|
android.useAndroidX = true
|
||||||
kotlin.code.style = official
|
kotlin.code.style = official
|
||||||
version = 5.12.0-dev.5
|
version = 5.13.0-dev.18
|
||||||
|
|||||||
@@ -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 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 final class app/revanced/patches/nyx/misc/pro/UnlockProPatchKt {
|
||||||
public static final fun getUnlockProPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
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 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 final class app/revanced/patches/youtube/layout/hide/fullscreenambientmode/DisableFullscreenAmbientModePatchKt {
|
||||||
public static final fun getDisableFullscreenAmbientModePatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
public static final fun getDisableFullscreenAmbientModePatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ val hideVideoAdsPatch = bytecodePatch(
|
|||||||
compatibleWith(
|
compatibleWith(
|
||||||
"com.google.android.apps.youtube.music"(
|
"com.google.android.apps.youtube.music"(
|
||||||
"7.16.53",
|
"7.16.53",
|
||||||
"8.05.50"
|
"8.05.51"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ val enableExclusiveAudioPlaybackPatch = bytecodePatch(
|
|||||||
compatibleWith(
|
compatibleWith(
|
||||||
"com.google.android.apps.youtube.music"(
|
"com.google.android.apps.youtube.music"(
|
||||||
"7.16.53",
|
"7.16.53",
|
||||||
"8.05.50"
|
"8.05.51"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ val permanentRepeatPatch = bytecodePatch(
|
|||||||
compatibleWith(
|
compatibleWith(
|
||||||
"com.google.android.apps.youtube.music"(
|
"com.google.android.apps.youtube.music"(
|
||||||
"7.16.53",
|
"7.16.53",
|
||||||
"8.05.50"
|
"8.05.51"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ val hideCategoryBar = bytecodePatch(
|
|||||||
compatibleWith(
|
compatibleWith(
|
||||||
"com.google.android.apps.youtube.music"(
|
"com.google.android.apps.youtube.music"(
|
||||||
"7.16.53",
|
"7.16.53",
|
||||||
"8.05.50"
|
"8.05.51"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ val hideGetPremiumPatch = bytecodePatch(
|
|||||||
compatibleWith(
|
compatibleWith(
|
||||||
"com.google.android.apps.youtube.music"(
|
"com.google.android.apps.youtube.music"(
|
||||||
"7.16.53",
|
"7.16.53",
|
||||||
"8.05.50"
|
"8.05.51"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ val removeUpgradeButtonPatch = bytecodePatch(
|
|||||||
compatibleWith(
|
compatibleWith(
|
||||||
"com.google.android.apps.youtube.music"(
|
"com.google.android.apps.youtube.music"(
|
||||||
"7.16.53",
|
"7.16.53",
|
||||||
"8.05.50"
|
"8.05.51"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ val bypassCertificateChecksPatch = bytecodePatch(
|
|||||||
compatibleWith(
|
compatibleWith(
|
||||||
"com.google.android.apps.youtube.music"(
|
"com.google.android.apps.youtube.music"(
|
||||||
"7.16.53",
|
"7.16.53",
|
||||||
"8.05.50"
|
"8.05.51"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ val backgroundPlaybackPatch = bytecodePatch(
|
|||||||
compatibleWith(
|
compatibleWith(
|
||||||
"com.google.android.apps.youtube.music"(
|
"com.google.android.apps.youtube.music"(
|
||||||
"7.16.53",
|
"7.16.53",
|
||||||
"8.05.50"
|
"8.05.51"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ val spoofClientPatch = bytecodePatch(
|
|||||||
compatibleWith(
|
compatibleWith(
|
||||||
"com.google.android.apps.youtube.music"(
|
"com.google.android.apps.youtube.music"(
|
||||||
"7.16.53",
|
"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
|
||||||
|
""",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,7 +8,7 @@ import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
|||||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodImplementation
|
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodImplementation
|
||||||
|
|
||||||
val spoofClientPatch = spoofClientPatch(redirectUri = "infinity://localhost") { clientIdOption ->
|
val spoofClientPatch = spoofClientPatch(redirectUri = "infinity://localhost") { clientIdOption ->
|
||||||
compatibleWith("ml.docilealligator.infinityforreddit")
|
compatibleWith("ml.docilealligator.infinityforreddit", "ml.docilealligator.infinityforreddit.plus")
|
||||||
|
|
||||||
val clientId by clientIdOption
|
val clientId by clientIdOption
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ val unlockSubscriptionPatch = bytecodePatch(
|
|||||||
) {
|
) {
|
||||||
dependsOn(spoofClientPatch)
|
dependsOn(spoofClientPatch)
|
||||||
|
|
||||||
compatibleWith("ml.docilealligator.infinityforreddit")
|
compatibleWith("ml.docilealligator.infinityforreddit", "ml.docilealligator.infinityforreddit.plus")
|
||||||
|
|
||||||
execute {
|
execute {
|
||||||
setOf(
|
setOf(
|
||||||
|
|||||||
@@ -2,4 +2,4 @@ package app.revanced.patches.tiktok.misc.extension
|
|||||||
|
|
||||||
import app.revanced.patches.shared.misc.extension.sharedExtensionPatch
|
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 app.revanced.patches.shared.misc.extension.extensionHook
|
||||||
import com.android.tools.smali.dexlib2.AccessFlags
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
|
|
||||||
internal val initHook = extensionHook(
|
internal val initHook = extensionHook {
|
||||||
insertIndexResolver = { 1 }, // Insert after call to super class.
|
|
||||||
) {
|
|
||||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
|
||||||
custom { method, classDef ->
|
custom { method, classDef ->
|
||||||
classDef.endsWith("/AwemeHostApplication;") &&
|
classDef.type == "Lcom/ss/android/ugc/aweme/main/MainActivity;" &&
|
||||||
method.name == "<init>"
|
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_haptic_feedback"),
|
||||||
SwitchPreference("revanced_swipe_save_and_restore_brightness"),
|
SwitchPreference("revanced_swipe_save_and_restore_brightness"),
|
||||||
SwitchPreference("revanced_swipe_lowest_value_enable_auto_brightness"),
|
SwitchPreference("revanced_swipe_lowest_value_enable_auto_brightness"),
|
||||||
TextPreference("revanced_swipe_overlay_timeout", inputType = InputType.NUMBER),
|
SwitchPreference("revanced_swipe_show_circular_overlay"),
|
||||||
TextPreference("revanced_swipe_text_overlay_size", inputType = InputType.NUMBER),
|
SwitchPreference("revanced_swipe_overlay_minimal_style"),
|
||||||
TextPreference("revanced_swipe_overlay_background_opacity", inputType = InputType.NUMBER),
|
TextPreference("revanced_swipe_overlay_background_opacity", inputType = InputType.NUMBER),
|
||||||
|
TextPreference("revanced_swipe_overlay_timeout", inputType = InputType.NUMBER),
|
||||||
TextPreference("revanced_swipe_threshold", inputType = InputType.NUMBER),
|
TextPreference("revanced_swipe_threshold", inputType = InputType.NUMBER),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -53,7 +54,12 @@ private val swipeControlsResourcePatch = resourcePatch {
|
|||||||
ResourceGroup(
|
ResourceGroup(
|
||||||
"drawable",
|
"drawable",
|
||||||
"revanced_ic_sc_brightness_auto.xml",
|
"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_mute.xml",
|
||||||
"revanced_ic_sc_volume_normal.xml",
|
"revanced_ic_sc_volume_normal.xml",
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ val hideButtonsPatch = resourcePatch(
|
|||||||
PreferenceScreenPreference(
|
PreferenceScreenPreference(
|
||||||
"revanced_hide_buttons_screen",
|
"revanced_hide_buttons_screen",
|
||||||
preferences = setOf(
|
preferences = setOf(
|
||||||
|
SwitchPreference("revanced_disable_like_subscribe_glow"),
|
||||||
SwitchPreference("revanced_hide_like_dislike_button"),
|
SwitchPreference("revanced_hide_like_dislike_button"),
|
||||||
SwitchPreference("revanced_hide_share_button"),
|
SwitchPreference("revanced_hide_share_button"),
|
||||||
SwitchPreference("revanced_hide_report_button"),
|
SwitchPreference("revanced_hide_report_button"),
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ val navigationButtonsPatch = bytecodePatch(
|
|||||||
SwitchPreference("revanced_hide_shorts_button"),
|
SwitchPreference("revanced_hide_shorts_button"),
|
||||||
SwitchPreference("revanced_hide_create_button"),
|
SwitchPreference("revanced_hide_create_button"),
|
||||||
SwitchPreference("revanced_hide_subscriptions_button"),
|
SwitchPreference("revanced_hide_subscriptions_button"),
|
||||||
|
SwitchPreference("revanced_hide_notifications_button"),
|
||||||
SwitchPreference("revanced_switch_create_with_notifications_button"),
|
SwitchPreference("revanced_switch_create_with_notifications_button"),
|
||||||
SwitchPreference("revanced_hide_navigation_button_labels"),
|
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")
|
@Suppress("unused")
|
||||||
val hideEndscreenCardsPatch = bytecodePatch(
|
val hideEndscreenCardsPatch = bytecodePatch(
|
||||||
name = "Hide endscreen cards",
|
name = "Hide endscreen cards",
|
||||||
@@ -78,9 +81,7 @@ val hideEndscreenCardsPatch = bytecodePatch(
|
|||||||
|
|
||||||
addInstruction(
|
addInstruction(
|
||||||
insertIndex,
|
insertIndex,
|
||||||
"invoke-static { v$viewRegister }, " +
|
"invoke-static { v$viewRegister }, $EXTENSION_CLASS_DESCRIPTOR->hideEndscreen(Landroid/view/View;)V",
|
||||||
"Lapp/revanced/extension/youtube/patches/HideEndscreenCardsPatch;->" +
|
|
||||||
"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_emergency_box"),
|
||||||
SwitchPreference("revanced_hide_info_panels"),
|
SwitchPreference("revanced_hide_info_panels"),
|
||||||
SwitchPreference("revanced_hide_join_membership_button"),
|
SwitchPreference("revanced_hide_join_membership_button"),
|
||||||
SwitchPreference("revanced_disable_like_subscribe_glow"),
|
|
||||||
SwitchPreference("revanced_hide_medical_panels"),
|
SwitchPreference("revanced_hide_medical_panels"),
|
||||||
SwitchPreference("revanced_hide_quick_actions"),
|
SwitchPreference("revanced_hide_quick_actions"),
|
||||||
SwitchPreference("revanced_hide_related_videos"),
|
SwitchPreference("revanced_hide_related_videos"),
|
||||||
|
|||||||
@@ -1,79 +1,9 @@
|
|||||||
package app.revanced.patches.youtube.layout.hide.suggestedvideoendscreen
|
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.bytecodePatch
|
||||||
import app.revanced.patcher.patch.resourcePatch
|
import app.revanced.patches.youtube.layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch
|
||||||
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
|
|
||||||
|
|
||||||
internal var sizeAdjustableLiteAutoNavOverlay = -1L
|
@Deprecated("Use 'Hide suggested video end screen' instead.")
|
||||||
private set
|
val disableSuggestedVideoEndScreenPatch = bytecodePatch {
|
||||||
|
dependsOn(hideEndScreenSuggestedVideoPatch)
|
||||||
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",
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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 =
|
private const val EXTENSION_SEGMENT_PLAYBACK_CONTROLLER_CLASS_DESCRIPTOR =
|
||||||
"Lapp/revanced/extension/youtube/sponsorblock/SegmentPlaybackController;"
|
"Lapp/revanced/extension/youtube/sponsorblock/SegmentPlaybackController;"
|
||||||
private const val EXTENSION_CREATE_SEGMENT_BUTTON_CONTROLLER_CLASS_DESCRIPTOR =
|
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 =
|
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 =
|
private const val EXTENSION_SPONSORBLOCK_VIEW_CONTROLLER_CLASS_DESCRIPTOR =
|
||||||
"Lapp/revanced/extension/youtube/sponsorblock/ui/SponsorBlockViewController;"
|
"Lapp/revanced/extension/youtube/sponsorblock/ui/SponsorBlockViewController;"
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,29 @@
|
|||||||
package app.revanced.patches.youtube.layout.spoofappversion
|
package app.revanced.patches.youtube.layout.spoofappversion
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint
|
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.AccessFlags
|
||||||
import com.android.tools.smali.dexlib2.Opcode
|
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 {
|
internal val spoofAppVersionFingerprint = fingerprint {
|
||||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
package app.revanced.patches.youtube.layout.spoofappversion
|
package app.revanced.patches.youtube.layout.spoofappversion
|
||||||
|
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
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.extensions.InstructionExtensions.getInstruction
|
||||||
import app.revanced.patcher.patch.bytecodePatch
|
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.addResources
|
||||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
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.ListPreference
|
||||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
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.playservice.versionCheckPatch
|
||||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
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.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 =
|
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||||
"Lapp/revanced/extension/youtube/patches/spoof/SpoofAppVersionPatch;"
|
"Lapp/revanced/extension/youtube/patches/spoof/SpoofAppVersionPatch;"
|
||||||
@@ -24,6 +48,7 @@ val spoofAppVersionPatch = bytecodePatch(
|
|||||||
"Patching 19.16.39 includes additional older spoofing targets.",
|
"Patching 19.16.39 includes additional older spoofing targets.",
|
||||||
) {
|
) {
|
||||||
dependsOn(
|
dependsOn(
|
||||||
|
spoofAppVersionResourcePatch,
|
||||||
sharedExtensionPatch,
|
sharedExtensionPatch,
|
||||||
settingsPatch,
|
settingsPatch,
|
||||||
addResourcesPatch,
|
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 insertIndex = spoofAppVersionFingerprint.patternMatch!!.startIndex + 1
|
||||||
val buildOverrideNameRegister =
|
val buildOverrideNameRegister =
|
||||||
spoofAppVersionFingerprint.method.getInstruction<OneRegisterInstruction>(insertIndex - 1).registerA
|
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;
|
invoke-static {v$buildOverrideNameRegister}, $EXTENSION_CLASS_DESCRIPTOR->getYouTubeVersionOverride(Ljava/lang/String;)Ljava/lang/String;
|
||||||
move-result-object v$buildOverrideNameRegister
|
move-result-object v$buildOverrideNameRegister
|
||||||
""",
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,12 +77,9 @@ val playerControlsResourcePatch = resourcePatch {
|
|||||||
).item(0)
|
).item(0)
|
||||||
|
|
||||||
val bottomTargetDocumentChildNodes = bottomTargetDocument.childNodes
|
val bottomTargetDocumentChildNodes = bottomTargetDocument.childNodes
|
||||||
var bottomInsertBeforeNode: Node = bottomTargetDocumentChildNodes.findElementByAttributeValue(
|
var bottomInsertBeforeNode: Node = bottomTargetDocumentChildNodes.findElementByAttributeValueOrThrow(
|
||||||
"android:inflatedId",
|
"android:inflatedId",
|
||||||
bottomLastLeftOf,
|
bottomLastLeftOf,
|
||||||
) ?: bottomTargetDocumentChildNodes.findElementByAttributeValueOrThrow(
|
|
||||||
"android:id", // Older targets use non-inflated id.
|
|
||||||
bottomLastLeftOf,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
addTopControl = { resourceDirectoryName ->
|
addTopControl = { resourceDirectoryName ->
|
||||||
@@ -123,7 +120,7 @@ val playerControlsResourcePatch = resourcePatch {
|
|||||||
).item(0).childNodes
|
).item(0).childNodes
|
||||||
|
|
||||||
// Copy the patch layout xml into the target layout file.
|
// 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)
|
val element = sourceElements.item(index).cloneNode(true)
|
||||||
|
|
||||||
// If the element has no attributes there's no point adding it to the destination.
|
// 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) {
|
fun injectVisibilityCheckCall(descriptor: String) {
|
||||||
visibilityMethod.addInstruction(
|
visibilityMethod.addInstruction(
|
||||||
visibilityInsertIndex++,
|
visibilityInsertIndex++,
|
||||||
"invoke-static { p1 , p2 }, $descriptor->changeVisibility(ZZ)V",
|
"invoke-static { p1 , p2 }, $descriptor->setVisibility(ZZ)V",
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!visibilityImmediateCallbacksExistModified) {
|
if (!visibilityImmediateCallbacksExistModified) {
|
||||||
@@ -199,7 +196,7 @@ fun injectVisibilityCheckCall(descriptor: String) {
|
|||||||
|
|
||||||
visibilityImmediateMethod.addInstruction(
|
visibilityImmediateMethod.addInstruction(
|
||||||
visibilityImmediateInsertIndex++,
|
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. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' 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. -->
|
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.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- 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. -->
|
<!-- '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. -->
|
<!-- 'share' should be translated using the same localized wording YouTube displays for the button. -->
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
@@ -206,6 +206,7 @@ Second \"item\" text"</string>
|
|||||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="video.audio.forceOriginalAudioPatch">
|
<patch id="video.audio.forceOriginalAudioPatch">
|
||||||
|
<!-- 'Spoof video streams' should be the same translation used for revanced_spoof_video_streams_screen_title -->
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="video.quality.rememberVideoQualityPatch">
|
<patch id="video.quality.rememberVideoQualityPatch">
|
||||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
<!-- 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 id="interaction.seekbar.enableSlideToSeekPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- 'no auth' means no authentication -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="twitch">
|
<app id="twitch">
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ Second \"item\" text"</string>
|
|||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' 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. -->
|
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.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- 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. -->
|
<!-- '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. -->
|
<!-- 'share' should be translated using the same localized wording YouTube displays for the button. -->
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
@@ -206,6 +206,7 @@ Second \"item\" text"</string>
|
|||||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="video.audio.forceOriginalAudioPatch">
|
<patch id="video.audio.forceOriginalAudioPatch">
|
||||||
|
<!-- 'Spoof video streams' should be the same translation used for revanced_spoof_video_streams_screen_title -->
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="video.quality.rememberVideoQualityPatch">
|
<patch id="video.quality.rememberVideoQualityPatch">
|
||||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
<!-- 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 id="interaction.seekbar.enableSlideToSeekPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- 'no auth' means no authentication -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="twitch">
|
<app id="twitch">
|
||||||
|
|||||||
@@ -168,9 +168,6 @@ Second \"item\" text"</string>
|
|||||||
لن يتم إعلامك بأي أخطاء غير متوقعة."</string>
|
لن يتم إعلامك بأي أخطاء غير متوقعة."</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
<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_title">إخفاء بطاقات الألبوم</string>
|
||||||
<string name="revanced_hide_album_cards_summary_on">تم إخفاء بطاقات الألبوم</string>
|
<string name="revanced_hide_album_cards_summary_on">تم إخفاء بطاقات الألبوم</string>
|
||||||
<string name="revanced_hide_album_cards_summary_off">يتم عرض بطاقات الألبوم</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>
|
<string name="revanced_hide_horizontal_shelves_summary_off">يتم عرض الرفوف</string>
|
||||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||||
This appears in the video player for certain videos. -->
|
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_on">تم إخفاء الزر</string>
|
||||||
<string name="revanced_hide_join_membership_button_summary_off">يتم عرض الزر</string>
|
<string name="revanced_hide_join_membership_button_summary_off">يتم عرض الزر</string>
|
||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- '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_title">إخفاء رف \'مقترحات لك\'</string>
|
||||||
<string name="revanced_hide_for_you_shelf_summary_on">تم إخفاء الرف</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_summary_off">يتم عرض الرف في صفحة القناة</string>
|
||||||
<!-- 'Notify me' 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. -->
|
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_title">إخفاء زر \'تنبيهي\'</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">تم إخفاء الزر</string>
|
<string name="revanced_hide_notify_me_button_summary_on">تم إخفاء الزر</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">يتم عرض الزر</string>
|
<string name="revanced_hide_notify_me_button_summary_off">يتم عرض الزر</string>
|
||||||
<!-- '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. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">إخفاء توصيات \'شاهد الأشخاص أيضًا\'</string>
|
<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_on">تم إخفاء العلامة</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">يتم عرض التوصيات</string>
|
<string name="revanced_hide_search_result_recommendations_summary_off">يتم عرض العلامة</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that 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. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">إخفاء زر \'عرض المزيد\'</string>
|
<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_on">تم إخفاء رف الشرائح</string>
|
||||||
<string name="revanced_hide_chips_shelf_summary_off">يتم عرض رف الشرائح</string>
|
<string name="revanced_hide_chips_shelf_summary_off">يتم عرض رف الشرائح</string>
|
||||||
<string name="revanced_hide_expandable_chip_title">إخفاء الشريحة القابلة للتوسيع تحت الفيديوهات</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_on">تم إخفاء البطاقة القابلة للتوسيع</string>
|
||||||
<string name="revanced_hide_expandable_chip_summary_off">يتم عرض الشرائح القابلة للتوسيع</string>
|
<string name="revanced_hide_expandable_chip_summary_off">يتم عرض البطاقة القابلة للتوسيع</string>
|
||||||
<string name="revanced_hide_community_posts_title">إخفاء مشاركات المجتمع</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_on">تم إخفاء مشاركات المجتمع</string>
|
||||||
<string name="revanced_hide_community_posts_summary_off">يتم عرض مشاركات المجتمع</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_title">إخفاء إرشادات المجتمع</string>
|
||||||
<string name="revanced_hide_community_guidelines_summary_on">تم إخفاء إرشادات المجتمع</string>
|
<string name="revanced_hide_community_guidelines_summary_on">تم إخفاء إرشادات المجتمع</string>
|
||||||
<string name="revanced_hide_community_guidelines_summary_off">يتم عرض إرشادات المجتمع</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_on">تم إخفاء إرشادات مجتمع المشتركين</string>
|
||||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">يتم عرض إرشادات مجتمع المشتركين</string>
|
<string name="revanced_hide_subscribers_community_guidelines_summary_off">يتم عرض إرشادات مجتمع المشتركين</string>
|
||||||
<string name="revanced_hide_channel_member_shelf_title">إخفاء رف أعضاء القناة</string>
|
<string name="revanced_hide_channel_member_shelf_title">إخفاء رف أعضاء القناة</string>
|
||||||
@@ -280,63 +277,63 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_hide_artist_cards_title">إخفاء بطاقات الفنان</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_on">تم إخفاء بطاقات الفنان</string>
|
||||||
<string name="revanced_hide_artist_cards_summary_off">يتم عرض بطاقات الفنان</string>
|
<string name="revanced_hide_artist_cards_summary_off">يتم عرض بطاقات الفنان</string>
|
||||||
<string name="revanced_hide_attributes_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_on">تم إخفاء أقسام الأماكن المميزة، الألعاب، الموسيقى والأشخاص المذكورون</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">يتم عرض \'الأماكن المميزة\'، أقسام الألعاب والموسيقى</string>
|
<string name="revanced_hide_attributes_section_summary_off">يتم عرض أقسام الأماكن المميزة، الألعاب، الموسيقى والأشخاص المذكورون</string>
|
||||||
<string name="revanced_hide_chapters_section_title">إخفاء قسم الفصول</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_on">تم إخفاء قسم الفصول</string>
|
||||||
<string name="revanced_hide_chapters_section_summary_off">يتم عرض قسم الفصول</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_title">إخفاء \'كيف تم إنشاء هذا المحتوى\'</string>
|
||||||
<string name="revanced_hide_how_this_was_made_section_summary_on">تم إخفاء قسم \"كيف تم إنشاء هذا المحتوى\"</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_how_this_was_made_section_summary_off">يتم عرض قسم كيف تم إنشاء هذا المحتوى</string>
|
||||||
<string name="revanced_hide_podcast_section_title">إخفاء قسم \'استكشاف البودكاست\'</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_on">تم إخفاء قسم استكشاف البودكاست</string>
|
||||||
<string name="revanced_hide_podcast_section_summary_off">يتم عرض قسم \"استكشاف البودكاست\"</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_title">إخفاء بطاقات المعلومات</string>
|
||||||
<string name="revanced_hide_info_cards_section_summary_on">تم إخفاء قسم بطاقات المعلومات</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_info_cards_section_summary_off">يتم عرض قسم بطاقات المعلومات</string>
|
||||||
<string name="revanced_hide_key_concepts_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_on">تم إخفاء قسم المفاهيم الأساسية</string>
|
||||||
<string name="revanced_hide_key_concepts_section_summary_off">يتم عرض قسم \'المفاهيم الأساسية\'</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_title">إخفاء النص</string>
|
||||||
<string name="revanced_hide_transcript_section_summary_on">تم إخفاء قسم النص</string>
|
<string name="revanced_hide_transcript_section_summary_on">تم إخفاء قسم النص</string>
|
||||||
<string name="revanced_hide_transcript_section_summary_off">يتم عرض قسم النص</string>
|
<string name="revanced_hide_transcript_section_summary_off">يتم عرض قسم النص</string>
|
||||||
<string name="revanced_hide_description_components_screen_title">وصف الفيديو</string>
|
<string name="revanced_hide_description_components_screen_title">وصف الفيديو</string>
|
||||||
<string name="revanced_hide_description_components_screen_summary">إخفاء أو عرض مكونات وصف الفيديو</string>
|
<string name="revanced_hide_description_components_screen_summary">إخفاء أو عرض مكونات وصف الفيديو</string>
|
||||||
<string name="revanced_hide_filter_bar_screen_title">شريط التصفية</string>
|
<string name="revanced_hide_filter_bar_screen_title">شريط التصفية</string>
|
||||||
<string name="revanced_hide_filter_bar_screen_summary">إخفاء شريط التصفية أو عرضه في الموجز والبحث الفيديوهات ذات الصلة</string>
|
<string name="revanced_hide_filter_bar_screen_summary">إخفاء أو إظهار شريط الفلتر في الخلاصة ونتائج البحث ومقاطع الفيديو ذات الصلة</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_feed_title">إخفاء في الموجز</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_title">إخفاء في الموجز</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">مخفي في الموجز</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">مخفي في الموجز</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">يعرض في الموجز</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">يعرض في الموجز</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_title">إخفاء في البحث</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_title">إخفاء في نتائج البحث</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">مخفي في البحث</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">مخفي في نتائج البحث</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">يعرض في البحث</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">يظهر في نتائج البحث</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">إخفاء في الفيديوهات ذات الصلة</string>
|
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">إخفاء في الفيديوهات ذات الصلة</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">مخفي في الفيديوهات ذات الصلة</string>
|
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">مخفي في الفيديوهات ذات الصلة</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">يعرض في الفيديوهات ذات الصلة</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_title">التعليقات</string>
|
||||||
<string name="revanced_comments_screen_summary">إخفاء أو عرض مكونات قسم التعليقات</string>
|
<string name="revanced_comments_screen_summary">إخفاء أو عرض مكونات قسم التعليقات</string>
|
||||||
<string name="revanced_hide_comments_chat_summary_title">إخفاء \"ملخص الدردشة\" </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_on">تم إخفاء ملخص المحادثات</string>
|
||||||
<string name="revanced_hide_comments_chat_summary_summary_off">يتم عرض “ملخص الدردشة”</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_title">إخفاء رأس \'تعليقات الأعضاء\'</string>
|
||||||
<string name="revanced_hide_comments_by_members_header_summary_on">تم إخفاء رأس \'تعليقات الأعضاء\'</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_off">يتم عرض علامة تعليقات من الأعضاء</string>
|
||||||
<string name="revanced_hide_comments_section_title">إخفاء قسم التعليقات</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_on">تم إخفاء قسم التعليقات</string>
|
||||||
<string name="revanced_hide_comments_section_summary_off">يتم عرض قسم التعليقات</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_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_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_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_title">إخفاء تعليق المعاينة</string>
|
||||||
<string name="revanced_hide_comments_preview_comment_summary_on">تم إخفاء تعليق المعاينة</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_preview_comment_summary_off">يتم عرض تعليق المعاينة</string>
|
||||||
<string name="revanced_hide_comments_thanks_button_title">إخفاء زر شكرًا</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_on">تم إخفاء زر شكرًا</string>
|
||||||
<string name="revanced_hide_comments_thanks_button_summary_off">يتم عرض زر شكرًا</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 -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
<string name="revanced_hide_doodles_title">إخفاء رسومات YouTube</string>
|
<string name="revanced_hide_doodles_title">إخفاء رسومات YouTube</string>
|
||||||
<string name="revanced_hide_doodles_summary_on">تم إخفاء رسومات شريط البحث</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_on">تم إخفاء رفوف التسوق</string>
|
||||||
<string name="revanced_hide_player_store_shelf_summary_off">يتم عرض رفوف التسوق</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_title">إخفاء روابط التسوق في وصف الفيديو</string>
|
||||||
<string name="revanced_hide_shopping_links_summary_on">تم إخفاء روابط التسوق</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_off">يتم عرض روابط التسوق في وصف الفيديو</string>
|
||||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
<!-- '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_title">إخفاء زر \"زيارة المتجر\" على صفحات القناة</string>
|
||||||
<string name="revanced_hide_visit_store_button_summary_on">تم إخفاء الزر</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_off">يتم عرض الزر في صفحة القناة</string>
|
||||||
<string name="revanced_hide_web_search_results_title">إخفاء نتائج بحث الويب</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_on">تم إخفاء نتائج البحث على الويب</string>
|
||||||
<string name="revanced_hide_web_search_results_summary_off">يتم عرض نتائج البحث على الويب</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_success">تم نسخ URL إلى الحافظة</string>
|
||||||
<string name="revanced_share_copy_url_timestamp_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_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_summary_off">لا يتم عرض الزر</string>
|
||||||
<string name="revanced_copy_video_url_timestamp_title">عرض زر نسخ URL مع الطابع الزمني</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>
|
<string name="revanced_copy_video_url_timestamp_summary_off">لا يتم عرض الزر</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||||
@@ -484,11 +481,15 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
||||||
<string name="revanced_swipe_brightness_title">التحكم بالسطوع عن طريق ايماءة التمرير</string>
|
<string name="revanced_swipe_brightness_title">التحكم بالسطوع عن طريق ايماءة التمرير</string>
|
||||||
<string name="revanced_swipe_brightness_summary_on">تم تمكين التحكم بمستوى السطوع عن طريق الإيماءة</string>
|
<string name="revanced_swipe_brightness_summary_on">"تم تمكين التمرير السريع لضبط السطوع في وضع ملء الشاشة
|
||||||
<string name="revanced_swipe_brightness_summary_off">تم تعطيل التحكم بمستوى السطوع عن طريق الإيماءة</string>
|
|
||||||
|
اضبط السطوع عن طريق التمرير عموديًا على الجانب الأيسر من الشاشة"</string>
|
||||||
|
<string name="revanced_swipe_brightness_summary_off">تم تعطيل التمرير السريع لضبط السطوع في وضع ملء الشاشة</string>
|
||||||
<string name="revanced_swipe_volume_title">تمكين التحكم بالصوت عن طريق إيماءة التمرير</string>
|
<string name="revanced_swipe_volume_title">تمكين التحكم بالصوت عن طريق إيماءة التمرير</string>
|
||||||
<string name="revanced_swipe_volume_summary_on">تم تمكين التحكم بمستوى الصوت عن طريق الإيماءة</string>
|
<string name="revanced_swipe_volume_summary_on">"تم تمكين التمرير السريع لضبط مستوى الصوت في وضع ملء الشاشة
|
||||||
<string name="revanced_swipe_volume_summary_off">تم تعطيل التحكم بمستوى الصوت عن طريق الإيماءة</string>
|
|
||||||
|
اضبط مستوى الصوت عن طريق التمرير عموديًا على الجانب الأيمن من الشاشة"</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_title">تمكين إيماءة الضغط للتمرير</string>
|
||||||
<string name="revanced_swipe_press_to_engage_summary_on">يتم تنشيط عناصر التحكم عن طريق إيماءة التمرير فقط بضغطة طويلة</string>
|
<string name="revanced_swipe_press_to_engage_summary_on">يتم تنشيط عناصر التحكم عن طريق إيماءة التمرير فقط بضغطة طويلة</string>
|
||||||
<string name="revanced_swipe_press_to_engage_summary_off">تنشيط عناصر التحكم عن طريق إيماءة التمرير عند الضغط مباشرة</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_title">تمكين إيماءة السطوع التلقائي</string>
|
||||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">التمرير لأسفل إلى أدنى قيمة للسطوع يمكّن السطوع التلقائي</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_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_title">مهلة واجهة التمرير</string>
|
||||||
<string name="revanced_swipe_overlay_timeout_summary">مقدار الوقت الذي تظهر فيه واجهة التمرير بعد التغيير بجزء الثانية</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_title">تعتيم خلفية واجهة التمرير السريع</string>
|
||||||
<string name="revanced_swipe_overlay_background_opacity_summary">قيمة التعتيم بين 0-100</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_overlay_background_opacity_invalid_toast">يجب أن يكون تعتيم التمرير السريع بين 0-100</string>
|
||||||
<string name="revanced_swipe_threshold_title">مقدار حد التمرير</string>
|
<string name="revanced_swipe_threshold_title">مقدار حد التمرير</string>
|
||||||
<string name="revanced_swipe_threshold_summary">الحد الأدنى من التمرير قبل اكتشاف الإيماءة</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_title">تمكين إيماءة التمرير لتغيير الفيديو</string>
|
||||||
<string name="revanced_swipe_change_video_summary_on">سيؤدي التمرير في وضع ملء الشاشة إلى التغيير للفيديو التالي/السابق</string>
|
<string name="revanced_swipe_change_video_summary_on">سيؤدي التمرير في وضع ملء الشاشة إلى التغيير للفيديو التالي/السابق</string>
|
||||||
<string name="revanced_swipe_change_video_summary_off">لن يؤدي التمرير في وضع ملء الشاشة إلى التغيير للفيديو التالي/السابق</string>
|
<string name="revanced_swipe_change_video_summary_off">لن يؤدي التمرير في وضع ملء الشاشة إلى التغيير للفيديو التالي/السابق</string>
|
||||||
@@ -523,6 +527,9 @@ Second \"item\" text"</string>
|
|||||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||||
<string name="revanced_hide_buttons_screen_title">أزرار الإجراء</string>
|
<string name="revanced_hide_buttons_screen_title">أزرار الإجراء</string>
|
||||||
<string name="revanced_hide_buttons_screen_summary">إخفاء أو عرض الأزرار تحت الفيديوهات</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_title">إخفاء أعجبني ولم يعجبني</string>
|
||||||
<string name="revanced_hide_like_dislike_button_summary_on">تم إخفاء أزرار أعجبني ولم يعجبني</string>
|
<string name="revanced_hide_like_dislike_button_summary_on">تم إخفاء أزرار أعجبني ولم يعجبني</string>
|
||||||
<string name="revanced_hide_like_dislike_button_summary_off">يتم عرض أزرار أعجبني ولم يعجبني</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_title">إخفاء الاشتراكات</string>
|
||||||
<string name="revanced_hide_subscriptions_button_summary_on">تم إخفاء زر الاشتراكات</string>
|
<string name="revanced_hide_subscriptions_button_summary_on">تم إخفاء زر الاشتراكات</string>
|
||||||
<string name="revanced_hide_subscriptions_button_summary_off">يتم عرض زر الاشتراكات</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. -->
|
<!-- '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_title">تبديل الإنشاء مع الإشعارات</string>
|
||||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"تم تبديل زر الإنشاء بـزر الإشعارات
|
<string name="revanced_switch_create_with_notifications_button_summary_on">"تم تبديل زر الإنشاء بـزر الإشعارات
|
||||||
|
|
||||||
ملاحظة: يؤدي تمكين هذا أيضًا إلى إخفاء إعلانات الفيديو بالقوة"</string>
|
ملاحظة: يؤدي تمكين هذا أيضًا إلى إخفاء إعلانات الفيديو بالقوة"</string>
|
||||||
<string name="revanced_switch_create_with_notifications_button_summary_off">لا يتم تبديل زر الإنشاء بزر الإشعارات</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_title">إخفاء تسميات زر التنقل</string>
|
||||||
<string name="revanced_hide_navigation_button_labels_summary_on">تم إخفاء التسميات</string>
|
<string name="revanced_hide_navigation_button_labels_summary_on">تم إخفاء التسميات</string>
|
||||||
<string name="revanced_hide_navigation_button_labels_summary_off">يتم عرض التسميات</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_on">تم إخفاء شريط التنقل</string>
|
||||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">يتم عرض شريط التنقل</string>
|
<string name="revanced_hide_shorts_navigation_bar_summary_off">يتم عرض شريط التنقل</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
<string name="revanced_disable_suggested_video_end_screen_title">تعطيل شاشة نهاية الفيديو المقترح</string>
|
<string name="revanced_end_screen_suggested_video_title">إخفاء الفيديو المقترح في شاشة النهاية</string>
|
||||||
<string name="revanced_disable_suggested_video_end_screen_summary_on">الفيديوهات المقترحة سيتم تعطيلها</string>
|
<string name="revanced_end_screen_suggested_video_summary_on">"يتم إخفاء الفيديو المقترح في شاشة النهاية عند إيقاف التشغيل التلقائي
|
||||||
<string name="revanced_disable_suggested_video_end_screen_summary_off">الفيديوهات المقترحة سيتم عرضها</string>
|
|
||||||
|
يمكن تغيير التشغيل التلقائي في إعدادات YouTube:
|
||||||
|
الإعدادات ← التشغيل ← تشغيل الفيديو التالي تلقائيًا"</string>
|
||||||
|
<string name="revanced_end_screen_suggested_video_summary_off">يتم عرض الفيديو المقترح في شاشة النهاية</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">إخفاء الطابع الزمني للفيديو</string>
|
<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. -->
|
<!-- 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_timeout">لم يعجبني غير متاح مؤقتًا (انتهت مهلة API)</string>
|
||||||
<string name="revanced_ryd_failure_connection_status_code">لم يعجبني غير متاح (الحالة %d)</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>
|
<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. -->
|
<!-- 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>
|
<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_on">يتم عرض لم يعجبني</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">لا يتم عرض لم يعجبني</string>
|
<string name="revanced_ryd_enable_summary_off">لا يتم عرض لم يعجبني</string>
|
||||||
<string name="revanced_ryd_shorts_title">عرض لم يعجني في فيديوهات Shorts</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">يتم عرض عدم الإعجاب على فيديوهات Shorts</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"إبداءات لم يعجبني التي تظهر على فيديوهات Shorts
|
<string name="revanced_ryd_shorts_summary_on_disclaimer">"يتم عرض مرات عدم الإعجاب في فيديوهات Shorts
|
||||||
|
|
||||||
التقييد: قد لا تظهر إبداءات لم يعجبني في وضع التصفح المتخفي"</string>
|
التقييد: قد لا تظهر مرات عدم الإعجاب في وضع التصفح المتخفي"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">تم إخفاء لم يعجني في فيديوهات Shorts</string>
|
<string name="revanced_ryd_shorts_summary_off">لا يتم عرض مرات عدم الإعجاب في فيديوهات Shorts</string>
|
||||||
<string name="revanced_ryd_dislike_percentage_title">لم يعجبني كــ نسبة مئوية</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_on">يتم عرض مرات عدم الإعجاب كنسبة مئوية</string>
|
||||||
<string name="revanced_ryd_dislike_percentage_summary_off">يعرض عدد لم يعجبني كـ رَقَم</string>
|
<string name="revanced_ryd_dislike_percentage_summary_off">يتم عرض مرات عدم الإعجاب كرقم</string>
|
||||||
<!-- Translations should use language similar to 'revanced_sb_enable_compact_skip_button' -->
|
<!-- 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_title">مقاس زر أعجبني</string>
|
||||||
<string name="revanced_ryd_compact_layout_summary_on">زر أعجبني مصمم لأدنى عرض</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_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_on">إخفاء زر التخطي بعد بضع ثوانٍ</string>
|
||||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">يتم عرض زر \"التخطي\" للمقطع بأكمله</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">عرض ملاحظة عند التخطي</string>
|
||||||
<string name="revanced_sb_general_skiptoast_sum_on">يتم عرض ملاحظة عندما يتم تخطي مقطع تلقائيًا. انقر هنا لمشاهدة مثال</string>
|
<string name="revanced_sb_general_skiptoast_sum_on">يتم عرض ملاحظة عندما يتم تخطي مقطع تلقائيًا. انقر هنا لمشاهدة مثال</string>
|
||||||
<string name="revanced_sb_general_skiptoast_sum_off">لن يتم عرض الملاحظة. انقر هنا لمشاهدة مثال</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">عرض مدة الفيديو بدون المقاطع</string>
|
||||||
@@ -1016,7 +1032,7 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_sb_skipped_multiple_segments">تم تخطي عدة مقاطع</string>
|
<string name="revanced_sb_skipped_multiple_segments">تم تخطي عدة مقاطع</string>
|
||||||
<string name="revanced_sb_skip_automatically">التخطي تلقائيًا</string>
|
<string name="revanced_sb_skip_automatically">التخطي تلقائيًا</string>
|
||||||
<string name="revanced_sb_skip_automatically_once">التخطي تلقائيًا مرة واحدة</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_seekbaronly">عرض في شريط تقدم الفيديو</string>
|
||||||
<string name="revanced_sb_skip_ignore">تعطيل</string>
|
<string name="revanced_sb_skip_ignore">تعطيل</string>
|
||||||
<string name="revanced_sb_submit_failed_invalid">غير قادر على إرسال المقطع: الحالة: %s</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_new_segment_edit_by_hand_parse_error">الوقت المحدد غير صحيح</string>
|
||||||
<string name="revanced_sb_stats">إحصائيات</string>
|
<string name="revanced_sb_stats">إحصائيات</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- 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_loading">جارٍ التحميل...</string>
|
||||||
<string name="revanced_sb_stats_sb_disabled">تم تعطيل SponsorBlock</string>
|
<string name="revanced_sb_stats_sb_disabled">تم تعطيل SponsorBlock</string>
|
||||||
<string name="revanced_sb_stats_username">اسم المستخدم الخاص بك: <b>%s</b></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>
|
<string name="revanced_disable_zoom_haptics_summary_off">تم تمكين الاهتزاز</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="video.audio.forceOriginalAudioPatch">
|
<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_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>
|
||||||
<patch id="video.quality.rememberVideoQualityPatch">
|
<patch id="video.quality.rememberVideoQualityPatch">
|
||||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||||
@@ -1405,8 +1421,6 @@ Second \"item\" text"</string>
|
|||||||
قد لا يعمل تشغيل الفيديو"</string>
|
قد لا يعمل تشغيل الفيديو"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">إيقاف تشغيل هذا الإعداد قد يسبب مشاكل في تشغيل الفيديو.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">إيقاف تشغيل هذا الإعداد قد يسبب مشاكل في تشغيل الفيديو.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_type_title">العميل الافتراضي</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_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_on">يتم فرض ترميز فيديو على AVC (H.264)</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">يتم تحديد ترميز الفيديو تلقائيًا</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. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' 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. -->
|
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.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- 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. -->
|
<!-- '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. -->
|
<!-- 'share' should be translated using the same localized wording YouTube displays for the button. -->
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
@@ -208,6 +208,7 @@ Second \"item\" text"</string>
|
|||||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="video.audio.forceOriginalAudioPatch">
|
<patch id="video.audio.forceOriginalAudioPatch">
|
||||||
|
<!-- 'Spoof video streams' should be the same translation used for revanced_spoof_video_streams_screen_title -->
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="video.quality.rememberVideoQualityPatch">
|
<patch id="video.quality.rememberVideoQualityPatch">
|
||||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
<!-- 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 id="interaction.seekbar.enableSlideToSeekPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- 'no auth' means no authentication -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="twitch">
|
<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_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_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_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_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ə bildiriş göstərmə</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.
|
<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>
|
Gözlənilməz hallardan xəbərdar olmayacaqsınız."</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
<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_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_on">Albom kartları gizlidir</string>
|
||||||
<string name="revanced_hide_album_cards_summary_off">Albom kartları göstərilir</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>
|
<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.
|
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||||
This appears in the video player for certain videos. -->
|
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_on">Düymə gizlidir</string>
|
||||||
<string name="revanced_hide_join_membership_button_summary_off">Düymə göstərilir</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. -->
|
<!-- '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_title">\"Sizin üçün\" bölməsin gizlət</string>
|
||||||
<string name="revanced_hide_for_you_shelf_summary_on">Bölmə gizlidir</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">Bölmə göstərilir</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.
|
<!-- '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. -->
|
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_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_on">Düymə gizlidir</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Düymə göstərilir</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. -->
|
<!-- 'People also watched' 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_title">\"İnsanlar həmçinin izləyiblər\" etiketin gizlət</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">Tövsiyələr gizlidir</string>
|
<string name="revanced_hide_search_result_recommendations_summary_on">Etiket gizlidir</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Tövsiyələr göstərilir</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.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
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>
|
<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_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_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_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_on">Genişləndirilən kart 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_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_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_on">İcma elanları gizlədilib</string>
|
||||||
<string name="revanced_hide_community_posts_summary_off">İcma elanları göstərilir</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_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_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_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_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_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>
|
<string name="revanced_hide_channel_member_shelf_title">Kanal üzvü bölməsin gizlət</string>
|
||||||
@@ -280,63 +277,63 @@ 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_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_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_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_title">Atributları 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_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 və Musiqi bölmələri göstərilir</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">Bölümlər bölməsini gizlət</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_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_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_title">\'Bu məzmun necə hazırlanıb\'ı 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_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əzmun necə hazırlanıb\" bölməsi görünür</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ı kəşf et\' bölməsini gizlət</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ı kəşf et\" bölməsi gizlədilir</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ı kəşf et\" bölməsi göstərilir</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ı bölməsini gizlət</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_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_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_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_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_key_concepts_section_summary_off">Əsas anlayışlar bölməsi görünür</string>
|
||||||
<string name="revanced_hide_transcript_section_title">Transkripsiya bölməsini gizlət</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_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_transcript_section_summary_off">Transkripsiya bölməsi göstərilir</string>
|
||||||
<string name="revanced_hide_description_components_screen_title">Video açıqlaması</string>
|
<string name="revanced_hide_description_components_screen_title">Video açıqlaması</string>
|
||||||
<string name="revanced_hide_description_components_screen_summary">Video açıqlaması elementlərini gizlət və ya göstər</string>
|
<string name="revanced_hide_description_components_screen_summary">Video açıqlaması elementlərini gizlət və ya göstər</string>
|
||||||
<string name="revanced_hide_filter_bar_screen_title">Filtr çubuğu</string>
|
<string name="revanced_hide_filter_bar_screen_title">Filtr çubuğu</string>
|
||||||
<string name="revanced_hide_filter_bar_screen_summary">Axında, axtarışda və əlaqəli videolardakı filtr çubuğunu gizlət və ya göstər</string>
|
<string name="revanced_hide_filter_bar_screen_summary">Axında, axtarış nəticələrində və əlaqəli videolarda filtr cərgəsin gizlət və ya göstər</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_feed_title">Axında gizlət</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_title">Axında gizlət</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Axında gizlidir</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Axında gizlidir</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Axında göstərilir</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Axında göstərilir</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_title">Axtarışda gizlət</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_title">Axtarış nəticələrində gizlət</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Axtarışda gizlidir</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Axtarış nəticələrində gizlədilib</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Axtarışda görünür</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Axtarış nəticələrində göstərilir</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">Əlaqəli videolarda gizlət</string>
|
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">Əlaqəli videolarda gizlət</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">Əlaqəli videolarda gizlidir</string>
|
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">Əlaqəli videolarda gizlidir</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Əlaqəli videolarda görünür</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_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_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_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_on">Söhbət yekunu gizlidir </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_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_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_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östərilir</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_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_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_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_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_on">Short 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_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_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_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_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_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_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_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 -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
<string name="revanced_hide_doodles_title">YouTube Doodle-ları gizlət</string>
|
<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>
|
<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_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_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_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_on">Video təsvirində alış-veriş linkləri gizlədilib</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_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. -->
|
<!-- '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_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_on">Kanal səhifəsindəki 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_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_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_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>
|
<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_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_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_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_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_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>
|
<string name="revanced_copy_video_url_timestamp_summary_off">Düymə göstərilmir</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
<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_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_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_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_on">Endirin 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_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' -->
|
<!-- '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_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>
|
<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>
|
||||||
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
||||||
<string name="revanced_swipe_brightness_title">Parlaqlıq jestini aktivləşdir</string>
|
<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_on">"Tam ekran parlaqlıq sürüşdürməsi aktivdir
|
||||||
<string name="revanced_swipe_brightness_summary_off">Parlaqlıq sürüşdürmə qeyri-aktivdir</string>
|
|
||||||
|
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_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_on">"Tam ekran səs sürüşdürməsi aktivdir
|
||||||
<string name="revanced_swipe_volume_summary_off">Səs səviyyəsin sürüşdürmə qeyri-aktivdir</string>
|
|
||||||
|
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_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_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>
|
<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_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_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_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_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_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_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_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_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_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_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_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_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>
|
<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">
|
<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_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_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_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_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>
|
<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_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_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_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. -->
|
<!-- '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_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
|
<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>
|
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_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_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_on">Etiketlər gizlidir</string>
|
||||||
<string name="revanced_hide_navigation_button_labels_summary_off">Etiketlər göstərilir</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_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>
|
<string name="revanced_hide_shorts_navigation_bar_summary_off">Fəaliyyət çubuğu göstərilir</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
<string name="revanced_disable_suggested_video_end_screen_title">Təklif edilən video bitiş ekranın qapadın</string>
|
<string name="revanced_end_screen_suggested_video_title">Son ekran bildirilən videonu gizlət</string>
|
||||||
<string name="revanced_disable_suggested_video_end_screen_summary_on">Təklif olunan videolar qeyri-aktiv ediləcək</string>
|
<string name="revanced_end_screen_suggested_video_summary_on">"Avtomatik oynatma qapadılanda son ekran bildirilən video gizlədilir
|
||||||
<string name="revanced_disable_suggested_video_end_screen_summary_off">Təklif olunan videolar göstəriləcək</string>
|
|
||||||
|
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>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Video vaxt möhürünü gizlət</string>
|
<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. -->
|
<!-- 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_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_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>
|
<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. -->
|
<!-- 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>
|
<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_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_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_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">Bəyənməmələr 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_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>
|
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 gizlidir</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_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_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əylə 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' -->
|
<!-- 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_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>
|
<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_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>
|
<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' -->
|
<!-- 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_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_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">Ö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_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_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">Birbaşa ötürüləndə ani bildiriş göstər</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_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_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">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_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_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_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_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_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>
|
<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_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">Birbaşa ötür</string>
|
||||||
<string name="revanced_sb_skip_automatically_once">Bir dəfə avtomatik ö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_seekbaronly">İrəliləmə cizgisində göstər</string>
|
||||||
<string name="revanced_sb_skip_ignore">Qapadın</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>
|
<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_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_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_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_start">Başlanğıc</string>
|
||||||
<string name="revanced_sb_new_segment_mark_end">bitiş</string>
|
<string name="revanced_sb_new_segment_mark_end">Bitmə</string>
|
||||||
<string name="revanced_sb_new_segment_now">indi</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_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_time_end">Bölümün bitmə vaxtı</string>
|
||||||
<string name="revanced_sb_new_segment_confirm_title">Vaxtlar düzgündür?</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_new_segment_edit_by_hand_parse_error">Yanlış vaxt verilmişdir</string>
|
||||||
<string name="revanced_sb_stats">Statistikalar</string>
|
<string name="revanced_sb_stats">Statistikalar</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- 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_loading">Yüklənir...</string>
|
||||||
<string name="revanced_sb_stats_sb_disabled">SponsorBlock qapadıldı</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>
|
<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_2">Videonun ortası</string>
|
||||||
<string name="revanced_alt_thumbnail_stills_time_entry_3">Videonun sonu</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. -->
|
<!-- 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">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 əlçatan deyil</string>
|
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow müvəqqəti olaraq mövcud deyil</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.announcements.announcementsPatch">
|
<patch id="misc.announcements.announcementsPatch">
|
||||||
<string name="revanced_announcements_title">ReVanced elanlarını göstər</string>
|
<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_on">Elanlar başlanğıcda göstərilir</string>
|
||||||
<string name="revanced_announcements_summary_off">Elanlar açılışda göstərilmir</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_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_connection_failed">Elan provayderinə bağlanmaq olmadı</string>
|
||||||
<string name="revanced_announcements_dialog_dismiss">Ləğv et</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>
|
<string name="revanced_disable_zoom_haptics_summary_off">Reaksiya aktivdir</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="video.audio.forceOriginalAudioPatch">
|
<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_title">Orijinal səs dilini zorla</string>
|
||||||
<string name="revanced_force_original_audio_summary_on">Orijinal səs istifadəsi</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_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>
|
||||||
<patch id="video.quality.rememberVideoQualityPatch">
|
<patch id="video.quality.rememberVideoQualityPatch">
|
||||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
<!-- 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>
|
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_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>
|
<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_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_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>
|
<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_on">Журналы адладкі ўключаюць трасіроўку стэка</string>
|
||||||
<string name="revanced_debug_stacktrace_summary_off">Журналы адладкі не ўключаюць трасіроўку стэка</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_title">Паказаць тост пры памылцы ReVanced</string>
|
||||||
<string name="revanced_debug_toast_on_error_summary_on">Тост паказваецца, калі ўзнікае памылка</string>
|
<string name="revanced_debug_toast_on_error_summary_on">Паказваць toast у выпадку памылкі</string>
|
||||||
<string name="revanced_debug_toast_on_error_summary_off">Тост не паказваецца, калі ўзнікае памылка</string>
|
<string name="revanced_debug_toast_on_error_summary_off">Не паказваць toast у выпадку памылкі</string>
|
||||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"Адключэнне паведамленняў пра памылкі схавае ўсе апавяшчэнні ReVanced пра памылкі.
|
<string name="revanced_debug_toast_on_error_user_dialog_message">"Адключэнне паведамленняў пра памылкі схавае ўсе апавяшчэнні ReVanced пра памылкі.
|
||||||
|
|
||||||
Вы не будзеце атрымліваць апавяшчэнні пра нечаканыя падзеі."</string>
|
Вы не будзеце атрымліваць апавяшчэнні пра нечаканыя падзеі."</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
<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_title">Схаваць карты альбома</string>
|
||||||
<string name="revanced_hide_album_cards_summary_on">Карткі альбомаў схаваныя</string>
|
<string name="revanced_hide_album_cards_summary_on">Карткі альбомаў схаваныя</string>
|
||||||
<string name="revanced_hide_album_cards_summary_off">Паказваюцца альбомныя карткі</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>
|
<string name="revanced_hide_horizontal_shelves_summary_off">Паказаны паліцы</string>
|
||||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||||
This appears in the video player for certain videos. -->
|
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_on">Кнопка схавана</string>
|
||||||
<string name="revanced_hide_join_membership_button_summary_off">Паказана кнопка</string>
|
<string name="revanced_hide_join_membership_button_summary_off">Паказана кнопка</string>
|
||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- '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_title">Схаваць паліцу «Для вас»</string>
|
||||||
<string name="revanced_hide_for_you_shelf_summary_on">Паліца схаваная</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_summary_off">Паліца на старонцы канала паказаная</string>
|
||||||
<!-- 'Notify me' 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. -->
|
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_title">Схаваць кнопку \"Паведаміць мне\"</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Кнопка схавана</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Кнопка схавана</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Паказана кнопка</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Паказана кнопка</string>
|
||||||
<!-- '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. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">Схаваць рэкамендацыі \"Людзі таксама глядзелі\"</string>
|
<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_on">Надпіс схаваны</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Паказаны рэкамендацыі</string>
|
<string name="revanced_hide_search_result_recommendations_summary_off">Надпіс паказаны</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that 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. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Схаваць кнопку \"Паказаць больш\"</string>
|
<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_on">Паліца для чыпсаў схаваная</string>
|
||||||
<string name="revanced_hide_chips_shelf_summary_off">Паказана паліца для чыпсаў</string>
|
<string name="revanced_hide_chips_shelf_summary_off">Паказана паліца для чыпсаў</string>
|
||||||
<string name="revanced_hide_expandable_chip_title">Схаваць пашыраную картку пад відэа</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_on">Разгортваемая картка схаваная</string>
|
||||||
<string name="revanced_hide_expandable_chip_summary_off">Пашыраныя карткі паказаныя</string>
|
<string name="revanced_hide_expandable_chip_summary_off">Разгортваемая картка паказаная</string>
|
||||||
<string name="revanced_hide_community_posts_title">Схаваць паведамленні ў супольнасці</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_on">Паведамленні ў супольнасці схаваны</string>
|
||||||
<string name="revanced_hide_community_posts_summary_off">Паказваюцца паведамленні ў супольнасці</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_title">Схаваць правілы супольнасці</string>
|
||||||
<string name="revanced_hide_community_guidelines_summary_on">Правілы супольнасці схаваныя</string>
|
<string name="revanced_hide_community_guidelines_summary_on">Правілы супольнасці схаваныя</string>
|
||||||
<string name="revanced_hide_community_guidelines_summary_off">Паказаны правілы супольнасці</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_on">Правілы супольнасці падпісчыкаў схаваны</string>
|
||||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">Паказаны правілы супольнасці падпісчыкаў</string>
|
<string name="revanced_hide_subscribers_community_guidelines_summary_off">Паказаны правілы супольнасці падпісчыкаў</string>
|
||||||
<string name="revanced_hide_channel_member_shelf_title">Схаваць паліцу ўдзельніка канала</string>
|
<string name="revanced_hide_channel_member_shelf_title">Схаваць паліцу ўдзельніка канала</string>
|
||||||
@@ -280,63 +277,63 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_hide_artist_cards_title">Схаваць карткі выканаўцаў</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_on">Карткі выканаўцаў схаваныя</string>
|
||||||
<string name="revanced_hide_artist_cards_summary_off">Паказваюцца карткі выканаўцаў</string>
|
<string name="revanced_hide_artist_cards_summary_off">Паказваюцца карткі выканаўцаў</string>
|
||||||
<string name="revanced_hide_attributes_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_on">Раздзелы «Папулярныя месцы», «Гульні», «Музыка» і «Людзі, якіх згадвалі» схаваныя</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">Паказваюцца раздзелы \"Выбраныя месцы\", Гульні і Музыка</string>
|
<string name="revanced_hide_attributes_section_summary_off">Раздзелы «Папулярныя месцы», «Гульні», «Музыка» і «Людзі, якіх згадвалі» паказаныя</string>
|
||||||
<string name="revanced_hide_chapters_section_title">Схаваць раздзел \"Раздзелы\"</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_on">Раздзел раздзелаў схаваны</string>
|
||||||
<string name="revanced_hide_chapters_section_summary_off">Паказваецца раздзел раздзелаў</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_title">Схаваць «Як быў створаны гэты кантэнт»</string>
|
||||||
<string name="revanced_hide_how_this_was_made_section_summary_on">Раздзел «Як быў зроблены гэты кантэнт» схаваны</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_how_this_was_made_section_summary_off">Раздзел «Як быў створаны гэты кантэнт» паказаны</string>
|
||||||
<string name="revanced_hide_podcast_section_title">Схаваць раздзел \"Даследаваць падкаст\"</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_on">Раздзел «Пазнаёмцеся з падкастам» схаваны</string>
|
||||||
<string name="revanced_hide_podcast_section_summary_off">Паказаны раздзел \"Агляд падкаста\"</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_title">Схаваць інфармацыйныя карткі</string>
|
||||||
<string name="revanced_hide_info_cards_section_summary_on">Раздзел інфармацыйных картак схаваны</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_info_cards_section_summary_off">Паказваецца раздзел інфармацыйных карт</string>
|
||||||
<string name="revanced_hide_key_concepts_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_on">Раздзел «Ключавыя канцэпцыі» схаваны</string>
|
||||||
<string name="revanced_hide_key_concepts_section_summary_off">Паказаны раздзел «Ключавыя паняцці»</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_title">Схаваць стэнаграму</string>
|
||||||
<string name="revanced_hide_transcript_section_summary_on">Раздзел стэнаграмы схаваны</string>
|
<string name="revanced_hide_transcript_section_summary_on">Раздзел стэнаграмы схаваны</string>
|
||||||
<string name="revanced_hide_transcript_section_summary_off">Паказваецца раздзел стэнаграмы</string>
|
<string name="revanced_hide_transcript_section_summary_off">Паказваецца раздзел стэнаграмы</string>
|
||||||
<string name="revanced_hide_description_components_screen_title">Апісанне відэа</string>
|
<string name="revanced_hide_description_components_screen_title">Апісанне відэа</string>
|
||||||
<string name="revanced_hide_description_components_screen_summary">Схаваць або паказаць кампаненты апісання відэа</string>
|
<string name="revanced_hide_description_components_screen_summary">Схаваць або паказаць кампаненты апісання відэа</string>
|
||||||
<string name="revanced_hide_filter_bar_screen_title">Панэль фільтраў</string>
|
<string name="revanced_hide_filter_bar_screen_title">Панэль фільтраў</string>
|
||||||
<string name="revanced_hide_filter_bar_screen_summary">Схаваць або паказаць панэль фільтраў у стужцы, пошуку і звязаных відэа</string>
|
<string name="revanced_hide_filter_bar_screen_summary">Схаваць ці паказаць панэль фільтраў у стужцы, выніках пошуку і звязаных відэа</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_feed_title">Схаваць у карме</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_title">Схаваць у карме</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Схаваны ў стужцы</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Схаваны ў стужцы</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Паказваецца ў стужцы</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Паказваецца ў стужцы</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_title">Схавацца ў пошуку</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_title">Схаваць у выніках пошуку</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Схаваны ў пошуку</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Схавана ў выніках пошуку</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Паказваецца ў пошуку</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Паказана ў выніках пошуку</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">Схаваць у звязаных відэа</string>
|
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">Схаваць у звязаных відэа</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">Схавана ў звязаных відэа</string>
|
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">Схавана ў звязаных відэа</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Паказана ў звязаных відэа</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_title">Каментарыі</string>
|
||||||
<string name="revanced_comments_screen_summary">Схаваць або паказаць кампаненты раздзела каментарыяў</string>
|
<string name="revanced_comments_screen_summary">Схаваць або паказаць кампаненты раздзела каментарыяў</string>
|
||||||
<string name="revanced_hide_comments_chat_summary_title">Схаваць \"Зводка чата\" </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_on">Зводка чата схаваная</string>
|
||||||
<string name="revanced_hide_comments_chat_summary_summary_off">«Агляд чата» паказаны</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_title">Схаваць загаловак \"Каментарыі ўдзельнікаў\"</string>
|
||||||
<string name="revanced_hide_comments_by_members_header_summary_on">Загаловак \"Каментарыі ўдзельнікаў\" схаваны</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_off">Загаловак «Каментары ўдзельнікаў» паказаны</string>
|
||||||
<string name="revanced_hide_comments_section_title">Схаваць раздзел каментарыяў</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_on">Раздзел каментарыяў схаваны</string>
|
||||||
<string name="revanced_hide_comments_section_summary_off">Паказваецца раздзел каментарыяў</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_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_on">Кнопка «Стварыць Shorts» схаваная</string>
|
||||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Кнопка \"Створиць Short\" паказана</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_title">Схаваць каментарый для папярэдняга прагляду</string>
|
||||||
<string name="revanced_hide_comments_preview_comment_summary_on">Каментарый перад праглядам схаваны</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_preview_comment_summary_off">Паказваецца папярэдні прагляд каментарыя</string>
|
||||||
<string name="revanced_hide_comments_thanks_button_title">Схаваць кнопку \"Дзякуй\"\"</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_on">Кнопка падзякі схавана</string>
|
||||||
<string name="revanced_hide_comments_thanks_button_summary_off">Паказана кнопка падзякі</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 -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
<string name="revanced_hide_doodles_title">Схаваць YouTube Doodles</string>
|
<string name="revanced_hide_doodles_title">Схаваць YouTube Doodles</string>
|
||||||
<string name="revanced_hide_doodles_summary_on">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_on">Паліца крамы схавана</string>
|
||||||
<string name="revanced_hide_player_store_shelf_summary_off">Паліца крамы паказана</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_title">Схаваць спасылкі на пакупкі ў апісанні відэа</string>
|
||||||
<string name="revanced_hide_shopping_links_summary_on">Спасылкі на пакупкі схаваныя</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_off">Спасылкі на пакупкі ў апісанні відэа паказаныя</string>
|
||||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
<!-- '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_title">Схавайце кнопку \"Наведайце краму\" на старонках канала</string>
|
||||||
<string name="revanced_hide_visit_store_button_summary_on">Кнопка схавана</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_off">Кнопка на старонцы канала паказаная</string>
|
||||||
<string name="revanced_hide_web_search_results_title">Схаваць вынікі вэб-пошуку</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_on">Вынікі вэб-пошуку схаваныя</string>
|
||||||
<string name="revanced_hide_web_search_results_summary_off">Паказваюцца вынікі вэб-пошуку</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_success">URL скапіраваны ў буфер абмену</string>
|
||||||
<string name="revanced_share_copy_url_timestamp_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_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_summary_off">Кнопка не паказваецца</string>
|
||||||
<string name="revanced_copy_video_url_timestamp_title">Паказаць кнопку URL-адрас з часовай пазнакай</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>
|
<string name="revanced_copy_video_url_timestamp_summary_off">Кнопка не паказваецца</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
<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_title">Знешнія загрузкі</string>
|
||||||
<string name="revanced_external_downloader_screen_summary">Налады для выкарыстання вонкавага загрузніка</string>
|
<string name="revanced_external_downloader_screen_summary">Налады для выкарыстання вонкавага загрузніка</string>
|
||||||
<string name="revanced_external_downloader_title">Паказаць знешнюю кнопку загрузкі</string>
|
<string name="revanced_external_downloader_title">Паказаць знешнюю кнопку загрузкі</string>
|
||||||
<string name="revanced_external_downloader_summary_on">Кнопка загрузкі паказваецца ў плэеры</string>
|
<string name="revanced_external_downloader_summary_on">Кнопка загрузкі ў прайгравальніку паказаная</string>
|
||||||
<string name="revanced_external_downloader_summary_off">Кнопка загрузкі не адлюстроўваецца ў плэеры</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' -->
|
<!-- '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_title">Перавызначыць кнопку дзеянні спампоўкі</string>
|
||||||
<string name="revanced_external_downloader_action_button_summary_on">Кнопка \"Спампаваць\" адкрывае ваш знешні загрузнік</string>
|
<string name="revanced_external_downloader_action_button_summary_on">Кнопка \"Спампаваць\" адкрывае ваш знешні загрузнік</string>
|
||||||
@@ -484,11 +481,15 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
||||||
<string name="revanced_swipe_brightness_title">Уключыць жэст яркасці</string>
|
<string name="revanced_swipe_brightness_title">Уключыць жэст яркасці</string>
|
||||||
<string name="revanced_swipe_brightness_summary_on">Правядзенне па яркасці ўключана</string>
|
<string name="revanced_swipe_brightness_summary_on">"Поўнаэкранны жэст правядзення для яркасці ўключаны
|
||||||
<string name="revanced_swipe_brightness_summary_off">Правядзенне пальцам па яркасці адключана</string>
|
|
||||||
|
Наладжвайце яркасць, праводзячы вертыкальна па левым баку экрана"</string>
|
||||||
|
<string name="revanced_swipe_brightness_summary_off">Поўнаэкранны жэст правядзення для яркасці выключаны</string>
|
||||||
<string name="revanced_swipe_volume_title">Уключыць жэст гучнасці</string>
|
<string name="revanced_swipe_volume_title">Уключыць жэст гучнасці</string>
|
||||||
<string name="revanced_swipe_volume_summary_on">Правядзенне пальцам па гучнасці ўключана</string>
|
<string name="revanced_swipe_volume_summary_on">"Правядзенне пальцам для рэгулявання гучнасці ва ўвесь экран уключана
|
||||||
<string name="revanced_swipe_volume_summary_off">Правядзенне пальцам па гучнасці адключана</string>
|
|
||||||
|
Рэгулюйце гучнасць, праводзячы пальцам вертыкальна па правай частцы экрана"</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_title">Уключыць жэст \"націсканне для правядзення пальцам\"</string>
|
||||||
<string name="revanced_swipe_press_to_engage_summary_on">Правядзенне пальцам уключана</string>
|
<string name="revanced_swipe_press_to_engage_summary_on">Правядзенне пальцам уключана</string>
|
||||||
<string name="revanced_swipe_press_to_engage_summary_off">Правядзенне пальцам адключана</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_title">Уключыць жэст аўтаматычнай яркасці</string>
|
||||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">Правядзіце пальцам уніз да самага нізкага значэння яркасці, каб уключыць аўтаматычную яркасць</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_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_title">Тайм-аўт накладання пальцам</string>
|
||||||
<string name="revanced_swipe_overlay_timeout_summary">Працягласць бачнага накладання ў мілісекундах</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_title">Непразрыстасць фону накладкі пракруткі</string>
|
||||||
<string name="revanced_swipe_overlay_background_opacity_summary">Значэнне непразрыстасці паміж 0-100</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_overlay_background_opacity_invalid_toast">Непразрыстасць пракруткі павінна быць паміж 0-100</string>
|
||||||
<string name="revanced_swipe_threshold_title">Парог велічыні пальцам</string>
|
<string name="revanced_swipe_threshold_title">Парог велічыні пальцам</string>
|
||||||
<string name="revanced_swipe_threshold_summary">Велічыня парогавага значэння для правядзення пальцам</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_title">Уключыць зьмену відэа праз правядзенне пальцам</string>
|
||||||
<string name="revanced_swipe_change_video_summary_on">Правядзенне пальцам у рэжыме поўнага экрана зьменіць відэа на наступнае/папярэдняе</string>
|
<string name="revanced_swipe_change_video_summary_on">Правядзенне пальцам у рэжыме поўнага экрана зьменіць відэа на наступнае/папярэдняе</string>
|
||||||
<string name="revanced_swipe_change_video_summary_off">Правядзенне пальцам у рэжыме поўнага экрана не зьменіць відэа на наступнае/папярэдняе</string>
|
<string name="revanced_swipe_change_video_summary_off">Правядзенне пальцам у рэжыме поўнага экрана не зьменіць відэа на наступнае/папярэдняе</string>
|
||||||
@@ -523,6 +527,9 @@ Second \"item\" text"</string>
|
|||||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||||
<string name="revanced_hide_buttons_screen_title">Кнопкі дзеянняў</string>
|
<string name="revanced_hide_buttons_screen_title">Кнопкі дзеянняў</string>
|
||||||
<string name="revanced_hide_buttons_screen_summary">Схаваць або паказаць кнопкі пад відэа</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_title">Схаваць \"Падабаецца\" і \"Не падабаецца\"</string>
|
||||||
<string name="revanced_hide_like_dislike_button_summary_on">Кнопкі \"Падабаецца\" і \"Не падабаецца\" схаваны</string>
|
<string name="revanced_hide_like_dislike_button_summary_on">Кнопкі \"Падабаецца\" і \"Не падабаецца\" схаваны</string>
|
||||||
<string name="revanced_hide_like_dislike_button_summary_off">Паказваюцца кнопкі \"Падабаецца\" і \"Не падабаецца\"</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_title">Схаваць падпіскі</string>
|
||||||
<string name="revanced_hide_subscriptions_button_summary_on">Кнопка \"Падпіскі\" схавана</string>
|
<string name="revanced_hide_subscriptions_button_summary_on">Кнопка \"Падпіскі\" схавана</string>
|
||||||
<string name="revanced_hide_subscriptions_button_summary_off">Паказана кнопка \"Падпіскі\"</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. -->
|
<!-- '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_title">Пераключальнік \"Стварыць з апавяшчэннямі\"</string>
|
||||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"Кнопка «Стварыць» заменена кнопкай «Апавяшчэнні»
|
<string name="revanced_switch_create_with_notifications_button_summary_on">"Кнопка «Стварыць» заменена кнопкай «Апавяшчэнні»
|
||||||
|
|
||||||
Заўвага: Уключэнне гэтага таксама прымусова схавае відэарэкламу"</string>
|
Заўвага: Уключэнне гэтага таксама прымусова схавае відэарэкламу"</string>
|
||||||
<string name="revanced_switch_create_with_notifications_button_summary_off">Кнопка \"Стварыць\" не ўзаемадзейнічае з кнопкай \"Апавяшчэнні\"</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_title">Схаваць меткі кнопак навігацыі</string>
|
||||||
<string name="revanced_hide_navigation_button_labels_summary_on">Цэтлікі схаваныя</string>
|
<string name="revanced_hide_navigation_button_labels_summary_on">Цэтлікі схаваныя</string>
|
||||||
<string name="revanced_hide_navigation_button_labels_summary_off">Этыкеткі паказаны</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_on">Панэль навігацыі схавана</string>
|
||||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">Паказана панэль навігацыі</string>
|
<string name="revanced_hide_shorts_navigation_bar_summary_off">Паказана панэль навігацыі</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
<string name="revanced_disable_suggested_video_end_screen_title">Адключыць канчатковы экран прапанаванага відэа</string>
|
<string name="revanced_end_screen_suggested_video_title">Схаваць прапанаванае відэа на канчатковым экране</string>
|
||||||
<string name="revanced_disable_suggested_video_end_screen_summary_on">Прапанаваныя відэа будуць адключаны</string>
|
<string name="revanced_end_screen_suggested_video_summary_on">"Прапанаванае відэа на канчатковым экране будзе схавана, калі аўтаматычнае прайграванне выключана.
|
||||||
<string name="revanced_disable_suggested_video_end_screen_summary_off">Будуць паказаны прапанаваныя відэа</string>
|
|
||||||
|
Аўтаматычнае прайграванне можна змяніць у наладах YouTube:
|
||||||
|
Налады → Прайграванне → Аўтаматычнае прайграванне наступнага відэа"</string>
|
||||||
|
<string name="revanced_end_screen_suggested_video_summary_off">Паказваць прапанаванае відэа на канчатковым экране</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Схаваць метку часу відэа</string>
|
<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. -->
|
<!-- 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_timeout">Адзнакі \"Не падабаецца\" часова недаступныя (час чакання API скончыўся)</string>
|
||||||
<string name="revanced_ryd_failure_connection_status_code">Дызлайкі недаступныя (статус %d)</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>
|
<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. -->
|
<!-- 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>
|
<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_on">Дызлайкі паказаны</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Дызлайкі не паказваюцца</string>
|
<string name="revanced_ryd_enable_summary_off">Дызлайкі не паказваюцца</string>
|
||||||
<string name="revanced_ryd_shorts_title">Паказвайце \"не падабаецца\" на Shorts</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">Дызлайкі на Shorts паказаныя</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Непападання паказаны на Shorts
|
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Дызлайкі на Shorts паказаныя
|
||||||
|
|
||||||
Абмежаванне: Непападання могуць не з'яўляцца ў рэжыме інкогніта"</string>
|
Абмежаванне: дызлайкі могуць не адлюстроўвацца ў рэжыме інкогніта"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Дызлакі схаваныя ў Shorts</string>
|
<string name="revanced_ryd_shorts_summary_off">Дызлайкі на Shorts не паказаныя</string>
|
||||||
<string name="revanced_ryd_dislike_percentage_title">Дызлайкі ў працэнтах</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_on">Дызлайкі паказаны ў працэнтах</string>
|
||||||
<string name="revanced_ryd_dislike_percentage_summary_off">Неўпадабанні паказаны ў выглядзе колькасці</string>
|
<string name="revanced_ryd_dislike_percentage_summary_off">Дызлайкі паказаны лічбай</string>
|
||||||
<!-- Translations should use language similar to 'revanced_sb_enable_compact_skip_button' -->
|
<!-- 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_title">Кампактны дызайн кнопак «Падабаецца» і «Не падабаецца»</string>
|
||||||
<string name="revanced_ryd_compact_layout_summary_on">Кнопка \"Падабаецца\" ў стылі мінімальнай шырыні</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_on">Кнопкі і элементы кіравання квадратныя</string>
|
||||||
<string name="revanced_sb_square_layout_sum_off">Кнопкі і элементы кіравання закруглены</string>
|
<string name="revanced_sb_square_layout_sum_off">Кнопкі і элементы кіравання закруглены</string>
|
||||||
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
|
<!-- 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_on">Кнопка \"Прапусціць\" у стылі мінімальнай шырыні</string>
|
||||||
<string name="revanced_sb_enable_compact_skip_button_sum_off">Кнопка \"Прапусціць\" аформлена для лепшага выгляду</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_on">Кнопка \"Прапусціць\" скрываецца праз некалькі секунд</string>
|
||||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Кнопка \"Прапусціць\" адлюстроўваецца для ўсяго сегмента</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">Паказваць toast пры пропуску</string>
|
||||||
<string name="revanced_sb_general_skiptoast_sum_on">Тост паказваецца, калі сегмент аўтаматычна прапускаецца. Націсніце тут, каб убачыць прыклад</string>
|
<string name="revanced_sb_general_skiptoast_sum_on">Тост паказваецца, калі сегмент аўтаматычна прапускаецца. Націсніце тут, каб убачыць прыклад</string>
|
||||||
<string name="revanced_sb_general_skiptoast_sum_off">Тост не паказваецца. Націсніце тут, каб убачыць прыклад</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">Паказаць працягласць відэа без сегментаў</string>
|
||||||
<string name="revanced_sb_general_time_without_sum_on">Працягласць відэа мінус усе сегменты, паказана ў дужках побач з поўнай працягласцю відэа</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_general_time_without_sum_off">Паказана поўная даўжыня відэа</string>
|
||||||
<string name="revanced_sb_create_segment_category">Стварэнне новых сегментаў</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_on">Паказана кнопка \"Стварыць новы сегмент\"</string>
|
||||||
<string name="revanced_sb_enable_create_segment_sum_off">Кнопка \"Стварыць новы сегмент\" не паказваецца</string>
|
<string name="revanced_sb_enable_create_segment_sum_off">Кнопка \"Стварыць новы сегмент\" не паказваецца</string>
|
||||||
<string name="revanced_sb_general_adjusting">Адрэгулюйце новы крок сегмента</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_skipped_multiple_segments">Прапушчаны некалькі сегментаў</string>
|
||||||
<string name="revanced_sb_skip_automatically">Прапусціць аўтаматычна</string>
|
<string name="revanced_sb_skip_automatically">Прапусціць аўтаматычна</string>
|
||||||
<string name="revanced_sb_skip_automatically_once">Прапусціць аўтаматычна адзін раз</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_seekbaronly">Паказаць на панэлі пошуку</string>
|
||||||
<string name="revanced_sb_skip_ignore">Адключыць</string>
|
<string name="revanced_sb_skip_ignore">Адключыць</string>
|
||||||
<string name="revanced_sb_submit_failed_invalid">Немагчыма адправіць сегмент: %s</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_disabled_category">Катэгорыя адключана ў наладах. Уключыце катэгорыю для адпраўкі.</string>
|
||||||
<string name="revanced_sb_new_segment_title">Новы сегмент SponsorBlock</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_time_as_question">Усталяваць %s у якасці пачатку або канца новага сегмента?</string>
|
||||||
<string name="revanced_sb_new_segment_mark_start">пачаць</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_mark_end">Канец</string>
|
||||||
<string name="revanced_sb_new_segment_now">зараз</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_start">Час пачатку сегмента</string>
|
||||||
<string name="revanced_sb_new_segment_time_end">Час заканчэння сегмента</string>
|
<string name="revanced_sb_new_segment_time_end">Час заканчэння сегмента</string>
|
||||||
<string name="revanced_sb_new_segment_confirm_title">Ці правільны час?</string>
|
<string name="revanced_sb_new_segment_confirm_title">Ці правільны час?</string>
|
||||||
@@ -1289,8 +1305,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.announcements.announcementsPatch">
|
<patch id="misc.announcements.announcementsPatch">
|
||||||
<string name="revanced_announcements_title">Паказаць аб\"явы ReVanced</string>
|
<string name="revanced_announcements_title">Паказаць аб\"явы ReVanced</string>
|
||||||
<string name="revanced_announcements_summary_on">Аб\"явы паказваюцца пры запуску</string>
|
<string name="revanced_announcements_summary_on">Анонсы пры запуску паказаны</string>
|
||||||
<string name="revanced_announcements_summary_off">Аб\"явы не паказваюцца пры запуску</string>
|
<string name="revanced_announcements_summary_off">Анонсы пры запуску не паказаны</string>
|
||||||
<string name="revanced_announcements_enabled_summary">Паказваць аб\"явы пры запуску</string>
|
<string name="revanced_announcements_enabled_summary">Паказваць аб\"явы пры запуску</string>
|
||||||
<string name="revanced_announcements_connection_failed">Не ўдалося падключыцца да пастаўшчыка аб\"яў</string>
|
<string name="revanced_announcements_connection_failed">Не ўдалося падключыцца да пастаўшчыка аб\"яў</string>
|
||||||
<string name="revanced_announcements_dialog_dismiss">расслабіцца</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>
|
<string name="revanced_disable_zoom_haptics_summary_off">Тактыльныя сігналы ўключаны</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="video.audio.forceOriginalAudioPatch">
|
<patch id="video.audio.forceOriginalAudioPatch">
|
||||||
<string name="revanced_force_original_audio_title">Вымушанае арыгінальнае аўдыё</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_on">Выкарыстоўваць арыгінальную мову аўдыя</string>
|
||||||
<string name="revanced_force_original_audio_summary_off">Выкарыстанне аўдыё па змаўчанні</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>
|
||||||
<patch id="video.quality.rememberVideoQualityPatch">
|
<patch id="video.quality.rememberVideoQualityPatch">
|
||||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||||
@@ -1406,8 +1423,6 @@ Second \"item\" text"</string>
|
|||||||
Прайграванне відэа можа не працаваць"</string>
|
Прайграванне відэа можа не працаваць"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">Адключэнне гэтай налады можа выклікаць праблемы з прайграваннем відэа.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">Адключэнне гэтай налады можа выклікаць праблемы з прайграваннем відэа.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_type_title">Клиент по умолчанию</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_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_on">Відэакaдэк зафіксаваны ў AVC (H.264)</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Відэакaдэк вызначаецца аўтаматычна</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_on">Дневникът за отстраняване на грешки съдържа следи от стека</string>
|
||||||
<string name="revanced_debug_stacktrace_summary_off">Дневникът за отстраняване на грешки не съдържа следи от стека</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_title">Покажи системно съобщение при ReVanced грешка</string>
|
||||||
<string name="revanced_debug_toast_on_error_summary_on">Системно съобщение ще бъде показано, ако се появи грешка</string>
|
<string name="revanced_debug_toast_on_error_summary_on">Показва се toast, ако възникне грешка</string>
|
||||||
<string name="revanced_debug_toast_on_error_summary_off">Системно съобщение няма да бъде показано, ако се появи грешка</string>
|
<string name="revanced_debug_toast_on_error_summary_off">Не се показва toast, ако възникне грешка</string>
|
||||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"Изключването на изскачащи съобщения за грешки крие всички известия за грешки на ReVanced.
|
<string name="revanced_debug_toast_on_error_user_dialog_message">"Изключването на изскачащи съобщения за грешки крие всички известия за грешки на ReVanced.
|
||||||
|
|
||||||
Няма да бъдете уведомени за неочаквани събития."</string>
|
Няма да бъдете уведомени за неочаквани събития."</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
<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_title">\"Карти на албумите\"</string>
|
||||||
<string name="revanced_hide_album_cards_summary_on">Албумните карти са скрити</string>
|
<string name="revanced_hide_album_cards_summary_on">Албумните карти са скрити</string>
|
||||||
<string name="revanced_hide_album_cards_summary_off">Албумните карти се показват</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>
|
<string name="revanced_hide_horizontal_shelves_summary_off">Хоризонтални секции се показват</string>
|
||||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||||
This appears in the video player for certain videos. -->
|
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_on">Бутона Покажи още е скрит</string>
|
||||||
<string name="revanced_hide_join_membership_button_summary_off">Бутона \"Уведоми ме\" се показва</string>
|
<string name="revanced_hide_join_membership_button_summary_off">Бутона \"Уведоми ме\" се показва</string>
|
||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- '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_title">Скриване на рафта \"За вас\"</string>
|
||||||
<string name="revanced_hide_for_you_shelf_summary_on">Секцията \'За Вас\' е скрита</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_summary_off">Рафтът в страницата на канала е показан</string>
|
||||||
<!-- 'Notify me' 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. -->
|
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_title">Скриване на бутона \"Уведоми ме\"</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Бутона \"Уведоми ме\" е скрит</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Бутона \"Уведоми ме\" е скрит</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Бутона \"Уведоми ме\" се показва</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Бутона \"Уведоми ме\" се показва</string>
|
||||||
<!-- '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. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">Скриване на препоръките \'Други харесват също\'</string>
|
<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_on">Етикетът е скрит</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Препоръките се показват</string>
|
<string name="revanced_hide_search_result_recommendations_summary_off">Етикетът е показан</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that 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. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Скриване на бутона \"Покажи още\"</string>
|
<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_on">Рафтът \"Chip\" е скрит</string>
|
||||||
<string name="revanced_hide_chips_shelf_summary_off">Рафтовете със снимки се показват</string>
|
<string name="revanced_hide_chips_shelf_summary_off">Рафтовете със снимки се показват</string>
|
||||||
<string name="revanced_hide_expandable_chip_title">Скрий разширяемата карта под видеоклиповете</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_on">Разгъваемата карта е скрита</string>
|
||||||
<string name="revanced_hide_expandable_chip_summary_off">Разширяемите карти се показват</string>
|
<string name="revanced_hide_expandable_chip_summary_off">Разгъваемата карта е показана</string>
|
||||||
<string name="revanced_hide_community_posts_title">Скриване на публикациите от общността</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_on">Насоките на общността са скрити</string>
|
||||||
<string name="revanced_hide_community_posts_summary_off">Последните публикации са показани</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_title">Скриване на насоките на общността</string>
|
||||||
<string name="revanced_hide_community_guidelines_summary_on">Насоките на общността са скрити</string>
|
<string name="revanced_hide_community_guidelines_summary_on">Насоките на общността са скрити</string>
|
||||||
<string name="revanced_hide_community_guidelines_summary_off">Скриване на насоките за общността на абонатите</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_on">Насоките за общността са скрити</string>
|
||||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">Насоките за общността са показани</string>
|
<string name="revanced_hide_subscribers_community_guidelines_summary_off">Насоките за общността са показани</string>
|
||||||
<string name="revanced_hide_channel_member_shelf_title">Скриване на секцията с членуващи</string>
|
<string name="revanced_hide_channel_member_shelf_title">Скриване на секцията с членуващи</string>
|
||||||
@@ -280,63 +277,63 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_hide_artist_cards_title">Скриване на картите на артистите</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_on">Картите на изпълнителите са скрити</string>
|
||||||
<string name="revanced_hide_artist_cards_summary_off">Показват се карти на артисти</string>
|
<string name="revanced_hide_artist_cards_summary_off">Показват се карти на артисти</string>
|
||||||
<string name="revanced_hide_attributes_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_on">Секциите \"Препоръчани места\", \"Игри\", \"Музика\" и \"Споменати хора\" са скрити</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">„Популярни места“, „Игри“ и „Музика“ под описанието се показват</string>
|
<string name="revanced_hide_attributes_section_summary_off">Секциите \"Препоръчани места\", \"Игри\", \"Музика\" и \"Споменати хора\" са показани</string>
|
||||||
<string name="revanced_hide_chapters_section_title">Скриване на секцията с заглавия</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_on">Секцията с заглавия е скрита</string>
|
||||||
<string name="revanced_hide_chapters_section_summary_off">Секцията с заглавия се показва</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_title">Скриване на \"Как е създадено това съдържание\"</string>
|
||||||
<string name="revanced_hide_how_this_was_made_section_summary_on">Секцията \'Как е създадено това съдържание\' е скрита</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_how_this_was_made_section_summary_off">Секцията \"Как е създадено това съдържание\" е показана</string>
|
||||||
<string name="revanced_hide_podcast_section_title">Скриване секцията „Разгледайте подкаста“</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_on">Секцията \"Разгледайте подкаста\" е скрита</string>
|
||||||
<string name="revanced_hide_podcast_section_summary_off">\"Разгледайте подкаста\" се показва</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_title">Скриване на инфо. карти</string>
|
||||||
<string name="revanced_hide_info_cards_section_summary_on">Разделът за информационни карти е скрит</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_info_cards_section_summary_off">Разделът за информационни карти е показан</string>
|
||||||
<string name="revanced_hide_key_concepts_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_on">Секцията \"Основни концепции\" е скрита</string>
|
||||||
<string name="revanced_hide_key_concepts_section_summary_off">Раздел „Ключови понятия“ се показва</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_title">Скриване на транскрипт</string>
|
||||||
<string name="revanced_hide_transcript_section_summary_on">Разделът за транскрипция е скрит</string>
|
<string name="revanced_hide_transcript_section_summary_on">Разделът за транскрипция е скрит</string>
|
||||||
<string name="revanced_hide_transcript_section_summary_off">Разделът за транскрипция е показан</string>
|
<string name="revanced_hide_transcript_section_summary_off">Разделът за транскрипция е показан</string>
|
||||||
<string name="revanced_hide_description_components_screen_title">Описание на видеото</string>
|
<string name="revanced_hide_description_components_screen_title">Описание на видеото</string>
|
||||||
<string name="revanced_hide_description_components_screen_summary">Скриване или показване на компонентите за описание на видеоклиповете</string>
|
<string name="revanced_hide_description_components_screen_summary">Скриване или показване на компонентите за описание на видеоклиповете</string>
|
||||||
<string name="revanced_hide_filter_bar_screen_title">Лента с филтри</string>
|
<string name="revanced_hide_filter_bar_screen_title">Лента с филтри</string>
|
||||||
<string name="revanced_hide_filter_bar_screen_summary">Скриване или показване на лентата с категории в емисията, резултатите от търсенето и свързаните видеоклипове</string>
|
<string name="revanced_hide_filter_bar_screen_summary">Скриване или показване на лентата за филтриране в емисията, резултатите от търсенето и свързаните видеоклипове</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_feed_title">Скриване на горната лента с категории в емисията</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_title">Скриване на горната лента с категории в емисията</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Скрита</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Скрита</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Показва се</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Показва се</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_title">Филтъри на търсене</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_title">Скриване в резултатите от търсенето</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Панелът с филтъри на търсене е скрит</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Скрито в резултатите от търсенето</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Панелът с филтъри на търсене се показва</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Показано в резултатите от търсенето</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">Скриване в сродни видеоклипове</string>
|
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">Скриване в сродни видеоклипове</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">Скриване в сродни видеоклипове</string>
|
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">Скриване в сродни видеоклипове</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Показано в сродни видеоклипове</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_title">Коментари</string>
|
||||||
<string name="revanced_comments_screen_summary">Скриване или показване на секцията за коментари</string>
|
<string name="revanced_comments_screen_summary">Скриване или показване на секцията за коментари</string>
|
||||||
<string name="revanced_hide_comments_chat_summary_title">Скрий „Резюме на чата“</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_on">Резюмето на чата е скрито</string>
|
||||||
<string name="revanced_hide_comments_chat_summary_summary_off">\'Резюме на чата\' е показано</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_title">Скриване на „Коментари, направени от членове“</string>
|
||||||
<string name="revanced_hide_comments_by_members_header_summary_on">„Коментари от членове“ са скрити</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_off">Заглавието на коментарите от членове е показано</string>
|
||||||
<string name="revanced_hide_comments_section_title">Скриване на секцията с коментари</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_on">Секцията с коментари е скрита</string>
|
||||||
<string name="revanced_hide_comments_section_summary_off">Секцията с коментари се показва</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_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_on">Бутонът \"Създаване на Short\" е скрит</string>
|
||||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Бутон за създаване на Shorts се показва</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_title">Преглед на коментари</string>
|
||||||
<string name="revanced_hide_comments_preview_comment_summary_on">Прегледа на коментари е скрит</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_preview_comment_summary_off">Прегледа на коментари се показва</string>
|
||||||
<string name="revanced_hide_comments_thanks_button_title">Скрий бутона за харесване</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_on">Бутона за благодарност е скрит</string>
|
||||||
<string name="revanced_hide_comments_thanks_button_summary_off">Бутона за благодарност се показва</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 -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
<string name="revanced_hide_doodles_title">YouTube Doodles</string>
|
<string name="revanced_hide_doodles_title">YouTube Doodles</string>
|
||||||
<string name="revanced_hide_doodles_summary_on">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_on">Рафта за пазаруване е скрит</string>
|
||||||
<string name="revanced_hide_player_store_shelf_summary_off">Рафта за пазаруване се показва</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_title">Скриване на връзки за пазаруване</string>
|
||||||
<string name="revanced_hide_shopping_links_summary_on">Връзките за пазаруване са скрити</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_off">Връзките за пазаруване в описанието на видеоклипа са показани</string>
|
||||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
<!-- '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_title">Скрийте бутона „Посетете магазина“ на страниците на каналите</string>
|
||||||
<string name="revanced_hide_visit_store_button_summary_on">Бутона Покажи още е скрит</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_off">Бутонът в страницата на канала е показан</string>
|
||||||
<string name="revanced_hide_web_search_results_title">Скриване на резултатите от уеб търсенето</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_on">Резултатите от уеб търсенето са скрити</string>
|
||||||
<string name="revanced_hide_web_search_results_summary_off">Резултатите от уеб търсенето са показани.</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_success">Връзката е копирана в клипборда.</string>
|
||||||
<string name="revanced_share_copy_url_timestamp_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_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_summary_off">Бутонът не е показан</string>
|
||||||
<string name="revanced_copy_video_url_timestamp_title">Показване на бутона за копиране на URL адреса на времевия отпечатък на видеоклипа</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>
|
<string name="revanced_copy_video_url_timestamp_summary_off">Бутонът не е показан</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
<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_title">Външни изтегляния</string>
|
||||||
<string name="revanced_external_downloader_screen_summary">Настройки за използване на външно приложение за изтегляне</string>
|
<string name="revanced_external_downloader_screen_summary">Настройки за използване на външно приложение за изтегляне</string>
|
||||||
<string name="revanced_external_downloader_title">Показване на бутона за изтегляне чрез външно приложение</string>
|
<string name="revanced_external_downloader_title">Показване на бутона за изтегляне чрез външно приложение</string>
|
||||||
<string name="revanced_external_downloader_summary_on">Бутонът за изтегляне е показан в плейъра</string>
|
<string name="revanced_external_downloader_summary_on">Бутонът за изтегляне в плейъра е показан</string>
|
||||||
<string name="revanced_external_downloader_summary_off">Бутонът за изтегляне не е показан в плейъра</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' -->
|
<!-- '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_title">Заместване на бутона Download</string>
|
||||||
<string name="revanced_external_downloader_action_button_summary_on">Бутонът за изтегляне отваря избраното от Вас външно приложение за изтегляне</string>
|
<string name="revanced_external_downloader_action_button_summary_on">Бутонът за изтегляне отваря избраното от Вас външно приложение за изтегляне</string>
|
||||||
@@ -484,11 +481,15 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
||||||
<string name="revanced_swipe_brightness_title">Задаване на яркост чрез плъзгане</string>
|
<string name="revanced_swipe_brightness_title">Задаване на яркост чрез плъзгане</string>
|
||||||
<string name="revanced_swipe_brightness_summary_on">Опцията за превъртане с плъзгане за промяна на яркостта е активирана</string>
|
<string name="revanced_swipe_brightness_summary_on">"Плъзгането за яркост на цял екран е активирано
|
||||||
<string name="revanced_swipe_brightness_summary_off">Опцията за превъртане с плъзгане за промяна на яркостта е деактивирана</string>
|
|
||||||
|
Регулирайте яркостта, като плъзгате вертикално от лявата страна на екрана"</string>
|
||||||
|
<string name="revanced_swipe_brightness_summary_off">Плъзгането за яркост на цял екран е деактивирано</string>
|
||||||
<string name="revanced_swipe_volume_title">Настройване на звука чрез плъзгане</string>
|
<string name="revanced_swipe_volume_title">Настройване на звука чрез плъзгане</string>
|
||||||
<string name="revanced_swipe_volume_summary_on">Обемът чрез плъзване е активен</string>
|
<string name="revanced_swipe_volume_summary_on">"Плъзгането за сила на звука на цял екран е активирано
|
||||||
<string name="revanced_swipe_volume_summary_off">Обемът чрез плъзване е деактивиран</string>
|
|
||||||
|
Регулирайте силата на звука, като плъзнете вертикално от дясната страна на екрана"</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_title">Активиране на жеста натискане за преместване</string>
|
||||||
<string name="revanced_swipe_press_to_engage_summary_on">Плъзгането чрез натискане е активирано</string>
|
<string name="revanced_swipe_press_to_engage_summary_on">Плъзгането чрез натискане е активирано</string>
|
||||||
<string name="revanced_swipe_press_to_engage_summary_off">Плъзгането чрез натискане е деактивирано</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_title">Задаване на яркост чрез плъзгане</string>
|
||||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">Плъзгането надолу до най-ниската стойност на жеста за яркост, за да се активира автоматичната яркост</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_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_title">Задръжка на плъзгащата контрола за показване</string>
|
||||||
<string name="revanced_swipe_overlay_timeout_summary">Време за което плъзгащата контрола е видима.</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_title">Плъзгане на фона на наслагването непрозрачност</string>
|
||||||
<string name="revanced_swipe_overlay_background_opacity_summary">Стойност на непрозрачността между 0-100</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_overlay_background_opacity_invalid_toast">Непрозрачността на плъзгането трябва да е между 0-100</string>
|
||||||
<string name="revanced_swipe_threshold_title">Праг на величината на плъзгане</string>
|
<string name="revanced_swipe_threshold_title">Праг на величината на плъзгане</string>
|
||||||
<string name="revanced_swipe_threshold_summary">Праг преди да се осъществи плъзгането</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_title">Включване на превключване на видеото чрез плъзване</string>
|
||||||
<string name="revanced_swipe_change_video_summary_on">Плъзването в режим на цял екран ще превключи към следващото/предишно видео</string>
|
<string name="revanced_swipe_change_video_summary_on">Плъзването в режим на цял екран ще превключи към следващото/предишно видео</string>
|
||||||
<string name="revanced_swipe_change_video_summary_off">Плъзването в режим на цял екран няма да превключи към следващото/предишно видео</string>
|
<string name="revanced_swipe_change_video_summary_off">Плъзването в режим на цял екран няма да превключи към следващото/предишно видео</string>
|
||||||
@@ -523,6 +527,9 @@ Second \"item\" text"</string>
|
|||||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||||
<string name="revanced_hide_buttons_screen_title">Бутони за действия</string>
|
<string name="revanced_hide_buttons_screen_title">Бутони за действия</string>
|
||||||
<string name="revanced_hide_buttons_screen_summary">Скриване или показване на бутони под видеото</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_title">Бутони \"Харесвам\" и \"Не харесвам\"</string>
|
||||||
<string name="revanced_hide_like_dislike_button_summary_on">Бутоните \"Харесвам\" и \"Не харесвам\" са скрити</string>
|
<string name="revanced_hide_like_dislike_button_summary_on">Бутоните \"Харесвам\" и \"Не харесвам\" са скрити</string>
|
||||||
<string name="revanced_hide_like_dislike_button_summary_off">Бутоните \"Харесвам\" и \"Не харесвам\" се показват</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_title">Абонаменти</string>
|
||||||
<string name="revanced_hide_subscriptions_button_summary_on">Бутона за абонаменти е скрит</string>
|
<string name="revanced_hide_subscriptions_button_summary_on">Бутона за абонаменти е скрит</string>
|
||||||
<string name="revanced_hide_subscriptions_button_summary_off">Бутона за абонаменти се показва</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. -->
|
<!-- '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_title">Заменете бутона „Създаване“ с бутона „Известия“</string>
|
||||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"Бутонът за създаване е сменен с бутона Известия
|
<string name="revanced_switch_create_with_notifications_button_summary_on">"Бутонът за създаване е сменен с бутона Известия
|
||||||
|
|
||||||
Забележка: Активирането на това също принудително скрива видео рекламите"</string>
|
Забележка: Активирането на това също принудително скрива видео рекламите"</string>
|
||||||
<string name="revanced_switch_create_with_notifications_button_summary_off">Бутоните \"Създаване\" и \"Известия\" не са разменени</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_title">Имена на бутоните на лентата за навигация</string>
|
||||||
<string name="revanced_hide_navigation_button_labels_summary_on">Етикетите са скрити</string>
|
<string name="revanced_hide_navigation_button_labels_summary_on">Етикетите са скрити</string>
|
||||||
<string name="revanced_hide_navigation_button_labels_summary_off">Етикетите се показват</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_on">Навигационната лента е скрита</string>
|
||||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">Навигационната лента се показва</string>
|
<string name="revanced_hide_shorts_navigation_bar_summary_off">Навигационната лента се показва</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
<string name="revanced_disable_suggested_video_end_screen_title">Препоръчани видеоклипове в края</string>
|
<string name="revanced_end_screen_suggested_video_title">Скриване на предложеното видео в края на екрана</string>
|
||||||
<string name="revanced_disable_suggested_video_end_screen_summary_on">Препоръчаните видеоклипове в края са скрити</string>
|
<string name="revanced_end_screen_suggested_video_summary_on">"Предложеното видео в края на екрана е скрито, когато автоматичното пускане е изключено
|
||||||
<string name="revanced_disable_suggested_video_end_screen_summary_off">Препоръчаните видеоклипове в края се показват</string>
|
|
||||||
|
Автоматичното пускане може да бъде променено в настройките на YouTube:
|
||||||
|
Настройки → Възпроизвеждане → Автоматично пускане на следващото видео"</string>
|
||||||
|
<string name="revanced_end_screen_suggested_video_summary_off">Предложеното видео в края на екрана е показано</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Скриване на клеймото за време на видеоклипа</string>
|
<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. -->
|
<!-- 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_timeout">Нехаресванията временно не са налични (API timed out)</string>
|
||||||
<string name="revanced_ryd_failure_connection_status_code">Нехаресванията не са налични (status %d)</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>
|
<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. -->
|
<!-- 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>
|
<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_on">Нехаресванията се показват</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Нехаресванията не се показват</string>
|
<string name="revanced_ryd_enable_summary_off">Нехаресванията не се показват</string>
|
||||||
<string name="revanced_ryd_shorts_title">Пок. нехаресвания в кратките клипове</string>
|
<string name="revanced_ryd_shorts_title">Пок. нехаресвания в кратките клипове</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on">Нехаресванията се показват в кратките клипове</string>
|
<string name="revanced_ryd_shorts_summary_on">Нехаресванията на Shorts са показани</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Нехаресванията се показват на шорти
|
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Нехаресванията на Shorts са показани
|
||||||
|
|
||||||
Ограничение: Нехаресванията може да не се появят в режим инкогнито"</string>
|
Ограничение: Нехаресванията може да не се показват в режим инкогнито"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Нехаресванията са скрити в кратките клипове</string>
|
<string name="revanced_ryd_shorts_summary_off">Нехаресванията на Shorts не са показани</string>
|
||||||
<string name="revanced_ryd_dislike_percentage_title">Нехаресвания като процент</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_on">Нехаресванията са показани като процент</string>
|
||||||
<string name="revanced_ryd_dislike_percentage_summary_off">Нехаресванията се показват като число</string>
|
<string name="revanced_ryd_dislike_percentage_summary_off">Нехаресванията са показани като число</string>
|
||||||
<!-- Translations should use language similar to 'revanced_sb_enable_compact_skip_button' -->
|
<!-- 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_title">Компактен Like бутон</string>
|
||||||
<string name="revanced_ryd_compact_layout_summary_on">Включен компактен бутон \"Харесва ми\"</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_on">Бутоните и контролите са квадратни</string>
|
||||||
<string name="revanced_sb_square_layout_sum_off">Бутоните и контролите са заоблени</string>
|
<string name="revanced_sb_square_layout_sum_off">Бутоните и контролите са заоблени</string>
|
||||||
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
|
<!-- 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_on">Мин. ширина на бутона за пропускане</string>
|
||||||
<string name="revanced_sb_enable_compact_skip_button_sum_off">Най-добър изглед на бутона за пропускане</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_on">Бутона за пропускане се скрива след няколко секунди</string>
|
||||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Бутона за пропускане се показва за цялата част</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">Показване на toast при пропускане</string>
|
||||||
<string name="revanced_sb_general_skiptoast_sum_on">Показване на известие при автоматично пропусната част. Докоснете тук за пример</string>
|
<string name="revanced_sb_general_skiptoast_sum_on">Показване на известие при автоматично пропусната част. Докоснете тук за пример</string>
|
||||||
<string name="revanced_sb_general_skiptoast_sum_off">Известието не се показва. Докоснете тук за пример</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">Показване на дължината на видеото без сигментите</string>
|
||||||
<string name="revanced_sb_general_time_without_sum_on">Дължината на видеото без всички части показана в скоби до цялата дължина</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_general_time_without_sum_off">Цялата дължина на видето се показва</string>
|
||||||
<string name="revanced_sb_create_segment_category">Създаване на нови части</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_on">Бутона създаване за нова част се показва</string>
|
||||||
<string name="revanced_sb_enable_create_segment_sum_off">Бутона създаване за нова част не се показва</string>
|
<string name="revanced_sb_enable_create_segment_sum_off">Бутона създаване за нова част не се показва</string>
|
||||||
<string name="revanced_sb_general_adjusting">Настройване стъпка на новата част</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_skipped_multiple_segments">Пропуснати множество части</string>
|
||||||
<string name="revanced_sb_skip_automatically">Автоматично пропускане</string>
|
<string name="revanced_sb_skip_automatically">Автоматично пропускане</string>
|
||||||
<string name="revanced_sb_skip_automatically_once">Авт. пропускане веднъж</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_seekbaronly">Показв. в лентата за време</string>
|
||||||
<string name="revanced_sb_skip_ignore">Деактивиране</string>
|
<string name="revanced_sb_skip_ignore">Деактивиране</string>
|
||||||
<string name="revanced_sb_submit_failed_invalid">Не може да се изпрати сегмент: %s</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_disabled_category">Категорията е изкл. в настройките. Вкл. я за да можете да изпратите.</string>
|
||||||
<string name="revanced_sb_new_segment_title">Нова част в SponsorBlock</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_time_as_question">Задаване на %s като начало или край на нов раздел?</string>
|
||||||
<string name="revanced_sb_new_segment_mark_start">начало</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_mark_end">Край</string>
|
||||||
<string name="revanced_sb_new_segment_now">сега</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_start">Частта започва от</string>
|
||||||
<string name="revanced_sb_new_segment_time_end">Частта свършва до</string>
|
<string name="revanced_sb_new_segment_time_end">Частта свършва до</string>
|
||||||
<string name="revanced_sb_new_segment_confirm_title">Времената точни ли са?</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_new_segment_edit_by_hand_parse_error">Зададено е невалидно време</string>
|
||||||
<string name="revanced_sb_stats">Статистика</string>
|
<string name="revanced_sb_stats">Статистика</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- 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_loading">Зареждане...</string>
|
||||||
<string name="revanced_sb_stats_sb_disabled">SponsorBlock е деактивиран.</string>
|
<string name="revanced_sb_stats_sb_disabled">SponsorBlock е деактивиран.</string>
|
||||||
<string name="revanced_sb_stats_username">Вашето потреб. име: <b>%s</b></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_2">Средата на видеото</string>
|
||||||
<string name="revanced_alt_thumbnail_stills_time_entry_3">Края на видеото</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. -->
|
<!-- 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>
|
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow временно не е наличен</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.announcements.announcementsPatch">
|
<patch id="misc.announcements.announcementsPatch">
|
||||||
<string name="revanced_announcements_title">Показване на ReVanced съобщения</string>
|
<string name="revanced_announcements_title">Показване на ReVanced съобщения</string>
|
||||||
<string name="revanced_announcements_summary_on">Съобщенията се показват при стартиране</string>
|
<string name="revanced_announcements_summary_on">Обявите при стартиране са показани</string>
|
||||||
<string name="revanced_announcements_summary_off">Съобщенията не се показват при стартиране</string>
|
<string name="revanced_announcements_summary_off">Обявите при стартиране не са показани</string>
|
||||||
<string name="revanced_announcements_enabled_summary">Показване на съобщения при стартиране</string>
|
<string name="revanced_announcements_enabled_summary">Показване на съобщения при стартиране</string>
|
||||||
<string name="revanced_announcements_connection_failed">Неуспешно свързване с доставчик на съобщения</string>
|
<string name="revanced_announcements_connection_failed">Неуспешно свързване с доставчик на съобщения</string>
|
||||||
<string name="revanced_announcements_dialog_dismiss">Отхвърли</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>
|
<string name="revanced_disable_zoom_haptics_summary_off">Вибрациите са активирани</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="video.audio.forceOriginalAudioPatch">
|
<patch id="video.audio.forceOriginalAudioPatch">
|
||||||
<string name="revanced_force_original_audio_title">Принудително оригинално аудио</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_on">Използване на оригиналния език на аудиото</string>
|
||||||
<string name="revanced_force_original_audio_summary_off">Използване на аудио по подразбиране</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>
|
||||||
<patch id="video.quality.rememberVideoQualityPatch">
|
<patch id="video.quality.rememberVideoQualityPatch">
|
||||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||||
@@ -1405,8 +1422,6 @@ Second \"item\" text"</string>
|
|||||||
Възпроизвеждането на видеоклипове може да не работи"</string>
|
Възпроизвеждането на видеоклипове може да не работи"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">Деактивирането на тази настройка ще доведе до проблеми с възпроизвеждането на видео.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">Деактивирането на тази настройка ще доведе до проблеми с възпроизвеждането на видео.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_type_title">Клиент по подразбиране</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_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_on">Видео кодекът е принудително зададен на AVC (H.264)</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Видео кодекът се определя автоматично</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_on">ডিবাগ লগ স্টেক ট্রেস সংযুক্ত করবে</string>
|
||||||
<string name="revanced_debug_stacktrace_summary_off">ডিবাগ লগ স্টেক ট্রেস সংযুক্ত করবে না</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_title">ReVanced এর ত্রুটির ক্ষেত্রে টোস্ট দেখান</string>
|
||||||
<string name="revanced_debug_toast_on_error_summary_on">কোন ত্রুটি দেখা গেলে টোস্ট দেখায়</string>
|
<string name="revanced_debug_toast_on_error_summary_on">যদি ত্রুটি ঘটে তবে toast দেখানো হবে</string>
|
||||||
<string name="revanced_debug_toast_on_error_summary_off">কোন ত্রুটি দেখা গেলে টোস্ট দেখায় না</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 name="revanced_debug_toast_on_error_user_dialog_message">"ত্রুটি \"toast\" বন্ধ করে ReVanced ত্রুটি বিজ্ঞপ্তিগুলি লুকানো হয়।
|
||||||
|
|
||||||
আপনি কোনও অপ্রত্যাশিত ঘটনার বিষয়ে অবহিত হবেন না।"</string>
|
আপনি কোনও অপ্রত্যাশিত ঘটনার বিষয়ে অবহিত হবেন না।"</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
<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_title">অ্যালবাম কার্ড লুকান</string>
|
||||||
<string name="revanced_hide_album_cards_summary_on">অ্যালবাম কার্ড লুকিয়ে রয়েছে</string>
|
<string name="revanced_hide_album_cards_summary_on">অ্যালবাম কার্ড লুকিয়ে রয়েছে</string>
|
||||||
<string name="revanced_hide_album_cards_summary_off">অ্যালবাম কার্ড প্রদর্শিত হয়েছে</string>
|
<string name="revanced_hide_album_cards_summary_off">অ্যালবাম কার্ড প্রদর্শিত হয়েছে</string>
|
||||||
@@ -193,22 +190,22 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
<string name="revanced_hide_horizontal_shelves_summary_off">শেলফ প্রদর্শিত হয়েছে</string>
|
<string name="revanced_hide_horizontal_shelves_summary_off">শেলফ প্রদর্শিত হয়েছে</string>
|
||||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||||
This appears in the video player for certain videos. -->
|
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_on">বোতাম লুকানো আছে</string>
|
||||||
<string name="revanced_hide_join_membership_button_summary_off">বোতাম দেখানো আছে</string>
|
<string name="revanced_hide_join_membership_button_summary_off">বোতাম দেখানো আছে</string>
|
||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- '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_title">\'আপনার জন্য\' শেল্ফ লুকান</string>
|
||||||
<string name="revanced_hide_for_you_shelf_summary_on">শেলফ লুকিয়ে রয়েছে</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_summary_off">চ্যানেল পৃষ্ঠায় শেল্ফ দেখানো হয়েছে</string>
|
||||||
<!-- 'Notify me' 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. -->
|
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_title">\'আমাকে জানান\' বোতাম লুকান</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">বোতাম লুকানো আছে</string>
|
<string name="revanced_hide_notify_me_button_summary_on">বোতাম লুকানো আছে</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">বোতাম দেখানো আছে</string>
|
<string name="revanced_hide_notify_me_button_summary_off">বোতাম দেখানো আছে</string>
|
||||||
<!-- '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. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">\'মানুষ আরও দেখছে\' প্রস্তাবনাগুলো লুকান</string>
|
<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_on">লেবেল লুকানো আছে</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">প্রস্তাবনাগুলো প্রদর্শিত হয়েছে</string>
|
<string name="revanced_hide_search_result_recommendations_summary_off">লেবেল দেখানো হয়েছে</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that 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. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">\'আরও দেখান\' বোতাম লুকান</string>
|
<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_on">চিপ শেলপ লুকিয়ে রয়েছে</string>
|
||||||
<string name="revanced_hide_chips_shelf_summary_off">চিপ শেলপ প্রদর্শিত হয়েছে</string>
|
<string name="revanced_hide_chips_shelf_summary_off">চিপ শেলপ প্রদর্শিত হয়েছে</string>
|
||||||
<string name="revanced_hide_expandable_chip_title">ভিডিওর নীচে সম্প্রসারণযোগ্য কার্ড লুকান</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_on">প্রসারণযোগ্য কার্ড লুকানো আছে</string>
|
||||||
<string name="revanced_hide_expandable_chip_summary_off">সম্প্রসারণযোগ্য কার্ডগুলি প্রদর্শিত হচ্ছে</string>
|
<string name="revanced_hide_expandable_chip_summary_off">প্রসারণযোগ্য কার্ড দেখানো হয়েছে</string>
|
||||||
<string name="revanced_hide_community_posts_title">সম্প্রদায় পোস্ট লুকান</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_on">সম্প্রদায় পোস্ট লুকিয়ে রয়েছে</string>
|
||||||
<string name="revanced_hide_community_posts_summary_off">সম্প্রদায় পোস্ট প্রদর্শিত হয়েছে</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_title">সম্প্রদায় নির্দেশিকা লুকান</string>
|
||||||
<string name="revanced_hide_community_guidelines_summary_on">সম্প্রদায় নির্দেশিকা লুকিয়ে রয়েছে</string>
|
<string name="revanced_hide_community_guidelines_summary_on">সম্প্রদায় নির্দেশিকা লুকিয়ে রয়েছে</string>
|
||||||
<string name="revanced_hide_community_guidelines_summary_off">সম্প্রদায় নির্দেশিকা প্রদর্শিত হয়েছে</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_on">সাবস্ক্রাইবারদের সম্পদ্রায় নির্দেশিকা লুকিয়ে রয়েছে</string>
|
||||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">সাবস্ক্রাইবারদের সম্পদ্রায় নির্দেশিকা প্রদর্শিত হয়েছে</string>
|
<string name="revanced_hide_subscribers_community_guidelines_summary_off">সাবস্ক্রাইবারদের সম্পদ্রায় নির্দেশিকা প্রদর্শিত হয়েছে</string>
|
||||||
<string name="revanced_hide_channel_member_shelf_title">চ্যানেল মেম্বার শেলফ লুকান</string>
|
<string name="revanced_hide_channel_member_shelf_title">চ্যানেল মেম্বার শেলফ লুকান</string>
|
||||||
@@ -280,63 +277,62 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
<string name="revanced_hide_artist_cards_title">আর্টিস্ট কার্ড লুকান</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_on">আর্টিস্ট কার্ড লুকিয়ে রয়েছে</string>
|
||||||
<string name="revanced_hide_artist_cards_summary_off">আর্টিস্ট কার্ড প্রদর্শিত হয়েছে</string>
|
<string name="revanced_hide_artist_cards_summary_off">আর্টিস্ট কার্ড প্রদর্শিত হয়েছে</string>
|
||||||
<string name="revanced_hide_attributes_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_on">বৈশিষ্ট্যযুক্ত স্থান, গেমস, সঙ্গীত, এবং উল্লিখিত ব্যক্তি বিভাগগুলি লুকানো আছে</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">\'বৈশিষ্ট্যযুক্ত স্থান\', গেম এবং সঙ্গীত বিভাগগুলি প্রদর্শিত হয়েছে</string>
|
<string name="revanced_hide_attributes_section_summary_off">বৈশিষ্ট্যযুক্ত স্থান, গেমস, সঙ্গীত, এবং উল্লিখিত ব্যক্তি বিভাগগুলি দেখানো হয়েছে</string>
|
||||||
<string name="revanced_hide_chapters_section_title">চ্যাপ্টার বিভাগ লুকান</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_on">চ্যাপ্টার বিভাগ লুকিয়ে রয়েছে</string>
|
||||||
<string name="revanced_hide_chapters_section_summary_off">চ্যাপ্টার বিভাগ প্রদর্শিত হয়েছে</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_title">\'How this content was made\' লুকান</string>
|
||||||
<string name="revanced_hide_how_this_was_made_section_summary_on">\'এই কীভাবে তৈরি হল কনটেন্ট\' সেকশনটি লুকানো আছে</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">\'এই কীভাবে তৈরি হল কনটেন্ট\' সেকশনটি প্রদর্শিত হচ্ছে</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">‘পডকাস্ট বিভাগ লুকান’</string>
|
<string name="revanced_hide_podcast_section_title">\'Explore the podcast\' লুকান</string>
|
||||||
<string name="revanced_hide_podcast_section_summary_on">‘পডকাস্ট বিভাগ’ লুকানো আছে</string>
|
<string name="revanced_hide_podcast_section_summary_on">Explore the podcast বিভাগটি লুকানো আছে</string>
|
||||||
<string name="revanced_hide_podcast_section_summary_off">‘পডকাস্ট বিভাগ’ প্রদর্শিত হয়েছে</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_title">তথ্য কার্ড লুকান</string>
|
||||||
<string name="revanced_hide_info_cards_section_summary_on">তথ্য কার্ড সেকশন লুকিয়ে রয়েছে</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_info_cards_section_summary_off">তথ্য কার্ড সেকশন প্রদর্শিত হয়েছে</string>
|
||||||
<string name="revanced_hide_key_concepts_section_title">‘মূল বিষয়বস্তু’ বিভাগ লুকানো আছে</string>
|
<string name="revanced_hide_key_concepts_section_title">\'Key concepts\' লুকান</string>
|
||||||
<string name="revanced_hide_key_concepts_section_summary_on">‘মূল বিষয়বস্তু’ বিভাগ লুকিয়ে রয়েছে</string>
|
<string name="revanced_hide_key_concepts_section_summary_on">Key concepts বিভাগটি লুকানো আছে</string>
|
||||||
<string name="revanced_hide_key_concepts_section_summary_off">‘मुख्य संकल्पना’ अनुभाग प्रदर्शित होता है</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_title">নথি লুকান</string>
|
||||||
<string name="revanced_hide_transcript_section_summary_on">ট্রান্সস্ক্রিপ্ট বিভাগ লুকিয়ে রয়েছে</string>
|
<string name="revanced_hide_transcript_section_summary_on">ট্রান্সস্ক্রিপ্ট বিভাগ লুকিয়ে রয়েছে</string>
|
||||||
<string name="revanced_hide_transcript_section_summary_off">ট্রান্সস্ক্রিপ্ট বিভাগ প্রদর্শিত হয়েছে</string>
|
<string name="revanced_hide_transcript_section_summary_off">ট্রান্সস্ক্রিপ্ট বিভাগ প্রদর্শিত হয়েছে</string>
|
||||||
<string name="revanced_hide_description_components_screen_title">ভিডিওর বিবরণ</string>
|
<string name="revanced_hide_description_components_screen_title">ভিডিওর বিবরণ</string>
|
||||||
<string name="revanced_hide_description_components_screen_summary">ভিডিও বিবরণ এর উপাদান লুকান বা প্রদর্শন করুন</string>
|
<string name="revanced_hide_description_components_screen_summary">ভিডিও বিবরণ এর উপাদান লুকান বা প্রদর্শন করুন</string>
|
||||||
<string name="revanced_hide_filter_bar_screen_title">ফিল্টার বার</string>
|
<string name="revanced_hide_filter_bar_screen_title">ফিল্টার বার</string>
|
||||||
<string name="revanced_hide_filter_bar_screen_summary">ফিড, অনুসন্ধান এবং সম্পর্কিত ভিডিওতে ফিল্টার বার লুকান বা প্রদর্শন করুন</string>
|
|
||||||
<string name="revanced_hide_filter_bar_feed_in_feed_title">ফিডে লুকান</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_title">ফিডে লুকান</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">ফিডে লুকিয়ে রয়েছে</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">ফিডে লুকিয়ে রয়েছে</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">ফিডে প্রদর্শিত হয়েছে</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">ফিডে প্রদর্শিত হয়েছে</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_title">অনুসন্ধানে লুকান</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_title">অনুসন্ধান ফলাফলে লুকান</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">অনুসন্ধানে লুকিয়ে রয়েছে</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">অনুসন্ধান ফলাফলে লুকানো আছে</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">অনুসন্ধানে প্রদর্শিত হয়েছে</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">অনুসন্ধান ফলাফলে দেখানো হয়েছে</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">সম্পর্কিত ভিডিওতে লুকান</string>
|
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">সম্পর্কিত ভিডিওতে লুকান</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">সম্পর্কিত ভিডিওতে লুকিয়ে রয়েছে</string>
|
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">সম্পর্কিত ভিডিওতে লুকিয়ে রয়েছে</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">সম্পর্কিত ভিডিওতে প্রদর্শিত হয়েছে</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_title">মন্তব্য</string>
|
||||||
<string name="revanced_comments_screen_summary">মন্তব্য বিভাগের উপাদানগুলি লুকান বা দেখান৷</string>
|
<string name="revanced_comments_screen_summary">মন্তব্য বিভাগের উপাদানগুলি লুকান বা দেখান৷</string>
|
||||||
<string name="revanced_hide_comments_chat_summary_title"> \'চ্যাটের সারাংশ\' লুকান</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_on">চ্যাট সারসংক্ষেপ লুকানো আছে</string>
|
||||||
<string name="revanced_hide_comments_chat_summary_summary_off">“চ্যাট সারাংশ” দেখানো হচ্ছে</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_title">\'মেম্বারদের মন্তব্য\' হেডার লুকান</string>
|
||||||
<string name="revanced_hide_comments_by_members_header_summary_on">\'মেম্বারদের মন্তব্য\' হেডার লুকিয়ে রয়েছে</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_off">সদস্যদের দ্বারা মন্তব্য হেডার দেখানো হয়েছে</string>
|
||||||
<string name="revanced_hide_comments_section_title">মন্তব্য বিভাগ লুকান</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_on">মন্তব্য বিভাগ লুকিয়ে রয়েছে</string>
|
||||||
<string name="revanced_hide_comments_section_summary_off">মন্তব্য বিভাগ প্রদর্শিত হয়েছে</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_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_on">একটি Shorts বোতাম তৈরি করুন লুকানো আছে</string>
|
||||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">\'Short তৈরি করুন\' বোতাম প্রদর্শিত হয়েছে</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_title">মন্তব্যের পূর্বরূপ লুকান</string>
|
||||||
<string name="revanced_hide_comments_preview_comment_summary_on">মন্তব্যের পূর্বরূপ লুকিয়ে রয়েছে</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_preview_comment_summary_off">মন্তব্যের পূর্বরূপ প্রদর্শিত হয়েছে</string>
|
||||||
<string name="revanced_hide_comments_thanks_button_title">ধন্যবাদ বাটন লুকান</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_on">ধন্যবাদ বোতাম লুকিয়ে রয়েছে</string>
|
||||||
<string name="revanced_hide_comments_thanks_button_summary_off">ধন্যবাদ বোতাম প্রদর্শিত হয়েছে</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 -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
<string name="revanced_hide_doodles_title">YouTube Doodles छिपाएँ</string>
|
<string name="revanced_hide_doodles_title">YouTube Doodles छिपाएँ</string>
|
||||||
<string name="revanced_hide_doodles_summary_on">सर्च बार Doodles छिपे हुए हैं</string>
|
<string name="revanced_hide_doodles_summary_on">सर्च बार Doodles छिपे हुए हैं</string>
|
||||||
@@ -417,12 +413,12 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
<string name="revanced_hide_player_store_shelf_summary_on">শপিং শেলফ লুকানো আছে</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_player_store_shelf_summary_off">শপিং শেলফ দেখানো হচ্ছে</string>
|
||||||
<string name="revanced_hide_shopping_links_title">ভিডিওর বিবরণে কেনাকাটার লিঙ্ক লুকান</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_on">ভিডিও বিবরণে শপিং লিঙ্ক লুকানো আছে</string>
|
||||||
<string name="revanced_hide_shopping_links_summary_off">কেনাকাটার লিঙ্ক প্রদর্শিত হয়েছে</string>
|
<string name="revanced_hide_shopping_links_summary_off">ভিডিও বিবরণে শপিং লিঙ্ক দেখানো হয়েছে</string>
|
||||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
<!-- '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_title">চ্যানেল পাতায় \'স্টোরে যান\' বোতাম লুকান</string>
|
||||||
<string name="revanced_hide_visit_store_button_summary_on">বোতাম লুকানো আছে</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_off">চ্যানেল পৃষ্ঠায় বোতাম দেখানো হয়েছে</string>
|
||||||
<string name="revanced_hide_web_search_results_title">লোকেরা এইগুলিও সার্চ করছে লুকান</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_on">লোকেরা এইগুলিও সার্চ করছে লুকিয়ে রয়েছে</string>
|
||||||
<string name="revanced_hide_web_search_results_summary_off">লোকেরা এইগুলিও সার্চ করছে প্রদর্শিত হয়েছে</string>
|
<string name="revanced_hide_web_search_results_summary_off">লোকেরা এইগুলিও সার্চ করছে প্রদর্শিত হয়েছে</string>
|
||||||
@@ -446,10 +442,10 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
<string name="revanced_share_copy_url_success">ক্লিপবোর্ডে URL অনুলিপি করা হয়েছে</string>
|
<string name="revanced_share_copy_url_success">ক্লিপবোর্ডে URL অনুলিপি করা হয়েছে</string>
|
||||||
<string name="revanced_share_copy_url_timestamp_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_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_summary_off">বোতাম প্রদর্শিত হয়নি</string>
|
||||||
<string name="revanced_copy_video_url_timestamp_title">টাইমস্ট্যাম্প URL অনুলিপি বোতাম দেখান</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>
|
<string name="revanced_copy_video_url_timestamp_summary_off">বোতাম প্রদর্শিত হয়নি</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||||
@@ -462,8 +458,8 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
<string name="revanced_external_downloader_screen_title">বাহিরে ডাউনলোড</string>
|
<string name="revanced_external_downloader_screen_title">বাহিরে ডাউনলোড</string>
|
||||||
<string name="revanced_external_downloader_screen_summary">বাহিরের ডাউনলোডার ব্যবহার করার সেটিং</string>
|
<string name="revanced_external_downloader_screen_summary">বাহিরের ডাউনলোডার ব্যবহার করার সেটিং</string>
|
||||||
<string name="revanced_external_downloader_title">বাহিরের ডাউনলোডার বাটন দেখান</string>
|
<string name="revanced_external_downloader_title">বাহিরের ডাউনলোডার বাটন দেখান</string>
|
||||||
<string name="revanced_external_downloader_summary_on">প্লেয়ারে ডাউনলোড বোতাম প্রদর্শিত হয়েছে</string>
|
<string name="revanced_external_downloader_summary_on">প্লেয়ারে ডাউনলোড বোতাম দেখানো হয়েছে</string>
|
||||||
<string name="revanced_external_downloader_summary_off">প্লেয়ারে ডাউনলোড বোতাম প্রদর্শিত হয়নি</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' -->
|
<!-- '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_title">ডাউনলোড অ্যাকশন বোতামটি ওভাররাইড করুন</string>
|
||||||
<string name="revanced_external_downloader_action_button_summary_on">ডাউনলোড বোতামটি আপনার বাহিরের ডাউনলোডার খুলবে</string>
|
<string name="revanced_external_downloader_action_button_summary_on">ডাউনলোড বোতামটি আপনার বাহিরের ডাউনলোডার খুলবে</string>
|
||||||
@@ -484,11 +480,15 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
||||||
<string name="revanced_swipe_brightness_title">উজ্জ্বলতার সোয়াইপ অঙ্গভঙ্গি সক্রিয় করুন</string>
|
<string name="revanced_swipe_brightness_title">উজ্জ্বলতার সোয়াইপ অঙ্গভঙ্গি সক্রিয় করুন</string>
|
||||||
<string name="revanced_swipe_brightness_summary_on">উজ্জ্বলতা সোয়াইপ সক্রিয় করা হয়েছে</string>
|
<string name="revanced_swipe_brightness_summary_on">"Fullscreen brightness swipe enabled আছে
|
||||||
<string name="revanced_swipe_brightness_summary_off">উজ্জ্বলতা সোয়াইপ নিষ্ক্রিয় করা হয়েছে</string>
|
|
||||||
|
স্ক্রিনের বাম দিকে উল্লম্বভাবে সোয়াইপ করে উজ্জ্বলতা সামঞ্জস্য করুন"</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_title">ভলিউম অঙ্গভঙ্গি সক্রিয় করুন</string>
|
||||||
<string name="revanced_swipe_volume_summary_on">ভলিউম সোয়াইপ সক্রিয় করা হয়েছে</string>
|
<string name="revanced_swipe_volume_summary_on">"পূর্ণ স্ক্রীন ভলিউম সোয়াইপ সক্রিয় করা হয়েছে
|
||||||
<string name="revanced_swipe_volume_summary_off">ভলিউম সোয়াইপ নিষ্ক্রিয় করা হয়েছে</string>
|
|
||||||
|
স্ক্রিনের ডান দিকে উল্লম্বভাবে সোয়াইপ করে ভলিউম সামঞ্জস্য করুন"</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_title">প্রেস-টু-সোয়াইপ অঙ্গভঙ্গি সক্রিয় করুন</string>
|
||||||
<string name="revanced_swipe_press_to_engage_summary_on">প্রেস-টু-সোয়াইপ সক্রিয় করা হয়েছে</string>
|
<string name="revanced_swipe_press_to_engage_summary_on">প্রেস-টু-সোয়াইপ সক্রিয় করা হয়েছে</string>
|
||||||
<string name="revanced_swipe_press_to_engage_summary_off">প্রেস-টু-সোয়াইপ নিষ্ক্রিয় করা হয়েছে</string>
|
<string name="revanced_swipe_press_to_engage_summary_off">প্রেস-টু-সোয়াইপ নিষ্ক্রিয় করা হয়েছে</string>
|
||||||
@@ -501,16 +501,19 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">স্বয়ংক্রিয়-উজ্জ্বলতার অঙ্গভঙ্গি সক্রিয় করুন</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_on">উজ্জ্বলতার অঙ্গভঙ্গির সর্বনিম্ন মানে সোয়াইপ ডাউন করলে অটো-উজ্জ্বলতা সক্ষম হয়</string>
|
||||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">সর্বনিম্ন মানে সোয়াইপ ডাউন করলে অটো-উজ্জ্বলতা সক্ষম হয় না</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_title">ওভার-লে টাইম আউট</string>
|
||||||
<string name="revanced_swipe_overlay_timeout_summary">কত মিলিসেকেন্ডের জন্য ওভারলে দৃশ্যমান হবে</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_title">অস্বচ্ছতা</string>
|
||||||
<string name="revanced_swipe_overlay_background_opacity_summary">0-100 এর মধ্যে অস্বচ্ছতার মান</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_overlay_background_opacity_invalid_toast">সোয়াইপের অস্বচ্ছতা অবশ্যই 0-100 এর মধ্যে হতে হবে</string>
|
||||||
<string name="revanced_swipe_threshold_title">সোয়াইপ থ্রেশহোল্ড এর মাত্রা</string>
|
<string name="revanced_swipe_threshold_title">সোয়াইপ থ্রেশহোল্ড এর মাত্রা</string>
|
||||||
<string name="revanced_swipe_threshold_summary">সোয়াইপ করার থ্রেশহোল্ডের পরিমাণ</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_title">ভিডিও পরিবর্তন করতে সোয়াইপ করে সক্ষম করুন</string>
|
||||||
<string name="revanced_swipe_change_video_summary_on">ফুলস্ক্রিন মোডে সোয়াইপ করলে পরবর্তী/পূর্ববর্তী ভিডিওতে পরিবর্তন হবে</string>
|
<string name="revanced_swipe_change_video_summary_on">ফুলস্ক্রিন মোডে সোয়াইপ করলে পরবর্তী/পূর্ববর্তী ভিডিওতে পরিবর্তন হবে</string>
|
||||||
<string name="revanced_swipe_change_video_summary_off">ফুলস্ক্রিন মোডে সোয়াইপ করলে পরবর্তী /পূর্ববর্তী ভিডিওতে পরিবর্তন হবে না</string>
|
<string name="revanced_swipe_change_video_summary_off">ফুলস্ক্রিন মোডে সোয়াইপ করলে পরবর্তী /পূর্ববর্তী ভিডিওতে পরিবর্তন হবে না</string>
|
||||||
@@ -523,6 +526,9 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||||
<string name="revanced_hide_buttons_screen_title">অ্যাকশন বোতাম</string>
|
<string name="revanced_hide_buttons_screen_title">অ্যাকশন বোতাম</string>
|
||||||
<string name="revanced_hide_buttons_screen_summary">ভিডিওর নীচে বোতাম লুকানো বা দেখানো</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_title">Like এবং Dislike লুকান</string>
|
||||||
<string name="revanced_hide_like_dislike_button_summary_on">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>
|
<string name="revanced_hide_like_dislike_button_summary_off">Like এবং Dislike বোতাম দেখানো হচ্ছে</string>
|
||||||
@@ -581,6 +587,9 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
|
|
||||||
মনে রাখবেন: এটি সক্রিয় করা ভিডিও বিজ্ঞাপনগুলিও জোর করে লুকিয়ে দেয়"</string>
|
মনে রাখবেন: এটি সক্রিয় করা ভিডিও বিজ্ঞাপনগুলিও জোর করে লুকিয়ে দেয়"</string>
|
||||||
<string name="revanced_switch_create_with_notifications_button_summary_off">তৈরি বোতামকে বিজ্ঞপ্তি বোতাম দ্বারা সুইচ করা হয়নি</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_title">নেভিগেশন বোতাম লেবেল লুকান</string>
|
||||||
<string name="revanced_hide_navigation_button_labels_summary_on">লেবেল লুকিয়ে রয়েছে</string>
|
<string name="revanced_hide_navigation_button_labels_summary_on">লেবেল লুকিয়ে রয়েছে</string>
|
||||||
<string name="revanced_hide_navigation_button_labels_summary_off">লেবেল প্রদর্শিত হয়েছে</string>
|
<string name="revanced_hide_navigation_button_labels_summary_off">লেবেল প্রদর্শিত হয়েছে</string>
|
||||||
@@ -795,10 +804,13 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
<string name="revanced_hide_shorts_navigation_bar_summary_on">নেভিগেশন বার লুকিয়ে রয়েছে</string>
|
<string name="revanced_hide_shorts_navigation_bar_summary_on">নেভিগেশন বার লুকিয়ে রয়েছে</string>
|
||||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">পনেভিগেশন বার প্রদর্শিত হয়েছে</string>
|
<string name="revanced_hide_shorts_navigation_bar_summary_off">পনেভিগেশন বার প্রদর্শিত হয়েছে</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
<string name="revanced_disable_suggested_video_end_screen_title">ভিডিওর শেষ স্ক্রিণে সাজেস্ট করা ভিডিও নিষ্ক্রিয় করুন</string>
|
<string name="revanced_end_screen_suggested_video_title">শেষ স্ক্রীনে প্রস্তাবিত ভিডিও লুকানো হবে</string>
|
||||||
<string name="revanced_disable_suggested_video_end_screen_summary_on">সাজেস্ট করা ভিডিও নিস্ক্রিয় করা হবে</string>
|
<string name="revanced_end_screen_suggested_video_summary_on">"অটো প্লে বন্ধ থাকলে শেষ স্ক্রীনে প্রস্তাবিত ভিডিও লুকানো থাকে
|
||||||
<string name="revanced_disable_suggested_video_end_screen_summary_off">সাজেস্ট করা ভিডিও প্রদর্শিত হবে</string>
|
|
||||||
|
YouTube সেটিংসে অটো প্লে পরিবর্তন করা যেতে পারে:
|
||||||
|
সেটিংস → প্লেব্যাক → অটো প্লে পরবর্তী ভিডিও"</string>
|
||||||
|
<string name="revanced_end_screen_suggested_video_summary_off">শেষ স্ক্রীনে প্রস্তাবিত ভিডিও দেখানো হয়েছে</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">ভিডিওর সময়স্ট্যাম্প লুকান</string>
|
<string name="revanced_hide_timestamp_title">ভিডিওর সময়স্ট্যাম্প লুকান</string>
|
||||||
@@ -831,7 +843,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. -->
|
<!-- 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_timeout">অপছন্দ সাময়িকভাবে উপলভ্য নয় (API সময় শেষ হয়েছে)</string>
|
||||||
<string name="revanced_ryd_failure_connection_status_code">অপছন্দ উপলভ্য নয় (অবস্থা %d)</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>
|
<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. -->
|
<!-- 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>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">ReturnYouTubeDislike দিয়ে ভোট দিতে ভিডিও আবার লোড করুন</string>
|
||||||
@@ -840,14 +852,14 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
<string name="revanced_ryd_enable_summary_on">অপছন্দগুলো প্রদর্শিত হয়েছে</string>
|
<string name="revanced_ryd_enable_summary_on">অপছন্দগুলো প্রদর্শিত হয়েছে</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">অপছন্দগুলো প্রদর্শিত হয়নি</string>
|
<string name="revanced_ryd_enable_summary_off">অপছন্দগুলো প্রদর্শিত হয়নি</string>
|
||||||
<string name="revanced_ryd_shorts_title">Shorts এ অপছন্দ দেখান</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">Shorts-এ অপছন্দগুলি দেখানো হয়েছে</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Shorts-এ ডিসলাইক দেখানো হচ্ছে
|
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Shorts-এ অপছন্দগুলি দেখানো হয়েছে
|
||||||
|
|
||||||
সীমাবদ্ধতা: গোপন মোডে ডিসলাইক প্রদর্শিত নাও হতে পারে"</string>
|
সীমাবদ্ধতা: ছদ্মবেশী মোডে অপছন্দগুলি নাও দেখা যেতে পারে"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Shorts এ অপছন্দ লুকিয়ে রয়েছে</string>
|
<string name="revanced_ryd_shorts_summary_off">Shorts-এ অপছন্দগুলি দেখানো হয়নি</string>
|
||||||
<string name="revanced_ryd_dislike_percentage_title">অপছন্দগুলো শতাংশ অনুযায়ী</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_on">অপছন্দগুলি শতাংশ হিসাবে দেখানো হয়েছে</string>
|
||||||
<string name="revanced_ryd_dislike_percentage_summary_off">অপছন্দগুলো সংখ্যা অনুযায়ী প্রদর্শিত হয়েছে</string>
|
<string name="revanced_ryd_dislike_percentage_summary_off">অপছন্দগুলি একটি সংখ্যা হিসাবে দেখানো হয়েছে</string>
|
||||||
<!-- Translations should use language similar to 'revanced_sb_enable_compact_skip_button' -->
|
<!-- 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_title">কম্প্যাক্ট লাইক বোতাম</string>
|
||||||
<string name="revanced_ryd_compact_layout_summary_on">পছন্দ বোতামটি ন্যূনতম প্রস্থের জন্য সাজানো হয়েছে</string>
|
<string name="revanced_ryd_compact_layout_summary_on">পছন্দ বোতামটি ন্যূনতম প্রস্থের জন্য সাজানো হয়েছে</string>
|
||||||
@@ -909,20 +921,20 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
<string name="revanced_sb_square_layout_sum_on">বোতাম এবং নিয়ন্ত্রণগুলি বর্গক্ষেত্র</string>
|
<string name="revanced_sb_square_layout_sum_on">বোতাম এবং নিয়ন্ত্রণগুলি বর্গক্ষেত্র</string>
|
||||||
<string name="revanced_sb_square_layout_sum_off">বোতাম এবং নিয়ন্ত্রণগুলি গোলাকার</string>
|
<string name="revanced_sb_square_layout_sum_off">বোতাম এবং নিয়ন্ত্রণগুলি গোলাকার</string>
|
||||||
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
|
<!-- 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_on">স্কিপ বোতামটি ন্যূনতম প্রস্থের জন্য সাজানো হয়েছে</string>
|
||||||
<string name="revanced_sb_enable_compact_skip_button_sum_off">স্কিপ বোতামটি সেরা চেহারার জন্য সাজানো হয়েছে</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_on">কয়েক সেকেন্ড পরে স্কিপ বোতাম লুকিয়ে যায়</string>
|
||||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">স্কিপ বোতাম পুরো সেগমেন্টে দৃশ্যমান থাকে</string>
|
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">পুরো অংশের জন্য Skip বোতাম দেখানো হয়েছে</string>
|
||||||
<string name="revanced_sb_general_skiptoast">স্বয়ংক্রিয়ভাবে এড়িয়ে যাওয়ার সময় একটি টোস্ট দেখান</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_on">সেগমেন্ট স্বয়ংক্রিয়ভাবে এড়িয়ে যেতে একটি টোস্ট দেখানো হয়। উদাহরণ দেখতে এখানে ট্যাপ করুন</string>
|
||||||
<string name="revanced_sb_general_skiptoast_sum_off">টোস্ট দেখানো হচ্ছে না। উদাহরণ দেখতে এখানে ট্যাপ করুন</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">সেগমেন্ট ছাড়া ভিডিওর দৈর্ঘ্য দেখান</string>
|
||||||
<string name="revanced_sb_general_time_without_sum_on">সমস্ত সেগমেন্ট ছাড়াই ভিডিওর দৈর্ঘ্য, পূর্ণ ভিডিওর দৈর্ঘ্যের পাশে বন্ধনীতে উল্লেখ করা হয়</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_general_time_without_sum_off">সম্পূর্ণ ভিডিও দৈর্ঘ্য প্রদর্শিত হয়েছে</string>
|
||||||
<string name="revanced_sb_create_segment_category">নতুন সেগমন্ট তৈরি হচ্ছে</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_on">নতুন সেগমেন্ট তৈরির বাটন প্রদর্শিত হয়েছে</string>
|
||||||
<string name="revanced_sb_enable_create_segment_sum_off">নতুন সেগমেন্ট তৈরির বাটন প্রদর্শিত হয়নি</string>
|
<string name="revanced_sb_enable_create_segment_sum_off">নতুন সেগমেন্ট তৈরির বাটন প্রদর্শিত হয়নি</string>
|
||||||
<string name="revanced_sb_general_adjusting">নতুন সেগমেন্টের পদক্ষেপ সামঞ্জস্য করুন</string>
|
<string name="revanced_sb_general_adjusting">নতুন সেগমেন্টের পদক্ষেপ সামঞ্জস্য করুন</string>
|
||||||
@@ -1015,7 +1027,7 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
<string name="revanced_sb_skipped_multiple_segments">একটানা একাধিক সেগমেন্ট এড়িয়ে গেছে</string>
|
<string name="revanced_sb_skipped_multiple_segments">একটানা একাধিক সেগমেন্ট এড়িয়ে গেছে</string>
|
||||||
<string name="revanced_sb_skip_automatically">স্বয়ংক্রিয়ভাবে এড়িয়ে যান</string>
|
<string name="revanced_sb_skip_automatically">স্বয়ংক্রিয়ভাবে এড়িয়ে যান</string>
|
||||||
<string name="revanced_sb_skip_automatically_once">একবার স্বয়ংক্রিয়ভাবে এড়িয়ে যান</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_seekbaronly">সিকবারে দেখান</string>
|
||||||
<string name="revanced_sb_skip_ignore">নিষ্ক্রিয় করুন</string>
|
<string name="revanced_sb_skip_ignore">নিষ্ক্রিয় করুন</string>
|
||||||
<string name="revanced_sb_submit_failed_invalid">%s সেগমেন্ট জমা দিতে সক্ষম হয়নি</string>
|
<string name="revanced_sb_submit_failed_invalid">%s সেগমেন্ট জমা দিতে সক্ষম হয়নি</string>
|
||||||
@@ -1065,7 +1077,7 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">ভুল সময় দেয়া হয়েছে</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">ভুল সময় দেয়া হয়েছে</string>
|
||||||
<string name="revanced_sb_stats">পরিসংখ্যান</string>
|
<string name="revanced_sb_stats">পরিসংখ্যান</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- 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_loading">লোড হচ্ছে...</string>
|
||||||
<string name="revanced_sb_stats_sb_disabled">SponsorBlock নিস্ক্রিয় হয়েছে</string>
|
<string name="revanced_sb_stats_sb_disabled">SponsorBlock নিস্ক্রিয় হয়েছে</string>
|
||||||
<string name="revanced_sb_stats_username">আপনার ব্যবহারকারী নাম: <b>%s</b></string>
|
<string name="revanced_sb_stats_username">আপনার ব্যবহারকারী নাম: <b>%s</b></string>
|
||||||
@@ -1283,13 +1295,13 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট
|
|||||||
<string name="revanced_alt_thumbnail_stills_time_entry_2">ভিডিওর মধ্যাংশ</string>
|
<string name="revanced_alt_thumbnail_stills_time_entry_2">ভিডিওর মধ্যাংশ</string>
|
||||||
<string name="revanced_alt_thumbnail_stills_time_entry_3">ভিডিওর শেষাংশ</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. -->
|
<!-- 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>
|
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow সাময়িকভাবে উপলব্ধ নেই</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.announcements.announcementsPatch">
|
<patch id="misc.announcements.announcementsPatch">
|
||||||
<string name="revanced_announcements_title">ReVanced ঘোষণা দেখান</string>
|
<string name="revanced_announcements_title">ReVanced ঘোষণা দেখান</string>
|
||||||
<string name="revanced_announcements_summary_on">শুরুতে ঘোষণা প্রদর্শিত হয়েছে</string>
|
<string name="revanced_announcements_summary_on">স্টার্টআপে ঘোষণাগুলি দেখানো হয়েছে</string>
|
||||||
<string name="revanced_announcements_summary_off">শুরুতে ঘোষণা প্রদর্শিত হয়নি</string>
|
<string name="revanced_announcements_summary_off">স্টার্টআপে ঘোষণাগুলি দেখানো হয়নি</string>
|
||||||
<string name="revanced_announcements_enabled_summary">শুরুতে ঘোষণা দেখান</string>
|
<string name="revanced_announcements_enabled_summary">শুরুতে ঘোষণা দেখান</string>
|
||||||
<string name="revanced_announcements_connection_failed">ঘোষনাদাতার সাথে সম্পর্ক স্থাপন ব্যর্থ হয়েছে</string>
|
<string name="revanced_announcements_connection_failed">ঘোষনাদাতার সাথে সম্পর্ক স্থাপন ব্যর্থ হয়েছে</string>
|
||||||
<string name="revanced_announcements_dialog_dismiss">বাতিল করুন</string>
|
<string name="revanced_announcements_dialog_dismiss">বাতিল করুন</string>
|
||||||
@@ -1339,10 +1351,11 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট
|
|||||||
<string name="revanced_disable_zoom_haptics_summary_off">কম্পন সক্রিয় করা হয়েছে</string>
|
<string name="revanced_disable_zoom_haptics_summary_off">কম্পন সক্রিয় করা হয়েছে</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="video.audio.forceOriginalAudioPatch">
|
<patch id="video.audio.forceOriginalAudioPatch">
|
||||||
<string name="revanced_force_original_audio_title">মূল অডিও বলপূর্বক চালু করুন</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_on">মূল অডিও ভাষা ব্যবহার করা হচ্ছে</string>
|
||||||
<string name="revanced_force_original_audio_summary_off">ডিফল্ট অডিও ব্যবহার করছে</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>
|
||||||
<patch id="video.quality.rememberVideoQualityPatch">
|
<patch id="video.quality.rememberVideoQualityPatch">
|
||||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||||
@@ -1405,8 +1418,6 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট
|
|||||||
ভিডিও প্লেব্যাক কাজ নাও করতে পারে"</string>
|
ভিডিও প্লেব্যাক কাজ নাও করতে পারে"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">এই সেটিংটি বন্ধ করার ফলে ভিডিও প্লেব্যাক ত্রুটি হতে পারে।</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">এই সেটিংটি বন্ধ করার ফলে ভিডিও প্লেব্যাক ত্রুটি হতে পারে।</string>
|
||||||
<string name="revanced_spoof_video_streams_client_type_title">ডিফল্ট ক্লায়েন্ট</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_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_on">ভিডিও কোডেক AVC (H.264) এ বাধ্যতামূলক করা হয়েছে</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ভিডিও কোডেক স্বয়ংক্রিয়ভাবে নির্ধারিত হয়</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. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' 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. -->
|
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.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- 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. -->
|
<!-- '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. -->
|
<!-- 'share' should be translated using the same localized wording YouTube displays for the button. -->
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
@@ -206,6 +206,7 @@ Second \"item\" text"</string>
|
|||||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="video.audio.forceOriginalAudioPatch">
|
<patch id="video.audio.forceOriginalAudioPatch">
|
||||||
|
<!-- 'Spoof video streams' should be the same translation used for revanced_spoof_video_streams_screen_title -->
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="video.quality.rememberVideoQualityPatch">
|
<patch id="video.quality.rememberVideoQualityPatch">
|
||||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
<!-- 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 id="interaction.seekbar.enableSlideToSeekPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- 'no auth' means no authentication -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="twitch">
|
<app id="twitch">
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user