Compare commits

...

31 Commits

Author SHA1 Message Date
semantic-release-bot
6c32591f62 chore: Release v5.30.0-dev.5 [skip ci]
# [5.30.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.30.0-dev.4...v5.30.0-dev.5) (2025-06-30)

### Bug Fixes

* **YouTube - Hide layout components:** Fix "Hide ticket shelf" hiding unwanted components ([#5292](https://github.com/ReVanced/revanced-patches/issues/5292)) ([ad6da67](ad6da67281))
2025-06-30 08:01:39 +00:00
ILoveOpenSourceApplications
ad6da67281 fix(YouTube - Hide layout components): Fix "Hide ticket shelf" hiding unwanted components (#5292) 2025-06-30 11:58:01 +04:00
github-actions[bot]
14dc593eba chore: Sync translations (#5294) 2025-06-30 11:57:44 +04:00
semantic-release-bot
e52ee41222 chore: Release v5.30.0-dev.4 [skip ci]
# [5.30.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.30.0-dev.3...v5.30.0-dev.4) (2025-06-30)

### Features

* **YouTube - SponsorBlock:** Add "Undo automatic skip toast" ([#5277](https://github.com/ReVanced/revanced-patches/issues/5277)) ([6ee94f8](6ee94f8532))
2025-06-30 06:54:53 +00:00
MarcaD
6ee94f8532 feat(YouTube - SponsorBlock): Add "Undo automatic skip toast" (#5277)
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
2025-06-30 10:50:52 +04:00
semantic-release-bot
21688201af chore: Release v5.30.0-dev.3 [skip ci]
# [5.30.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.30.0-dev.2...v5.30.0-dev.3) (2025-06-28)

### Bug Fixes

* **YouTube - Hide layout components:** Fix "Hide AI Comments summary" in Comments ([#5284](https://github.com/ReVanced/revanced-patches/issues/5284)) ([f084743](f08474369b))
2025-06-28 18:05:53 +00:00
ILoveOpenSourceApplications
f08474369b fix(YouTube - Hide layout components): Fix "Hide AI Comments summary" in Comments (#5284) 2025-06-28 22:02:03 +04:00
LisoUseInAIKyrios
ed617094ea refactor(YouTube - Litho): Use a simpler hook that does not require using a thread local (#5281) 2025-06-28 11:51:29 +04:00
semantic-release-bot
9131c50f1b chore: Release v5.30.0-dev.2 [skip ci]
# [5.30.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.30.0-dev.1...v5.30.0-dev.2) (2025-06-27)

### Bug Fixes

* **Spotify - Spoof client patch:** Block sending bad integrity verdicts to potentially fix account suspensions ([#5274](https://github.com/ReVanced/revanced-patches/issues/5274)) ([69600d0](69600d08a4))
2025-06-27 14:07:00 +00:00
brosssh
69600d08a4 fix(Spotify - Spoof client patch): Block sending bad integrity verdicts to potentially fix account suspensions (#5274)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2025-06-27 16:03:07 +02:00
semantic-release-bot
5dba77612b chore: Release v5.30.0-dev.1 [skip ci]
# [5.30.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.29.1-dev.1...v5.30.0-dev.1) (2025-06-27)

### Bug Fixes

* **YouTube - Hide ads:** Fix "Hide shopping links" ([#5267](https://github.com/ReVanced/revanced-patches/issues/5267)) ([e169056](e169056b70))
* **YouTube - Hide layout components:** Fix "Hide AI-generated video summary" in video description ([#5269](https://github.com/ReVanced/revanced-patches/issues/5269)) ([ca694c7](ca694c78d2))
* **YouTube - Hide Shorts components:** Fix hiding of untoggled components ([#5266](https://github.com/ReVanced/revanced-patches/issues/5266)) ([b6bf1e0](b6bf1e026c))

### Features

* **Spotify:** Remove ads section from browse ([#5193](https://github.com/ReVanced/revanced-patches/issues/5193)) ([92b588c](92b588c866))
* **YouTube - Hide layout components:** Add `Hide in history` option to filter bar ([#5271](https://github.com/ReVanced/revanced-patches/issues/5271)) ([da20e56](da20e565cd))
2025-06-27 11:38:02 +00:00
brosssh
92b588c866 feat(Spotify): Remove ads section from browse (#5193) 2025-06-27 15:34:13 +04:00
ILoveOpenSourceApplications
da20e565cd feat(YouTube - Hide layout components): Add Hide in history option to filter bar (#5271) 2025-06-27 15:33:53 +04:00
ILoveOpenSourceApplications
ca694c78d2 fix(YouTube - Hide layout components): Fix "Hide AI-generated video summary" in video description (#5269) 2025-06-27 15:33:37 +04:00
ILoveOpenSourceApplications
e169056b70 fix(YouTube - Hide ads): Fix "Hide shopping links" (#5267) 2025-06-27 15:33:21 +04:00
ILoveOpenSourceApplications
b6bf1e026c fix(YouTube - Hide Shorts components): Fix hiding of untoggled components (#5266) 2025-06-27 15:33:02 +04:00
github-actions[bot]
9fa89d48c0 chore: Sync translations (#5272) 2025-06-27 15:32:34 +04:00
semantic-release-bot
5d2c21540c chore: Release v5.29.1-dev.1 [skip ci]
## [5.29.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.29.0...v5.29.1-dev.1) (2025-06-26)

### Bug Fixes

* **Spotify:** Add `Spoof client` patch to fix various issues by using a web platform access token ([#5173](https://github.com/ReVanced/revanced-patches/issues/5173)) ([1a8aacd](1a8aacdff6))
2025-06-26 17:56:10 +00:00
oSumAtrIX
1a8aacdff6 fix(Spotify): Add Spoof client patch to fix various issues by using a web platform access token (#5173)
Co-authored-by: Nuckyz <61953774+Nuckyz@users.noreply.github.com>
Co-authored-by: brosssh <tiabroch@gmail.com>
Co-authored-by: Dawid Krajcarz <80264606+drobotk@users.noreply.github.com>
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
2025-06-26 19:51:18 +02:00
semantic-release-bot
1804bd9bfc chore: Release v5.29.0 [skip ci]
# [5.29.0](https://github.com/ReVanced/revanced-patches/compare/v5.28.0...v5.29.0) (2025-06-26)

### Bug Fixes

* Add scrollable content to modern style settings dialogs ([#5211](https://github.com/ReVanced/revanced-patches/issues/5211)) ([2b62fc2](2b62fc2224))
* **Google Photos:** Resolve startup crash for Android 5.0 devices ([7be3741](7be374100b))
* **YouTube - Hide ads:** Hide new type of product ad in video description ([#5225](https://github.com/ReVanced/revanced-patches/issues/5225)) ([b656976](b65697603d))
* **YouTube - Hide layout components:** Fix "Hide video description attributes" ([#5250](https://github.com/ReVanced/revanced-patches/issues/5250)) ([978c244](978c24458b))
* **YouTube - Hide Shorts components:** Fix "Hide Use this sound button" ([#5233](https://github.com/ReVanced/revanced-patches/issues/5233)) ([a678f17](a678f178e1))
* **YouTube - Hide Shorts components:** Fix "Hide Use this template button" ([#5249](https://github.com/ReVanced/revanced-patches/issues/5249)) ([957bece](957bece3e9))
* **YouTube:** Always use single threaded layout to resolve layout bugs in unpatched YouTube ([#5226](https://github.com/ReVanced/revanced-patches/issues/5226)) ([ccd1691](ccd169121a))
* **YouTube:** Fix refactoring app startup exception ([0dbd058](0dbd058099))

### Features

* Add `Spoof app signature` patch ([#5158](https://github.com/ReVanced/revanced-patches/issues/5158)) ([fb83e58](fb83e58f79))
* **Cricbuzz:** Add `Hide ads` patch ([#4998](https://github.com/ReVanced/revanced-patches/issues/4998)) ([558bf8b](558bf8bca8))
* **Crunchyroll:** Add `Hide ads` patch ([#5201](https://github.com/ReVanced/revanced-patches/issues/5201)) ([d338989](d338989cb4))
* **YouTube - Hide Shorts components:** Add `Hide Effects button` ([#5255](https://github.com/ReVanced/revanced-patches/issues/5255)) ([29c86ac](29c86ac6a3))
* **YouTube - Hide video action buttons:** Add `Hide Stop ads` ([#5245](https://github.com/ReVanced/revanced-patches/issues/5245)) ([0e63f49](0e63f49e13))
* **YouTube:** Add an option to disable toasts when changing default playback speed or quality ([#5230](https://github.com/ReVanced/revanced-patches/issues/5230)) ([6b719df](6b719dfcd7))
* **YouTube:** Support version `20.13.41` ([#5253](https://github.com/ReVanced/revanced-patches/issues/5253)) ([439ca37](439ca37e99))
2025-06-26 08:06:08 +00:00
LisoUseInAIKyrios
7eb4e62762 chore: Merge branch dev to main (#5227) 2025-06-26 12:02:33 +04:00
LisoUseInAIKyrios
b8e10b5c1f chore: Fix api dump 2025-06-26 11:51:54 +04:00
github-actions[bot]
a7c11b9b08 chore: Sync translations (#5258) 2025-06-26 11:50:50 +04:00
semantic-release-bot
443c0a74d5 chore: Release v5.29.0-dev.11 [skip ci]
# [5.29.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v5.29.0-dev.10...v5.29.0-dev.11) (2025-06-26)

### Features

* **Cricbuzz:** Add `Hide ads` patch ([#4998](https://github.com/ReVanced/revanced-patches/issues/4998)) ([558bf8b](558bf8bca8))
2025-06-26 07:13:07 +00:00
github-actions[bot]
84a0f7f7d7 chore: Sync translations (#5257) 2025-06-26 11:10:05 +04:00
Sourav Agrawal
558bf8bca8 feat(Cricbuzz): Add Hide ads patch (#4998) 2025-06-26 11:08:22 +04:00
semantic-release-bot
e22d4e6a4b chore: Release v5.29.0-dev.10 [skip ci]
# [5.29.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.29.0-dev.9...v5.29.0-dev.10) (2025-06-25)

### Features

* **YouTube - Hide Shorts components:** Add `Hide Effects button` ([#5255](https://github.com/ReVanced/revanced-patches/issues/5255)) ([29c86ac](29c86ac6a3))
2025-06-25 08:59:45 +00:00
LisoUseInAIKyrios
a07f946633 chore: Fix typo 2025-06-25 12:56:42 +04:00
LisoUseInAIKyrios
29c86ac6a3 feat(YouTube - Hide Shorts components): Add Hide Effects button (#5255) 2025-06-25 12:54:59 +04:00
semantic-release-bot
19cf5667d8 chore: Release v5.29.0-dev.9 [skip ci]
# [5.29.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.29.0-dev.8...v5.29.0-dev.9) (2025-06-25)

### Features

* Add `Spoof app signature` patch ([#5158](https://github.com/ReVanced/revanced-patches/issues/5158)) ([fb83e58](fb83e58f79))
2025-06-25 07:16:33 +00:00
Markus Probst
fb83e58f79 feat: Add Spoof app signature patch (#5158) 2025-06-25 11:13:32 +04:00
103 changed files with 3705 additions and 1324 deletions

View File

@@ -1,3 +1,99 @@
# [5.30.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.30.0-dev.4...v5.30.0-dev.5) (2025-06-30)
### Bug Fixes
* **YouTube - Hide layout components:** Fix "Hide ticket shelf" hiding unwanted components ([#5292](https://github.com/ReVanced/revanced-patches/issues/5292)) ([d6b1f7a](https://github.com/ReVanced/revanced-patches/commit/d6b1f7a6e18b1c0eb4374c5e22a1c746dcb3a522))
# [5.30.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.30.0-dev.3...v5.30.0-dev.4) (2025-06-30)
### Features
* **YouTube - SponsorBlock:** Add "Undo automatic skip toast" ([#5277](https://github.com/ReVanced/revanced-patches/issues/5277)) ([7fa169a](https://github.com/ReVanced/revanced-patches/commit/7fa169ae262c880019c5a069a2d6bdc7f94885f1))
# [5.30.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.30.0-dev.2...v5.30.0-dev.3) (2025-06-28)
### Bug Fixes
* **YouTube - Hide layout components:** Fix "Hide AI Comments summary" in Comments ([#5284](https://github.com/ReVanced/revanced-patches/issues/5284)) ([d42370e](https://github.com/ReVanced/revanced-patches/commit/d42370ef71f4608abc64b6ef4a3fb0c5bd5e3eb6))
# [5.30.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.30.0-dev.1...v5.30.0-dev.2) (2025-06-27)
### Bug Fixes
* **Spotify - Spoof client patch:** Block sending bad integrity verdicts to potentially fix account suspensions ([#5274](https://github.com/ReVanced/revanced-patches/issues/5274)) ([f7b574c](https://github.com/ReVanced/revanced-patches/commit/f7b574ca79c5a616cfe33a3fc75bd8cf68571f7d))
# [5.30.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.29.1-dev.1...v5.30.0-dev.1) (2025-06-27)
### Bug Fixes
* **YouTube - Hide ads:** Fix "Hide shopping links" ([#5267](https://github.com/ReVanced/revanced-patches/issues/5267)) ([2fe4607](https://github.com/ReVanced/revanced-patches/commit/2fe46079d78ab98076d3a4cdf01c8bfdbdea45c0))
* **YouTube - Hide layout components:** Fix "Hide AI-generated video summary" in video description ([#5269](https://github.com/ReVanced/revanced-patches/issues/5269)) ([5203da0](https://github.com/ReVanced/revanced-patches/commit/5203da0ae58e467657bc915ab0af5b9904c4f492))
* **YouTube - Hide Shorts components:** Fix hiding of untoggled components ([#5266](https://github.com/ReVanced/revanced-patches/issues/5266)) ([008e192](https://github.com/ReVanced/revanced-patches/commit/008e192779a8658e894d5718baa732717bf96e40))
### Features
* **Spotify:** Remove ads section from browse ([#5193](https://github.com/ReVanced/revanced-patches/issues/5193)) ([ebd4dcc](https://github.com/ReVanced/revanced-patches/commit/ebd4dccf12a5fbd31d2d53c19a792c389a4641d7))
* **YouTube - Hide layout components:** Add `Hide in history` option to filter bar ([#5271](https://github.com/ReVanced/revanced-patches/issues/5271)) ([ba242a3](https://github.com/ReVanced/revanced-patches/commit/ba242a36b040b82e84870e5e240734637125a472))
## [5.29.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.29.0...v5.29.1-dev.1) (2025-06-26)
### Bug Fixes
* **Spotify:** Add `Spoof client` patch to fix various issues by using a web platform access token ([#5173](https://github.com/ReVanced/revanced-patches/issues/5173)) ([b7b75bb](https://github.com/ReVanced/revanced-patches/commit/b7b75bb9d8d5fd505121e752b8a20e61ff28d1b2))
# [5.29.0](https://github.com/ReVanced/revanced-patches/compare/v5.28.0...v5.29.0) (2025-06-26)
### Bug Fixes
* Add scrollable content to modern style settings dialogs ([#5211](https://github.com/ReVanced/revanced-patches/issues/5211)) ([e6876d5](https://github.com/ReVanced/revanced-patches/commit/e6876d510d28f6a3a41ec1722a033b3e30a22c65))
* **Google Photos:** Resolve startup crash for Android 5.0 devices ([0294533](https://github.com/ReVanced/revanced-patches/commit/0294533c4d9a321aea086eedb4e46385ae9a026e))
* **YouTube - Hide ads:** Hide new type of product ad in video description ([#5225](https://github.com/ReVanced/revanced-patches/issues/5225)) ([1e2efad](https://github.com/ReVanced/revanced-patches/commit/1e2efad7b2714c395ed6b0a77cbbf8a2265df520))
* **YouTube - Hide layout components:** Fix "Hide video description attributes" ([#5250](https://github.com/ReVanced/revanced-patches/issues/5250)) ([2f22d45](https://github.com/ReVanced/revanced-patches/commit/2f22d45eb80745ac64fbea44c8055ebe7925a586))
* **YouTube - Hide Shorts components:** Fix "Hide Use this sound button" ([#5233](https://github.com/ReVanced/revanced-patches/issues/5233)) ([5d6ec9e](https://github.com/ReVanced/revanced-patches/commit/5d6ec9e94a6221a0f32762d5bede893e9e7457fc))
* **YouTube - Hide Shorts components:** Fix "Hide Use this template button" ([#5249](https://github.com/ReVanced/revanced-patches/issues/5249)) ([b399ecb](https://github.com/ReVanced/revanced-patches/commit/b399ecbb6a222d82dd5e4b3417c9f7eff4324adb))
* **YouTube:** Always use single threaded layout to resolve layout bugs in unpatched YouTube ([#5226](https://github.com/ReVanced/revanced-patches/issues/5226)) ([1f539b1](https://github.com/ReVanced/revanced-patches/commit/1f539b1396526b2c767d77a804bd0308ee4a42ec))
* **YouTube:** Fix refactoring app startup exception ([1b00c90](https://github.com/ReVanced/revanced-patches/commit/1b00c907f4b90f4659afb4a54ba61ac2835b460d))
### Features
* Add `Spoof app signature` patch ([#5158](https://github.com/ReVanced/revanced-patches/issues/5158)) ([78b25aa](https://github.com/ReVanced/revanced-patches/commit/78b25aa4e87ec3f9df1d57831b48a39029969416))
* **Cricbuzz:** Add `Hide ads` patch ([#4998](https://github.com/ReVanced/revanced-patches/issues/4998)) ([83ccfa8](https://github.com/ReVanced/revanced-patches/commit/83ccfa8e1b5d5a44c55ef659484acf3cc08d3346))
* **Crunchyroll:** Add `Hide ads` patch ([#5201](https://github.com/ReVanced/revanced-patches/issues/5201)) ([46b4398](https://github.com/ReVanced/revanced-patches/commit/46b4398fd6ca223391ed8f497a8347c2313421b7))
* **YouTube - Hide Shorts components:** Add `Hide Effects button` ([#5255](https://github.com/ReVanced/revanced-patches/issues/5255)) ([240897a](https://github.com/ReVanced/revanced-patches/commit/240897a94008ce9a148c87bb41b978d553d5a6f5))
* **YouTube - Hide video action buttons:** Add `Hide Stop ads` ([#5245](https://github.com/ReVanced/revanced-patches/issues/5245)) ([274dcc6](https://github.com/ReVanced/revanced-patches/commit/274dcc676e009be63eb6970de33abacd34dc6560))
* **YouTube:** Add an option to disable toasts when changing default playback speed or quality ([#5230](https://github.com/ReVanced/revanced-patches/issues/5230)) ([c68cde3](https://github.com/ReVanced/revanced-patches/commit/c68cde3a896450874cc571be5c4723387db96032))
* **YouTube:** Support version `20.13.41` ([#5253](https://github.com/ReVanced/revanced-patches/issues/5253)) ([d284c3d](https://github.com/ReVanced/revanced-patches/commit/d284c3dd3277430b6885e7c27ee02d062dcefc85))
# [5.29.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v5.29.0-dev.10...v5.29.0-dev.11) (2025-06-26)
### Features
* **Cricbuzz:** Add `Hide ads` patch ([#4998](https://github.com/ReVanced/revanced-patches/issues/4998)) ([83ccfa8](https://github.com/ReVanced/revanced-patches/commit/83ccfa8e1b5d5a44c55ef659484acf3cc08d3346))
# [5.29.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.29.0-dev.9...v5.29.0-dev.10) (2025-06-25)
### Features
* **YouTube - Hide Shorts components:** Add `Hide Effects button` ([#5255](https://github.com/ReVanced/revanced-patches/issues/5255)) ([240897a](https://github.com/ReVanced/revanced-patches/commit/240897a94008ce9a148c87bb41b978d553d5a6f5))
# [5.29.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.29.0-dev.8...v5.29.0-dev.9) (2025-06-25)
### Features
* Add `Spoof app signature` patch ([#5158](https://github.com/ReVanced/revanced-patches/issues/5158)) ([78b25aa](https://github.com/ReVanced/revanced-patches/commit/78b25aa4e87ec3f9df1d57831b48a39029969416))
# [5.29.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.29.0-dev.7...v5.29.0-dev.8) (2025-06-25)

3
build.gradle.kts Normal file
View File

@@ -0,0 +1,3 @@
plugins {
alias(libs.plugins.android.library) apply false
}

View File

@@ -1,5 +1,5 @@
plugins {
id(libs.plugins.android.library.get().pluginId)
alias(libs.plugins.android.library)
}
android {

View File

@@ -1,5 +1,5 @@
plugins {
id(libs.plugins.android.library.get().pluginId)
alias(libs.plugins.android.library)
}
android {

View File

@@ -1,5 +1,5 @@
plugins {
id(libs.plugins.android.library.get().pluginId)
alias(libs.plugins.android.library)
}
android {

View File

@@ -1,5 +1,5 @@
plugins {
id(libs.plugins.android.library.get().pluginId)
alias(libs.plugins.android.library)
}
android {

View File

@@ -1,5 +1,5 @@
plugins {
id("com.android.library")
alias(libs.plugins.android.library)
}
android {

View File

@@ -311,6 +311,10 @@ public class Utils {
return getContext().getResources().getDimension(getResourceIdentifier(resourceIdentifierName, "dimen"));
}
public static String[] getResourceStringArray(String resourceIdentifierName) throws Resources.NotFoundException {
return getContext().getResources().getStringArray(getResourceIdentifier(resourceIdentifierName, "array"));
}
public interface MatchFilter<T> {
boolean matches(T object);
}
@@ -579,7 +583,7 @@ public class Utils {
Context currentContext = context;
if (currentContext == null) {
Logger.printException(() -> "Cannot show toast (context is null): " + messageToToast, null);
Logger.printException(() -> "Cannot show toast (context is null): " + messageToToast);
} else {
Logger.printDebug(() -> "Showing toast: " + messageToToast);
Toast.makeText(currentContext, messageToToast, toastDuration).show();
@@ -809,7 +813,7 @@ public class Utils {
// Create content container (message/EditText) inside a ScrollView only if message or editText is provided.
ScrollView contentScrollView = null;
LinearLayout contentContainer = null;
LinearLayout contentContainer;
if (message != null || editText != null) {
contentScrollView = new ScrollView(context);
contentScrollView.setVerticalScrollBarEnabled(false); // Disable the vertical scrollbar.
@@ -833,7 +837,7 @@ public class Utils {
contentScrollView.addView(contentContainer);
// Message (if not replaced by EditText).
if (editText == null && message != null) {
if (editText == null) {
TextView messageView = new TextView(context);
messageView.setText(message); // Supports Spanned (HTML).
messageView.setTextSize(16);

View File

@@ -71,15 +71,20 @@ public class EnumSetting<T extends Enum<?>> extends Setting<T> {
json.put(importExportKey, value.name().toLowerCase(Locale.ENGLISH));
}
@NonNull
private T getEnumFromString(String enumName) {
/**
* @param enumName Enum name. Casing does not matter.
* @return Enum of this type with the same declared name.
* @throws IllegalArgumentException if the name is not a valid enum of this type.
*/
protected T getEnumFromString(String enumName) {
//noinspection ConstantConditions
for (Enum<?> value : defaultValue.getClass().getEnumConstants()) {
if (value.name().equalsIgnoreCase(enumName)) {
// noinspection unchecked
//noinspection unchecked
return (T) value;
}
}
throw new IllegalArgumentException("Unknown enum value: " + enumName);
}
@@ -103,7 +108,9 @@ public class EnumSetting<T extends Enum<?>> extends Setting<T> {
* Availability based on if this setting is currently set to any of the provided types.
*/
@SafeVarargs
public final Setting.Availability availability(@NonNull T... types) {
public final Setting.Availability availability(T... types) {
Objects.requireNonNull(types);
return () -> {
T currentEnumType = get();
for (T enumType : types) {

View File

@@ -28,16 +28,14 @@ public abstract class Setting<T> {
/**
* Availability based on a single parent setting being enabled.
*/
@NonNull
public static Availability parent(@NonNull BooleanSetting parent) {
public static Availability parent(BooleanSetting parent) {
return parent::get;
}
/**
* Availability based on all parents being enabled.
*/
@NonNull
public static Availability parentsAll(@NonNull BooleanSetting... parents) {
public static Availability parentsAll(BooleanSetting... parents) {
return () -> {
for (BooleanSetting parent : parents) {
if (!parent.get()) return false;
@@ -49,8 +47,7 @@ public abstract class Setting<T> {
/**
* Availability based on any parent being enabled.
*/
@NonNull
public static Availability parentsAny(@NonNull BooleanSetting... parents) {
public static Availability parentsAny(BooleanSetting... parents) {
return () -> {
for (BooleanSetting parent : parents) {
if (parent.get()) return true;
@@ -79,7 +76,7 @@ public abstract class Setting<T> {
/**
* Adds a callback for {@link #importFromJSON(Context, String)} and {@link #exportToJson(Context)}.
*/
public static void addImportExportCallback(@NonNull ImportExportCallback callback) {
public static void addImportExportCallback(ImportExportCallback callback) {
importExportCallbacks.add(Objects.requireNonNull(callback));
}
@@ -100,14 +97,13 @@ public abstract class Setting<T> {
public static final SharedPrefCategory preferences = new SharedPrefCategory("revanced_prefs");
@Nullable
public static Setting<?> getSettingFromPath(@NonNull String str) {
public static Setting<?> getSettingFromPath(String str) {
return PATH_TO_SETTINGS.get(str);
}
/**
* @return All settings that have been created.
*/
@NonNull
public static List<Setting<?>> allLoadedSettings() {
return Collections.unmodifiableList(SETTINGS);
}
@@ -115,7 +111,6 @@ public abstract class Setting<T> {
/**
* @return All settings that have been created, sorted by keys.
*/
@NonNull
private static List<Setting<?>> allLoadedSettingsSorted() {
Collections.sort(SETTINGS, (Setting<?> o1, Setting<?> o2) -> o1.key.compareTo(o2.key));
return allLoadedSettings();
@@ -124,13 +119,11 @@ public abstract class Setting<T> {
/**
* The key used to store the value in the shared preferences.
*/
@NonNull
public final String key;
/**
* The default value of the setting.
*/
@NonNull
public final T defaultValue;
/**
@@ -161,7 +154,6 @@ public abstract class Setting<T> {
/**
* The value of the setting.
*/
@NonNull
protected volatile T value;
public Setting(String key, T defaultValue) {
@@ -199,8 +191,8 @@ public abstract class Setting<T> {
* @param userDialogMessage Confirmation message to display, if the user tries to change the setting from the default value.
* @param availability Condition that must be true, for this setting to be available to configure.
*/
public Setting(@NonNull String key,
@NonNull T defaultValue,
public Setting(String key,
T defaultValue,
boolean rebootApp,
boolean includeWithImportExport,
@Nullable String userDialogMessage,
@@ -227,7 +219,7 @@ public abstract class Setting<T> {
/**
* Migrate a setting value if the path is renamed but otherwise the old and new settings are identical.
*/
public static <T> void migrateOldSettingToNew(@NonNull Setting<T> oldSetting, @NonNull Setting<T> newSetting) {
public static <T> void migrateOldSettingToNew(Setting<T> oldSetting, Setting<T> newSetting) {
if (oldSetting == newSetting) throw new IllegalArgumentException();
if (!oldSetting.isSetToDefault()) {
@@ -243,7 +235,7 @@ public abstract class Setting<T> {
* This method will be deleted in the future.
*/
@SuppressWarnings("rawtypes")
public static void migrateFromOldPreferences(@NonNull SharedPrefCategory oldPrefs, @NonNull Setting setting, String settingKey) {
public static void migrateFromOldPreferences(SharedPrefCategory oldPrefs, Setting setting, String settingKey) {
if (!oldPrefs.preferences.contains(settingKey)) {
return; // Nothing to do.
}
@@ -285,7 +277,7 @@ public abstract class Setting<T> {
* This intentionally is a static method to deter
* accidental usage when {@link #save(Object)} was intended.
*/
public static void privateSetValueFromString(@NonNull Setting<?> setting, @NonNull String newValue) {
public static void privateSetValueFromString(Setting<?> setting, String newValue) {
setting.setValueFromString(newValue);
// Clear the preference value since default is used, to allow changing
@@ -299,7 +291,7 @@ public abstract class Setting<T> {
/**
* Sets the value of {@link #value}, but do not save to {@link #preferences}.
*/
protected abstract void setValueFromString(@NonNull String newValue);
protected abstract void setValueFromString(String newValue);
/**
* Load and set the value of {@link #value}.
@@ -309,7 +301,7 @@ public abstract class Setting<T> {
/**
* Persistently saves the value.
*/
public final void save(@NonNull T newValue) {
public final void save(T newValue) {
if (value.equals(newValue)) {
return;
}
@@ -406,7 +398,6 @@ public abstract class Setting<T> {
json.put(importExportKey, value);
}
@NonNull
public static String exportToJson(@Nullable Context alertDialogContext) {
try {
JSONObject json = new JSONObject();
@@ -445,7 +436,7 @@ public abstract class Setting<T> {
/**
* @return if any settings that require a reboot were changed.
*/
public static boolean importFromJSON(@NonNull Context alertDialogContext, @NonNull String settingsJsonString) {
public static boolean importFromJSON(Context alertDialogContext, String settingsJsonString) {
try {
if (!settingsJsonString.matches("[\\s\\S]*\\{")) {
settingsJsonString = '{' + settingsJsonString + '}'; // Restore outer JSON braces

View File

@@ -1,7 +1,15 @@
plugins {
alias(libs.plugins.protobuf)
}
dependencies {
compileOnly(project(":extensions:shared:library"))
compileOnly(project(":extensions:spotify:stub"))
compileOnly(libs.annotation)
implementation(project(":extensions:spotify:utils"))
implementation(libs.nanohttpd)
implementation(libs.protobuf.javalite)
}
android {
@@ -14,3 +22,19 @@ android {
targetCompatibility = JavaVersion.VERSION_1_8
}
}
protobuf {
protoc {
artifact = libs.protobuf.protoc.get().toString()
}
generateProtoTasks {
all().forEach { task ->
task.builtins {
create("java") {
option("lite")
}
}
}
}
}

View File

@@ -0,0 +1,153 @@
package app.revanced.extension.spotify.misc.fix;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.spotify.login5.v4.proto.Login5.*;
import com.google.protobuf.ByteString;
import com.google.protobuf.MessageLite;
import fi.iki.elonen.NanoHTTPD;
import java.io.ByteArrayInputStream;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Objects;
import static fi.iki.elonen.NanoHTTPD.Response.Status.INTERNAL_ERROR;
class LoginRequestListener extends NanoHTTPD {
LoginRequestListener(int port) {
super(port);
}
@NonNull
@Override
public Response serve(IHTTPSession request) {
Logger.printInfo(() -> "Serving request for URI: " + request.getUri());
InputStream requestBodyInputStream = getRequestBodyInputStream(request);
LoginRequest loginRequest;
try {
loginRequest = LoginRequest.parseFrom(requestBodyInputStream);
} catch (IOException e) {
Logger.printException(() -> "Failed to parse LoginRequest", e);
return newResponse(INTERNAL_ERROR);
}
MessageLite loginResponse;
// A request may be made concurrently by Spotify,
// however a webview can only handle one request at a time due to singleton cookie manager.
// Therefore, synchronize to ensure that only one webview handles the request at a time.
synchronized (this) {
loginResponse = getLoginResponse(loginRequest);
}
if (loginResponse != null) {
return newResponse(Response.Status.OK, loginResponse);
}
return newResponse(INTERNAL_ERROR);
}
@Nullable
private static LoginResponse getLoginResponse(@NonNull LoginRequest loginRequest) {
Session session;
boolean isInitialLogin = !loginRequest.hasStoredCredential();
if (isInitialLogin) {
Logger.printInfo(() -> "Received request for initial login");
session = WebApp.currentSession; // Session obtained from WebApp.login.
} else {
Logger.printInfo(() -> "Received request to restore saved session");
session = Session.read(loginRequest.getStoredCredential().getUsername());
}
return toLoginResponse(session, isInitialLogin);
}
private static LoginResponse toLoginResponse(Session session, boolean isInitialLogin) {
LoginResponse.Builder builder = LoginResponse.newBuilder();
if (session == null) {
if (isInitialLogin) {
Logger.printInfo(() -> "Session is null, returning try again later error for initial login");
builder.setError(LoginError.TRY_AGAIN_LATER);
} else {
Logger.printInfo(() -> "Session is null, returning invalid credentials error for stored credential login");
builder.setError(LoginError.INVALID_CREDENTIALS);
}
} else if (session.username == null) {
Logger.printInfo(() -> "Session username is null, returning invalid credentials error");
builder.setError(LoginError.INVALID_CREDENTIALS);
} else if (session.accessTokenExpired()) {
Logger.printInfo(() -> "Access token has expired, renewing session");
WebApp.renewSession(session.cookies);
return toLoginResponse(WebApp.currentSession, isInitialLogin);
} else {
session.save();
Logger.printInfo(() -> "Returning session for username: " + session.username);
builder.setOk(LoginOk.newBuilder()
.setUsername(session.username)
.setAccessToken(session.accessToken)
.setStoredCredential(ByteString.fromHex("00")) // Placeholder, as it cannot be null or empty.
.setAccessTokenExpiresIn(session.accessTokenExpiresInSeconds())
.build());
}
return builder.build();
}
@NonNull
private static InputStream limitedInputStream(InputStream inputStream, long contentLength) {
return new FilterInputStream(inputStream) {
private long remaining = contentLength;
@Override
public int read() throws IOException {
if (remaining <= 0) return -1;
int result = super.read();
if (result != -1) remaining--;
return result;
}
@Override
public int read(byte[] b, int off, int len) throws IOException {
if (remaining <= 0) return -1;
len = (int) Math.min(len, remaining);
int result = super.read(b, off, len);
if (result != -1) remaining -= result;
return result;
}
};
}
@NonNull
private static InputStream getRequestBodyInputStream(@NonNull IHTTPSession request) {
long requestContentLength =
Long.parseLong(Objects.requireNonNull(request.getHeaders().get("content-length")));
return limitedInputStream(request.getInputStream(), requestContentLength);
}
@SuppressWarnings("SameParameterValue")
@NonNull
private static Response newResponse(Response.Status status) {
return newResponse(status, null);
}
@NonNull
private static Response newResponse(Response.IStatus status, MessageLite messageLite) {
if (messageLite == null) {
return newFixedLengthResponse(status, "application/x-protobuf", null);
}
byte[] messageBytes = messageLite.toByteArray();
InputStream stream = new ByteArrayInputStream(messageBytes);
return newFixedLengthResponse(status, "application/x-protobuf", stream, messageBytes.length);
}
}

View File

@@ -0,0 +1,124 @@
package app.revanced.extension.spotify.misc.fix;
import android.content.SharedPreferences;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import org.json.JSONException;
import org.json.JSONObject;
import static android.content.Context.MODE_PRIVATE;
class Session {
/**
* Username of the account. Null if this session does not have an authenticated user.
*/
@Nullable
final String username;
/**
* Access token for this session.
*/
final String accessToken;
/**
* Session expiration timestamp in milliseconds.
*/
final Long expirationTime;
/**
* Authentication cookies for this session.
*/
final String cookies;
/**
* @param username Username of the account. Empty if this session does not have an authenticated user.
* @param accessToken Access token for this session.
* @param cookies Authentication cookies for this session.
*/
Session(@Nullable String username, String accessToken, String cookies) {
this(username, accessToken, System.currentTimeMillis() + 60 * 60 * 1000, cookies);
}
private Session(@Nullable String username, String accessToken, long expirationTime, String cookies) {
this.username = username;
this.accessToken = accessToken;
this.expirationTime = expirationTime;
this.cookies = cookies;
}
/**
* @return The number of milliseconds until the access token expires.
*/
long accessTokenExpiresInMillis() {
long currentTime = System.currentTimeMillis();
return expirationTime - currentTime;
}
/**
* @return The number of seconds until the access token expires.
*/
int accessTokenExpiresInSeconds() {
return (int) accessTokenExpiresInMillis() / 1000;
}
/**
* @return True if the access token has expired, false otherwise.
*/
boolean accessTokenExpired() {
return accessTokenExpiresInMillis() <= 0;
}
void save() {
Logger.printInfo(() -> "Saving session: " + this);
SharedPreferences.Editor editor = Utils.getContext().getSharedPreferences("revanced", MODE_PRIVATE).edit();
String json;
try {
json = new JSONObject()
.put("accessToken", accessToken)
.put("expirationTime", expirationTime)
.put("cookies", cookies).toString();
} catch (JSONException ex) {
Logger.printException(() -> "Failed to convert session to stored credential", ex);
return;
}
editor.putString("session_" + username, json);
editor.apply();
}
@Nullable
static Session read(String username) {
Logger.printInfo(() -> "Reading saved session for username: " + username);
SharedPreferences sharedPreferences = Utils.getContext().getSharedPreferences("revanced", MODE_PRIVATE);
String savedJson = sharedPreferences.getString("session_" + username, null);
if (savedJson == null) {
Logger.printInfo(() -> "No session found in shared preferences");
return null;
}
try {
JSONObject json = new JSONObject(savedJson);
String accessToken = json.getString("accessToken");
long expirationTime = json.getLong("expirationTime");
String cookies = json.getString("cookies");
return new Session(username, accessToken, expirationTime, cookies);
} catch (JSONException ex) {
Logger.printException(() -> "Failed to read session from shared preferences", ex);
return null;
}
}
@NonNull
@Override
public String toString() {
return "Session(" +
"username=" + username +
", accessToken=" + accessToken +
", expirationTime=" + expirationTime +
", cookies=" + cookies +
')';
}
}

View File

@@ -0,0 +1,42 @@
package app.revanced.extension.spotify.misc.fix;
import android.view.LayoutInflater;
import app.revanced.extension.shared.Logger;
@SuppressWarnings("unused")
public class SpoofClientPatch {
private static LoginRequestListener listener;
/**
* Injection point.
* <br>
* Start login server.
*/
public static void listen(int port) {
if (listener != null) {
Logger.printInfo(() -> "Listener already running on port " + port);
return;
}
try {
listener = new LoginRequestListener(port);
listener.start();
Logger.printInfo(() -> "Listener running on port " + port);
} catch (Exception ex) {
Logger.printException(() -> "listen failure", ex);
}
}
/**
* Injection point.
* <br>
* Launch login web view.
*/
public static void login(LayoutInflater inflater) {
try {
WebApp.login(inflater.getContext());
} catch (Exception ex) {
Logger.printException(() -> "login failure", ex);
}
}
}

View File

@@ -0,0 +1,267 @@
package app.revanced.extension.spotify.misc.fix;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Build;
import android.view.*;
import android.webkit.*;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.spotify.UserAgent;
class WebApp {
private static final String OPEN_SPOTIFY_COM = "open.spotify.com";
private static final String OPEN_SPOTIFY_COM_URL = "https://" + OPEN_SPOTIFY_COM;
private static final String OPEN_SPOTIFY_COM_PREFERENCES_URL = OPEN_SPOTIFY_COM_URL + "/preferences";
private static final String ACCOUNTS_SPOTIFY_COM_LOGIN_URL = "https://accounts.spotify.com/login?continue=" +
"https%3A%2F%2Fopen.spotify.com%2Fpreferences";
private static final int GET_SESSION_TIMEOUT_SECONDS = 10;
private static final String JAVASCRIPT_INTERFACE_NAME = "androidInterface";
private static final String USER_AGENT = getWebUserAgent();
/**
* Current webview in use. Any use of the object must be done on the main thread.
*/
@SuppressLint("StaticFieldLeak")
private static volatile WebView currentWebView;
/**
* A session obtained from the webview after logging in or renewing the session.
*/
@Nullable
static volatile Session currentSession;
static void login(Context context) {
Logger.printInfo(() -> "Starting login");
Dialog dialog = new Dialog(context, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
// Ensure that the keyboard does not cover the webview content.
Window window = dialog.getWindow();
//noinspection StatementWithEmptyBody
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
window.getDecorView().setOnApplyWindowInsetsListener((v, insets) -> {
v.setPadding(0, 0, 0, insets.getInsets(WindowInsets.Type.ime()).bottom);
return WindowInsets.CONSUMED;
});
} else {
// TODO: Implement for lower Android versions.
}
newWebView(
// Can't use Utils.getContext() here, because autofill won't work.
// See https://stackoverflow.com/a/79182053/11213244.
context,
new WebViewCallback() {
@Override
void onInitialized(WebView webView) {
// Ensure that cookies are cleared before loading the login page.
CookieManager.getInstance().removeAllCookies((anyRemoved) -> {
Logger.printInfo(() -> "Loading URL: " + ACCOUNTS_SPOTIFY_COM_LOGIN_URL);
webView.loadUrl(ACCOUNTS_SPOTIFY_COM_LOGIN_URL);
});
dialog.setCancelable(false);
dialog.setContentView(webView);
dialog.show();
}
@Override
void onLoggedIn(String cookies) {
dialog.dismiss();
}
@Override
void onReceivedSession(WebView webView, Session session) {
Logger.printInfo(() -> "Received session from login: " + session);
currentSession = session;
currentWebView = null;
webView.stopLoading();
webView.destroy();
}
}
);
}
static void renewSession(String cookies) {
Logger.printInfo(() -> "Renewing session with cookies: " + cookies);
CountDownLatch getSessionLatch = new CountDownLatch(1);
newWebView(
Utils.getContext(),
new WebViewCallback() {
@Override
public void onInitialized(WebView webView) {
Logger.printInfo(() -> "Loading URL: " + OPEN_SPOTIFY_COM_PREFERENCES_URL +
" with cookies: " + cookies);
setCookies(cookies);
webView.loadUrl(OPEN_SPOTIFY_COM_PREFERENCES_URL);
}
@Override
public void onReceivedSession(WebView webView, Session session) {
Logger.printInfo(() -> "Received session: " + session);
currentSession = session;
getSessionLatch.countDown();
currentWebView = null;
webView.stopLoading();
webView.destroy();
}
}
);
try {
final boolean isAcquired = getSessionLatch.await(GET_SESSION_TIMEOUT_SECONDS, TimeUnit.SECONDS);
if (!isAcquired) {
Logger.printException(() -> "Failed to retrieve session within " + GET_SESSION_TIMEOUT_SECONDS + " seconds");
}
} catch (InterruptedException e) {
Logger.printException(() -> "Interrupted while waiting to retrieve session", e);
Thread.currentThread().interrupt();
}
// Cleanup.
currentWebView = null;
}
/**
* All methods are called on the main thread.
*/
abstract static class WebViewCallback {
void onInitialized(WebView webView) {
}
void onLoggedIn(String cookies) {
}
void onReceivedSession(WebView webView, Session session) {
}
}
@SuppressLint("SetJavaScriptEnabled")
private static void newWebView(
Context context,
WebViewCallback webViewCallback
) {
Utils.runOnMainThreadNowOrLater(() -> {
WebView webView = currentWebView;
if (webView != null) {
// Old webview is still hanging around.
// Could happen if the network request failed and thus no callback is made.
// But in practice this never happens.
Logger.printException(() -> "Cleaning up prior webview");
webView.stopLoading();
webView.destroy();
}
webView = new WebView(context);
WebSettings settings = webView.getSettings();
settings.setDomStorageEnabled(true);
settings.setJavaScriptEnabled(true);
settings.setUserAgentString(USER_AGENT);
// WebViewClient is always called off the main thread,
// but callback interface methods are called on the main thread.
webView.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
if (OPEN_SPOTIFY_COM.equals(request.getUrl().getHost())) {
Utils.runOnMainThread(() -> webViewCallback.onLoggedIn(getCurrentCookies()));
}
return super.shouldInterceptRequest(view, request);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Logger.printInfo(() -> "Page started loading: " + url);
if (!url.startsWith(OPEN_SPOTIFY_COM_URL)) {
return;
}
Logger.printInfo(() -> "Evaluating script to get session on url: " + url);
String getSessionScript = "Object.defineProperty(Object.prototype, \"_username\", {" +
" configurable: true," +
" set(username) {" +
" accessToken = this._builder?.accessToken;" +
" if (accessToken) {" +
" " + JAVASCRIPT_INTERFACE_NAME + ".getSession(username, accessToken);" +
" delete Object.prototype._username;" +
" }" +
" " +
" Object.defineProperty(this, \"_username\", {" +
" configurable: true," +
" enumerable: true," +
" writable: true," +
" value: username" +
" })" +
" " +
" }" +
"});";
view.evaluateJavascript(getSessionScript, null);
}
});
final WebView callbackWebView = webView;
webView.addJavascriptInterface(new Object() {
@SuppressWarnings("unused")
@JavascriptInterface
public void getSession(String username, String accessToken) {
Session session = new Session(username, accessToken, getCurrentCookies());
Utils.runOnMainThread(() -> webViewCallback.onReceivedSession(callbackWebView, session));
}
}, JAVASCRIPT_INTERFACE_NAME);
currentWebView = webView;
CookieManager.getInstance().removeAllCookies((anyRemoved) -> {
Logger.printInfo(() -> "WebView initialized with user agent: " + USER_AGENT);
webViewCallback.onInitialized(currentWebView);
});
});
}
private static String getWebUserAgent() {
String userAgentString = WebSettings.getDefaultUserAgent(Utils.getContext());
try {
return new UserAgent(userAgentString)
.withCommentReplaced("Android", "Windows NT 10.0; Win64; x64")
.withoutProduct("Mobile")
.toString();
} catch (IllegalArgumentException e) {
userAgentString = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " +
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edge/137.0.0.0";
String fallback = userAgentString;
Logger.printException(() -> "Failed to get user agent, falling back to " + fallback, e);
}
return userAgentString;
}
private static String getCurrentCookies() {
CookieManager cookieManager = CookieManager.getInstance();
return cookieManager.getCookie(OPEN_SPOTIFY_COM_URL);
}
private static void setCookies(@NonNull String cookies) {
CookieManager cookieManager = CookieManager.getInstance();
String[] cookiesList = cookies.split(";");
for (String cookie : cookiesList) {
cookieManager.setCookie(OPEN_SPOTIFY_COM_URL, cookie);
}
}
}

View File

@@ -0,0 +1,43 @@
syntax = "proto3";
package spotify.login5.v4;
option optimize_for = LITE_RUNTIME;
option java_package = "app.revanced.extension.spotify.login5.v4.proto";
message StoredCredential {
string username = 1;
bytes data = 2;
}
message LoginRequest {
oneof login_method {
StoredCredential stored_credential = 100;
}
}
message LoginOk {
string username = 1;
string access_token = 2;
bytes stored_credential = 3;
int32 access_token_expires_in = 4;
}
message LoginResponse {
oneof response {
LoginOk ok = 1;
LoginError error = 2;
}
}
enum LoginError {
UNKNOWN_ERROR = 0;
INVALID_CREDENTIALS = 1;
BAD_REQUEST = 2;
UNSUPPORTED_LOGIN_PROTOCOL = 3;
TIMEOUT = 4;
UNKNOWN_IDENTIFIER = 5;
TOO_MANY_ATTEMPTS = 6;
INVALID_PHONENUMBER = 7;
TRY_AGAIN_LATER = 8;
}

View File

@@ -1,5 +1,5 @@
plugins {
id(libs.plugins.android.library.get().pluginId)
alias(libs.plugins.android.library)
}
android {

View File

@@ -0,0 +1,6 @@
package com.spotify.browsita.v1.resolved;
public final class Section {
public static final int BRAND_ADS_FIELD_NUMBER = 6;
public int sectionTypeCase_;
}

View File

@@ -0,0 +1,19 @@
plugins {
java
antlr
}
dependencies {
antlr(libs.antlr4)
}
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
tasks {
generateGrammarSource {
arguments = listOf("-visitor")
}
}

View File

@@ -0,0 +1,35 @@
grammar UserAgent;
@header { package app.revanced.extension.spotify; }
userAgent
: product (WS product)* EOF
;
product
: name ('/' version)? (WS comment)?
;
name
: STRING
;
version
: STRING ('.' STRING)*
;
comment
: COMMENT
;
COMMENT
: '(' ~ ')'* ')'
;
STRING
: [a-zA-Z0-9]+
;
WS
: [ \r\n]+
;

View File

@@ -0,0 +1,60 @@
package app.revanced.extension.spotify;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.TokenStreamRewriter;
import org.antlr.v4.runtime.tree.ParseTreeWalker;
public class UserAgent {
private final UserAgentParser.UserAgentContext tree;
private final TokenStreamRewriter rewriter;
private final ParseTreeWalker walker;
public UserAgent(String userAgentString) {
CharStream input = CharStreams.fromString(userAgentString);
UserAgentLexer lexer = new UserAgentLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
tree = new UserAgentParser(tokens).userAgent();
walker = new ParseTreeWalker();
rewriter = new TokenStreamRewriter(tokens);
}
public UserAgent withoutProduct(String name) {
walker.walk(new UserAgentBaseListener() {
@Override
public void exitProduct(UserAgentParser.ProductContext ctx) {
if (!ctx.name().getText().contains(name)) return;
int startIndex = ctx.getStart().getTokenIndex();
if (startIndex != 0) startIndex -= 1; // Also remove the preceding whitespace.
int stopIndex = ctx.getStop().getTokenIndex();
rewriter.delete(startIndex, stopIndex);
}
}, tree);
return new UserAgent(rewriter.getText().trim());
}
public UserAgent withCommentReplaced(String containing, String replacement) {
walker.walk(new UserAgentBaseListener() {
@Override
public void exitComment(UserAgentParser.CommentContext ctx) {
if (ctx.getText().contains(containing)) {
rewriter.replace(ctx.getStart(), ctx.getStop(), "(" + replacement + ")");
}
}
}, tree);
return new UserAgent(rewriter.getText());
}
@Override
public String toString() {
return rewriter.getText();
}
}

View File

@@ -1,5 +1,5 @@
plugins {
id(libs.plugins.android.library.get().pluginId)
alias(libs.plugins.android.library)
}
android {

View File

@@ -1,5 +1,5 @@
plugins {
id(libs.plugins.android.library.get().pluginId)
alias(libs.plugins.android.library)
}
android {

View File

@@ -1,7 +1,7 @@
android.namespace = "app.revanced.extension"
plugins {
id(libs.plugins.android.library.get().pluginId)
alias(libs.plugins.android.library)
}
android {

View File

@@ -1,5 +1,5 @@
plugins {
id(libs.plugins.android.library.get().pluginId)
alias(libs.plugins.android.library)
}
android {

View File

@@ -116,18 +116,17 @@ public final class AdsFilter extends Filter {
shoppingLinks = new StringFilterGroup(
Settings.HIDE_SHOPPING_LINKS,
"expandable_list"
"expandable_list",
"shopping_description_shelf.eml"
);
playerShoppingShelf = new StringFilterGroup(
Settings.HIDE_PLAYER_STORE_SHELF,
"expandable_list.eml",
"horizontal_shelf.eml"
);
playerShoppingShelfBuffer = new ByteArrayFilterGroup(
null,
"shopping_link_item",
"shopping_item_card_list"
);

View File

@@ -52,7 +52,7 @@ final class CommentsFilter extends Filter {
filterChipBar = new StringFilterGroup(
Settings.HIDE_COMMENTS_AI_SUMMARY,
"filter_chip_bar.eml"
"chip_bar.eml"
);
aiCommentsSummary = new ByteArrayFilterGroup(

View File

@@ -4,6 +4,7 @@ import androidx.annotation.Nullable;
import app.revanced.extension.youtube.StringTrieSearch;
import app.revanced.extension.youtube.settings.Settings;
import app.revanced.extension.youtube.shared.PlayerType;
@SuppressWarnings("unused")
final class DescriptionComponentsFilter extends Filter {
@@ -17,6 +18,8 @@ final class DescriptionComponentsFilter extends Filter {
private final StringFilterGroup horizontalShelf;
private final ByteArrayFilterGroup cellVideoAttribute;
private final StringFilterGroup aiGeneratedVideoSummarySection;
public DescriptionComponentsFilter() {
exceptions.addPatterns(
"compact_channel",
@@ -26,7 +29,7 @@ final class DescriptionComponentsFilter extends Filter {
"metadata"
);
final StringFilterGroup aiGeneratedVideoSummarySection = new StringFilterGroup(
aiGeneratedVideoSummarySection = new StringFilterGroup(
Settings.HIDE_AI_GENERATED_VIDEO_SUMMARY_SECTION,
"cell_expandable_metadata.eml"
);
@@ -104,6 +107,12 @@ final class DescriptionComponentsFilter extends Filter {
@Override
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
if (matchedGroup == aiGeneratedVideoSummarySection) {
// Only hide if player is open, in case this component is used somewhere else.
return PlayerType.getCurrent().isMaximizedOrFullscreen();
}
if (exceptions.matches(path)) return false;
if (matchedGroup == macroMarkersCarousel) {

View File

@@ -39,6 +39,7 @@ public final class LayoutComponentsFilter extends Filter {
private final ByteArrayFilterGroup joinMembershipButton;
private final StringFilterGroup horizontalShelves;
private final ByteArrayFilterGroup ticketShelf;
private final StringFilterGroup chipBar;
public LayoutComponentsFilter() {
exceptions.addPatterns(
@@ -105,6 +106,11 @@ public final class LayoutComponentsFilter extends Filter {
"subscriptions_chip_bar"
);
chipBar = new StringFilterGroup(
Settings.HIDE_FILTER_BAR_FEED_IN_HISTORY,
"chip_bar"
);
inFeedSurvey = new StringFilterGroup(
Settings.HIDE_FEED_SURVEY,
"in_feed_survey",
@@ -247,7 +253,7 @@ public final class LayoutComponentsFilter extends Filter {
ticketShelf = new ByteArrayFilterGroup(
Settings.HIDE_TICKET_SHELF,
"ticket"
"ticket.eml"
);
addPathCallbacks(
@@ -272,6 +278,7 @@ public final class LayoutComponentsFilter extends Filter {
emergencyBox,
subscribersCommunityGuidelines,
subscriptionsChipBar,
chipBar,
channelGuidelines,
audioTrackButton,
artistCard,
@@ -314,6 +321,10 @@ public final class LayoutComponentsFilter extends Filter {
return contentIndex == 0 && (hideShelves() || ticketShelf.check(protobufBufferArray).isFiltered());
}
if (matchedGroup == chipBar) {
return contentIndex == 0 && NavigationButton.getSelectedNavigationButton() == NavigationButton.LIBRARY;
}
return true;
}
@@ -448,7 +459,7 @@ public final class LayoutComponentsFilter extends Filter {
}
// Do not hide if the navigation back button is visible,
// otherwise the content shelves in the explore/music/courses pages are hidde.
// otherwise the content shelves in the explore/music/courses pages are hidden.
if (NavigationBar.isBackButtonVisible()) {
return false;
}

View File

@@ -48,7 +48,7 @@ public final class LithoFilterPatch {
/**
* Search through a byte array for all ASCII strings.
*/
private static void findAsciiStrings(StringBuilder builder, byte[] buffer) {
static void findAsciiStrings(StringBuilder builder, byte[] buffer) {
// Valid ASCII values (ignore control characters).
final int minimumAscii = 32; // 32 = space character
final int maximumAscii = 126; // 127 = delete character
@@ -96,7 +96,7 @@ public final class LithoFilterPatch {
private static final class DummyFilter extends Filter { }
private static final Filter[] filters = new Filter[] {
new DummyFilter() // Replaced by patch.
new DummyFilter() // Replaced patching, do not touch.
};
private static final StringTrieSearch pathSearchTree = new StringTrieSearch();
@@ -108,11 +108,7 @@ public final class LithoFilterPatch {
* Because litho filtering is multi-threaded and the buffer is passed in from a different injection point,
* the buffer is saved to a ThreadLocal so each calling thread does not interfere with other threads.
*/
private static final ThreadLocal<ByteBuffer> bufferThreadLocal = new ThreadLocal<>();
/**
* Results of calling {@link #filter(String, StringBuilder)}.
*/
private static final ThreadLocal<Boolean> filterResult = new ThreadLocal<>();
private static final ThreadLocal<byte[]> bufferThreadLocal = new ThreadLocal<>();
static {
for (Filter filter : filters) {
@@ -168,57 +164,50 @@ public final class LithoFilterPatch {
/**
* Injection point. Called off the main thread.
*/
@SuppressWarnings("unused")
public static void setProtoBuffer(@Nullable ByteBuffer protobufBuffer) {
public static void setProtoBuffer(byte[] buffer) {
// Set the buffer to a thread local. The buffer will remain in memory, even after the call to #filter completes.
// This is intentional, as it appears the buffer can be set once and then filtered multiple times.
// The buffer will be cleared from memory after a new buffer is set by the same thread,
// or when the calling thread eventually dies.
if (protobufBuffer == null) {
bufferThreadLocal.set(buffer);
}
/**
* Injection point. Called off the main thread.
* Targets 20.21 and lower.
*/
public static void setProtoBuffer(@Nullable ByteBuffer buffer) {
// Set the buffer to a thread local. The buffer will remain in memory, even after the call to #filter completes.
// This is intentional, as it appears the buffer can be set once and then filtered multiple times.
// The buffer will be cleared from memory after a new buffer is set by the same thread,
// or when the calling thread eventually dies.
if (buffer == null || !buffer.hasArray()) {
// It appears the buffer can be cleared out just before the call to #filter()
// Ignore this null value and retain the last buffer that was set.
Logger.printDebug(() -> "Ignoring null protobuffer");
Logger.printDebug(() -> "Ignoring null or empty buffer: " + buffer);
} else {
bufferThreadLocal.set(protobufBuffer);
setProtoBuffer(buffer.array());
}
}
/**
* Injection point.
*/
public static boolean shouldFilter() {
Boolean shouldFilter = filterResult.get();
return shouldFilter != null && shouldFilter;
}
/**
* Injection point. Called off the main thread, and commonly called by multiple threads at the same time.
*/
public static void filter(@Nullable String lithoIdentifier, StringBuilder pathBuilder) {
filterResult.set(handleFiltering(lithoIdentifier, pathBuilder));
}
private static boolean handleFiltering(@Nullable String lithoIdentifier, StringBuilder pathBuilder) {
public static boolean shouldFilter(@Nullable String lithoIdentifier, StringBuilder pathBuilder) {
try {
if (pathBuilder.length() == 0) {
return false;
}
ByteBuffer protobufBuffer = bufferThreadLocal.get();
final byte[] bufferArray;
byte[] buffer = bufferThreadLocal.get();
// Potentially the buffer may have been null or never set up until now.
// Use an empty buffer so the litho id/path filters still work correctly.
if (protobufBuffer == null) {
bufferArray = EMPTY_BYTE_ARRAY;
} else if (!protobufBuffer.hasArray()) {
Logger.printDebug(() -> "Proto buffer does not have an array, using an empty buffer array");
bufferArray = EMPTY_BYTE_ARRAY;
} else {
bufferArray = protobufBuffer.array();
if (buffer == null) {
buffer = EMPTY_BYTE_ARRAY;
}
LithoFilterParameters parameter = new LithoFilterParameters(lithoIdentifier,
pathBuilder.toString(), bufferArray);
LithoFilterParameters parameter = new LithoFilterParameters(
lithoIdentifier, pathBuilder.toString(), buffer);
Logger.printDebug(() -> "Searching " + parameter);
if (parameter.identifier != null && identifierSearchTree.matches(parameter.identifier, parameter)) {

View File

@@ -44,6 +44,8 @@ public final class ShortsFilter extends Filter {
private final ByteArrayFilterGroup shortsCompactFeedVideoBuffer;
private final StringFilterGroup useSoundButton;
private final ByteArrayFilterGroup useSoundButtonBuffer;
private final StringFilterGroup useTemplateButton;
private final ByteArrayFilterGroup useTemplateButtonBuffer;
private final StringFilterGroup subscribeButton;
private final StringFilterGroup joinButton;
@@ -178,7 +180,10 @@ public final class ShortsFilter extends Filter {
useSoundButton = new StringFilterGroup(
Settings.HIDE_SHORTS_USE_SOUND_BUTTON,
// First filter needed for "Use this sound" that can appear when viewing Shorts
// through the "Short remixing this video" section.
"floating_action_button.eml",
// Second filter needed for "Use this sound" that can appear below the video title.
REEL_METAPANEL_PATH
);
@@ -187,6 +192,17 @@ public final class ShortsFilter extends Filter {
"yt_outline_camera_"
);
useTemplateButton = new StringFilterGroup(
Settings.HIDE_SHORTS_USE_TEMPLATE_BUTTON,
// Second filter needed for "Use this template" that can appear below the video title.
REEL_METAPANEL_PATH
);
useTemplateButtonBuffer = new ByteArrayFilterGroup(
null,
"yt_outline_template_add_"
);
videoActionButton = new StringFilterGroup(
null,
// Can be simply 'button.eml', 'shorts_video_action_button.eml' or 'reel_action_button.eml'
@@ -195,8 +211,7 @@ public final class ShortsFilter extends Filter {
suggestedAction = new StringFilterGroup(
null,
"suggested_action.eml",
REEL_METAPANEL_PATH
"suggested_action.eml"
);
addPathCallbacks(
@@ -268,12 +283,18 @@ public final class ShortsFilter extends Filter {
),
new ByteArrayFilterGroup(
Settings.HIDE_SHORTS_USE_TEMPLATE_BUTTON,
// "Use this template" can appear in two different places.
"yt_outline_template_add_"
),
new ByteArrayFilterGroup(
Settings.HIDE_SHORTS_UPCOMING_BUTTON,
"yt_outline_bell_"
),
new ByteArrayFilterGroup(
Settings.HIDE_SHORTS_EFFECT_BUTTON,
// https://www.gstatic.com/youtube/effects/xeno/arcade/effects/icons/
"/arcade/effects/icons/"
),
new ByteArrayFilterGroup(
Settings.HIDE_SHORTS_GREEN_SCREEN_BUTTON,
"greenscreen_temp"
@@ -312,6 +333,10 @@ public final class ShortsFilter extends Filter {
return useSoundButtonBuffer.check(protobufBufferArray).isFiltered();
}
if (matchedGroup == useTemplateButton) {
return useTemplateButtonBuffer.check(protobufBufferArray).isFiltered();
}
if (matchedGroup == shortsCompactFeedVideo) {
return shouldHideShortsFeedItems() && shortsCompactFeedVideoBuffer.check(protobufBufferArray).isFiltered();
}
@@ -397,17 +422,6 @@ public final class ShortsFilter extends Filter {
};
}
/**
* Injection point. Only used if patching older than 19.03.
* This hook may be obsolete even for old versions
* as they now use a litho layout like newer versions.
*/
public static void hideShortsShelf(final View shortsShelfView) {
if (shouldHideShortsFeedItems()) {
Utils.hideViewByLayoutParams(shortsShelfView);
}
}
public static int getSoundButtonSize(int original) {
if (Settings.HIDE_SHORTS_SOUND_BUTTON.get()) {
return 0;

View File

@@ -5,6 +5,7 @@ import static java.lang.Boolean.TRUE;
import static app.revanced.extension.shared.settings.Setting.Availability;
import static app.revanced.extension.shared.settings.Setting.migrateOldSettingToNew;
import static app.revanced.extension.shared.settings.Setting.parent;
import static app.revanced.extension.shared.settings.Setting.parentsAll;
import static app.revanced.extension.shared.settings.Setting.parentsAny;
import static app.revanced.extension.youtube.patches.ChangeFormFactorPatch.FormFactor;
import static app.revanced.extension.youtube.patches.ChangeStartPagePatch.ChangeStartPageTypeAvailability;
@@ -22,6 +23,7 @@ import static app.revanced.extension.youtube.patches.OpenShortsInRegularPlayerPa
import static app.revanced.extension.youtube.patches.SeekbarThumbnailsPatch.SeekbarThumbnailsHighQualityAvailability;
import static app.revanced.extension.youtube.patches.components.PlayerFlyoutMenuItemsFilter.HideAudioFlyoutMenuAvailability;
import static app.revanced.extension.youtube.patches.theme.ThemePatch.SplashScreenAnimationStyle;
import static app.revanced.extension.youtube.sponsorblock.SegmentPlaybackController.SponsorBlockDuration;
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.IGNORE;
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.MANUAL_SKIP;
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.SKIP_AUTOMATICALLY;
@@ -98,6 +100,7 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_EXPANDABLE_CHIP = new BooleanSetting("revanced_hide_expandable_chip", TRUE);
public static final BooleanSetting HIDE_FEED_SURVEY = new BooleanSetting("revanced_hide_feed_survey", TRUE);
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_FEED = new BooleanSetting("revanced_hide_filter_bar_feed_in_feed", FALSE, true);
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_HISTORY = new BooleanSetting("revanced_hide_filter_bar_feed_in_history", FALSE);
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_RELATED_VIDEOS = new BooleanSetting("revanced_hide_filter_bar_feed_in_related_videos", FALSE, true);
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_SEARCH = new BooleanSetting("revanced_hide_filter_bar_feed_in_search", FALSE, true);
public static final BooleanSetting HIDE_FLOATING_MICROPHONE_BUTTON = new BooleanSetting("revanced_hide_floating_microphone_button", TRUE, true);
@@ -267,6 +270,7 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_SHORTS_COMMENTS_BUTTON = new BooleanSetting("revanced_hide_shorts_comments_button", FALSE);
public static final BooleanSetting HIDE_SHORTS_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_dislike_button", FALSE);
public static final BooleanSetting HIDE_SHORTS_FULL_VIDEO_LINK_LABEL = new BooleanSetting("revanced_hide_shorts_full_video_link_label", FALSE);
public static final BooleanSetting HIDE_SHORTS_EFFECT_BUTTON = new BooleanSetting("revanced_hide_shorts_effect_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_GREEN_SCREEN_BUTTON = new BooleanSetting("revanced_hide_shorts_green_screen_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_NEW_POSTS_BUTTON = new BooleanSetting("revanced_hide_shorts_new_posts_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_HASHTAG_BUTTON = new BooleanSetting("revanced_hide_shorts_hashtag_button", TRUE);
@@ -379,7 +383,11 @@ public class Settings extends BaseSettings {
public static final BooleanSetting SB_SQUARE_LAYOUT = new BooleanSetting("sb_square_layout", FALSE, parent(SB_ENABLED));
public static final BooleanSetting SB_COMPACT_SKIP_BUTTON = new BooleanSetting("sb_compact_skip_button", FALSE, parent(SB_ENABLED));
public static final BooleanSetting SB_AUTO_HIDE_SKIP_BUTTON = new BooleanSetting("sb_auto_hide_skip_button", TRUE, parent(SB_ENABLED));
public static final EnumSetting<SponsorBlockDuration> SB_AUTO_HIDE_SKIP_BUTTON_DURATION = new EnumSetting<>("sb_auto_hide_skip_button_duration",
SponsorBlockDuration.FOUR_SECONDS, parent(SB_ENABLED));
public static final BooleanSetting SB_TOAST_ON_SKIP = new BooleanSetting("sb_toast_on_skip", TRUE, parent(SB_ENABLED));
public static final EnumSetting<SponsorBlockDuration> SB_TOAST_ON_SKIP_DURATION = new EnumSetting<>("sb_toast_on_skip_duration",
SponsorBlockDuration.FOUR_SECONDS, parentsAll(SB_ENABLED, SB_TOAST_ON_SKIP));
public static final BooleanSetting SB_TOAST_ON_CONNECTION_ERROR = new BooleanSetting("sb_toast_on_connection_error", TRUE, parent(SB_ENABLED));
public static final BooleanSetting SB_TRACK_SKIP_COUNT = new BooleanSetting("sb_track_skip_count", TRUE, parent(SB_ENABLED));
public static final FloatSetting SB_SEGMENT_MIN_DURATION = new FloatSetting("sb_min_segment_duration", 0F, parent(SB_ENABLED));

View File

@@ -1,16 +1,37 @@
package app.revanced.extension.youtube.sponsorblock;
import static app.revanced.extension.shared.StringRef.str;
import static app.revanced.extension.shared.Utils.dipToPixels;
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.SKIP_AUTOMATICALLY;
import android.app.Dialog;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.RoundRectShape;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Range;
import android.view.Gravity;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.lang.ref.WeakReference;
import java.lang.reflect.Field;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
@@ -30,20 +51,37 @@ import app.revanced.extension.youtube.sponsorblock.ui.SponsorBlockViewController
* Class is not thread safe. All methods must be called on the main thread unless otherwise specified.
*/
public class SegmentPlaybackController {
/**
* Length of time to show a skip button for a highlight segment,
* or a regular segment if {@link Settings#SB_AUTO_HIDE_SKIP_BUTTON} is enabled.
*
* Effectively this value is rounded up to the next second.
* Enum for configurable durations (1 to 10 seconds) for skip button and toast display.
*/
private static final long DURATION_TO_SHOW_SKIP_BUTTON = 3800;
public enum SponsorBlockDuration {
ONE_SECOND(1),
TWO_SECONDS(2),
THREE_SECONDS(3),
FOUR_SECONDS(4),
FIVE_SECONDS(5),
SIX_SECONDS(6),
SEVEN_SECONDS(7),
EIGHT_SECONDS(8),
NINE_SECONDS(9),
TEN_SECONDS(10);
/**
* Duration, minus 200ms to adjust for exclusive end time checking in scheduled show/hides.
*/
private final long adjustedDuration;
SponsorBlockDuration(int seconds) {
adjustedDuration = seconds * 1000L - 200;
}
}
/*
* Highlight segments have zero length as they are a point in time.
* Draw them on screen using a fixed width bar.
* Value is independent of device dpi.
*/
private static final int HIGHLIGHT_SEGMENT_DRAW_BAR_WIDTH = 7;
private static final int HIGHLIGHT_SEGMENT_DRAW_BAR_WIDTH = dipToPixels(7);
@Nullable
private static String currentVideoId;
@@ -59,7 +97,7 @@ public class SegmentPlaybackController {
/**
* Because loading can take time, show the skip to highlight for a few seconds after the segments load.
* This is the system time (in milliseconds) to no longer show the initial display skip to highlight.
* Value will be zero if no highlight segment exists, or if the system time to show the highlight has passed.
* Value is zero if no highlight segment exists, or if the system time to show the highlight has passed.
*/
private static long highlightSegmentInitialShowEndTime;
@@ -70,7 +108,7 @@ public class SegmentPlaybackController {
private static SponsorSegment segmentCurrentlyPlaying;
/**
* Currently playing manual skip segment that is scheduled to hide.
* This will always be NULL or equal to {@link #segmentCurrentlyPlaying}.
* This is always NULL or equal to {@link #segmentCurrentlyPlaying}.
*/
@Nullable
private static SponsorSegment scheduledHideSegment;
@@ -89,31 +127,71 @@ public class SegmentPlaybackController {
*/
private static final List<SponsorSegment> hiddenSkipSegmentsForCurrentVideoTime = new ArrayList<>();
/**
* Current segments that have been auto skipped.
* If field is non null then the range will always contain the current video time.
* Range is used to prevent auto-skipping after undo.
* Android Range object has inclusive end time, unlike {@link SponsorSegment}.
*/
@Nullable
private static Range<Long> undoAutoSkipRange;
/**
* Range to undo if the toast is tapped.
* Is always null or identical to the last non null value of {@link #undoAutoSkipRange}.
*/
@Nullable
private static Range<Long> undoAutoSkipRangeToast;
/**
* System time (in milliseconds) of when to hide the skip button of {@link #segmentCurrentlyPlaying}.
* Value is zero if playback is not inside a segment ({@link #segmentCurrentlyPlaying} is null),
* or if {@link Settings#SB_AUTO_HIDE_SKIP_BUTTON} is not enabled.
*/
private static long skipSegmentButtonEndTime;
@Nullable
private static String timeWithoutSegments;
private static int sponsorBarAbsoluteLeft;
private static int sponsorAbsoluteBarRight;
private static int sponsorBarThickness;
@Nullable
private static SponsorSegment lastSegmentSkipped;
private static long lastSegmentSkippedTime;
@Nullable
private static SponsorSegment toastSegmentSkipped;
private static int toastNumberOfSegmentsSkipped;
/**
* The last toast dialog showing on screen.
*/
private static WeakReference<Dialog> toastDialogRef = new WeakReference<>(null);
/**
* @return The adjusted duration to show the skip button, in milliseconds.
*/
private static long getSkipButtonDuration() {
return Settings.SB_AUTO_HIDE_SKIP_BUTTON_DURATION.get().adjustedDuration;
}
/**
* @return The adjusted duration to show the skipped toast, in milliseconds.
*/
private static long getToastDuration() {
return Settings.SB_TOAST_ON_SKIP_DURATION.get().adjustedDuration;
}
@Nullable
static SponsorSegment[] getSegments() {
return segments;
}
private static void setSegments(@NonNull SponsorSegment[] videoSegments) {
private static void setSegments(SponsorSegment[] videoSegments) {
Arrays.sort(videoSegments);
segments = videoSegments;
calculateTimeWithoutSegments();
if (SegmentCategory.HIGHLIGHT.behaviour == CategoryBehaviour.SKIP_AUTOMATICALLY
if (SegmentCategory.HIGHLIGHT.behaviour == SKIP_AUTOMATICALLY
|| SegmentCategory.HIGHLIGHT.behaviour == CategoryBehaviour.MANUAL_SKIP) {
for (SponsorSegment segment : videoSegments) {
if (segment.category == SegmentCategory.HIGHLIGHT) {
@@ -125,7 +203,7 @@ public class SegmentPlaybackController {
highlightSegment = null;
}
static void addUnsubmittedSegment(@NonNull SponsorSegment segment) {
static void addUnsubmittedSegment(SponsorSegment segment) {
Objects.requireNonNull(segment);
if (segments == null) {
segments = new SponsorSegment[1];
@@ -140,6 +218,7 @@ public class SegmentPlaybackController {
if (segments == null || segments.length == 0) {
return;
}
List<SponsorSegment> replacement = new ArrayList<>();
for (SponsorSegment segment : segments) {
if (segment.category != SegmentCategory.UNSUBMITTED) {
@@ -156,7 +235,7 @@ public class SegmentPlaybackController {
}
/**
* Clears all downloaded data.
* Clear all data.
*/
private static void clearData() {
currentVideoId = null;
@@ -170,6 +249,8 @@ public class SegmentPlaybackController {
skipSegmentButtonEndTime = 0;
toastSegmentSkipped = null;
toastNumberOfSegmentsSkipped = 0;
undoAutoSkipRange = null;
undoAutoSkipRangeToast = null;
hiddenSkipSegmentsForCurrentVideoTime.clear();
}
@@ -186,7 +267,7 @@ public class SegmentPlaybackController {
SponsorBlockUtils.clearUnsubmittedSegmentTimes();
Logger.printDebug(() -> "Initialized SponsorBlock");
} catch (Exception ex) {
Logger.printException(() -> "Failed to initialize SponsorBlock", ex);
Logger.printException(() -> "initialize failure", ex);
}
}
@@ -203,7 +284,7 @@ public class SegmentPlaybackController {
return;
}
if (PlayerType.getCurrent().isNoneOrHidden()) {
Logger.printDebug(() -> "ignoring Short");
Logger.printDebug(() -> "Ignoring Short");
return;
}
if (!Utils.isNetworkConnected()) {
@@ -212,7 +293,7 @@ public class SegmentPlaybackController {
}
currentVideoId = videoId;
Logger.printDebug(() -> "setCurrentVideoId: " + videoId);
Logger.printDebug(() -> "New video ID: " + videoId);
Utils.runOnBackgroundThread(() -> {
try {
@@ -227,42 +308,39 @@ public class SegmentPlaybackController {
}
/**
* Must be called off main thread
* Must be called off main thread.
*/
static void executeDownloadSegments(@NonNull String videoId) {
static void executeDownloadSegments(String videoId) {
Objects.requireNonNull(videoId);
try {
SponsorSegment[] segments = SBRequester.getSegments(videoId);
Utils.runOnMainThread(()-> {
if (!videoId.equals(currentVideoId)) {
// user changed videos before get segments network call could complete
Logger.printDebug(() -> "Ignoring segments for prior video: " + videoId);
return;
}
setSegments(segments);
SponsorSegment[] segments = SBRequester.getSegments(videoId);
final long videoTime = VideoInformation.getVideoTime();
if (highlightSegment != null) {
// If the current video time is before the highlight.
final long timeUntilHighlight = highlightSegment.start - videoTime;
if (timeUntilHighlight > 0) {
if (highlightSegment.shouldAutoSkip()) {
skipSegment(highlightSegment, false);
return;
}
highlightSegmentInitialShowEndTime = System.currentTimeMillis() + Math.min(
(long) (timeUntilHighlight / VideoInformation.getPlaybackSpeed()),
DURATION_TO_SHOW_SKIP_BUTTON);
Utils.runOnMainThread(() -> {
if (!videoId.equals(currentVideoId)) {
// user changed videos before get segments network call could complete
Logger.printDebug(() -> "Ignoring segments for prior video: " + videoId);
return;
}
setSegments(segments);
final long videoTime = VideoInformation.getVideoTime();
if (highlightSegment != null) {
// If the current video time is before the highlight.
final long timeUntilHighlight = highlightSegment.start - videoTime;
if (timeUntilHighlight > 0) {
if (highlightSegment.shouldAutoSkip()) {
skipSegment(highlightSegment, false);
return;
}
highlightSegmentInitialShowEndTime = System.currentTimeMillis() + Math.min(
(long) (timeUntilHighlight / VideoInformation.getPlaybackSpeed()),
getSkipButtonDuration());
}
}
// check for any skips now, instead of waiting for the next update to setVideoTime()
setVideoTime(videoTime);
});
} catch (Exception ex) {
Logger.printException(() -> "executeDownloadSegments failure", ex);
}
// check for any skips now, instead of waiting for the next update to setVideoTime()
setVideoTime(videoTime);
});
}
/**
@@ -273,8 +351,8 @@ public class SegmentPlaybackController {
public static void setVideoTime(long millis) {
try {
if (!Settings.SB_ENABLED.get()
|| PlayerType.getCurrent().isNoneOrHidden() // Shorts playback.
|| segments == null || segments.length == 0) {
|| PlayerType.getCurrent().isNoneOrHidden() // Shorts playback.
|| segments == null || segments.length == 0) {
return;
}
Logger.printDebug(() -> "setVideoTime: " + millis);
@@ -290,7 +368,7 @@ public class SegmentPlaybackController {
//
// To debug the stale skip logic, set this to a very large value (5000 or more)
// then try manually seeking just before playback reaches a segment skip.
final long speedAdjustedTimeThreshold = (long)(playbackSpeed * 1200);
final long speedAdjustedTimeThreshold = (long) (playbackSpeed * 1200);
final long startTimerLookAheadThreshold = millis + speedAdjustedTimeThreshold;
SponsorSegment foundSegmentCurrentlyPlaying = null;
@@ -298,22 +376,24 @@ public class SegmentPlaybackController {
for (final SponsorSegment segment : segments) {
if (segment.category.behaviour == CategoryBehaviour.SHOW_IN_SEEKBAR
|| segment.category.behaviour == CategoryBehaviour.IGNORE
|| segment.category == SegmentCategory.HIGHLIGHT) {
|| segment.category.behaviour == CategoryBehaviour.IGNORE
|| segment.category == SegmentCategory.HIGHLIGHT) {
continue;
}
if (segment.end <= millis) {
continue; // past this segment
continue; // Past this segment.
}
final boolean segmentShouldAutoSkip = shouldAutoSkipAndUndoSkipNotActive(segment, millis);
if (segment.start <= millis) {
// we are in the segment!
if (segment.shouldAutoSkip()) {
// We are in the segment!
if (segmentShouldAutoSkip) {
skipSegment(segment, false);
return; // must return, as skipping causes a recursive call back into this method
return; // Must return, as skipping causes a recursive call back into this method.
}
// first found segment, or it's an embedded segment and fully inside the outer segment
// First found segment, or it's an embedded segment and fully inside the outer segment.
if (foundSegmentCurrentlyPlaying == null || foundSegmentCurrentlyPlaying.containsSegment(segment)) {
// If the found segment is not currently displayed, then do not show if the segment is nearly over.
// This check prevents the skip button text from rapidly changing when multiple segments end at nearly the same time.
@@ -327,25 +407,27 @@ public class SegmentPlaybackController {
}
}
// Keep iterating and looking. There may be an upcoming autoskip,
// or there may be another smaller segment nested inside this segment
// or there may be another smaller segment nested inside this segment.
continue;
}
// segment is upcoming
// Segment is upcoming.
if (startTimerLookAheadThreshold < segment.start) {
break; // segment is not close enough to schedule, and no segments after this are of interest
// Segment is not close enough to schedule, and no segments after this are of interest.
break;
}
if (segment.shouldAutoSkip()) { // upcoming autoskip
if (segmentShouldAutoSkip) {
foundUpcomingSegment = segment;
break; // must stop here
break; // Must stop here.
}
// upcoming manual skip
// Upcoming manual skip.
// do not schedule upcoming segment, if it is not fully contained inside the current segment
// Do not schedule upcoming segment, if it is not fully contained inside the current segment.
if ((foundSegmentCurrentlyPlaying == null || foundSegmentCurrentlyPlaying.containsSegment(segment))
// use the most inner upcoming segment
&& (foundUpcomingSegment == null || foundUpcomingSegment.containsSegment(segment))) {
// Use the most inner upcoming segment.
&& (foundUpcomingSegment == null || foundUpcomingSegment.containsSegment(segment))) {
// Only schedule, if the segment start time is not near the end time of the current segment.
// This check is needed to prevent scheduled hide and show from clashing with each other.
@@ -361,8 +443,8 @@ public class SegmentPlaybackController {
}
if (highlightSegment != null) {
if (millis < DURATION_TO_SHOW_SKIP_BUTTON || (highlightSegmentInitialShowEndTime != 0
&& System.currentTimeMillis() < highlightSegmentInitialShowEndTime)) {
if (millis < getSkipButtonDuration() || (highlightSegmentInitialShowEndTime != 0
&& System.currentTimeMillis() < highlightSegmentInitialShowEndTime)) {
SponsorBlockViewController.showSkipHighlightButton(highlightSegment);
} else {
highlightSegmentInitialShowEndTime = 0;
@@ -373,16 +455,17 @@ public class SegmentPlaybackController {
if (segmentCurrentlyPlaying != foundSegmentCurrentlyPlaying) {
setSegmentCurrentlyPlaying(foundSegmentCurrentlyPlaying);
} else if (foundSegmentCurrentlyPlaying != null
&& skipSegmentButtonEndTime != 0 && skipSegmentButtonEndTime <= System.currentTimeMillis()) {
&& skipSegmentButtonEndTime != 0
&& skipSegmentButtonEndTime <= System.currentTimeMillis()) {
Logger.printDebug(() -> "Auto hiding skip button for segment: " + segmentCurrentlyPlaying);
skipSegmentButtonEndTime = 0;
hiddenSkipSegmentsForCurrentVideoTime.add(foundSegmentCurrentlyPlaying);
SponsorBlockViewController.hideSkipSegmentButton();
}
// schedule a hide, only if the segment end is near
final SponsorSegment segmentToHide =
(foundSegmentCurrentlyPlaying != null && foundSegmentCurrentlyPlaying.endIsNear(millis, speedAdjustedTimeThreshold))
// Schedule a hide, but only if the segment end is near.
final SponsorSegment segmentToHide = (foundSegmentCurrentlyPlaying != null &&
foundSegmentCurrentlyPlaying.endIsNear(millis, speedAdjustedTimeThreshold))
? foundSegmentCurrentlyPlaying
: null;
@@ -407,7 +490,7 @@ public class SegmentPlaybackController {
final long videoTime = VideoInformation.getVideoTime();
if (!segmentToHide.endIsNear(videoTime, speedAdjustedTimeThreshold)) {
// current video time is not what's expected. User paused playback
// Current video time is not what's expected. User paused playback.
Logger.printDebug(() -> "Ignoring outdated scheduled hide: " + segmentToHide
+ " videoInformation time: " + videoTime);
return;
@@ -416,7 +499,7 @@ public class SegmentPlaybackController {
// Need more than just hide the skip button, as this may have been an embedded segment
// Instead call back into setVideoTime to check everything again.
// Should not use VideoInformation time as it is less accurate,
// but this scheduled handler was scheduled precisely so we can just use the segment end time
// but this scheduled handler was scheduled precisely so we can just use the segment end time.
setSegmentCurrentlyPlaying(null);
setVideoTime(segmentToHide.end);
}, delayUntilHide);
@@ -446,12 +529,12 @@ public class SegmentPlaybackController {
final long videoTime = VideoInformation.getVideoTime();
if (!segmentToSkip.startIsNear(videoTime, speedAdjustedTimeThreshold)) {
// current video time is not what's expected. User paused playback
// Current video time is not what's expected. User paused playback.
Logger.printDebug(() -> "Ignoring outdated scheduled segment: " + segmentToSkip
+ " videoInformation time: " + videoTime);
return;
}
if (segmentToSkip.shouldAutoSkip()) {
if (shouldAutoSkipAndUndoSkipNotActive(segmentToSkip, videoTime)) {
Logger.printDebug(() -> "Running scheduled skip segment: " + segmentToSkip);
skipSegment(segmentToSkip, false);
} else {
@@ -461,6 +544,12 @@ public class SegmentPlaybackController {
}, delayUntilSkip);
}
}
// Clear undo range if video time is outside the segment. Must check last.
if (undoAutoSkipRange != null && !undoAutoSkipRange.contains(millis)) {
Logger.printDebug(() -> "Clearing undo range as current time is now outside range: " + undoAutoSkipRange);
undoAutoSkipRange = null;
}
} catch (Exception e) {
Logger.printException(() -> "setVideoTime failure", e);
}
@@ -470,14 +559,13 @@ public class SegmentPlaybackController {
* Removes all previously hidden segments that are not longer contained in the given video time.
*/
private static void updateHiddenSegments(long currentVideoTime) {
Iterator<SponsorSegment> i = hiddenSkipSegmentsForCurrentVideoTime.iterator();
while (i.hasNext()) {
SponsorSegment hiddenSegment = i.next();
hiddenSkipSegmentsForCurrentVideoTime.removeIf((hiddenSegment) -> {
if (!hiddenSegment.containsTime(currentVideoTime)) {
Logger.printDebug(() -> "Resetting hide skip button: " + hiddenSegment);
i.remove();
return true;
}
}
return false;
});
}
private static void setSegmentCurrentlyPlaying(@Nullable SponsorSegment segment) {
@@ -488,8 +576,10 @@ public class SegmentPlaybackController {
SponsorBlockViewController.hideSkipSegmentButton();
return;
}
segmentCurrentlyPlaying = segment;
skipSegmentButtonEndTime = 0;
if (Settings.SB_AUTO_HIDE_SKIP_BUTTON.get()) {
if (hiddenSkipSegmentsForCurrentVideoTime.contains(segment)) {
// Playback exited a nested segment and the outer segment skip button was previously hidden.
@@ -497,16 +587,13 @@ public class SegmentPlaybackController {
SponsorBlockViewController.hideSkipSegmentButton();
return;
}
skipSegmentButtonEndTime = System.currentTimeMillis() + DURATION_TO_SHOW_SKIP_BUTTON;
skipSegmentButtonEndTime = System.currentTimeMillis() + getSkipButtonDuration();
}
Logger.printDebug(() -> "Showing segment: " + segment);
SponsorBlockViewController.showSkipSegmentButton(segment);
}
private static SponsorSegment lastSegmentSkipped;
private static long lastSegmentSkippedTime;
private static void skipSegment(@NonNull SponsorSegment segmentToSkip, boolean userManuallySkipped) {
private static void skipSegment(SponsorSegment segmentToSkip, boolean userManuallySkipped) {
try {
SponsorBlockViewController.hideSkipHighlightButton();
SponsorBlockViewController.hideSkipSegmentButton();
@@ -525,7 +612,7 @@ public class SegmentPlaybackController {
}
}
Logger.printDebug(() -> "Skipping segment: " + segmentToSkip);
Logger.printDebug(() -> "Skipping segment: " + segmentToSkip + " videoState: " + VideoState.getCurrent());
lastSegmentSkipped = segmentToSkip;
lastSegmentSkippedTime = now;
setSegmentCurrentlyPlaying(null);
@@ -535,29 +622,39 @@ public class SegmentPlaybackController {
highlightSegmentInitialShowEndTime = 0;
}
// Set or update undo skip range.
Range<Long> range = segmentToSkip.getUndoRange();
if (undoAutoSkipRange == null) {
Logger.printDebug(() -> "Setting new undo range to: " + range);
undoAutoSkipRange = range;
} else {
Range<Long> extendedRange = undoAutoSkipRange.extend(range);
Logger.printDebug(() -> "Extending undo range from: " + undoAutoSkipRange +
" to: " + extendedRange);
undoAutoSkipRange = extendedRange;
}
undoAutoSkipRangeToast = undoAutoSkipRange;
// If the seek is successful, then the seek causes a recursive call back into this class.
final boolean seekSuccessful = VideoInformation.seekTo(segmentToSkip.end);
if (!seekSuccessful) {
// can happen when switching videos and is normal
// Can happen when switching videos and is normal.
Logger.printDebug(() -> "Could not skip segment (seek unsuccessful): " + segmentToSkip);
return;
}
final boolean videoIsPaused = VideoState.getCurrent() == VideoState.PAUSED;
if (!userManuallySkipped) {
// check for any smaller embedded segments, and count those as autoskipped
// Check for any smaller embedded segments, and count those as auto-skipped.
final boolean showSkipToast = Settings.SB_TOAST_ON_SKIP.get();
for (final SponsorSegment otherSegment : Objects.requireNonNull(segments)) {
for (SponsorSegment otherSegment : Objects.requireNonNull(segments)) {
if (segmentToSkip.end < otherSegment.start) {
break; // no other segments can be contained
break; // No other segments can be contained.
}
if (otherSegment == segmentToSkip ||
(otherSegment.category != SegmentCategory.HIGHLIGHT && segmentToSkip.containsSegment(otherSegment))) {
otherSegment.didAutoSkipped = true;
// Do not show a toast if the user is scrubbing thru a paused video.
// Cannot do this video state check in setTime or earlier in this method, as the video state may not be up to date.
// So instead, only hide toasts because all other skip logic done while paused causes no harm.
if (showSkipToast && !videoIsPaused) {
if (showSkipToast) {
showSkippedSegmentToast(otherSegment);
}
}
@@ -567,7 +664,7 @@ public class SegmentPlaybackController {
if (segmentToSkip.category == SegmentCategory.UNSUBMITTED) {
removeUnsubmittedSegments();
SponsorBlockUtils.setNewSponsorSegmentPreviewed();
} else if (!videoIsPaused) {
} else if (VideoState.getCurrent() != VideoState.PAUSED) {
SponsorBlockUtils.sendViewRequestAsync(segmentToSkip);
}
} catch (Exception ex) {
@@ -575,29 +672,44 @@ public class SegmentPlaybackController {
}
}
/**
* Checks if the segment should be auto-skipped _and_ if undo autoskip is not active.
*/
private static boolean shouldAutoSkipAndUndoSkipNotActive(SponsorSegment segment, long currentVideoTime) {
return segment.shouldAutoSkip() && (undoAutoSkipRange == null
|| !undoAutoSkipRange.contains(currentVideoTime));
}
private static int toastNumberOfSegmentsSkipped;
@Nullable
private static SponsorSegment toastSegmentSkipped;
private static void showSkippedSegmentToast(@NonNull SponsorSegment segment) {
private static void showSkippedSegmentToast(SponsorSegment segment) {
Utils.verifyOnMainThread();
toastNumberOfSegmentsSkipped++;
if (toastNumberOfSegmentsSkipped > 1) {
return; // toast already scheduled
}
toastSegmentSkipped = segment;
if (toastNumberOfSegmentsSkipped++ > 0) {
return; // Toast is already scheduled.
}
final long delayToToastMilliseconds = 250; // also the maximum time between skips to be considered skipping multiple segments
// Maximum time between skips to be considered skipping multiple segments.
final long delayToToastMilliseconds = 250;
Utils.runOnMainThreadDelayed(() -> {
try {
if (toastSegmentSkipped == null) { // video was changed just after skipping segment
// Do not show a toast if the user is scrubbing thru a paused video.
// Cannot do this video state check in setTime or before calling this this method,
// as the video state may not be up to date. So instead, only ignore the toast
// just before it's about to show since the video state is up to date.
if (VideoState.getCurrent() == VideoState.PAUSED) {
Logger.printDebug(() -> "Ignoring scheduled toast as video state is paused");
return;
}
if (toastSegmentSkipped == null || undoAutoSkipRangeToast == null) {
// Video was changed immediately after skipping segment.
Logger.printDebug(() -> "Ignoring old scheduled show toast");
return;
}
Utils.showToastShort(toastNumberOfSegmentsSkipped == 1
String message = toastNumberOfSegmentsSkipped == 1
? toastSegmentSkipped.getSkippedToastText()
: str("revanced_sb_skipped_multiple_segments"));
: str("revanced_sb_skipped_multiple_segments");
showToastShortWithTapAction(message, undoAutoSkipRangeToast);
} catch (Exception ex) {
Logger.printException(() -> "showSkippedSegmentToast failure", ex);
} finally {
@@ -607,13 +719,128 @@ public class SegmentPlaybackController {
}, delayToToastMilliseconds);
}
private static void showToastShortWithTapAction(String messageToToast, Range<Long> rangeToUndo) {
Objects.requireNonNull(messageToToast);
Utils.verifyOnMainThread();
Context currentContext = SponsorBlockViewController.getOverLaysViewGroupContext();
if (currentContext == null) {
Logger.printException(() -> "Cannot show toast (context is null): " + messageToToast);
return;
}
Logger.printDebug(() -> "Showing toast: " + messageToToast);
Dialog dialog = new Dialog(currentContext);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
// Do not dismiss dialog if tapped outside the dialog bounds.
dialog.setCanceledOnTouchOutside(false);
LinearLayout mainLayout = new LinearLayout(currentContext);
mainLayout.setOrientation(LinearLayout.VERTICAL);
final int dip8 = dipToPixels(8);
final int dip16 = dipToPixels(16);
mainLayout.setPadding(dip16, dip8, dip16, dip8);
mainLayout.setGravity(Gravity.CENTER);
mainLayout.setMinimumHeight(dipToPixels(48));
ShapeDrawable background = new ShapeDrawable(new RoundRectShape(
Utils.createCornerRadii(20), null, null));
background.getPaint().setColor(Utils.getDialogBackgroundColor());
mainLayout.setBackground(background);
TextView textView = new TextView(currentContext);
textView.setText(messageToToast);
textView.setTextSize(14);
textView.setTextColor(Utils.getAppForegroundColor());
textView.setGravity(Gravity.CENTER);
LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
textParams.gravity = Gravity.CENTER;
textView.setLayoutParams(textParams);
mainLayout.addView(textView);
mainLayout.setAlpha(0.8f); // Opacity for the entire dialog.
final int fadeDurationFast = Utils.getResourceInteger("fade_duration_fast");
Animation fadeIn = Utils.getResourceAnimation("fade_in");
Animation fadeOut = Utils.getResourceAnimation("fade_out");
fadeIn.setDuration(fadeDurationFast);
fadeOut.setDuration(fadeDurationFast);
fadeOut.setAnimationListener(new Animation.AnimationListener() {
public void onAnimationStart(Animation animation) { }
public void onAnimationEnd(Animation animation) {
if (dialog.isShowing()) {
dialog.dismiss();
}
}
public void onAnimationRepeat(Animation animation) { }
});
mainLayout.setOnClickListener(v -> {
try {
Logger.printDebug(() -> "Undoing autoskip using range: " + rangeToUndo);
// Restore undo autoskip range since it's already cleared by now.
undoAutoSkipRange = rangeToUndo;
VideoInformation.seekTo(rangeToUndo.getLower());
mainLayout.startAnimation(fadeOut);
} catch (Exception ex) {
Logger.printException(() -> "showToastShortWithTapAction setOnClickListener failure", ex);
dialog.dismiss();
}
});
mainLayout.setClickable(true);
dialog.setContentView(mainLayout);
Window window = dialog.getWindow();
if (window != null) {
// Remove window animations and use custom fade animation.
window.setWindowAnimations(0);
WindowManager.LayoutParams params = window.getAttributes();
params.gravity = Gravity.BOTTOM;
params.y = dipToPixels(72);
DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics();
int portraitWidth = (int) (displayMetrics.widthPixels * 0.6);
if (Resources.getSystem().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
portraitWidth = (int) Math.min(portraitWidth, displayMetrics.heightPixels * 0.6);
}
params.width = portraitWidth;
params.dimAmount = 0.0f;
window.setAttributes(params);
window.setBackgroundDrawable(null);
window.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
window.addFlags(WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
}
Dialog priorDialog = toastDialogRef.get();
if (priorDialog != null && priorDialog.isShowing()) {
Logger.printDebug(() -> "Removing previous skip toast that is still on screen: " + priorDialog);
priorDialog.dismiss();
}
toastDialogRef = new WeakReference<>(dialog);
mainLayout.startAnimation(fadeIn);
dialog.show();
// Fade out and dismiss the dialog if the user does not undo the skip.
Utils.runOnMainThreadDelayed(() -> {
if (dialog.isShowing()) {
mainLayout.startAnimation(fadeOut);
}
}, getToastDuration());
}
/**
* @param segment can be either a highlight or a regular manual skip segment.
*/
public static void onSkipSegmentClicked(@NonNull SponsorSegment segment) {
public static void onSkipSegmentClicked(SponsorSegment segment) {
try {
if (segment != highlightSegment && segment != segmentCurrentlyPlaying) {
Logger.printException(() -> "error: segment not available to skip"); // should never happen
Logger.printException(() -> "error: segment not available to skip"); // Should never happen.
SponsorBlockViewController.hideSkipSegmentButton();
SponsorBlockViewController.hideSkipHighlightButton();
return;
@@ -628,7 +855,7 @@ public class SegmentPlaybackController {
* Injection point
*/
@SuppressWarnings("unused")
public static void setSponsorBarRect(final Object self) {
public static void setSponsorBarRect(Object self) {
try {
Field field = self.getClass().getDeclaredField("replaceMeWithsetSponsorBarRect");
field.setAccessible(true);
@@ -651,7 +878,7 @@ public class SegmentPlaybackController {
private static void setSponsorBarAbsoluteRight(Rect rect) {
final int right = rect.right;
if (sponsorAbsoluteBarRight != right) {
Logger.printDebug(() -> "setSponsorBarAbsoluteRight: " + right);
Logger.printDebug(() -> "setSponsorBarAbsoluteRight: " + right);
sponsorAbsoluteBarRight = right;
}
}
@@ -726,12 +953,6 @@ public class SegmentPlaybackController {
}
}
/**
* Actual screen pixel width to use for the highlight segment time bar.
*/
private static final int highlightSegmentTimeBarScreenWidth
= Utils.dipToPixels(HIGHLIGHT_SEGMENT_DRAW_BAR_WIDTH);
/**
* Injection point.
*/
@@ -752,9 +973,9 @@ public class SegmentPlaybackController {
final float left = leftPadding + segment.start * videoMillisecondsToPixels;
final float right;
if (segment.category == SegmentCategory.HIGHLIGHT) {
right = left + highlightSegmentTimeBarScreenWidth;
right = left + HIGHLIGHT_SEGMENT_DRAW_BAR_WIDTH;
} else {
right = leftPadding + segment.end * videoMillisecondsToPixels;
right = leftPadding + segment.end * videoMillisecondsToPixels;
}
canvas.drawRect(left, top, right, bottom, segment.category.paint);
}
@@ -762,5 +983,4 @@ public class SegmentPlaybackController {
Logger.printException(() -> "drawSponsorTimeBars failure", ex);
}
}
}

View File

@@ -223,13 +223,18 @@ public class SponsorBlockUtils {
Logger.printException(() -> "invalid parameters");
return;
}
clearUnsubmittedSegmentTimes();
Utils.runOnBackgroundThread(() -> {
SBRequester.submitSegments(videoId, segmentCategory.keyValue, start, end, videoLength);
SegmentPlaybackController.executeDownloadSegments(videoId);
try {
SBRequester.submitSegments(videoId, segmentCategory.keyValue, start, end, videoLength);
SegmentPlaybackController.executeDownloadSegments(videoId);
} catch (Exception ex) {
Logger.printException(() -> "submitNewSegment failure", ex);
}
});
} catch (Exception e) {
Logger.printException(() -> "Unable to submit segment", e);
} catch (Exception ex) {
Logger.printException(() -> "submitNewSegment failure", ex);
}
}
@@ -366,7 +371,7 @@ public class SponsorBlockUtils {
}
static void sendViewRequestAsync(@NonNull SponsorSegment segment) {
static void sendViewRequestAsync(SponsorSegment segment) {
if (segment.recordedAsSkipped || segment.category == SegmentCategory.UNSUBMITTED) {
return;
}
@@ -409,7 +414,7 @@ public class SponsorBlockUtils {
return statsNumberFormatter.format(viewCount);
}
private static long parseSegmentTime(@NonNull String time) {
private static long parseSegmentTime(String time) {
Matcher matcher = manualEditTimePattern.matcher(time);
if (!matcher.matches()) {
return -1;
@@ -419,9 +424,12 @@ public class SponsorBlockUtils {
String secondsStr = matcher.group(4);
String millisecondsStr = matcher.group(6); // Milliseconds is optional.
try {
final int hours = (hoursStr != null) ? Integer.parseInt(hoursStr) : 0;
//noinspection ConstantConditions
final int minutes = Integer.parseInt(minutesStr);
//noinspection ConstantConditions
final int seconds = Integer.parseInt(secondsStr);
final int milliseconds;
if (millisecondsStr != null) {
@@ -468,32 +476,29 @@ public class SponsorBlockUtils {
}
public static String getTimeSavedString(long totalSecondsSaved) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
Duration duration = Duration.ofSeconds(totalSecondsSaved);
final long hours = duration.toHours();
final long minutes = duration.toMinutes() % 60;
Duration duration = Duration.ofSeconds(totalSecondsSaved);
final long hours = duration.toHours();
final long minutes = duration.toMinutes() % 60;
// Format all numbers so non-western numbers use a consistent appearance.
String minutesFormatted = statsNumberFormatter.format(minutes);
if (hours > 0) {
String hoursFormatted = statsNumberFormatter.format(hours);
return str("revanced_sb_stats_saved_hour_format", hoursFormatted, minutesFormatted);
}
final long seconds = duration.getSeconds() % 60;
String secondsFormatted = statsNumberFormatter.format(seconds);
if (minutes > 0) {
return str("revanced_sb_stats_saved_minute_format", minutesFormatted, secondsFormatted);
}
return str("revanced_sb_stats_saved_second_format", secondsFormatted);
// Format all numbers so non-western numbers use a consistent appearance.
String minutesFormatted = statsNumberFormatter.format(minutes);
if (hours > 0) {
String hoursFormatted = statsNumberFormatter.format(hours);
return str("revanced_sb_stats_saved_hour_format", hoursFormatted, minutesFormatted);
}
return "error"; // will never be reached. YouTube requires Android O or greater
final long seconds = duration.getSeconds() % 60;
String secondsFormatted = statsNumberFormatter.format(seconds);
if (minutes > 0) {
return str("revanced_sb_stats_saved_minute_format", minutesFormatted, secondsFormatted);
}
return str("revanced_sb_stats_saved_second_format", secondsFormatted);
}
private static class EditByHandSaveDialogListener implements DialogInterface.OnClickListener {
boolean settingStart;
WeakReference<EditText> editTextRef = new WeakReference<>(null);
private boolean settingStart;
private WeakReference<EditText> editTextRef = new WeakReference<>(null);
@Override
public void onClick(DialogInterface dialog, int which) {
@@ -512,10 +517,11 @@ public class SponsorBlockUtils {
}
}
if (settingStart)
if (settingStart) {
newSponsorSegmentStartMillis = Math.max(time, 0);
else
} else {
newSponsorSegmentEndMillis = time;
}
if (which == DialogInterface.BUTTON_NEUTRAL)
editByHandDialogListener.onClick(dialog, settingStart ?

View File

@@ -9,7 +9,10 @@ import java.util.Objects;
import static app.revanced.extension.shared.StringRef.sf;
import android.util.Range;
public class SponsorSegment implements Comparable<SponsorSegment> {
public enum SegmentVote {
UPVOTE(sf("revanced_sb_vote_upvote"), 1,false),
DOWNVOTE(sf("revanced_sb_vote_downvote"), 0, true),
@@ -38,7 +41,7 @@ public class SponsorSegment implements Comparable<SponsorSegment> {
@NonNull
public final SegmentCategory category;
/**
* NULL if segment is unsubmitted
* NULL if segment is unsubmitted.
*/
@Nullable
public final String UUID;
@@ -64,33 +67,54 @@ public class SponsorSegment implements Comparable<SponsorSegment> {
}
/**
* @param nearThreshold threshold to declare the time parameter is near this segment. Must be a positive number
* @param nearThreshold threshold to declare the time parameter is near this segment. Must be a positive number.
*/
public boolean startIsNear(long videoTime, long nearThreshold) {
return Math.abs(start - videoTime) <= nearThreshold;
}
/**
* @param nearThreshold threshold to declare the time parameter is near this segment. Must be a positive number
* @param nearThreshold threshold to declare the time parameter is near this segment. Must be a positive number.
*/
public boolean endIsNear(long videoTime, long nearThreshold) {
return Math.abs(end - videoTime) <= nearThreshold;
}
/**
* @return if the time parameter is within this segment
* @return if the time parameter is within this segment.
*/
public boolean containsTime(long videoTime) {
return start <= videoTime && videoTime < end;
}
/**
* @return if the segment is completely contained inside this segment
* @return if the segment is completely contained inside this segment.
*/
public boolean containsSegment(SponsorSegment other) {
return start <= other.start && other.end <= end;
}
/**
* @return If the range has any overlap with this segment.
*/
public boolean intersectsRange(Range<Long> range) {
return range.getLower() < end && range.getUpper() >= start;
}
/**
* @return The start/end time in range form.
* Range times are adjusted since it uses inclusive and Segments use exclusive.
*
* {@link SegmentCategory#HIGHLIGHT} is unique and
* returns a range from the start of the video until the highlight.
*/
public Range<Long> getUndoRange() {
final long undoStart = category == SegmentCategory.HIGHLIGHT
? 0
: start;
return Range.create(undoStart, end - 1);
}
/**
* @return the length of this segment, in milliseconds. Always a positive number.
*/
@@ -99,7 +123,7 @@ public class SponsorSegment implements Comparable<SponsorSegment> {
}
/**
* @return 'skip segment' UI overlay button text
* @return 'skip segment' UI overlay button text.
*/
@NonNull
public String getSkipButtonText() {
@@ -107,7 +131,7 @@ public class SponsorSegment implements Comparable<SponsorSegment> {
}
/**
* @return 'skipped segment' toast message
* @return 'skipped segment' toast message.
*/
@NonNull
public String getSkippedToastText() {

View File

@@ -53,7 +53,7 @@ public class SBRequester {
private SBRequester() {
}
private static void handleConnectionError(@NonNull String toastMessage, @Nullable Exception ex) {
private static void handleConnectionError(String toastMessage, @Nullable Exception ex) {
if (Settings.SB_TOAST_ON_CONNECTION_ERROR.get()) {
Utils.showToastShort(toastMessage);
}
@@ -63,7 +63,7 @@ public class SBRequester {
}
@NonNull
public static SponsorSegment[] getSegments(@NonNull String videoId) {
public static SponsorSegment[] getSegments(String videoId) {
Utils.verifyOffMainThread();
List<SponsorSegment> segments = new ArrayList<>();
try {
@@ -113,10 +113,10 @@ public class SBRequester {
Logger.printException(() -> "getSegments failure", ex);
}
// Crude debug tests to verify random features
// Crude debug tests to verify random features.
// Could benefit from:
// 1) collection of YouTube videos with test segment times (verify client skip timing matches the video, verify seekbar draws correctly)
// 2) unit tests (verify everything else)
// 1) Collection of YouTube videos with test segment times (verify client skip timing matches the video, verify seekbar draws correctly).
// 2) Unit tests (verify everything else).
//noinspection ConstantValue
if (false) {
segments.clear();
@@ -140,10 +140,30 @@ public class SBRequester {
segments.add(new SponsorSegment(SegmentCategory.SELF_PROMO, "debug", 200000, 330000, false));
}
// Test undo skip functionality.
// To test enable 'Autoskip always' for intro and self promo.
//noinspection ConstantValue
if (false) {
// Should autoskip to 12 seconds.
// Undoing skip should seek to 2 seconds.
// Skip button should show at 2 seconds, and again at 8 seconds.
// Self promo at 8 second time should not autoskip.
segments.clear();
segments.add(new SponsorSegment(SegmentCategory.INTRO, "debug", 2000, 12000, false));
segments.add(new SponsorSegment(SegmentCategory.SELF_PROMO, "debug", 8000, 15000, false));
// Test multiple autoskip dialogs rapidly showing.
// Only one toast should be shown at anytime.
segments.add(new SponsorSegment(SegmentCategory.INTRO, "debug", 16000, 17000, false));
segments.add(new SponsorSegment(SegmentCategory.INTRO, "debug", 18000, 19000, false));
segments.add(new SponsorSegment(SegmentCategory.INTRO, "debug", 20000, 21000, false));
segments.add(new SponsorSegment(SegmentCategory.INTRO, "debug", 22000, 23000, false));
}
return segments.toArray(new SponsorSegment[0]);
}
public static void submitSegments(@NonNull String videoId, @NonNull String category,
public static void submitSegments(String videoId, String category,
long startTime, long endTime, long videoLength) {
Utils.verifyOffMainThread();
@@ -189,7 +209,7 @@ public class SBRequester {
}
}
public static void sendSegmentSkippedViewedRequest(@NonNull SponsorSegment segment) {
public static void sendSegmentSkippedViewedRequest(SponsorSegment segment) {
Utils.verifyOffMainThread();
try {
HttpURLConnection connection = getConnectionFromRoute(SBRoutes.VIEWED_SEGMENT, segment.UUID);
@@ -208,13 +228,13 @@ public class SBRequester {
}
}
public static void voteForSegmentOnBackgroundThread(@NonNull SponsorSegment segment, @NonNull SegmentVote voteOption) {
public static void voteForSegmentOnBackgroundThread(SponsorSegment segment, SegmentVote voteOption) {
voteOrRequestCategoryChange(segment, voteOption, null);
}
public static void voteToChangeCategoryOnBackgroundThread(@NonNull SponsorSegment segment, @NonNull SegmentCategory categoryToVoteFor) {
public static void voteToChangeCategoryOnBackgroundThread(SponsorSegment segment, SegmentCategory categoryToVoteFor) {
voteOrRequestCategoryChange(segment, SegmentVote.CATEGORY_CHANGE, categoryToVoteFor);
}
private static void voteOrRequestCategoryChange(@NonNull SponsorSegment segment, @NonNull SegmentVote voteOption, SegmentCategory categoryToVoteFor) {
private static void voteOrRequestCategoryChange(SponsorSegment segment, SegmentVote voteOption, SegmentCategory categoryToVoteFor) {
Utils.runOnBackgroundThread(() -> {
try {
String segmentUuid = segment.UUID;
@@ -280,7 +300,7 @@ public class SBRequester {
* @return NULL if the call was successful. If unsuccessful, an error message is returned.
*/
@Nullable
public static String setUsername(@NonNull String username) {
public static String setUsername(String username) {
Utils.verifyOffMainThread();
try {
HttpURLConnection connection = getConnectionFromRoute(SBRoutes.CHANGE_USERNAME, SponsorBlockSettings.getSBPrivateUserID(), username);
@@ -320,14 +340,14 @@ public class SBRequester {
// helpers
private static HttpURLConnection getConnectionFromRoute(@NonNull Route route, String... params) throws IOException {
private static HttpURLConnection getConnectionFromRoute(Route route, String... params) throws IOException {
HttpURLConnection connection = Requester.getConnectionFromRoute(Settings.SB_API_URL.get(), route, params);
connection.setConnectTimeout(TIMEOUT_TCP_DEFAULT_MILLISECONDS);
connection.setReadTimeout(TIMEOUT_HTTP_DEFAULT_MILLISECONDS);
return connection;
}
private static JSONObject getJSONObject(@NonNull Route route, String... params) throws IOException, JSONException {
private static JSONObject getJSONObject(Route route, String... params) throws IOException, JSONException {
return Requester.parseJSONObject(getConnectionFromRoute(route, params));
}
}

View File

@@ -1,6 +1,7 @@
package app.revanced.extension.youtube.sponsorblock.ui;
import static app.revanced.extension.shared.StringRef.str;
import static app.revanced.extension.youtube.sponsorblock.SegmentPlaybackController.SponsorBlockDuration;
import android.annotation.SuppressLint;
import android.app.Dialog;
@@ -28,6 +29,7 @@ import java.util.List;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.preference.CustomDialogListPreference;
import app.revanced.extension.shared.settings.preference.ResettableEditTextPreference;
import app.revanced.extension.youtube.settings.Settings;
import app.revanced.extension.youtube.sponsorblock.SegmentPlaybackController;
@@ -62,6 +64,8 @@ public class SponsorBlockPreferenceGroup extends PreferenceGroup {
private SwitchPreference trackSkips;
private SwitchPreference showTimeWithoutSegments;
private SwitchPreference toastOnConnectionError;
private CustomDialogListPreference autoHideSkipSegmentButtonDuration;
private CustomDialogListPreference showSkipToastDuration;
private ResettableEditTextPreference newSegmentStep;
private ResettableEditTextPreference minSegmentDuration;
@@ -69,8 +73,8 @@ public class SponsorBlockPreferenceGroup extends PreferenceGroup {
private EditTextPreference importExport;
private Preference apiUrl;
private final List<SegmentCategoryListPreference> segmentCategories = new ArrayList<>();
private PreferenceCategory segmentCategory;
private final List<SegmentCategoryListPreference> segmentCategories = new ArrayList<>();
public SponsorBlockPreferenceGroup(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
@@ -114,17 +118,23 @@ public class SponsorBlockPreferenceGroup extends PreferenceGroup {
votingEnabled.setChecked(Settings.SB_VOTING_BUTTON.get());
votingEnabled.setEnabled(enabled);
autoHideSkipSegmentButton.setEnabled(enabled);
autoHideSkipSegmentButton.setChecked(Settings.SB_AUTO_HIDE_SKIP_BUTTON.get());
autoHideSkipSegmentButton.setEnabled(enabled);
autoHideSkipSegmentButtonDuration.setValue(Settings.SB_AUTO_HIDE_SKIP_BUTTON_DURATION.get().toString());
autoHideSkipSegmentButtonDuration.setEnabled(Settings.SB_AUTO_HIDE_SKIP_BUTTON_DURATION.isAvailable());
compactSkipButton.setChecked(Settings.SB_COMPACT_SKIP_BUTTON.get());
compactSkipButton.setEnabled(enabled);
showSkipToast.setChecked(Settings.SB_TOAST_ON_SKIP.get());
showSkipToast.setEnabled(enabled);
squareLayout.setChecked(Settings.SB_SQUARE_LAYOUT.get());
squareLayout.setEnabled(enabled);
showSkipToast.setChecked(Settings.SB_TOAST_ON_SKIP.get());
showSkipToast.setEnabled(enabled);
showSkipToastDuration.setValue(Settings.SB_TOAST_ON_SKIP_DURATION.get().toString());
showSkipToastDuration.setEnabled(Settings.SB_TOAST_ON_SKIP_DURATION.isAvailable());
toastOnConnectionError.setChecked(Settings.SB_TOAST_ON_CONNECTION_ERROR.get());
toastOnConnectionError.setEnabled(enabled);
@@ -166,7 +176,7 @@ public class SponsorBlockPreferenceGroup extends PreferenceGroup {
try {
super.onAttachedToActivity();
if (preferencesInitialized) {
if (preferencesInitialized) {
if (settingsImported) {
settingsImported = false;
updateUI();
@@ -205,17 +215,6 @@ public class SponsorBlockPreferenceGroup extends PreferenceGroup {
});
appearanceCategory.addPreference(votingEnabled);
autoHideSkipSegmentButton = new SwitchPreference(context);
autoHideSkipSegmentButton.setTitle(str("revanced_sb_enable_auto_hide_skip_segment_button"));
autoHideSkipSegmentButton.setSummaryOn(str("revanced_sb_enable_auto_hide_skip_segment_button_sum_on"));
autoHideSkipSegmentButton.setSummaryOff(str("revanced_sb_enable_auto_hide_skip_segment_button_sum_off"));
autoHideSkipSegmentButton.setOnPreferenceChangeListener((preference1, newValue) -> {
Settings.SB_AUTO_HIDE_SKIP_BUTTON.save((Boolean) newValue);
updateUI();
return true;
});
appearanceCategory.addPreference(autoHideSkipSegmentButton);
compactSkipButton = new SwitchPreference(context);
compactSkipButton.setTitle(str("revanced_sb_enable_compact_skip_button"));
compactSkipButton.setSummaryOn(str("revanced_sb_enable_compact_skip_button_sum_on"));
@@ -227,25 +226,38 @@ public class SponsorBlockPreferenceGroup extends PreferenceGroup {
});
appearanceCategory.addPreference(compactSkipButton);
squareLayout = new SwitchPreference(context);
squareLayout.setTitle(str("revanced_sb_square_layout"));
squareLayout.setSummaryOn(str("revanced_sb_square_layout_sum_on"));
squareLayout.setSummaryOff(str("revanced_sb_square_layout_sum_off"));
squareLayout.setOnPreferenceChangeListener((preference1, newValue) -> {
Settings.SB_SQUARE_LAYOUT.save((Boolean) newValue);
autoHideSkipSegmentButton = new SwitchPreference(context);
autoHideSkipSegmentButton.setTitle(str("revanced_sb_enable_auto_hide_skip_segment_button"));
autoHideSkipSegmentButton.setSummaryOn(str("revanced_sb_enable_auto_hide_skip_segment_button_sum_on"));
autoHideSkipSegmentButton.setSummaryOff(str("revanced_sb_enable_auto_hide_skip_segment_button_sum_off"));
autoHideSkipSegmentButton.setOnPreferenceChangeListener((preference1, newValue) -> {
Settings.SB_AUTO_HIDE_SKIP_BUTTON.save((Boolean) newValue);
updateUI();
return true;
});
appearanceCategory.addPreference(squareLayout);
appearanceCategory.addPreference(autoHideSkipSegmentButton);
String[] durationEntries = Utils.getResourceStringArray("revanced_sb_duration_entries");
String[] durationEntryValues = Utils.getResourceStringArray("revanced_sb_duration_entry_values");
autoHideSkipSegmentButtonDuration = new CustomDialogListPreference(context);
autoHideSkipSegmentButtonDuration.setTitle(str("revanced_sb_auto_hide_skip_button_duration"));
autoHideSkipSegmentButtonDuration.setSummary(str("revanced_sb_auto_hide_skip_button_duration_sum"));
autoHideSkipSegmentButtonDuration.setEntries(durationEntries);
autoHideSkipSegmentButtonDuration.setEntryValues(durationEntryValues);
autoHideSkipSegmentButtonDuration.setOnPreferenceChangeListener((preference1, newValue) -> {
Settings.SB_AUTO_HIDE_SKIP_BUTTON_DURATION.save(
SponsorBlockDuration.valueOf((String) newValue)
);
updateUI();
return true;
});
appearanceCategory.addPreference(autoHideSkipSegmentButtonDuration);
showSkipToast = new SwitchPreference(context);
showSkipToast.setTitle(str("revanced_sb_general_skiptoast"));
showSkipToast.setSummaryOn(str("revanced_sb_general_skiptoast_sum_on"));
showSkipToast.setSummaryOff(str("revanced_sb_general_skiptoast_sum_off"));
showSkipToast.setOnPreferenceClickListener(preference1 -> {
Utils.showToastShort(str("revanced_sb_skipped_sponsor"));
return false;
});
showSkipToast.setOnPreferenceChangeListener((preference1, newValue) -> {
Settings.SB_TOAST_ON_SKIP.save((Boolean) newValue);
updateUI();
@@ -253,6 +265,20 @@ public class SponsorBlockPreferenceGroup extends PreferenceGroup {
});
appearanceCategory.addPreference(showSkipToast);
showSkipToastDuration = new CustomDialogListPreference(context);
showSkipToastDuration.setTitle(str("revanced_sb_toast_on_skip_duration"));
showSkipToastDuration.setSummary(str("revanced_sb_toast_on_skip_duration_sum"));
showSkipToastDuration.setEntries(durationEntries);
showSkipToastDuration.setEntryValues(durationEntryValues);
showSkipToastDuration.setOnPreferenceChangeListener((preference1, newValue) -> {
Settings.SB_TOAST_ON_SKIP_DURATION.save(
SponsorBlockDuration.valueOf((String) newValue)
);
updateUI();
return true;
});
appearanceCategory.addPreference(showSkipToastDuration);
showTimeWithoutSegments = new SwitchPreference(context);
showTimeWithoutSegments.setTitle(str("revanced_sb_general_time_without"));
showTimeWithoutSegments.setSummaryOn(str("revanced_sb_general_time_without_sum_on"));
@@ -264,6 +290,17 @@ public class SponsorBlockPreferenceGroup extends PreferenceGroup {
});
appearanceCategory.addPreference(showTimeWithoutSegments);
squareLayout = new SwitchPreference(context);
squareLayout.setTitle(str("revanced_sb_square_layout"));
squareLayout.setSummaryOn(str("revanced_sb_square_layout_sum_on"));
squareLayout.setSummaryOff(str("revanced_sb_square_layout_sum_off"));
squareLayout.setOnPreferenceChangeListener((preference1, newValue) -> {
Settings.SB_SQUARE_LAYOUT.save((Boolean) newValue);
updateUI();
return true;
});
appearanceCategory.addPreference(squareLayout);
segmentCategory = new PreferenceCategory(context);
segmentCategory.setTitle(str("revanced_sb_diff_segments"));
addPreference(segmentCategory);

View File

@@ -203,7 +203,7 @@ public class SponsorBlockViewController {
setSkipButtonMargins(skipSponsorButton, isWatchFullScreen);
setViewVisibility(skipSponsorButton, skipSegment != null);
} catch (Exception ex) {
Logger.printException(() -> "Player type changed failure", ex);
Logger.printException(() -> "playerTypeChanged failure", ex);
}
}

View File

@@ -1,5 +1,5 @@
plugins {
id(libs.plugins.android.library.get().pluginId)
alias(libs.plugins.android.library)
}
android {

View File

@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
org.gradle.parallel = true
android.useAndroidX = true
kotlin.code.style = official
version = 5.29.0-dev.8
version = 5.30.0-dev.5

View File

@@ -11,14 +11,25 @@ appcompat = "1.7.0"
okhttp = "5.0.0-alpha.14"
retrofit = "2.11.0"
guava = "33.4.0-jre"
protobuf-javalite = "4.31.1"
protoc = "4.31.1"
protobuf = "0.9.5"
antlr4 = "4.13.2"
nanohttpd = "2.3.1"
apksig = "8.10.1"
[libraries]
annotation = { module = "androidx.annotation:annotation", version.ref = "annotation" }
antlr4 = { module = "org.antlr:antlr4", version.ref = "antlr4" }
appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
nanohttpd = { module = "org.nanohttpd:nanohttpd", version.ref = "nanohttpd" }
okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" }
protobuf-javalite = { module = "com.google.protobuf:protobuf-javalite", version.ref = "protobuf-javalite" }
protobuf-protoc = { module = "com.google.protobuf:protoc", version.ref = "protoc" }
retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
guava = { module = "com.google.guava:guava", version.ref = "guava" }
apksig = { group = "com.android.tools.build", name = "apksig", version.ref = "apksig" }
[plugins]
android-library = { id = "com.android.library", version.ref = "agp" }
android-library = { id = "com.android.library" }
protobuf = { id = "com.google.protobuf", version.ref = "protobuf" }

View File

@@ -1,8 +1,6 @@
#Mon Jun 16 14:39:32 CEST 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=d725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
networkTimeout=10000
validateDistributionUrl=true
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@@ -116,6 +116,10 @@ public final class app/revanced/patches/all/misc/shortcut/sharetargets/RemoveSha
public static final fun getRemoveShareTargetsPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
}
public final class app/revanced/patches/all/misc/spoof/SignatureSpoofPatchKt {
public static final fun getSignatureSpoofPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
}
public final class app/revanced/patches/all/misc/targetSdk/SetTargetSdkVersion34Kt {
public static final fun getSetTargetSdkVersion34 ()Lapp/revanced/patcher/patch/ResourcePatch;
}
@@ -160,6 +164,10 @@ public final class app/revanced/patches/cieid/restrictions/root/BypassRootChecks
public static final fun getBypassRootChecksPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/cricbuzz/ads/DisableAdsPatchKt {
public static final fun getDisableAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/crunchyroll/ads/HideAdsPatchKt {
public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@@ -660,17 +668,39 @@ public final class app/revanced/patches/shared/misc/gms/GmsCoreSupportPatchKt {
public static synthetic fun gmsCoreSupportResourcePatch$default (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patcher/patch/Option;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/ResourcePatch;
}
public final class app/revanced/patches/shared/misc/hex/HexPatchKt {
public static final fun hexPatch (Lkotlin/jvm/functions/Function0;)Lapp/revanced/patcher/patch/RawResourcePatch;
public final class app/revanced/patches/shared/misc/hex/HexPatchBuilder : java/util/Set, kotlin/jvm/internal/markers/KMappedMarker {
public fun <init> ()V
public fun add (Lapp/revanced/patches/shared/misc/hex/Replacement;)Z
public synthetic fun add (Ljava/lang/Object;)Z
public fun addAll (Ljava/util/Collection;)Z
public final fun asPatternTo (Ljava/lang/String;Ljava/lang/String;)Lkotlin/Pair;
public fun clear ()V
public fun contains (Lapp/revanced/patches/shared/misc/hex/Replacement;)Z
public final fun contains (Ljava/lang/Object;)Z
public fun containsAll (Ljava/util/Collection;)Z
public fun getSize ()I
public final fun inFile (Lkotlin/Pair;Ljava/lang/String;)V
public fun isEmpty ()Z
public fun iterator ()Ljava/util/Iterator;
public fun remove (Ljava/lang/Object;)Z
public fun removeAll (Ljava/util/Collection;)Z
public fun retainAll (Ljava/util/Collection;)Z
public final fun size ()I
public fun toArray ()[Ljava/lang/Object;
public fun toArray ([Ljava/lang/Object;)[Ljava/lang/Object;
}
public final class app/revanced/patches/shared/misc/hex/HexPatchBuilderKt {
public static final fun hexPatch (ZLkotlin/jvm/functions/Function0;)Lapp/revanced/patcher/patch/RawResourcePatch;
public static final fun hexPatch (ZLkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/RawResourcePatch;
public static synthetic fun hexPatch$default (ZLkotlin/jvm/functions/Function0;ILjava/lang/Object;)Lapp/revanced/patcher/patch/RawResourcePatch;
public static synthetic fun hexPatch$default (ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/RawResourcePatch;
}
public final class app/revanced/patches/shared/misc/hex/Replacement {
public static final field Companion Lapp/revanced/patches/shared/misc/hex/Replacement$Companion;
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
public final fun replacePattern ([B)V
}
public final class app/revanced/patches/shared/misc/hex/Replacement$Companion {
public fun <init> ([B[BLjava/lang/String;)V
public final fun getReplacementBytesPadded ()[B
}
public final class app/revanced/patches/shared/misc/mapping/ResourceElement {
@@ -914,6 +944,10 @@ public final class app/revanced/patches/spotify/misc/extension/ExtensionPatchKt
public static final fun getSharedExtensionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/spotify/misc/fix/SpoofClientPatchKt {
public static final fun getSpoofClientPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/spotify/misc/fix/SpoofPackageInfoPatchKt {
public static final fun getSpoofPackageInfoPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}

View File

@@ -15,6 +15,9 @@ patches {
dependencies {
// Required due to smali, or build fails. Can be removed once smali is bumped.
implementation(libs.guava)
implementation(libs.apksig)
// Android API stubs defined here.
compileOnly(project(":patches:stub"))
}

View File

@@ -3,7 +3,7 @@ package app.revanced.patches.all.misc.hex
import app.revanced.patcher.patch.PatchException
import app.revanced.patcher.patch.rawResourcePatch
import app.revanced.patcher.patch.stringsOption
import app.revanced.patches.shared.misc.hex.Replacement
import app.revanced.patches.shared.misc.hex.HexPatchBuilder
import app.revanced.patches.shared.misc.hex.hexPatch
import app.revanced.util.Utils.trimIndentMultiline
@@ -13,44 +13,42 @@ val hexPatch = rawResourcePatch(
description = "Replaces a hexadecimal patterns of bytes of files in an APK.",
use = false,
) {
// TODO: Instead of stringArrayOption, use a custom option type to work around
// https://github.com/ReVanced/revanced-library/issues/48.
// Replace the custom option type with a stringArrayOption once the issue is resolved.
val replacements by stringsOption(
key = "replacements",
title = "Replacements",
description = """
Hexadecimal patterns to search for and replace with another in a target file.
A pattern is a sequence of case insensitive strings, each representing hexadecimal bytes, separated by spaces.
An example pattern is 'aa 01 02 FF'.
Every pattern must be followed by a pipe ('|'), the replacement pattern,
another pipe ('|'), and the path to the file to make the changes in relative to the APK root.
The replacement pattern must have the same length as the original pattern.
The replacement pattern must be shorter or equal in length to the pattern.
Full example of a valid input:
'aa 01 02 FF|00 00 00 00|path/to/file'
Full example of a valid replacement:
'01 02 aa FF|03 04|path/to/file'
""".trimIndentMultiline(),
required = true,
)
dependsOn(
hexPatch {
replacements!!.map { from ->
val (pattern, replacementPattern, targetFilePath) = try {
from.split("|", limit = 3)
} catch (e: Exception) {
throw PatchException(
"Invalid input: $from.\n" +
"Every pattern must be followed by a pipe ('|'), " +
"the replacement pattern, another pipe ('|'), " +
"and the path to the file to make the changes in relative to the APK root. ",
)
hexPatch(
block = fun HexPatchBuilder.() {
replacements!!.forEach { replacement ->
try {
val (pattern, replacementPattern, targetFilePath) = replacement.split("|", limit = 3)
pattern asPatternTo replacementPattern inFile targetFilePath
} catch (e: Exception) {
throw PatchException(
"Invalid replacement: $replacement.\n" +
"Every pattern must be followed by a pipe ('|'), " +
"the replacement pattern, another pipe ('|'), " +
"and the path to the file to make the changes in relative to the APK root. ",
)
}
}
Replacement(pattern, replacementPattern, targetFilePath)
}.toSet()
},
},
)
)
}

View File

@@ -0,0 +1,95 @@
package app.revanced.patches.all.misc.spoof
import app.revanced.patcher.patch.resourcePatch
import app.revanced.patcher.patch.stringOption
import app.revanced.util.getNode
import com.android.apksig.ApkVerifier
import com.android.apksig.apk.ApkFormatException
import org.w3c.dom.Element
import java.io.ByteArrayInputStream
import java.io.IOException
import java.nio.file.Files
import java.nio.file.InvalidPathException
import java.nio.file.attribute.BasicFileAttributes
import java.security.NoSuchAlgorithmException
import java.security.cert.CertificateException
import java.security.cert.CertificateFactory
import java.util.*
import kotlin.io.path.Path
val signatureSpoofPatch = resourcePatch(
name = "Spoof app signature",
description = "Spoofs the app signature via the \"fake-signature\" meta key. " +
"This patch only works with patched device roms.",
use = false,
) {
val signature by stringOption(
key = "spoofedAppSignature",
title = "Signature",
validator = { signature ->
optionToSignature(signature) != null
},
description = "The hex-encoded signature or path to an apk file with the desired signature",
required = true,
)
execute {
document("AndroidManifest.xml").use { document ->
val manifest = document.getNode("manifest") as Element
val fakeSignaturePermission = document.createElement("uses-permission")
fakeSignaturePermission.setAttribute("android:name", "android.permission.FAKE_PACKAGE_SIGNATURE")
manifest.appendChild(fakeSignaturePermission)
val application = document.getNode("application") ?: {
val child = document.createElement("application")
manifest.appendChild(child)
child
} as Element;
val fakeSignatureMetadata = document.createElement("meta-data")
fakeSignatureMetadata.setAttribute("android:name", "fake-signature")
fakeSignatureMetadata.setAttribute("android:value", optionToSignature(signature))
application.appendChild(fakeSignatureMetadata)
}
}
}
internal fun optionToSignature(signature: String?): String? {
if (signature == null) {
return null;
}
try {
// TODO: Replace with signature.hexToByteArray when stable in kotlin
val signatureBytes = HexFormat.of()
.parseHex(signature)
val factory = CertificateFactory.getInstance("X.509")
factory.generateCertificate(ByteArrayInputStream(signatureBytes))
return signature;
} catch (_: IllegalArgumentException) {
} catch (_: CertificateException) {
}
try {
val signaturePath = Path(signature)
if (!Files.readAttributes(signaturePath, BasicFileAttributes::class.java).isRegularFile) {
return null;
}
val verifier = ApkVerifier.Builder(signaturePath.toFile())
.build()
val result = verifier.verify()
if (result.isVerifiedUsingV3Scheme) {
return HexFormat.of().formatHex(result.v3SchemeSigners[0].certificate.encoded)
} else if (result.isVerifiedUsingV2Scheme) {
return HexFormat.of().formatHex(result.v2SchemeSigners[0].certificate.encoded)
} else if (result.isVerifiedUsingV1Scheme) {
return HexFormat.of().formatHex(result.v1SchemeSigners[0].certificate.encoded)
}
return null;
} catch (_: IOException) {
} catch (_: InvalidPathException) {
} catch (_: ApkFormatException) {
} catch (_: NoSuchAlgorithmException) {
} catch (_: IllegalArgumentException) {}
return null;
}

View File

@@ -0,0 +1,27 @@
package app.revanced.patches.cricbuzz.ads
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.indexOfFirstInstructionOrThrow
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@Suppress("unused")
val disableAdsPatch = bytecodePatch (
name = "Hide ads",
) {
compatibleWith("com.cricbuzz.android"("6.23.02"))
execute {
userStateSwitchFingerprint.method.apply {
val opcodeIndex = indexOfFirstInstructionOrThrow(Opcode.MOVE_RESULT_OBJECT)
val register = getInstruction<OneRegisterInstruction>(opcodeIndex).registerA
addInstruction(
opcodeIndex + 1,
"const-string v$register, \"ACTIVE\""
)
}
}
}

View File

@@ -0,0 +1,9 @@
package app.revanced.patches.cricbuzz.ads
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.Opcode
internal val userStateSwitchFingerprint = fingerprint {
strings("key.user.state", "NA")
opcodes(Opcode.SPARSE_SWITCH)
}

View File

@@ -1,123 +0,0 @@
package app.revanced.patches.shared.misc.hex
import app.revanced.patcher.patch.PatchException
import app.revanced.patcher.patch.rawResourcePatch
import kotlin.math.max
// The replacements being passed using a function is intended.
// Previously the replacements were a property of the patch. Getter were being delegated to that property.
// This late evaluation was being leveraged in app.revanced.patches.all.misc.hex.HexPatch.
// Without the function, the replacements would be evaluated at the time of patch creation.
// This isn't possible because the delegated property is not accessible at that time.
fun hexPatch(replacementsSupplier: () -> Set<Replacement>) = rawResourcePatch {
execute {
replacementsSupplier().groupBy { it.targetFilePath }.forEach { (targetFilePath, replacements) ->
val targetFile = try {
get(targetFilePath, true)
} catch (e: Exception) {
throw PatchException("Could not find target file: $targetFilePath")
}
// TODO: Use a file channel to read and write the file instead of reading the whole file into memory,
// in order to reduce memory usage.
val targetFileBytes = targetFile.readBytes()
replacements.forEach { replacement ->
replacement.replacePattern(targetFileBytes)
}
targetFile.writeBytes(targetFileBytes)
}
}
}
/**
* Represents a pattern to search for and its replacement pattern.
*
* @property pattern The pattern to search for.
* @property replacementPattern The pattern to replace the [pattern] with.
* @property targetFilePath The path to the file to make the changes in relative to the APK root.
*/
class Replacement(
private val pattern: String,
replacementPattern: String,
internal val targetFilePath: String,
) {
private val patternBytes = pattern.toByteArrayPattern()
private val replacementPattern = replacementPattern.toByteArrayPattern()
init {
if (this.patternBytes.size != this.replacementPattern.size) {
throw PatchException("Pattern and replacement pattern must have the same length: $pattern")
}
}
/**
* Replaces the [patternBytes] with the [replacementPattern] in the [targetFileBytes].
*
* @param targetFileBytes The bytes of the file to make the changes in.
*/
fun replacePattern(targetFileBytes: ByteArray) {
val startIndex = indexOfPatternIn(targetFileBytes)
if (startIndex == -1) {
throw PatchException("Pattern not found in target file: $pattern")
}
replacementPattern.copyInto(targetFileBytes, startIndex)
}
// TODO: Allow searching in a file channel instead of a byte array to reduce memory usage.
/**
* Returns the index of the first occurrence of [patternBytes] in the haystack
* using the Boyer-Moore algorithm.
*
* @param haystack The array to search in.
*
* @return The index of the first occurrence of the [patternBytes] in the haystack or -1
* if the [patternBytes] is not found.
*/
private fun indexOfPatternIn(haystack: ByteArray): Int {
val needle = patternBytes
val haystackLength = haystack.size - 1
val needleLength = needle.size - 1
val right = IntArray(256) { -1 }
for (i in 0 until needleLength) right[needle[i].toInt().and(0xFF)] = i
var skip: Int
for (i in 0..haystackLength - needleLength) {
skip = 0
for (j in needleLength - 1 downTo 0) {
if (needle[j] != haystack[i + j]) {
skip = max(1, j - right[haystack[i + j].toInt().and(0xFF)])
break
}
}
if (skip == 0) return i
}
return -1
}
companion object {
/**
* Convert a string representing a pattern of hexadecimal bytes to a byte array.
*
* @return The byte array representing the pattern.
* @throws PatchException If the pattern is invalid.
*/
private fun String.toByteArrayPattern() = try {
split(" ").map { it.toInt(16).toByte() }.toByteArray()
} catch (e: NumberFormatException) {
throw PatchException(
"Could not parse pattern: $this. A pattern is a sequence of case insensitive strings " +
"representing hexadecimal bytes separated by spaces",
e,
)
}
}
}

View File

@@ -0,0 +1,154 @@
package app.revanced.patches.shared.misc.hex
import app.revanced.patcher.patch.PatchException
import app.revanced.patcher.patch.rawResourcePatch
import kotlin.collections.component1
import kotlin.collections.component2
import kotlin.math.max
fun hexPatch(ignoreMissingTargetFiles: Boolean = false, block: HexPatchBuilder.() -> Unit) =
hexPatch(ignoreMissingTargetFiles, fun(): Set<Replacement> = HexPatchBuilder().apply(block))
@Suppress("JavaDefaultMethodsNotOverriddenByDelegation")
class HexPatchBuilder internal constructor(
private val replacements: MutableSet<Replacement> = mutableSetOf(),
) : Set<Replacement> by replacements {
infix fun String.asPatternTo(replacementPattern: String) = byteArrayOf(this) to byteArrayOf(replacementPattern)
infix fun <T> Pair<T, T>.inFile(filePath: String) {
if (first is String && second is String) {
val first = first as String
val second = second as String
replacements += Replacement(
first.toByteArray(), second.toByteArray(),
filePath
)
} else if (first is ByteArray && second is ByteArray) {
val first = first as ByteArray
val second = second as ByteArray
replacements += Replacement(first, second, filePath)
} else {
throw PatchException("Unsupported types for pattern and replacement: $first, $second")
}
}
}
// The replacements being passed using a function is intended.
// Previously the replacements were a property of the patch. Getter were being delegated to that property.
// This late evaluation was being leveraged in app.revanced.patches.all.misc.hex.HexPatch.
// Without the function, the replacements would be evaluated at the time of patch creation.
// This isn't possible because the delegated property is not accessible at that time.
@Deprecated("Use the hexPatch function with the builder parameter instead.")
fun hexPatch(ignoreMissingTargetFiles: Boolean = false, replacementsSupplier: () -> Set<Replacement>) =
rawResourcePatch {
execute {
replacementsSupplier().groupBy { it.targetFilePath }.forEach { (targetFilePath, replacements) ->
val targetFile = get(targetFilePath, true)
if (ignoreMissingTargetFiles && !targetFile.exists()) return@forEach
// TODO: Use a file channel to read and write the file instead of reading the whole file into memory,
// in order to reduce memory usage.
val targetFileBytes = targetFile.readBytes()
replacements.forEach { it.replacePattern(targetFileBytes) }
targetFile.writeBytes(targetFileBytes)
}
}
}
/**
* Represents a pattern to search for and its replacement pattern in a file.
*
* @property bytes The bytes to search for.
* @property replacementBytes The bytes to replace the [bytes] with.
* @property targetFilePath The path to the file to make the changes in relative to the APK root.
*/
class Replacement(
private val bytes: ByteArray,
replacementBytes: ByteArray,
internal val targetFilePath: String,
) {
val replacementBytesPadded = replacementBytes + ByteArray(bytes.size - replacementBytes.size)
@Deprecated("Use the constructor with ByteArray parameters instead.")
constructor(
pattern: String,
replacementPattern: String,
targetFilePath: String,
) : this(
byteArrayOf(pattern),
byteArrayOf(replacementPattern),
targetFilePath
)
/**
* Replaces the [bytes] with the [replacementBytes] in the [targetFileBytes].
*
* @param targetFileBytes The bytes of the file to make the changes in.
*/
internal fun replacePattern(targetFileBytes: ByteArray) {
val startIndex = indexOfPatternIn(targetFileBytes)
if (startIndex == -1) {
throw PatchException(
"Pattern not found in target file: " +
bytes.joinToString(" ") { "%02x".format(it) }
)
}
replacementBytesPadded.copyInto(targetFileBytes, startIndex)
}
// TODO: Allow searching in a file channel instead of a byte array to reduce memory usage.
/**
* Returns the index of the first occurrence of [bytes] in the haystack
* using the Boyer-Moore algorithm.
*
* @param haystack The array to search in.
*
* @return The index of the first occurrence of the [bytes] in the haystack or -1
* if the [bytes] is not found.
*/
private fun indexOfPatternIn(haystack: ByteArray): Int {
val needle = bytes
val haystackLength = haystack.size - 1
val needleLength = needle.size - 1
val right = IntArray(256) { -1 }
for (i in 0 until needleLength) right[needle[i].toInt().and(0xFF)] = i
var skip: Int
for (i in 0..haystackLength - needleLength) {
skip = 0
for (j in needleLength - 1 downTo 0) {
if (needle[j] != haystack[i + j]) {
skip = max(1, j - right[haystack[i + j].toInt().and(0xFF)])
break
}
}
if (skip == 0) return i
}
return -1
}
}
/**
* Convert a string representing a pattern of hexadecimal bytes to a byte array.
*
* @return The byte array representing the pattern.
* @throws PatchException If the pattern is invalid.
*/
private fun byteArrayOf(pattern: String) = try {
pattern.split(" ").map { it.toInt(16).toByte() }.toByteArray()
} catch (e: NumberFormatException) {
throw PatchException(
"Could not parse pattern: $pattern. A pattern is a sequence of case insensitive strings " +
"representing hexadecimal bytes separated by spaces",
e,
)
}

View File

@@ -93,18 +93,28 @@ internal val abstractProtobufListEnsureIsMutableFingerprint = fingerprint {
}
}
internal val homeSectionFingerprint = fingerprint {
custom { _, classDef -> classDef.endsWith("homeapi/proto/Section;") }
}
internal val homeStructureGetSectionsFingerprint = fingerprint {
private fun structureGetSectionsFingerprint(className: String) = fingerprint {
custom { method, classDef ->
classDef.endsWith("homeapi/proto/HomeStructure;") && method.indexOfFirstInstruction {
classDef.endsWith(className) && method.indexOfFirstInstruction {
opcode == Opcode.IGET_OBJECT && getReference<FieldReference>()?.name == "sections_"
} >= 0
}
}
internal val homeSectionFingerprint = fingerprint {
custom { _, classDef -> classDef.endsWith("homeapi/proto/Section;") }
}
internal val homeStructureGetSectionsFingerprint =
structureGetSectionsFingerprint("homeapi/proto/HomeStructure;")
internal val browseSectionFingerprint = fingerprint {
custom { _, classDef -> classDef.endsWith("browsita/v1/resolved/Section;") }
}
internal val browseStructureGetSectionsFingerprint =
structureGetSectionsFingerprint("browsita/v1/resolved/BrowseStructure;")
internal fun reactivexFunctionApplyWithClassInitFingerprint(className: String) = fingerprint {
returns("Ljava/lang/Object;")
parameters("Ljava/lang/Object;")

View File

@@ -1,9 +1,29 @@
package app.revanced.patches.spotify.misc.fix
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val getPackageInfoFingerprint = fingerprint {
strings(
"Failed to get the application signatures"
)
}
internal val startLiborbitFingerprint = fingerprint {
strings("/liborbit-jni-spotify.so")
}
internal val startupPageLayoutInflateFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Landroid/view/View;")
parameters("Landroid/view/LayoutInflater;", "Landroid/view/ViewGroup;", "Landroid/os/Bundle;")
strings("blueprintContainer", "gradient", "valuePropositionTextView")
}
internal val standardIntegrityTokenProviderBuilderFingerprint = fingerprint {
strings(
"standard_pi_init",
"outcome",
"success"
)
}

View File

@@ -0,0 +1,126 @@
package app.revanced.patches.spotify.misc.fix
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patcher.patch.intOption
import app.revanced.patches.shared.misc.hex.HexPatchBuilder
import app.revanced.patches.shared.misc.hex.hexPatch
import app.revanced.patches.spotify.misc.extension.sharedExtensionPatch
import app.revanced.util.findInstructionIndicesReversedOrThrow
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionReversedOrThrow
import app.revanced.util.returnEarly
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/spotify/misc/fix/SpoofClientPatch;"
@Suppress("unused")
val spoofClientPatch = bytecodePatch(
name = "Spoof client",
description = "Spoofs the client to fix various functions of the app.",
) {
val port by intOption(
key = "port",
default = 4345,
title = " Login request listener port",
description = "The port to use for the listener that intercepts and handles login requests. " +
"Port must be between 0 and 65535.",
required = true,
validator = {
it!!
!(it < 0 || it > 65535)
}
)
dependsOn(
sharedExtensionPatch,
hexPatch(ignoreMissingTargetFiles = true, block = fun HexPatchBuilder.() {
listOf(
"arm64-v8a",
"armeabi-v7a",
"x86",
"x86_64"
).forEach { architecture ->
"https://login5.spotify.com/v3/login" to "http://127.0.0.1:$port/v3/login" inFile
"lib/$architecture/liborbit-jni-spotify.so"
"https://login5.spotify.com/v4/login" to "http://127.0.0.1:$port/v4/login" inFile
"lib/$architecture/liborbit-jni-spotify.so"
}
})
)
compatibleWith("com.spotify.music")
execute {
getPackageInfoFingerprint.method.apply {
// region Spoof signature.
val failedToGetSignaturesStringIndex =
getPackageInfoFingerprint.stringMatches!!.first().index
val concatSignaturesIndex = indexOfFirstInstructionReversedOrThrow(
failedToGetSignaturesStringIndex,
Opcode.MOVE_RESULT_OBJECT,
)
val signatureRegister = getInstruction<OneRegisterInstruction>(concatSignaturesIndex).registerA
val expectedSignature = "d6a6dced4a85f24204bf9505ccc1fce114cadb32"
replaceInstruction(concatSignaturesIndex, "const-string v$signatureRegister, \"$expectedSignature\"")
// endregion
// region Spoof installer name.
val expectedInstallerName = "com.android.vending"
findInstructionIndicesReversedOrThrow {
val reference = getReference<MethodReference>()
reference?.name == "getInstallerPackageName" || reference?.name == "getInstallingPackageName"
}.forEach { index ->
val returnObjectIndex = index + 1
val installerPackageNameRegister = getInstruction<OneRegisterInstruction>(
returnObjectIndex
).registerA
addInstruction(
returnObjectIndex + 1,
"const-string v$installerPackageNameRegister, \"$expectedInstallerName\""
)
}
// endregion
}
startLiborbitFingerprint.method.addInstructions(
0,
"""
const/16 v0, $port
invoke-static { v0 }, $EXTENSION_CLASS_DESCRIPTOR->listen(I)V
"""
)
startupPageLayoutInflateFingerprint.method.apply {
val openLoginWebViewDescriptor =
"$EXTENSION_CLASS_DESCRIPTOR->login(Landroid/view/LayoutInflater;)V"
addInstructions(
0,
"""
move-object/from16 v3, p1
invoke-static { v3 }, $openLoginWebViewDescriptor
"""
)
}
// Early return to block sending bad verdicts to the API.
standardIntegrityTokenProviderBuilderFingerprint.method.returnEarly()
}
}

View File

@@ -1,63 +1,11 @@
package app.revanced.patches.spotify.misc.fix
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.findInstructionIndicesReversedOrThrow
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionReversedOrThrow
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
@Deprecated("Superseded by spoofClientPatch", ReplaceWith("spoofClientPatch"))
@Suppress("unused")
val spoofPackageInfoPatch = bytecodePatch(
name = "Spoof package info",
description = "Spoofs the package info of the app to fix various functions of the app.",
) {
compatibleWith("com.spotify.music")
execute {
getPackageInfoFingerprint.method.apply {
// region Spoof signature.
val failedToGetSignaturesStringIndex =
getPackageInfoFingerprint.stringMatches!!.first().index
val concatSignaturesIndex = indexOfFirstInstructionReversedOrThrow(
failedToGetSignaturesStringIndex,
Opcode.MOVE_RESULT_OBJECT,
)
val signatureRegister = getInstruction<OneRegisterInstruction>(concatSignaturesIndex).registerA
val expectedSignature = "d6a6dced4a85f24204bf9505ccc1fce114cadb32"
replaceInstruction(concatSignaturesIndex, "const-string v$signatureRegister, \"$expectedSignature\"")
// endregion
// region Spoof installer name.
val expectedInstallerName = "com.android.vending"
findInstructionIndicesReversedOrThrow {
val reference = getReference<MethodReference>()
reference?.name == "getInstallerPackageName" || reference?.name == "getInstallingPackageName"
}.forEach { index ->
val returnObjectIndex = index + 1
val installerPackageNameRegister = getInstruction<OneRegisterInstruction>(
returnObjectIndex
).registerA
addInstruction(
returnObjectIndex + 1,
"const-string v$installerPackageNameRegister, \"$expectedInstallerName\""
)
}
// endregion
}
}
dependsOn(spoofClientPatch)
}

View File

@@ -2,10 +2,10 @@ package app.revanced.patches.spotify.misc.fix
import app.revanced.patcher.patch.bytecodePatch
@Deprecated("Superseded by spoofPackageInfoPatch", ReplaceWith("spoofPackageInfoPatch"))
@Deprecated("Superseded by spoofClientPatch", ReplaceWith("spoofClientPatch"))
@Suppress("unused")
val spoofSignaturePatch = bytecodePatch(
description = "Spoofs the signature of the app fix various functions of the app.",
) {
dependsOn(spoofPackageInfoPatch)
dependsOn(spoofClientPatch)
}

View File

@@ -201,6 +201,7 @@ val hideLayoutComponentsPatch = bytecodePatch(
key = "revanced_hide_filter_bar_screen",
preferences = setOf(
SwitchPreference("revanced_hide_filter_bar_feed_in_feed"),
SwitchPreference("revanced_hide_filter_bar_feed_in_history"),
SwitchPreference("revanced_hide_filter_bar_feed_in_search"),
SwitchPreference("revanced_hide_filter_bar_feed_in_related_videos"),
),

View File

@@ -97,6 +97,7 @@ private val hideShortsComponentsResourcePatch = resourcePatch {
SwitchPreference("revanced_hide_shorts_use_sound_button"),
SwitchPreference("revanced_hide_shorts_use_template_button"),
SwitchPreference("revanced_hide_shorts_upcoming_button"),
SwitchPreference("revanced_hide_shorts_effect_button"),
SwitchPreference("revanced_hide_shorts_green_screen_button"),
SwitchPreference("revanced_hide_shorts_hashtag_button"),
SwitchPreference("revanced_hide_shorts_new_posts_button"),

View File

@@ -7,26 +7,18 @@ import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal val componentContextParserFingerprint = fingerprint {
strings(
"TreeNode result must be set.",
// String is a partial match and changed slightly in 20.03+
"it was removed due to duplicate converter bindings."
)
strings("Number of bits must be positive")
}
/**
* Resolves to the class found in [componentContextParserFingerprint].
* When patching 19.16 this fingerprint matches the same method as [componentContextParserFingerprint].
*/
internal val componentContextSubParserFingerprint = fingerprint {
internal val componentCreateFingerprint = fingerprint {
strings(
"Number of bits must be positive"
"Element missing correct type extension",
"Element missing type"
)
}
internal val lithoFilterFingerprint = fingerprint {
accessFlags(AccessFlags.STATIC, AccessFlags.CONSTRUCTOR)
returns("V")
custom { _, classDef ->
classDef.endsWith("/LithoFilterPatch;")
}
@@ -58,7 +50,7 @@ internal val lithoThreadExecutorFingerprint = fingerprint {
parameters("I", "I", "I")
custom { method, classDef ->
classDef.superclass == "Ljava/util/concurrent/ThreadPoolExecutor;" &&
method.containsLiteralInstruction(1L) // 1L = default thread timeout.
method.containsLiteralInstruction(1L) // 1L = default thread timeout.
}
}

View File

@@ -9,13 +9,13 @@ import app.revanced.patcher.extensions.InstructionExtensions.removeInstructions
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.playservice.is_19_17_or_greater
import app.revanced.patches.youtube.misc.playservice.is_19_25_or_greater
import app.revanced.patches.youtube.misc.playservice.is_20_05_or_greater
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
import app.revanced.patches.youtube.shared.conversionContextFingerprintToString
import app.revanced.util.addInstructionsAtControlFlowLabel
import app.revanced.util.findFreeRegister
import app.revanced.util.findInstructionIndicesReversedOrThrow
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.indexOfFirstInstructionReversedOrThrow
@@ -24,7 +24,6 @@ import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
lateinit var addLithoFilter: (String) -> Unit
private set
@@ -66,17 +65,11 @@ val lithoFilterPatch = bytecodePatch(
* }
* }
*
* class ComponentContextParser {
* public Component parseComponent() {
* class CreateComponentClass {
* public Component createComponent() {
* ...
*
* // Checks if the component should be filtered.
* // Sets a thread local with the filtering result.
* extensionClass.filter(identifier, pathBuilder); // Inserted by this patch.
*
* ...
*
* if (extensionClass.shouldFilter()) { // Inserted by this patch.
* if (extensionClass.shouldFilter(identifier, path)) { // Inserted by this patch.
* return emptyComponent;
* }
* return originalUnpatchedComponent; // Original code.
@@ -116,95 +109,68 @@ val lithoFilterPatch = bytecodePatch(
// Allow the method to run to completion, and override the
// return value with an empty component if it should be filtered.
// It is important to allow the original code to always run to completion,
// otherwise memory leaks and poor app performance can occur.
//
// The extension filtering result needs to be saved off somewhere, but cannot
// save to a class field since the target class is called by multiple threads.
// It would be great if there was a way to change the register count of the
// method implementation and save the result to a high register to later use
// in the method, but there is no simple way to do that.
// Instead save the extension filter result to a thread local and check the
// filtering result at each method return index.
// String field for the litho identifier.
componentContextParserFingerprint.method.apply {
val conversionContextClass = conversionContextFingerprintToString.originalClassDef
// otherwise high memory usage and poor app performance can occur.
val conversionContextIdentifierField = componentContextSubParserFingerprint.match(
componentContextParserFingerprint.originalClassDef
).let {
// Identifier field is loaded just before the string declaration.
val index = it.method.indexOfFirstInstructionReversedOrThrow(
it.stringMatches!!.first().index
) {
val reference = getReference<FieldReference>()
reference?.definingClass == conversionContextClass.type
&& reference.type == "Ljava/lang/String;"
}
it.method.getInstruction<ReferenceInstruction>(index).getReference<FieldReference>()
// Find the identifier/path fields of the conversion context.
val conversionContextIdentifierField = componentContextParserFingerprint.let {
// Identifier field is loaded just before the string declaration.
val index = it.method.indexOfFirstInstructionReversedOrThrow(
it.stringMatches!!.first().index
) {
val reference = getReference<FieldReference>()
reference?.definingClass == conversionContextFingerprintToString.originalClassDef.type
&& reference.type == "Ljava/lang/String;"
}
// StringBuilder field for the litho path.
val conversionContextPathBuilderField = conversionContextClass.fields
.single { field -> field.type == "Ljava/lang/StringBuilder;" }
it.method.getInstruction<ReferenceInstruction>(index).getReference<FieldReference>()!!
}
val conversionContextResultIndex = indexOfFirstInstructionOrThrow {
val reference = getReference<MethodReference>()
reference?.returnType == conversionContextClass.type
} + 1
val conversionContextPathBuilderField = conversionContextFingerprintToString.originalClassDef
.fields.single { field -> field.type == "Ljava/lang/StringBuilder;" }
val conversionContextResultRegister = getInstruction<OneRegisterInstruction>(
conversionContextResultIndex
).registerA
val identifierRegister = findFreeRegister(
conversionContextResultIndex, conversionContextResultRegister
)
val stringBuilderRegister = findFreeRegister(
conversionContextResultIndex, conversionContextResultRegister, identifierRegister
)
// Check if the component should be filtered, and save the result to a thread local.
addInstructionsAtControlFlowLabel(
conversionContextResultIndex + 1,
"""
iget-object v$identifierRegister, v$conversionContextResultRegister, $conversionContextIdentifierField
iget-object v$stringBuilderRegister, v$conversionContextResultRegister, $conversionContextPathBuilderField
invoke-static { v$identifierRegister, v$stringBuilderRegister }, $EXTENSION_CLASS_DESCRIPTOR->filter(Ljava/lang/String;Ljava/lang/StringBuilder;)V
"""
)
// Get the only static method in the class.
val builderMethodDescriptor = emptyComponentFingerprint.classDef.methods.single {
// Find class and methods to create an empty component.
val builderMethodDescriptor = emptyComponentFingerprint.classDef.methods.single {
// The only static method in the class.
method -> AccessFlags.STATIC.isSet(method.accessFlags)
}
// Only one field.
val emptyComponentField = classBy { classDef ->
classDef.type == builderMethodDescriptor.returnType
}!!.immutableClass.fields.single()
}
val emptyComponentField = classBy {
// Only one field that matches.
it.type == builderMethodDescriptor.returnType
}!!.immutableClass.fields.single()
// Check at each return value if the component is filtered,
// and return an empty component if filtering is needed.
findInstructionIndicesReversedOrThrow(Opcode.RETURN_OBJECT).forEach { returnIndex ->
val freeRegister = findFreeRegister(returnIndex)
addInstructionsAtControlFlowLabel(
returnIndex,
"""
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->shouldFilter()Z
move-result v$freeRegister
if-eqz v$freeRegister, :unfiltered
move-object/from16 v$freeRegister, p1
invoke-static { v$freeRegister }, $builderMethodDescriptor
move-result-object v$freeRegister
iget-object v$freeRegister, v$freeRegister, $emptyComponentField
return-object v$freeRegister
:unfiltered
nop
"""
)
componentCreateFingerprint.method.apply {
val insertIndex = if (is_19_17_or_greater) {
indexOfFirstInstructionOrThrow(Opcode.RETURN_OBJECT)
} else {
// 19.16 clobbers p2 so must check at start of the method and not at the return index.
0
}
val freeRegister = findFreeRegister(insertIndex)
val identifierRegister = findFreeRegister(insertIndex, freeRegister)
val pathRegister = findFreeRegister(insertIndex, freeRegister, identifierRegister)
addInstructionsAtControlFlowLabel(
insertIndex,
"""
move-object/from16 v$freeRegister, p2
iget-object v$identifierRegister, v$freeRegister, $conversionContextIdentifierField
iget-object v$pathRegister, v$freeRegister, $conversionContextPathBuilderField
invoke-static { v$identifierRegister, v$pathRegister }, $EXTENSION_CLASS_DESCRIPTOR->shouldFilter(Ljava/lang/String;Ljava/lang/StringBuilder;)Z
move-result v$freeRegister
if-eqz v$freeRegister, :unfiltered
# Return an empty component
move-object/from16 v$freeRegister, p1
invoke-static { v$freeRegister }, $builderMethodDescriptor
move-result-object v$freeRegister
iget-object v$freeRegister, v$freeRegister, $emptyComponentField
return-object v$freeRegister
:unfiltered
nop
"""
)
}
// endregion

View File

@@ -285,10 +285,13 @@ Second \"item\" text"</string>
<string name="revanced_hide_description_components_screen_title">وصف الفيديو</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_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_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_history_title">إخفاء في السجل</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">مخفي في السجل</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">معروض في السجل</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_off">يُعرض في نتائج البحث</string>
@@ -773,6 +776,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_upcoming_button_title">إخفاء زر القادم</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">تم إخفاء زر القادم</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">يتم عرض زر القادم</string>
<string name="revanced_hide_shorts_effect_button_title">إخفاء زر التأثير</string>
<string name="revanced_hide_shorts_effect_button_summary_on">زر التأثير مخفي</string>
<string name="revanced_hide_shorts_effect_button_summary_off">زر التأثير معروض</string>
<string name="revanced_hide_shorts_green_screen_button_title">إخفاء زر الشاشة الخضراء</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">تم إخفاء زر الشاشة الخضراء</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">يتم عرض زر الشاشة الخضراء</string>
@@ -954,11 +960,25 @@ Second \"item\" text"</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button">إخفاء زر التخطي تلقائيًا</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">إخفاء زر التخطي بعد بضع ثوانٍ</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">يتم عرض زر التخطي للمقطع بأكمله</string>
<string name="revanced_sb_general_skiptoast">عرض ملاحظة عند التخطي</string>
<string name="revanced_sb_general_skiptoast_sum_on">يتم عرض ملاحظة عندما يتم تخطي مقطع تلقائيًا. انقر هنا لمشاهدة مثال</string>
<string name="revanced_sb_general_skiptoast_sum_off">لن يتم عرض الملاحظة. انقر هنا لمشاهدة مثال</string>
<string name="revanced_sb_auto_hide_skip_button_duration">مدة زر التخطي</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">المدة التي تظهر فيها أزرار التخطي والتخطي إلى التمييز المخفية تلقائيًا</string>
<string name="revanced_sb_general_skiptoast">إظهار إشعار التراجع عن التخطي</string>
<string name="revanced_sb_general_skiptoast_sum_on">يظهر إشعار عند تخطي مقطع تلقائيًا. انقر على الإشعار للتراجع عن التخطي.</string>
<string name="revanced_sb_general_skiptoast_sum_off">لا يتم عرض التوست</string>
<string name="revanced_sb_toast_on_skip_duration">مدة توست التخطي</string>
<string name="revanced_sb_toast_on_skip_duration_sum">المدة التي يظهر فيها إشعار التخطي</string>
<string name="revanced_sb_duration_1s">ثانية واحدة</string>
<string name="revanced_sb_duration_2s">ثانيتان</string>
<string name="revanced_sb_duration_3s">3 ثوانٍ</string>
<string name="revanced_sb_duration_4s">4 ثوانٍ</string>
<string name="revanced_sb_duration_5s">5 ثوانٍ</string>
<string name="revanced_sb_duration_6s">6 ثوانٍ</string>
<string name="revanced_sb_duration_7s">7 ثوانٍ</string>
<string name="revanced_sb_duration_8s">8 ثوانٍ</string>
<string name="revanced_sb_duration_9s">9 ثوانٍ</string>
<string name="revanced_sb_duration_10s">10 ثوانٍ</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_create_segment_category">إنشاء مقاطع جديدة</string>
<string name="revanced_sb_enable_create_segment">عرض زر إنشاء مقطع جديد</string>

View File

@@ -285,10 +285,6 @@ Gözlənilməz hallardan xəbərdar olmayacaqsınız."</string>
<string name="revanced_hide_description_components_screen_title">Video təsviri</string>
<string name="revanced_hide_description_components_screen_summary">Video təsviri 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_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_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_search_title">Axtarış nəticələrində gizlət</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ış nəticələrində göstərilir</string>
@@ -773,6 +769,9 @@ Audio trek seçimin göstərmək üçün \"Video axınları saxtalaşdır\"ı iO
<string name="revanced_hide_shorts_upcoming_button_title">Yaxınlaşan düyməsini gizlət</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">\"Yaxınlaşan\" düyməsi gizlidir</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">\"Yaxınlaşan\" düyməsi göstərilir</string>
<string name="revanced_hide_shorts_effect_button_title">Effekt düyməsini gizlət</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Effekt düyməsi gizlidir</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Effekt düyməsi görünür</string>
<string name="revanced_hide_shorts_green_screen_button_title">Yaşıl ekran düyməsini gizlət</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">\"Yaşıl ekran\" düyməsi gizlidir</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">\"Yaşıl ekran\" düyməsi göstərilir</string>
@@ -953,11 +952,7 @@ Bu funksiya 720p və ya daha aşağı video keyfiyyəti ilə və çox sürətli
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Ötürmə düyməsini avtomatik gizlət</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Ötürmə düyməsi bir neçə saniyə sonra gizlənir</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Ötürmə düyməsi bütün bölüm ərzində göstərilir</string>
<string name="revanced_sb_general_skiptoast">Ötürüləndə ani bildiriş göstər</string>
<string name="revanced_sb_general_skiptoast_sum_on">Bölüm avto-ötürüləndə bildiriş göstərilir. Nümunə görmək üçün bura toxun</string>
<string name="revanced_sb_general_skiptoast_sum_off">Bildiriş göstərilmir. Nümunə görmək üçün bura toxun</string>
<string name="revanced_sb_general_time_without">Bölümsüz video uzunluğun göstər</string>
<string name="revanced_sb_general_time_without_sum_on">Video uzunluğu bütün bölümləri silir, tam video uzunluğu yanaşı mötərizədə göstərilir</string>
<string name="revanced_sb_general_time_without_sum_off">Tam video uzunluğu göstərilir</string>
<string name="revanced_sb_create_segment_category">Yeni bölümlər yaradılır</string>
<string name="revanced_sb_enable_create_segment">Yeni Bölüm Yarat Düyməsini Göstər</string>

View File

@@ -285,10 +285,13 @@ Second \"item\" text"</string>
<string name="revanced_hide_description_components_screen_title">Апісанне відэа</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_summary">Схаваць ці паказаць панэль фільтраў у стужцы, выніках пошуку і звязаных відэа</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_off">Паказваецца ў стужцы</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_summary_on">Схавана ў стужках</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Паказана ў стужках</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Схаваць у гісторыі</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Схавана ў гісторыі</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Паказана ў гісторыі</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_off">Паказана ў выніках пошуку</string>
@@ -773,6 +776,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_upcoming_button_title">Схаваць кнопку «Наступныя»</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Кнопка Будущие ролики скрыта</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Кнопка Будущие ролики отображается</string>
<string name="revanced_hide_shorts_effect_button_title">Схаваць кнопку эфекту</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Кнопка эфекту схавана</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Кнопка эфекту паказана</string>
<string name="revanced_hide_shorts_green_screen_button_title">Схаваць кнопку «Зялёны экран»</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Кнопка с зелёным экраном Shorts скрыта</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Кнопка с зелёным экраном Shorts отображается</string>
@@ -954,11 +960,25 @@ Second \"item\" text"</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Аўтаматычна хаваць кнопку «Прапусціць»</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Кнопка \"Прапусціць\" скрываецца праз некалькі секунд</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Кнопка «Прапусціць» паказана для ўсяго сегмента</string>
<string name="revanced_sb_general_skiptoast">Паказваць toast пры пропуску</string>
<string name="revanced_sb_general_skiptoast_sum_on">Тост паказваецца, калі сегмент аўтаматычна прапускаецца. Націсніце тут, каб убачыць прыклад</string>
<string name="revanced_sb_general_skiptoast_sum_off">Тост не паказваецца. Націсніце тут, каб убачыць прыклад</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Працягласць кнопкі пропуску</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Як доўга адлюстроўваюцца кнопкі аўтаматычнага хавання прапуску і пераходу да вылучэння</string>
<string name="revanced_sb_general_skiptoast">Паказаць усплываючае паведамленне для адмены прапуску</string>
<string name="revanced_sb_general_skiptoast_sum_on">Усплываючае паведамленне паказваецца, калі сегмент аўтаматычна прапускаецца. Націсніце на ўсплываючае паведамленне, каб адмяніць прапуск</string>
<string name="revanced_sb_general_skiptoast_sum_off">Усплывальнае апавяшчэнне не паказваецца</string>
<string name="revanced_sb_toast_on_skip_duration">Працягласць усплывальнага апавяшчэння пра пропуск</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Як доўга адлюстроўваецца ўсплываючае паведамленне пра прапуск</string>
<string name="revanced_sb_duration_1s">1 секунда</string>
<string name="revanced_sb_duration_2s">2 секунды</string>
<string name="revanced_sb_duration_3s">3 секунды</string>
<string name="revanced_sb_duration_4s">4 секунды</string>
<string name="revanced_sb_duration_5s">5 секунд</string>
<string name="revanced_sb_duration_6s">6 секунд</string>
<string name="revanced_sb_duration_7s">7 секунд</string>
<string name="revanced_sb_duration_8s">8 секунд</string>
<string name="revanced_sb_duration_9s">9 секунд</string>
<string name="revanced_sb_duration_10s">10 секунд</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_create_segment_category">Стварэнне новых сегментаў</string>
<string name="revanced_sb_enable_create_segment">Паказваць кнопку «Стварыць новы сегмент»</string>

View File

@@ -285,10 +285,13 @@ Second \"item\" text"</string>
<string name="revanced_hide_description_components_screen_title">Описание на видеото</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_summary">Скриване или показване на лентата за филтриране в емисията, резултатите от търсенето и свързаните видеоклипове</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_off">Показва се</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_summary_on">Скрити в емисии</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Показани в емисии</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Скриване в историята</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Скрити в историята</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Показани в историята</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_off">Показано в резултатите от търсенето</string>
@@ -773,6 +776,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_upcoming_button_title">Скриване на бутона Upcoming</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Бутон \"Предстоящи събития\" е скрит</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Бутон \"Предстоящи събития\" се показва</string>
<string name="revanced_hide_shorts_effect_button_title">Скрий бутона за ефект</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Бутонът за ефекти е скрит</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Бутонът за ефекти е видим</string>
<string name="revanced_hide_shorts_green_screen_button_title">Скриване на бутона Green screen</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Бутон \"Зелен екран\" е скрит</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Бутон \"Зелен екран\" се показва</string>
@@ -954,11 +960,25 @@ Second \"item\" text"</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Автоматично скриване на бутона \"Пропускане\"</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Бутона за пропускане се скрива след няколко секунди</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Бутонът \"Пропускане\" е показан за целия сегмент</string>
<string name="revanced_sb_general_skiptoast">Показване на toast при пропускане</string>
<string name="revanced_sb_general_skiptoast_sum_on">Показване на известие при автоматично пропусната част. Докоснете тук за пример</string>
<string name="revanced_sb_general_skiptoast_sum_off">Известието не се показва. Докоснете тук за пример</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Продължителност на бутона за пропускане</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Колко дълго се показват бутоните за автоматично скриване на пропускане и за пропускане до акцент</string>
<string name="revanced_sb_general_skiptoast">Показване на известие за отмяна на пропускането</string>
<string name="revanced_sb_general_skiptoast_sum_on">Показва се известие, когато сегмент е автоматично пропуснат. Докоснете известието, за да отмените пропускането.</string>
<string name="revanced_sb_general_skiptoast_sum_off">Изскачащо съобщение не се показва</string>
<string name="revanced_sb_toast_on_skip_duration">Продължителност на изскачащото съобщение за пропускане</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Колко дълго се показва известието за пропускане</string>
<string name="revanced_sb_duration_1s">1 секунда</string>
<string name="revanced_sb_duration_2s">2 секунди</string>
<string name="revanced_sb_duration_3s">3 секунди</string>
<string name="revanced_sb_duration_4s">4 секунди</string>
<string name="revanced_sb_duration_5s">5 секунди</string>
<string name="revanced_sb_duration_6s">6 секунди</string>
<string name="revanced_sb_duration_7s">7 секунди</string>
<string name="revanced_sb_duration_8s">8 секунди</string>
<string name="revanced_sb_duration_9s">9 секунди</string>
<string name="revanced_sb_duration_10s">10 секунди</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_create_segment_category">Създаване на нови части</string>
<string name="revanced_sb_enable_create_segment">Показване на бутон \"Създаване на нов сегмент\"</string>

View File

@@ -281,10 +281,13 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
<string name="revanced_hide_description_components_screen_title">ভিডিওর বিবরণ</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_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_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_on">ফিডে লুকানো</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">ফিডে দেখানো হয়েছে</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">ইতিহাসে লুকান</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">ইতিহাসে লুকানো</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">ইতিহাসে দেখানো হয়েছে</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_off">অনুসন্ধান ফলাফলে দেখানো হয়েছে</string>
@@ -769,6 +772,9 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
<string name="revanced_hide_shorts_upcoming_button_title">আসন্ন বোতামটি লুকান</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">আগামী বোতাম লুকানো আছে</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">আগামী বোতাম দেখানো হচ্ছে</string>
<string name="revanced_hide_shorts_effect_button_title">ইফেক্ট বোতাম লুকান</string>
<string name="revanced_hide_shorts_effect_button_summary_on">ইফেক্ট বাটন লুকানো আছে</string>
<string name="revanced_hide_shorts_effect_button_summary_off">ইফেক্ট বাটন দেখানো আছে</string>
<string name="revanced_hide_shorts_green_screen_button_title">গ্রিন স্ক্রিন বোতামটি লুকান</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">সবুজ পর্দা বোতাম লুকানো আছে</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">সবুজ পর্দা বোতাম দেখানো হচ্ছে</string>
@@ -950,11 +956,25 @@ YouTube সেটিংসে অটো প্লে পরিবর্তন
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Skip বোতামটি স্বয়ংক্রিয়ভাবে লুকান</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">কয়েক সেকেন্ড পরে স্কিপ বোতাম লুকিয়ে যায়</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">পুরো অংশের জন্য Skip বোতাম দেখানো হয়েছে</string>
<string name="revanced_sb_general_skiptoast">বাদ দেওয়ার সময় একটি toast দেখান</string>
<string name="revanced_sb_general_skiptoast_sum_on">সেগমেন্ট স্বয়ংক্রিয়ভাবে এড়িয়ে যেতে একটি টোস্ট দেখানো হয়। উদাহরণ দেখতে এখানে ট্যাপ করুন</string>
<string name="revanced_sb_general_skiptoast_sum_off">টোস্ট দেখানো হচ্ছে না। উদাহরণ দেখতে এখানে ট্যাপ করু</string>
<string name="revanced_sb_auto_hide_skip_button_duration">স্কিপ বোতামের সময়কাল</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">অটো হাইড স্কিপ এবং হাইলাইট বোতাম কতক্ষণ দেখানো হয়</string>
<string name="revanced_sb_general_skiptoast">স্কিপ পূর্বাবস্থায় ফিরিয়ে আনার টোস্ট দেখা</string>
<string name="revanced_sb_general_skiptoast_sum_on">যখন একটি সেগমেন্ট স্বয়ংক্রিয়ভাবে এড়িয়ে যাওয়া হয় তখন টোস্ট দেখানো হয়। স্কিপ পূর্বাবস্থায় ফিরিয়ে আনতে টোস্ট বিজ্ঞপ্তিতে ট্যাপ করুন</string>
<string name="revanced_sb_general_skiptoast_sum_off">টোস্ট দেখানো হয়নি</string>
<string name="revanced_sb_toast_on_skip_duration">টোস্ট এড়িয়ে যাওয়ার সময়কাল</string>
<string name="revanced_sb_toast_on_skip_duration_sum">স্কিপ টোস্ট বিজ্ঞপ্তি কতক্ষণ দেখানো হয়</string>
<string name="revanced_sb_duration_1s">১ সেকেন্ড</string>
<string name="revanced_sb_duration_2s">২ সেকেন্ড</string>
<string name="revanced_sb_duration_3s">৩ সেকেন্ড</string>
<string name="revanced_sb_duration_4s"> সেকেন্ড</string>
<string name="revanced_sb_duration_5s">৫ সেকেন্ড</string>
<string name="revanced_sb_duration_6s">৬ সেকেন্ড</string>
<string name="revanced_sb_duration_7s"> সেকেন্ড</string>
<string name="revanced_sb_duration_8s">৮ সেকেন্ড</string>
<string name="revanced_sb_duration_9s">৯ সেকেন্ড</string>
<string name="revanced_sb_duration_10s">১০ সেকেন্ড</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_create_segment_category">নতুন সেগমন্ট তৈরি হচ্ছে</string>
<string name="revanced_sb_enable_create_segment">নতুন বিভাগ তৈরি করুন বোতামটি দেখান</string>

View File

@@ -285,10 +285,13 @@ Nebudete informováni o žádné neočekávané události."</string>
<string name="revanced_hide_description_components_screen_title">Popis videa</string>
<string name="revanced_hide_description_components_screen_summary">Skrýt nebo zobrazit komponenty popisu videa</string>
<string name="revanced_hide_filter_bar_screen_title">Lišta filtrů</string>
<string name="revanced_hide_filter_bar_screen_summary">Skrýt nebo zobrazit lištu filtrů v kanálu, výsledcích hledání a souvisejících videích</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Skrýt ve feedu</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Ve feedu skryto</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Ve feedu zobrazeno</string>
<string name="revanced_hide_filter_bar_screen_summary">Skrýt nebo zobrazit panel filtru v kanálech, historii, výsledcích vyhledání a souvisejících videích</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Skrýt v kanálech</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Skryto v kanálech</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Zobrazeno v kanálech</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Skrýt v historii</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Skryto v historii</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Zobrazeno v historii</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Skrýt ve výsledcích vyhledávání</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Skryto ve výsledcích vyhledávání</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Zobrazeno ve výsledcích vyhledávání</string>
@@ -773,6 +776,9 @@ Chcete-li zobrazit nabídku zvukové stopy, změňte možnost „Zfalšovat stre
<string name="revanced_hide_shorts_upcoming_button_title">Skrýt tlačítko Nadcházející</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Tlačítko \"Další\" je skryté</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Tlačítko \"Další\" je zobrazeno</string>
<string name="revanced_hide_shorts_effect_button_title">Skrýt tlačítko efektu</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Tlačítko Efekt je skryté</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Tlačítko Efekt je zobrazeno</string>
<string name="revanced_hide_shorts_green_screen_button_title">Skrýt tlačítko Zelená obrazovka</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Tlačítko zelené obrazovky je skryté</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Tlačítko zelené obrazovky je zobrazeno</string>
@@ -955,11 +961,25 @@ Tato funkce funguje nejlépe s kvalitou videa 720p nebo nižší a při použit
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Automaticky skrýt tlačítko Přeskočit</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Tlačítko pro přeskočení se skrývá po několika sekundách</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Tlačítko Přeskočit se zobrazuje pro celý segment</string>
<string name="revanced_sb_general_skiptoast">Zobrazit toast při přeskaková</string>
<string name="revanced_sb_general_skiptoast_sum_on">\"Toast\" se zobrazí, když se segment automaticky přeskočí. Klepněte zde, abyste se podívali na příklad</string>
<string name="revanced_sb_general_skiptoast_sum_off">\"Toast\" se nezobrazí. Klepněte zde, abyste se podívali na příklad</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Doba trvání tlačítka přeskoče</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Jak dlouho se zobrazují tlačítka pro automatické skrytí přeskočení a přeskočení na zvýraznění</string>
<string name="revanced_sb_general_skiptoast">Zobrazit hlásku pro zrušení přeskočení</string>
<string name="revanced_sb_general_skiptoast_sum_on">Hláska se zobrazí, když je segment automaticky přeskočen. Klepněte na hlásku pro zrušení přeskočení.</string>
<string name="revanced_sb_general_skiptoast_sum_off">Toast se nezobrazuje</string>
<string name="revanced_sb_toast_on_skip_duration">Doba trvání toastu přeskočení</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Jak dlouho se zobrazuje hláska pro přeskočení</string>
<string name="revanced_sb_duration_1s">1 sekunda</string>
<string name="revanced_sb_duration_2s">2 sekundy</string>
<string name="revanced_sb_duration_3s">3 sekundy</string>
<string name="revanced_sb_duration_4s">4 sekundy</string>
<string name="revanced_sb_duration_5s">5 sekund</string>
<string name="revanced_sb_duration_6s">6 sekund</string>
<string name="revanced_sb_duration_7s">7 sekund</string>
<string name="revanced_sb_duration_8s">8 sekund</string>
<string name="revanced_sb_duration_9s">9 sekund</string>
<string name="revanced_sb_duration_10s">10 sekund</string>
<string name="revanced_sb_general_time_without">Zobrazit délku videa bez segmentů</string>
<string name="revanced_sb_general_time_without_sum_on">Délka videa minus všechny segmenty, zobrazená v závorkách vedle úplné délky videa</string>
<string name="revanced_sb_general_time_without_sum_on">Na posuvníku je zobrazena délka videa minus všechny segmenty</string>
<string name="revanced_sb_general_time_without_sum_off">Zobrazena úplná délka videa</string>
<string name="revanced_sb_create_segment_category">Vytváření nových segmentů</string>
<string name="revanced_sb_enable_create_segment">Zobrazit tlačítko Vytvořit nový segment</string>

View File

@@ -285,10 +285,13 @@ Du modtager ikke notifikationer om uventede hændelser."</string>
<string name="revanced_hide_description_components_screen_title">Video beskrivelse</string>
<string name="revanced_hide_description_components_screen_summary">Skjul eller vis komponenter til videobeskrivelse</string>
<string name="revanced_hide_filter_bar_screen_title">Filtrer bjælke</string>
<string name="revanced_hide_filter_bar_screen_summary">Skjul eller vis filterlinjen i feedet, søgeresultaterne og relaterede videoer</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Skjul i feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Skjult i feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Vist i feed</string>
<string name="revanced_hide_filter_bar_screen_summary">Skjul eller vis filterlinjen i feeds, historik, søgeresultater og relaterede videoer</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Skjul i feeds</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Skjult i feeds</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Vist i feeds</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Skjul i historik</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Skjult i historik</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Vist i historik</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Skjul i søgeresultater</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Skjult i søgeresultater</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Vises i søgeresultater</string>
@@ -773,6 +776,9 @@ For at vise lydspormenuen skal du ændre \"Spoof videostream\" til iOS TV"</stri
<string name="revanced_hide_shorts_upcoming_button_title">Skjul knappen Kommende</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Kommende knap er skjult</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Kommende knap vises</string>
<string name="revanced_hide_shorts_effect_button_title">Skjul effektknap</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Effektknap er skjult</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Effektknap er vist</string>
<string name="revanced_hide_shorts_green_screen_button_title">Skjul knappen Grøn skærm</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Grøn skærmknap er skjult</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Grøn skærmknap vises</string>
@@ -956,11 +962,25 @@ Denne funktion fungerer bedst med en videokvalitet på 720p eller lavere og ved
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Skjul automatisk Spring over-knap</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Skip knap skjuler efter et par sekunder</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Spring over-knappen vises for hele segmentet</string>
<string name="revanced_sb_general_skiptoast">Vis en toast ved spring</string>
<string name="revanced_sb_general_skiptoast_sum_on">Toast vises, når et segment automatisk springes over. Tryk her for at se et eksempel</string>
<string name="revanced_sb_general_skiptoast_sum_off">Toast er ikke vist. Tryk her for at se et eksempel</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Spring over-knap varighed</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Hvor længe knapperne til automatisk skjuling af overspring og spring til højdepunkt vises</string>
<string name="revanced_sb_general_skiptoast">Vis fortryd oversprings-toast</string>
<string name="revanced_sb_general_skiptoast_sum_on">Toast vises, når et segment automatisk springes over. Tryk på toast-meddelelsen for at fortryde overspringelsen.</string>
<string name="revanced_sb_general_skiptoast_sum_off">Toast vises ikke</string>
<string name="revanced_sb_toast_on_skip_duration">Spring over-toast varighed</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Hvor længe toast-meddelelsen ved overspringelse vises</string>
<string name="revanced_sb_duration_1s">1 sekund</string>
<string name="revanced_sb_duration_2s">2 sekunder</string>
<string name="revanced_sb_duration_3s">3 sekunder</string>
<string name="revanced_sb_duration_4s">4 sekunder</string>
<string name="revanced_sb_duration_5s">5 sekunder</string>
<string name="revanced_sb_duration_6s">6 sekunder</string>
<string name="revanced_sb_duration_7s">7 sekunder</string>
<string name="revanced_sb_duration_8s">8 sekunder</string>
<string name="revanced_sb_duration_9s">9 sekunder</string>
<string name="revanced_sb_duration_10s">10 sekunder</string>
<string name="revanced_sb_general_time_without">Vis videolængde uden segmenter</string>
<string name="revanced_sb_general_time_without_sum_on">Videolængde minus alle segmenter, vist i parentes ved siden af den fulde videolængde</string>
<string name="revanced_sb_general_time_without_sum_on">Videolængde minus alle segmenter vises på tidslinjen</string>
<string name="revanced_sb_general_time_without_sum_off">Fuld videolængde vist</string>
<string name="revanced_sb_create_segment_category">Opretter nye segmenter</string>
<string name="revanced_sb_enable_create_segment">Vis Opret nyt segment-knap</string>

View File

@@ -281,10 +281,13 @@ Sie werden nicht über unerwartete Ereignisse informiert."</string>
<string name="revanced_hide_description_components_screen_title">Videobeschreibung</string>
<string name="revanced_hide_description_components_screen_summary">Komponenten der Videobeschreibung ausblenden oder anzeigen</string>
<string name="revanced_hide_filter_bar_screen_title">Filterleiste</string>
<string name="revanced_hide_filter_bar_screen_summary">Die Filterleiste im Feed, in den Suchergebnissen und in verwandten Videos ein- oder ausblenden</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Im Feed ausblenden</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Versteckt im Feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Im Feed angezeigt</string>
<string name="revanced_hide_filter_bar_screen_summary">Filterleiste in den Feeds, im Verlauf, in den Suchergebnissen und in ähnlichen Videos ein- oder ausblenden</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">In Feeds ausblenden</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">In Feeds ausgeblendet</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">In Feeds angezeigt</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Im Verlauf ausblenden</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Im Verlauf ausgeblendet</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Im Verlauf angezeigt</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">In Suchergebnissen ausblenden</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">In Suchergebnissen versteckt</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">In den Suchergebnissen angezeigt</string>
@@ -766,6 +769,9 @@ Um das Audiotrack-Menü anzuzeigen, ändere \"Video-Streams fälschen\" zu iOS T
<string name="revanced_hide_shorts_upcoming_button_title">\'Demnächst\'-Button ausblenden</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Kommender Button ist ausgeblendet</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Kommende Schaltfläche wird angezeigt</string>
<string name="revanced_hide_shorts_effect_button_title">Effekt-Schaltfläche ausblenden</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Effekt-Taste ist ausgeblendet</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Effekt-Taste ist eingeblendet</string>
<string name="revanced_hide_shorts_green_screen_button_title">Green-Screen-Button ausblenden</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Grünbildschirm-Taste ist ausgeblendet</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Grünbildschirm-Taste wird angezeigt</string>
@@ -947,11 +953,25 @@ Diese Funktion funktioniert am besten mit einer Videoqualität von 720p oder nie
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Überspringen-Button automatisch ausblenden</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Überspringe Taste verbirgt sich nach ein paar Sekunden</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Die Schaltfläche \"Überspringen\" wird für das gesamte Segment angezeigt</string>
<string name="revanced_sb_general_skiptoast">Einen toast beim Überspringen anzeigen</string>
<string name="revanced_sb_general_skiptoast_sum_on">Toast wird angezeigt, wenn ein Segment automatisch übersprungen wird. Tippe hier, um ein Beispiel zu sehen</string>
<string name="revanced_sb_general_skiptoast_sum_off">Toast wird nicht angezeigt. Tippe hier, um ein Beispiel zu sehen</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Dauer des Überspringen-Buttons</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Wie lange die automatisch ausgeblendeten Schaltflächen zum Überspringen und zum Springen zur Markierung angezeigt werden</string>
<string name="revanced_sb_general_skiptoast">Toast zum Rückgängigmachen des Überspringens anzeigen</string>
<string name="revanced_sb_general_skiptoast_sum_on">Ein Toast wird angezeigt, wenn ein Segment automatisch übersprungen wird. Tippen Sie auf die Toast-Benachrichtigung, um das Überspringen rückgängig zu machen.</string>
<string name="revanced_sb_general_skiptoast_sum_off">Toast-Nachricht wird nicht angezeigt</string>
<string name="revanced_sb_toast_on_skip_duration">Dauer der Überspring-Toastmeldung</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Wie lange die Überspringen-Toast-Benachrichtigung angezeigt wird</string>
<string name="revanced_sb_duration_1s">1 Sekunde</string>
<string name="revanced_sb_duration_2s">2 Sekunden</string>
<string name="revanced_sb_duration_3s">3 Sekunden</string>
<string name="revanced_sb_duration_4s">4 Sekunden</string>
<string name="revanced_sb_duration_5s">5 Sekunden</string>
<string name="revanced_sb_duration_6s">6 Sekunden</string>
<string name="revanced_sb_duration_7s">7 Sekunden</string>
<string name="revanced_sb_duration_8s">8 Sekunden</string>
<string name="revanced_sb_duration_9s">9 Sekunden</string>
<string name="revanced_sb_duration_10s">10 Sekunden</string>
<string name="revanced_sb_general_time_without">Videolänge ohne Segmente anzeigen</string>
<string name="revanced_sb_general_time_without_sum_on">Videolänge abzüglich aller Segmente in Klammern neben der vollständigen Videolänge</string>
<string name="revanced_sb_general_time_without_sum_on">Videolänge abzüglich aller Segmente wird in der Suchleiste angezeigt</string>
<string name="revanced_sb_general_time_without_sum_off">Vollständige Videolänge angezeigt</string>
<string name="revanced_sb_create_segment_category">Neue Segmente erstellen</string>
<string name="revanced_sb_enable_create_segment">Schaltfläche \"Neues Segment erstellen\" anzeigen</string>

View File

@@ -287,10 +287,13 @@ Second \"item\" text"</string>
<string name="revanced_hide_description_components_screen_title">Περιγραφή βίντεο</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_summary">Απόκρυψη ή εμφάνιση της γραμμής φίλτρων στην ροή, στα αποτελέσματα αναζήτησης και στα σχετικά βίντεο</string>
<string name="revanced_hide_filter_bar_feed_in_feed_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_summary_on">Κρυμμένη</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Εμφανίζεται</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Απόκρυψη στο ιστορικό</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Κρυμμένη</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Εμφανίζεται</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_off">Εμφανίζεται</string>
@@ -775,6 +778,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_upcoming_button_title">Κουμπί επερχόμενης πρεμιέρας/ζωντανής ροής</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Κρυμμένο</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Εμφανίζεται</string>
<string name="revanced_hide_shorts_effect_button_title">Κουμπί «Εφέ»</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Κρυμμένο</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Εμφανίζεται</string>
<string name="revanced_hide_shorts_green_screen_button_title">Κουμπί «Green screen»</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Κρυμμένο</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Εμφανίζεται</string>
@@ -956,11 +962,25 @@ Second \"item\" text"</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Αυτόματη απόκρυψη κουμπιού παράλειψης</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Το κουμπί παράλειψης κρύβεται μετά από μερικά δευτερόλεπτα</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Το κουμπί παράλειψης εμφανίζεται σε όλο το τμήμα</string>
<string name="revanced_sb_general_skiptoast">Εμφάνιση μηνύματος κατά την παράλειψη</string>
<string name="revanced_sb_general_skiptoast_sum_on">Εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης όταν ένα τμήμα παραλείπεται αυτόματα. Πατήστε για να δείτε ένα παράδειγμα</string>
<string name="revanced_sb_general_skiptoast_sum_off">Δεν εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης. Πατήστε για να δείτε ένα παράδειγμα</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Διάρκεια κουμπιού παράλειψης</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Διάρκεια εμφάνισης των κουμπιών αυτόματης απόκρυψης παράλειψης και μετάβασης σε επισήμανση</string>
<string name="revanced_sb_general_skiptoast">Εμφάνιση μηνύματος αναίρεσης παράλειψης</string>
<string name="revanced_sb_general_skiptoast_sum_on">Εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης όταν ένα τμήμα παραλείπεται αυτόματα. Πατήστε το μήνυμα για αναίρεση της παράλειψης</string>
<string name="revanced_sb_general_skiptoast_sum_off">Το μήνυμα δεν εμφανίζεται</string>
<string name="revanced_sb_toast_on_skip_duration">Διάρκεια μηνύματος παράλειψης</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Πόση ώρα εμφανίζεται το μήνυμα παράλειψης</string>
<string name="revanced_sb_duration_1s">1 δευτερόλεπτο</string>
<string name="revanced_sb_duration_2s">2 δευτερόλεπτα</string>
<string name="revanced_sb_duration_3s">3 δευτερόλεπτα</string>
<string name="revanced_sb_duration_4s">4 δευτερόλεπτα</string>
<string name="revanced_sb_duration_5s">5 δευτερόλεπτα</string>
<string name="revanced_sb_duration_6s">6 δευτερόλεπτα</string>
<string name="revanced_sb_duration_7s">7 δευτερόλεπτα</string>
<string name="revanced_sb_duration_8s">8 δευτερόλεπτα</string>
<string name="revanced_sb_duration_9s">9 δευτερόλεπτα</string>
<string name="revanced_sb_duration_10s">10 δευτερόλεπτα</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_create_segment_category">Δημιουργία νέων τμημάτων</string>
<string name="revanced_sb_enable_create_segment">Εμφάνιση κουμπιού δημιουργίας νέου τμήματος</string>

View File

@@ -282,10 +282,13 @@ Sin embargo, si activas esto, también se registrarán algunos datos del usuario
<string name="revanced_hide_description_components_screen_title">Descripción del vídeo</string>
<string name="revanced_hide_description_components_screen_summary">Ocultar o mostrar componentes de descripción de vídeo</string>
<string name="revanced_hide_filter_bar_screen_title">Barra de filtros</string>
<string name="revanced_hide_filter_bar_screen_summary">Ocultar o mostrar la barra de filtro en el feed, los resultados de búsqueda y los videos relacionados</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Ocultar en el feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Escondido en el feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Mostrar en el feed</string>
<string name="revanced_hide_filter_bar_screen_summary">Ocultar o mostrar la barra de filtros en las fuentes, historial, resultados de búsqueda y deos relacionados</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Ocultar en feeds</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Oculto en feeds</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Visible en feeds</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Ocultar en el historial</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Oculto en el historial</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Visible en el historial</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Ocultar en los resultados de búsqueda</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Oculto en los resultados de búsqueda</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Mostrado en los resultados de búsqueda</string>
@@ -770,6 +773,9 @@ Para mostrar el menú de la pista de audio, cambia \"Suplantar transmisiones de
<string name="revanced_hide_shorts_upcoming_button_title">Ocultar el botón Próximos</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">El botón próximo está oculto</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Se muestra el botón próximo</string>
<string name="revanced_hide_shorts_effect_button_title">Ocultar botón de efecto</string>
<string name="revanced_hide_shorts_effect_button_summary_on">El botón de efecto está oculto</string>
<string name="revanced_hide_shorts_effect_button_summary_off">El botón de efecto está visible</string>
<string name="revanced_hide_shorts_green_screen_button_title">Ocultar el botón Pantalla verde</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">El botón verde de pantalla está oculto</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Se muestra el botón verde de pantalla</string>
@@ -951,11 +957,25 @@ Esta función funciona mejor con una calidad de vídeo de 720p o inferior y cuan
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Ocultar automáticamente el botón Saltar</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Omitir botón se oculta después de unos segundos</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Se muestra el botón Saltar para todo el segmento</string>
<string name="revanced_sb_general_skiptoast">Mostrar un toast al saltar</string>
<string name="revanced_sb_general_skiptoast_sum_on">Toast se muestra cuando un segmento se omite automáticamente. Pulse aquí para ver un ejemplo</string>
<string name="revanced_sb_general_skiptoast_sum_off">Toast no se muestra. Toque aquí para ver un ejemplo</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Duración del botón Omitir</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">¿Cuánto tiempo se muestran automáticamente los botones de omitir y omitir para resaltar?</string>
<string name="revanced_sb_general_skiptoast">Mostrar mensaje emergente para deshacer omisión</string>
<string name="revanced_sb_general_skiptoast_sum_on">Se muestra un mensaje emergente cuando un segmento se omite automáticamente. Toca la notificación de mensaje emergente para deshacer la omisión.</string>
<string name="revanced_sb_general_skiptoast_sum_off">El mensaje emergente no se muestra</string>
<string name="revanced_sb_toast_on_skip_duration">Duración del mensaje emergente al omitir</string>
<string name="revanced_sb_toast_on_skip_duration_sum">¿Cuánto tiempo se muestra la notificación de mensaje emergente de omisión?</string>
<string name="revanced_sb_duration_1s">1 segundo</string>
<string name="revanced_sb_duration_2s">2 segundos</string>
<string name="revanced_sb_duration_3s">3 segundos</string>
<string name="revanced_sb_duration_4s">4 segundos</string>
<string name="revanced_sb_duration_5s">5 segundos</string>
<string name="revanced_sb_duration_6s">6 segundos</string>
<string name="revanced_sb_duration_7s">7 segundos</string>
<string name="revanced_sb_duration_8s">8 segundos</string>
<string name="revanced_sb_duration_9s">9 segundos</string>
<string name="revanced_sb_duration_10s">10 segundos</string>
<string name="revanced_sb_general_time_without">Mostrar longitud de vídeo sin segmentos</string>
<string name="revanced_sb_general_time_without_sum_on">Longitud del vídeo menos todos los segmentos, mostrados en paréntesis junto a la longitud completa del vídeo</string>
<string name="revanced_sb_general_time_without_sum_on">La duración del vídeo, excluyendo todos los segmentos, se muestra en la barra de progreso</string>
<string name="revanced_sb_general_time_without_sum_off">Longitud completa del vídeo mostrada</string>
<string name="revanced_sb_create_segment_category">Creando nuevos segmentos</string>
<string name="revanced_sb_enable_create_segment">Mostrar el botón Crear nuevo segmento</string>

View File

@@ -285,10 +285,13 @@ Teid ei teavitata ühestki ootamatust sündmusest."</string>
<string name="revanced_hide_description_components_screen_title">Video kirjeldus</string>
<string name="revanced_hide_description_components_screen_summary">Peida videokirjelduse komponendid või kuva need</string>
<string name="revanced_hide_filter_bar_screen_title">Filtriseriba</string>
<string name="revanced_hide_filter_bar_screen_summary">Peida või näita filtripaneeli voos, otsingutulemustes ja seotud videotes</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Peida söötes</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Peidetud söötes</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Näidatud söötes</string>
<string name="revanced_hide_filter_bar_screen_summary">Peida või näita filtririba voogudes, ajaloos, otsingutulemustes ja seotud videotes</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Peida voogudes</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Peidetud voogudes</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Näidatud voogudes</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Peida ajaloos</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Peidetud ajaloos</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Näidatud ajaloos</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Peida otsingutulemustes</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Peidetud otsingutulemustes</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Kuvatakse otsingutulemustes</string>
@@ -772,6 +775,9 @@ Heliriba menüü kuvamiseks muutke valikut „Võltsitud videovoogedastus“ vä
<string name="revanced_hide_shorts_upcoming_button_title">Peida Eelseisvad nupp</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Eelseisva nuppu on peidetud</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Eelseisva nuppu on nähtav</string>
<string name="revanced_hide_shorts_effect_button_title">Peida efekti nupp</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Efekti nupp on peidetud</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Efekti nupp on nähtav</string>
<string name="revanced_hide_shorts_green_screen_button_title">Peida Roheline ekraan nupp</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Rohelise ekraani nupp on peidetud</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Rohelise ekraani nupp on nähtav</string>
@@ -953,11 +959,25 @@ See funktsioon toimib kõige paremini 720p või madalama video kvaliteedi ja vä
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Peida vahelejätmisnupp automaatselt</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Vahelejätmisnupp peitub mõne sekundi pärast</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Vahelejätmise nupp on kuvatud kogu segmendi jaoks</string>
<string name="revanced_sb_general_skiptoast">Näita toast teadet vahelejätmisel</string>
<string name="revanced_sb_general_skiptoast_sum_on">Teatis näidatakse, kui segment vahele jäetakse automaatselt. Puuduta siia, et näha näidet</string>
<string name="revanced_sb_general_skiptoast_sum_off">Teatist ei näidata. Puuduta siia, et näha näidet</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Vahelejätnud nupu kestus</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Kui kaua kuvatakse automaatselt peidetud nuppe \"jäta vahele\" ja \"jäta esiletõstmise juurde\"</string>
<string name="revanced_sb_general_skiptoast">Kuva tühista vahelejätmise teavitus (toast)</string>
<string name="revanced_sb_general_skiptoast_sum_on">Teavitus (toast) kuvatakse, kui segment jäetakse automaatselt vahele. Vahelejätmise tühistamiseks puudutage teavitust (toast).</string>
<string name="revanced_sb_general_skiptoast_sum_off">Hüpikut ei kuvata</string>
<string name="revanced_sb_toast_on_skip_duration">Vahelejätnud hüpiku kestus</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Kui kaua kuvatakse vahelejätmise teavitust (toast)</string>
<string name="revanced_sb_duration_1s">1 sekund</string>
<string name="revanced_sb_duration_2s">2 sekundit</string>
<string name="revanced_sb_duration_3s">3 sekundit</string>
<string name="revanced_sb_duration_4s">4 sekundit</string>
<string name="revanced_sb_duration_5s">5 sekundit</string>
<string name="revanced_sb_duration_6s">6 sekundit</string>
<string name="revanced_sb_duration_7s">7 sekundit</string>
<string name="revanced_sb_duration_8s">8 sekundit</string>
<string name="revanced_sb_duration_9s">9 sekundit</string>
<string name="revanced_sb_duration_10s">10 sekundit</string>
<string name="revanced_sb_general_time_without">Näita video pikkust ilma segmentideta</string>
<string name="revanced_sb_general_time_without_sum_on">Video pikkus miinus kõik segmendid, kuvatakse sulgudes täispika video pikkuse kõrval</string>
<string name="revanced_sb_general_time_without_sum_on">Video pikkus miinus kõik segmendid kuvatakse edenemisribal</string>
<string name="revanced_sb_general_time_without_sum_off">Näidatakse täispikk video pikkust</string>
<string name="revanced_sb_create_segment_category">Uute segmentide loomine</string>
<string name="revanced_sb_enable_create_segment">Näita Uue segmendi loomise nuppu</string>

View File

@@ -285,10 +285,6 @@ Et saa ilmoituksia odottamattomista tapahtumista."</string>
<string name="revanced_hide_description_components_screen_title">Videon kuvaus</string>
<string name="revanced_hide_description_components_screen_summary">Piilota tai näytä videon kuvauksen osia</string>
<string name="revanced_hide_filter_bar_screen_title">Suodatinpalkki</string>
<string name="revanced_hide_filter_bar_screen_summary">Piilota tai näytä suodatinpalkki syötteessä, haussa ja liittyvissä videoissa</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Piilota syötteessä</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Piilotettu syötteessä</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Näytetään syötteessä</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Piilota hakutuloksissa</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Piilotettu hakutuloksissa</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Näytetään hakutuloksissa</string>
@@ -561,6 +557,9 @@ Säädä äänenvoimakkuutta pyyhkäisemällä pystysuoraan näytön oikealta pu
<string name="revanced_hide_clip_button_summary_on">Klippi-painike on piilotettu</string>
<string name="revanced_hide_clip_button_summary_off">Klippi-painike näytetään</string>
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_save_button_title">Piilota Tallenna</string>
<string name="revanced_hide_save_button_summary_on">Tallenna-painike on piilotettu</string>
<string name="revanced_hide_save_button_summary_off">Tallenna-painike näytetään</string>
</patch>
<patch id="layout.buttons.navigation.navigationButtonsPatch">
<string name="revanced_navigation_buttons_screen_title">Navigointipainikkeet</string>
@@ -767,6 +766,9 @@ Jos haluat nähdä sen, aseta \"Naamioi videovirrat\" iOS TV:ksi"</string>
<string name="revanced_hide_shorts_upcoming_button_title">Piilota Tulossa-painike</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Tulossa-painike on piilotettu</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Tulossa-painike näytetään</string>
<string name="revanced_hide_shorts_effect_button_title">Piilota Tehoste-painike</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Tehoste-painike on piilotettu</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Tehoste-painike näytetään</string>
<string name="revanced_hide_shorts_green_screen_button_title">Piilota Vihertausta-painike</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Vihertausta-painike on piilotettu</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Vihertausta-painike näytetään</string>
@@ -948,11 +950,7 @@ Tämä ominaisuus toimii parhaiten, kun videon laatu on 720p tai alhaisempi ja k
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Piilota ohita-painike automaattisesti</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Ohita-painike piiloutuu muutaman sekunnin kuluttua</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Ohita-painike näytetään koko osion ajan</string>
<string name="revanced_sb_general_skiptoast">Näytä ilmoitus ohitettaessa</string>
<string name="revanced_sb_general_skiptoast_sum_on">Ponnahdusilmoitus näytetään, kun osio ohitetaan automaattisesti. Napauta tästä nähdäksesi esimerkin</string>
<string name="revanced_sb_general_skiptoast_sum_off">Ponnahdusilmoitusta ei näytetä. Napauta tästä nähdäksesi esimerkin</string>
<string name="revanced_sb_general_time_without">Näytä videon pituus ilman osioita</string>
<string name="revanced_sb_general_time_without_sum_on">Videon pituus ilman osioita, näytetään suluissa koko videon pituuden vieressä</string>
<string name="revanced_sb_general_time_without_sum_off">Videon koko pituus näytetään</string>
<string name="revanced_sb_create_segment_category">Uusien osioiden luominen</string>
<string name="revanced_sb_enable_create_segment">Näytä Luo uusi osio -painike</string>
@@ -1259,7 +1257,7 @@ Minisoitin voidaan vetää pois näytöltä vasemmalle tai oikealle"</string>
<string name="revanced_gradient_loading_screen_summary_off">Latausruudulla on yksivärinen tausta</string>
<string name="splash_screen_animation_style_title">Aloitussivun tyyli</string>
<string name="splash_screen_animation_style_entry_1">Väri</string>
<string name="splash_screen_animation_style_entry_2">Musta ja valkoinen</string>
<string name="splash_screen_animation_style_entry_2">Mustavalkoinen</string>
<string name="revanced_seekbar_custom_color_title">Ota mukautettu etenemispalkin väri käyttöön</string>
<string name="revanced_seekbar_custom_color_summary_on">Mukautettu etenemispalkin väri näytetään</string>
<string name="revanced_seekbar_custom_color_summary_off">Alkuperäinen etenemispalkin väri näytetään</string>

View File

@@ -285,10 +285,13 @@ Hindi ka aabisuhan ng anumang hindi inaasahang mga kaganapan."</string>
<string name="revanced_hide_description_components_screen_title">Paglalarawan ng video</string>
<string name="revanced_hide_description_components_screen_summary">Itago o ipakita ang mga bahagi ng paglalarawan ng video</string>
<string name="revanced_hide_filter_bar_screen_title">Bar ng filter</string>
<string name="revanced_hide_filter_bar_screen_summary">Itago o ipakita ang filter bar sa feed, mga resulta ng paghahanap, at mga kaugnay na video</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Itago sa feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Nakatago sa feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Ipinapakita sa feed</string>
<string name="revanced_hide_filter_bar_screen_summary">Itago o ipakita ang filter bar sa mga feed, history, mga resulta ng paghahanap, at mga kaugnay na video</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Itago sa mga feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Nakatago sa mga feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Ipinapakita sa mga feed</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Itago sa kasaysayan</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Nakatago sa kasaysayan</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Ipinapakita sa kasaysayan</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Itago sa mga resulta ng paghahanap</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Nakatago sa mga resulta ng paghahanap</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Ipinapakita sa mga resulta ng paghahanap</string>
@@ -770,6 +773,9 @@ Upang ipakita ang menu ng Audio track, baguhin ang 'Spoof video streams' sa iOS
<string name="revanced_hide_shorts_upcoming_button_title">Itago ang Upcoming button</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Nakatago ang pindutan ng \"Upcoming\"</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Ipinapakita ang pindutan ng \"Upcoming\"</string>
<string name="revanced_hide_shorts_effect_button_title">Itago ang Button ng Epekto</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Nakatago ang button ng epekto</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Nakikita ang button ng epekto</string>
<string name="revanced_hide_shorts_green_screen_button_title">Itago ang Green screen button</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Nakatago ang pindutan ng \"Green screen\"</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Ipinapakita ang pindutan ng \"Green screen\"</string>
@@ -948,11 +954,25 @@ Ang tampok na ito ay pinakamahusay na gumagana sa kalidad ng video na 720p o mas
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Awtomatikong itago ang button na Laktawan</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Tinatago ang pindutan ng skip pagkatapos ng ilang segundo</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Ipinapakita ang button na Laktawan para sa buong segment</string>
<string name="revanced_sb_general_skiptoast">Magpakita ng toast kapag lumaktaw</string>
<string name="revanced_sb_general_skiptoast_sum_on">Ang toast ay ipinapakita kapag ang isang segment ay awtomatikong nilaktawan. Mag-tap dito para makakita ng halimbawa</string>
<string name="revanced_sb_general_skiptoast_sum_off">Hindi ipinapakita ang toast. Mag-tap dito para makakita ng halimbawa</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Tagal ng pindutan ng Paglaktaw</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Gaano katagal ipinapakita ang mga pindutan ng awtomatikong pagtago ng laktaw at laktaw upang i-highlight</string>
<string name="revanced_sb_general_skiptoast">Ipakita ang undo skip toast</string>
<string name="revanced_sb_general_skiptoast_sum_on">Ipinapakita ang toast kapag awtomatikong nilaktawan ang isang segment. Tapikin ang notipikasyon ng toast upang i-undo ang paglaktaw</string>
<string name="revanced_sb_general_skiptoast_sum_off">Hindi ipinapakita ang toast</string>
<string name="revanced_sb_toast_on_skip_duration">Tagal ng toast sa paglaktaw</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Gaano katagal ipinapakita ang notipikasyon ng skip toast</string>
<string name="revanced_sb_duration_1s">1 segundo</string>
<string name="revanced_sb_duration_2s">2 segundo</string>
<string name="revanced_sb_duration_3s">3 segundo</string>
<string name="revanced_sb_duration_4s">4 segundo</string>
<string name="revanced_sb_duration_5s">5 segundo</string>
<string name="revanced_sb_duration_6s">6 segundo</string>
<string name="revanced_sb_duration_7s">7 segundo</string>
<string name="revanced_sb_duration_8s">8 segundo</string>
<string name="revanced_sb_duration_9s">9 segundo</string>
<string name="revanced_sb_duration_10s">10 segundo</string>
<string name="revanced_sb_general_time_without">Ipakita ang haba ng video nang walang mga segment</string>
<string name="revanced_sb_general_time_without_sum_on">Haba ng video na binawasan ang lahat ng mga segment, na ipinapakita sa mga panaklong sa tabi ng buong haba ng video</string>
<string name="revanced_sb_general_time_without_sum_on">Ang haba ng video nang walang lahat ng segment ay ipinapakita sa seekbar</string>
<string name="revanced_sb_general_time_without_sum_off">Ipinapakita ang buong haba ng video</string>
<string name="revanced_sb_create_segment_category">Paglikha ng mga bagong segment</string>
<string name="revanced_sb_enable_create_segment">Ipakita ang button na Gumawa ng bagong segment</string>

View File

@@ -285,10 +285,13 @@ Vous ne serez pas informé des événements inattendus."</string>
<string name="revanced_hide_description_components_screen_title">Description de la vidéo</string>
<string name="revanced_hide_description_components_screen_summary">Masquez ou affichez des éléments dans la description des vidéos</string>
<string name="revanced_hide_filter_bar_screen_title">Barre des filtres</string>
<string name="revanced_hide_filter_bar_screen_summary">Masquez ou affichez la barre des filtres dans le flux, les résultats de recherche et les vidéos similaires</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Masquer dans le flux</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Masquée dans le flux</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Affichée dans le flux</string>
<string name="revanced_hide_filter_bar_screen_summary">Masquez ou affichez la barre des filtres dans les flux, l\'historique, les résultats de recherche et les vidéos associées</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Masquer dans les flux</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Masquée dans les flux</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Affichée dans les flux</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Masquer dans l\'historique</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Masquée dans l\'historique</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Affichée dans l\'historique</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Masquer dans les résultats de recherche</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Masquée dans les résultats de recherche</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Affichée dans les résultats de recherche</string>
@@ -534,9 +537,9 @@ Réglez le volume en balayant verticalement sur le côté droit de l'écran"</st
<string name="revanced_hide_share_button_summary_on">Le bouton Partager est masqué</string>
<string name="revanced_hide_share_button_summary_off">Le bouton Partager est affiché</string>
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_stop_ads_button_title">Masquer l\'arrêt des publicités</string>
<string name="revanced_hide_stop_ads_button_summary_on">Le bouton Arrêter les publicités est masqué</string>
<string name="revanced_hide_stop_ads_button_summary_off">Le bouton Arrêter les publicités est affiché</string>
<string name="revanced_hide_stop_ads_button_title">Masquer \"Zéro annonce\"</string>
<string name="revanced_hide_stop_ads_button_summary_on">Le bouton Zéro annonce est masqué</string>
<string name="revanced_hide_stop_ads_button_summary_off">Le bouton Zéro annonce est affiché</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
<string name="revanced_hide_report_button_title">Masquer \"Signaler\"</string>
@@ -564,7 +567,7 @@ Réglez le volume en balayant verticalement sur le côté droit de l'écran"</st
<string name="revanced_hide_clip_button_summary_on">Le bouton Clip est masqué</string>
<string name="revanced_hide_clip_button_summary_off">Le bouton Clip est affiché</string>
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_save_button_title">Masquer Enregistrer</string>
<string name="revanced_hide_save_button_title">Masquer \"Enregistrer\"</string>
<string name="revanced_hide_save_button_summary_on">Le bouton Enregistrer est masqué</string>
<string name="revanced_hide_save_button_summary_off">Le bouton Enregistrer est affiché</string>
</patch>
@@ -773,6 +776,9 @@ Pour afficher le menu Piste audio, définissez \"Falsifier les flux vidéo\" sur
<string name="revanced_hide_shorts_upcoming_button_title">Masquer le bouton Diffusion prévue</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Le bouton Diffusion prévue est masqué</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Le bouton Diffusion prévue est affiché</string>
<string name="revanced_hide_shorts_effect_button_title">Masquer le bouton d\'effet</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Le bouton d\'effet est masqué</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Le bouton d\'effet est affiché</string>
<string name="revanced_hide_shorts_green_screen_button_title">Masquer le bouton Écran vert</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Le bouton Écran vert est masqué</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Le bouton Écran vert est affiché</string>
@@ -956,11 +962,25 @@ Cette fonctionnalité fonctionne de manière optimale avec une qualité vidéo d
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Masquer automatiquement le bouton Passer</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Le bouton Passer est masqué après quelques secondes</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Le bouton Passer est affiché pendant toute la durée du segment</string>
<string name="revanced_sb_general_skiptoast">Afficher un message toast lorsqu\'un segment est passé</string>
<string name="revanced_sb_general_skiptoast_sum_on">Un message toast est affiché lorsqu\'un segment est passé automatiquement. Appuyez ici pour voir un exemple.</string>
<string name="revanced_sb_general_skiptoast_sum_off">Message toast non affiché. Appuyez ici pour voir un exemple.</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Durée du bouton Ignorer</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Durée d\'affichage des boutons de masquage automatique de saut et de saut vers le surlignage</string>
<string name="revanced_sb_general_skiptoast">Afficher le toast d\'annulation de saut</string>
<string name="revanced_sb_general_skiptoast_sum_on">Un toast s\'affiche lorsqu\'un segment est automatiquement sauté. Touchez la notification toast pour annuler le saut.</string>
<string name="revanced_sb_general_skiptoast_sum_off">Le message n\'est pas affiché</string>
<string name="revanced_sb_toast_on_skip_duration">Durée du message Ignorer</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Durée d\'affichage de la notification toast de saut</string>
<string name="revanced_sb_duration_1s">1 seconde</string>
<string name="revanced_sb_duration_2s">2 secondes</string>
<string name="revanced_sb_duration_3s">3 secondes</string>
<string name="revanced_sb_duration_4s">4 secondes</string>
<string name="revanced_sb_duration_5s">5 secondes</string>
<string name="revanced_sb_duration_6s">6 secondes</string>
<string name="revanced_sb_duration_7s">7 secondes</string>
<string name="revanced_sb_duration_8s">8 secondes</string>
<string name="revanced_sb_duration_9s">9 secondes</string>
<string name="revanced_sb_duration_10s">10 secondes</string>
<string name="revanced_sb_general_time_without">Afficher la durée de la vidéo sans les segments</string>
<string name="revanced_sb_general_time_without_sum_on">Durée de la vidéo moins tous les segments, affichée entre parenthèses à côté de la durée totale de la vidéo</string>
<string name="revanced_sb_general_time_without_sum_on">La durée de la vidéo moins tous les segments est affichée sur la barre de progression</string>
<string name="revanced_sb_general_time_without_sum_off">Affichage de la durée totale de la vidéo</string>
<string name="revanced_sb_create_segment_category">Création de nouveaux segments</string>
<string name="revanced_sb_enable_create_segment">Afficher le bouton Créer un segment</string>
@@ -1179,7 +1199,9 @@ Si désactivé ultérieurement, il est recommandé d'effacer les données de l'a
<string name="revanced_change_start_page_entry_music">Musique</string>
<string name="revanced_change_start_page_entry_news">Actualités</string>
<string name="revanced_change_start_page_entry_notifications">Notifications</string>
<string name="revanced_change_start_page_entry_playlists">Playlists</string>
<string name="revanced_change_start_page_entry_search">Recherche</string>
<string name="revanced_change_start_page_entry_shopping">Shopping</string>
<string name="revanced_change_start_page_entry_sports">Sport</string>
<string name="revanced_change_start_page_entry_subscriptions">Abonnements</string>
<string name="revanced_change_start_page_entry_trending">Tendances</string>
@@ -1406,6 +1428,7 @@ Activer cette option peut déverrouiller des qualités vidéo supérieures"</str
<string name="revanced_remember_shorts_quality_last_selected_summary_off">Les changements de qualité s\'appliquent uniquement au Short actuel</string>
<string name="revanced_shorts_quality_default_wifi_title">Qualité par défaut des Shorts sur les réseaux Wi-Fi</string>
<string name="revanced_shorts_quality_default_mobile_title">Qualité par défaut des Shorts sur le réseau mobile</string>
<string name="revanced_remember_video_quality_mobile">mobile</string>
<string name="revanced_remember_video_quality_wifi">Wi-Fi</string>
<string name="revanced_remember_video_quality_toast">Nouvelle qualité %1$s par défaut : %2$s</string>
<string name="revanced_remember_video_quality_toast_shorts">Nouvelle qualité %1$s des Shorts par défaut : %2$s</string>
@@ -1527,6 +1550,7 @@ AVC a une résolution maximale de 1080p et ne prend pas en charge le codec audio
<string name="revanced_about_summary">À propos de ReVanced</string>
<string name="revanced_ads_screen_title">Annonces</string>
<string name="revanced_ads_screen_summary">Paramètres de blocage des annonces</string>
<string name="revanced_chat_screen_title">Chat</string>
<string name="revanced_chat_screen_summary">Paramètres du chat</string>
<string name="revanced_misc_screen_title">Divers</string>
<string name="revanced_misc_screen_summary">Paramètres divers</string>

View File

@@ -285,10 +285,13 @@ Ní chuirfear ar an eolas thú faoi aon imeachtaí gan choinne."</string>
<string name="revanced_hide_description_components_screen_title">Cur síos físeán</string>
<string name="revanced_hide_description_components_screen_summary">Folaigh nó taispeáint comhpháirteanna tuairisc</string>
<string name="revanced_hide_filter_bar_screen_title">Barra scagaire</string>
<string name="revanced_hide_filter_bar_screen_summary">Folaigh nó taispeáin an barra scagaire sa sruth, torthaí cuardaigh agus físeáin ghaolmhara</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Folaigh i mbeatha</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">I bhfolach i mbeatha</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Taispeántar i mbeatha</string>
<string name="revanced_hide_filter_bar_screen_summary">Folaigh nó taispeáin an barra scagaire sna fothaí, stair, torthaí cuardaigh, agus físeáin ghaolmhara</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Folaigh i bhfothaí</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">I bhfolach i bhfothaí</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Taispeánta i bhfothaí</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Folaigh sa stair</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">I bhfolach sa stair</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Taispeánta sa stair</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Folaigh i dtorthaí cuardaigh</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Folaigh i dtorthaí cuardaigh</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Taispeáin i dtorthaí cuardaigh</string>
@@ -773,6 +776,9 @@ Chun roghchlár na rian fuaime a thaispeáint, athraigh 'Srutháin físeáin bhr
<string name="revanced_hide_shorts_upcoming_button_title">Folaigh cnaipe \'Le teacht\'</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Tá cnaipe atá le teacht i bhfolach</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Taispeántar an cnaipe atá le teacht</string>
<string name="revanced_hide_shorts_effect_button_title">Folaigh cnaipe éifeachta</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Tá an cnaipe Éifeacht i bhfolach</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Tá an cnaipe Éifeacht taispeánta</string>
<string name="revanced_hide_shorts_green_screen_button_title">Folaigh cnaipe \'Scáileán glas\'</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Tá cnaipe an scáileáin glas i bhfolach</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Taispeántar cnaipe an scáileáin glas</string>
@@ -954,11 +960,25 @@ Oibríonn an ghné seo is fearr le caighdeán físeáin 720p nó níos ísle agu
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Folaigh cnaipe Scipeála go huathoibríoch</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Folaíonn cnaipe scipeáil tar éis cúpla soicindí</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Taispeántar cnaipe Scipeála don deighleog iomlán</string>
<string name="revanced_sb_general_skiptoast">Taispeáin tósta agus tú ag scipeáil</string>
<string name="revanced_sb_general_skiptoast_sum_on">Taispeántar tósta nuair a scipeántar deighleog go huathoibríoch. Tapáil anseo chun sampla a fheiceáil</string>
<string name="revanced_sb_general_skiptoast_sum_off">Ní thaispeántar tósta. Tapáil anseo chun sampla a fheiceáil</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Fad an chnaipe scipeála</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Cé chomh fada a thaispeántar na cnaipí uathfholaigh scipeála agus scipeála go buaicphointe</string>
<string name="revanced_sb_general_skiptoast">Taispeáin teast cealaigh scipeála</string>
<string name="revanced_sb_general_skiptoast_sum_on">Taispeántar teast nuair a scipeáiltear deighleog go huathoibríoch. Tapáil an fógra teast chun an scipeáil a chealú</string>
<string name="revanced_sb_general_skiptoast_sum_off">Ní thaispeántar an tóstas</string>
<string name="revanced_sb_toast_on_skip_duration">Fad an tóstais scipeála</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Cé chomh fada a thaispeántar an fógra teast scipeála</string>
<string name="revanced_sb_duration_1s">1 soicind</string>
<string name="revanced_sb_duration_2s">2 soicind</string>
<string name="revanced_sb_duration_3s">3 soicind</string>
<string name="revanced_sb_duration_4s">4 soicind</string>
<string name="revanced_sb_duration_5s">5 soicind</string>
<string name="revanced_sb_duration_6s">6 soicind</string>
<string name="revanced_sb_duration_7s">7 soicindí</string>
<string name="revanced_sb_duration_8s">8 soicindí</string>
<string name="revanced_sb_duration_9s">9 soicindí</string>
<string name="revanced_sb_duration_10s">10 soicindí</string>
<string name="revanced_sb_general_time_without">Taispeáin fad físeáin gan codanna</string>
<string name="revanced_sb_general_time_without_sum_on">Fad físeáin lúide gach mír, léirithe i lúibíní in aice le fad iomlán an fhíse</string>
<string name="revanced_sb_general_time_without_sum_on">Taispeántar fad an fhíseáin lúide na deighleoga uile ar an mbarra cuardaigh</string>
<string name="revanced_sb_general_time_without_sum_off">Taispeántar fad físe iomlán</string>
<string name="revanced_sb_create_segment_category">Deighleoga nua a chruthú</string>
<string name="revanced_sb_enable_create_segment">Taispeáin cnaipe Cruthaigh deighleog nua</string>

View File

@@ -285,10 +285,13 @@ Nem fog értesülni semmilyen váratlan eseményről."</string>
<string name="revanced_hide_description_components_screen_title">Videóleírás</string>
<string name="revanced_hide_description_components_screen_summary">A videóleírás komponenseinek elrejtése vagy megjelenítése</string>
<string name="revanced_hide_filter_bar_screen_title">Szűrősáv</string>
<string name="revanced_hide_filter_bar_screen_summary">Szűrősáv elrejtése vagy megjelenítése a hírfolyamban, a keresési eredményekben és a kapcsolódó videókban</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Elrejtés a feedekben</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Elrejtve a feedekben</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Megjelenítés a feedekben</string>
<string name="revanced_hide_filter_bar_screen_summary">A szűrősáv elrejtése vagy megjelenítése a feedekben, az előzményekben, a keresési eredményekben és a kapcsolódó videókban</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Elrejtés a hírcsatornákban</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Elrejtve a hírcsatornákban</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Megjelenítve a hírcsatornákban</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Elrejtés az előzményekben</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Elrejtve az előzményekben</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Megjelenítve az előzményekben</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Elrejtés a keresési eredmények között</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Elrejtve a keresési eredmények között</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Megjelenítve a keresési eredmények között</string>
@@ -773,6 +776,9 @@ Az audiosáv menü megjelenítéséhez módosítsa a \"Videófolyamok hamisítá
<string name="revanced_hide_shorts_upcoming_button_title">Következő videó gomb elrejtése</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">A közelgő gomb el van rejtve</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Megjelenik a Közelgő gomb</string>
<string name="revanced_hide_shorts_effect_button_title">Effekt gomb elrejtése</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Az effekt gomb el van rejtve</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Az effekt gomb látható</string>
<string name="revanced_hide_shorts_green_screen_button_title">Zöld háttér gomb elrejtése</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">A zöld képernyő gomb el van rejtve</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">A zöld képernyő gomb látható</string>
@@ -954,11 +960,25 @@ Ez a funkció a legjobban 720p vagy annál alacsonyabb videóminőség mellett
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Az Átugrás gomb automatikus elrejtése</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">A kihagyás gomb néhány másodperc után eltűnik</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Az Átugrás gomb a teljes szegmenshez megjelenik</string>
<string name="revanced_sb_general_skiptoast">toast megjelenítése átugráskor</string>
<string name="revanced_sb_general_skiptoast_sum_on">Felugró üzenet megjelenítése, ha a szakasz automatikusan ki lett hagyva. Koppintson ide egy példa megtekintéséhez</string>
<string name="revanced_sb_general_skiptoast_sum_off">Felugró üzenet nem látható. Koppintson ide egy példa megtekintéséhez</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Átugrás gomb időtartama</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Meddig láthatók az automatikus elrejtésű átugrás és kiemelés gombok</string>
<string name="revanced_sb_general_skiptoast">Ugrás visszavonása felugró értesítés megjelenítése</string>
<string name="revanced_sb_general_skiptoast_sum_on">Felugró értesítés jelenik meg, amikor egy szegmens automatikusan átugrásra kerül. Érintse meg a felugró értesítést az átugrás visszavonásához.</string>
<string name="revanced_sb_general_skiptoast_sum_off">A felugró üzenet nem jelenik meg</string>
<string name="revanced_sb_toast_on_skip_duration">Átugrási felugró üzenet időtartama</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Meddig látható az átugrás felugró értesítés</string>
<string name="revanced_sb_duration_1s">1 másodperc</string>
<string name="revanced_sb_duration_2s">2 másodperc</string>
<string name="revanced_sb_duration_3s">3 másodperc</string>
<string name="revanced_sb_duration_4s">4 másodperc</string>
<string name="revanced_sb_duration_5s">5 másodperc</string>
<string name="revanced_sb_duration_6s">6 másodperc</string>
<string name="revanced_sb_duration_7s">7 másodperc</string>
<string name="revanced_sb_duration_8s">8 másodperc</string>
<string name="revanced_sb_duration_9s">9 másodperc</string>
<string name="revanced_sb_duration_10s">10 másodperc</string>
<string name="revanced_sb_general_time_without">A videó hosszának megjelenítése szegmensek nélkül</string>
<string name="revanced_sb_general_time_without_sum_on">A videó hossza mínusz minden szegmens, zárójelben a teljes videó hossza mellett</string>
<string name="revanced_sb_general_time_without_sum_on">A videó hossza az összes szegmens nélkül jelenik meg a csúszkán</string>
<string name="revanced_sb_general_time_without_sum_off">A videó teljes hossza látható</string>
<string name="revanced_sb_create_segment_category">Új szegmensek létrehozása</string>
<string name="revanced_sb_enable_create_segment">Új szegmens létrehozása gomb megjelenítése</string>

View File

@@ -285,10 +285,13 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
<string name="revanced_hide_description_components_screen_title">Տեսանյութի նկարագրություն</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_summary">Թաքցնել կամ ցուցադրել ֆիլտրի գոտին լրահոսում, որոնման արդյունքներում և հարակից տեսանյութերում</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_off">Ցույց է տրվում լեզվականում</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_summary_on">Թաքցված է լրահոսերում</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Ցուցադրված է լրահոսերում</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Թաքցնել պատմության մեջ</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Թաքցված է պատմության մեջ</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Ցուցադրված է պատմության մեջ</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_off">Ցուցադրված է որոնման արդյունքներում</string>
@@ -773,6 +776,9 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
<string name="revanced_hide_shorts_upcoming_button_title">Թաքցնել Առաջիկա կոճակը</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">\"Upcoming\" կոճակը թաքցված է</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">\"Upcoming\" կոճակը երևում է</string>
<string name="revanced_hide_shorts_effect_button_title">Թաքցնել Էֆեկտ կոճակը</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Էֆեկտի կոճակը թաքնված է</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Էֆեկտի կոճակը ցուցադրված է</string>
<string name="revanced_hide_shorts_green_screen_button_title">Թաքցնել Կանաչ էկրան կոճակը</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">\"Green Screen\" կոճակը թաքցված է</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">\"Green Screen\" կոճակը երևում է</string>
@@ -955,11 +961,25 @@ Seekbar thumbnails-ները կօգտագործեն նույն որակը, ինչ
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Ավտոմատ կերպով թաքցնել Skip կոճակը</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Բաց թողնել կոճակը թաքնվում է մի քանի վայրկյանից հետո</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Skip կոճակը ցուցադրվում է ամբողջ հատվածի համար</string>
<string name="revanced_sb_general_skiptoast">Ցուցադրել toast, երբ բաց թողնվի</string>
<string name="revanced_sb_general_skiptoast_sum_on">Toast ցույց է տրվում, երբ segment-ը ավտոմատ կերպով բաց թողնվում է: Տվեք այստեղ, որպեսզի տեսնեք օրինակը</string>
<string name="revanced_sb_general_skiptoast_sum_off">Toast չի ցույց տրվում: Տվեք այստեղ, որպեսզի տեսնեք օրինակը</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Բաց թողնելու կոճակի տևողությունը</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Ինչքան ժամանակ են ցուցադրվում ավտոմատ թաքնվող բաց թողնելու և առանձնացված մասին անցնելու կոճակները։</string>
<string name="revanced_sb_general_skiptoast">Ցուցադրել բաց թողնելը չեղարկելու ծանուցումը։</string>
<string name="revanced_sb_general_skiptoast_sum_on">Ծանուցում է ցուցադրվում, երբ հատվածն ավտոմատ կերպով բաց է թողնվում։ Հպեք ծանուցմանը՝ բացթողումը չեղարկելու համար։</string>
<string name="revanced_sb_general_skiptoast_sum_off">Ծանուցումը չի ցուցադրվում</string>
<string name="revanced_sb_toast_on_skip_duration">Բաց թողնելու ծանուցման տևողությունը</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Ինչքան ժամանակ է ցուցադրվում բաց թողնելու ծանուցումը։</string>
<string name="revanced_sb_duration_1s">1 վայրկյան</string>
<string name="revanced_sb_duration_2s">2 վայրկյան</string>
<string name="revanced_sb_duration_3s">3 վայրկյան</string>
<string name="revanced_sb_duration_4s">4 վայրկյան</string>
<string name="revanced_sb_duration_5s">5 վայրկյան</string>
<string name="revanced_sb_duration_6s">6 վայրկյան</string>
<string name="revanced_sb_duration_7s">7 վայրկյան</string>
<string name="revanced_sb_duration_8s">8 վայրկյան</string>
<string name="revanced_sb_duration_9s">9 վայրկյան</string>
<string name="revanced_sb_duration_10s">10 վայրկյան</string>
<string name="revanced_sb_general_time_without">Ցույց տալ տեսանյութի երկարությունը առանց segment-ների</string>
<string name="revanced_sb_general_time_without_sum_on">Տեսանյութի երկարությունը մինուս բոլոր segment-ները, ցույց է տրվում ամբողջ տեսանյութի երկարության կողքին ծալքերում</string>
<string name="revanced_sb_general_time_without_sum_on">Տեսանյութի երկարությունը հանած բոլոր հատվածները ցուցադրվում է որոնման գոտում</string>
<string name="revanced_sb_general_time_without_sum_off">Ցույց է տրվում ամբողջ տեսանյութի երկարությունը</string>
<string name="revanced_sb_create_segment_category">Նոր segment-ների ստեղծում</string>
<string name="revanced_sb_enable_create_segment">Ցուցադրել նոր հատված ստեղծելու կոճակը</string>

View File

@@ -285,10 +285,13 @@ Anda tidak akan diberi tahu tentang kejadian yang tidak terduga."</string>
<string name="revanced_hide_description_components_screen_title">Keterangan video</string>
<string name="revanced_hide_description_components_screen_summary">Sembunyikan atau tampilkan komponen keterangan video</string>
<string name="revanced_hide_filter_bar_screen_title">Bilah saring</string>
<string name="revanced_hide_filter_bar_screen_summary">Sembunyikan atau tampilkan bilah saring di bagian umpan, hasil pencarian, dan video terkait</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Sembunyikan di bagian umpan</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Disembunyikan di bagian umpan</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Tampilkan di bagian umpan</string>
<string name="revanced_hide_filter_bar_screen_summary">Sembunyikan atau tampilkan bilah penyaring di umpan, riwayat, hasil pencarian, dan video terkait</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Sembunyikan di umpan</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Disembunyikan di umpan</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Ditampilkan di umpan</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Sembunyikan di histori</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Disembunyikan di riwayat</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Ditampilkan di riwayat</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Sembunyikan di hasil penelusuran</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Disembunyikan di hasil penelusuran</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Ditampilkan di hasil penelusuran</string>
@@ -535,8 +538,8 @@ Menyesuaikan volume dengan mengusap secara vertikal di sisi kanan layar"</string
<string name="revanced_hide_share_button_summary_off">Tombol bagikan ditampilkan</string>
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_stop_ads_button_title">Sembunyikan Hentikan iklan</string>
<string name="revanced_hide_stop_ads_button_summary_on">Tombol berhenti iklan disembunyikan</string>
<string name="revanced_hide_stop_ads_button_summary_off">Tombol berhenti iklan ditampilkan</string>
<string name="revanced_hide_stop_ads_button_summary_on">Tombol hentikan iklan disembunyikan</string>
<string name="revanced_hide_stop_ads_button_summary_off">Tombol hentikan iklan ditampilkan</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
<string name="revanced_hide_report_button_title">Sembunyikan Laporkan</string>
@@ -764,15 +767,18 @@ Untuk menampilkan menu trek Audio, ubah 'Spoof aliran video' ke iOS TV"</string>
<string name="revanced_hide_shorts_save_sound_button_title">Sembunyikan Simpan musik</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">Tombol simpan musik disembunyikan</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">Tombol simpan musik ditampilkan</string>
<string name="revanced_hide_shorts_use_sound_button_title">Sembunyikan tombol gunakan suara ini</string>
<string name="revanced_hide_shorts_use_sound_button_title">Sembunyikan tombol Gunakan suara ini</string>
<string name="revanced_hide_shorts_use_sound_button_summary_on">Tombol gunakan suara ini disembunyikan</string>
<string name="revanced_hide_shorts_use_sound_button_summary_off">Tombol gunakan suara ini ditampilkan</string>
<string name="revanced_hide_shorts_use_template_button_title">Sembunyikan tombol Gunakan template ini</string>
<string name="revanced_hide_shorts_use_template_button_summary_on">Tombol gunakan templat ini disembunyikan</string>
<string name="revanced_hide_shorts_use_template_button_summary_off">Tombol Gunakan template ini ditampilkan</string>
<string name="revanced_hide_shorts_use_template_button_summary_on">Tombol gunakan template ini disembunyikan</string>
<string name="revanced_hide_shorts_use_template_button_summary_off">Tombol gunakan template ini ditampilkan</string>
<string name="revanced_hide_shorts_upcoming_button_title">Sembunyikan tombol Mendatang</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Tombol yang akan datang disembunyikan</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Tombol yang akan datang ditampilkan</string>
<string name="revanced_hide_shorts_effect_button_title">Sembunyikan tombol Efek</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Tombol Efek disembunyikan</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Tombol Efek ditampilkan</string>
<string name="revanced_hide_shorts_green_screen_button_title">Sembunyikan tombol Layar Hijau</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Tombol layar hijau disembunyikan</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Tombol layar hijau ditampilkan</string>
@@ -954,11 +960,25 @@ Fitur ini bekerja paling baik dengan kualitas video 720p atau lebih rendah dan s
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Sembunyikan tombol Lewati secara otomatis</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Tombol lewati disembunyikan setelah beberapa detik</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Tombol Lewati ditampilkan untuk seluruh segmen</string>
<string name="revanced_sb_general_skiptoast">Tampilkan sebuah pesan timbul ketika melewati</string>
<string name="revanced_sb_general_skiptoast_sum_on">Pesan timbul ditampilkan saat segmen dilewati secara otomatis. Tekan di sini untuk melihat contohnya</string>
<string name="revanced_sb_general_skiptoast_sum_off">Pesan timbul tidak ditampilkan. Tekan di sini untuk melihat contohnya</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Durasi tombol Lewati</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Berapa lama tombol sembunyikan otomatis lewati dan lewati ke sorotan ditampilkan</string>
<string name="revanced_sb_general_skiptoast">Tampilkan pembatalan pesan timbul lewati</string>
<string name="revanced_sb_general_skiptoast_sum_on">Pesan timbul ditampilkan saat segmen dilewati secara otomatis. Ketuk notifikasi pesan timbul untuk membatalkan lewati</string>
<string name="revanced_sb_general_skiptoast_sum_off">Pesan timbul tidak ditampilkan</string>
<string name="revanced_sb_toast_on_skip_duration">Durasi pesan timbul lewati</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Berapa lama notifikasi pesan timbul lewati ditampilkan</string>
<string name="revanced_sb_duration_1s">1 detik</string>
<string name="revanced_sb_duration_2s">2 detik</string>
<string name="revanced_sb_duration_3s">3 detik</string>
<string name="revanced_sb_duration_4s">4 detik</string>
<string name="revanced_sb_duration_5s">5 detik</string>
<string name="revanced_sb_duration_6s">6 detik</string>
<string name="revanced_sb_duration_7s">7 detik</string>
<string name="revanced_sb_duration_8s">8 detik</string>
<string name="revanced_sb_duration_9s">9 detik</string>
<string name="revanced_sb_duration_10s">10 detik</string>
<string name="revanced_sb_general_time_without">Tampilkan durasi video tanpa segmen</string>
<string name="revanced_sb_general_time_without_sum_on">Durasi video dikurangi semua segmen, ditampilkan dalam tanda kurung di samping durasi video penuh</string>
<string name="revanced_sb_general_time_without_sum_on">Durasi video tanpa semua segmen ditampilkan pada bilah pencarian</string>
<string name="revanced_sb_general_time_without_sum_off">Durasi video penuh ditampilkan</string>
<string name="revanced_sb_create_segment_category">Membuat segmen baru</string>
<string name="revanced_sb_enable_create_segment">Tampilkan tombol Buat segmen baru</string>

View File

@@ -285,10 +285,13 @@ Non sarai notificato di eventi imprevisti."</string>
<string name="revanced_hide_description_components_screen_title">Descrizione del video</string>
<string name="revanced_hide_description_components_screen_summary">Mostra o nascondi i componenti della descrizione del video</string>
<string name="revanced_hide_filter_bar_screen_title">Barra dei filtri</string>
<string name="revanced_hide_filter_bar_screen_summary">Nascondi o mostra la barra dei filtri nel feed, nei risultati di ricerca e nei video correlati</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Nascondi nel feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">È nascosto nel feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">È visibile nel feed</string>
<string name="revanced_hide_filter_bar_screen_summary">Nascondi o mostra la barra dei filtri nei feed, nella cronologia, nei risultati di ricerca e nei video correlati</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Nascondi nei feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Nascosto nei feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Mostrato nei feed</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Nascondi nella cronologia</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Nascosto nella cronologia</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Mostrato nella cronologia</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Nascondi nei risultati di ricerca</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Nascosto nei risultati di ricerca</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Mostrato nei risultati di ricerca</string>
@@ -773,6 +776,9 @@ Per mostrare il menu della traccia audio, cambia \"Spoof video streams\" in iOS
<string name="revanced_hide_shorts_upcoming_button_title">Nascondi il pulsante Prossimamente</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Il pulsante Imminente è nascosto</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Il pulsante Imminente è visibile</string>
<string name="revanced_hide_shorts_effect_button_title">Nascondi pulsante effetto</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Il pulsante Effetto è nascosto</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Il pulsante Effetto è mostrato</string>
<string name="revanced_hide_shorts_green_screen_button_title">Nascondi il pulsante Green Screen</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Il pulsante Schermo verde è nascosto</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Il pulsante Schermo verde è visibile</string>
@@ -954,11 +960,25 @@ Questa funzione funziona meglio con una qualità video di 720p o inferiore e qua
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Nascondi automaticamente il pulsante Salta</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Il pulsante Salta si nasconde dopo alcuni secondi</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Il pulsante Salta è mostrato per l\'intero segmento</string>
<string name="revanced_sb_general_skiptoast">Mostra un toast quando si salta</string>
<string name="revanced_sb_general_skiptoast_sum_on">Mostra una notifica quando un segmento è saltato automaticamente. Tocca qui per vedere un esempio</string>
<string name="revanced_sb_general_skiptoast_sum_off">La notifica è nascosta. Tocca qui per vedere un esempio</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Durata pulsante Salta</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Per quanto tempo vengono mostrati i pulsanti di nascondimento automatico e di salto all\'evidenziazione</string>
<string name="revanced_sb_general_skiptoast">Mostra toast annulla salto</string>
<string name="revanced_sb_general_skiptoast_sum_on">Il toast viene mostrato quando un segmento viene automaticamente saltato. Tocca la notifica toast per annullare il salto.</string>
<string name="revanced_sb_general_skiptoast_sum_off">Il toast non viene mostrato</string>
<string name="revanced_sb_toast_on_skip_duration">Durata toast Salta</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Per quanto tempo viene mostrata la notifica toast di salto</string>
<string name="revanced_sb_duration_1s">1 secondo</string>
<string name="revanced_sb_duration_2s">2 secondi</string>
<string name="revanced_sb_duration_3s">3 secondi</string>
<string name="revanced_sb_duration_4s">4 secondi</string>
<string name="revanced_sb_duration_5s">5 secondi</string>
<string name="revanced_sb_duration_6s">6 secondi</string>
<string name="revanced_sb_duration_7s">7 secondi</string>
<string name="revanced_sb_duration_8s">8 secondi</string>
<string name="revanced_sb_duration_9s">9 secondi</string>
<string name="revanced_sb_duration_10s">10 secondi</string>
<string name="revanced_sb_general_time_without">Mostra la durata del video senza segmenti</string>
<string name="revanced_sb_general_time_without_sum_on">La durata del video meno tutti gli eventuali segmenti, visibile tra parentesi accanto alla durata del video completo</string>
<string name="revanced_sb_general_time_without_sum_on">La durata del video meno tutti i segmenti è mostrata sulla barra di ricerca</string>
<string name="revanced_sb_general_time_without_sum_off">La durata totale del video è visibile</string>
<string name="revanced_sb_create_segment_category">Creazione di nuovi segmenti</string>
<string name="revanced_sb_enable_create_segment">Mostra il pulsante Crea nuovo segmento</string>

View File

@@ -285,10 +285,13 @@ Second \"item\" text"</string>
<string name="revanced_hide_description_components_screen_title">תיאור סרטון</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_summary">הסתר או הצג את סרגל הסינון בפיד, תוצאות חיפוש, וסרטונים קשורים</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_off">מוצג בפיד</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_summary_on">מוסתר בפידים</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">מוצג בפידים</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">הסתר בהיסטוריה</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">מוסתר בהיסטוריה</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">מוצג בהיסטוריה</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_off">מוצג בתוצאות חיפוש</string>
@@ -773,6 +776,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_upcoming_button_title">הסתר לחצן \'בקרוב\'</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">לחצן \'בקרוב\' מוסתר</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">לחצן \'בקרוב\' מוצג</string>
<string name="revanced_hide_shorts_effect_button_title">הסתר כפתור אפקט</string>
<string name="revanced_hide_shorts_effect_button_summary_on">כפתור האפקט מוסתר</string>
<string name="revanced_hide_shorts_effect_button_summary_off">כפתור האפקט מוצג</string>
<string name="revanced_hide_shorts_green_screen_button_title">הסתר לחצן מסך ירוק</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">לחצן מסך ירוק מוסתר</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">לחצן מסך ירוק מוצג</string>
@@ -957,11 +963,25 @@ Second \"item\" text"</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button">הסתר לחצן דילוג באופן אוטומטי</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">לחצן דילוג נעלם לאחר כמה שניות</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">לחצן דילוג מוצג עבור כל המקטע</string>
<string name="revanced_sb_general_skiptoast">הצג הודעה קופצת בעת דילוג</string>
<string name="revanced_sb_general_skiptoast_sum_on">הודעה קופצת מוצגת כאשר מקטע מדולג באופן אוטומטי. הקש כאן כדי לראות דוגמא</string>
<string name="revanced_sb_general_skiptoast_sum_off">הודעה קופצת אינה מוצגת. הקש כאן כדי לראות דוגמה</string>
<string name="revanced_sb_auto_hide_skip_button_duration">משך לחצן הדילוג</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">כמה זמן מוצגים כפתורי הדילוג והדילוג לסימון בהסתרה אוטומטית</string>
<string name="revanced_sb_general_skiptoast">הצג הודעה קופצת לביטול דילוג</string>
<string name="revanced_sb_general_skiptoast_sum_on">הודעה קופצת מוצגת כאשר קטע מדולג אוטומטית. הקש על ההודעה הקופצת כדי לבטל את הדילוג</string>
<string name="revanced_sb_general_skiptoast_sum_off">הטוסט לא מוצג</string>
<string name="revanced_sb_toast_on_skip_duration">משך טוסט הדילוג</string>
<string name="revanced_sb_toast_on_skip_duration_sum">כמה זמן מוצגת ההודעה הקופצת של הדילוג</string>
<string name="revanced_sb_duration_1s">שנייה אחת</string>
<string name="revanced_sb_duration_2s">שתי שניות</string>
<string name="revanced_sb_duration_3s">3 שניות</string>
<string name="revanced_sb_duration_4s">4 שניות</string>
<string name="revanced_sb_duration_5s">5 שניות</string>
<string name="revanced_sb_duration_6s">6 שניות</string>
<string name="revanced_sb_duration_7s">7 שניות</string>
<string name="revanced_sb_duration_8s">8 שניות</string>
<string name="revanced_sb_duration_9s">9 שניות</string>
<string name="revanced_sb_duration_10s">10 שניות</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_create_segment_category">יוצר מקטעים חדשים</string>
<string name="revanced_sb_enable_create_segment">הצג לחצן יצירת מקטע חדש</string>

View File

@@ -24,12 +24,12 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_failed_title">チェックに失敗しました</string>
<string name="revanced_check_environment_dialog_open_official_source_button">公式サイトを開く</string>
<string name="revanced_check_environment_dialog_ignore_button">無視</string>
<string name="revanced_check_environment_failed_message">&lt;h5&gt;このアプリはあなたによってパッチが適用されていないようです。&lt;/h5&gt;&lt;br&gt;このアプリは正しく機能しない可能性があり、&lt;b&gt;使用すると有害または危険になる可能性があります&lt;/b&gt;&lt;br&gt;&lt;br&gt;これらのチェックは、このアプリが事前にパッチが適用されているか、または他の誰かから取得されたことを意味します:&lt;br&gt;&lt;br&gt;&lt;small&gt;%1$s&lt;/small&gt;&lt;br&gt;検証済みで安全なアプリを使用していることを確認するために、&lt;b&gt;このアプリをアンインストールして自分でパッチを適用する&lt;/b&gt;ことを強くおめします。&lt;p&gt;&lt;br&gt;無視した場合、この警告は 2 回のみ表示されます。</string>
<string name="revanced_check_environment_not_same_patching_device">別のデバイスでパッチが適用されています</string>
<string name="revanced_check_environment_manager_not_expected_installer">ReVanced Manager によってインストールされていません</string>
<string name="revanced_check_environment_not_near_patch_time">10 分以上前にパッチが適用されています</string>
<string name="revanced_check_environment_not_near_patch_time_days">%s 日前にパッチが適用されています</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK の作成日時データが破損しています</string>
<string name="revanced_check_environment_failed_message">&lt;h5&gt;このアプリはあなたによってパッチが適用されていないようです。&lt;/h5&gt;&lt;br&gt;このアプリは正しく機能しない可能性があり、&lt;b&gt;使用すると有害または危険になる可能性があります&lt;/b&gt;&lt;br&gt;&lt;br&gt;これらのチェックは、このアプリが事前にパッチが適用されているか、または他の誰かから取得されたことを意味します:&lt;br&gt;&lt;br&gt;&lt;small&gt;%1$s&lt;/small&gt;&lt;br&gt;検証済みで安全なアプリを使用していることを確認するために、&lt;b&gt;このアプリをアンインストールして自分でパッチを適用する&lt;/b&gt;ことを強くおすすめします。&lt;p&gt;&lt;br&gt;無視した場合、この警告は 2 回のみ表示されます。</string>
<string name="revanced_check_environment_not_same_patching_device">別のデバイスでパッチが適用されてい</string>
<string name="revanced_check_environment_manager_not_expected_installer">ReVanced Manager によってインストールされていない</string>
<string name="revanced_check_environment_not_near_patch_time">10 分以上前にパッチが適用されてい</string>
<string name="revanced_check_environment_not_near_patch_time_days">%s 日前にパッチが適用されてい</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK の作成日時データが破損してい</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">設定</string>
@@ -91,11 +91,11 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_settings_screen_01_ads_title">広告</string>
<string name="revanced_settings_screen_02_alt_thumbnails_title">代替サムネイル</string>
<string name="revanced_settings_screen_03_feed_title">フィード</string>
<string name="revanced_settings_screen_04_general_title"></string>
<string name="revanced_settings_screen_04_general_title"></string>
<string name="revanced_settings_screen_05_player_title">プレーヤー</string>
<string name="revanced_settings_screen_06_shorts_title">ショート</string>
<string name="revanced_settings_screen_07_seekbar_title">シークバー</string>
<string name="revanced_settings_screen_08_swipe_controls_title">スワイプコントロール</string>
<string name="revanced_settings_screen_08_swipe_controls_title">スワイプ コントロール</string>
<string name="revanced_settings_screen_11_misc_title">その他</string>
<string name="revanced_settings_screen_12_video_title">動画</string>
<string name="revanced_restore_old_settings_menus_title">古い設定メニューを復元</string>
@@ -188,8 +188,8 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_show_more_button_summary_on">「もっと見る」ボタンを非表示にします</string>
<string name="revanced_hide_show_more_button_summary_off">「もっと見る」ボタンを非表示にします</string>
<string name="revanced_hide_ticket_shelf_title">チケット欄を非表示</string>
<string name="revanced_hide_ticket_shelf_summary_on">チケット欄は表示されません</string>
<string name="revanced_hide_ticket_shelf_summary_off">チケット欄は表示されます</string>
<string name="revanced_hide_ticket_shelf_summary_on">チケット欄を非表示にします</string>
<string name="revanced_hide_ticket_shelf_summary_off">チケット欄を非表示にします</string>
<string name="revanced_hide_timed_reactions_title">Timed Reaction を非表示</string>
<string name="revanced_hide_timed_reactions_summary_on">Timed Reaction とチャット欄のハートマーク アイコンは表示されません</string>
<string name="revanced_hide_timed_reactions_summary_off">Timed Reaction とチャット欄のハートマー ク アイコンは表示されます</string>
@@ -286,10 +286,13 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_description_components_screen_title">概要欄</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_summary">フィード、検索結果、関連動画の上部にカテゴリーごとに表示されるバーの設定</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_off">カテゴリー バーはフィードに表示されます</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_summary_on">フィードで非表示にします</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">フィードで非表示にします</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">履歴で非表示</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">履歴で非表示にします</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">履歴で非表示にします</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_off">カテゴリー バーは検索結果に表示されます</string>
@@ -376,53 +379,53 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
</patch>
<patch id="ad.general.hideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">一般的な広告を非表示</string>
<string name="revanced_hide_general_ads_summary_on">一般的な広告は表示されません</string>
<string name="revanced_hide_general_ads_summary_off">一般的な広告は表示されます</string>
<string name="revanced_hide_general_ads_summary_on">一般的な広告を非表示にします</string>
<string name="revanced_hide_general_ads_summary_off">一般的な広告を非表示にします</string>
<string name="revanced_hide_fullscreen_ads_title">全画面広告を非表示</string>
<string name="revanced_hide_fullscreen_ads_summary_on">"全画面広告は、アプリ起動時に表示されません
<string name="revanced_hide_fullscreen_ads_summary_on">"アプリ起動時の全画面広告を非表示にします
この機能は、古いデバイスでのみ利用できます"</string>
<string name="revanced_hide_fullscreen_ads_summary_off">全画面広告は、アプリ起動時に表示されます</string>
<string name="revanced_hide_fullscreen_ads_summary_off">アプリ起動時の全画面広告を非表示にします\n\nこの機能は、古いデバイスでのみ利用できます</string>
<string name="revanced_hide_paid_promotion_label_title">「プロモーションを含みます」ボタンを非表示</string>
<string name="revanced_hide_paid_promotion_label_summary_on">「プロモーションを含みます」ボタンはプレーヤー画面に表示されません</string>
<string name="revanced_hide_paid_promotion_label_summary_off">「プロモーションを含みます」ボタンはプレーヤー画面に表示されます</string>
<string name="revanced_hide_paid_promotion_label_summary_on">プレーヤー画面の「プロモーションを含みます」ボタンを非表示にします</string>
<string name="revanced_hide_paid_promotion_label_summary_off">プレーヤー画面の「プロモーションを含みます」ボタンを非表示にします</string>
<string name="revanced_hide_self_sponsor_ads_title">自己スポンサー カードを非表示</string>
<string name="revanced_hide_self_sponsor_ads_summary_on">自己スポンサー カードは表示されません</string>
<string name="revanced_hide_self_sponsor_ads_summary_off">自己スポンサー カードは表示されます</string>
<string name="revanced_hide_self_sponsor_ads_summary_on">自己スポンサー カードを非表示にします</string>
<string name="revanced_hide_self_sponsor_ads_summary_off">自己スポンサー カードを非表示にします</string>
<string name="revanced_hide_products_banner_title">「商品を表示」ボタンを非表示</string>
<string name="revanced_hide_products_banner_summary_on">「商品を表示」ボタンや商品ボタンはプレーヤー画面に表示されません</string>
<string name="revanced_hide_products_banner_summary_off">「商品を表示」ボタンや商品ボタンはプレーヤー画面に表示されます</string>
<string name="revanced_hide_products_banner_summary_on">プレーヤー画面の「商品を表示」ボタンや商品ボタンを非表示にします</string>
<string name="revanced_hide_products_banner_summary_off">プレーヤー画面の「商品を表示」ボタンや商品ボタンを非表示にします</string>
<string name="revanced_hide_end_screen_store_banner_title">終了画面のストアバナーを非表示</string>
<string name="revanced_hide_end_screen_store_banner_summary_on">終了画面のストアバナーは表示されません</string>
<string name="revanced_hide_end_screen_store_banner_summary_off">終了画面のストアバナーは表示されます</string>
<string name="revanced_hide_end_screen_store_banner_summary_on">終了画面のストアバナーを非表示にします</string>
<string name="revanced_hide_end_screen_store_banner_summary_off">終了画面のストアバナーを非表示にします</string>
<string name="revanced_hide_player_store_shelf_title">ストア広告を非表示</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_on">ストア広告を非表示にします</string>
<string name="revanced_hide_player_store_shelf_summary_off">ストア広告を非表示にします</string>
<string name="revanced_hide_shopping_links_title">商品へのリンクを非表示</string>
<string name="revanced_hide_shopping_links_summary_on">タグ付けされた商品へのリンクは概要欄に表示されません</string>
<string name="revanced_hide_shopping_links_summary_off">タグ付けされた商品へのリンクは概要欄に表示されます</string>
<string name="revanced_hide_shopping_links_summary_on">概要欄のタグ付けされた商品へのリンクを非表示にします</string>
<string name="revanced_hide_shopping_links_summary_off">概要欄のタグ付けされた商品へのリンクを非表示にします</string>
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_store_button_title">「ストアに移動」ボタンを非表示</string>
<string name="revanced_hide_visit_store_button_summary_on">「ストアに移動」ボタンはチャンネル ページに表示されません</string>
<string name="revanced_hide_visit_store_button_summary_off">「ストアに移動」ボタンはチャンネル ページに表示されます</string>
<string name="revanced_hide_visit_store_button_summary_on">チャンネル ページの「ストアに移動」ボタンを非表示にします</string>
<string name="revanced_hide_visit_store_button_summary_off">チャンネル ページの「ストアに移動」ボタンを非表示にします</string>
<string name="revanced_hide_web_search_results_title">ウェブ検索結果を非表示</string>
<string name="revanced_hide_web_search_results_summary_on">ウェブ検索結果は表示されません</string>
<string name="revanced_hide_web_search_results_summary_off">ウェブ検索結果は表示されます</string>
<string name="revanced_hide_web_search_results_summary_on">ウェブ検索結果を非表示にします</string>
<string name="revanced_hide_web_search_results_summary_off">ウェブ検索結果を非表示にします</string>
<string name="revanced_hide_merchandise_banners_title">商品バナーを非表示</string>
<string name="revanced_hide_merchandise_banners_summary_on">商品バナーは表示されません</string>
<string name="revanced_hide_merchandise_banners_summary_off">商品バナーは表示されます</string>
<string name="revanced_hide_merchandise_banners_summary_on">商品バナーを非表示にします</string>
<string name="revanced_hide_merchandise_banners_summary_off">商品バナーを非表示にします</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_fullscreen_ads_feature_not_available_toast">全画面広告の非表示は古いデバイス専用です</string>
</patch>
<patch id="ad.getpremium.hideGetPremiumPatch">
<string name="revanced_hide_get_premium_title">YouTube Premium の広告を非表示</string>
<string name="revanced_hide_get_premium_summary_on">YouTube Premium の広告は表示されません</string>
<string name="revanced_hide_get_premium_summary_off">YouTube Premium の広告は表示されます</string>
<string name="revanced_hide_get_premium_summary_on">YouTube Premium の広告を非表示にします</string>
<string name="revanced_hide_get_premium_summary_off">YouTube Premium の広告を非表示にします</string>
</patch>
<patch id="ad.video.videoAdsPatch">
<string name="revanced_hide_video_ads_title">動画広告を非表示</string>
<string name="revanced_hide_video_ads_summary_on">動画広告は表示されません</string>
<string name="revanced_hide_video_ads_summary_off">動画広告は表示されます</string>
<string name="revanced_hide_video_ads_summary_on">動画広告を非表示にします</string>
<string name="revanced_hide_video_ads_summary_off">動画広告を非表示にします</string>
</patch>
<patch id="interaction.copyvideourl.copyVideoUrlResourcePatch">
<string name="revanced_share_copy_url_success">URL をクリップボードにコピーしました</string>
@@ -536,8 +539,8 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_share_button_summary_off">共有ボタンは表示されます</string>
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_stop_ads_button_title">「広告を停止」を非表示</string>
<string name="revanced_hide_stop_ads_button_summary_on">「広告を停止」ボタンは表示されません</string>
<string name="revanced_hide_stop_ads_button_summary_off">「広告を停止」ボタンは表示されます</string>
<string name="revanced_hide_stop_ads_button_summary_on">「広告を停止」ボタンを非表示にします</string>
<string name="revanced_hide_stop_ads_button_summary_off">「広告を停止」ボタンを非表示にします</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
<string name="revanced_hide_report_button_title">報告ボタンを非表示</string>
@@ -766,14 +769,17 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_shorts_save_sound_button_summary_on">「音楽を保存」ボタンは表示されません</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">「音楽を保存」ボタンは表示されます</string>
<string name="revanced_hide_shorts_use_sound_button_title">「このサウンドを使用する」ボタンを非表示</string>
<string name="revanced_hide_shorts_use_sound_button_summary_on">「このサウンドを使用する」ボタンは表示されません</string>
<string name="revanced_hide_shorts_use_sound_button_summary_off">「このサウンドを使用する」ボタンは表示されます</string>
<string name="revanced_hide_shorts_use_sound_button_summary_on">「このサウンドを使用する」ボタンを非表示にします</string>
<string name="revanced_hide_shorts_use_sound_button_summary_off">「このサウンドを使用する」ボタンを非表示にします</string>
<string name="revanced_hide_shorts_use_template_button_title">「このテンプレートを使用する」ボタンを非表示</string>
<string name="revanced_hide_shorts_use_template_button_summary_on">「このテンプレートを使用する」ボタンは表示されません</string>
<string name="revanced_hide_shorts_use_template_button_summary_off">「このテンプレートを使用する」ボタンは表示されます</string>
<string name="revanced_hide_shorts_use_template_button_summary_on">「このテンプレートを使用する」ボタンを非表示にします</string>
<string name="revanced_hide_shorts_use_template_button_summary_off">「このテンプレートを使用する」ボタンを非表示にします</string>
<string name="revanced_hide_shorts_upcoming_button_title">今後の動画ボタンを非表示</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">今後の動画ボタンは表示されません</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">今後の動画ボタンは表示されます</string>
<string name="revanced_hide_shorts_effect_button_title">効果ボタンを非表示</string>
<string name="revanced_hide_shorts_effect_button_summary_on">効果ボタンを非表示にします</string>
<string name="revanced_hide_shorts_effect_button_summary_off">効果ボタンを非表示にします</string>
<string name="revanced_hide_shorts_green_screen_button_title">グリーンスクリーン ボタンを非表示</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">グリーンスクリーン ボタンは表示されません</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">グリーンスクリーン ボタンは表示されます</string>
@@ -957,11 +963,25 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_sb_enable_auto_hide_skip_segment_button">スキップボタンを自動的に非表示</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">スキップボタンは、表示された数秒後に自動的に非表示になります</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">スキップボタンは、セグメントの開始から終了まで表示されます</string>
<string name="revanced_sb_general_skiptoast">スキップ時にトーストを表示する</string>
<string name="revanced_sb_general_skiptoast_sum_on">セグメントが自動的にスキップされると、トースト ポップアップが表示されます。サンプルを表示するには、ここをタップしてください</string>
<string name="revanced_sb_general_skiptoast_sum_off">セグメントが自動的にスキップされても、トースト ポップアップは表示されません。サンプルを表示するには、ここをタップしてください</string>
<string name="revanced_sb_auto_hide_skip_button_duration">スキップボタンの表示時間</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">自動非表示のスキップボタンとハイライトへのスキップボタンがどれくらいの期間表示されるか</string>
<string name="revanced_sb_general_skiptoast">スキップの取り消しトーストを表示</string>
<string name="revanced_sb_general_skiptoast_sum_on">セグメントが自動的にスキップされたときにトーストが表示されます。スキップを取り消すには、トースト通知をタップします。</string>
<string name="revanced_sb_general_skiptoast_sum_off">トーストは表示されません</string>
<string name="revanced_sb_toast_on_skip_duration">スキップトーストの表示時間</string>
<string name="revanced_sb_toast_on_skip_duration_sum">スキップトースト通知がどれくらいの期間表示されるか</string>
<string name="revanced_sb_duration_1s">1秒</string>
<string name="revanced_sb_duration_2s">2秒</string>
<string name="revanced_sb_duration_3s">3秒</string>
<string name="revanced_sb_duration_4s">4秒</string>
<string name="revanced_sb_duration_5s">5秒</string>
<string name="revanced_sb_duration_6s">6秒</string>
<string name="revanced_sb_duration_7s">7秒</string>
<string name="revanced_sb_duration_8s">8秒</string>
<string name="revanced_sb_duration_9s">9秒</string>
<string name="revanced_sb_duration_10s">10秒</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_create_segment_category">セグメントの作成</string>
<string name="revanced_sb_enable_create_segment">セグメント作成ボタンを表示する</string>
@@ -1384,9 +1404,9 @@ Automotive レイアウト
<string name="revanced_remove_tracking_query_parameter_summary_off">追跡パラメータはリンクから削除されません</string>
</patch>
<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_off">動画を開いたとき、吹き替え音声が再生される場合があります</string>
<string name="revanced_force_original_audio_summary_off">動画を開いたとき、オリジナルの音声が再生されます</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>
@@ -1396,9 +1416,9 @@ Automotive レイアウト
<string name="revanced_remember_video_quality_last_selected_title">画質の変更を保存する</string>
<string name="revanced_remember_video_quality_last_selected_summary_on">画質の変更はすべての動画に適用されます</string>
<string name="revanced_remember_video_quality_last_selected_summary_off">画質の変更は現在の動画にのみ適用されます</string>
<string name="revanced_remember_video_quality_last_selected_toast_title">画質変更時にトーストを表示する</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_on">デフォルトの動画品質が変更されると、トースト ポップアップ表示されます</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_off">デフォルトの動画品質が変更されても、トースト ポップアップ表示されません</string>
<string name="revanced_remember_video_quality_last_selected_toast_title">画質変更時にトーストを表示</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_on">デフォルトの質が変更された際に、トースト ポップアップ表示ます</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_off">デフォルトの質が変更された際に、トースト ポップアップ表示します</string>
<string name="revanced_video_quality_default_wifi_title">デフォルトの画質Wi-Fi</string>
<string name="revanced_video_quality_default_mobile_title">デフォルトの画質(携帯回線)</string>
<string name="revanced_remember_shorts_quality_last_selected_title">ショートの画質の変更を保存する</string>
@@ -1432,9 +1452,9 @@ Automotive レイアウト
<string name="revanced_remember_playback_speed_last_selected_title">再生速度の変更を保存する</string>
<string name="revanced_remember_playback_speed_last_selected_summary_on">再生速度の変更はすべての動画に適用されます</string>
<string name="revanced_remember_playback_speed_last_selected_summary_off">再生速度の変更は現在の動画にのみ適用されます</string>
<string name="revanced_remember_playback_speed_last_selected_toast_title">再生速度変更時にトーストを表示</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_on">デフォルトの再生速度が変更されると、トースト ポップアップ表示されます</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_off">デフォルトの再生速度が変更されても、トースト ポップアップ表示されません</string>
<string name="revanced_remember_playback_speed_last_selected_toast_title">再生速度変更時にトーストを表示</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_on">デフォルトの再生速度が変更された際に、トースト ポップアップ表示ます</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_off">デフォルトの再生速度が変更された際に、トースト ポップアップ表示します</string>
<string name="revanced_playback_speed_default_title">デフォルトの再生速度</string>
<string name="revanced_remember_playback_speed_toast">デフォルトの再生速度: %s</string>
</patch>
@@ -1532,13 +1552,13 @@ AVC は、最大解像度が 1080p であり、Opus オーディオ コーデッ
<string name="revanced_chat_screen_summary">チャットの設定</string>
<string name="revanced_misc_screen_title">その他</string>
<string name="revanced_misc_screen_summary">その他の設定</string>
<string name="revanced_general_category_title">般設定</string>
<string name="revanced_general_category_title">般設定</string>
<string name="revanced_other_category_title">その他の設定</string>
<string name="revanced_client_ads_category_title">クライアントサイド広告</string>
<string name="revanced_surestream_ads_category_title">サーバー側サレストリーム広告</string>
<string name="revanced_twitch_debug_title">デバッグログ</string>
<string name="revanced_twitch_debug_summary_on">デバッグログ有効</string>
<string name="revanced_twitch_debug_summary_off">デバッグログは無効で</string>
<string name="revanced_client_ads_category_title">クライアント広告</string>
<string name="revanced_surestream_ads_category_title">サーバー側 SureStream 広告</string>
<string name="revanced_twitch_debug_title">デバッグログを有効化</string>
<string name="revanced_twitch_debug_summary_on">デバッグログ有効にしま</string>
<string name="revanced_twitch_debug_summary_off">デバッグログを有効にしま</string>
</patch>
</app>
</resources>

View File

@@ -62,7 +62,7 @@ Second \"item\" text"</string>
<!-- Settings about dialog. -->
<string name="revanced_settings_about_links_body">ReVanced Patches &lt;i&gt;%s&lt;/i&gt;&lt;br&gt;버전을 사용 중입니다</string>
<string name="revanced_settings_about_links_dev_header">알림</string>
<string name="revanced_settings_about_links_dev_body">Pre-Release 버전이므로&lt;br&gt;알려지지 않은 문제점이&lt;br&gt;발생할 수 있습니다</string>
<string name="revanced_settings_about_links_dev_body">Pre-release 버전이므로&lt;br&gt;알려지지 않은 문제점이&lt;br&gt;발생할 수 있습니다</string>
<string name="revanced_settings_about_links_header">공식 링크</string>
<!-- NOTE: the about strings above are duplicated in the TikTok about screen code,
and changes made here must also be made there. -->
@@ -126,7 +126,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_debug_stacktrace_title">로그 스택 트레이스</string>
<string name="revanced_debug_stacktrace_summary_on">디버그 로그에 로그 스택 트레이스를 포함합니다</string>
<string name="revanced_debug_stacktrace_summary_off">디버그 로그에 로그 스택 트레이스를 포함하지 않습니다</string>
<string name="revanced_debug_toast_on_error_title">ReVanced 오류 팝업 메시지 표시하기</string>
<string name="revanced_debug_toast_on_error_title">ReVanced 오류 메시지 표시하기</string>
<string name="revanced_debug_toast_on_error_summary_on">오류가 발생하면 팝업 메시지를 표시합니다</string>
<string name="revanced_debug_toast_on_error_summary_off">오류가 발생하면 팝업 메시지를 표시하지 않습니다</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"오류 메시지를 비활성화하면 모든 ReVanced 오류 알림이 숨겨집니다.
@@ -289,10 +289,13 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_hide_description_components_screen_title">동영상 설명</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_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_summary_on">피드에서 카테고리 바가 숨겨집니다</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">피드에서 카테고리 바가 표시됩니다</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">기록에서 카테고리 바 숨기기</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">기록에서 카테고리 바가 숨겨집니다</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">기록에서 카테고리 바가 표시됩니다</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_off">검색 결과에서 카테고리 바가 표시됩니다</string>
@@ -761,9 +764,9 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_hide_shorts_preview_comment_title">댓글 미리보기 숨기기</string>
<string name="revanced_hide_shorts_preview_comment_summary_on">댓글 미리보기가 숨겨집니다</string>
<string name="revanced_hide_shorts_preview_comment_summary_off">댓글 미리보기가 표시됩니다</string>
<string name="revanced_hide_shorts_save_sound_button_title">(재생목록에) 음악 저장 버튼 숨기기</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">(재생목록에) 음악 저장 버튼이 숨겨집니다</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">(재생목록에) 음악 저장 버튼이 표시됩니다</string>
<string name="revanced_hide_shorts_save_sound_button_title">음악 저장 버튼 숨기기</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">음악 저장 버튼이 숨겨집니다</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">음악 저장 버튼이 표시됩니다</string>
<string name="revanced_hide_shorts_use_sound_button_title">\'이 사운드 사용\' 버튼 숨기기</string>
<string name="revanced_hide_shorts_use_sound_button_summary_on">\'이 사운드 사용\' 버튼이 숨겨집니다</string>
<string name="revanced_hide_shorts_use_sound_button_summary_off">\'이 사운드 사용\' 버튼이 표시됩니다</string>
@@ -773,6 +776,9 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_hide_shorts_upcoming_button_title">예정 버튼 숨기기</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">(Premiere 또는 실시간) 예정 버튼이 숨겨집니다</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">(Premiere 또는 실시간) 예정 버튼이 표시됩니다</string>
<string name="revanced_hide_shorts_effect_button_title">효과 버튼 숨기기</string>
<string name="revanced_hide_shorts_effect_button_summary_on">효과 버튼이 숨겨집니다</string>
<string name="revanced_hide_shorts_effect_button_summary_off">효과 버튼이 표시됩니다</string>
<string name="revanced_hide_shorts_green_screen_button_title">그린 스크린 버튼 숨기기</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">그린 스크린 버튼이 숨겨집니다</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">그린 스크린 버튼이 표시됩니다</string>
@@ -898,7 +904,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_ryd_estimated_like_title">추정되는 좋아요 수 표시하기</string>
<string name="revanced_ryd_estimated_like_summary_on">좋아요 수가 숨겨진 동영상에서 추정되는 좋아요 수를 표시합니다</string>
<string name="revanced_ryd_estimated_like_summary_off">좋아요 수가 숨겨진 동영상에서 추정되는 좋아요 수를 표시하지 않습니다</string>
<string name="revanced_ryd_toast_on_connection_error_title">API 사용할 수 없을 때, 팝업 메시지 표시하기</string>
<string name="revanced_ryd_toast_on_connection_error_title">API 사용 불가 메시지 표시하기</string>
<string name="revanced_ryd_toast_on_connection_error_summary_on">ReturnYouTubeDislike를 사용할 수 없을 때, 팝업 메시지를 표시합니다</string>
<string name="revanced_ryd_toast_on_connection_error_summary_off">ReturnYouTubeDislike를 사용할 수 없을 때, 팝업 메시지를 표시하지 않습니다</string>
<string name="revanced_ryd_attribution_summary">싫어요 수의 데이터는 Return YouTube Dislike API에 의해 제공됩니다. 자세한 내용을 보려면 여기를 누르세요</string>
@@ -957,12 +963,26 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_sb_enable_auto_hide_skip_segment_button">자동으로 건너뛰기 버튼 숨기기</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">건너뛰기 버튼이 몇 초 후에 사라집니다</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">건너뛰기 버튼이 해당 구간이 끝날 때까지 표시됩니다</string>
<string name="revanced_sb_general_skiptoast">건너뛸 때, 팝업 메시지 표시하기</string>
<string name="revanced_sb_general_skiptoast_sum_on">자동으로 구간을 건너뛸 때, 팝업 메시지를 표시합니다. 여기를 누르면 예시를 볼 수 있습니다</string>
<string name="revanced_sb_general_skiptoast_sum_off">자동으로 구간을 건너뛸 때, 팝업 메시지 표시하지 않습니다. 여기를 누르면 예시를 볼 수 있습니다</string>
<string name="revanced_sb_auto_hide_skip_button_duration">건너뛰기 버튼 표시 시간</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">자동으로 숨겨지는 \'건너뛰기\' 및 \'하이라이트로 건너뛰기\' 버튼이 표시되는 시간을 설정할 수 있습니다</string>
<string name="revanced_sb_general_skiptoast">건너뛰기 취소 메시지 표시하</string>
<string name="revanced_sb_general_skiptoast_sum_on">구간을 자동으로 건너뛰는 경우에 팝업 메시지를 표시합니다\n\n팝업 메시지를 눌러서 건너뛰기를 취소할 수 있습니다</string>
<string name="revanced_sb_general_skiptoast_sum_off">팝업 메시지를 표시하지 않습니다</string>
<string name="revanced_sb_toast_on_skip_duration">건너뛰기 팝업 메시지 표시 시간</string>
<string name="revanced_sb_toast_on_skip_duration_sum">건너뛰기 팝업 메시지가 표시되는 시간을 설정할 수 있습니다</string>
<string name="revanced_sb_duration_1s">1 초</string>
<string name="revanced_sb_duration_2s">2 초</string>
<string name="revanced_sb_duration_3s">3 초</string>
<string name="revanced_sb_duration_4s">4 초</string>
<string name="revanced_sb_duration_5s">5 초</string>
<string name="revanced_sb_duration_6s">6 초</string>
<string name="revanced_sb_duration_7s">7 초</string>
<string name="revanced_sb_duration_8s">8 초</string>
<string name="revanced_sb_duration_9s">9 초</string>
<string name="revanced_sb_duration_10s">10 초</string>
<string name="revanced_sb_general_time_without">건너뛸 구간을 제외한 시간 표시하기</string>
<string name="revanced_sb_general_time_without_sum_on">건너뛸 구간을 제외한 전체 동영상 길이를 타임스탬프에 표시합니다</string>
<string name="revanced_sb_general_time_without_sum_off">건너뛸 구간을 포함한 전체 동영상 길이를 타임스탬프에 표시합니다</string>
<string name="revanced_sb_general_time_without_sum_on">건너뛸 구간을 제외한 동영상 길이를 재생바에 표시합니다</string>
<string name="revanced_sb_general_time_without_sum_off">건너뛸 구간을 포함한 동영상 길이를 재생바에 표시합니다</string>
<string name="revanced_sb_create_segment_category">새로운 구간 추가하기</string>
<string name="revanced_sb_enable_create_segment">구간 추가 버튼 표시하기</string>
<string name="revanced_sb_enable_create_segment_sum_on">플레이어에서 구간 추가 버튼을 표시합니다</string>
@@ -977,7 +997,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_sb_guidelines_popup_already_read">이미 읽음</string>
<string name="revanced_sb_guidelines_popup_open">보기</string>
<string name="revanced_sb_general">일반</string>
<string name="revanced_sb_toast_on_connection_error_title">API 사용할 수 없을 때, 팝업 메시지 표시하기</string>
<string name="revanced_sb_toast_on_connection_error_title">API 사용 불가 메시지 표시하기</string>
<string name="revanced_sb_toast_on_connection_error_summary_on">SponsorBlock을 사용할 수 없을 때, 팝업 메시지를 표시합니다</string>
<string name="revanced_sb_toast_on_connection_error_summary_off">SponsorBlock을 사용할 수 없을 때, 팝업 메시지를 표시하지 않습니다</string>
<string name="revanced_sb_general_skipcount">건너뛴 횟수 기록 활성화하기</string>
@@ -1308,7 +1328,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
이 설정을 활성화하면 동영상 URL이 API 서버로 전송되며, 다른 데이터는 전송되지 않습니다. 동영상에 DeArrow 썸네일이 없는 경우에는 원본 썸네일 또는 스틸 컷 썸네일이 표시됩니다
DeArrow에 대해 자세히 알아보려면 여기를 누르세요"</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">API 사용할 수 없을 때, 팝업 메시지 표시하기</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">API 사용 불가 메시지 표시하기</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">DeArrow를 사용할 수 없을 때, 팝업 메시지를 표시합니다</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">DeArrow를 사용할 수 없을 때, 팝업 메시지를 표시하지 않습니다</string>
<string name="revanced_alt_thumbnail_dearrow_api_url_title">DeArrow API 엔드포인트</string>
@@ -1406,8 +1426,8 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요"</string>
<string name="revanced_remember_video_quality_last_selected_summary_on">동영상 화질 값이 변경될 때마다 기본 동영상 화질으로 저장합니다</string>
<string name="revanced_remember_video_quality_last_selected_summary_off">동영상 화질 값이 변경될 때마다 기본 동영상 화질으로 저장하지 않습니다</string>
<string name="revanced_remember_video_quality_last_selected_toast_title">동영상 화질 변경 메시지 표시하기</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_on">기본 동영상 화질 값이 변경되었을 때, 팝업 메시지를 표시합니다</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_off">기본 동영상 화질 값이 변경되었을 때, 팝업 메시지를 표시하지 않습니다</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_on">기본 동영상 화질 값이 변경될 때마다 팝업 메시지를 표시합니다</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_off">기본 동영상 화질 값이 변경될 때마다 팝업 메시지를 표시하지 않습니다</string>
<string name="revanced_video_quality_default_wifi_title">Wi-Fi 이용 시 기본 동영상 화질</string>
<string name="revanced_video_quality_default_mobile_title">모바일 네트워크 이용 시 기본 동영상 화질</string>
<string name="revanced_remember_shorts_quality_last_selected_title">Shorts 화질 저장 활성화하기</string>
@@ -1442,8 +1462,8 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요"</string>
<string name="revanced_remember_playback_speed_last_selected_summary_on">동영상 재생 속도 값이 변경될 때마다 기본 동영상 재생 속도로 저장합니다</string>
<string name="revanced_remember_playback_speed_last_selected_summary_off">동영상 재생 속도 값이 변경될 때마다 기본 동영상 재생 속도로 저장하지 않습니다</string>
<string name="revanced_remember_playback_speed_last_selected_toast_title">동영상 재생 속도 변경 메시지 표시하기</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_on">기본 동영상 재생 속도 값이 변경되었을 때, 팝업 메시지를 표시합니다</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_off">기본 동영상 재생 속도 값이 변경되었을 때, 팝업 메시지를 표시하지 않습니다</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_on">기본 동영상 재생 속도 값이 변경될 때마다 팝업 메시지를 표시합니다</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_off">기본 동영상 재생 속도 값이 변경될 때마다 팝업 메시지를 표시하지 않습니다</string>
<string name="revanced_playback_speed_default_title">기본 동영상 재생 속도</string>
<string name="revanced_remember_playback_speed_toast">기본 동영상 재생 속도 값을 %s 로 변경하였습니다</string>
</patch>

View File

@@ -285,10 +285,13 @@ Apie netikėtus įvykius nebus pranešta."</string>
<string name="revanced_hide_description_components_screen_title">Vaizdo įrašo aprašymas</string>
<string name="revanced_hide_description_components_screen_summary">Slėpti arba rodyti vaizdo įrašo aprašymo komponentus</string>
<string name="revanced_hide_filter_bar_screen_title">Filtravimo juosta</string>
<string name="revanced_hide_filter_bar_screen_summary">Slėpti arba rodyti filtrų juostą sklaidoje, paieškos rezultatuose ir susijusiuose vaizdo įrašuose</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Slėpti sklaidoje</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Paslėpta sklaidoje</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Rodoma sklaidoje</string>
<string name="revanced_hide_filter_bar_screen_summary">Slėpti arba rodyti filtrų juostą sklaidos kanaluose, istorijoje, paieškos rezultatuose ir susijusiuose vaizdo įrašuose.</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Slėpti sklaidos kanaluose</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Paslėpta sklaidos kanaluose</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Matoma sklaidos kanaluose</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Slėpti istorijoje</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Paslėpta istorijoje</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Matoma istorijoje</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Slėpti paieškos rezultatuose</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Paslėpta paieškos rezultatuose</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Rodoma paieškos rezultatuose</string>
@@ -771,6 +774,9 @@ Jei pakeitus šį nustatymą neįsigalioja, pabandykite perjungti į inkognito r
<string name="revanced_hide_shorts_upcoming_button_title">Paslėpti mygtuką „Ateina\"</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">\"Ateinančių\" mygtukas paslėptas</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">\"Ateinančių\" mygtukas rodomas</string>
<string name="revanced_hide_shorts_effect_button_title">Slėpti efekto mygtuką</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Efekto mygtukas paslėptas</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Efekto mygtukas rodomas</string>
<string name="revanced_hide_shorts_green_screen_button_title">Paslėpti mygtuką „Žalias ekranas\"</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">\"Žaliojo ekrano\" mygtukas paslėptas</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">\"Žaliojo ekrano\" mygtukas rodomas</string>
@@ -952,11 +958,25 @@ Paieškos juostos miniatiūros bus naudojamos tos pačios kokybės kaip dabartin
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Automatiškai slėpti praleidimo mygtuką</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Praleidimo mygtukas pasislėps po kelių sekundžių</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Praleidimo mygtukas rodomas visam segmentui</string>
<string name="revanced_sb_general_skiptoast">Rodyti toast praleidžiant</string>
<string name="revanced_sb_general_skiptoast_sum_on">Pranešimas rodomas automatiškai praleidžiant segmentą. Bakstelėkite čia, norėdami pamatyti pavyzdį</string>
<string name="revanced_sb_general_skiptoast_sum_off">Pranešimas nerodomas. Bakstelėkite čia, norėdami pamatyti pavyzdį</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Praleidimo mygtuko trukmė</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Kiek laiko rodomi automatinio paslėpimo praleidimo ir praleidimo iki paryškinimo mygtukai</string>
<string name="revanced_sb_general_skiptoast">Rodyti praleidimo anuliavimo pranešimą</string>
<string name="revanced_sb_general_skiptoast_sum_on">Pranešimas rodomas, kai segmentas automatiškai praleidžiamas. Bakstelėkite pranešimą, norėdami anuliuoti praleidimą</string>
<string name="revanced_sb_general_skiptoast_sum_off">Pranešimas nerodomas</string>
<string name="revanced_sb_toast_on_skip_duration">Praleidimo pranešimo trukmė</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Kiek laiko rodomas praleidimo pranešimas</string>
<string name="revanced_sb_duration_1s">1 sekundė</string>
<string name="revanced_sb_duration_2s">2 sekundės</string>
<string name="revanced_sb_duration_3s">3 sekundės</string>
<string name="revanced_sb_duration_4s">4 sekundės</string>
<string name="revanced_sb_duration_5s">5 sekundės</string>
<string name="revanced_sb_duration_6s">6 sekundės</string>
<string name="revanced_sb_duration_7s">7 sekundės</string>
<string name="revanced_sb_duration_8s">8 sekundės</string>
<string name="revanced_sb_duration_9s">9 sekundės</string>
<string name="revanced_sb_duration_10s">10 sekundžių</string>
<string name="revanced_sb_general_time_without">Rodyti vaizdo įrašo trukmę be segmentų</string>
<string name="revanced_sb_general_time_without_sum_on">Vaizdo įrašo trukmė minus visi segmentai, rodoma skliausteliuose šalia visos vaizdo įrašo trukmės</string>
<string name="revanced_sb_general_time_without_sum_on">Vaizdo įrašo trukmė be visų segmentų rodoma paieškos juostoje</string>
<string name="revanced_sb_general_time_without_sum_off">Rodoma visa vaizdo įrašo trukmė</string>
<string name="revanced_sb_create_segment_category">Kuriant naujus segmentus</string>
<string name="revanced_sb_enable_create_segment">Rodyti mygtuką „Kurti naują segmentą“</string>

View File

@@ -285,10 +285,13 @@ Jūs netiksit informēts par neparedzētiem notikumiem."</string>
<string name="revanced_hide_description_components_screen_title">Videoklipa apraksts</string>
<string name="revanced_hide_description_components_screen_summary">Slēpt vai parādīt videoklipa apraksta komponentus</string>
<string name="revanced_hide_filter_bar_screen_title">Filtra josla</string>
<string name="revanced_hide_filter_bar_screen_summary">Paslēpt vai rādīt filtru joslu plūsmā, meklēšanas rezultātos un saistītajos videoklipos</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Slēpt plūsmā</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Paslēpts plūsmā</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Redzams plūsmā</string>
<string name="revanced_hide_filter_bar_screen_summary">Slēpt vai rādīt filtru joslu plūsmās, vēsturē, meklēšanas rezultātos un saistītajos videoklipos</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Slēpt plūsmās</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Slēpts plūsmās</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Rādīts plūsmās</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Slēpt vēsturē</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Slēpts vēsturē</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Rādīts vēsturē</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Paslēpt meklēšanas rezultātos</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Paslēpts meklēšanas rezultātos</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Redzams meklēšanas rezultātos</string>
@@ -773,6 +776,9 @@ Lai parādītu audio celiņu izvēlni, mainiet \"Video straumju viltošana\" uz
<string name="revanced_hide_shorts_upcoming_button_title">Paslēpt pogu \"Gaidāmie\"</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Nākamās pogas ir paslēptas</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Nākamās pogas ir redzamas</string>
<string name="revanced_hide_shorts_effect_button_title">Paslēpt efekta pogu</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Efekta poga ir paslēpta</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Efekta poga ir redzama</string>
<string name="revanced_hide_shorts_green_screen_button_title">Paslēpt pogu \"Zaļais ekrāns\"</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Zaļā ekrāna poga ir paslēpta</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Zaļā ekrāna poga ir redzama</string>
@@ -956,11 +962,25 @@ Laika skalas miniatūras izmantos tādu pašu kvalitāti kā pašreizējais vide
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Automātiski paslēpt pogu Izlaist</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Izlaides poga paslēpjas pēc dažām sekundēm</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Poga Izlaist ir redzama visam segmentam</string>
<string name="revanced_sb_general_skiptoast">Rādīt paziņojumu, kad tiek veikta izlaišana</string>
<string name="revanced_sb_general_skiptoast_sum_on">Paziņojums parādās, kad segments tiek automātiski izlaists. Pieskarieties šeit, lai redzētu piemēru</string>
<string name="revanced_sb_general_skiptoast_sum_off">Paziņojums netiek parādīts. Pieskarieties šeit, lai redzētu piemēru</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Izlaišanas pogas ilgums</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Cik ilgi tiek rādītas automātiskās paslēpšanas izlaišanas un pārejas uz izcēlumu pogas</string>
<string name="revanced_sb_general_skiptoast">Rādīt atsaukt izlaišanas paziņojumu</string>
<string name="revanced_sb_general_skiptoast_sum_on">Paziņojums tiek rādīts, kad segments tiek automātiski izlaists. Pieskarieties paziņojumam, lai atsauktu izlaišanu</string>
<string name="revanced_sb_general_skiptoast_sum_off">Paziņojums netiek rādīts</string>
<string name="revanced_sb_toast_on_skip_duration">Izlaišanas paziņojuma ilgums</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Cik ilgi tiek rādīts izlaišanas paziņojums</string>
<string name="revanced_sb_duration_1s">1 sekunde</string>
<string name="revanced_sb_duration_2s">2 sekundes</string>
<string name="revanced_sb_duration_3s">3 sekundes</string>
<string name="revanced_sb_duration_4s">4 sekundes</string>
<string name="revanced_sb_duration_5s">5 sekundes</string>
<string name="revanced_sb_duration_6s">6 sekundes</string>
<string name="revanced_sb_duration_7s">7 sekundes</string>
<string name="revanced_sb_duration_8s">8 sekundes</string>
<string name="revanced_sb_duration_9s">9 sekundes</string>
<string name="revanced_sb_duration_10s">10 sekundes</string>
<string name="revanced_sb_general_time_without">Parādīt video garumu bez segmentiem</string>
<string name="revanced_sb_general_time_without_sum_on">Video garums mīnus visi segmenti, parādīts iekavās blakus pilnam video garumam</string>
<string name="revanced_sb_general_time_without_sum_on">Video garums bez visiem segmentiem tiek rādīts meklēšanas joslā</string>
<string name="revanced_sb_general_time_without_sum_off">Pilns video garums parādīts</string>
<string name="revanced_sb_create_segment_category">Jaunu segmentu izveide</string>
<string name="revanced_sb_enable_create_segment">Rādīt pogu Izveidot jaunu segmentu</string>

View File

@@ -285,10 +285,13 @@ U wordt niet op de hoogte gesteld van onverwachte gebeurtenissen."</string>
<string name="revanced_hide_description_components_screen_title">Videobeschrijving</string>
<string name="revanced_hide_description_components_screen_summary">Skjul eller vis komponentene i videoens beskrivelse</string>
<string name="revanced_hide_filter_bar_screen_title">Filterbaren</string>
<string name="revanced_hide_filter_bar_screen_summary">De filterbalk in de feed, zoekresultaten en gerelateerde video\'s verbergen of weergeven</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Skjul i feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Sjul i feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Vis i feed</string>
<string name="revanced_hide_filter_bar_screen_summary">Filterbalk verbergen of tonen in de feeds, geschiedenis, zoekresultaten en gerelateerde video\'s</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Verbergen in feeds</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Verborgen in feeds</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Weergegeven in feeds</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Verbergen in geschiedenis</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Verborgen in geschiedenis</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Weergegeven in geschiedenis</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Verbergen in zoekresultaten</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Verborgen in zoekresultaten</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Weergegeven in zoekresultaten</string>
@@ -773,6 +776,9 @@ Om het audiotrackmenu weer te geven, wijzigt u 'Videostreams vervalsen' in iOS T
<string name="revanced_hide_shorts_upcoming_button_title">Verberg de knop \"Aanstaande\"</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">De \"Volgende\" knop is verborgen</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">De \"Volgende\" knop is zichtbaar</string>
<string name="revanced_hide_shorts_effect_button_title">Verberg effectknop</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Effectknop is verborgen</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Effectknop is weergegeven</string>
<string name="revanced_hide_shorts_green_screen_button_title">Verberg de knop \"Groen scherm\"</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">De knop \"Groen scherm\" is verborgen</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">De knop \"Groen scherm\" is zichtbaar</string>
@@ -954,11 +960,25 @@ Deze functie werkt het beste met een videokwaliteit van 720p of lager en wanneer
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Skip-knop automatisch verbergen</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Oversla-knop wordt na een paar seconden verborgen</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Skip-knop wordt weergegeven voor het hele segment</string>
<string name="revanced_sb_general_skiptoast">Een toast weergeven bij overslaan</string>
<string name="revanced_sb_general_skiptoast_sum_on">\"Toast\" wordt weergegeven wanneer een segment automatisch wordt overgeslagen. Tik hier om een voorbeeld te bekijken</string>
<string name="revanced_sb_general_skiptoast_sum_off">\"Toast\" wordt niet weergegeven. Tik hier om een voorbeeld te bekijken</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Duur van overslaan-knop</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Hoe lang de \"automatisch verbergen overslaan\"- en \"markeer\"-knoppen worden getoond</string>
<string name="revanced_sb_general_skiptoast">Toon \"overslaan ongedaan maken\"-melding</string>
<string name="revanced_sb_general_skiptoast_sum_on">Een melding wordt getoond wanneer een segment automatisch wordt overgeslagen. Tik op de melding om het overslaan ongedaan te maken.</string>
<string name="revanced_sb_general_skiptoast_sum_off">Toast wordt niet getoond</string>
<string name="revanced_sb_toast_on_skip_duration">Duur van overslaan-toast</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Hoe lang de overslaan-melding wordt getoond</string>
<string name="revanced_sb_duration_1s">1 seconde</string>
<string name="revanced_sb_duration_2s">2 seconden</string>
<string name="revanced_sb_duration_3s">3 seconden</string>
<string name="revanced_sb_duration_4s">4 seconden</string>
<string name="revanced_sb_duration_5s">5 seconden</string>
<string name="revanced_sb_duration_6s">6 seconden</string>
<string name="revanced_sb_duration_7s">7 seconden</string>
<string name="revanced_sb_duration_8s">8 seconden</string>
<string name="revanced_sb_duration_9s">9 seconden</string>
<string name="revanced_sb_duration_10s">10 seconden</string>
<string name="revanced_sb_general_time_without">Toon de videolengte zonder segmenten</string>
<string name="revanced_sb_general_time_without_sum_on">Videolengte minus alle segmenten, weergegeven tussen haakjes naast de volledige videolengte</string>
<string name="revanced_sb_general_time_without_sum_on">Videolengte minus alle segmenten wordt getoond op de voortgangsbalk</string>
<string name="revanced_sb_general_time_without_sum_off">Volledige videolengte weergegeven</string>
<string name="revanced_sb_create_segment_category">Nieuwe segmenten maken</string>
<string name="revanced_sb_enable_create_segment">Knop \'Nieuw segment maken\' weergeven</string>

View File

@@ -281,10 +281,13 @@ Nie będziesz informowany o żadnych nieoczekiwanych zdarzeniach."</string>
<string name="revanced_hide_description_components_screen_title">Opis filmu</string>
<string name="revanced_hide_description_components_screen_summary">Ukryj lub pokaż elementy opisu filmu</string>
<string name="revanced_hide_filter_bar_screen_title">Pasek filtrowania</string>
<string name="revanced_hide_filter_bar_screen_summary">Ukryj lub pokaż pasek filtrów w aktualnościach, wynikach wyszukiwania i powiązanych filmach</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Na stronie głównej</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Ukryte na stronie głównej</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Widoczne na stronie głównej</string>
<string name="revanced_hide_filter_bar_screen_summary">Ukryj lub pokaż pasek filtrów w kanałach, historii, wynikach wyszukiwania i powiązanych filmach</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Ukryj w kanałach</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Ukryte w kanałach</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Pokazane w kanałach</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Ukryj w historii</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Ukryte w historii</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Pokazane w historii</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Ukryj w wynikach wyszukiwania</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Ukryte w wynikach wyszukiwania</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Wyświetlane w wynikach wyszukiwania</string>
@@ -769,6 +772,9 @@ Aby pokazać menu ścieżki audio, zmień opcję „Fałszuj strumienie wideo”
<string name="revanced_hide_shorts_upcoming_button_title">Ukryj przycisk \"Nadchodzące\"</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Przycisk nadchodzących jest ukryty</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Przycisk nadchodzących jest widoczny</string>
<string name="revanced_hide_shorts_effect_button_title">Ukryj przycisk efektu</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Przycisk efektu jest ukryty</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Przycisk efektu jest widoczny</string>
<string name="revanced_hide_shorts_green_screen_button_title">Ukryj przycisk \"Zielony ekran\"</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Przycisk od greenscreena jest ukryty</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Przycisk od greenscreena jest widoczny</string>
@@ -950,11 +956,25 @@ Ta funkcja działa najlepiej przy jakości wideo 720p lub niższej i przy korzys
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Automatycznie ukryj przycisk pomijania</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Przycisk od pomijania ukrywa się po kilku sekundach</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Przycisk pomijania jest wyświetlany dla całego segmentu</string>
<string name="revanced_sb_general_skiptoast">Pokaż toast podczas pomijania</string>
<string name="revanced_sb_general_skiptoast_sum_on">Komunikat jest wyświetlany, gdy segment zostanie automatycznie pominięty. Dotknij tutaj, aby zobaczyć przykład</string>
<string name="revanced_sb_general_skiptoast_sum_off">Komunikat nie jest wyświetlany. Dotknij tutaj, aby zobaczyć przykład</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Czas trwania przycisku pominięcia</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Jak długo wyświetlane są przyciski automatycznego ukrywania pomijania i przechodzenia do wyróżnienia</string>
<string name="revanced_sb_general_skiptoast">Pokaż komunikat o cofnięciu pominięcia</string>
<string name="revanced_sb_general_skiptoast_sum_on">Komunikat jest wyświetlany, gdy segment zostanie automatycznie pominięty. Dotknij powiadomienia, aby cofnąć pominięcie</string>
<string name="revanced_sb_general_skiptoast_sum_off">Komunikat nie jest wyświetlany</string>
<string name="revanced_sb_toast_on_skip_duration">Czas trwania komunikatu pominięcia</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Jak długo wyświetlane jest powiadomienie o pominięciu</string>
<string name="revanced_sb_duration_1s">1 sekunda</string>
<string name="revanced_sb_duration_2s">2 sekundy</string>
<string name="revanced_sb_duration_3s">3 sekundy</string>
<string name="revanced_sb_duration_4s">4 sekundy</string>
<string name="revanced_sb_duration_5s">5 sekund</string>
<string name="revanced_sb_duration_6s">6 sekund</string>
<string name="revanced_sb_duration_7s">7 sekund</string>
<string name="revanced_sb_duration_8s">8 sekund</string>
<string name="revanced_sb_duration_9s">9 sekund</string>
<string name="revanced_sb_duration_10s">10 sekund</string>
<string name="revanced_sb_general_time_without">Długość filmu bez segmentów</string>
<string name="revanced_sb_general_time_without_sum_on">Długość filmu pomniejszona o wszystkie segmenty, wyświetlana w nawiasie obok pełnej długości wideo</string>
<string name="revanced_sb_general_time_without_sum_on">Długość wideo pomniejszona o wszystkie segmenty jest wyświetlana na pasku przewijania</string>
<string name="revanced_sb_general_time_without_sum_off">Pełna długość wideo wyświetlana</string>
<string name="revanced_sb_create_segment_category">Tworzenie nowych segmentów</string>
<string name="revanced_sb_enable_create_segment">Pokaż przycisk „Utwórz nowy segment”</string>

View File

@@ -285,10 +285,13 @@ Você não será notificado sobre nenhum evento inesperado."</string>
<string name="revanced_hide_description_components_screen_title">Descrição do vídeo</string>
<string name="revanced_hide_description_components_screen_summary">Ocultar ou mostrar componentes de descrição do vídeo</string>
<string name="revanced_hide_filter_bar_screen_title">Barra de filtro</string>
<string name="revanced_hide_filter_bar_screen_summary">Ocultar ou mostrar a barra de filtros no feed, nos resultados da pesquisa e nos vídeos relacionados</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Ocultar na tela inicial</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Está oculto na tela inicial</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Não está oculto na tela inicial</string>
<string name="revanced_hide_filter_bar_screen_summary">Ocultar ou mostrar a barra de filtro nos feeds, histórico, resultados da pesquisa e vídeos relacionados</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Ocultar em feeds</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Oculto em feeds</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Exibido em feeds</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Ocultar no histórico</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Oculto no histórico</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Exibido no histórico</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Ocultar nos resultados da pesquisa</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Oculto nos resultados da pesquisa</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Exibido nos resultados da pesquisa</string>
@@ -773,6 +776,9 @@ Para exibir o menu da faixa de áudio, altere \"Spoof video streams\" para iOS T
<string name="revanced_hide_shorts_upcoming_button_title">Ocultar botão Próximos</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">O botão \"próximo\" está oculto</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">O botão \"próximo\" é mostrado</string>
<string name="revanced_hide_shorts_effect_button_title">Ocultar botão de Efeito</string>
<string name="revanced_hide_shorts_effect_button_summary_on">O botão de efeito está oculto</string>
<string name="revanced_hide_shorts_effect_button_summary_off">O botão de efeito é exibido</string>
<string name="revanced_hide_shorts_green_screen_button_title">Ocultar botão Tela verde</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">O botão de tela verde está oculto</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">O botão de tela verde será exibido</string>
@@ -954,11 +960,25 @@ Este recurso funciona melhor com uma qualidade de vídeo de 720p ou inferior e a
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Ocultar automaticamente o botão Pular</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Ocultar botão pular após alguns segundos</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">O botão Pular é mostrado para todo o segmento</string>
<string name="revanced_sb_general_skiptoast">Mostrar um toast ao pular</string>
<string name="revanced_sb_general_skiptoast_sum_on">Mostrar uma notificação flutuante quando um segmento é automaticamente pulado. Toque aqui para ver um exemplo</string>
<string name="revanced_sb_general_skiptoast_sum_off">Não mostrar notificação flutuante. Toque aqui para ver um exemplo</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Duração do botão Pular</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Por quanto tempo os botões de pular e pular para destaque com ocultação automática são exibidos</string>
<string name="revanced_sb_general_skiptoast">Mostrar aviso de desfazer pulo</string>
<string name="revanced_sb_general_skiptoast_sum_on">O aviso é exibido quando um segmento é pulado automaticamente. Toque na notificação de aviso para desfazer o pulo</string>
<string name="revanced_sb_general_skiptoast_sum_off">A notificação não é exibida</string>
<string name="revanced_sb_toast_on_skip_duration">Duração da notificação de pular</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Por quanto tempo a notificação de aviso de pulo é exibida</string>
<string name="revanced_sb_duration_1s">1 segundo</string>
<string name="revanced_sb_duration_2s">2 segundos</string>
<string name="revanced_sb_duration_3s">3 segundos</string>
<string name="revanced_sb_duration_4s">4 segundos</string>
<string name="revanced_sb_duration_5s">5 segundos</string>
<string name="revanced_sb_duration_6s">6 segundos</string>
<string name="revanced_sb_duration_7s">7 segundos</string>
<string name="revanced_sb_duration_8s">8 segundos</string>
<string name="revanced_sb_duration_9s">9 segundos</string>
<string name="revanced_sb_duration_10s">10 segundos</string>
<string name="revanced_sb_general_time_without">Mostrar duração do vídeo sem segmentos</string>
<string name="revanced_sb_general_time_without_sum_on">Duração do vídeo sem os segmentos, mostrado entre parênteses ao lado da duração total do vídeo</string>
<string name="revanced_sb_general_time_without_sum_on">O comprimento do vídeo menos todos os segmentos é mostrado na barra de busca</string>
<string name="revanced_sb_general_time_without_sum_off">Mostrar duração total do vídeo</string>
<string name="revanced_sb_create_segment_category">Criando segmentos</string>
<string name="revanced_sb_enable_create_segment">Mostrar o botão Criar novo segmento</string>

View File

@@ -285,10 +285,13 @@ Não será notificado de quaisquer eventos inesperados."</string>
<string name="revanced_hide_description_components_screen_title">Descrição do vídeo</string>
<string name="revanced_hide_description_components_screen_summary">Esconder ou mostrar componentes de descrição do vídeo</string>
<string name="revanced_hide_filter_bar_screen_title">Barra de Filtro</string>
<string name="revanced_hide_filter_bar_screen_summary">Ocultar ou mostrar a barra de filtro no feed, nos resultados da pesquisa e nos vídeos relacionados</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Esconder no feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Escondido no feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Mostrar no feed</string>
<string name="revanced_hide_filter_bar_screen_summary">Ocultar ou mostrar a barra de filtros nos feeds, histórico, resultados da pesquisa e vídeos relacionados</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Ocultar em feeds</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Oculto em feeds</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Exibido em feeds</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Ocultar no histórico</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Oculto no histórico</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Exibido no histórico</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Ocultar nos resultados da pesquisa</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Oculto nos resultados da pesquisa</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Exibido nos resultados da pesquisa</string>
@@ -773,6 +776,9 @@ Para mostrar o menu da faixa de áudio, altere \"Spoof video streams\" para iOS
<string name="revanced_hide_shorts_upcoming_button_title">Ocultar botão de próximos</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">O botão \"vir\" está oculto</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">O próximo botão será exibido</string>
<string name="revanced_hide_shorts_effect_button_title">Ocultar botão de efeito</string>
<string name="revanced_hide_shorts_effect_button_summary_on">O botão Efeito está oculto</string>
<string name="revanced_hide_shorts_effect_button_summary_off">O botão Efeito está exibido</string>
<string name="revanced_hide_shorts_green_screen_button_title">Botão de ecrã verde está oculto</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">O botão de ecrã verde está oculto</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Botão de ecrã verde é mostrado</string>
@@ -954,11 +960,25 @@ Tính năng này hoạt động tốt nhất với chất lg video là 720p tr
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Ocultar automaticamente o botão \"Ignorar\"</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Pular botão esconde após alguns segundos</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">O botão \"Ignorar\" é mostrado para todo o segmento</string>
<string name="revanced_sb_general_skiptoast">Mostrar um toast ao ignorar</string>
<string name="revanced_sb_general_skiptoast_sum_on">Toast é visível quando um segmento é automaticamente ignorado. Toque aqui para ver um exemplo</string>
<string name="revanced_sb_general_skiptoast_sum_off">Toast não é visível. Toque aqui para ver um exemplo</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Duração do botão de pular</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Por quanto tempo os botões de ocultar automaticamente pular e pular para destacar são exibidos</string>
<string name="revanced_sb_general_skiptoast">Mostrar notificação de desfazer pular</string>
<string name="revanced_sb_general_skiptoast_sum_on">Uma notificação é exibida quando um segmento é pulado automaticamente. Toque na notificação para desfazer o pulo</string>
<string name="revanced_sb_general_skiptoast_sum_off">Notificação não é exibida</string>
<string name="revanced_sb_toast_on_skip_duration">Duração da notificação de pular</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Por quanto tempo a notificação de pular é exibida</string>
<string name="revanced_sb_duration_1s">1 segundo</string>
<string name="revanced_sb_duration_2s">2 segundos</string>
<string name="revanced_sb_duration_3s">3 segundos</string>
<string name="revanced_sb_duration_4s">4 segundos</string>
<string name="revanced_sb_duration_5s">5 segundos</string>
<string name="revanced_sb_duration_6s">6 segundos</string>
<string name="revanced_sb_duration_7s">7 segundos</string>
<string name="revanced_sb_duration_8s">8 segundos</string>
<string name="revanced_sb_duration_9s">9 segundos</string>
<string name="revanced_sb_duration_10s">10 segundos</string>
<string name="revanced_sb_general_time_without">Mostrar duração do vídeo sem segmentos</string>
<string name="revanced_sb_general_time_without_sum_on">Duração do vídeo menos todos os segmentos, visível entre parênteses ao lado da duração completa do vídeo</string>
<string name="revanced_sb_general_time_without_sum_on">O comprimento do vídeo menos todos os segmentos é mostrado na barra de busca</string>
<string name="revanced_sb_general_time_without_sum_off">Duração total do vídeo exibido</string>
<string name="revanced_sb_create_segment_category">Criando novos segmentos</string>
<string name="revanced_sb_enable_create_segment">Mostrar o botão Criar novo segmento</string>

View File

@@ -285,10 +285,13 @@ Nu veți fi notificat de niciun eveniment neașteptat."</string>
<string name="revanced_hide_description_components_screen_title">Descriere video</string>
<string name="revanced_hide_description_components_screen_summary">Ascunde sau afișează componentele descrierii video</string>
<string name="revanced_hide_filter_bar_screen_title">Bară de filtrare</string>
<string name="revanced_hide_filter_bar_screen_summary">Ascunde sau afișează bara de filtre în flux, rezultatele căutării și videoclipurile conexe</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Ascunde în feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Ascuns în feed</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Afișat în feed</string>
<string name="revanced_hide_filter_bar_screen_summary">Ascundeți sau afișați bara de filtre în fluxuri, istoric, rezultate ale căutării și videoclipuri conexe</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Ascunde în feeduri</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Ascuns în feeduri</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Afișat în feeduri</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Ascunde în istoric</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Ascuns în istoric</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Afișat în istoric</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Ascunde în rezultatele căutării</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Ascuns în rezultatele căutării</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Afișat în rezultatele căutării</string>
@@ -773,6 +776,9 @@ Pentru a afișa meniul pentru pista audio, schimbați opțiunea „Falsifică fl
<string name="revanced_hide_shorts_upcoming_button_title">Ascunde butonul Următor</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Butonul următor este ascuns</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Următorul buton este afișat</string>
<string name="revanced_hide_shorts_effect_button_title">Ascunde butonul Efect</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Butonul de efect este ascuns</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Butonul de efect este afișat</string>
<string name="revanced_hide_shorts_green_screen_button_title">Ascunde butonul Ecran verde</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Butonul de ecran verde este ascuns</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Butonul de ecran verde este afișat</string>
@@ -954,11 +960,25 @@ Această caracteristică funcționează cel mai bine cu o calitate video de 720p
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Ascunde automat butonul Skip</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Omite ascunderea butonului după câteva secunde</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Butonul Skip este afișat pentru întregul segment</string>
<string name="revanced_sb_general_skiptoast">Afișați un toast la omitere</string>
<string name="revanced_sb_general_skiptoast_sum_on">Toast este afișat atunci când un segment este omis automat. Apăsați aici pentru a vedea un exemplu</string>
<string name="revanced_sb_general_skiptoast_sum_off">Toast nu este afișat. Apăsați aici pentru a vedea un exemplu</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Durata butonului de omitere</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Cât timp sunt afișate butoanele de ascundere automată a săriturii și de săritură la evidențiere</string>
<string name="revanced_sb_general_skiptoast">Afișează notificare toast de anulare a săriturii</string>
<string name="revanced_sb_general_skiptoast_sum_on">Notificarea toast este afișată când un segment este sărit automat. Atingeți notificarea toast pentru a anula săritura.</string>
<string name="revanced_sb_general_skiptoast_sum_off">Notificarea pop-up nu este afișată</string>
<string name="revanced_sb_toast_on_skip_duration">Durata notificării pop-up de omitere</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Cât timp este afișată notificarea toast de săritură</string>
<string name="revanced_sb_duration_1s">1 secundă</string>
<string name="revanced_sb_duration_2s">2 secunde</string>
<string name="revanced_sb_duration_3s">3 secunde</string>
<string name="revanced_sb_duration_4s">4 secunde</string>
<string name="revanced_sb_duration_5s">5 secunde</string>
<string name="revanced_sb_duration_6s">6 secunde</string>
<string name="revanced_sb_duration_7s">7 secunde</string>
<string name="revanced_sb_duration_8s">8 secunde</string>
<string name="revanced_sb_duration_9s">9 secunde</string>
<string name="revanced_sb_duration_10s">10 secunde</string>
<string name="revanced_sb_general_time_without">Arată lungimea videoclipului fără segmente</string>
<string name="revanced_sb_general_time_without_sum_on">Lungimea video minus toate segmentele, afișată în paranteze lângă lungimea completă a videoclipului</string>
<string name="revanced_sb_general_time_without_sum_on">Lungimea videoclipului fără toate segmentele este afișată pe bara de căutare</string>
<string name="revanced_sb_general_time_without_sum_off">Lungimea completă a videoclipului afișată</string>
<string name="revanced_sb_create_segment_category">Crearea de noi segmente</string>
<string name="revanced_sb_enable_create_segment">Afișează butonul Creează segment nou</string>

View File

@@ -126,7 +126,7 @@ Second \"item\" text"</string>
<string name="revanced_debug_stacktrace_title">Журнал трассировки стека</string>
<string name="revanced_debug_stacktrace_summary_on">В журналы отладки включена трассировка стека</string>
<string name="revanced_debug_stacktrace_summary_off">В журналы отладки не включена трассировка стека</string>
<string name="revanced_debug_toast_on_error_title">Показывать уведомление при ошибке Revanced</string>
<string name="revanced_debug_toast_on_error_title">Показать всплывающее уведомление при ошибке Revanced</string>
<string name="revanced_debug_toast_on_error_summary_on">Всплывающее уведомление при возникновении ошибки Revanced показано</string>
<string name="revanced_debug_toast_on_error_summary_off">Всплывающее уведомление при возникновении ошибки Revanced скрыто</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"Отключение всплывающих уведомлений об ошибках скроет все сообщения об ошибках ReVanced.
@@ -285,10 +285,13 @@ Second \"item\" text"</string>
<string name="revanced_hide_description_components_screen_title">Описание видео</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_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_summary_on">Панель фильтров в ленте скрыта</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Панель фильтров в ленте показана</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Скрыть панель фильтров в истории просмотров</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Панель фильтров в истории просмотров скрыта</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Панель фильтров в истории просмотров показана</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_off">Панель фильтров в поиске показана</string>
@@ -534,9 +537,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_share_button_summary_on">Кнопка \"Поделиться\" под плеером скрыта</string>
<string name="revanced_hide_share_button_summary_off">Кнопка \"Поделиться\" под плеером показана</string>
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_stop_ads_button_title">Скрыть \"Остановить рекламу\"</string>
<string name="revanced_hide_stop_ads_button_summary_on">Кнопка \"Отключить рекламу\" скрыта</string>
<string name="revanced_hide_stop_ads_button_summary_off">Кнопка \"Отключить рекламу\" показана</string>
<string name="revanced_hide_stop_ads_button_title">Скрыть кнопку \"Не показывать рекламу\"</string>
<string name="revanced_hide_stop_ads_button_summary_on">Кнопка \"Не показывать рекламу\" скрыта</string>
<string name="revanced_hide_stop_ads_button_summary_off">Кнопка \"Не показывать рекламу\" показана</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
<string name="revanced_hide_report_button_title">Скрыть кнопку \"Пожаловаться\"</string>
@@ -773,6 +776,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_upcoming_button_title">Скрыть кнопку \"Предстоящие события\"</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Кнопка \"Предстоящие события\" в Shorts скрыта</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Кнопка \"Предстоящие события\" в Shorts показана</string>
<string name="revanced_hide_shorts_effect_button_title">Скрыть кнопку \"Эффект\"</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Кнопка \"Эффект\" скрыта</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Кнопка \"Эффект\" показана</string>
<string name="revanced_hide_shorts_green_screen_button_title">Скрыть кнопку \"Зеленый экран\"</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Кнопка \"Зеленый экран\" в Shorts скрыта</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Кнопка \"Зеленый экран\" в Shorts показана</string>
@@ -956,11 +962,25 @@ Second \"item\" text"</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Автоскрытие кнопки пропуска</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Кнопка пропуска автоматически скрывается через несколько секунд</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Кнопка пропуска показывается для всего сегмента</string>
<string name="revanced_sb_general_skiptoast">Уведомление при пропуске сегмента</string>
<string name="revanced_sb_general_skiptoast_sum_on">Всплывающее уведомление при автоматическом пропуске сегмента показано. Нажмите для просмотра примера</string>
<string name="revanced_sb_general_skiptoast_sum_off">Всплывающее уведомление при автоматическом пропуске сегмента скрыто. Нажмите для просмотра примера</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Длительность кнопки пропуска</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Длительность отображения кнопок автоматического скрытия \"Пропустить\" и \"Перейти к выделенному\"</string>
<string name="revanced_sb_general_skiptoast">Показывать тост отмены пропуска</string>
<string name="revanced_sb_general_skiptoast_sum_on">Тост показывается, когда сегмент автоматически пропускается. Нажмите на уведомление-тост, чтобы отменить пропуск.</string>
<string name="revanced_sb_general_skiptoast_sum_off">Всплывающее сообщение не показывается</string>
<string name="revanced_sb_toast_on_skip_duration">Длительность всплывающего сообщения при пропуске</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Как долго показывается уведомление-тост о пропуске</string>
<string name="revanced_sb_duration_1s">1 секунда</string>
<string name="revanced_sb_duration_2s">2 секунды</string>
<string name="revanced_sb_duration_3s">3 секунды</string>
<string name="revanced_sb_duration_4s">4 секунды</string>
<string name="revanced_sb_duration_5s">5 секунд</string>
<string name="revanced_sb_duration_6s">6 секунд</string>
<string name="revanced_sb_duration_7s">7 секунд</string>
<string name="revanced_sb_duration_8s">8 секунд</string>
<string name="revanced_sb_duration_9s">9 секунд</string>
<string name="revanced_sb_duration_10s">10 секунд</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_create_segment_category">Создание новых сегментов</string>
<string name="revanced_sb_enable_create_segment">Кнопка создания сегмента</string>
@@ -1307,7 +1327,7 @@ Second \"item\" text"</string>
При активации URL-адреса видео (и никакие другие данные) будут отправлены на сервер API. При отсутствии миниатюр DeArrow в видео показываются оригинальные или миниатюры захвата кадра
Нажмите для дополнительной информации о DeArrow"</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">Показать уведомление при недоступности API</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">Показать всплывающее уведомление при недоступности API</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">Всплывающее уведомление при недоступности DeArrow показано</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Всплывающее уведомление при недоступности DeArrow скрыто</string>
<string name="revanced_alt_thumbnail_dearrow_api_url_title">Конечная точка DeArrow API</string>
@@ -1404,9 +1424,9 @@ Second \"item\" text"</string>
<string name="revanced_remember_video_quality_last_selected_title">Запоминать изменения качества видео</string>
<string name="revanced_remember_video_quality_last_selected_summary_on">Изменения качества воспроизведения применяются ко всем видео</string>
<string name="revanced_remember_video_quality_last_selected_summary_off">Изменения качества воспроизведения применяются только к текущему видео</string>
<string name="revanced_remember_video_quality_last_selected_toast_title">Показывать всплывающее сообщение при изменениях качества видео</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_on">Всплывающее сообщение показывается, когда изменяется качество видео по умолчанию</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_off">Всплывающее сообщение не показывается, когда изменяется качество видео по умолчанию</string>
<string name="revanced_remember_video_quality_last_selected_toast_title">Показать всплывающее уведомление при изменении качества видео</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_on">Всплывающее уведомление при изменении качества видео по умолчанию показано</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_off">Всплывающее уведомление при изменении качества видео по умолчанию скрыто</string>
<string name="revanced_video_quality_default_wifi_title">Качество видео по умолчанию в Wi-Fi сети</string>
<string name="revanced_video_quality_default_mobile_title">Качество видео по умолчанию в мобильной сети</string>
<string name="revanced_remember_shorts_quality_last_selected_title">Запоминать изменения качества Shorts</string>
@@ -1440,9 +1460,9 @@ Second \"item\" text"</string>
<string name="revanced_remember_playback_speed_last_selected_title">Запоминать изменения скорости воспроизведения</string>
<string name="revanced_remember_playback_speed_last_selected_summary_on">Изменения скорости воспроизведения применяются ко всем видео</string>
<string name="revanced_remember_playback_speed_last_selected_summary_off">Изменения скорости воспроизведения применяются только к текущему видео</string>
<string name="revanced_remember_playback_speed_last_selected_toast_title">Показывать всплывающее сообщение при изменениях скорости воспроизведения</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_on">Всплывающее сообщение показывается, когда изменяется скорость воспроизведения по умолчанию</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_off">Всплывающее сообщение не отображается, когда изменяется скорость воспроизведения по умолчанию</string>
<string name="revanced_remember_playback_speed_last_selected_toast_title">Показать всплывающее уведомление при изменении скорости воспроизведения</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_on">Всплывающее уведомление при изменении скорости воспроизведения по умолчанию показано</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_off">Всплывающее уведомление при изменении скорости воспроизведения по умолчанию скрыто</string>
<string name="revanced_playback_speed_default_title">Скорость воспроизведения по умолчанию</string>
<string name="revanced_remember_playback_speed_toast">Скорость изменена на: %s</string>
</patch>

View File

@@ -283,10 +283,13 @@ Nebudete informovaní o žiadnych nepredvídaných udalostiach."</string>
<string name="revanced_hide_description_components_screen_title">Popis videa</string>
<string name="revanced_hide_description_components_screen_summary">Skryť alebo zobraziť komponenty popisu videa</string>
<string name="revanced_hide_filter_bar_screen_title">Panel filtra</string>
<string name="revanced_hide_filter_bar_screen_summary">Skryť alebo zobraziť panel filtra v informačnom kanáli, vo výsledkoch vyhľadávania a v súvisiacich videách</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Skryť v feede</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Skryté v krmive</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Zobrazené v informačnom kanáli</string>
<string name="revanced_hide_filter_bar_screen_summary">Skryť alebo zobraziť panel filtra v zdrojoch, histórii, výsledkoch vyhľadávania a súvisiacich videách</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Skryť v kanáloch</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Skryté v kanáloch</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Zobrazené v kanáloch</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Skryť v histórii</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Skryté v histórii</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Zobrazené v histórii</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Skryť vo výsledkoch vyhľadávania</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Zobrazené vo výsledkoch vyhľadávania</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Zobrazené vo výsledkoch vyhľadávania</string>
@@ -766,6 +769,9 @@ Ak chcete zobraziť ponuku zvukovej stopy, zmeňte možnosť „Oklamať videost
<string name="revanced_hide_shorts_upcoming_button_title">Skryť tlačidlo Pripravované</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Tlačidlo pre časté videá bude skryté</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Tlačidlo pre časté videá bude zobrazené</string>
<string name="revanced_hide_shorts_effect_button_title">Skryť tlačidlo efektu</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Tlačidlo efektu je skryté</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Tlačidlo efektu je zobrazené</string>
<string name="revanced_hide_shorts_green_screen_button_title">Skryť tlačidlo Zelená obrazovka</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Tlačidlo pre zelené pozadie bude skryté</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Tlačidlo pre zelené pozadie bude zobrazené</string>
@@ -947,11 +953,25 @@ Táto funkcia najlepšie funguje s kvalitou videa 720p alebo nižšou a pri pou
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Automaticky skryť tlačidlo Preskočiť</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Tlačidlo preskočenia sa po niekoľkých sekundách skryje</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Tlačidlo Preskočiť sa zobrazuje pre celý segment</string>
<string name="revanced_sb_general_skiptoast">Zobraziť toast pri preskakovaní</string>
<string name="revanced_sb_general_skiptoast_sum_on">Toast sa zobrazí, keď sa segment automaticky preskočí. Klepnutím sem zobrazíte príklad</string>
<string name="revanced_sb_general_skiptoast_sum_off">Toast sa nezobrazuje. Klepnutím sem zobrazíte príklad</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Dĺžka trvania tlačidla preskočiť</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Ako dlho sú zobrazené tlačidlá pre automatické skrytie preskočenia a preskočenie na zvýraznenie</string>
<string name="revanced_sb_general_skiptoast">Zobraziť hlásenie o vrátení preskočenia</string>
<string name="revanced_sb_general_skiptoast_sum_on">Hlásenie sa zobrazí, keď je segment automaticky preskočený. Klepnutím na hlásenie preskočenie vrátite.</string>
<string name="revanced_sb_general_skiptoast_sum_off">Hlásenie sa nezobrazuje</string>
<string name="revanced_sb_toast_on_skip_duration">Dĺžka trvania hlásenia preskočenia</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Ako dlho je zobrazené hlásenie o preskočení</string>
<string name="revanced_sb_duration_1s">1 sekunda</string>
<string name="revanced_sb_duration_2s">2 sekundy</string>
<string name="revanced_sb_duration_3s">3 sekundy</string>
<string name="revanced_sb_duration_4s">4 sekundy</string>
<string name="revanced_sb_duration_5s">5 sekúnd</string>
<string name="revanced_sb_duration_6s">6 sekúnd</string>
<string name="revanced_sb_duration_7s">7 sekúnd</string>
<string name="revanced_sb_duration_8s">8 sekúnd</string>
<string name="revanced_sb_duration_9s">9 sekúnd</string>
<string name="revanced_sb_duration_10s">10 sekúnd</string>
<string name="revanced_sb_general_time_without">Zobraziť dĺžku videa bez segmentov</string>
<string name="revanced_sb_general_time_without_sum_on">Dĺžka videa mínus všetky segmenty, zobrazené v zátvorkách vedľa celej dĺžky videa</string>
<string name="revanced_sb_general_time_without_sum_on">Dĺžka videa mínus všetky segmenty sa zobrazuje na posuvníku</string>
<string name="revanced_sb_general_time_without_sum_off">Zobrazená celá dĺžka videa</string>
<string name="revanced_sb_create_segment_category">Vytváranie nových segmentov</string>
<string name="revanced_sb_enable_create_segment">Zobraziť tlačidlo Vytvoriť nový segment</string>

View File

@@ -285,10 +285,13 @@ Ne boste obveščeni o nobenih nepričakovanih dogodkih."</string>
<string name="revanced_hide_description_components_screen_title">Opis videoposnetka</string>
<string name="revanced_hide_description_components_screen_summary">Skrij ali prikaži komponente opisa videoposnetka</string>
<string name="revanced_hide_filter_bar_screen_title">Vrstica filtra</string>
<string name="revanced_hide_filter_bar_screen_summary">Skrije ali prikaže filtrirno vrstico v viru, rezultatih iskanja in povezanih videoposnetkih</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Skrij v viru</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Skrita v viru</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Prikazana v viru</string>
<string name="revanced_hide_filter_bar_screen_summary">Skrijte ali prikažite vrstico filtra v virih, zgodovini, rezultatih iskanja in povezanih videoposnetkih</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Skrij v virih</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Skrito v virih</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Prikazano v virih</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Skrij v zgodovini</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Skrito v zgodovini</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Prikazano v zgodovini</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Skrij v rezultatih iskanja</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Skrito v rezultatih iskanja</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Prikazano v rezultatih iskanja</string>
@@ -773,6 +776,9 @@ Opomba: Omogočanje tega tudi prisilno skrije video oglase"</string>
<string name="revanced_hide_shorts_upcoming_button_title">Skrij gumb \'Prihajajoči\'</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Gumb \"Prihajajoči\" je skrit</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Gumb \"Prihajajoči\" je prikazan</string>
<string name="revanced_hide_shorts_effect_button_title">Skrij gumb učinka</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Gumb za učinek je skrit</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Gumb za učinek je prikazan</string>
<string name="revanced_hide_shorts_green_screen_button_title">Skrij gumb \'Zelena scena\'</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Gumb za zeleno ozadje je skrit</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Gumb za zeleno ozadje je prikazan</string>
@@ -954,11 +960,25 @@ Ta funkcija deluje najbolje pri kakovosti videa 720p ali nižji in pri uporabi z
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Samodejno skrij gumb za preskok</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Gumb za preskakovanje se po nekaj sekundah skrije</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Gumb za preskok je prikazan za celoten segment</string>
<string name="revanced_sb_general_skiptoast">Pokaži toast pri preskakovanju</string>
<string name="revanced_sb_general_skiptoast_sum_on">Sporočilo se prikaže, ko se segment samodejno preskoči. Tapnite tukaj za ogled primera</string>
<string name="revanced_sb_general_skiptoast_sum_off">Sporočilo ni prikazano. Tapnite tukaj za ogled primera</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Trajanje gumba za preskok</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Kako dolgo so prikazani gumbi za samodejno skrivanje preskakovanja in preskok na poudarek</string>
<string name="revanced_sb_general_skiptoast">Prikaži obvestilo za razveljavitev preskakovanja</string>
<string name="revanced_sb_general_skiptoast_sum_on">Obvestilo se prikaže, ko je segment samodejno preskočen. Dotaknite se obvestila, da razveljavite preskok.</string>
<string name="revanced_sb_general_skiptoast_sum_off">Obvestilo ni prikazano</string>
<string name="revanced_sb_toast_on_skip_duration">Trajanje obvestila o preskoku</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Kako dolgo je prikazano obvestilo o preskakovanju.</string>
<string name="revanced_sb_duration_1s">1 sekunda</string>
<string name="revanced_sb_duration_2s">2 sekundi</string>
<string name="revanced_sb_duration_3s">3 sekunde</string>
<string name="revanced_sb_duration_4s">4 sekunde</string>
<string name="revanced_sb_duration_5s">5 sekund</string>
<string name="revanced_sb_duration_6s">6 sekund</string>
<string name="revanced_sb_duration_7s">7 sekund</string>
<string name="revanced_sb_duration_8s">8 sekund</string>
<string name="revanced_sb_duration_9s">9 sekund</string>
<string name="revanced_sb_duration_10s">10 sekund</string>
<string name="revanced_sb_general_time_without">Pokaži dolžino videoposnetka brez segmentov</string>
<string name="revanced_sb_general_time_without_sum_on">Dolžina videoposnetka minus vsi segmenti, prikazana v oklepajih ob polni dolžini videoposnetka</string>
<string name="revanced_sb_general_time_without_sum_on">Dolžina videa brez vseh segmentov je prikazana na drsniku</string>
<string name="revanced_sb_general_time_without_sum_off">Prikazana je polna dolžina videoposnetka</string>
<string name="revanced_sb_create_segment_category">Ustvarjanje novih segmentov</string>
<string name="revanced_sb_enable_create_segment">Pokaži gumb za ustvarjanje novega segmenta</string>

View File

@@ -285,10 +285,13 @@ Ju nuk do të njoftoheni për ndonjë ngjarje të papritur."</string>
<string name="revanced_hide_description_components_screen_title">Përshkrimi i videos</string>
<string name="revanced_hide_description_components_screen_summary">Fshi ose shfaq komponentët e përshkrimit të videos</string>
<string name="revanced_hide_filter_bar_screen_title">Shiriti i filtrimit</string>
<string name="revanced_hide_filter_bar_screen_summary">Fshih ose shfaq shiritin e filtrit burim, rezultatet e kërkimit dhe videot e ngjashme</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Fshi në ushqim</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">I fshehur në ushqim</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">I dukshme në ushqim</string>
<string name="revanced_hide_filter_bar_screen_summary">Fshi ose shfaq shiritin e filtrit te burimet, historia, rezultatet e kërkimit dhe videot e lidhura</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Fshih te burimet</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">I fshehur te burimet</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">I shfaqur te burimet</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Fshih te historia</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">I fshehur te historia</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">I shfaqur te historia</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Fsheh në rezultatet e kërkimit</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">E fshehur në rezultatet e kërkimit</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">E shfaqur në rezultatet e kërkimit</string>
@@ -773,6 +776,9 @@ Për të shfaqur menunë e pistës audio, ndryshoni 'Falsifiko transmetimet vide
<string name="revanced_hide_shorts_upcoming_button_title">Fshih butonin Në vazhdim</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Butoni \"Të ardhshme\" është i fshehur</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Butoni \"Të ardhshme\" është i dukshëm</string>
<string name="revanced_hide_shorts_effect_button_title">Fshih butonin Efekt</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Butoni i efektit është fshehur</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Butoni i efektit është shfaqur</string>
<string name="revanced_hide_shorts_green_screen_button_title">Fsheh butonin Ekran jeshil</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Butoni \"Ekrani i gjelbër\" është i fshehur</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Butoni \"Ekrani i gjelbër\" është i dukshëm</string>
@@ -954,11 +960,25 @@ Kjo veçori funksionon më mirë me një cilësi video prej 720p ose më të ul
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Fshih automatikisht butonin Kalo</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Butoni i kalimit fshihet pas disa sekondash</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Butoni Kalo është i shfaqur për të gjithë segmentin</string>
<string name="revanced_sb_general_skiptoast">Shfaq një toast kur kalohet</string>
<string name="revanced_sb_general_skiptoast_sum_on">Lajmërimi shfaqet kur një segment kalon automatikisht. Shtypni këtu për të parë një shembull</string>
<string name="revanced_sb_general_skiptoast_sum_off">Lajmërimi nuk shfaqet. Shtypni këtu për të parë një shembull</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Kohëzgjatja e butonit të kapërcimit</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Sa gjatë shfaqen butonat e fshehjes automatike të anashkalimit dhe anashkalimit te theksimi</string>
<string name="revanced_sb_general_skiptoast">Shfaq njoftimin e zhbërjes së anashkalimit</string>
<string name="revanced_sb_general_skiptoast_sum_on">Njoftimi shfaqet kur një segment anashkalohet automatikisht. Prek njoftimin për të zhbërë anashkalimin</string>
<string name="revanced_sb_general_skiptoast_sum_off">Njoftimi i shkurtër nuk shfaqet</string>
<string name="revanced_sb_toast_on_skip_duration">Kohëzgjatja e njoftimit të kapërcimit</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Sa gjatë shfaqet njoftimi i anashkalimit</string>
<string name="revanced_sb_duration_1s">1 sekondë</string>
<string name="revanced_sb_duration_2s">2 sekonda</string>
<string name="revanced_sb_duration_3s">3 sekonda</string>
<string name="revanced_sb_duration_4s">4 sekonda</string>
<string name="revanced_sb_duration_5s">5 sekonda</string>
<string name="revanced_sb_duration_6s">6 sekonda</string>
<string name="revanced_sb_duration_7s">7 sekonda</string>
<string name="revanced_sb_duration_8s">8 sekonda</string>
<string name="revanced_sb_duration_9s">9 sekonda</string>
<string name="revanced_sb_duration_10s">10 sekonda</string>
<string name="revanced_sb_general_time_without">Shfaq kohën e videos pa segmente</string>
<string name="revanced_sb_general_time_without_sum_on">Kohëzgjatja e videos minus të gjitha segmentet, tregohet në kllapa pranë kohëzgjatjes së plotë të videos</string>
<string name="revanced_sb_general_time_without_sum_on">Gjatësia e videos minus të gjitha segmentet shfaqet në shiritin e kërkimit</string>
<string name="revanced_sb_general_time_without_sum_off">Kohëzgjatja e plotë e videos tregohet</string>
<string name="revanced_sb_create_segment_category">Krijimi i segmenteve të reja</string>
<string name="revanced_sb_enable_create_segment">Shfaq butonin Krijo segment të ri</string>

View File

@@ -285,10 +285,13 @@ Nećete biti obavešteni ni o kakvim neočekivanim događajima."</string>
<string name="revanced_hide_description_components_screen_title">Opis videa</string>
<string name="revanced_hide_description_components_screen_summary">Sakrijte ili prikažite komponente opisa videa</string>
<string name="revanced_hide_filter_bar_screen_title">Traka filtera</string>
<string name="revanced_hide_filter_bar_screen_summary">Sakrijte ili prikažite traku filtera u fidu, rezultatima pretrage i srodnim videima</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Sakrij u fidu</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Skriveno u fidu</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Prikazano u fidu</string>
<string name="revanced_hide_filter_bar_screen_summary">Sakrijte ili prikažite traku filtera u fidovima, istoriji, rezultatima pretrage i srodnim videima</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Sakrij u fidovima</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Skriveno u fidovima</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Prikazano u fidovima</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Sakrij u istoriji</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Skriveno u istoriji</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Prikazano u istoriji</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Sakrij u rezultatima pretrage</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Skriveno u rezultatima pretrage</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Prikazano u rezultatima pretrage</string>
@@ -534,9 +537,9 @@ Podesite jačinu zvuka prevlačenjem vertikalno na desnoj strani ekrana"</string
<string name="revanced_hide_share_button_summary_on">Dugme „Deli” je skriveno</string>
<string name="revanced_hide_share_button_summary_off">Dugme „Deli” je prikazano</string>
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_stop_ads_button_title">Sakrij Zaustavi oglase</string>
<string name="revanced_hide_stop_ads_button_summary_on">Dugme za zaustavljanje oglasa je skriveno</string>
<string name="revanced_hide_stop_ads_button_summary_off">Dugme za zaustavljanje oglasa je prikazano</string>
<string name="revanced_hide_stop_ads_button_title">Sakrij dugme „Zaustavi oglase</string>
<string name="revanced_hide_stop_ads_button_summary_on">Dugme „Zaustavi oglase” je skriveno</string>
<string name="revanced_hide_stop_ads_button_summary_off">Dugme „Zaustavi oglase” je prikazano</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
<string name="revanced_hide_report_button_title">Sakrij dugme „Prijavi”</string>
@@ -564,7 +567,7 @@ Podesite jačinu zvuka prevlačenjem vertikalno na desnoj strani ekrana"</string
<string name="revanced_hide_clip_button_summary_on">Dugme „Klip” je skriveno</string>
<string name="revanced_hide_clip_button_summary_off">Dugme „Klip” je prikazano</string>
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_save_button_title">Sakrij Sačuvaj</string>
<string name="revanced_hide_save_button_title">Sakrij dugme „Sačuvaj</string>
<string name="revanced_hide_save_button_summary_on">Dugme „Sačuvaj” je skriveno</string>
<string name="revanced_hide_save_button_summary_off">Dugme „Sačuvaj” je prikazano</string>
</patch>
@@ -773,6 +776,9 @@ Da biste prikazali meni „Audio snimak”, promenite opciju „Lažirani video
<string name="revanced_hide_shorts_upcoming_button_title">Sakrij dugme „Predstojeće”</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Dugme „Predstojeće” je skriveno</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Dugme „Predstojeće” je prikazano</string>
<string name="revanced_hide_shorts_effect_button_title">Sakrij dugme „Efekat”</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Dugme „Efekat” je skriveno</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Dugme „Efekat” je prikazano</string>
<string name="revanced_hide_shorts_green_screen_button_title">Sakrij dugme „Zeleni ekran”</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Dugme „Zeleni ekran” je skriveno</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Dugme „Zeleni ekran” je prikazano</string>
@@ -954,11 +960,25 @@ Ova funkcija najbolje radi sa kvalitetom videa od 720p ili nižim i kada koristi
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Automatski sakrij dugme za preskakanje</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Dugme za preskakanje će biti skriveno nakon nekoliko sekundi</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Dugme za preskakanje je prikazano za ceo segment</string>
<string name="revanced_sb_general_skiptoast">Prikaži iskačuće obaveštenje pri preskakanju</string>
<string name="revanced_sb_general_skiptoast_sum_on">Iskačuće obaveštenje se prikazuje, kada je segment automatski preskočen. Dodirnite ovde da vidite primer</string>
<string name="revanced_sb_general_skiptoast_sum_off">Iskačuće obaveštenje se ne prikazuje. Dodirnite ovde da vidite primer</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Trajanje dugmeta za preskakanje</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Koliko dugo se prikazuju dugmad za automatsko sakrivanje preskakanja i preskakanje do isticanja</string>
<string name="revanced_sb_general_skiptoast">Prikaži obaveštenje o poništavanju preskakanja</string>
<string name="revanced_sb_general_skiptoast_sum_on">Obaveštenje se prikazuje kada se segment automatski preskoči. Dodirnite obaveštenje da biste poništili preskakanje</string>
<string name="revanced_sb_general_skiptoast_sum_off">Toast se ne prikazuje</string>
<string name="revanced_sb_toast_on_skip_duration">Trajanje toasta prilikom preskakanja</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Koliko dugo se prikazuje obaveštenje o preskakanju</string>
<string name="revanced_sb_duration_1s">1 sekunda</string>
<string name="revanced_sb_duration_2s">2 sekunde</string>
<string name="revanced_sb_duration_3s">3 sekunde</string>
<string name="revanced_sb_duration_4s">4 sekunde</string>
<string name="revanced_sb_duration_5s">5 sekundi</string>
<string name="revanced_sb_duration_6s">6 sekundi</string>
<string name="revanced_sb_duration_7s">7 sekundi</string>
<string name="revanced_sb_duration_8s">8 sekundi</string>
<string name="revanced_sb_duration_9s">9 sekundi</string>
<string name="revanced_sb_duration_10s">10 sekundi</string>
<string name="revanced_sb_general_time_without">Prikaži dužinu videa bez segmenata</string>
<string name="revanced_sb_general_time_without_sum_on">Dužina videa minus svi segmenti, prikazana u zagradama pored pune dužine videa</string>
<string name="revanced_sb_general_time_without_sum_on">Dužina video snimka minus svi segmenti prikazuje se na traci za pretragu</string>
<string name="revanced_sb_general_time_without_sum_off">Puna dužina videa je prikazana</string>
<string name="revanced_sb_create_segment_category">Pravljenje novih segmenata</string>
<string name="revanced_sb_enable_create_segment">Prikaži dugme za pravljenje novog segmenta</string>

View File

@@ -285,10 +285,13 @@ Second \"item\" text"</string>
<string name="revanced_hide_description_components_screen_title">Опис видеа</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_summary">Сакријте или прикажите траку филтера у фиду, резултатима претраге или сродним видеима</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_off">Приказано у фиду</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_summary_on">Скривено у фидовима</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Приказано у фидовима</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Сакриј у историји</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Скривено у историји</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Приказано у историји</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_off">Приказано у резултатима претраге</string>
@@ -534,9 +537,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_share_button_summary_on">Дугме „Дели” је скривено</string>
<string name="revanced_hide_share_button_summary_off">Дугме „Дели” је приказано</string>
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_stop_ads_button_title">Сакриј Заустави огласе</string>
<string name="revanced_hide_stop_ads_button_summary_on">Дугме „Заустави огласе је скривено</string>
<string name="revanced_hide_stop_ads_button_summary_off">Дугме „Заустави огласе је приказано</string>
<string name="revanced_hide_stop_ads_button_title">Сакриј дугме „Заустави огласе</string>
<string name="revanced_hide_stop_ads_button_summary_on">Дугме „Заустави огласе је скривено</string>
<string name="revanced_hide_stop_ads_button_summary_off">Дугме „Заустави огласе је приказано</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
<string name="revanced_hide_report_button_title">Сакриј дугме „Пријави”</string>
@@ -564,9 +567,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_clip_button_summary_on">Дугме „Клип” је скривено</string>
<string name="revanced_hide_clip_button_summary_off">Дугме „Клип” је приказано</string>
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_save_button_title">Сакриј Чувај</string>
<string name="revanced_hide_save_button_summary_on">Дугме „Чувај је скривено</string>
<string name="revanced_hide_save_button_summary_off">Дугме „Чувај је приказано</string>
<string name="revanced_hide_save_button_title">Сакриј дугме „Сачувај</string>
<string name="revanced_hide_save_button_summary_on">Дугме „Сачувај је скривено</string>
<string name="revanced_hide_save_button_summary_off">Дугме „Сачувај је приказано</string>
</patch>
<patch id="layout.buttons.navigation.navigationButtonsPatch">
<string name="revanced_navigation_buttons_screen_title">Дугмад навигације</string>
@@ -773,6 +776,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_upcoming_button_title">Сакриј дугме „Предстојеће”</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Дугме „Предстојеће” је скривено</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Дугме „Предстојеће” је приказано</string>
<string name="revanced_hide_shorts_effect_button_title">Сакриј дугме „Ефекат”</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Дугме „Ефекат” је скривено</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Дугме „Ефекат” је приказано</string>
<string name="revanced_hide_shorts_green_screen_button_title">Сакриј дугме „Зелени екран”</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Дугме „Зелени екран” је скривено</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Дугме „Зелени екран” је приказано</string>
@@ -954,11 +960,25 @@ Second \"item\" text"</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Аутоматски сакриј дугме за прескакање</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Дугме за прескакање ће бити скривено након неколико секунди</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Дугме за прескакање је приказано за цео сегмент</string>
<string name="revanced_sb_general_skiptoast">Прикажи искачуће обавештење при прескакању</string>
<string name="revanced_sb_general_skiptoast_sum_on">Искачуће обавештење се приказује, када је сегмент аутоматски прескочен. Додирните овде да видите пример</string>
<string name="revanced_sb_general_skiptoast_sum_off">Искачуће обавештење се не приказује. Додирните овде да видите пример</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Трајање дугмета за прескакање</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Колико дуго се приказују дугмад за аутоматско скривање прескакања и прескакање до истакнутог</string>
<string name="revanced_sb_general_skiptoast">Прикажи искачућу поруку за поништавање прескакања</string>
<string name="revanced_sb_general_skiptoast_sum_on">Искачућа порука се приказује када се сегмент аутоматски прескочи. Додирните искачућу поруку да бисте поништили прескакање</string>
<string name="revanced_sb_general_skiptoast_sum_off">Тост није приказан</string>
<string name="revanced_sb_toast_on_skip_duration">Трајање тост поруке при прескакању</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Колико дуго се приказује искачућа порука о прескакању</string>
<string name="revanced_sb_duration_1s">1 секунда</string>
<string name="revanced_sb_duration_2s">2 секунде</string>
<string name="revanced_sb_duration_3s">3 секунде</string>
<string name="revanced_sb_duration_4s">4 секунде</string>
<string name="revanced_sb_duration_5s">5 секунди</string>
<string name="revanced_sb_duration_6s">6 секунди</string>
<string name="revanced_sb_duration_7s">7 секунди</string>
<string name="revanced_sb_duration_8s">8 секунди</string>
<string name="revanced_sb_duration_9s">9 секунди</string>
<string name="revanced_sb_duration_10s">10 секунди</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_create_segment_category">Прављење нових сегмената</string>
<string name="revanced_sb_enable_create_segment">Прикажи дугме за прављење новог сегмента</string>

View File

@@ -91,10 +91,10 @@ Tryck på Fortsätt-knappen och tillåt optimeringsändringar."</string>
<string name="revanced_settings_screen_01_ads_title">Annonser</string>
<string name="revanced_settings_screen_02_alt_thumbnails_title">Alternativa miniatyrbilder</string>
<string name="revanced_settings_screen_03_feed_title">Flöde</string>
<string name="revanced_settings_screen_04_general_title">Generell</string>
<string name="revanced_settings_screen_04_general_title">Allmänt</string>
<string name="revanced_settings_screen_05_player_title">Spelare</string>
<string name="revanced_settings_screen_07_seekbar_title">Sökfält</string>
<string name="revanced_settings_screen_08_swipe_controls_title">Dragkontroller</string>
<string name="revanced_settings_screen_07_seekbar_title">Sökreglage</string>
<string name="revanced_settings_screen_08_swipe_controls_title">Svepkontroller</string>
<string name="revanced_settings_screen_11_misc_title">Diverse</string>
<string name="revanced_settings_screen_12_video_title">Video</string>
<string name="revanced_restore_old_settings_menus_title">Återställ gamla inställningsmenyer</string>
@@ -127,9 +127,9 @@ Men om du aktiverar detta kommer även vissa användardata, t.ex. din IP-adress,
<string name="revanced_debug_stacktrace_summary_on">Felsökningsloggar inkluderar stackspår</string>
<string name="revanced_debug_stacktrace_summary_off">Felsökningsloggar inkluderar inte stackspår</string>
<string name="revanced_debug_toast_on_error_title">Visa ett meddelande om ett fel uppstår med ReVanced</string>
<string name="revanced_debug_toast_on_error_summary_on">Toast visas om fel uppstår</string>
<string name="revanced_debug_toast_on_error_summary_off">Toast visas inte om fel uppstår</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"Att stänga av felmeddelanden döljer alla ReVanced-felmeddelanden.
<string name="revanced_debug_toast_on_error_summary_on">Meddelande visas om fel uppstår</string>
<string name="revanced_debug_toast_on_error_summary_off">Meddelande visas inte om fel uppstår</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"Om du stänger av felmeddelanden döljs alla ReVanced-felmeddelanden.
Du kommer inte att bli meddelad om oväntade händelser."</string>
<string name="revanced_debug_export_logs_to_clipboard_title">Exportera felsökningsloggar</string>
@@ -149,9 +149,9 @@ Du kommer inte att bli meddelad om oväntade händelser."</string>
<string name="revanced_hide_crowdfunding_box_title">Dölj crowdfunding-rutan</string>
<string name="revanced_hide_crowdfunding_box_summary_on">Crowdfunding-rutan är dold</string>
<string name="revanced_hide_crowdfunding_box_summary_off">Crowdfunding-rutan är synlig</string>
<string name="revanced_hide_floating_microphone_button_title">Dölj flytande mikrofonknapp</string>
<string name="revanced_hide_floating_microphone_button_summary_on">Mikrofon knapp dold</string>
<string name="revanced_hide_floating_microphone_button_summary_off">Mikrofonknappen är synlig</string>
<string name="revanced_hide_floating_microphone_button_title">Dölj svävande mikrofonknapp</string>
<string name="revanced_hide_floating_microphone_button_summary_on">Mikrofonknappen är dold</string>
<string name="revanced_hide_floating_microphone_button_summary_off">Mikrofonknappen visas</string>
<string name="revanced_hide_channel_watermark_title">Dölj kanalens vattenstämpel</string>
<string name="revanced_hide_channel_watermark_summary_on">Vattenstämpeln är dold</string>
<string name="revanced_hide_channel_watermark_summary_off">Vattenstämpeln är synlig</string>
@@ -169,12 +169,12 @@ Du kommer inte att bli meddelad om oväntade händelser."</string>
<string name="revanced_hide_join_membership_button_summary_on">Knappen är dold</string>
<string name="revanced_hide_join_membership_button_summary_off">Knappen är synlig</string>
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
<string name="revanced_hide_for_you_shelf_title">Dölj \"För dig\"-hyllan</string>
<string name="revanced_hide_for_you_shelf_summary_on">Hylla på kanalsidan är dold</string>
<string name="revanced_hide_for_you_shelf_summary_off">Hylla på kanalsidan visas</string>
<string name="revanced_hide_for_you_shelf_title">Dölj hyllan \"För dig\"</string>
<string name="revanced_hide_for_you_shelf_summary_on">Hyllan på kanalsidan är dold</string>
<string name="revanced_hide_for_you_shelf_summary_off">Hyllan på kanalsidan visas</string>
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
This item appear in the subscription feed for future livestreams or unreleased videos. -->
<string name="revanced_hide_notify_me_button_title">Dölj knappen \'Meddela mig\'</string>
<string name="revanced_hide_notify_me_button_title">Dölj knappen \"Meddela mig\"</string>
<string name="revanced_hide_notify_me_button_summary_on">Knappen är dold</string>
<string name="revanced_hide_notify_me_button_summary_off">Knappen är synlig</string>
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
@@ -285,10 +285,13 @@ Du kommer inte att bli meddelad om oväntade händelser."</string>
<string name="revanced_hide_description_components_screen_title">Videobeskrivning</string>
<string name="revanced_hide_description_components_screen_summary">Dölj eller visa videobeskrivningskomponenter</string>
<string name="revanced_hide_filter_bar_screen_title">Filterfält</string>
<string name="revanced_hide_filter_bar_screen_summary">Visa eller dölj filterfältet i flödet, sökresultaten och relaterade videor</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Dölj i flöde</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Dold i flödet</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Visas i flöde</string>
<string name="revanced_hide_filter_bar_screen_summary">Dölj eller visa filterfältet i flödena, historiken, sökresultaten och relaterade videor</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Dölj i flöden</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Dold i flöden</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Visas i flöden</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Dölj i historik</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Dold i historik</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Visas i historik</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Dölj i sökresultat</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Dold i sökresultat</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Visas i sökresultat</string>
@@ -316,8 +319,8 @@ Du kommer inte att bli meddelad om oväntade händelser."</string>
<string name="revanced_hide_comments_timestamp_button_summary_on">Tidsstämpelknappen är dold</string>
<string name="revanced_hide_comments_timestamp_button_summary_off">Tidsstämpelknappen är synlig</string>
<string name="revanced_hide_comments_preview_comment_title">Dölj förhandsgranskningskommentar</string>
<string name="revanced_hide_comments_preview_comment_summary_on">Förhandsgranska kommentaren är dold</string>
<string name="revanced_hide_comments_preview_comment_summary_off">Förhandsgranska kommentar är synlig</string>
<string name="revanced_hide_comments_preview_comment_summary_on">Förhandsgranskningskommentaren är dold</string>
<string name="revanced_hide_comments_preview_comment_summary_off">Förhandsgranskningskommentaren visas</string>
<string name="revanced_hide_comments_thanks_button_title">Dölj knappen \"Tack\"</string>
<string name="revanced_hide_comments_thanks_button_summary_on">Tack-knappen är dold</string>
<string name="revanced_hide_comments_thanks_button_summary_off">Tackknappen är synlig</string>
@@ -377,41 +380,41 @@ Begränsningar
<string name="revanced_hide_general_ads_title">Dölj allmänna annonser</string>
<string name="revanced_hide_general_ads_summary_on">Allmänna annonser är dolda</string>
<string name="revanced_hide_general_ads_summary_off">Allmänna annonser är synliga</string>
<string name="revanced_hide_fullscreen_ads_title">Dölj fullskärmsannonser</string>
<string name="revanced_hide_fullscreen_ads_title">Dölj helskärmsannonser</string>
<string name="revanced_hide_fullscreen_ads_summary_on">"Helskärmsannonser är dolda
Den här funktionen är endast tillgänglig för äldre enheter"</string>
<string name="revanced_hide_fullscreen_ads_summary_off">Fullskärmsannonser är synliga</string>
<string name="revanced_hide_paid_promotion_label_title">Dölj betald kampanjetikett</string>
<string name="revanced_hide_paid_promotion_label_summary_on">Betald kampanjetikett är dold</string>
<string name="revanced_hide_paid_promotion_label_summary_off">Betald kampanjetikett är synlig</string>
<string name="revanced_hide_fullscreen_ads_summary_off">Helskärmsannonser visas</string>
<string name="revanced_hide_paid_promotion_label_title">Dölj etikett för betald marknadsföring</string>
<string name="revanced_hide_paid_promotion_label_summary_on">Etiketten för betald marknadsföring är dold</string>
<string name="revanced_hide_paid_promotion_label_summary_off">Etiketten för betald marknadsföring visas</string>
<string name="revanced_hide_self_sponsor_ads_title">Dölj självsponsrade kort</string>
<string name="revanced_hide_self_sponsor_ads_summary_on">Självsponsrade kort är dolda</string>
<string name="revanced_hide_self_sponsor_ads_summary_off">Självsponsrade kort är synliga</string>
<string name="revanced_hide_products_banner_title">Dölj \"Visa produkter\"-banner</string>
<string name="revanced_hide_products_banner_summary_on">Banner är dold</string>
<string name="revanced_hide_products_banner_summary_off">Banner är synlig</string>
<string name="revanced_hide_end_screen_store_banner_title">Dölj bannern för butik på slutskärmen</string>
<string name="revanced_hide_end_screen_store_banner_title">Dölj butiksbannern på slutskärmen</string>
<string name="revanced_hide_end_screen_store_banner_summary_on">Butiksbannern är dold</string>
<string name="revanced_hide_end_screen_store_banner_summary_off">Butiksbannern visas</string>
<string name="revanced_hide_player_store_shelf_title">Dölj spelarbutikshyllan</string>
<string name="revanced_hide_player_store_shelf_summary_on">Hyllan för shopping är dold</string>
<string name="revanced_hide_player_store_shelf_summary_off">Hyllan för shopping visas</string>
<string name="revanced_hide_shopping_links_title">Dölj shoppinglänkar i videobeskrivning</string>
<string name="revanced_hide_shopping_links_summary_on">Shoppinglänkar i videobeskrivningen är dolda</string>
<string name="revanced_hide_shopping_links_summary_off">Shoppinglänkar i videobeskrivningen visas</string>
<string name="revanced_hide_player_store_shelf_title">Dölj butikshyllan i spelaren</string>
<string name="revanced_hide_player_store_shelf_summary_on">Butikshyllan är dold</string>
<string name="revanced_hide_player_store_shelf_summary_off">Butikshyllan visas</string>
<string name="revanced_hide_shopping_links_title">Dölj butikslänkar</string>
<string name="revanced_hide_shopping_links_summary_on">Butikslänkar i videobeskrivningen är dolda</string>
<string name="revanced_hide_shopping_links_summary_off">Butikslänkar i videobeskrivningen visas</string>
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_store_button_title">Dölj knappen \'Besök butik\' på kanalsidor</string>
<string name="revanced_hide_visit_store_button_title">Dölj knappen Besök butiken</string>
<string name="revanced_hide_visit_store_button_summary_on">Knappen på kanalsidan är dold</string>
<string name="revanced_hide_visit_store_button_summary_off">Knappen på kanalsidan visas</string>
<string name="revanced_hide_web_search_results_title">Dölj sökresultat på webben</string>
<string name="revanced_hide_web_search_results_summary_on">Sökresultat på webben är dolda</string>
<string name="revanced_hide_web_search_results_summary_off">Sökresultat på webben är synliga</string>
<string name="revanced_hide_merchandise_banners_title">Dölj reklambanners</string>
<string name="revanced_hide_merchandise_banners_summary_on">Reklambanners är dolda</string>
<string name="revanced_hide_merchandise_banners_summary_off">Reklambanners är synliga</string>
<string name="revanced_hide_merchandise_banners_title">Dölj banners för varor</string>
<string name="revanced_hide_merchandise_banners_summary_on">Banners för varor är dolda</string>
<string name="revanced_hide_merchandise_banners_summary_off">Banners för varor visas</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_fullscreen_ads_feature_not_available_toast">Dölj fullskärmsannonser fungerar endast med äldre enheter</string>
<string name="revanced_hide_fullscreen_ads_feature_not_available_toast">Helskärmsannonser kan döljas bara på äldre enheter</string>
</patch>
<patch id="ad.getpremium.hideGetPremiumPatch">
<string name="revanced_hide_get_premium_title">Dölj YouTube Premium-kampanjer</string>
@@ -454,9 +457,9 @@ Den här funktionen är endast tillgänglig för äldre enheter"</string>
<string name="revanced_external_downloader_not_installed_warning">%s är inte installerat. Installera det.</string>
</patch>
<patch id="interaction.seekbar.disablePreciseSeekingGesturePatch">
<string name="revanced_disable_precise_seeking_gesture_title">Inaktivera exakt sök-gest</string>
<string name="revanced_disable_precise_seeking_gesture_summary_on">Gest är inaktiverad</string>
<string name="revanced_disable_precise_seeking_gesture_summary_off">Gest är aktiverad</string>
<string name="revanced_disable_precise_seeking_gesture_title">Inaktivera gest för exakt sökning</string>
<string name="revanced_disable_precise_seeking_gesture_summary_on">Gesten är inaktiverad</string>
<string name="revanced_disable_precise_seeking_gesture_summary_off">Gesten är aktiverad</string>
</patch>
<patch id="interaction.seekbar.enableSeekbarTappingPatch">
<string name="revanced_seekbar_tapping_title">Aktivera tryck för att söka</string>
@@ -465,45 +468,45 @@ Den här funktionen är endast tillgänglig för äldre enheter"</string>
</patch>
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
<string name="revanced_swipe_brightness_title">Aktivera ljusstyrkegest</string>
<string name="revanced_swipe_brightness_summary_on">"Helskärmens ljusstyrkesvep är aktiverat
<string name="revanced_swipe_brightness_summary_on">"Svepgest för ljusstyrka i helskärm är aktiverad
Justera ljusstyrkan genom att svepa vertikalt på vänster sida av skärmen"</string>
<string name="revanced_swipe_brightness_summary_off">Helskärmens ljusstyrkesvep är inaktiverat</string>
<string name="revanced_swipe_brightness_summary_off">Svepgest för ljusstyrka i helskärm är inaktiverad</string>
<string name="revanced_swipe_volume_title">Aktivera volymgest</string>
<string name="revanced_swipe_volume_summary_on">"Helskärmsvolymsvep är aktiverat
<string name="revanced_swipe_volume_summary_on">"Svepgest för volym i helskärm är aktiverad
Justera volymen genom att svepa vertikalt på höger sida av skärmen"</string>
<string name="revanced_swipe_volume_summary_off">Helskärmsvolymsvep är inaktiverat</string>
<string name="revanced_swipe_volume_summary_off">Svepgest för volym i helskärm är inaktiverad</string>
<string name="revanced_swipe_press_to_engage_title">Aktivera tryck för att svepa-gest</string>
<string name="revanced_swipe_press_to_engage_summary_on">Tryck för att svepa är aktiverat</string>
<string name="revanced_swipe_press_to_engage_summary_off">Tryck för att svepa är inaktiverat</string>
<string name="revanced_swipe_haptic_feedback_title">Aktivera haptisk feedback</string>
<string name="revanced_swipe_haptic_feedback_summary_on">Haptisk feedback är aktiverad</string>
<string name="revanced_swipe_haptic_feedback_summary_off">Haptisk feedback är inaktiverad</string>
<string name="revanced_swipe_save_and_restore_brightness_title">Spara och återställ ljusstyrkan</string>
<string name="revanced_swipe_save_and_restore_brightness_summary_on">Spara och återställ ljusstyrkan när du avslutar eller går in i fullskärm</string>
<string name="revanced_swipe_save_and_restore_brightness_summary_off">Spara inte och återställ ljusstyrkan när du avslutar eller går in i fullskärm</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">Aktivera automatisk ljusstyrkegest</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">Genom att svepa ner till det lägsta värdet av gesten för ljusstyrka aktiveras automatisk ljusstyrka</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">Att svepa ner till det lägsta värdet aktiverar inte automatisk ljusstyrka</string>
<string name="revanced_swipe_save_and_restore_brightness_title">Spara och återställ ljusstyrka</string>
<string name="revanced_swipe_save_and_restore_brightness_summary_on">Spara och återställ ljusstyrkan när du avslutar eller aktiverar helskärmsläge</string>
<string name="revanced_swipe_save_and_restore_brightness_summary_off">Spara och återställ inte ljusstyrkan när du avslutar eller aktiverar helskärmsläge</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">Aktivera gest för automatisk ljusstyrka</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">Automatisk ljusstyrka aktiveras om du sveper ner till ljusstyrkegestens lägsta värde</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">Automatisk ljusstyrka aktiveras inte om du sveper ner till det lägsta värdet</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">Automatiskt</string>
<string name="revanced_swipe_overlay_timeout_title">Tidsgräns för svepöverlagring</string>
<string name="revanced_swipe_overlay_timeout_title">Tidsgräns för svepöverlägg</string>
<string name="revanced_swipe_overlay_timeout_summary">Mängden millisekunder överlappningen är synlig</string>
<string name="revanced_swipe_overlay_background_opacity_title">Överlägg svepbakgrund opacitet</string>
<string name="revanced_swipe_overlay_background_opacity_title">Bakgrundsopacitet för svepöverlägg</string>
<string name="revanced_swipe_overlay_background_opacity_summary">Opacitetsvärde mellan 0-100</string>
<string name="revanced_swipe_overlay_background_opacity_invalid_toast">Överlagrad svepopacitet måste vara mellan 0-100</string>
<string name="revanced_swipe_overlay_progress_brightness_color_title">Färg för svepgestöverlagringens ljusstyrka</string>
<string name="revanced_swipe_overlay_progress_brightness_color_summary">Färgen på förloppsindikatorn för ljusstyrkekontroller</string>
<string name="revanced_swipe_overlay_progress_volume_color_title">Färg för svepgestöverlagringens volym</string>
<string name="revanced_swipe_overlay_progress_volume_color_summary">Färgen på förloppsindikatorn för volymkontroller</string>
<string name="revanced_swipe_text_overlay_size_title">Textstorlek för svepöverlagring</string>
<string name="revanced_swipe_text_overlay_size_summary">Textstorleken för svepöverlagring mellan 1 och 30</string>
<string name="revanced_swipe_overlay_background_opacity_invalid_toast">Opacitet för svepöverlägg måste vara mellan 0-100</string>
<string name="revanced_swipe_overlay_progress_brightness_color_title">Färg svepöverlägg för ljusstyrka</string>
<string name="revanced_swipe_overlay_progress_brightness_color_summary">Färgen på reglaget för kontroll av ljusstyrka</string>
<string name="revanced_swipe_overlay_progress_volume_color_title">Färg svepöverlägg för volym</string>
<string name="revanced_swipe_overlay_progress_volume_color_summary">Färgen på reglaget för volymkontroll</string>
<string name="revanced_swipe_text_overlay_size_title">Textstorlek för svepöverlägg</string>
<string name="revanced_swipe_text_overlay_size_summary">Textstorleken för svepöverlägg mellan 1-30</string>
<string name="revanced_swipe_text_overlay_size_invalid_toast">Textstorleken måste vara mellan 1 och 30</string>
<string name="revanced_swipe_threshold_title">Svep magnitud tröskel</string>
<string name="revanced_swipe_threshold_summary">Mängden tröskel för att svepa ska uppstå</string>
<string name="revanced_swipe_volume_sensitivity_title">Volym svepkänslighet</string>
<string name="revanced_swipe_threshold_title">Tröskelvärde för svep</string>
<string name="revanced_swipe_threshold_summary">Tröskelvärdet för att svep ska uppstå</string>
<string name="revanced_swipe_volume_sensitivity_title">Svepkänslighet för volymgest</string>
<string name="revanced_swipe_volume_sensitivity_summary">Hur mycket volymen ändras per svep</string>
<string name="revanced_swipe_overlay_style_title">Svep överläggningsstil</string>
<string name="revanced_swipe_overlay_style_title">Stil för svepöverlägg</string>
<string name="revanced_swipe_overlay_style_entry_1">Horisontellt överlägg</string>
<string name="revanced_swipe_overlay_style_entry_2">Horisontellt överlägg (minimalt - överst)</string>
<string name="revanced_swipe_overlay_style_entry_3">Horisontellt överlägg (minimalt - mitten)</string>
@@ -511,9 +514,9 @@ Justera volymen genom att svepa vertikalt på höger sida av skärmen"</string>
<string name="revanced_swipe_overlay_style_entry_5">Cirkulärt överlägg (minimalt)</string>
<string name="revanced_swipe_overlay_style_entry_6">Vertikalt överlägg</string>
<string name="revanced_swipe_overlay_style_entry_7">Vertikalt överlägg (minimalt)</string>
<string name="revanced_swipe_change_video_title">Aktivera svepning för att byta video</string>
<string name="revanced_swipe_change_video_summary_on">Svepning i helskärmsläge ändrar till följande/föregående video</string>
<string name="revanced_swipe_change_video_summary_off">Svepning i helskärmsläge ändrar inte till följande/föregående video</string>
<string name="revanced_swipe_change_video_title">Aktivera svep för att byta videor</string>
<string name="revanced_swipe_change_video_summary_on">Svep i helskärmsläge byter till nästa/föregående video</string>
<string name="revanced_swipe_change_video_summary_off">Svep i helskärmsläge byter inte till nästa/föregående video</string>
</patch>
<patch id="layout.autocaptions.autoCaptionsPatch">
<string name="revanced_disable_auto_captions_title">Inaktivera automatisk bildtext</string>
@@ -711,12 +714,12 @@ För att visa ljudspårsmenyn, ändra \"Spoof video streams\" till iOS TV"</stri
<string name="revanced_disable_rolling_number_animations_summary_off">Rullande nummer är animerade</string>
</patch>
<patch id="layout.hide.seekbar.hideSeekbarPatch">
<string name="revanced_hide_seekbar_title">Dölj sökfältet i videospelare</string>
<string name="revanced_hide_seekbar_summary_on">Sökfältet för videospelare är dolt</string>
<string name="revanced_hide_seekbar_summary_off">Sökfältet för videospelaren är synlig</string>
<string name="revanced_hide_seekbar_thumbnail_title">Dölj sökfältet i videominiatyrer</string>
<string name="revanced_hide_seekbar_thumbnail_summary_on">Miniatyrsökningsfältet är dolt</string>
<string name="revanced_hide_seekbar_thumbnail_summary_off">Miniatyrens sökfält är synlig</string>
<string name="revanced_hide_seekbar_title">Dölj sökreglage i videospelare</string>
<string name="revanced_hide_seekbar_summary_on">Sökreglaget i videospelaren är dolt</string>
<string name="revanced_hide_seekbar_summary_off">Sökreglaget i videospelaren visas</string>
<string name="revanced_hide_seekbar_thumbnail_title">Dölj sökreglage i videominiatyrer</string>
<string name="revanced_hide_seekbar_thumbnail_summary_on">Sökreglaget i miniatyrbilder är dolt</string>
<string name="revanced_hide_seekbar_thumbnail_summary_off">Sökreglaget i miniatyrbilder visas</string>
</patch>
<patch id="layout.hide.shorts.hideShortsComponentsResourcePatch">
<string name="revanced_shorts_player_screen_title">Shorts spelare</string>
@@ -732,7 +735,7 @@ För att visa ljudspårsmenyn, ändra \"Spoof video streams\" till iOS TV"</stri
<string name="revanced_hide_shorts_search_title">Dölj Shorts i sökresultat</string>
<string name="revanced_hide_shorts_search_summary_on">Dolda i sökresultaten</string>
<string name="revanced_hide_shorts_search_summary_off">Visas i sökresultaten</string>
<string name="revanced_hide_shorts_history_title">Dölj Shorts i titthistoriken</string>
<string name="revanced_hide_shorts_history_title">Dölj Shorts-videor i visningshistoriken</string>
<string name="revanced_hide_shorts_history_summary_on">Dolda i visningshistoriken</string>
<string name="revanced_hide_shorts_history_summary_off">Visas i titthistoriken</string>
<!-- 'join' should be translated using the same localized wording YouTube displays for the button. -->
@@ -759,8 +762,8 @@ För att visa ljudspårsmenyn, ändra \"Spoof video streams\" till iOS TV"</stri
<string name="revanced_hide_shorts_location_label_summary_on">Platsetiketten är dold</string>
<string name="revanced_hide_shorts_location_label_summary_off">Platsetikett är synlig</string>
<string name="revanced_hide_shorts_preview_comment_title">Dölj förhandsgranskningskommentar</string>
<string name="revanced_hide_shorts_preview_comment_summary_on">Förhandsgranskningskommentar är dold</string>
<string name="revanced_hide_shorts_preview_comment_summary_off">Förhandsvisningskommentaren visas</string>
<string name="revanced_hide_shorts_preview_comment_summary_on">Förhandsgranskningskommentaren är dold</string>
<string name="revanced_hide_shorts_preview_comment_summary_off">Förhandsgranskningskommentaren visas</string>
<string name="revanced_hide_shorts_save_sound_button_title">Dölj knapp \'Spara musik\'</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">Spara musikknappen är dold</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">Spara musikknappen visas</string>
@@ -773,6 +776,9 @@ För att visa ljudspårsmenyn, ändra \"Spoof video streams\" till iOS TV"</stri
<string name="revanced_hide_shorts_upcoming_button_title">Dölj knapp \'Kommande\'</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Kommande knapp är dold</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Kommande knapp visas</string>
<string name="revanced_hide_shorts_effect_button_title">Dölj effektknapp</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Effektknappen är dold</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Effektknappen visas</string>
<string name="revanced_hide_shorts_green_screen_button_title">Dölj grön skärm-knapp</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Grön skärm-knappen är dold</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Grön skärmknapp visas</string>
@@ -898,8 +904,8 @@ Begränsning: Ogillanden kanske inte visas i inkognitoläge"</string>
<string name="revanced_ryd_estimated_like_summary_on">Videor med inaktiverade gillanden visar ett uppskattat antal gillanden</string>
<string name="revanced_ryd_estimated_like_summary_off">Uppskattade gillanden visas inte</string>
<string name="revanced_ryd_toast_on_connection_error_title">Visa ett meddelande om API inte är tillgängligt</string>
<string name="revanced_ryd_toast_on_connection_error_summary_on">Visa ett meddelande om Return YouTube Dislike inte är tillgängligt</string>
<string name="revanced_ryd_toast_on_connection_error_summary_off">Visa inget meddelande om Return YouTube Dislike inte är tillgängligt</string>
<string name="revanced_ryd_toast_on_connection_error_summary_on">Meddelande visas om Return YouTube Dislike inte är tillgängligt</string>
<string name="revanced_ryd_toast_on_connection_error_summary_off">Meddelande visas inte om Return YouTube Dislike inte är tillgängligt</string>
<string name="revanced_ryd_attribution_summary">Data tillhandahålls av Return YouTube Tycker inte om API. Tryck här för att läsa mer</string>
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
<string name="revanced_ryd_statistics_category_title">ReturnYouTubeDislike API-statistik för denna enhet</string>
@@ -926,24 +932,24 @@ Begränsning: Ogillanden kanske inte visas i inkognitoläge"</string>
</patch>
<patch id="layout.seekbar.seekbarThumbnailsPatch">
<string name="revanced_seekbar_thumbnails_high_quality_title">Aktivera högkvalitativa miniatyrer</string>
<string name="revanced_seekbar_thumbnails_high_quality_summary_on">Seekbar miniatyrer är av hög kvalitet</string>
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Seekbar miniatyrer är av medelhög kvalitet</string>
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"Detta återställer även miniatyrer på livestreams som inte har miniatyrer i sökfältet.
<string name="revanced_seekbar_thumbnails_high_quality_summary_on">Sökreglageminiatyrer är av hög kvalitet</string>
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Sökreglageminiatyrer är av medelhög kvalitet</string>
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"Detta återställer även miniatyrer på livestreamar som inte har sökreglageminiatyrer.
Miniatyrer i sökfältet kommer att använda samma kvalitet som den aktuella videon.
Sökreglageminiatyrer kommer att använda samma kvalitet som den aktuella videon.
Den här funktionen fungerar bäst med en videokvalitet på 720p eller lägre och när du använder en mycket snabb internetanslutning."</string>
<string name="revanced_restore_old_seekbar_thumbnails_title">Återställ gamla miniatyrer i sökfältet</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Seekbar miniatyrer visas ovanför sökfältet</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Seekbar miniatyrer visas i helskärm</string>
<string name="revanced_restore_old_seekbar_thumbnails_title">Återställ gamla sökreglageminiatyrer</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Sökreglageminiatyrer visas ovanför sökreglaget</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Sökreglageminiatyrer visas i helskärm</string>
</patch>
<patch id="layout.sponsorblock.sponsorBlockResourcePatch">
<string name="revanced_sb_enable_sb">Aktivera SponsorBlock</string>
<string name="revanced_sb_enable_sb_sum">SponsorBlock är ett crowdsourcat system för att hoppa över irriterande delar av YouTube-videor</string>
<string name="revanced_sb_enable_sb_sum">SponsorBlock är ett crowdsourcing-baserat system för att hoppa över irriterande delar av YouTube-videor</string>
<string name="revanced_sb_appearance_category">Utseende</string>
<string name="revanced_sb_enable_voting">Visa röstknapp</string>
<string name="revanced_sb_enable_voting_sum_on">Segmentets röstknapp är synligt</string>
<string name="revanced_sb_enable_voting_sum_off">Segmentets röstknapp visas inte</string>
<string name="revanced_sb_enable_voting">Visa röstningsknapp</string>
<string name="revanced_sb_enable_voting_sum_on">Röstningsknappen för segment visas</string>
<string name="revanced_sb_enable_voting_sum_off">Röstningsknappen för segment visas inte</string>
<string name="revanced_sb_square_layout">Använd fyrkantig layout</string>
<string name="revanced_sb_square_layout_sum_on">Knappar och kontroller är fyrkantiga</string>
<string name="revanced_sb_square_layout_sum_off">Knappar och kontroller är rundade</string>
@@ -951,21 +957,35 @@ Den här funktionen fungerar bäst med en videokvalitet på 720p eller lägre oc
<string name="revanced_sb_enable_compact_skip_button">Använd kompakt Hoppa över-knapp</string>
<string name="revanced_sb_enable_compact_skip_button_sum_on">Skippa knappen stylad för minsta bredd</string>
<string name="revanced_sb_enable_compact_skip_button_sum_off">Skippa knappen stylad för bästa utseende</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Dölj automatiskt Hoppa över-knappen</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Hoppa över knappen döljer efter några sekunder</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Dölj Hoppa över-knappen automatiskt</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Hoppa över-knappen döljs efter några sekunder</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Hoppa över-knappen visas för hela segmentet</string>
<string name="revanced_sb_general_skiptoast">Visa en toast när du hoppar över</string>
<string name="revanced_sb_general_skiptoast_sum_on">Visa ett meddelande när ett segment hoppas över automatiskt. Tryck här för att se ett exempel</string>
<string name="revanced_sb_general_skiptoast_sum_off">Meddelande visas inte. Tryck här för att se ett exempel</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Varaktighet för Hoppa över-knappen</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Hur länge knapparna för automatisk döljning av överhoppning och hoppa till markering visas</string>
<string name="revanced_sb_general_skiptoast">Visa toastmeddelande för ångra överhoppning</string>
<string name="revanced_sb_general_skiptoast_sum_on">Meddelande visas när ett segment hoppas över automatiskt. Tryck på toastmeddelandet för att ångra överhoppningen</string>
<string name="revanced_sb_general_skiptoast_sum_off">Toastmeddelande visas inte</string>
<string name="revanced_sb_toast_on_skip_duration">Varaktighet för överhoppningstoastmeddelande</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Hur länge toastmeddelandet för överhoppning visas</string>
<string name="revanced_sb_duration_1s">1 sekund</string>
<string name="revanced_sb_duration_2s">2 sekunder</string>
<string name="revanced_sb_duration_3s">3 sekunder</string>
<string name="revanced_sb_duration_4s">4 sekunder</string>
<string name="revanced_sb_duration_5s">5 sekunder</string>
<string name="revanced_sb_duration_6s">6 sekunder</string>
<string name="revanced_sb_duration_7s">7 sekunder</string>
<string name="revanced_sb_duration_8s">8 sekunder</string>
<string name="revanced_sb_duration_9s">9 sekunder</string>
<string name="revanced_sb_duration_10s">10 sekunder</string>
<string name="revanced_sb_general_time_without">Visa videons längd utan segment</string>
<string name="revanced_sb_general_time_without_sum_on">Videolängd minus alla segment, som visas i parentes bredvid den fullständiga videolängden</string>
<string name="revanced_sb_general_time_without_sum_on">Videolängden minus alla segment visas på sökfältet</string>
<string name="revanced_sb_general_time_without_sum_off">Hela videons längd visas</string>
<string name="revanced_sb_create_segment_category">Skapa nya segment</string>
<string name="revanced_sb_enable_create_segment">Visa knappen Skapa nytt segment</string>
<string name="revanced_sb_enable_create_segment_sum_on">Skapa ny knapp för segmentet visas</string>
<string name="revanced_sb_enable_create_segment_sum_off">Skapa ny segmentknapp visas inte</string>
<string name="revanced_sb_general_adjusting">Justera nytt steg för segment</string>
<string name="revanced_sb_general_adjusting_sum">Antal millisekunder knapparna för tidsjustering rör sig när nya segment skapas</string>
<string name="revanced_sb_enable_create_segment_sum_on">Knappen Skapa nytt segment visas</string>
<string name="revanced_sb_enable_create_segment_sum_off">Knappen Skapa nytt segment visas inte</string>
<string name="revanced_sb_general_adjusting">Justera steg för nytt segment</string>
<string name="revanced_sb_general_adjusting_sum">Antal millisekunder som tidsjusteringsknapparna hoppar framåt/bakåt när nya segment skapas</string>
<string name="revanced_sb_general_adjusting_invalid">Värdet måste vara ett positivt tal</string>
<string name="revanced_sb_guidelines_preference_title">Visa riktlinjer</string>
<string name="revanced_sb_guidelines_preference_sum">Riktlinjer innehåller regler och tips för att skapa nya segment</string>
@@ -975,87 +995,87 @@ Den här funktionen fungerar bäst med en videokvalitet på 720p eller lägre oc
<string name="revanced_sb_guidelines_popup_open">Visa mig</string>
<string name="revanced_sb_general">Allmänt</string>
<string name="revanced_sb_toast_on_connection_error_title">Visa ett meddelande om API inte är tillgängligt</string>
<string name="revanced_sb_toast_on_connection_error_summary_on">Visa ett meddelande om SponsorBlock inte är tillgängligt</string>
<string name="revanced_sb_toast_on_connection_error_summary_off">Visa inte ett meddelande inte om SponsorBlock inte är tillgängligt</string>
<string name="revanced_sb_general_skipcount">Aktivera spårning av hoppa över antalet</string>
<string name="revanced_sb_general_skipcount_sum_on">Låt SponsorBlock leaderboarden veta hur mycket tid som sparas. Ett meddelande skickas till leaderboarden varje gång ett segment hoppas över</string>
<string name="revanced_sb_general_skipcount_sum_off">Tracking av Skip count är inte aktiverat</string>
<string name="revanced_sb_toast_on_connection_error_summary_on">Meddelande visas om SponsorBlock inte är tillgängligt</string>
<string name="revanced_sb_toast_on_connection_error_summary_off">Meddelande visas inte om SponsorBlock inte är tillgängligt</string>
<string name="revanced_sb_general_skipcount">Aktivera spårning av antalet överhoppningar</string>
<string name="revanced_sb_general_skipcount_sum_on">Låter SponsorBlock-topplistan veta hur mycket tid som sparas. Ett meddelande skickas till topplistan varje gång ett segment hoppas över</string>
<string name="revanced_sb_general_skipcount_sum_off">Spårning av antalet överhoppningar är inte aktiverat</string>
<string name="revanced_sb_general_min_duration">Minsta segmentlängd</string>
<string name="revanced_sb_general_min_duration_sum">Segment kortare än detta värde (i sekunder) kommer inte att visas eller hoppas över</string>
<string name="revanced_sb_general_min_duration_invalid">Ogiltig tidslängd</string>
<string name="revanced_sb_general_uuid">Ditt privata användar-id</string>
<string name="revanced_sb_general_uuid_sum">Detta bör hållas privat. Detta är som ett lösenord och bör inte delas med någon. Om någon har det här, kan de utge sig för att vara dig</string>
<string name="revanced_sb_general_uuid_sum">Detta bör hållas privat. Detta är som ett lösenord och bör inte delas med någon. Om någon har detta kan de utge sig för att vara du</string>
<string name="revanced_sb_general_uuid_invalid">Privat användar-id måste vara minst 30 tecken långt</string>
<string name="revanced_sb_general_api_url">Ändra API URL</string>
<string name="revanced_sb_general_api_url">Ändra API-webbadress</string>
<string name="revanced_sb_general_api_url_sum">Adressen SponsorBlock använder för att ringa samtal till servern</string>
<string name="revanced_sb_api_url_reset">API URL återställning</string>
<string name="revanced_sb_api_url_invalid">API-URL är ogiltig</string>
<string name="revanced_sb_api_url_changed">API URL ändrad</string>
<string name="revanced_sb_api_url_reset">API-webbadress återställdes</string>
<string name="revanced_sb_api_url_invalid">API-webbadress är ogiltig</string>
<string name="revanced_sb_api_url_changed">API-webbadress ändrades</string>
<string name="revanced_sb_settings_ie">Importera/exportera inställningar</string>
<string name="revanced_sb_settings_copy">Kopiera</string>
<string name="revanced_sb_settings_ie_sum">Din SponsorBlock JSON-konfiguration som kan importeras/exporteras till ReVanced och andra SponsorBlock plattformar</string>
<string name="revanced_sb_settings_ie_sum_warning">Din SponsorBlock JSON-konfiguration som kan importeras/exporteras till ReVanced och andra SponsorBlock plattformar. Detta inkluderar ditt privata användar-id. Se till att dela detta klokt</string>
<string name="revanced_sb_settings_ie_sum_warning">Din JSON-konfiguration för SponsorBlock som kan importeras/exporteras till ReVanced och andra SponsorBlock-plattformar. Detta inkluderar ditt privata användar-id. Se till att dela detta klokt</string>
<string name="revanced_sb_settings_import_successful">Inställningar har importerats</string>
<string name="revanced_sb_settings_import_failed">Det gick inte att importera: %s</string>
<string name="revanced_sb_settings_export_failed">Det gick inte att exportera: %s</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning">"Dina inställningar innehåller ett privat användar-ID för SponsorBlock.
<string name="revanced_sb_settings_revanced_export_user_id_warning">"Dina inställningar innehåller ett privat användar-id för SponsorBlock.
Ditt användar-ID är som ett lösenord och det bör aldrig delas."</string>
Ditt användar-id är som ett lösenord och det bör aldrig delas."</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">Visa inte igen</string>
<string name="revanced_sb_diff_segments">Ändra segmentbeteende</string>
<string name="revanced_sb_segments_sponsor">Sponsor</string>
<string name="revanced_sb_segments_sponsor_sum">Betald marknadsföring, betalda hänvisningar och direktannonser. Inte för självmarknadsföring eller gratis rop till orsaker/skapare/hemsidor/produkter som de gillar</string>
<string name="revanced_sb_segments_selfpromo">Obetald/självbefodran</string>
<string name="revanced_sb_segments_selfpromo_sum">Liknande sponsor men för obetald eller egen marknadsföring. Inkluderar avsnitt om varor, donationer eller information om vem de samarbetade med</string>
<string name="revanced_sb_segments_interaction">Interaktionspåminnelse (Prenumerera)</string>
<string name="revanced_sb_segments_interaction_sum">En kort påminnelse om att gilla, prenumerera eller följa dem mitt i innehållet. Om den är lång eller om något specifikt, bör den istället vara under självfrämjande</string>
<string name="revanced_sb_segments_sponsor_sum">Betald marknadsföring, betalda hänvisningar och direktannonser. Inte för egenreklam eller gratis reklam för saker/kreatörer/webbplatser/produkter som de gillar</string>
<string name="revanced_sb_segments_selfpromo">Obetald reklam/egenreklam</string>
<string name="revanced_sb_segments_selfpromo_sum">Som Sponsor men för obetald reklam eller egenreklam. Inkluderar avsnitt om varor, donationer eller information om vem de samarbetade med</string>
<string name="revanced_sb_segments_interaction">Interaktionspåminnelse (prenumerera)</string>
<string name="revanced_sb_segments_interaction_sum">En kort påminnelse om att gilla, prenumerera eller följa dem mitt i innehållet. Om den är lång eller om något specifikt, bör den istället vara under egenreklam</string>
<string name="revanced_sb_segments_highlight">Höjdpunkt</string>
<string name="revanced_sb_segments_highlight_sum">Den del av videon som de flesta letar efter</string>
<string name="revanced_sb_segments_intro">Paus/introduktionsanimation</string>
<string name="revanced_sb_segments_intro">Uppehåll/introanimation</string>
<string name="revanced_sb_segments_intro_sum">Ett intervall utan faktiskt innehåll. Kan vara en paus, statisk ram eller upprepande animation. Inkluderar inte övergångar som innehåller information</string>
<string name="revanced_sb_segments_outro">Slutkort/krediter</string>
<string name="revanced_sb_segments_outro_sum">Krediter eller när YouTube slutkort visas. Inte för slutsatser med information</string>
<string name="revanced_sb_segments_preview">Förhandsgranska/återskapa/krok</string>
<string name="revanced_sb_segments_preview_sum">Samling av klipp som visar vad som kommer upp eller vad som hände i videon eller i andra videor i en serie, där all information upprepas någon annanstans</string>
<string name="revanced_sb_segments_filler">Ämnesavvikelse/Skämt</string>
<string name="revanced_sb_segments_filler_sum">Tangentiella scener läggs endast till för fyllmedel eller humor som inte krävs för att förstå det huvudsakliga innehållet i videon. Inkluderar inte segment som tillhandahåller kontext eller bakgrundsinformation</string>
<string name="revanced_sb_segments_nomusic">Musik: Icke-musiksektionen</string>
<string name="revanced_sb_segments_outro">Slutkort/eftertexter</string>
<string name="revanced_sb_segments_outro_sum">Eftertexter eller när YouTube-slutkort visas. Inte för slut med information</string>
<string name="revanced_sb_segments_preview">Förhandstitt/sammanfattning/hook</string>
<string name="revanced_sb_segments_preview_sum">Samling av klipp som visar vad som kommer eller vad som hände i videon eller i andra videor i en serie, där all information upprepas någon annanstans</string>
<string name="revanced_sb_segments_filler">Ämnesavvikelse/skämt</string>
<string name="revanced_sb_segments_filler_sum">Ämnesavvikande scener som endast läggs till som utfyllnad eller för humor som inte krävs för att förstå det huvudsakliga innehållet i videon. Inkluderar inte segment som tillhandahåller kontext eller bakgrundsinformation</string>
<string name="revanced_sb_segments_nomusic">Musik: Icke-musiksektion</string>
<string name="revanced_sb_segments_nomusic_sum">Endast för användning i musikvideor. Sektioner av musikvideor utan musik, som inte redan omfattas av en annan kategori</string>
<string name="revanced_sb_skip_button_compact">Hoppa</string>
<string name="revanced_sb_skip_button_compact_highlight">Höjdpunkt</string>
<string name="revanced_sb_skip_button_sponsor">Hoppa över sponsor</string>
<string name="revanced_sb_skip_button_selfpromo">Hoppa över kampanjerbjudande</string>
<string name="revanced_sb_skip_button_selfpromo">Hoppa över reklam</string>
<string name="revanced_sb_skip_button_interaction">Hoppa över interagera</string>
<string name="revanced_sb_skip_button_highlight">Hoppa till höjdpunkten</string>
<string name="revanced_sb_skip_button_intro_beginning">Hoppa över intro</string>
<string name="revanced_sb_skip_button_intro_middle">Hoppa över paus</string>
<string name="revanced_sb_skip_button_intro_end">Hoppa över paus</string>
<string name="revanced_sb_skip_button_intro_middle">Hoppa över uppehåll</string>
<string name="revanced_sb_skip_button_intro_end">Hoppa över uppehåll</string>
<string name="revanced_sb_skip_button_outro">Hoppa över outro</string>
<string name="revanced_sb_skip_button_preview_beginning">Hoppa över förhandsgranskning</string>
<string name="revanced_sb_skip_button_preview_middle">Hoppa över förhandsgranskning</string>
<string name="revanced_sb_skip_button_preview_beginning">Hoppa över förhandstitt</string>
<string name="revanced_sb_skip_button_preview_middle">Hoppa över förhandstitt</string>
<string name="revanced_sb_skip_button_preview_end">Hoppa över sammanfattning</string>
<string name="revanced_sb_skip_button_filler">Hoppa över fyllmedel</string>
<string name="revanced_sb_skip_button_nomusic">Hoppa över icke-musik</string>
<string name="revanced_sb_skip_button_unsubmitted">Hoppa över segment</string>
<string name="revanced_sb_skipped_sponsor">Hoppade över sponsor</string>
<string name="revanced_sb_skipped_selfpromo">Hoppade över självmarknadsföring</string>
<string name="revanced_sb_skipped_interaction">Överhoppad irriterande påminnelse</string>
<string name="revanced_sb_skipped_selfpromo">Hoppade över egenreklam</string>
<string name="revanced_sb_skipped_interaction">Hoppade över irriterande påminnelse</string>
<string name="revanced_sb_skipped_highlight">Hoppade till höjdpunkten</string>
<string name="revanced_sb_skipped_intro_beginning">Hoppade över intro</string>
<string name="revanced_sb_skipped_intro_middle">Överhoppad paus</string>
<string name="revanced_sb_skipped_intro_end">Överhoppad paus</string>
<string name="revanced_sb_skipped_intro_middle">Hoppade över uppehåll</string>
<string name="revanced_sb_skipped_intro_end">Hoppade över uppehåll</string>
<string name="revanced_sb_skipped_outro">Hoppade över outro</string>
<string name="revanced_sb_skipped_preview_beginning">Hoppade över förhandsgranskning</string>
<string name="revanced_sb_skipped_preview_middle">Hoppade över förhandsgranskning</string>
<string name="revanced_sb_skipped_preview_end">Överhoppad sammanfattning</string>
<string name="revanced_sb_skipped_preview_beginning">Hoppade över förhandstitt</string>
<string name="revanced_sb_skipped_preview_middle">Hoppade över förhandstitt</string>
<string name="revanced_sb_skipped_preview_end">Hoppade över sammanfattning</string>
<string name="revanced_sb_skipped_filler">Hoppade över ämnesavvikelse</string>
<string name="revanced_sb_skipped_nomusic">Hoppade över icke-musik segment</string>
<string name="revanced_sb_skipped_nomusic">Hoppade över en icke-musiksektion</string>
<string name="revanced_sb_skipped_unsubmitted">Hoppade över oinskickat segment</string>
<string name="revanced_sb_skipped_multiple_segments">Hoppade över flera segment</string>
<string name="revanced_sb_skip_automatically">Hoppa över automatiskt</string>
<string name="revanced_sb_skip_automatically_once">Hoppa över automatiskt en gång</string>
<string name="revanced_sb_skip_showbutton">Visa en Hoppa över-knapp</string>
<string name="revanced_sb_skip_seekbaronly">Visa i sökfältet</string>
<string name="revanced_sb_skip_seekbaronly">Visa i sökreglaget</string>
<string name="revanced_sb_skip_ignore">Inaktivera</string>
<string name="revanced_sb_submit_failed_invalid">Det går inte att skicka segment: %s</string>
<string name="revanced_sb_submit_failed_timeout">SponsorBlock är tillfälligt nere</string>
@@ -1131,7 +1151,7 @@ Redo att skicka in?"</string>
<string name="revanced_sb_about_api_summary">Data tillhandahålls av SponsorBlock API. Tryck här för att läsa mer och se nedladdningar för andra plattformar</string>
</patch>
<patch id="layout.formfactor.changeFormFactorPatch">
<string name="revanced_change_form_factor_title">Formulärformfaktor</string>
<string name="revanced_change_form_factor_title">Layout-formfaktor</string>
<string name="revanced_change_form_factor_entry_1">Standard</string>
<string name="revanced_change_form_factor_entry_2">Telefon</string>
<string name="revanced_change_form_factor_entry_3">Platta</string>
@@ -1165,25 +1185,25 @@ Om det senare stängs av rekommenderas det att rensa appens data för att förhi
<string name="revanced_change_start_page_entry_default">Standard</string>
<string name="revanced_change_start_page_entry_all_subscriptions">Alla prenumerationer</string>
<string name="revanced_change_start_page_entry_browse">Bläddra bland kanaler</string>
<string name="revanced_change_start_page_entry_courses">Kurser / Lärande</string>
<string name="revanced_change_start_page_entry_courses">Kurser/lärande</string>
<string name="revanced_change_start_page_entry_explore">Utforska</string>
<string name="revanced_change_start_page_entry_fashion">Mode &amp; Skönhet</string>
<string name="revanced_change_start_page_entry_gaming">Spel</string>
<string name="revanced_change_start_page_entry_fashion">Mode och skönhet</string>
<string name="revanced_change_start_page_entry_gaming">Gaming</string>
<string name="revanced_change_start_page_entry_history">Historik</string>
<string name="revanced_change_start_page_entry_library">Bibliotek</string>
<string name="revanced_change_start_page_entry_liked_videos">Gillade videor</string>
<string name="revanced_change_start_page_entry_live">Direkt</string>
<string name="revanced_change_start_page_entry_liked_videos">Videor du gillat</string>
<string name="revanced_change_start_page_entry_live">Live</string>
<string name="revanced_change_start_page_entry_movies">Filmer</string>
<string name="revanced_change_start_page_entry_music">Musik</string>
<string name="revanced_change_start_page_entry_news">Nyheter</string>
<string name="revanced_change_start_page_entry_notifications">Meddelanden</string>
<string name="revanced_change_start_page_entry_notifications">Aviseringar</string>
<string name="revanced_change_start_page_entry_playlists">Spellistor</string>
<string name="revanced_change_start_page_entry_search">Sök</string>
<string name="revanced_change_start_page_entry_shopping">Shopping</string>
<string name="revanced_change_start_page_entry_sports">Sport</string>
<string name="revanced_change_start_page_entry_subscriptions">Prenumerationer</string>
<string name="revanced_change_start_page_entry_trending">Trendande</string>
<string name="revanced_change_start_page_entry_virtual_reality">Virtual reality</string>
<string name="revanced_change_start_page_entry_trending">Populärt</string>
<string name="revanced_change_start_page_entry_virtual_reality">Virtuell verklighet</string>
<string name="revanced_change_start_page_entry_watch_later">Titta senare</string>
<string name="revanced_change_start_page_entry_your_clips">Dina klipp</string>
<string name="revanced_change_start_page_always_title">Ändra alltid startsida</string>
@@ -1225,7 +1245,7 @@ Begränsning: Att använda bakåtknappen i verktygsfältet kanske inte fungerar"
<string name="revanced_miniplayer_type_entry_7">Modern 4</string>
<string name="revanced_miniplayer_rounded_corners_title">Aktivera rundade hörn</string>
<string name="revanced_miniplayer_rounded_corners_summary_on">Hörnen är rundade</string>
<string name="revanced_miniplayer_rounded_corners_summary_off">Hörnen är kvadratiska</string>
<string name="revanced_miniplayer_rounded_corners_summary_off">Hörnen är fyrkantiga</string>
<string name="revanced_miniplayer_double_tap_action_title">Aktivera dubbeltryck och nypa för att ändra storlek</string>
<string name="revanced_miniplayer_double_tap_action_summary_on">"Dubbeltrycksåtgärd och nypning för att ändra storlek är aktiverat
@@ -1237,22 +1257,22 @@ Begränsning: Att använda bakåtknappen i verktygsfältet kanske inte fungerar"
Minispelaren kan dras till valfritt hörn av skärmen"</string>
<string name="revanced_miniplayer_drag_and_drop_summary_off">Dra och släpp är inaktiverat</string>
<string name="revanced_miniplayer_horizontal_drag_title">Aktivera horisontell drag gest</string>
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Gester för horisontell dragning är aktiverade
<string name="revanced_miniplayer_horizontal_drag_title">Aktivera horisontell draggest</string>
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Horisontell draggest är aktiverad
Minispelare kan dras av skärmen till vänster eller höger"</string>
<string name="revanced_miniplayer_horizontal_drag_summary_off">Horisontell drag gest inaktiverad</string>
Minispelaren kan dras utanför skärmen till vänster eller höger"</string>
<string name="revanced_miniplayer_horizontal_drag_summary_off">Horisontell draggest är inaktiverad</string>
<string name="revanced_miniplayer_hide_overlay_buttons_title">Dölj överlagringsknappar</string>
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">Överlagringsknappar är dolda</string>
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">Överlagringsknappar visas</string>
<string name="revanced_miniplayer_hide_subtext_title">Dölj undertexter</string>
<string name="revanced_miniplayer_hide_subtext_summary_on">Undertexter är dolda</string>
<string name="revanced_miniplayer_hide_subtext_summary_off">Undertexter visas</string>
<string name="revanced_miniplayer_hide_rewind_forward_title">Dölj hoppa över framåt- och bakknapparna</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">Hoppa framåt och tillbaka är dolda</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">Hoppa framåt och tillbaka visas</string>
<string name="revanced_miniplayer_hide_rewind_forward_title">Dölj knapparna för att hoppa framåt och bakåt</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">Hoppa framåt och bakåt är dolda</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">Hoppa framåt och bakåt visas</string>
<string name="revanced_miniplayer_width_dip_title">Ursprunglig storlek</string>
<string name="revanced_miniplayer_width_dip_summary">Inledande på skärmstorlek, i pixlar</string>
<string name="revanced_miniplayer_width_dip_summary">Ursprunglig storlek på skärmen, i pixlar</string>
<string name="revanced_miniplayer_width_dip_invalid_toast">Pixelstorlek måste vara mellan %1$s och %2$s</string>
<string name="revanced_miniplayer_opacity_title">Överlager opacitet</string>
<string name="revanced_miniplayer_opacity_summary">Opacitetsvärde mellan 0-100, där 0 är transparent</string>
@@ -1265,14 +1285,14 @@ Minispelare kan dras av skärmen till vänster eller höger"</string>
<string name="splash_screen_animation_style_title">Startskärmens stil</string>
<string name="splash_screen_animation_style_entry_1">Färg</string>
<string name="splash_screen_animation_style_entry_2">Svartvitt</string>
<string name="revanced_seekbar_custom_color_title">Aktivera anpassad sökfält färg</string>
<string name="revanced_seekbar_custom_color_summary_on">Anpassad sökfält färg visas</string>
<string name="revanced_seekbar_custom_color_summary_off">Original sökfält färg visas</string>
<string name="revanced_seekbar_custom_color_primary_title">Egendefinierad sökfälgsfärg</string>
<string name="revanced_seekbar_custom_color_primary_summary">Färgen på sökfältet</string>
<string name="revanced_seekbar_custom_color_accent_title">Egendefinierad accentfärg för sökfältet</string>
<string name="revanced_seekbar_custom_color_accent_summary">Accentfärgen på sökfältet</string>
<string name="revanced_seekbar_custom_color_invalid">Ogiltigt sökfältets färgvärde</string>
<string name="revanced_seekbar_custom_color_title">Aktivera anpassad färg på sökreglaget</string>
<string name="revanced_seekbar_custom_color_summary_on">Sökreglagets anpassade färg visas</string>
<string name="revanced_seekbar_custom_color_summary_off">Sökreglagets ursprungliga färg visas</string>
<string name="revanced_seekbar_custom_color_primary_title">Anpassad färg på sökreglaget</string>
<string name="revanced_seekbar_custom_color_primary_summary">Färgen på sökreglaget</string>
<string name="revanced_seekbar_custom_color_accent_title">Anpassad accentfärg sökreglaget</string>
<string name="revanced_seekbar_custom_color_accent_summary">Accentfärgen på sökreglaget</string>
<string name="revanced_seekbar_custom_color_invalid">Ogiltigt färgvärde för sökreglaget</string>
</patch>
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
<string name="revanced_bypass_image_region_restrictions_title">Begränsningar för förbipassering av bildregionen</string>
@@ -1294,14 +1314,14 @@ Att aktivera detta kan åtgärda saknade bilder som är blockerade i vissa regio
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow &amp; Original miniatyrer</string>
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow &amp; fångar fortfarande</string>
<string name="revanced_alt_thumbnail_options_entry_4">Fortfarande fångar</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow tillhandahåller crowdsourcade miniatyrbilder för YouTube-videor. Dessa miniatyrbilder är ofta mer relevanta än de som tillhandahålls av YouTube
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow tillhandahåller crowdsourcing-baserade miniatyrbilder för YouTube-videor. Dessa miniatyrbilder är ofta mer relevanta än de som tillhandahålls av YouTube
Om detta är aktiverat skickas video-URL:er till API-servern och inga andra data skickas. Om en video inte har DeArrow-miniatyrer visas originalet eller stillbilder
Om detta aktiveras skickas videoadresser till API-servern och inga andra data skickas. Om en video inte har DeArrow-miniatyrer visas originalet eller stillbilder
Klicka här för att lära dig mer om DeArrow"</string>
Tryck här för att läsa mer om DeArrow"</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">Visa ett meddelande om API inte är tillgängligt</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">Visa ett meddelande om DeArrow inte är tillgängligt</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Visa inte ett meddelande om DeArrow inte är tillgängligt</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">Meddelande visas om DeArrow inte är tillgängligt</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Meddelande visas inte om DeArrow inte är tillgängligt</string>
<string name="revanced_alt_thumbnail_dearrow_api_url_title">DeArrow API-slutpunkt</string>
<string name="revanced_alt_thumbnail_dearrow_api_url_summary">URL till DeArrow miniatyrbilds slutpunkt</string>
<string name="revanced_alt_thumbnail_stills_about_title">Fortfarande videoinspelningar</string>
@@ -1355,9 +1375,9 @@ Att aktivera detta kan låsa upp högre videokvalitet"</string>
<string name="revanced_disable_haptic_feedback_chapters_title">Inaktivera haptik för kapitel</string>
<string name="revanced_disable_haptic_feedback_chapters_summary_on">Haptik för kapitel är inaktiverad</string>
<string name="revanced_disable_haptic_feedback_chapters_summary_off">Haptik för kapitel är aktiverad</string>
<string name="revanced_disable_haptic_feedback_precise_seeking_title">Inaktivera exakt sökhaptik</string>
<string name="revanced_disable_haptic_feedback_precise_seeking_summary_on">Precisionssökning med haptik är inaktiverad</string>
<string name="revanced_disable_haptic_feedback_precise_seeking_summary_off">Exakt sökhaptik är aktiverad</string>
<string name="revanced_disable_haptic_feedback_precise_seeking_title">Inaktivera haptik för exakt sökning</string>
<string name="revanced_disable_haptic_feedback_precise_seeking_summary_on">Haptik för exakt sökning är inaktiverad</string>
<string name="revanced_disable_haptic_feedback_precise_seeking_summary_off">Haptik för exakt sökning är aktiverad</string>
<string name="revanced_disable_haptic_feedback_seek_undo_title">Inaktivera ångra-sökning haptik</string>
<string name="revanced_disable_haptic_feedback_seek_undo_summary_on">Ångra-sökning haptik är inaktiverad</string>
<string name="revanced_disable_haptic_feedback_seek_undo_summary_off">Ångra-sökning haptik är aktiverad</string>
@@ -1434,7 +1454,7 @@ Att aktivera detta kan låsa upp högre videokvalitet"</string>
<string name="revanced_remember_playback_speed_last_selected_summary_off">Ändring av uppspelningshastighet gäller endast för den aktuella videon</string>
<string name="revanced_remember_playback_speed_last_selected_toast_title">Visa meddelande vid ändringar av uppspelningshastighet</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_on">Ett meddelande visas när standarduppspelningshastigheten ändras</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_off">En toast visas inte när standarduppspelningshastigheten ändras</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_off">Ett meddelande visas inte när standarduppspelningshastigheten ändras</string>
<string name="revanced_playback_speed_default_title">Standarduppspelningshastighet</string>
<string name="revanced_remember_playback_speed_toast">Ändrade standardhastigheten till: %s</string>
</patch>

View File

@@ -285,10 +285,13 @@ Second \"item\" text"</string>
<string name="revanced_hide_description_components_screen_title">คำอธิบายวิดีโอ</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_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_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_history_title">ซ่อนในประวัติ</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">ซ่อนอยู่ในประวัติ</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">แสดงในประวัติ</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_off">แสดงในผลการค้นหา</string>
@@ -771,6 +774,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_upcoming_button_title">ซ่อนปุ่มที่กำลังจะมาถึง</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">ปุ่ม «Upcoming» ซ่อนอยู่</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">ปุ่ม «Upcoming» แสดงอยู่</string>
<string name="revanced_hide_shorts_effect_button_title">ซ่อนปุ่มเอฟเฟกต์</string>
<string name="revanced_hide_shorts_effect_button_summary_on">ปุ่มเอฟเฟกต์ถูกซ่อน</string>
<string name="revanced_hide_shorts_effect_button_summary_off">ปุ่มเอฟเฟกต์แสดงอยู่</string>
<string name="revanced_hide_shorts_green_screen_button_title">ซ่อนปุ่มกรีนสกรีน</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">ปุ่ม Green Screen ถูกซ่อน</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">ปุ่ม Green Screen แสดงขึ้น</string>
@@ -953,11 +959,25 @@ Second \"item\" text"</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button">ซ่อนปุ่มข้ามโดยอัตโนมัติ</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">ปุ่มข้ามซ่อนหลังจากผ่านไปไม่กี่วินาที</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">ปุ่มข้ามจะแสดงสำหรับทั้งส่วน</string>
<string name="revanced_sb_general_skiptoast">แสดง toast เมื่อข้าม</string>
<string name="revanced_sb_general_skiptoast_sum_on">ขนมปังปิ้งจะปรากฏขึ้นเมื่อข้ามส่วนโดยอัตโนมัติ แตะที่นี่เพื่อดูตัวอย่า</string>
<string name="revanced_sb_general_skiptoast_sum_off">«Toast» ไม่แสดง แตะที่นี่เพื่อดูตัวอย่าง</string>
<string name="revanced_sb_auto_hide_skip_button_duration">ระยะเวลาปุ่มข้าม</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">ระยะเวลาที่ปุ่มซ่อนอัตโนมัติสำหรับข้ามและข้ามไปยังไฮไลต์จะแสด</string>
<string name="revanced_sb_general_skiptoast">แสดงการแจ้งเตือนยกเลิกการข้าม</string>
<string name="revanced_sb_general_skiptoast_sum_on">จะมีการแจ้งเตือนแสดงขึ้นเมื่อมีการข้ามส่วนโดยอัตโนมัติ แตะการแจ้งเตือนแบบชั่วคราวเพื่อยกเลิกการข้าม</string>
<string name="revanced_sb_general_skiptoast_sum_off">ไม่แสดงข้อความแจ้งเตือน</string>
<string name="revanced_sb_toast_on_skip_duration">ระยะเวลาข้อความแจ้งเตือนการข้าม</string>
<string name="revanced_sb_toast_on_skip_duration_sum">ระยะเวลาที่แสดงการแจ้งเตือนข้ามแบบชั่วคราว</string>
<string name="revanced_sb_duration_1s">1 วินาที</string>
<string name="revanced_sb_duration_2s">2 วินาที</string>
<string name="revanced_sb_duration_3s">3 วินาที</string>
<string name="revanced_sb_duration_4s">4 วินาที</string>
<string name="revanced_sb_duration_5s">5 วินาที</string>
<string name="revanced_sb_duration_6s">6 วินาที</string>
<string name="revanced_sb_duration_7s">7 วินาที</string>
<string name="revanced_sb_duration_8s">8 วินาที</string>
<string name="revanced_sb_duration_9s">9 วินาที</string>
<string name="revanced_sb_duration_10s">10 วินาที</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_create_segment_category">การสร้างกลุ่มใหม่</string>
<string name="revanced_sb_enable_create_segment">แสดงปุ่มสร้างส่วนใหม่</string>

View File

@@ -21,7 +21,7 @@ Second \"item\" text"</string>
<resources>
<app id="shared">
<patch id="misc.checks.checkEnvironmentPatch">
<string name="revanced_check_environment_failed_title">Kontroller başarısız</string>
<string name="revanced_check_environment_failed_title">Denetimler başarısız</string>
<string name="revanced_check_environment_dialog_open_official_source_button">Resmî web sitesini aç</string>
<string name="revanced_check_environment_dialog_ignore_button">Yok say</string>
<string name="revanced_check_environment_failed_message">&lt;h5&gt;Bu uygulama sizin tarafınızdan yamalanmış gibi görünmüyor.&lt;/h5&gt;&lt;br&gt;Bu uygulama düzgün çalışmayabilir, &lt;b&gt;kullanması zararlı veya tehlikeli bile olabilir&lt;/b&gt;.&lt;br&gt;&lt;br&gt;Şu kontroller, bu uygulamanın hali hazırda yamalanmış olduğunu veya başka birinden edinildiğini gösteriyor:&lt;br&gt;&lt;br&gt;&lt;small&gt;%1$s&lt;/small&gt;&lt;br&gt;Doğrulanmış ve güvenli bir uygulama kullandığınızdan emin olmak için, &lt;b&gt;bu uygulamayı kaldırmanız ve kendiniz yamalamanız&lt;/b&gt; şiddetle tavsiye edilir.&lt;p&gt;&lt;br&gt;Bu uyarı yok sayıldığında sadece iki kez gösterilecektir.</string>
@@ -285,10 +285,13 @@ Beklenmedik olaylar hakkında bilgilendirilmeyeceksiniz."</string>
<string name="revanced_hide_description_components_screen_title">Video açıklaması</string>
<string name="revanced_hide_description_components_screen_summary">Video açıklamasındaki öğeleri gizle veya göster</string>
<string name="revanced_hide_filter_bar_screen_title">Filtreleme çubuğu</string>
<string name="revanced_hide_filter_bar_screen_summary">Akışta, arama sonuçlarında ve ilgili videolardaki filtreleme çubuğunu gizle veya göster</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Akıştakini gizle</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Akıştaki gizli</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Akıştaki görünür</string>
<string name="revanced_hide_filter_bar_screen_summary">Akışlarda, geçmişte, arama sonuçlarında ve ilgili videolarda filtre çubuğunu gizle veya göster.</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Beslemelerde gizle</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Beslemelerde gizlendi</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Beslemelerde gösterildi</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Geçmişte gizle</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Geçmişte gizlendi</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Geçmişte gösterildi</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Arama sonuçlarında gizle</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Arama sonuçlarında gizli</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Arama sonuçlarında görünür</string>
@@ -773,6 +776,9 @@ Ses parçası menüsünü göstermek için \"Video akışlarını taklit et\" ay
<string name="revanced_hide_shorts_upcoming_button_title">Gelecek düğmesini gizle</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Gelecek düğmesi gizli</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Gelecek düğmesi görünür</string>
<string name="revanced_hide_shorts_effect_button_title">Efekt düğmesini gizle</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Efekt düğmesi gizli</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Efekt düğmesi gösteriliyor</string>
<string name="revanced_hide_shorts_green_screen_button_title">Yeşil ekran düğmesini gizle</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Yeşil ekran düğmesi gizli</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Yeşil ekran düğmesi görünür</string>
@@ -956,11 +962,25 @@ Bu özellik, 720p veya daha düşük video kalitesi ve çok hızlı bir internet
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Atlama düğmesini otomatik olarak gizle</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Atlama düğmesi birkaç saniye sonra gizlenir</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Atlama düğmesi bütün kısım boyunca gösterilir</string>
<string name="revanced_sb_general_skiptoast">Otomatik olarak atlarken bir uyarı göster</string>
<string name="revanced_sb_general_skiptoast_sum_on">Kısım otomatik olarak atlandığında tost bildirimi gösterilir. Örnek görmek için buraya dokunun</string>
<string name="revanced_sb_general_skiptoast_sum_off">Tost bildirimi gösterilmez. Örnek görmek için buraya dokunun</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Atla düğmesi süresi</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Otomatik gizlenen atla ve vurgulaya atla düğmelerinin ne kadar süreyle gösterildiği</string>
<string name="revanced_sb_general_skiptoast">Atlamayı geri al bildirimini göster</string>
<string name="revanced_sb_general_skiptoast_sum_on">Bildirim, bir segment otomatik olarak atlandığında gösterilir. Atlamayı geri almak için bildirimine dokunun.</string>
<string name="revanced_sb_general_skiptoast_sum_off">Toast gösterilmiyor</string>
<string name="revanced_sb_toast_on_skip_duration">Atlama toast süresi</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Atlama bildiriminin ne kadar süreyle gösterildiği</string>
<string name="revanced_sb_duration_1s">1 saniye</string>
<string name="revanced_sb_duration_2s">2 saniye</string>
<string name="revanced_sb_duration_3s">3 saniye</string>
<string name="revanced_sb_duration_4s">4 saniye</string>
<string name="revanced_sb_duration_5s">5 saniye</string>
<string name="revanced_sb_duration_6s">6 saniye</string>
<string name="revanced_sb_duration_7s">7 saniye</string>
<string name="revanced_sb_duration_8s">8 saniye</string>
<string name="revanced_sb_duration_9s">9 saniye</string>
<string name="revanced_sb_duration_10s">10 saniye</string>
<string name="revanced_sb_general_time_without">Kısımlar çıkarıldığında kalan video süresini göster</string>
<string name="revanced_sb_general_time_without_sum_on">Video uzunluğu eksi bütün kısımlar, tam video uzunluğunun yanında parantez içinde gösterilir</string>
<string name="revanced_sb_general_time_without_sum_on">Tüm segmentler çıkarıldıktan sonra video uzunluğu arama çubuğunda gösterilir</string>
<string name="revanced_sb_general_time_without_sum_off">Tam video uzunluğu gösterilir</string>
<string name="revanced_sb_create_segment_category">Yeni kısım oluşturma</string>
<string name="revanced_sb_enable_create_segment">Yeni kısım oluşturma düğmesini göster</string>

View File

@@ -286,10 +286,13 @@ Second \"item\" text"</string>
<string name="revanced_hide_description_components_screen_title">Опис відео</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_summary">Приховати або показувати панель фільтрів у стрічці, результатах пошуку та пов\'язаних відео</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_off">Панель фільтрів у стрічці показується</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_summary_on">Панель фільтрів у стрічках приховано</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Панель фільтрів у стрічках показується</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Приховати панель в історії</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Панель фільтрів у історії приховано</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Панель фільтрів у історії показується</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_off">Панель фільтрів у результатах пошуку показується</string>
@@ -774,6 +777,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_upcoming_button_title">Приховати \"Запланована прем\'єра\"</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Кнопки \"Запланована прем\'єра\" та \"Незабаром прямий ефір\" приховано</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Кнопки \"Запланована прем\'єра\" та \"Незабаром прямий ефір\" показуються</string>
<string name="revanced_hide_shorts_effect_button_title">Приховати \"Ефект\"</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Кнопку \"Ефект\" приховано</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Кнопка \"Ефект\" показується</string>
<string name="revanced_hide_shorts_green_screen_button_title">Приховати \"Зелений екран\"</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Кнопку \"Зелений екран\" приховано</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Кнопка \"Зелений екран\" показується</string>
@@ -955,12 +961,26 @@ Second \"item\" text"</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Приховувати кнопку пропуску</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Кнопка пропуску автоматично приховується після декількох секунд</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Кнопка пропуску показується для всього сегменту</string>
<string name="revanced_sb_general_skiptoast">Показувати тост при пропуску</string>
<string name="revanced_sb_general_skiptoast_sum_on">Тост показується, коли сегмент автоматично пропускається. Натисніть тут, щоб побачити приклад</string>
<string name="revanced_sb_general_skiptoast_sum_off">Тост не показується. Натисніть тут, щоб побачити приклад</string>
<string name="revanced_sb_general_time_without">Тривалість відео без сегментів</string>
<string name="revanced_sb_general_time_without_sum_on">Показується тривалість відео мінус всі сегменти, вказано в дужках поруч з повною тривалістю відео</string>
<string name="revanced_sb_general_time_without_sum_off">Показується тривалість повного відео</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Тривалість кнопки пропуску</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Як довго показуються кнопки автоматичного пропуску та переходу до основного моменту</string>
<string name="revanced_sb_general_skiptoast">Показувати тост скасування пропуску</string>
<string name="revanced_sb_general_skiptoast_sum_on">Тост показується, коли сегмент автоматично пропускається. Натисніть на нього, щоб скасувати пропуск</string>
<string name="revanced_sb_general_skiptoast_sum_off">Тост не показується</string>
<string name="revanced_sb_toast_on_skip_duration">Тривалість тосту пропуску</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Як довго показується тост про пропуск</string>
<string name="revanced_sb_duration_1s">1 секунда</string>
<string name="revanced_sb_duration_2s">2 секунди</string>
<string name="revanced_sb_duration_3s">3 секунди</string>
<string name="revanced_sb_duration_4s">4 секунди</string>
<string name="revanced_sb_duration_5s">5 секунд</string>
<string name="revanced_sb_duration_6s">6 секунд</string>
<string name="revanced_sb_duration_7s">7 секунд</string>
<string name="revanced_sb_duration_8s">8 секунд</string>
<string name="revanced_sb_duration_9s">9 секунд</string>
<string name="revanced_sb_duration_10s">10 секунд</string>
<string name="revanced_sb_general_time_without">Показувати тривалість відео без сегментів</string>
<string name="revanced_sb_general_time_without_sum_on">Показується тривалість відео без урахування всіх сегментів, які показуються на панелі прогресу</string>
<string name="revanced_sb_general_time_without_sum_off">Показується повна тривалість відео</string>
<string name="revanced_sb_create_segment_category">Створення нових сегментів</string>
<string name="revanced_sb_enable_create_segment">Показувати кнопку створення нового сегмента</string>
<string name="revanced_sb_enable_create_segment_sum_on">Кнопка створення нового сегменту показується в відеоплеєрі</string>

View File

@@ -100,7 +100,7 @@ Nhấn nút tiếp tục và cho phép thay đổi lựa chọn tối ưu hóa."
<string name="revanced_restore_old_settings_menus_title">Khôi phục trình đơn cài đặt cũ</string>
<string name="revanced_restore_old_settings_menus_summary_on">Các trình đơn cài đặt cũ được hiển thị</string>
<string name="revanced_restore_old_settings_menus_summary_off">Các trình đơn cài đặt cũ không được hiển thị</string>
<string name="revanced_settings_search_history_title">Hiển thị lịch sử tìm kiếm trong cài đặt</string>
<string name="revanced_settings_search_history_title">Hiện lịch sử tìm kiếm trong cài đặt</string>
<string name="revanced_settings_search_history_summary_on">Đã hiển thị lịch sử tìm kiếm trong cài đặt</string>
<string name="revanced_settings_search_history_summary_off">Không hiển thị lịch sử tìm kiếm trong phần cài đặt</string>
</patch>
@@ -143,7 +143,7 @@ Bạn sẽ không được thông báo về bất kỳ sự kiện bất ngờ n
<string name="revanced_debug_logs_clear_toast">Đã xóa nhật ký</string>
</patch>
<patch id="layout.hide.general.hideLayoutComponentsPatch">
<string name="revanced_hide_album_cards_title">Ẩn các thẻ album</string>
<string name="revanced_hide_album_cards_title">Ẩn thẻ album</string>
<string name="revanced_hide_album_cards_summary_on">Các thẻ album đã bị ẩn</string>
<string name="revanced_hide_album_cards_summary_off">Các thẻ album được hiển thị</string>
<string name="revanced_hide_crowdfunding_box_title">Ẩn hộp chiến dịch gây quỹ</string>
@@ -155,7 +155,7 @@ Bạn sẽ không được thông báo về bất kỳ sự kiện bất ngờ n
<string name="revanced_hide_channel_watermark_title">Ẩn hình mờ của kênh</string>
<string name="revanced_hide_channel_watermark_summary_on">Hình mờ đã bị ẩn</string>
<string name="revanced_hide_channel_watermark_summary_off">Hình mờ được hiển thị</string>
<string name="revanced_hide_horizontal_shelves_title">Ẩn các kệ ngang</string>
<string name="revanced_hide_horizontal_shelves_title">Ẩn kệ ngang</string>
<string name="revanced_hide_horizontal_shelves_summary_on">"Kệ đã bị ẩn, chẳng hạn như:
• Tin tức nóng
• Tiếp tục xem
@@ -237,10 +237,10 @@ Bạn sẽ không được thông báo về bất kỳ sự kiện bất ngờ n
<string name="revanced_hide_playables_title">Ẩn Chơi game trên Youtube</string>
<string name="revanced_hide_playables_summary_on">Chơi game đã bị ẩn</string>
<string name="revanced_hide_playables_summary_off">Chơi game được hiển thị</string>
<string name="revanced_hide_quick_actions_title">Ẩn các hành động nhanh khi ở toàn màn hình</string>
<string name="revanced_hide_quick_actions_summary_on">Hành động nhanh đã bị ẩn</string>
<string name="revanced_hide_quick_actions_summary_off">Hành động nhanh được hiển thị</string>
<string name="revanced_hide_related_videos_title">Ẩn các video liên quan trong hành động nhanh</string>
<string name="revanced_hide_quick_actions_title">Ẩn tác vụ nhanh trong chế độ toàn màn hình</string>
<string name="revanced_hide_quick_actions_summary_on">Các tác vụ nhanh đã bị ẩn</string>
<string name="revanced_hide_quick_actions_summary_off">Các tác vụ nhanh được hiển thị</string>
<string name="revanced_hide_related_videos_title">Ẩn các video liên quan trong tác vụ nhanh</string>
<string name="revanced_hide_related_videos_summary_on">Các video liên quan đã bị ẩn</string>
<string name="revanced_hide_related_videos_summary_off">Các video liên quan được hiển thị</string>
<string name="revanced_hide_image_shelf_title">Ẩn kệ hình ảnh từ kết quả tìm kiếm</string>
@@ -285,16 +285,19 @@ Bạn sẽ không được thông báo về bất kỳ sự kiện bất ngờ n
<string name="revanced_hide_description_components_screen_title">Mô tả video</string>
<string name="revanced_hide_description_components_screen_summary">Ẩn hoặc hiện các thành phần mô tả video</string>
<string name="revanced_hide_filter_bar_screen_title">Thanh bộ lọc</string>
<string name="revanced_hide_filter_bar_screen_summary">Ẩn hoặc hiện thanh bộ lọc trong bảng tin, kết quả tìm kiếm và video liên quan</string>
<string name="revanced_hide_filter_bar_screen_summary">Ẩn hoặc hiện thanh bộ lọc trong bảng tin, lịch sử xem, kết quả tìm kiếm và video liên quan</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Ẩn trong bảng tin</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Đã ẩn trong bảng tin</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Đã hiện trong bảng tin</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Đã hiển thị trong bảng tin</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">Ẩn trong lịch sử xem</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Đã ẩn trong lịch sử xem</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Đã hiển thị trong lịch sử xem</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Ẩn trong kết quả tìm kiếm</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Đã ẩn trong kết quả tìm kiếm</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Đã hiện trong kết quả tìm kiếm</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Đã hiển thị trong kết quả tìm kiếm</string>
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">Ẩn trong video liên quan</string>
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">Đã ẩn trong video liên quan</string>
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Đã hiện trong video liên quan</string>
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Đã hiển thị trong video liên quan</string>
<string name="revanced_comments_screen_title">Bình luận</string>
<string name="revanced_comments_screen_summary">Ẩn hoặc hiện các thành phần bình luận</string>
<string name="revanced_hide_comments_ai_chat_summary_title">Ẩn Tóm tắt cuộc trò chuyện AI</string>
@@ -380,43 +383,43 @@ Hạn chế
<string name="revanced_hide_fullscreen_ads_title">Ẩn quảng cáo toàn màn hình</string>
<string name="revanced_hide_fullscreen_ads_summary_on">"Quảng cáo toàn màn hình đã bị ẩn
Tính năng này chỉ khả dụng cho các thiết bị cũ hơn"</string>
Tính năng này chỉ khả dụng trên các thiết bị cũ"</string>
<string name="revanced_hide_fullscreen_ads_summary_off">Quảng cáo toàn màn hình được hiển thị</string>
<string name="revanced_hide_paid_promotion_label_title">Ẩn nhãn quảng cáo được tài trợ</string>
<string name="revanced_hide_paid_promotion_label_summary_on">Nhãn quảng cáo được tài trợ đã bị ẩn</string>
<string name="revanced_hide_paid_promotion_label_summary_off">Nhãn quảng cáo được tài trợ được hiển thị</string>
<string name="revanced_hide_paid_promotion_label_title">Ẩn nhãn quảng cáo trả phí</string>
<string name="revanced_hide_paid_promotion_label_summary_on">Nhãn quảng cáo trả phí đã bị ẩn</string>
<string name="revanced_hide_paid_promotion_label_summary_off">Nhãn quảng cáo trả phí được hiển thị</string>
<string name="revanced_hide_self_sponsor_ads_title">Ẩn thẻ tự tài trợ</string>
<string name="revanced_hide_self_sponsor_ads_summary_on">Thẻ được tài trợ đã bị ẩn</string>
<string name="revanced_hide_self_sponsor_ads_summary_off">Thẻ được tài trợ được hiển thị</string>
<string name="revanced_hide_self_sponsor_ads_summary_on">Các thẻ tự tài trợ đã bị ẩn</string>
<string name="revanced_hide_self_sponsor_ads_summary_off">Các thẻ tự tài trợ được hiển thị</string>
<string name="revanced_hide_products_banner_title">Ẩn biểu ngữ \'Xem sản phẩm\'</string>
<string name="revanced_hide_products_banner_summary_on">Biểu ngữ đã bị ẩn</string>
<string name="revanced_hide_products_banner_summary_off">Biểu ngữ được hiển thị</string>
<string name="revanced_hide_end_screen_store_banner_title">Ẩn biểu ngữ cửa hàng ở cuối màn hình</string>
<string name="revanced_hide_end_screen_store_banner_summary_on">Biểu ngữ cửa hàng đã bị ẩn</string>
<string name="revanced_hide_end_screen_store_banner_summary_off">Biểu ngữ cửa hàng được hiển thị</string>
<string name="revanced_hide_player_store_shelf_title">Ẩn kệ cửa hàng</string>
<string name="revanced_hide_player_store_shelf_title">Ẩn kệ cửa hàng của trình phát</string>
<string name="revanced_hide_player_store_shelf_summary_on">Kệ cửa hàng đã bị ẩn</string>
<string name="revanced_hide_player_store_shelf_summary_off">Kệ cửa hàng được hiển thị</string>
<string name="revanced_hide_shopping_links_title">Ẩn các liên kết mua sắm</string>
<string name="revanced_hide_shopping_links_summary_on">Các liên kết mua sắm trong phần mô tả video đã bị ẩn</string>
<string name="revanced_hide_shopping_links_summary_off">Các liên kết mua sắm trong phần mô tả video được hiển thị</string>
<string name="revanced_hide_shopping_links_summary_on">Liên kết mua sắm trong mô tả video đã bị ẩn</string>
<string name="revanced_hide_shopping_links_summary_off">Liên kết mua sắm trong mô tả video được hiển thị</string>
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_store_button_title">Ẩn nút \'Chuyển đến cửa hàng\'</string>
<string name="revanced_hide_visit_store_button_summary_on">Nút trên trang kênh đã bị ẩn</string>
<string name="revanced_hide_visit_store_button_summary_off">Nút trên trang kênh được hiển thị</string>
<string name="revanced_hide_web_search_results_title">Ẩn kết quả tìm kiếm t web</string>
<string name="revanced_hide_web_search_results_summary_on">Kết quả tìm kiếm t web đã bị ẩn</string>
<string name="revanced_hide_web_search_results_summary_off">Kết quả tìm kiếm t web được hiển thị</string>
<string name="revanced_hide_merchandise_banners_title">Ẩn biểu ngữ hàng hoá</string>
<string name="revanced_hide_merchandise_banners_summary_on">Biểu ngữ hàng hóa đã bị ẩn</string>
<string name="revanced_hide_merchandise_banners_summary_off">Biểu ngữ hàng hóa được hiển thị</string>
<string name="revanced_hide_web_search_results_title">Ẩn kết quả tìm kiếm trên web</string>
<string name="revanced_hide_web_search_results_summary_on">Kết quả tìm kiếm trên web đã bị ẩn</string>
<string name="revanced_hide_web_search_results_summary_off">Kết quả tìm kiếm trên web được hiển thị</string>
<string name="revanced_hide_merchandise_banners_title">Ẩn biểu ngữ sản phẩm</string>
<string name="revanced_hide_merchandise_banners_summary_on">Biểu ngữ sản phẩm đã bị ẩn</string>
<string name="revanced_hide_merchandise_banners_summary_off">Biểu ngữ sản phẩm được hiển thị</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_fullscreen_ads_feature_not_available_toast">Ẩn QC toàn màn hình chỉ hoạt động với các thiết bị cũ</string>
<string name="revanced_hide_fullscreen_ads_feature_not_available_toast">Ẩn QC toàn màn hình chỉ hoạt động trên thiết bị cũ</string>
</patch>
<patch id="ad.getpremium.hideGetPremiumPatch">
<string name="revanced_hide_get_premium_title">Ẩn quảng cáo YouTube Premium</string>
<string name="revanced_hide_get_premium_summary_on">Quảng cáo Youtube Premium bên dưới video đã bị ẩn</string>
<string name="revanced_hide_get_premium_summary_off">Quảng cáo Youtube Premium bên dưới video được hiển thị</string>
<string name="revanced_hide_get_premium_summary_on">Quảng cáo khuyến mãi Youtube Premium bên dưới trình phát video đã bị ẩn</string>
<string name="revanced_hide_get_premium_summary_off">Quảng cáo khuyến mãi Youtube Premium bên dưới trình phát video được hiển thị</string>
</patch>
<patch id="ad.video.videoAdsPatch">
<string name="revanced_hide_video_ads_title">Ẩn quảng cáo trên video</string>
@@ -424,34 +427,34 @@ Tính năng này chỉ khả dụng cho các thiết bị cũ hơn"</string>
<string name="revanced_hide_video_ads_summary_off">Quảng cáo trên video được hiển thị</string>
</patch>
<patch id="interaction.copyvideourl.copyVideoUrlResourcePatch">
<string name="revanced_share_copy_url_success">Đã chép URL vào bảng nhớ tạm</string>
<string name="revanced_share_copy_url_timestamp_success">Đã chép URL với dấu thời gian</string>
<string name="revanced_share_copy_url_success">Đã sao chép URL vào bảng nhớ tạm</string>
<string name="revanced_share_copy_url_timestamp_success">Đã sao chép URL kèm dấu thời gian</string>
<string name="revanced_copy_video_url_title">Hiện nút sao chép URL video</string>
<string name="revanced_copy_video_url_summary_on">Nút được hiển thị. Chạm để sao chép URL video. Chạm và giữ để sao chép với dấu thời gian</string>
<string name="revanced_copy_video_url_summary_on">Nút được hiển thị. Nhấn để sao chép URL video. Nhấn và giữ để sao chép kèm dấu thời gian</string>
<string name="revanced_copy_video_url_summary_off">Nút không được hiển thị</string>
<string name="revanced_copy_video_url_timestamp_title">Hiện nút sao chép URL với dấu thời gian</string>
<string name="revanced_copy_video_url_timestamp_summary_on">Nút được hiển thị. Chạm để sao chép video URL với dấu thời gian. Chạm và giữ để sao chép video không kèm theo dấu thời gian</string>
<string name="revanced_copy_video_url_timestamp_title">Hiện nút sao chép URL kèm dấu thời gian</string>
<string name="revanced_copy_video_url_timestamp_summary_on">Nút được hiển thị. Nhấn để sao chép URL video kèm dấu thời gian. Nhấn giữ để sao chép không kèm dấu thời gian</string>
<string name="revanced_copy_video_url_timestamp_summary_off">Nút không được hiển thị</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
<string name="revanced_remove_viewer_discretion_dialog_title">Loại bỏ hộp thoại cảnh báo trước khi xem</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_on">Hộp thoại sẽ bị loại bỏ</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Hộp thoại sẽ được hiển thị</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Điều này sẽ không qua mặt hạn chế độ tuổi. Nó chỉ tự động chấp nhận.</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Tuỳ chọn này chỉ tự động chấp nhận mà không bỏ qua giới hạn độ tuổi.</string>
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
<string name="revanced_external_downloader_screen_title">Tải xuống bên ngoài</string>
<string name="revanced_external_downloader_screen_summary">Các thiết lập trình tải xuống bên ngoài</string>
<string name="revanced_external_downloader_screen_summary">Thiết lập để sử dụng trình tải xuống bên ngoài</string>
<string name="revanced_external_downloader_title">Hiện nút tải xuống bên ngoài</string>
<string name="revanced_external_downloader_summary_on">Nút tải xuống trong trình phát đã được hiển thị</string>
<string name="revanced_external_downloader_summary_off">Nút tải xuống trong trình phát không được hiển thị</string>
<!-- 'download action button' should be translated using the same wording as the translation of 'revanced_hide_download_button_title' -->
<string name="revanced_external_downloader_action_button_title">Thay thế nút hành động Tải xuống</string>
<string name="revanced_external_downloader_action_button_summary_on">Nút tải xuống mở trình tải xuống bên ngoài</string>
<string name="revanced_external_downloader_action_button_summary_off">Nút tải xuống mở trình tải xuống nội bộ ứng dụng</string>
<string name="revanced_external_downloader_action_button_title">Ghi đè nút Tải xuống</string>
<string name="revanced_external_downloader_action_button_summary_on">Nút tải xuống mở trình tải xuống bên ngoài của bạn</string>
<string name="revanced_external_downloader_action_button_summary_off">Nút tải xuống mở trình tải xuống trong ứng dụng gốc</string>
<string name="revanced_external_downloader_name_title">Tên gói trình tải xuống</string>
<string name="revanced_external_downloader_name_summary">Tên gói của ứng dụng tải xuống bên ngoài đã cài đặt của bạn, chẳng hạn như NewPipe hoặc Seal</string>
<string name="revanced_external_downloader_not_installed_warning">%s chưa được cài đặt. Hãy cài đặt .</string>
<string name="revanced_external_downloader_name_summary">Tên gói ứng dụng trình tải xuống bên ngoài đã cài đặt của bạn, chẳng hạn như NewPipe hoặc Seal</string>
<string name="revanced_external_downloader_not_installed_warning">%s chưa được cài đặt. Vui lòng cài đặt ứng dụng.</string>
</patch>
<patch id="interaction.seekbar.disablePreciseSeekingGesturePatch">
<string name="revanced_disable_precise_seeking_gesture_title">Tắt cử chỉ tua chính xác</string>
@@ -465,12 +468,12 @@ Tính năng này chỉ khả dụng cho các thiết bị cũ hơn"</string>
</patch>
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
<string name="revanced_swipe_brightness_title">Bật cử chỉ độ sáng</string>
<string name="revanced_swipe_brightness_summary_on">"Vuốt chỉnh độ sáng toàn màn hình đã bật
<string name="revanced_swipe_brightness_summary_on">"Vuốt độ sáng toàn màn hình đã được bật
Điều chỉnh độ sáng bằng cách vuốt dọc ở bên trái màn hình"</string>
<string name="revanced_swipe_brightness_summary_off">Vuốt độ sáng toàn màn hình đã tắt</string>
<string name="revanced_swipe_volume_title">Bật cử chỉ âm lượng</string>
<string name="revanced_swipe_volume_summary_on">"Vuốt âm lượng toàn màn hình đã bật
<string name="revanced_swipe_volume_summary_on">"Vuốt âm lượng toàn màn hình đã được bật
Điều chỉnh âm lượng bằng cách vuốt dọc ở bên phải màn hình"</string>
<string name="revanced_swipe_volume_summary_off">Vuốt âm lượng toàn màn hình đã tắt</string>
@@ -502,7 +505,7 @@ Tính năng này chỉ khả dụng cho các thiết bị cũ hơn"</string>
<string name="revanced_swipe_threshold_title">Độ rộng ngưỡng vuốt</string>
<string name="revanced_swipe_threshold_summary">Độ rộng của ngưỡng vuốt để thực hiện cử chỉ vuốt</string>
<string name="revanced_swipe_volume_sensitivity_title">Độ nhạy vuốt âm lượng</string>
<string name="revanced_swipe_volume_sensitivity_summary">Mức âm lượng thay đổi trên mỗi lần vuốt</string>
<string name="revanced_swipe_volume_sensitivity_summary">Mức âm lượng thay đổi mỗi lần vuốt</string>
<string name="revanced_swipe_overlay_style_title">Kiểu lớp phủ vuốt</string>
<string name="revanced_swipe_overlay_style_entry_1">Lớp phủ ngang</string>
<string name="revanced_swipe_overlay_style_entry_2">Lớp phủ ngang (tối giản - trên cùng)</string>
@@ -511,9 +514,9 @@ Tính năng này chỉ khả dụng cho các thiết bị cũ hơn"</string>
<string name="revanced_swipe_overlay_style_entry_5">Lớp phủ tròn (tối giản)</string>
<string name="revanced_swipe_overlay_style_entry_6">Lớp phủ dọc</string>
<string name="revanced_swipe_overlay_style_entry_7">Lớp phủ dọc (tối giản)</string>
<string name="revanced_swipe_change_video_title">Bật vuốt để thay đổi video</string>
<string name="revanced_swipe_change_video_summary_on">Vuốt trong chế độ toàn màn hình sẽ chuyển sang video tiếp theo/trước</string>
<string name="revanced_swipe_change_video_summary_off">Vuốt trong chế độ toàn màn hình sẽ không chuyển sang video tiếp theo/trước</string>
<string name="revanced_swipe_change_video_title">Bật vuốt để chuyển video</string>
<string name="revanced_swipe_change_video_summary_on">Vuốt trong chế độ toàn màn hình sẽ chuyển sang video tiếp theo/trước đó</string>
<string name="revanced_swipe_change_video_summary_off">Vuốt trong chế độ toàn màn hình sẽ không chuyển sang video tiếp theo/trước đó</string>
</patch>
<patch id="layout.autocaptions.autoCaptionsPatch">
<string name="revanced_disable_auto_captions_title">Tắt phụ đề tự động</string>
@@ -521,8 +524,8 @@ Tính năng này chỉ khả dụng cho các thiết bị cũ hơn"</string>
<string name="revanced_disable_auto_captions_summary_off">Phụ đề tự động đã bật</string>
</patch>
<patch id="layout.buttons.action.hideButtonsPatch">
<string name="revanced_hide_buttons_screen_title">Các nút hành động</string>
<string name="revanced_hide_buttons_screen_summary">Ẩn hoặc hin nút dưới video</string>
<string name="revanced_hide_buttons_screen_title">Nút tác vụ</string>
<string name="revanced_hide_buttons_screen_summary">Ẩn hoặc hin thị các nút bên dưới video</string>
<string name="revanced_disable_like_subscribe_glow_title">Tắt hiệu ứng phát sáng nút Thích và Đăng ký</string>
<string name="revanced_disable_like_subscribe_glow_summary_on">Nút Thích và Đăng ký sẽ không phát sáng khi được tương tác</string>
<string name="revanced_disable_like_subscribe_glow_summary_off">Nút Thích và Đăng ký sẽ phát sáng khi được tương tác</string>
@@ -585,21 +588,21 @@ Tính năng này chỉ khả dụng cho các thiết bị cũ hơn"</string>
<string name="revanced_hide_create_button_summary_off">Nút tạo được hiển thị</string>
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_hide_subscriptions_button_title">Ẩn Kênh đăng ký</string>
<string name="revanced_hide_subscriptions_button_summary_on">Nút kênh đăng ký đã bị ẩn</string>
<string name="revanced_hide_subscriptions_button_summary_on">Nút kênh đăng ký đã bị ẩn</string>
<string name="revanced_hide_subscriptions_button_summary_off">Nút kênh đăng ký được hiển thị</string>
<string name="revanced_hide_notifications_button_title">Ẩn Thông báo</string>
<string name="revanced_hide_notifications_button_summary_on">Nút Thông báo đã bị ẩn</string>
<string name="revanced_hide_notifications_button_summary_off">Nút Thông báo được hiển thị</string>
<string name="revanced_hide_notifications_button_summary_on">Nút thông báo đã bị ẩn</string>
<string name="revanced_hide_notifications_button_summary_off">Nút thông báo được hiển thị</string>
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_switch_create_with_notifications_button_title">Chuyển vị nút Tạo với nút Thông báo</string>
<string name="revanced_switch_create_with_notifications_button_summary_on">"Nút tạo được chuyển đổi với nút Thông báo
<string name="revanced_switch_create_with_notifications_button_summary_on">"Nút Tạo được đổi với nút Thông báo
Lưu ý: Bật tính năng này cũng sẽ tự động ẩn quảng cáo video"</string>
<string name="revanced_switch_create_with_notifications_button_summary_off">Nút Tạo không chuyển vị với nút Thông báo</string>
Lưu ý: Bật tính năng này cũng ẩn quảng cáo video"</string>
<string name="revanced_switch_create_with_notifications_button_summary_off">Nút Tạo không đổi với nút Thông báo</string>
<string name="revanced_switch_create_with_notifications_button_user_dialog_message">"Tắt cài đặt này cũng sẽ tắt chặn quảng cáo trên Shorts.
Nếu thay đổi cài đặt này không có hiệu lực, hãy thử chuyển sang chế độ Ẩn danh."</string>
<string name="revanced_hide_navigation_button_labels_title">Ẩn các nhãn nút điều hướng</string>
<string name="revanced_hide_navigation_button_labels_title">Ẩn nhãn nút điều hướng</string>
<string name="revanced_hide_navigation_button_labels_summary_on">Các nhãn đã bị ẩn</string>
<string name="revanced_hide_navigation_button_labels_summary_off">Các nhãn được hiển thị</string>
<string name="revanced_disable_translucent_status_bar_title">Vô hiệu hóa thanh trạng thái trong suốt</string>
@@ -626,21 +629,21 @@ Nếu thay đổi cài đặt này không có hiệu lực, hãy thử chuyển
<string name="revanced_hide_player_flyout_additional_settings_summary_off">Trình đơn cài đặt bổ sung được hiển thị</string>
<!-- 'Sleep timer' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_sleep_timer_title">Ẩn Hẹn giờ ngủ</string>
<string name="revanced_hide_player_flyout_sleep_timer_summary_on">Trình đơn Hẹn giờ ngủ đã bị ẩn</string>
<string name="revanced_hide_player_flyout_sleep_timer_summary_off">Trình đơn Hẹn giờ ngủ được hiển thị</string>
<string name="revanced_hide_player_flyout_sleep_timer_summary_on">Trình đơn hẹn giờ ngủ đã bị ẩn</string>
<string name="revanced_hide_player_flyout_sleep_timer_summary_off">Trình đơn hẹn giờ ngủ được hiển thị</string>
<!-- 'Loop video' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_loop_video_title">Ẩn lặp video</string>
<string name="revanced_hide_player_flyout_loop_video_summary_on">Trình đơn lặp video đã bị ẩn</string>
<string name="revanced_hide_player_flyout_loop_video_summary_off">Trình đơn lặp video được hiển thị</string>
<string name="revanced_hide_player_flyout_loop_video_title">Ẩn lặp lại video</string>
<string name="revanced_hide_player_flyout_loop_video_summary_on">Trình đơn lặp lại video đã bị ẩn</string>
<string name="revanced_hide_player_flyout_loop_video_summary_off">Trình đơn lặp lại video được hiển thị</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_ambient_mode_title">Ẩn Chế độ môi trường</string>
<string name="revanced_hide_player_flyout_ambient_mode_summary_on">Trình đơn chế độ môi trường đã bị ẩn</string>
<string name="revanced_hide_player_flyout_ambient_mode_summary_off">Trình đơn chế độ môi trường được hiển thị</string>
<string name="revanced_hide_player_flyout_stable_volume_title">Ẩn Âm lượng ổn định</string>
<string name="revanced_hide_player_flyout_stable_volume_summary_off">Trình đơn Âm lượng ổn định được hiển thị</string>
<string name="revanced_hide_player_flyout_stable_volume_summary_on">Trình đơn Âm lượng ổn định đã bị ẩn</string>
<string name="revanced_hide_player_flyout_stable_volume_summary_off">Trình đơn âm lượng ổn định được hiển thị</string>
<string name="revanced_hide_player_flyout_stable_volume_summary_on">Trình đơn âm lượng ổn định đã bị ẩn</string>
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_help_title">Ẩn Trợ giúp &amp; Phản hồi</string>
<string name="revanced_hide_player_flyout_help_title">Ẩn Trợ giúp &amp; phản hồi</string>
<string name="revanced_hide_player_flyout_help_summary_on">Trình đơn trợ giúp &amp; phản hồi đã bị ẩn</string>
<string name="revanced_hide_player_flyout_help_summary_off">Trình đơn trợ giúp &amp; phản hồi được hiển thị</string>
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
@@ -665,9 +668,9 @@ Nếu thay đổi cài đặt này không có hiệu lực, hãy thử chuyển
Để hiển thị trình đơn Bản âm thanh, hãy thay đổi 'Giả mạo luồng phát video' thành iOS TV"</string>
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_watch_in_vr_title">Ẩn Xem trong thực tế ảo</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Trình đơn xem trong thực tế ảo đã bị ẩn</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Trình đơn xem trong thực tế ảo được hiển thị</string>
<string name="revanced_hide_player_flyout_watch_in_vr_title">Ẩn Xem ở chế độ thực tế ảo</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Trình đơn xem ở chế độ thực tế ảo đã bị ẩn</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Trình đơn xem ở chế độ thực tế ảo được hiển thị</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Ẩn chân trình đơn chất lượng video</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Chân trình đơn chất lượng video đã bị ẩn</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Chân trình đơn chất lượng video được hiển thị</string>
@@ -773,6 +776,9 @@ Nếu thay đổi cài đặt này không có hiệu lực, hãy thử chuyển
<string name="revanced_hide_shorts_upcoming_button_title">Ẩn nút Sắp diễn ra</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Nút sắp diễn ra đã bị ẩn</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Nút sắp diễn ra được hiển thị</string>
<string name="revanced_hide_shorts_effect_button_title">Ẩn nút Hiệu ứng</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Nút hiệu ứng đã bị ẩn</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Nút hiệu ứng được hiển thị</string>
<string name="revanced_hide_shorts_green_screen_button_title">Ẩn nút Phông xanh</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Nút phông xanh đã bị ẩn</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Nút phông xanh được hiển thị</string>
@@ -956,13 +962,27 @@ Tính năng này hoạt động tốt nhất với chất lượng video 720p tr
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Tự động ẩn nút Bỏ qua</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Nút bỏ qua ẩn sau vài giây</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Nút bỏ qua được hiển thị cho toàn bộ phân đoạn</string>
<string name="revanced_sb_general_skiptoast">Hiện một thông báo nổi khi bỏ qua</string>
<string name="revanced_sb_general_skiptoast_sum_on">Hiển thị thông báo nổi mỗi khi tự động bỏ qua phân đoạn. Nhấn vào đây để xem ví dụ</string>
<string name="revanced_sb_general_skiptoast_sum_off">Thông báo nổi không được hiển thị. Nhấn vào đây để xem ví dụ</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Thời lượng nút bỏ qua</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Thời gian hiển thị các nút tự động ẩn bỏ qua và bỏ qua đến điểm nổi bật</string>
<string name="revanced_sb_general_skiptoast">Hiện thông báo nổi hoàn tác bỏ qua</string>
<string name="revanced_sb_general_skiptoast_sum_on">Thông báo nổi được hiển thị mỗi khi tự động bỏ qua một phân đoạn. Chạm vào thông báo nổi để hoàn tác bỏ qua</string>
<string name="revanced_sb_general_skiptoast_sum_off">Toast không được hiển thị</string>
<string name="revanced_sb_toast_on_skip_duration">Thời lượng toast bỏ qua</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Thời gian hiển thị thông báo nổi bỏ qua</string>
<string name="revanced_sb_duration_1s">1 giây</string>
<string name="revanced_sb_duration_2s">2 giây</string>
<string name="revanced_sb_duration_3s">3 giây</string>
<string name="revanced_sb_duration_4s">4 giây</string>
<string name="revanced_sb_duration_5s">5 giây</string>
<string name="revanced_sb_duration_6s">6 giây</string>
<string name="revanced_sb_duration_7s">7 giây</string>
<string name="revanced_sb_duration_8s">8 giây</string>
<string name="revanced_sb_duration_9s">9 giây</string>
<string name="revanced_sb_duration_10s">10 giây</string>
<string name="revanced_sb_general_time_without">Hiện thời lượng video không có phân đoạn</string>
<string name="revanced_sb_general_time_without_sum_on">Thời lượng video trừ đi tất cả phân đoạn, được hiển thị trong dấu ngoặc đơn bên cạnh thời lượng đầy đủ của video</string>
<string name="revanced_sb_general_time_without_sum_off">Thời lượng đầy đủ của video được hiện</string>
<string name="revanced_sb_create_segment_category">Tạo các phân đoạn mới</string>
<string name="revanced_sb_general_time_without_sum_on">Thời lượng video trừ tất cả các phân đoạn được hiển thị trên thanh tua</string>
<string name="revanced_sb_general_time_without_sum_off">Thời lượng đầy đủ của video được hiển thị</string>
<string name="revanced_sb_create_segment_category">Tạo phân đoạn mới</string>
<string name="revanced_sb_enable_create_segment">Hiện nút Tạo phân đoạn mới</string>
<string name="revanced_sb_enable_create_segment_sum_on">Nút tạo phân đoạn mới đã được hiển thị</string>
<string name="revanced_sb_enable_create_segment_sum_off">Nút tạo phân đoạn mới không được hiển thị</string>
@@ -1006,23 +1026,23 @@ ID người dùng của bạn giống như mật khẩu và không bao giờ đ
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">Không hiện lại</string>
<string name="revanced_sb_diff_segments">Thay đổi hành vi phân đoạn</string>
<string name="revanced_sb_segments_sponsor">Nhà tài trợ</string>
<string name="revanced_sb_segments_sponsor_sum">Quảng cáo, giới thiệu được trả tiền và quảng cáo trực tiếp. Không phải tự quảng cáo hoặc lời giới thiệu miễn phí đến các chiến dịch/nhà sáng tạo/trang web/sản phẩm mà họ yêu thích</string>
<string name="revanced_sb_segments_selfpromo">Quảng cáo không được trả phí/Tự quảng cáo</string>
<string name="revanced_sb_segments_selfpromo_sum">Tương tự như Quảng cáo nhưng không có lợi nhuận hoặc tự quảng bá. Bao gồm các phần về hàng hóa, quyên góp hoặc thông tin về những người họ đã hợp tác</string>
<string name="revanced_sb_segments_interaction">Nhắc nh tương tác (Đăng ký)</string>
<string name="revanced_sb_segments_sponsor_sum">Quảng cáo trả phí, giới thiệu trả phí và quảng cáo trực tiếp. Không dùng cho mục đích tự quảng cáo hoặc quảng bá miễn phí cho các tổ chức/nhà sáng tạo/trang web/sản phẩm mà họ yêu thích</string>
<string name="revanced_sb_segments_selfpromo">Không được trả phí / Tự quảng cáo</string>
<string name="revanced_sb_segments_selfpromo_sum">Tương tự như \"Nhà tài trợ\" nhưng không có lợi nhuận hoặc tự quảng bá. Bao gồm các phần về sản phẩm, quyên góp hoặc thông tin về những người họ đã hợp tác cùng</string>
<string name="revanced_sb_segments_interaction">Lời nhắc tương tác (Đăng ký)</string>
<string name="revanced_sb_segments_interaction_sum">Một lời nhắc ngắn về thích, đăng ký hoặc theo dõi họ ở giữa nội dung. Nếu nó dài hoặc về một điều gì đó cụ thể, nó nên phân loại vào tự quảng cáo</string>
<string name="revanced_sb_segments_highlight">Nổi bật</string>
<string name="revanced_sb_segments_highlight_sum">Phần của video mà hầu hết mọi người đang tìm kiếm</string>
<string name="revanced_sb_segments_intro">Gián đoạn/Giới thiệu</string>
<string name="revanced_sb_segments_intro_sum">Một khoảng thời gian không có nội dung thực tế. Có thể là tạm dừng, khung hình tĩnh hoặc hoạt ảnh lặp lại. Không bao gồm các phần chuyển tiếp chứa thông tin</string>
<string name="revanced_sb_segments_highlight_sum">Phần video mà hầu hết mọi người đang tìm kiếm</string>
<string name="revanced_sb_segments_intro">Gián đoạn / Giới thiệu</string>
<string name="revanced_sb_segments_intro_sum">Một khoảng thời gian không có nội dung thực tế. Có thể là tạm dừng, khung hình tĩnh hoặc hoạt ảnh lặp lại. Không bao gồm các phần chuyển tiếp chứa thông tin</string>
<string name="revanced_sb_segments_outro">Màn hình kết thúc / Danh đề</string>
<string name="revanced_sb_segments_outro_sum">Danh đề hoặc màn hình kết thúc của Youtube xuất hiện. Không dành cho phần kết chứa thông tin</string>
<string name="revanced_sb_segments_preview">Đoạn xem trước/Tóm tắt/Gây chú ý</string>
<string name="revanced_sb_segments_preview_sum">Tập hợp các đoạn cắt thể hiện nhũng gì tiếp theo hoặc sẽ xảy ra trong video hoặc loạt video, nơi mà tất cả thông tin được lặp lại ở nơi khác</string>
<string name="revanced_sb_segments_filler">Phân đoạn lạc đề - nhảm nhí/Câu đùa hài hước</string>
<string name="revanced_sb_segments_filler_sum">Phân cảnh được thêm vào chỉ để dông dài hoặc hài hước mà không cần thiết để hiểu nội dung chính của video. Không bao gồm phân đoạn cung cấp bối cảnh hoặc chi tiết nền</string>
<string name="revanced_sb_segments_outro_sum">Danh đề hoặc khi màn hình kết thúc của YouTube xuất hiện. Không dành cho phần kết chứa thông tin</string>
<string name="revanced_sb_segments_preview">Xem trước / Tóm tắt / Gây chú ý</string>
<string name="revanced_sb_segments_preview_sum">Tuyển tập các đoạn cắt cho thấy nhng gì sắp diễn ra hoặc đã xảy ra trong video hoặc trong các video khác của một sê-ri, trong đó tất cả thông tin được lặp lại ở nơi khác</string>
<string name="revanced_sb_segments_filler">Nội dung thừa / Lạc đề / Câu đùa</string>
<string name="revanced_sb_segments_filler_sum">Các cảnh phụ chỉ được thêm vào để làm đầy thời lượng hoặc gây hài, không cần thiết để hiểu nội dung chính của video. Không bao gồm các phân đoạn cung cấp bối cảnh hoặc chi tiết nền</string>
<string name="revanced_sb_segments_nomusic">Âm nhạc: Phần không phải âm nhạc</string>
<string name="revanced_sb_segments_nomusic_sum">Chỉ dùng cho video về âm nhạc. Phần của video mà không có nhạc, tách biệt với danh mục khác</string>
<string name="revanced_sb_segments_nomusic_sum">Chỉ dành cho video âm nhạc. Các đoạn video âm nhạc không có nhạc, chưa được phân loại vào danh mục khác</string>
<string name="revanced_sb_skip_button_compact">Bỏ qua</string>
<string name="revanced_sb_skip_button_compact_highlight">Nổi bật</string>
<string name="revanced_sb_skip_button_sponsor">Bỏ qua nhà tài trợ</string>
@@ -1041,7 +1061,7 @@ ID người dùng của bạn giống như mật khẩu và không bao giờ đ
<string name="revanced_sb_skip_button_unsubmitted">Bỏ qua phân đoạn</string>
<string name="revanced_sb_skipped_sponsor">Đã bỏ qua nhà tài trợ</string>
<string name="revanced_sb_skipped_selfpromo">Đã bỏ qua tự quảng cáo</string>
<string name="revanced_sb_skipped_interaction">Đã bỏ qua nhắc nhở phiền phức</string>
<string name="revanced_sb_skipped_interaction">Đã bỏ qua lời nhắc phiền toái</string>
<string name="revanced_sb_skipped_highlight">Đã bỏ qua đến phần nổi bật</string>
<string name="revanced_sb_skipped_intro_beginning">Đã bỏ qua giới thiệu</string>
<string name="revanced_sb_skipped_intro_middle">Đã bỏ qua phần gián đoạn</string>
@@ -1050,7 +1070,7 @@ ID người dùng của bạn giống như mật khẩu và không bao giờ đ
<string name="revanced_sb_skipped_preview_beginning">Đã bỏ qua xem trước</string>
<string name="revanced_sb_skipped_preview_middle">Đã bỏ qua xem trước</string>
<string name="revanced_sb_skipped_preview_end">Đã bỏ qua tóm tắt</string>
<string name="revanced_sb_skipped_filler">Đã bỏ qua phân đoạn lạc đề - nhảm nhí</string>
<string name="revanced_sb_skipped_filler">Đã bỏ qua đoạn lạc đề</string>
<string name="revanced_sb_skipped_nomusic">Đã bỏ qua phần không phải âm nhạc</string>
<string name="revanced_sb_skipped_unsubmitted">Đã bỏ qua phân đoạn chưa gửi</string>
<string name="revanced_sb_skipped_multiple_segments">Đã bỏ qua nhiều phân đoạn</string>
@@ -1100,9 +1120,9 @@ ID người dùng của bạn giống như mật khẩu và không bao giờ đ
Bạn đã sẵn sàng gửi?"</string>
<string name="revanced_sb_new_segment_start_is_before_end">Thời gian bắt đầu phải trước thời gian kết thúc</string>
<string name="revanced_sb_new_segment_mark_locations_first">Đánh dấu hai vị trí đầu - cuối trên thanh thời gian trước</string>
<string name="revanced_sb_new_segment_mark_locations_first">Đánh dấu hai vị trí trên thanh thời gian trước</string>
<string name="revanced_sb_new_segment_preview_segment_first">Hãy xem trước phân đoạn để đảm bảo rằng nó bỏ qua suôn sẻ</string>
<string name="revanced_sb_new_segment_edit_by_hand_title">Chỉnh sửa thời gian của phân đoạn theo cách thủ công</string>
<string name="revanced_sb_new_segment_edit_by_hand_title">Chỉnh sửa thời gian của phân đoạn thủ công</string>
<string name="revanced_sb_new_segment_edit_by_hand_content">Bạn có muốn thay đổi thời gian bắt đầu hoặc kết thúc của phân đoạn không?</string>
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Thời gian đã đặt không hợp lệ</string>
<string name="revanced_sb_stats_title">Thống kê</string>
@@ -1133,17 +1153,17 @@ Bạn đã sẵn sàng gửi?"</string>
<string name="revanced_sb_about_api_summary">Dữ liệu được cung cấp bởi API SponsorBlock. Nhấn vào đây để tìm hiểu thêm và xem các bản tải cho các nền tảng khác</string>
</patch>
<patch id="layout.formfactor.changeFormFactorPatch">
<string name="revanced_change_form_factor_title">Bố cục dạng yếu tố</string>
<string name="revanced_change_form_factor_title">Yếu tố hình thức bố cục</string>
<string name="revanced_change_form_factor_entry_1">Mặc định</string>
<string name="revanced_change_form_factor_entry_2">Điện thoại</string>
<string name="revanced_change_form_factor_entry_3">Máy tính bảng</string>
<string name="revanced_change_form_factor_entry_4">Ô</string>
<string name="revanced_change_form_factor_entry_4">Màn hình ô</string>
<string name="revanced_change_form_factor_user_dialog_message">"Thay đổi bao gồm:
Bố cục máy tính bảng
• Bài đăng cộng đồng đã bị ẩn
• Bài đăng cộng đồng bị ẩn
Bố cục ô tô
Bố cục màn hình ô tô
• Shorts mở trong trình phát thông thường
• Bảng tin được sắp xếp theo chủ đề và kênh"</string>
</patch>
@@ -1158,7 +1178,7 @@ Bố cục ô tô
Nếu tắt đi sau đó, bạn nên xóa dữ liệu ứng dụng để tránh phát sinh lỗi giao diện."</string>
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
<string name="revanced_spoof_app_version_target_title">Phiên bản giả mạo đích</string>
<string name="revanced_spoof_app_version_target_title">Mục tiêu phiên bản giả mạo</string>
<string name="revanced_spoof_app_version_target_entry_1">19.35.36 - Khôi phục biểu tượng trình phát Shorts cũ</string>
<string name="revanced_spoof_app_version_target_entry_2">19.01.34 - Khôi phục biểu tượng điều hướng cũ</string>
</patch>
@@ -1227,12 +1247,12 @@ Hạn chế: Sử dụng nút quay lại trên thanh công cụ có thể không
<string name="revanced_miniplayer_rounded_corners_title">Bật góc bo tròn</string>
<string name="revanced_miniplayer_rounded_corners_summary_on">Góc được bo tròn</string>
<string name="revanced_miniplayer_rounded_corners_summary_off">Góc vuông</string>
<string name="revanced_miniplayer_double_tap_action_title">Bật nhấp đúp và chụm để thay đổi kích thước</string>
<string name="revanced_miniplayer_double_tap_action_summary_on">"Thao tác nhấn đúp và chụm để thay đổi kích thước đã được bật
<string name="revanced_miniplayer_double_tap_action_title">Bật chạm hai lần và chụm để thay đổi kích thước</string>
<string name="revanced_miniplayer_double_tap_action_summary_on">"Đã bật thao tác chạm hai lần và chụm để thay đổi kích thước
Nhấn đúp để tăng kích thước trình phát thu nhỏ
Nhấn đúp lại để khôi phục kích thước ban đầu"</string>
<string name="revanced_miniplayer_double_tap_action_summary_off">Chạm đôi và chụm để thay đổi kích thước đã tắt</string>
Chạm hai lần để tăng kích thước trình phát thu nhỏ
Chạm hai lần nữa để khôi phục kích thước ban đầu"</string>
<string name="revanced_miniplayer_double_tap_action_summary_off">Đã tắt thao tác chạm hai lần và chụm để thay đổi kích thước</string>
<string name="revanced_miniplayer_drag_and_drop_title">Bật kéo và thả</string>
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Kéo và thả đã được bật
@@ -1243,7 +1263,7 @@ Trình phát thu nhỏ có thể được kéo đến bất kỳ góc nào của
Trình phát thu nhỏ có thể được kéo ra mép màn hình sang bên trái hoặc phải"</string>
<string name="revanced_miniplayer_horizontal_drag_summary_off">Cử chỉ kéo ngang đã tắt</string>
<string name="revanced_miniplayer_hide_overlay_buttons_title">Ẩn các nút lớp phủ</string>
<string name="revanced_miniplayer_hide_overlay_buttons_title">Ẩn nút lớp phủ</string>
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">Các nút lớp phủ đã bị ẩn</string>
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">Các nút lớp phủ được hiển thị</string>
<string name="revanced_miniplayer_hide_overlay_buttons_legacy_title">Ẩn các nút mở rộng và đóng</string>

View File

@@ -285,10 +285,13 @@ Second \"item\" text"</string>
<string name="revanced_hide_description_components_screen_title">视频说明</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_summary">隐藏或显示订阅源、搜索结果和相关视频中的过滤</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_off">已在首页动态中显示</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_summary_on">已在动态中隐藏</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">已在动态中显示</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">在历史记录中隐藏</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">已在历史记录中隐藏</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">已在历史记录中显示</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_off">在搜索结果中显示</string>
@@ -773,6 +776,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_upcoming_button_title">隐藏「即将发布」按钮</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">即将上映按钮已隐藏</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">即将上映按钮已显示</string>
<string name="revanced_hide_shorts_effect_button_title">隐藏特效按钮</string>
<string name="revanced_hide_shorts_effect_button_summary_on">特效按钮已隐藏</string>
<string name="revanced_hide_shorts_effect_button_summary_off">特效按钮已显示</string>
<string name="revanced_hide_shorts_green_screen_button_title">隐藏「绿幕」按钮</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">绿屏按钮已隐藏</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">绿屏按钮已显示</string>
@@ -955,11 +961,25 @@ Second \"item\" text"</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button">自动隐藏跳过按钮</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">跳过按钮在几秒后隐藏</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">整个片段都会显示“跳过”按钮</string>
<string name="revanced_sb_general_skiptoast">跳过时显示一个toast</string>
<string name="revanced_sb_general_skiptoast_sum_on">自动跳过片段时显示\"提示\"。点击这里查看示例</string>
<string name="revanced_sb_general_skiptoast_sum_off">显示\"提示\"。点击这里查看示例</string>
<string name="revanced_sb_auto_hide_skip_button_duration">跳过按钮时长</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">自动隐藏跳过和跳转到精彩片段按钮的显示时长</string>
<string name="revanced_sb_general_skiptoast">显示撤销跳过浮层提示</string>
<string name="revanced_sb_general_skiptoast_sum_on">当片段被自动跳过时会显示浮层提示。轻触浮层提示通知以撤销跳过</string>
<string name="revanced_sb_general_skiptoast_sum_off">提示未显示</string>
<string name="revanced_sb_toast_on_skip_duration">跳过提示时长</string>
<string name="revanced_sb_toast_on_skip_duration_sum">跳过浮层提示通知的显示时长</string>
<string name="revanced_sb_duration_1s">1 秒</string>
<string name="revanced_sb_duration_2s">2 秒</string>
<string name="revanced_sb_duration_3s">3 秒</string>
<string name="revanced_sb_duration_4s">4 秒</string>
<string name="revanced_sb_duration_5s">5秒</string>
<string name="revanced_sb_duration_6s">6 秒</string>
<string name="revanced_sb_duration_7s">7 秒</string>
<string name="revanced_sb_duration_8s">8 秒</string>
<string name="revanced_sb_duration_9s">9 秒</string>
<string name="revanced_sb_duration_10s">10 秒</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_create_segment_category">创建新的片段</string>
<string name="revanced_sb_enable_create_segment">显示“创建新片段”按钮</string>

Some files were not shown because too many files have changed in this diff Show More