Compare commits

..

6 Commits

Author SHA1 Message Date
semantic-release-bot
eefb59020e chore: Release v5.4.0-dev.3 [skip ci]
# [5.4.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.2...v5.4.0-dev.3) (2024-12-09)

### Bug Fixes

* **TikTok - Settings:** Use correct colors for dark mode ([#4087](https://github.com/ReVanced/revanced-patches/issues/4087)) ([18f1884](18f18849f3))
2024-12-09 20:50:09 +00:00
LisoUseInAIKyrios
18f18849f3 fix(TikTok - Settings): Use correct colors for dark mode (#4087) 2024-12-10 00:46:53 +04:00
semantic-release-bot
b172c38284 chore: Release v5.4.0-dev.2 [skip ci]
# [5.4.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.1...v5.4.0-dev.2) (2024-12-09)

### Bug Fixes

* **TikTok - SIM Spoof:** Change patch to default off to fix login ([#4084](https://github.com/ReVanced/revanced-patches/issues/4084)) ([3c47bff](3c47bfff1a))

### Features

* Add Internal data documents provider patch ([#3830](https://github.com/ReVanced/revanced-patches/issues/3830)) ([89c45af](89c45afcc6))
2024-12-09 17:52:14 +00:00
github-actions[bot]
5b15602896 chore: Sync translations (#4085) 2024-12-09 21:49:37 +04:00
Tim Schneeberger
89c45afcc6 feat: Add Internal data documents provider patch (#3830)
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2024-12-09 18:46:31 +01:00
LisoUseInAIKyrios
3c47bfff1a fix(TikTok - SIM Spoof): Change patch to default off to fix login (#4084) 2024-12-09 18:45:42 +01:00
32 changed files with 995 additions and 223 deletions

View File

@@ -1,3 +1,22 @@
# [5.4.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.2...v5.4.0-dev.3) (2024-12-09)
### Bug Fixes
* **TikTok - Settings:** Use correct colors for dark mode ([#4087](https://github.com/ReVanced/revanced-patches/issues/4087)) ([6bd22ff](https://github.com/ReVanced/revanced-patches/commit/6bd22ffa7e8af4d8f5d2d3b1711bd92c44b4e4aa))
# [5.4.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.1...v5.4.0-dev.2) (2024-12-09)
### Bug Fixes
* **TikTok - SIM Spoof:** Change patch to default off to fix login ([#4084](https://github.com/ReVanced/revanced-patches/issues/4084)) ([f4659a3](https://github.com/ReVanced/revanced-patches/commit/f4659a328eaf600e1e5f02a66fa2af4b6d8dc7c1))
### Features
* Add Internal data documents provider patch ([#3830](https://github.com/ReVanced/revanced-patches/issues/3830)) ([cb22f65](https://github.com/ReVanced/revanced-patches/commit/cb22f652ed678d81ffda9ece659b3971225d6931))
# [5.4.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.3.0...v5.4.0-dev.1) (2024-12-09)

View File

@@ -0,0 +1,3 @@
dependencies {
compileOnly(libs.annotation)
}

View File

@@ -0,0 +1,334 @@
package app.revanced.extension.all.misc.directory.documentsprovider;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.ProviderInfo;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.os.CancellationSignal;
import android.os.ParcelFileDescriptor;
import android.provider.DocumentsContract;
import android.provider.DocumentsProvider;
import android.system.ErrnoException;
import android.system.Os;
import android.system.StructStat;
import android.util.Log;
import android.webkit.MimeTypeMap;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Objects;
/**
* A DocumentsProvider that allows access to the app's internal data directory.
*/
public class InternalDataDocumentsProvider extends DocumentsProvider {
private static final String[] rootColumns =
{"root_id", "mime_types", "flags", "icon", "title", "summary", "document_id"};
private static final String[] directoryColumns =
{"document_id", "mime_type", "_display_name", "last_modified", "flags",
"_size", "full_path", "lstat_info"};
private static final int S_IFLNK = 0x8000;
private String packageName;
private File dataDirectory;
/**
* Recursively delete a file or directory and all its children.
*
* @param root The file or directory to delete.
* @return True if the file or directory and all its children were successfully deleted.
*/
private static boolean deleteRecursively(File root) {
// If root is a directory, delete all children first
if (root.isDirectory()) {
try {
// Only delete recursively if the directory is not a symlink
if ((Os.lstat(root.getPath()).st_mode & S_IFLNK) != S_IFLNK) {
File[] files = root.listFiles();
if (files != null) {
for (File file : files) {
if (!deleteRecursively(file)) {
return false;
}
}
}
}
} catch (ErrnoException e) {
Log.e("InternalDocumentsProvider", "Failed to lstat " + root.getPath(), e);
}
}
// Delete file or empty directory
return root.delete();
}
/**
* Resolve the MIME type of a file based on its extension.
*
* @param file The file to resolve the MIME type for.
* @return The MIME type of the file.
*/
private static String resolveMimeType(File file) {
if (file.isDirectory()) {
return DocumentsContract.Document.MIME_TYPE_DIR;
}
String name = file.getName();
int indexOfExtDot = name.lastIndexOf('.');
if (indexOfExtDot < 0) {
// No extension
return "application/octet-stream";
}
String extension = name.substring(indexOfExtDot + 1).toLowerCase();
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
return mimeType != null ? mimeType : "application/octet-stream";
}
@Override
public final boolean onCreate() {
return true;
}
@Override
public final void attachInfo(Context context, ProviderInfo providerInfo) {
super.attachInfo(context, providerInfo);
this.packageName = context.getPackageName();
this.dataDirectory = context.getFilesDir().getParentFile();
}
@Override
public final String createDocument(String parentDocumentId, String mimeType, String displayName) throws FileNotFoundException {
File directory = resolveDocumentId(parentDocumentId);
File file = new File(directory, displayName);
// If file already exists, append a number to the name
int i = 2;
while (file.exists()) {
file = new File(directory, displayName + " (" + i + ")");
i++;
}
try {
// Create the file or directory
if (mimeType.equals(DocumentsContract.Document.MIME_TYPE_DIR) ? file.mkdir() : file.createNewFile()) {
// Return the document ID of the new entity
if (!parentDocumentId.endsWith("/")) {
parentDocumentId = parentDocumentId + "/";
}
return parentDocumentId + file.getName();
}
} catch (IOException e) {
// Do nothing. We are throwing a FileNotFoundException later if the file could not be created.
}
throw new FileNotFoundException("Failed to create document in " + parentDocumentId + " with name " + displayName);
}
@Override
public final void deleteDocument(String documentId) throws FileNotFoundException {
File file = resolveDocumentId(documentId);
if (!deleteRecursively(file)) {
throw new FileNotFoundException("Failed to delete document " + documentId);
}
}
@Override
public final String getDocumentType(String documentId) throws FileNotFoundException {
return resolveMimeType(resolveDocumentId(documentId));
}
@Override
public final boolean isChildDocument(String parentDocumentId, String documentId) {
return documentId.startsWith(parentDocumentId);
}
@Override
public final String moveDocument(String sourceDocumentId, String sourceParentDocumentId, String targetParentDocumentId) throws FileNotFoundException {
File source = resolveDocumentId(sourceDocumentId);
File dest = resolveDocumentId(targetParentDocumentId);
File file = new File(dest, source.getName());
if (!file.exists() && source.renameTo(file)) {
// Return the new document ID
if (targetParentDocumentId.endsWith("/")) {
return targetParentDocumentId + file.getName();
}
return targetParentDocumentId + "/" + file.getName();
}
throw new FileNotFoundException("Failed to move document from " + sourceDocumentId + " to " + targetParentDocumentId);
}
@Override
public final ParcelFileDescriptor openDocument(String documentId, String mode, CancellationSignal signal) throws FileNotFoundException {
File file = resolveDocumentId(documentId);
return ParcelFileDescriptor.open(file, ParcelFileDescriptor.parseMode(mode));
}
@Override
public final Cursor queryChildDocuments(String parentDocumentId, String[] projection, String sortOrder) throws FileNotFoundException {
if (parentDocumentId.endsWith("/")) {
parentDocumentId = parentDocumentId.substring(0, parentDocumentId.length() - 1);
}
if (projection == null) {
projection = directoryColumns;
}
MatrixCursor cursor = new MatrixCursor(projection);
File children = resolveDocumentId(parentDocumentId);
// Collect all children
File[] files = children.listFiles();
if (files != null) {
for (File file : files) {
addRowForDocument(cursor, parentDocumentId + "/" + file.getName(), file);
}
}
return cursor;
}
@Override
public final Cursor queryDocument(String documentId, String[] projection) throws FileNotFoundException {
if (projection == null) {
projection = directoryColumns;
}
MatrixCursor cursor = new MatrixCursor(projection);
addRowForDocument(cursor, documentId, null);
return cursor;
}
@Override
public final Cursor queryRoots(String[] projection) {
ApplicationInfo info = Objects.requireNonNull(getContext()).getApplicationInfo();
String appName = info.loadLabel(getContext().getPackageManager()).toString();
if (projection == null) {
projection = rootColumns;
}
MatrixCursor cursor = new MatrixCursor(projection);
MatrixCursor.RowBuilder row = cursor.newRow();
row.add(DocumentsContract.Root.COLUMN_ROOT_ID, this.packageName);
row.add(DocumentsContract.Root.COLUMN_DOCUMENT_ID, this.packageName);
row.add(DocumentsContract.Root.COLUMN_SUMMARY, this.packageName);
row.add(DocumentsContract.Root.COLUMN_FLAGS,
DocumentsContract.Root.FLAG_LOCAL_ONLY |
DocumentsContract.Root.FLAG_SUPPORTS_IS_CHILD);
row.add(DocumentsContract.Root.COLUMN_TITLE, appName);
row.add(DocumentsContract.Root.COLUMN_MIME_TYPES, "*/*");
row.add(DocumentsContract.Root.COLUMN_ICON, info.icon);
return cursor;
}
@Override
public final void removeDocument(String documentId, String parentDocumentId) throws FileNotFoundException {
deleteDocument(documentId);
}
@Override
public final String renameDocument(String documentId, String displayName) throws FileNotFoundException {
File file = resolveDocumentId(documentId);
if (!file.renameTo(new File(file.getParentFile(), displayName))) {
throw new FileNotFoundException("Failed to rename document from " + documentId + " to " + displayName);
}
// Return the new document ID
return documentId.substring(0, documentId.lastIndexOf('/', documentId.length() - 2)) + "/" + displayName;
}
/**
* Resolve a file instance for a given document ID.
*
* @param fullContentPath The document ID to resolve.
* @return File object for the given document ID.
* @throws FileNotFoundException If the document ID is invalid or the file does not exist.
*/
private File resolveDocumentId(String fullContentPath) throws FileNotFoundException {
if (!fullContentPath.startsWith(this.packageName)) {
throw new FileNotFoundException(fullContentPath + " not found");
}
String path = fullContentPath.substring(this.packageName.length());
// Resolve the relative path within /data/data/{PKG}
File file;
if (path.equals("/") || path.isEmpty()) {
file = this.dataDirectory;
} else {
// Remove leading slash
String relativePath = path.substring(1);
file = new File(this.dataDirectory, relativePath);
}
if (!file.exists()) {
throw new FileNotFoundException(fullContentPath + " not found");
}
return file;
}
/**
* Add a row containing all file properties to a MatrixCursor for a given document ID.
*
* @param cursor The cursor to add the row to.
* @param documentId The document ID to add the row for.
* @param file The file to add the row for. If null, the file will be resolved from the document ID.
* @throws FileNotFoundException If the file does not exist.
*/
private void addRowForDocument(MatrixCursor cursor, String documentId, File file) throws FileNotFoundException {
if (file == null) {
file = resolveDocumentId(documentId);
}
int flags = 0;
if (file.isDirectory()) {
// Prefer list view for directories
flags = flags | DocumentsContract.Document.FLAG_DIR_PREFERS_LAST_MODIFIED;
}
if (file.canWrite()) {
if (file.isDirectory()) {
flags = flags | DocumentsContract.Document.FLAG_DIR_SUPPORTS_CREATE;
}
flags = flags | DocumentsContract.Document.FLAG_SUPPORTS_WRITE |
DocumentsContract.Document.FLAG_SUPPORTS_DELETE |
DocumentsContract.Document.FLAG_SUPPORTS_RENAME |
DocumentsContract.Document.FLAG_SUPPORTS_MOVE;
}
MatrixCursor.RowBuilder row = cursor.newRow();
row.add(DocumentsContract.Document.COLUMN_DOCUMENT_ID, documentId);
row.add(DocumentsContract.Document.COLUMN_DISPLAY_NAME, file.getName());
row.add(DocumentsContract.Document.COLUMN_SIZE, file.length());
row.add(DocumentsContract.Document.COLUMN_MIME_TYPE, resolveMimeType(file));
row.add(DocumentsContract.Document.COLUMN_LAST_MODIFIED, file.lastModified());
row.add(DocumentsContract.Document.COLUMN_FLAGS, flags);
// Custom columns
row.add("full_path", file.getAbsolutePath());
// Add lstat column
String path = file.getPath();
try {
StringBuilder sb = new StringBuilder();
StructStat lstat = Os.lstat(path);
sb.append(lstat.st_mode);
sb.append(";");
sb.append(lstat.st_uid);
sb.append(";");
sb.append(lstat.st_gid);
// Append symlink target if it is a symlink
if ((lstat.st_mode & S_IFLNK) == S_IFLNK) {
sb.append(";");
sb.append(Os.readlink(path));
}
row.add("lstat_info", sb.toString());
} catch (Exception ex) {
Log.e("InternalDocumentsProvider", "Failed to get lstat info for " + path, ex);
}
}
}

View File

@@ -6,6 +6,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.os.Build;
@@ -499,6 +500,12 @@ public class Utils {
);
}
public static boolean isDarkModeEnabled(Context context) {
Configuration config = context.getResources().getConfiguration();
final int currentNightMode = config.uiMode & Configuration.UI_MODE_NIGHT_MASK;
return currentNightMode == Configuration.UI_MODE_NIGHT_YES;
}
/**
* Automatically logs any exceptions the runnable throws.
*

View File

@@ -54,9 +54,7 @@ public class ReVancedAboutPreference extends Preference {
}
protected boolean isDarkModeEnabled() {
Configuration config = getContext().getResources().getConfiguration();
final int currentNightMode = config.uiMode & Configuration.UI_MODE_NIGHT_MASK;
return currentNightMode == Configuration.UI_MODE_NIGHT_YES;
return Utils.isDarkModeEnabled(getContext());
}
/**

View File

@@ -1,9 +1,20 @@
package app.revanced.extension.tiktok;
import static app.revanced.extension.shared.Utils.isDarkModeEnabled;
import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.ColorInt;
import app.revanced.extension.shared.settings.StringSetting;
public class Utils {
private static final long[] DEFAULT_MIN_MAX_VALUES = {0L, Long.MAX_VALUE};
// Edit: This could be handled using a custom Setting<Long[]> class
// that saves its value to preferences and JSON using the formatted String created here.
public static long[] parseMinMax(StringSetting setting) {
@@ -20,6 +31,29 @@ public class Utils {
}
setting.save("0-" + Long.MAX_VALUE);
return new long[]{0L, Long.MAX_VALUE};
return DEFAULT_MIN_MAX_VALUES;
}
// Colors picked by hand. These should be replaced with the styled resources TikTok uses.
private static final @ColorInt int TEXT_DARK_MODE_TITLE = Color.WHITE;
private static final @ColorInt int TEXT_DARK_MODE_SUMMARY
= Color.argb(255, 170, 170, 170);
private static final @ColorInt int TEXT_LIGHT_MODE_TITLE = Color.BLACK;
private static final @ColorInt int TEXT_LIGHT_MODE_SUMMARY
= Color.argb(255, 80, 80, 80);
public static void setTitleAndSummaryColor(Context context, View view) {
final boolean darkModeEnabled = isDarkModeEnabled(context);
TextView title = view.findViewById(android.R.id.title);
title.setTextColor(darkModeEnabled
? TEXT_DARK_MODE_TITLE
: TEXT_LIGHT_MODE_TITLE);
TextView summary = view.findViewById(android.R.id.summary);
summary.setTextColor(darkModeEnabled
? TEXT_DARK_MODE_SUMMARY
: TEXT_LIGHT_MODE_SUMMARY);
}
}

View File

@@ -1,17 +1,18 @@
package app.revanced.extension.tiktok.feedfilter;
import app.revanced.extension.tiktok.settings.Settings;
import com.ss.android.ugc.aweme.feed.model.Aweme;
import com.ss.android.ugc.aweme.feed.model.AwemeStatistics;
import static app.revanced.extension.tiktok.Utils.parseMinMax;
import app.revanced.extension.tiktok.Utils;
import app.revanced.extension.tiktok.settings.Settings;
public final class LikeCountFilter implements IFilter {
final long minLike;
final long maxLike;
LikeCountFilter() {
long[] minMax = parseMinMax(Settings.MIN_MAX_LIKES);
long[] minMax = Utils.parseMinMax(Settings.MIN_MAX_LIKES);
minLike = minMax[0];
maxLike = minMax[1];
}

View File

@@ -1,17 +1,17 @@
package app.revanced.extension.tiktok.feedfilter;
import app.revanced.extension.tiktok.Utils;
import app.revanced.extension.tiktok.settings.Settings;
import com.ss.android.ugc.aweme.feed.model.Aweme;
import com.ss.android.ugc.aweme.feed.model.AwemeStatistics;
import static app.revanced.extension.tiktok.Utils.parseMinMax;
public class ViewCountFilter implements IFilter {
final long minView;
final long maxView;
ViewCountFilter() {
long[] minMax = parseMinMax(Settings.MIN_MAX_VIEWS);
long[] minMax = Utils.parseMinMax(Settings.MIN_MAX_VIEWS);
minView = minMax[0];
maxView = minMax[1];
}

View File

@@ -19,7 +19,7 @@ public class Settings extends BaseSettings {
public static final BooleanSetting DOWNLOAD_WATERMARK = new BooleanSetting("down_watermark", TRUE);
public static final BooleanSetting CLEAR_DISPLAY = new BooleanSetting("clear_display", FALSE);
public static final FloatSetting REMEMBERED_SPEED = new FloatSetting("REMEMBERED_SPEED", 1.0f);
public static final BooleanSetting SIM_SPOOF = new BooleanSetting("simspoof", TRUE, true);
public static final BooleanSetting SIM_SPOOF = new BooleanSetting("simspoof", FALSE, true);
public static final StringSetting SIM_SPOOF_ISO = new StringSetting("simspoof_iso", "us");
public static final StringSetting SIMSPOOF_MCCMNC = new StringSetting("simspoof_mccmnc", "310160");
public static final StringSetting SIMSPOOF_OP_NAME = new StringSetting("simspoof_op_name", "T-Mobile");

View File

@@ -16,10 +16,10 @@ import android.widget.RadioButton;
import android.widget.RadioGroup;
import app.revanced.extension.shared.settings.StringSetting;
import app.revanced.extension.tiktok.Utils;
@SuppressWarnings("deprecation")
public class DownloadPathPreference extends DialogPreference {
private final Context context;
private final String[] entryValues = {"DCIM", "Movies", "Pictures"};
private String mValue;
@@ -29,11 +29,10 @@ public class DownloadPathPreference extends DialogPreference {
public DownloadPathPreference(Context context, String title, StringSetting setting) {
super(context);
this.context = context;
this.setTitle(title);
this.setSummary(Environment.getExternalStorageDirectory().getPath() + "/" + setting.get());
this.setKey(setting.key);
this.setValue(setting.get());
setTitle(title);
setSummary(Environment.getExternalStorageDirectory().getPath() + "/" + setting.get());
setKey(setting.key);
setValue(setting.get());
}
public String getValue() {
@@ -59,6 +58,7 @@ public class DownloadPathPreference extends DialogPreference {
childDownloadPath = getValue().substring(getValue().indexOf("/") + 1);
mediaPathIndex = findIndexOf(currentMedia);
Context context = getContext();
LinearLayout dialogView = new LinearLayout(context);
RadioGroup mediaPath = new RadioGroup(context);
mediaPath.setLayoutParams(new RadioGroup.LayoutParams(-1, -2));
@@ -79,12 +79,10 @@ public class DownloadPathPreference extends DialogPreference {
downloadPath.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
@@ -99,6 +97,13 @@ public class DownloadPathPreference extends DialogPreference {
return dialogView;
}
@Override
protected void onBindView(View view) {
super.onBindView(view);
Utils.setTitleAndSummaryColor(getContext(), view);
}
@Override
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
builder.setTitle("Download Path");

View File

@@ -2,16 +2,26 @@ package app.revanced.extension.tiktok.settings.preference;
import android.content.Context;
import android.preference.EditTextPreference;
import android.view.View;
import app.revanced.extension.shared.settings.StringSetting;
import app.revanced.extension.tiktok.Utils;
@SuppressWarnings("deprecation")
public class InputTextPreference extends EditTextPreference {
public InputTextPreference(Context context, String title, String summary, StringSetting setting) {
super(context);
this.setTitle(title);
this.setSummary(summary);
this.setKey(setting.key);
this.setText(setting.get());
setTitle(title);
setSummary(summary);
setKey(setting.key);
setText(setting.get());
}
@Override
protected void onBindView(View view) {
super.onBindView(view);
Utils.setTitleAndSummaryColor(getContext(), view);
}
}

View File

@@ -1,5 +1,6 @@
package app.revanced.extension.tiktok.settings.preference;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -14,11 +15,10 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import app.revanced.extension.shared.settings.StringSetting;
import app.revanced.extension.tiktok.Utils;
@SuppressWarnings("deprecation")
public class RangeValuePreference extends DialogPreference {
private final Context context;
private String minValue;
private String maxValue;
@@ -29,7 +29,6 @@ public class RangeValuePreference extends DialogPreference {
public RangeValuePreference(Context context, String title, String summary, StringSetting setting) {
super(context);
this.context = context;
setTitle(title);
setSummary(summary);
setKey(setting.key);
@@ -53,41 +52,52 @@ public class RangeValuePreference extends DialogPreference {
return mValue;
}
@SuppressLint("SetTextI18n")
@Override
protected View onCreateDialogView() {
minValue = getValue().split("-")[0];
maxValue = getValue().split("-")[1];
Context context = getContext();
LinearLayout dialogView = new LinearLayout(context);
dialogView.setOrientation(LinearLayout.VERTICAL);
// Min view
LinearLayout minView = new LinearLayout(context);
minView.setOrientation(LinearLayout.HORIZONTAL);
dialogView.addView(minView);
TextView min = new TextView(context);
min.setText("Min: ");
minView.addView(min);
EditText minEditText = new EditText(context);
minEditText.setInputType(InputType.TYPE_CLASS_NUMBER);
minEditText.setText(minValue);
minView.addView(minEditText);
dialogView.addView(minView);
// Max view
LinearLayout maxView = new LinearLayout(context);
maxView.setOrientation(LinearLayout.HORIZONTAL);
dialogView.addView(maxView);
TextView max = new TextView(context);
max.setText("Max: ");
maxView.addView(max);
EditText maxEditText = new EditText(context);
maxEditText.setInputType(InputType.TYPE_CLASS_NUMBER);
maxEditText.setText(maxValue);
maxView.addView(maxEditText);
dialogView.addView(maxView);
minEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
@@ -98,12 +108,10 @@ public class RangeValuePreference extends DialogPreference {
maxEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
@@ -111,12 +119,21 @@ public class RangeValuePreference extends DialogPreference {
maxValue = editable.toString();
}
});
return dialogView;
}
@Override
protected void onBindView(View view) {
super.onBindView(view);
Utils.setTitleAndSummaryColor(getContext(), view);
}
@Override
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
builder.setPositiveButton(android.R.string.ok, (dialog, which) -> this.onClick(dialog, DialogInterface.BUTTON_POSITIVE));
builder.setPositiveButton(android.R.string.ok, (dialog, which)
-> this.onClick(dialog, DialogInterface.BUTTON_POSITIVE));
builder.setNegativeButton(android.R.string.cancel, null);
}

View File

@@ -18,14 +18,12 @@ import org.jetbrains.annotations.NotNull;
public class ReVancedPreferenceFragment extends AbstractPreferenceFragment {
@Override
protected void syncSettingWithPreference(@NonNull @NotNull Preference pref,
@NonNull @NotNull Setting<?> setting,
protected void syncSettingWithPreference(@NonNull Preference pref,
@NonNull Setting<?> setting,
boolean applySettingToPreference) {
if (pref instanceof RangeValuePreference) {
RangeValuePreference rangeValuePref = (RangeValuePreference) pref;
if (pref instanceof RangeValuePreference rangeValuePref) {
Setting.privateSetValueFromString(setting, rangeValuePref.getValue());
} else if (pref instanceof DownloadPathPreference) {
DownloadPathPreference downloadPathPref = (DownloadPathPreference) pref;
} else if (pref instanceof DownloadPathPreference downloadPathPref) {
Setting.privateSetValueFromString(setting, downloadPathPref.getValue());
} else {
super.syncSettingWithPreference(pref, setting, applySettingToPreference);

View File

@@ -1,13 +1,15 @@
package app.revanced.extension.tiktok.settings.preference;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import java.util.Map;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.settings.preference.ReVancedAboutPreference;
import app.revanced.extension.tiktok.Utils;
@SuppressWarnings("deprecation")
public class ReVancedTikTokAboutPreference extends ReVancedAboutPreference {
/**
@@ -23,22 +25,11 @@ public class ReVancedTikTokAboutPreference extends ReVancedAboutPreference {
"revanced_settings_about_links_header", "Official links"
);
{
//noinspection deprecation
setTitle("About");
}
public ReVancedTikTokAboutPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public ReVancedTikTokAboutPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public ReVancedTikTokAboutPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ReVancedTikTokAboutPreference(Context context) {
super(context);
setTitle("About");
setSummary("About ReVanced");
}
@Override
@@ -52,4 +43,11 @@ public class ReVancedTikTokAboutPreference extends ReVancedAboutPreference {
return String.format(format, args);
}
@Override
protected void onBindView(View view) {
super.onBindView(view);
Utils.setTitleAndSummaryColor(getContext(), view);
}
}

View File

@@ -2,16 +2,26 @@ package app.revanced.extension.tiktok.settings.preference;
import android.content.Context;
import android.preference.SwitchPreference;
import android.view.View;
import app.revanced.extension.shared.settings.BooleanSetting;
import app.revanced.extension.tiktok.Utils;
@SuppressWarnings("deprecation")
public class TogglePreference extends SwitchPreference {
public TogglePreference(Context context, String title, String summary, BooleanSetting setting) {
super(context);
this.setTitle(title);
this.setSummary(summary);
this.setKey(setting.key);
this.setChecked(setting.get());
setTitle(title);
setSummary(summary);
setKey(setting.key);
setChecked(setting.get());
}
@Override
protected void onBindView(View view) {
super.onBindView(view);
Utils.setTitleAndSummaryColor(getContext(), view);
}
}

View File

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

View File

@@ -60,6 +60,10 @@ public final class app/revanced/patches/all/misc/directory/ChangeDataDirectoryLo
public static final fun getChangeDataDirectoryLocationPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/all/misc/directory/documentsprovider/ExportInternalDataDocumentsProviderPatchKt {
public static final fun getExportInternalDataDocumentsProviderPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
}
public final class app/revanced/patches/all/misc/hex/HexPatchKt {
public static final fun getHexPatch ()Lapp/revanced/patcher/patch/RawResourcePatch;
}

View File

@@ -1,58 +1,19 @@
package app.revanced.patches.all.misc.directory
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.all.misc.transformation.transformInstructionsPatch
import app.revanced.util.getReference
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
import com.android.tools.smali.dexlib2.immutable.reference.ImmutableMethodReference
import com.android.tools.smali.dexlib2.util.MethodUtil
import app.revanced.patches.all.misc.directory.documentsprovider.exportInternalDataDocumentsProviderPatch
@Suppress("unused")
@Deprecated(
"Superseded by internalDataDocumentsProviderPatch",
ReplaceWith("internalDataDocumentsProviderPatch"),
)
val changeDataDirectoryLocationPatch = bytecodePatch(
name = "Change data directory location",
// name = "Change data directory location",
description = "Changes the data directory in the application from " +
"the app internal storage directory to /sdcard/android/data accessible by root-less devices." +
"Using this patch can cause unexpected issues with some apps.",
use = false,
) {
dependsOn(
transformInstructionsPatch(
filterMap = filter@{ _, _, instruction, instructionIndex ->
val reference = instruction.getReference<MethodReference>() ?: return@filter null
if (!MethodUtil.methodSignaturesMatch(reference, MethodCall.GetDir.reference)) {
return@filter null
}
return@filter instructionIndex
},
transform = { method, index ->
val getDirInstruction = method.getInstruction<Instruction35c>(index)
val contextRegister = getDirInstruction.registerC
val dataRegister = getDirInstruction.registerD
method.replaceInstruction(
index,
"invoke-virtual { v$contextRegister, v$dataRegister }, " +
"Landroid/content/Context;->getExternalFilesDir(Ljava/lang/String;)Ljava/io/File;",
)
},
),
)
}
private enum class MethodCall(
val reference: MethodReference,
) {
GetDir(
ImmutableMethodReference(
"Landroid/content/Context;",
"getDir",
listOf("Ljava/lang/String;", "I"),
"Ljava/io/File;",
),
),
dependsOn(exportInternalDataDocumentsProviderPatch)
}

View File

@@ -0,0 +1,58 @@
package app.revanced.patches.all.misc.directory.documentsprovider
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patcher.patch.resourcePatch
import app.revanced.util.asSequence
import app.revanced.util.getNode
@Suppress("unused")
val exportInternalDataDocumentsProviderPatch = resourcePatch(
name = "Export internal data documents provider",
description = "Exports a documents provider that grants access to the internal data directory of this app " +
"to file managers and other apps that support the Storage Access Framework.",
use = false,
) {
dependsOn(
bytecodePatch {
extendWith("extensions/all/misc/directory/export-internal-data-documents-provider.rve")
},
)
execute {
val documentsProviderClass =
"app.revanced.extension.all.misc.directory.documentsprovider.InternalDataDocumentsProvider"
document("AndroidManifest.xml").use { document ->
// Check if the provider is already declared
if (document.getElementsByTagName("provider")
.asSequence()
.any { it.attributes.getNamedItem("android:name")?.nodeValue == documentsProviderClass }
) {
return@execute
}
val authority =
document.getNode("manifest").attributes.getNamedItem("package").let {
// Select a URI authority name that is unique to the current app
"${it.nodeValue}.$documentsProviderClass"
}
// Register the documents provider
with(document.getNode("application")) {
document.createElement("provider").apply {
setAttribute("android:name", documentsProviderClass)
setAttribute("android:authorities", authority)
setAttribute("android:exported", "true")
setAttribute("android:grantUriPermissions", "true")
setAttribute("android:permission", "android.permission.MANAGE_DOCUMENTS")
document.createElement("intent-filter").apply {
document.createElement("action").apply {
setAttribute("android:name", "android.content.action.DOCUMENTS_PROVIDER")
}.let(this::appendChild)
}.let(this::appendChild)
}.let(this::appendChild)
}
}
}
}

View File

@@ -710,6 +710,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_popup_panels_summary_off">Oynadıcıılan pəncərə panelləri göstərilir</string>
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
<string name="revanced_open_videos_fullscreen_portrait_title">Videoları tam ekran təsvirində aç</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Videolar tam ekranda açılır</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Videolar tam ekranda açılmır</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">Oynadıcı örtüyünün qeyri-şəffaflığı</string>
@@ -1202,11 +1205,68 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_user_dialog_message">Bu seçimi bağlamaq, video oynatma problemlərinə səbəb olar.</string>
<string name="revanced_spoof_video_streams_client_title">İlkin qəbuledici</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">Məcburi AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video kodlama AVC (H.264) -yə məcbur edilir</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video kodlama birbaşa yoxlanılır</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Bunu aktivləşdirmə batareya ömrün yaxşılaşdıra və oynatma donmasını düzəldə bilər.\n\nAVC maksimum 1080p görüntü imkanına malikdir, Opus səs kodlama əlçatan deyil və video oynatma VP9 və ya AV1-dən daha çox internet resursu işlədəcək.</string>
<string name="revanced_spoof_video_streams_about_ios_title">iOS saxtakarlığı yan təsirləri</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• Uşaq videoları oxudulmaya bilər\n• Canlı yayımlar başdan başlayır\n• Videolar 1 saniyə tez bitə bilər</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• Uşaq videoları oynadılmaya bilər\n• Canlı yayımlar başdan başlayır\n• Videolar 1 saniyə tez bitə bilər</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR saxtakarlığı yan təsirləri</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Uşaq videoları oynadılmaya bilər\n• Səs treki menyusu əskikdir\n• Sabit səs həcmi əlçatan deyil</string>
<string name="revanced_spoof_video_streams_language_">Video yayımları saxtalaşdırılır</string>
<string name="revanced_spoof_video_streams_language_title">Üstünlük verilən səs yayımı dili</string>
<string name="revanced_spoof_video_streams_language_DEFAULT">Tətbiq dili</string>
<string name="revanced_spoof_video_streams_language_AR">Ərəbcə</string>
<string name="revanced_spoof_video_streams_language_AZ">Azərbaycanca</string>
<string name="revanced_spoof_video_streams_language_BG">Bolqarca</string>
<string name="revanced_spoof_video_streams_language_BN">Benqalca</string>
<string name="revanced_spoof_video_streams_language_CA">Katalanca</string>
<string name="revanced_spoof_video_streams_language_CS">Çexcə</string>
<string name="revanced_spoof_video_streams_language_DA">Danimarka dili</string>
<string name="revanced_spoof_video_streams_language_DE">Almanca</string>
<string name="revanced_spoof_video_streams_language_EL">Yunanca</string>
<string name="revanced_spoof_video_streams_language_EN">İngiliscə</string>
<string name="revanced_spoof_video_streams_language_ES">İspanca</string>
<string name="revanced_spoof_video_streams_language_ET">Estonca</string>
<string name="revanced_spoof_video_streams_language_FA">Farsca</string>
<string name="revanced_spoof_video_streams_language_FI">Fincə</string>
<string name="revanced_spoof_video_streams_language_FR">Fransızca</string>
<string name="revanced_spoof_video_streams_language_GU">Qücərat dili</string>
<string name="revanced_spoof_video_streams_language_HI">Hindcə</string>
<string name="revanced_spoof_video_streams_language_HR">Xorvatca</string>
<string name="revanced_spoof_video_streams_language_HU">Macarca</string>
<string name="revanced_spoof_video_streams_language_ID">İndoneziya dili</string>
<string name="revanced_spoof_video_streams_language_IT">İtalyanca</string>
<string name="revanced_spoof_video_streams_language_JA">Yaponca</string>
<string name="revanced_spoof_video_streams_language_KK">Qazaxca</string>
<string name="revanced_spoof_video_streams_language_KO">Koreyaca</string>
<string name="revanced_spoof_video_streams_language_LT">Litvaca</string>
<string name="revanced_spoof_video_streams_language_LV">Letonca</string>
<string name="revanced_spoof_video_streams_language_MK">Makedon Dili</string>
<string name="revanced_spoof_video_streams_language_MN">Monqolca</string>
<string name="revanced_spoof_video_streams_language_MR">Marathi dili</string>
<string name="revanced_spoof_video_streams_language_MS">Malay dili</string>
<string name="revanced_spoof_video_streams_language_MY">Birman dili</string>
<string name="revanced_spoof_video_streams_language_NL">Hollandca</string>
<string name="revanced_spoof_video_streams_language_OR">Oriya dili</string>
<string name="revanced_spoof_video_streams_language_PA">Pəncabca</string>
<string name="revanced_spoof_video_streams_language_PL">Polyak dili</string>
<string name="revanced_spoof_video_streams_language_PT_BR">Portuqalca (Braziliya)</string>
<string name="revanced_spoof_video_streams_language_PT_PT">Portuqalca (Portəgiz)</string>
<string name="revanced_spoof_video_streams_language_RO">Rumınca</string>
<string name="revanced_spoof_video_streams_language_RU">Rusca</string>
<string name="revanced_spoof_video_streams_language_SK">Slovak dili</string>
<string name="revanced_spoof_video_streams_language_SL">Sloven dili</string>
<string name="revanced_spoof_video_streams_language_SR">Serbcə</string>
<string name="revanced_spoof_video_streams_language_SV">İsveçcə</string>
<string name="revanced_spoof_video_streams_language_SW">Suahili dili</string>
<string name="revanced_spoof_video_streams_language_TA">Tamilcə</string>
<string name="revanced_spoof_video_streams_language_TE">Teluquca</string>
<string name="revanced_spoof_video_streams_language_TH">Tay dili</string>
<string name="revanced_spoof_video_streams_language_TR">Türkcə</string>
<string name="revanced_spoof_video_streams_language_UK">Ukrayna dili</string>
<string name="revanced_spoof_video_streams_language_UR">Urduca</string>
<string name="revanced_spoof_video_streams_language_VI">Vyetnamca</string>
<string name="revanced_spoof_video_streams_language_ZH">Çincə</string>
</patch>
</app>
<app id="twitch">

View File

@@ -710,6 +710,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_popup_panels_summary_off">Изскачащите панели на плейъра се показват</string>
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
<string name="revanced_open_videos_fullscreen_portrait_title">Отваряне на видеоклипове в портретен режим на цял екран</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Видеоклиповете се отварят на цял екран</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Видеоклиповете Не се отварят на цял екран</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">Прозрачност на настройките в Плеара</string>
@@ -1202,10 +1205,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_user_dialog_message">Деактивирането на тази настройка ще доведе до проблеми с възпроизвеждането на видео.</string>
<string name="revanced_spoof_video_streams_client_title">Клиент по подразбиране</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">Принудително AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Видео кодек по подразбиране AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Видео кодекът се определя автоматично</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Активирането на това може да подобри живота на батерията и да коригира прекъсванията при възпроизвеждане.\n\nAVC има максимална разделителна способност от 1080p, аудиокодек Opus не е наличен и възпроизвеждането на видео ще използва повече интернет данни от VP9 или AV1.</string>
<string name="revanced_spoof_video_streams_about_ios_title">ранични ефекти от подмяната на iOS</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• Частните видеоклипове за деца може да не се възпроизвеждат\n• Потоците на живо започват отначало\n• Видеоклиповете може да свършват 1 секунда по-рано</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Странични ефекти от подправяне на Android VR</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Детските видеоклипове може да не се възпроизвеждат\n• Липсва менюто за аудио запис\n• Не е налична стабилна сила на звука</string>
<string name="revanced_spoof_video_streams_language_">Видео потоците са подправени</string>
<string name="revanced_spoof_video_streams_language_title">Предпочитан език за аудио поток</string>
<string name="revanced_spoof_video_streams_language_DEFAULT">Език на приложението</string>
<string name="revanced_spoof_video_streams_language_BG">Български</string>
</patch>
</app>
<app id="twitch">

View File

@@ -1241,9 +1241,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_language_KO">Κορεάτικα</string>
<string name="revanced_spoof_video_streams_language_LT">Λιθουανικά</string>
<string name="revanced_spoof_video_streams_language_LV">Λετονικά</string>
<string name="revanced_spoof_video_streams_language_MK">Σλαβομακεδονικά</string>
<string name="revanced_spoof_video_streams_language_MK">Μακεδονικά</string>
<string name="revanced_spoof_video_streams_language_MN">Μογγολικά</string>
<string name="revanced_spoof_video_streams_language_MR">Μαραθικά</string>
<string name="revanced_spoof_video_streams_language_MR">Μαράτι</string>
<string name="revanced_spoof_video_streams_language_MS">Μαλαισιανά</string>
<string name="revanced_spoof_video_streams_language_MY">Βιρμανικά</string>
<string name="revanced_spoof_video_streams_language_NL">Ολλανδικά</string>

View File

@@ -710,6 +710,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_popup_panels_summary_off">A lejátszó előugró panelei megjelennek</string>
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
<string name="revanced_open_videos_fullscreen_portrait_title">Nyissa meg a videókat teljes képernyős portréban</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">A videók teljes képernyőn nyílnak meg</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">A videók nem nyílnak meg teljes képernyőn</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">Lejátszó fedőrétegének átlátszatlansága</string>
@@ -1202,11 +1205,68 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_user_dialog_message">A beállítás kikapcsolása videolejátszási problémákat okozhat.</string>
<string name="revanced_spoof_video_streams_client_title">Alapértelmezett kliens</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">AVC (H.264) kényszerítése</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">A videokodek AVC-re kényszerítve (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">A videokodek meghatározása automatikusan történik</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Ennek engedélyezése javíthatja az akkumulátor élettartamát, és kijavíthatja a lejátszás akadozását.\n\nAz AVC maximális felbontása 1080p, az Opus audiokodek nem érhető el, és a videolejátszás több internetadatot használ, mint a VP9 vagy az AV1.</string>
<string name="revanced_spoof_video_streams_about_ios_title">iOS hamisítási mellékhatások</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• Előfordulhat, hogy a privát gyerekeknek szóló videók nem játszhatók le\n• Az élő közvetítések elölről kezdődnek\n• A videók 1 másodperccel korábban véget érhetnek</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR-hamisítási mellékhatások</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Előfordulhat, hogy a gyerekvideókat nem lehet lejátszani\n• Hiányzik a hangsáv menü\n• A stabil hangerő nem érhető el</string>
<string name="revanced_spoof_video_streams_language_">A videó stream hamisítva</string>
<string name="revanced_spoof_video_streams_language_title">Előnyben részesített hangfolyam nyelv</string>
<string name="revanced_spoof_video_streams_language_DEFAULT">Alkalmazás nyelve</string>
<string name="revanced_spoof_video_streams_language_AR">Arab</string>
<string name="revanced_spoof_video_streams_language_AZ">Azerbajdzsáni</string>
<string name="revanced_spoof_video_streams_language_BG">Bolgár</string>
<string name="revanced_spoof_video_streams_language_BN">Bengáli</string>
<string name="revanced_spoof_video_streams_language_CA">Katalán</string>
<string name="revanced_spoof_video_streams_language_CS">Cseh</string>
<string name="revanced_spoof_video_streams_language_DA">Dán</string>
<string name="revanced_spoof_video_streams_language_DE">Német</string>
<string name="revanced_spoof_video_streams_language_EL">Görög</string>
<string name="revanced_spoof_video_streams_language_EN">Angol</string>
<string name="revanced_spoof_video_streams_language_ES">Spanyol</string>
<string name="revanced_spoof_video_streams_language_ET">Észt</string>
<string name="revanced_spoof_video_streams_language_FA">Perzsa</string>
<string name="revanced_spoof_video_streams_language_FI">Finn</string>
<string name="revanced_spoof_video_streams_language_FR">Francia</string>
<string name="revanced_spoof_video_streams_language_GU">Gudzsaráti</string>
<string name="revanced_spoof_video_streams_language_HI">Hindi</string>
<string name="revanced_spoof_video_streams_language_HR">Horvát</string>
<string name="revanced_spoof_video_streams_language_HU">Magyar</string>
<string name="revanced_spoof_video_streams_language_ID">Indonéz</string>
<string name="revanced_spoof_video_streams_language_IT">Olasz</string>
<string name="revanced_spoof_video_streams_language_JA">Japán</string>
<string name="revanced_spoof_video_streams_language_KK">Kazah</string>
<string name="revanced_spoof_video_streams_language_KO">Koreai</string>
<string name="revanced_spoof_video_streams_language_LT">Litván</string>
<string name="revanced_spoof_video_streams_language_LV">Lett</string>
<string name="revanced_spoof_video_streams_language_MK">Macedón</string>
<string name="revanced_spoof_video_streams_language_MN">Mongol</string>
<string name="revanced_spoof_video_streams_language_MR">Maráthi</string>
<string name="revanced_spoof_video_streams_language_MS">Maláj</string>
<string name="revanced_spoof_video_streams_language_MY">Burmai</string>
<string name="revanced_spoof_video_streams_language_NL">Holland</string>
<string name="revanced_spoof_video_streams_language_OR">Odia</string>
<string name="revanced_spoof_video_streams_language_PA">Pandzsábi</string>
<string name="revanced_spoof_video_streams_language_PL">Lengyel</string>
<string name="revanced_spoof_video_streams_language_PT_BR">Portugál (Brazil)</string>
<string name="revanced_spoof_video_streams_language_PT_PT">Portugál (Portugália)</string>
<string name="revanced_spoof_video_streams_language_RO">Román</string>
<string name="revanced_spoof_video_streams_language_RU">Orosz</string>
<string name="revanced_spoof_video_streams_language_SK">Szlovák</string>
<string name="revanced_spoof_video_streams_language_SL">Szlovén</string>
<string name="revanced_spoof_video_streams_language_SR">Szerb</string>
<string name="revanced_spoof_video_streams_language_SV">Svéd</string>
<string name="revanced_spoof_video_streams_language_SW">Szuahéli</string>
<string name="revanced_spoof_video_streams_language_TA">Tamil</string>
<string name="revanced_spoof_video_streams_language_TE">Telugu</string>
<string name="revanced_spoof_video_streams_language_TH">Tháj</string>
<string name="revanced_spoof_video_streams_language_TR">Török</string>
<string name="revanced_spoof_video_streams_language_UK">Ukrán</string>
<string name="revanced_spoof_video_streams_language_UR">Urdu</string>
<string name="revanced_spoof_video_streams_language_VI">Vietnámi</string>
<string name="revanced_spoof_video_streams_language_ZH">Kínai</string>
</patch>
</app>
<app id="twitch">

View File

@@ -710,6 +710,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_popup_panels_summary_off">Panel popup pemutar ditampilkan</string>
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
<string name="revanced_open_videos_fullscreen_portrait_title">Buka video dalam potret layar penuh</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Video terbuka dalam layar penuh</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Video tidak terbuka dalam layar penuh</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">Opasitas hamparan pemutar</string>
@@ -1202,11 +1205,68 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_user_dialog_message">Mematikan pengaturan ini dapat menyebabkan masalah pemutaran video.</string>
<string name="revanced_spoof_video_streams_client_title">Klien bawaan</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">Paksa AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Kodek video dipaksa ke AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Kodek video ditentukan otomatis</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Mengaktifkan ini dapat meningkatkan daya tahan baterai dan memperbaiki pemutaran yang tersendat-sendat.\n\nAVC memiliki resolusi maksimum 1080p, kodek audio Opus tidak tersedia, dan pemutaran video akan menggunakan lebih banyak data internet daripada VP9 atau AV1.</string>
<string name="revanced_spoof_video_streams_about_ios_title">Efek samping pemalsuan iOS</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• Video privat anak-anak tidak dapat diputar\n• Siaran langsung dimulai dari awal\n• Video akan berakhir 1 detik lebih awal</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Efek samping pemalsuan Android VR</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Video anak-anak mungkin tidak dapat diputar\n• Menu trek audio tidak ada\n• Volume stabil tidak tersedia</string>
<string name="revanced_spoof_video_streams_language_">Aliran video dipalsukan</string>
<string name="revanced_spoof_video_streams_language_title">Bahasa aliran audio yang disukai</string>
<string name="revanced_spoof_video_streams_language_DEFAULT">Bahasa aplikasi</string>
<string name="revanced_spoof_video_streams_language_AR">Arab</string>
<string name="revanced_spoof_video_streams_language_AZ">Azerbaijan</string>
<string name="revanced_spoof_video_streams_language_BG">Bulgaria</string>
<string name="revanced_spoof_video_streams_language_BN">Bengali</string>
<string name="revanced_spoof_video_streams_language_CA">Catalan</string>
<string name="revanced_spoof_video_streams_language_CS">Ceko</string>
<string name="revanced_spoof_video_streams_language_DA">Denmark</string>
<string name="revanced_spoof_video_streams_language_DE">Jerman</string>
<string name="revanced_spoof_video_streams_language_EL">Yunani</string>
<string name="revanced_spoof_video_streams_language_EN">Inggris</string>
<string name="revanced_spoof_video_streams_language_ES">Spanyol</string>
<string name="revanced_spoof_video_streams_language_ET">Estonia</string>
<string name="revanced_spoof_video_streams_language_FA">Persia</string>
<string name="revanced_spoof_video_streams_language_FI">Finlandia</string>
<string name="revanced_spoof_video_streams_language_FR">Perancis</string>
<string name="revanced_spoof_video_streams_language_GU">Gujarat</string>
<string name="revanced_spoof_video_streams_language_HI">Hindi</string>
<string name="revanced_spoof_video_streams_language_HR">Kroasia</string>
<string name="revanced_spoof_video_streams_language_HU">Hungaria</string>
<string name="revanced_spoof_video_streams_language_ID">Indonesia</string>
<string name="revanced_spoof_video_streams_language_IT">Italia</string>
<string name="revanced_spoof_video_streams_language_JA">Jepang</string>
<string name="revanced_spoof_video_streams_language_KK">Kazakh</string>
<string name="revanced_spoof_video_streams_language_KO">Korea</string>
<string name="revanced_spoof_video_streams_language_LT">Lithuania</string>
<string name="revanced_spoof_video_streams_language_LV">Latvia</string>
<string name="revanced_spoof_video_streams_language_MK">Makedonia</string>
<string name="revanced_spoof_video_streams_language_MN">Mongolia</string>
<string name="revanced_spoof_video_streams_language_MR">Marathi</string>
<string name="revanced_spoof_video_streams_language_MS">Melayu</string>
<string name="revanced_spoof_video_streams_language_MY">Myanmar</string>
<string name="revanced_spoof_video_streams_language_NL">Belanda</string>
<string name="revanced_spoof_video_streams_language_OR">Oriya</string>
<string name="revanced_spoof_video_streams_language_PA">Punjabi</string>
<string name="revanced_spoof_video_streams_language_PL">Polandia</string>
<string name="revanced_spoof_video_streams_language_PT_BR">Portugis (Brasil)</string>
<string name="revanced_spoof_video_streams_language_PT_PT">Portugis (Portugal)</string>
<string name="revanced_spoof_video_streams_language_RO">Rumania</string>
<string name="revanced_spoof_video_streams_language_RU">Rusia</string>
<string name="revanced_spoof_video_streams_language_SK">Slovakia</string>
<string name="revanced_spoof_video_streams_language_SL">Slovene</string>
<string name="revanced_spoof_video_streams_language_SR">Serbia</string>
<string name="revanced_spoof_video_streams_language_SV">Swedia</string>
<string name="revanced_spoof_video_streams_language_SW">Swahili</string>
<string name="revanced_spoof_video_streams_language_TA">Tamil</string>
<string name="revanced_spoof_video_streams_language_TE">Telugu</string>
<string name="revanced_spoof_video_streams_language_TH">Thai</string>
<string name="revanced_spoof_video_streams_language_TR">Turki</string>
<string name="revanced_spoof_video_streams_language_UK">Ukraina</string>
<string name="revanced_spoof_video_streams_language_UR">Urdu</string>
<string name="revanced_spoof_video_streams_language_VI">Vietnam</string>
<string name="revanced_spoof_video_streams_language_ZH">China</string>
</patch>
</app>
<app id="twitch">

View File

@@ -205,20 +205,20 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_quick_actions_summary_on">Le azioni rapide sono nascoste</string>
<string name="revanced_hide_quick_actions_summary_off">Le azioni rapide sono visibili</string>
<string name="revanced_hide_related_videos_title">Nascondi video correlati nelle azioni rapide</string>
<string name="revanced_hide_related_videos_summary_on">Video correlati nascosti</string>
<string name="revanced_hide_related_videos_summary_on">I video correlati sono nascosti</string>
<string name="revanced_hide_related_videos_summary_off">Video correlati visibili</string>
<string name="revanced_hide_image_shelf_title">Nascondi pubblicità con immagini nei risultati di ricerca</string>
<string name="revanced_hide_image_shelf_summary_on">Le pubblicità con immagini sono nascoste </string>
<string name="revanced_hide_image_shelf_summary_off">Le pubblicità con immagini sono visibili </string>
<string name="revanced_hide_latest_posts_ads_title">Nascondi i post più recenti</string>
<string name="revanced_hide_latest_posts_ads_summary_on">Gli ultimi post sono nascosti</string>
<string name="revanced_hide_latest_posts_ads_summary_off">Gli ultimi post sono mostrati</string>
<string name="revanced_hide_mix_playlists_title">Nascondi playlist mix</string>
<string name="revanced_hide_mix_playlists_summary_on">Le playlist Mix sono nascoste</string>
<string name="revanced_hide_mix_playlists_summary_off">Vengono mostrate playlist di Mix</string>
<string name="revanced_hide_artist_cards_title">Nascondi le carte artista</string>
<string name="revanced_hide_artist_cards_summary_on">Le carte dell\'artista sono nascoste</string>
<string name="revanced_hide_artist_cards_summary_off">Vengono mostrate le carte dell\'artista</string>
<string name="revanced_hide_latest_posts_ads_summary_on">I post più recenti sono nascosti</string>
<string name="revanced_hide_latest_posts_ads_summary_off">I post più recenti sono visibili</string>
<string name="revanced_hide_mix_playlists_title">Nascondi le playlist miste</string>
<string name="revanced_hide_mix_playlists_summary_on">Le playlist miste sono nascoste</string>
<string name="revanced_hide_mix_playlists_summary_off">Le playlist miste sono visibili</string>
<string name="revanced_hide_artist_cards_title">Nascondi le schede artista</string>
<string name="revanced_hide_artist_cards_summary_on">Le schede artista sono nascoste</string>
<string name="revanced_hide_artist_cards_summary_off">Le schede artista sono visibili</string>
<string name="revanced_hide_attributes_section_title">Nascondi la sezione attributi</string>
<string name="revanced_hide_attributes_section_summary_on">Le sezioni \'Luoghi in evidenza\', Giochi e Musica sono nascoste</string>
<string name="revanced_hide_attributes_section_summary_off">Le sezioni \'Luoghi in evidenza\', Giochi e Musica sono visibili</string>
@@ -324,9 +324,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_paid_promotion_label_title">Nascondi etichetta promozione a pagamento</string>
<string name="revanced_hide_paid_promotion_label_summary_on">L\'etichetta della promozione a pagamento è nascosta</string>
<string name="revanced_hide_paid_promotion_label_summary_off">L\'etichetta della promozione a pagamento è visibile</string>
<string name="revanced_hide_self_sponsor_ads_title">Nascondi le carte autosponsorizzate</string>
<string name="revanced_hide_self_sponsor_ads_summary_on">Le carte autosponsorizzate sono nascoste</string>
<string name="revanced_hide_self_sponsor_ads_summary_off">Vengono mostrate le carte autosponsorizzate</string>
<string name="revanced_hide_self_sponsor_ads_title">Nascondi le schede autopromozionali</string>
<string name="revanced_hide_self_sponsor_ads_summary_on">Le schede autopromozionali sono nascoste</string>
<string name="revanced_hide_self_sponsor_ads_summary_off">Le schede autopromozionali sono visibili</string>
<string name="revanced_hide_products_banner_title">Nascondi banner per visualizzare i prodotti</string>
<string name="revanced_hide_products_banner_summary_on">Il banner è nascosto</string>
<string name="revanced_hide_products_banner_summary_off">Il banner è visibile</string>
@@ -710,9 +710,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_popup_panels_summary_off">I pannelli popup del player sono visibili</string>
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
<string name="revanced_open_videos_fullscreen_portrait_title">Apri video in verticale a schermo intero</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Video aperti a schermo intero</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">I video non aprono schermo intero</string>
<string name="revanced_open_videos_fullscreen_portrait_title">Apri i video in verticale a schermo intero</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">I video vengono aperti a schermo intero</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">I video non vengono aperti a schermo intero</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">Opacità sovrapposizione del player</string>
@@ -1207,16 +1207,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_ios_force_avc_title">Forza AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Il codec video è forzato ad AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Il codec video viene determinato automaticamente</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Abilitando questo si potrebbe migliorare la durata della batteria e correggere la riproduzione della balbuzia.\n\nAVC ha una risoluzione massima di 1080p, il codec audio Opus non è disponibile, e la riproduzione video utilizzerà più dati internet di VP9 o AV1.</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">L\'attivazione di questa impostazione potrebbe migliorare la durata della batteria e risolvere il problema della riproduzione a scatti.\n\nNota: AVC ha una risoluzione massima di 1080p, il codec Opus non è disponibile e la riproduzione userà più dati internet rispetto a VP9 o AV1.</string>
<string name="revanced_spoof_video_streams_about_ios_title">Effetti collaterali simulazione iOS</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• I video privati per bambini potrebbero non riprodurre\n• Livestreams start from the beginning\n• Video potrebbero terminare 1 secondo presto</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• I video privati per bambini potrebbero non essere riprodotti\n• Le dirette iniziano dall\'inizio\n• I video potrebbero terminare 1 secondo prima</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Effetti collaterali simulazione Android VR</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• I video per bambini potrebbero non riprodurre\n• Il menu traccia audio è mancante\n• Volume stabile non è disponibile</string>
<string name="revanced_spoof_video_streams_language_">Il client del flusso video è simulato</string>
<string name="revanced_spoof_video_streams_language_title">Lingua del flusso audio preferita</string>
<string name="revanced_spoof_video_streams_language_DEFAULT">Lingua app</string>
<string name="revanced_spoof_video_streams_language_AR">Arabo</string>
<string name="revanced_spoof_video_streams_language_AZ">Azerbaigian</string>
<string name="revanced_spoof_video_streams_language_AZ">Azerbaigiano</string>
<string name="revanced_spoof_video_streams_language_BG">Bulgaro</string>
<string name="revanced_spoof_video_streams_language_BN">Bengalese</string>
<string name="revanced_spoof_video_streams_language_CA">Catalano</string>
@@ -1229,7 +1229,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_language_ET">Estone</string>
<string name="revanced_spoof_video_streams_language_FA">Persiano</string>
<string name="revanced_spoof_video_streams_language_FI">Finlandese</string>
<string name="revanced_spoof_video_streams_language_FR">Français</string>
<string name="revanced_spoof_video_streams_language_FR">Francese</string>
<string name="revanced_spoof_video_streams_language_GU">Gujarati</string>
<string name="revanced_spoof_video_streams_language_HI">Hindi</string>
<string name="revanced_spoof_video_streams_language_HR">Croato</string>
@@ -1237,7 +1237,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_language_ID">Indonesiano</string>
<string name="revanced_spoof_video_streams_language_IT">Italiano</string>
<string name="revanced_spoof_video_streams_language_JA">Giapponese</string>
<string name="revanced_spoof_video_streams_language_KK">Kazakh</string>
<string name="revanced_spoof_video_streams_language_KK">Kazako</string>
<string name="revanced_spoof_video_streams_language_KO">Coreano</string>
<string name="revanced_spoof_video_streams_language_LT">Lituano</string>
<string name="revanced_spoof_video_streams_language_LV">Lettone</string>

View File

@@ -711,6 +711,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_popup_panels_summary_off">플레이어 팝업 패널이 표시됩니다\n• 재생목록, 실시간 채팅, etc.</string>
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
<string name="revanced_open_videos_fullscreen_portrait_title">동영상을 전체 화면 세로 모드로 열기</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">동영상을 전체 화면으로 엽니다</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">동영상을 전체 화면으로 열지 않습니다</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">플레이어 오버레이 불투명도</string>
@@ -1203,11 +1206,68 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_user_dialog_message">이 설정을 비활성화하면 동영상 재생 문제가 발생할 수 있습니다</string>
<string name="revanced_spoof_video_streams_client_title">기본 클라이언트</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">AVC (H.264) 강제로 활성화하기</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">동영상 코덱을 AVC (H.264)로 강제 활성화합니다</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">동영상 코덱을 자동으로 활성화합니다</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">이 기능을 활성화하면 배터리 수명이 향상되고 재생 끊김 현상이 해결될 수 있습니다\n\nAVC (H.264)의 최대 화질 값은 1080p이며, OPUS 오디오 코덱을 사용할 수 없고, 동영상 재생 시 VP9 또는 AV1보다 더 많은 모바일 데이터가 사용되오니 주의하세요</string>
<string name="revanced_spoof_video_streams_about_ios_title">\'iOS로 변경\'의 알려진 문제점</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• 비공개 Kids 동영상이 재생되지 않을 수 있습니다\n• 일부 실시간 스트림이 처음부터 재생될 수 있습니다\n• 동영상이 1초 일찍 종료될 수 있습니다</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">\'Android VR로 변경\'의 알려진 문제점</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Kids 동영상이 재생되지 않을 수 있습니다\n• 오디오 트랙 메뉴가 표시되지 않습니다\n• 안정적인 볼륨 메뉴가 비활성화된 채로 잠겨있습니다</string>
<string name="revanced_spoof_video_streams_language_">스트리밍 데이터를 변경합니다</string>
<string name="revanced_spoof_video_streams_language_title">기본 오디오 스트림 언어 설정</string>
<string name="revanced_spoof_video_streams_language_DEFAULT">앱 언어</string>
<string name="revanced_spoof_video_streams_language_AR">아랍어</string>
<string name="revanced_spoof_video_streams_language_AZ">아제르바니잔어</string>
<string name="revanced_spoof_video_streams_language_BG">불가리아어</string>
<string name="revanced_spoof_video_streams_language_BN">뱅골어</string>
<string name="revanced_spoof_video_streams_language_CA">카타로니아어</string>
<string name="revanced_spoof_video_streams_language_CS">체코어</string>
<string name="revanced_spoof_video_streams_language_DA">덴마크어</string>
<string name="revanced_spoof_video_streams_language_DE">독일어</string>
<string name="revanced_spoof_video_streams_language_EL">그리스어</string>
<string name="revanced_spoof_video_streams_language_EN">영어</string>
<string name="revanced_spoof_video_streams_language_ES">스페인어</string>
<string name="revanced_spoof_video_streams_language_ET">에스토니아어</string>
<string name="revanced_spoof_video_streams_language_FA">페르시아어</string>
<string name="revanced_spoof_video_streams_language_FI">핀란드어</string>
<string name="revanced_spoof_video_streams_language_FR">프랑스어</string>
<string name="revanced_spoof_video_streams_language_GU">구자라트어</string>
<string name="revanced_spoof_video_streams_language_HI">힌디어</string>
<string name="revanced_spoof_video_streams_language_HR">크로아티아어</string>
<string name="revanced_spoof_video_streams_language_HU">헝가리어</string>
<string name="revanced_spoof_video_streams_language_ID">인도네시아어</string>
<string name="revanced_spoof_video_streams_language_IT">이틸리아어</string>
<string name="revanced_spoof_video_streams_language_JA">일본어</string>
<string name="revanced_spoof_video_streams_language_KK">키자흐스탄어</string>
<string name="revanced_spoof_video_streams_language_KO">한국어</string>
<string name="revanced_spoof_video_streams_language_LT">리투아니아어</string>
<string name="revanced_spoof_video_streams_language_LV">라트비아어</string>
<string name="revanced_spoof_video_streams_language_MK">마케도니아어</string>
<string name="revanced_spoof_video_streams_language_MN">몽골어</string>
<string name="revanced_spoof_video_streams_language_MR">마라티어</string>
<string name="revanced_spoof_video_streams_language_MS">말레이어</string>
<string name="revanced_spoof_video_streams_language_MY">버마어</string>
<string name="revanced_spoof_video_streams_language_NL">네덜란드어</string>
<string name="revanced_spoof_video_streams_language_OR">오리야어</string>
<string name="revanced_spoof_video_streams_language_PA">펀잡어</string>
<string name="revanced_spoof_video_streams_language_PL">폴란드어</string>
<string name="revanced_spoof_video_streams_language_PT_BR">포르투갈어 (브라질)</string>
<string name="revanced_spoof_video_streams_language_PT_PT">포르투갈어 (포르트갈)</string>
<string name="revanced_spoof_video_streams_language_RO">루마니아어</string>
<string name="revanced_spoof_video_streams_language_RU">러시아어</string>
<string name="revanced_spoof_video_streams_language_SK">슬로바키아어</string>
<string name="revanced_spoof_video_streams_language_SL">슬로베니아어</string>
<string name="revanced_spoof_video_streams_language_SR">세르비아어</string>
<string name="revanced_spoof_video_streams_language_SV">스웨덴어</string>
<string name="revanced_spoof_video_streams_language_SW">스와힐리어</string>
<string name="revanced_spoof_video_streams_language_TA">타밀어</string>
<string name="revanced_spoof_video_streams_language_TE">텔루구어</string>
<string name="revanced_spoof_video_streams_language_TH">태국어</string>
<string name="revanced_spoof_video_streams_language_TR">터키어</string>
<string name="revanced_spoof_video_streams_language_UK">우크라이나어</string>
<string name="revanced_spoof_video_streams_language_UR">우르두어</string>
<string name="revanced_spoof_video_streams_language_VI">베트남어</string>
<string name="revanced_spoof_video_streams_language_ZH">중국어</string>
</patch>
</app>
<app id="twitch">

View File

@@ -711,8 +711,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_popup_panels_summary_off">Wyskakujące panele odtwarzacza są widoczne</string>
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
<string name="revanced_open_videos_fullscreen_portrait_title">Otwórz filmy w trybie pełnoekranowym</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Filmy otwarte w trybie pełnoekranowym</string>
<string name="revanced_open_videos_fullscreen_portrait_title">Filmy w trybie pełnoekranowym</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Filmy otwierają się w trybie pełnoekranowym</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Filmy nie otwierają się w trybie pełnoekranowym</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
@@ -1206,68 +1206,68 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_user_dialog_message">Wyłączenie tej opcji może spowodować problemy z odtwarzaniem filmów.</string>
<string name="revanced_spoof_video_streams_client_title">Domyślny klient</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">Wymuś AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Kodek wideo jest wymuszone do AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Kodek wideo jest ustawiany automatycznie</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Włączenie tego może poprawić żywotność baterii i naprawić stłuczenie odtwarzania.\n\nAVC ma maksymalną rozdzielczość 1080p, kodek audio Opus jest niedostępny, a odtwarzanie wideo wykorzysta więcej danych internetowych niż VP9 lub AV1.</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Kodek filmu jest wymuszony do AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Kodek filmu jest ustawiany automatycznie</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Włączenie tej opcji może poprawić żywotność baterii i wyeliminować zacinanie się odtwarzania.\n\nAVC ma maksymalną rozdzielczość 1080p, kodek Opus nie jest dostępny, a odtwarzanie wideo zużywa więcej danych internetowych niż VP9 czy AV1.</string>
<string name="revanced_spoof_video_streams_about_ios_title">Efekty uboczne spoofingu iOS</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• Prywatne filmy dla dzieci mogą się nie odtwarzać\n• Transmisje na żywo rozpoczynają się od początku\n• Filmy mogą zakończyć się o sekundę wcześniej</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Efekty uboczne spoofingu Android VR</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Filmy dla dzieci mogą się nie odtwarzać\n• Brakuje menu od ścieżki dźwiękowej\n• Stabilna głośność jest niedostępna</string>
<string name="revanced_spoof_video_streams_language_">Oszukiwanie strumienia jest włączone</string>
<string name="revanced_spoof_video_streams_language_title">Preferowany język strumienia audio</string>
<string name="revanced_spoof_video_streams_language_title">Preferowany język ścieżki dźwięku</string>
<string name="revanced_spoof_video_streams_language_DEFAULT">Język aplikacji</string>
<string name="revanced_spoof_video_streams_language_AR">arabski</string>
<string name="revanced_spoof_video_streams_language_AZ">Azerbejdżański</string>
<string name="revanced_spoof_video_streams_language_AZ">azerbejdżański</string>
<string name="revanced_spoof_video_streams_language_BG">bułgarski</string>
<string name="revanced_spoof_video_streams_language_BN">Bengali</string>
<string name="revanced_spoof_video_streams_language_BN">bengalski</string>
<string name="revanced_spoof_video_streams_language_CA">kataloński</string>
<string name="revanced_spoof_video_streams_language_CS">czeski</string>
<string name="revanced_spoof_video_streams_language_DA">duński</string>
<string name="revanced_spoof_video_streams_language_DE">niemiecki</string>
<string name="revanced_spoof_video_streams_language_EL">grecki</string>
<string name="revanced_spoof_video_streams_language_EN">Angielski</string>
<string name="revanced_spoof_video_streams_language_EN">angielski</string>
<string name="revanced_spoof_video_streams_language_ES">hiszpański</string>
<string name="revanced_spoof_video_streams_language_ET">estoński</string>
<string name="revanced_spoof_video_streams_language_FA">perski</string>
<string name="revanced_spoof_video_streams_language_FI">fiński</string>
<string name="revanced_spoof_video_streams_language_FR">Francuski</string>
<string name="revanced_spoof_video_streams_language_GU">Gujarati</string>
<string name="revanced_spoof_video_streams_language_HI">Hindi</string>
<string name="revanced_spoof_video_streams_language_FR">francuski</string>
<string name="revanced_spoof_video_streams_language_GU">gudżaracki</string>
<string name="revanced_spoof_video_streams_language_HI">hinduski</string>
<string name="revanced_spoof_video_streams_language_HR">chorwacki</string>
<string name="revanced_spoof_video_streams_language_HU">węgierski</string>
<string name="revanced_spoof_video_streams_language_ID">indonezyjski</string>
<string name="revanced_spoof_video_streams_language_IT">włoski</string>
<string name="revanced_spoof_video_streams_language_JA">japoński</string>
<string name="revanced_spoof_video_streams_language_KK">Kazakh</string>
<string name="revanced_spoof_video_streams_language_KK">kazachski</string>
<string name="revanced_spoof_video_streams_language_KO">koreański</string>
<string name="revanced_spoof_video_streams_language_LT">litewski</string>
<string name="revanced_spoof_video_streams_language_LV">łotewski</string>
<string name="revanced_spoof_video_streams_language_MK">macedoński</string>
<string name="revanced_spoof_video_streams_language_MN">mongolski</string>
<string name="revanced_spoof_video_streams_language_MR">Marathi</string>
<string name="revanced_spoof_video_streams_language_MS">Malajski</string>
<string name="revanced_spoof_video_streams_language_MY">Burmese</string>
<string name="revanced_spoof_video_streams_language_NL">Holenderski</string>
<string name="revanced_spoof_video_streams_language_OR">Odia</string>
<string name="revanced_spoof_video_streams_language_PA">Punjabi</string>
<string name="revanced_spoof_video_streams_language_MR">maratyjski</string>
<string name="revanced_spoof_video_streams_language_MS">malajski</string>
<string name="revanced_spoof_video_streams_language_MY">birmański</string>
<string name="revanced_spoof_video_streams_language_NL">holenderski</string>
<string name="revanced_spoof_video_streams_language_OR">Orija</string>
<string name="revanced_spoof_video_streams_language_PA">pendżabski</string>
<string name="revanced_spoof_video_streams_language_PL">polski</string>
<string name="revanced_spoof_video_streams_language_PT_BR">Portugalski (Brazylia)</string>
<string name="revanced_spoof_video_streams_language_PT_PT">Portugalski (Portugalia)</string>
<string name="revanced_spoof_video_streams_language_PT_BR">portugalski (Brazylia)</string>
<string name="revanced_spoof_video_streams_language_PT_PT">portugalski (Portugalia)</string>
<string name="revanced_spoof_video_streams_language_RO">rumuński</string>
<string name="revanced_spoof_video_streams_language_RU">rosyjski</string>
<string name="revanced_spoof_video_streams_language_SK">Słowacki</string>
<string name="revanced_spoof_video_streams_language_SL">Slovene</string>
<string name="revanced_spoof_video_streams_language_SK">słowacki</string>
<string name="revanced_spoof_video_streams_language_SL">słoweński</string>
<string name="revanced_spoof_video_streams_language_SR">serbski</string>
<string name="revanced_spoof_video_streams_language_SV">Szwedzki</string>
<string name="revanced_spoof_video_streams_language_SW">Sahili</string>
<string name="revanced_spoof_video_streams_language_TA">Tamil</string>
<string name="revanced_spoof_video_streams_language_SV">szwedzki</string>
<string name="revanced_spoof_video_streams_language_SW">suahilijski</string>
<string name="revanced_spoof_video_streams_language_TA">tamilski</string>
<string name="revanced_spoof_video_streams_language_TE">Telugu</string>
<string name="revanced_spoof_video_streams_language_TH">tajski</string>
<string name="revanced_spoof_video_streams_language_TR">turecki</string>
<string name="revanced_spoof_video_streams_language_UK">ukraiński</string>
<string name="revanced_spoof_video_streams_language_UR">Urdu</string>
<string name="revanced_spoof_video_streams_language_VI">Vietnamese</string>
<string name="revanced_spoof_video_streams_language_ZH">Chiński</string>
<string name="revanced_spoof_video_streams_language_VI">wietnamski</string>
<string name="revanced_spoof_video_streams_language_ZH">chiński</string>
</patch>
</app>
<app id="twitch">

View File

@@ -82,7 +82,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_screen_03_feed_title">Лента</string>
<string name="revanced_settings_screen_04_player_title">Плеер</string>
<string name="revanced_settings_screen_05_general_title">Основной интерфейс</string>
<string name="revanced_settings_screen_07_seekbar_title">Прогресс воспроизведения</string>
<string name="revanced_settings_screen_07_seekbar_title">Полоса прогресса</string>
<string name="revanced_settings_screen_08_swipe_controls_title">Управление жестами</string>
<string name="revanced_settings_screen_11_misc_title">Прочие</string>
<string name="revanced_settings_screen_12_video_title">Видео</string>
@@ -275,7 +275,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_doodles_title">YouTube Doodles</string>
<string name="revanced_hide_doodles_summary_on">Doodles на панели поиска скрыты</string>
<string name="revanced_hide_doodles_summary_off">Doodles на панели поиска отображены</string>
<string name="revanced_hide_doodles_user_dialog_message">YouTube Doodles появляются несколько дней в году.\n\nЕсли в Вашем регионе в настоящее время показывается Doodle, и этот параметр скрытия включен, то панель фильтров под панелью поиска будет также скрыта.</string>
<string name="revanced_hide_doodles_user_dialog_message">YouTube Doodles появляются несколько дней в году.\n\nЕсли в Вашем регионе в настоящее время показывается Doodle, и данная опция скрытия активна, то панель фильтров под панелью поиска будет также скрыта.</string>
<string name="revanced_custom_filter_screen_title">Пользовательский фильтр</string>
<string name="revanced_custom_filter_screen_summary">Скрыть компоненты с помощью пользовательских фильтров</string>
<string name="revanced_custom_filter_title">Пользовательский фильтр</string>
@@ -397,8 +397,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="interaction.seekbar.enableSeekbarTappingPatch">
<string name="revanced_seekbar_tapping_title">Перемотка нажатием</string>
<string name="revanced_seekbar_tapping_summary_on">Перемотка нажатием на прогресс воспроизведения включена</string>
<string name="revanced_seekbar_tapping_summary_off">Перемотка нажатием на прогресс воспроизведения отключена</string>
<string name="revanced_seekbar_tapping_summary_on">Перемотка нажатием на полосу прогресса включена</string>
<string name="revanced_seekbar_tapping_summary_off">Перемотка нажатием на полосу прогресса отключена</string>
</patch>
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
<string name="revanced_swipe_brightness_title">Регулировка яркости жестом</string>
@@ -588,12 +588,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_disable_rolling_number_animations_summary_off">Анимированные счетчики просмотров, лайков и дизлайков включены</string>
</patch>
<patch id="layout.hide.seekbar.hideSeekbarPatch">
<string name="revanced_hide_seekbar_title">Прогресс воспроизведения</string>
<string name="revanced_hide_seekbar_summary_on">Прогресс воспроизведения в плеере скрыт</string>
<string name="revanced_hide_seekbar_summary_off">Прогресс воспроизведения в плеере отображен</string>
<string name="revanced_hide_seekbar_thumbnail_title">Миниатюры</string>
<string name="revanced_hide_seekbar_thumbnail_summary_on">Миниатюры прогресса воспроизведения скрыты</string>
<string name="revanced_hide_seekbar_thumbnail_summary_off">Миниатюры прогресса воспроизведения отображены</string>
<string name="revanced_hide_seekbar_title">Полоса прогресса в плеере</string>
<string name="revanced_hide_seekbar_summary_on">Полоса прогресса в плеере скрыта</string>
<string name="revanced_hide_seekbar_summary_off">Полоса прогресса в плеере отображена</string>
<string name="revanced_hide_seekbar_thumbnail_title">Полоса прогресса в миниатюрах</string>
<string name="revanced_hide_seekbar_thumbnail_summary_on">Полоса прогресса в миниатюрах скрыта</string>
<string name="revanced_hide_seekbar_thumbnail_summary_off">Полоса прогресса в миниатюрах отображена</string>
</patch>
<patch id="layout.hide.shorts.hideShortsComponentsResourcePatch">
<string name="revanced_shorts_player_screen_title">Плеер Shorts</string>
@@ -623,7 +623,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_shop_button_title">Кнопка \"Магазин\"</string>
<string name="revanced_hide_shorts_shop_button_summary_on">Кнопка \"Магазин\" в Shorts скрыта</string>
<string name="revanced_hide_shorts_shop_button_summary_off">Кнопка \"Магазин\" в Shorts отображена</string>
<string name="revanced_hide_shorts_super_thanks_button_title">Скрыть кнопку \"Супер спасибо\"</string>
<string name="revanced_hide_shorts_super_thanks_button_title">Кнопка \"Супер спасибо\"</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_on">Кнопка \"Супер спасибо\" скрыта</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_off">Кнопка \"Супер спасибо\" показывается</string>
<string name="revanced_hide_shorts_tagged_products_title">Товары с тегом</string>
@@ -711,9 +711,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_popup_panels_summary_off">Автоматически всплывающие панели (плейлист или живой чат) в плеере отображены</string>
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
<string name="revanced_open_videos_fullscreen_portrait_title">Открыть видео в полноэкранном портрете</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Видео открыть полноэкранный режим</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Видео не открывают полноэкранный режим</string>
<string name="revanced_open_videos_fullscreen_portrait_title">Видео в полноэкранном портрете</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Видео открываются в полноэкранном портретном режиме</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Видео не открываются в полноэкранном портретном режиме</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">Непрозрачность оверлея плеера</string>
@@ -771,14 +771,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="layout.seekbar.seekbarThumbnailsPatch">
<string name="revanced_seekbar_thumbnails_high_quality_title">Миниатюры высокого качества</string>
<string name="revanced_seekbar_thumbnails_high_quality_summary_on">Миниатюры прогресса воспроизведения высокого качества</string>
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Миниатюры прогресса воспроизведения среднего качества</string>
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">Полноэкранные миниатюры прогресса воспроизведения высокого качества</string>
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">Полноэкранные миниатюры прогресса воспроизведения среднего качества</string>
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">Данная опция также восстановит миниатюры в прямых трансляциях, у которых они отсутствуют в прогрессе воспроизведения.\n\nМиниатюры прогресса воспроизведения будут использовать такое же качество, как и текущее видео.\n\nДанная опция работает лучше с качеством видео 720p или ниже, и при использовании очень быстрого подключения к Интернету.</string>
<string name="revanced_restore_old_seekbar_thumbnails_title">Восстановление старых миниатюр</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Старые миниатюры восстановлены - миниатюры прогресса воспроизведения отображаются над ним</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Миниатюры прогресса воспроизведения отображаются в полноэкранном режиме</string>
<string name="revanced_seekbar_thumbnails_high_quality_summary_on">Миниатюры полосы прогресса высокого качества</string>
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Миниатюры полосы прогресса среднего качества</string>
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">Полноэкранные миниатюры полосы прогресса высокого качества</string>
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">Полноэкранные миниатюры полосы прогресса среднего качества</string>
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">Данная опция также восстановит миниатюры в прямых трансляциях, которые не имеют миниатюр полосы прогресса.\n\nМиниатюры полосы прогресса будут использовать такое же качество, как и текущее видео.\n\nДанная опция работает лучше с качеством видео 720p или ниже, и при использовании очень быстрого подключения к Интернету.</string>
<string name="revanced_restore_old_seekbar_thumbnails_title">Старые миниатюры</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Миниатюры полосы прогресса отображаются над полосой прогресса</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Миниатюры полосы прогресса отображаются в полноэкранном режиме</string>
</patch>
<patch id="layout.sponsorblock.sponsorBlockResourcePatch">
<string name="revanced_sb_enable_sb">Включить SponsorBlock</string>
@@ -893,7 +893,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_skip_automatically">Пропускать автоматически</string>
<string name="revanced_sb_skip_automatically_once">Пропускать автоматически один раз</string>
<string name="revanced_sb_skip_showbutton">Кнопка пропуска</string>
<string name="revanced_sb_skip_seekbaronly">Отображать в прогрессе воспроизведения</string>
<string name="revanced_sb_skip_seekbaronly">Отображать в полосе прогресса</string>
<string name="revanced_sb_skip_ignore">Отключить</string>
<string name="revanced_sb_submit_failed_invalid">Не удалось отправить сегмент: %s</string>
<string name="revanced_sb_submit_failed_timeout">SponsorBlock временно не работает</string>
@@ -1042,9 +1042,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_miniplayer_hide_expand_close_legacy_title">Кнопки \"Развернуть\" и \"Закрыть\"</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">Кнопки скрыты\n\nПроведите по мини-плееру для разворачивания или закрытия</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">Кнопки разворачивания и закрытия отображены</string>
<string name="revanced_miniplayer_hide_subtext_title">Скрыть подтексты</string>
<string name="revanced_miniplayer_hide_subtext_summary_on">Субтексты скрыты</string>
<string name="revanced_miniplayer_hide_subtext_summary_off">Подтексты показаны</string>
<string name="revanced_miniplayer_hide_subtext_title">Подтексты</string>
<string name="revanced_miniplayer_hide_subtext_summary_on">Подтексты скрыты</string>
<string name="revanced_miniplayer_hide_subtext_summary_off">Подтексты отображены</string>
<string name="revanced_miniplayer_hide_rewind_forward_title">Кнопки перемотки</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">Кнопки перемотки вперед и назад скрыты</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">Кнопки перемотки вперед и назад отображены</string>
@@ -1061,12 +1061,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_gradient_loading_screen_summary_off">Экран загрузки имеет сплошной фон</string>
</patch>
<patch id="layout.theme.themeResourcePatch">
<string name="revanced_seekbar_custom_color_title">Цвет прогресса воспроизведения</string>
<string name="revanced_seekbar_custom_color_summary_on">Пользовательский цвет прогресса воспроизведения отображен</string>
<string name="revanced_seekbar_custom_color_summary_off">Оригинальный цвет прогресса воспроизведения отображен</string>
<string name="revanced_seekbar_custom_color_title">Цвет полосы прогресса</string>
<string name="revanced_seekbar_custom_color_summary_on">Пользовательский цвет полосы прогресса отображен</string>
<string name="revanced_seekbar_custom_color_summary_off">Оригинальный цвет полосы прогресса отображен</string>
<string name="revanced_seekbar_custom_color_value_title">Пользовательский цвет</string>
<string name="revanced_seekbar_custom_color_value_summary">Редактировать цвет прогресса воспроизведения</string>
<string name="revanced_seekbar_custom_color_invalid">Неверное значение цвета прогресса воспроизведения</string>
<string name="revanced_seekbar_custom_color_value_summary">Редактировать цвет полосы прогресса</string>
<string name="revanced_seekbar_custom_color_invalid">Неверное значение цвета полосы прогресса</string>
</patch>
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
<string name="revanced_bypass_image_region_restrictions_title">Обход ограничений региона</string>
@@ -1115,7 +1115,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</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_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_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.autorepeat.autoRepeatPatch">
@@ -1206,21 +1206,21 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_user_dialog_message">Отключение этой настройки может вызвать проблемы с воспроизведением видео.</string>
<string name="revanced_spoof_video_streams_client_title">Клиент по умолчанию</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">Принудительно AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Видео кодек привязан к AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Видео кодек принудительно установлен на AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Видео кодек определяется автоматически</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Включение этого параметра может улучшить время работы батареи и исправить затяжку воспроизведения.\n\nAVC имеет максимальное разрешение 1080p, аудио кодек Opus недоступен, и воспроизведение видео будет использовать больше интернет-данных, чем VP9 или AV1.</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Активация данной опции может улучшить время работы батареи и исправить задержки воспроизведения.\n\nAVC имеет максимальное разрешение 1080p, аудио кодек Opus недоступен, и воспроизведение видео будет использовать больше интернет данных в сравнении с VP9 или AV1.</string>
<string name="revanced_spoof_video_streams_about_ios_title">Побочные эффекты подмены на iOS</string>
<string name="revanced_spoof_video_streams_about_ios_summary">Видео частных детей не могут играть\n• Livestreams начинается с начала\n• Видео может закончиться 1 секунду рано</string>
<string name="revanced_spoof_video_streams_about_ios_summary">Частные детские видео могут не воспроизводиться\n• Прямые трансляции начинаются с самого начала\n• Видео могут заканчиваться на 1 секунду раньше</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Побочные эффекты подмены на Android VR</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Детские видео могут не воспроизводиться\n• Пункт меню \"Звуковая дорожка\" отсутвтует\n• Пункт меню \"Постоянный уровень громкости\" недоступен</string>
<string name="revanced_spoof_video_streams_language_">Видеопотоки подменены</string>
<string name="revanced_spoof_video_streams_language_title">Предпочитаемый язык аудио потока</string>
<string name="revanced_spoof_video_streams_language_title">Предпочитаемый язык аудиопотока</string>
<string name="revanced_spoof_video_streams_language_DEFAULT">Язык приложения</string>
<string name="revanced_spoof_video_streams_language_AR">Арабский</string>
<string name="revanced_spoof_video_streams_language_AZ">Азербайджан</string>
<string name="revanced_spoof_video_streams_language_AZ">Азербайджанский</string>
<string name="revanced_spoof_video_streams_language_BG">Болгарский</string>
<string name="revanced_spoof_video_streams_language_BN">Бенгальский</string>
<string name="revanced_spoof_video_streams_language_CA">Каталанский</string>
<string name="revanced_spoof_video_streams_language_CA">Каталонский</string>
<string name="revanced_spoof_video_streams_language_CS">Чешский</string>
<string name="revanced_spoof_video_streams_language_DA">Датский</string>
<string name="revanced_spoof_video_streams_language_DE">Немецкий</string>
@@ -1231,42 +1231,42 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_language_FA">Персидский</string>
<string name="revanced_spoof_video_streams_language_FI">Финский</string>
<string name="revanced_spoof_video_streams_language_FR">Французский</string>
<string name="revanced_spoof_video_streams_language_GU">Gujarati</string>
<string name="revanced_spoof_video_streams_language_GU">Гуджарати</string>
<string name="revanced_spoof_video_streams_language_HI">Хинди</string>
<string name="revanced_spoof_video_streams_language_HR">Хорватский</string>
<string name="revanced_spoof_video_streams_language_HU">Венгерский</string>
<string name="revanced_spoof_video_streams_language_ID">Индонезийский</string>
<string name="revanced_spoof_video_streams_language_IT">Итальянский</string>
<string name="revanced_spoof_video_streams_language_JA">Японский</string>
<string name="revanced_spoof_video_streams_language_KK">Kazakh</string>
<string name="revanced_spoof_video_streams_language_KK">Казахский</string>
<string name="revanced_spoof_video_streams_language_KO">Корейский</string>
<string name="revanced_spoof_video_streams_language_LT">Литовский</string>
<string name="revanced_spoof_video_streams_language_LV">Латышский</string>
<string name="revanced_spoof_video_streams_language_MK">Македонский</string>
<string name="revanced_spoof_video_streams_language_MN">Монгольский</string>
<string name="revanced_spoof_video_streams_language_MR">Маратти</string>
<string name="revanced_spoof_video_streams_language_MS">Малай</string>
<string name="revanced_spoof_video_streams_language_MY">Burmese</string>
<string name="revanced_spoof_video_streams_language_MR">Маратхи</string>
<string name="revanced_spoof_video_streams_language_MS">Малайский</string>
<string name="revanced_spoof_video_streams_language_MY">Бирманский</string>
<string name="revanced_spoof_video_streams_language_NL">Голландский</string>
<string name="revanced_spoof_video_streams_language_OR">Odia</string>
<string name="revanced_spoof_video_streams_language_PA">Punjabi</string>
<string name="revanced_spoof_video_streams_language_OR">Одиа</string>
<string name="revanced_spoof_video_streams_language_PA">Панджаби</string>
<string name="revanced_spoof_video_streams_language_PL">Польский</string>
<string name="revanced_spoof_video_streams_language_PT_BR">Португальский (Бразилия)</string>
<string name="revanced_spoof_video_streams_language_PT_PT">Португальский (Португалия)</string>
<string name="revanced_spoof_video_streams_language_RO">Румынский</string>
<string name="revanced_spoof_video_streams_language_RU">Русский</string>
<string name="revanced_spoof_video_streams_language_SK">Словацкий</string>
<string name="revanced_spoof_video_streams_language_SL">Slovene</string>
<string name="revanced_spoof_video_streams_language_SL">Словенский</string>
<string name="revanced_spoof_video_streams_language_SR">Сербский</string>
<string name="revanced_spoof_video_streams_language_SV">Шведский</string>
<string name="revanced_spoof_video_streams_language_SW">Суахили</string>
<string name="revanced_spoof_video_streams_language_TA">Tamil</string>
<string name="revanced_spoof_video_streams_language_TE">Telugu</string>
<string name="revanced_spoof_video_streams_language_TA">Тамильский</string>
<string name="revanced_spoof_video_streams_language_TE">Телугу</string>
<string name="revanced_spoof_video_streams_language_TH">Тайский</string>
<string name="revanced_spoof_video_streams_language_TR">Турецкий</string>
<string name="revanced_spoof_video_streams_language_UK">Украинский</string>
<string name="revanced_spoof_video_streams_language_UR">Урду</string>
<string name="revanced_spoof_video_streams_language_VI">Vietnamese</string>
<string name="revanced_spoof_video_streams_language_VI">Вьетнамский</string>
<string name="revanced_spoof_video_streams_language_ZH">Китайский</string>
</patch>
</app>

View File

@@ -710,6 +710,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_popup_panels_summary_off">Oynatıcıılır panelleri gösteriliyor</string>
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
<string name="revanced_open_videos_fullscreen_portrait_title">Videoları tam ekran portre modunda aç</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Videolar tam ekranda açılır</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Videolar tam ekranda açılmaz</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">Oynatıcı opaklığı</string>
@@ -1202,10 +1205,68 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_user_dialog_message">Bu ayarı devre dışı bırakmak video oynatma sorunlarına yol açabilir.</string>
<string name="revanced_spoof_video_streams_client_title">Varsayılan istemci</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">AVC\'yi (H.264) zorla</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video kodeği AVC\'ye zorlanıyor (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video kodeği otomatik olarak ayarlanır</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Bunu etkinleştirmek batarya ömrünü iyileştirebilir ve oynatma takılmalarını düzeltebilir.\n\nAVC\'de maksimum 1080p çözünürlük vardır, Opus ses kodeği kullanılamaz ve video oynatma VP9 veya AV1\'e göre daha fazla internet verisi kullanır.</string>
<string name="revanced_spoof_video_streams_about_ios_title">iOS taklidi yan etkileri</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• Çocuklara özel gizli videolar oynatılamayabilir\n• Canlı yayınlar en baştan başlar\n• Videolar 1 saniye erken bitebilir</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR taklidi yan etkileri</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Çocuklara özel videolar oynatılamayabilir\n• Ses parçası menüsü eksik\n• Sabit ses özelliği kullanılamaz</string>
<string name="revanced_spoof_video_streams_language_">Video akışları taklit ediliyor</string>
<string name="revanced_spoof_video_streams_language_title">Tercih edilen ses yayını dili</string>
<string name="revanced_spoof_video_streams_language_DEFAULT">Uygulama dili</string>
<string name="revanced_spoof_video_streams_language_AR">Arapça</string>
<string name="revanced_spoof_video_streams_language_AZ">Azerbaycanca</string>
<string name="revanced_spoof_video_streams_language_BG">Bulgarca</string>
<string name="revanced_spoof_video_streams_language_BN">Bengalce</string>
<string name="revanced_spoof_video_streams_language_CA">Katalanca</string>
<string name="revanced_spoof_video_streams_language_CS">Çekçe</string>
<string name="revanced_spoof_video_streams_language_DA">Danca</string>
<string name="revanced_spoof_video_streams_language_DE">Almanca</string>
<string name="revanced_spoof_video_streams_language_EL">Yunanca</string>
<string name="revanced_spoof_video_streams_language_EN">İngilizce</string>
<string name="revanced_spoof_video_streams_language_ES">İspanyolca</string>
<string name="revanced_spoof_video_streams_language_ET">Estonca</string>
<string name="revanced_spoof_video_streams_language_FA">Farsça</string>
<string name="revanced_spoof_video_streams_language_FI">Fince</string>
<string name="revanced_spoof_video_streams_language_FR">Fransızca</string>
<string name="revanced_spoof_video_streams_language_GU">Guceratça</string>
<string name="revanced_spoof_video_streams_language_HI">Hintçe</string>
<string name="revanced_spoof_video_streams_language_HR">Hırvatça</string>
<string name="revanced_spoof_video_streams_language_HU">Macarca</string>
<string name="revanced_spoof_video_streams_language_ID">Endonezce</string>
<string name="revanced_spoof_video_streams_language_IT">İtalyanca</string>
<string name="revanced_spoof_video_streams_language_JA">Japonca</string>
<string name="revanced_spoof_video_streams_language_KK">Kazakça</string>
<string name="revanced_spoof_video_streams_language_KO">Korece</string>
<string name="revanced_spoof_video_streams_language_LT">Litvanca</string>
<string name="revanced_spoof_video_streams_language_LV">Letonca</string>
<string name="revanced_spoof_video_streams_language_MK">Makedonca</string>
<string name="revanced_spoof_video_streams_language_MN">Moğolca</string>
<string name="revanced_spoof_video_streams_language_MR">Marathice</string>
<string name="revanced_spoof_video_streams_language_MS">Malayca</string>
<string name="revanced_spoof_video_streams_language_MY">Birmanca</string>
<string name="revanced_spoof_video_streams_language_NL">Flemenkçe</string>
<string name="revanced_spoof_video_streams_language_OR">Odiyaca</string>
<string name="revanced_spoof_video_streams_language_PA">Pencapça</string>
<string name="revanced_spoof_video_streams_language_PL">Lehçe</string>
<string name="revanced_spoof_video_streams_language_PT_BR">Portekizce (Brezilya)</string>
<string name="revanced_spoof_video_streams_language_PT_PT">Portekizce (Portekiz)</string>
<string name="revanced_spoof_video_streams_language_RO">Romence</string>
<string name="revanced_spoof_video_streams_language_RU">Rusça</string>
<string name="revanced_spoof_video_streams_language_SK">Slovakça</string>
<string name="revanced_spoof_video_streams_language_SL">Slovence</string>
<string name="revanced_spoof_video_streams_language_SR">Sırpça</string>
<string name="revanced_spoof_video_streams_language_SV">İsveççe</string>
<string name="revanced_spoof_video_streams_language_SW">Svahilice</string>
<string name="revanced_spoof_video_streams_language_TA">Tamilce</string>
<string name="revanced_spoof_video_streams_language_TE">Teluguca</string>
<string name="revanced_spoof_video_streams_language_TH">Taylandca</string>
<string name="revanced_spoof_video_streams_language_TR">Türkçe</string>
<string name="revanced_spoof_video_streams_language_UK">Ukraynaca</string>
<string name="revanced_spoof_video_streams_language_UR">Urduca</string>
<string name="revanced_spoof_video_streams_language_VI">Vietnamca</string>
<string name="revanced_spoof_video_streams_language_ZH">Çince</string>
</patch>
</app>
<app id="twitch">

View File

@@ -711,8 +711,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
<string name="revanced_open_videos_fullscreen_portrait_title">Відкривати відео в портретному режимі</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Відео відкриваються в повноекранному режимі</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Відео не відкривають на весь екран</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Відео відкриваються в повноекранному портретному режимі</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Відео не відкриваються в повноекранному портретному режимі</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">Затемнення плеєра при натисканні</string>
@@ -1205,16 +1205,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_user_dialog_message">Вимкнення цього параметра може спричинити проблеми відтворення відео.</string>
<string name="revanced_spoof_video_streams_client_title">Клієнт за замовчуванням</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">Примусово AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Відео кодек змушений до AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Примусово увімкнено відеокодек AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Відеокодек визначається автоматично</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Увімкнення цієї функції може збільшити час роботи акумулятора та виправити режим зупинки відтворення.\n\nAVC має максимальну роздільну здатність 1080p, відсутній аудіо-кодек Opus і відтворення відео буде використовувати більше даних Інтернету, ніж VP9 або AV1.</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Увімкнення цієї опції може збільшити час роботи від акумулятора та виправити затримки відтворення.\n\nAVC має максимальну роздільну здатність 1080p, відсутній аудіо кодек OPUS, а відтворення відео використовуватиме більше інтернет-даних, ніж на кодеках VP9 або AV1.</string>
<string name="revanced_spoof_video_streams_about_ios_title">Побічні ефекти підробки iOS:</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• Приватні дитячі відео можуть не відтворюватися\n• Прямі трансляції починаються з початку\n• Відео можуть закінчуватися на 1 секунду раніше</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Побічні ефекти підробки Android VR:</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Дитячі відео можуть не відтворюватися\n• Меню звукової доріжки відсутнє\n• Меню стабілізації гучності недоступне</string>
<string name="revanced_spoof_video_streams_language_">Відеопотоки підроблено</string>
<string name="revanced_spoof_video_streams_language_title">Бажана мова аудіо-потоків</string>
<string name="revanced_spoof_video_streams_language_DEFAULT">Мова додатку</string>
<string name="revanced_spoof_video_streams_language_title">Бажана мова аудіопотоку</string>
<string name="revanced_spoof_video_streams_language_DEFAULT">Мова застосунку</string>
<string name="revanced_spoof_video_streams_language_AR">Арабська</string>
<string name="revanced_spoof_video_streams_language_AZ">Азербайджанська</string>
<string name="revanced_spoof_video_streams_language_BG">Болгарська</string>
@@ -1227,45 +1227,45 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_language_EN">Англійська</string>
<string name="revanced_spoof_video_streams_language_ES">Іспанська</string>
<string name="revanced_spoof_video_streams_language_ET">Естонська</string>
<string name="revanced_spoof_video_streams_language_FA">Фарсі</string>
<string name="revanced_spoof_video_streams_language_FA">Перська</string>
<string name="revanced_spoof_video_streams_language_FI">Фінська</string>
<string name="revanced_spoof_video_streams_language_FR">Français</string>
<string name="revanced_spoof_video_streams_language_GU">Gujarati</string>
<string name="revanced_spoof_video_streams_language_HI">Гінді</string>
<string name="revanced_spoof_video_streams_language_FR">Французька</string>
<string name="revanced_spoof_video_streams_language_GU">Гуджараті</string>
<string name="revanced_spoof_video_streams_language_HI">Хінді</string>
<string name="revanced_spoof_video_streams_language_HR">Хорватська</string>
<string name="revanced_spoof_video_streams_language_HU">Угорська</string>
<string name="revanced_spoof_video_streams_language_ID">Індонезійська</string>
<string name="revanced_spoof_video_streams_language_IT">Італійська</string>
<string name="revanced_spoof_video_streams_language_JA">Японська</string>
<string name="revanced_spoof_video_streams_language_KK">Kazakh</string>
<string name="revanced_spoof_video_streams_language_KK">Казахська</string>
<string name="revanced_spoof_video_streams_language_KO">Корейська</string>
<string name="revanced_spoof_video_streams_language_LT">Литовська</string>
<string name="revanced_spoof_video_streams_language_LV">Латиська</string>
<string name="revanced_spoof_video_streams_language_LV">Латвійська</string>
<string name="revanced_spoof_video_streams_language_MK">Македонська</string>
<string name="revanced_spoof_video_streams_language_MN">Монгольська</string>
<string name="revanced_spoof_video_streams_language_MR">Маратхі</string>
<string name="revanced_spoof_video_streams_language_MS">Малайська</string>
<string name="revanced_spoof_video_streams_language_MY">Burmese</string>
<string name="revanced_spoof_video_streams_language_MY">Бірманська</string>
<string name="revanced_spoof_video_streams_language_NL">Голландська</string>
<string name="revanced_spoof_video_streams_language_OR">Odia</string>
<string name="revanced_spoof_video_streams_language_PA">Punjabi</string>
<string name="revanced_spoof_video_streams_language_OR">Одійська</string>
<string name="revanced_spoof_video_streams_language_PA">Пенджабі</string>
<string name="revanced_spoof_video_streams_language_PL">Польська</string>
<string name="revanced_spoof_video_streams_language_PT_BR">Португальська (Бразилія)</string>
<string name="revanced_spoof_video_streams_language_PT_PT">Португальська (Португалія)</string>
<string name="revanced_spoof_video_streams_language_RO">Румунська</string>
<string name="revanced_spoof_video_streams_language_RU">Російська</string>
<string name="revanced_spoof_video_streams_language_SK">Словацька</string>
<string name="revanced_spoof_video_streams_language_SL">Slovene</string>
<string name="revanced_spoof_video_streams_language_SL">Словенська</string>
<string name="revanced_spoof_video_streams_language_SR">Сербська</string>
<string name="revanced_spoof_video_streams_language_SV">Шведська</string>
<string name="revanced_spoof_video_streams_language_SW">Суахілі</string>
<string name="revanced_spoof_video_streams_language_TA">Tamil</string>
<string name="revanced_spoof_video_streams_language_TE">Telugu</string>
<string name="revanced_spoof_video_streams_language_TA">Тамільська</string>
<string name="revanced_spoof_video_streams_language_TE">Телугу</string>
<string name="revanced_spoof_video_streams_language_TH">Тайська</string>
<string name="revanced_spoof_video_streams_language_TR">Турецька</string>
<string name="revanced_spoof_video_streams_language_UK">Українська</string>
<string name="revanced_spoof_video_streams_language_UR">Урду</string>
<string name="revanced_spoof_video_streams_language_VI">Vietnamese</string>
<string name="revanced_spoof_video_streams_language_VI">В\'єтнамська</string>
<string name="revanced_spoof_video_streams_language_ZH">Китайська</string>
</patch>
</app>

View File

@@ -1203,6 +1203,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_user_dialog_message">關閉此設定可能會導致影片播放發生問題</string>
<string name="revanced_spoof_video_streams_client_title">預設用戶端</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">強制 AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">強制以 AVC (H.264) 作為影片解碼器</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">自動選擇影片解碼器</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">啟用此功能可能會改善電池續航力並修復播放卡頓問題。\n\nAVC 的最大解析度為 1080p且影片播放將使用比 VP9 或 AV1 更多的網路數據(音源解碼器暫不可用)。</string>
<string name="revanced_spoof_video_streams_about_ios_title">iOS 欺騙副作用</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• 私人的兒童影片有可能不會播放\n• 從直播起始處播放\n• 影片可能會提早一秒結束</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR 欺騙副作用</string>