chore: Merge branch dev to main (#6237)

This commit is contained in:
LisoUseInAIKyrios
2025-11-10 12:03:02 +02:00
committed by GitHub
150 changed files with 3823 additions and 1201 deletions

View File

@@ -29,7 +29,7 @@ jobs:
run: ./gradlew :patches:buildAndroid --no-daemon
- name: Upload artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: revanced-patches
path: patches/build/libs

View File

@@ -35,7 +35,7 @@ jobs:
run: ./gradlew :patches:buildAndroid clean
- name: Setup Node.js
uses: actions/setup-node@v5
uses: actions/setup-node@v6
with:
node-version: 'lts/*'
cache: 'npm'

View File

@@ -1,3 +1,76 @@
# [5.46.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.46.0-dev.9...v5.46.0-dev.10) (2025-11-09)
### Features
* **YouTube - Hide layout components:** Add video description "Hide Featured content" and "Hide Subscribe button" ([#6253](https://github.com/ReVanced/revanced-patches/issues/6253)) ([da4cf94](https://github.com/ReVanced/revanced-patches/commit/da4cf940911a4406e2c9dd558b60305385a80c61))
# [5.46.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.46.0-dev.8...v5.46.0-dev.9) (2025-11-09)
### Features
* **YouTube Music:** Add `Change miniplayer color` patch ([#6259](https://github.com/ReVanced/revanced-patches/issues/6259)) ([ab808ae](https://github.com/ReVanced/revanced-patches/commit/ab808aeb773592cb26c848d8456478a346ec3bad))
# [5.46.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.46.0-dev.7...v5.46.0-dev.8) (2025-11-09)
### Features
* **YouTube Music:** Add `Hide buttons` patch ([#6255](https://github.com/ReVanced/revanced-patches/issues/6255)) ([7a18ebc](https://github.com/ReVanced/revanced-patches/commit/7a18ebc7ab74ba30c5d5284a4856c55cdfc31097))
# [5.46.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.46.0-dev.6...v5.46.0-dev.7) (2025-11-08)
### Bug Fixes
* **YouTube - Settings:** Add additional languages to ReVanced language preference ([d390b54](https://github.com/ReVanced/revanced-patches/commit/d390b54dab92d75b4e0d3e38344eae489dd69d98))
# [5.46.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.46.0-dev.5...v5.46.0-dev.6) (2025-11-08)
### Features
* **YouTube - Debugging:** Add setting to block experimental client flags ([#6196](https://github.com/ReVanced/revanced-patches/issues/6196)) ([2e9d695](https://github.com/ReVanced/revanced-patches/commit/2e9d6959c94df7588b9e34b18770e9f437e91926))
# [5.46.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.46.0-dev.4...v5.46.0-dev.5) (2025-11-07)
### Bug Fixes
* **Duolingo - Disable ads:** Constrain patch to last working app target ([f238ae9](https://github.com/ReVanced/revanced-patches/commit/f238ae9895000f01d1dccb800cc8efde0d5362bd))
* **Instagram - Hide navigation buttons:** Constrain patch to last working app target ([e030e9c](https://github.com/ReVanced/revanced-patches/commit/e030e9c07a7748e117ac44f6776a9f6317b20623))
* **Spotify - Hide Create button:** Remove obsolete patch that is no longer needed ([#6252](https://github.com/ReVanced/revanced-patches/issues/6252)) ([59d85b2](https://github.com/ReVanced/revanced-patches/commit/59d85b28a7fcb285ff5f2bb6ae654020d76b2019))
# [5.46.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.46.0-dev.3...v5.46.0-dev.4) (2025-11-07)
### Bug Fixes
* **YouTube - Check watch history domain name resolution:** Fix false positive warning message if the internet connection fails halfway into the DNS check ([5726353](https://github.com/ReVanced/revanced-patches/commit/57263538c79f5a561c449229ac8e068c641285d3))
# [5.46.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.46.0-dev.2...v5.46.0-dev.3) (2025-11-06)
### Bug Fixes
* **YouTube - Hide layout components:** Fix "Hide Hype points" ([#6247](https://github.com/ReVanced/revanced-patches/issues/6247)) ([5821440](https://github.com/ReVanced/revanced-patches/commit/582144026d28e57bb7adcbba39244f3c7cdbc0f3))
# [5.46.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.46.0-dev.1...v5.46.0-dev.2) (2025-11-04)
### Bug Fixes
* **YouTube - Settings:** Resolve settings search crash when searching for specific words ([#6231](https://github.com/ReVanced/revanced-patches/issues/6231)) ([76dcfae](https://github.com/ReVanced/revanced-patches/commit/76dcfaefd8679e45a70f265b0239436e60c055cf))
# [5.46.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.45.0...v5.46.0-dev.1) (2025-11-04)
### Features
* **YouTube - Hide layout components:** Add "Hide Hype points" ([#6230](https://github.com/ReVanced/revanced-patches/issues/6230)) ([a52c015](https://github.com/ReVanced/revanced-patches/commit/a52c0153b12c3f6f0ad260e03d2e9850c0466392))
* **YouTube - Hide player flyout menu items:** Add "Hide Listen with YouTube Music" ([#6232](https://github.com/ReVanced/revanced-patches/issues/6232)) ([858edbf](https://github.com/ReVanced/revanced-patches/commit/858edbf3e7f394fcc766d767c8dc54cf5ba24370))
# [5.45.0](https://github.com/ReVanced/revanced-patches/compare/v5.44.0...v5.45.0) (2025-11-01)

View File

@@ -0,0 +1,14 @@
package app.revanced.extension.music.patches;
import app.revanced.extension.music.settings.Settings;
@SuppressWarnings("unused")
public class ChangeMiniplayerColorPatch {
/**
* Injection point
*/
public static boolean changeMiniplayerColor() {
return Settings.CHANGE_MINIPLAYER_COLOR.get();
}
}

View File

@@ -0,0 +1,49 @@
package app.revanced.extension.music.patches;
import static app.revanced.extension.shared.Utils.hideViewBy0dpUnderCondition;
import android.view.View;
import android.view.ViewGroup;
import app.revanced.extension.music.settings.Settings;
@SuppressWarnings("unused")
public class HideButtonsPatch {
/**
* Injection point
*/
public static int hideCastButton(int original) {
return Settings.HIDE_CAST_BUTTON.get() ? View.GONE : original;
}
/**
* Injection point
*/
public static void hideCastButton(View view) {
hideViewBy0dpUnderCondition(Settings.HIDE_CAST_BUTTON, view);
}
/**
* Injection point
*/
public static boolean hideHistoryButton(boolean original) {
return original && !Settings.HIDE_HISTORY_BUTTON.get();
}
/**
* Injection point
*/
public static void hideNotificationButton(View view) {
if (view.getParent() instanceof ViewGroup viewGroup) {
hideViewBy0dpUnderCondition(Settings.HIDE_NOTIFICATION_BUTTON, viewGroup);
}
}
/**
* Injection point
*/
public static void hideSearchButton(View view) {
hideViewBy0dpUnderCondition(Settings.HIDE_SEARCH_BUTTON, view);
}
}

View File

@@ -1,24 +0,0 @@
package app.revanced.extension.music.patches;
import static app.revanced.extension.shared.Utils.hideViewBy0dpUnderCondition;
import android.view.View;
import app.revanced.extension.music.settings.Settings;
@SuppressWarnings("unused")
public class HideCastButtonPatch {
/**
* Injection point
*/
public static int hideCastButton(int original) {
return Settings.HIDE_CAST_BUTTON.get() ? View.GONE : original;
}
/**
* Injection point
*/
public static void hideCastButton(View view) {
hideViewBy0dpUnderCondition(Settings.HIDE_CAST_BUTTON, view);
}
}

View File

@@ -3,6 +3,7 @@ package app.revanced.extension.music.patches;
import static app.revanced.extension.shared.Utils.hideViewBy0dpUnderCondition;
import android.view.View;
import app.revanced.extension.music.settings.Settings;
@SuppressWarnings("unused")

View File

@@ -16,8 +16,11 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_GET_PREMIUM_LABEL = new BooleanSetting("revanced_music_hide_get_premium_label", TRUE, true);
// General
public static final BooleanSetting HIDE_CAST_BUTTON = new BooleanSetting("revanced_music_hide_cast_button", TRUE, false);
public static final BooleanSetting HIDE_CAST_BUTTON = new BooleanSetting("revanced_music_hide_cast_button", TRUE, true);
public static final BooleanSetting HIDE_CATEGORY_BAR = new BooleanSetting("revanced_music_hide_category_bar", FALSE, true);
public static final BooleanSetting HIDE_HISTORY_BUTTON = new BooleanSetting("revanced_music_hide_history_button", FALSE, true);
public static final BooleanSetting HIDE_SEARCH_BUTTON = new BooleanSetting("revanced_music_hide_search_button", FALSE, true);
public static final BooleanSetting HIDE_NOTIFICATION_BUTTON = new BooleanSetting("revanced_music_hide_notification_button", FALSE, true);
public static final BooleanSetting HIDE_NAVIGATION_BAR_HOME_BUTTON = new BooleanSetting("revanced_music_hide_navigation_bar_home_button", FALSE, true);
public static final BooleanSetting HIDE_NAVIGATION_BAR_SAMPLES_BUTTON = new BooleanSetting("revanced_music_hide_navigation_bar_samples_button", FALSE, true);
public static final BooleanSetting HIDE_NAVIGATION_BAR_EXPLORE_BUTTON = new BooleanSetting("revanced_music_hide_navigation_bar_explore_button", FALSE, true);
@@ -27,6 +30,7 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_NAVIGATION_BAR_LABEL = new BooleanSetting("revanced_music_hide_navigation_bar_labels", FALSE, true);
// Player
public static final BooleanSetting CHANGE_MINIPLAYER_COLOR = new BooleanSetting("revanced_music_change_miniplayer_color", FALSE, true);
public static final BooleanSetting PERMANENT_REPEAT = new BooleanSetting("revanced_music_play_permanent_repeat", FALSE, true);
// Miscellaneous

View File

@@ -16,6 +16,7 @@ import java.util.Arrays;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.ui.Dim;
import com.amazon.video.sdk.player.Player;
@@ -64,9 +65,8 @@ public class PlaybackSpeedPatch {
SpeedIconDrawable speedIcon = new SpeedIconDrawable();
speedButton.setImageDrawable(speedIcon);
int buttonSize = Utils.dipToPixels(48);
speedButton.setMinimumWidth(buttonSize);
speedButton.setMinimumHeight(buttonSize);
speedButton.setMinimumWidth(Dim.dp48);
speedButton.setMinimumHeight(Dim.dp48);
return speedButton;
}
@@ -197,11 +197,11 @@ class SpeedIconDrawable extends Drawable {
@Override
public int getIntrinsicWidth() {
return Utils.dipToPixels(32);
return Dim.dp32;
}
@Override
public int getIntrinsicHeight() {
return Utils.dipToPixels(32);
return Dim.dp32;
}
}
}

View File

@@ -23,9 +23,7 @@ import android.os.Looper;
import android.preference.Preference;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.util.DisplayMetrics;
import android.util.Pair;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
@@ -34,17 +32,15 @@ import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;
import android.widget.Toolbar;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.text.Bidi;
import java.text.Collator;
import java.text.Normalizer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -61,6 +57,7 @@ import app.revanced.extension.shared.settings.AppLanguage;
import app.revanced.extension.shared.settings.BaseSettings;
import app.revanced.extension.shared.settings.BooleanSetting;
import app.revanced.extension.shared.settings.preference.ReVancedAboutPreference;
import app.revanced.extension.shared.ui.Dim;
@SuppressWarnings("NewApi")
public class Utils {
@@ -79,6 +76,15 @@ public class Utils {
@Nullable
private static Boolean isDarkModeEnabled;
// Cached Collator instance with its locale.
@Nullable
private static Locale cachedCollatorLocale;
@Nullable
private static Collator cachedCollator;
private static final Pattern PUNCTUATION_PATTERN = Pattern.compile("\\p{P}+");
private static final Pattern DIACRITICS_PATTERN = Pattern.compile("\\p{M}");
private Utils() {
} // utility class
@@ -749,31 +755,25 @@ public class Utils {
}
/**
* Hide a view by setting its layout params to 0x0
* @param view The view to hide.
* Hides a view by setting its layout width and height to 0dp.
* Handles null layout params safely.
*
* @param view The view to hide. If null, does nothing.
*/
public static void hideViewByLayoutParams(View view) {
if (view instanceof LinearLayout) {
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, 0);
view.setLayoutParams(layoutParams);
} else if (view instanceof FrameLayout) {
FrameLayout.LayoutParams layoutParams2 = new FrameLayout.LayoutParams(0, 0);
view.setLayoutParams(layoutParams2);
} else if (view instanceof RelativeLayout) {
RelativeLayout.LayoutParams layoutParams3 = new RelativeLayout.LayoutParams(0, 0);
view.setLayoutParams(layoutParams3);
} else if (view instanceof Toolbar) {
Toolbar.LayoutParams layoutParams4 = new Toolbar.LayoutParams(0, 0);
view.setLayoutParams(layoutParams4);
} else if (view instanceof ViewGroup) {
ViewGroup.LayoutParams layoutParams5 = new ViewGroup.LayoutParams(0, 0);
view.setLayoutParams(layoutParams5);
public static void hideViewByLayoutParams(@Nullable View view) {
if (view == null) return;
ViewGroup.LayoutParams params = view.getLayoutParams();
if (params == null) {
// Create generic 0x0 layout params accepted by all ViewGroups.
params = new ViewGroup.LayoutParams(0, 0);
} else {
ViewGroup.LayoutParams params = view.getLayoutParams();
params.width = 0;
params.height = 0;
view.setLayoutParams(params);
}
view.setLayoutParams(params);
}
/**
@@ -790,13 +790,10 @@ public class Utils {
public static void setDialogWindowParameters(Window window, int gravity, int yOffsetDip, int widthPercentage, boolean dimAmount) {
WindowManager.LayoutParams params = window.getAttributes();
DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics();
int portraitWidth = Math.min(displayMetrics.widthPixels, displayMetrics.heightPixels);
params.width = (int) (portraitWidth * (widthPercentage / 100.0f)); // Set width based on parameters.
params.width = Dim.pctPortraitWidth(widthPercentage);
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.gravity = gravity;
params.y = yOffsetDip > 0 ? dipToPixels(yOffsetDip) : 0;
params.y = yOffsetDip > 0 ? Dim.dp(yOffsetDip) : 0;
if (dimAmount) {
params.dimAmount = 0f;
}
@@ -805,18 +802,6 @@ public class Utils {
window.setBackgroundDrawable(null); // Remove default dialog background
}
/**
* Creates an array of corner radii for a rounded rectangle shape.
*
* @param dp Radius in density-independent pixels (dip) to apply to all corners.
* @return An array of eight float values representing the corner radii
* (top-left, top-right, bottom-right, bottom-left).
*/
public static float[] createCornerRadii(float dp) {
final float radius = dipToPixels(dp);
return new float[]{radius, radius, radius, radius, radius, radius, radius, radius};
}
/**
* Sets the theme light color used by the app.
*/
@@ -976,30 +961,60 @@ public class Utils {
}
}
private static final Pattern punctuationPattern = Pattern.compile("\\p{P}+");
/**
* Strips all punctuation and converts to lower case. A null parameter returns an empty string.
* Removes punctuation and converts text to lowercase. Returns an empty string if input is null.
*/
public static String removePunctuationToLowercase(@Nullable CharSequence original) {
if (original == null) return "";
return punctuationPattern.matcher(original).replaceAll("")
return PUNCTUATION_PATTERN.matcher(original).replaceAll("")
.toLowerCase(BaseSettings.REVANCED_LANGUAGE.get().getLocale());
}
/**
* Sort a PreferenceGroup and all it's sub groups by title or key.
* Normalizes text for search: applies NFD, removes diacritics, and lowercases (locale-neutral).
* Returns an empty string if input is null.
*/
public static String normalizeTextToLowercase(@Nullable CharSequence original) {
if (original == null) return "";
return DIACRITICS_PATTERN.matcher(Normalizer.normalize(original, Normalizer.Form.NFD))
.replaceAll("").toLowerCase(Locale.ROOT);
}
/**
* Returns a cached Collator for the current locale, or creates a new one if locale changed.
*/
private static Collator getCollator() {
Locale currentLocale = BaseSettings.REVANCED_LANGUAGE.get().getLocale();
if (cachedCollator == null || !currentLocale.equals(cachedCollatorLocale)) {
cachedCollatorLocale = currentLocale;
cachedCollator = Collator.getInstance(currentLocale);
cachedCollator.setStrength(Collator.SECONDARY); // Case-insensitive, diacritic-insensitive.
}
return cachedCollator;
}
/**
* Sorts a {@link PreferenceGroup} and all nested subgroups by title or key.
* <p>
* Sort order is determined by the preferences key {@link Sort} suffix.
* The sort order is controlled by the {@link Sort} suffix present in the preference key.
* Preferences without a key or without a {@link Sort} suffix remain in their original order.
* <p>
* If a preference has no key or no {@link Sort} suffix,
* then the preferences are left unsorted.
* Sorting is performed using {@link Collator} with the current user locale,
* ensuring correct alphabetical ordering for all supported languages
* (e.g., Ukrainian "і", German "ß", French accented characters, etc.).
*
* @param group the {@link PreferenceGroup} to sort
*/
@SuppressWarnings("deprecation")
public static void sortPreferenceGroups(PreferenceGroup group) {
Sort groupSort = Sort.fromKey(group.getKey(), Sort.UNSORTED);
List<Pair<String, Preference>> preferences = new ArrayList<>();
// Get cached Collator for locale-aware string comparison.
Collator collator = getCollator();
for (int i = 0, prefCount = group.getPreferenceCount(); i < prefCount; i++) {
Preference preference = group.getPreference(i);
@@ -1030,10 +1045,11 @@ public class Utils {
preferences.add(new Pair<>(sortValue, preference));
}
//noinspection ComparatorCombinators
// Sort the list using locale-specific collation rules.
Collections.sort(preferences, (pair1, pair2)
-> pair1.first.compareTo(pair2.first));
-> collator.compare(pair1.first, pair2.first));
// Reassign order values to reflect the new sorted sequence
int index = 0;
for (Pair<String, Preference> pair : preferences) {
int order = index++;
@@ -1090,42 +1106,6 @@ public class Utils {
return getResourceColor(colorString);
}
/**
* Converts dip value to actual device pixels.
*
* @param dip The density-independent pixels value.
* @return The device pixel value.
*/
public static int dipToPixels(float dip) {
return (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
dip,
Resources.getSystem().getDisplayMetrics()
);
}
/**
* Converts a percentage of the screen height to actual device pixels.
*
* @param percentage The percentage of the screen height (e.g., 30 for 30%).
* @return The device pixel value corresponding to the percentage of screen height.
*/
public static int percentageHeightToPixels(int percentage) {
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
return (int) (metrics.heightPixels * (percentage / 100.0f));
}
/**
* Converts a percentage of the screen width to actual device pixels.
*
* @param percentage The percentage of the screen width (e.g., 30 for 30%).
* @return The device pixel value corresponding to the percentage of screen width.
*/
public static int percentageWidthToPixels(int percentage) {
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
return (int) (metrics.widthPixels * (percentage / 100.0f));
}
/**
* Uses {@link #adjustColorBrightness(int, float)} depending if light or dark mode is active.
*/

View File

@@ -61,7 +61,11 @@ public class CheckWatchHistoryDomainNameResolutionPatch {
// Prevent this false positive by verify youtube.com resolves.
// If youtube.com does not resolve, then it's not a watch history domain resolving error
// because the entire app will not work since no domains are resolving.
if (!domainResolvesToValidIP("youtube.com")
String domainYouTube = "youtube.com";
if (!domainResolvesToValidIP(domainYouTube)
|| domainResolvesToValidIP(HISTORY_TRACKING_ENDPOINT)
// Check multiple times, so a false positive from a flaky connection is almost impossible.
|| !domainResolvesToValidIP(domainYouTube)
|| domainResolvesToValidIP(HISTORY_TRACKING_ENDPOINT)) {
return;
}

View File

@@ -5,6 +5,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
@@ -71,6 +72,17 @@ public class CustomBrandingPatch {
}
}
/**
* Injection point.
*/
public static View getLottieViewOrNull(View lottieStartupView) {
if (BaseSettings.CUSTOM_BRANDING_ICON.get() == BrandingTheme.ORIGINAL) {
return lottieStartupView;
}
return null;
}
/**
* Injection point.
*/

View File

@@ -1,5 +1,9 @@
package app.revanced.extension.shared.patches;
import static java.lang.Boolean.TRUE;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@@ -21,12 +25,28 @@ public final class EnableDebuggingPatch {
? new ConcurrentHashMap<>(800, 0.5f, 1)
: null;
private static final Set<Long> DISABLED_FEATURE_FLAGS = parseFlags(BaseSettings.DISABLED_FEATURE_FLAGS.get());
// Log all disabled flags on app startup.
static {
if (LOG_FEATURE_FLAGS && !DISABLED_FEATURE_FLAGS.isEmpty()) {
StringBuilder sb = new StringBuilder("Disabled feature flags:\n");
for (Long flag : DISABLED_FEATURE_FLAGS) {
sb.append(" ").append(flag).append('\n');
}
Logger.printDebug(sb::toString);
}
}
/**
* Injection point.
*/
public static boolean isBooleanFeatureFlagEnabled(boolean value, Long flag) {
if (LOG_FEATURE_FLAGS && value) {
if (featureFlags.putIfAbsent(flag, true) == null) {
if (DISABLED_FEATURE_FLAGS.contains(flag)) {
return false;
}
if (featureFlags.putIfAbsent(flag, TRUE) == null) {
Logger.printDebug(() -> "boolean feature is enabled: " + flag);
}
}
@@ -70,10 +90,44 @@ public final class EnableDebuggingPatch {
if (LOG_FEATURE_FLAGS && !defaultValue.equals(value)) {
if (featureFlags.putIfAbsent(flag, true) == null) {
Logger.printDebug(() -> " string feature is enabled: " + flag
+ " value: " + value + (defaultValue.isEmpty() ? "" : " default: " + defaultValue));
+ " value: " + value + (defaultValue.isEmpty() ? "" : " default: " + defaultValue));
}
}
return value;
}
/**
* Get all logged feature flags.
* @return Set of all known flags
*/
public static Set<Long> getAllLoggedFlags() {
if (featureFlags != null) {
return new HashSet<>(featureFlags.keySet());
}
return new HashSet<>();
}
/**
* Public method for parsing flags.
* @param flags String containing newline-separated flag IDs
* @return Set of parsed flag IDs
*/
public static Set<Long> parseFlags(String flags) {
Set<Long> parsedFlags = new HashSet<>();
if (!flags.isBlank()) {
for (String flag : flags.split("\n")) {
String trimmedFlag = flag.trim();
if (trimmedFlag.isEmpty()) continue; // Skip empty lines.
try {
parsedFlags.add(Long.parseLong(trimmedFlag));
} catch (NumberFormatException e) {
Logger.printException(() -> "Invalid flag ID: " + flag);
}
}
}
return parsedFlags;
}
}

View File

@@ -7,7 +7,6 @@ import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.preference.PreferenceFragment;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
@@ -16,6 +15,7 @@ import android.widget.Toolbar;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.preference.ToolbarPreferenceFragment;
import app.revanced.extension.shared.ui.Dim;
/**
* Base class for hooking activities to inject a custom PreferenceFragment with a toolbar.
@@ -109,13 +109,12 @@ public abstract class BaseActivityHook extends Activity {
toolbar.setNavigationOnClickListener(getNavigationClickListener(activity));
toolbar.setTitle(STRING_REVANCED_SETTINGS_TITLE);
final int margin = Utils.dipToPixels(16);
toolbar.setTitleMarginStart(margin);
toolbar.setTitleMarginEnd(margin);
toolbar.setTitleMarginStart(Dim.dp16);
toolbar.setTitleMarginEnd(Dim.dp16);
TextView toolbarTextView = Utils.getChildView(toolbar, false, view -> view instanceof TextView);
if (toolbarTextView != null) {
toolbarTextView.setTextColor(Utils.getAppForegroundColor());
toolbarTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
toolbarTextView.setTextSize(20);
}
setToolbarLayoutParams(toolbar);

View File

@@ -42,4 +42,6 @@ public class BaseSettings {
public static final EnumSetting<BrandingTheme> CUSTOM_BRANDING_ICON = new EnumSetting<>("revanced_custom_branding_icon", BrandingTheme.ORIGINAL, true);
public static final IntegerSetting CUSTOM_BRANDING_NAME = new IntegerSetting("revanced_custom_branding_name", 1, true);
public static final StringSetting DISABLED_FEATURE_FLAGS = new StringSetting("revanced_disabled_feature_flags", "", true, parent(DEBUG));
}

View File

@@ -392,10 +392,13 @@ public abstract class Setting<T> {
/**
* Get the parent Settings that this setting depends on.
* @return List of parent Settings (e.g., BooleanSetting or EnumSetting), or empty list if no dependencies exist.
* @return List of parent Settings, or empty list if no dependencies exist.
* Defensive: handles null availability or missing getParentSettings() override.
*/
public List<Setting<?>> getParentSettings() {
return availability == null ? Collections.emptyList() : availability.getParentSettings();
return availability == null
? Collections.emptyList()
: Objects.requireNonNullElse(availability.getParentSettings(), Collections.emptyList());
}
/**

View File

@@ -1,7 +1,6 @@
package app.revanced.extension.shared.settings.preference;
import static app.revanced.extension.shared.StringRef.str;
import static app.revanced.extension.shared.Utils.dipToPixels;
import static app.revanced.extension.shared.Utils.getResourceIdentifierOrThrow;
import android.app.Dialog;
@@ -37,6 +36,7 @@ import app.revanced.extension.shared.settings.Setting;
import app.revanced.extension.shared.settings.StringSetting;
import app.revanced.extension.shared.ui.ColorDot;
import app.revanced.extension.shared.ui.CustomDialog;
import app.revanced.extension.shared.ui.Dim;
/**
* A custom preference for selecting a color via a hexadecimal code or a color picker dialog.
@@ -310,11 +310,8 @@ public class ColorPickerPreference extends EditTextPreference {
inputLayout.setGravity(Gravity.CENTER_VERTICAL);
dialogColorDot = new View(context);
LinearLayout.LayoutParams previewParams = new LinearLayout.LayoutParams(
dipToPixels(20),
dipToPixels(20)
);
previewParams.setMargins(dipToPixels(16), 0, dipToPixels(10), 0);
LinearLayout.LayoutParams previewParams = new LinearLayout.LayoutParams(Dim.dp20,Dim.dp20);
previewParams.setMargins(Dim.dp16, 0, Dim.dp10, 0);
dialogColorDot.setLayoutParams(previewParams);
inputLayout.addView(dialogColorDot);
updateDialogColorDot();

View File

@@ -1,6 +1,5 @@
package app.revanced.extension.shared.settings.preference;
import static app.revanced.extension.shared.Utils.dipToPixels;
import static app.revanced.extension.shared.settings.preference.ColorPickerPreference.getColorString;
import android.annotation.SuppressLint;
@@ -21,6 +20,7 @@ import androidx.annotation.ColorInt;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.ui.Dim;
/**
* A custom color picker view that allows the user to select a color using a hue slider, a saturation-value selector
@@ -54,28 +54,28 @@ public class ColorPickerView extends View {
}
/** Expanded touch area for the hue and opacity bars to increase the touch-sensitive area. */
public static final float TOUCH_EXPANSION = dipToPixels(20f);
public static final float TOUCH_EXPANSION = Dim.dp20;
/** Margin between different areas of the view (saturation-value selector, hue bar, and opacity slider). */
private static final float MARGIN_BETWEEN_AREAS = dipToPixels(24);
private static final float MARGIN_BETWEEN_AREAS = Dim.dp24;
/** Padding around the view. */
private static final float VIEW_PADDING = dipToPixels(16);
private static final float VIEW_PADDING = Dim.dp16;
/** Height of the hue bar. */
private static final float HUE_BAR_HEIGHT = dipToPixels(12);
private static final float HUE_BAR_HEIGHT = Dim.dp12;
/** Height of the opacity slider. */
private static final float OPACITY_BAR_HEIGHT = dipToPixels(12);
private static final float OPACITY_BAR_HEIGHT = Dim.dp12;
/** Corner radius for the hue bar. */
private static final float HUE_CORNER_RADIUS = dipToPixels(6);
private static final float HUE_CORNER_RADIUS = Dim.dp6;
/** Corner radius for the opacity slider. */
private static final float OPACITY_CORNER_RADIUS = dipToPixels(6);
private static final float OPACITY_CORNER_RADIUS = Dim.dp6;
/** Radius of the selector handles. */
private static final float SELECTOR_RADIUS = dipToPixels(12);
private static final float SELECTOR_RADIUS = Dim.dp12;
/** Stroke width for the selector handle outlines. */
private static final float SELECTOR_STROKE_WIDTH = 8;
@@ -202,7 +202,7 @@ public class ColorPickerView extends View {
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final float DESIRED_ASPECT_RATIO = 0.8f; // height = width * 0.8
final int minWidth = dipToPixels(250);
final int minWidth = Dim.dp(250);
final int minHeight = (int) (minWidth * DESIRED_ASPECT_RATIO) + (int) (HUE_BAR_HEIGHT + MARGIN_BETWEEN_AREAS)
+ (opacitySliderEnabled ? (int) (OPACITY_BAR_HEIGHT + MARGIN_BETWEEN_AREAS) : 0);

View File

@@ -0,0 +1,623 @@
package app.revanced.extension.shared.settings.preference;
import static app.revanced.extension.shared.StringRef.str;
import static app.revanced.extension.shared.Utils.getResourceIdentifierOrThrow;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.RoundRectShape;
import android.preference.Preference;
import android.text.Editable;
import android.text.InputType;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.Pair;
import android.util.SparseBooleanArray;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Space;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.patches.EnableDebuggingPatch;
import app.revanced.extension.shared.settings.BaseSettings;
import app.revanced.extension.shared.ui.CustomDialog;
import app.revanced.extension.shared.ui.Dim;
/**
* A custom preference that opens a dialog for managing feature flags.
* Allows moving boolean flags between active and blocked states with advanced selection.
*/
@SuppressWarnings({"deprecation", "unused"})
public class FeatureFlagsManagerPreference extends Preference {
private static final int DRAWABLE_REVANCED_SETTINGS_SELECT_ALL =
getResourceIdentifierOrThrow("revanced_settings_select_all", "drawable");
private static final int DRAWABLE_REVANCED_SETTINGS_DESELECT_ALL =
getResourceIdentifierOrThrow("revanced_settings_deselect_all", "drawable");
private static final int DRAWABLE_REVANCED_SETTINGS_COPY_ALL =
getResourceIdentifierOrThrow("revanced_settings_copy_all", "drawable");
private static final int DRAWABLE_REVANCED_SETTINGS_ARROW_RIGHT_ONE =
getResourceIdentifierOrThrow("revanced_settings_arrow_right_one", "drawable");
private static final int DRAWABLE_REVANCED_SETTINGS_ARROW_RIGHT_DOUBLE =
getResourceIdentifierOrThrow("revanced_settings_arrow_right_double", "drawable");
private static final int DRAWABLE_REVANCED_SETTINGS_ARROW_LEFT_ONE =
getResourceIdentifierOrThrow("revanced_settings_arrow_left_one", "drawable");
private static final int DRAWABLE_REVANCED_SETTINGS_ARROW_LEFT_DOUBLE =
getResourceIdentifierOrThrow("revanced_settings_arrow_left_double", "drawable");
/**
* Flags to hide from the UI.
*/
private static final Set<Long> FLAGS_TO_IGNORE = Set.of(
45386834L // 'You' tab settings icon.
);
/**
* Tracks state for range selection in ListView.
*/
private static class ListViewSelectionState {
int lastClickedPosition = -1; // Position of the last clicked item.
boolean isRangeSelecting = false; // True while a range is being selected.
}
/**
* Helper class to pass ListView and Adapter together.
*/
private record ColumnViews(ListView listView, FlagAdapter adapter) {}
{
setOnPreferenceClickListener(pref -> {
showFlagsManagerDialog();
return true;
});
}
public FeatureFlagsManagerPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public FeatureFlagsManagerPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public FeatureFlagsManagerPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public FeatureFlagsManagerPreference(Context context) {
super(context);
}
/**
* Shows the main dialog for managing feature flags.
*/
private void showFlagsManagerDialog() {
if (!BaseSettings.DEBUG.get()) {
Utils.showToastShort(str("revanced_debug_logs_disabled"));
return;
}
Context context = getContext();
// Load all known and disabled flags.
TreeSet<Long> allKnownFlags = new TreeSet<>(EnableDebuggingPatch.getAllLoggedFlags());
allKnownFlags.removeAll(FLAGS_TO_IGNORE);
TreeSet<Long> disabledFlags = new TreeSet<>(EnableDebuggingPatch.parseFlags(
BaseSettings.DISABLED_FEATURE_FLAGS.get()));
disabledFlags.removeAll(FLAGS_TO_IGNORE);
if (allKnownFlags.isEmpty() && disabledFlags.isEmpty()) {
// String does not need to be localized because it's basically impossible
// to reach the settings menu without encountering at least 1 flag.
Utils.showToastShort("No feature flags logged yet");
return;
}
TreeSet<Long> availableFlags = new TreeSet<>(allKnownFlags);
availableFlags.removeAll(disabledFlags);
TreeSet<Long> blockedFlags = new TreeSet<>(disabledFlags);
Pair<Dialog, LinearLayout> dialogPair = CustomDialog.create(
context,
getTitle() != null ? getTitle().toString() : "",
null,
null,
str("revanced_settings_save"),
() -> saveFlags(blockedFlags),
() -> {},
str("revanced_settings_reset"),
this::resetFlags,
true
);
LinearLayout mainLayout = dialogPair.second;
LinearLayout.LayoutParams contentParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, 0, 1.0f);
// Insert content before the dialog button row.
View contentView = createContentView(context, availableFlags, blockedFlags);
mainLayout.addView(contentView, mainLayout.getChildCount() - 1, contentParams);
Dialog dialog = dialogPair.first;
dialog.show();
Window window = dialog.getWindow();
if (window != null) {
Utils.setDialogWindowParameters(window, Gravity.CENTER, 0, 100, false);
}
}
/**
* Creates the main content view with two columns.
*/
private View createContentView(Context context, TreeSet<Long> availableFlags, TreeSet<Long> blockedFlags) {
LinearLayout contentLayout = new LinearLayout(context);
contentLayout.setOrientation(LinearLayout.VERTICAL);
// Headers.
TextView availableHeader = createHeader(context, "revanced_debug_feature_flags_manager_active_header");
TextView blockedHeader = createHeader(context, "revanced_debug_feature_flags_manager_blocked_header");
LinearLayout headersLayout = new LinearLayout(context);
headersLayout.setOrientation(LinearLayout.HORIZONTAL);
headersLayout.addView(availableHeader, new LinearLayout.LayoutParams(
0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f));
headersLayout.addView(blockedHeader, new LinearLayout.LayoutParams(
0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f));
// Columns.
View leftColumn = createColumn(context, availableFlags, availableHeader);
View rightColumn = createColumn(context, blockedFlags, blockedHeader);
ColumnViews leftViews = (ColumnViews) leftColumn.getTag();
ColumnViews rightViews = (ColumnViews) rightColumn.getTag();
updateHeaderCount(availableHeader, leftViews.adapter);
updateHeaderCount(blockedHeader, rightViews.adapter);
// Main columns layout.
LinearLayout columnsLayout = new LinearLayout(context);
columnsLayout.setOrientation(LinearLayout.HORIZONTAL);
columnsLayout.setLayoutParams(new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f));
columnsLayout.addView(leftColumn, new LinearLayout.LayoutParams(
0, ViewGroup.LayoutParams.MATCH_PARENT, 1f));
Space spaceBetweenColumns = new Space(context);
spaceBetweenColumns.setLayoutParams(new LinearLayout.LayoutParams(Dim.dp8, ViewGroup.LayoutParams.MATCH_PARENT));
columnsLayout.addView(spaceBetweenColumns);
columnsLayout.addView(rightColumn, new LinearLayout.LayoutParams(
0, ViewGroup.LayoutParams.MATCH_PARENT, 1f));
// Move buttons below columns.
Pair<LinearLayout, LinearLayout> moveButtons = createMoveButtons(context,
leftViews.listView, rightViews.listView,
availableFlags, blockedFlags, availableHeader, blockedHeader);
// Layout for buttons row.
LinearLayout buttonsRow = new LinearLayout(context);
buttonsRow.setOrientation(LinearLayout.HORIZONTAL);
buttonsRow.setLayoutParams(new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
buttonsRow.addView(moveButtons.first, new LinearLayout.LayoutParams(
0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f));
Space spaceBetweenButtons = new Space(context);
spaceBetweenButtons.setLayoutParams(new LinearLayout.LayoutParams(Dim.dp8, ViewGroup.LayoutParams.WRAP_CONTENT));
buttonsRow.addView(spaceBetweenButtons);
buttonsRow.addView(moveButtons.second, new LinearLayout.LayoutParams(
0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f));
contentLayout.addView(headersLayout);
contentLayout.addView(columnsLayout);
contentLayout.addView(buttonsRow);
return contentLayout;
}
/**
* Creates a header TextView.
*/
private TextView createHeader(Context context, String tag) {
TextView textview = new TextView(context);
textview.setTag(tag);
textview.setTextSize(16);
textview.setTextColor(Utils.getAppForegroundColor());
textview.setGravity(Gravity.CENTER);
return textview;
}
/**
* Creates a single column (search + buttons + list).
*/
private View createColumn(Context context, TreeSet<Long> flags, TextView countText) {
LinearLayout wrapper = new LinearLayout(context);
wrapper.setOrientation(LinearLayout.VERTICAL);
Pair<ListView, FlagAdapter> pair = createListView(context, flags, countText);
ListView listView = pair.first;
FlagAdapter adapter = pair.second;
EditText search = createSearchBox(context, adapter, listView, countText);
LinearLayout buttons = createActionButtons(context, listView, adapter);
listView.setLayoutParams(new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f));
ShapeDrawable background = new ShapeDrawable(new RoundRectShape(
Dim.roundedCorners(10), null, null));
background.getPaint().setColor(Utils.getEditTextBackground());
listView.setPadding(0, Dim.dp4, 0, Dim.dp4);
listView.setBackground(background);
listView.setOverScrollMode(View.OVER_SCROLL_NEVER);
wrapper.addView(search);
wrapper.addView(buttons);
wrapper.addView(listView);
// Save references for move buttons.
wrapper.setTag(new ColumnViews(listView, adapter));
return wrapper;
}
/**
* Updates the header text with the current count.
*/
private void updateHeaderCount(TextView header, FlagAdapter adapter) {
header.setText(str((String) header.getTag(), adapter.getCount()));
}
/**
* Creates a search box that filters the list.
*/
@SuppressLint("ClickableViewAccessibility")
private EditText createSearchBox(Context context, FlagAdapter adapter, ListView listView, TextView countText) {
EditText search = new EditText(context);
search.setInputType(InputType.TYPE_CLASS_NUMBER);
search.setTextSize(16);
search.setHint(str("revanced_debug_feature_flags_manager_search_hint"));
search.setHapticFeedbackEnabled(false);
search.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
search.addTextChangedListener(new TextWatcher() {
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {
adapter.setSearchQuery(s.toString());
listView.clearChoices();
updateHeaderCount(countText, adapter);
Drawable clearIcon = context.getResources().getDrawable(android.R.drawable.ic_menu_close_clear_cancel);
clearIcon.setBounds(0, 0, Dim.dp20, Dim.dp20);
search.setCompoundDrawables(null, null, TextUtils.isEmpty(s) ? null : clearIcon, null);
}
@Override public void afterTextChanged(Editable s) {}
});
search.setOnTouchListener((v, event) -> {
if (event.getAction() == MotionEvent.ACTION_UP) {
Drawable[] compoundDrawables = search.getCompoundDrawables();
if (compoundDrawables[2] != null &&
event.getRawX() >= (search.getRight() - compoundDrawables[2].getBounds().width())) {
search.setText("");
return true;
}
}
return false;
});
return search;
}
/**
* Creates action buttons.
*/
private LinearLayout createActionButtons(Context context, ListView listView, FlagAdapter adapter) {
LinearLayout row = new LinearLayout(context);
row.setOrientation(LinearLayout.HORIZONTAL);
row.setGravity(Gravity.CENTER);
row.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
ImageButton selectAll = createButton(context, DRAWABLE_REVANCED_SETTINGS_SELECT_ALL,
() -> {
for (int i = 0, count = adapter.getCount(); i < count; i++) {
listView.setItemChecked(i, true);
}
});
ImageButton clearAll = createButton(context, DRAWABLE_REVANCED_SETTINGS_DESELECT_ALL,
() -> {
listView.clearChoices();
adapter.notifyDataSetChanged();
});
ImageButton copy = createButton(context, DRAWABLE_REVANCED_SETTINGS_COPY_ALL,
() -> {
List<String> items = new ArrayList<>();
SparseBooleanArray checked = listView.getCheckedItemPositions();
if (checked.size() > 0) {
for (int i = 0, count = adapter.getCount(); i < count; i++) {
if (checked.get(i)) {
items.add(adapter.getItem(i));
}
}
} else {
for (Long flag : adapter.getFullFlags()) {
items.add(String.valueOf(flag));
}
}
Utils.setClipboard(TextUtils.join("\n", items));
Utils.showToastShort(str("revanced_debug_feature_flags_manager_toast_copied"));
});
row.addView(selectAll);
row.addView(clearAll);
row.addView(copy);
return row;
}
/**
* Creates the move buttons (left and right groups).
*/
private Pair<LinearLayout, LinearLayout> createMoveButtons(Context context,
ListView availableListView, ListView blockedListView,
TreeSet<Long> availableFlags, TreeSet<Long> blockedFlags,
TextView availableCountText, TextView blockedCountText) {
// Left group: >> >
LinearLayout leftButtons = new LinearLayout(context);
leftButtons.setOrientation(LinearLayout.HORIZONTAL);
leftButtons.setGravity(Gravity.CENTER);
ImageButton moveAllRight = createButton(context, DRAWABLE_REVANCED_SETTINGS_ARROW_RIGHT_DOUBLE,
() -> moveFlags(availableListView, blockedListView, availableFlags, blockedFlags,
availableCountText, blockedCountText, true));
ImageButton moveOneRight = createButton(context, DRAWABLE_REVANCED_SETTINGS_ARROW_RIGHT_ONE,
() -> moveFlags(availableListView, blockedListView, availableFlags, blockedFlags,
availableCountText, blockedCountText, false));
leftButtons.addView(moveAllRight);
leftButtons.addView(moveOneRight);
// Right group: < <<
LinearLayout rightButtons = new LinearLayout(context);
rightButtons.setOrientation(LinearLayout.HORIZONTAL);
rightButtons.setGravity(Gravity.CENTER);
ImageButton moveOneLeft = createButton(context, DRAWABLE_REVANCED_SETTINGS_ARROW_LEFT_ONE,
() -> moveFlags(blockedListView, availableListView, blockedFlags, availableFlags,
blockedCountText, availableCountText, false));
ImageButton moveAllLeft = createButton(context, DRAWABLE_REVANCED_SETTINGS_ARROW_LEFT_DOUBLE,
() -> moveFlags(blockedListView, availableListView, blockedFlags, availableFlags,
blockedCountText, availableCountText, true));
rightButtons.addView(moveOneLeft);
rightButtons.addView(moveAllLeft);
return new Pair<>(leftButtons, rightButtons);
}
/**
* Creates a styled ImageButton.
*/
@SuppressLint("ResourceType")
private ImageButton createButton(Context context, int drawableResId, Runnable action) {
ImageButton button = new ImageButton(context);
button.setImageResource(drawableResId);
button.setScaleType(ImageView.ScaleType.CENTER);
int[] attrs = {android.R.attr.selectableItemBackgroundBorderless};
//noinspection Recycle
TypedArray ripple = context.obtainStyledAttributes(attrs);
button.setBackgroundDrawable(ripple.getDrawable(0));
ripple.close();
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(Dim.dp32, Dim.dp32);
params.setMargins(Dim.dp8, Dim.dp8, Dim.dp8, Dim.dp8);
button.setLayoutParams(params);
button.setOnClickListener(v -> action.run());
return button;
}
/**
* Custom adapter with search filtering.
*/
private static class FlagAdapter extends ArrayAdapter<String> {
private final TreeSet<Long> fullFlags;
private String searchQuery = "";
public FlagAdapter(Context context, TreeSet<Long> fullFlags) {
super(context, android.R.layout.simple_list_item_multiple_choice, new ArrayList<>());
this.fullFlags = fullFlags;
updateFiltered();
}
public void setSearchQuery(String query) {
searchQuery = query == null ? "" : query.trim();
updateFiltered();
}
private void updateFiltered() {
clear();
for (Long flag : fullFlags) {
String flagString = String.valueOf(flag);
if (searchQuery.isEmpty() || flagString.contains(searchQuery)) {
add(flagString);
}
}
notifyDataSetChanged();
}
public void refresh() {
updateFiltered();
}
public List<Long> getFullFlags() {
return new ArrayList<>(fullFlags);
}
}
/**
* Creates a ListView with filtering, multi-select, and range selection.
*/
@SuppressLint("ClickableViewAccessibility")
private Pair<ListView, FlagAdapter> createListView(Context context,
TreeSet<Long> flags, TextView countText) {
ListView listView = new ListView(context);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setDividerHeight(0);
FlagAdapter adapter = new FlagAdapter(context, flags);
listView.setAdapter(adapter);
final ListViewSelectionState state = new ListViewSelectionState();
listView.setOnItemClickListener((parent, view, position, id) -> {
if (!state.isRangeSelecting) {
state.lastClickedPosition = position;
} else {
state.isRangeSelecting = false;
}
});
listView.setOnItemLongClickListener((parent, view, position, id) -> {
if (state.lastClickedPosition == -1) {
listView.setItemChecked(position, true);
state.lastClickedPosition = position;
} else {
int start = Math.min(state.lastClickedPosition, position);
int end = Math.max(state.lastClickedPosition, position);
for (int i = start; i <= end; i++) {
listView.setItemChecked(i, true);
}
state.isRangeSelecting = true;
}
return true;
});
listView.setOnTouchListener((view, event) -> {
if (event.getAction() == MotionEvent.ACTION_UP && state.isRangeSelecting) {
state.isRangeSelecting = false;
}
return false;
});
return new Pair<>(listView, adapter);
}
/**
* Moves selected or all flags from one list to another.
*
* @param fromListView Source ListView.
* @param toListView Destination ListView.
* @param fromFlags Source flag set.
* @param toFlags Destination flag set.
* @param fromCountText Header showing count of source items.
* @param toCountText Header showing count of destination items.
* @param moveAll If true, move all items; if false, move only selected.
*/
private void moveFlags(ListView fromListView, ListView toListView,
TreeSet<Long> fromFlags, TreeSet<Long> toFlags,
TextView fromCountText, TextView toCountText,
boolean moveAll) {
if (fromListView == null || toListView == null) return;
List<Long> flagsToMove = new ArrayList<>();
FlagAdapter fromAdapter = (FlagAdapter) fromListView.getAdapter();
if (moveAll) {
flagsToMove.addAll(fromFlags);
} else {
SparseBooleanArray checked = fromListView.getCheckedItemPositions();
for (int i = 0, count = fromAdapter.getCount(); i < count; i++) {
if (checked.get(i)) {
String item = fromAdapter.getItem(i);
if (item != null) {
flagsToMove.add(Long.parseLong(item));
}
}
}
}
if (flagsToMove.isEmpty()) return;
for (Long flag : flagsToMove) {
fromFlags.remove(flag);
toFlags.add(flag);
}
// Clear selections before refreshing.
fromListView.clearChoices();
toListView.clearChoices();
// Refresh both adapters.
fromAdapter.refresh();
((FlagAdapter) toListView.getAdapter()).refresh();
// Update headers.
updateHeaderCount(fromCountText, fromAdapter);
updateHeaderCount(toCountText, (FlagAdapter) toListView.getAdapter());
}
/**
* Saves blocked flags to settings.
*/
private void saveFlags(TreeSet<Long> blockedFlags) {
StringBuilder flagsString = new StringBuilder();
for (Long flag : blockedFlags) {
if (flagsString.length() > 0) {
flagsString.append("\n");
}
flagsString.append(flag);
}
BaseSettings.DISABLED_FEATURE_FLAGS.save(flagsString.toString());
Utils.showToastShort(str("revanced_debug_feature_flags_manager_toast_saved"));
Logger.printDebug(() -> "Feature flags saved. Blocked: " + blockedFlags.size());
AbstractPreferenceFragment.showRestartDialog(getContext());
}
/**
* Resets all blocked flags.
*/
private void resetFlags() {
BaseSettings.DISABLED_FEATURE_FLAGS.save("");
Utils.showToastShort(str("revanced_debug_feature_flags_manager_toast_reset"));
AbstractPreferenceFragment.showRestartDialog(getContext());
}
}

View File

@@ -11,7 +11,6 @@ import android.preference.Preference;
import android.text.InputType;
import android.util.AttributeSet;
import android.util.Pair;
import android.util.TypedValue;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.LinearLayout;
@@ -35,7 +34,7 @@ public class ImportExportPreference extends EditTextPreference implements Prefer
editText.setAutofillHints((String) null);
}
editText.setInputType(editText.getInputType() | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
editText.setTextSize(TypedValue.COMPLEX_UNIT_PT, 7); // Use a smaller font to reduce text wrap.
editText.setTextSize(14);
setOnPreferenceClickListener(this);
}

View File

@@ -1,7 +1,6 @@
package app.revanced.extension.shared.settings.preference;
import static app.revanced.extension.shared.StringRef.str;
import static app.revanced.extension.shared.Utils.dipToPixels;
import static app.revanced.extension.shared.requests.Route.Method.GET;
import android.annotation.SuppressLint;
@@ -41,6 +40,7 @@ import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.requests.Requester;
import app.revanced.extension.shared.requests.Route;
import app.revanced.extension.shared.ui.Dim;
/**
* Opens a dialog showing official links.
@@ -222,11 +222,10 @@ class WebViewDialog extends Dialog {
LinearLayout mainLayout = new LinearLayout(getContext());
mainLayout.setOrientation(LinearLayout.VERTICAL);
final int padding = dipToPixels(10);
mainLayout.setPadding(padding, padding, padding, padding);
mainLayout.setPadding(Dim.dp10, Dim.dp10, Dim.dp10, Dim.dp10);
// Set rounded rectangle background.
ShapeDrawable mainBackground = new ShapeDrawable(new RoundRectShape(
Utils.createCornerRadii(28), null, null));
Dim.roundedCorners(28), null, null));
mainBackground.getPaint().setColor(Utils.getDialogBackgroundColor());
mainLayout.setBackground(mainBackground);

View File

@@ -8,7 +8,6 @@ import android.os.Build;
import android.preference.Preference;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.util.TypedValue;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowInsets;
@@ -20,6 +19,7 @@ import androidx.annotation.Nullable;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.BaseActivityHook;
import app.revanced.extension.shared.ui.Dim;
@SuppressWarnings({"deprecation", "NewApi"})
public class ToolbarPreferenceFragment extends AbstractPreferenceFragment {
@@ -88,14 +88,13 @@ public class ToolbarPreferenceFragment extends AbstractPreferenceFragment {
toolbar.setNavigationIcon(getBackButtonDrawable());
toolbar.setNavigationOnClickListener(view -> preferenceScreenDialog.dismiss());
final int margin = Utils.dipToPixels(16);
toolbar.setTitleMargin(margin, 0, margin, 0);
toolbar.setTitleMargin(Dim.dp16, 0, Dim.dp16, 0);
TextView toolbarTextView = Utils.getChildView(toolbar,
true, TextView.class::isInstance);
if (toolbarTextView != null) {
toolbarTextView.setTextColor(Utils.getAppForegroundColor());
toolbarTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
toolbarTextView.setTextSize(20);
}
// Allow package-specific toolbar customization.

View File

@@ -75,7 +75,7 @@ public abstract class BaseSearchResultItem {
// Shared method for highlighting text with search query.
protected static CharSequence highlightSearchQuery(CharSequence text, Pattern queryPattern) {
if (TextUtils.isEmpty(text)) return text;
if (TextUtils.isEmpty(text) || queryPattern == null) return text;
final int adjustedColor = Utils.adjustColorBrightness(
Utils.getAppBackgroundColor(), 0.95f, 1.20f);
@@ -84,7 +84,10 @@ public abstract class BaseSearchResultItem {
Matcher matcher = queryPattern.matcher(text);
while (matcher.find()) {
spannable.setSpan(highlightSpan, matcher.start(), matcher.end(),
int start = matcher.start();
int end = matcher.end();
if (start == end) continue; // Skip zero matches.
spannable.setSpan(highlightSpan, start, end,
SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE);
}
@@ -224,10 +227,14 @@ public abstract class BaseSearchResultItem {
return searchBuilder.toString();
}
/**
* Appends normalized searchable text to the builder.
* Uses full Unicode normalization for accurate search across all languages.
*/
private void appendText(StringBuilder builder, CharSequence text) {
if (!TextUtils.isEmpty(text)) {
if (builder.length() > 0) builder.append(" ");
builder.append(Utils.removePunctuationToLowercase(text));
builder.append(Utils.normalizeTextToLowercase(text));
}
}
@@ -272,7 +279,7 @@ public abstract class BaseSearchResultItem {
*/
@Override
boolean matchesQuery(String query) {
return searchableText.contains(Utils.removePunctuationToLowercase(query));
return searchableText.contains(Utils.normalizeTextToLowercase(query));
}
/**

View File

@@ -484,7 +484,7 @@ public abstract class BaseSearchResultsAdapter extends ArrayAdapter<BaseSearchRe
return -1;
}
for (int i = 0; i < adapter.getCount(); i++) {
for (int i = 0, count = adapter.getCount(); i < count; i++) {
Object item = adapter.getItem(i);
if (item == targetPreference) {
return i;
@@ -522,8 +522,8 @@ public abstract class BaseSearchResultsAdapter extends ArrayAdapter<BaseSearchRe
if (currentAnimator != null && currentAnimator.isRunning()) {
currentAnimator.cancel();
}
int startColor = Utils.getAppBackgroundColor();
int highlightColor = Utils.adjustColorBrightness(
final int startColor = Utils.getAppBackgroundColor();
final int highlightColor = Utils.adjustColorBrightness(
startColor,
Utils.isDarkModeEnabled() ? 1.25f : 0.8f
);
@@ -566,7 +566,7 @@ public abstract class BaseSearchResultsAdapter extends ArrayAdapter<BaseSearchRe
}
// First search on current level.
for (int i = 0; i < group.getPreferenceCount(); i++) {
for (int i = 0, count = group.getPreferenceCount(); i < count; i++) {
Preference pref = group.getPreference(i);
if (key.equals(pref.getKey())) {
return pref;

View File

@@ -13,7 +13,6 @@ import android.preference.PreferenceCategory;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.text.TextUtils;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
@@ -45,6 +44,7 @@ import app.revanced.extension.shared.settings.Setting;
import app.revanced.extension.shared.settings.preference.ColorPickerPreference;
import app.revanced.extension.shared.settings.preference.CustomDialogListPreference;
import app.revanced.extension.shared.settings.preference.NoTitlePreferenceCategory;
import app.revanced.extension.shared.ui.Dim;
/**
* Abstract controller for managing the overlay search view in ReVanced settings.
@@ -123,7 +123,7 @@ public abstract class BaseSearchViewController {
searchView.setQueryHint(str("revanced_settings_search_hint"));
// Set text size.
searchEditText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
searchEditText.setTextSize(16);
// Set cursor color.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
@@ -149,7 +149,7 @@ public abstract class BaseSearchViewController {
// Create cursor drawable.
GradientDrawable cursorDrawable = new GradientDrawable();
cursorDrawable.setShape(GradientDrawable.RECTANGLE);
cursorDrawable.setSize(Utils.dipToPixels(2), -1); // Width: 2dp, Height: match text height.
cursorDrawable.setSize(Dim.dp2, -1); // Width: 2dp, Height: match text height.
cursorDrawable.setColor(cursorColor);
// Set cursor drawable.
@@ -164,7 +164,7 @@ public abstract class BaseSearchViewController {
overlayContainer = new FrameLayout(activity);
overlayContainer.setVisibility(View.GONE);
overlayContainer.setBackgroundColor(Utils.getAppBackgroundColor());
overlayContainer.setElevation(Utils.dipToPixels(8));
overlayContainer.setElevation(Dim.dp8);
// Container for search results.
FrameLayout searchResultsContainer = new FrameLayout(activity);
@@ -450,7 +450,7 @@ public abstract class BaseSearchViewController {
filteredSearchItems.clear();
String queryLower = Utils.removePunctuationToLowercase(query);
String queryLower = Utils.normalizeTextToLowercase(query);
Pattern queryPattern = Pattern.compile(Pattern.quote(queryLower), Pattern.CASE_INSENSITIVE);
// Clear highlighting only for items that were previously visible.
@@ -669,7 +669,7 @@ public abstract class BaseSearchViewController {
protected static GradientDrawable createBackgroundDrawable() {
GradientDrawable background = new GradientDrawable();
background.setShape(GradientDrawable.RECTANGLE);
background.setCornerRadius(Utils.dipToPixels(28));
background.setCornerRadius(Dim.dp28);
background.setColor(getSearchViewBackground());
return background;
}

View File

@@ -1,7 +1,6 @@
package app.revanced.extension.shared.ui;
import static app.revanced.extension.shared.Utils.adjustColorBrightness;
import static app.revanced.extension.shared.Utils.dipToPixels;
import static app.revanced.extension.shared.Utils.getAppBackgroundColor;
import static app.revanced.extension.shared.Utils.isDarkModeEnabled;
import static app.revanced.extension.shared.settings.preference.ColorPickerPreference.DISABLED_ALPHA;
@@ -13,7 +12,7 @@ import android.view.View;
import androidx.annotation.ColorInt;
public class ColorDot {
private static final int STROKE_WIDTH = dipToPixels(1.5f); // Stroke width in dp.
private static final int STROKE_WIDTH = Dim.dp(1.5f);
/**
* Creates a circular drawable with a main fill and a stroke.
@@ -55,7 +54,7 @@ public class ColorDot {
targetView.setAlpha(enabled ? 1.0f : DISABLED_ALPHA);
if (!isDarkModeEnabled()) {
targetView.setClipToOutline(true);
targetView.setElevation(dipToPixels(2));
targetView.setElevation(Dim.dp2);
}
}
}

View File

@@ -1,7 +1,5 @@
package app.revanced.extension.shared.ui;
import static app.revanced.extension.shared.Utils.dipToPixels;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
@@ -37,7 +35,6 @@ public class CustomDialog {
private final Context context;
private final Dialog dialog;
private final LinearLayout mainLayout;
private final int dip4, dip8, dip16, dip24, dip36;
/**
* Creates a custom dialog with a styled layout, including a title, message, buttons, and an optional EditText.
@@ -93,13 +90,6 @@ public class CustomDialog {
this.dialog = new Dialog(context);
this.dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // Remove default title bar.
// Preset size constants.
dip4 = dipToPixels(4);
dip8 = dipToPixels(8);
dip16 = dipToPixels(16);
dip24 = dipToPixels(24);
dip36 = dipToPixels(36);
// Create main layout.
mainLayout = createMainLayout();
addTitle(title);
@@ -122,11 +112,11 @@ public class CustomDialog {
private LinearLayout createMainLayout() {
LinearLayout layout = new LinearLayout(context);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(dip24, dip16, dip24, dip24);
layout.setPadding(Dim.dp24, Dim.dp16, Dim.dp24, Dim.dp24);
// Set rounded rectangle background.
ShapeDrawable background = new ShapeDrawable(new RoundRectShape(
Utils.createCornerRadii(28), null, null));
Dim.roundedCorners(28), null, null));
// Dialog background.
background.getPaint().setColor(Utils.getDialogBackgroundColor());
layout.setBackground(background);
@@ -152,7 +142,7 @@ public class CustomDialog {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
params.setMargins(0, 0, 0, dip16);
params.setMargins(0, 0, 0, Dim.dp16);
titleView.setLayoutParams(params);
mainLayout.addView(titleView);
@@ -180,9 +170,9 @@ public class CustomDialog {
// EditText (if provided).
if (editText != null) {
ShapeDrawable background = new ShapeDrawable(new RoundRectShape(
Utils.createCornerRadii(10), null, null));
Dim.roundedCorners(10), null, null));
background.getPaint().setColor(Utils.getEditTextBackground());
scrollView.setPadding(dip8, dip8, dip8, dip8);
scrollView.setPadding(Dim.dp8, Dim.dp8, Dim.dp8, Dim.dp8);
scrollView.setBackground(background);
scrollView.setClipToOutline(true);
@@ -241,7 +231,7 @@ public class CustomDialog {
LinearLayout.LayoutParams buttonContainerParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
buttonContainerParams.setMargins(0, dip16, 0, 0);
buttonContainerParams.setMargins(0, Dim.dp16, 0, 0);
buttonContainer.setLayoutParams(buttonContainerParams);
List<Button> buttons = new ArrayList<>();
@@ -289,12 +279,12 @@ public class CustomDialog {
button.setEllipsize(TextUtils.TruncateAt.END);
button.setGravity(Gravity.CENTER);
// Set internal padding.
button.setPadding(dip16, 0, dip16, 0);
button.setPadding(Dim.dp16, 0, Dim.dp16, 0);
// Background color for OK button (inversion).
// Background color for Cancel or Neutral buttons.
ShapeDrawable background = new ShapeDrawable(new RoundRectShape(
Utils.createCornerRadii(20), null, null));
Dim.roundedCorners(20), null, null));
background.getPaint().setColor(isOkButton
? Utils.getOkButtonBackgroundColor()
: Utils.getCancelOrNeutralButtonBackgroundColor());
@@ -331,20 +321,19 @@ public class CustomDialog {
if (buttons.isEmpty()) return;
// Check if buttons fit in one row.
int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
int totalWidth = 0;
for (Integer width : buttonWidths) {
totalWidth += width;
}
if (buttonWidths.size() > 1) {
// Add margins for gaps.
totalWidth += (buttonWidths.size() - 1) * dip8;
totalWidth += (buttonWidths.size() - 1) * Dim.dp8;
}
// Single button: stretch to full width.
if (buttons.size() == 1) {
layoutSingleButton(buttonContainer, buttons.get(0));
} else if (totalWidth <= screenWidth * 0.8) {
} else if (totalWidth <= Dim.pctWidth(80)) {
// Single row: Neutral, Cancel, OK.
layoutButtonsInRow(buttonContainer, buttons, buttonWidths);
} else {
@@ -369,7 +358,7 @@ public class CustomDialog {
button.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
dip36));
Dim.dp36));
singleContainer.addView(button);
buttonContainer.addView(singleContainer);
}
@@ -405,17 +394,17 @@ public class CustomDialog {
if (parent != null) parent.removeView(button);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
0, dip36, buttonWidths.get(i));
0, Dim.dp36, buttonWidths.get(i));
// Set margins based on button type and combination.
if (buttons.size() == 2) {
// Neutral + OK or Cancel + OK.
params.setMargins(i == 0 ? 0 : dip4, 0, i == 0 ? dip4 : 0, 0);
params.setMargins(i == 0 ? 0 : Dim.dp4, 0, i == 0 ? Dim.dp4 : 0, 0);
} else if (buttons.size() == 3) {
// Neutral.
// Cancel.
// OK.
params.setMargins(i == 0 ? 0 : dip4, 0, i == 2 ? 0 : dip4, 0);
params.setMargins(i == 0 ? 0 : Dim.dp4, 0, i == 2 ? 0 : Dim.dp4, 0);
}
button.setLayoutParams(params);
@@ -447,14 +436,14 @@ public class CustomDialog {
singleContainer.setGravity(Gravity.CENTER);
singleContainer.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
dip36));
Dim.dp36));
ViewGroup parent = (ViewGroup) button.getParent();
if (parent != null) parent.removeView(button);
button.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
dip36));
Dim.dp36));
singleContainer.addView(button);
buttonContainer.addView(singleContainer);
@@ -463,7 +452,7 @@ public class CustomDialog {
View spacer = new View(context);
LinearLayout.LayoutParams spacerParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
dip8);
Dim.dp8);
spacer.setLayoutParams(spacerParams);
buttonContainer.addView(spacer);
}

View File

@@ -0,0 +1,89 @@
package app.revanced.extension.shared.ui;
import android.content.res.Resources;
import android.util.DisplayMetrics;
import android.util.TypedValue;
/**
* Utility class for converting design units (dp) and screen percentages to pixels.
*/
public final class Dim {
private Dim() {} // Prevent instantiation.
private static final DisplayMetrics METRICS = Resources.getSystem().getDisplayMetrics();
public static final int SCREEN_WIDTH = METRICS.widthPixels;
public static final int SCREEN_HEIGHT = METRICS.heightPixels;
// DP constants (density-independent pixels).
public static final int dp1 = dp(1);
public static final int dp2 = dp(2);
public static final int dp4 = dp(4);
public static final int dp6 = dp(6);
public static final int dp7 = dp(7);
public static final int dp8 = dp(8);
public static final int dp10 = dp(10);
public static final int dp12 = dp(12);
public static final int dp16 = dp(16);
public static final int dp20 = dp(20);
public static final int dp24 = dp(24);
public static final int dp28 = dp(28);
public static final int dp32 = dp(32);
public static final int dp36 = dp(36);
public static final int dp40 = dp(40);
public static final int dp48 = dp(48);
/**
* Converts dp (density-independent pixels) to actual device pixels.
* Uses Android's official TypedValue.applyDimension() for accurate rounding.
*
* @param dp The dp value to convert (supports float, e.g. 1.2f).
* @return The equivalent pixel value as int.
*/
public static int dp(float dp) {
return (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, dp, METRICS);
}
/**
* Converts a percentage of the screen height to pixels.
*
* @param percent The percentage (0100).
* @return The pixel value corresponding to the percentage of screen height.
*/
public static int pctHeight(int percent) {
return (SCREEN_HEIGHT * percent) / 100;
}
/**
* Converts a percentage of the screen width to pixels.
*
* @param percent The percentage (0100).
* @return The pixel value corresponding to the percentage of screen width.
*/
public static int pctWidth(int percent) {
return (SCREEN_WIDTH * percent) / 100;
}
/**
* Converts a percentage of the screen's portrait width (min side) to pixels.
*
* @param percent The percentage (0100).
* @return The pixel value.
*/
public static int pctPortraitWidth(int percent) {
final int portraitWidth = Math.min(SCREEN_WIDTH, SCREEN_HEIGHT);
return (int) (portraitWidth * (percent / 100.0f));
}
/**
* Creates an array of corner radii for a rounded rectangle.
* All corners use the same radius.
*
* @param dp radius in density-independent pixels
* @return array of 8 floats: [top-left-x, top-left-y, top-right-x, top-right-y, ...]
*/
public static float[] roundedCorners(float dp) {
final float r = dp(dp);
return new float[]{r, r, r, r, r, r, r, r};
}
}

View File

@@ -1,7 +1,5 @@
package app.revanced.extension.shared.ui;
import static app.revanced.extension.shared.Utils.dipToPixels;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
@@ -63,9 +61,8 @@ public class SheetBottomDialog {
// Add top spacer.
View spacer = new View(context);
final int dip40 = dipToPixels(40);
LinearLayout.LayoutParams spacerParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, dip40);
LinearLayout.LayoutParams.MATCH_PARENT, Dim.dp40);
spacer.setLayoutParams(spacerParams);
spacer.setClickable(true);
dragContainer.addView(spacer);
@@ -105,20 +102,15 @@ public class SheetBottomDialog {
* @return A configured {@link DraggableLinearLayout} with a handle bar and styled background.
*/
public static DraggableLinearLayout createMainLayout(@NonNull Context context, @Nullable Integer backgroundColor) {
// Preset size constants.
final int dip4 = dipToPixels(4); // Handle bar height.
final int dip8 = dipToPixels(8); // Dialog padding.
final int dip40 = dipToPixels(40); // Handle bar width.
DraggableLinearLayout mainLayout = new DraggableLinearLayout(context);
mainLayout.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(dip8, 0, dip8, dip8);
layoutParams.setMargins(Dim.dp8, 0, Dim.dp8, Dim.dp8);
mainLayout.setLayoutParams(layoutParams);
ShapeDrawable background = new ShapeDrawable(new RoundRectShape(
Utils.createCornerRadii(12), null, null));
Dim.roundedCorners(12), null, null));
int color = (backgroundColor != null) ? backgroundColor : Utils.getDialogBackgroundColor();
background.getPaint().setColor(color);
mainLayout.setBackground(background);
@@ -127,14 +119,14 @@ public class SheetBottomDialog {
LinearLayout handleContainer = new LinearLayout(context);
LinearLayout.LayoutParams containerParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
containerParams.setMargins(0, dip8, 0, 0);
containerParams.setMargins(0, Dim.dp8, 0, 0);
handleContainer.setLayoutParams(containerParams);
handleContainer.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
View handleBar = new View(context);
ShapeDrawable handleBackground = new ShapeDrawable(new RoundRectShape(
Utils.createCornerRadii(4), null, null));
Dim.roundedCorners(4), null, null));
handleBackground.getPaint().setColor(Utils.adjustColorBrightness(color, 0.9f, 1.25f));
LinearLayout.LayoutParams handleParams = new LinearLayout.LayoutParams(dip40, dip4);
LinearLayout.LayoutParams handleParams = new LinearLayout.LayoutParams(Dim.dp40, Dim.dp4);
handleBar.setLayoutParams(handleParams);
handleBar.setBackground(handleBackground);

View File

@@ -7,6 +7,7 @@ import app.revanced.extension.spotify.shared.ComponentFilters.StringComponentFil
import java.util.List;
@Deprecated(forRemoval = true)
@SuppressWarnings("unused")
public final class HideCreateButtonPatch {

View File

@@ -4,6 +4,7 @@ import android.view.View;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.ui.Dim;
import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused")
@@ -31,7 +32,7 @@ public final class WideSearchbarPatch {
final int paddingRight = searchBarView.getPaddingRight();
final int paddingTop = searchBarView.getPaddingTop();
final int paddingBottom = searchBarView.getPaddingBottom();
final int paddingStart = Utils.dipToPixels(8);
final int paddingStart = Dim.dp8;
if (Utils.isRightToLeftLocale()) {
searchBarView.setPadding(paddingLeft, paddingTop, paddingStart, paddingBottom);

View File

@@ -2,7 +2,6 @@ package app.revanced.extension.youtube.patches.announcements;
import static android.text.Html.FROM_HTML_MODE_COMPACT;
import static app.revanced.extension.shared.StringRef.str;
import static app.revanced.extension.shared.Utils.dipToPixels;
import static app.revanced.extension.youtube.patches.announcements.requests.AnnouncementsRoutes.GET_LATEST_ANNOUNCEMENTS;
import static app.revanced.extension.youtube.patches.announcements.requests.AnnouncementsRoutes.GET_LATEST_ANNOUNCEMENT_IDS;
@@ -24,6 +23,7 @@ import java.time.LocalDateTime;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.requests.Requester;
import app.revanced.extension.shared.ui.Dim;
import app.revanced.extension.youtube.patches.announcements.requests.AnnouncementsRoutes;
import app.revanced.extension.youtube.settings.Settings;
@@ -148,7 +148,7 @@ public final class AnnouncementsPatch {
if (child instanceof TextView childTextView && finalTitle.equals(childTextView.getText().toString())) {
childTextView.setCompoundDrawablesWithIntrinsicBounds(
finalLevel.icon, 0, 0, 0);
childTextView.setCompoundDrawablePadding(dipToPixels(8));
childTextView.setCompoundDrawablePadding(Dim.dp8);
}
}

View File

@@ -7,16 +7,17 @@ import app.revanced.extension.youtube.shared.PlayerType;
@SuppressWarnings("unused")
final class DescriptionComponentsFilter extends Filter {
private static final String INFOCARDS_SECTION_PATH = "infocards_section.e";
private final StringTrieSearch exceptions = new StringTrieSearch();
private final ByteArrayFilterGroupList macroMarkersCarouselGroupList = new ByteArrayFilterGroupList();
private final StringFilterGroup macroMarkersCarousel;
private final ByteArrayFilterGroupList macroMarkersCarouselGroupList = new ByteArrayFilterGroupList();
private final StringFilterGroup horizontalShelf;
private final ByteArrayFilterGroup cellVideoAttribute;
private final StringFilterGroup infoCardsSection;
private final StringFilterGroup subscribeButton;
private final StringFilterGroup aiGeneratedVideoSummarySection;
private final StringFilterGroup hypePoints;
public DescriptionComponentsFilter() {
exceptions.addPatterns(
@@ -43,9 +44,10 @@ final class DescriptionComponentsFilter extends Filter {
"video_attributes_section"
);
final StringFilterGroup infoCardsSection = new StringFilterGroup(
Settings.HIDE_INFO_CARDS_SECTION,
"infocards_section"
final StringFilterGroup featuredSection = new StringFilterGroup(
Settings.HIDE_FEATURED_SECTION,
// "media_lockup", "structured_description_video_lockup"
"compact_infocard"
);
final StringFilterGroup podcastSection = new StringFilterGroup(
@@ -63,6 +65,21 @@ final class DescriptionComponentsFilter extends Filter {
"how_this_was_made_section"
);
hypePoints = new StringFilterGroup(
Settings.HIDE_HYPE_POINTS,
"hype_points_factoid"
);
infoCardsSection = new StringFilterGroup(
Settings.HIDE_INFO_CARDS_SECTION,
INFOCARDS_SECTION_PATH
);
subscribeButton = new StringFilterGroup(
Settings.HIDE_DESCRIPTION_SUBSCRIBE_BUTTON,
"subscribe_button"
);
macroMarkersCarousel = new StringFilterGroup(
null,
"macro_markers_carousel.e"
@@ -93,11 +110,14 @@ final class DescriptionComponentsFilter extends Filter {
aiGeneratedVideoSummarySection,
askSection,
attributesSection,
infoCardsSection,
featuredSection,
horizontalShelf,
howThisWasMadeSection,
hypePoints,
infoCardsSection,
macroMarkersCarousel,
podcastSection,
subscribeButton,
transcriptSection
);
}
@@ -106,11 +126,15 @@ final class DescriptionComponentsFilter extends Filter {
boolean isFiltered(String identifier, String path, byte[] buffer,
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
if (matchedGroup == aiGeneratedVideoSummarySection) {
if (matchedGroup == aiGeneratedVideoSummarySection || matchedGroup == hypePoints) {
// Only hide if player is open, in case this component is used somewhere else.
return PlayerType.getCurrent().isMaximizedOrFullscreen();
}
if (matchedGroup == subscribeButton) {
return path.startsWith(INFOCARDS_SECTION_PATH);
}
if (exceptions.matches(path)) return false;
if (matchedGroup == macroMarkersCarousel) {

View File

@@ -63,12 +63,12 @@ public class PlayerFlyoutMenuItemsFilter extends Filter {
"volume_stable_"
),
new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_HELP,
"yt_outline_question_circle_"
Settings.HIDE_PLAYER_FLYOUT_LISTEN_WITH_YOUTUBE_MUSIC,
"yt_outline_youtube_music_"
),
new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_MORE_INFO,
"yt_outline_info_circle_"
Settings.HIDE_PLAYER_FLYOUT_HELP,
"yt_outline_question_circle_"
),
new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_LOCK_SCREEN,

View File

@@ -1,7 +1,6 @@
package app.revanced.extension.youtube.patches.playback.speed;
import static app.revanced.extension.shared.StringRef.str;
import static app.revanced.extension.shared.Utils.dipToPixels;
import static app.revanced.extension.youtube.videoplayer.PlayerControlButton.fadeInDuration;
import static app.revanced.extension.youtube.videoplayer.PlayerControlButton.getDialogBackgroundColor;
@@ -30,6 +29,7 @@ import java.util.function.Function;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.ui.Dim;
import app.revanced.extension.shared.ui.SheetBottomDialog;
import app.revanced.extension.youtube.patches.VideoInformation;
import app.revanced.extension.youtube.patches.components.PlaybackSpeedMenuFilter;
@@ -264,14 +264,6 @@ public class CustomPlaybackSpeedPatch {
SheetBottomDialog.DraggableLinearLayout mainLayout =
SheetBottomDialog.createMainLayout(context, getDialogBackgroundColor());
// Preset size constants.
final int dip4 = dipToPixels(4);
final int dip8 = dipToPixels(8);
final int dip12 = dipToPixels(12);
final int dip20 = dipToPixels(20);
final int dip32 = dipToPixels(32);
final int dip60 = dipToPixels(60);
// Display current playback speed.
TextView currentSpeedText = new TextView(context);
float currentSpeed = VideoInformation.getPlaybackSpeed();
@@ -283,7 +275,7 @@ public class CustomPlaybackSpeedPatch {
currentSpeedText.setGravity(Gravity.CENTER);
LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
textParams.setMargins(0, dip20, 0, 0);
textParams.setMargins(0, Dim.dp20, 0, 0);
currentSpeedText.setLayoutParams(textParams);
// Add current speed text view to main layout.
mainLayout.addView(currentSpeedText);
@@ -294,8 +286,8 @@ public class CustomPlaybackSpeedPatch {
sliderLayout.setGravity(Gravity.CENTER_VERTICAL);
// Create +/- buttons.
Button minusButton = createStyledButton(context, false, dip8, dip8);
Button plusButton = createStyledButton(context, true, dip8, dip8);
Button minusButton = createStyledButton(context, false);
Button plusButton = createStyledButton(context, true);
// Create slider for speed adjustment.
SeekBar speedSlider = new SeekBar(context);
@@ -363,7 +355,7 @@ public class CustomPlaybackSpeedPatch {
gridLayout.setRowCount((int) Math.ceil(customPlaybackSpeeds.length / 5.0));
LinearLayout.LayoutParams gridParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
gridParams.setMargins(dip4, dip12, dip4, dip12); // Speed buttons container.
gridParams.setMargins(Dim.dp4, Dim.dp12, Dim.dp4, Dim.dp12); // Speed buttons container.
gridLayout.setLayoutParams(gridParams);
// For button use 1 digit minimum.
@@ -378,8 +370,8 @@ public class CustomPlaybackSpeedPatch {
GridLayout.LayoutParams containerParams = new GridLayout.LayoutParams();
containerParams.width = 0; // Equal width for columns.
containerParams.columnSpec = GridLayout.spec(GridLayout.UNDEFINED, 1, 1f);
containerParams.setMargins(dip4, 0, dip4, 0); // Button margins.
containerParams.height = dip60; // Fixed height for button and label.
containerParams.setMargins(Dim.dp4, 0, Dim.dp4, 0); // Button margins.
containerParams.height = Dim.dp(60); // Fixed height for button and label.
buttonContainer.setLayoutParams(containerParams);
// Create speed button.
@@ -391,14 +383,14 @@ public class CustomPlaybackSpeedPatch {
speedButton.setGravity(Gravity.CENTER);
ShapeDrawable buttonBackground = new ShapeDrawable(new RoundRectShape(
Utils.createCornerRadii(20), null, null));
Dim.roundedCorners(20), null, null));
buttonBackground.getPaint().setColor(getAdjustedBackgroundColor(false));
speedButton.setBackground(buttonBackground);
speedButton.setPadding(dip4, dip4, dip4, dip4);
speedButton.setPadding(Dim.dp4, Dim.dp4, Dim.dp4, Dim.dp4);
// Center button vertically and stretch horizontally in container.
FrameLayout.LayoutParams buttonParams = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT, dip32, Gravity.CENTER);
FrameLayout.LayoutParams.MATCH_PARENT, Dim.dp32, Gravity.CENTER);
speedButton.setLayoutParams(buttonParams);
// Add speed buttons view to buttons container layout.
@@ -475,21 +467,18 @@ public class CustomPlaybackSpeedPatch {
*
* @param context The Android context used to create the button.
* @param isPlus True to display a plus symbol, false to display a minus symbol.
* @param marginStart The start margin in pixels (left for LTR, right for RTL).
* @param marginEnd The end margin in pixels (right for LTR, left for RTL).
* @return A configured {@link Button} with the specified styling and layout parameters.
*/
private static Button createStyledButton(Context context, boolean isPlus, int marginStart, int marginEnd) {
private static Button createStyledButton(Context context, boolean isPlus) {
Button button = new Button(context, null, 0); // Disable default theme style.
button.setText(""); // No text on button.
ShapeDrawable background = new ShapeDrawable(new RoundRectShape(
Utils.createCornerRadii(20), null, null));
Dim.roundedCorners(20), null, null));
background.getPaint().setColor(getAdjustedBackgroundColor(false));
button.setBackground(background);
button.setForeground(new OutlineSymbolDrawable(isPlus)); // Plus or minus symbol.
final int dip36 = dipToPixels(36);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(dip36, dip36);
params.setMargins(marginStart, 0, marginEnd, 0); // Set margins.
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(Dim.dp36, Dim.dp36);
params.setMargins(Dim.dp8, 0, Dim.dp8, 0); // Set margins.
button.setLayoutParams(params);
return button;
}
@@ -554,7 +543,7 @@ class OutlineSymbolDrawable extends Drawable {
paint = new Paint(Paint.ANTI_ALIAS_FLAG); // Enable anti-aliasing for smooth rendering.
paint.setColor(Utils.getAppForegroundColor());
paint.setStyle(Paint.Style.STROKE); // Use stroke style for outline.
paint.setStrokeWidth(dipToPixels(1)); // 1dp stroke width.
paint.setStrokeWidth(Dim.dp1); // 1dp stroke width.
}
@Override

View File

@@ -22,6 +22,11 @@ public class SpoofVideoStreamsPatch {
return Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.isAvailable()
&& Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ANDROID_VR_1_43_32;
}
@Override
public List<Setting<?>> getParentSettings() {
return List.of(Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE);
}
}
/**

View File

@@ -40,6 +40,7 @@ import java.util.concurrent.TimeoutException;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.ui.Dim;
import app.revanced.extension.youtube.returnyoutubedislike.requests.RYDVoteData;
import app.revanced.extension.youtube.returnyoutubedislike.requests.ReturnYouTubeDislikeApi;
import app.revanced.extension.youtube.settings.Settings;
@@ -124,12 +125,12 @@ public class ReturnYouTubeDislike {
static {
leftSeparatorBounds = new Rect(0, 0,
Utils.dipToPixels(1.2f),
Utils.dipToPixels(14f));
final int middleSeparatorSize = Utils.dipToPixels(3.7f);
Dim.dp(1.2f),
Dim.dp(14f));
final int middleSeparatorSize = Dim.dp(3.7f);
middleSeparatorBounds = new Rect(0, 0, middleSeparatorSize, middleSeparatorSize);
leftSeparatorShapePaddingPixels = Utils.dipToPixels(8.4f);
leftSeparatorShapePaddingPixels = Dim.dp(8.4f);
leftSeparatorShape = new ShapeDrawable(new RectShape());
leftSeparatorShape.setBounds(leftSeparatorBounds);

View File

@@ -210,10 +210,13 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_ASK_SECTION = new BooleanSetting("revanced_hide_ask_section", FALSE);
public static final BooleanSetting HIDE_ATTRIBUTES_SECTION = new BooleanSetting("revanced_hide_attributes_section", FALSE);
public static final BooleanSetting HIDE_CHAPTERS_SECTION = new BooleanSetting("revanced_hide_chapters_section", TRUE);
public static final BooleanSetting HIDE_FEATURED_SECTION = new BooleanSetting("revanced_hide_featured_section", TRUE);
public static final BooleanSetting HIDE_HOW_THIS_WAS_MADE_SECTION = new BooleanSetting("revanced_hide_how_this_was_made_section", FALSE);
public static final BooleanSetting HIDE_HYPE_POINTS = new BooleanSetting("revanced_hide_hype_points", FALSE);
public static final BooleanSetting HIDE_INFO_CARDS_SECTION = new BooleanSetting("revanced_hide_info_cards_section", TRUE);
public static final BooleanSetting HIDE_KEY_CONCEPTS_SECTION = new BooleanSetting("revanced_hide_key_concepts_section", FALSE);
public static final BooleanSetting HIDE_PODCAST_SECTION = new BooleanSetting("revanced_hide_podcast_section", TRUE);
public static final BooleanSetting HIDE_DESCRIPTION_SUBSCRIBE_BUTTON = new BooleanSetting("revanced_hide_description_subscribe_button", TRUE);
public static final BooleanSetting HIDE_TRANSCRIPT_SECTION = new BooleanSetting("revanced_hide_transcript_section", TRUE);
// Action buttons
@@ -239,9 +242,9 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_PLAYER_FLYOUT_AUDIO_TRACK = new BooleanSetting("revanced_hide_player_flyout_audio_track", FALSE, new HideAudioFlyoutMenuAvailability());
public static final BooleanSetting HIDE_PLAYER_FLYOUT_CAPTIONS = new BooleanSetting("revanced_hide_player_flyout_captions", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_HELP = new BooleanSetting("revanced_hide_player_flyout_help", TRUE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LISTEN_WITH_YOUTUBE_MUSIC = new BooleanSetting("revanced_hide_player_flyout_listen_with_youtube_music", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOCK_SCREEN = new BooleanSetting("revanced_hide_player_flyout_lock_screen", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOOP_VIDEO = new BooleanSetting("revanced_hide_player_flyout_loop_video", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MORE_INFO = new BooleanSetting("revanced_hide_player_flyout_more_info", TRUE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_SLEEP_TIMER = new BooleanSetting("revanced_hide_player_flyout_sleep_timer", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_SPEED = new BooleanSetting("revanced_hide_player_flyout_speed", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_STABLE_VOLUME = new BooleanSetting("revanced_hide_player_flyout_stable_volume", FALSE);

View File

@@ -2,7 +2,6 @@ package app.revanced.extension.youtube.settings.preference;
import static app.revanced.extension.shared.StringRef.sf;
import static app.revanced.extension.shared.StringRef.str;
import static app.revanced.extension.shared.Utils.dipToPixels;
import android.app.Dialog;
import android.content.Context;
@@ -15,13 +14,9 @@ import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Pair;
import android.util.TypedValue;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import androidx.annotation.Nullable;
@@ -37,6 +32,7 @@ import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.preference.CustomDialogListPreference;
import app.revanced.extension.shared.ui.CustomDialog;
import app.revanced.extension.shared.ui.Dim;
import app.revanced.extension.youtube.settings.Settings;
/**
@@ -264,42 +260,12 @@ public class ExternalDownloaderPreference extends CustomDialogListPreference {
// Add ListView to content layout with initial height.
LinearLayout.LayoutParams listViewParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
0 // Initial height, will be updated.
);
listViewParams.bottomMargin = dipToPixels(16);
LinearLayout.LayoutParams.MATCH_PARENT, 0, 1.0f);
listViewParams.bottomMargin = Dim.dp16;
contentLayout.addView(listView, listViewParams);
// Add EditText for custom package name.
editText = new EditText(context);
editText.setText(packageName);
editText.setSelection(packageName.length());
editText.setHint(str("revanced_external_downloader_other_item_hint"));
editText.setSingleLine(true); // Restrict EditText to a single line.
editText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
// Set initial EditText state based on selected downloader.
editText.setEnabled(usingCustomDownloader);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable edit) {
String updatedPackageName = edit.toString().trim();
updateListViewSelection.apply(updatedPackageName);
}
});
ShapeDrawable editTextBackground = new ShapeDrawable(new RoundRectShape(
Utils.createCornerRadii(10), null, null));
editTextBackground.getPaint().setColor(Utils.getEditTextBackground());
final int dip8 = dipToPixels(8);
editText.setPadding(dip8, dip8, dip8, dip8);
editText.setBackground(editTextBackground);
editText.setClipToOutline(true);
editText = createEditText(context, packageName, usingCustomDownloader, updateListViewSelection);
contentLayout.addView(editText);
// Create the custom dialog.
@@ -350,50 +316,59 @@ public class ExternalDownloaderPreference extends CustomDialogListPreference {
);
// Add the content layout directly to the dialog's main layout.
LinearLayout dialogMainLayout = dialogPair.second;
dialogMainLayout.addView(contentLayout, dialogMainLayout.getChildCount() - 1);
LinearLayout mainLayout = dialogPair.second;
LinearLayout.LayoutParams contentParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, 0, 1.0f);
// Update ListView height dynamically based on orientation.
//noinspection ExtractMethodRecommender
Runnable updateListViewHeight = () -> {
int totalHeight = 0;
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter != null) {
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
final int listAdapterCount = listAdapter.getCount();
for (int i = 0; i < listAdapterCount; i++) {
View item = listAdapter.getView(i, null, listView);
item.measure(
View.MeasureSpec.makeMeasureSpec(metrics.widthPixels, View.MeasureSpec.AT_MOST),
View.MeasureSpec.UNSPECIFIED
);
totalHeight += item.getMeasuredHeight();
}
totalHeight += listView.getDividerHeight() * (listAdapterCount - 1);
// Insert content before the dialog button row.
mainLayout.addView(contentLayout, mainLayout.getChildCount() - 1, contentParams);
Dialog dialog = dialogPair.first;
dialog.show();
}
/**
* Creates and configures the EditText for the custom package name.
*
* @param context Context for creating views.
* @param initialPackageName The package name to pre-fill.
* @param isCustom Whether the "Other" option is selected.
* @param textChangeCallback Callback to run when text changes.
* @return A configured EditText.
*/
private EditText createEditText(Context context,
String initialPackageName, boolean isCustom,
Function<String, Void> textChangeCallback) {
EditText editText = new EditText(context);
editText.setText(initialPackageName);
editText.setSelection(initialPackageName.length());
editText.setHint(str("revanced_external_downloader_other_item_hint"));
editText.setSingleLine(true);
editText.setTextSize(16);
editText.setEnabled(isCustom);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable edit) {
String updatedPackageName = edit.toString().trim();
textChangeCallback.apply(updatedPackageName);
}
});
final int orientation = context.getResources().getConfiguration().orientation;
if (orientation == android.content.res.Configuration.ORIENTATION_PORTRAIT) {
// In portrait orientation, use WRAP_CONTENT for ListView height.
listViewParams.height = LinearLayout.LayoutParams.WRAP_CONTENT;
} else {
// In landscape orientation, limit ListView height to 30% of screen height.
final int maxHeight = Utils.percentageHeightToPixels(30);
listViewParams.height = Math.min(totalHeight, maxHeight);
}
listView.setLayoutParams(listViewParams);
};
ShapeDrawable editTextBackground = new ShapeDrawable(new RoundRectShape(
Dim.roundedCorners(10), null, null));
editTextBackground.getPaint().setColor(Utils.getEditTextBackground());
editText.setPadding(Dim.dp8, Dim.dp8, Dim.dp8, Dim.dp8);
editText.setBackground(editTextBackground);
editText.setClipToOutline(true);
// Initial height calculation.
updateListViewHeight.run();
// Listen for configuration changes (e.g., orientation).
View dialogView = dialogPair.second;
// Recalculate height when layout changes (e.g., orientation change).
dialogView.getViewTreeObserver().addOnGlobalLayoutListener(updateListViewHeight::run);
// Show the dialog.
dialogPair.first.show();
return editText;
}
/**

View File

@@ -1,7 +1,6 @@
package app.revanced.extension.youtube.sponsorblock;
import static app.revanced.extension.shared.StringRef.str;
import static app.revanced.extension.shared.Utils.dipToPixels;
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.SKIP_AUTOMATICALLY;
import android.annotation.SuppressLint;
@@ -34,6 +33,7 @@ import java.util.Objects;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.ui.Dim;
import app.revanced.extension.youtube.patches.VideoInformation;
import app.revanced.extension.youtube.settings.Settings;
import app.revanced.extension.youtube.shared.PlayerType;
@@ -82,7 +82,7 @@ public class SegmentPlaybackController {
* Highlight segments have zero length as they are a point in time.
* Draw them on screen using a fixed width bar.
*/
private static final int HIGHLIGHT_SEGMENT_DRAW_BAR_WIDTH = dipToPixels(7);
private static final int HIGHLIGHT_SEGMENT_DRAW_BAR_WIDTH = Dim.dp7;
@Nullable
private static String currentVideoId;
@@ -808,14 +808,12 @@ public class SegmentPlaybackController {
LinearLayout mainLayout = new LinearLayout(currentContext);
mainLayout.setOrientation(LinearLayout.VERTICAL);
final int dip8 = dipToPixels(8);
final int dip16 = dipToPixels(16);
mainLayout.setPadding(dip16, dip8, dip16, dip8);
mainLayout.setPadding(Dim.dp16, Dim.dp8, Dim.dp16, Dim.dp8);
mainLayout.setGravity(Gravity.CENTER);
mainLayout.setMinimumHeight(dipToPixels(48));
mainLayout.setMinimumHeight(Dim.dp48);
ShapeDrawable background = new ShapeDrawable(new RoundRectShape(
Utils.createCornerRadii(20), null, null));
Dim.roundedCorners(20), null, null));
background.getPaint().setColor(Utils.getDialogBackgroundColor());
mainLayout.setBackground(background);

View File

@@ -1,7 +1,6 @@
package app.revanced.extension.youtube.sponsorblock.objects;
import static app.revanced.extension.shared.StringRef.str;
import static app.revanced.extension.shared.Utils.dipToPixels;
import static app.revanced.extension.youtube.sponsorblock.SponsorBlockSettings.migrateOldColorString;
import android.content.Context;
@@ -17,6 +16,7 @@ import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.preference.ColorPickerPreference;
import app.revanced.extension.shared.ui.ColorDot;
import app.revanced.extension.shared.ui.Dim;
@SuppressWarnings("deprecation")
public class SegmentCategoryPreference extends ColorPickerPreference {
@@ -110,7 +110,7 @@ public class SegmentCategoryPreference extends ColorPickerPreference {
}
radioGroup.setOnCheckedChangeListener((group, checkedId) -> selectedDialogEntryIndex = checkedId);
radioGroup.setPadding(dipToPixels(10), 0, dipToPixels(10), dipToPixels(10));
radioGroup.setPadding(Dim.dp10, 0, Dim.dp10, Dim.dp10);
return radioGroup;
}

View File

@@ -15,6 +15,7 @@ import android.widget.FrameLayout;
import android.widget.ImageButton;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.ui.Dim;
import app.revanced.extension.youtube.patches.VideoInformation;
import app.revanced.extension.youtube.settings.Settings;
import app.revanced.extension.youtube.sponsorblock.SponsorBlockUtils;
@@ -132,9 +133,7 @@ public final class NewSegmentLayout extends FrameLayout {
GradientDrawable backgroundDrawable = new GradientDrawable();
backgroundDrawable.setColor(getResourceColor("skip_ad_button_background_color"));
final float cornerRadius = squareLayout
? 0
: 16 * getResources().getDisplayMetrics().density;
final float cornerRadius = squareLayout ? 0f : Dim.dp16;
backgroundDrawable.setCornerRadius(cornerRadius);
setBackground(backgroundDrawable);
}

View File

@@ -18,7 +18,6 @@ import android.preference.SwitchPreference;
import android.text.InputType;
import android.util.AttributeSet;
import android.util.Pair;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
@@ -34,6 +33,7 @@ import app.revanced.extension.shared.settings.Setting;
import app.revanced.extension.shared.settings.preference.CustomDialogListPreference;
import app.revanced.extension.shared.settings.preference.ResettableEditTextPreference;
import app.revanced.extension.shared.ui.CustomDialog;
import app.revanced.extension.shared.ui.Dim;
import app.revanced.extension.youtube.settings.Settings;
import app.revanced.extension.youtube.sponsorblock.SegmentPlaybackController;
import app.revanced.extension.youtube.sponsorblock.SponsorBlockSettings;
@@ -507,7 +507,7 @@ public class SponsorBlockPreferenceGroup extends PreferenceGroup {
EditText editText = getEditText();
editText.setInputType(editText.getInputType() | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
editText.setTextSize(TypedValue.COMPLEX_UNIT_PT, 7); // Use a smaller font to reduce text wrap.
editText.setTextSize(14);
// Create a custom dialog.
Pair<Dialog, LinearLayout> dialogPair = CustomDialog.create(
@@ -550,7 +550,7 @@ public class SponsorBlockPreferenceGroup extends PreferenceGroup {
| InputType.TYPE_TEXT_FLAG_MULTI_LINE
| InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
editText.setAutofillHints((String) null);
editText.setTextSize(TypedValue.COMPLEX_UNIT_PT, 8);
editText.setTextSize(14);
// Set preference listeners.
importExport.setOnPreferenceClickListener(preference1 -> {

View File

@@ -1,7 +1,6 @@
package app.revanced.extension.youtube.videoplayer;
import static app.revanced.extension.shared.StringRef.str;
import static app.revanced.extension.shared.Utils.dipToPixels;
import static app.revanced.extension.shared.settings.preference.CustomDialogListPreference.*;
import static app.revanced.extension.youtube.patches.VideoInformation.AUTOMATIC_VIDEO_QUALITY_VALUE;
import static app.revanced.extension.youtube.patches.VideoInformation.VIDEO_QUALITY_PREMIUM_NAME;
@@ -21,6 +20,7 @@ import android.widget.*;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import app.revanced.extension.shared.ui.Dim;
import app.revanced.extension.shared.ui.SheetBottomDialog;
import app.revanced.extension.youtube.shared.PlayerType;
import com.google.android.libraries.youtube.innertube.model.media.VideoQuality;
@@ -214,11 +214,6 @@ public class VideoQualityDialogButton {
}
}
// Preset size constants.
final int dip8 = dipToPixels(8);
final int dip12 = dipToPixels(12);
final int dip16 = dipToPixels(16);
// Create main layout.
SheetBottomDialog.DraggableLinearLayout mainLayout =
SheetBottomDialog.createMainLayout(context, getDialogBackgroundColor());
@@ -269,7 +264,7 @@ public class VideoQualityDialogButton {
LinearLayout.LayoutParams titleParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
titleParams.setMargins(dip12, dip16, 0, dip16);
titleParams.setMargins(Dim.dp12, Dim.dp16, 0, Dim.dp16);
titleView.setLayoutParams(titleParams);
mainLayout.addView(titleView);

View File

@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
org.gradle.parallel = true
android.useAndroidX = true
kotlin.code.style = official
version = 5.45.0
version = 5.46.0-dev.10

View File

@@ -404,6 +404,10 @@ public final class app/revanced/patches/music/layout/branding/CustomBrandingPatc
public static final fun getCustomBrandingPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
}
public final class app/revanced/patches/music/layout/buttons/HideButtonsKt {
public static final fun getHideButtons ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/music/layout/castbutton/HideCastButtonKt {
public static final fun getHideCastButton ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@@ -412,6 +416,10 @@ public final class app/revanced/patches/music/layout/compactheader/HideCategoryB
public static final fun getHideCategoryBar ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/music/layout/miniplayercolor/ChangeMiniplayerColorKt {
public static final fun getChangeMiniplayerColor ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/music/layout/navigationbar/NavigationBarPatchKt {
public static final fun getNavigationBarPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}

View File

@@ -18,7 +18,7 @@ val removeShareTargetsPatch = resourcePatch(
document("res/xml/shortcuts.xml")
} catch (_: FileNotFoundException) {
return@execute Logger.getLogger(this::class.java.name).warning(
"The app has no shortcuts. No changes applied.")
"The app has no shortcuts. No changes applied.")
}.use { document ->
val rootNode = document.getNode("shortcuts") as? Element ?: return@use

View File

@@ -9,7 +9,8 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
val disableAdsPatch = bytecodePatch(
"Disable ads",
) {
compatibleWith("com.duolingo")
// 6.55.3 and higher can show ads after each exercise.
compatibleWith("com.duolingo"("6.54.5"))
execute {
// Couple approaches to remove ads exist:

View File

@@ -4,6 +4,7 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.booleanOption
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.instagram.misc.extension.sharedExtensionPatch
import app.revanced.patches.shared.PATCH_NAME_HIDE_NAVIGATION_BUTTONS
import app.revanced.util.addInstructionsAtControlFlowLabel
import app.revanced.util.findFreeRegister
import app.revanced.util.getReference
@@ -19,11 +20,11 @@ private const val EXTENSION_CLASS_DESCRIPTOR =
@Suppress("unused")
val hideNavigationButtonsPatch = bytecodePatch(
name = "Hide navigation buttons",
name = PATCH_NAME_HIDE_NAVIGATION_BUTTONS,
description = "Hides navigation bar buttons, such as the Reels and Create button.",
use = false
) {
compatibleWith("com.instagram.android")
compatibleWith("com.instagram.android"("401.0.0.48.79"))
dependsOn(sharedExtensionPatch)

View File

@@ -1,24 +1,24 @@
package app.revanced.patches.music.layout.branding
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patcher.util.smali.ExternalLabel
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
import app.revanced.patches.music.misc.gms.Constants.MUSIC_MAIN_ACTIVITY_NAME
import app.revanced.patches.music.misc.gms.Constants.MUSIC_PACKAGE_NAME
import app.revanced.patches.music.misc.gms.musicActivityOnCreateFingerprint
import app.revanced.patches.music.misc.settings.PreferenceScreen
import app.revanced.patches.shared.layout.branding.EXTENSION_CLASS_DESCRIPTOR
import app.revanced.patches.shared.layout.branding.baseCustomBrandingPatch
import app.revanced.patches.shared.misc.mapping.get
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
import app.revanced.patches.shared.misc.mapping.resourceMappings
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.indexOfFirstInstructionReversed
import app.revanced.util.indexOfFirstLiteralInstructionOrThrow
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.TypeReference
private val disableSplashAnimationPatch = bytecodePatch {
@@ -33,23 +33,22 @@ private val disableSplashAnimationPatch = bytecodePatch {
// but the animation is not always the same size as the launch screen and it's still
// barely shown. Instead turn off the animation entirely (app will also launch a little faster).
cairoSplashAnimationConfigFingerprint.method.apply {
val mainActivityLaunchAnimation = resourceMappings["layout", "main_activity_launch_animation"]
val literalIndex = indexOfFirstLiteralInstructionOrThrow(
mainActivityLaunchAnimation
resourceMappings["layout", "main_activity_launch_animation"]
)
val insertIndex = indexOfFirstInstructionReversed(literalIndex) {
this.opcode == Opcode.INVOKE_VIRTUAL &&
getReference<MethodReference>()?.name == "setContentView"
} + 1
val jumpIndex = indexOfFirstInstructionOrThrow(insertIndex) {
opcode == Opcode.INVOKE_VIRTUAL &&
getReference<MethodReference>()?.parameterTypes?.firstOrNull() == "Ljava/lang/Runnable;"
} + 1
val checkCastIndex = indexOfFirstInstructionOrThrow(literalIndex) {
opcode == Opcode.CHECK_CAST &&
getReference<TypeReference>()?.type == "Lcom/airbnb/lottie/LottieAnimationView;"
}
val register = getInstruction<OneRegisterInstruction>(checkCastIndex).registerA
addInstructionsWithLabels(
insertIndex,
"goto :skip_animation",
ExternalLabel("skip_animation", getInstruction(jumpIndex))
// If using a custom icon then set the lottie animation view to null to bypasses the startup animation.
addInstructions(
checkCastIndex,
"""
invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->getLottieViewOrNull(Landroid/view/View;)Landroid/view/View;
move-result-object v$register
"""
)
}
}

View File

@@ -0,0 +1,64 @@
package app.revanced.patches.music.layout.buttons
import app.revanced.patcher.fingerprint
import app.revanced.util.containsLiteralInstruction
import app.revanced.util.literal
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal val mediaRouteButtonFingerprint = fingerprint {
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
returns("Z")
strings("MediaRouteButton")
}
internal val playerOverlayChipFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("L")
literal { playerOverlayChip }
}
internal val historyMenuItemFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("V")
parameters("Landroid/view/Menu;")
opcodes(
Opcode.INVOKE_INTERFACE,
Opcode.RETURN_VOID
)
literal { historyMenuItem }
custom { _, classDef ->
classDef.methods.count() == 5
}
}
internal val historyMenuItemOfflineTabFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("V")
parameters("Landroid/view/Menu;")
opcodes(
Opcode.INVOKE_INTERFACE,
Opcode.RETURN_VOID
)
custom { method, _ ->
method.containsLiteralInstruction(historyMenuItem) &&
method.containsLiteralInstruction(offlineSettingsMenuItem)
}
}
internal val searchActionViewFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Landroid/view/View;")
parameters()
literal { searchButton }
custom { _, classDef ->
classDef.type.endsWith("/SearchActionProvider;")
}
}
internal val topBarMenuItemImageViewFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Landroid/view/View;")
parameters()
literal { topBarMenuItemImageView }
}

View File

@@ -0,0 +1,121 @@
package app.revanced.patches.music.layout.buttons
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
import app.revanced.patches.music.misc.settings.PreferenceScreen
import app.revanced.patches.music.misc.settings.settingsPatch
import app.revanced.patches.shared.misc.mapping.get
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
import app.revanced.patches.shared.misc.mapping.resourceMappings
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.indexOfFirstLiteralInstructionOrThrow
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
internal var playerOverlayChip = -1L
private set
internal var historyMenuItem = -1L
private set
internal var offlineSettingsMenuItem = -1L
private set
internal var searchButton = -1L
private set
internal var topBarMenuItemImageView = -1L
private set
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/HideButtonsPatch;"
@Suppress("unused")
val hideButtons = bytecodePatch(
name = "Hide buttons",
description = "Adds options to hide the cast, history, notification, and search buttons."
) {
dependsOn(
sharedExtensionPatch,
settingsPatch,
addResourcesPatch,
resourceMappingPatch
)
compatibleWith(
"com.google.android.apps.youtube.music"(
"7.29.52",
"8.10.52"
)
)
execute {
playerOverlayChip = resourceMappings["id", "player_overlay_chip"]
historyMenuItem = resourceMappings["id", "history_menu_item"]
offlineSettingsMenuItem = resourceMappings["id", "offline_settings_menu_item"]
searchButton = resourceMappings["layout", "search_button"]
topBarMenuItemImageView = resourceMappings["id", "top_bar_menu_item_image_view"]
addResources("music", "layout.buttons.hideButtons")
PreferenceScreen.GENERAL.addPreferences(
SwitchPreference("revanced_music_hide_cast_button"),
SwitchPreference("revanced_music_hide_history_button"),
SwitchPreference("revanced_music_hide_notification_button"),
SwitchPreference("revanced_music_hide_search_button")
)
// Region for hide history button in the top bar.
arrayOf(
historyMenuItemFingerprint,
historyMenuItemOfflineTabFingerprint
).forEach { fingerprint ->
fingerprint.method.apply {
val targetIndex = fingerprint.patternMatch!!.startIndex
val targetRegister = getInstruction<FiveRegisterInstruction>(targetIndex).registerD
addInstructions(
targetIndex,
"""
invoke-static { v$targetRegister }, $EXTENSION_CLASS_DESCRIPTOR->hideHistoryButton(Z)Z
move-result v$targetRegister
"""
)
}
}
// Region for hide cast, search and notification buttons in the top bar.
arrayOf(
Triple(playerOverlayChipFingerprint, playerOverlayChip, "hideCastButton"),
Triple(searchActionViewFingerprint, searchButton, "hideSearchButton"),
Triple(topBarMenuItemImageViewFingerprint, topBarMenuItemImageView, "hideNotificationButton")
).forEach { (fingerprint, resourceIdLiteral, methodName) ->
fingerprint.method.apply {
val resourceIndex = indexOfFirstLiteralInstructionOrThrow(resourceIdLiteral)
val targetIndex = indexOfFirstInstructionOrThrow(
resourceIndex, Opcode.MOVE_RESULT_OBJECT
)
val targetRegister = getInstruction<OneRegisterInstruction>(targetIndex).registerA
addInstruction(
targetIndex + 1,
"invoke-static { v$targetRegister }, " +
"$EXTENSION_CLASS_DESCRIPTOR->$methodName(Landroid/view/View;)V"
)
}
}
// Region for hide cast button in the player.
mediaRouteButtonFingerprint.classDef.methods.single { method ->
method.name == "setVisibility"
}.addInstructions(
0,
"""
invoke-static { p1 }, $EXTENSION_CLASS_DESCRIPTOR->hideCastButton(I)I
move-result p1
"""
)
}
}

View File

@@ -1,17 +0,0 @@
package app.revanced.patches.music.layout.castbutton
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
import app.revanced.util.literal
internal val mediaRouteButtonFingerprint = fingerprint {
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
returns("Z")
strings("MediaRouteButton")
}
internal val playerOverlayChipFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("L")
literal { playerOverlayChip }
}

View File

@@ -1,77 +1,10 @@
package app.revanced.patches.music.layout.castbutton
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
import app.revanced.patches.music.misc.settings.PreferenceScreen
import app.revanced.patches.music.misc.settings.settingsPatch
import app.revanced.patches.shared.misc.mapping.get
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
import app.revanced.patches.shared.misc.mapping.resourceMappings
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.indexOfFirstLiteralInstructionOrThrow
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
internal var playerOverlayChip = -1L
private set
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/HideCastButtonPatch;"
import app.revanced.patches.music.layout.buttons.hideButtons
@Deprecated("Patch was moved", ReplaceWith("hideButtons"))
@Suppress("unused")
val hideCastButton = bytecodePatch(
name = "Hide cast button",
description = "Adds an option to hide the cast button."
) {
dependsOn(
sharedExtensionPatch,
settingsPatch,
addResourcesPatch,
resourceMappingPatch
)
compatibleWith(
"com.google.android.apps.youtube.music"(
"7.29.52",
"8.10.52"
)
)
execute {
playerOverlayChip = resourceMappings["id", "player_overlay_chip"]
addResources("music", "layout.castbutton.hideCastButton")
PreferenceScreen.GENERAL.addPreferences(
SwitchPreference("revanced_music_hide_cast_button"),
)
mediaRouteButtonFingerprint.classDef.apply {
val setVisibilityMethod = methods.first { method -> method.name == "setVisibility" }
setVisibilityMethod.addInstructions(
0,
"""
invoke-static { p1 }, $EXTENSION_CLASS_DESCRIPTOR->hideCastButton(I)I
move-result p1
"""
)
}
playerOverlayChipFingerprint.method.apply {
val resourceIndex = indexOfFirstLiteralInstructionOrThrow(playerOverlayChip)
val targetIndex = indexOfFirstInstructionOrThrow(resourceIndex, Opcode.MOVE_RESULT_OBJECT)
val targetRegister = getInstruction<OneRegisterInstruction>(targetIndex).registerA
addInstruction(
targetIndex + 1,
"invoke-static { v$targetRegister }, $EXTENSION_CLASS_DESCRIPTOR->hideCastButton(Landroid/view/View;)V"
)
}
}
val hideCastButton = bytecodePatch{
dependsOn(hideButtons)
}

View File

@@ -0,0 +1,110 @@
@file:Suppress("SpellCheckingInspection")
package app.revanced.patches.music.layout.miniplayercolor
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
import app.revanced.patches.music.misc.settings.PreferenceScreen
import app.revanced.patches.music.misc.settings.settingsPatch
import app.revanced.patches.shared.misc.mapping.get
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
import app.revanced.patches.shared.misc.mapping.resourceMappings
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.util.addInstructionsAtControlFlowLabel
import app.revanced.util.findFreeRegister
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.ReferenceInstruction
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
internal var mpp_player_bottom_sheet = -1L
private set
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/ChangeMiniplayerColorPatch;"
@Suppress("unused")
val changeMiniplayerColor = bytecodePatch(
name = "Change miniplayer color",
description = "Adds an option to change the miniplayer background color to match the fullscreen player."
) {
dependsOn(
sharedExtensionPatch,
settingsPatch,
addResourcesPatch,
resourceMappingPatch
)
compatibleWith(
"com.google.android.apps.youtube.music"(
"7.29.52",
"8.10.52"
)
)
execute {
mpp_player_bottom_sheet = resourceMappings["id", "mpp_player_bottom_sheet"]
addResources("music", "layout.miniplayercolor.changeMiniplayerColor")
PreferenceScreen.PLAYER.addPreferences(
SwitchPreference("revanced_music_change_miniplayer_color"),
)
switchToggleColorFingerprint.match(miniPlayerConstructorFingerprint.classDef).let {
val relativeIndex = it.patternMatch!!.endIndex + 1
val invokeVirtualIndex = it.method.indexOfFirstInstructionOrThrow(
relativeIndex, Opcode.INVOKE_VIRTUAL
)
val colorMathPlayerInvokeVirtualReference = it.method
.getInstruction<ReferenceInstruction>(invokeVirtualIndex).reference
val iGetIndex = it.method.indexOfFirstInstructionOrThrow(
relativeIndex, Opcode.IGET
)
val colorMathPlayerIGetReference = it.method
.getInstruction<ReferenceInstruction>(iGetIndex).reference as FieldReference
val colorGreyIndex = miniPlayerConstructorFingerprint.method.indexOfFirstInstructionReversedOrThrow {
getReference<MethodReference>()?.name == "getColor"
}
val iPutIndex = miniPlayerConstructorFingerprint.method.indexOfFirstInstructionOrThrow(
colorGreyIndex, Opcode.IPUT
)
val colorMathPlayerIPutReference = miniPlayerConstructorFingerprint.method
.getInstruction<ReferenceInstruction>(iPutIndex).reference
miniPlayerConstructorFingerprint.classDef.methods.single { method ->
method.accessFlags == AccessFlags.PUBLIC.value or AccessFlags.FINAL.value &&
method.returnType == "V" &&
method.parameters == it.originalMethod.parameters
}.apply {
val insertIndex = indexOfFirstInstructionReversedOrThrow(Opcode.INVOKE_DIRECT)
val freeRegister = findFreeRegister(insertIndex)
addInstructionsAtControlFlowLabel(
insertIndex,
"""
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->changeMiniplayerColor()Z
move-result v$freeRegister
if-eqz v$freeRegister, :off
invoke-virtual { p1 }, $colorMathPlayerInvokeVirtualReference
move-result-object v$freeRegister
check-cast v$freeRegister, ${colorMathPlayerIGetReference.definingClass}
iget v$freeRegister, v$freeRegister, $colorMathPlayerIGetReference
iput v$freeRegister, p0, $colorMathPlayerIPutReference
:off
nop
"""
)
}
}
}
}

View File

@@ -0,0 +1,27 @@
package app.revanced.patches.music.layout.miniplayercolor
import app.revanced.patcher.fingerprint
import app.revanced.util.literal
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal val miniPlayerConstructorFingerprint = fingerprint {
returns("V")
strings("sharedToggleMenuItemMutations")
literal { mpp_player_bottom_sheet }
}
/**
* Matches to the class found in [miniPlayerConstructorFingerprint].
*/
internal val switchToggleColorFingerprint = fingerprint {
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
returns("V")
parameters("L", "J")
opcodes(
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT_OBJECT,
Opcode.CHECK_CAST,
Opcode.IGET
)
}

View File

@@ -12,3 +12,5 @@ internal const val PATCH_DESCRIPTION_SANITIZE_SHARING_LINKS = "Removes the track
internal const val PATCH_NAME_CHANGE_LINK_SHARING_DOMAIN = "Change link sharing domain"
internal const val PATCH_DESCRIPTION_CHANGE_LINK_SHARING_DOMAIN = "Replaces the domain name of shared links."
internal const val PATCH_NAME_HIDE_NAVIGATION_BUTTONS = "Hide navigation buttons"

View File

@@ -5,6 +5,7 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.BytecodePatchBuilder
import app.revanced.patcher.patch.BytecodePatchContext
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.settings.preference.BasePreference
@@ -13,6 +14,8 @@ import app.revanced.patches.shared.misc.settings.preference.NonInteractivePrefer
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference.Sorting
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.util.ResourceGroup
import app.revanced.util.copyResources
import app.revanced.util.findInstructionIndicesReversedOrThrow
import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.indexOfFirstInstructionReversedOrThrow
@@ -36,7 +39,27 @@ internal fun enableDebuggingPatch(
description = "Adds options for debugging and exporting ReVanced logs to the clipboard.",
) {
dependsOn(addResourcesPatch)
dependsOn(
addResourcesPatch,
resourcePatch {
execute {
copyResources(
"settings",
ResourceGroup("drawable",
// Action buttons.
"revanced_settings_copy_all.xml",
"revanced_settings_deselect_all.xml",
"revanced_settings_select_all.xml",
// Move buttons.
"revanced_settings_arrow_left_double.xml",
"revanced_settings_arrow_left_one.xml",
"revanced_settings_arrow_right_double.xml",
"revanced_settings_arrow_right_one.xml"
)
)
}
}
)
block()
@@ -64,6 +87,11 @@ internal fun enableDebuggingPatch(
"revanced_debug_logs_clear_buffer",
tag = "app.revanced.extension.shared.settings.preference.ClearLogBufferPreference",
selectable = true
),
NonInteractivePreference(
"revanced_debug_feature_flags_manager",
tag = "app.revanced.extension.shared.settings.preference.FeatureFlagsManagerPreference",
selectable = true
)
)
)

View File

@@ -15,7 +15,7 @@ val disableLicenseCheckPatch = bytecodePatch(
execute {
if (processLicenseResponseFingerprint.methodOrNull == null || validateLicenseResponseFingerprint.methodOrNull == null) {
return@execute Logger.getLogger(this::class.java.name)
.warning("Could not find Pairip licensing check. No changes applied.")
.warning("Could not find Pairip licensing check. No changes applied.")
}
// Set first parameter (responseCode) to 0 (success status).

View File

@@ -7,10 +7,12 @@ import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
@Deprecated("Obsolete")
internal val navigationBarItemSetClassFingerprint = fingerprint {
strings("NavigationBarItemSet(")
}
@Deprecated("Obsolete")
internal val navigationBarItemSetConstructorFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
// Make sure the method checks whether navigation bar items are null before adding them.
@@ -23,6 +25,7 @@ internal val navigationBarItemSetConstructorFingerprint = fingerprint {
}
}
@Deprecated("Obsolete")
internal val oldNavigationBarAddItemFingerprint = fingerprint {
strings("Bottom navigation tabs exceeds maximum of 5 tabs")
}

View File

@@ -14,11 +14,11 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
private const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/spotify/layout/hide/createbutton/HideCreateButtonPatch;"
@Deprecated("Patch no longer works with the latest version of Spotify, " +
"and Spotify has added this functionality to the app")
@Suppress("unused")
val hideCreateButtonPatch = bytecodePatch(
name = "Hide Create button",
description = "Hides the \"Create\" button in the navigation bar. The latest app targets do not need this patch.",
use = false
) {
compatibleWith("com.spotify.music")

View File

@@ -3,23 +3,13 @@ package app.revanced.patches.viber.misc.navbar
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
import app.revanced.patcher.patch.booleanOption
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.shared.PATCH_NAME_HIDE_NAVIGATION_BUTTONS
import java.util.logging.Logger
import kotlin.collections.joinToString
private const val instructionsFooter = """
# If we reach this, it means that this tab has been disabled by user
const/4 v0, 0
return v0 # return false as "This tab is not enabled"
# Proceed with default execution
:continue
nop
"""
@Suppress("unused")
val hideNavigationButtonsPatch = bytecodePatch(
name = "Hide navigation buttons",
name = PATCH_NAME_HIDE_NAVIGATION_BUTTONS,
description = "Permanently hides navigation bar buttons, such as Explore and Marketplace.",
use = false
) {
@@ -40,13 +30,21 @@ val hideNavigationButtonsPatch = bytecodePatch(
if (allowedItems.size == AllowedNavigationItems.entries.size) {
return@execute Logger.getLogger(this::class.java.name).warning(
"No hide navigation buttons options are enabled. No changes made."
"No hide navigation buttons options are enabled. No changes applied."
)
}
val injectionInstructions = allowedItems
.map { it.key.buildAllowInstruction() }
.joinToString("\n") + instructionsFooter
.joinToString("\n") + """
# If we reach this, it means that this tab has been disabled by user
const/4 v0, 0
return v0 # return false as "This tab is not enabled"
# Proceed with default execution
:continue
nop
"""
shouldShowTabIdMethodFingerprint
.method
@@ -78,8 +76,8 @@ private enum class AllowedNavigationItems(
fun buildAllowInstruction(): String =
ids.joinToString("\n") { id ->
"""
const/4 v0, $id # If tabId == $id ($itemName), don't hide it
if-eq p1, v0, :continue
const/4 v0, $id # If tabId == $id ($itemName), don't hide it
if-eq p1, v0, :continue
"""
}
}

View File

@@ -145,10 +145,13 @@ val hideLayoutComponentsPatch = bytecodePatch(
SwitchPreference("revanced_hide_ask_section"),
SwitchPreference("revanced_hide_attributes_section"),
SwitchPreference("revanced_hide_chapters_section"),
SwitchPreference("revanced_hide_featured_section"),
SwitchPreference("revanced_hide_info_cards_section"),
SwitchPreference("revanced_hide_how_this_was_made_section"),
SwitchPreference("revanced_hide_hype_points"),
SwitchPreference("revanced_hide_key_concepts_section"),
SwitchPreference("revanced_hide_podcast_section"),
SwitchPreference("revanced_hide_description_subscribe_button"),
SwitchPreference("revanced_hide_transcript_section"),
),
),

View File

@@ -45,10 +45,10 @@ val hidePlayerFlyoutMenuPatch = bytecodePatch(
SwitchPreference("revanced_hide_player_flyout_loop_video"),
SwitchPreference("revanced_hide_player_flyout_ambient_mode"),
SwitchPreference("revanced_hide_player_flyout_stable_volume"),
SwitchPreference("revanced_hide_player_flyout_listen_with_youtube_music"),
SwitchPreference("revanced_hide_player_flyout_help"),
SwitchPreference("revanced_hide_player_flyout_speed"),
SwitchPreference("revanced_hide_player_flyout_lock_screen"),
SwitchPreference("revanced_hide_player_flyout_more_info"),
SwitchPreference(
key = "revanced_hide_player_flyout_audio_track",
tag = "app.revanced.extension.youtube.settings.preference.HideAudioFlyoutMenuPreference"

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -134,9 +133,8 @@ Second \"item\" text"</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
@@ -268,10 +266,12 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
</patch>
<patch id="layout.compactheader.hideCategoryBar">
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -134,9 +133,8 @@ Second \"item\" text"</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
@@ -268,10 +266,12 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
</patch>
<patch id="layout.compactheader.hideCategoryBar">
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">تاريخ بناء APK تالف</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">تحذير</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">إشعار ReVanced</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">لم يتم حفظ سجل المشاهدة الخاص بك.&lt;br&gt;&lt;br&gt;من المرجح أن يكون السبب في ذلك هو مانع إعلانات DNS أو وكيل الشبكة.&lt;br&gt;&lt;br&gt;لإصلاح هذه المشكلة، قم بإضافة &lt;b&gt;s.youtube.com&lt;/b&gt; إلى القائمة البيضاء أو قم بإيقاف تشغيل جميع أدوات حظر DNS ووكلاء البروكسي.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">لا تعرض مرة أخرى</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">الإعدادات</string>
<string name="revanced_settings_confirm_user_dialog_title">هل أنت متأكد أنك تريد المتابعة؟</string>
<string name="revanced_settings_save">حفظ</string>
<string name="revanced_settings_reset">إعادة التعيين</string>
<string name="revanced_settings_reset_color">إعادة تعيين اللون</string>
<string name="revanced_settings_color_invalid">لون غير صالح</string>
@@ -164,6 +164,14 @@ Second \"item\" text"</string>
<string name="revanced_debug_logs_clear_buffer_title">مسح سجلات تصحيح الأخطاء</string>
<string name="revanced_debug_logs_clear_buffer_summary">يمسح جميع سجلات تصحيح أخطاء ReVanced المخزنة</string>
<string name="revanced_debug_logs_clear_toast">تم مسح السجلات</string>
<string name="revanced_debug_feature_flags_manager_title">مدير Feature Flags</string>
<string name="revanced_debug_feature_flags_manager_summary">إدارة Feature Flags المنطقية</string>
<string name="revanced_debug_feature_flags_manager_active_header">Flags نشطة (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Flags محظورة (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">البحث عن Flags...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">تم حفظ Flags</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">تم إعادة تعيين Flags</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">تم نسخ Flags إلى الحافظة</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">تطهير روابط المشاركة</string>
@@ -328,15 +336,24 @@ Second \"item\" text"</string>
<string name="revanced_hide_how_this_was_made_section_title">إخفاء \'كيف تم إنشاء هذا المحتوى\'</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">تم إخفاء قسم كيف تم إنشاء هذا المحتوى</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">يتم عرض قسم كيف تم إنشاء هذا المحتوى</string>
<string name="revanced_hide_hype_points_title">إخفاء نقاط التشجيع</string>
<string name="revanced_hide_hype_points_summary_on">تم إخفاء نقاط التشجيع</string>
<string name="revanced_hide_hype_points_summary_off">يتم عرض نقاط التشجيع</string>
<string name="revanced_hide_podcast_section_title">إخفاء \'استكشاف البودكاست\'</string>
<string name="revanced_hide_podcast_section_summary_on">تم إخفاء قسم استكشاف البودكاست</string>
<string name="revanced_hide_podcast_section_summary_off">يتم عرض قسم استكشاف البودكاست</string>
<string name="revanced_hide_featured_section_title">إخفاء المحتوى المميز</string>
<string name="revanced_hide_featured_section_summary_on">تم إخفاء قسم المحتوى المميز</string>
<string name="revanced_hide_featured_section_summary_off">يتم عرض قسم المحتوى المميز</string>
<string name="revanced_hide_info_cards_section_title">إخفاء بطاقات المعلومات</string>
<string name="revanced_hide_info_cards_section_summary_on">تم إخفاء قسم بطاقات المعلومات</string>
<string name="revanced_hide_info_cards_section_summary_off">يتم عرض قسم بطاقات المعلومات</string>
<string name="revanced_hide_key_concepts_section_title">إخفاء \'المفاهيم الأساسية\'</string>
<string name="revanced_hide_key_concepts_section_summary_on">تم إخفاء قسم المفاهيم الأساسية</string>
<string name="revanced_hide_key_concepts_section_summary_off">يتم عرض قسم المفاهيم الأساسية</string>
<string name="revanced_hide_description_subscribe_button_title">إخفاء زر الاشتراك</string>
<string name="revanced_hide_description_subscribe_button_summary_on">تم إخفاء زر الاشتراك</string>
<string name="revanced_hide_description_subscribe_button_summary_off">يتم عرض زر الاشتراك</string>
<string name="revanced_hide_transcript_section_title">إخفاء النص</string>
<string name="revanced_hide_transcript_section_summary_on">تم إخفاء قسم النص</string>
<string name="revanced_hide_transcript_section_summary_off">يتم عرض قسم النص</string>
@@ -771,15 +788,14 @@ Second \"item\" text"</string>
<string name="revanced_hide_player_flyout_speed_title">إخفاء سرعة التشغيل</string>
<string name="revanced_hide_player_flyout_speed_summary_on">تم إخفاء قائمة سرعة التشغيل</string>
<string name="revanced_hide_player_flyout_speed_summary_off">يتم عرض قائمة سرعة التشغيل</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">إخفاء المزيد من المعلومات</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">تم إخفاء قائمة المزيد من المعلومات</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">يتم عرض قائمة المزيد من المعلومات</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">إخفاء شاشة القفل</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">تم إخفاء قائمة شاشة القفل</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">يتم عرض قائمة شاشة القفل</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">إخفاء الاستماع مع YouTube Music</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">تم إخفاء قائمة الاستماع مع YouTube Music</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">يتم عرض قائمة الاستماع مع YouTube Music</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">إخفاء المقطع الصوتي</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">تم إخفاء قائمة المقطع الصوتي</string>
@@ -1661,16 +1677,30 @@ Second \"item\" text"</string>
<string name="revanced_music_play_permanent_repeat_summary_on">تم تمكين التكرار الدائم</string>
<string name="revanced_music_play_permanent_repeat_summary_off">تم تعطيل التكرار الدائم</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">إخفاء زر البث</string>
<string name="revanced_music_hide_cast_button_summary_on">تم إخفاء زر البث</string>
<string name="revanced_music_hide_cast_button_summary_off">يتم عرض زر البث</string>
<string name="revanced_music_hide_history_button_title">إخفاء زر السجل</string>
<string name="revanced_music_hide_history_button_summary_on">زر السجل مخفي</string>
<string name="revanced_music_hide_history_button_summary_off">زر السجل ظاهر</string>
<string name="revanced_music_hide_notification_button_title">إخفاء زر الإشعارات</string>
<string name="revanced_music_hide_notification_button_summary_on">تم إخفاء زر الإشعارات</string>
<string name="revanced_music_hide_notification_button_summary_off">يتم عرض زر الإشعارات</string>
<string name="revanced_music_hide_search_button_title">إخفاء زر البحث</string>
<string name="revanced_music_hide_search_button_summary_on">تم إخفاء زر البحث</string>
<string name="revanced_music_hide_search_button_summary_off">يتم عرض زر البحث</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">إخفاء شريط الفئات</string>
<string name="revanced_music_hide_category_bar_summary_on">تم إخفاء شريط الفئات</string>
<string name="revanced_music_hide_category_bar_summary_off">يتم عرض شريط الفئات</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">تغيير لون المشغل المصغر</string>
<string name="revanced_music_change_miniplayer_color_summary_on">يتطابق لون المشغل المصغر مع المشغل بملء الشاشة</string>
<string name="revanced_music_change_miniplayer_color_summary_off">يستخدم المشغل المصغر اللون الافتراضي</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">شريط التنقل</string>
<string name="revanced_music_navigation_bar_screen_summary">إخفاء أزرار شريط التنقل أو تغييرها</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -29,7 +28,6 @@ Second \"item\" text"</string>
<patch id="misc.checks.checkEnvironmentPatch">
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">সকীয়নি</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<!-- Settings about dialog. -->
@@ -135,9 +133,8 @@ Second \"item\" text"</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
@@ -270,10 +267,12 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
</patch>
<patch id="layout.compactheader.hideCategoryBar">
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK qurulma vaxtı pozulub</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Xәbәrdarlıq</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVanced Bildiriş</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Baxış tarixçəniz saxlanmır.&lt;br&gt;&lt;br&gt;Bu çox güman ki, DNS reklam bloklayıcı və ya şəbəkə proksisinə görədir.&lt;br&gt;&lt;br&gt;.Bunu düzəltmək üçün s.youtube.com-u&lt;/b&gt; &lt;b&gt;ağ siyahıya salın və ya bütün DNS bloklayıcıları və proksiləri bağlayın.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Təkrar göstərmə</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Tənzimləmələr</string>
<string name="revanced_settings_confirm_user_dialog_title">Davam etmək istədiyinizə əminsiniz?</string>
<string name="revanced_settings_save">Saxla</string>
<string name="revanced_settings_reset">Sıfırla</string>
<string name="revanced_settings_reset_color">Rəngi sıfırla</string>
<string name="revanced_settings_color_invalid">Yanlış rəng</string>
@@ -164,6 +164,14 @@ Gözlənilməz hallardan xəbərdar olmayacaqsınız."</string>
<string name="revanced_debug_logs_clear_buffer_title">Sazlama qeydlərini təmizlə</string>
<string name="revanced_debug_logs_clear_buffer_summary">Saxlanılan bütün ReVanced sazlama qeydlərini təmizləyir</string>
<string name="revanced_debug_logs_clear_toast">Qeydlər silindi</string>
<string name="revanced_debug_feature_flags_manager_title">Xüsusiyyət nişançıları idarəedicisi</string>
<string name="revanced_debug_feature_flags_manager_summary">Boolean xüsusiyyət nişançıların idarə et</string>
<string name="revanced_debug_feature_flags_manager_active_header">Aktiv nişançılar (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Bloklanmış nişançılar (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Nişançıları axtarın...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Nişançılar saxlandı</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Nişançılar sıfırlandı</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Nişançılar buferə köçürüldü</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Paylaşım linklərin təmizlə</string>
@@ -328,15 +336,24 @@ Hər halda, bunu aktivləşdirmə IP ünvanınız kimi bəzi istifadəçi məlum
<string name="revanced_hide_how_this_was_made_section_title">\'Bu kontent necə hazırlanıb\'ı Gizlət</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">Bu məzmunun necə hazırlandığı bölməsi gizlidir</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">Bu məzmunun necə hazırlandığı bölməsi görünür</string>
<string name="revanced_hide_hype_points_title">Coşqu xalların gizlət</string>
<string name="revanced_hide_hype_points_summary_on">Coşqu xalları gizlədilib</string>
<string name="revanced_hide_hype_points_summary_off">Coşqu xalları göstərilir</string>
<string name="revanced_hide_podcast_section_title">\'Podkastı araşdırın\"-ı Gizlət</string>
<string name="revanced_hide_podcast_section_summary_on">Podkast bölməsin araşdırın gizlidir</string>
<string name="revanced_hide_podcast_section_summary_off">Podkast bölməsin araşdırın görünür</string>
<string name="revanced_hide_featured_section_title">Önə çıxan məzmunu gizlət</string>
<string name="revanced_hide_featured_section_summary_on">Önə çıxan məzmun bölməsi gizlənib</string>
<string name="revanced_hide_featured_section_summary_off">Önə çıxan məzmun bölməsi göstərilir</string>
<string name="revanced_hide_info_cards_section_title">Məlumat Kartlarını Gizlət</string>
<string name="revanced_hide_info_cards_section_summary_on">Məlumat kartları bölməsi gizlədilir</string>
<string name="revanced_hide_info_cards_section_summary_off">Məlumat kartları bölməsi göstərilir</string>
<string name="revanced_hide_key_concepts_section_title">\"Əsas konseptlər-i\" gizlət</string>
<string name="revanced_hide_key_concepts_section_summary_on">Əsas konseptlər bölməsi gizlidir</string>
<string name="revanced_hide_key_concepts_section_summary_off">Əsas konseptlər bölməsi görünür</string>
<string name="revanced_hide_description_subscribe_button_title">Abunə ol düyməsini gizlət</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Abunə düyməsi gizlidir</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Abunə düyməsi görünür</string>
<string name="revanced_hide_transcript_section_title">Transkript-i Gizlət</string>
<string name="revanced_hide_transcript_section_summary_on">Transkripsiya bölməsi gizlidir</string>
<string name="revanced_hide_transcript_section_summary_off">Transkripsiya bölməsi göstərilir</string>
@@ -771,15 +788,14 @@ Bu seçimi dəyişdirmə işə düşmürsə, Gizli rejimə keçməyə çalışı
<string name="revanced_hide_player_flyout_speed_title">\"Oynatma sürəti\"ni gizlət</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Oynatma sürəti menyusu gizlidir</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Oynatma sürəti menyusu göstərilir</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">\"Daha çox məlumat\"ı gizlət</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">Ətraflı məlumat menyusu gizlidir</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">Ətraflı məlumat menyusu göstərilir</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">Kilid ekranını gizlət</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Kilid ekranı menyusu gizlidir</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Kilid ekranı menyusu göstərilir</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">YouTube Music ilə dinləməni gizlət</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">YouTube Music ilə dinlə menyusu gizlədilib</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">YouTube Music ilə dinlə menyusu göstərilir</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Səs trekini gizlət</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Səs axını menyusu gizlidir</string>
@@ -1660,16 +1676,30 @@ Video oynatma AV1 ilə ilişə bilər və ya kadrlar buraxıla bilər."</string>
<string name="revanced_music_play_permanent_repeat_summary_on">Kəsintisiz təkrarlama aktivdir</string>
<string name="revanced_music_play_permanent_repeat_summary_off">Kəsintisiz təkrarlama qapalıdır</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Yayım düyməsini gizlət</string>
<string name="revanced_music_hide_cast_button_summary_on">Yayım düyməsi gizlidir</string>
<string name="revanced_music_hide_cast_button_summary_off">Yayım düyməsi göstərilir</string>
<string name="revanced_music_hide_history_button_title">Keçmiş düyməsini gizlət</string>
<string name="revanced_music_hide_history_button_summary_on">Keçmiş düyməsi gizlidir</string>
<string name="revanced_music_hide_history_button_summary_off">Keçmiş düyməsi görünür</string>
<string name="revanced_music_hide_notification_button_title">Bildiriş düyməsini gizlət</string>
<string name="revanced_music_hide_notification_button_summary_on">Bildiriş düyməsi gizlidir</string>
<string name="revanced_music_hide_notification_button_summary_off">Bildiriş düyməsi görünür</string>
<string name="revanced_music_hide_search_button_title">Axtarış düyməsini gizlət</string>
<string name="revanced_music_hide_search_button_summary_on">Axtarış düyməsi gizlidir</string>
<string name="revanced_music_hide_search_button_summary_off">Axtarış düyməsi görünür</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Kateqoriya cizgisin gizlət</string>
<string name="revanced_music_hide_category_bar_summary_on">Kateqoriya cizgisi gizlidir</string>
<string name="revanced_music_hide_category_bar_summary_off">Kateqoriya cizgisi görünür</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Miniplayer rəngini dəyişdirin</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Miniplayer rəngi tam ekran pleyeri ilə eynidir</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Miniplayer defolt rəngdən istifadə edir</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Fəaliyyət cizgisi</string>
<string name="revanced_music_navigation_bar_screen_summary">Fəaliyyət cizgisi düymələrini gizlət və ya dəyiş</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">Дата стварэння APK пашкоджана</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Увага</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">Заўвага ReVanced</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Ваша гісторыя прагляду не захоўваецца.&lt;br&gt;&lt;br&gt;Гэта, хутчэй за ўсё, выклікана DNS-блакіроўшчыкам рэкламы або сеткавым праксі.&lt;br&gt;&lt;br&gt;Каб выправіць гэта, дадайце &lt;b&gt;s.youtube.com&lt;/b&gt; у белы спіс або адключыце ўсе DNS-блакіроўшчыкі і праксі.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Больш не паказваць</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Налады</string>
<string name="revanced_settings_confirm_user_dialog_title">Вы ўпэўнены, што хочаце працягнуць?</string>
<string name="revanced_settings_save">Захаваць</string>
<string name="revanced_settings_reset">Скінуць</string>
<string name="revanced_settings_reset_color">Скінуць колер</string>
<string name="revanced_settings_color_invalid">Несапраўдны колер</string>
@@ -164,6 +164,14 @@ Second \"item\" text"</string>
<string name="revanced_debug_logs_clear_buffer_title">Ачысціць адладачныя лагі</string>
<string name="revanced_debug_logs_clear_buffer_summary">Ачышчае ўсе захаваныя адладачныя лагі ReVanced</string>
<string name="revanced_debug_logs_clear_toast">Лагі ачышчаны</string>
<string name="revanced_debug_feature_flags_manager_title">Менеджэр функцыйных сцягоў</string>
<string name="revanced_debug_feature_flags_manager_summary">Кіраванне лагічнымі функцыйнымі сцягамі</string>
<string name="revanced_debug_feature_flags_manager_active_header">Актыўныя сцягі (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Заблакаваныя сцягі (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Пошук сцягоў...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Сцягі захаваны</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Сцягі скінуты</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Сцягі скапіяваны ў буфер абмену</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Ачысціць спасылкі для абагульвання</string>
@@ -328,15 +336,24 @@ Second \"item\" text"</string>
<string name="revanced_hide_how_this_was_made_section_title">Схаваць «Як быў створаны гэты кантэнт»</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">Раздзел «Як быў створаны гэты кантэнт» схаваны</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">Раздзел «Як быў створаны гэты кантэнт» паказаны</string>
<string name="revanced_hide_hype_points_title">Схаваць Hype балы</string>
<string name="revanced_hide_hype_points_summary_on">Hype балы схаваны</string>
<string name="revanced_hide_hype_points_summary_off">Hype балы паказаны</string>
<string name="revanced_hide_podcast_section_title">Схаваць «Пазнаёмцеся з падкастам»</string>
<string name="revanced_hide_podcast_section_summary_on">Раздзел «Пазнаёмцеся з падкастам» схаваны</string>
<string name="revanced_hide_podcast_section_summary_off">Раздзел «Пазнаёмцеся з падкастам» паказаны</string>
<string name="revanced_hide_featured_section_title">Схаваць рэкамендаваны кантэнт</string>
<string name="revanced_hide_featured_section_summary_on">Раздзел рэкамендаванага кантэнту схаваны</string>
<string name="revanced_hide_featured_section_summary_off">Раздзел рэкамендаванага кантэнту паказаны</string>
<string name="revanced_hide_info_cards_section_title">Схаваць інфармацыйныя карткі</string>
<string name="revanced_hide_info_cards_section_summary_on">Раздзел інфармацыйных картак схаваны</string>
<string name="revanced_hide_info_cards_section_summary_off">Паказваецца раздзел інфармацыйных карт</string>
<string name="revanced_hide_key_concepts_section_title">Схаваць «Ключавыя канцэпцыі»</string>
<string name="revanced_hide_key_concepts_section_summary_on">Раздзел «Ключавыя канцэпцыі» схаваны</string>
<string name="revanced_hide_key_concepts_section_summary_off">Раздзел «Ключавыя канцэпцыі» паказаны</string>
<string name="revanced_hide_description_subscribe_button_title">Схаваць кнопку «Падпісацца»</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Кнопка падпіскі схавана</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Кнопка падпіскі паказана</string>
<string name="revanced_hide_transcript_section_title">Схаваць стэнаграму</string>
<string name="revanced_hide_transcript_section_summary_on">Раздзел стэнаграмы схаваны</string>
<string name="revanced_hide_transcript_section_summary_off">Паказваецца раздзел стэнаграмы</string>
@@ -771,15 +788,14 @@ Second \"item\" text"</string>
<string name="revanced_hide_player_flyout_speed_title">Схаваць хуткасць прайгравання</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Меню хуткасці прайгравання схавана</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Адлюструецца меню хуткасці прайгравання</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">Схаваць Дадатковая інфармацыя</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">Меню дадатковай інфармацыі схавана</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">Паказана меню дадатковай інфармацыі</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">Схаваць экран блакіроўкі</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Меню экрана блакіроўкі схавана</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Адлюстроўваецца меню блакіроўкі экрана</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">Схаваць \'Слухаць у YouTube Music\'</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">Меню \'Слухаць у YouTube Music\' схавана</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">Меню \'Слухаць у YouTube Music\' паказана</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Схаваць гукавую дарожку</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Меню гукавой дарожкі схавана</string>
@@ -1662,16 +1678,30 @@ Second \"item\" text"</string>
<string name="revanced_music_play_permanent_repeat_summary_on">Пастаянны паўтор уключаны</string>
<string name="revanced_music_play_permanent_repeat_summary_off">Пастаянны паўтор адключаны</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Схаваць кнопку трансляцыі</string>
<string name="revanced_music_hide_cast_button_summary_on">Кнопка трансляцыі схавана</string>
<string name="revanced_music_hide_cast_button_summary_off">Кнопка трансляцыі паказана</string>
<string name="revanced_music_hide_history_button_title">Схаваць кнопку гісторыі</string>
<string name="revanced_music_hide_history_button_summary_on">Кнопка гісторыі схавана</string>
<string name="revanced_music_hide_history_button_summary_off">Кнопка гісторыі паказана</string>
<string name="revanced_music_hide_notification_button_title">Схаваць кнопку апавяшчэння</string>
<string name="revanced_music_hide_notification_button_summary_on">Кнопка апавяшчэння схаваная</string>
<string name="revanced_music_hide_notification_button_summary_off">Кнопка апавяшчэння паказаная</string>
<string name="revanced_music_hide_search_button_title">Схаваць кнопку пошуку</string>
<string name="revanced_music_hide_search_button_summary_on">Кнопка пошуку схаваная</string>
<string name="revanced_music_hide_search_button_summary_off">Кнопка пошуку паказаная</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Схаваць панэль катэгорый</string>
<string name="revanced_music_hide_category_bar_summary_on">Панэль катэгорый схаваная</string>
<string name="revanced_music_hide_category_bar_summary_off">Панэль катэгорый паказаная</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Змяніць колер міні-плэера</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Колер міні-плэера супадае з поўнаэкранным плэерам</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Міні-плэер выкарыстоўвае колер па змаўчанні</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Панэль навігацыі</string>
<string name="revanced_music_navigation_bar_screen_summary">Схаваць або змяніць кнопкі панэлі навігацыі</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">Датата на компилация на APK е повредена</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Предупреждение</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">Известие от ReVanced</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Историята ви на гледане не се запазва.&lt;br&gt;&lt;br&gt;Това най-вероятно е причинено от DNS блокиращ реклами или мрежов прокси.&lt;br&gt;&lt;br&gt;За да коригирате това, поставете &lt;b&gt;s.youtube в белия списък.com&lt;/b&gt; или изключете всички DNS блокери и проксита.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Не показвай отново</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Настройки</string>
<string name="revanced_settings_confirm_user_dialog_title">Сигурни ли сте, че искате да продължите?</string>
<string name="revanced_settings_save">Запазване</string>
<string name="revanced_settings_reset">Възстанови</string>
<string name="revanced_settings_reset_color">Нулиране на цвета</string>
<string name="revanced_settings_color_invalid">Невалиден цвят</string>
@@ -164,6 +164,14 @@ Second \"item\" text"</string>
<string name="revanced_debug_logs_clear_buffer_title">Изчистване на логовете за отстраняване на грешки</string>
<string name="revanced_debug_logs_clear_buffer_summary">Изчиства всички съхранени логове за отстраняване на грешки на ReVanced</string>
<string name="revanced_debug_logs_clear_toast">Логовете са изчистени</string>
<string name="revanced_debug_feature_flags_manager_title">Мениджър на флагове за функции</string>
<string name="revanced_debug_feature_flags_manager_summary">Управление на булеви флагове за функции</string>
<string name="revanced_debug_feature_flags_manager_active_header">Активни флагове (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Блокирани флагове (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Търсене на флагове...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Флаговете са запазени</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Флаговете са нулирани</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Флаговете са копирани в клипборда</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Почистване на връзки за споделяне</string>
@@ -328,15 +336,24 @@ Second \"item\" text"</string>
<string name="revanced_hide_how_this_was_made_section_title">Скриване на \"Как е създадено това съдържание\"</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">Секцията \"Как е създадено това съдържание\" е скрита</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">Секцията \"Как е създадено това съдържание\" е показана</string>
<string name="revanced_hide_hype_points_title">Скриване на точките на хайп</string>
<string name="revanced_hide_hype_points_summary_on">Точките на хайп са скрити</string>
<string name="revanced_hide_hype_points_summary_off">Точките на хайп са показани</string>
<string name="revanced_hide_podcast_section_title">Скриване на \"Разгледайте подкаста\"</string>
<string name="revanced_hide_podcast_section_summary_on">Секцията \"Разгледайте подкаста\" е скрита</string>
<string name="revanced_hide_podcast_section_summary_off">Секцията \"Разгледайте подкаста\" е показана</string>
<string name="revanced_hide_featured_section_title">Скриване на избрано съдържание</string>
<string name="revanced_hide_featured_section_summary_on">Секцията с избрано съдържание е скрита</string>
<string name="revanced_hide_featured_section_summary_off">Секцията с избрано съдържание е показана</string>
<string name="revanced_hide_info_cards_section_title">Скриване на инфо. карти</string>
<string name="revanced_hide_info_cards_section_summary_on">Разделът за информационни карти е скрит</string>
<string name="revanced_hide_info_cards_section_summary_off">Разделът за информационни карти е показан</string>
<string name="revanced_hide_key_concepts_section_title">Скриване на \"Основни концепции\"</string>
<string name="revanced_hide_key_concepts_section_summary_on">Секцията \"Основни концепции\" е скрита</string>
<string name="revanced_hide_key_concepts_section_summary_off">Секцията \"Основни концепции\" е показана</string>
<string name="revanced_hide_description_subscribe_button_title">Скриване на бутона за абониране</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Бутонът за абониране е скрит</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Бутонът за абониране е показан</string>
<string name="revanced_hide_transcript_section_title">Скриване на транскрипт</string>
<string name="revanced_hide_transcript_section_summary_on">Разделът за транскрипция е скрит</string>
<string name="revanced_hide_transcript_section_summary_off">Разделът за транскрипция е показан</string>
@@ -771,15 +788,14 @@ Second \"item\" text"</string>
<string name="revanced_hide_player_flyout_speed_title">Скриване на скоростта на възпроизвеждане</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Менюто за скорост на видеото е скрито</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Менюто за скорост на видеото се показва</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">\"Допълнителна информация\"</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">\"Допълнителна информация\" е скрита</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">\"Допълнителна информация\" се показва</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">\"Заключен екран\"</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Менюто на заключен екран е скрито</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Менюто на заключен екран се показва</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">Скриване на Слушане с YouTube Music</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">Менюто Слушане с YouTube Music е скрито</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">Менюто Слушане с YouTube Music е показано</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Избор на Аудио</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Менюто за избор на Аудио е скрито</string>
@@ -1661,16 +1677,30 @@ Second \"item\" text"</string>
<string name="revanced_music_play_permanent_repeat_summary_on">Постоянното повтаряне е активирано</string>
<string name="revanced_music_play_permanent_repeat_summary_off">Постоянното повтаряне е деактивирано</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Скриване на бутона за предаване</string>
<string name="revanced_music_hide_cast_button_summary_on">Бутонът за предаване е скрит</string>
<string name="revanced_music_hide_cast_button_summary_off">Бутонът за предаване е показан</string>
<string name="revanced_music_hide_history_button_title">Скриване на бутона за история</string>
<string name="revanced_music_hide_history_button_summary_on">Бутонът за история е скрит</string>
<string name="revanced_music_hide_history_button_summary_off">Бутонът за история е показан</string>
<string name="revanced_music_hide_notification_button_title">Скриване на бутона за известия</string>
<string name="revanced_music_hide_notification_button_summary_on">Бутонът за известия е скрит</string>
<string name="revanced_music_hide_notification_button_summary_off">Бутонът за известия е показан</string>
<string name="revanced_music_hide_search_button_title">Скриване на бутона за търсене</string>
<string name="revanced_music_hide_search_button_summary_on">Бутонът за търсене е скрит</string>
<string name="revanced_music_hide_search_button_summary_off">Бутонът за търсене е показан</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Скриване на лентата с категории</string>
<string name="revanced_music_hide_category_bar_summary_on">Лентата с категории е скрита</string>
<string name="revanced_music_hide_category_bar_summary_off">Лентата с категории е показана</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Промяна на цвета на миниплейъра</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Цветът на миниплейъра съвпада с този на плейъра на цял екран</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Миниплейърът използва цвят по подразбиране</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Навигационна лента</string>
<string name="revanced_music_navigation_bar_screen_summary">Скриване или промяна на бутоните на навигационната лента</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK তৈরির তারিখ ত্রুটিপূর্ণ</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">সতর্কীকরণ</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVanced নোটিশ</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">আপনার দেখার ইতিহাস সংরক্ষিত হচ্ছে না।&lt;br&gt;&lt;br&gt;এটি সম্ভবত DNS অ্যাড ব্লকার অথবা নেটওয়ার্ক প্রক্সির কারণে।&lt;br&gt;&lt;br&gt;এটি ঠিক করার জন্য, &lt;b&gt;s.youtube.com&lt;/b&gt; সাদা তালিকাভুক্ত করুন অথবা সকল DNS ব্লকার এবং প্রক্সি বন্ধ করুন।</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">আবার দেখাবেন না</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">সেটিংস</string>
<string name="revanced_settings_confirm_user_dialog_title">আপনি কি এগিয়ে যেতে চান?</string>
<string name="revanced_settings_save">সংরক্ষণ করুন</string>
<string name="revanced_settings_reset">আবার সেট করুন</string>
<string name="revanced_settings_reset_color">রঙ রিসেট করুন</string>
<string name="revanced_settings_color_invalid">অবৈধ রঙ</string>
@@ -164,6 +164,14 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
<string name="revanced_debug_logs_clear_buffer_title">ডিবাগ লগগুলি সাফ করুন</string>
<string name="revanced_debug_logs_clear_buffer_summary">সমস্ত সঞ্চিত ReVanced ডিবাগ লগ সাফ করে</string>
<string name="revanced_debug_logs_clear_toast">লগ সাফ করা হয়েছে</string>
<string name="revanced_debug_feature_flags_manager_title">ফিচার ফ্ল্যাগ Manager</string>
<string name="revanced_debug_feature_flags_manager_summary">বুলিয়ান ফিচার ফ্ল্যাগ পরিচালনা করুন</string>
<string name="revanced_debug_feature_flags_manager_active_header">সক্রিয় ফ্ল্যাগ (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">ব্লক করা ফ্ল্যাগ (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">ফ্ল্যাগ খুঁজুন...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">ফ্ল্যাগ সংরক্ষণ করা হয়েছে</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">ফ্ল্যাগ রিসেট করা হয়েছে</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">ফ্ল্যাগ ক্লিপবোর্ডে কপি করা হয়েছে</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">শেয়ারিং লিঙ্ক স্যানিটাইজ করুন</string>
@@ -324,15 +332,24 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
<string name="revanced_hide_how_this_was_made_section_title">\'How this content was made\' লুকান</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">How this content was made বিভাগটি লুকানো আছে</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">How this content was made বিভাগটি দেখানো হয়েছে</string>
<string name="revanced_hide_hype_points_title">হাইপ পয়েন্ট লুকান</string>
<string name="revanced_hide_hype_points_summary_on">হাইপ পয়েন্ট লুকানো আছে</string>
<string name="revanced_hide_hype_points_summary_off">হাইপ পয়েন্ট দেখানো আছে</string>
<string name="revanced_hide_podcast_section_title">\'Explore the podcast\' লুকান</string>
<string name="revanced_hide_podcast_section_summary_on">Explore the podcast বিভাগটি লুকানো আছে</string>
<string name="revanced_hide_podcast_section_summary_off">Explore the podcast বিভাগটি দেখানো হয়েছে</string>
<string name="revanced_hide_featured_section_title">বিশেষ বিষয়বস্তু লুকান</string>
<string name="revanced_hide_featured_section_summary_on">বিশেষ বিষয়বস্তু বিভাগ লুকানো আছে</string>
<string name="revanced_hide_featured_section_summary_off">বিশেষ বিষয়বস্তু বিভাগ দেখানো হচ্ছে</string>
<string name="revanced_hide_info_cards_section_title">তথ্য কার্ড লুকান</string>
<string name="revanced_hide_info_cards_section_summary_on">তথ্য কার্ড সেকশন লুকিয়ে রয়েছে</string>
<string name="revanced_hide_info_cards_section_summary_off">তথ্য কার্ড সেকশন প্রদর্শিত হয়েছে</string>
<string name="revanced_hide_key_concepts_section_title">\'Key concepts\' লুকান</string>
<string name="revanced_hide_key_concepts_section_summary_on">Key concepts বিভাগটি লুকানো আছে</string>
<string name="revanced_hide_key_concepts_section_summary_off">Key concepts বিভাগটি দেখানো হয়েছে</string>
<string name="revanced_hide_description_subscribe_button_title">সদস্যতা বোতাম লুকান</string>
<string name="revanced_hide_description_subscribe_button_summary_on">সাবস্ক্রাইব বাটন লুকানো আছে</string>
<string name="revanced_hide_description_subscribe_button_summary_off">সাবস্ক্রাইব বাটন দেখানো আছে</string>
<string name="revanced_hide_transcript_section_title">নথি লুকান</string>
<string name="revanced_hide_transcript_section_summary_on">ট্রান্সস্ক্রিপ্ট বিভাগ লুকিয়ে রয়েছে</string>
<string name="revanced_hide_transcript_section_summary_off">ট্রান্সস্ক্রিপ্ট বিভাগ প্রদর্শিত হয়েছে</string>
@@ -767,15 +784,14 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
<string name="revanced_hide_player_flyout_speed_title">প্লেব্যাকের স্পিড লুকান</string>
<string name="revanced_hide_player_flyout_speed_summary_on">প্লেব্যাকের স্পিড মেনু লুকিয়ে রয়েছে</string>
<string name="revanced_hide_player_flyout_speed_summary_off">প্লেব্যাকের স্পিড মেনু প্রদর্শিত হয়েছে</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">আরো তথ্য লুকান</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">আরও তথ্য মেনু লুকানো আছে</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">আরও তথ্য মেনু দেখানো হয়</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">লক স্ক্রীন লুকান</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">লক স্ক্রীন মেনু লুকানো আছে</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">লক স্ক্রিন মেনু দেখানো হয়েছে</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">ইউটিউব মিউজিক দিয়ে শুনুন লুকান</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">ইউটিউব মিউজিক দিয়ে শুনুন মেনু লুকানো আছে</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">ইউটিউব মিউজিক দিয়ে শুনুন মেনু দেখানো আছে</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">অডিও ট্র্যাক লুকান</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">অডিও ট্র্যাক মেনু লুকানো আছে</string>
@@ -1657,16 +1673,30 @@ AV1 সহ ভিডিও প্লেব্যাক আটকে যেতে
<string name="revanced_music_play_permanent_repeat_summary_on">স্থায়ী পুনরাবৃত্তি সক্ষম করা হয়েছে</string>
<string name="revanced_music_play_permanent_repeat_summary_off">স্থায়ী পুনরাবৃত্তি অক্ষম করা হয়েছে</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">কাস্ট বোতাম লুকান</string>
<string name="revanced_music_hide_cast_button_summary_on">কাস্ট বোতাম লুকানো আছে</string>
<string name="revanced_music_hide_cast_button_summary_off">কাস্ট বোতাম দেখানো আছে</string>
<string name="revanced_music_hide_history_button_title">ইতিহাস বোতাম লুকান</string>
<string name="revanced_music_hide_history_button_summary_on">ইতিহাস বোতাম লুকানো আছে</string>
<string name="revanced_music_hide_history_button_summary_off">ইতিহাস বোতাম দেখানো আছে</string>
<string name="revanced_music_hide_notification_button_title">বিজ্ঞপ্তি বাটন লুকান</string>
<string name="revanced_music_hide_notification_button_summary_on">বিজ্ঞপ্তি বাটন লুকানো আছে</string>
<string name="revanced_music_hide_notification_button_summary_off">বিজ্ঞপ্তি বাটন দেখানো হয়েছে</string>
<string name="revanced_music_hide_search_button_title">অনুসন্ধান বাটন লুকান</string>
<string name="revanced_music_hide_search_button_summary_on">অনুসন্ধান বাটন লুকানো আছে</string>
<string name="revanced_music_hide_search_button_summary_off">অনুসন্ধান বাটন দেখানো হয়েছে</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">ক্যাটাগরি বার লুকান</string>
<string name="revanced_music_hide_category_bar_summary_on">ক্যাটাগরি বার লুকানো আছে</string>
<string name="revanced_music_hide_category_bar_summary_off">ক্যাটাগরি বার দেখানো আছে</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">মিনিপ্লেয়ারের রঙ পরিবর্তন করুন</string>
<string name="revanced_music_change_miniplayer_color_summary_on">মিনিপ্লেয়ারের রঙ ফুলস্ক্রিন প্লেয়ারের সাথে মেলে</string>
<string name="revanced_music_change_miniplayer_color_summary_off">মিনিপ্লেয়ার ডিফল্ট রঙ ব্যবহার করে</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">নেভিগেশন বার</string>
<string name="revanced_music_navigation_bar_screen_summary">নেভিগেশন বারের বোতামগুলি লুকান বা পরিবর্তন করুন</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -134,9 +133,8 @@ Second \"item\" text"</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
@@ -268,10 +266,12 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
</patch>
<patch id="layout.compactheader.hideCategoryBar">
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -134,9 +133,8 @@ Second \"item\" text"</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
@@ -268,10 +266,12 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
</patch>
<patch id="layout.compactheader.hideCategoryBar">
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">Datum sestavení souboru APK je poškozeno</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Varování</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">Upozornění ReVanced</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Vaše historie sledování není ukládána.&lt;br&gt;&lt;br&gt;Příčinou je s největší pravděpodobností DNS blokátor reklam nebo síťový proxy server.&lt;br&gt;&lt;br&gt;Chcete-li to opravit, přidejte&lt;b&gt;s.youtube.com&lt;/b&gt; na whitelist nebo vypněte všechny DNS blokátory a proxy servery.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Už nezobrazovat</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Nastavení</string>
<string name="revanced_settings_confirm_user_dialog_title">Opravdu chcete pokračovat?</string>
<string name="revanced_settings_save">Uložit</string>
<string name="revanced_settings_reset">Výchozí</string>
<string name="revanced_settings_reset_color">Obnovit barvu</string>
<string name="revanced_settings_color_invalid">Neplatná barva</string>
@@ -164,6 +164,14 @@ Nebudete informováni o žádné neočekávané události."</string>
<string name="revanced_debug_logs_clear_buffer_title">Vymazat ladicí protokoly</string>
<string name="revanced_debug_logs_clear_buffer_summary">Vymaže všechny uložené ladicí protokoly ReVanced</string>
<string name="revanced_debug_logs_clear_toast">Protokoly vymazány</string>
<string name="revanced_debug_feature_flags_manager_title">Příznaky funkcí Manager</string>
<string name="revanced_debug_feature_flags_manager_summary">Spravovat boolean příznaky funkcí</string>
<string name="revanced_debug_feature_flags_manager_active_header">Aktivní přepínače (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Zablokované přepínače (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Hledat přepínače...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Přepínače uloženy</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Přepínače resetovány</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Přepínače zkopírovány do schránky</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Vyčistit sdílené odkazy</string>
@@ -328,15 +336,24 @@ Pokud se Doodle v současné době zobrazuje ve vaší oblasti a toto nastavení
<string name="revanced_hide_how_this_was_made_section_title">Skrýt „Jak tento obsah vznikl“</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">Sekce Jak tento obsah vznikl je skrytá</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">Sekce Jak tento obsah vznikl je zobrazena</string>
<string name="revanced_hide_hype_points_title">Skrýt Hype body</string>
<string name="revanced_hide_hype_points_summary_on">Hype body jsou skryté</string>
<string name="revanced_hide_hype_points_summary_off">Hype body jsou zobrazené</string>
<string name="revanced_hide_podcast_section_title">Skrýt „Prozkoumat podcast“</string>
<string name="revanced_hide_podcast_section_summary_on">Sekce Prozkoumat podcast je skrytá</string>
<string name="revanced_hide_podcast_section_summary_off">Sekce Prozkoumat podcast je zobrazena</string>
<string name="revanced_hide_featured_section_title">Skrýt doporučený obsah</string>
<string name="revanced_hide_featured_section_summary_on">Sekce doporučeného obsahu je skrytá</string>
<string name="revanced_hide_featured_section_summary_off">Sekce doporučeného obsahu je zobrazena</string>
<string name="revanced_hide_info_cards_section_title">Skrýt informační karty</string>
<string name="revanced_hide_info_cards_section_summary_on">Sekce informačních karet je skrytá</string>
<string name="revanced_hide_info_cards_section_summary_off">Sekce informačních karet je zobrazena</string>
<string name="revanced_hide_key_concepts_section_title">Skrýt „Klíčové koncepty“</string>
<string name="revanced_hide_key_concepts_section_summary_on">Sekce Klíčové koncepty je skrytá</string>
<string name="revanced_hide_key_concepts_section_summary_off">Sekce Klíčové koncepty je zobrazena</string>
<string name="revanced_hide_description_subscribe_button_title">Skrýt tlačítko Odebírat</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Tlačítko Odebírat je skryto</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Tlačítko Odebírat je zobrazeno</string>
<string name="revanced_hide_transcript_section_title">Skrýt přepis</string>
<string name="revanced_hide_transcript_section_summary_on">Sekce přepisu je skrytá</string>
<string name="revanced_hide_transcript_section_summary_off">Sekce přepisu je zobrazena</string>
@@ -771,15 +788,14 @@ Pokud změna tohoto nastavení nemá žádný účinek, zkuste přepnout do rež
<string name="revanced_hide_player_flyout_speed_title">Skrýt Rychlost přehrávání</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Menu Rychlost přehrávání je skryto</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Menu Rychlost přehrávání je zobrazeno</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">Skrýt Více informací</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">Menu Více informací je skryto</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">Menu Více informací je zobrazeno</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">Skrýt Zamknout obrazovku</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Menu Zamknout obrazovku je skryto</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Menu Zamknout obrazovku je zobrazeno</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">Skrýt Poslouchat v YouTube Music</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">Nabídka Poslouchat v YouTube Music je skrytá</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">Nabídka Poslouchat v YouTube Music je zobrazena</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Skrýt Zvuková stopa</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Menu Zvuková stopa je skryto</string>
@@ -1661,16 +1677,30 @@ Přehrávání videa s AV1 se může sekat nebo vypadávat snímky."</string>
<string name="revanced_music_play_permanent_repeat_summary_on">Trvalé opakování je povoleno</string>
<string name="revanced_music_play_permanent_repeat_summary_off">Trvalé opakování je zakázáno</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Skrýt tlačítko Odesílat</string>
<string name="revanced_music_hide_cast_button_summary_on">Tlačítko Odesílat je skryté</string>
<string name="revanced_music_hide_cast_button_summary_off">Tlačítko Odesílat je zobrazené</string>
<string name="revanced_music_hide_history_button_title">Skrýt tlačítko historie</string>
<string name="revanced_music_hide_history_button_summary_on">Tlačítko historie je skryté</string>
<string name="revanced_music_hide_history_button_summary_off">Tlačítko historie je zobrazeno</string>
<string name="revanced_music_hide_notification_button_title">Skrýt tlačítko oznámení</string>
<string name="revanced_music_hide_notification_button_summary_on">Tlačítko oznámení je skryté</string>
<string name="revanced_music_hide_notification_button_summary_off">Tlačítko oznámení je zobrazené</string>
<string name="revanced_music_hide_search_button_title">Skrýt tlačítko vyhledávání</string>
<string name="revanced_music_hide_search_button_summary_on">Tlačítko vyhledávání je skryté</string>
<string name="revanced_music_hide_search_button_summary_off">Tlačítko vyhledávání je zobrazené</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Skrýt panel kategorií</string>
<string name="revanced_music_hide_category_bar_summary_on">Panel kategorií je skryt</string>
<string name="revanced_music_hide_category_bar_summary_off">Panel kategorií je zobrazen</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Změnit barvu minipřehrávače</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Barva minipřehrávače odpovídá přehrávači na celou obrazovku</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Minipřehrávač používá výchozí barvu</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Navigační panel</string>
<string name="revanced_music_navigation_bar_screen_summary">Skrýt nebo změnit tlačítka navigačního panelu</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK byggedato er ødelagt</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Advarsel</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVanced Meddelelse</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Din urhistorik gemmes ikke.&lt;br&gt;&lt;br&gt;Dette skyldes sandsynligvis en DNS-annonceblokker eller netværksproxy.&lt;br&gt;&lt;br&gt;For at løse dette, whitelist &lt;b&gt;s.youtube.com&lt;/b&gt; eller slå alle DNS-blokkere og fuldmagter fra.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Vis ikke igen</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Indstillinger</string>
<string name="revanced_settings_confirm_user_dialog_title">Er du sikker på, at du vil fortsætte?</string>
<string name="revanced_settings_save">Gem</string>
<string name="revanced_settings_reset">Nulstil</string>
<string name="revanced_settings_reset_color">Nulstil farve</string>
<string name="revanced_settings_color_invalid">Ugyldig farve</string>
@@ -164,6 +164,14 @@ Du modtager ikke notifikationer om uventede hændelser."</string>
<string name="revanced_debug_logs_clear_buffer_title">Ryd fejlsøgningslogfiler</string>
<string name="revanced_debug_logs_clear_buffer_summary">Rydder alle gemte ReVanced-fejlsøgningslogfiler</string>
<string name="revanced_debug_logs_clear_toast">Logfiler ryddet</string>
<string name="revanced_debug_feature_flags_manager_title">Funktionsflag Manager</string>
<string name="revanced_debug_feature_flags_manager_summary">Administrer booleske funktionsflag</string>
<string name="revanced_debug_feature_flags_manager_active_header">Aktive flag (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Blokerede flag (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Søg flag...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Flag gemt</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Flag nulstillet</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Flag kopieret til udklipsholder</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Rens delingslinks</string>
@@ -328,15 +336,24 @@ Hvis et Doodle vises i øjeblikket i din region, og denne skjuleindstilling er a
<string name="revanced_hide_how_this_was_made_section_title">Skjul \"Hvordan dette indhold blev lavet\"</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">Sektionen Sådan blev dette indhold lavet er skjult</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">Sektionen Sådan blev dette indhold lavet vises</string>
<string name="revanced_hide_hype_points_title">Skjul Hype-point</string>
<string name="revanced_hide_hype_points_summary_on">Hype-point er skjult</string>
<string name="revanced_hide_hype_points_summary_off">Hype-point er vist</string>
<string name="revanced_hide_podcast_section_title">Skjul \"Udforsk podcasten\"</string>
<string name="revanced_hide_podcast_section_summary_on">Sektionen Udforsk podcasten er skjult</string>
<string name="revanced_hide_podcast_section_summary_off">Sektionen Udforsk podcasten vises</string>
<string name="revanced_hide_featured_section_title">Skjul fremhævet indhold</string>
<string name="revanced_hide_featured_section_summary_on">Sektionen for fremhævet indhold er skjult</string>
<string name="revanced_hide_featured_section_summary_off">Sektionen for fremhævet indhold er vist</string>
<string name="revanced_hide_info_cards_section_title">Skjul infokort</string>
<string name="revanced_hide_info_cards_section_summary_on">Info-kort sektion er skjult</string>
<string name="revanced_hide_info_cards_section_summary_off">Info-kort sektion er vist</string>
<string name="revanced_hide_key_concepts_section_title">Skjul \"Nøglebegreber\"</string>
<string name="revanced_hide_key_concepts_section_summary_on">Nøglebegrebssektionen er skjult</string>
<string name="revanced_hide_key_concepts_section_summary_off">Nøglebegrebssektionen vises</string>
<string name="revanced_hide_description_subscribe_button_title">Skjul abonnér-knap</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Abonnér-knappen er skjult</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Abonnér-knappen vises</string>
<string name="revanced_hide_transcript_section_title">Skjul udskrift</string>
<string name="revanced_hide_transcript_section_summary_on">Afsnittet er skjult</string>
<string name="revanced_hide_transcript_section_summary_off">Afsnittet er vist</string>
@@ -771,15 +788,14 @@ Hvis ændring af denne indstilling ikke træder i kraft, kan du prøve at skifte
<string name="revanced_hide_player_flyout_speed_title">Skjul afspilningshastighed</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Afspilningshastighedsmenu er skjult</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Afspilningshastighed menuen vises</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">Skjul Mere info</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">Mere info menu er skjult</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">Mere info menu er vist</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">Skjul låseskærm</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Menuen Låseskærm er skjult</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Låseskærmsmenuen vises</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">Skjul Lyt med YouTube Music</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">Lyt med YouTube Music-menuen er skjult</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">Lyt med YouTube Music-menuen vises</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Skjul lydspor</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Menuen for lydspor er skjult</string>
@@ -1663,16 +1679,30 @@ Videoafspilning med AV1 kan hakke eller tabe billeder."</string>
<string name="revanced_music_play_permanent_repeat_summary_on">Permanent gentagelse er aktiveret</string>
<string name="revanced_music_play_permanent_repeat_summary_off">Permanent gentagelse er deaktiveret</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Skjul cast-knap</string>
<string name="revanced_music_hide_cast_button_summary_on">Cast-knappen er skjult</string>
<string name="revanced_music_hide_cast_button_summary_off">Cast-knappen vises</string>
<string name="revanced_music_hide_history_button_title">Skjul historikknap</string>
<string name="revanced_music_hide_history_button_summary_on">Historikknappen er skjult</string>
<string name="revanced_music_hide_history_button_summary_off">Historikknappen vises</string>
<string name="revanced_music_hide_notification_button_title">Skjul notifikationsknap</string>
<string name="revanced_music_hide_notification_button_summary_on">Notifikationsknappen er skjult</string>
<string name="revanced_music_hide_notification_button_summary_off">Notifikationsknappen vises</string>
<string name="revanced_music_hide_search_button_title">Skjul søgeknap</string>
<string name="revanced_music_hide_search_button_summary_on">Søgeknappen er skjult</string>
<string name="revanced_music_hide_search_button_summary_off">Søgeknappen vises</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Skjul kategorilinje</string>
<string name="revanced_music_hide_category_bar_summary_on">Kategorilinjen er skjult</string>
<string name="revanced_music_hide_category_bar_summary_off">Kategorilinjen vises</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Skift miniafspillerfarve</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Miniafspillerfarven matcher fuldskærmsafspilleren</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Miniafspilleren bruger standardfarven</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Navigationslinje</string>
<string name="revanced_music_navigation_bar_screen_summary">Skjul eller skift navigationslinjeknapper</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK Erstellungsdatum ist beschädigt</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Warnung</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVanced Hinweis</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Ihr Verlauf wird nicht gespeichert.&lt;br&gt;&lt;br&gt;Dies wird höchstwahrscheinlich durch einen DNS-Werbeblocker oder einen Netzwerkproxy verursacht.&lt;br&gt;&lt;br&gt;Um dies zu beheben, setze &lt;b&gt;s.youtube.com&lt;/b&gt; auf die Whitelist oder schalten Sie alle DNS-Blocker und Proxies aus.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Nicht wieder anzeigen</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Einstellungen</string>
<string name="revanced_settings_confirm_user_dialog_title">Bist du sicher, dass du fortfahren möchtest?</string>
<string name="revanced_settings_save">Speichern</string>
<string name="revanced_settings_reset">Zurücksetzen</string>
<string name="revanced_settings_reset_color">Farbe zurücksetzen</string>
<string name="revanced_settings_color_invalid">Ungültige Farbe</string>
@@ -164,6 +164,14 @@ Sie werden nicht über unerwartete Ereignisse informiert."</string>
<string name="revanced_debug_logs_clear_buffer_title">Debug-Protokolle löschen</string>
<string name="revanced_debug_logs_clear_buffer_summary">Löscht alle gespeicherten ReVanced-Debug-Protokolle</string>
<string name="revanced_debug_logs_clear_toast">Protokolle gelöscht</string>
<string name="revanced_debug_feature_flags_manager_title">Feature-Flags Manager</string>
<string name="revanced_debug_feature_flags_manager_summary">Boolesche Feature-Flags verwalten</string>
<string name="revanced_debug_feature_flags_manager_active_header">Aktive Flags (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Blockierte Flags (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Flags suchen...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Flags gespeichert</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Flags zurückgesetzt</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Flags in die Zwischenablage kopiert</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Freigabelinks säubern</string>
@@ -327,15 +335,24 @@ Wenn ein Doodle zurzeit in Ihrer Region angezeigt wird und diese Einstellung zum
<string name="revanced_hide_how_this_was_made_section_title">\"Wie dieser Inhalt erstellt wurde\" ausblenden</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">Der Abschnitt \"Wie dieser Inhalt erstellt wurde\" ist ausgeblendet</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">Der Abschnitt \"Wie dieser Inhalt erstellt wurde\" wird angezeigt</string>
<string name="revanced_hide_hype_points_title">Hype-Punkte ausblenden</string>
<string name="revanced_hide_hype_points_summary_on">Hype-Punkte sind ausgeblendet</string>
<string name="revanced_hide_hype_points_summary_off">Hype-Punkte werden angezeigt</string>
<string name="revanced_hide_podcast_section_title">\'Podcast entdecken\' ausblenden</string>
<string name="revanced_hide_podcast_section_summary_on">Der Abschnitt \"Podcast entdecken\" ist ausgeblendet</string>
<string name="revanced_hide_podcast_section_summary_off">Der Abschnitt \"Podcast entdecken\" wird angezeigt</string>
<string name="revanced_hide_featured_section_title">Vorgestellte Inhalte ausblenden</string>
<string name="revanced_hide_featured_section_summary_on">Bereich für vorgestellte Inhalte ist ausgeblendet</string>
<string name="revanced_hide_featured_section_summary_off">Bereich für vorgestellte Inhalte ist sichtbar</string>
<string name="revanced_hide_info_cards_section_title">Infokarten ausblenden</string>
<string name="revanced_hide_info_cards_section_summary_on">Info-Kartenbereich ist ausgeblendet</string>
<string name="revanced_hide_info_cards_section_summary_off">Info-Kartenbereich wird angezeigt</string>
<string name="revanced_hide_key_concepts_section_title">\'Schlüsselkonzepte\' ausblenden</string>
<string name="revanced_hide_key_concepts_section_summary_on">Abschnitt \"Schlüsselkonzepte\" ist ausgeblendet</string>
<string name="revanced_hide_key_concepts_section_summary_off">Abschnitt \"Schlüsselkonzepte\" wird angezeigt</string>
<string name="revanced_hide_description_subscribe_button_title">Schaltfläche „Abonnieren“ ausblenden</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Abo-Schaltfläche ist ausgeblendet</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Abo-Schaltfläche wird angezeigt</string>
<string name="revanced_hide_transcript_section_title">Transkript ausblenden</string>
<string name="revanced_hide_transcript_section_summary_on">Transkript-Abschnitt ist ausgeblendet</string>
<string name="revanced_hide_transcript_section_summary_off">Sektion Transkripte wird angezeigt</string>
@@ -768,15 +785,14 @@ Wenn diese Änderung nicht wirksam wird, versuchen Sie, in den Inkognito-Modus z
<string name="revanced_hide_player_flyout_speed_title">Wiedergabegeschwindigkeit ausblenden</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Wiedergabegeschwindigkeit ist ausgeblendet</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Wiedergabegeschwindigkeit wird angezeigt</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">Mehr Info ausblenden</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">Mehr Info-Menü ist ausgeblendet</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">Mehr Info-Menü wird angezeigt</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">Sperrbildschirm ausblenden</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Sperrbildschirm-Menü ist ausgeblendet</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Sperrbildschirm-Menü wird angezeigt</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">„Mit YouTube Music hören“ ausblenden</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">„Mit YouTube Music hören“-Menü ist ausgeblendet</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">„Mit YouTube Music hören“-Menü wird angezeigt</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Audiospur ausblenden</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Audiospur-Menü ist ausgeblendet</string>
@@ -1658,16 +1674,30 @@ Die Videowiedergabe mit AV1 kann stottern oder Bilder überspringen."</string>
<string name="revanced_music_play_permanent_repeat_summary_on">Dauerwiederholung ist aktiviert</string>
<string name="revanced_music_play_permanent_repeat_summary_off">Dauerwiederholung ist deaktiviert</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Übertragen-Taste ausblenden</string>
<string name="revanced_music_hide_cast_button_summary_on">Übertragen-Taste ist ausgeblendet</string>
<string name="revanced_music_hide_cast_button_summary_off">Übertragen-Taste wird angezeigt</string>
<string name="revanced_music_hide_history_button_title">Verlauf-Schaltfläche ausblenden</string>
<string name="revanced_music_hide_history_button_summary_on">Verlauf-Schaltfläche ist ausgeblendet</string>
<string name="revanced_music_hide_history_button_summary_off">Verlauf-Schaltfläche wird angezeigt</string>
<string name="revanced_music_hide_notification_button_title">Benachrichtigungsschaltfläche ausblenden</string>
<string name="revanced_music_hide_notification_button_summary_on">Benachrichtigungsschaltfläche wird ausgeblendet</string>
<string name="revanced_music_hide_notification_button_summary_off">Benachrichtigungsschaltfläche wird angezeigt</string>
<string name="revanced_music_hide_search_button_title">Suchschaltfläche ausblenden</string>
<string name="revanced_music_hide_search_button_summary_on">Suchschaltfläche wird ausgeblendet</string>
<string name="revanced_music_hide_search_button_summary_off">Suchschaltfläche wird angezeigt</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Kategorieleiste ausblenden</string>
<string name="revanced_music_hide_category_bar_summary_on">Kategorieleiste ist ausgeblendet</string>
<string name="revanced_music_hide_category_bar_summary_off">Kategorieleiste wird angezeigt</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Miniplayer-Farbe ändern</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Miniplayer-Farbe entspricht dem Vollbild-Player</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Miniplayer verwendet Standardfarbe</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Navigationsleiste</string>
<string name="revanced_music_navigation_bar_screen_summary">Navigationsleisten-Schaltflächen ausblenden oder ändern</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">Η ημερομηνία κατασκευής του APK είναι κατεστραμμένη</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Προειδοποίηση</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">Ειδοποίηση ReVanced</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Το ιστορικό παρακολούθησης δεν αποθηκεύεται.&lt;br&gt;&lt;br&gt;Πιθανό να συμβαίνει λόγω αποκλεισμού διαφημίσεων μέσω DNS ή μέσω διακομιστή μεσολάβησης δικτύου.&lt;br&gt;&lt;br&gt;Μια λύση γι\'αυτό θα ήταν να προσθέσετε σε whitelist το &lt;b&gt;s.youtube.com&lt;/b&gt; ή να απενεργοποιήστε τους DNS/proxy blockers.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Να μην εμφανιστεί ξανά</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Ρυθμίσεις</string>
<string name="revanced_settings_confirm_user_dialog_title">Είστε βέβαιοι ότι θέλετε να συνεχίσετε;</string>
<string name="revanced_settings_save">Αποθήκευση</string>
<string name="revanced_settings_reset">Επαναφορά</string>
<string name="revanced_settings_reset_color">Επαναφορά χρώματος</string>
<string name="revanced_settings_color_invalid">Μη έγκυρο χρώμα</string>
@@ -164,6 +164,14 @@ Second \"item\" text"</string>
<string name="revanced_debug_logs_clear_buffer_title">Εκκαθάριση αρχείων καταγραφής εντοπισμού σφαλμάτων</string>
<string name="revanced_debug_logs_clear_buffer_summary">Εκκαθάριση όλων των αποθηκευμένων αρχειών καταγραφής εντοπισμού σφαλμάτων ReVanced</string>
<string name="revanced_debug_logs_clear_toast">Τα αρχεία καταγραφής εκκαθαρίστηκαν</string>
<string name="revanced_debug_feature_flags_manager_title">Διαχειριστής σημαιών λειτουργιών</string>
<string name="revanced_debug_feature_flags_manager_summary">Διαχείριση των boolean σημαιών λειτουργιών</string>
<string name="revanced_debug_feature_flags_manager_active_header">Ενεργές σημαίες (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Αποκλεισμένες σημαίες (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Αναζήτηση σημαιών...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Οι σημαίες αποθηκεύτηκαν</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Οι σημαίες επαναφέρθηκαν</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Οι σημαίες αντιγράφηκαν στο πρόχειρο</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Καθαρισμός συνδέσμων κοινοποίησης</string>
@@ -330,15 +338,24 @@ Second \"item\" text"</string>
<string name="revanced_hide_how_this_was_made_section_title">Ενότητα «Πως δημιουργήθηκε αυτό το περιεχόμενο»</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">Κρυμμένη</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">Εμφανίζεται</string>
<string name="revanced_hide_hype_points_title">Πόντοι Hype</string>
<string name="revanced_hide_hype_points_summary_on">Κρυμμένοι</string>
<string name="revanced_hide_hype_points_summary_off">Εμφανίζονται</string>
<string name="revanced_hide_podcast_section_title">Ενότητα «Εξερευνήστε το podcast»</string>
<string name="revanced_hide_podcast_section_summary_on">Κρυμμένη</string>
<string name="revanced_hide_podcast_section_summary_off">Εμφανίζεται</string>
<string name="revanced_hide_featured_section_title">Απόκρυψη Προβεβλημένου περιεχομένου</string>
<string name="revanced_hide_featured_section_summary_on">Η ενότητα Προβεβλημένου περιεχομένου είναι κρυμμένη</string>
<string name="revanced_hide_featured_section_summary_off">Η ενότητα Προβεβλημένου περιεχομένου εμφανίζεται</string>
<string name="revanced_hide_info_cards_section_title">Κάρτες πληροφοριών</string>
<string name="revanced_hide_info_cards_section_summary_on">Κρυμμένη</string>
<string name="revanced_hide_info_cards_section_summary_off">Εμφανίζεται</string>
<string name="revanced_hide_key_concepts_section_title">Ενότητα «Βασικές έννοιες»</string>
<string name="revanced_hide_key_concepts_section_summary_on">Κρυμμένη</string>
<string name="revanced_hide_key_concepts_section_summary_off">Εμφανίζεται</string>
<string name="revanced_hide_description_subscribe_button_title">Κουμπί «Εγγραφή»</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Κρυμμένο</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Εμφανίζεται</string>
<string name="revanced_hide_transcript_section_title">Ενότητα «Μεταγραφή»</string>
<string name="revanced_hide_transcript_section_summary_on">Κρυμμένη</string>
<string name="revanced_hide_transcript_section_summary_off">Εμφανίζεται</string>
@@ -773,15 +790,14 @@ Second \"item\" text"</string>
<string name="revanced_hide_player_flyout_speed_title">Μενού «Ταχύτητα αναπαραγωγής»</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Κρυμμένο</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Εμφανίζεται</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">Μενού «Περισσότερα»</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">Κρυμμένο</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">Εμφανίζεται</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">Μενού «Οθόνη κλειδώματος»</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Κρυμμένο</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Εμφανίζεται</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">Μενού «Ακρόαση με YouTube Music»</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">Κρυμμένο</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">Εμφανίζεται</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Μενού «Κομμάτι ήχου»</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Κρυμμένο</string>
@@ -1660,16 +1676,30 @@ Second \"item\" text"</string>
<string name="revanced_music_play_permanent_repeat_summary_on">Η μόνιμη επανάληψη είναι ενεργοποιημένη</string>
<string name="revanced_music_play_permanent_repeat_summary_off">Η μόνιμη επανάληψη είναι απενεργοποιημένη</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Κουμπί μετάδοσης</string>
<string name="revanced_music_hide_cast_button_summary_on">Κρυμμένο</string>
<string name="revanced_music_hide_cast_button_summary_off">Εμφανίζεται</string>
<string name="revanced_music_hide_history_button_title">Κουμπί ιστορικού</string>
<string name="revanced_music_hide_history_button_summary_on">Κρυμμένο</string>
<string name="revanced_music_hide_history_button_summary_off">Εμφανίζεται</string>
<string name="revanced_music_hide_notification_button_title">Κουμπί ειδοποιήσεων</string>
<string name="revanced_music_hide_notification_button_summary_on">Κρυμμένο</string>
<string name="revanced_music_hide_notification_button_summary_off">Εμφανίζεται</string>
<string name="revanced_music_hide_search_button_title">Κουμπί αναζήτησης</string>
<string name="revanced_music_hide_search_button_summary_on">Κρυμμένο</string>
<string name="revanced_music_hide_search_button_summary_off">Εμφανίζεται</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Γραμμή κατηγοριών</string>
<string name="revanced_music_hide_category_bar_summary_on">Κρυμμένη</string>
<string name="revanced_music_hide_category_bar_summary_off">Εμφανίζεται</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Αλλαγή χρώματος ελαχιστοποιημένης οθόνης αναπαραγωγής</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Το χρώμα της ελαχιστοποιημένης οθόνης αναπαραγωγής ταιριάζει με αυτό της οθόνης αναπαραγωγής πλήρους οθόνης</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Η ελαχιστοποιημένη οθόνη αναπαραγωγής χρησιμοποιεί το προεπιλεγμένο χρώμα</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Γραμμή πλοήγησης</string>
<string name="revanced_music_navigation_bar_screen_summary">Απόκρυψη ή αλλαγή κουμπιών της γραμμής πλοήγησης</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">La fecha de compilación del APK está corrupta</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Advertencia</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">Aviso de ReVanced</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Tu historial no está siendo guardado.&lt;br&gt;&lt;br&gt;Esto puede ser por un bloqueador de anuncios DNS o Proxy.&lt;br&gt;&lt;br&gt;Para arreglarlo, permita el dominio &lt;b&gt;s.youtube.com&lt;/b&gt; o desactive el bloqueador DNS o Proxy.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">No mostrar de nuevo</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Ajustes</string>
<string name="revanced_settings_confirm_user_dialog_title">¿Estás seguro de que quieres continuar?</string>
<string name="revanced_settings_save">Guardar</string>
<string name="revanced_settings_reset">Restablecer</string>
<string name="revanced_settings_reset_color">Restablecer color</string>
<string name="revanced_settings_color_invalid">Color no válido</string>
@@ -164,6 +164,14 @@ No se le notificará de ningún evento inesperado."</string>
<string name="revanced_debug_logs_clear_buffer_title">Borrar registros de depuración</string>
<string name="revanced_debug_logs_clear_buffer_summary">Borra todos los registros de depuración de ReVanced almacenados</string>
<string name="revanced_debug_logs_clear_toast">Registros borrados</string>
<string name="revanced_debug_feature_flags_manager_title">Manager de indicadores de funciones</string>
<string name="revanced_debug_feature_flags_manager_summary">Gestionar indicadores de funciones booleanos</string>
<string name="revanced_debug_feature_flags_manager_active_header">Banderas activas (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Banderas bloqueadas (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Buscar banderas...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Banderas guardadas</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Banderas restablecidas</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Banderas copiadas al portapapeles</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Sanear enlaces compartidos</string>
@@ -328,15 +336,24 @@ Si un doodle se está mostrando actualmente en tu región y este ajuste de ocult
<string name="revanced_hide_how_this_was_made_section_title">Ocultar \"Cómo se hizo este contenido\"</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">La sección Cómo se hizo este contenido está oculta</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">Se muestra la sección Cómo se hizo este contenido</string>
<string name="revanced_hide_hype_points_title">Ocultar puntos de Hype</string>
<string name="revanced_hide_hype_points_summary_on">Los puntos de Hype están ocultos</string>
<string name="revanced_hide_hype_points_summary_off">Los puntos de Hype están visibles</string>
<string name="revanced_hide_podcast_section_title">Ocultar \"Explora el pódcast\"</string>
<string name="revanced_hide_podcast_section_summary_on">La sección Explora el pódcast está oculta</string>
<string name="revanced_hide_podcast_section_summary_off">Se muestra la sección Explora el pódcast</string>
<string name="revanced_hide_featured_section_title">Ocultar contenido destacado</string>
<string name="revanced_hide_featured_section_summary_on">La sección de contenido destacado está oculta</string>
<string name="revanced_hide_featured_section_summary_off">La sección de contenido destacado se muestra</string>
<string name="revanced_hide_info_cards_section_title">Ocultar tarjetas de información</string>
<string name="revanced_hide_info_cards_section_summary_on">La sección de tarjetas de información está oculta</string>
<string name="revanced_hide_info_cards_section_summary_off">Se muestra la sección de tarjetas de información</string>
<string name="revanced_hide_key_concepts_section_title">Ocultar \"Conceptos clave\"</string>
<string name="revanced_hide_key_concepts_section_summary_on">La sección Conceptos clave está oculta</string>
<string name="revanced_hide_key_concepts_section_summary_off">Se muestra la sección Conceptos clave</string>
<string name="revanced_hide_description_subscribe_button_title">Ocultar botón de Suscribirse</string>
<string name="revanced_hide_description_subscribe_button_summary_on">El botón de Suscribirse está oculto</string>
<string name="revanced_hide_description_subscribe_button_summary_off">El botón de Suscribirse es visible</string>
<string name="revanced_hide_transcript_section_title">Ocultar transcripción</string>
<string name="revanced_hide_transcript_section_summary_on">La sección transcripción está oculta</string>
<string name="revanced_hide_transcript_section_summary_off">Se muestra la sección transcripción</string>
@@ -771,15 +788,14 @@ Si cambiar este ajuste no tiene efecto, intenta cambiar al modo incógnito."</st
<string name="revanced_hide_player_flyout_speed_title">Ocultar velocidad de reproducción</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Menú de velocidad de reproducción oculto</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Mostrar menú de velocidad de reproducción</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">Ocultar Más información</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">El menú Más información está oculto</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">Se muestra el menú Más información</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">Ocultar pantalla de bloqueo</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">El menú de la pantalla de bloqueo está oculto</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Se muestra el menú de pantalla de bloqueo</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">Ocultar Escuchar con YouTube Music</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">El menú Escuchar con YouTube Music está oculto</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">El menú Escuchar con YouTube Music está visible</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Ocultar pista de audio</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">El menú de pista de audio está oculto</string>
@@ -1650,16 +1666,30 @@ La reproducción puede tartamudear o perder fotogramas"</string>
<string name="revanced_music_play_permanent_repeat_summary_on">La repetición permanente está habilitada</string>
<string name="revanced_music_play_permanent_repeat_summary_off">La repetición permanente está deshabilitada</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Ocultar el botón de emisión</string>
<string name="revanced_music_hide_cast_button_summary_on">El botón de emisión está oculto</string>
<string name="revanced_music_hide_cast_button_summary_off">El botón de emisión es visible</string>
<string name="revanced_music_hide_history_button_title">Ocultar el botón \"Historial\"</string>
<string name="revanced_music_hide_history_button_summary_on">El botón de Historial está oculto</string>
<string name="revanced_music_hide_history_button_summary_off">El botón de Historial es visible</string>
<string name="revanced_music_hide_notification_button_title">Ocultar el botón de notificación</string>
<string name="revanced_music_hide_notification_button_summary_on">El botón de notificación está oculto</string>
<string name="revanced_music_hide_notification_button_summary_off">Se muestra el botón de notificación</string>
<string name="revanced_music_hide_search_button_title">Ocultar el botón de búsqueda</string>
<string name="revanced_music_hide_search_button_summary_on">El botón de búsqueda está oculto</string>
<string name="revanced_music_hide_search_button_summary_off">Se muestra el botón de búsqueda</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Ocultar barra de categorías</string>
<string name="revanced_music_hide_category_bar_summary_on">La barra de categorías está oculta</string>
<string name="revanced_music_hide_category_bar_summary_off">La barra de categorías es visible</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Cambiar color del minirreproductor</string>
<string name="revanced_music_change_miniplayer_color_summary_on">El color del minirreproductor coincide con el del reproductor de pantalla completa</string>
<string name="revanced_music_change_miniplayer_color_summary_off">El minirreproductor utiliza el color predeterminado</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Barra de navegación</string>
<string name="revanced_music_navigation_bar_screen_summary">Ocultar o cambiar los botones de la barra de navegación</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK ehituskuupäev on rikutud</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Hoiatus</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVancedi Teade</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Teie vaatamise ajalugu ei salvestata.&lt;br&gt;&lt;br&gt;See on tõenäoliselt tingitud DNS-i reklaamiblokeerijast või võrguproksilt.&lt;br&gt;&lt;br&gt;Selle parandamiseks lisage valgesse nimekirja &lt;b&gt;s.youtube.com&lt;/b&gt; või lülitage kõik DNS-i reklaamiblokeerijad ja proksid välja.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Ära kuva uuesti</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Seaded</string>
<string name="revanced_settings_confirm_user_dialog_title">Kas sa oled kindel, et soovid jätkata?</string>
<string name="revanced_settings_save">Salvesta</string>
<string name="revanced_settings_reset">Lähtesta</string>
<string name="revanced_settings_reset_color">Lähtesta värv</string>
<string name="revanced_settings_color_invalid">Vigane värv</string>
@@ -164,6 +164,14 @@ Teid ei teavitata ühestki ootamatust sündmusest."</string>
<string name="revanced_debug_logs_clear_buffer_title">Puhasta silumislogid</string>
<string name="revanced_debug_logs_clear_buffer_summary">Puhastab kõik salvestatud ReVanced silumislogid</string>
<string name="revanced_debug_logs_clear_toast">Logid puhastatud</string>
<string name="revanced_debug_feature_flags_manager_title">Funktsioonilipikute Manager</string>
<string name="revanced_debug_feature_flags_manager_summary">Halda booleani funktsioonilipikuid</string>
<string name="revanced_debug_feature_flags_manager_active_header">Aktiivsed lipud (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Blokeeritud lipud (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Otsi lippe...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Lipud salvestatud</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Lipud lähtestatud</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Lipud kopeeritud lõikelauale</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Puhasta jagamislingid</string>
@@ -328,15 +336,24 @@ Kui Doodle on teie piirkonnas praegu nähtav ja see peitmise seade on sisse lül
<string name="revanced_hide_how_this_was_made_section_title">Peida \"Kuidas see sisu loodi\"</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">Kuidas see sisu loodi jaotis on peidetud</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">Kuidas see sisu loodi jaotis on kuvatud</string>
<string name="revanced_hide_hype_points_title">Peida Hype\'i punktid</string>
<string name="revanced_hide_hype_points_summary_on">Hype\'i punktid on peidetud</string>
<string name="revanced_hide_hype_points_summary_off">Hype\'i punktid on nähtavad</string>
<string name="revanced_hide_podcast_section_title">Peida \"Avasta taskuhäälingut\"</string>
<string name="revanced_hide_podcast_section_summary_on">Avasta taskuhäälingut jaotis on peidetud</string>
<string name="revanced_hide_podcast_section_summary_off">Avasta taskuhäälingut jaotis on kuvatud</string>
<string name="revanced_hide_featured_section_title">Peida esiletõstetud sisu</string>
<string name="revanced_hide_featured_section_summary_on">Esiletõstetud sisu jaotis on peidetud</string>
<string name="revanced_hide_featured_section_summary_off">Esiletõstetud sisu jaotis on nähtav</string>
<string name="revanced_hide_info_cards_section_title">Peida infokaardid</string>
<string name="revanced_hide_info_cards_section_summary_on">Teabekaartide jaotis on peidetud</string>
<string name="revanced_hide_info_cards_section_summary_off">Kuvatakse teabekaartide jaotis</string>
<string name="revanced_hide_key_concepts_section_title">Peida \"Põhimõisted\"</string>
<string name="revanced_hide_key_concepts_section_summary_on">Põhimõisted jaotis on peidetud</string>
<string name="revanced_hide_key_concepts_section_summary_off">Põhimõisted jaotis on kuvatud</string>
<string name="revanced_hide_description_subscribe_button_title">Peida tellimisnupp</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Tellimisnupp on peidetud</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Tellimisnupp on nähtav</string>
<string name="revanced_hide_transcript_section_title">Peida transkriptsioon</string>
<string name="revanced_hide_transcript_section_summary_on">Skriptiosa on peidetud</string>
<string name="revanced_hide_transcript_section_summary_off">Skriptiosa on näidatud</string>
@@ -771,15 +788,14 @@ Kui selle sätte muutmine ei avalda mõju, proovige lülituda Inkognito režiimi
<string name="revanced_hide_player_flyout_speed_title">Peida Esituse kiirus</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Esituse kiiruse menüü on peidetud</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Esituse kiiruse menüü on nähtav</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">Peida Lisateave</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">Lisateabe menüü on peidetud</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">Lisateabe menüü on nähtav</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">Peida Ekraani lukustus</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Ekraani lukustuse menüü on peidetud</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Ekraani lukustuse menüü on nähtav</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">Peida Kuula YouTube Musicuga</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">Kuula YouTube Musicuga menüü on peidetud</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">Kuula YouTube Musicuga menüü on nähtav</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Peida Helitraek</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Helitraekide menüü on peidetud</string>
@@ -1661,16 +1677,30 @@ AV1-ga videotaasesitus võib hakitud olla või kaadreid vahele jätta."</string>
<string name="revanced_music_play_permanent_repeat_summary_on">Püsiv kordus on lubatud</string>
<string name="revanced_music_play_permanent_repeat_summary_off">Püsiv kordus on keelatud</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Peida edastusnupp</string>
<string name="revanced_music_hide_cast_button_summary_on">Edastusnupp on peidetud</string>
<string name="revanced_music_hide_cast_button_summary_off">Edastusnupp on nähtav</string>
<string name="revanced_music_hide_history_button_title">Peida ajaloo nupp</string>
<string name="revanced_music_hide_history_button_summary_on">Ajaloo nupp on peidetud</string>
<string name="revanced_music_hide_history_button_summary_off">Ajaloo nupp on nähtaval</string>
<string name="revanced_music_hide_notification_button_title">Peida teavituse nupp</string>
<string name="revanced_music_hide_notification_button_summary_on">Teavituse nupp on peidetud</string>
<string name="revanced_music_hide_notification_button_summary_off">Teavituse nupp on nähtav</string>
<string name="revanced_music_hide_search_button_title">Peida otsingunupp</string>
<string name="revanced_music_hide_search_button_summary_on">Otsingunupp on peidetud</string>
<string name="revanced_music_hide_search_button_summary_off">Otsingunupp on nähtav</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Peida kategooriariba</string>
<string name="revanced_music_hide_category_bar_summary_on">Kategooriariba on peidetud</string>
<string name="revanced_music_hide_category_bar_summary_off">Kategooriariba on nähtaval</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Muuda minipleieri värvi</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Minipleieri värv ühtib täisekraanipleieri omaga</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Minipleier kasutab vaikevärvi</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Navigeerimisriba</string>
<string name="revanced_music_navigation_bar_screen_summary">Peida või muuda navigeerimisriba nuppe</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -134,9 +133,8 @@ Second \"item\" text"</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
@@ -268,10 +266,12 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
</patch>
<patch id="layout.compactheader.hideCategoryBar">
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -22,7 +21,9 @@ Second \"item\" text"</string>
<resources>
<app id="shared">
<patch id="layout.branding.baseCustomBrandingPatch">
<string name="revanced_custom_branding_name_title">نام برنامه</string>
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
<string name="revanced_custom_branding_icon_title">آیکون برنامه</string>
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
</patch>
@@ -52,6 +53,8 @@ Second \"item\" text"</string>
<string name="revanced_settings_search_no_results_title">نتایجی برای %s یافت نشد</string>
<string name="revanced_settings_search_no_results_summary">کلیدواژه دیگری را امتحان کنید</string>
<string name="revanced_settings_search_remove_message">حذف از تاریخچه جستجو؟</string>
<string name="revanced_settings_search_empty_history_title">تاریخچه جستجو خالی است</string>
<string name="revanced_settings_search_history_title">نمایش تاریخچه جستجوی تنظیمات</string>
<string name="revanced_show_menu_icons_title">نمایش آیکون تنظیمات ReVanced</string>
<string name="revanced_show_menu_icons_summary_on">نمادهای تنظیمات نشان داده می‌شوند</string>
<string name="revanced_show_menu_icons_summary_off">نمادهای تنظیمات نمایش داده نمی شوند</string>
@@ -181,9 +184,8 @@ Second \"item\" text"</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
@@ -318,10 +320,12 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
</patch>
<patch id="layout.compactheader.hideCategoryBar">
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK käännöspäivä on vioittunut</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Varoitus</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVanced Ilmoitus</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Kellon historiaa ei tallenneta.&lt;br&gt;&lt;br&gt;Tämä todennäköisesti johtuu DNS mainosten estäjä tai verkkovälityspalvelin.&lt;br&gt;&lt;br&gt;Korjataksesi tämän, valkoiselle listalle &lt;b&gt;s.youtube.com&lt;/b&gt; tai poistaaksesi kaikki DNS-estäjät ja -profiilit.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Älä näytä uudelleen</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Asetukset</string>
<string name="revanced_settings_confirm_user_dialog_title">Haluatko varmasti jatkaa?</string>
<string name="revanced_settings_save">Tallenna</string>
<string name="revanced_settings_reset">Nollaa</string>
<string name="revanced_settings_reset_color">Nollaa väri</string>
<string name="revanced_settings_color_invalid">Virheellinen väri</string>
@@ -164,6 +164,14 @@ Et saa ilmoituksia odottamattomista tapahtumista."</string>
<string name="revanced_debug_logs_clear_buffer_title">Tyhjennä virheenkorjauslokit</string>
<string name="revanced_debug_logs_clear_buffer_summary">Tyhjentää kaikki tallennetut ReVanced-virheenkorjauslokit</string>
<string name="revanced_debug_logs_clear_toast">Lokit tyhjennetty</string>
<string name="revanced_debug_feature_flags_manager_title">Ominaisuuslippujen Manager</string>
<string name="revanced_debug_feature_flags_manager_summary">Hallitse totuusarvo-ominaisuuslippuja</string>
<string name="revanced_debug_feature_flags_manager_active_header">Aktiiviset liput (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Estetyt liput (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Hae lippuja...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Liput tallennettu</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Liput nollattu</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Liput kopioitu leikepöydälle</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Puhdista jakamislinkit</string>
@@ -328,15 +336,24 @@ Jos Doodle näkyy tällä hetkellä alueellasi ja tämä piilotusasetus on käyt
<string name="revanced_hide_how_this_was_made_section_title">Piilota \"Miten sisältö on luotu\"</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">Miten sisältö on luotu -osio piilotetaan</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">Miten sisältö on luotu -osio näytetään</string>
<string name="revanced_hide_hype_points_title">Piilota Hype-pisteet</string>
<string name="revanced_hide_hype_points_summary_on">Hype-pisteet piilotetaan</string>
<string name="revanced_hide_hype_points_summary_off">Hype-pisteet näytetään</string>
<string name="revanced_hide_podcast_section_title">Piilota \"Tutustu podcastiin\"</string>
<string name="revanced_hide_podcast_section_summary_on">Tutustu podcastiin -osio piilotetaan</string>
<string name="revanced_hide_podcast_section_summary_off">Tutustu podcastiin -osio näytetään</string>
<string name="revanced_hide_featured_section_title">Piilota esitelty sisältö</string>
<string name="revanced_hide_featured_section_summary_on">Esitelty sisältö -osio on piilotettu</string>
<string name="revanced_hide_featured_section_summary_off">Esitelty sisältö -osio näytetään</string>
<string name="revanced_hide_info_cards_section_title">Piilota tietokortit</string>
<string name="revanced_hide_info_cards_section_summary_on">Infokortit-osio piilotetaan</string>
<string name="revanced_hide_info_cards_section_summary_off">Infokortit-osio näytetään</string>
<string name="revanced_hide_key_concepts_section_title">Piilota \"Keskeiset käsitteet\"</string>
<string name="revanced_hide_key_concepts_section_summary_on">Keskeiset käsitteet -osio piilotetaan</string>
<string name="revanced_hide_key_concepts_section_summary_off">Keskeiset käsitteet -osio näytetään</string>
<string name="revanced_hide_description_subscribe_button_title">Piilota Tilaa-painike</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Tilaa-painike piilotetaan</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Tilaa-painike näytetään</string>
<string name="revanced_hide_transcript_section_title">Piilota transkriptio</string>
<string name="revanced_hide_transcript_section_summary_on">Transkriptio-osio piilotetaan</string>
<string name="revanced_hide_transcript_section_summary_off">Transkriptio-osio näytetään</string>
@@ -771,15 +788,14 @@ Jos tämän asetuksen muuttaminen ei tule voimaan, kokeile vaihtaa Incognito-til
<string name="revanced_hide_player_flyout_speed_title">Piilota Toistonopeus</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Toistonopeusvalikko piilotetaan</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Toistonopeusvalikko näytetään</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">Piilota Lisätietoja</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">Lisätietoja-valinta piilotetaan</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">Lisätietoja-valinta näytetään </string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">Piilota Näytön lukitus</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Näytön lukitus -valinta piilotetaan</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Näytön lukitus -valinta näytetään</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">Piilota Kuuntele YouTube Musicissa</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">Kuuntele YouTube Musicissa -valinta piilotetaan</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">Kuuntele YouTube Musicissa -valinta näytetään</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Piilota Ääniraita</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Ääniraitavalikko piilotetaan</string>
@@ -1661,16 +1677,30 @@ AV1-videon toisto saattaa pätkiä."</string>
<string name="revanced_music_play_permanent_repeat_summary_on">Pysyvä toisto on käytössä</string>
<string name="revanced_music_play_permanent_repeat_summary_off">Pysyvä toisto ei ole käytössä</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Piilota Cast-painike</string>
<string name="revanced_music_hide_cast_button_summary_on">Cast-painike piilotetaan</string>
<string name="revanced_music_hide_cast_button_summary_off">Cast-painike näytetään</string>
<string name="revanced_music_hide_history_button_title">Piilota historia-painike</string>
<string name="revanced_music_hide_history_button_summary_on">Historia-painike piilotetaan</string>
<string name="revanced_music_hide_history_button_summary_off">Historia-painike näytetään</string>
<string name="revanced_music_hide_notification_button_title">Piilota ilmoituspainike</string>
<string name="revanced_music_hide_notification_button_summary_on">Ilmoituspainike piilotetaan</string>
<string name="revanced_music_hide_notification_button_summary_off">Ilmoituspainike näytetään</string>
<string name="revanced_music_hide_search_button_title">Piilota hakupainike</string>
<string name="revanced_music_hide_search_button_summary_on">Hakupainike piilotetaan</string>
<string name="revanced_music_hide_search_button_summary_off">Hakupainike näytetään</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Piilota kategoriapalkki</string>
<string name="revanced_music_hide_category_bar_summary_on">Kategoriapalkki piilotetaan</string>
<string name="revanced_music_hide_category_bar_summary_off">Kategoriapalkki näytetään</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Vaihda minisoittimen väri</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Minisoittimen väri vastaa kokoruudun soitinta</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Minisoitin käyttää oletusväriä</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Navigointipalkki</string>
<string name="revanced_music_navigation_bar_screen_summary">Piilota tai muuta navigointipalkin painikkeita</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">Ang petsa ng pagbuo ng APK ay sira</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Babala</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">Paunawa ng ReVanced</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Hindi nai-save ang iyong kasaysayan ng panonood.&lt;br&gt;&lt;br&gt;Karaniwang sanhi nito ay ang DNS ad blocker o network proxy.&lt;br&gt;&lt;br&gt;Para maayos ito, i-whitelist ang &lt;b&gt;s.youtube.com&lt;/b&gt; o i-off ang lahat ng DNS blocker at proxy.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Huwag ipakitang muli</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Mga Setting</string>
<string name="revanced_settings_confirm_user_dialog_title">Sigurado ka bang gusto mong magpatuloy?</string>
<string name="revanced_settings_save">I-save</string>
<string name="revanced_settings_reset">I-reset</string>
<string name="revanced_settings_reset_color">I-reset ang kulay</string>
<string name="revanced_settings_color_invalid">Hindi wasto ang kulay</string>
@@ -164,6 +164,14 @@ Hindi ka aabisuhan ng anumang hindi inaasahang mga kaganapan."</string>
<string name="revanced_debug_logs_clear_buffer_title">I-clear ang mga debug log</string>
<string name="revanced_debug_logs_clear_buffer_summary">Iki-clear ang lahat ng nakaimbak na ReVanced debug log</string>
<string name="revanced_debug_logs_clear_toast">Na-clear ang mga log</string>
<string name="revanced_debug_feature_flags_manager_title">Manager ng Mga Flag ng Tampok</string>
<string name="revanced_debug_feature_flags_manager_summary">Pamahalaan ang mga boolean na flag ng tampok</string>
<string name="revanced_debug_feature_flags_manager_active_header">Mga aktibong flag (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Mga harang na flag (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Maghanap ng mga flag...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Na-save ang mga flag</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Na-reset ang mga flag</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Nakopya ang mga flag sa clipboard</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Linisin ang mga link sa pagbabahagi</string>
@@ -328,15 +336,24 @@ Kung ang isang Doodle ay kasalukuyang ipinapakita sa iyong rehiyon at ang settin
<string name="revanced_hide_how_this_was_made_section_title">Itago ang \'Paano ginawa ang content na ito\'</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">Nakatago ang seksyon ng Paano ginawa ang content na ito</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">Ipinapakita ang seksyon ng Paano ginawa ang content na ito</string>
<string name="revanced_hide_hype_points_title">Itago ang mga Puntos ng Hype</string>
<string name="revanced_hide_hype_points_summary_on">Nakatago ang mga Puntos ng Hype</string>
<string name="revanced_hide_hype_points_summary_off">Ipinapakita ang mga Puntos ng Hype</string>
<string name="revanced_hide_podcast_section_title">Itago ang \'I-explore ang podcast\'</string>
<string name="revanced_hide_podcast_section_summary_on">Nakatago ang seksyon ng I-explore ang podcast</string>
<string name="revanced_hide_podcast_section_summary_off">Ipinapakita ang seksyon ng I-explore ang podcast</string>
<string name="revanced_hide_featured_section_title">Itago ang Itinatampok na Nilalaman</string>
<string name="revanced_hide_featured_section_summary_on">Nakatago ang seksyon ng Itinatampok na Nilalaman</string>
<string name="revanced_hide_featured_section_summary_off">Ipinapakita ang seksyon ng Itinatampok na Nilalaman</string>
<string name="revanced_hide_info_cards_section_title">Itago ang Mga card ng impormasyon</string>
<string name="revanced_hide_info_cards_section_summary_on">Nakatago ang seksyon ng mga card ng impormasyon</string>
<string name="revanced_hide_info_cards_section_summary_off">Ang seksyon ng mga card ng impormasyon ay ipinapakita</string>
<string name="revanced_hide_key_concepts_section_title">Itago ang \'Mga pangunahing konsepto\'</string>
<string name="revanced_hide_key_concepts_section_summary_on">Nakatago ang seksyon ng Mga pangunahing konsepto</string>
<string name="revanced_hide_key_concepts_section_summary_off">Ipinapakita ang seksyon ng Mga pangunahing konsepto</string>
<string name="revanced_hide_description_subscribe_button_title">Itago ang pindutan ng Mag-subscribe</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Nakatago ang pindutan ng Subscribe</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Ipinapakita ang pindutan ng Subscribe</string>
<string name="revanced_hide_transcript_section_title">Itago ang Transcript</string>
<string name="revanced_hide_transcript_section_summary_on">Nakatago ang seksyon ng transcript</string>
<string name="revanced_hide_transcript_section_summary_off">Ipinapakita ang seksyon ng transcript</string>
@@ -769,15 +786,14 @@ Tandaan: Ang pagpapagana nito ay nagtatago rin ng mga ad ng video"</string>
<string name="revanced_hide_player_flyout_speed_title">Itago ang bilis ng pag-playback</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Nakatago ang menu ng bilis ng pag-playback</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Ang menu ng bilis ng pag-playback ay ipinapakita</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">Itago ang Higit pang impormasyon</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">Nakatago ang menu ng higit pang impormasyon</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">Ang menu ng higit pang impormasyon ay ipinapakita</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">Itago ang Lock screen</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Nakatago ang menu ng lock screen</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Ipinapakita ang menu ng lock screen</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">Itago ang Makinig gamit ang YouTube Music</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">Nakatago ang menu ng Makinig gamit ang YouTube Music</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">Ipinapakita ang menu ng Makinig gamit ang YouTube Music</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Itago ang Audio track</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Nakatago ang menu ng audio track</string>
@@ -1659,16 +1675,30 @@ Maaaring mag-stutter o mag-drop ng frames ang pag-playback ng video na may AV1."
<string name="revanced_music_play_permanent_repeat_summary_on">Pinagana ang permanenteng pag-ulit</string>
<string name="revanced_music_play_permanent_repeat_summary_off">Hindi pinagana ang permanenteng pag-ulit</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Itago ang pindutan ng Cast</string>
<string name="revanced_music_hide_cast_button_summary_on">Nakatago ang pindutan ng Cast</string>
<string name="revanced_music_hide_cast_button_summary_off">Ipinapakita ang pindutan ng Cast</string>
<string name="revanced_music_hide_history_button_title">Itago ang button ng history</string>
<string name="revanced_music_hide_history_button_summary_on">Nakatago ang button ng history</string>
<string name="revanced_music_hide_history_button_summary_off">Naka-display ang button ng history</string>
<string name="revanced_music_hide_notification_button_title">Itago ang button ng notification</string>
<string name="revanced_music_hide_notification_button_summary_on">Nakakubli ang button ng notification</string>
<string name="revanced_music_hide_notification_button_summary_off">Ipinapakita ang button ng notification</string>
<string name="revanced_music_hide_search_button_title">Itago ang button ng paghahanap</string>
<string name="revanced_music_hide_search_button_summary_on">Nakakubli ang button ng paghahanap</string>
<string name="revanced_music_hide_search_button_summary_off">Ipinapakita ang button ng paghahanap</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Itago ang category bar</string>
<string name="revanced_music_hide_category_bar_summary_on">Nakatago ang category bar</string>
<string name="revanced_music_hide_category_bar_summary_off">Ipinapakita ang category bar</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Palitan ang kulay ng miniplayer</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Ang kulay ng miniplayer ay tumutugma sa fullscreen player</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Gumagamit ang miniplayer ng default na kulay</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Navigation bar</string>
<string name="revanced_music_navigation_bar_screen_summary">Itago o baguhin ang mga pindutan ng navigation bar</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">La date de construction de l\'APK est corrompue</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Avertissement</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">Avis ReVanced</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Les vidéos que vous regardez ne sont pas enregistrées dans votre historique.&lt;br&gt;&lt;br&gt;La cause la plus probable est l\'utilisation d\'un serveur DNS bloqueur de publicités ou d\'un proxy.&lt;br&gt;&lt;br&gt;Pour résoudre ce problème, autorisez l\'accès à &lt;b&gt;s.youtube.com&lt;/b&gt; ou désactivez tous vos bloqueurs DNS et proxys.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Ne plus afficher</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Paramètres</string>
<string name="revanced_settings_confirm_user_dialog_title">Voulez-vous vraiment continuer ?</string>
<string name="revanced_settings_save">Enregistrer</string>
<string name="revanced_settings_reset">Réinitialiser</string>
<string name="revanced_settings_reset_color">Réinitialiser la couleur</string>
<string name="revanced_settings_color_invalid">Couleur invalide</string>
@@ -164,6 +164,14 @@ Vous ne serez pas informé des événements inattendus."</string>
<string name="revanced_debug_logs_clear_buffer_title">Effacer les journaux de débogage</string>
<string name="revanced_debug_logs_clear_buffer_summary">Efface tous les journaux de débogage ReVanced stockés</string>
<string name="revanced_debug_logs_clear_toast">Journaux effacés</string>
<string name="revanced_debug_feature_flags_manager_title">Gestionnaire des indicateurs de fonctionnalités</string>
<string name="revanced_debug_feature_flags_manager_summary">Gérer les indicateurs de fonctionnalités booléens</string>
<string name="revanced_debug_feature_flags_manager_active_header">Drapeaux actifs (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Drapeaux bloqués (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Rechercher des drapeaux...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Drapeaux enregistrés</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Drapeaux réinitialisés</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Drapeaux copiés dans le presse-papiers</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Nettoyer les liens de partage</string>
@@ -328,15 +336,24 @@ Si un Doodle est actuellement affiché dans votre région et que cette option de
<string name="revanced_hide_how_this_was_made_section_title">Masquer \"Comment ce contenu a été créé\"</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">La section \"Comment ce contenu a été créé\" est masquée</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">La section \"Comment ce contenu a été créé\" est affichée</string>
<string name="revanced_hide_hype_points_title">Masquer les points Boost</string>
<string name="revanced_hide_hype_points_summary_on">Les points Boost sont masqués</string>
<string name="revanced_hide_hype_points_summary_off">Les points Boost sont affichés</string>
<string name="revanced_hide_podcast_section_title">Masquer \"Découvrir le podcast\"</string>
<string name="revanced_hide_podcast_section_summary_on">La section \"Découvrir le podcast\" est masquée</string>
<string name="revanced_hide_podcast_section_summary_off">La section \"Découvrir le podcast\" est affichée</string>
<string name="revanced_hide_featured_section_title">Masquer le contenu mis en avant</string>
<string name="revanced_hide_featured_section_summary_on">La section du contenu mis en avant est masquée</string>
<string name="revanced_hide_featured_section_summary_off">La section du contenu mis en avant est affichée</string>
<string name="revanced_hide_info_cards_section_title">Masquer \"Fiches info\"</string>
<string name="revanced_hide_info_cards_section_summary_on">La section \"Fiches info\" est masquée</string>
<string name="revanced_hide_info_cards_section_summary_off">La section \"Fiches info\" est affichée</string>
<string name="revanced_hide_key_concepts_section_title">Masquer \"Concepts clés\"</string>
<string name="revanced_hide_key_concepts_section_summary_on">La section \"Concepts clés\" est masquée</string>
<string name="revanced_hide_key_concepts_section_summary_off">La section \"Concepts clés\" est affichée</string>
<string name="revanced_hide_description_subscribe_button_title">Masquer le bouton S\'abonner</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Le bouton S\'abonner est masqué</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Le bouton S\'abonner est affiché</string>
<string name="revanced_hide_transcript_section_title">Masquer \"Transcription\"</string>
<string name="revanced_hide_transcript_section_summary_on">La section Transcription est masquée</string>
<string name="revanced_hide_transcript_section_summary_off">La section Transcription est affichée</string>
@@ -771,15 +788,14 @@ Si la modification de ce paramètre ne prend pas effet, essayez de passer en mod
<string name="revanced_hide_player_flyout_speed_title">Masquer \"Vitesse de lecture\"</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Le menu Vitesse de lecture est masqué</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Le menu Vitesse de lecture est affiché</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">Masquer \"Plus d\'infos\"</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">Le menu Plus d\'infos est masqué</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">Le menu Plus d\'infos est affiché</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">Masquer \"Verrouiller l\'écran\"</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Le menu Verrouiller l\'écran est masqué</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Le menu Verrouiller l\'écran est affiché</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">Masquer \"Écouter avec YouTube Music\"</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">Le menu Écouter avec YouTube Music est masqué</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">Le menu Écouter avec YouTube Music est affiché</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Masquer \"Piste audio\"</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Le menu Piste audio est masqué</string>
@@ -1662,16 +1678,30 @@ La lecture vidéo avec AV1 peut être saccadée et des images peuvent être perd
<string name="revanced_music_play_permanent_repeat_summary_on">La lecture en boucle permanente est activée</string>
<string name="revanced_music_play_permanent_repeat_summary_off">La lecture en boucle permanente est désactivée</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Masquer le bouton Diffuser</string>
<string name="revanced_music_hide_cast_button_summary_on">Le bouton Diffuser est masqué</string>
<string name="revanced_music_hide_cast_button_summary_off">Le bouton Diffuser est affiché</string>
<string name="revanced_music_hide_history_button_title">Masquer le bouton Historique</string>
<string name="revanced_music_hide_history_button_summary_on">Le bouton Historique est masqué</string>
<string name="revanced_music_hide_history_button_summary_off">Le bouton Historique est affiché</string>
<string name="revanced_music_hide_notification_button_title">Masquer le bouton de notification</string>
<string name="revanced_music_hide_notification_button_summary_on">Le bouton de notification est masqué</string>
<string name="revanced_music_hide_notification_button_summary_off">Le bouton de notification est affiché</string>
<string name="revanced_music_hide_search_button_title">Masquer le bouton de recherche</string>
<string name="revanced_music_hide_search_button_summary_on">Le bouton de recherche est masqué</string>
<string name="revanced_music_hide_search_button_summary_off">Le bouton de recherche est affiché</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Masquer la barre des catégories</string>
<string name="revanced_music_hide_category_bar_summary_on">La barre des catégories est masquée</string>
<string name="revanced_music_hide_category_bar_summary_off">La barre des catégories est affichée</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Changer la couleur du mini-lecteur</string>
<string name="revanced_music_change_miniplayer_color_summary_on">La couleur du mini-lecteur correspond à celle du lecteur plein écran</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Le mini-lecteur utilise la couleur par défaut</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Barre de navigation</string>
<string name="revanced_music_navigation_bar_screen_summary">Masquez ou modifiez les boutons de la barre de navigation</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">Tá dáta tógála APK truaillithe</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Rabhadh</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">Fógra ReVanced</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Níl do stair faire á sábháil.&lt;br&gt;&lt;br&gt;Is é is dóichí gur seachfhreastalaí fógraí DNS nó seachfhreastalaí líonra is cúis leis seo.&lt;br&gt;&lt;br&gt; Chun é seo a réiteach, déan liosta bán &lt;b&gt;s.youtube.com&lt;/b&gt; nó gach seachfhreastalaí DNS a mhúchadh.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Ná taispeáin arís</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Socruithe</string>
<string name="revanced_settings_confirm_user_dialog_title">An bhfuil tú cinnte gur mhaith leat dul ar aghaidh?</string>
<string name="revanced_settings_save">Sábháil</string>
<string name="revanced_settings_reset">Athshocrú</string>
<string name="revanced_settings_reset_color">Dath a athshocrú</string>
<string name="revanced_settings_color_invalid">Dath neamhbhailí</string>
@@ -164,6 +164,14 @@ Ní chuirfear ar an eolas thú faoi aon imeachtaí gan choinne."</string>
<string name="revanced_debug_logs_clear_buffer_title">Glan logaí dífhabhtaithe</string>
<string name="revanced_debug_logs_clear_buffer_summary">Glanann sé gach loga dífhabhtaithe ReVanced stóráilte</string>
<string name="revanced_debug_logs_clear_toast">Lógaí glanta</string>
<string name="revanced_debug_feature_flags_manager_title">Bainisteoir bratacha gnéithe</string>
<string name="revanced_debug_feature_flags_manager_summary">Bainistigh bratacha gné booléacha</string>
<string name="revanced_debug_feature_flags_manager_active_header">Bratacha gníomhacha (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Bratacha blocáilte (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Cuardaigh bratacha...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Bratacha sábháilte</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Bratacha athshocraithe</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Bratacha cóipeáilte chuig an ngearrthaisce</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Glan na naisc roinnte</string>
@@ -328,15 +336,24 @@ Má tá Doodle á thaispeáint faoi láthair i do réigiún agus má tá an tsu
<string name="revanced_hide_how_this_was_made_section_title">Folaigh \'Conas a rinneadh an t-ábhar seo\'</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">Tá an chuid Conas a rinneadh an t-ábhar seo i bhfolach</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">Taispeántar an chuid Conas a rinneadh an t-ábhar seo</string>
<string name="revanced_hide_hype_points_title">Folaigh pointí Hype</string>
<string name="revanced_hide_hype_points_summary_on">Tá pointí Hype i bhfolach</string>
<string name="revanced_hide_hype_points_summary_off">Taispeántar pointí Hype</string>
<string name="revanced_hide_podcast_section_title">Folaigh \'Déan iniúchadh ar an bpodchraoladh\'</string>
<string name="revanced_hide_podcast_section_summary_on">Tá an chuid Déan iniúchadh ar an bpodchraoladh i bhfolach</string>
<string name="revanced_hide_podcast_section_summary_off">Taispeántar an chuid Déan iniúchadh ar an bpodchraoladh</string>
<string name="revanced_hide_featured_section_title">Folaigh ábhar roghnaithe</string>
<string name="revanced_hide_featured_section_summary_on">Tá an chuid ábhair roghnaithe i bhfolach</string>
<string name="revanced_hide_featured_section_summary_off">Taispeántar an chuid ábhair roghnaithe</string>
<string name="revanced_hide_info_cards_section_title">Folaigh cártaí eolais</string>
<string name="revanced_hide_info_cards_section_summary_on">Tá an chuid cártaí faisnéise i bhfolach</string>
<string name="revanced_hide_info_cards_section_summary_off">Taispeántar rannán cártaí faisnéise</string>
<string name="revanced_hide_key_concepts_section_title">Folaigh \'Príomhchoincheapa\'</string>
<string name="revanced_hide_key_concepts_section_summary_on">Tá an chuid Príomhchoincheapa i bhfolach</string>
<string name="revanced_hide_key_concepts_section_summary_off">Taispeántar an chuid coincheapa lárnacha</string>
<string name="revanced_hide_description_subscribe_button_title">Folaigh cnaipe Liostáil</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Tá an cnaipe Liostáil i bhfolach</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Taispeántar cnaipe Liostáil</string>
<string name="revanced_hide_transcript_section_title">Folaigh Tras-scríbhinn</string>
<string name="revanced_hide_transcript_section_summary_on">Tá alt an tras-scríbhinn i bhfolach</string>
<string name="revanced_hide_transcript_section_summary_off">Taispeántar alt an tras-scríbhinn</string>
@@ -769,15 +786,14 @@ Mura dtagann aon athrú ar an socrú seo, bain triail as mód Incognito a chur a
<string name="revanced_hide_player_flyout_speed_title">Folaigh luas athsheinm</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Tá roghchlár luas athsheinm i bhfolach</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Taispeántar roghchlár luas athsheinm</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">Folaigh Tuilleadh eolais</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">Tá tuilleadh eolais i bhfolach</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">Taispeántar roghchlár tuilleadh eolais</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">Folaigh scáileán Glas</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Tá roghchlár scáileán glas i bhfolach</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Taispeántar roghchlár an scáileáin ghlasála</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">Folaigh Éist le YouTube Music</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">Tá roghchlár Éist le YouTube Music i bhfolach</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">Taispeántar an roghchlár Éist le YouTube Music</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Folaigh Rian Fuaime</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Tá roghchlár rian fuaime i bhfolach</string>
@@ -1659,16 +1675,30 @@ Dfhéadfadh sé go mbeadh stad nó go gcaillfí frámaí ag athsheinm físe l
<string name="revanced_music_play_permanent_repeat_summary_on">Tá athrá buan cumasaithe</string>
<string name="revanced_music_play_permanent_repeat_summary_off">Tá athrá buan díchumasaithe</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Folaigh an cnaipe teilgthe</string>
<string name="revanced_music_hide_cast_button_summary_on">Tá an cnaipe teilgthe i bhfolach</string>
<string name="revanced_music_hide_cast_button_summary_off">Taispeántar an cnaipe teilgthe</string>
<string name="revanced_music_hide_history_button_title">Folaigh cnaipe na staire</string>
<string name="revanced_music_hide_history_button_summary_on">Tá cnaipe na staire i bhfolach</string>
<string name="revanced_music_hide_history_button_summary_off">Taispeántar cnaipe na staire</string>
<string name="revanced_music_hide_notification_button_title">Folaigh cnaipe fógraí</string>
<string name="revanced_music_hide_notification_button_summary_on">Tá cnaipe fógraí i bhfolach</string>
<string name="revanced_music_hide_notification_button_summary_off">Taispeántar cnaipe fógraí</string>
<string name="revanced_music_hide_search_button_title">Folaigh cnaipe cuardaigh</string>
<string name="revanced_music_hide_search_button_summary_on">Tá cnaipe cuardaigh i bhfolach</string>
<string name="revanced_music_hide_search_button_summary_off">Taispeántar an cnaipe cuardaigh</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Folaigh an barra catagóirí</string>
<string name="revanced_music_hide_category_bar_summary_on">Tá an barra catagóirí i bhfolach</string>
<string name="revanced_music_hide_category_bar_summary_off">Taispeántar an barra catagóirí</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Athraigh dath an mini-imreora</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Meaitseálann dath an mini-imreora leis an imreoir lánscáileáin</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Úsáideann an mini-imreoir an dath réamhshocraithe</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Barra nascleanúna</string>
<string name="revanced_music_navigation_bar_screen_summary">Folaigh nó athraigh cnaipí an bharra nascleanúna</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -134,9 +133,8 @@ Second \"item\" text"</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
@@ -268,10 +266,12 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
</patch>
<patch id="layout.compactheader.hideCategoryBar">
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -134,9 +133,8 @@ Second \"item\" text"</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
@@ -268,10 +266,12 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
</patch>
<patch id="layout.compactheader.hideCategoryBar">
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -136,9 +135,8 @@ Second \"item\" text"</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
@@ -270,10 +268,12 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
</patch>
<patch id="layout.compactheader.hideCategoryBar">
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -32,6 +31,7 @@ Second \"item\" text"</string>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_save">Sačuvaj</string>
<!-- Settings about dialog. -->
<!-- NOTE: the about strings above are duplicated in the TikTok about screen code,
and changes made here must also be made there. -->
@@ -135,9 +135,8 @@ Second \"item\" text"</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
@@ -269,10 +268,12 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
</patch>
<patch id="layout.compactheader.hideCategoryBar">
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">Az APK build dátuma sérült</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Figyelmeztetés</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVanced Értesítés</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">A megtekintési előzmények mentése nem történik meg.&lt;br&gt;&lt;br&gt;Ezt valószínűleg egy DNS-hirdetésblokkoló vagy hálózati proxy okozza.&lt;br&gt;&lt;br&gt;A probléma megoldásához vegye fel az engedélyezőlistára az &lt;b&gt;s.youtube.com&lt;/b&gt; domaint vagy kapcsolja ki az összes DNS-blokkolót és proxyt.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Ne jelenjen meg többet</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Beállítások</string>
<string name="revanced_settings_confirm_user_dialog_title">Biztosan folytatni szeretné?</string>
<string name="revanced_settings_save">Mentés</string>
<string name="revanced_settings_reset">Visszaállítás</string>
<string name="revanced_settings_reset_color">Szín alaphelyzetbe állítása</string>
<string name="revanced_settings_color_invalid">Érvénytelen szín</string>
@@ -164,6 +164,14 @@ Nem fog értesülni semmilyen váratlan eseményről."</string>
<string name="revanced_debug_logs_clear_buffer_title">Hibakeresési naplók törlése</string>
<string name="revanced_debug_logs_clear_buffer_summary">Törli az összes tárolt ReVanced hibakeresési naplót</string>
<string name="revanced_debug_logs_clear_toast">Naplók törölve</string>
<string name="revanced_debug_feature_flags_manager_title">Funkciójelzők Manager</string>
<string name="revanced_debug_feature_flags_manager_summary">Logikai funkciójelzők kezelése</string>
<string name="revanced_debug_feature_flags_manager_active_header">Aktív jelzők (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Blokkolt jelzők (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Jelzők keresése...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Jelzők mentve</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Jelzők visszaállítva</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Jelzők vágólapra másolva</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Megosztási linkek tisztítása</string>
@@ -328,15 +336,24 @@ Ha a Doodle jelenleg a régiódában látható, és ez a rejtés beállítás be
<string name="revanced_hide_how_this_was_made_section_title">A „Hogyan készült ez a tartalom” elrejtése</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">A Hogyan készült ez a tartalom szakasz rejtett</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">A Hogyan készült ez a tartalom szakasz látható</string>
<string name="revanced_hide_hype_points_title">Hype pontok elrejtése</string>
<string name="revanced_hide_hype_points_summary_on">A Hype pontok el vannak rejtve</string>
<string name="revanced_hide_hype_points_summary_off">A Hype pontok láthatóak</string>
<string name="revanced_hide_podcast_section_title">A „Podcast felfedezése” elrejtése</string>
<string name="revanced_hide_podcast_section_summary_on">A Podcast felfedezése szakasz rejtett</string>
<string name="revanced_hide_podcast_section_summary_off">A Podcast felfedezése szakasz látható</string>
<string name="revanced_hide_featured_section_title">Kiemelt tartalom elrejtése</string>
<string name="revanced_hide_featured_section_summary_on">A kiemelt tartalmak szekció elrejtve</string>
<string name="revanced_hide_featured_section_summary_off">A kiemelt tartalmak szekció látható</string>
<string name="revanced_hide_info_cards_section_title">Infó kártyák elrejtése</string>
<string name="revanced_hide_info_cards_section_summary_on">Az infó kártyák rész el van rejtve</string>
<string name="revanced_hide_info_cards_section_summary_off">Az infó kártyák rész látható</string>
<string name="revanced_hide_key_concepts_section_title">A „Főbb fogalmak” elrejtése</string>
<string name="revanced_hide_key_concepts_section_summary_on">A Főbb fogalmak szakasz rejtett</string>
<string name="revanced_hide_key_concepts_section_summary_off">A Főbb fogalmak szakasz látható</string>
<string name="revanced_hide_description_subscribe_button_title">Feliratkozás gomb elrejtése</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Az előfizetés gomb rejtett</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Az előfizetés gomb látható</string>
<string name="revanced_hide_transcript_section_title">Átirat elrejtése</string>
<string name="revanced_hide_transcript_section_summary_on">Az átirat rész el van rejtve</string>
<string name="revanced_hide_transcript_section_summary_off">Az átirat rész megjelenik</string>
@@ -771,15 +788,14 @@ Ha a beállítás módosítása nem lép életbe, próbáljon meg Inkognitó mó
<string name="revanced_hide_player_flyout_speed_title">Lejátszási sebesség elrejtése</string>
<string name="revanced_hide_player_flyout_speed_summary_on">A lejátszási sebesség menü el van rejtve</string>
<string name="revanced_hide_player_flyout_speed_summary_off">A lejátszási sebesség menü látható</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">További információk elrejtése</string>
<string name="revanced_hide_player_flyout_more_info_summary_on"> A további információ menü el van rejtve</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">A további információ menü megjelenik</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">Lezárási képernyő elrejtése</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">A lezárási képernyő menü el van rejtve</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">A lezárási képernyő menü megjelenik</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">\"Meghallgatás YouTube Music alkalmazással\" elrejtése</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">A(z) \"Meghallgatás YouTube Music alkalmazással\" menü rejtett</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">A(z) \"Meghallgatás YouTube Music alkalmazással\" menü megjelenítve</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Hangsáv elrejtése</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">A hangsáv menü el van rejtve</string>
@@ -1658,16 +1674,30 @@ Az AV1-es videólejátszás akadozhat vagy képkockákat ejthet."</string>
<string name="revanced_music_play_permanent_repeat_summary_on">Az állandó ismétlés engedélyezve van</string>
<string name="revanced_music_play_permanent_repeat_summary_off">Az állandó ismétlés letiltva van</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Kivetítés gomb elrejtése</string>
<string name="revanced_music_hide_cast_button_summary_on">Kivetítés gomb elrejtve</string>
<string name="revanced_music_hide_cast_button_summary_off">Kivetítés gomb látható</string>
<string name="revanced_music_hide_history_button_title">Elrejti az előzmények gombot</string>
<string name="revanced_music_hide_history_button_summary_on">Az előzmények gomb rejtett</string>
<string name="revanced_music_hide_history_button_summary_off">Az előzmények gomb látható</string>
<string name="revanced_music_hide_notification_button_title">Értesítési gomb elrejtése</string>
<string name="revanced_music_hide_notification_button_summary_on">Az értesítési gomb el van rejtve</string>
<string name="revanced_music_hide_notification_button_summary_off">Az értesítési gomb látható</string>
<string name="revanced_music_hide_search_button_title">Keresés gomb elrejtése</string>
<string name="revanced_music_hide_search_button_summary_on">A keresés gomb el van rejtve</string>
<string name="revanced_music_hide_search_button_summary_off">A keresés gomb látható</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Kategóriasáv elrejtése</string>
<string name="revanced_music_hide_category_bar_summary_on">A kategóriasáv rejtve van</string>
<string name="revanced_music_hide_category_bar_summary_off">A kategóriasáv látható</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Mini lejátszó színének módosítása</string>
<string name="revanced_music_change_miniplayer_color_summary_on">A mini lejátszó színe megegyezik a teljes képernyős lejátszóéval</string>
<string name="revanced_music_change_miniplayer_color_summary_off">A mini lejátszó alapértelmezett színt használ</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Navigációs sáv</string>
<string name="revanced_music_navigation_bar_screen_summary">Navigációs sáv gombjainak elrejtése vagy módosítása</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK-ի կառուցման ամսաթիվը վնասված է</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Զգուշացում</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVanced Ծանուցում</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Ձեր դիտման պատմությունը չի պահպանվում.&lt;br&gt;&lt;br&gt;Այս հավանական պատճառը DNS գովազդների բլոկավորիչ կամ ցանցային պրոքսի է.&lt;br&gt;&lt;br&gt;Խնդրում ենք գործարկել &lt;b&gt;s.youtube.com&lt;/b&gt; կամ անջատել DNS բլոկավորիչներ և պրոքսիներ:</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Ավելի չցուցադրել</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Կարգավորումներ</string>
<string name="revanced_settings_confirm_user_dialog_title">Վստա՞հ եք, որ ցանկանում եք շարունակել:</string>
<string name="revanced_settings_save">Պահպանել</string>
<string name="revanced_settings_reset">Վերականգնել</string>
<string name="revanced_settings_reset_color">Գույնը վերականգնել</string>
<string name="revanced_settings_color_invalid">Անվավեր գույն</string>
@@ -164,6 +164,14 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
<string name="revanced_debug_logs_clear_buffer_title">Մաքրել վրեժխնդրության մատյանները</string>
<string name="revanced_debug_logs_clear_buffer_summary">Մաքրում է բոլոր պահված ReVanced կարգաբերման մատյանները</string>
<string name="revanced_debug_logs_clear_toast">Մատյանները մաքրվել են</string>
<string name="revanced_debug_feature_flags_manager_title">Գործառույթի դրոշակների Manager</string>
<string name="revanced_debug_feature_flags_manager_summary">Կառավարել բուլյան գործառույթի դրոշակները</string>
<string name="revanced_debug_feature_flags_manager_active_header">Ակտիվ դրոշակներ (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Արգելափակված դրոշակներ (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Որոնել դրոշակներ...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Դրոշակները պահպանվեցին</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Դրոշակները զրոյացվեցին</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Դրոշակները պատճենվեցին սեղմատախտակին</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Մաքրել համօգտագործման հղումները</string>
@@ -328,15 +336,24 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
<string name="revanced_hide_how_this_was_made_section_title">Թաքցնել \"Ինչպես է պատրաստվել այս բովանդակությունը\"</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">Ինչպես է պատրաստվել այս բովանդակությունը բաժինը թաքցված է</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">Ինչպես է պատրաստվել այս բովանդակությունը բաժինը ցուցադրվում է</string>
<string name="revanced_hide_hype_points_title">Թաքցնել Hype միավորները</string>
<string name="revanced_hide_hype_points_summary_on">Hype միավորները թաքնված են</string>
<string name="revanced_hide_hype_points_summary_off">Hype միավորները ցուցադրվում են</string>
<string name="revanced_hide_podcast_section_title">Թաքցնել \"Բացահայտեք փոդքասթը\"</string>
<string name="revanced_hide_podcast_section_summary_on">Բացահայտեք փոդքասթը բաժինը թաքցված է</string>
<string name="revanced_hide_podcast_section_summary_off">Բացահայտեք փոդքասթը բաժինը ցուցադրվում է</string>
<string name="revanced_hide_featured_section_title">Թաքցնել ընտրված բովանդակությունը</string>
<string name="revanced_hide_featured_section_summary_on">Ընտրված բովանդակության բաժինը թաքցված է</string>
<string name="revanced_hide_featured_section_summary_off">Ընտրված բովանդակության բաժինը ցուցադրված է</string>
<string name="revanced_hide_info_cards_section_title">Թաքցնել Տեղեկատվական քարտերը</string>
<string name="revanced_hide_info_cards_section_summary_on">Տեղեկատվական քարտերի բաժինը թաքցված է</string>
<string name="revanced_hide_info_cards_section_summary_off">Տեղեկատվական քարտերի բաժինը երևում է</string>
<string name="revanced_hide_key_concepts_section_title">Թաքցնել \"Հիմնական հասկացությունները\"</string>
<string name="revanced_hide_key_concepts_section_summary_on">Հիմնական հասկացությունների բաժինը թաքցված է</string>
<string name="revanced_hide_key_concepts_section_summary_off">Հիմնական հասկացությունների բաժինը ցուցադրվում է</string>
<string name="revanced_hide_description_subscribe_button_title">Թաքցնել Բաժանորդագրվել կոճակը</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Բաժանորդագրվել կոճակը թաքնված է</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Բաժանորդագրվել կոճակը ցուցադրված է</string>
<string name="revanced_hide_transcript_section_title">Թաքցնել վերծանումը</string>
<string name="revanced_hide_transcript_section_summary_on">Տեքստի բաժինը թաքցված է</string>
<string name="revanced_hide_transcript_section_summary_off">Տեքստի բաժինը երևում է</string>
@@ -771,15 +788,14 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
<string name="revanced_hide_player_flyout_speed_title">Վերարտադրման արագությունը թաքցնել</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Վերարտադրման արագության մենյուը թաքցված է</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Վերարտադրման արագության մենյուը երևում է</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">Լրացուցիչ տեղեկությունը թաքցնել</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">Լրացուցիչ տեղեկությունների մենյուը թաքցված է</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">Լրացուցիչ տեղեկությունների մենյուը երևում է</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">Էկրանի արգելափակումը թաքցնել</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Էկրանի արգելափակման մենյուը թաքցված է</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Էկրանի արգելափակման մենյուը երևում է</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">Թաքցնել Լսել YouTube Music-ով</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">Լսել YouTube Music-ով մենյուն թաքցված է</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">Լսել YouTube Music-ով մենյուն ցուցադրված է</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Աուդիո ձայնագրությունը թաքցնել</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Աուդիո ձայնագրման մենյուը թաքցված է</string>
@@ -1662,16 +1678,30 @@ AV1-ով տեսանյութի նվագարկումը կարող է ընդհատ
<string name="revanced_music_play_permanent_repeat_summary_on">Մշտական կրկնությունը միացված է</string>
<string name="revanced_music_play_permanent_repeat_summary_off">Մշտական կրկնությունը անջատված է</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Թաքցնել հեռարձակման կոճակը</string>
<string name="revanced_music_hide_cast_button_summary_on">Հեռարձակման կոճակը թաքնված է</string>
<string name="revanced_music_hide_cast_button_summary_off">Հեռարձակման կոճակը ցուցադրված է</string>
<string name="revanced_music_hide_history_button_title">Թաքցնել պատմության կոճակը</string>
<string name="revanced_music_hide_history_button_summary_on">Պատմության կոճակը թաքցված է</string>
<string name="revanced_music_hide_history_button_summary_off">Պատմության կոճակը ցուցադրված է</string>
<string name="revanced_music_hide_notification_button_title">Թաքցնել ծանուցման կոճակը</string>
<string name="revanced_music_hide_notification_button_summary_on">Ծանուցման կոճակը թաքցված է</string>
<string name="revanced_music_hide_notification_button_summary_off">Ծանուցման կոճակը ցուցադրվում է</string>
<string name="revanced_music_hide_search_button_title">Թաքցնել որոնման կոճակը</string>
<string name="revanced_music_hide_search_button_summary_on">Որոնման կոճակը թաքցված է</string>
<string name="revanced_music_hide_search_button_summary_off">Որոնման կոճակը ցուցադրվում է</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Թաքցնել կատեգորիաների վահանակը</string>
<string name="revanced_music_hide_category_bar_summary_on">Կատեգորիաների վահանակը թաքցված է</string>
<string name="revanced_music_hide_category_bar_summary_off">Կատեգորիաների վահանակը ցուցադրվում է</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Փոխել մինի նվագարկչի գույնը</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Մինի նվագարկչի գույնը համապատասխանում է լիաէկրան նվագարկչին</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Մինի նվագարկիչը օգտագործում է լռելյայն գույնը</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Նավիգացիոն գիծ</string>
<string name="revanced_music_navigation_bar_screen_summary">Թաքցնել կամ փոխել նավիգացիոն գծի կոճակները</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">Tanggal pembuatan APK rusak</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Peringatan </string>
<string name="revanced_check_watch_history_domain_name_dialog_title">Pemberitahuan ReVanced</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Riwayat tontonan Anda tidak sedang disimpan.&lt;br&gt;&lt;br&gt;Hal ini kemungkinan besar disebabkan oleh pemblokir iklan DNS atau proksi jaringan.&lt;br&gt;&lt;br&gt;Untuk memperbaikinya, masukkan daftar putih &lt;b&gt;s.youtube.com&lt;/b&gt; atau matikan semua pemblokir DNS dan proksi.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Jangan tampilkan lagi</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Pengaturan</string>
<string name="revanced_settings_confirm_user_dialog_title">Apakah Anda yakin ingin melanjutkan?</string>
<string name="revanced_settings_save">Simpan</string>
<string name="revanced_settings_reset">Setel ulang</string>
<string name="revanced_settings_reset_color">Setel ulang warna</string>
<string name="revanced_settings_color_invalid">Warna tidak sah</string>
@@ -61,7 +61,7 @@ Second \"item\" text"</string>
<string name="revanced_settings_import">Impor</string>
<string name="revanced_settings_import_copy">Salin</string>
<string name="revanced_settings_import_reset">Pengaturan ReVanced diatur ke bawaan</string>
<string name="revanced_settings_import_success">Setelan %d terimpor</string>
<string name="revanced_settings_import_success">%d Setelan terimpor</string>
<string name="revanced_settings_import_failure_parse">Impor gagal: %s</string>
<string name="revanced_settings_search_hint">Pengaturan pencarian</string>
<string name="revanced_settings_search_no_results_title">Tidak ada hasil yang ditemukan untuk \'%s\'</string>
@@ -164,6 +164,14 @@ Anda tidak akan diberi tahu tentang kejadian yang tidak terduga."</string>
<string name="revanced_debug_logs_clear_buffer_title">Bersihkan catatan debug</string>
<string name="revanced_debug_logs_clear_buffer_summary">Menghapus semua catatan debug ReVanced yang tersimpan</string>
<string name="revanced_debug_logs_clear_toast">Catatan dibersihkan</string>
<string name="revanced_debug_feature_flags_manager_title">Fitur pengelolaan tanda</string>
<string name="revanced_debug_feature_flags_manager_summary">Kelola tanda fitur boolean</string>
<string name="revanced_debug_feature_flags_manager_active_header">Tanda aktif (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Tanda diblokir (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Cari tanda...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Tanda disimpan</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Tanda diatur ulang</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Tanda disalin ke papan klip</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Bersihkan tautan berbagi</string>
@@ -328,15 +336,24 @@ Jika Doodle saat ini ditampilkan di wilayah Anda dan pengaturan penyembunyi ini
<string name="revanced_hide_how_this_was_made_section_title">Sembunyikan \'Cara konten ini dibuat\'</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">Bagian Cara konten ini dibuat disembunyikan</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">Bagian Cara konten ini dibuat ditampilkan</string>
<string name="revanced_hide_hype_points_title">Sembunyikan Poin Hype</string>
<string name="revanced_hide_hype_points_summary_on">Poin Hype disembunyikan</string>
<string name="revanced_hide_hype_points_summary_off">Poin Hype ditampilkan</string>
<string name="revanced_hide_podcast_section_title">Sembunyikan \'Jelajahi podcast\'</string>
<string name="revanced_hide_podcast_section_summary_on">Bagian Jelajahi podcast disembunyikan</string>
<string name="revanced_hide_podcast_section_summary_off">Bagian Jelajahi podcast ditampilkan</string>
<string name="revanced_hide_featured_section_title">Sembunyikan Konten Unggulan</string>
<string name="revanced_hide_featured_section_summary_on">Bagian konten unggulan disembunyikan</string>
<string name="revanced_hide_featured_section_summary_off">Bagian konten unggulan ditampilkan</string>
<string name="revanced_hide_info_cards_section_title">Sembunyikan kartu Info</string>
<string name="revanced_hide_info_cards_section_summary_on">Bagian kartu info disembunyikan</string>
<string name="revanced_hide_info_cards_section_summary_off">Bagian kartu info ditampilkan</string>
<string name="revanced_hide_key_concepts_section_title">Sembunyikan \'Konsep utama\'</string>
<string name="revanced_hide_key_concepts_section_summary_on">Bagian Konsep utama disembunyikan</string>
<string name="revanced_hide_key_concepts_section_summary_off">Bagian Konsep utama ditampilkan</string>
<string name="revanced_hide_description_subscribe_button_title">Sembunyikan tombol Langganan</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Tombol Berlangganan disembunyikan</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Tombol Berlangganan ditampilkan</string>
<string name="revanced_hide_transcript_section_title">Sembunyikan Transkrip</string>
<string name="revanced_hide_transcript_section_summary_on">Bagian transkrip disembunyikan</string>
<string name="revanced_hide_transcript_section_summary_off">Bagian transkrip ditampilkan</string>
@@ -771,15 +788,14 @@ Jika mengubah setelan ini tidak berpengaruh, coba beralih ke mode Penyamaran."</
<string name="revanced_hide_player_flyout_speed_title">Sembunyikan Kecepatan pemutaran</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Menu kecepatan pemutaran disembunyikan</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Menu kecepatan pemutaran ditampilkan</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">Sembunyikan Info selengkapnya</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">Menu info selengkapnya disembunyikan</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">Menu info selengkapnya ditampilkan</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">Sembunyikan Kunci layar</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Menu kunci layar disembunyikan</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Menu kunci layar ditampilkan</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">Sembunyikan Dengarkan dengan YouTube Music</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">Menu Dengarkan dengan YouTube Music disembunyikan</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">Menu Dengarkan dengan YouTube Music ditampilkan</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Sembunyikan trek Audio</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Menu trek audio disembunyikan</string>
@@ -1660,16 +1676,30 @@ Pemutaran video dengan AV1 mungkin tersendat atau kehilangan bingkai."</string>
<string name="revanced_music_play_permanent_repeat_summary_on">Pengulangan permanen diaktifkan</string>
<string name="revanced_music_play_permanent_repeat_summary_off">Pengulangan permanen dinonaktifkan</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Sembunyikan tombol transmisi</string>
<string name="revanced_music_hide_cast_button_summary_on">Tombol transmisi disembunyikan</string>
<string name="revanced_music_hide_cast_button_summary_off">Tombol transmisi ditampilkan</string>
<string name="revanced_music_hide_history_button_title">Sembunyikan tombol Riwayat</string>
<string name="revanced_music_hide_history_button_summary_on">Tombol Riwayat disembunyikan</string>
<string name="revanced_music_hide_history_button_summary_off">Tombol Riwayat ditampilkan</string>
<string name="revanced_music_hide_notification_button_title">Sembunyikan tombol notifikasi</string>
<string name="revanced_music_hide_notification_button_summary_on">Tombol notifikasi disembunyikan</string>
<string name="revanced_music_hide_notification_button_summary_off">Tombol notifikasi ditampilkan</string>
<string name="revanced_music_hide_search_button_title">Sembunyikan tombol pencarian</string>
<string name="revanced_music_hide_search_button_summary_on">Tombol pencarian disembunyikan</string>
<string name="revanced_music_hide_search_button_summary_off">Tombol pencarian ditampilkan</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Sembunyikan bilah kategori</string>
<string name="revanced_music_hide_category_bar_summary_on">Bilah kategori disembunyikan</string>
<string name="revanced_music_hide_category_bar_summary_off">Bilah kategori ditampilkan</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Ubah warna pemutar mini</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Warna pemutar mini sesuai dengan pemutar layar penuh</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Pemutar mini menggunakan warna standar</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Bilah navigasi</string>
<string name="revanced_music_navigation_bar_screen_summary">Sembunyikan atau ubah tombol bilah navigasi</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -134,9 +133,8 @@ Second \"item\" text"</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
@@ -268,10 +266,12 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
</patch>
<patch id="layout.compactheader.hideCategoryBar">
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">La data di compilazione dell\'APK è corrotta</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Attenzione</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">Avviso ReVanced</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">La tua cronologia di visualizzazione non sta venendo salvata.&lt;br&gt;&lt;br&gt;Questo è molto probabilmente causato da un blocco annunci DNS o da un proxy di rete.&lt;br&gt;&lt;br&gt;Per risolvere, inserisci nella whitelist &lt;b&gt;s.youtube.com&lt;/b&gt; o disattiva tutti i blocchi DNS e proxy.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Non mostrare più</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Impostazioni</string>
<string name="revanced_settings_confirm_user_dialog_title">Sei sicuro di voler procedere?</string>
<string name="revanced_settings_save">Salva</string>
<string name="revanced_settings_reset">Reimposta</string>
<string name="revanced_settings_reset_color">Reimposta colore</string>
<string name="revanced_settings_color_invalid">Colore non valido</string>
@@ -164,6 +164,14 @@ Non sarai notificato di eventi imprevisti."</string>
<string name="revanced_debug_logs_clear_buffer_title">Cancella i log di debug</string>
<string name="revanced_debug_logs_clear_buffer_summary">Cancella tutti i log di debug di ReVanced memorizzati</string>
<string name="revanced_debug_logs_clear_toast">Log cancellati</string>
<string name="revanced_debug_feature_flags_manager_title">Manager dei flag di funzionalità</string>
<string name="revanced_debug_feature_flags_manager_summary">Gestisci flag di funzionalità booleani</string>
<string name="revanced_debug_feature_flags_manager_active_header">Flag attivi (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Flag bloccati (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">Cerca flag...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">Flag salvati</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">Flag ripristinati</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">Flag copiati negli appunti</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">Sanifica collegamenti di condivisione</string>
@@ -328,15 +336,24 @@ Se al momento un Doodle è visibile nella tua regione e questa impostazione nasc
<string name="revanced_hide_how_this_was_made_section_title">Nascondi \"Come è stato realizzato questo contenuto\"</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">La sezione Come è stato realizzato questo contenuto è nascosta</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">La sezione Come è stato realizzato questo contenuto è visibile</string>
<string name="revanced_hide_hype_points_title">Nascondi i punti Hype</string>
<string name="revanced_hide_hype_points_summary_on">I punti Hype sono nascosti</string>
<string name="revanced_hide_hype_points_summary_off">I punti Hype sono mostrati</string>
<string name="revanced_hide_podcast_section_title">Nascondi \"Esplora il podcast\"</string>
<string name="revanced_hide_podcast_section_summary_on">La sezione Esplora il podcast è nascosta</string>
<string name="revanced_hide_podcast_section_summary_off">La sezione Esplora il podcast è visibile</string>
<string name="revanced_hide_featured_section_title">Nascondi contenuti in primo piano</string>
<string name="revanced_hide_featured_section_summary_on">La sezione dei contenuti in primo piano è nascosta</string>
<string name="revanced_hide_featured_section_summary_off">La sezione dei contenuti in primo piano è mostrata</string>
<string name="revanced_hide_info_cards_section_title">Nascondi le schede informative</string>
<string name="revanced_hide_info_cards_section_summary_on">La sezione Schede Informative è nascosta</string>
<string name="revanced_hide_info_cards_section_summary_off">La sezione Schede Informative è visibile</string>
<string name="revanced_hide_key_concepts_section_title">Nascondi \"Concetti chiave\"</string>
<string name="revanced_hide_key_concepts_section_summary_on">La sezione Concetti chiave è nascosta</string>
<string name="revanced_hide_key_concepts_section_summary_off">La sezione Concetti chiave è visibile</string>
<string name="revanced_hide_description_subscribe_button_title">Nascondi il pulsante Iscriviti</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Il pulsante Iscriviti è nascosto</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Il pulsante Iscriviti è mostrato</string>
<string name="revanced_hide_transcript_section_title">Nascondi Trascrizione</string>
<string name="revanced_hide_transcript_section_summary_on">La sezione Trascrizione è nascosta</string>
<string name="revanced_hide_transcript_section_summary_off">La sezione Trascrizione è visibile</string>
@@ -771,15 +788,14 @@ Se la modifica di questa impostazione non ha effetto, prova a passare alla modal
<string name="revanced_hide_player_flyout_speed_title">Nascondi Velocità di riproduzione</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Il menu Velocità di riproduzione è nascosto</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Il menu Velocità di riproduzione è visibile</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">Nascondi Maggiori Informazioni</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">Il menu Maggiori Informazioni è nascosto</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">Il menu Maggiori Informazioni è visibile</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">Nascondi Blocca schermo</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Il menu Blocca Schermo è nascosto</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Il menu Blocca Schermo è visibile</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">Nascondi Ascolta con YouTube Music</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">Il menu Ascolta con YouTube Music è nascosto</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">Il menu Ascolta con YouTube Music è visualizzato</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">Nascondi Traccia audio</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Il menu Traccia audio è nascosto</string>
@@ -1660,16 +1676,30 @@ La riproduzione video con AV1 potrebbe rallentare o perdere fotogrammi."</string
<string name="revanced_music_play_permanent_repeat_summary_on">La ripetizione permanente è abilitata</string>
<string name="revanced_music_play_permanent_repeat_summary_off">La ripetizione permanente è disabilitata</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">Nascondi pulsante trasmissione</string>
<string name="revanced_music_hide_cast_button_summary_on">Il pulsante di trasmissione è nascosto</string>
<string name="revanced_music_hide_cast_button_summary_off">Il pulsante di trasmissione è mostrato</string>
<string name="revanced_music_hide_history_button_title">Nascondi pulsante cronologia</string>
<string name="revanced_music_hide_history_button_summary_on">Il pulsante cronologia è nascosto</string>
<string name="revanced_music_hide_history_button_summary_off">Il pulsante cronologia è mostrato</string>
<string name="revanced_music_hide_notification_button_title">Nascondi pulsante notifica</string>
<string name="revanced_music_hide_notification_button_summary_on">Il pulsante di notifica è nascosto</string>
<string name="revanced_music_hide_notification_button_summary_off">Il pulsante di notifica è mostrato</string>
<string name="revanced_music_hide_search_button_title">Nascondi pulsante ricerca</string>
<string name="revanced_music_hide_search_button_summary_on">Il pulsante di ricerca è nascosto</string>
<string name="revanced_music_hide_search_button_summary_off">Il pulsante di ricerca è mostrato</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Nascondi barra delle categorie</string>
<string name="revanced_music_hide_category_bar_summary_on">La barra delle categorie è nascosta</string>
<string name="revanced_music_hide_category_bar_summary_off">La barra delle categorie è mostrata</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Modifica colore miniplayer</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Il colore del miniplayer corrisponde a quello del lettore a schermo intero</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Il miniplayer usa il colore predefinito</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Barra di navigazione</string>
<string name="revanced_music_navigation_bar_screen_summary">Nascondi o modifica i pulsanti della barra di navigazione</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">תאריך בניית ה-APK פגום</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">אזהרה</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">הודעת ReVanced</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">היסטוריית הצפייה שלך לא נשמרת.&lt;br&gt;&lt;br&gt;סביר להניח שזה נגרם על ידי חוסם מודעות ברמת DNS או פרוקסי רשת.&lt;br&gt;&lt;br&gt;כדי לתקן זאת, רשום את &lt;b&gt;s.youtube.com&lt;/b&gt; ברשימת ההיתרים או כבה את כל חוסמי ה-DNS והפרוקסים.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">אל תציג שוב</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">הגדרות</string>
<string name="revanced_settings_confirm_user_dialog_title">האם אתה בטוח שברצונך להמשיך?</string>
<string name="revanced_settings_save">שמור</string>
<string name="revanced_settings_reset">איפוס</string>
<string name="revanced_settings_reset_color">אפס צבע</string>
<string name="revanced_settings_color_invalid">צבע לא חוקי</string>
@@ -164,6 +164,14 @@ Second \"item\" text"</string>
<string name="revanced_debug_logs_clear_buffer_title">נקה יומני איתור באגים</string>
<string name="revanced_debug_logs_clear_buffer_summary">מנקה את כל היומנים לאיתור באגים של Revanced המאוחסנים</string>
<string name="revanced_debug_logs_clear_toast">היומנים נוקו</string>
<string name="revanced_debug_feature_flags_manager_title">Manager דגלי תכונות</string>
<string name="revanced_debug_feature_flags_manager_summary">נהל דגלי תכונות בוליאניים</string>
<string name="revanced_debug_feature_flags_manager_active_header">דגלים פעילים (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">דגלים חסומים (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">חפש דגלים...</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">הדגלים נשמרו</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">הדגלים אופסו</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">הדגלים הועתקו ללוח</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">טיהור קישורי שיתוף</string>
@@ -328,15 +336,24 @@ Second \"item\" text"</string>
<string name="revanced_hide_how_this_was_made_section_title">הסתר את \'איך התוכן הזה נוצר\'</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">מדור \'איך התוכן הזה נוצר\' מוסתר</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">מדור \'איך התוכן הזה נוצר\' מוצג</string>
<string name="revanced_hide_hype_points_title">הסתר נקודות הייפ</string>
<string name="revanced_hide_hype_points_summary_on">נקודות הייפ מוסתרות</string>
<string name="revanced_hide_hype_points_summary_off">נקודות הייפ מוצגות</string>
<string name="revanced_hide_podcast_section_title">הסתר את \'גלה את הפודקאסט\'</string>
<string name="revanced_hide_podcast_section_summary_on">מדור \'גלה את הפודקאסט\' מוסתר</string>
<string name="revanced_hide_podcast_section_summary_off">מדור \'גלה את הפודקאסט\' מוצג</string>
<string name="revanced_hide_featured_section_title">הסתר תוכן מומלץ</string>
<string name="revanced_hide_featured_section_summary_on">מקטע תוכן מומלץ מוסתר</string>
<string name="revanced_hide_featured_section_summary_off">מקטע תוכן מומלץ מוצג</string>
<string name="revanced_hide_info_cards_section_title">הסתר כרטיסי מידע</string>
<string name="revanced_hide_info_cards_section_summary_on">מדור כרטיסי המידע מוסתר</string>
<string name="revanced_hide_info_cards_section_summary_off">מדור כרטיסי המידע מוצג</string>
<string name="revanced_hide_key_concepts_section_title">הסתר \'מושגי מפתח\'</string>
<string name="revanced_hide_key_concepts_section_summary_on">מדור מושגי מפתח מוסתר</string>
<string name="revanced_hide_key_concepts_section_summary_off">מדור מושגי מפתח מוצג</string>
<string name="revanced_hide_description_subscribe_button_title">הסתר לחצן \'הירשם\'</string>
<string name="revanced_hide_description_subscribe_button_summary_on">הלחצן \'הרשמה\' מוסתר</string>
<string name="revanced_hide_description_subscribe_button_summary_off">הלחצן \'הרשמה\' מוצג</string>
<string name="revanced_hide_transcript_section_title">הסתר תמליל</string>
<string name="revanced_hide_transcript_section_summary_on">מדור התמליל מוסתר</string>
<string name="revanced_hide_transcript_section_summary_off">מדור התמליל מוצג</string>
@@ -771,15 +788,14 @@ Second \"item\" text"</string>
<string name="revanced_hide_player_flyout_speed_title">הסתר מהירות ההפעלה</string>
<string name="revanced_hide_player_flyout_speed_summary_on">תפריט מהירות ההפעלה מוסתר</string>
<string name="revanced_hide_player_flyout_speed_summary_off">תפריט מהירות ההפעלה מוצג</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">הסתר מידע נוסף</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">תפריט מידע נוסף מוסתר</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">תפריט מידע נוסף מוצג</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">הסתר נעילת מגע</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">תפריט נעילת מגע מוסתר</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">תפריט נעילת מגע מוצג</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">הסתר האזנה עם YouTube Music</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">תפריט \"האזנה עם YouTube Music\" מוסתר</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">תפריט \"האזנה עם YouTube Music\" מוצג</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">הסתר טראק אודיו</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">תפריט טראק אודיו מוסתר</string>
@@ -1663,16 +1679,30 @@ Second \"item\" text"</string>
<string name="revanced_music_play_permanent_repeat_summary_on">חזרה קבועה מופעלת</string>
<string name="revanced_music_play_permanent_repeat_summary_off">חזרה קבועה מושבתת</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">הסתר לחצן שידור</string>
<string name="revanced_music_hide_cast_button_summary_on">לחצן השידור מוסתר</string>
<string name="revanced_music_hide_cast_button_summary_off">לחצן השידור מוצג</string>
<string name="revanced_music_hide_history_button_title">הסתר לחצן היסטוריה</string>
<string name="revanced_music_hide_history_button_summary_on">הלחצן \'היסטוריה\' מוסתר</string>
<string name="revanced_music_hide_history_button_summary_off">הלחצן \'היסטוריה\' מוצג</string>
<string name="revanced_music_hide_notification_button_title">הסתר לחצן התראה</string>
<string name="revanced_music_hide_notification_button_summary_on">לחצן ההתראה מוסתר</string>
<string name="revanced_music_hide_notification_button_summary_off">לחצן ההתראה מוצג</string>
<string name="revanced_music_hide_search_button_title">הסתר לחצן חיפוש</string>
<string name="revanced_music_hide_search_button_summary_on">לחצן החיפוש מוסתר</string>
<string name="revanced_music_hide_search_button_summary_off">לחצן החיפוש מוצג</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">הסתר סרגל קטגוריות</string>
<string name="revanced_music_hide_category_bar_summary_on">סרגל הקטגוריות מוסתר</string>
<string name="revanced_music_hide_category_bar_summary_off">סרגל הקטגוריות מוצג</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">שנה צבע מיני-נגן</string>
<string name="revanced_music_change_miniplayer_color_summary_on">צבע המיני-נגן תואם לנגן במסך מלא</string>
<string name="revanced_music_change_miniplayer_color_summary_off">מיני-נגן משתמש בצבע ברירת המחדל</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">סרגל ניווט</string>
<string name="revanced_music_navigation_bar_screen_summary">הסתר או שנה לחצני סרגל ניווט</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK の作成日時データが破損している</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">警告</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVanced からのお知らせ</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">再生履歴が保存されていません。&lt;br&gt;&lt;br&gt;これはおそらく、DNS 広告ブロッカーまたはネットワーク プロキシが原因です。&lt;br&gt;&lt;br&gt;この問題を解決するには、&lt;b&gt;s.youtube.com&lt;/b&gt; をホワイトリストに追加するか、すべての DNS ブロッカーとプロキシをオフにしてください。</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">今後表示しない</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">設定</string>
<string name="revanced_settings_confirm_user_dialog_title">続行してもよろしいですか?</string>
<string name="revanced_settings_save">保存</string>
<string name="revanced_settings_reset">リセット</string>
<string name="revanced_settings_reset_color">色をリセット</string>
<string name="revanced_settings_color_invalid">色の値が無効です</string>
@@ -164,6 +164,14 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<string name="revanced_debug_logs_clear_buffer_title">デバッグログを消去</string>
<string name="revanced_debug_logs_clear_buffer_summary">保存されている ReVanced のすべてのデバッグログを消去します</string>
<string name="revanced_debug_logs_clear_toast">ログを消去しました</string>
<string name="revanced_debug_feature_flags_manager_title">feature flag マネージャー</string>
<string name="revanced_debug_feature_flags_manager_summary">各機能のオン / オフを制御する feature flag を管理します</string>
<string name="revanced_debug_feature_flags_manager_active_header">有効な flag (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">無効な flag (%d)</string>
<string name="revanced_debug_feature_flags_manager_search_hint">flag を検索</string>
<string name="revanced_debug_feature_flags_manager_toast_saved">flag を保存しました</string>
<string name="revanced_debug_feature_flags_manager_toast_reset">flag をリセットしました</string>
<string name="revanced_debug_feature_flags_manager_toast_copied">flag をクリップボードにコピーしました</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">共有リンクを無害化</string>
@@ -324,22 +332,31 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<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>
<string name="revanced_hide_how_this_was_made_section_summary_on">「このコンテンツの作成手段」セクションは表示されません</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">「このコンテンツの作成手段」セクションは表示されます</string>
<string name="revanced_hide_hype_points_title">ハイプポイントを非表示</string>
<string name="revanced_hide_hype_points_summary_on">ハイプポイントは表示されません</string>
<string name="revanced_hide_hype_points_summary_off">ハイプポイントは表示されます</string>
<string name="revanced_hide_podcast_section_title">「ポッドキャストを検索」を非表示</string>
<string name="revanced_hide_podcast_section_summary_on">「ポッドキャストを検索」セクションは表示されません</string>
<string name="revanced_hide_podcast_section_summary_off">「ポッドキャストを検索」セクションは表示されます</string>
<string name="revanced_hide_info_cards_section_title">情報カード セクションを非表示</string>
<string name="revanced_hide_featured_section_title">おすすめコンテンツを非表示</string>
<string name="revanced_hide_featured_section_summary_on">情報カード内のおすすめコンテンツ セクションは表示されません</string>
<string name="revanced_hide_featured_section_summary_off">情報カード内のおすすめコンテンツ セクションは表示されます</string>
<string name="revanced_hide_info_cards_section_title">情報カードを非表示</string>
<string name="revanced_hide_info_cards_section_summary_on">情報カード セクションは表示されません</string>
<string name="revanced_hide_info_cards_section_summary_off">情報カード セクションは表示されます</string>
<string name="revanced_hide_key_concepts_section_title">「主な概念」を非表示</string>
<string name="revanced_hide_key_concepts_section_summary_on">主な概念セクションは表示されません</string>
<string name="revanced_hide_key_concepts_section_summary_off">主な概念セクションが表示されます</string>
<string name="revanced_hide_transcript_section_title">文字起こしセクションを非表示</string>
<string name="revanced_hide_description_subscribe_button_title">チャンネル登録ボタンを非表示</string>
<string name="revanced_hide_description_subscribe_button_summary_on">情報カード内のチャンネル登録ボタンは表示されません</string>
<string name="revanced_hide_description_subscribe_button_summary_off">情報カード内のチャンネル登録ボタンは表示されます</string>
<string name="revanced_hide_transcript_section_title">文字起こしを非表示</string>
<string name="revanced_hide_transcript_section_summary_on">文字起こしセクションは表示されません</string>
<string name="revanced_hide_transcript_section_summary_off">文字起こしセクションは表示されます</string>
<string name="revanced_hide_description_components_screen_title">概要欄</string>
@@ -773,15 +790,14 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<string name="revanced_hide_player_flyout_speed_title">「再生速度」を非表示</string>
<string name="revanced_hide_player_flyout_speed_summary_on">「再生速度」は表示されません</string>
<string name="revanced_hide_player_flyout_speed_summary_off">「再生速度」は表示されます</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">「詳細情報」を非表示</string>
<string name="revanced_hide_player_flyout_more_info_summary_on">「詳細情報」は表示されません</string>
<string name="revanced_hide_player_flyout_more_info_summary_off">「詳細情報」は表示されます</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_lock_screen_title">「画面のロック」を非表示</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_on">「画面のロック」は表示されません</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">「画面のロック」は表示されます</string>
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_listen_with_youtube_music_title">「YouTube Music で聴く」を非表示</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_on">「YouTube Music で聴く」は表示されません</string>
<string name="revanced_hide_player_flyout_listen_with_youtube_music_summary_off">「YouTube Music で聴く」は表示されます</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_audio_track_title">「音声トラック」を非表示</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">「音声トラック」は表示されません</string>
@@ -1089,12 +1105,12 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<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_auto_hide_skip_button_duration">スキップボタンの表示時間</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">自動非表示設定のスキップボタンと「ハイライトまでスキップ」ボタンが表示される時間の長さ</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">「ハイライトまでスキップボタンと「スキップボタンを自動的に非表示」がオンのときのその他のスキップボタンが、自動的に非表示になるまでの時間の長さ</string>
<string name="revanced_sb_general_skiptoast">自動スキップ時にトーストを表示</string>
<string name="revanced_sb_general_skiptoast_sum_on">セグメントが自動的にスキップされたときにトースト通知が表示されます。このトースト通知をタップすると、スキップを取り消すことができます</string>
<string name="revanced_sb_general_skiptoast_sum_off">セグメントが自動的にスキップされたときにトースト通知は表示されません。このトースト通知をタップすると、スキップを取り消すことができます</string>
<string name="revanced_sb_toast_on_skip_duration">スキップ トーストの表示時間</string>
<string name="revanced_sb_toast_on_skip_duration_sum">自動スキップ時にトースト通知が表示される時間の長さ</string>
<string name="revanced_sb_toast_on_skip_duration_sum">セグメントが自動的にスキップされたときに表示されるトースト通知が、自動的に非表示になるまでの時間の長さ</string>
<string name="revanced_sb_duration_1s">1 秒</string>
<string name="revanced_sb_duration_2s">2 秒</string>
<string name="revanced_sb_duration_3s">3 秒</string>
@@ -1146,36 +1162,36 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<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 が含まれています。
<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>
<string name="revanced_sb_segments_sponsor_sum">有料の宣伝 、有料の紹介、直接的な広告。自己宣伝や好意をもって行う、慈善活動、クリエーター、ウェブサイト、製品などの無償の紹介は含まれません</string>
<string name="revanced_sb_segments_sponsor">スポンサー (広告)</string>
<string name="revanced_sb_segments_sponsor_sum">有料の宣伝、有料の紹介、直接的な広告。自己宣伝や好意をもって行う、慈善活動、クリエーター、ウェブサイト、製品などの無償の紹介は、このカテゴリには含まれません</string>
<string name="revanced_sb_segments_selfpromo">無報酬の宣伝 / 自己宣伝</string>
<string name="revanced_sb_segments_selfpromo_sum">無報酬または自己宣伝である、という点以外は「広告」と同様です。商品、寄付、コラボ相手に関する宣伝などを含みます</string>
<string name="revanced_sb_segments_interaction">視聴者への催促 (登録など)</string>
<string name="revanced_sb_segments_interaction_sum">動画内に挿入される視聴者への高評価、チャンネル登録、フォローなどの時間的に短い催促。時間的に長い催促またはイベントなどの個別具体的なものに関する催促は、「視聴者への催促」ではなく「自己宣伝」に分類すべきです</string>
<string name="revanced_sb_segments_selfpromo_sum">無報酬または自己宣伝である、という点以外は「スポンサー」と同様です。商品、寄付、コラボ相手に関する宣伝などを含みます</string>
<string name="revanced_sb_segments_interaction">視聴者への催促 (登録)</string>
<string name="revanced_sb_segments_interaction_sum">動画内に挿入される高評価、チャンネル登録、フォローなどを視聴者にうながす短時間の催促。時間的に長い場合またはイベントなどの個別具体的なものに関する催促の場合は、このカテゴリではなく「自己宣伝」に分類すべきです</string>
<string name="revanced_sb_segments_highlight">ハイライト</string>
<string name="revanced_sb_segments_highlight_sum">動画の中で最も重要な場面</string>
<string name="revanced_sb_segments_intro">幕間 / オープニング (OP)</string>
<string name="revanced_sb_segments_intro_sum">実際のコンテンツを含まない区間。一時停止、静止画、繰り返しアニメーションなど。情報を含むトランジッション (場面転換) は、このカテゴリではありません</string>
<string name="revanced_sb_segments_intro_sum">実際のコンテンツを含まない区間。一時停止、静止画、繰り返しアニメーションなど。情報を含むトランジッション (場面転換) は、このカテゴリには含まれません</string>
<string name="revanced_sb_segments_outro">終了画面 / クレジット (ED)</string>
<string name="revanced_sb_segments_outro_sum">クレジットまたは YouTube の終了画面が表示される場面。情報を含む結論、まとめ部分は、このカテゴリには含まれません</string>
<string name="revanced_sb_segments_outro_sum">クレジットまたは YouTube の終了画面が表示される場面。情報を含む結論、まとめ部分は、このカテゴリには含まれません</string>
<string name="revanced_sb_segments_hook">フック / あいさつ</string>
<string name="revanced_sb_segments_hook_sum">今後の動画のナレーション付きの予告編、および開幕と別れのあいさつ。重複しない内容や情報を追加する場面は含まれません</string>
<string name="revanced_sb_segments_hook_sum">今後の動画のナレーション付きの予告編、および開幕と別れのあいさつ。他の部分に存在しない内容や情報を追加する場面は、このカテゴリには含まれません</string>
<string name="revanced_sb_segments_preview">予告編 / 総集編</string>
<string name="revanced_sb_segments_preview_sum">その動画またはシリーズ内の他の動画で過去に起きたこと、または今後起こることを示すクリップのコレクション。このクリップ群に含まれるすべての情報は、同じ動画の他の部分や他の動画で繰り返されます</string>
<string name="revanced_sb_segments_preview_sum">その動画またはシリーズ内の他の動画で過去に起きたこと、または今後起こることを示すクリップのコレクション。このクリップ群に含まれるすべての情報は、同じ動画の他の部分やシリーズ内の他の動画で繰り返されます</string>
<string name="revanced_sb_segments_filler">余談 / 冗談</string>
<string name="revanced_sb_segments_filler_sum">動画の本筋を理解するために必要のない脱線的な場面または冗談。コンテキストや背景情報を提供する場面は含まれません</string>
<string name="revanced_sb_segments_filler_sum">動画の本筋を理解するために必要のない脱線的な場面または冗談。コンテキストや背景情報を提供する場面は、このカテゴリには含まれません</string>
<string name="revanced_sb_segments_nomusic">音楽: 楽曲以外の区間</string>
<string name="revanced_sb_segments_nomusic_sum">ミュージック ビデオ専用。ミュージック ビデオの中で楽曲が流れていない区間であり、公式や他のメディアの音源に存在しない区間</string>
<string name="revanced_sb_segments_nomusic_sum">ミュージック ビデオ専用。ミュージック ビデオの中で楽曲が流れていない区間であり、公式や他のメディアの音源に存在しない部分</string>
<string name="revanced_sb_skip_button_compact">スキップ</string>
<string name="revanced_sb_skip_button_compact_highlight">ハイライト</string>
<string name="revanced_sb_skip_button_sponsor"> 広告をスキップ</string>
<string name="revanced_sb_skip_button_selfpromo">自己宣伝をスキップ</string>
<string name="revanced_sb_skip_button_interaction">催促をスキップ</string>
<string name="revanced_sb_skip_button_interaction">登録をスキップ</string>
<string name="revanced_sb_skip_button_highlight">ハイライトまでスキップ</string>
<string name="revanced_sb_skip_button_intro_beginning">OP をスキップ</string>
<string name="revanced_sb_skip_button_intro_middle">幕間をスキップ</string>
@@ -1188,20 +1204,20 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<string name="revanced_sb_skip_button_filler">余談をスキップ</string>
<string name="revanced_sb_skip_button_nomusic">楽曲以外をスキップ</string>
<string name="revanced_sb_skip_button_unsubmitted">セグメントをスキップ</string>
<string name="revanced_sb_skipped_sponsor">広告をスキップしました</string>
<string name="revanced_sb_skipped_sponsor">スポンサー (広告) をスキップしました</string>
<string name="revanced_sb_skipped_selfpromo">自己宣伝をスキップしました</string>
<string name="revanced_sb_skipped_interaction">催促をスキップしました</string>
<string name="revanced_sb_skipped_interaction">視聴者への催促 (登録) をスキップしました</string>
<string name="revanced_sb_skipped_highlight">ハイライトまでスキップしました</string>
<string name="revanced_sb_skipped_intro_beginning">OP をスキップしました</string>
<string name="revanced_sb_skipped_intro_beginning">オープニング (OP) をスキップしました</string>
<string name="revanced_sb_skipped_intro_middle">幕間をスキップしました</string>
<string name="revanced_sb_skipped_intro_end">幕間をスキップしました</string>
<string name="revanced_sb_skipped_outro">ED をスキップしました</string>
<string name="revanced_sb_skipped_outro">エンディング (ED) をスキップしました</string>
<string name="revanced_sb_skipped_hook">フックをスキップしました</string>
<string name="revanced_sb_skipped_preview_beginning">予告編をスキップしました</string>
<string name="revanced_sb_skipped_preview_middle">予告編をスキップしました</string>
<string name="revanced_sb_skipped_preview_end">総集編をスキップしました</string>
<string name="revanced_sb_skipped_filler">余談をスキップしました</string>
<string name="revanced_sb_skipped_nomusic">楽曲以外をスキップしました</string>
<string name="revanced_sb_skipped_nomusic">楽曲以外の区間をスキップしました</string>
<string name="revanced_sb_skipped_unsubmitted">未送信のセグメントをスキップしました</string>
<string name="revanced_sb_skipped_multiple_segments">複数のセグメントをスキップしました</string>
<string name="revanced_sb_skip_automatically">自動的にスキップ</string>
@@ -1478,7 +1494,7 @@ Automotive レイアウト
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow は一時的に利用できません</string>
</patch>
<patch id="misc.announcements.announcementsPatch">
<string name="revanced_announcements_title">ReVanced のお知らせを表示</string>
<string name="revanced_announcements_title">ReVanced からのお知らせを表示</string>
<string name="revanced_announcements_summary_on">アプリの起動時にお知らせが表示されます</string>
<string name="revanced_announcements_summary_off">アプリの起動時にお知らせは表示されません</string>
<string name="revanced_announcements_enabled_summary">アプリの起動時にお知らせを表示します</string>
@@ -1663,16 +1679,30 @@ AV1 での動画再生は、カクつくまたはコマ落ちが発生する場
<string name="revanced_music_play_permanent_repeat_summary_on">常時リピートは有効です\n\nリピート設定が保存され常時適用されます</string>
<string name="revanced_music_play_permanent_repeat_summary_off">常時リピートは無効です\n\nリピート設定は保存されず毎回リセットされます</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
<string name="revanced_music_hide_cast_button_title">キャストボタンを非表示</string>
<string name="revanced_music_hide_cast_button_summary_on">キャストボタンはプレーヤー オーバーレイに表示されません</string>
<string name="revanced_music_hide_cast_button_summary_off">キャストボタンはプレーヤー オーバーレイに表示されます</string>
<string name="revanced_music_hide_history_button_title">履歴ボタンを非表示</string>
<string name="revanced_music_hide_history_button_summary_on">履歴ボタンは表示されません</string>
<string name="revanced_music_hide_history_button_summary_off">履歴ボタンは表示されます</string>
<string name="revanced_music_hide_notification_button_title">通知ボタンを非表示</string>
<string name="revanced_music_hide_notification_button_summary_on">通知ボタンは表示されません</string>
<string name="revanced_music_hide_notification_button_summary_off">通知ボタンは表示されます</string>
<string name="revanced_music_hide_search_button_title">検索ボタンを非表示</string>
<string name="revanced_music_hide_search_button_summary_on">検索ボタンは表示されません</string>
<string name="revanced_music_hide_search_button_summary_off">検索ボタンは表示されます</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">カテゴリバーを非表示</string>
<string name="revanced_music_hide_category_bar_summary_on">カテゴリバーは表示されません</string>
<string name="revanced_music_hide_category_bar_summary_off">カテゴリバーは表示されます</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">ミニプレーヤーの色を変更</string>
<string name="revanced_music_change_miniplayer_color_summary_on">ミニプレーヤーはフルスクリーン プレーヤーと同じ色を使用します</string>
<string name="revanced_music_change_miniplayer_color_summary_off">ミニプレーヤーはデフォルトの色を使用します</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">ナビゲーション バー</string>
<string name="revanced_music_navigation_bar_screen_summary">ナビゲーション バーのボタンを変更または非表示にします</string>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -134,9 +133,8 @@ Second \"item\" text"</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
@@ -268,10 +266,12 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
</patch>
<patch id="layout.compactheader.hideCategoryBar">
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -134,9 +133,8 @@ Second \"item\" text"</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
@@ -268,10 +266,12 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
</patch>
<patch id="layout.compactheader.hideCategoryBar">
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -134,9 +133,8 @@ Second \"item\" text"</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
@@ -268,10 +266,12 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch>
<patch id="layout.castbutton.hideCastButton">
<patch id="layout.buttons.hideButtons">
</patch>
<patch id="layout.compactheader.hideCategoryBar">
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->

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