mirror of
https://github.com/revanced/revanced-patches
synced 2025-02-22 13:51:19 +01:00
feat(YouTube): Add in app option to select a preferred language for ReVanced specific text
This commit is contained in:
parent
8aa25c31db
commit
208c1b45b9
@ -40,6 +40,8 @@ import java.util.concurrent.SynchronousQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import app.revanced.extension.shared.settings.AppLanguage;
|
||||
import app.revanced.extension.shared.settings.BaseSettings;
|
||||
import app.revanced.extension.shared.settings.BooleanSetting;
|
||||
import app.revanced.extension.shared.settings.preference.ReVancedAboutPreference;
|
||||
|
||||
@ -360,7 +362,17 @@ public class Utils {
|
||||
}
|
||||
|
||||
public static void setContext(Context appContext) {
|
||||
// Must initially set context as the language settings needs it.
|
||||
context = appContext;
|
||||
|
||||
AppLanguage language = BaseSettings.REVANCED_LANGUAGE.get();
|
||||
if (language != AppLanguage.DEFAULT) {
|
||||
// Create a new context with the desired language.
|
||||
Configuration config = appContext.getResources().getConfiguration();
|
||||
config.setLocale(language.getLocale());
|
||||
context = appContext.createConfigurationContext(config);
|
||||
}
|
||||
|
||||
// In some apps like TikTok, the Setting classes can load in weird orders due to cyclic class dependencies.
|
||||
// Calling the regular printDebug method here can cause a Settings context null pointer exception,
|
||||
// even though the context is already set before the call.
|
||||
|
@ -1,8 +1,8 @@
|
||||
package app.revanced.extension.shared.spoof;
|
||||
package app.revanced.extension.shared.settings;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public enum AudioStreamLanguage {
|
||||
public enum AppLanguage {
|
||||
/**
|
||||
* The current app language.
|
||||
*/
|
||||
@ -34,7 +34,7 @@ public enum AudioStreamLanguage {
|
||||
GL,
|
||||
GU,
|
||||
HI,
|
||||
HE, // App uses obsolete 'IW' and 'HE' is modern ISO code.
|
||||
HE, // App uses obsolete 'IW' and not the modern 'HE' ISO code.
|
||||
HR,
|
||||
HU,
|
||||
HY,
|
||||
@ -87,7 +87,7 @@ public enum AudioStreamLanguage {
|
||||
|
||||
private final String language;
|
||||
|
||||
AudioStreamLanguage() {
|
||||
AppLanguage() {
|
||||
language = name().toLowerCase(Locale.US);
|
||||
}
|
||||
|
||||
@ -103,4 +103,12 @@ public enum AudioStreamLanguage {
|
||||
|
||||
return language;
|
||||
}
|
||||
|
||||
public Locale getLocale() {
|
||||
if (this == DEFAULT) {
|
||||
return Locale.getDefault();
|
||||
}
|
||||
|
||||
return Locale.forLanguageTag(getLanguage());
|
||||
}
|
||||
}
|
@ -6,7 +6,6 @@ import static app.revanced.extension.shared.settings.Setting.parent;
|
||||
import static app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.AudioStreamLanguageOverrideAvailability;
|
||||
import static app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.SpoofiOSAvailability;
|
||||
|
||||
import app.revanced.extension.shared.spoof.AudioStreamLanguage;
|
||||
import app.revanced.extension.shared.spoof.ClientType;
|
||||
|
||||
/**
|
||||
@ -22,8 +21,10 @@ public class BaseSettings {
|
||||
|
||||
public static final IntegerSetting CHECK_ENVIRONMENT_WARNINGS_ISSUED = new IntegerSetting("revanced_check_environment_warnings_issued", 0, true, false);
|
||||
|
||||
public static final EnumSetting<AppLanguage> REVANCED_LANGUAGE = new EnumSetting<>("revanced_language", AppLanguage.DEFAULT, true);
|
||||
|
||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS = new BooleanSetting("revanced_spoof_video_streams", TRUE, true, "revanced_spoof_video_streams_user_dialog_message");
|
||||
public static final EnumSetting<AudioStreamLanguage> SPOOF_VIDEO_STREAMS_LANGUAGE = new EnumSetting<>("revanced_spoof_video_streams_language", AudioStreamLanguage.DEFAULT, new AudioStreamLanguageOverrideAvailability());
|
||||
public static final EnumSetting<AppLanguage> SPOOF_VIDEO_STREAMS_LANGUAGE = new EnumSetting<>("revanced_spoof_video_streams_language", AppLanguage.DEFAULT, new AudioStreamLanguageOverrideAvailability());
|
||||
public static final BooleanSetting SPOOF_STREAMING_DATA_STATS_FOR_NERDS = new BooleanSetting("revanced_spoof_streaming_data_stats_for_nerds", TRUE, parent(SPOOF_VIDEO_STREAMS));
|
||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS_IOS_FORCE_AVC = new BooleanSetting("revanced_spoof_video_streams_ios_force_avc", FALSE, true,
|
||||
"revanced_spoof_video_streams_ios_force_avc_user_dialog_message", new SpoofiOSAvailability());
|
||||
|
@ -10,7 +10,7 @@ import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.requests.Requester;
|
||||
import app.revanced.extension.shared.requests.Route;
|
||||
import app.revanced.extension.shared.settings.BaseSettings;
|
||||
import app.revanced.extension.shared.spoof.AudioStreamLanguage;
|
||||
import app.revanced.extension.shared.settings.AppLanguage;
|
||||
import app.revanced.extension.shared.spoof.ClientType;
|
||||
|
||||
final class PlayerRoutes {
|
||||
@ -42,9 +42,9 @@ final class PlayerRoutes {
|
||||
// but if this is a fall over client it will set the language even though
|
||||
// the audio language is not selectable in the UI.
|
||||
ClientType userSelectedClient = BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get();
|
||||
AudioStreamLanguage language = userSelectedClient == ClientType.ANDROID_VR_NO_AUTH
|
||||
AppLanguage language = userSelectedClient == ClientType.ANDROID_VR_NO_AUTH
|
||||
? BaseSettings.SPOOF_VIDEO_STREAMS_LANGUAGE.get()
|
||||
: AudioStreamLanguage.DEFAULT;
|
||||
: AppLanguage.DEFAULT;
|
||||
|
||||
JSONObject client = new JSONObject();
|
||||
client.put("hl", language.getLanguage());
|
||||
|
@ -2,11 +2,15 @@ package app.revanced.extension.youtube.settings;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.TextView;
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.settings.AppLanguage;
|
||||
import app.revanced.extension.shared.settings.BaseSettings;
|
||||
import app.revanced.extension.youtube.ThemeHelper;
|
||||
import app.revanced.extension.youtube.settings.preference.ReVancedPreferenceFragment;
|
||||
import app.revanced.extension.youtube.settings.preference.ReturnYouTubeDislikePreferenceFragment;
|
||||
@ -25,6 +29,19 @@ import static app.revanced.extension.shared.Utils.getResourceIdentifier;
|
||||
@SuppressWarnings("unused")
|
||||
public class LicenseActivityHook {
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
* Overrides the ReVanced settings language.
|
||||
*/
|
||||
public static Context getAttachBaseContext(Context original) {
|
||||
AppLanguage language = BaseSettings.REVANCED_LANGUAGE.get();
|
||||
if (language == AppLanguage.DEFAULT) {
|
||||
return original;
|
||||
}
|
||||
|
||||
return Utils.getContext();
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
* <p>
|
||||
|
@ -6,6 +6,7 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
|
||||
import app.revanced.patches.all.misc.packagename.setOrGetFallbackPackageName
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
@ -20,8 +21,12 @@ import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.fix.cairo.disableCairoSettingsPatch
|
||||
import app.revanced.patches.youtube.misc.fix.playbackspeed.fixPlaybackSpeedWhilePlayingPatch
|
||||
import app.revanced.util.*
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
|
||||
import com.android.tools.smali.dexlib2.util.MethodUtil
|
||||
|
||||
// Used by a fingerprint() from SettingsPatch.
|
||||
@ -150,6 +155,10 @@ val settingsPatch = bytecodePatch(
|
||||
inputType = InputType.TEXT_MULTI_LINE,
|
||||
tag = "app.revanced.extension.shared.settings.preference.ImportExportPreference",
|
||||
),
|
||||
ListPreference(
|
||||
key = "revanced_language",
|
||||
summaryKey = null
|
||||
)
|
||||
)
|
||||
|
||||
setThemeFingerprint.method.let { setThemeMethod ->
|
||||
@ -189,6 +198,32 @@ val settingsPatch = bytecodePatch(
|
||||
licenseActivityOnCreateFingerprint.classDef.apply {
|
||||
methods.removeIf { it.name != "onCreate" && !MethodUtil.isConstructor(it) }
|
||||
}
|
||||
|
||||
// Add context override to force a specific settings language.
|
||||
licenseActivityOnCreateFingerprint.classDef.apply {
|
||||
val attachBaseContext = ImmutableMethod(
|
||||
type,
|
||||
"attachBaseContext",
|
||||
listOf(ImmutableMethodParameter("Landroid/content/Context;", null, null)),
|
||||
"V",
|
||||
AccessFlags.PROTECTED.value,
|
||||
null,
|
||||
null,
|
||||
MutableMethodImplementation(3),
|
||||
).toMutable().apply {
|
||||
addInstructions(
|
||||
"""
|
||||
invoke-static { p1 }, $activityHookClassDescriptor->getAttachBaseContext(Landroid/content/Context;)Landroid/content/Context;
|
||||
move-result-object p1
|
||||
invoke-super { p0, p1 }, $superclass->attachBaseContext(Landroid/content/Context;)V
|
||||
return-void
|
||||
"""
|
||||
)
|
||||
}
|
||||
|
||||
methods.add(attachBaseContext)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
finalize {
|
||||
|
@ -47,8 +47,11 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch({
|
||||
tag = "app.revanced.extension.youtube.settings.preference.SpoofStreamingDataSideEffectsPreference"
|
||||
),
|
||||
ListPreference(
|
||||
"revanced_spoof_video_streams_language",
|
||||
summaryKey = null
|
||||
key = "revanced_spoof_video_streams_language",
|
||||
summaryKey = null,
|
||||
// Language strings are declared in Setting patch.
|
||||
entriesKey = "revanced_language_entries",
|
||||
entryValuesKey = "revanced_language_entry_values"
|
||||
),
|
||||
SwitchPreference("revanced_spoof_video_streams_ios_force_avc"),
|
||||
SwitchPreference("revanced_spoof_streaming_data_stats_for_nerds"),
|
||||
|
@ -1,74 +1,61 @@
|
||||
<resources>
|
||||
<app id="youtube">
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string-array name="revanced_spoof_video_streams_client_type_entries">
|
||||
<item>Android VR</item>
|
||||
<item>@string/revanced_spoof_video_streams_client_type_android_vr_no_auth</item>
|
||||
<item>Android TV</item>
|
||||
<item>iOS TV</item>
|
||||
<app id="shared">
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string-array name="revanced_language_entries">
|
||||
<item>@string/revanced_language_DEFAULT</item>
|
||||
<item>@string/revanced_language_AR</item>
|
||||
<item>@string/revanced_language_AZ</item>
|
||||
<item>@string/revanced_language_BG</item>
|
||||
<item>@string/revanced_language_BN</item>
|
||||
<item>@string/revanced_language_CA</item>
|
||||
<item>@string/revanced_language_CS</item>
|
||||
<item>@string/revanced_language_DA</item>
|
||||
<item>@string/revanced_language_DE</item>
|
||||
<item>@string/revanced_language_EL</item>
|
||||
<item>@string/revanced_language_EN</item>
|
||||
<item>@string/revanced_language_ES</item>
|
||||
<item>@string/revanced_language_ET</item>
|
||||
<item>@string/revanced_language_FA</item>
|
||||
<item>@string/revanced_language_FI</item>
|
||||
<item>@string/revanced_language_FR</item>
|
||||
<item>@string/revanced_language_GU</item>
|
||||
<item>@string/revanced_language_HI</item>
|
||||
<item>@string/revanced_language_HR</item>
|
||||
<item>@string/revanced_language_HU</item>
|
||||
<item>@string/revanced_language_ID</item>
|
||||
<item>@string/revanced_language_IT</item>
|
||||
<item>@string/revanced_language_JA</item>
|
||||
<item>@string/revanced_language_KK</item>
|
||||
<item>@string/revanced_language_KO</item>
|
||||
<item>@string/revanced_language_LT</item>
|
||||
<item>@string/revanced_language_LV</item>
|
||||
<item>@string/revanced_language_MK</item>
|
||||
<item>@string/revanced_language_MN</item>
|
||||
<item>@string/revanced_language_MR</item>
|
||||
<item>@string/revanced_language_MS</item>
|
||||
<item>@string/revanced_language_MY</item>
|
||||
<item>@string/revanced_language_NL</item>
|
||||
<item>@string/revanced_language_OR</item>
|
||||
<item>@string/revanced_language_PA</item>
|
||||
<item>@string/revanced_language_PL</item>
|
||||
<item>@string/revanced_language_PT</item>
|
||||
<item>@string/revanced_language_RO</item>
|
||||
<item>@string/revanced_language_RU</item>
|
||||
<item>@string/revanced_language_SK</item>
|
||||
<item>@string/revanced_language_SL</item>
|
||||
<item>@string/revanced_language_SR</item>
|
||||
<item>@string/revanced_language_SV</item>
|
||||
<item>@string/revanced_language_SW</item>
|
||||
<item>@string/revanced_language_TA</item>
|
||||
<item>@string/revanced_language_TE</item>
|
||||
<item>@string/revanced_language_TH</item>
|
||||
<item>@string/revanced_language_TR</item>
|
||||
<item>@string/revanced_language_UK</item>
|
||||
<item>@string/revanced_language_UR</item>
|
||||
<item>@string/revanced_language_VI</item>
|
||||
<item>@string/revanced_language_ZH</item>
|
||||
</string-array>
|
||||
<string-array name="revanced_spoof_video_streams_client_type_entry_values">
|
||||
<!-- Extension enum names. -->
|
||||
<item>ANDROID_VR</item>
|
||||
<item>ANDROID_VR_NO_AUTH</item>
|
||||
<item>ANDROID_UNPLUGGED</item>
|
||||
<item>IOS_UNPLUGGED</item>
|
||||
</string-array>
|
||||
<string-array name="revanced_spoof_video_streams_language_entries">
|
||||
<item>@string/revanced_spoof_video_streams_language_DEFAULT</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_AR</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_AZ</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_BG</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_BN</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_CA</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_CS</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_DA</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_DE</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_EL</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_EN</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_ES</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_ET</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_FA</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_FI</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_FR</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_GU</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_HI</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_HR</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_HU</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_ID</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_IT</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_JA</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_KK</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_KO</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_LT</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_LV</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_MK</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_MN</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_MR</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_MS</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_MY</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_NL</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_OR</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_PA</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_PL</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_PT</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_RO</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_RU</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_SK</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_SL</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_SR</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_SV</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_SW</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_TA</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_TE</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_TH</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_TR</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_UK</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_UR</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_VI</item>
|
||||
<item>@string/revanced_spoof_video_streams_language_ZH</item>
|
||||
</string-array>
|
||||
<string-array name="revanced_spoof_video_streams_language_entry_values">
|
||||
<string-array name="revanced_language_entry_values">
|
||||
<item>DEFAULT</item>
|
||||
<item>AR</item>
|
||||
<item>AZ</item>
|
||||
@ -123,6 +110,23 @@
|
||||
<item>ZH</item>
|
||||
</string-array>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string-array name="revanced_spoof_video_streams_client_type_entries">
|
||||
<item>Android VR</item>
|
||||
<item>@string/revanced_spoof_video_streams_client_type_android_vr_no_auth</item>
|
||||
<item>Android TV</item>
|
||||
<item>iOS TV</item>
|
||||
</string-array>
|
||||
<string-array name="revanced_spoof_video_streams_client_type_entry_values">
|
||||
<!-- Extension enum names. -->
|
||||
<item>ANDROID_VR</item>
|
||||
<item>ANDROID_VR_NO_AUTH</item>
|
||||
<item>ANDROID_UNPLUGGED</item>
|
||||
<item>IOS_UNPLUGGED</item>
|
||||
</string-array>
|
||||
</patch>
|
||||
<patch id="layout.spoofappversion.spoofAppVersionPatch">
|
||||
<string-array name="revanced_spoof_app_version_target_entries">
|
||||
<item>@string/revanced_spoof_app_version_target_entry_1</item>
|
||||
|
@ -42,6 +42,63 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_settings_import_reset">ReVanced settings reset to default</string>
|
||||
<string name="revanced_settings_import_success">Imported %d settings</string>
|
||||
<string name="revanced_settings_import_failure_parse">Import failed: %s</string>
|
||||
|
||||
<string name="revanced_language_title">ReVanced language</string>
|
||||
<string name="revanced_language_DEFAULT">App language</string>
|
||||
<string name="revanced_language_AR">Arabic</string>
|
||||
<string name="revanced_language_AZ">Azerbaijani</string>
|
||||
<string name="revanced_language_BG">Bulgarian</string>
|
||||
<string name="revanced_language_BN">Bengali</string>
|
||||
<string name="revanced_language_CA">Catalan</string>
|
||||
<string name="revanced_language_CS">Czech</string>
|
||||
<string name="revanced_language_DA">Danish</string>
|
||||
<string name="revanced_language_DE">German</string>
|
||||
<string name="revanced_language_EL">Greek</string>
|
||||
<string name="revanced_language_EN">English</string>
|
||||
<string name="revanced_language_ES">Spanish</string>
|
||||
<string name="revanced_language_ET">Estonian</string>
|
||||
<string name="revanced_language_FA">Persian</string>
|
||||
<string name="revanced_language_FI">Finnish</string>
|
||||
<string name="revanced_language_FR">French</string>
|
||||
<string name="revanced_language_GU">Gujarati</string>
|
||||
<string name="revanced_language_HI">Hindi</string>
|
||||
<string name="revanced_language_HR">Croatian</string>
|
||||
<string name="revanced_language_HU">Hungarian</string>
|
||||
<string name="revanced_language_ID">Indonesian</string>
|
||||
<string name="revanced_language_IT">Italian</string>
|
||||
<string name="revanced_language_JA">Japanese</string>
|
||||
<string name="revanced_language_KK">Kazakh</string>
|
||||
<string name="revanced_language_KO">Korean</string>
|
||||
<string name="revanced_language_LT">Lithuanian</string>
|
||||
<string name="revanced_language_LV">Latvian</string>
|
||||
<string name="revanced_language_MK">Macedonian</string>
|
||||
<string name="revanced_language_MN">Mongolian</string>
|
||||
<string name="revanced_language_MR">Marathi</string>
|
||||
<string name="revanced_language_MS">Malay</string>
|
||||
<string name="revanced_language_MY">Burmese</string>
|
||||
<string name="revanced_language_NL">Dutch</string>
|
||||
<string name="revanced_language_OR">Odia</string>
|
||||
<string name="revanced_language_PA">Punjabi</string>
|
||||
<string name="revanced_language_PL">Polish</string>
|
||||
<string name="revanced_language_PT">Portuguese</string>
|
||||
<string name="revanced_language_RO">Romanian</string>
|
||||
<string name="revanced_language_RU">Russian</string>
|
||||
<string name="revanced_language_SK">Slovak</string>
|
||||
<string name="revanced_language_SL">Slovene</string>
|
||||
<string name="revanced_language_SR">Serbian</string>
|
||||
<string name="revanced_language_SV">Swedish</string>
|
||||
<string name="revanced_language_SW">Swahili</string>
|
||||
<string name="revanced_language_TA">Tamil</string>
|
||||
<string name="revanced_language_TE">Telugu</string>
|
||||
<string name="revanced_language_TH">Thai</string>
|
||||
<string name="revanced_language_TR">Turkish</string>
|
||||
<string name="revanced_language_UK">Ukrainian</string>
|
||||
<string name="revanced_language_UR">Urdu</string>
|
||||
<string name="revanced_language_VI">Vietnamese</string>
|
||||
<string name="revanced_language_ZH">Chinese</string>
|
||||
|
||||
|
||||
|
||||
<string name="revanced_pref_import_export_title">Import / Export</string>
|
||||
<string name="revanced_pref_import_export_summary">Import / Export ReVanced settings</string>
|
||||
<!-- Settings about dialog. -->
|
||||
@ -1343,58 +1400,6 @@ AVC has a maximum resolution of 1080p, Opus audio codec is not available, and vi
|
||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Client type is shown in Stats for nerds</string>
|
||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Client is hidden in Stats for nerds</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">VR default audio stream language</string>
|
||||
<string name="revanced_spoof_video_streams_language_DEFAULT">App language</string>
|
||||
<string name="revanced_spoof_video_streams_language_AR">Arabic</string>
|
||||
<string name="revanced_spoof_video_streams_language_AZ">Azerbaijani</string>
|
||||
<string name="revanced_spoof_video_streams_language_BG">Bulgarian</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">Czech</string>
|
||||
<string name="revanced_spoof_video_streams_language_DA">Danish</string>
|
||||
<string name="revanced_spoof_video_streams_language_DE">German</string>
|
||||
<string name="revanced_spoof_video_streams_language_EL">Greek</string>
|
||||
<string name="revanced_spoof_video_streams_language_EN">English</string>
|
||||
<string name="revanced_spoof_video_streams_language_ES">Spanish</string>
|
||||
<string name="revanced_spoof_video_streams_language_ET">Estonian</string>
|
||||
<string name="revanced_spoof_video_streams_language_FA">Persian</string>
|
||||
<string name="revanced_spoof_video_streams_language_FI">Finnish</string>
|
||||
<string name="revanced_spoof_video_streams_language_FR">French</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">Croatian</string>
|
||||
<string name="revanced_spoof_video_streams_language_HU">Hungarian</string>
|
||||
<string name="revanced_spoof_video_streams_language_ID">Indonesian</string>
|
||||
<string name="revanced_spoof_video_streams_language_IT">Italian</string>
|
||||
<string name="revanced_spoof_video_streams_language_JA">Japanese</string>
|
||||
<string name="revanced_spoof_video_streams_language_KK">Kazakh</string>
|
||||
<string name="revanced_spoof_video_streams_language_KO">Korean</string>
|
||||
<string name="revanced_spoof_video_streams_language_LT">Lithuanian</string>
|
||||
<string name="revanced_spoof_video_streams_language_LV">Latvian</string>
|
||||
<string name="revanced_spoof_video_streams_language_MK">Macedonian</string>
|
||||
<string name="revanced_spoof_video_streams_language_MN">Mongolian</string>
|
||||
<string name="revanced_spoof_video_streams_language_MR">Marathi</string>
|
||||
<string name="revanced_spoof_video_streams_language_MS">Malay</string>
|
||||
<string name="revanced_spoof_video_streams_language_MY">Burmese</string>
|
||||
<string name="revanced_spoof_video_streams_language_NL">Dutch</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_PL">Polish</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT">Portuguese</string>
|
||||
<string name="revanced_spoof_video_streams_language_RO">Romanian</string>
|
||||
<string name="revanced_spoof_video_streams_language_RU">Russian</string>
|
||||
<string name="revanced_spoof_video_streams_language_SK">Slovak</string>
|
||||
<string name="revanced_spoof_video_streams_language_SL">Slovene</string>
|
||||
<string name="revanced_spoof_video_streams_language_SR">Serbian</string>
|
||||
<string name="revanced_spoof_video_streams_language_SV">Swedish</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">Turkish</string>
|
||||
<string name="revanced_spoof_video_streams_language_UK">Ukrainian</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">Chinese</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
|
Loading…
x
Reference in New Issue
Block a user