mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-26 02:44:08 +01:00
Compare commits
30 Commits
v5.21.0-de
...
v5.23.0-de
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
555c9a5823 | ||
|
|
777957e2d0 | ||
|
|
b3316a5915 | ||
|
|
2ca2bb7692 | ||
|
|
23fd720fa7 | ||
|
|
1f08586ae8 | ||
|
|
60fdf4c44c | ||
|
|
63f3342815 | ||
|
|
858c59d728 | ||
|
|
5debf9936d | ||
|
|
f1b85d20a1 | ||
|
|
37d0de5e93 | ||
|
|
96d08d5eb7 | ||
|
|
9b1013e1c2 | ||
|
|
75d6cd7c7b | ||
|
|
5a17f5e1c1 | ||
|
|
1d16de6617 | ||
|
|
aee7cba46d | ||
|
|
ec3faf30a8 | ||
|
|
45b5a51da3 | ||
|
|
8abf176bc9 | ||
|
|
ef35ed7335 | ||
|
|
4fd666b667 | ||
|
|
72e0c01922 | ||
|
|
f69eab3e3b | ||
|
|
7c5c2d95bc | ||
|
|
b2453fecfc | ||
|
|
0d54f8bd80 | ||
|
|
fda16fad1a | ||
|
|
ddd43acd73 |
102
CHANGELOG.md
102
CHANGELOG.md
@@ -1,3 +1,105 @@
|
||||
# [5.23.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.23.0-dev.3...v5.23.0-dev.4) (2025-05-06)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Spotify:** Add `Sanitize sharing links` patch ([#4829](https://github.com/ReVanced/revanced-patches/issues/4829)) ([2e3511d](https://github.com/ReVanced/revanced-patches/commit/2e3511d03c8198bbdb9336888df038a33fb3ab8c))
|
||||
|
||||
# [5.23.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.23.0-dev.2...v5.23.0-dev.3) (2025-05-05)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube:** Simplify litho filtering patch ([#4910](https://github.com/ReVanced/revanced-patches/issues/4910)) ([bd53955](https://github.com/ReVanced/revanced-patches/commit/bd53955df738bb7b819eb91a3e776e9d2ca5c74a))
|
||||
|
||||
# [5.23.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.23.0-dev.1...v5.23.0-dev.2) (2025-05-04)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube:** Improve litho filtering performance ([#4904](https://github.com/ReVanced/revanced-patches/issues/4904)) ([7b43986](https://github.com/ReVanced/revanced-patches/commit/7b43986871a68e5cb43331d2fb2fdb9ef67438ad))
|
||||
|
||||
# [5.23.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.22.0...v5.23.0-dev.1) (2025-05-02)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Lightroom:** Constrain patches to last working version ([efef03b](https://github.com/ReVanced/revanced-patches/commit/efef03b80da21552d0d8be6913faba64e4fb5ed1))
|
||||
|
||||
# [5.22.0](https://github.com/ReVanced/revanced-patches/compare/v5.21.0...v5.22.0) (2025-05-01)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **TikTok - Feed filter:** Hide ads in following feed ([#4844](https://github.com/ReVanced/revanced-patches/issues/4844)) ([c255ac1](https://github.com/ReVanced/revanced-patches/commit/c255ac18e0b2dcf917bd0559876be5a2a81023db))
|
||||
* **YouTube - Hide layout components:** Hide new type of community posts ([#4888](https://github.com/ReVanced/revanced-patches/issues/4888)) ([f0c9c35](https://github.com/ReVanced/revanced-patches/commit/f0c9c35778ab43a99149ee5ad0ccfd8aeb09f638))
|
||||
* **YouTube - Hide Shorts components:** Hide action buttons A/B button layout ([#4889](https://github.com/ReVanced/revanced-patches/issues/4889)) ([9dcd3d3](https://github.com/ReVanced/revanced-patches/commit/9dcd3d35dddf019547ab6ce431bac7a5a8a4c291))
|
||||
* **YouTube - Shorts autoplay:** Fix autoplay with YT 20.12 ([06b35b2](https://github.com/ReVanced/revanced-patches/commit/06b35b2a7d7371915881e8f430c32ce15fa224de))
|
||||
* **YouTube - Spoof app version:** Do not hide spoof version in general settings menu ([#4861](https://github.com/ReVanced/revanced-patches/issues/4861)) ([f459c3c](https://github.com/ReVanced/revanced-patches/commit/f459c3c7fae3a1b8addf3354488dcef9f95255cc))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **TikTok - Feed Filter:** Remove TikTok Shop from feed. ([#4851](https://github.com/ReVanced/revanced-patches/issues/4851)) ([f198bec](https://github.com/ReVanced/revanced-patches/commit/f198bece653e3e1adf083129dedb77c1d1a633d7))
|
||||
* **YouTube - GmsCore support:** Show troubleshooting in app text if the user recently changed their account details ([#4879](https://github.com/ReVanced/revanced-patches/issues/4879)) ([ab4bdc8](https://github.com/ReVanced/revanced-patches/commit/ab4bdc8a2519cee15f79bf95d89e7ea56ea464ee))
|
||||
|
||||
# [5.22.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.22.0-dev.3...v5.22.0-dev.4) (2025-04-30)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Hide layout components:** Hide new type of community posts ([#4888](https://github.com/ReVanced/revanced-patches/issues/4888)) ([f0c9c35](https://github.com/ReVanced/revanced-patches/commit/f0c9c35778ab43a99149ee5ad0ccfd8aeb09f638))
|
||||
* **YouTube - Hide Shorts components:** Hide action buttons A/B button layout ([#4889](https://github.com/ReVanced/revanced-patches/issues/4889)) ([9dcd3d3](https://github.com/ReVanced/revanced-patches/commit/9dcd3d35dddf019547ab6ce431bac7a5a8a4c291))
|
||||
|
||||
# [5.22.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.22.0-dev.2...v5.22.0-dev.3) (2025-04-29)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - GmsCore support:** Show troubleshooting in app text if the user recently changed their account details ([#4879](https://github.com/ReVanced/revanced-patches/issues/4879)) ([ab4bdc8](https://github.com/ReVanced/revanced-patches/commit/ab4bdc8a2519cee15f79bf95d89e7ea56ea464ee))
|
||||
|
||||
# [5.22.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.22.0-dev.1...v5.22.0-dev.2) (2025-04-27)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Shorts autoplay:** Fix autoplay with YT 20.12 ([06b35b2](https://github.com/ReVanced/revanced-patches/commit/06b35b2a7d7371915881e8f430c32ce15fa224de))
|
||||
|
||||
# [5.22.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.21.0...v5.22.0-dev.1) (2025-04-26)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **TikTok - Feed filter:** Hide ads in following feed ([#4844](https://github.com/ReVanced/revanced-patches/issues/4844)) ([c255ac1](https://github.com/ReVanced/revanced-patches/commit/c255ac18e0b2dcf917bd0559876be5a2a81023db))
|
||||
* **YouTube - Spoof app version:** Do not hide spoof version in general settings menu ([#4861](https://github.com/ReVanced/revanced-patches/issues/4861)) ([f459c3c](https://github.com/ReVanced/revanced-patches/commit/f459c3c7fae3a1b8addf3354488dcef9f95255cc))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **TikTok - Feed Filter:** Remove TikTok Shop from feed. ([#4851](https://github.com/ReVanced/revanced-patches/issues/4851)) ([f198bec](https://github.com/ReVanced/revanced-patches/commit/f198bece653e3e1adf083129dedb77c1d1a633d7))
|
||||
|
||||
# [5.21.0](https://github.com/ReVanced/revanced-patches/compare/v5.20.1...v5.21.0) (2025-04-25)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* `Hide ADB status` patch ([#4814](https://github.com/ReVanced/revanced-patches/issues/4814)) ([dc89be0](https://github.com/ReVanced/revanced-patches/commit/dc89be0e94880733f862b250d95d4848f02c594d))
|
||||
* **GmsCore Support:** Correct the description to refer to the app being patched ([2bbcf9d](https://github.com/ReVanced/revanced-patches/commit/2bbcf9d82ca2f442572a6aa886cc611b0d56ff0a))
|
||||
* **Wide search bar:** Fix patching `19.16.39` ([433dbc3](https://github.com/ReVanced/revanced-patches/commit/433dbc3bf81823369e146035c954281e84d3a436))
|
||||
* **YouTube - Change start page:** Add option to always override start page on app launch ([#4832](https://github.com/ReVanced/revanced-patches/issues/4832)) ([5062e24](https://github.com/ReVanced/revanced-patches/commit/5062e24433ba38eba397438e8fde32099109d3c3))
|
||||
* **YouTube - Disable auto captions:** Correctly hide captions with YT 20.12 ([5ecbe82](https://github.com/ReVanced/revanced-patches/commit/5ecbe823ed5197533328cc37f1de5cd1f048a217))
|
||||
* **YouTube - Hide video action buttons:** Add option to hide 'Ask' button ([#4852](https://github.com/ReVanced/revanced-patches/issues/4852)) ([43bcf5a](https://github.com/ReVanced/revanced-patches/commit/43bcf5a098c9008cc11dc7df9680437d5effbb32))
|
||||
* **YouTube - Hide video action buttons:** Hide A/B layout buttons ([4db5d3c](https://github.com/ReVanced/revanced-patches/commit/4db5d3c3d5ac04faf70cc07fb309b324d752e7e3))
|
||||
* **YouTube - Wide search bar:** Do not force phone layout for tablet devices ([#4827](https://github.com/ReVanced/revanced-patches/issues/4827)) ([0cb38f9](https://github.com/ReVanced/revanced-patches/commit/0cb38f9f367a7fe742d8ca336150049181d637b6))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Add `Hide ADB status` patch ([#4585](https://github.com/ReVanced/revanced-patches/issues/4585)) ([1ea8047](https://github.com/ReVanced/revanced-patches/commit/1ea8047aefdaa358e9af8038923ac54d68a39176))
|
||||
* **X / Twitter:** Support version `10.86.0-release.0` ([#4805](https://github.com/ReVanced/revanced-patches/issues/4805)) ([655b390](https://github.com/ReVanced/revanced-patches/commit/655b39043ad77efcb4380de67c3f603666e7bc49))
|
||||
* **YouTube - Swipe controls:** Add option for vertical progress bar ([#4811](https://github.com/ReVanced/revanced-patches/issues/4811)) ([ebee07e](https://github.com/ReVanced/revanced-patches/commit/ebee07ec3aba6fd3adbd8e0af30390e197879d89))
|
||||
* **YouTube:** Support version `20.12.46` ([#4779](https://github.com/ReVanced/revanced-patches/issues/4779)) ([703359f](https://github.com/ReVanced/revanced-patches/commit/703359f0c16b613c204cf16cf42227b628f664fa))
|
||||
|
||||
# [5.21.0-dev.12](https://github.com/ReVanced/revanced-patches/compare/v5.21.0-dev.11...v5.21.0-dev.12) (2025-04-24)
|
||||
|
||||
|
||||
|
||||
@@ -20,9 +20,7 @@ import androidx.annotation.RequiresApi;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
|
||||
/**
|
||||
* @noinspection unused
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public class GmsCoreSupport {
|
||||
private static final String PACKAGE_NAME_YOUTUBE = "com.google.android.youtube";
|
||||
private static final String PACKAGE_NAME_YOUTUBE_MUSIC = "com.google.android.apps.youtube.music";
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
package app.revanced.extension.spotify.misc.privacy;
|
||||
|
||||
import android.net.Uri;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class SanitizeSharingLinksPatch {
|
||||
|
||||
/**
|
||||
* Parameters that are considered undesirable and should be stripped away.
|
||||
*/
|
||||
private static final List<String> SHARE_PARAMETERS_TO_REMOVE = List.of(
|
||||
"si", // Share tracking parameter.
|
||||
"utm_source" // Share source, such as "copy-link".
|
||||
);
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static String sanitizeUrl(String url) {
|
||||
try {
|
||||
Uri uri = Uri.parse(url);
|
||||
Uri.Builder builder = uri.buildUpon().clearQuery();
|
||||
|
||||
for (String paramName : uri.getQueryParameterNames()) {
|
||||
if (!SHARE_PARAMETERS_TO_REMOVE.contains(paramName)) {
|
||||
for (String value : uri.getQueryParameters(paramName)) {
|
||||
builder.appendQueryParameter(paramName, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return builder.build().toString();
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "sanitizeUrl failure", ex);
|
||||
|
||||
return url;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package app.revanced.extension.tiktok.feedfilter;
|
||||
|
||||
import com.ss.android.ugc.aweme.feed.model.Aweme;
|
||||
import com.ss.android.ugc.aweme.feed.model.FeedItemList;
|
||||
import com.ss.android.ugc.aweme.follow.presenter.FollowFeedList;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
@@ -13,22 +14,41 @@ public final class FeedItemsFilter {
|
||||
new StoryFilter(),
|
||||
new ImageVideoFilter(),
|
||||
new ViewCountFilter(),
|
||||
new LikeCountFilter()
|
||||
new LikeCountFilter(),
|
||||
new ShopFilter()
|
||||
);
|
||||
|
||||
public static void filter(FeedItemList feedItemList) {
|
||||
Iterator<Aweme> feedItemListIterator = feedItemList.items.iterator();
|
||||
while (feedItemListIterator.hasNext()) {
|
||||
Aweme item = feedItemListIterator.next();
|
||||
if (item == null) continue;
|
||||
filterFeedList(feedItemList.items, item -> item);
|
||||
}
|
||||
|
||||
for (IFilter filter : FILTERS) {
|
||||
boolean enabled = filter.getEnabled();
|
||||
if (enabled && filter.getFiltered(item)) {
|
||||
feedItemListIterator.remove();
|
||||
break;
|
||||
}
|
||||
public static void filter(FollowFeedList followFeedList) {
|
||||
filterFeedList(followFeedList.mItems, feed -> (feed != null) ? feed.aweme : null);
|
||||
}
|
||||
|
||||
private static <T> void filterFeedList(List<T> list, AwemeExtractor<T> extractor) {
|
||||
// Could be simplified with removeIf() but requires Android 7.0+ while TikTok supports 4.0+.
|
||||
Iterator<T> iterator = list.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
T container = iterator.next();
|
||||
Aweme item = extractor.extract(container);
|
||||
if (item != null && shouldFilter(item)) {
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean shouldFilter(Aweme item) {
|
||||
for (IFilter filter : FILTERS) {
|
||||
if (filter.getEnabled() && filter.getFiltered(item)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
interface AwemeExtractor<T> {
|
||||
Aweme extract(T source);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package app.revanced.extension.tiktok.feedfilter;
|
||||
|
||||
import app.revanced.extension.tiktok.settings.Settings;
|
||||
import com.ss.android.ugc.aweme.feed.model.Aweme;
|
||||
|
||||
public class ShopFilter implements IFilter {
|
||||
private static final String SHOP_INFO = "placeholder_product_id";
|
||||
@Override
|
||||
public boolean getEnabled() {
|
||||
return Settings.HIDE_SHOP.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getFiltered(Aweme item) {
|
||||
return item.getShareUrl().contains(SHOP_INFO);
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,7 @@ import app.revanced.extension.shared.settings.StringSetting;
|
||||
public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting REMOVE_ADS = new BooleanSetting("remove_ads", TRUE, true);
|
||||
public static final BooleanSetting HIDE_LIVE = new BooleanSetting("hide_live", FALSE, true);
|
||||
public static final BooleanSetting HIDE_SHOP = new BooleanSetting("hide_shop", FALSE, true);
|
||||
public static final BooleanSetting HIDE_STORY = new BooleanSetting("hide_story", FALSE, true);
|
||||
public static final BooleanSetting HIDE_IMAGE = new BooleanSetting("hide_image", FALSE, true);
|
||||
public static final StringSetting MIN_MAX_VIEWS = new StringSetting("min_max_views", "0-" + Long.MAX_VALUE, true);
|
||||
|
||||
@@ -26,6 +26,11 @@ public class FeedFilterPreferenceCategory extends ConditionalPreferenceCategory
|
||||
"Remove feed ads", "Remove ads from feed.",
|
||||
Settings.REMOVE_ADS
|
||||
));
|
||||
addPreference(new TogglePreference(
|
||||
context,
|
||||
"Hide TikTok Shop", "Hide TikTok shop from feed.",
|
||||
Settings.HIDE_SHOP
|
||||
));
|
||||
addPreference(new TogglePreference(
|
||||
context,
|
||||
"Hide livestreams", "Hide livestreams from feed.",
|
||||
|
||||
@@ -33,4 +33,8 @@ public class Aweme {
|
||||
public AwemeStatistics getStatistics() {
|
||||
throw new UnsupportedOperationException("Stub");
|
||||
}
|
||||
|
||||
public String getShareUrl() {
|
||||
throw new UnsupportedOperationException("Stub");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.ss.android.ugc.aweme.follow.presenter;
|
||||
|
||||
import com.ss.android.ugc.aweme.feed.model.Aweme;
|
||||
|
||||
//Dummy class
|
||||
public class FollowFeed {
|
||||
public Aweme aweme;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.ss.android.ugc.aweme.follow.presenter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
//Dummy class
|
||||
public class FollowFeedList {
|
||||
public List<FollowFeed> mItems;
|
||||
}
|
||||
@@ -2,6 +2,8 @@ package app.revanced.extension.youtube;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.graphics.Color;
|
||||
import android.os.Build;
|
||||
import android.view.Window;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
@@ -102,4 +104,21 @@ public class ThemeHelper {
|
||||
|
||||
return Utils.getColorFromString(colorName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the system navigation bar color for the activity.
|
||||
* Applies the background color obtained from {@link #getBackgroundColor()} to the navigation bar.
|
||||
* For Android 10 (API 29) and above, enforces navigation bar contrast to ensure visibility.
|
||||
*/
|
||||
public static void setNavigationBarColor(@Nullable Window window) {
|
||||
if (window == null) {
|
||||
Logger.printDebug(() -> "Cannot set navigation bar color, window is null");
|
||||
return;
|
||||
}
|
||||
|
||||
window.setNavigationBarColor(getBackgroundColor());
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
window.setNavigationBarContrastEnforced(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package app.revanced.extension.youtube.patches;
|
||||
|
||||
import static app.revanced.extension.shared.StringRef.sf;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class AccountCredentialsInvalidTextPatch {
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static String getOfflineNetworkErrorString(String original) {
|
||||
try {
|
||||
if (Utils.isNetworkConnected()) {
|
||||
Logger.printDebug(() -> "Network appears to be online, but app is showing offline error");
|
||||
return '\n' + sf("microg_offline_account_login_error").toString();
|
||||
}
|
||||
|
||||
Logger.printDebug(() -> "Network is offline");
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "getOfflineNetworkErrorString failure", ex);
|
||||
}
|
||||
|
||||
return original;
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,8 @@ package app.revanced.extension.youtube.patches;
|
||||
|
||||
import android.app.Activity;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -76,7 +78,7 @@ public class ShortsAutoplayPatch {
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static Enum<?> changeShortsRepeatBehavior(Enum<?> original) {
|
||||
public static Enum<?> changeShortsRepeatBehavior(@Nullable Enum<?> original) {
|
||||
try {
|
||||
final boolean autoplay;
|
||||
|
||||
@@ -98,17 +100,35 @@ public class ShortsAutoplayPatch {
|
||||
: ShortsLoopBehavior.REPEAT;
|
||||
|
||||
if (behavior.ytEnumValue != null) {
|
||||
Logger.printDebug(() -> behavior.ytEnumValue == original
|
||||
? "Changing Shorts repeat behavior from: " + original.name() + " to: " + behavior.ytEnumValue
|
||||
: "Behavior setting is same as original. Using original: " + original.name()
|
||||
);
|
||||
Logger.printDebug(() -> {
|
||||
String name = (original == null ? "unknown (null)" : original.name());
|
||||
return behavior == original
|
||||
? "Behavior setting is same as original. Using original: " + name
|
||||
: "Changing Shorts repeat behavior from: " + name + " to: " + behavior.name();
|
||||
});
|
||||
|
||||
return behavior.ytEnumValue;
|
||||
}
|
||||
|
||||
if (original == null) {
|
||||
// Cannot return null, as null is used to indicate Short was auto played.
|
||||
// Unpatched app replaces null with unknown enum type (appears to fix for bad api data).
|
||||
Enum<?> unknown = ShortsLoopBehavior.UNKNOWN.ytEnumValue;
|
||||
Logger.printDebug(() -> "Original is null, returning: " + unknown.name());
|
||||
return unknown;
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "changeShortsRepeatState failure", ex);
|
||||
Logger.printException(() -> "changeShortsRepeatBehavior failure", ex);
|
||||
}
|
||||
|
||||
return original;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean isAutoPlay(Enum<?> original) {
|
||||
return ShortsLoopBehavior.SINGLE_PLAY.ytEnumValue == original;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,7 +75,10 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
"post_base_wrapper_slim.eml",
|
||||
"poll_post_root.eml",
|
||||
"videos_post_root.eml",
|
||||
"post_shelf_slim.eml"
|
||||
"post_shelf_slim.eml",
|
||||
"videos_post_responsive_root.eml",
|
||||
"text_post_responsive_root.eml",
|
||||
"poll_post_responsive_root.eml"
|
||||
);
|
||||
|
||||
final var communityGuidelines = new StringFilterGroup(
|
||||
|
||||
@@ -87,6 +87,10 @@ public final class LithoFilterPatch {
|
||||
* 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<>();
|
||||
|
||||
static {
|
||||
for (Filter filter : filters) {
|
||||
@@ -140,11 +144,22 @@ public final class LithoFilterPatch {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public static boolean filter(@Nullable String lithoIdentifier, @NonNull StringBuilder pathBuilder) {
|
||||
public static void filter(@Nullable String lithoIdentifier, StringBuilder pathBuilder) {
|
||||
filterResult.set(handleFiltering(lithoIdentifier, pathBuilder));
|
||||
}
|
||||
|
||||
private static boolean handleFiltering(@Nullable String lithoIdentifier, StringBuilder pathBuilder) {
|
||||
try {
|
||||
if (pathBuilder.length() == 0) {
|
||||
return false;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package app.revanced.extension.youtube.patches.components;
|
||||
|
||||
import static app.revanced.extension.shared.Utils.hideViewUnderCondition;
|
||||
import static app.revanced.extension.youtube.shared.NavigationBar.NavigationButton;
|
||||
|
||||
import android.view.View;
|
||||
@@ -52,6 +51,7 @@ public final class ShortsFilter extends Filter {
|
||||
private final StringFilterGroup suggestedAction;
|
||||
private final ByteArrayFilterGroupList suggestedActionsGroupList = new ByteArrayFilterGroupList();
|
||||
|
||||
private final StringFilterGroup shortsActionBar;
|
||||
private final StringFilterGroup actionButton;
|
||||
private final ByteArrayFilterGroupList videoActionButtonGroupList = new ByteArrayFilterGroupList();
|
||||
|
||||
@@ -141,6 +141,16 @@ public final class ShortsFilter extends Filter {
|
||||
"like_fountain.eml"
|
||||
);
|
||||
|
||||
StringFilterGroup likeButton = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_LIKE_BUTTON,
|
||||
"shorts_like_button.eml"
|
||||
);
|
||||
|
||||
StringFilterGroup dislikeButton = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_DISLIKE_BUTTON,
|
||||
"shorts_dislike_button.eml"
|
||||
);
|
||||
|
||||
joinButton = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_JOIN_BUTTON,
|
||||
"sponsor_button"
|
||||
@@ -156,9 +166,15 @@ public final class ShortsFilter extends Filter {
|
||||
"reel_player_disclosure.eml"
|
||||
);
|
||||
|
||||
shortsActionBar = new StringFilterGroup(
|
||||
null,
|
||||
"shorts_action_bar.eml"
|
||||
);
|
||||
|
||||
actionButton = new StringFilterGroup(
|
||||
null,
|
||||
"shorts_video_action_button.eml"
|
||||
// Can be simply 'button.eml' or 'shorts_video_action_button.eml'
|
||||
"button.eml"
|
||||
);
|
||||
|
||||
suggestedAction = new StringFilterGroup(
|
||||
@@ -167,27 +183,16 @@ public final class ShortsFilter extends Filter {
|
||||
);
|
||||
|
||||
addPathCallbacks(
|
||||
shortsCompactFeedVideoPath, suggestedAction, actionButton, joinButton, subscribeButton,
|
||||
paidPromotionButton, pausedOverlayButtons, channelBar, fullVideoLinkLabel, videoTitle,
|
||||
reelSoundMetadata, soundButton, infoPanel, stickers, likeFountain
|
||||
shortsCompactFeedVideoPath, joinButton, subscribeButton, paidPromotionButton,
|
||||
shortsActionBar, suggestedAction, pausedOverlayButtons, channelBar,
|
||||
fullVideoLinkLabel, videoTitle, reelSoundMetadata, soundButton, infoPanel,
|
||||
stickers, likeFountain, likeButton, dislikeButton
|
||||
);
|
||||
|
||||
//
|
||||
// Action buttons
|
||||
// All other action buttons.
|
||||
//
|
||||
videoActionButtonGroupList.addAll(
|
||||
// This also appears as the path item 'shorts_like_button.eml'
|
||||
new ByteArrayFilterGroup(
|
||||
Settings.HIDE_SHORTS_LIKE_BUTTON,
|
||||
"reel_like_button",
|
||||
"reel_like_toggled_button"
|
||||
),
|
||||
// This also appears as the path item 'shorts_dislike_button.eml'
|
||||
new ByteArrayFilterGroup(
|
||||
Settings.HIDE_SHORTS_DISLIKE_BUTTON,
|
||||
"reel_dislike_button",
|
||||
"reel_dislike_toggled_button"
|
||||
),
|
||||
new ByteArrayFilterGroup(
|
||||
Settings.HIDE_SHORTS_COMMENTS_BUTTON,
|
||||
"reel_comment_button"
|
||||
@@ -286,9 +291,11 @@ public final class ShortsFilter extends Filter {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Video action buttons (like, dislike, comment, share, remix) have the same path.
|
||||
if (matchedGroup == actionButton) {
|
||||
if (videoActionButtonGroupList.check(protobufBufferArray).isFiltered()) {
|
||||
// Video action buttons (comment, share, remix) have the same path.
|
||||
// Like and dislike are separate path filters and don't require buffer searching.
|
||||
if (matchedGroup == shortsActionBar) {
|
||||
if (actionButton.check(path).isFiltered()
|
||||
&& videoActionButtonGroupList.check(protobufBufferArray).isFiltered()) {
|
||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
||||
}
|
||||
return false;
|
||||
@@ -392,37 +399,6 @@ public final class ShortsFilter extends Filter {
|
||||
return original;
|
||||
}
|
||||
|
||||
// region Hide the buttons in older versions of YouTube. New versions use Litho.
|
||||
|
||||
public static void hideLikeButton(final View likeButtonView) {
|
||||
// Cannot set the visibility to gone for like/dislike,
|
||||
// as some other unknown YT code also sets the visibility after this hook.
|
||||
//
|
||||
// Setting the view to 0dp works, but that leaves a blank space where
|
||||
// the button was (only relevant for dislikes button).
|
||||
//
|
||||
// Instead remove the view from the parent.
|
||||
Utils.hideViewByRemovingFromParentUnderCondition(Settings.HIDE_SHORTS_LIKE_BUTTON, likeButtonView);
|
||||
}
|
||||
|
||||
public static void hideDislikeButton(final View dislikeButtonView) {
|
||||
Utils.hideViewByRemovingFromParentUnderCondition(Settings.HIDE_SHORTS_DISLIKE_BUTTON, dislikeButtonView);
|
||||
}
|
||||
|
||||
public static void hideShortsCommentsButton(final View commentsButtonView) {
|
||||
hideViewUnderCondition(Settings.HIDE_SHORTS_COMMENTS_BUTTON, commentsButtonView);
|
||||
}
|
||||
|
||||
public static void hideShortsRemixButton(final View remixButtonView) {
|
||||
hideViewUnderCondition(Settings.HIDE_SHORTS_REMIX_BUTTON, remixButtonView);
|
||||
}
|
||||
|
||||
public static void hideShortsShareButton(final View shareButtonView) {
|
||||
hideViewUnderCondition(Settings.HIDE_SHORTS_SHARE_BUTTON, shareButtonView);
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
public static void setNavigationBar(PivotBar view) {
|
||||
pivotBarRef = new WeakReference<>(view);
|
||||
}
|
||||
|
||||
@@ -84,6 +84,7 @@ public class LicenseActivityHook {
|
||||
public static void initialize(Activity licenseActivity) {
|
||||
try {
|
||||
ThemeHelper.setActivityTheme(licenseActivity);
|
||||
ThemeHelper.setNavigationBarColor(licenseActivity.getWindow());
|
||||
licenseActivity.setContentView(getResourceIdentifier(
|
||||
"revanced_settings_with_toolbar", "layout"));
|
||||
|
||||
@@ -126,7 +127,7 @@ public class LicenseActivityHook {
|
||||
// This is required to fix submenu title alignment issue with Android ASOP 15+
|
||||
ViewGroup toolBarParent = activity.findViewById(
|
||||
getResourceIdentifier("revanced_toolbar_parent", "id"));
|
||||
ViewGroup dummyToolbar = Utils.getChildViewByResourceName(toolBarParent,"revanced_toolbar");
|
||||
ViewGroup dummyToolbar = Utils.getChildViewByResourceName(toolBarParent, "revanced_toolbar");
|
||||
toolbarLayoutParams = dummyToolbar.getLayoutParams();
|
||||
toolBarParent.removeView(dummyToolbar);
|
||||
|
||||
@@ -149,5 +150,4 @@ public class LicenseActivityHook {
|
||||
|
||||
toolBarParent.addView(toolbar, 0);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -138,6 +138,9 @@ public class ReVancedPreferenceFragment extends AbstractPreferenceFragment {
|
||||
.findViewById(android.R.id.content)
|
||||
.getParent();
|
||||
|
||||
// Fix the system navigation bar color for submenus.
|
||||
ThemeHelper.setNavigationBarColor(preferenceScreenDialog.getWindow());
|
||||
|
||||
// Fix edge-to-edge screen with Android 15 and YT 19.45+
|
||||
// https://developer.android.com/develop/ui/views/layout/edge-to-edge#system-bars-insets
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
|
||||
@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
|
||||
org.gradle.parallel = true
|
||||
android.useAndroidX = true
|
||||
kotlin.code.style = official
|
||||
version = 5.21.0-dev.12
|
||||
version = 5.23.0-dev.4
|
||||
|
||||
@@ -642,14 +642,12 @@ public abstract class app/revanced/patches/shared/misc/settings/preference/BaseP
|
||||
public static final field Companion Lapp/revanced/patches/shared/misc/settings/preference/BasePreference$Companion;
|
||||
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
||||
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getIcon ()Ljava/lang/String;
|
||||
public final fun getKey ()Ljava/lang/String;
|
||||
public final fun getLayout ()Ljava/lang/String;
|
||||
public final fun getSummaryKey ()Ljava/lang/String;
|
||||
public final fun getTag ()Ljava/lang/String;
|
||||
public final fun getTitleKey ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element;
|
||||
}
|
||||
|
||||
@@ -854,6 +852,10 @@ public final class app/revanced/patches/spotify/misc/fix/SpoofSignaturePatchKt {
|
||||
public static final fun getSpoofSignaturePatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/spotify/misc/privacy/SanitizeSharingLinksPatchKt {
|
||||
public static final fun getSanitizeSharingLinksPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/spotify/navbar/PremiumNavbarTabPatchKt {
|
||||
public static final fun getPremiumNavbarTabPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -1536,6 +1538,7 @@ public final class app/revanced/patches/yuka/misc/unlockpremium/UnlockPremiumPat
|
||||
|
||||
public final class app/revanced/util/BytecodeUtilsKt {
|
||||
public static final fun addInstructionsAtControlFlowLabel (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)V
|
||||
public static final fun addInstructionsAtControlFlowLabel (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;[Lapp/revanced/patcher/util/smali/ExternalLabel;)V
|
||||
public static final fun containsLiteralInstruction (Lcom/android/tools/smali/dexlib2/iface/Method;D)Z
|
||||
public static final fun containsLiteralInstruction (Lcom/android/tools/smali/dexlib2/iface/Method;F)Z
|
||||
public static final fun containsLiteralInstruction (Lcom/android/tools/smali/dexlib2/iface/Method;J)Z
|
||||
|
||||
@@ -7,7 +7,7 @@ import app.revanced.patcher.patch.bytecodePatch
|
||||
val disableMandatoryLoginPatch = bytecodePatch(
|
||||
name = "Disable mandatory login",
|
||||
) {
|
||||
compatibleWith("com.adobe.lrmobile")
|
||||
compatibleWith("com.adobe.lrmobile"("10.0.2"))
|
||||
|
||||
execute {
|
||||
isLoggedInFingerprint.method.apply {
|
||||
|
||||
@@ -7,7 +7,7 @@ import app.revanced.patcher.patch.bytecodePatch
|
||||
val unlockPremiumPatch = bytecodePatch(
|
||||
name = "Unlock premium",
|
||||
) {
|
||||
compatibleWith("com.adobe.lrmobile")
|
||||
compatibleWith("com.adobe.lrmobile"("10.0.2"))
|
||||
|
||||
execute {
|
||||
// Set hasPremium = true.
|
||||
|
||||
@@ -51,26 +51,6 @@ abstract class BasePreference(
|
||||
layout?.let { setAttribute("android:layout", layout) }
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
var result = key?.hashCode() ?: 0
|
||||
result = 31 * result + titleKey.hashCode()
|
||||
result = 31 * result + tag.hashCode()
|
||||
return result
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
|
||||
other as BasePreference
|
||||
|
||||
if (key != other.key) return false
|
||||
if (titleKey != other.titleKey) return false
|
||||
if (tag != other.tag) return false
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun Element.addSummary(summaryKey: String, summaryType: SummaryType = SummaryType.DEFAULT) =
|
||||
setAttribute("android:${summaryType.type}", "@string/$summaryKey")
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package app.revanced.patches.spotify.misc.privacy
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.util.literal
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val shareCopyUrlFingerprint = fingerprint {
|
||||
returns("Ljava/lang/Object;")
|
||||
parameters("Ljava/lang/Object;")
|
||||
strings("clipboard", "Spotify Link")
|
||||
custom { method, _ ->
|
||||
method.name == "invokeSuspend"
|
||||
}
|
||||
}
|
||||
|
||||
internal val shareCopyUrlLegacyFingerprint = fingerprint {
|
||||
returns("Ljava/lang/Object;")
|
||||
parameters("Ljava/lang/Object;")
|
||||
strings("clipboard", "createNewSession failed")
|
||||
custom { method, _ ->
|
||||
method.name == "apply"
|
||||
}
|
||||
}
|
||||
|
||||
internal val formatAndroidShareSheetUrlFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
||||
returns("Ljava/lang/String;")
|
||||
parameters("L", "Ljava/lang/String;")
|
||||
literal {
|
||||
'\n'.code.toLong()
|
||||
}
|
||||
}
|
||||
|
||||
internal val formatAndroidShareSheetUrlLegacyFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("Ljava/lang/String;")
|
||||
parameters("Lcom/spotify/share/social/sharedata/ShareData;", "Ljava/lang/String;")
|
||||
literal {
|
||||
'\n'.code.toLong()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package app.revanced.patches.spotify.misc.privacy
|
||||
|
||||
import app.revanced.patcher.Fingerprint
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.spotify.misc.extension.IS_SPOTIFY_LEGACY_APP_TARGET
|
||||
import app.revanced.patches.spotify.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/spotify/misc/privacy/SanitizeSharingLinksPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val sanitizeSharingLinksPatch = bytecodePatch(
|
||||
name = "Sanitize sharing links",
|
||||
description = "Removes the tracking query parameters from links before they are shared.",
|
||||
) {
|
||||
compatibleWith("com.spotify.music")
|
||||
|
||||
dependsOn(sharedExtensionPatch)
|
||||
|
||||
execute {
|
||||
val extensionMethodDescriptor = "$EXTENSION_CLASS_DESCRIPTOR->" +
|
||||
"sanitizeUrl(Ljava/lang/String;)Ljava/lang/String;"
|
||||
|
||||
val copyFingerprint = if (IS_SPOTIFY_LEGACY_APP_TARGET) {
|
||||
shareCopyUrlLegacyFingerprint
|
||||
} else {
|
||||
shareCopyUrlFingerprint
|
||||
}
|
||||
|
||||
copyFingerprint.method.apply {
|
||||
val newPlainTextInvokeIndex = indexOfFirstInstructionOrThrow {
|
||||
getReference<MethodReference>()?.name == "newPlainText"
|
||||
}
|
||||
val register = getInstruction<FiveRegisterInstruction>(newPlainTextInvokeIndex).registerD
|
||||
|
||||
addInstructions(
|
||||
newPlainTextInvokeIndex,
|
||||
"""
|
||||
invoke-static { v$register }, $extensionMethodDescriptor
|
||||
move-result-object v$register
|
||||
"""
|
||||
)
|
||||
}
|
||||
|
||||
// Android native share sheet is used for all other quick share types (X, WhatsApp, etc).
|
||||
val shareUrlParameter : String
|
||||
val shareSheetFingerprint : Fingerprint
|
||||
if (IS_SPOTIFY_LEGACY_APP_TARGET) {
|
||||
shareSheetFingerprint = formatAndroidShareSheetUrlLegacyFingerprint
|
||||
shareUrlParameter = "p2"
|
||||
} else {
|
||||
shareSheetFingerprint = formatAndroidShareSheetUrlFingerprint
|
||||
shareUrlParameter = "p1"
|
||||
}
|
||||
|
||||
shareSheetFingerprint.method.addInstructions(
|
||||
0,
|
||||
"""
|
||||
invoke-static { $shareUrlParameter }, $extensionMethodDescriptor
|
||||
move-result-object $shareUrlParameter
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,8 @@ import app.revanced.patches.tiktok.misc.settings.settingsStatusLoadFingerprint
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/tiktok/feedfilter/FeedItemsFilter;"
|
||||
|
||||
@Suppress("unused")
|
||||
val feedFilterPatch = bytecodePatch(
|
||||
name = "Feed filter",
|
||||
@@ -26,14 +28,15 @@ val feedFilterPatch = bytecodePatch(
|
||||
)
|
||||
|
||||
execute {
|
||||
feedApiServiceLIZFingerprint.method.apply {
|
||||
val returnFeedItemInstruction = instructions.first { it.opcode == Opcode.RETURN_OBJECT }
|
||||
val feedItemsRegister = (returnFeedItemInstruction as OneRegisterInstruction).registerA
|
||||
|
||||
addInstruction(
|
||||
returnFeedItemInstruction.location.index,
|
||||
"invoke-static { v$feedItemsRegister }, " +
|
||||
"Lapp/revanced/extension/tiktok/feedfilter/FeedItemsFilter;->filter(Lcom/ss/android/ugc/aweme/feed/model/FeedItemList;)V",
|
||||
arrayOf(
|
||||
feedApiServiceLIZFingerprint.method to "$EXTENSION_CLASS_DESCRIPTOR->filter(Lcom/ss/android/ugc/aweme/feed/model/FeedItemList;)V",
|
||||
followFeedFingerprint.method to "$EXTENSION_CLASS_DESCRIPTOR->filter(Lcom/ss/android/ugc/aweme/follow/presenter/FollowFeedList;)V"
|
||||
).forEach { (method, filterSignature) ->
|
||||
val returnInstruction = method.instructions.first { it.opcode == Opcode.RETURN_OBJECT }
|
||||
val register = (returnInstruction as OneRegisterInstruction).registerA
|
||||
method.addInstruction(
|
||||
returnInstruction.location.index,
|
||||
"invoke-static { v$register }, $filterSignature"
|
||||
)
|
||||
}
|
||||
|
||||
@@ -42,4 +45,5 @@ val feedFilterPatch = bytecodePatch(
|
||||
"invoke-static {}, Lapp/revanced/extension/tiktok/settings/SettingsStatus;->enableFeedFilter()V",
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,9 +1,22 @@
|
||||
package app.revanced.patches.tiktok.feedfilter
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val feedApiServiceLIZFingerprint = fingerprint {
|
||||
custom { method, classDef ->
|
||||
classDef.endsWith("/FeedApiService;") && method.name == "fetchFeedList"
|
||||
}
|
||||
}
|
||||
|
||||
internal val followFeedFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
||||
returns("Lcom/ss/android/ugc/aweme/follow/presenter/FollowFeedList;")
|
||||
strings("getFollowFeedList")
|
||||
opcodes(
|
||||
Opcode.INVOKE_INTERFACE_RANGE,
|
||||
Opcode.MOVE_RESULT_OBJECT,
|
||||
Opcode.INVOKE_INTERFACE
|
||||
)
|
||||
}
|
||||
@@ -25,11 +25,6 @@ internal val shortsBottomBarContainerFingerprint = fingerprint {
|
||||
literal { bottomBarContainer }
|
||||
}
|
||||
|
||||
internal val createShortsButtonsFingerprint = fingerprint {
|
||||
returns("V")
|
||||
literal { reelPlayerRightCellButtonHeight }
|
||||
}
|
||||
|
||||
internal val renderBottomNavigationBarFingerprint = fingerprint {
|
||||
returns("V")
|
||||
parameters("Ljava/lang/String;")
|
||||
|
||||
@@ -6,7 +6,6 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.booleanOption
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.misc.mapping.get
|
||||
@@ -22,14 +21,14 @@ import app.revanced.patches.youtube.misc.playservice.is_19_41_or_greater
|
||||
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.util.*
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import app.revanced.util.findElementByAttributeValueOrThrow
|
||||
import app.revanced.util.forEachLiteralValueInstruction
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.indexOfFirstLiteralInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
internal var reelPlayerRightCellButtonHeight = -1L
|
||||
private set
|
||||
internal var bottomBarContainer = -1L
|
||||
private set
|
||||
internal var reelPlayerRightPivotV2Size = -1L
|
||||
@@ -137,11 +136,6 @@ private val hideShortsComponentsResourcePatch = resourcePatch {
|
||||
}
|
||||
}
|
||||
|
||||
reelPlayerRightCellButtonHeight = resourceMappings[
|
||||
"dimen",
|
||||
"reel_player_right_cell_button_height",
|
||||
]
|
||||
|
||||
bottomBarContainer = resourceMappings[
|
||||
"id",
|
||||
"bottom_bar_container",
|
||||
@@ -186,15 +180,6 @@ val hideShortsComponentsPatch = bytecodePatch(
|
||||
hideShortsWidgetOption()
|
||||
|
||||
execute {
|
||||
// region Hide the Shorts buttons in older versions of YouTube.
|
||||
|
||||
// Some Shorts buttons are views, hide them by setting their visibility to GONE.
|
||||
ShortsButtons.entries.forEach { button -> button.injectHideCall(createShortsButtonsFingerprint.method) }
|
||||
|
||||
// endregion
|
||||
|
||||
// region Hide the Shorts buttons in newer versions of YouTube.
|
||||
|
||||
addLithoFilter(FILTER_CLASS_DESCRIPTOR)
|
||||
|
||||
forEachLiteralValueInstruction(
|
||||
@@ -211,7 +196,7 @@ val hideShortsComponentsPatch = bytecodePatch(
|
||||
"""
|
||||
invoke-static { v$sizeRegister }, $FILTER_CLASS_DESCRIPTOR->getSoundButtonSize(I)I
|
||||
move-result v$sizeRegister
|
||||
""",
|
||||
"""
|
||||
)
|
||||
}
|
||||
|
||||
@@ -261,31 +246,10 @@ val hideShortsComponentsPatch = bytecodePatch(
|
||||
"""
|
||||
invoke-static { v$heightRegister }, $FILTER_CLASS_DESCRIPTOR->getNavigationBarHeight(I)I
|
||||
move-result v$heightRegister
|
||||
""",
|
||||
"""
|
||||
)
|
||||
}
|
||||
|
||||
// endregion
|
||||
}
|
||||
}
|
||||
|
||||
private enum class ShortsButtons(private val resourceName: String, private val methodName: String) {
|
||||
LIKE("reel_dyn_like", "hideLikeButton"),
|
||||
DISLIKE("reel_dyn_dislike", "hideDislikeButton"),
|
||||
COMMENTS("reel_dyn_comment", "hideShortsCommentsButton"),
|
||||
REMIX("reel_dyn_remix", "hideShortsRemixButton"),
|
||||
SHARE("reel_dyn_share", "hideShortsShareButton"),
|
||||
;
|
||||
|
||||
fun injectHideCall(method: MutableMethod) {
|
||||
val referencedIndex = method.indexOfFirstResourceIdOrThrow(resourceName)
|
||||
|
||||
val setIdIndex = method.indexOfFirstInstructionOrThrow(referencedIndex) {
|
||||
opcode == Opcode.INVOKE_VIRTUAL && getReference<MethodReference>()?.name == "setId"
|
||||
}
|
||||
|
||||
val viewRegister = method.getInstruction<FiveRegisterInstruction>(setIdIndex).registerC
|
||||
|
||||
method.injectHideViewCall(setIdIndex + 1, viewRegister, FILTER_CLASS_DESCRIPTOR, methodName)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,18 +5,6 @@ import app.revanced.util.literal
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val conversionContextFingerprint = fingerprint {
|
||||
returns("Ljava/lang/String;")
|
||||
parameters()
|
||||
strings(
|
||||
", widthConstraint=",
|
||||
", heightConstraint=",
|
||||
", templateLoggerFactory=",
|
||||
", rootDisposableContainer=",
|
||||
"ConversionContext{containerInternal=",
|
||||
)
|
||||
}
|
||||
|
||||
internal val dislikeFingerprint = fingerprint {
|
||||
returns("V")
|
||||
strings("like/dislike")
|
||||
|
||||
@@ -18,6 +18,7 @@ import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
|
||||
import app.revanced.patches.youtube.misc.settings.addSettingPreference
|
||||
import app.revanced.patches.youtube.misc.settings.newIntent
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.patches.youtube.shared.conversionContextFingerprintToString
|
||||
import app.revanced.patches.youtube.shared.rollingNumberTextViewAnimationUpdateFingerprint
|
||||
import app.revanced.patches.youtube.video.videoid.hookPlayerResponseVideoId
|
||||
import app.revanced.patches.youtube.video.videoid.hookVideoId
|
||||
@@ -113,11 +114,11 @@ val returnYouTubeDislikePatch = bytecodePatch(
|
||||
// This hook handles all situations, as it's where the created Spans are stored and later reused.
|
||||
// Find the field name of the conversion context.
|
||||
val conversionContextField = textComponentConstructorFingerprint.originalClassDef.fields.find {
|
||||
it.type == conversionContextFingerprint.originalClassDef.type
|
||||
it.type == conversionContextFingerprintToString.originalClassDef.type
|
||||
} ?: throw PatchException("Could not find conversion context field")
|
||||
|
||||
textComponentLookupFingerprint.match(textComponentConstructorFingerprint.originalClassDef)
|
||||
textComponentLookupFingerprint.method.apply {
|
||||
.method.apply {
|
||||
// Find the instruction for creating the text data object.
|
||||
val textDataClassType = textComponentDataFingerprint.originalClassDef.type
|
||||
|
||||
@@ -160,12 +161,12 @@ val returnYouTubeDislikePatch = bytecodePatch(
|
||||
addInstructionsAtControlFlowLabel(
|
||||
insertIndex,
|
||||
"""
|
||||
# Copy conversion context
|
||||
move-object/from16 v$tempRegister, p0
|
||||
iget-object v$tempRegister, v$tempRegister, $conversionContextField
|
||||
invoke-static { v$tempRegister, v$charSequenceRegister }, $EXTENSION_CLASS_DESCRIPTOR->onLithoTextLoaded(Ljava/lang/Object;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
|
||||
move-result-object v$charSequenceRegister
|
||||
""",
|
||||
# Copy conversion context
|
||||
move-object/from16 v$tempRegister, p0
|
||||
iget-object v$tempRegister, v$tempRegister, $conversionContextField
|
||||
invoke-static { v$tempRegister, v$charSequenceRegister }, $EXTENSION_CLASS_DESCRIPTOR->onLithoTextLoaded(Ljava/lang/Object;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
|
||||
move-result-object v$charSequenceRegister
|
||||
"""
|
||||
)
|
||||
}
|
||||
|
||||
@@ -201,11 +202,9 @@ val returnYouTubeDislikePatch = bytecodePatch(
|
||||
val charSequenceFieldReference =
|
||||
getInstruction<ReferenceInstruction>(dislikesIndex).reference
|
||||
|
||||
val registerCount = implementation!!.registerCount
|
||||
val conversionContextRegister = implementation!!.registerCount - parameters.size + 1
|
||||
|
||||
// This register is being overwritten, so it is free to use.
|
||||
val freeRegister = registerCount - 1
|
||||
val conversionContextRegister = registerCount - parameters.size + 1
|
||||
val freeRegister = findFreeRegister(insertIndex, charSequenceInstanceRegister, conversionContextRegister)
|
||||
|
||||
addInstructions(
|
||||
insertIndex,
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
package app.revanced.patches.youtube.layout.shortsautoplay
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstruction
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.Method
|
||||
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
internal val reelEnumConstructorFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.STATIC, AccessFlags.CONSTRUCTOR)
|
||||
@@ -20,3 +25,27 @@ internal val reelPlaybackRepeatFingerprint = fingerprint {
|
||||
parameters("L")
|
||||
strings("YoutubePlayerState is in throwing an Error.")
|
||||
}
|
||||
|
||||
internal val reelPlaybackFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
parameters("J")
|
||||
custom { method, _ ->
|
||||
indexOfMilliSecondsInstruction(method) >= 0 &&
|
||||
indexOfInitializationInstruction(method) >= 0
|
||||
}
|
||||
}
|
||||
|
||||
private fun indexOfMilliSecondsInstruction(method: Method) =
|
||||
method.indexOfFirstInstruction {
|
||||
getReference<FieldReference>()?.name == "MILLISECONDS"
|
||||
}
|
||||
|
||||
internal fun indexOfInitializationInstruction(method: Method) =
|
||||
method.indexOfFirstInstruction {
|
||||
val reference = getReference<MethodReference>()
|
||||
opcode == Opcode.INVOKE_DIRECT &&
|
||||
reference?.name == "<init>" &&
|
||||
reference.parameterTypes.size == 3 &&
|
||||
reference.parameterTypes.firstOrNull() == "I"
|
||||
}
|
||||
|
||||
@@ -2,21 +2,32 @@ package app.revanced.patches.youtube.layout.shortsautoplay
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.playservice.is_19_34_or_greater
|
||||
import app.revanced.patches.youtube.misc.playservice.is_20_09_or_greater
|
||||
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint
|
||||
import app.revanced.util.findInstructionIndicesReversedOrThrow
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
|
||||
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
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/ShortsAutoplayPatch;"
|
||||
|
||||
@@ -98,5 +109,84 @@ val shortsAutoplayPatch = bytecodePatch(
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// As of YouTube 20.09, Google has removed the code for 'Autoplay' and 'Pause' from this method.
|
||||
// Manually restore the removed 'Autoplay' code.
|
||||
if (is_20_09_or_greater) {
|
||||
// Variable names are only a rough guess of what these methods do.
|
||||
val userActionMethodIndex = indexOfInitializationInstruction(reelPlaybackFingerprint.method)
|
||||
val userActionMethodReference = reelPlaybackFingerprint.method
|
||||
.getInstruction<ReferenceInstruction>(userActionMethodIndex).reference as MethodReference
|
||||
val reelSequenceControllerMethodIndex = reelPlaybackFingerprint.method
|
||||
.indexOfFirstInstructionOrThrow(userActionMethodIndex, Opcode.INVOKE_VIRTUAL)
|
||||
val reelSequenceControllerMethodReference = reelPlaybackFingerprint.method
|
||||
.getInstruction<ReferenceInstruction>(reelSequenceControllerMethodIndex).reference as MethodReference
|
||||
|
||||
reelPlaybackRepeatFingerprint.method.apply {
|
||||
// Find the first call modified by extension code above.
|
||||
val extensionReturnResultIndex = indexOfFirstInstructionOrThrow {
|
||||
opcode == Opcode.INVOKE_STATIC &&
|
||||
getReference<MethodReference>()?.definingClass == EXTENSION_CLASS_DESCRIPTOR
|
||||
} + 1
|
||||
val enumRegister = getInstruction<OneRegisterInstruction>(extensionReturnResultIndex).registerA
|
||||
val getReelSequenceControllerIndex = indexOfFirstInstructionOrThrow(extensionReturnResultIndex) {
|
||||
val reference = getReference<FieldReference>()
|
||||
opcode == Opcode.IGET_OBJECT &&
|
||||
reference?.definingClass == definingClass &&
|
||||
reference.type == reelSequenceControllerMethodReference.definingClass
|
||||
}
|
||||
val getReelSequenceControllerReference =
|
||||
getInstruction<ReferenceInstruction>(getReelSequenceControllerIndex).reference
|
||||
|
||||
// Add a helper method to avoid finding multiple free registers.
|
||||
// If enum is autoplay then method performs autoplay and returns null,
|
||||
// otherwise returns the same enum.
|
||||
val helperClass = definingClass
|
||||
val helperName = "patch_handleAutoPlay"
|
||||
val helperReturnType = "Ljava/lang/Enum;"
|
||||
val helperMethod = ImmutableMethod(
|
||||
helperClass,
|
||||
helperName,
|
||||
listOf(ImmutableMethodParameter("Ljava/lang/Enum;", null, null)),
|
||||
helperReturnType,
|
||||
AccessFlags.PRIVATE.value,
|
||||
null,
|
||||
null,
|
||||
MutableMethodImplementation(7),
|
||||
).toMutable().apply {
|
||||
addInstructionsWithLabels(
|
||||
0,
|
||||
"""
|
||||
invoke-static { p1 }, $EXTENSION_CLASS_DESCRIPTOR->isAutoPlay(Ljava/lang/Enum;)Z
|
||||
move-result v0
|
||||
if-eqz v0, :ignore
|
||||
new-instance v0, ${userActionMethodReference.definingClass}
|
||||
const/4 v1, 0x3
|
||||
const/4 v2, 0x0
|
||||
invoke-direct { v0, v1, v2, v2 }, $userActionMethodReference
|
||||
iget-object v3, p0, $getReelSequenceControllerReference
|
||||
invoke-virtual { v3, v0 }, $reelSequenceControllerMethodReference
|
||||
const/4 v4, 0x0
|
||||
return-object v4
|
||||
:ignore
|
||||
return-object p1
|
||||
"""
|
||||
)
|
||||
}
|
||||
reelPlaybackRepeatFingerprint.classDef.methods.add(helperMethod)
|
||||
|
||||
addInstructionsWithLabels(
|
||||
extensionReturnResultIndex + 1,
|
||||
"""
|
||||
invoke-direct { p0, v$enumRegister }, $helperClass->$helperName(Ljava/lang/Enum;)$helperReturnType
|
||||
move-result-object v$enumRegister
|
||||
if-nez v$enumRegister, :ignore
|
||||
return-void # Autoplay was performed.
|
||||
:ignore
|
||||
nop
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ val spoofAppVersionPatch = bytecodePatch(
|
||||
|
||||
PreferenceScreen.GENERAL_LAYOUT.addPreferences(
|
||||
// Group the switch and list preference together, since General menu is sorted by name
|
||||
// and the preferences can be scattered apart with non English langauges.
|
||||
// and the preferences can be scattered apart with non English languages.
|
||||
PreferenceCategory(
|
||||
titleKey = null,
|
||||
sorting = Sorting.UNSORTED,
|
||||
@@ -122,16 +122,17 @@ val spoofAppVersionPatch = bytecodePatch(
|
||||
)
|
||||
}
|
||||
|
||||
val insertIndex = spoofAppVersionFingerprint.patternMatch!!.startIndex + 1
|
||||
val buildOverrideNameRegister =
|
||||
spoofAppVersionFingerprint.method.getInstruction<OneRegisterInstruction>(insertIndex - 1).registerA
|
||||
spoofAppVersionFingerprint.apply {
|
||||
val startIndex = patternMatch!!.startIndex
|
||||
val buildOverrideNameRegister = method.getInstruction<OneRegisterInstruction>(startIndex).registerA
|
||||
|
||||
spoofAppVersionFingerprint.method.addInstructions(
|
||||
insertIndex,
|
||||
"""
|
||||
invoke-static {v$buildOverrideNameRegister}, $EXTENSION_CLASS_DESCRIPTOR->getYouTubeVersionOverride(Ljava/lang/String;)Ljava/lang/String;
|
||||
move-result-object v$buildOverrideNameRegister
|
||||
"""
|
||||
)
|
||||
method.addInstructions(
|
||||
startIndex + 1,
|
||||
"""
|
||||
invoke-static {v$buildOverrideNameRegister}, $EXTENSION_CLASS_DESCRIPTOR->getYouTubeVersionOverride(Ljava/lang/String;)Ljava/lang/String;
|
||||
move-result-object v$buildOverrideNameRegister
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
package app.revanced.patches.youtube.misc.gms
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.misc.mapping.get
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.indexOfFirstLiteralInstructionOrThrow
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/AccountCredentialsInvalidTextPatch;"
|
||||
|
||||
internal var ic_offline_no_content_upside_down = -1L
|
||||
private set
|
||||
internal var offline_no_content_body_text_not_offline_eligible = -1L
|
||||
private set
|
||||
|
||||
private val accountCredentialsInvalidTextResourcePatch = resourcePatch {
|
||||
execute {
|
||||
ic_offline_no_content_upside_down = resourceMappings[
|
||||
"drawable",
|
||||
"ic_offline_no_content_upside_down"
|
||||
]
|
||||
|
||||
offline_no_content_body_text_not_offline_eligible = resourceMappings[
|
||||
"string",
|
||||
"offline_no_content_body_text_not_offline_eligible"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
internal val accountCredentialsInvalidTextPatch = bytecodePatch {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
accountCredentialsInvalidTextResourcePatch,
|
||||
addResourcesPatch
|
||||
)
|
||||
|
||||
execute {
|
||||
addResources("youtube", "misc.gms.accountCredentialsInvalidTextPatch")
|
||||
|
||||
// If the user recently changed their account password,
|
||||
// the app can show "You're offline. Check your internet connection."
|
||||
// even when the internet is available. For this situation
|
||||
// YouTube + MicroG shows an offline error message.
|
||||
//
|
||||
// Change the error text to inform the user to uninstall and reinstall MicroG.
|
||||
// The user can also fix this by deleting the MicroG account but
|
||||
// MicroG accounts look almost identical to Google device accounts
|
||||
// and it's more foolproof to instead uninstall/reinstall.
|
||||
arrayOf(
|
||||
specificNetworkErrorViewControllerFingerprint,
|
||||
loadingFrameLayoutControllerFingerprint
|
||||
).forEach { fingerprint ->
|
||||
fingerprint.method.apply {
|
||||
val resourceIndex = indexOfFirstLiteralInstructionOrThrow(
|
||||
offline_no_content_body_text_not_offline_eligible
|
||||
)
|
||||
val getStringIndex = indexOfFirstInstructionOrThrow(resourceIndex) {
|
||||
val reference = getReference<MethodReference>()
|
||||
reference?.name == "getString"
|
||||
}
|
||||
val register = getInstruction<OneRegisterInstruction>(getStringIndex + 1).registerA
|
||||
|
||||
addInstructions(
|
||||
getStringIndex + 2,
|
||||
"""
|
||||
invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->getOfflineNetworkErrorString(Ljava/lang/String;)Ljava/lang/String;
|
||||
move-result-object v$register
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package app.revanced.patches.youtube.misc.gms
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.util.containsLiteralInstruction
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val specificNetworkErrorViewControllerFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
parameters()
|
||||
custom { method, _ ->
|
||||
method.containsLiteralInstruction(ic_offline_no_content_upside_down)
|
||||
&& method.containsLiteralInstruction(offline_no_content_body_text_not_offline_eligible)
|
||||
}
|
||||
}
|
||||
|
||||
// It's not clear if this second class is ever used and it may be dead code,
|
||||
// but it the layout image/text is identical to the network error fingerprint above.
|
||||
internal val loadingFrameLayoutControllerFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
parameters("L")
|
||||
custom { method, _ ->
|
||||
method.containsLiteralInstruction(ic_offline_no_content_upside_down)
|
||||
&& method.containsLiteralInstruction(offline_no_content_body_text_not_offline_eligible)
|
||||
}
|
||||
}
|
||||
@@ -68,5 +68,5 @@ private fun gmsCoreSupportResourcePatch(
|
||||
)
|
||||
},
|
||||
) {
|
||||
dependsOn(settingsPatch, addResourcesPatch)
|
||||
dependsOn(settingsPatch, addResourcesPatch, accountCredentialsInvalidTextPatch)
|
||||
}
|
||||
|
||||
@@ -5,10 +5,6 @@ import app.revanced.util.literal
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
/**
|
||||
* In 19.17 and earlier, this resolves to the same method as [readComponentIdentifierFingerprint].
|
||||
* In 19.18+ this resolves to a different method.
|
||||
*/
|
||||
internal val componentContextParserFingerprint = fingerprint {
|
||||
strings(
|
||||
"TreeNode result must be set.",
|
||||
@@ -17,11 +13,21 @@ internal val componentContextParserFingerprint = fingerprint {
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves to the class found in [componentContextParserFingerprint].
|
||||
* When patching 19.16 this fingerprint matches the same method as [componentContextParserFingerprint].
|
||||
*/
|
||||
internal val componentContextSubParserFingerprint = fingerprint {
|
||||
strings(
|
||||
"Number of bits must be positive"
|
||||
)
|
||||
}
|
||||
|
||||
internal val lithoFilterFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.STATIC, AccessFlags.CONSTRUCTOR)
|
||||
returns("V")
|
||||
custom { _, classDef ->
|
||||
classDef.endsWith("LithoFilterPatch;")
|
||||
classDef.endsWith("/LithoFilterPatch;")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,14 +43,6 @@ internal val protobufBufferReferenceFingerprint = fingerprint {
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* In 19.17 and earlier, this resolves to the same method as [componentContextParserFingerprint].
|
||||
* In 19.18+ this resolves to a different method.
|
||||
*/
|
||||
internal val readComponentIdentifierFingerprint = fingerprint {
|
||||
strings("Number of bits must be positive")
|
||||
}
|
||||
|
||||
internal val emptyComponentFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.CONSTRUCTOR)
|
||||
parameters()
|
||||
|
||||
@@ -4,25 +4,25 @@ package app.revanced.patches.youtube.misc.litho.filter
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.removeInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.util.smali.ExternalLabel
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.playservice.is_19_18_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
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
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
|
||||
|
||||
@@ -53,42 +53,33 @@ val lithoFilterPatch = bytecodePatch(
|
||||
* The buffer is a large byte array that represents the component tree.
|
||||
* This byte array is searched for strings that indicate the current component.
|
||||
*
|
||||
* The following pseudocode shows how the patch works:
|
||||
* All modifications done here must allow all the original code to still execute
|
||||
* even when filtering, otherwise memory leaks or poor app performance may occur.
|
||||
*
|
||||
* The following pseudocode shows how this patch works:
|
||||
*
|
||||
* class SomeOtherClass {
|
||||
* // Called before ComponentContextParser.parseBytesToComponentContext method.
|
||||
* // Called before ComponentContextParser.parseComponent() method.
|
||||
* public void someOtherMethod(ByteBuffer byteBuffer) {
|
||||
* ExtensionClass.setProtoBuffer(byteBuffer); // Inserted by this patch.
|
||||
* ...
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* When patching 19.17 and earlier:
|
||||
*
|
||||
* class ComponentContextParser {
|
||||
* public ComponentContext ReadComponentIdentifierFingerprint(...) {
|
||||
* public Component parseComponent() {
|
||||
* ...
|
||||
* if (extensionClass.filter(identifier, pathBuilder)); // Inserted by this patch.
|
||||
*
|
||||
* // 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.
|
||||
* return emptyComponent;
|
||||
* ...
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* When patching 19.18 and later:
|
||||
*
|
||||
* class ComponentContextParser {
|
||||
* public ComponentContext parseBytesToComponentContext(...) {
|
||||
* ...
|
||||
* if (ReadComponentIdentifierFingerprint() == null); // Inserted by this patch.
|
||||
* return emptyComponent;
|
||||
* ...
|
||||
* }
|
||||
*
|
||||
* public ComponentIdentifierObj readComponentIdentifier(...) {
|
||||
* ...
|
||||
* if (extensionClass.filter(identifier, pathBuilder)); // Inserted by this patch.
|
||||
* return null;
|
||||
* ...
|
||||
* }
|
||||
* return originalUnpatchedComponent; // Original code.
|
||||
* }
|
||||
* }
|
||||
*/
|
||||
@@ -103,7 +94,7 @@ val lithoFilterPatch = bytecodePatch(
|
||||
2,
|
||||
"""
|
||||
new-instance v1, $classDescriptor
|
||||
invoke-direct {v1}, $classDescriptor-><init>()V
|
||||
invoke-direct { v1 }, $classDescriptor-><init>()V
|
||||
const/16 v2, ${filterCount++}
|
||||
aput-object v1, v0, v2
|
||||
""",
|
||||
@@ -115,110 +106,105 @@ val lithoFilterPatch = bytecodePatch(
|
||||
|
||||
protobufBufferReferenceFingerprint.method.addInstruction(
|
||||
0,
|
||||
" invoke-static { p2 }, $EXTENSION_CLASS_DESCRIPTOR->setProtoBuffer(Ljava/nio/ByteBuffer;)V",
|
||||
"invoke-static { p2 }, $EXTENSION_CLASS_DESCRIPTOR->setProtoBuffer(Ljava/nio/ByteBuffer;)V",
|
||||
)
|
||||
|
||||
// endregion
|
||||
|
||||
// region Hook the method that parses bytes into a ComponentContext.
|
||||
|
||||
val readComponentMethod = readComponentIdentifierFingerprint.originalMethod
|
||||
// Get the only static method in the class.
|
||||
val builderMethodDescriptor = emptyComponentFingerprint.classDef.methods.first { method ->
|
||||
AccessFlags.STATIC.isSet(method.accessFlags)
|
||||
}
|
||||
// Only one field.
|
||||
val emptyComponentField = classBy { classDef ->
|
||||
builderMethodDescriptor.returnType == classDef.type
|
||||
}!!.immutableClass.fields.single()
|
||||
|
||||
// Returns an empty component instead of the original component.
|
||||
fun createReturnEmptyComponentInstructions(register: Int): String =
|
||||
"""
|
||||
move-object/from16 v$register, p1
|
||||
invoke-static { v$register }, $builderMethodDescriptor
|
||||
move-result-object v$register
|
||||
iget-object v$register, v$register, $emptyComponentField
|
||||
return-object v$register
|
||||
"""
|
||||
|
||||
// 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 {
|
||||
// 19.18 and later require patching 2 methods instead of one.
|
||||
// Otherwise the modifications done here are the same for all targets.
|
||||
if (is_19_18_or_greater) {
|
||||
// Get the method name of the ReadComponentIdentifierFingerprint call.
|
||||
val readComponentMethodCallIndex = indexOfFirstInstructionOrThrow {
|
||||
val reference = getReference<MethodReference>()
|
||||
reference?.definingClass == readComponentMethod.definingClass &&
|
||||
reference.name == readComponentMethod.name
|
||||
val conversionContextClass = conversionContextFingerprintToString.originalClassDef
|
||||
|
||||
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;"
|
||||
}
|
||||
|
||||
// Result of read component, and also a free register.
|
||||
val register = getInstruction<OneRegisterInstruction>(readComponentMethodCallIndex + 1).registerA
|
||||
|
||||
// Insert after 'move-result-object'
|
||||
val insertHookIndex = readComponentMethodCallIndex + 2
|
||||
|
||||
// Return an EmptyComponent instead of the original component if the filterState method returns true.
|
||||
addInstructionsWithLabels(
|
||||
insertHookIndex,
|
||||
"""
|
||||
if-nez v$register, :unfiltered
|
||||
|
||||
# Component was filtered in ReadComponentIdentifierFingerprint hook
|
||||
${createReturnEmptyComponentInstructions(register)}
|
||||
""",
|
||||
ExternalLabel("unfiltered", getInstruction(insertHookIndex)),
|
||||
)
|
||||
it.method.getInstruction<ReferenceInstruction>(index).getReference<FieldReference>()
|
||||
}
|
||||
}
|
||||
|
||||
// endregion
|
||||
// StringBuilder field for the litho path.
|
||||
val conversionContextPathBuilderField = conversionContextClass.fields
|
||||
.single { field -> field.type == "Ljava/lang/StringBuilder;" }
|
||||
|
||||
// region Read component then store the result.
|
||||
val conversionContextResultIndex = indexOfFirstInstructionOrThrow {
|
||||
val reference = getReference<MethodReference>()
|
||||
reference?.returnType == conversionContextClass.type
|
||||
} + 1
|
||||
|
||||
readComponentIdentifierFingerprint.method.apply {
|
||||
val insertHookIndex = indexOfFirstInstructionOrThrow {
|
||||
opcode == Opcode.IPUT_OBJECT &&
|
||||
getReference<FieldReference>()?.type == "Ljava/lang/StringBuilder;"
|
||||
}
|
||||
val stringBuilderRegister = getInstruction<TwoRegisterInstruction>(insertHookIndex).registerA
|
||||
|
||||
// Identifier is saved to a field just before the string builder.
|
||||
val identifierRegister = getInstruction<TwoRegisterInstruction>(
|
||||
indexOfFirstInstructionReversedOrThrow(insertHookIndex) {
|
||||
opcode == Opcode.IPUT_OBJECT &&
|
||||
getReference<FieldReference>()?.type == "Ljava/lang/String;"
|
||||
},
|
||||
val conversionContextResultRegister = getInstruction<OneRegisterInstruction>(
|
||||
conversionContextResultIndex
|
||||
).registerA
|
||||
|
||||
val freeRegister = findFreeRegister(insertHookIndex, identifierRegister, stringBuilderRegister)
|
||||
val invokeFilterInstructions = """
|
||||
invoke-static { v$identifierRegister, v$stringBuilderRegister }, $EXTENSION_CLASS_DESCRIPTOR->filter(Ljava/lang/String;Ljava/lang/StringBuilder;)Z
|
||||
move-result v$freeRegister
|
||||
if-eqz v$freeRegister, :unfiltered
|
||||
"""
|
||||
|
||||
addInstructionsWithLabels(
|
||||
insertHookIndex,
|
||||
if (is_19_18_or_greater) {
|
||||
"""
|
||||
$invokeFilterInstructions
|
||||
|
||||
# Return null, and the ComponentContextParserFingerprint hook
|
||||
# handles returning an empty component.
|
||||
const/4 v$freeRegister, 0x0
|
||||
return-object v$freeRegister
|
||||
"""
|
||||
} else {
|
||||
"""
|
||||
$invokeFilterInstructions
|
||||
|
||||
${createReturnEmptyComponentInstructions(freeRegister)}
|
||||
"""
|
||||
},
|
||||
ExternalLabel("unfiltered", getInstruction(insertHookIndex)),
|
||||
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 {
|
||||
method -> AccessFlags.STATIC.isSet(method.accessFlags)
|
||||
}
|
||||
// Only one field.
|
||||
val emptyComponentField = classBy { classDef ->
|
||||
classDef.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
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
@@ -4,6 +4,21 @@ import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val conversionContextFingerprintToString = fingerprint {
|
||||
parameters()
|
||||
strings(
|
||||
"ConversionContext{containerInternal=",
|
||||
", widthConstraint=",
|
||||
", heightConstraint=",
|
||||
", templateLoggerFactory=",
|
||||
", rootDisposableContainer=",
|
||||
", identifierProperty="
|
||||
)
|
||||
custom { method, _ ->
|
||||
method.name == "toString"
|
||||
}
|
||||
}
|
||||
|
||||
internal val autoRepeatFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
|
||||
@@ -11,6 +11,7 @@ import app.revanced.patcher.patch.BytecodePatchContext
|
||||
import app.revanced.patcher.patch.PatchException
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableClass
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patcher.util.smali.ExternalLabel
|
||||
import app.revanced.patches.shared.misc.mapping.get
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
||||
@@ -207,6 +208,26 @@ fun MutableMethod.injectHideViewCall(
|
||||
"invoke-static { v$viewRegister }, $classDescriptor->$targetMethod(Landroid/view/View;)V",
|
||||
)
|
||||
|
||||
|
||||
/**
|
||||
* Inserts instructions at a given index, using the existing control flow label at that index.
|
||||
* Inserted instructions can have it's own control flow labels as well.
|
||||
*
|
||||
* Effectively this changes the code from:
|
||||
* :label
|
||||
* (original code)
|
||||
*
|
||||
* Into:
|
||||
* :label
|
||||
* (patch code)
|
||||
* (original code)
|
||||
*/
|
||||
// TODO: delete this on next major version bump.
|
||||
fun MutableMethod.addInstructionsAtControlFlowLabel(
|
||||
insertIndex: Int,
|
||||
instructions: String
|
||||
) = addInstructionsAtControlFlowLabel(insertIndex, instructions, *arrayOf<ExternalLabel>())
|
||||
|
||||
/**
|
||||
* Inserts instructions at a given index, using the existing control flow label at that index.
|
||||
* Inserted instructions can have it's own control flow labels as well.
|
||||
@@ -223,13 +244,14 @@ fun MutableMethod.injectHideViewCall(
|
||||
fun MutableMethod.addInstructionsAtControlFlowLabel(
|
||||
insertIndex: Int,
|
||||
instructions: String,
|
||||
vararg externalLabels: ExternalLabel
|
||||
) {
|
||||
// Duplicate original instruction and add to +1 index.
|
||||
addInstruction(insertIndex + 1, getInstruction(insertIndex))
|
||||
|
||||
// Add patch code at same index as duplicated instruction,
|
||||
// so it uses the original instruction control flow label.
|
||||
addInstructionsWithLabels(insertIndex + 1, instructions)
|
||||
addInstructionsWithLabels(insertIndex + 1, instructions, *externalLabels)
|
||||
|
||||
// Remove original non duplicated instruction.
|
||||
removeInstruction(insertIndex)
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -522,6 +522,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_thanks_button_title">إخفاء شكرًا</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">تم إخفاء زر شكرًا</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">يتم عرض زر شكرًا</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">إخفاء \"Ask\"</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">تم إخفاء زر \"Ask\"</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">يتم عرض زر \"Ask\"</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">إخفاء المقطع</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">تم إخفاء زر إنشاء مقطع</string>
|
||||
@@ -1306,6 +1311,9 @@ Second \"item\" text"</string>
|
||||
<string name="microg_settings_title">إعدادات GmsCore</string>
|
||||
<string name="microg_settings_summary">إعدادات لـ GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">إذا قمت مؤخرًا بتغيير تفاصيل تسجيل الدخول إلى حسابك، فأزل تثبيت MicroG ثم أعد تثبيته.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">تجاوز إعادة توجيه URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">تم تجاوز إعادة توجيه عنوان URL</string>
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -197,6 +199,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -522,6 +522,11 @@ Ekranın sağ tərəfində düzünə sürüşdürərək səs səviyyəsini tənz
|
||||
<string name="revanced_hide_thanks_button_title">\"Təşəkkürlər\"i gizlət</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Təşəkkür düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Təşəkkür düyməsi göstərilir</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Soruş\'u Gizlət</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Soruş düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">\"Soruş\" düyməsi göstərilir</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Kəsmə/ gizlət</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Kəsmə düyməsi gizlidir</string>
|
||||
@@ -1250,7 +1255,7 @@ Bunu aktivləşdirmə, bəzi regionlarda əngəllənib silinən şəkilləri dü
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow & Orijinal miniatürlər</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow & Kadr çəkilişlər</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_4">Kadr çəkilişləri</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow YouTube videoları üçün izdiham mənbəli miniatürlər təqdim edir. Bu miniatürlər YouTube tərəfindən təqdim edilənlərdən dəfələrlə daha uyğundur.
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow YouTube videoları üçün çox mənbəli miniatürlər təqdim edir. Bu miniatürlər YouTube tərəfindən təqdim edilənlərdən dəfələrlə daha uyğundur.
|
||||
|
||||
Aktivləşdirilərsə, video URL-lər API alıcısına göndəriləcək və başqa məlumat göndərilməyəcək. Videonun DeArrow miniatürləri yoxdursa, orijinal və ya hələ də çəkilişlər göstərilir.
|
||||
|
||||
@@ -1305,6 +1310,9 @@ Bunu aktivləşdirmə daha yüksək video keyfiyyətləri əngəlin silə bilər
|
||||
<string name="microg_settings_title">GmsCore Tənzimləmələri</string>
|
||||
<string name="microg_settings_summary">GmsCore üçün Tənzimləmələr</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Bu yaxınlarda hesabınıza giriş məlumatlarınızı dəyişmisinizsə, MicroG-ni silin və təkrar quraşdırın.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">URL yönləndirmələrini ötür</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">URL yönləndirmələri ötürülür</string>
|
||||
|
||||
@@ -522,6 +522,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_thanks_button_title">Схаваць Дзякуй</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Кнопка падзякі схавана</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Паказана кнопка падзякі</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Схаваць кнопку «Запытацца»</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Кнопка «Запытацца» схаваная</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Кнопка «Запытацца» паказаная</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Схаваць кліп</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Кнопка кліпа схавана</string>
|
||||
@@ -1307,6 +1312,9 @@ Second \"item\" text"</string>
|
||||
<string name="microg_settings_title">Налады GmsCore</string>
|
||||
<string name="microg_settings_summary">Налады для GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Калі вы нядаўна змянілі даныя для ўваходу ў свой уліковы запіс, выдаліце і пераўсталюйце MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Абыход URL-перанакіраванняў</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Перанакіраванне URL абыходзіць</string>
|
||||
|
||||
@@ -522,6 +522,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_thanks_button_title">Бутон за благодарност</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Бутона за благодарност е скрит</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Бутона за благодарност се показва</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Скриване на \"Попитай\"</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Бутонът \"Попитай\" е скрит</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Бутонът \"Попитай\" е показан</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Бутон за създаване на клип</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Бутона за клип е скрит</string>
|
||||
@@ -1306,6 +1311,9 @@ Second \"item\" text"</string>
|
||||
<string name="microg_settings_title">GmsCore Настройки</string>
|
||||
<string name="microg_settings_summary">Настройки на GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Ако наскоро сте променили данните си за вход в профила, деинсталирайте и инсталирайте отново MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Заобикаляне на URL пренасочване</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">URL пренасочванията се заобикалят</string>
|
||||
|
||||
@@ -522,6 +522,11 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_thanks_button_title">ধন্যবাদ লুকান</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">ধন্যবাদ বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">ধন্যবাদ বোতাম দেখানো হয়</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">জিজ্ঞাসা লুকান</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">জিজ্ঞাসা বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">জিজ্ঞাসা বোতাম দেখানো হয়েছে</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">ক্লিপ লুকান</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">ক্লিপ বোতাম লুকিয়ে রয়েছে</string>
|
||||
@@ -1306,6 +1311,9 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট
|
||||
<string name="microg_settings_title">GmsCore সেটিং</string>
|
||||
<string name="microg_settings_summary">GmsCore এর জন্য সেটিং</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">আপনি যদি সম্প্রতি আপনার অ্যাকাউন্ট লগইন বিশদ পরিবর্তন করে থাকেন, তবে MicroG আনইনস্টল করুন এবং পুনরায় ইনস্টল করুন।</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">URL পুনঃনির্দেশ বাইপাস করুন</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">URL পুনঃনির্দেশ বাইপাস করছে</string>
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -522,6 +522,11 @@ Ajusteu el volum lliscant verticalment a la part dreta de la pantalla"</string>
|
||||
<string name="revanced_hide_thanks_button_title">Amaga Gràcies</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">S\'ha amagat el botó de gràcies</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">El botó Gràcies es mostra</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Amaga la sol·licitud</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">El botó de sol·licitud està amagat</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">El botó de sol·licitud es mostra</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Amaga Clip</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">El botó Clip s\'amaga</string>
|
||||
@@ -1305,6 +1310,9 @@ Si actives aquesta opció, es poden desbloquejar qualitats de vídeo més altes"
|
||||
<string name="microg_settings_title">Configuració de GmsCore</string>
|
||||
<string name="microg_settings_summary">Configuració de GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Si recentment heu canviat les dades d\'inici de sessió del vostre compte, desinstal·leu i torneu a instal·lar MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Omet les redireccions d\'URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Les redireccions d\'URL s\'ometent</string>
|
||||
|
||||
@@ -522,6 +522,11 @@ Hlasitost se upravuje svislým přejetím po pravé straně obrazovky"</string>
|
||||
<string name="revanced_hide_thanks_button_title">Skrýt Poděkování</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Tlačítko Poděkování je skryto</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Tlačítko Poděkování je zobrazeno</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Skrýt Zeptat se</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Tlačítko Zeptat se je skryté</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Tlačítko Zeptat se je zobrazeno</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Skrýt Klip</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Tlačítko Klip je skryto</string>
|
||||
@@ -1305,6 +1310,9 @@ Povolením této funkce lze odemknout vyšší kvality videa"</string>
|
||||
<string name="microg_settings_title">Nastavení GmsCore</string>
|
||||
<string name="microg_settings_summary">Nastavení pro GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Pokud jste nedávno změnili přihlašovací údaje svého účtu, odinstalujte a znovu nainstalujte MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Obcházet přesměrování URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Přesměrování URL jsou obcházena</string>
|
||||
|
||||
@@ -485,6 +485,11 @@ Juster lydstyrken ved at swipe lodret i højre side af skærmen"</string>
|
||||
<string name="revanced_hide_thanks_button_title">Skjul Tak</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Tak knappen er skjult</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Tak knappen er vist</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Skjul Spørg</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Spørg-knappen er skjult</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Spørg-knappen vises</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Skjul klip</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Klip knappen er skjult</string>
|
||||
@@ -1247,6 +1252,9 @@ Aktivering af dette kan låse op for højere videokvalitet"</string>
|
||||
<string name="microg_settings_title">GmsCore Indstillinger</string>
|
||||
<string name="microg_settings_summary">Indstillinger for GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Hvis du for nylig har ændret dine kontooplysninger, skal du afinstallere og geninstallere MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Bypass URL omdirigeringer</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">URL omdirigeringer er omgået</string>
|
||||
|
||||
@@ -515,6 +515,11 @@ Passen Sie die Helligkeit an, indem Sie auf der linken Seite des Bildschirms ver
|
||||
<string name="revanced_hide_thanks_button_title">Dank ausblenden</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Dankeschön-Taste ist ausgeblendet</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Dankeschön Button wird angezeigt</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Ask ausblenden</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Ask-Button ist ausgeblendet</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Ask-Button wird angezeigt</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Clip ausblenden</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Clip-Button ist ausgeblendet</string>
|
||||
@@ -1299,6 +1304,9 @@ Durch Aktivieren dieser Option können höhere Videoqualitäten freigeschaltet w
|
||||
<string name="microg_settings_title">GmsCore Einstellungen</string>
|
||||
<string name="microg_settings_summary">Einstellungen für GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Wenn Sie kürzlich Ihre Kontoanmeldedaten geändert haben, deinstallieren Sie MicroG und installieren Sie es erneut.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">URL-Weiterleitungen umgehen</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">URL-Umleitungen werden umgangen</string>
|
||||
|
||||
@@ -86,7 +86,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_settings_screen_03_feed_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_07_seekbar_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_11_misc_title">Διάφορα</string>
|
||||
<string name="revanced_settings_screen_12_video_title">Βίντεο</string>
|
||||
@@ -524,6 +524,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_thanks_button_title">Κουμπί «Σας ευχαριστούμε»</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Εμφανίζεται</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Κουμπί «Ερώτηση»</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Εμφανίζεται</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Κουμπί «Κλιπ»</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Κρυμμένο</string>
|
||||
@@ -1305,6 +1310,9 @@ Second \"item\" text"</string>
|
||||
<string name="microg_settings_title">Ρυθμίσεις GmsCore</string>
|
||||
<string name="microg_settings_summary">Ρυθμίσεις για το MicroG GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Εάν αλλάξατε πρόσφατα τα στοιχεία σύνδεσης του λογαριασμού σας, απεγκαταστήστε και εγκαταστήστε ξανά το MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Παράκαμψη ανακατευθύνσεων συνδέσμων</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Οι ανακατευθύνσεις συνδέσμων URL παρακάμπτονται</string>
|
||||
|
||||
@@ -519,6 +519,11 @@ Ajusta el volumen deslizando verticalmente en el lado derecho de la pantalla"</s
|
||||
<string name="revanced_hide_thanks_button_title">Ocultar Gracias</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">El botón de gracias está oculto</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Se muestra el botón de gracias</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Ocultar pregunta</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">El botón \"Preguntar\" está oculto</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Se muestra el botón \"Preguntar\"</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Ocultar Recortar</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">El botón del recortar está oculto</string>
|
||||
@@ -1294,6 +1299,9 @@ Habilitar esto puede desbloquear calidades de vídeo más altas"</string>
|
||||
<string name="microg_settings_title">Ajustes de GmsCore</string>
|
||||
<string name="microg_settings_summary">Configuración de GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Si has cambiado recientemente los datos de inicio de sesión de tu cuenta, desinstala y vuelve a instalar MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Evitar redirecciones de URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Se omiten las redirecciones de URL</string>
|
||||
|
||||
@@ -522,6 +522,11 @@ Helitugevuse reguleerimiseks pühkige ekraani paremal küljel vertikaalselt"</st
|
||||
<string name="revanced_hide_thanks_button_title">Peida Tänan</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Tänan nupp on peidetud</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Tänan nupp on nähtav</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Peida küsi</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Küsi nupp on peidetud</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Küsi nupp on nähtav</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Peida Lõik</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Lõigu nupp on peidetud</string>
|
||||
@@ -1306,6 +1311,9 @@ Selle lubamine võib avada kõrgema video kvaliteedi"</string>
|
||||
<string name="microg_settings_title">GmsCore seaded</string>
|
||||
<string name="microg_settings_summary">GmsCore seaded</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Kui sa hiljuti muutsid oma konto sisselogimisandmeid, siis eemalda ja installeeri MicroG uuesti.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Ümbersuunamiste URL-id mööda minna</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Ümbersuunamiste URL-id mööda minnakse</string>
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -104,6 +104,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -215,6 +217,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -460,15 +460,29 @@ Säädä äänenvoimakkuutta pyyhkäisemällä pystysuoraan näytön oikealta pu
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">Automaattinen kirkkaus otetaan käyttöön pyyhkäisemällä alhaisimpaan arvoon</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">Pienimpään arvoon alas pyyhkäiseminen ei ota käyttöön automaattista kirkkautta</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">Automaattinen</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">Pyyhkäisyikkunan aikakatkaisu</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">Pyyhkäisypeittokuvan aikakatkaisu</string>
|
||||
<string name="revanced_swipe_overlay_timeout_summary">Kuinka monta millisekuntia ikkuna on näkyvissä</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_title">Pyyhkäisypeittokuvan taustan läpinäkymättömyys</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_summary">Läpinäkymättömyysarvo 0–100 välillä</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_invalid_toast">Pyyhkäisyn läpinäkymättömyyden on oltava välillä 0–100</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_invalid_toast">Pyyhkäisypeittokuvan läpinäkymättömyyden tulee olla 0–100 välillä</string>
|
||||
<string name="revanced_swipe_overlay_progress_color_title">Pyyhkäisypeittokuvan edistymispalkin väri</string>
|
||||
<string name="revanced_swipe_overlay_progress_color_summary">Äänenvoimakkuuden ja kirkkauden säätimien edistymispalkin väri</string>
|
||||
<string name="revanced_swipe_overlay_progress_color_invalid_toast">Virheellinen edistymispalkin väri</string>
|
||||
<string name="revanced_swipe_text_overlay_size_title">Pyyhkäisypeittokuvan tekstin koko</string>
|
||||
<string name="revanced_swipe_text_overlay_size_summary">Pyyhkäisypeittokuvan tekstin koko 1–30 välillä</string>
|
||||
<string name="revanced_swipe_text_overlay_size_invalid_toast">Tekstin koon tulee olla 1–30 välillä</string>
|
||||
<string name="revanced_swipe_threshold_title">Pyyhkäisyn kynnysraja</string>
|
||||
<string name="revanced_swipe_threshold_summary">Pyyhkäisyä varten tarvittavan kynnyksen määrä</string>
|
||||
<string name="revanced_swipe_volume_sensitivity_title">Äänenvoimakkuuden pyyhkäisyn herkkyys</string>
|
||||
<string name="revanced_swipe_volume_sensitivity_summary">Kuinka paljon äänenvoimakkuus muuttuu pyyhkäisyä kohden</string>
|
||||
<string name="revanced_swipe_overlay_style_title">Pyyhkäisypeittokuvan tyyli</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_1">Vaakasuuntainen peittokuva</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_2">Vaakasuuntainen peittokuva (minimaalinen – ylhäällä)</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_3">Vaakasuuntainen peittokuva (minimaalinen – keskellä)</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_4">Pyöreä peittokuva</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_5">Pyöreä peittokuva (minimaalinen)</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_6">Pystysuuntainen peittokuva</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_7">Pystysuuntainen peittokuva (minimaalinen)</string>
|
||||
<string name="revanced_swipe_change_video_title">Ota videon vaihto pyyhkäisemällä käyttöön</string>
|
||||
<string name="revanced_swipe_change_video_summary_on">Pyyhkäisemällä kokoruututilassa siirrytään seuraavaan/edelliseen videoon</string>
|
||||
<string name="revanced_swipe_change_video_summary_off">Pyyhkäisemällä kokoruututilassa ei siirrytä seuraavaan/edelliseen videoon</string>
|
||||
@@ -508,6 +522,8 @@ Säädä äänenvoimakkuutta pyyhkäisemällä pystysuoraan näytön oikealta pu
|
||||
<string name="revanced_hide_thanks_button_title">Piilota Kiitos</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Kiitos-painike on piilotettu</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Kiitos-painike näytetään</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Piilota Klippi</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Klippi-painike on piilotettu</string>
|
||||
@@ -800,7 +816,7 @@ Asetukset → Toisto → Toista seuraava video automaattisesti"</string>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
<string name="revanced_player_overlay_opacity_title">Soittimen peittokuvan läpinäkymättömyys</string>
|
||||
<string name="revanced_player_overlay_opacity_summary">Läpinäkymättömyysarvo välillä 0–100, jossa 0 on läpinäkyvä</string>
|
||||
<string name="revanced_player_overlay_opacity_invalid_toast">Soittimen peittokuvan läpinäkymättömyyden on oltava välillä 0–100</string>
|
||||
<string name="revanced_player_overlay_opacity_invalid_toast">Soittimen peittokuvan läpinäkymättömyyden tulee olla 0–100 välillä</string>
|
||||
</patch>
|
||||
<patch id="layout.returnyoutubedislike.returnYouTubeDislikePatch">
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
@@ -901,7 +917,7 @@ Tämä ominaisuus toimii parhaiten, kun videon laatu on 720p tai alhaisempi ja k
|
||||
<string name="revanced_sb_enable_create_segment_sum_off">Luo uusi osio -painiketta ei näytetä</string>
|
||||
<string name="revanced_sb_general_adjusting">Uuden osion ajoituksen säätö</string>
|
||||
<string name="revanced_sb_general_adjusting_sum">Kuinka monta millisekuntia ajansäätöpainikkeet liikkuvat uusia osioita luotaessa</string>
|
||||
<string name="revanced_sb_general_adjusting_invalid">Arvon on oltava positiivinen luku</string>
|
||||
<string name="revanced_sb_general_adjusting_invalid">Arvon tulee olla positiivinen luku</string>
|
||||
<string name="revanced_sb_guidelines_preference_title">Näytä ohjeet</string>
|
||||
<string name="revanced_sb_guidelines_preference_sum">Ohjeet sisältävät sääntöjä ja vinkkejä uusien osioiden luomiseen</string>
|
||||
<string name="revanced_sb_guidelines_popup_title">Noudata ohjeita</string>
|
||||
@@ -1199,10 +1215,10 @@ Pyyhkäise laajentaaksesi tai sulkeaksesi"</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">Eteenpäin ja taaksepäin näytetään</string>
|
||||
<string name="revanced_miniplayer_width_dip_title">Aloituskoko</string>
|
||||
<string name="revanced_miniplayer_width_dip_summary">Alkuperäinen näyttökoko pikseleinä</string>
|
||||
<string name="revanced_miniplayer_width_dip_invalid_toast">Pikselikoon on oltava välillä %1$s ja %2$s</string>
|
||||
<string name="revanced_miniplayer_width_dip_invalid_toast">Pikselikoon tulee olla %1$s ja %2$s välillä</string>
|
||||
<string name="revanced_miniplayer_opacity_title">Peittokuvan läpinäkymättömyys</string>
|
||||
<string name="revanced_miniplayer_opacity_summary">Läpinäkymättömyysarvo välillä 0–100, jossa 0 on läpinäkyvä</string>
|
||||
<string name="revanced_miniplayer_opacity_invalid_toast">Minisoittimen peittokuvan läpinäkymättömyyden on oltava välillä 0–100</string>
|
||||
<string name="revanced_miniplayer_opacity_invalid_toast">Minisoittimen peittokuvan läpinäkymättömyyden tulee olla 0–100 välillä</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
<string name="revanced_gradient_loading_screen_title">Ota liukuvärillinen latausruutu käyttöön</string>
|
||||
@@ -1292,6 +1308,9 @@ Tämä voi avata korkealaatuisemmat videot"</string>
|
||||
<string name="microg_settings_title">GmsCore-asetukset</string>
|
||||
<string name="microg_settings_summary">GmsCoren asetukset</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Jos olet äskettäin muuttanut tilisi kirjautumistietoja, poista ja asenna MicroG uudelleen.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Ohita URL-osoitteen uudelleenohjaukset</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">URL-osoitteen uudelleenohjaukset ohitetaan</string>
|
||||
@@ -1348,7 +1367,7 @@ Tämä voi avata korkealaatuisemmat videot"</string>
|
||||
<string name="revanced_custom_speed_menu_summary_off">Omaa nopeusvalikkoa ei näytetä</string>
|
||||
<string name="revanced_custom_playback_speeds_title">Omat toistonopeudet</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">Lisää tai muuta omia toistonopeuksia</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Omien nopeuksien on oltava alle %s</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Omien nopeuksien tulee olla alle %s</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Virheelliset omat toistonopeudet</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">Automaattinen</string>
|
||||
<string name="revanced_speed_tap_and_hold_title">Oma napauta ja pidä pohjassa -nopeus</string>
|
||||
|
||||
@@ -522,6 +522,11 @@ Ayusin ang volume sa pamamagitan ng pag-swipe nang patayo sa kanang bahagi ng sc
|
||||
<string name="revanced_hide_thanks_button_title">Itago Salamat</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Nakatago ang buton ng salamat</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Ang pindutan ng salamat ay ipinapakita</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Itago ang Tanong</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Nakatago ang button na Tanong</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Ipinapakita ang button na Tanong</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Itago ang Clip</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Nakatago ang clip button</string>
|
||||
@@ -1304,6 +1309,9 @@ Ang pagpapagana nito ay maaaring magbukas ng mas mataas na kalidad ng video"</st
|
||||
<string name="microg_settings_title">Mga Setting ng GmsCore</string>
|
||||
<string name="microg_settings_summary">Mga setting para sa GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Kung kamakailan mo lang binago ang mga detalye sa pag-login sa iyong account, i-uninstall at muling i-install ang MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">I-bypass ang mga pag-redirect ng URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Ang mga pag-redirect ng URL ay na-bypass</string>
|
||||
|
||||
@@ -522,6 +522,11 @@ Réglez le volume en balayant verticalement sur le côté droit de l'écran"</st
|
||||
<string name="revanced_hide_thanks_button_title">Masquer \"Merci\"</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Le bouton Merci est masqué</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Le bouton Merci est affiché</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Masquer Demander</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Le bouton Demander est masqué</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Le bouton Demander est affiché</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Masquer \"Clip\"</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Le bouton Clip est masqué</string>
|
||||
@@ -1305,6 +1310,9 @@ Activer cette option peut déverrouiller des qualités vidéo supérieures"</str
|
||||
<string name="microg_settings_title">Paramètres GmsCore</string>
|
||||
<string name="microg_settings_summary">Paramètres relatifs à GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Si vous avez récemment modifié vos informations de connexion, désinstallez et réinstallez MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Contourner les redirections d\'URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Les redirections d\'URL sont contournées</string>
|
||||
|
||||
@@ -522,6 +522,11 @@ Coigeartaigh an toirt trí haisceartán go hingearach ar thaobh deas an scáile
|
||||
<string name="revanced_hide_thanks_button_title">Folaigh Go raibh maith agat</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Tá cnaipe buíochas i bhfolach</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Taispeántar cnaipe buíochas</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Folaigh Fiafraigh</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Tá cnaipe Fiafraigh i bhfolach</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Taispeántar cnaipe Fiafraigh</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Folaigh Gearrthóg</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Tá an cnaipe gearrthóg i bhfolach</string>
|
||||
@@ -1306,6 +1311,9 @@ Is féidir le seo caighdeáin físeáin níos airde a dhíghlasáil"</string>
|
||||
<string name="microg_settings_title">Socruithe GmsCore</string>
|
||||
<string name="microg_settings_summary">Socruithe le haghaidh GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Má d’athraigh tú sonraí logála isteach do chuntais le déanaí, ansin díshuiteáil agus athshuiteáil MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Atreoracha seachbhóthar URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Seachnaítear atreoruithe URL</string>
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -522,6 +522,11 @@ A hangerő a képernyő jobb oldalán függőlegesen húzva állítható be"</st
|
||||
<string name="revanced_hide_thanks_button_title">Köszönet elrejtése</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">A köszönet gomb el van rejtve</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">A köszönet gomb látható</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Ask elrejtése</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Az Ask gomb el van rejtve</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Az Ask gomb látható</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Vágás gomb elrejtése</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">A klip gomb el van rejtve</string>
|
||||
@@ -1303,6 +1308,9 @@ Ez a beállítás lehetővé teszi a magasabb videóminőségek feloldását"</s
|
||||
<string name="microg_settings_title">GmsCore beállítások</string>
|
||||
<string name="microg_settings_summary">A GmsCore beállításai</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Ha nemrég módosította a fiókja bejelentkezési adatait, távolítsa el, majd telepítse újra a MicroG-t.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">URL átirányítások kikerülése</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">URL átirányítások kikerülve</string>
|
||||
|
||||
@@ -522,6 +522,11 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
|
||||
<string name="revanced_hide_thanks_button_title">Թաքցնել Thanks</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Thanks կոճակը թաքցված է</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Thanks կոճակը ցուցադրվում է</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Թաքցնել հարցումը</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Հարցման կոճակը թաքցված է</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Հարցման կոճակը երևում է</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Թաքցնել Clip</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Clip կոճակը թաքցված է</string>
|
||||
@@ -1306,6 +1311,9 @@ Mini-player-ը կարող է գրավվել էկրանից դուրս՝ դեպի
|
||||
<string name="microg_settings_title">GmsCore կարգավորումներ</string>
|
||||
<string name="microg_settings_summary">GmsCore-ի կարգավորումներ</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Եթե վերջերս փոխել եք ձեր հաշվի մուտքի տվյալները, ապա ջնջեք և նորից տեղադրեք MicroG-ն:</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">URL-ի վերահղումների հնարավորությունը անջատել</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">URL-ի վերահղումները անջատված են</string>
|
||||
|
||||
@@ -522,6 +522,11 @@ Menyesuaikan volume dengan mengusap secara vertikal di sisi kanan layar"</string
|
||||
<string name="revanced_hide_thanks_button_title">Sembunyikan Terima kasih</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Tombol terima kasih disembunyikan</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Tombol terima kasih ditampilkan</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Sembunyikan Tanya</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Tombol Tanya disembunyikan</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Tombol Tanya ditampilkan</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Sembunyikan Klip</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Tombol klip disembunyikan</string>
|
||||
@@ -1305,6 +1310,9 @@ Mengaktifkan ini dapat membuka kualitas video yang lebih tinggi"</string>
|
||||
<string name="microg_settings_title">Pengaturan GmsCore</string>
|
||||
<string name="microg_settings_summary">Pengaturan untuk GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Jika Anda baru saja mengubah detail login akun Anda, hapus pemasangan dan ulangi memasang MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Abaikan pengalihan URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Pengalihan URL diabaikan</string>
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -522,6 +522,11 @@ Regola il volume scorrendo verticalmente sul lato destro dello schermo"</string>
|
||||
<string name="revanced_hide_thanks_button_title">Nascondi Grazie</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Grazie pulsante è nascosto</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Il pulsante Grazie è visibile</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Nascondi richiesta</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Il pulsante Richiedi è nascosto</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Il pulsante Richiedi è visibile</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Nascondi Clip</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Il pulsante Clip è nascosto</string>
|
||||
@@ -1305,6 +1310,9 @@ Abilitare questa opzione può sbloccare qualità video più elevate"</string>
|
||||
<string name="microg_settings_title">Impostazioni di GmsCore</string>
|
||||
<string name="microg_settings_summary">Impostazioni per GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Se di recente hai modificato i dettagli di accesso al tuo account, disinstalla e reinstalla MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Aggira reindirizzamenti dell\'URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">I reindirizzamenti URL sono aggirati</string>
|
||||
|
||||
@@ -508,6 +508,8 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_thanks_button_title">הסתר תודה</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">לחצן תודה מוסתר</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">לחצן תודה מוצג</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">הסתר קליפ</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">לחצן קליפ מוסתר</string>
|
||||
@@ -1292,6 +1294,8 @@ Second \"item\" text"</string>
|
||||
<string name="microg_settings_title">הגדרות GmsCore</string>
|
||||
<string name="microg_settings_summary">הגדרות עבור GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">עקוף הפניות מחדש של URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">הפניות מחדש של URL נעקפות</string>
|
||||
|
||||
@@ -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"><h5>このアプリは、あなたによってパッチが適用されていないようです。</h5><br>このアプリは正しく動作しない可能性があり、<b>有害または危険なものである可能性があります</b>。<br><br>以下の検査結果は、このアプリがパッチ済みAPKであるか、または他のユーザーから取得したものであることを示唆しています。<br><br><small>%1$s</small><br>検証済みで安全なアプリを確実に使用するために、<b>このアプリをアンインストールして、自分でパッチを適用する</b>ことを強くお勧めします。<p><br>無視した場合、この警告は2回だけ表示されます。</string>
|
||||
<string name="revanced_check_environment_failed_message"><h5>このアプリは、あなたによってパッチが適用されていないようです。</h5><br>このアプリは正しく動作しない可能性があり、<b>有害または危険なものである可能性があります</b>。<br><br>以下の検査結果は、このアプリがパッチ済み APK であるか、または他のユーザーから取得したものであることを示唆しています。<br><br><small>%1$s</small><br>検証済みで安全なアプリを確実に使用するために、<b>このアプリをアンインストールして、自分でパッチを適用する</b>ことを強くお勧めします。<p><br>無視した場合、この警告は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_not_near_patch_time_invalid">APK の作成日時データが破損している</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_submenu_title">設定</string>
|
||||
@@ -64,7 +64,7 @@ Second \"item\" text"</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="gms_core_toast_not_installed_message">MicroG GmsCore がインストールされていません。インストールしてください。</string>
|
||||
<string name="gms_core_dialog_title">必ず実行してください</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore はバックグラウンドで実行するための権限を持っていません。
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore はバックグラウンドで動くための権限を持っていません。
|
||||
|
||||
下記ウェブサイト「Don't kill my app」の携帯電話メーカー別のガイドに従い、MicroG GmsCore に対するデバイスの設定を変更してください。
|
||||
|
||||
@@ -80,7 +80,7 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_screen_00_about_title">このアプリについて</string>
|
||||
<string name="revanced_settings_screen_00_about_title">ReVanced について</string>
|
||||
<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>
|
||||
@@ -237,7 +237,7 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
<string name="revanced_hide_attributes_section_title">関連情報を非表示</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">注目の場所 / ゲーム / 音楽 / 言及された人物セクションは表示されません</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">注目の場所 / ゲーム / 音楽 / 言及された人物セクションは表示されます</string>
|
||||
<string name="revanced_hide_chapters_section_title">「チャプター」を非表示</string>
|
||||
<string name="revanced_hide_chapters_section_title">チャプター セクションを非表示</string>
|
||||
<string name="revanced_hide_chapters_section_summary_on">チャプター セクションは表示されません</string>
|
||||
<string name="revanced_hide_chapters_section_summary_off">チャプター セクションは表示されます</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">「このコンテンツの作成手段」を非表示</string>
|
||||
@@ -252,7 +252,7 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
<string name="revanced_hide_key_concepts_section_title">「主な概念」を非表示</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">主な概念セクションは表示されません</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">主な概念セクションが表示されます</string>
|
||||
<string name="revanced_hide_transcript_section_title">「文字起こし」を非表示</string>
|
||||
<string name="revanced_hide_transcript_section_title">文字起こしセクションを非表示</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">文字起こしセクションは表示されません</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">文字起こしセクションは表示されます</string>
|
||||
<string name="revanced_hide_description_components_screen_title">概要欄</string>
|
||||
@@ -313,14 +313,14 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
<string name="revanced_hide_keyword_content_screen_title">キーワード フィルタ</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">フィード、検索結果、関連動画に表示される動画をキーワードで除外するフィルタの設定</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">キーワードに合致する動画をホームフィードから除外する</string>
|
||||
<string name="revanced_hide_keyword_content_home_summary_on">キーワードに合致する動画はホームフィードに表示されません</string>
|
||||
<string name="revanced_hide_keyword_content_home_summary_off">ホームフィードはキーワードでフィルタリングされません</string>
|
||||
<string name="revanced_hide_keyword_content_home_summary_on">キーワードに合致する動画はホームフィードおよび関連動画に表示されません</string>
|
||||
<string name="revanced_hide_keyword_content_home_summary_off">ホームフィードおよび関連動画はキーワードでフィルタリングされません</string>
|
||||
<string name="revanced_hide_keyword_content_search_title">キーワードに合致する動画を検索結果から除外する</string>
|
||||
<string name="revanced_hide_keyword_content_search_summary_on">キーワードに合致する動画は検索結果に表示されません</string>
|
||||
<string name="revanced_hide_keyword_content_search_summary_off">検索結果はキーワードでフィルタリングされません</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_title">キーワードに合致する動画を登録チャンネル フィードから除外する</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_summary_on">キーワードに合致する動画は登録チャンネル フィードに表示されません</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_summary_off">登録チャンネル フィードの動画はキーワードでフィルタリングされません</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_summary_off">登録チャンネル フィードはキーワードでフィルタリングされません</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_title">キーワード</string>
|
||||
<!-- For localization, it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
@@ -344,17 +344,17 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">二重引用符が必要なキーワード: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_conflicting">矛盾する宣言があるキーワード: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_length">短すぎるキーワード: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_broad">すべての動画を除外するキーワード: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_broad">全ての動画を除外するキーワード: %s</string>
|
||||
</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_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">全画面広告は、アプリ起動時に表示されます</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">ボタン付き広告を非表示</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">ボタン付き広告は表示されません</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_off">ボタン付き広告は表示されます</string>
|
||||
@@ -525,6 +525,11 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
<string name="revanced_hide_thanks_button_title">Thanks ボタンを非表示</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Thanks ボタンは表示されません</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Thanks ボタンは表示されます</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">質問ボタンを非表示</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">質問ボタンは表示されません</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">質問ボタンは表示されます</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">クリップボタンを非表示</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">クリップボタンは表示されません</string>
|
||||
@@ -786,11 +791,11 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||
<string name="revanced_end_screen_suggested_video_title">再生終了時の「関連動画」を非表示</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_on">"「関連動画」は再生終了時にプレーヤー画面に表示されませんが、自動再生がオンの場合は自動で再生されます
|
||||
<string name="revanced_end_screen_suggested_video_summary_on">"「関連動画」は、再生終了時にプレーヤー画面に表示されませんが、自動再生がオンの場合は自動で再生されます
|
||||
|
||||
自動再生の設定は YouTube の設定で変更できます:
|
||||
設定 → 再生 → 次の動画を自動再生"</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_off">「関連動画」は再生終了時にプレーヤー画面に表示されます</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_off">「関連動画」は、再生終了時にプレーヤー画面に表示されます</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.time.hideTimestampPatch">
|
||||
<string name="revanced_hide_timestamp_title">タイムスタンプを非表示</string>
|
||||
@@ -849,7 +854,7 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
<string name="revanced_ryd_toast_on_connection_error_title">API 利用不可時にトーストを表示</string>
|
||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Return YouTube Dislike が利用できない場合、トースト ポップアップが表示されます</string>
|
||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Return YouTube Dislike が利用できない場合でもトースト ポップアップは表示されません</string>
|
||||
<string name="revanced_ryd_about">このアプリについて</string>
|
||||
<string name="revanced_ryd_about">Return YouTube Dislike について</string>
|
||||
<string name="revanced_ryd_attribution_summary">このデータはReturn YouTube Dislike APIによって提供されています。詳細はここをタップしてください</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 統計情報</string>
|
||||
@@ -890,12 +895,12 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">シーク中のサムネイルはプレーヤー画面全体に表示されます</string>
|
||||
</patch>
|
||||
<patch id="layout.sponsorblock.sponsorBlockResourcePatch">
|
||||
<string name="revanced_sb_enable_sb">SponsorBlock を有効化</string>
|
||||
<string name="revanced_sb_enable_sb">SponsorBlock を有効にする</string>
|
||||
<string name="revanced_sb_enable_sb_sum">SponsorBlock はユーザーからの情報提供により YouTube 動画のわずらわしい部分をスキップする機能です</string>
|
||||
<string name="revanced_sb_appearance_category">外観</string>
|
||||
<string name="revanced_sb_enable_voting">投票ボタンを表示</string>
|
||||
<string name="revanced_sb_enable_voting_sum_on">プレーヤー オーバーレイにセグメントへの投票ボタンが表示されます</string>
|
||||
<string name="revanced_sb_enable_voting_sum_off">プレーヤー オーバーレイにセグメントへの投票ボタンは表示されません</string>
|
||||
<string name="revanced_sb_enable_voting">投票ボタンを表示する</string>
|
||||
<string name="revanced_sb_enable_voting_sum_on">セグメントへの投票ボタンはプレーヤー オーバーレイに表示されます</string>
|
||||
<string name="revanced_sb_enable_voting_sum_off">セグメントへの投票ボタンはプレーヤー オーバーレイに表示されません</string>
|
||||
<string name="revanced_sb_square_layout">四角ボタンを使用する</string>
|
||||
<string name="revanced_sb_square_layout_sum_on">ボタンとコントロールの角は直角です</string>
|
||||
<string name="revanced_sb_square_layout_sum_off">ボタンとコントロールの角は丸角です</string>
|
||||
@@ -904,55 +909,53 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_on">ボタンに「スキップ」とだけ表示されます</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_off">ボタンにカテゴリー名が表示されます</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button">スキップボタンを自動的に非表示にする</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_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_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_create_segment_category">セグメントの作成</string>
|
||||
<string name="revanced_sb_enable_create_segment">新しいセグメント作成ボタンを表示</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_on">新しいセグメントを作成するボタンが表示されます</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_off">新しいセグメントを作成するボタンは表示されません</string>
|
||||
<string name="revanced_sb_general_adjusting">新しいセグメントステップを調整する</string>
|
||||
<string name="revanced_sb_general_adjusting_sum">新しいセグメントを作成する際の時間調節ボタンの移動時間 (単位: ミリ秒)</string>
|
||||
<string name="revanced_sb_general_adjusting_invalid">値は正の数でなければなりません</string>
|
||||
<string name="revanced_sb_enable_create_segment">セグメント作成ボタンを表示する</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_on">セグメント作成ボタンは表示されます</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_off">セグメント作成ボタンは表示されません</string>
|
||||
<string name="revanced_sb_general_adjusting">セグメントの時間調整幅</string>
|
||||
<string name="revanced_sb_general_adjusting_sum">「セグメントを作成」メニュー内の早送り / 巻き戻しボタンで移動する時間 (ミリ秒)</string>
|
||||
<string name="revanced_sb_general_adjusting_invalid">値は正の整数でなければなりません</string>
|
||||
<string name="revanced_sb_guidelines_preference_title">ガイドラインを見る</string>
|
||||
<string name="revanced_sb_guidelines_preference_sum">ガイドラインには、新しいセグメントを作成するためのルールとヒントが含まれています</string>
|
||||
<string name="revanced_sb_guidelines_popup_title">ガイドラインに従ってください</string>
|
||||
<string name="revanced_sb_guidelines_popup_content">新しいセグメントを作成する前にSponsorBlockガイドラインを読んでください</string>
|
||||
<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_summary_on">SponsorBlock が利用できない場合はトースト ポップアップが表示されます</string>
|
||||
<string name="revanced_sb_toast_on_connection_error_summary_off">SponsorBlock が利用できない場合でもトースト ポップアップは表示されません</string>
|
||||
<string name="revanced_sb_general_skipcount">スキップ数の追跡を有効にする</string>
|
||||
<string name="revanced_sb_general_skipcount_sum_on">SponsorBlock リーダーボードに、どれだけの時間が節約されたかを報告します。セグメントがスキップされるたびにメッセージがリーダーボードに送信されます</string>
|
||||
<string name="revanced_sb_general_skipcount_sum_off">スキップカウント追跡が有効になっていません</string>
|
||||
<string name="revanced_sb_general_min_duration">最小のセグメントの長さ</string>
|
||||
<string name="revanced_sb_guidelines_popup_content">新しいセグメントを作成する前に SponsorBlock ガイドラインを読んでください</string>
|
||||
<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_summary_on">SponsorBlock が利用できない場合は、トースト ポップアップが表示されます</string>
|
||||
<string name="revanced_sb_toast_on_connection_error_summary_off">SponsorBlock が利用できない場合でも、トースト ポップアップは表示されません</string>
|
||||
<string name="revanced_sb_general_skipcount">スキップデータを送信する</string>
|
||||
<string name="revanced_sb_general_skipcount_sum_on">SponsorBlock リーダーボード にスキップによって節約した時間を送信します。セグメントをスキップする度にデータを送信します</string>
|
||||
<string name="revanced_sb_general_skipcount_sum_off">スキップデータは送信されません</string>
|
||||
<string name="revanced_sb_general_min_duration">セグメントのしきい値</string>
|
||||
<string name="revanced_sb_general_min_duration_sum">設定値 (単位: 秒) より短いセグメントはスキップされず、プレーヤーにも表示されません</string>
|
||||
<string name="revanced_sb_general_min_duration_invalid">時間の長さが無効です</string>
|
||||
<string name="revanced_sb_general_uuid">あなたのプライベート ユーザー ID</string>
|
||||
<string name="revanced_sb_general_uuid_sum">これは非公開にする必要があります。パスワードのようなもので誰とも共有するべきではありません。誰かがこれを持っている場合、あなたになりすますことができます</string>
|
||||
<string name="revanced_sb_general_uuid_invalid">プライベート ユーザー ID は 30 文字以上でなければなりません</string>
|
||||
<string name="revanced_sb_general_api_url">API の URL を変更</string>
|
||||
<string name="revanced_sb_general_api_url_sum">SponsorBlockのアドレスはサーバーへの呼び出しに使用されます</string>
|
||||
<string name="revanced_sb_api_url_reset">API の URL をリセットしました</string>
|
||||
<string name="revanced_sb_general_min_duration_invalid">セグメントのしきい値が無効です</string>
|
||||
<string name="revanced_sb_general_uuid">非公開ユーザー ID</string>
|
||||
<string name="revanced_sb_general_uuid_sum">この ID は公開すべきではありません。パスワードのようなものであり、誰とも共有すべきではありません。もし誰かがこの ID を手に入れた場合、あなたになりすますことができます</string>
|
||||
<string name="revanced_sb_general_uuid_invalid">非公開ユーザー ID は 30 文字以上必要です</string>
|
||||
<string name="revanced_sb_general_api_url">API URL</string>
|
||||
<string name="revanced_sb_general_api_url_sum">SponsorBlock がサーバーとの通信で使用するアドレス</string>
|
||||
<string name="revanced_sb_api_url_reset">API URL をリセットしました</string>
|
||||
<string name="revanced_sb_api_url_invalid">API URL が無効です</string>
|
||||
<string name="revanced_sb_api_url_changed">API の URL を変更しました</string>
|
||||
<string name="revanced_sb_api_url_changed">API URL を変更しました</string>
|
||||
<string name="revanced_sb_settings_ie">設定のインポート / エクスポート</string>
|
||||
<string name="revanced_sb_settings_copy">コピー</string>
|
||||
<string name="revanced_sb_settings_ie_sum">SponsorBlock の設定を JSON 形式のテキストでインポート / エクスポートします。この JSON テキストは他のプラットフォームでも利用可能です</string>
|
||||
<string name="revanced_sb_settings_ie_sum_warning">SponsorBlock の設定を他のプラットフォームでも利用可能な JSON 形式のテキストでインポート / エクスポートします。この JSON テキストには非公開ユーザー IDが含まれています。共有する際は十分注意してください</string>
|
||||
<string name="revanced_sb_settings_ie_sum_warning">SponsorBlock の設定を他のプラットフォームでも利用可能な JSON 形式のテキストでインポート / エクスポートします。この JSON テキストには非公開ユーザー ID が含まれています。共有する際は十分注意してください</string>
|
||||
<string name="revanced_sb_settings_import_successful">設定が正常にインポートされました</string>
|
||||
<string name="revanced_sb_settings_import_failed">インポートに失敗しました: %s</string>
|
||||
<string name="revanced_sb_settings_export_failed">エクスポートに失敗しました: %s</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"設定にプライベートな SponsorBlock ユーザー ID が含まれています。
|
||||
|
||||
ユーザー ID はパスワードのようなものであり、共有しないでください。"</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"設定には、SponsorBlock の非公開ユーザー ID が含まれています。この ID はパスワードのようなものであり、決して共有すべきではありません。"</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">今後表示しない</string>
|
||||
<string name="revanced_sb_diff_segments">セグメントのスキップ</string>
|
||||
<string name="revanced_sb_segments_sponsor">スポンサー</string>
|
||||
@@ -965,7 +968,7 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
<string name="revanced_sb_segments_highlight_sum">動画の中で最も興味を引く場面</string>
|
||||
<string name="revanced_sb_segments_intro">幕間 / オープニング (イントロ)</string>
|
||||
<string name="revanced_sb_segments_intro_sum">実際のコンテンツを含まない間隔。一時停止、固定フレーム、繰り返しアニメーションを使用できます。情報を含むトランジションは含まれません。</string>
|
||||
<string name="revanced_sb_segments_outro">終了画面 / クレジット (アウトロ)</string>
|
||||
<string name="revanced_sb_segments_outro">終了画面 / クレジット(アウトロ)</string>
|
||||
<string name="revanced_sb_segments_outro_sum">クレジットまたはYouTubeのエンドカードが表示される場合、情報を持つ結論にはなりません</string>
|
||||
<string name="revanced_sb_segments_preview">予告編 / 総集編 / フック</string>
|
||||
<string name="revanced_sb_segments_preview_sum">ビデオやシリーズの他のビデオで何が起こったのかを示すクリップのコレクション 全ての情報が他の場所で繰り返されます</string>
|
||||
@@ -1006,7 +1009,7 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
<string name="revanced_sb_skipped_multiple_segments">複数のセグメントをスキップしました</string>
|
||||
<string name="revanced_sb_skip_automatically">自動的にスキップ</string>
|
||||
<string name="revanced_sb_skip_automatically_once">1 回だけ自動的にスキップ</string>
|
||||
<string name="revanced_sb_skip_showbutton">スキップ ボタンを表示</string>
|
||||
<string name="revanced_sb_skip_showbutton">スキップボタンを表示</string>
|
||||
<string name="revanced_sb_skip_seekbaronly">シークバーに表示</string>
|
||||
<string name="revanced_sb_skip_ignore">無効</string>
|
||||
<string name="revanced_sb_submit_failed_invalid">セグメント送信失敗: %s</string>
|
||||
@@ -1021,9 +1024,9 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock は一時的に利用できません (API タイムアウト)</string>
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_status">SponsorBlockは一時的に利用できません (ステータス: %d)</string>
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_generic">SponsorBlockは一時的に利用できません</string>
|
||||
<string name="revanced_sb_vote_failed_timeout">セグメントに投票できません (API タイムアウト)</string>
|
||||
<string name="revanced_sb_vote_failed_timeout">セグメントに投票できませんでした (API タイムアウト)</string>
|
||||
<string name="revanced_sb_vote_failed_unknown_error">セグメントに投票できませんでした(ステータス: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_vote_failed_forbidden">セグメントに投票できません: %s</string>
|
||||
<string name="revanced_sb_vote_failed_forbidden">セグメントに投票できませんでした: %s</string>
|
||||
<string name="revanced_sb_vote_upvote">高評価</string>
|
||||
<string name="revanced_sb_vote_downvote">低評価</string>
|
||||
<string name="revanced_sb_vote_category">カテゴリーの変更</string>
|
||||
@@ -1054,7 +1057,7 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">セグメントをプレビューし、スムーズにスキップするようにします</string>
|
||||
<string name="revanced_sb_new_segment_edit_by_hand_title">セグメントのタイミングを手動で編集</string>
|
||||
<string name="revanced_sb_new_segment_edit_by_hand_content">セグメントの開始または終了のタイミングを編集しますか?</string>
|
||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">無効な時間の値です</string>
|
||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">時間の値が無効です</string>
|
||||
<string name="revanced_sb_stats">統計</string>
|
||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||
<string name="revanced_sb_stats_connection_failure">統計情報は一時的に利用できません (API がダウンしています)</string>
|
||||
@@ -1080,11 +1083,11 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
<string name="revanced_sb_color_opacity_label">透明度:</string>
|
||||
<string name="revanced_sb_color_dot_label">色:</string>
|
||||
<string name="revanced_sb_color_changed">色を変更しました</string>
|
||||
<string name="revanced_sb_color_reset">色をリセット</string>
|
||||
<string name="revanced_sb_color_invalid">カラーコードが無効です</string>
|
||||
<string name="revanced_sb_color_reset">色がリセットされました</string>
|
||||
<string name="revanced_sb_color_invalid">色の値が無効です</string>
|
||||
<string name="revanced_sb_reset_color">色をリセット</string>
|
||||
<string name="revanced_sb_reset">リセット</string>
|
||||
<string name="revanced_sb_about">このアプリについて</string>
|
||||
<string name="revanced_sb_about">SponsorBlock について</string>
|
||||
<string name="revanced_sb_about_api_sum">SponsorBlock APIによって提供されるデータです。詳細はこちらをタップしてください。</string>
|
||||
</patch>
|
||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||
@@ -1093,14 +1096,14 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
<string name="revanced_change_form_factor_entry_2">スマートフォン</string>
|
||||
<string name="revanced_change_form_factor_entry_3">タブレット</string>
|
||||
<string name="revanced_change_form_factor_entry_4">Automotive</string>
|
||||
<string name="revanced_change_form_factor_user_dialog_message">"変更点は以下のとおりです
|
||||
<string name="revanced_change_form_factor_user_dialog_message">"変更点は以下のとおりです:
|
||||
|
||||
タブレット レイアウト
|
||||
• コミュニティ投稿は表示されません
|
||||
• コミュニティ投稿が表示されません
|
||||
|
||||
Automotive レイアウト
|
||||
• ショート動画を通常のプレーヤーで開きます
|
||||
• フィードはトピックとチャンネルで整理されています"</string>
|
||||
• フィードがトピックとチャンネルで分類されます"</string>
|
||||
</patch>
|
||||
<patch id="layout.spoofappversion.spoofAppVersionPatch">
|
||||
<string name="revanced_spoof_app_version_title">アプリのバージョンを偽装する</string>
|
||||
@@ -1151,8 +1154,8 @@ Automotive レイアウト
|
||||
</patch>
|
||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||
<string name="revanced_disable_resuming_shorts_player_title">ショート動画プレーヤーの再開を無効にする</string>
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_on">ショート動画プレーヤーはアプリ起動時に再開されます</string>
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_off">ショート動画プレーヤーはアプリ起動時に再開されません</string>
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_on">ショート動画プレーヤーは、アプリ起動時に再開されます</string>
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_off">ショート動画プレーヤーは、アプリの起動時に再開されません</string>
|
||||
</patch>
|
||||
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||
<string name="revanced_shorts_player_type_title">ショート動画を開くプレーヤー</string>
|
||||
@@ -1298,7 +1301,7 @@ Automotive レイアウト
|
||||
|
||||
より高画質な映像がアンロックされる可能性がありますが、動画のカクつき、バッテリー寿命の悪化、予期せぬ副作用が
|
||||
発生するかもしれません"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"端末の画面サイズは偽装されていません
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"デバイスの画面サイズは偽装されていません
|
||||
|
||||
この機能を有効にすると、より高画質な映像がアンロックされる可能性があります"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">この機能を有効にすると、動画のカクつき、バッテリー寿命の悪化、および予期せぬ副作用を引き起こす可能性があります。</string>
|
||||
@@ -1307,6 +1310,9 @@ Automotive レイアウト
|
||||
<string name="microg_settings_title">GmsCore 設定</string>
|
||||
<string name="microg_settings_summary">GmsCore の設定</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">最近アカウントのログイン情報を変更した場合は、MicroG をアンインストールして再インストールしてください。</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">URL リダイレクトを回避する</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">YouTube の URL リダイレクトを経由せずにリンクへ移動します</string>
|
||||
@@ -1355,7 +1361,7 @@ Automotive レイアウト
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">再生速度設定ボタンを非表示</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">再生速度設定ボタンはオーバーレイに表示されます</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">再生速度設定ボタンはオーバーレイ表示されません</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">再生速度設定ボタンはオーバーレイに表示されません</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">カスタムした再生速度リストを使用する</string>
|
||||
@@ -1363,8 +1369,8 @@ Automotive レイアウト
|
||||
<string name="revanced_custom_speed_menu_summary_off">デフォルトの再生速度リストが表示されます</string>
|
||||
<string name="revanced_custom_playback_speeds_title">カスタム再生速度リスト</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">再生速度リストを編集します</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">再生速度の値は %s 未満である必要があります</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">再生速度リストが無効です</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">再生速度は %s 未満である必要があります</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">カスタム再生速度リストが無効です</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">自動</string>
|
||||
<string name="revanced_speed_tap_and_hold_title">長押し倍速再生の速度</string>
|
||||
<string name="revanced_speed_tap_and_hold_summary">長押し倍速再生の速度の値は 0-8 の範囲で、0 および 8 は含まれません</string>
|
||||
@@ -1403,20 +1409,20 @@ Automotive レイアウト
|
||||
<string name="revanced_spoof_video_streams_client_type_title">デフォルトのクライアント</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">iOS クライアントで AVC (H.264) を強制的に使用する</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ビデオ コーデックは強制的に AVC (H.264) が使用されます</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ビデオコーデックは自動的に決定されます</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"この機能を有効にすると、バッテリー寿命が延び、動画のカクつきが改善される可能性があります。
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ビデオ コーデックは自動的に決定されます</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"この機能を有効にすると、バッテリー寿命が延びたり、動画のカクつきが改善さたりする可能性があります。
|
||||
|
||||
AVC の最大解像度は 1080p であり、Opus オーディオ コーデックは使用できず、動画の再生時に VP9 や AV1 より多くの通信量を使用します。"</string>
|
||||
AVC は、最大解像度が 1080p であり、Opus オーディオ コーデックが利用できず、動画再生時の通信量が VP9 や AV1 より多くなります。"</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_tv_title">iOS クライアントの副作用</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_tv_summary">"• 映画や有料動画が再生されない可能性があります
|
||||
•「 一定音量」は利用できません
|
||||
•「 一定音量」が利用できません
|
||||
• 動画が 1 秒早く終了します"</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_title">Android クライアントの副作用</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_summary">"• 「音声トラック」はフライアウト メニューに表示されません
|
||||
• 「一定音量」は利用できません
|
||||
• 「デフォルトの吹き替えを無効にする」は利用できません"</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_av1">• AV1 コーデックは利用できません</string>
|
||||
<string name="revanced_spoof_video_streams_about_kids_videos">• 子ども向け動画は、ログアウト時またはシークレット モード時に再生されない場合があります</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_summary">"• 「音声トラック」がフライアウト メニューに表示されません
|
||||
• 「一定音量」が利用できません
|
||||
• 「デフォルトの吹き替えを無効にする」が利用できません"</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_av1">• AV1 コーデックが利用できません</string>
|
||||
<string name="revanced_spoof_video_streams_about_kids_videos">• ログアウト時またはシークレット モード時に、子ども向け動画が再生されない可能性があります</string>
|
||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">統計情報に表示する</string>
|
||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">現在のクライアントが統計情報に表示されます</string>
|
||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">現在のクライアントは統計情報に表示されません</string>
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -24,7 +24,7 @@ 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"><h5>이 앱은 사용자가 패치하지 않은 것 같습니다.</h5><br>이 앱은 제대로 작동하지 않을 수 있으며, <b>사용 시 해롭거나 심지어 위험할 수도 있습니다</b>.<br><br>이러한 검사는 이 앱이 사전에 패치되었거나 다른 사람으로부터 받은 것임을 의미합니다:<br><br><small>%1$s</small><br>검증되고 안전한 앱을 사용하고 있는지 확인하려면 <b>이 앱을 제거하고 직접 패치하는 것</b>을 강력히 권장합니다.<p><br>이 경고는 두 번만 표시됩니다</string>
|
||||
<string name="revanced_check_environment_failed_message"><h5>이 앱은 사용자가 패치하지 않은 것 같습니다.</h5><br>이 앱은 제대로 작동하지 않을 수 있으며, <b>사용 시 해롭거나 심지어 위험할 수도 있습니다</b>.<br><br>이러한 검사는 이 앱이 사전에 패치되었거나 다른 사람으로부터 받은 것임을 의미합니다:<br><br><small>%1$s</small><br>검증되고 안전한 앱을 사용하고 있는지 확인하려면 <b>이 앱을 제거하고 직접 패치하는 것</b>을 강력히 권장합니다.<p><br>이 경고는 두 번만 표시됩니다.</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>
|
||||
@@ -46,9 +46,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_show_menu_icons_summary_on">설정 아이콘을 표시합니다</string>
|
||||
<string name="revanced_show_menu_icons_summary_off">설정 아이콘을 표시하지 않습니다</string>
|
||||
<string name="revanced_language_title">ReVanced 언어</string>
|
||||
<string name="revanced_language_user_dialog_message">"일부 언어의 번역이 누락되었거나 완료되지 않았을 수 있습니다
|
||||
<string name="revanced_language_user_dialog_message">"일부 언어의 번역이 누락되었거나 완료되지 않았을 수 있습니다.
|
||||
|
||||
새로운 언어를 번역하려면 translate.revanced.app를 방문하세요"</string>
|
||||
새로운 언어를 번역하려면 translate.revanced.app를 방문하세요."</string>
|
||||
<string name="revanced_language_DEFAULT">앱 언어</string>
|
||||
<string name="revanced_pref_import_export_title">가져오기 / 내보내기</string>
|
||||
<string name="revanced_pref_import_export_summary">ReVanced 설정을 가져오거나 내보낼 수 있습니다</string>
|
||||
@@ -62,13 +62,13 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">MicroG GmsCore가 설치되어 있지 않습니다. 설치하세요</string>
|
||||
<string name="gms_core_toast_not_installed_message">MicroG GmsCore가 설치되어 있지 않습니다. 설치하세요.</string>
|
||||
<string name="gms_core_dialog_title">필수 조치</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore에 백그라운드에서 실행할 수 있는 권한이 없습니다
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore에 백그라운드에서 실행할 수 있는 권한이 없습니다.
|
||||
|
||||
이 기기에 대한 \"Don't kill my app\" 가이드를 읽어보고, MicroG 설치 지침을 적용하세요
|
||||
이 기기에 대한 \"Don't kill my app\" 가이드를 읽어보고, MicroG 설치 지침을 적용하세요.
|
||||
|
||||
앱이 실행하려면 이 과정이 필요합니다"</string>
|
||||
앱이 실행하려면 이 과정이 필요합니다."</string>
|
||||
<string name="gms_core_dialog_open_website_text">웹사이트 열기</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"MicroG GmsCore 앱 배터리 최적화를 비활성화(제한 없음)하여 앱 문제를 방지할 수 있습니다.
|
||||
|
||||
@@ -114,9 +114,9 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
|
||||
<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 오류 알림이 숨겨집니다
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"오류 메시지를 비활성화하면 모든 ReVanced 오류 알림이 숨겨집니다.
|
||||
|
||||
예상되지 않은 이벤트에 대한 알림을 받지 못할 수 있습니다"</string>
|
||||
예상되지 않은 이벤트에 대한 알림을 받지 못할 수 있습니다."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_hide_album_cards_title">음악 앨범 카드 숨기기</string>
|
||||
@@ -299,9 +299,9 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodles 숨기기</string>
|
||||
<string name="revanced_hide_doodles_summary_on">YouTube Doodles가 숨겨집니다\n• Doodles: 기념일 로고 헤더</string>
|
||||
<string name="revanced_hide_doodles_summary_off">YouTube Doodles가 표시됩니다\n• Doodles: 기념일 로고 헤더</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"YouTube Doodles는 공휴일이나 기념일 등, 그날에 맞춘 디자인으로 변경되는 왼쪽 상단의 YouTube 헤더를 말합니다
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"YouTube Doodles는 공휴일이나 기념일 등, 그날에 맞춘 디자인으로 변경되는 왼쪽 상단의 YouTube 헤더를 말합니다.
|
||||
|
||||
현재 거주하는 지역에서 YouTube Doodles가 표시되어 있는데 이 설정이 활성화되어 있는 경우에는 검색창 아래에 표시되는 카테고리 바도 숨겨집니다"</string>
|
||||
현재 거주하는 지역에서 YouTube Doodles가 표시되어 있는데 이 설정이 활성화되어 있는 경우에는 검색창 아래에 표시되는 카테고리 바도 숨겨집니다."</string>
|
||||
<string name="revanced_custom_filter_screen_title">사용자 정의 필터</string>
|
||||
<string name="revanced_custom_filter_screen_summary">사용자 정의 필터를 사용하여 구성요소를 숨길 수 있습니다</string>
|
||||
<string name="revanced_custom_filter_title">사용자 정의 필터 활성화하기</string>
|
||||
@@ -413,7 +413,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">시청 경고 다이얼로그 제거하기</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_summary_on">다음 동영상을 시청하기 전에 표시되는 시청 경고 다이얼로그를 제거합니다:\n• 연령 제한 동영상\n• 자살 또는 자해와 관련된 동영상, etc.</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_summary_off">다음 동영상을 시청하기 전에 표시되는 시청 경고 다이얼로그를 제거하지 않습니다:\n• 연령 제한 동영상\n• 자살 또는 자해와 관련된 동영상, etc.</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">이 설정은 다이얼로그를 자동으로 허용하기만 하며 연령 제한(성인인증 절차)을 우회할 수 없습니다</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">이 설정은 다이얼로그를 자동으로 허용하기만 하며 연령 제한(성인인증 절차)을 우회할 수 없습니다.</string>
|
||||
</patch>
|
||||
<patch id="interaction.downloads.downloadsResourcePatch">
|
||||
<string name="revanced_external_downloader_screen_title">외부 다운로드</string>
|
||||
@@ -475,7 +475,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
|
||||
<string name="revanced_swipe_volume_sensitivity_title">볼륨 스와이프 민감도</string>
|
||||
<string name="revanced_swipe_volume_sensitivity_summary">스와이프할 때마다 볼륨이 얼마나 변경되는지를 지정할 수 있습니다</string>
|
||||
<string name="revanced_swipe_overlay_style_title">스와이프 오버레이 스타일</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_1">바형 오버레이</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_1">가로 오버레이</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_2">가로 오버레이 (최소화 - 상단)</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_3">가로 오버레이 (최소화 - 중앙)</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_4">원형 오버레이</string>
|
||||
@@ -521,6 +521,11 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
|
||||
<string name="revanced_hide_thanks_button_title">Thanks 버튼 숨기기</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Thanks 버튼이 숨겨집니다</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Thanks 버튼이 표시됩니다</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">요청 버튼 숨기기</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">요청 버튼이 숨겨집니다</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">요청 버튼이 표시됩니다</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">클립 버튼 숨기기</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">클립 버튼이 숨겨집니다</string>
|
||||
@@ -559,16 +564,16 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
|
||||
알려진 문제점:
|
||||
• 동영상 광고가 강제로 숨겨집니다"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">만들기 버튼과 알림 버튼의 위치를 교환하지 않습니다\n\n알려진 문제점:\n• 서버에서 더 많은 광고가 로드될 수 있습니다\n• Shorts 광고가 더 이상 숨겨지지 않습니다</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_user_dialog_message">"이 설정을 비활성화하면 Shorts 광고가 차단되지 않습니다
|
||||
<string name="revanced_switch_create_with_notifications_button_user_dialog_message">"이 설정을 비활성화하면 Shorts 광고가 차단되지 않습니다.
|
||||
|
||||
이 설정을 변경해도 적용되지 않는다면 시크릿 모드로 전환해 보세요"</string>
|
||||
이 설정을 변경해도 적용되지 않는다면 시크릿 모드로 전환해 보세요."</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">하단바 버튼 라벨 숨기기</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">라벨이 숨겨집니다</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">라벨이 표시됩니다</string>
|
||||
<string name="revanced_disable_translucent_status_bar_title">반투명 상태바 비활성화하기</string>
|
||||
<string name="revanced_disable_translucent_status_bar_summary_on">상태바가 불투명합니다</string>
|
||||
<string name="revanced_disable_translucent_status_bar_summary_off">상태바가 불투명하거나 반투명합니다</string>
|
||||
<string name="revanced_disable_translucent_status_bar_user_dialog_message">일부 기기에서는 이 기능을 활성화하면 시스템 네비게이션 바가 투명하게 변경될 수 있습니다</string>
|
||||
<string name="revanced_disable_translucent_status_bar_user_dialog_message">일부 기기에서는 이 기능을 활성화하면 시스템 네비게이션 바가 투명하게 변경될 수 있습니다.</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_title">밝은 반투명 하단바 비활성화하기</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_summary_on">밝은 테마에서 하단바가 불투명합니다</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">밝은 테마에서 하단바가 불투명하거나 반투명합니다</string>
|
||||
@@ -783,7 +788,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||
<string name="revanced_end_screen_suggested_video_title">최종 화면에서 다음 재생 추천 동영상 숨기기</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_on">"자동재생이 꺼져 있으면 최종 화면에서 다음 재생 추천 동영상이 숨겨집니다.
|
||||
<string name="revanced_end_screen_suggested_video_summary_on">"자동재생이 꺼져 있으면 최종 화면에서 다음 재생 추천 동영상이 숨겨집니다
|
||||
|
||||
자동재생은 YouTube 설정에서 변경할 수 있습니다:
|
||||
설정 → 재생 → 다음 동영상 자동재생"</string>
|
||||
@@ -878,11 +883,11 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">일반 화질 재생바 썸네일을 활성화합니다</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">전체 화면 고화질 재생바 썸네일을 활성화합니다</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">전체 화면 일반 화질 재생바 썸네일을 활성화합니다</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"이 설정을 활성화하면 재생바 썸네일이 없는 실시간 스트림의 썸네일도 복원됩니다
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"이 설정을 활성화하면 재생바 썸네일이 없는 실시간 스트림의 썸네일도 복원됩니다.
|
||||
|
||||
재생바 썸네일에는 현재 동영상과 동일한 화질 값이 사용됩니다
|
||||
재생바 썸네일에는 현재 동영상과 동일한 화질 값이 사용됩니다.
|
||||
|
||||
이 설정은 동영상 화질 값이 720p 이하이고 인터넷 연결 상태가 매우 빠를 때 가장 잘 작동합니다"</string>
|
||||
이 설정은 동영상 화질 값이 720p 이하이고 인터넷 연결 상태가 매우 빠를 때 가장 잘 작동합니다."</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">이전 재생바 썸네일 복원하기</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">재생바 상단에서 최소화된 썸네일을 표시합니다</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">플레이어에서 전체 화면으로 된 썸네일을 표시합니다</string>
|
||||
@@ -1029,7 +1034,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
|
||||
<!-- A segment start and end time, such as "02:10 to 03:40" -->
|
||||
<string name="revanced_sb_vote_segment_time_to_from">%1$s ~ %2$s</string>
|
||||
<string name="revanced_sb_new_segment_choose_category">구간 카테고리를 선택하세요</string>
|
||||
<string name="revanced_sb_new_segment_disabled_category">이 카테고리는 비활성화되어 있습니다. 제출하려면 설정에서 활성화해야 합니다</string>
|
||||
<string name="revanced_sb_new_segment_disabled_category">이 카테고리는 비활성화되어 있습니다. 제출하려면 설정에서 활성화해야 합니다.</string>
|
||||
<string name="revanced_sb_new_segment_title">새 SponsorBlock 구간</string>
|
||||
<string name="revanced_sb_new_segment_mark_time_as_question">%s 을 구간의 시작 또는 끝으로 설정하시겠습니까?</string>
|
||||
<string name="revanced_sb_new_segment_mark_start">시작</string>
|
||||
@@ -1104,11 +1109,11 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
|
||||
<string name="revanced_spoof_app_version_title">앱 버전 변경하기</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">앱 버전을 변경합니다</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">앱 버전을 변경하지 않습니다</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"앱 버전을 YouTube 이전 앱 버전으로 변경합니다
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"앱 버전을 YouTube 이전 앱 버전으로 변경합니다.
|
||||
|
||||
이 경우 앱 레이아웃과 기능이 변경되지만 알려지지 않은 문제점이 발생할 수 있습니다
|
||||
이 경우 앱 레이아웃과 기능이 변경되지만 알려지지 않은 문제점이 발생할 수 있습니다.
|
||||
|
||||
나중에 이 설정을 비활성화하면 앱 레이아웃 버그를 방지하기 위해 앱 데이터를 지우는 것이 좋습니다"</string>
|
||||
나중에 이 설정을 비활성화하면 앱 레이아웃 버그를 방지하기 위해 앱 데이터를 지우는 것이 좋습니다."</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">변경할 앱 버전</string>
|
||||
@@ -1303,12 +1308,15 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"기기 크기 정보를 변경하지 않습니다
|
||||
|
||||
이 설정을 활성화하면 더 높은 화질 동영상 값을 잠금 해제할 수 있습니다"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">이 설정을 활성화하면 동영상 재생이 끊기거나 배터리 수명이 단축되고 알려지지 않은 문제점이 발생할 수 있습니다</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">이 설정을 활성화하면 동영상 재생이 끊기거나 배터리 수명이 단축되고 알려지지 않은 문제점이 발생할 수 있습니다.</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
<string name="microg_settings_title">GmsCore 설정</string>
|
||||
<string name="microg_settings_summary">알림 수신을 위한 클라우드 메시징을 설정할 수 있습니다</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">최근에 계정 로그인 정보를 변경했다면 MicroG를 제거하고 다시 설치하세요.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">리다이렉션 없이 링크 바로 열기</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">앱 내에서 외부 링크를 열 때, URL 리다이렉션(youtube.com/redirect)을 거치지 않고 연결됩니다</string>
|
||||
@@ -1400,22 +1408,22 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요"</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">스트리밍 데이터를 변경합니다</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"스트리밍 데이터를 변경하지 않습니다
|
||||
동영상 재생 문제가 발생할 수 있습니다"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">이 설정을 비활성화하면 동영상 재생 문제가 발생할 수 있습니다</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">이 설정을 비활성화하면 동영상 재생 문제가 발생할 수 있습니다.</string>
|
||||
<string name="revanced_spoof_video_streams_client_type_title">기본 클라이언트</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">iOS AVC (H.264) 강제로 활성화하기</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">동영상 코덱을 AVC (H.264)로 강제로 활성화합니다\n\n• 일부 VP9 코덱 동영상에서 제거되었던 화질 값이 표시될 수 있습니다\n• 최대 화질 값이 1080p이므로, 초고화질 동영상을 재생할 수 없습니다\n• HDR 동영상을 재생할 수 없습니다</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">동영상 코덱을 자동으로 결정합니다\n\n• 예전에 업로드된 동영상을 재생했는데 VP9 코덱 응답을 받았을 경우, 일부 화질값이 제거되어 360p와 1080p(Premium 기능)만 선택가능할 수 있거나 화질 메뉴를 선택불가능할 수 있습니다</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"이 설정를 활성화하면 배터리 수명이 향상되고, 동영상 재생 끊김 문제가 해결될 수 있습니다
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"이 설정를 활성화하면 배터리 수명이 향상되고, 동영상 재생 끊김 문제가 해결될 수 있습니다.
|
||||
|
||||
AVC의 최대 화질 값은 1080p이고, OPUS 코덱을 사용불가 및 HDR 동영상을 재생할 수 없으며, 동영상을 재생했을 경우에는 VP9 또는 AV1보다 더 많은 모바일 데이터를 사용되오니 주의하세요"</string>
|
||||
AVC의 최대 화질 값은 1080p이고, OPUS 코덱을 사용불가 및 HDR 동영상을 재생할 수 없으며, 동영상을 재생했을 경우에는 VP9 또는 AV1보다 더 많은 모바일 데이터를 사용되오니 주의하세요."</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_tv_title">알려진 문제점</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_tv_summary">"• 영화 또는 유료 동영상이 재생되지 않을 수 있습니다.
|
||||
<string name="revanced_spoof_video_streams_about_ios_tv_summary">"• 영화 또는 유료 동영상이 재생되지 않을 수 있습니다
|
||||
• 안정적인 볼륨을 사용할 수 없습니다
|
||||
• 동영상이 1초 일찍 종료될 수 있습니다"</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_title">알려진 문제점</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_summary">"• 오디오 트랙 메뉴가 표시되지 않습니다
|
||||
• 안정적인 볼륨을 사용할 수 없습니다
|
||||
• 원본 오디오 트랙를 강제로 활성화할 수 없습니다."</string>
|
||||
• 원본 오디오 트랙를 강제로 활성화할 수 없습니다"</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_av1">• AV1 코덱이 지원되지 않습니다</string>
|
||||
<string name="revanced_spoof_video_streams_about_kids_videos">• Kids 동영상은 로그인을 하지 않았거나 시크릿 모드에서는 재생되지 않을 수 있습니다</string>
|
||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">전문 통계에서 표시하기</string>
|
||||
@@ -1431,8 +1439,8 @@ AVC의 최대 화질 값은 1080p이고, OPUS 코덱을 사용불가 및 HDR 동
|
||||
<string name="revanced_block_audio_ads_summary_off">음성 광고를 차단하지 않습니다</string>
|
||||
</patch>
|
||||
<patch id="ad.embedded.embeddedAdsPatch">
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s 를 차단할 수 없기 때문에 광고가 표시될 것입니다. 설정에서 다른 광고 차단 서비스로 전환해 보세요</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s 에서 오류가 발생했기 때문에 광고가 표시될 것입니다. 설정에서 다른 광고 차단 서비스로 전환해 보세요</string>
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s 를 차단할 수 없기 때문에 광고가 표시될 것입니다. 설정에서 다른 광고 차단 서비스로 전환해 보세요.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s 에서 오류가 발생했기 때문에 광고가 표시될 것입니다. 설정에서 다른 광고 차단 서비스로 전환해 보세요.</string>
|
||||
<string name="revanced_block_embedded_ads_title">광고 차단 Proxy 서버 사용하기</string>
|
||||
<string name="revanced_block_embedded_ads_entry_1">사용 안함</string>
|
||||
<string name="revanced_block_embedded_ads_entry_2">Luminous Proxy</string>
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -522,6 +522,11 @@ Reguliuokite garsumą braukdami vertikaliai dešinėje ekrano pusėje"</string>
|
||||
<string name="revanced_hide_thanks_button_title">Slėpti Ačiū</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Ačiū mygtukas paslėptas</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Ačiū mygtukas rodomas</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Slėpti klausimą</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Klausimo mygtukas yra paslėptas</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Klausimo mygtukas rodomas</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Slėpti Iškarpą</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Iškarpos mygtukas paslėptas</string>
|
||||
@@ -1305,6 +1310,9 @@ Gali būti atrakinta aukštesnės vaizdo įrašų kokybės, bet galite patirti v
|
||||
<string name="microg_settings_title">„GmsCore“ nustatymai</string>
|
||||
<string name="microg_settings_summary">„GmsCore“ nustatymai</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Jei neseniai pakeitėte savo paskyros prisijungimo duomenis, išdiekite ir iš naujo įdiekite „MicroG“.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Aplenkti URL nukreipimus</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">URL nukreipimai aplenkiami</string>
|
||||
|
||||
@@ -522,6 +522,11 @@ Regulējiet skaļumu, velkot vertikāli ekrāna labajā pusē"</string>
|
||||
<string name="revanced_hide_thanks_button_title">Paslēpt Paldies</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Paldies poga ir paslēpta</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Paldies poga ir redzama</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Paslēpt jautājumu</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Jautājuma poga ir paslēpta</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Jautājuma poga ir redzama</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Paslēpt Izgriezt</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Izgriezt poga ir paslēpta</string>
|
||||
@@ -1305,6 +1310,9 @@ Var tikt atbloķētas augstākas video kvalitātes, taču var rasties video atsk
|
||||
<string name="microg_settings_title">GmsCore iestatījumi</string>
|
||||
<string name="microg_settings_summary">GmsCore iestatījumi</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Ja nesen mainījāt sava konta pieteikšanās informāciju, atinstalējiet un atkārtoti instalējiet MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Aiziet garām URL pāradresācijai</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">URL pāradresācija tiek apiet</string>
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -522,6 +522,11 @@ Pas het volume aan door verticaal over de rechterkant van het scherm te vegen"</
|
||||
<string name="revanced_hide_thanks_button_title">Bedankt verbergen</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Bedankt-knop is verborgen</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Bedankt-knop wordt weergegeven</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Vraag verbergen</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Knop \"Vraag\" is verborgen</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Knop \"Vraag\" wordt weergegeven</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Fragment verbergen</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Fragment knop is verborgen</string>
|
||||
@@ -1304,6 +1309,9 @@ Het inschakelen hiervan kan hogere videokwaliteiten ontgrendelen"</string>
|
||||
<string name="microg_settings_title">GmsCore-instellingen</string>
|
||||
<string name="microg_settings_summary">Instellingen voor GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Als u onlangs de inloggegevens van uw account hebt gewijzigd, verwijder dan MicroG en installeer het opnieuw.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Omzeil URL-omleidingen</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">URL-omleidingen worden omzeild</string>
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
@@ -522,6 +522,11 @@ Dostosuj głośność, przesuwając pionowo po prawej stronie ekranu"</string>
|
||||
<string name="revanced_hide_thanks_button_title">Przycisk od dziękowania</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Przycisk od dziękowania jest ukryty</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Przycisk od dziękowania jest widoczny</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Ukryj Zapytaj</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Przycisk Zapytaj jest ukryty</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Przycisk Zapytaj jest widoczny</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Przycisk od klipów</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Przycisk tworzenia klipów jest ukryty</string>
|
||||
@@ -1306,6 +1311,9 @@ Włączenie tego może odblokować wyższe jakości wideo"</string>
|
||||
<string name="microg_settings_title">Ustawienia GmsCore</string>
|
||||
<string name="microg_settings_summary">Ustawienia GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Jeśli niedawno zmieniono dane logowania do konta, odinstaluj i zainstaluj ponownie MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Omijanie przekierowań URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Przekierowanie URL jest omijane</string>
|
||||
|
||||
@@ -520,6 +520,11 @@ Ajuste o volume deslizando verticalmente no lado direito da tela"</string>
|
||||
<string name="revanced_hide_thanks_button_title">Ocultar Valeu</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Botão valeu está oculto</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">O botão valeu é mostrado</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Ocultar \"Perguntar\"</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Botão \"Perguntar\" oculto</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">O botão \"Perguntar\" é mostrado</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Ocultar Clipe</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Botão clipe está oculto</string>
|
||||
@@ -1303,6 +1308,9 @@ Habilitar isso pode desbloquear qualidades de vídeo mais altas"</string>
|
||||
<string name="microg_settings_title">Configurações do GmsCore</string>
|
||||
<string name="microg_settings_summary">Configurações do GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Se você alterou recentemente os detalhes de login da sua conta, desinstale e reinstale o MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Ignorar redirecionamentos de URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Redirecionamentos de URL estão ignorados</string>
|
||||
|
||||
@@ -522,6 +522,11 @@ Ajuste o volume deslizando verticalmente no lado direito da tela"</string>
|
||||
<string name="revanced_hide_thanks_button_title">Esconder Obrigado</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">O botão de agradecimento está escondido</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">O botão Obrigado é visível</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Ocultar Perguntar</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">O botão Perguntar está oculto</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">O botão Perguntar está visível</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Esconder clipe</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">O botão do clipe está escondido</string>
|
||||
@@ -1306,6 +1311,9 @@ Bật tính năng này có thể mở khóa chất lượng video cao hơn"</str
|
||||
<string name="microg_settings_title">Configurações do GmsCore</string>
|
||||
<string name="microg_settings_summary">Configurações para GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Se você alterou recentemente os detalhes de login da sua conta, desinstale e reinstale o MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Ignorar redirecionamentos de URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Redirecionamentos de URL estão ignorados</string>
|
||||
|
||||
@@ -522,6 +522,11 @@ Reglați volumul glisând vertical pe partea dreaptă a ecranului"</string>
|
||||
<string name="revanced_hide_thanks_button_title">Ascunde mulţumirile</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Butonul de multumire este ascuns</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Butonul de multumire este afisat</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Ascunde \"Întreabă\"</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Butonul Întreabă este ascuns</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Butonul Întreabă este afișat</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Ascunde Clip</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Butonul clip este ascuns</string>
|
||||
@@ -1305,6 +1310,9 @@ Activarea acestei opțiuni poate debloca calități video mai mari"</string>
|
||||
<string name="microg_settings_title">Setări GmsCore</string>
|
||||
<string name="microg_settings_summary">Setări pentru GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Dacă ți-ai schimbat recent detaliile de conectare la cont, dezinstalează și reinstalează MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Ignoră redirecționările adreselor URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Redirecționările URL sunt ocolite</string>
|
||||
|
||||
@@ -459,26 +459,26 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">Включить жест автояркости</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">Активация автояркости жестом до самого низкого значения яркости включена</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">Активация автояркости жестом до самого низкого значения яркости отключена</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">Автоматически</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">Авто</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">Время показа панели жестов</string>
|
||||
<string name="revanced_swipe_overlay_timeout_summary">Количество миллисекунд для показа всплывающей панели при жестах</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_title">Затемнение фона панели жестов</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_summary">Значение затемнения всплывающей панели при жестах от 0 до 100</string>
|
||||
<string name="revanced_swipe_overlay_background_opacity_invalid_toast">Значение затемнения панели жестов должно быть от 0 до 100</string>
|
||||
<string name="revanced_swipe_overlay_progress_color_title">Цвет индикатора выполнения наложения жестов</string>
|
||||
<string name="revanced_swipe_overlay_progress_color_summary">Цвет индикатора выполнения для элементов управления громкостью и яркостью</string>
|
||||
<string name="revanced_swipe_overlay_progress_color_invalid_toast">Недопустимый цвет индикатора выполнения</string>
|
||||
<string name="revanced_swipe_overlay_progress_color_title">Цвет полосы прогресса при жестах</string>
|
||||
<string name="revanced_swipe_overlay_progress_color_summary">Цвет полосы прогресса при изменении громкости и яркости жестами</string>
|
||||
<string name="revanced_swipe_overlay_progress_color_invalid_toast">Недопустимый цвет полосы прогресса</string>
|
||||
<string name="revanced_swipe_text_overlay_size_title">Размер текста панели жестов</string>
|
||||
<string name="revanced_swipe_text_overlay_size_summary">Размер текста всплывающей панели при жестах должен быть в диапазоне 1–30</string>
|
||||
<string name="revanced_swipe_text_overlay_size_invalid_toast">Размер текста должен быть в диапазоне 1–30</string>
|
||||
<string name="revanced_swipe_text_overlay_size_summary">Размер текста панели жестов от 1 до 30</string>
|
||||
<string name="revanced_swipe_text_overlay_size_invalid_toast">Размер текста должен быть в диапазоне от 1 до 30</string>
|
||||
<string name="revanced_swipe_threshold_title">Порог величины жеста</string>
|
||||
<string name="revanced_swipe_threshold_summary">Минимальная амплитуда движения, распознаваемого как жест</string>
|
||||
<string name="revanced_swipe_volume_sensitivity_title">Чувствительность жеста регулировки громкости</string>
|
||||
<string name="revanced_swipe_volume_sensitivity_summary">Величина изменения громкости при регулировке жестом</string>
|
||||
<string name="revanced_swipe_overlay_style_title">Стиль панели жестов</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_1">Горизонтальный индикатор</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_2">Горизонтальный индикатор (минимальный — сверху)</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_3">Горизонтальный индикатор (минимальный — по центру)</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_2">Горизонтальный индикатор (минимальный - сверху)</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_3">Горизонтальный индикатор (минимальный - по центру)</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_4">Круговой индикатор</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_5">Круговой индикатор (минимальный)</string>
|
||||
<string name="revanced_swipe_overlay_style_entry_6">Вертикальный индикатор</string>
|
||||
@@ -522,6 +522,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_thanks_button_title">Скрыть кнопку \"Спасибо\"</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Кнопка \"Спасибо\" под плеером скрыта</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Кнопка \"Спасибо\" под плеером показана</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Скрыть кнопку \"Спросить\"</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Кнопка \"Спросить\" скрыта</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Кнопка \"Спросить\" показана</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Скрыть кнопку \"Создать клип\"</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Кнопка \"Создать клип\" под плеером скрыта</string>
|
||||
@@ -1306,6 +1311,9 @@ Second \"item\" text"</string>
|
||||
<string name="microg_settings_title">GmsCore</string>
|
||||
<string name="microg_settings_summary">Настройки GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Если Вы недавно изменили данные для входа в свою учетную запись, удалите и переустановите MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Обход перенаправлений URL-адресов</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Перенаправления URL-адресов (youtube.com/redirect) обходятся и исходные URL-адреса открываются напрямую</string>
|
||||
|
||||
@@ -84,6 +84,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
Button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
</patch>
|
||||
@@ -195,6 +197,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user