diff --git a/README.md b/README.md index 091dc29294..1bc4ed5921 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,7 @@ See the [documentation](https://github.com/inotia00/revanced-documentation#readm | `Remove background playback restrictions` | Removes restrictions on background playback, including for music and kids videos. | 18.29.38 ~ 19.16.39 | | `Remove viewer discretion dialog` | Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction. | 18.29.38 ~ 19.16.39 | | `Return YouTube Dislike` | Adds an option to show the dislike count of videos using the Return YouTube Dislike API. | 18.29.38 ~ 19.16.39 | +| `Return YouTube Username` | Adds an option to replace YouTube handles with usernames in comments using YouTube Data API v3. | 18.29.38 ~ 19.16.39 | | `Sanitize sharing links` | Adds an option to remove tracking query parameters from URLs when sharing links. | 18.29.38 ~ 19.16.39 | | `Seekbar components` | Adds options to hide or change components related to the seekbar. | 18.29.38 ~ 19.16.39 | | `Settings for YouTube` | Applies mandatory patches to implement ReVanced Extended settings into the application. | 18.29.38 ~ 19.16.39 | @@ -108,6 +109,7 @@ See the [documentation](https://github.com/inotia00/revanced-documentation#readm | `Remove viewer discretion dialog` | Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction. | 6.20.51 ~ 7.16.53 | | `Restore old style library shelf` | Adds an option to return the Library tab to the old style. | 6.20.51 ~ 7.16.53 | | `Return YouTube Dislike` | Adds an option to show the dislike count of songs using the Return YouTube Dislike API. | 6.20.51 ~ 7.16.53 | +| `Return YouTube Username` | Adds an option to replace YouTube handles with usernames in comments using YouTube Data API v3. | 6.20.51 ~ 7.16.53 | | `Sanitize sharing links` | Adds an option to remove tracking query parameters from URLs when sharing links. | 6.20.51 ~ 7.16.53 | | `Settings for YouTube Music` | Applies mandatory patches to implement ReVanced Extended settings into the application. | 6.20.51 ~ 7.16.53 | | `SponsorBlock` | Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as non-music sections. | 6.20.51 ~ 7.16.53 | diff --git a/gradle.properties b/gradle.properties index e9528e4829..5f18dd99b4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 4.14.2 +version = 4.15.1 diff --git a/patches.json b/patches.json index 6c6c83196a..1d595f23c3 100644 --- a/patches.json +++ b/patches.json @@ -1 +1 @@ -[{"name":"Alternative thumbnails","description":"Adds options to replace video thumbnails using the DeArrow API or image captures from the video.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Ambient mode control","description":"Adds options to disable Ambient mode and to bypass Ambient mode restrictions.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Amoled","description":"Applies a pure black theme to some components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bitrate default value","description":"Sets the audio quality to \u0027Always High\u0027 when you first install the app.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass image region restrictions","description":"Adds an option to use a different host for static images, so that images blocked in some countries can be received.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass image region restrictions","description":"Adds an option to use a different host for static images, so that images blocked in some countries can be received.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Certificate spoof","description":"Enables YouTube Music to work with Android Auto by spoofing the YouTube Music certificate.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change package name","description":"Changes the package name for Reddit to the name specified in options.json.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"PackageNameReddit","default":"com.reddit.frontpage","values":{"Clone":"com.reddit.frontpage.revanced","Default":"com.reddit.frontpage.rvx","Original":"com.reddit.frontpage"},"title":"Package name of Reddit","description":"The name of the package to rename the app to.","required":true}]},{"name":"Change player flyout menu toggles","description":"Adds an option to use text toggles instead of switch toggles within the additional settings menu.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change share sheet","description":"Add option to change from in-app share sheet to system share sheet.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change share sheet","description":"Add option to change from in-app share sheet to system share sheet.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change version code","description":"Changes the version code of the app to the value specified in options.json. Except when mounting, this can prevent app stores from updating the app and allow the app to be installed over an existing installation that has a higher version code. By default, the highest version code is set.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[{"key":"ChangeVersionCode","default":false,"values":null,"title":"Change version code","description":"Changes the version code of the app.","required":true},{"key":"VersionCode","default":"2147483647","values":null,"title":"Version code","description":"The version code to use. (1 ~ 2147483647)","required":true}]},{"name":"Custom Shorts action buttons","description":"Changes, at compile time, the icon of the action buttons of the Shorts player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"IconType","default":"cairo","values":{"Cairo":"cairo","Outline":"outline","OutlineCircle":"outlinecircle","Round":"round","YoutubeOutline":"youtubeoutline","YouTube":"youtube"},"title":"Shorts icon style ","description":"The style of the icons for the action buttons in the Shorts player.","required":true}]},{"name":"Custom branding icon for YouTube","description":"Changes the YouTube app icon to the icon specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"AppIcon","default":"revancify_blue","values":{"AFN Blue":"afn_blue","AFN Red":"afn_red","MMT":"mmt","Revancify Blue":"revancify_blue","Revancify Red":"revancify_red","YouTube":"youtube"},"title":"App icon","description":"The icon to apply to the app.\n\nIf a path to a folder is provided, the folder must contain the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders must contain the following files:\n\n- adaptiveproduct_youtube_background_color_108.png\n- adaptiveproduct_youtube_foreground_color_108.png\n- ic_launcher.png\n- ic_launcher_round.png","required":true},{"key":"ChangeSplashIcon","default":true,"values":null,"title":"Change splash icons","description":"Apply the custom branding icon to the splash screen.","required":true},{"key":"RestoreOldSplashAnimation","default":true,"values":null,"title":"Restore old splash animation","description":"Restore the old style splash animation.","required":true}]},{"name":"Custom branding icon for YouTube Music","description":"Changes the YouTube Music app icon to the icon specified in options.json.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"AppIcon","default":"revancify_blue","values":{"AFN Blue":"afn_blue","AFN Red":"afn_red","MMT":"mmt","Revancify Blue":"revancify_blue","Revancify Red":"revancify_red","YouTube Music":"youtube_music"},"title":"App icon","description":"The icon to apply to the app.\n\nIf a path to a folder is provided, the folder must contain the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders must contain the following files:\n\n- adaptiveproduct_youtube_music_background_color_108.png\n- adaptiveproduct_youtube_music_foreground_color_108.png\n- ic_launcher_release.png","required":true},{"key":"ChangeSplashIcon","default":true,"values":null,"title":"Change splash icons","description":"Apply the custom branding icon to the splash screen.","required":true},{"key":"RestoreOldSplashIcon","default":false,"values":null,"title":"Restore old splash icon","description":"Restore the old style splash icon.\n\nIf you enable both the old style splash icon and the Cairo splash animation,\n\nOld style splash icon will appear first and then the Cairo splash animation will start.","required":true}]},{"name":"Custom branding name for Reddit","description":"Renames the Reddit app to the name specified in options.json.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppName","default":"Reddit","values":{"Default":"RVX Reddit","Original":"Reddit"},"title":"App name","description":"The name of the app.","required":true}]},{"name":"Custom branding name for YouTube","description":"Renames the YouTube app to the name specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"AppName","default":"RVX","values":{"ReVanced Extended":"ReVanced Extended","RVX":"RVX","YouTube RVX":"YouTube RVX","YouTube":"YouTube"},"title":"App name","description":"The name of the app.","required":true}]},{"name":"Custom branding name for YouTube Music","description":"Renames the YouTube Music app to the name specified in options.json.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"AppNameNotification","default":"RVX Music","values":{"ReVanced Extended Music":"ReVanced Extended Music","RVX Music":"RVX Music","YouTube Music":"YouTube Music","YT Music":"YT Music"},"title":"App name in notification panel","description":"The name of the app as it appears in the notification panel.","required":true},{"key":"AppNameLauncher","default":"RVX Music","values":{"ReVanced Extended Music":"ReVanced Extended Music","RVX Music":"RVX Music","YouTube Music":"YouTube Music","YT Music":"YT Music"},"title":"App name in launcher","description":"The name of the app as it appears in the launcher.","required":true}]},{"name":"Custom double tap length","description":"Adds Double-tap to seek values that are specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"DoubleTapLengthArrays","default":"3, 5, 10, 15, 20, 30, 60, 120, 180","values":null,"title":"Double-tap to seek values","description":"A list of custom Double-tap to seek lengths to be added, separated by commas.","required":true}]},{"name":"Custom header for YouTube","description":"Applies a custom header in the top left corner within the app.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"CustomHeader","default":"custom_branding_icon","values":{"Custom branding icon":"custom_branding_icon"},"title":"Custom header","description":"The header to apply to the app.\n\nPatch option \u0027Custom branding icon\u0027 applies only when:\n\n1. Patch \u0027Custom branding icon for YouTube\u0027 is included.\n2. Patch option for \u0027Custom branding icon for YouTube\u0027 is selected from the preset.\n\nIf a path to a folder is provided, the folder must contain one or more of the following folders, depending on the DPI of the device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-hdpi\n- drawable-mdpi\n\nEach of the folders must contain all of the following files:\n\n[Generic header]\n\n- yt_wordmark_header_light.png\n- yt_wordmark_header_dark.png\n\nThe image dimensions must be as follows:\n\n- drawable-xxxhdpi: 488px x 192px\n- drawable-xxhdpi: 366px x 144px\n- drawable-xhdpi: 244px x 96px\n- drawable-hdpi: 184px x 72px\n- drawable-mdpi: 122px x 48px\n\n[Premium header]\n\n- yt_premium_wordmark_header_light.png\n- yt_premium_wordmark_header_dark.png\n\nThe image dimensions must be as follows:\n- drawable-xxxhdpi: 516px x 192px\n- drawable-xxhdpi: 387px x 144px\n- drawable-xhdpi: 258px x 96px\n- drawable-hdpi: 194px x 72px\n- drawable-mdpi: 129px x 48px","required":true}]},{"name":"Custom header for YouTube Music","description":"Applies a custom header in the top left corner within the app.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"CustomHeader","default":"custom_branding_icon","values":{"Custom branding icon":"custom_branding_icon"},"title":"Custom header","description":"The header to apply to the app.\n\nPatch option \u0027Custom branding icon\u0027 applies only when:\n\n1. Patch \u0027Custom branding icon for YouTube Music\u0027 is included.\n2. Patch option for \u0027Custom branding icon for YouTube Music\u0027 is selected from the preset.\n\nIf a path to a folder is provided, the folder must contain one or more of the following folders, depending on the DPI of the device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-hdpi\n- drawable-mdpi\n\nEach of the folders must contain all of the following files:\n\n- action_bar_logo.png\n- logo_music.png\n- ytm_logo.png\n\nThe image \u0027action_bar_logo.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 320px x 96px\n- drawable-xxhdpi: 240px x 72px\n- drawable-xhdpi: 160px x 48px\n- drawable-hdpi: 121px x 36px\n- drawable-mdpi: 80px x 24px\n\nThe image \u0027logo_music.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 576px x 200px\n- drawable-xxhdpi: 432px x 150px\n- drawable-xhdpi: 288px x 100px\n- drawable-hdpi: 217px x 76px\n- drawable-mdpi: 144px x 50px\n\nThe image \u0027ytm_logo.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 412px x 144px\n- drawable-xxhdpi: 309px x 108px\n- drawable-xhdpi: 206px x 72px\n- drawable-hdpi: 155px x 54px\n- drawable-mdpi: 103px x 36px","required":true}]},{"name":"Description components","description":"Adds options to hide and disable description components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable Cairo splash animation","description":"Adds an option to disable Cairo splash animation.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["7.06.54","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable QUIC protocol","description":"Adds an option to disable CronetEngine\u0027s QUIC protocol.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto audio tracks","description":"Adds an option to disable audio tracks from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable dislike redirection","description":"Adds an option to disable redirection to the next track when clicking the Dislike button.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable haptic feedback","description":"Adds options to disable haptic feedback when swiping in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable resuming Shorts on startup","description":"Adds an option to disable the Shorts player from resuming on app startup when Shorts were last being watched.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable screenshot popup","description":"Adds an option to disable the popup that appears when taking a screenshot.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable splash animation","description":"Adds an option to disable the splash animation on app startup.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable OPUS codec","description":"Adds an options to enable the OPUS audio codec if the player response includes.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable OPUS codec","description":"Adds an options to enable the OPUS audio codec if the player response includes.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debug logging","description":"Adds an option to enable debug logging.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debug logging","description":"Adds an option to enable debug logging.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable external browser","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable gradient loading screen","description":"Adds an option to enable the gradient loading screen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable landscape mode","description":"Adds an option to enable landscape mode when rotating the screen on phones.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable open links directly","description":"Adds an option to skip over redirection URLs in external links.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Flyout menu components","description":"Adds options to hide or change flyout menu components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Force hide player buttons background","description":"Removes, at compile time, the dark background surrounding the video player controls.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Fullscreen components","description":"Adds options to hide or change components related to fullscreen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"GmsCoreVendorGroupId","default":"app.revanced","values":{"ReVanced":"app.revanced"},"title":"GmsCore vendor group ID","description":"The vendor\u0027s group ID for GmsCore.","required":true},{"key":"CheckGmsCore","default":true,"values":null,"title":"Check GmsCore","description":"Check if GmsCore is installed on the device and has battery optimizations disabled when the app starts. \n\nIf GmsCore is not installed the app will not work, so disabling this is not recommended.","required":true},{"key":"PackageNameYouTube","default":"app.rvx.android.youtube","values":{"Clone":"com.rvx.android.youtube","Default":"app.rvx.android.youtube"},"title":"Package name of YouTube","description":"The name of the package to use in GmsCore support.","required":true},{"key":"PackageNameYouTubeMusic","default":"app.rvx.android.apps.youtube.music","values":{"Clone":"com.rvx.android.apps.youtube.music","Default":"app.rvx.android.apps.youtube.music"},"title":"Package name of YouTube Music","description":"The name of the package to use in GmsCore support.","required":true}]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"GmsCoreVendorGroupId","default":"app.revanced","values":{"ReVanced":"app.revanced"},"title":"GmsCore vendor group ID","description":"The vendor\u0027s group ID for GmsCore.","required":true},{"key":"CheckGmsCore","default":true,"values":null,"title":"Check GmsCore","description":"Check if GmsCore is installed on the device and has battery optimizations disabled when the app starts. \n\nIf GmsCore is not installed the app will not work, so disabling this is not recommended.","required":true},{"key":"PackageNameYouTube","default":"app.rvx.android.youtube","values":{"Clone":"com.rvx.android.youtube","Default":"app.rvx.android.youtube"},"title":"Package name of YouTube","description":"The name of the package to use in GmsCore support.","required":true},{"key":"PackageNameYouTubeMusic","default":"app.rvx.android.apps.youtube.music","values":{"Clone":"com.rvx.android.apps.youtube.music","Default":"app.rvx.android.apps.youtube.music"},"title":"Package name of YouTube Music","description":"The name of the package to use in GmsCore support.","required":true}]},{"name":"Hide Recently Visited shelf","description":"Adds an option to hide the Recently Visited shelf in the sidebar.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide Shorts dimming","description":"Removes, at compile time, the dimming effect at the top and bottom of Shorts videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide account components","description":"Adds options to hide components related to the account menu.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide action bar components","description":"Adds options to hide action bar components and replace the offline download button with an external download button.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide action buttons","description":"Adds options to hide action buttons under videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":true,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide comments components","description":"Adds options to hide components related to comments.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide feed components","description":"Adds options to hide components related to feeds.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide feed flyout menu","description":"Adds the ability to hide feed flyout menu components using a custom filter.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide navigation buttons","description":"Adds options to hide buttons in the navigation bar.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide overlay filter","description":"Removes, at compile time, the dark overlay that appears when player flyout menus are open.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide player buttons","description":"Adds options to hide buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player flyout menu","description":"Adds options to hide player flyout menu components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player overlay filter","description":"Removes, at compile time, the dark overlay that appears when single-tapping in the player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide recommended communities shelf","description":"Adds an option to hide the recommended communities shelves in subreddits.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide shortcuts","description":"Remove, at compile time, the app shortcuts that appears when app icon is long pressed.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"Explore","default":false,"values":null,"title":"Hide Explore","description":"Hide Explore from shortcuts.","required":true},{"key":"Subscriptions","default":false,"values":null,"title":"Hide Subscriptions","description":"Hide Subscriptions from shortcuts.","required":true},{"key":"Search","default":false,"values":null,"title":"Hide Search","description":"Hide Search from shortcuts.","required":true},{"key":"Shorts","default":true,"values":null,"title":"Hide Shorts","description":"Hide Shorts from shortcuts.","required":true}]},{"name":"Hook YouTube Music actions","description":"Adds support for opening music in RVX Music using the in-app YouTube Music button.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hook download actions","description":"Adds support to download videos with an external downloader app using the in-app download button.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Layout switch","description":"Adds an option to spoof the dpi in order to use a tablet or phone layout.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"MaterialYou","description":"Applies the MaterialYou theme for Android 12+ devices.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Miniplayer","description":"Adds options to change the in app minimized player, and if patching target 19.16+ adds options to use modern miniplayers.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation bar components","description":"Adds options to hide or change components related to the navigation bar.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation bar components","description":"Adds options to hide or change components related to the navigation bar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links directly","description":"Adds an option to skip over redirection URLs in external links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links externally","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Overlay buttons","description":"Adds options to display overlay buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"IconType","default":"bold","values":{"Bold":"bold","Rounded":"rounded","Thin":"thin"},"title":"Icon type","description":"The icon type.","required":true},{"key":"BottomMargin","default":"2.5dip","values":{"Default":"2.5dip","None":"0.0dip","Wider":"5.0dip"},"title":"Bottom margin","description":"The bottom margin for the overlay buttons and timestamp.","required":true},{"key":"WiderButtonsSpace","default":false,"values":null,"title":"Wider between-buttons space","description":"Prevent adjacent button presses by increasing the horizontal spacing between buttons.","required":true},{"key":"ChangeTopButtons","default":false,"values":null,"title":"Change top buttons","description":"Change the icons at the top of the player.","required":true}]},{"name":"Player components","description":"Adds options to hide or change components related to the player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Player components","description":"Adds options to hide or change components related to the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Premium icon","description":"Unlocks premium app icons.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove background playback restrictions","description":"Removes restrictions on background playback, including for kids videos.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove background playback restrictions","description":"Removes restrictions on background playback, including for music and kids videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove subreddit dialog","description":"Adds options to remove the NSFW community warning and notifications suggestion dialogs by dismissing them automatically.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Restore old style library shelf","description":"Adds an option to return the Library tab to the old style.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of songs using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of videos using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Seekbar components","description":"Adds options to hide or change components related to the seekbar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Settings for Reddit","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Settings for YouTube","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"InsertPosition","default":"@string/about_key","values":{"Parent settings":"@string/parent_tools_key","General":"@string/general_key","Account":"@string/account_switcher_key","Data saving":"@string/data_saving_settings_key","Autoplay":"@string/auto_play_key","Video quality preferences":"@string/video_quality_settings_key","Background":"@string/offline_key","Watch on TV":"@string/pair_with_tv_key","Manage all history":"@string/history_key","Your data in YouTube":"@string/your_data_key","Privacy":"@string/privacy_key","History \u0026 privacy":"@string/privacy_key","Try experimental new features":"@string/premium_early_access_browse_page_key","Purchases and memberships":"@string/subscription_product_setting_key","Billing \u0026 payments":"@string/billing_and_payment_key","Billing and payments":"@string/billing_and_payment_key","Notifications":"@string/notification_key","Connected apps":"@string/connected_accounts_browse_page_key","Live chat":"@string/live_chat_key","Captions":"@string/captions_key","Accessibility":"@string/accessibility_settings_key","About":"@string/about_key"},"title":"Insert position","description":"The settings menu name that the RVX settings menu should be above.","required":true},{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Settings for YouTube Music","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Shorts components","description":"Adds options to hide or change components related to YouTube Shorts.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as non-music sections.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as sponsored content.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"OutlineIcon","default":false,"values":null,"title":"Outline icons","description":"Apply the outline icon.","required":true}]},{"name":"Spoof app version","description":"Adds options to spoof the YouTube Music client version. This can remove the radio mode restriction in Canadian regions or disable real-time lyrics.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof app version","description":"Adds options to spoof the YouTube client version. This can be used to restore old UI elements and features.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof streaming data","description":"Adds options to spoof the streaming data to allow video playback.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Swipe controls","description":"Adds options for controlling volume and brightness with swiping, and whether to enter fullscreen when swiping down below the player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Theme","description":"Changes the app\u0027s theme to the values specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"DarkThemeBackgroundColor","default":"@android:color/black","values":{"Amoled Black":"@android:color/black","Catppuccin (Mocha)":"#FF181825","Dark Pink":"#FF290025","Dark Blue":"#FF001029","Dark Green":"#FF002905","Dark Yellow":"#FF282900","Dark Orange":"#FF291800","Dark Red":"#FF290000"},"title":"Dark theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":true},{"key":"LightThemeBackgroundColor","default":"@android:color/white","values":{"White":"@android:color/white","Catppuccin (Latte)":"#FFE6E9EF","Light Pink":"#FFFCCFF3","Light Blue":"#FFD1E0FF","Light Green":"#FFCCFFCC","Light Yellow":"#FFFDFFCC","Light Orange":"#FFFFE6CC","Light Red":"#FFFFD6D6"},"title":"Light theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":true}]},{"name":"Toolbar components","description":"Adds options to hide or change components located on the toolbar, such as toolbar buttons, search bar, and header.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Translations for YouTube","description":"Add translations or remove string resources.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CustomTranslations","default":"","values":null,"title":"Custom translations","description":"The path to the \u0027strings.xml\u0027 file.\nPlease note that applying the \u0027strings.xml\u0027 file will overwrite all existing translations.","required":true},{"key":"SelectedTranslations","default":"ar, bg-rBG, de-rDE, el-rGR, es-rES, fr-rFR, hu-rHU, it-rIT, ja-rJP, ko-rKR, pl-rPL, pt-rBR, ru-rRU, tr-rTR, uk-rUA, vi-rVN, zh-rCN, zh-rTW","values":null,"title":"Translations to add","description":"A list of translations to be added for the RVX settings, separated by commas.","required":true},{"key":"SelectedStringResources","default":"af, am, ar, ar-rXB, as, az, b+es+419, b+sr+Latn, be, bg, bn, bs, ca, cs, da, de, el, en-rAU, en-rCA, en-rGB, en-rIN, en-rXA, en-rXC, es, es-rUS, et, eu, fa, fi, fr, fr-rCA, gl, gu, hi, hr, hu, hy, id, in, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, nb, ne, nl, no, or, pa, pl, pt, pt-rBR, pt-rPT, ro, ru, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, uk, ur, uz, vi, zh, zh-rCN, zh-rHK, zh-rTW, zu","values":null,"title":"String resources to keep","description":"A list of string resources to be kept, separated by commas.\nString resources not in the list will be removed from the app.\n\nDefault string resource, English, is not removed.","required":true}]},{"name":"Translations for YouTube Music","description":"Add translations or remove string resources.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CustomTranslations","default":"","values":null,"title":"Custom translations","description":"The path to the \u0027strings.xml\u0027 file.\nPlease note that applying the \u0027strings.xml\u0027 file will overwrite all existing language translations.","required":true},{"key":"SelectedTranslations","default":"bg-rBG, bn, cs-rCZ, el-rGR, es-rES, fr-rFR, hu-rHU, id-rID, in, it-rIT, ja-rJP, ko-rKR, nl-rNL, pl-rPL, pt-rBR, ro-rRO, ru-rRU, tr-rTR, uk-rUA, vi-rVN, zh-rCN, zh-rTW","values":null,"title":"Translations to add","description":"A list of translations to be added for the RVX settings, separated by commas.","required":true},{"key":"SelectedStringResources","default":"af, am, ar, ar-rXB, as, az, b+es+419, b+sr+Latn, be, bg, bn, bs, ca, cs, da, de, el, en-rAU, en-rCA, en-rGB, en-rIN, en-rXA, en-rXC, es, es-rUS, et, eu, fa, fi, fr, fr-rCA, gl, gu, hi, hr, hu, hy, id, in, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, nb, ne, nl, no, or, pa, pl, pt, pt-rBR, pt-rPT, ro, ru, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, uk, ur, uz, vi, zh, zh-rCN, zh-rHK, zh-rTW, zu","values":null,"title":"String resources to keep","description":"A list of string resources to be kept, separated by commas.\nString resources not in the list will be removed from the app.\n\nDefault string resource, English, is not removed.","required":true}]},{"name":"Video playback","description":"Adds options to customize settings related to video playback, such as default video quality and playback speed.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Video playback","description":"Adds options to customize settings related to video playback, such as default video quality and playback speed.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Visual preferences icons for YouTube","description":"Adds icons to specific preferences in the settings.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"RVXSettingsMenuIcon","default":"extension","values":{"Custom branding icon":"custom_branding_icon","Extension":"extension","Gear":"gear","YT alt":"yt_alt","ReVanced":"revanced","ReVanced Colored":"revanced_colored"},"title":"RVX settings menu icon","description":"The icon for the RVX settings menu.","required":true},{"key":"ApplyToAll","default":false,"values":null,"title":"Apply to all settings menu","description":"Whether to apply Visual preferences icons to all settings menus.\n\nIf true: icons are applied to the parent PreferenceScreen of YouTube settings, the parent PreferenceScreen of RVX settings and the RVX sub-settings (if supported).\n\nIf false: icons are applied only to the parent PreferenceScreen of YouTube settings and RVX settings.","required":true}]},{"name":"Visual preferences icons for YouTube Music","description":"Adds icons to specific preferences in the settings.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"RVXSettingsMenuIcon","default":"extension","values":{"Custom branding icon":"custom_branding_icon","Extension":"extension","Gear":"gear","ReVanced":"revanced","ReVanced Colored":"revanced_colored"},"title":"RVX settings menu icon","description":"The icon for the RVX settings menu.","required":true}]},{"name":"Watch history","description":"Adds an option to change the domain of the watch history or check its status.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]}] \ No newline at end of file +[{"name":"Alternative thumbnails","description":"Adds options to replace video thumbnails using the DeArrow API or image captures from the video.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Ambient mode control","description":"Adds options to disable Ambient mode and to bypass Ambient mode restrictions.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Amoled","description":"Applies a pure black theme to some components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bitrate default value","description":"Sets the audio quality to \u0027Always High\u0027 when you first install the app.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass image region restrictions","description":"Adds an option to use a different host for static images, so that images blocked in some countries can be received.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass image region restrictions","description":"Adds an option to use a different host for static images, so that images blocked in some countries can be received.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Certificate spoof","description":"Enables YouTube Music to work with Android Auto by spoofing the YouTube Music certificate.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change package name","description":"Changes the package name for Reddit to the name specified in options.json.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"PackageNameReddit","default":"com.reddit.frontpage","values":{"Clone":"com.reddit.frontpage.revanced","Default":"com.reddit.frontpage.rvx","Original":"com.reddit.frontpage"},"title":"Package name of Reddit","description":"The name of the package to rename the app to.","required":true}]},{"name":"Change player flyout menu toggles","description":"Adds an option to use text toggles instead of switch toggles within the additional settings menu.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change share sheet","description":"Add option to change from in-app share sheet to system share sheet.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change share sheet","description":"Add option to change from in-app share sheet to system share sheet.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change version code","description":"Changes the version code of the app to the value specified in options.json. Except when mounting, this can prevent app stores from updating the app and allow the app to be installed over an existing installation that has a higher version code. By default, the highest version code is set.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[{"key":"ChangeVersionCode","default":false,"values":null,"title":"Change version code","description":"Changes the version code of the app.","required":true},{"key":"VersionCode","default":"2147483647","values":null,"title":"Version code","description":"The version code to use. (1 ~ 2147483647)","required":true}]},{"name":"Custom Shorts action buttons","description":"Changes, at compile time, the icon of the action buttons of the Shorts player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"IconType","default":"cairo","values":{"Cairo":"cairo","Outline":"outline","OutlineCircle":"outlinecircle","Round":"round","YoutubeOutline":"youtubeoutline","YouTube":"youtube"},"title":"Shorts icon style ","description":"The style of the icons for the action buttons in the Shorts player.","required":true}]},{"name":"Custom branding icon for YouTube","description":"Changes the YouTube app icon to the icon specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"AppIcon","default":"revancify_blue","values":{"AFN Blue":"afn_blue","AFN Red":"afn_red","MMT":"mmt","Revancify Blue":"revancify_blue","Revancify Red":"revancify_red","YouTube":"youtube"},"title":"App icon","description":"The icon to apply to the app.\n\nIf a path to a folder is provided, the folder must contain the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders must contain the following files:\n\n- adaptiveproduct_youtube_background_color_108.png\n- adaptiveproduct_youtube_foreground_color_108.png\n- ic_launcher.png\n- ic_launcher_round.png","required":true},{"key":"ChangeSplashIcon","default":true,"values":null,"title":"Change splash icons","description":"Apply the custom branding icon to the splash screen.","required":true},{"key":"RestoreOldSplashAnimation","default":true,"values":null,"title":"Restore old splash animation","description":"Restore the old style splash animation.","required":true}]},{"name":"Custom branding icon for YouTube Music","description":"Changes the YouTube Music app icon to the icon specified in options.json.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"AppIcon","default":"revancify_blue","values":{"AFN Blue":"afn_blue","AFN Red":"afn_red","MMT":"mmt","Revancify Blue":"revancify_blue","Revancify Red":"revancify_red","YouTube Music":"youtube_music"},"title":"App icon","description":"The icon to apply to the app.\n\nIf a path to a folder is provided, the folder must contain the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders must contain the following files:\n\n- adaptiveproduct_youtube_music_background_color_108.png\n- adaptiveproduct_youtube_music_foreground_color_108.png\n- ic_launcher_release.png","required":true},{"key":"ChangeSplashIcon","default":true,"values":null,"title":"Change splash icons","description":"Apply the custom branding icon to the splash screen.","required":true},{"key":"RestoreOldSplashIcon","default":false,"values":null,"title":"Restore old splash icon","description":"Restore the old style splash icon.\n\nIf you enable both the old style splash icon and the Cairo splash animation,\n\nOld style splash icon will appear first and then the Cairo splash animation will start.","required":true}]},{"name":"Custom branding name for Reddit","description":"Renames the Reddit app to the name specified in options.json.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppName","default":"Reddit","values":{"Default":"RVX Reddit","Original":"Reddit"},"title":"App name","description":"The name of the app.","required":true}]},{"name":"Custom branding name for YouTube","description":"Renames the YouTube app to the name specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"AppName","default":"RVX","values":{"ReVanced Extended":"ReVanced Extended","RVX":"RVX","YouTube RVX":"YouTube RVX","YouTube":"YouTube"},"title":"App name","description":"The name of the app.","required":true}]},{"name":"Custom branding name for YouTube Music","description":"Renames the YouTube Music app to the name specified in options.json.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"AppNameNotification","default":"RVX Music","values":{"ReVanced Extended Music":"ReVanced Extended Music","RVX Music":"RVX Music","YouTube Music":"YouTube Music","YT Music":"YT Music"},"title":"App name in notification panel","description":"The name of the app as it appears in the notification panel.","required":true},{"key":"AppNameLauncher","default":"RVX Music","values":{"ReVanced Extended Music":"ReVanced Extended Music","RVX Music":"RVX Music","YouTube Music":"YouTube Music","YT Music":"YT Music"},"title":"App name in launcher","description":"The name of the app as it appears in the launcher.","required":true}]},{"name":"Custom double tap length","description":"Adds Double-tap to seek values that are specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"DoubleTapLengthArrays","default":"3, 5, 10, 15, 20, 30, 60, 120, 180","values":null,"title":"Double-tap to seek values","description":"A list of custom Double-tap to seek lengths to be added, separated by commas.","required":true}]},{"name":"Custom header for YouTube","description":"Applies a custom header in the top left corner within the app.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"CustomHeader","default":"custom_branding_icon","values":{"Custom branding icon":"custom_branding_icon"},"title":"Custom header","description":"The header to apply to the app.\n\nPatch option \u0027Custom branding icon\u0027 applies only when:\n\n1. Patch \u0027Custom branding icon for YouTube\u0027 is included.\n2. Patch option for \u0027Custom branding icon for YouTube\u0027 is selected from the preset.\n\nIf a path to a folder is provided, the folder must contain one or more of the following folders, depending on the DPI of the device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-hdpi\n- drawable-mdpi\n\nEach of the folders must contain all of the following files:\n\n[Generic header]\n\n- yt_wordmark_header_light.png\n- yt_wordmark_header_dark.png\n\nThe image dimensions must be as follows:\n\n- drawable-xxxhdpi: 488px x 192px\n- drawable-xxhdpi: 366px x 144px\n- drawable-xhdpi: 244px x 96px\n- drawable-hdpi: 184px x 72px\n- drawable-mdpi: 122px x 48px\n\n[Premium header]\n\n- yt_premium_wordmark_header_light.png\n- yt_premium_wordmark_header_dark.png\n\nThe image dimensions must be as follows:\n- drawable-xxxhdpi: 516px x 192px\n- drawable-xxhdpi: 387px x 144px\n- drawable-xhdpi: 258px x 96px\n- drawable-hdpi: 194px x 72px\n- drawable-mdpi: 129px x 48px","required":true}]},{"name":"Custom header for YouTube Music","description":"Applies a custom header in the top left corner within the app.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"CustomHeader","default":"custom_branding_icon","values":{"Custom branding icon":"custom_branding_icon"},"title":"Custom header","description":"The header to apply to the app.\n\nPatch option \u0027Custom branding icon\u0027 applies only when:\n\n1. Patch \u0027Custom branding icon for YouTube Music\u0027 is included.\n2. Patch option for \u0027Custom branding icon for YouTube Music\u0027 is selected from the preset.\n\nIf a path to a folder is provided, the folder must contain one or more of the following folders, depending on the DPI of the device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-hdpi\n- drawable-mdpi\n\nEach of the folders must contain all of the following files:\n\n- action_bar_logo.png\n- logo_music.png\n- ytm_logo.png\n\nThe image \u0027action_bar_logo.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 320px x 96px\n- drawable-xxhdpi: 240px x 72px\n- drawable-xhdpi: 160px x 48px\n- drawable-hdpi: 121px x 36px\n- drawable-mdpi: 80px x 24px\n\nThe image \u0027logo_music.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 576px x 200px\n- drawable-xxhdpi: 432px x 150px\n- drawable-xhdpi: 288px x 100px\n- drawable-hdpi: 217px x 76px\n- drawable-mdpi: 144px x 50px\n\nThe image \u0027ytm_logo.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 412px x 144px\n- drawable-xxhdpi: 309px x 108px\n- drawable-xhdpi: 206px x 72px\n- drawable-hdpi: 155px x 54px\n- drawable-mdpi: 103px x 36px","required":true}]},{"name":"Description components","description":"Adds options to hide and disable description components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable Cairo splash animation","description":"Adds an option to disable Cairo splash animation.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["7.06.54","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable QUIC protocol","description":"Adds an option to disable CronetEngine\u0027s QUIC protocol.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto audio tracks","description":"Adds an option to disable audio tracks from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable dislike redirection","description":"Adds an option to disable redirection to the next track when clicking the Dislike button.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable haptic feedback","description":"Adds options to disable haptic feedback when swiping in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable resuming Shorts on startup","description":"Adds an option to disable the Shorts player from resuming on app startup when Shorts were last being watched.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable screenshot popup","description":"Adds an option to disable the popup that appears when taking a screenshot.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable splash animation","description":"Adds an option to disable the splash animation on app startup.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable OPUS codec","description":"Adds an options to enable the OPUS audio codec if the player response includes.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable OPUS codec","description":"Adds an options to enable the OPUS audio codec if the player response includes.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debug logging","description":"Adds an option to enable debug logging.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debug logging","description":"Adds an option to enable debug logging.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable external browser","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable gradient loading screen","description":"Adds an option to enable the gradient loading screen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable landscape mode","description":"Adds an option to enable landscape mode when rotating the screen on phones.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable open links directly","description":"Adds an option to skip over redirection URLs in external links.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Flyout menu components","description":"Adds options to hide or change flyout menu components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Force hide player buttons background","description":"Removes, at compile time, the dark background surrounding the video player controls.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Fullscreen components","description":"Adds options to hide or change components related to fullscreen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"GmsCoreVendorGroupId","default":"app.revanced","values":{"ReVanced":"app.revanced"},"title":"GmsCore vendor group ID","description":"The vendor\u0027s group ID for GmsCore.","required":true},{"key":"CheckGmsCore","default":true,"values":null,"title":"Check GmsCore","description":"Check if GmsCore is installed on the device and has battery optimizations disabled when the app starts. \n\nIf GmsCore is not installed the app will not work, so disabling this is not recommended.","required":true},{"key":"DisableGmsServiceBroker","default":false,"values":null,"title":"Disable GmsService Broker","description":"Disabling GmsServiceBroker will somewhat improve crashes caused by unimplemented GmsCore services.\n\nFor YouTube, the \u0027Spoof streaming data\u0027 setting is required.","required":true},{"key":"PackageNameYouTube","default":"app.rvx.android.youtube","values":{"Clone":"com.rvx.android.youtube","Default":"app.rvx.android.youtube"},"title":"Package name of YouTube","description":"The name of the package to use in GmsCore support.","required":true},{"key":"PackageNameYouTubeMusic","default":"app.rvx.android.apps.youtube.music","values":{"Clone":"com.rvx.android.apps.youtube.music","Default":"app.rvx.android.apps.youtube.music"},"title":"Package name of YouTube Music","description":"The name of the package to use in GmsCore support.","required":true}]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"GmsCoreVendorGroupId","default":"app.revanced","values":{"ReVanced":"app.revanced"},"title":"GmsCore vendor group ID","description":"The vendor\u0027s group ID for GmsCore.","required":true},{"key":"CheckGmsCore","default":true,"values":null,"title":"Check GmsCore","description":"Check if GmsCore is installed on the device and has battery optimizations disabled when the app starts. \n\nIf GmsCore is not installed the app will not work, so disabling this is not recommended.","required":true},{"key":"DisableGmsServiceBroker","default":false,"values":null,"title":"Disable GmsService Broker","description":"Disabling GmsServiceBroker will somewhat improve crashes caused by unimplemented GmsCore services.\n\nFor YouTube, the \u0027Spoof streaming data\u0027 setting is required.","required":true},{"key":"PackageNameYouTube","default":"app.rvx.android.youtube","values":{"Clone":"com.rvx.android.youtube","Default":"app.rvx.android.youtube"},"title":"Package name of YouTube","description":"The name of the package to use in GmsCore support.","required":true},{"key":"PackageNameYouTubeMusic","default":"app.rvx.android.apps.youtube.music","values":{"Clone":"com.rvx.android.apps.youtube.music","Default":"app.rvx.android.apps.youtube.music"},"title":"Package name of YouTube Music","description":"The name of the package to use in GmsCore support.","required":true}]},{"name":"Hide Recently Visited shelf","description":"Adds an option to hide the Recently Visited shelf in the sidebar.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide Shorts dimming","description":"Removes, at compile time, the dimming effect at the top and bottom of Shorts videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide account components","description":"Adds options to hide components related to the account menu.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide action bar components","description":"Adds options to hide action bar components and replace the offline download button with an external download button.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide action buttons","description":"Adds options to hide action buttons under videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":true,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide comments components","description":"Adds options to hide components related to comments.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide feed components","description":"Adds options to hide components related to feeds.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide feed flyout menu","description":"Adds the ability to hide feed flyout menu components using a custom filter.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide navigation buttons","description":"Adds options to hide buttons in the navigation bar.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide overlay filter","description":"Removes, at compile time, the dark overlay that appears when player flyout menus are open.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide player buttons","description":"Adds options to hide buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player flyout menu","description":"Adds options to hide player flyout menu components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player overlay filter","description":"Removes, at compile time, the dark overlay that appears when single-tapping in the player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide recommended communities shelf","description":"Adds an option to hide the recommended communities shelves in subreddits.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide shortcuts","description":"Remove, at compile time, the app shortcuts that appears when app icon is long pressed.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"Explore","default":false,"values":null,"title":"Hide Explore","description":"Hide Explore from shortcuts.","required":true},{"key":"Subscriptions","default":false,"values":null,"title":"Hide Subscriptions","description":"Hide Subscriptions from shortcuts.","required":true},{"key":"Search","default":false,"values":null,"title":"Hide Search","description":"Hide Search from shortcuts.","required":true},{"key":"Shorts","default":true,"values":null,"title":"Hide Shorts","description":"Hide Shorts from shortcuts.","required":true}]},{"name":"Hook YouTube Music actions","description":"Adds support for opening music in RVX Music using the in-app YouTube Music button.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hook download actions","description":"Adds support to download videos with an external downloader app using the in-app download button.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Layout switch","description":"Adds an option to spoof the dpi in order to use a tablet or phone layout.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"MaterialYou","description":"Applies the MaterialYou theme for Android 12+ devices.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Miniplayer","description":"Adds options to change the in app minimized player, and if patching target 19.16+ adds options to use modern miniplayers.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation bar components","description":"Adds options to hide or change components related to the navigation bar.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation bar components","description":"Adds options to hide or change components related to the navigation bar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links directly","description":"Adds an option to skip over redirection URLs in external links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links externally","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Overlay buttons","description":"Adds options to display overlay buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"IconType","default":"bold","values":{"Bold":"bold","Rounded":"rounded","Thin":"thin"},"title":"Icon type","description":"The icon type.","required":true},{"key":"BottomMargin","default":"2.5dip","values":{"Default":"2.5dip","None":"0.0dip","Wider":"5.0dip"},"title":"Bottom margin","description":"The bottom margin for the overlay buttons and timestamp.","required":true},{"key":"WiderButtonsSpace","default":false,"values":null,"title":"Wider between-buttons space","description":"Prevent adjacent button presses by increasing the horizontal spacing between buttons.","required":true},{"key":"ChangeTopButtons","default":false,"values":null,"title":"Change top buttons","description":"Change the icons at the top of the player.","required":true}]},{"name":"Player components","description":"Adds options to hide or change components related to the player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Player components","description":"Adds options to hide or change components related to the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Premium icon","description":"Unlocks premium app icons.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove background playback restrictions","description":"Removes restrictions on background playback, including for kids videos.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove background playback restrictions","description":"Removes restrictions on background playback, including for music and kids videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove subreddit dialog","description":"Adds options to remove the NSFW community warning and notifications suggestion dialogs by dismissing them automatically.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Restore old style library shelf","description":"Adds an option to return the Library tab to the old style.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of songs using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of videos using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Username","description":"Adds an option to replace YouTube handles with usernames in comments using YouTube Data API v3.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Username","description":"Adds an option to replace YouTube handles with usernames in comments using YouTube Data API v3.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Seekbar components","description":"Adds options to hide or change components related to the seekbar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Settings for Reddit","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Settings for YouTube","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"InsertPosition","default":"@string/about_key","values":{"Parent settings":"@string/parent_tools_key","General":"@string/general_key","Account":"@string/account_switcher_key","Data saving":"@string/data_saving_settings_key","Autoplay":"@string/auto_play_key","Video quality preferences":"@string/video_quality_settings_key","Background":"@string/offline_key","Watch on TV":"@string/pair_with_tv_key","Manage all history":"@string/history_key","Your data in YouTube":"@string/your_data_key","Privacy":"@string/privacy_key","History \u0026 privacy":"@string/privacy_key","Try experimental new features":"@string/premium_early_access_browse_page_key","Purchases and memberships":"@string/subscription_product_setting_key","Billing \u0026 payments":"@string/billing_and_payment_key","Billing and payments":"@string/billing_and_payment_key","Notifications":"@string/notification_key","Connected apps":"@string/connected_accounts_browse_page_key","Live chat":"@string/live_chat_key","Captions":"@string/captions_key","Accessibility":"@string/accessibility_settings_key","About":"@string/about_key"},"title":"Insert position","description":"The settings menu name that the RVX settings menu should be above.","required":true},{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Settings for YouTube Music","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Shorts components","description":"Adds options to hide or change components related to YouTube Shorts.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as non-music sections.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as sponsored content.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"OutlineIcon","default":false,"values":null,"title":"Outline icons","description":"Apply the outline icon.","required":true}]},{"name":"Spoof app version","description":"Adds options to spoof the YouTube Music client version. This can remove the radio mode restriction in Canadian regions or disable real-time lyrics.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof app version","description":"Adds options to spoof the YouTube client version. This can be used to restore old UI elements and features.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof streaming data","description":"Adds options to spoof the streaming data to allow video playback.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Swipe controls","description":"Adds options for controlling volume and brightness with swiping, and whether to enter fullscreen when swiping down below the player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Theme","description":"Changes the app\u0027s theme to the values specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"DarkThemeBackgroundColor","default":"@android:color/black","values":{"Amoled Black":"@android:color/black","Catppuccin (Mocha)":"#FF181825","Dark Pink":"#FF290025","Dark Blue":"#FF001029","Dark Green":"#FF002905","Dark Yellow":"#FF282900","Dark Orange":"#FF291800","Dark Red":"#FF290000"},"title":"Dark theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":true},{"key":"LightThemeBackgroundColor","default":"@android:color/white","values":{"White":"@android:color/white","Catppuccin (Latte)":"#FFE6E9EF","Light Pink":"#FFFCCFF3","Light Blue":"#FFD1E0FF","Light Green":"#FFCCFFCC","Light Yellow":"#FFFDFFCC","Light Orange":"#FFFFE6CC","Light Red":"#FFFFD6D6"},"title":"Light theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":true}]},{"name":"Toolbar components","description":"Adds options to hide or change components located on the toolbar, such as toolbar buttons, search bar, and header.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Translations for YouTube","description":"Add translations or remove string resources.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CustomTranslations","default":"","values":null,"title":"Custom translations","description":"The path to the \u0027strings.xml\u0027 file.\nPlease note that applying the \u0027strings.xml\u0027 file will overwrite all existing translations.","required":true},{"key":"SelectedTranslations","default":"ar, bg-rBG, de-rDE, el-rGR, es-rES, fr-rFR, hu-rHU, it-rIT, ja-rJP, ko-rKR, pl-rPL, pt-rBR, ru-rRU, tr-rTR, uk-rUA, vi-rVN, zh-rCN, zh-rTW","values":null,"title":"Translations to add","description":"A list of translations to be added for the RVX settings, separated by commas.","required":true},{"key":"SelectedStringResources","default":"af, am, ar, ar-rXB, as, az, b+es+419, b+sr+Latn, be, bg, bn, bs, ca, cs, da, de, el, en-rAU, en-rCA, en-rGB, en-rIN, en-rXA, en-rXC, es, es-rUS, et, eu, fa, fi, fr, fr-rCA, gl, gu, hi, hr, hu, hy, id, in, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, nb, ne, nl, no, or, pa, pl, pt, pt-rBR, pt-rPT, ro, ru, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, uk, ur, uz, vi, zh, zh-rCN, zh-rHK, zh-rTW, zu","values":null,"title":"String resources to keep","description":"A list of string resources to be kept, separated by commas.\nString resources not in the list will be removed from the app.\n\nDefault string resource, English, is not removed.","required":true}]},{"name":"Translations for YouTube Music","description":"Add translations or remove string resources.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CustomTranslations","default":"","values":null,"title":"Custom translations","description":"The path to the \u0027strings.xml\u0027 file.\nPlease note that applying the \u0027strings.xml\u0027 file will overwrite all existing language translations.","required":true},{"key":"SelectedTranslations","default":"bg-rBG, bn, cs-rCZ, el-rGR, es-rES, fr-rFR, hu-rHU, id-rID, in, it-rIT, ja-rJP, ko-rKR, nl-rNL, pl-rPL, pt-rBR, ro-rRO, ru-rRU, tr-rTR, uk-rUA, vi-rVN, zh-rCN, zh-rTW","values":null,"title":"Translations to add","description":"A list of translations to be added for the RVX settings, separated by commas.","required":true},{"key":"SelectedStringResources","default":"af, am, ar, ar-rXB, as, az, b+es+419, b+sr+Latn, be, bg, bn, bs, ca, cs, da, de, el, en-rAU, en-rCA, en-rGB, en-rIN, en-rXA, en-rXC, es, es-rUS, et, eu, fa, fi, fr, fr-rCA, gl, gu, hi, hr, hu, hy, id, in, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, nb, ne, nl, no, or, pa, pl, pt, pt-rBR, pt-rPT, ro, ru, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, uk, ur, uz, vi, zh, zh-rCN, zh-rHK, zh-rTW, zu","values":null,"title":"String resources to keep","description":"A list of string resources to be kept, separated by commas.\nString resources not in the list will be removed from the app.\n\nDefault string resource, English, is not removed.","required":true}]},{"name":"Video playback","description":"Adds options to customize settings related to video playback, such as default video quality and playback speed.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Video playback","description":"Adds options to customize settings related to video playback, such as default video quality and playback speed.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Visual preferences icons for YouTube","description":"Adds icons to specific preferences in the settings.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"RVXSettingsMenuIcon","default":"extension","values":{"Custom branding icon":"custom_branding_icon","Extension":"extension","Gear":"gear","YT alt":"yt_alt","ReVanced":"revanced","ReVanced Colored":"revanced_colored"},"title":"RVX settings menu icon","description":"The icon for the RVX settings menu.","required":true},{"key":"ApplyToAll","default":false,"values":null,"title":"Apply to all settings menu","description":"Whether to apply Visual preferences icons to all settings menus.\n\nIf true: icons are applied to the parent PreferenceScreen of YouTube settings, the parent PreferenceScreen of RVX settings and the RVX sub-settings (if supported).\n\nIf false: icons are applied only to the parent PreferenceScreen of YouTube settings and RVX settings.","required":true}]},{"name":"Visual preferences icons for YouTube Music","description":"Adds icons to specific preferences in the settings.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"RVXSettingsMenuIcon","default":"extension","values":{"Custom branding icon":"custom_branding_icon","Extension":"extension","Gear":"gear","ReVanced":"revanced","ReVanced Colored":"revanced_colored"},"title":"RVX settings menu icon","description":"The icon for the RVX settings menu.","required":true}]},{"name":"Watch history","description":"Adds an option to change the domain of the watch history or check its status.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]}] \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/FlyoutMenuComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/FlyoutMenuComponentsPatch.kt index b3356171fb..77c31d0b4f 100644 --- a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/FlyoutMenuComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/FlyoutMenuComponentsPatch.kt @@ -6,9 +6,10 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.util.smali.ExternalLabel -import app.revanced.patches.music.flyoutmenu.components.fingerprints.DialogSolidFingerprint import app.revanced.patches.music.flyoutmenu.components.fingerprints.EndButtonsContainerFingerprint import app.revanced.patches.music.flyoutmenu.components.fingerprints.MenuItemFingerprint +import app.revanced.patches.music.flyoutmenu.components.fingerprints.ScreenWidthFingerprint +import app.revanced.patches.music.flyoutmenu.components.fingerprints.ScreenWidthParentFingerprint import app.revanced.patches.music.flyoutmenu.components.fingerprints.SleepTimerFingerprint import app.revanced.patches.music.flyoutmenu.components.fingerprints.TouchOutsideFingerprint import app.revanced.patches.music.flyoutmenu.components.fingerprints.TrimSilenceConfigFingerprint @@ -25,6 +26,7 @@ import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.patches.music.utils.videotype.VideoTypeHookPatch import app.revanced.patches.music.video.information.VideoInformationPatch import app.revanced.patches.shared.litho.LithoFilterPatch +import app.revanced.util.alsoResolve import app.revanced.util.findMethodOrThrow import app.revanced.util.getReference import app.revanced.util.getWalkerMethod @@ -55,9 +57,9 @@ object FlyoutMenuComponentsPatch : BaseBytecodePatch( ), compatiblePackages = COMPATIBLE_PACKAGE, fingerprints = setOf( - DialogSolidFingerprint, EndButtonsContainerFingerprint, MenuItemFingerprint, + ScreenWidthParentFingerprint, SleepTimerFingerprint, TouchOutsideFingerprint, TrimSilenceConfigFingerprint, @@ -72,15 +74,20 @@ object FlyoutMenuComponentsPatch : BaseBytecodePatch( // region patch for enable compact dialog - DialogSolidFingerprint.resultOrThrow().let { - val walkerMethod = - it.getWalkerMethod(context, it.scanResult.patternScanResult!!.endIndex) - walkerMethod.addInstructions( - 2, """ - invoke-static {p0}, $FLYOUT_CLASS_DESCRIPTOR->enableCompactDialog(I)I - move-result p0 - """ - ) + ScreenWidthFingerprint.alsoResolve( + context, ScreenWidthParentFingerprint + ).let { + it.mutableMethod.apply { + val index = it.scanResult.patternScanResult!!.startIndex + val register = getInstruction(index).registerA + + addInstructions( + index, """ + invoke-static {v$register}, $FLYOUT_CLASS_DESCRIPTOR->enableCompactDialog(I)I + move-result v$register + """ + ) + } } // endregion diff --git a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/DialogSolidFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/DialogSolidFingerprint.kt deleted file mode 100644 index 92cb13bdb3..0000000000 --- a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/DialogSolidFingerprint.kt +++ /dev/null @@ -1,20 +0,0 @@ -package app.revanced.patches.music.flyoutmenu.components.fingerprints - -import app.revanced.patcher.extensions.or -import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.DialogSolid -import app.revanced.util.fingerprint.LiteralValueFingerprint -import com.android.tools.smali.dexlib2.AccessFlags -import com.android.tools.smali.dexlib2.Opcode - -internal object DialogSolidFingerprint : LiteralValueFingerprint( - returnType = "V", - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - parameters = listOf("L"), - opcodes = listOf( - Opcode.INVOKE_VIRTUAL, - Opcode.MOVE_RESULT_OBJECT, - Opcode.INVOKE_STATIC - ), - literalSupplier = { DialogSolid }, -) - diff --git a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/ScreenWidthFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/ScreenWidthFingerprint.kt new file mode 100644 index 0000000000..68c97b139d --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/ScreenWidthFingerprint.kt @@ -0,0 +1,11 @@ +package app.revanced.patches.music.flyoutmenu.components.fingerprints + +import app.revanced.util.fingerprint.LiteralValueFingerprint +import com.android.tools.smali.dexlib2.Opcode + +internal object ScreenWidthFingerprint : LiteralValueFingerprint( + returnType = "Z", + parameters = listOf("L"), + opcodes = listOf(Opcode.IF_LT), + literalSupplier = { 600 }, +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/ScreenWidthParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/ScreenWidthParentFingerprint.kt new file mode 100644 index 0000000000..29dbba28f4 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/ScreenWidthParentFingerprint.kt @@ -0,0 +1,22 @@ +package app.revanced.patches.music.flyoutmenu.components.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionReversed +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +internal object ScreenWidthParentFingerprint : MethodFingerprint( + returnType = "Landroid/graphics/Bitmap;", + accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC, + parameters = listOf("Landroid/app/Activity;", "I"), + customFingerprint = { methodDef, _ -> + methodDef.indexOfFirstInstructionReversed { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "destroyDrawingCache" + } >= 0 + } +) + diff --git a/src/main/kotlin/app/revanced/patches/music/general/spoofappversion/SpoofAppVersionPatch.kt b/src/main/kotlin/app/revanced/patches/music/general/spoofappversion/SpoofAppVersionPatch.kt index 11a691e9cb..90ac0f1044 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/spoofappversion/SpoofAppVersionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/spoofappversion/SpoofAppVersionPatch.kt @@ -4,7 +4,7 @@ import app.revanced.patcher.data.ResourceContext import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patches.music.general.oldstylelibraryshelf.OldStyleLibraryShelfPatch import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE -import app.revanced.patches.music.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR +import app.revanced.patches.music.utils.integrations.Constants.PATCH_STATUS_CLASS_DESCRIPTOR import app.revanced.patches.music.utils.settings.CategoryType import app.revanced.patches.music.utils.settings.SettingsBytecodePatch import app.revanced.patches.music.utils.settings.SettingsPatch @@ -26,21 +26,30 @@ object SpoofAppVersionPatch : BaseResourcePatch( ) { override fun execute(context: ResourceContext) { + var defaultValue = "false" + if (SettingsPatch.upward0718) { context.appendAppVersion("7.16.53") - SettingsBytecodePatch.contexts.findMethodOrThrow(GENERAL_CLASS_DESCRIPTOR) { - name == "getSpoofAppVersionDefault" + SettingsBytecodePatch.contexts.findMethodOrThrow(PATCH_STATUS_CLASS_DESCRIPTOR) { + name == "SpoofAppVersionDefaultString" }.replaceInstruction( 0, "const-string v0, \"7.16.53\"" ) + SettingsBytecodePatch.contexts.findMethodOrThrow(PATCH_STATUS_CLASS_DESCRIPTOR) { + name == "SpoofAppVersionDefaultBoolean" + }.replaceInstruction( + 0, + "const/4 v0, 0x1" + ) + defaultValue = "true" } SettingsPatch.addSwitchPreference( CategoryType.GENERAL, "revanced_spoof_app_version", - "false" + defaultValue ) SettingsPatch.addPreferenceWithIntent( CategoryType.GENERAL, diff --git a/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt index 6ce8f15352..d52981c9c9 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt @@ -6,6 +6,7 @@ import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.booleanPat import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.stringPatchOption import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.music.utils.settings.ResourceUtils.setIconType +import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.util.ResourceGroup import app.revanced.util.Utils.trimIndentMultiline import app.revanced.util.copyResources @@ -15,6 +16,7 @@ import app.revanced.util.underBarOrThrow import org.w3c.dom.Element import java.io.File import java.nio.file.Files +import java.nio.file.StandardCopyOption @Suppress("DEPRECATION", "unused") object CustomBrandingIconPatch : BaseResourcePatch( @@ -22,6 +24,10 @@ object CustomBrandingIconPatch : BaseResourcePatch( description = "Changes the YouTube Music app icon to the icon specified in options.json.", compatiblePackages = COMPATIBLE_PACKAGE ) { + private const val ADAPTIVE_ICON_BACKGROUND_FILE_NAME = + "adaptiveproduct_youtube_music_background_color_108" + private const val ADAPTIVE_ICON_FOREGROUND_FILE_NAME = + "adaptiveproduct_youtube_music_foreground_color_108" private const val DEFAULT_ICON = "revancify_blue" private val availableIcon = mapOf( @@ -60,8 +66,8 @@ object CustomBrandingIconPatch : BaseResourcePatch( private val mipmapDirectories = sizeArray.map { "mipmap-$it" } private val launcherIconResourceFileNames = arrayOf( - "adaptiveproduct_youtube_music_background_color_108", - "adaptiveproduct_youtube_music_foreground_color_108", + ADAPTIVE_ICON_BACKGROUND_FILE_NAME, + ADAPTIVE_ICON_FOREGROUND_FILE_NAME, "ic_launcher_release" ).map { "$it.png" }.toTypedArray() @@ -224,5 +230,53 @@ object CustomBrandingIconPatch : BaseResourcePatch( setIconType(appIcon) } + + // region fix app icon + + if (!SettingsPatch.upward0723) { + return + } + if (appIcon == "youtube_music") { + return + } + + fun getAdaptiveIconResourceFile(tag: String): String { + context.xmlEditor["res/mipmap-anydpi/ic_launcher_release.xml"].use { editor -> + val adaptiveIcon = editor + .file + .getElementsByTagName("adaptive-icon") + .item(0) as Element + + val childNodes = adaptiveIcon.childNodes + for (i in 0 until childNodes.length) { + val node = childNodes.item(i) + if (node is Element && node.tagName == tag && node.hasAttribute("android:drawable")) { + return node.getAttribute("android:drawable").split("/")[1] + } + } + throw PatchException("Element not found: $tag") + } + } + + mapOf( + ADAPTIVE_ICON_BACKGROUND_FILE_NAME to getAdaptiveIconResourceFile("background"), + ADAPTIVE_ICON_FOREGROUND_FILE_NAME to getAdaptiveIconResourceFile("foreground") + ).forEach { (oldIconResourceFile, newIconResourceFile) -> + mipmapDirectories.forEach { + val mipmapDirectory = context["res"].resolve(it) + Files.move( + mipmapDirectory + .resolve("$oldIconResourceFile.png") + .toPath(), + mipmapDirectory + .resolve("$newIconResourceFile.png") + .toPath(), + StandardCopyOption.REPLACE_EXISTING + ) + } + } + + // endregion + } } diff --git a/src/main/kotlin/app/revanced/patches/music/layout/visual/VisualPreferencesIconsPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/visual/VisualPreferencesIconsPatch.kt index c7969c38a5..1306f0c3f0 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/visual/VisualPreferencesIconsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/visual/VisualPreferencesIconsPatch.kt @@ -139,6 +139,7 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( "revanced_preference_screen_settings", "revanced_preference_screen_video", "revanced_preference_screen_ryd", + "revanced_preference_screen_return_youtube_username", "revanced_preference_screen_sb", "revanced_preference_screen_misc", ) diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt index ffcdedd010..a8710246dd 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt @@ -635,7 +635,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( .filter { (_, instruction) -> val reference = (instruction as? ReferenceInstruction)?.reference instruction.opcode == Opcode.INVOKE_VIRTUAL && - reference is MethodReference && + reference is MethodReference && reference.toString() == AUDIO_VIDEO_SWITCH_TOGGLE_VISIBILITY } .map { (index, _) -> index } diff --git a/src/main/kotlin/app/revanced/patches/music/utils/integrations/Constants.kt b/src/main/kotlin/app/revanced/patches/music/utils/integrations/Constants.kt index 762b76e163..4887e8a0bc 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/integrations/Constants.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/integrations/Constants.kt @@ -24,4 +24,6 @@ object Constants { const val GENERAL_CLASS_DESCRIPTOR = "$GENERAL_PATH/GeneralPatch;" const val NAVIGATION_CLASS_DESCRIPTOR = "$NAVIGATION_PATH/NavigationPatch;" const val PLAYER_CLASS_DESCRIPTOR = "$PLAYER_PATH/PlayerPatch;" + + const val PATCH_STATUS_CLASS_DESCRIPTOR = "$UTILS_PATH/PatchStatus;" } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt index bd40f46742..1ff4b56636 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt @@ -23,7 +23,6 @@ object SharedResourceIdPatch : ResourcePatch() { var ColorGrey = -1L var DarkBackground = -1L var DesignBottomSheetDialog = -1L - var DialogSolid = -1L var EndButtonsContainer = -1L var FloatingLayout = -1L var HistoryMenuItem = -1L @@ -68,7 +67,6 @@ object SharedResourceIdPatch : ResourcePatch() { ColorGrey = getId(COLOR, "ytm_color_grey_12") DarkBackground = getId(ID, "dark_background") DesignBottomSheetDialog = getId(LAYOUT, "design_bottom_sheet_dialog") - DialogSolid = getId(STYLE, "Theme.YouTubeMusic.Dialog.Solid") EndButtonsContainer = getId(ID, "end_buttons_container") FloatingLayout = getId(ID, "floating_layout") HistoryMenuItem = getId(ID, "history_menu_item") diff --git a/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubedislike/ReturnYouTubeDislikePatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubedislike/ReturnYouTubeDislikePatch.kt index 1b5ca2d0c5..3286063e36 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubedislike/ReturnYouTubeDislikePatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubedislike/ReturnYouTubeDislikePatch.kt @@ -42,6 +42,12 @@ object ReturnYouTubeDislikePatch : BaseResourcePatch( "false", "revanced_ryd_enabled" ) + SettingsPatch.addSwitchPreference( + CategoryType.RETURN_YOUTUBE_DISLIKE, + "revanced_ryd_estimated_like", + "false", + "revanced_ryd_enabled" + ) SettingsPatch.addSwitchPreference( CategoryType.RETURN_YOUTUBE_DISLIKE, "revanced_ryd_toast_on_connection_error", diff --git a/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubeusername/ReturnYouTubeUsernamePatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubeusername/ReturnYouTubeUsernamePatch.kt new file mode 100644 index 0000000000..1870d0cbe9 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubeusername/ReturnYouTubeUsernamePatch.kt @@ -0,0 +1,45 @@ +package app.revanced.patches.music.utils.returnyoutubeusername + +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE +import app.revanced.patches.music.utils.settings.CategoryType +import app.revanced.patches.music.utils.settings.SettingsPatch +import app.revanced.patches.shared.returnyoutubeusername.BaseReturnYouTubeUsernamePatch +import app.revanced.util.patch.BaseBytecodePatch + +@Suppress("unused") +object ReturnYouTubeUsernamePatch : BaseBytecodePatch( + name = "Return YouTube Username", + description = "Adds an option to replace YouTube handles with usernames in comments using YouTube Data API v3.", + dependencies = setOf( + BaseReturnYouTubeUsernamePatch::class, + SettingsPatch::class, + ), + compatiblePackages = COMPATIBLE_PACKAGE, + use = false +) { + override fun execute(context: BytecodeContext) { + + SettingsPatch.addSwitchPreference( + CategoryType.RETURN_YOUTUBE_USERNAME, + "revanced_return_youtube_username_enabled", + "false" + ) + SettingsPatch.addPreferenceWithIntent( + CategoryType.RETURN_YOUTUBE_USERNAME, + "revanced_return_youtube_username_display_format", + "revanced_return_youtube_username_enabled" + ) + SettingsPatch.addPreferenceWithIntent( + CategoryType.RETURN_YOUTUBE_USERNAME, + "revanced_return_youtube_username_youtube_data_api_v3_developer_key", + "revanced_return_youtube_username_enabled" + ) + if (SettingsPatch.upward0627) { + SettingsPatch.addPreferenceWithIntent( + CategoryType.RETURN_YOUTUBE_USERNAME, + "revanced_return_youtube_username_youtube_data_api_v3_about" + ) + } + } +} diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/CategoryType.kt b/src/main/kotlin/app/revanced/patches/music/utils/settings/CategoryType.kt index 4219f5ba33..875ccfa44f 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/settings/CategoryType.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/settings/CategoryType.kt @@ -11,6 +11,7 @@ enum class CategoryType(val value: String, var added: Boolean) { SETTINGS("settings", false), VIDEO("video", false), RETURN_YOUTUBE_DISLIKE("ryd", false), + RETURN_YOUTUBE_USERNAME("return_youtube_username", false), SPONSOR_BLOCK("sb", false), MISC("misc", false) } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt index 0af833bda4..b4f6614255 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt @@ -44,6 +44,7 @@ object SettingsPatch : BaseResourcePatch( internal var upward0706 = false internal var upward0718 = false internal var upward0720 = false + internal var upward0723 = false override fun execute(context: ResourceContext) { @@ -64,9 +65,15 @@ object SettingsPatch : BaseResourcePatch( setVersionInfo() /** - * copy strings + * copy arrays, colors and strings */ - context.copyXmlNode("music/settings/host", "values/strings.xml", "resources") + arrayOf( + "arrays.xml", + "colors.xml", + "strings.xml" + ).forEach { xmlFile -> + context.copyXmlNode("music/settings/host", "values/$xmlFile", "resources") + } /** * hide divider @@ -84,11 +91,6 @@ object SettingsPatch : BaseResourcePatch( ) ) - /** - * Copy arrays - */ - contexts.copyXmlNode("music/settings/host", "values/arrays.xml", "resources") - /** * Copy colors */ @@ -142,6 +144,7 @@ object SettingsPatch : BaseResourcePatch( upward0706 = 242499000 <= playServicesVersion upward0718 = 243699000 <= playServicesVersion upward0720 = 243899000 <= playServicesVersion + upward0723 = 244199000 <= playServicesVersion break } diff --git a/src/main/kotlin/app/revanced/patches/reddit/layout/branding/packagename/ChangePackageNamePatch.kt b/src/main/kotlin/app/revanced/patches/reddit/layout/branding/packagename/ChangePackageNamePatch.kt index 5bfd6d575f..0eaa2087c8 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/layout/branding/packagename/ChangePackageNamePatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/layout/branding/packagename/ChangePackageNamePatch.kt @@ -90,7 +90,7 @@ object ChangePackageNamePatch : BaseResourcePatch( node.textContent = when (node.getAttribute("name")) { "provider_authority_appdata", "provider_authority_file", "provider_authority_userdata", "provider_workmanager_init" - -> node.textContent.replace(PACKAGE_NAME_REDDIT, redditPackageName) + -> node.textContent.replace(PACKAGE_NAME_REDDIT, redditPackageName) else -> continue } diff --git a/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/SpannableStringBuilderFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/fingerprints/SpannableStringBuilderFingerprint.kt similarity index 84% rename from src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/SpannableStringBuilderFingerprint.kt rename to src/main/kotlin/app/revanced/patches/shared/fingerprints/SpannableStringBuilderFingerprint.kt index 1d88bab534..840b13b712 100644 --- a/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/SpannableStringBuilderFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/shared/fingerprints/SpannableStringBuilderFingerprint.kt @@ -1,7 +1,7 @@ -package app.revanced.patches.shared.textcomponent.fingerprints +package app.revanced.patches.shared.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint -import app.revanced.patches.shared.textcomponent.fingerprints.SpannableStringBuilderFingerprint.indexOfSpannableStringInstruction +import app.revanced.patches.shared.fingerprints.SpannableStringBuilderFingerprint.indexOfSpannableStringInstruction import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.Opcode diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt b/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt index 542b491e00..f0cf5fd317 100644 --- a/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt @@ -2,9 +2,9 @@ package app.revanced.patches.shared.gms import app.revanced.patcher.PatchClass import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.extensions.InstructionExtensions.getInstruction -import app.revanced.patcher.extensions.InstructionExtensions.getInstructions import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patcher.patch.BytecodePatch @@ -15,22 +15,27 @@ import app.revanced.patches.shared.gms.BaseGmsCoreSupportPatch.Constants.PERMISS import app.revanced.patches.shared.gms.BaseGmsCoreSupportResourcePatch.Companion.ORIGINAL_PACKAGE_NAME_YOUTUBE import app.revanced.patches.shared.gms.BaseGmsCoreSupportResourcePatch.Companion.ORIGINAL_PACKAGE_NAME_YOUTUBE_MUSIC import app.revanced.patches.shared.gms.fingerprints.CastContextFetchFingerprint -import app.revanced.patches.shared.gms.fingerprints.CastDynamiteModuleFingerprint -import app.revanced.patches.shared.gms.fingerprints.CastDynamiteModuleV2Fingerprint import app.revanced.patches.shared.gms.fingerprints.CertificateFingerprint import app.revanced.patches.shared.gms.fingerprints.GmsCoreSupportFingerprint +import app.revanced.patches.shared.gms.fingerprints.GmsServiceBrokerFingerprint import app.revanced.patches.shared.gms.fingerprints.GooglePlayUtilityFingerprint -import app.revanced.patches.shared.gms.fingerprints.PrimeMethodFingerprint +import app.revanced.patches.shared.gms.fingerprints.PrimesApiFingerprint +import app.revanced.patches.shared.gms.fingerprints.PrimesBackgroundInitializationFingerprint +import app.revanced.patches.shared.gms.fingerprints.PrimesLifecycleEventFingerprint import app.revanced.patches.shared.gms.fingerprints.ServiceCheckFingerprint import app.revanced.patches.shared.integrations.Constants.PATCHES_PATH import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.resultOrThrow import app.revanced.util.returnEarly import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction21c import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21c +import com.android.tools.smali.dexlib2.iface.reference.MethodReference import com.android.tools.smali.dexlib2.iface.reference.StringReference import com.android.tools.smali.dexlib2.immutable.reference.ImmutableStringReference import com.android.tools.smali.dexlib2.util.MethodUtil @@ -66,11 +71,12 @@ abstract class BaseGmsCoreSupportPatch( fingerprints = setOf( // Google Play Services. CastContextFetchFingerprint, - CastDynamiteModuleFingerprint, - CastDynamiteModuleV2Fingerprint, GmsCoreSupportFingerprint, + GmsServiceBrokerFingerprint, GooglePlayUtilityFingerprint, - PrimeMethodFingerprint, + PrimesApiFingerprint, + PrimesBackgroundInitializationFingerprint, + PrimesLifecycleEventFingerprint, ServiceCheckFingerprint, // Signature verification. @@ -87,6 +93,7 @@ abstract class BaseGmsCoreSupportPatch( var gmsCoreVendor = "app.revanced" var checkGmsCore = true + var disableGmsServiceBroker = false var packageNameYouTube = "com.google.android.youtube" var packageNameYouTubeMusic = "com.google.android.apps.youtube.music" @@ -125,6 +132,7 @@ abstract class BaseGmsCoreSupportPatch( override fun execute(context: BytecodeContext) { gmsCoreVendor = getStringPatchOption("GmsCoreVendorGroupId") checkGmsCore = getBooleanPatchOption("CheckGmsCore") + disableGmsServiceBroker = getBooleanPatchOption("DisableGmsServiceBroker") packageNameYouTube = getStringPatchOption("PackageNameYouTube") packageNameYouTubeMusic = getStringPatchOption("PackageNameYouTubeMusic") @@ -145,17 +153,18 @@ abstract class BaseGmsCoreSupportPatch( return@transform null } - // Specific method that needs to be patched. - transformPrimeMethod(packageName) - // Return these methods early to prevent the app from crashing. - listOf( + val returnEarly = mutableListOf( CastContextFetchFingerprint, - CastDynamiteModuleFingerprint, - CastDynamiteModuleV2Fingerprint, GooglePlayUtilityFingerprint, ServiceCheckFingerprint - ).returnEarly() + ) + if (disableGmsServiceBroker) { + returnEarly += GmsServiceBrokerFingerprint + } + returnEarly.returnEarly() + + transformPrimeMethod() // Verify GmsCore is installed and whitelisted for power optimizations and background usage. if (checkGmsCore) { @@ -238,7 +247,7 @@ abstract class BaseGmsCoreSupportPatch( in PERMISSIONS, in ACTIONS, in AUTHORITIES, - -> referencedString.replace("com.google", gmsCoreVendor) + -> referencedString.replace("com.google", gmsCoreVendor) // No vendor prefix for whatever reason... "subscribedfeeds" -> "$gmsCoreVendor.subscribedfeeds" @@ -279,24 +288,48 @@ abstract class BaseGmsCoreSupportPatch( when (string) { "$fromPackageName.SuggestionsProvider", "$fromPackageName.fileprovider", - -> string.replace(fromPackageName, toPackageName) + -> string.replace(fromPackageName, toPackageName) else -> null } } - private fun transformPrimeMethod(packageName: String) { - PrimeMethodFingerprint.resultOrThrow().mutableMethod.apply { - var register = 2 - - val index = getInstructions().indexOfFirst { - if (it.getReference()?.string != fromPackageName) return@indexOfFirst false - - register = (it as OneRegisterInstruction).registerA - return@indexOfFirst true + private fun transformPrimeMethod() { + listOf( + PrimesBackgroundInitializationFingerprint, + PrimesLifecycleEventFingerprint + ).forEach { fingerprint -> + fingerprint.resultOrThrow().mutableMethod.apply { + val exceptionIndex = indexOfFirstInstructionReversedOrThrow { + opcode == Opcode.NEW_INSTANCE && + (this as? ReferenceInstruction)?.reference?.toString() == "Ljava/lang/IllegalStateException;" + } + val index = indexOfFirstInstructionReversedOrThrow(exceptionIndex, Opcode.IF_EQZ) + val register = getInstruction(index).registerA + addInstruction( + index, + "const/4 v$register, 0x1" + ) + } + } + PrimesApiFingerprint.resultOrThrow().let { + it.mutableClass.methods.filter { method -> + method.name != "" && + method.returnType == "V" + }.forEach { method -> + method.apply { + val index = if (MethodUtil.isConstructor(method)) + indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_DIRECT && + getReference()?.name == "" + } + 1 + else 0 + addInstruction( + index, + "return-void" + ) + } } - - replaceInstruction(index, "const-string v$register, \"$packageName\"") } } @@ -316,7 +349,7 @@ abstract class BaseGmsCoreSupportPatch( /** * A list of all permissions. */ - val PERMISSIONS = listOf( + val PERMISSIONS = setOf( // C2DM / GCM "com.google.android.c2dm.permission.RECEIVE", "com.google.android.c2dm.permission.SEND", @@ -338,7 +371,7 @@ abstract class BaseGmsCoreSupportPatch( /** * All intent actions. */ - val ACTIONS = listOf( + val ACTIONS = setOf( // location "com.google.android.gms.location.places.ui.PICK_PLACE", "com.google.android.gms.location.places.GeoDataApi", @@ -397,6 +430,9 @@ abstract class BaseGmsCoreSupportPatch( "com.google.android.gms.googlehelp.HELP", "com.google.android.gms.feedback.internal.IFeedbackService", + // cast + "com.google.android.gms.cast.service.BIND_CAST_DEVICE_CONTROLLER_SERVICE", + // chimera "com.google.android.gms.chimera", @@ -432,7 +468,7 @@ abstract class BaseGmsCoreSupportPatch( /** * All content provider authorities. */ - val AUTHORITIES = listOf( + val AUTHORITIES = setOf( // gsf "com.google.android.gsf.gservices", "com.google.settings", diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportResourcePatch.kt b/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportResourcePatch.kt index 3ebd6a7b10..87773c31d0 100644 --- a/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportResourcePatch.kt @@ -51,6 +51,19 @@ abstract class BaseGmsCoreSupportResourcePatch( """.trimIndentMultiline(), required = true, ) + + private val DisableGmsServiceBroker by booleanPatchOption( + key = "DisableGmsServiceBroker", + default = false, + title = "Disable GmsService Broker", + description = """ + Disabling GmsServiceBroker will somewhat improve crashes caused by unimplemented GmsCore services. + + For YouTube, the 'Spoof streaming data' setting is required. + """.trimIndentMultiline(), + required = true, + ) + internal val PackageNameYouTube = stringPatchOption( key = "PackageNameYouTube", default = DEFAULT_PACKAGE_NAME_YOUTUBE, diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CastDynamiteModuleFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CastDynamiteModuleFingerprint.kt deleted file mode 100644 index b109574dc2..0000000000 --- a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CastDynamiteModuleFingerprint.kt +++ /dev/null @@ -1,7 +0,0 @@ -package app.revanced.patches.shared.gms.fingerprints - -import app.revanced.patcher.fingerprint.MethodFingerprint - -internal object CastDynamiteModuleFingerprint : MethodFingerprint( - strings = listOf("com.google.android.gms.cast.framework.internal.CastDynamiteModuleImpl") -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CastDynamiteModuleV2Fingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CastDynamiteModuleV2Fingerprint.kt deleted file mode 100644 index a00275974f..0000000000 --- a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CastDynamiteModuleV2Fingerprint.kt +++ /dev/null @@ -1,7 +0,0 @@ -package app.revanced.patches.shared.gms.fingerprints - -import app.revanced.patcher.fingerprint.MethodFingerprint - -internal object CastDynamiteModuleV2Fingerprint : MethodFingerprint( - strings = listOf("Failed to load module via V2: ") -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/GmsServiceBrokerFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/GmsServiceBrokerFingerprint.kt new file mode 100644 index 0000000000..853480b7e5 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/GmsServiceBrokerFingerprint.kt @@ -0,0 +1,8 @@ +package app.revanced.patches.shared.gms.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint + +internal object GmsServiceBrokerFingerprint : MethodFingerprint( + returnType = "V", + strings = listOf("mServiceBroker is null, client disconnected") +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimeMethodFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimeMethodFingerprint.kt deleted file mode 100644 index 1517b011a5..0000000000 --- a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimeMethodFingerprint.kt +++ /dev/null @@ -1,7 +0,0 @@ -package app.revanced.patches.shared.gms.fingerprints - -import app.revanced.patcher.fingerprint.MethodFingerprint - -internal object PrimeMethodFingerprint : MethodFingerprint( - strings = listOf("com.google.android.GoogleCamera", "com.android.vending") -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesApiFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesApiFingerprint.kt new file mode 100644 index 0000000000..5e51b68801 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesApiFingerprint.kt @@ -0,0 +1,12 @@ +package app.revanced.patches.shared.gms.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.util.MethodUtil + +internal object PrimesApiFingerprint : MethodFingerprint( + returnType = "V", + strings = listOf("PrimesApiImpl.java"), + customFingerprint = { methodDef, _ -> + MethodUtil.isConstructor(methodDef) + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesBackgroundInitializationFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesBackgroundInitializationFingerprint.kt new file mode 100644 index 0000000000..8ae21f3b46 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesBackgroundInitializationFingerprint.kt @@ -0,0 +1,19 @@ +package app.revanced.patches.shared.gms.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.reference.StringReference + +internal object PrimesBackgroundInitializationFingerprint : MethodFingerprint( + opcodes = listOf(Opcode.NEW_INSTANCE), + customFingerprint = { methodDef, _ -> + methodDef.indexOfFirstInstruction { + opcode == Opcode.CONST_STRING && + getReference() + ?.string.toString() + .startsWith("Primes init triggered from background in package:") + } >= 0 + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesLifecycleEventFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesLifecycleEventFingerprint.kt new file mode 100644 index 0000000000..8d538ba775 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesLifecycleEventFingerprint.kt @@ -0,0 +1,24 @@ +package app.revanced.patches.shared.gms.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.reference.StringReference + +internal object PrimesLifecycleEventFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, + parameters = emptyList(), + opcodes = listOf(Opcode.NEW_INSTANCE), + customFingerprint = { methodDef, _ -> + methodDef.indexOfFirstInstruction { + opcode == Opcode.CONST_STRING && + getReference() + ?.string.toString() + .startsWith("Primes did not observe lifecycle events in the expected order.") + } >= 0 + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/integrations/Constants.kt b/src/main/kotlin/app/revanced/patches/shared/integrations/Constants.kt index 59d7f47aeb..699113f66a 100644 --- a/src/main/kotlin/app/revanced/patches/shared/integrations/Constants.kt +++ b/src/main/kotlin/app/revanced/patches/shared/integrations/Constants.kt @@ -5,7 +5,9 @@ object Constants { const val INTEGRATIONS_PATH = "Lapp/revanced/integrations/shared" const val PATCHES_PATH = "$INTEGRATIONS_PATH/patches" const val COMPONENTS_PATH = "$PATCHES_PATH/components" + const val SPANS_PATH = "$PATCHES_PATH/spans" + const val INTEGRATIONS_UTILS_PATH = "$INTEGRATIONS_PATH/utils" const val INTEGRATIONS_SETTING_CLASS_DESCRIPTOR = "$INTEGRATIONS_PATH/settings/Setting;" - const val INTEGRATIONS_UTILS_CLASS_DESCRIPTOR = "$INTEGRATIONS_PATH/utils/Utils;" + const val INTEGRATIONS_UTILS_CLASS_DESCRIPTOR = "$INTEGRATIONS_UTILS_PATH/Utils;" } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/returnyoutubeusername/BaseReturnYouTubeUsernamePatch.kt b/src/main/kotlin/app/revanced/patches/shared/returnyoutubeusername/BaseReturnYouTubeUsernamePatch.kt new file mode 100644 index 0000000000..daf5814dd2 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/returnyoutubeusername/BaseReturnYouTubeUsernamePatch.kt @@ -0,0 +1,19 @@ +package app.revanced.patches.shared.returnyoutubeusername + +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.annotation.Patch +import app.revanced.patches.shared.integrations.Constants.PATCHES_PATH +import app.revanced.patches.shared.textcomponent.TextComponentPatch + +@Patch(dependencies = [TextComponentPatch::class]) +object BaseReturnYouTubeUsernamePatch : BytecodePatch(emptySet()) { + private const val INTEGRATIONS_CLASS_DESCRIPTOR = + "$PATCHES_PATH/ReturnYouTubeUsernamePatch;" + + override fun execute(context: BytecodeContext) { + TextComponentPatch.hookSpannableString(INTEGRATIONS_CLASS_DESCRIPTOR, "preFetchLithoText") + TextComponentPatch.hookTextComponent(INTEGRATIONS_CLASS_DESCRIPTOR) + } +} + diff --git a/src/main/kotlin/app/revanced/patches/shared/spans/InclusiveSpanPatch.kt b/src/main/kotlin/app/revanced/patches/shared/spans/InclusiveSpanPatch.kt new file mode 100644 index 0000000000..c81c839ae9 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/spans/InclusiveSpanPatch.kt @@ -0,0 +1,174 @@ +package app.revanced.patches.shared.spans + +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstruction +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction +import app.revanced.patcher.extensions.or +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.annotation.Patch +import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod +import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable +import app.revanced.patches.shared.fingerprints.SpannableStringBuilderFingerprint +import app.revanced.patches.shared.integrations.Constants.SPANS_PATH +import app.revanced.patches.shared.spans.fingerprints.CustomCharacterStyleFingerprint +import app.revanced.patches.shared.textcomponent.TextComponentPatch +import app.revanced.util.findMethodOrThrow +import app.revanced.util.findMethodsOrThrow +import app.revanced.util.getFiveRegisters +import app.revanced.util.getReference +import app.revanced.util.getWalkerMethod +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.resultOrThrow +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.immutable.ImmutableMethod +import java.io.Closeable + +@Patch(dependencies = [TextComponentPatch::class]) +object InclusiveSpanPatch : BytecodePatch( + setOf( + CustomCharacterStyleFingerprint, + SpannableStringBuilderFingerprint, + ) +), Closeable { + private const val INTEGRATIONS_SPANS_CLASS_DESCRIPTOR = + "$SPANS_PATH/InclusiveSpanPatch;" + + private const val INTEGRATIONS_FILER_ARRAY_DESCRIPTOR = + "[$SPANS_PATH/Filter;" + + private lateinit var filterArrayMethod: MutableMethod + private var filterCount = 0 + + internal lateinit var addFilter: (String) -> Unit + private set + + override fun execute(context: BytecodeContext) { + + TextComponentPatch.hookSpannableString( + INTEGRATIONS_SPANS_CLASS_DESCRIPTOR, + "setConversionContext" + ) + + SpannableStringBuilderFingerprint.resultOrThrow().mutableMethod.apply { + val spannedIndex = + SpannableStringBuilderFingerprint.indexOfSpannableStringInstruction(this) + val setInclusiveSpanIndex = indexOfFirstInstructionOrThrow(spannedIndex) { + val reference = getReference() + opcode == Opcode.INVOKE_STATIC && + reference?.returnType == "V" && + reference.parameterTypes.size > 3 && + reference.parameterTypes.firstOrNull() == "Landroid/text/SpannableString;" + } + // In YouTube 18.29.38, YouTube 19.41.39, the target method is in class 'La;' + // 'getWalkerMethod' should be used until the dependency is updated to ReVanced Patcher 20+. + // https://github.com/ReVanced/revanced-patcher/issues/309 + val setInclusiveSpanMethod = + getWalkerMethod(context, setInclusiveSpanIndex) + + setInclusiveSpanMethod.apply { + val insertIndex = indexOfFirstInstructionReversedOrThrow { + opcode == Opcode.INVOKE_VIRTUAL && + getReference().toString() == "Landroid/text/SpannableString;->setSpan(Ljava/lang/Object;III)V" + } + replaceInstruction( + insertIndex, + "invoke-static { ${getFiveRegisters(insertIndex)} }, " + + INTEGRATIONS_SPANS_CLASS_DESCRIPTOR + + "->" + + "setSpan(Landroid/text/SpannableString;Ljava/lang/Object;III)V" + ) + } + } + + val customCharacterStyle = + CustomCharacterStyleFingerprint.resultOrThrow().mutableClass.type + + context.findMethodOrThrow(INTEGRATIONS_SPANS_CLASS_DESCRIPTOR) { + name == "getSpanType" && + returnType != "Ljava/lang/String;" + }.apply { + val index = indexOfFirstInstructionOrThrow { + opcode == Opcode.INSTANCE_OF && + (this as? ReferenceInstruction)?.reference?.toString() == "Landroid/text/style/CharacterStyle;" + } + val instruction = getInstruction(index) + replaceInstruction( + index, + "instance-of v${instruction.registerA}, v${instruction.registerB}, $customCharacterStyle" + ) + } + + // Create a new method to get the filter array to avoid register conflicts. + // This fixes an issue with Integrations compiled with Android Gradle Plugin 8.3.0+. + // https://github.com/ReVanced/revanced-patches/issues/2818 + val spansFilterMethods = + context.findMethodsOrThrow(INTEGRATIONS_SPANS_CLASS_DESCRIPTOR) + + spansFilterMethods + .first { it.name == "" } + .apply { + val setArrayIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.SPUT_OBJECT && + getReference()?.type == INTEGRATIONS_FILER_ARRAY_DESCRIPTOR + } + val setArrayRegister = + getInstruction(setArrayIndex).registerA + val addedMethodName = "getFilterArray" + + addInstructions( + setArrayIndex, """ + invoke-static {}, $INTEGRATIONS_SPANS_CLASS_DESCRIPTOR->$addedMethodName()$INTEGRATIONS_FILER_ARRAY_DESCRIPTOR + move-result-object v$setArrayRegister + """ + ) + + filterArrayMethod = ImmutableMethod( + definingClass, + addedMethodName, + emptyList(), + INTEGRATIONS_FILER_ARRAY_DESCRIPTOR, + AccessFlags.PRIVATE or AccessFlags.STATIC, + null, + null, + MutableMethodImplementation(3), + ).toMutable().apply { + addInstruction( + 0, + "return-object v2" + ) + } + + spansFilterMethods.add(filterArrayMethod) + } + + addFilter = { classDescriptor -> + filterArrayMethod.addInstructions( + 0, + """ + new-instance v0, $classDescriptor + invoke-direct {v0}, $classDescriptor->()V + const/16 v1, ${filterCount++} + aput-object v0, v2, v1 + """ + ) + } + } + + override fun close() = filterArrayMethod.addInstructions( + 0, + """ + const/16 v0, $filterCount + new-array v2, v0, $INTEGRATIONS_FILER_ARRAY_DESCRIPTOR + """ + ) +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/spans/fingerprints/CustomCharacterStyleFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/spans/fingerprints/CustomCharacterStyleFingerprint.kt new file mode 100644 index 0000000000..857b64d8e7 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/spans/fingerprints/CustomCharacterStyleFingerprint.kt @@ -0,0 +1,8 @@ +package app.revanced.patches.shared.spans.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint + +internal object CustomCharacterStyleFingerprint : MethodFingerprint( + returnType = "Landroid/graphics/Path;", + parameters = listOf("Landroid/text/Layout;"), +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/textcomponent/TextComponentPatch.kt b/src/main/kotlin/app/revanced/patches/shared/textcomponent/TextComponentPatch.kt index 44aa2ee80d..c9996f1f05 100644 --- a/src/main/kotlin/app/revanced/patches/shared/textcomponent/TextComponentPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/textcomponent/TextComponentPatch.kt @@ -8,7 +8,7 @@ import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchException import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod -import app.revanced.patches.shared.textcomponent.fingerprints.SpannableStringBuilderFingerprint +import app.revanced.patches.shared.fingerprints.SpannableStringBuilderFingerprint import app.revanced.patches.shared.textcomponent.fingerprints.TextComponentConstructorFingerprint import app.revanced.patches.shared.textcomponent.fingerprints.TextComponentContextFingerprint import app.revanced.util.alsoResolve @@ -33,7 +33,8 @@ object TextComponentPatch : BytecodePatch( SpannableStringBuilderFingerprint.resultOrThrow().mutableMethod.apply { spannedMethod = this - spannedIndex = SpannableStringBuilderFingerprint.indexOfSpannableStringInstruction(this) + spannedIndex = + SpannableStringBuilderFingerprint.indexOfSpannableStringInstruction(this) spannedRegister = getInstruction(spannedIndex).registerC spannedContextRegister = getInstruction(0).registerA diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/downloads/fingerprints/AccessibilityOfflineButtonSyncFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/downloads/fingerprints/AccessibilityOfflineButtonSyncFingerprint.kt index d3cea0a632..b41c7b4630 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/downloads/fingerprints/AccessibilityOfflineButtonSyncFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/downloads/fingerprints/AccessibilityOfflineButtonSyncFingerprint.kt @@ -1,12 +1,32 @@ package app.revanced.patches.youtube.general.downloads.fingerprints import app.revanced.patcher.extensions.or -import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.AccessibilityOfflineButtonSync -import app.revanced.util.fingerprint.LiteralValueFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.youtube.general.downloads.fingerprints.AccessibilityOfflineButtonSyncFingerprint.ENDS_WITH_PARAMETER_LIST +import app.revanced.util.parametersEqual import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.util.MethodUtil -internal object AccessibilityOfflineButtonSyncFingerprint : LiteralValueFingerprint( +internal object AccessibilityOfflineButtonSyncFingerprint : MethodFingerprint( returnType = "V", - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - literalSupplier = { AccessibilityOfflineButtonSync }, -) \ No newline at end of file + accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, + customFingerprint = custom@{ methodDef, _ -> + if (!MethodUtil.isConstructor(methodDef)) { + return@custom false + } + val parameterTypes = methodDef.parameterTypes + val parameterSize = parameterTypes.size + if (parameterSize < 6) { + return@custom false + } + + val endsWithMethodParameterList = parameterTypes.slice(parameterSize - 3.. insertLegacyTabletMiniplayerOverride( index diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch.kt index 5c348be0b3..b62e7e57de 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch.kt @@ -8,6 +8,7 @@ import app.revanced.patches.youtube.general.music.fingerprints.AppDeepLinkFinger import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.gms.GmsCoreSupportResourcePatch.PackageNameYouTubeMusic import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_PATH +import app.revanced.patches.youtube.utils.integrations.Constants.PATCH_STATUS_CLASS_DESCRIPTOR import app.revanced.patches.youtube.utils.settings.SettingsBytecodePatch import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.addEntryValues @@ -91,8 +92,8 @@ object YouTubeMusicActionsPatch : BaseBytecodePatch( musicPackageName ) - SettingsBytecodePatch.contexts.findMethodOrThrow(INTEGRATIONS_CLASS_DESCRIPTOR) { - name == "getRVXMusicPackageName" + SettingsBytecodePatch.contexts.findMethodOrThrow(PATCH_STATUS_CLASS_DESCRIPTOR) { + name == "RVXMusicPackageName" }.apply { val replaceIndex = indexOfFirstInstructionOrThrow(Opcode.CONST_STRING) val replaceRegister = diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/spoofappversion/SpoofAppVersionPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/spoofappversion/SpoofAppVersionPatch.kt index df15871e7d..5fcfa9bebd 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/spoofappversion/SpoofAppVersionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/spoofappversion/SpoofAppVersionPatch.kt @@ -1,9 +1,13 @@ package app.revanced.patches.youtube.general.spoofappversion import app.revanced.patcher.data.ResourceContext +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE +import app.revanced.patches.youtube.utils.integrations.Constants.PATCH_STATUS_CLASS_DESCRIPTOR +import app.revanced.patches.youtube.utils.settings.SettingsBytecodePatch import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.appendAppVersion +import app.revanced.util.findMethodOrThrow import app.revanced.util.patch.BaseResourcePatch @Suppress("unused") @@ -13,6 +17,7 @@ object SpoofAppVersionPatch : BaseResourcePatch( "This can be used to restore old UI elements and features.", dependencies = setOf( SettingsPatch::class, + SettingsBytecodePatch::class, SpoofAppVersionBytecodePatch::class ), compatiblePackages = COMPATIBLE_PACKAGE @@ -25,6 +30,18 @@ object SpoofAppVersionPatch : BaseResourcePatch( context.appendAppVersion("18.38.45") if (SettingsPatch.upward1849) { context.appendAppVersion("18.48.39") + if (SettingsPatch.upward1915) { + context.appendAppVersion("19.13.37") + + SettingsBytecodePatch.contexts.findMethodOrThrow( + PATCH_STATUS_CLASS_DESCRIPTOR + ) { + name == "SpoofAppVersionDefaultString" + }.replaceInstruction( + 0, + "const-string v0, \"19.13.37\"" + ) + } } } } @@ -39,7 +56,6 @@ object SpoofAppVersionPatch : BaseResourcePatch( "SETTINGS: SPOOF_APP_VERSION" ) ) - SettingsPatch.updatePatchStatus(this) } } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/ToolBarComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/ToolBarComponentsPatch.kt index 320091e12e..fd03cc7179 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/ToolBarComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/ToolBarComponentsPatch.kt @@ -372,11 +372,13 @@ object ToolBarComponentsPatch : BaseBytecodePatch( // region patch for hide YouTube Doodles YoodlesImageViewFingerprint.resultOrThrow().mutableMethod.apply { - findOpcodeIndicesReversed{ + findOpcodeIndicesReversed { opcode == Opcode.INVOKE_VIRTUAL && getReference()?.name == "setImageDrawable" }.forEach { insertIndex -> - val (viewRegister, drawableRegister) = getInstruction(insertIndex).let { + val (viewRegister, drawableRegister) = getInstruction( + insertIndex + ).let { Pair(it.registerC, it.registerD) } replaceInstruction( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemePatch.kt index f6c0d58a46..96e471de3a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemePatch.kt @@ -145,7 +145,7 @@ object ThemePatch : BaseResourcePatch( node.textContent = when (node.getAttribute("name")) { "yt_white1", "yt_white1_opacity95", "yt_white1_opacity98", "yt_white2", "yt_white3", "yt_white4", - -> lightThemeColor + -> lightThemeColor else -> continue } diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt index 39ba1eddd9..46a2abeb25 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt @@ -195,6 +195,7 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( "revanced_preference_screen_swipe_controls", "revanced_preference_screen_video", "revanced_preference_screen_ryd", + "revanced_preference_screen_return_youtube_username", "revanced_preference_screen_sb", "revanced_preference_screen_misc", ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/comments/CommentsComponentPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/comments/CommentsComponentPatch.kt index 8add5c0f8a..464aca1ce4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/comments/CommentsComponentPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/comments/CommentsComponentPatch.kt @@ -4,12 +4,15 @@ import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patches.shared.fingerprints.SpannableStringBuilderFingerprint import app.revanced.patches.shared.litho.LithoFilterPatch +import app.revanced.patches.shared.spans.InclusiveSpanPatch import app.revanced.patches.youtube.player.comments.fingerprints.ShortsLiveStreamEmojiPickerOnClickListenerFingerprint import app.revanced.patches.youtube.player.comments.fingerprints.ShortsLiveStreamEmojiPickerOpacityFingerprint import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR +import app.revanced.patches.youtube.utils.integrations.Constants.SPANS_PATH import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.getWalkerMethod @@ -25,18 +28,22 @@ object CommentsComponentPatch : BaseBytecodePatch( name = "Hide comments components", description = "Adds options to hide components related to comments.", dependencies = setOf( + InclusiveSpanPatch::class, LithoFilterPatch::class, SettingsPatch::class, - SharedResourceIdPatch::class + SharedResourceIdPatch::class, ), compatiblePackages = COMPATIBLE_PACKAGE, fingerprints = setOf( ShortsLiveStreamEmojiPickerOnClickListenerFingerprint, - ShortsLiveStreamEmojiPickerOpacityFingerprint + ShortsLiveStreamEmojiPickerOpacityFingerprint, + SpannableStringBuilderFingerprint, ) ) { - private const val FILTER_CLASS_DESCRIPTOR = + private const val COMMENTS_FILTER_CLASS_DESCRIPTOR = "$COMPONENTS_PATH/CommentsFilter;" + private const val SEARCH_LINKS_FILTER_CLASS_DESCRIPTOR = + "$SPANS_PATH/SearchLinksFilter;" override fun execute(context: BytecodeContext) { @@ -80,7 +87,8 @@ object CommentsComponentPatch : BaseBytecodePatch( // endregion - LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR) + InclusiveSpanPatch.addFilter(SEARCH_LINKS_FILTER_CLASS_DESCRIPTOR) + LithoFilterPatch.addFilter(COMMENTS_FILTER_CLASS_DESCRIPTOR) /** * Add settings diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt index e87f246ba8..ccb4a34576 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt @@ -11,6 +11,7 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.shared.fingerprints.StartVideoInformerFingerprint import app.revanced.patches.shared.litho.LithoFilterPatch +import app.revanced.patches.shared.spans.InclusiveSpanPatch import app.revanced.patches.youtube.player.components.fingerprints.CrowdfundingBoxFingerprint import app.revanced.patches.youtube.player.components.fingerprints.FilmStripOverlayConfigFingerprint import app.revanced.patches.youtube.player.components.fingerprints.FilmStripOverlayInteractionFingerprint @@ -38,6 +39,7 @@ import app.revanced.patches.youtube.utils.fingerprints.YouTubeControlsOverlayFin import app.revanced.patches.youtube.utils.fix.suggestedvideoendscreen.SuggestedVideoEndScreenPatch import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR +import app.revanced.patches.youtube.utils.integrations.Constants.SPANS_PATH import app.revanced.patches.youtube.utils.playertype.PlayerTypeHookPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.DarkBackground @@ -71,6 +73,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( description = "Adds options to hide or change components related to the video player.", dependencies = setOf( ControlsOverlayConfigPatch::class, + InclusiveSpanPatch::class, LithoFilterPatch::class, PlayerTypeHookPatch::class, SettingsPatch::class, @@ -103,6 +106,8 @@ object PlayerComponentsPatch : BaseBytecodePatch( ) { private const val PLAYER_COMPONENTS_FILTER_CLASS_DESCRIPTOR = "$COMPONENTS_PATH/PlayerComponentsFilter;" + private const val SANITIZE_VIDEO_SUBTITLE_FILTER_CLASS_DESCRIPTOR = + "$SPANS_PATH/SanitizeVideoSubtitleFilter;" override fun execute(context: BytecodeContext) { @@ -428,6 +433,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( // endregion + InclusiveSpanPatch.addFilter(SANITIZE_VIDEO_SUBTITLE_FILTER_CLASS_DESCRIPTOR) LithoFilterPatch.addFilter(PLAYER_COMPONENTS_FILTER_CLASS_DESCRIPTOR) /** diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/PlayerFlyoutMenuPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/PlayerFlyoutMenuPatch.kt index 5b48b26061..0bd8a9ace7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/PlayerFlyoutMenuPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/PlayerFlyoutMenuPatch.kt @@ -2,11 +2,14 @@ package app.revanced.patches.youtube.player.flyoutmenu.hide import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.shared.litho.LithoFilterPatch import app.revanced.patches.youtube.player.flyoutmenu.hide.fingerprints.AdvancedQualityBottomSheetFingerprint import app.revanced.patches.youtube.player.flyoutmenu.hide.fingerprints.CaptionsBottomSheetFingerprint import app.revanced.patches.youtube.player.flyoutmenu.hide.fingerprints.PiPModeConfigFingerprint +import app.revanced.patches.youtube.player.flyoutmenu.hide.fingerprints.VideoQualityArrayFingerprint import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.fingerprints.QualityMenuViewInflateFingerprint import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH @@ -18,12 +21,14 @@ import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.injectLiteralInstructionBooleanCall import app.revanced.util.injectLiteralInstructionViewCall import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Suppress("unused") @@ -41,7 +46,8 @@ object PlayerFlyoutMenuPatch : BaseBytecodePatch( AdvancedQualityBottomSheetFingerprint, CaptionsBottomSheetFingerprint, PiPModeConfigFingerprint, - QualityMenuViewInflateFingerprint + QualityMenuViewInflateFingerprint, + VideoQualityArrayFingerprint, ) ) { private const val PANELS_FILTER_CLASS_DESCRIPTOR = @@ -84,6 +90,29 @@ object PlayerFlyoutMenuPatch : BaseBytecodePatch( // endregion + // region patch for hide '1080p Premium' label + + VideoQualityArrayFingerprint.resultOrThrow().mutableMethod.apply { + val qualityLabelIndex = + VideoQualityArrayFingerprint.indexOfQualityLabelInstruction(this) + 1 + val qualityLabelRegister = + getInstruction(qualityLabelIndex).registerA + val jumpIndex = indexOfFirstInstructionReversedOrThrow(qualityLabelIndex) { + opcode == Opcode.INVOKE_INTERFACE && + getReference()?.name == "hasNext" + } + + addInstructionsWithLabels( + qualityLabelIndex + 1, """ + invoke-static {v$qualityLabelRegister}, $PLAYER_CLASS_DESCRIPTOR->hidePlayerFlyoutMenuEnhancedBitrate(Ljava/lang/String;)Ljava/lang/String; + move-result-object v$qualityLabelRegister + if-eqz v$qualityLabelRegister, :jump + """, ExternalLabel("jump", getInstruction(jumpIndex)) + ) + } + + // endregion + LithoFilterPatch.addFilter(PANELS_FILTER_CLASS_DESCRIPTOR) /** diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/fingerprints/VideoQualityArrayFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/fingerprints/VideoQualityArrayFingerprint.kt new file mode 100644 index 0000000000..8de44d402d --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/fingerprints/VideoQualityArrayFingerprint.kt @@ -0,0 +1,60 @@ +package app.revanced.patches.youtube.player.flyoutmenu.hide.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.youtube.player.flyoutmenu.hide.fingerprints.VideoQualityArrayFingerprint.ENDS_WITH_PARAMETER_LIST +import app.revanced.patches.youtube.player.flyoutmenu.hide.fingerprints.VideoQualityArrayFingerprint.STARTS_WITH_PARAMETER_LIST +import app.revanced.patches.youtube.player.flyoutmenu.hide.fingerprints.VideoQualityArrayFingerprint.indexOfQualityLabelInstruction +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction +import app.revanced.util.parametersEqual +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +internal object VideoQualityArrayFingerprint : MethodFingerprint( + returnType = "[Lcom/google/android/libraries/youtube/innertube/model/media/VideoQuality;", + accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, + // 18.29 and earlier parameters are: + // "Ljava/util/List;", + // "Ljava/lang/String;" + // "L" + + // 18.31+ parameters are: + // "Ljava/util/List;", + // "Ljava/util/Collection;", + // "Ljava/lang/String;" + // "L" + customFingerprint = custom@{ methodDef, _ -> + val parameterTypes = methodDef.parameterTypes + val parameterSize = parameterTypes.size + if (parameterSize != 3 && parameterSize != 4) { + return@custom false + } + + val startsWithMethodParameterList = parameterTypes.slice(0..0) + val endsWithMethodParameterList = parameterTypes.slice(parameterSize - 2..= 0 + } +) { + private val STARTS_WITH_PARAMETER_LIST = listOf( + "Ljava/util/List;" + ) + private val ENDS_WITH_PARAMETER_LIST = listOf( + "Ljava/lang/String;", + "L" + ) + + fun indexOfQualityLabelInstruction(methodDef: Method) = + methodDef.indexOfFirstInstruction { + val reference = getReference() + opcode == Opcode.INVOKE_VIRTUAL && + reference?.returnType == "Ljava/lang/String;" && + reference.parameterTypes.size == 0 && + reference.definingClass == "Lcom/google/android/libraries/youtube/innertube/model/media/FormatStreamModel;" + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/SeekbarComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/SeekbarComponentsPatch.kt index 6d93672b79..fa2af31e2f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/SeekbarComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/SeekbarComponentsPatch.kt @@ -14,6 +14,7 @@ import app.revanced.patches.youtube.player.seekbar.fingerprints.SeekbarTappingFi import app.revanced.patches.youtube.player.seekbar.fingerprints.ShortsSeekbarColorFingerprint import app.revanced.patches.youtube.player.seekbar.fingerprints.ThumbnailPreviewConfigFingerprint import app.revanced.patches.youtube.player.seekbar.fingerprints.TimeCounterFingerprint +import app.revanced.patches.youtube.player.seekbar.fingerprints.TimelineMarkerArrayFingerprint import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.fingerprints.PlayerButtonsResourcesFingerprint import app.revanced.patches.youtube.utils.fingerprints.PlayerButtonsVisibilityFingerprint @@ -30,6 +31,7 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ReelT import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch.contexts import app.revanced.patches.youtube.video.information.VideoInformationPatch +import app.revanced.util.alsoResolve import app.revanced.util.findMethodsOrThrow import app.revanced.util.getReference import app.revanced.util.getWalkerMethod @@ -67,8 +69,9 @@ object SeekbarComponentsPatch : BaseBytecodePatch( SeekbarFingerprint, SeekbarTappingFingerprint, ShortsSeekbarColorFingerprint, + TimelineMarkerArrayFingerprint, ThumbnailPreviewConfigFingerprint, - TotalTimeFingerprint + TotalTimeFingerprint, ) ) { override fun execute(context: BytecodeContext) { @@ -211,11 +214,24 @@ object SeekbarComponentsPatch : BaseBytecodePatch( // region patch for hide chapter - PlayerButtonsVisibilityFingerprint.resolve( - context, - PlayerButtonsResourcesFingerprint.resultOrThrow().mutableClass - ) - PlayerButtonsVisibilityFingerprint.resultOrThrow().let { + TimelineMarkerArrayFingerprint.resultOrThrow().let { + it.mutableMethod.apply { + addInstructionsWithLabels( + 0, """ + invoke-static {}, $PLAYER_CLASS_DESCRIPTOR->disableSeekbarChapters()Z + move-result v0 + if-eqz v0, :show + const/4 v0, 0x0 + new-array v0, v0, [Lcom/google/android/libraries/youtube/player/features/overlay/timebar/TimelineMarker; + return-object v0 + """, ExternalLabel("show", getInstruction(0)) + ) + } + } + + PlayerButtonsVisibilityFingerprint.alsoResolve( + context, PlayerButtonsResourcesFingerprint + ).let { it.mutableMethod.apply { val freeRegister = implementation!!.registerCount - parameters.size - 2 val viewIndex = indexOfFirstInstructionOrThrow(Opcode.INVOKE_INTERFACE) @@ -223,7 +239,7 @@ object SeekbarComponentsPatch : BaseBytecodePatch( addInstructionsWithLabels( viewIndex, """ - invoke-static {v$viewRegister}, $PLAYER_CLASS_DESCRIPTOR->hideSeekbarChapters(Landroid/view/View;)Z + invoke-static {v$viewRegister}, $PLAYER_CLASS_DESCRIPTOR->hideSeekbarChapterLabel(Landroid/view/View;)Z move-result v$freeRegister if-eqz v$freeRegister, :ignore return-void diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/fingerprints/TimelineMarkerArrayFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/fingerprints/TimelineMarkerArrayFingerprint.kt new file mode 100644 index 0000000000..9429def308 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/fingerprints/TimelineMarkerArrayFingerprint.kt @@ -0,0 +1,10 @@ +package app.revanced.patches.youtube.player.seekbar.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal object TimelineMarkerArrayFingerprint : MethodFingerprint( + returnType = "[Lcom/google/android/libraries/youtube/player/features/overlay/timebar/TimelineMarker;", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/SwipeControlsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/SwipeControlsPatch.kt index 1fcad075e9..036468b186 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/SwipeControlsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/SwipeControlsPatch.kt @@ -121,7 +121,6 @@ object SwipeControlsPatch : BaseBytecodePatch( """, ExternalLabel("default", getInstruction(0)) ) - settingArray += "PREFERENCE_CATEGORY: SWIPE_CONTROLS_EXPERIMENTAL_FLAGS" settingArray += "SETTINGS: DISABLE_HDR_BRIGHTNESS" } @@ -137,7 +136,6 @@ object SwipeControlsPatch : BaseBytecodePatch( "$INTEGRATIONS_SWIPE_CONTROLS_PATCH_CLASS_DESCRIPTOR->enableSwipeToSwitchVideo()Z" ) - settingArray += "PREFERENCE_CATEGORY: SWIPE_CONTROLS_EXPERIMENTAL_FLAGS" settingArray += "SETTINGS: ENABLE_SWIPE_TO_SWITCH_VIDEO" } @@ -153,7 +151,6 @@ object SwipeControlsPatch : BaseBytecodePatch( "$INTEGRATIONS_SWIPE_CONTROLS_PATCH_CLASS_DESCRIPTOR->enableWatchPanelGestures()Z" ) - settingArray += "PREFERENCE_CATEGORY: SWIPE_CONTROLS_EXPERIMENTAL_FLAGS" settingArray += "SETTINGS: ENABLE_WATCH_PANEL_GESTURES" } diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/streamingdata/SpoofStreamingDataPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/streamingdata/SpoofStreamingDataPatch.kt index 3f06ad0522..1e17d95f99 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/streamingdata/SpoofStreamingDataPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/streamingdata/SpoofStreamingDataPatch.kt @@ -180,7 +180,7 @@ object SpoofStreamingDataPatch : BaseBytecodePatch( # Set streaming data. iget-object v$freeRegister, v$freeRegister, $getStreamingDataField - if-eqz v0, :disabled + if-eqz v$freeRegister, :disabled iput-object v$freeRegister, p0, $setStreamingDataField """, diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/SuggestedVideoEndScreenPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/SuggestedVideoEndScreenPatch.kt index b078d06c2e..5b46d286f9 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/SuggestedVideoEndScreenPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/SuggestedVideoEndScreenPatch.kt @@ -50,7 +50,7 @@ object SuggestedVideoEndScreenPatch : BytecodePatch( val invokeIndex = indexOfFirstInstructionOrThrow { val reference = getReference() - reference?.returnType == "Z" && + reference?.returnType == "Z" && reference.parameterTypes.size == 0 && reference.name == autoNavStatusMethodName } diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/integrations/Constants.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/integrations/Constants.kt index 28b4501fbe..bd6be2c49d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/integrations/Constants.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/integrations/Constants.kt @@ -15,6 +15,7 @@ object Constants { const val OVERLAY_BUTTONS_PATH = "$PATCHES_PATH/overlaybutton" const val PLAYER_PATH = "$PATCHES_PATH/player" const val SHORTS_PATH = "$PATCHES_PATH/shorts" + const val SPANS_PATH = "$PATCHES_PATH/spans" const val SWIPE_PATH = "$PATCHES_PATH/swipe" const val UTILS_PATH = "$PATCHES_PATH/utils" const val VIDEO_PATH = "$PATCHES_PATH/video" diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt index aa530b0cc0..e81bb3576f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt @@ -7,6 +7,8 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.annotation.Patch +import app.revanced.patches.shared.litho.LithoFilterPatch +import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.youtube.utils.integrations.Constants.SHARED_PATH import app.revanced.patches.youtube.utils.integrations.Constants.UTILS_PATH import app.revanced.patches.youtube.utils.playertype.fingerprint.ActionBarSearchResultsFingerprint @@ -29,7 +31,12 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction import com.android.tools.smali.dexlib2.iface.reference.FieldReference -@Patch(dependencies = [SharedResourceIdPatch::class]) +@Patch( + dependencies = [ + SharedResourceIdPatch::class, + LithoFilterPatch::class + ] +) object PlayerTypeHookPatch : BytecodePatch( setOf( ActionBarSearchResultsFingerprint, @@ -45,6 +52,9 @@ object PlayerTypeHookPatch : BytecodePatch( private const val INTEGRATIONS_ROOT_VIEW_HOOK_CLASS_DESCRIPTOR = "$SHARED_PATH/RootView;" + private const val FILTER_CLASS_DESCRIPTOR = + "$COMPONENTS_PATH/RelatedVideoFilter;" + override fun execute(context: BytecodeContext) { // region patch for set player type @@ -153,5 +163,7 @@ object PlayerTypeHookPatch : BytecodePatch( // endregion + LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR) + } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt index 0819c4138b..db6bd75fd1 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt @@ -17,7 +17,6 @@ import app.revanced.patches.shared.mapping.ResourceType.STYLE @Patch(dependencies = [ResourceMappingPatch::class]) object SharedResourceIdPatch : ResourcePatch() { - var AccessibilityOfflineButtonSync = -1L var AccountSwitcherAccessibility = -1L var ActionBarRingo = -1L var ActionBarRingoBackground = -1L @@ -127,7 +126,6 @@ object SharedResourceIdPatch : ResourcePatch() { override fun execute(context: ResourceContext) { - AccessibilityOfflineButtonSync = getId(STRING, "accessibility_offline_button_sync") AccountSwitcherAccessibility = getId(STRING, "account_switcher_accessibility_label") ActionBarRingo = getId(LAYOUT, "action_bar_ringo") ActionBarRingoBackground = getId(LAYOUT, "action_bar_ringo_background") diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/shorts/ReturnYouTubeDislikeShortsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/shorts/ReturnYouTubeDislikeShortsPatch.kt index f26911ea02..34009a515f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/shorts/ReturnYouTubeDislikeShortsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/shorts/ReturnYouTubeDislikeShortsPatch.kt @@ -68,7 +68,10 @@ object ReturnYouTubeDislikeShortsPatch : BytecodePatch( } if (SettingsPatch.upward1834) { - TextComponentPatch.hookSpannableString(INTEGRATIONS_RYD_CLASS_DESCRIPTOR, "onCharSequenceLoaded") + TextComponentPatch.hookSpannableString( + INTEGRATIONS_RYD_CLASS_DESCRIPTOR, + "onCharSequenceLoaded" + ) } } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubeusername/ReturnYouTubeUsernamePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubeusername/ReturnYouTubeUsernamePatch.kt new file mode 100644 index 0000000000..5bd7ee96db --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubeusername/ReturnYouTubeUsernamePatch.kt @@ -0,0 +1,34 @@ +package app.revanced.patches.youtube.utils.returnyoutubeusername + +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patches.shared.returnyoutubeusername.BaseReturnYouTubeUsernamePatch +import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE +import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.patch.BaseBytecodePatch + +@Suppress("unused") +object ReturnYouTubeUsernamePatch : BaseBytecodePatch( + name = "Return YouTube Username", + description = "Adds an option to replace YouTube handles with usernames in comments using YouTube Data API v3.", + dependencies = setOf( + BaseReturnYouTubeUsernamePatch::class, + SettingsPatch::class, + ), + compatiblePackages = COMPATIBLE_PACKAGE, + use = false +) { + override fun execute(context: BytecodeContext) { + + /** + * Add settings + */ + SettingsPatch.addPreference( + arrayOf( + "PREFERENCE_SCREEN: RETURN_YOUTUBE_USERNAME" + ) + ) + + SettingsPatch.updatePatchStatus(this) + + } +} diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/settings/SettingsBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/settings/SettingsBytecodePatch.kt index d4625b195e..e46e4a1236 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/settings/SettingsBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/settings/SettingsBytecodePatch.kt @@ -8,8 +8,8 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.shared.integrations.Constants.INTEGRATIONS_UTILS_CLASS_DESCRIPTOR +import app.revanced.patches.shared.integrations.Constants.INTEGRATIONS_UTILS_PATH import app.revanced.patches.shared.mapping.ResourceMappingPatch -import app.revanced.patches.youtube.utils.integrations.Constants.INTEGRATIONS_PATH import app.revanced.patches.youtube.utils.integrations.Constants.UTILS_PATH import app.revanced.patches.youtube.utils.mainactivity.MainActivityResolvePatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch @@ -31,7 +31,7 @@ object SettingsBytecodePatch : BytecodePatch( "$UTILS_PATH/InitializationPatch;" private const val INTEGRATIONS_THEME_METHOD_DESCRIPTOR = - "$INTEGRATIONS_PATH/utils/ThemeUtils;->setTheme(Ljava/lang/Enum;)V" + "$INTEGRATIONS_UTILS_PATH/BaseThemeUtils;->setTheme(Ljava/lang/Enum;)V" internal lateinit var contexts: BytecodeContext diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/playerresponse/fingerprint/PlayerParameterBuilderFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/playerresponse/fingerprint/PlayerParameterBuilderFingerprint.kt index 39c7834cbe..6053c8064b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/playerresponse/fingerprint/PlayerParameterBuilderFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/playerresponse/fingerprint/PlayerParameterBuilderFingerprint.kt @@ -48,7 +48,7 @@ internal object PlayerParameterBuilderFingerprint : MethodFingerprint( } val startsWithMethodParameterList = parameterTypes.slice(0..5) - val endsWithMethodParameterList = parameterTypes.slice(parameterSize - 7..< parameterSize) + val endsWithMethodParameterList = parameterTypes.slice(parameterSize - 7.. videoIdMethod = method videoIdInsertIndex = index diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprints/VideoIdFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprints/VideoIdFingerprint.kt index 7158d20dce..04ed1527a2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprints/VideoIdFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprints/VideoIdFingerprint.kt @@ -2,8 +2,13 @@ package app.revanced.patches.youtube.video.videoid.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.youtube.utils.PlayerResponseModelUtils.PLAYER_RESPONSE_MODEL_CLASS_DESCRIPTOR +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference internal object VideoIdFingerprint : MethodFingerprint( returnType = "V", @@ -14,5 +19,31 @@ internal object VideoIdFingerprint : MethodFingerprint( Opcode.MOVE_RESULT_OBJECT, Opcode.INVOKE_INTERFACE, Opcode.MOVE_RESULT_OBJECT - ) -) + ), + customFingerprint = custom@{ methodDef, classDef -> + if (!classDef.fields.any { it.type == "Lcom/google/android/libraries/youtube/player/subtitles/model/SubtitleTrack;" }) { + return@custom false + } + val implementation = methodDef.implementation + ?: return@custom false + val instructions = implementation.instructions + val instructionCount = instructions.count() + if (instructionCount < 30) { + return@custom false + } + + val reference = + (instructions.elementAt(instructionCount - 2) as? ReferenceInstruction)?.reference.toString() + if (reference != "Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;") { + return@custom false + } + + methodDef.indexOfFirstInstruction { + val methodReference = getReference() + opcode == Opcode.INVOKE_INTERFACE && + methodReference?.returnType == "Ljava/lang/String;" && + methodReference.parameterTypes.isEmpty() && + methodReference.definingClass == PLAYER_RESPONSE_MODEL_CLASS_DESCRIPTOR + } >= 0 + }, +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprints/VideoIdParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprints/VideoIdParentFingerprint.kt deleted file mode 100644 index cec98bfca5..0000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprints/VideoIdParentFingerprint.kt +++ /dev/null @@ -1,9 +0,0 @@ -package app.revanced.patches.youtube.video.videoid.fingerprints - -import app.revanced.patcher.fingerprint.MethodFingerprint - -internal object VideoIdParentFingerprint : MethodFingerprint( - returnType = "V", - parameters = listOf("Ljava/lang/Object;", "Ljava/lang/Exception;"), - strings = listOf("error retrieving subtitle"), -) diff --git a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt index bb3ea6e8e7..0f49188622 100644 --- a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt +++ b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt @@ -509,6 +509,16 @@ fun MutableMethod.getWalkerMethod(context: BytecodeContext, offset: Int): Mutabl } } +/** + * Taken from BiliRoamingX: + * https://github.com/BiliRoamingX/BiliRoamingX/blob/ae58109f3acdd53ec2d2b3fb439c2a2ef1886221/patches/src/main/kotlin/app/revanced/patches/bilibili/utils/Extenstions.kt#L151 + */ +fun MutableMethod.getFiveRegisters(index: Int) = + with(getInstruction(index)) { + arrayOf(registerC, registerD, registerE, registerF, registerG) + .take(registerCount).joinToString(",") { "v$it" } + } + fun BytecodeContext.addStaticFieldToIntegration( className: String, methodName: String, diff --git a/src/main/resources/music/settings/host/values/arrays.xml b/src/main/resources/music/settings/host/values/arrays.xml index 525a55888e..aaaaac2e98 100644 --- a/src/main/resources/music/settings/host/values/arrays.xml +++ b/src/main/resources/music/settings/host/values/arrays.xml @@ -37,6 +37,16 @@ https://github.com/polymorphicshade/Tubular/releases/latest https://github.com/deniscerri/ytdlnis/releases/latest + + @string/revanced_return_youtube_username_display_format_username_only + @string/revanced_return_youtube_username_display_format_username_handle + @string/revanced_return_youtube_username_display_format_handle_username + + + USERNAME_ONLY + USERNAME_HANDLE + HANDLE_USERNAME + @string/revanced_spoof_app_version_target_entry_6_11_52 @string/revanced_spoof_app_version_target_entry_4_27_53 diff --git a/src/main/resources/music/settings/host/values/colors.xml b/src/main/resources/music/settings/host/values/colors.xml new file mode 100644 index 0000000000..19e98c61f1 --- /dev/null +++ b/src/main/resources/music/settings/host/values/colors.xml @@ -0,0 +1,4 @@ + + + #ff1d1d1d + diff --git a/src/main/resources/music/settings/host/values/strings.xml b/src/main/resources/music/settings/host/values/strings.xml index fb78c5501b..a4bf4a33a2 100644 --- a/src/main/resources/music/settings/host/values/strings.xml +++ b/src/main/resources/music/settings/host/values/strings.xml @@ -303,6 +303,8 @@ Some features may not work properly in the old player layout." Displays the percentage of dislikes instead of the dislike count. Compact like button Hides the separator of the like button. + Show estimated likes + Shows the estimated like count of videos. Show a toast if API is unavailable Shows a toast if the Return YouTube Dislike API is unavailable. About @@ -313,6 +315,29 @@ Some features may not work properly in the old player layout." Dislikes are unavailable (status %d). Dislikes are unavailable (client API limit reached). Dislikes are unavailable (%s). + Hidden + + + + Return YouTube Username + + Enable Return YouTube Username + Replaces handles with usernames in comments. + Display format + Select the username display format. + Username + Username (@handle) + @handle (Username) + YouTube Data API key + The developer key for using the YouTube Data API v3. + About YouTube Data API key + "A YouTube Data API v3 Developer Key is required to replace handles with usernames. + +The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. + +Click to see how to issue a API key." + Issue YouTube Data API v3 developer key + 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. diff --git a/src/main/resources/music/translations/bg-rBG/strings.xml b/src/main/resources/music/translations/bg-rBG/strings.xml index 2d65cd629a..75d3328f18 100644 --- a/src/main/resources/music/translations/bg-rBG/strings.xml +++ b/src/main/resources/music/translations/bg-rBG/strings.xml @@ -200,6 +200,7 @@ Относно Данните за нехаресване са от Return YouTube Dislike API. Докоснете за да научите повече. Нехаресванията не са достъпни (достигнат лимит на API). + Вкл. отчети за грешки diff --git a/src/main/resources/music/translations/bn/strings.xml b/src/main/resources/music/translations/bn/strings.xml index 3d60684fe3..7b5b930a82 100644 --- a/src/main/resources/music/translations/bn/strings.xml +++ b/src/main/resources/music/translations/bn/strings.xml @@ -67,6 +67,7 @@ সম্পর্কে তথ্য প্রদান করা হয় Return YouTube Dislike API দ্বারা। আরও জানতে আলতো চাপুন। অপছন্দ পাওয়া যাচ্ছে না (ক্লায়েন্ট API সর্বোচ্চ সীমা পৌঁছেছে) + ডিবাগ লগ সক্রিয় করুন diff --git a/src/main/resources/music/translations/cs-rCZ/strings.xml b/src/main/resources/music/translations/cs-rCZ/strings.xml index d0f570fb2f..ab90d33c27 100644 --- a/src/main/resources/music/translations/cs-rCZ/strings.xml +++ b/src/main/resources/music/translations/cs-rCZ/strings.xml @@ -49,6 +49,7 @@ + Povolit režim ladění diff --git a/src/main/resources/music/translations/el-rGR/strings.xml b/src/main/resources/music/translations/el-rGR/strings.xml index ba5e96c1c3..ba47ad5a3b 100644 --- a/src/main/resources/music/translations/el-rGR/strings.xml +++ b/src/main/resources/music/translations/el-rGR/strings.xml @@ -273,6 +273,8 @@ Αντί για τον αριθμό των dislike, θα εμφανίζεται το ποσοστό τους. Κουμπί «Μου αρέσει» μικρότερου στυλ Απόκρυψη του διαχωριστικού του κουμπιού «Μου αρέσει». + Εμφάνιση εκτιμώμενων likes + Εμφάνιση της εκτιμώμενης ποσότητας των «Μου αρέσει» των βίντεο. Μήνυμα αν το API δεν είναι διαθέσιμο Να εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το Return YouTube Dislike API δεν είναι διαθέσιμο. Σχετικά με @@ -282,6 +284,26 @@ Δεδομένα dislike μη διαθέσιμα (κατάσταση %d). Δεδομένα dislike μη διαθέσιμα (το όριο API έχει επιτευχθεί). Δεδομένα dislike μη διαθέσιμα (%s). + Κρυμμένο + + Return YouTube Username + Επαναφορά ονομάτων χρήστη + Εμφάνιση του ονόματος χρήστη αντί για το ψευδώνυμο στα σχόλια. + Μορφή εμφάνισης + Επιλογή της μορφής εμφάνισης ονόματος χρήστη. + Όνομα χρήστη + Όνομα χρήστη (@ψευδώνυμο) + \@ψευδώνυμο (Όνομα χρήστη) + Κλειδί YouTube Data API + Το κλειδί προγραμματιστή για τη χρήση του YouTube Data API v3. + Σχετικά με το κλειδί YouTube Data API + "Για να γίνει αντικατάσταση του ψευδωνύμου με όνομα χρήστη, απαιτείται κλειδί προγραμματιστή YouTube Data API v3. + +Η ημερήσια ποσόστωση για τα κλειδιά API στο δωρεάν πακέτο είναι 10,000, και χρησιμοποιείται 1 ποσόστωση για την αντικατάσταση ψευδωνύμου με όνομα χρήστη για 1 σχόλιο. + +Πατήστε για να δείτε πώς να εκδώσετε ένα κλειδί API." + Έκδοση κλειδιού προγραμματιστή YouTube Data API v3 + 1. Μεταβείτε στη <a href=%1$s>δημιουργία νέου project</a>.<br>2. Πατήστε το κουμπί <b>CREATE</b>. <br>3. Μεταβείτε στην επιλογή <a href=%2$s>YouTube Data API v3</a>.<br>4. Πατήστε το κουμπί <b>ENABLE</b>.<br>5. Πατήστε το κουμπί <b>CREATE CREDENTIALS</b>.<br>6. Επιλέξτε την επιλογή <b>Public data</b>.<br>7. Πατήστε το κουμπί <b>NEXT</b>.<br>8. Αντιγράψτε το κλειδί API.<br><br>※ Το κλειδί API δεν πρέπει να το μοιράζεστε ποτέ με άλλους, οπότε δεν περιλαμβάνεται κατά την Εισαγωγή / Εξαγωγή ρυθμίσεων. SponsorBlock Ενεργοποίηση του SponsorBlock diff --git a/src/main/resources/music/translations/es-rES/strings.xml b/src/main/resources/music/translations/es-rES/strings.xml index 4544033700..f0ec438078 100644 --- a/src/main/resources/music/translations/es-rES/strings.xml +++ b/src/main/resources/music/translations/es-rES/strings.xml @@ -273,6 +273,8 @@ Algunas características pueden no funcionar correctamente en la disposición de En lugar del número de no me gusta, se muestra el porcentaje de no me gusta. Botón Me Gusta compacto Oculta el separador del botón Me gusta. + Mostrar \"Me gusta\" estimados + Muestra el recuento estimado de \"me gusta\" de los vídeos. Mostrar mensaje si la API no está disponible Se muestra el mensaje si la API de ReturnYouTubeDislike no está disponible. Acerca de @@ -282,6 +284,26 @@ Algunas características pueden no funcionar correctamente en la disposición de Los no me gusta no están disponibles (estado %d). Los No Me Gusta no están disponibles (se alcanzó el límite de la API del cliente). Los no me gusta no están disponibles (%s). + Oculto + + Devolver usuario de YouTube + Activa devolver nombre de usuario de YouTube + Reemplaza identificadores con nombres de usuario en los comentarios. + Formato de visualización + Seleccione el formato para mostrar el nombre de usuario. + Nombre de usuario + Nombre de usuario (@identificador) + \@identificador (Nombre de usuario) + Clave API de datos de YouTube + La clave de desarrollador para utilizar la API v3 de datos de YouTube. + Acerca de la clave API de datos de YouTube + "Se requiere la clave de desarrollador de la API v3 de datos de YouTube para reemplazar el identificador con el nombre de usuario. + +La cuota diaria para las claves API en el plan gratuito es de 10,000, y se utiliza 1 cuota para reemplazar el identificador con el nombre de usuario en 1 comentario. + +Toca para ver cómo crear una clave de API." + Crear clave de desarrollador API v3 de datos de YouTube + 1. Ve a <a href=%1$s>Crear un nuevo proyecto</a>.<br>2. Pulsa en el botón <b>CREAR</b>.<br>3. 3. Ve a <a href=%2$s>API v3 de datos de YouTube</a>.<br>4. Pulsa en el botón <b>HABILITAR</b>.<br>5. Pulsa en <b>CREAR</b>. Pulsa en el botón <b>CREAR CREDENCIALES</b>.<br>6. Selecciona la opción <b>Datos públicos</b>.<br>7. Pulsa en el botón <b> SIGUIENTE</b>.<br>8. Copia la clave API.<br><br>※ La clave API nunca debe ser compartida con otros, por lo que no se incluye en los ajustes de Importar / Exportar. SponsorBlock Activar SponsorBlock diff --git a/src/main/resources/music/translations/fr-rFR/strings.xml b/src/main/resources/music/translations/fr-rFR/strings.xml index d9dc423dd5..8fca9c77ef 100644 --- a/src/main/resources/music/translations/fr-rFR/strings.xml +++ b/src/main/resources/music/translations/fr-rFR/strings.xml @@ -282,6 +282,7 @@ Certaines fonctions peuvent ne pas fonctionner sur l'ancienne mise en page."Les \"Je n\'aime pas\" sont indisponible (status %d). Les \"Je n\'aime pas\" sont indisponibles (le client a atteint la limite de l\'API). Les \"Je n\'aime pas\" sont indisponible (%s). + SponsorBlock Activer Sponsorblock diff --git a/src/main/resources/music/translations/hu-rHU/strings.xml b/src/main/resources/music/translations/hu-rHU/strings.xml index f19a1e2515..de62f4e431 100644 --- a/src/main/resources/music/translations/hu-rHU/strings.xml +++ b/src/main/resources/music/translations/hu-rHU/strings.xml @@ -265,6 +265,7 @@ Előfordulhat, hogy egyes funkciók nem működnek megfelelően a régi lejátsz A nem tetszik funkció nem elérhető (állapot: %d). Nem tetszések nem érhetőek el (kliens API limit elérve). A nem tetszik funkció nem elérhető (%s). + Szponzor Blokk SzponsorBlokk engedélyezése diff --git a/src/main/resources/music/translations/id-rID/strings.xml b/src/main/resources/music/translations/id-rID/strings.xml index 2d8bc56539..bf556e1614 100644 --- a/src/main/resources/music/translations/id-rID/strings.xml +++ b/src/main/resources/music/translations/id-rID/strings.xml @@ -267,6 +267,7 @@ Some features may not work properly in the old player layout." Dislikes are unavailable (status %d). Dislike tidak tersedia (batas API client tercapai). Dislikes are unavailable (%s). + SponsorBlock Enable SponsorBlock diff --git a/src/main/resources/music/translations/in/strings.xml b/src/main/resources/music/translations/in/strings.xml index 2d8bc56539..bf556e1614 100644 --- a/src/main/resources/music/translations/in/strings.xml +++ b/src/main/resources/music/translations/in/strings.xml @@ -267,6 +267,7 @@ Some features may not work properly in the old player layout." Dislikes are unavailable (status %d). Dislike tidak tersedia (batas API client tercapai). Dislikes are unavailable (%s). + SponsorBlock Enable SponsorBlock diff --git a/src/main/resources/music/translations/it-rIT/strings.xml b/src/main/resources/music/translations/it-rIT/strings.xml index 7b6db22eb2..3346009ef1 100644 --- a/src/main/resources/music/translations/it-rIT/strings.xml +++ b/src/main/resources/music/translations/it-rIT/strings.xml @@ -62,6 +62,7 @@ Informazioni I dati vengono forniti dall\'API Return YouTube Dislike. Tocca qui per saperne di più. \"Non mi piace\" non disponibile (limite API client raggiunto) + Abilita la registrazione del debug diff --git a/src/main/resources/music/translations/ja-rJP/strings.xml b/src/main/resources/music/translations/ja-rJP/strings.xml index b7c653df4d..2896952dba 100644 --- a/src/main/resources/music/translations/ja-rJP/strings.xml +++ b/src/main/resources/music/translations/ja-rJP/strings.xml @@ -269,6 +269,7 @@ 低評価数は一時的に利用できません。(ステータス %d) 低評価数は利用できません (クライアント API 制限) 低評価数は一時的に利用できません。(%s) + SponsorBlock Sponsor Block を有効化 diff --git a/src/main/resources/music/translations/ko-rKR/strings.xml b/src/main/resources/music/translations/ko-rKR/strings.xml index 09edd7da10..7b481778be 100644 --- a/src/main/resources/music/translations/ko-rKR/strings.xml +++ b/src/main/resources/music/translations/ko-rKR/strings.xml @@ -274,6 +274,8 @@ 싫어요 수를 숫자가 아닌 퍼센트로 표시합니다. 좋아요 버튼에서 구분선 제거 좋아요 버튼에서 구분선을 숨깁니다. + 추정되는 좋아요 수 표시 + 좋아요 수가 숨겨진 음악(동영상)에서 추정되는 좋아요 수를 표시합니다. API를 사용할 수 없을 때 팝업 메시지 표시 ReturnYouTubeDislike를 사용할 수 없을 때, 팝업 메시지를 표시합니다. 정보 @@ -283,6 +285,26 @@ 싫어요 수를 표시할 수 없습니다 (상태 코드: %d). 싫어요 수를 표시할 수 없습니다. (클라이언트 API 제한 도달) 싫어요 수를 표시할 수 없습니다 (%s). + 숨겨짐 + + Return YouTube Username + Return YouTube Username 활성화 + 댓글에서 핸들(@사용자 아이디)이 아닌 사용자 이름을 표시합니다. + 표시 형식 + 사용자 이름 표시 형식을 선택하세요. + 사용자 이름 + 사용자 이름 (@핸들) + \@핸들 (사용자 이름) + YouTube Data API Key + YouTube Data API v3를 사용하기 위한 Developer Key입니다. + YouTube Data API Key에 대한 정보 + "핸들을 사용자 이름으로 변경하려면 YouTube Data API v3 Developer Key가 필요합니다. + +무료 요금제에서 API Key의 일일 할당량은 10,000개이며, 1개의 할당량은 댓글 1개에 대해 핸들을 사용자 이름으로 변경하는 데 사용됩니다. + +API Key를 발급받는 방법을 보려면 여기를 누르세요." + YouTube Data API v3 Developer Key 발급 + 1. <a href=%1$s>새 프로젝트 만들기</a> 로 이동합니다.<br>2. <b>만들기</b> 버튼을 터치합니다.<br>3. <a href=%2$s>YouTube Data API v3</a> 로 이동합니다.<br>4. <b>사용</b> 버튼을 터치합니다.<br>5. <b>사용자 인증 정보 만들기</b> 버튼을 터치합니다.<br>6. <b>공개 데이터</b> 옵션을 선택합니다.<br>7. <b>다음</b> 버튼을 터치합니다.<br>8. API Key를 복사합니다.<br><br>※ API Key는 다른 사람과 공유해서는 안 되므로 가져오기 / 내보내기 설정에 포함되지 않습니다. SponsorBlock SponsorBlock 활성화 diff --git a/src/main/resources/music/translations/nl-rNL/strings.xml b/src/main/resources/music/translations/nl-rNL/strings.xml index 7b38fab94a..3a7d85dbd2 100644 --- a/src/main/resources/music/translations/nl-rNL/strings.xml +++ b/src/main/resources/music/translations/nl-rNL/strings.xml @@ -183,6 +183,7 @@ Bekende problemen: Dislikes niet beschikbaar (status %d). Vind ik niet leuk is niet beschikbaar (client API limiet bereikt) Dislikes niet beschikbaar (%s). + Debug logging aanzetten diff --git a/src/main/resources/music/translations/pl-rPL/strings.xml b/src/main/resources/music/translations/pl-rPL/strings.xml index 4ac6674c8f..d843e742a7 100644 --- a/src/main/resources/music/translations/pl-rPL/strings.xml +++ b/src/main/resources/music/translations/pl-rPL/strings.xml @@ -171,9 +171,9 @@ Nie pomija to ograniczeń wiekowych, lecz akceptuje je automatycznie." • Jeśli potem opcja zostanie wyłączona, stary interfejs użytkownika może pozostać do momentu wyczyszczenia danych aplikacji." Docelowa wersja aplikacji Wybierz wersję, którą chcesz oszukiwać. - 4.27.53 - Wyłącz tryb radia w rejonach kanadyjskich - 6.11.52 - Wyłącz teksty w czasie rzeczywistym - 7.16.53 - Przywróć stary pasek akcji + 4.27.53 - Wyłącza tryb radia w rejonach kanadyjskich + 6.11.52 - Wyłącza teksty w czasie rzeczywistym + 7.16.53 - Przywraca stary pasek akcji Pasek nawigacji Włącz czarny pasek nawigacji @@ -273,6 +273,8 @@ Niektóre ustawienia mogą nie działać poprawnie ze starym układem odtwarzacz Zamiast ilości łapek w dół, jest wyświetlany ich procent. Kompaktowy przycisk od łapkowania Ukrywa linię w przycisku od łapkowania. + Pokaż szacowaną ilość polubień + Pokazuje szacowaną ilość polubień filmów. Pokaż komunikat o niedostępności API Komunikat wyświetlany w momencie, gdy API ReturnYouTubeDislike jest niedostępne. O integracji @@ -282,6 +284,26 @@ Niektóre ustawienia mogą nie działać poprawnie ze starym układem odtwarzacz Liczba łapek w dół nie jest dostępna (status %d). Łapki w dół nie są dostępne (limit API użytkownika został osiągnięty). Liczba łapek w dół nie jest dostępna (%s). + Ukryte + + Return YouTube Username + Włącz Return YouTube Username + Zastępuje nicki nazwami użytkowników w komentarzach. + Format wyświetlania + Wybierz format wyświetlania nazwy użytkownika. + Nazwa użytkownika + Nazwa użytkownika (@nick) + \@nick (Nazwa użytkownika) + Klucz YouTube Data API + Klucz deweloperski używany do korzystania z API YouTube Data V3. + O kluczu YouTube Data API + "Klucz deweloperski YouTube Data API v3 jest wymagany do zastępowania nicków nazwami użytkownika. + +Dzienny limit kluczy API w planie darmowym wynosi 10 000, a 1 limit służy do zastąpienia nicku nazwą użytkownika dla 1 komentarza. + +Kliknij, by zobaczyć, jak zgłosić klucz API." + Zgłoś klucz deweloperski YouTube Data API + 1. Przejdź do <a href=%1$s>Utwórz nowy projekt</a>.<br>2. Kliknij przycisk <b>UTWÓRZ</b><br>3. Przejdź do <a href=%2$s>YouTube Data API v3</a>.<br>4. Kliknij przycisk <b>WŁĄCZ</b><br>5. Kliknij przycisk <b>UTWÓRZ DANE LOGOWANIA</b><br>6. Wybierz opcję <b>Dane publiczne</b><br>7. Kliknij przycisk <b>DALEJ</b><br>8. Skopiuj klucz API<br><br>※ Klucz API nie powinien być współdzielony z innymi, dlatego nie jest zawarty w ustawieniach importu/eksportu SponsorBlock Włącz SponsorBlock diff --git a/src/main/resources/music/translations/pt-rBR/strings.xml b/src/main/resources/music/translations/pt-rBR/strings.xml index d030d73f11..0f2e9105c1 100644 --- a/src/main/resources/music/translations/pt-rBR/strings.xml +++ b/src/main/resources/music/translations/pt-rBR/strings.xml @@ -273,6 +273,8 @@ Alguns recursos podem não funcionar corretamente no layout antigo do reprodutor Exibe a porcentagem de deslikes em vez da contagem de deslikes. Botão de curtir compacto Oculta o separador do botão curtir. + Exibir curtidas estimadas + Mostra a contagem estimada de curtidas dos vídeos. Exibir uma notificação flutuante se a API não estiver disponível Notificação flutuante exibida se o Return YouTube Dislike não está disponível. Sobre @@ -282,6 +284,26 @@ Alguns recursos podem não funcionar corretamente no layout antigo do reprodutor Deslikes indisponível (status %d). Dislikes indisponível (limite de API do cliente atingido). Deslikes indisponível (%s). + Oculto + + Return YouTube Username + Ativar Return YouTube Username + Substitui identificadores por nomes de usuários em comentários. + Formato de exibição + Selecione o formato de exibição do nome de usuário. + Nome de usuário + Nome de usuário (@identificador) + \@identificador (Nome de usuário) + Chave API dos Dados do YouTube + A chave de desenvolvedor para usar a API de Dados do YouTube v3. + Sobre a chave API de dados do YouTube + "Uma Chave de desenvolvedor da API de Dados do YouTube v3 é necessária para substituir identificadores por nomes de usuários. + +A cota diária para chaves de API no plano gratuito é de 10.000, e 1 cota é usada para substituir um identificador por um nome de usuário para 1 comentário. + +Clique para ver como emitir uma chave de API." + Emitir chave de desenvolvedor da API de dados do YouTube v3 + 1. Vá para <a href=%1$s>Criar um novo projeto</a>.<br>2. Clique no botão <b>CRIAR</b>.<br>3. Vá para <a href=%2$s>API de dados do YouTube v3</a>.<br>4. Clique no botão <b>ATIVAR</b>.<br>5. Clique no botão <b>CRIAR CREDENCIAIS</b>.<br>6. Selecione a opção <b>Dados públicos</b>.<br>7. Clique no botão <b>PRÓXIMO</b>.<br>8. Copie a chave da API.<br><br>※ A chave da API nunca deve ser compartilhada com outras pessoas, portanto, ela não é incluída nas configurações de Importação/Exportação. SponsorBlock Ativar SponsorBlock diff --git a/src/main/resources/music/translations/ro-rRO/strings.xml b/src/main/resources/music/translations/ro-rRO/strings.xml index 13edef2ae4..e1232dff1e 100644 --- a/src/main/resources/music/translations/ro-rRO/strings.xml +++ b/src/main/resources/music/translations/ro-rRO/strings.xml @@ -76,6 +76,7 @@ Probleme cunoscute: Ascunde separatorul butonului apreciez. Despre Datele sunt furnizate de API-ul Returnare YouTube Dislike. Atinge aici pentru a afla mai multe. + Activează jurnalul de depanare diff --git a/src/main/resources/music/translations/ru-rRU/strings.xml b/src/main/resources/music/translations/ru-rRU/strings.xml index 3d6335a578..f78aa4e704 100644 --- a/src/main/resources/music/translations/ru-rRU/strings.xml +++ b/src/main/resources/music/translations/ru-rRU/strings.xml @@ -269,6 +269,7 @@ Отметки \"Не нравится\" недоступны (состояние %d). Отметки \"Не нравится\" недоступны (достигнут лимит клиентов сервера API). Отметки \"Не нравится\" недоступны (%s). + SponsorBlock Включить SponsorBlock diff --git a/src/main/resources/music/translations/tr-rTR/strings.xml b/src/main/resources/music/translations/tr-rTR/strings.xml index 8291e7e9a2..7184df5c56 100644 --- a/src/main/resources/music/translations/tr-rTR/strings.xml +++ b/src/main/resources/music/translations/tr-rTR/strings.xml @@ -263,6 +263,7 @@ Eski oynatıcı düzeninde bazı ayarlar düzgün çalışmayabilir." Beğenmemeler mevcut değil (durum %d). Beğenmeme sayısı mevcut değil (istemci API sınırına ulaşıldı). Beğenmemeler mevcut değil (%s). + SponsorBlock SponsorBlock\'u etkinleştir diff --git a/src/main/resources/music/translations/uk-rUA/strings.xml b/src/main/resources/music/translations/uk-rUA/strings.xml index 44f389962e..6325aab610 100644 --- a/src/main/resources/music/translations/uk-rUA/strings.xml +++ b/src/main/resources/music/translations/uk-rUA/strings.xml @@ -273,6 +273,8 @@ Відобажає відсоток замість кількості дизлайків. Компактна кнопка \"Подобається\" Приховує лінію між кнопкою \"Подобається\" та кількістю лайків. + Показати приблизну кількість лайків + Показує приблизну кількість лайків відео. Показувати тост, якщо API не доступний Показує тост, якщо API ReturnYouTubeDislike не доступний. Про інтеграцію @@ -282,6 +284,26 @@ Дизлайки недоступні (статус %d). Дизлайки недоступні (досягнуто ліміт клієнтів сервера API). Дизлайки недоступні (%s). + Приховано + + Повернути ім\'я користувача YouTube + Увімкнути повернення імені користувача YouTube + Замінює псевдоніми на імена користувачів у коментарях. + Формат відображення + Вибрати формат відображення імені користувача. + Ім\'я користувача + Ім\'я користувача (@псевдонім) + \@псевдонім (Ім\'я користувача) + Ключ YouTube Data API + Ключ розробника для використання API YouTube Data v3. + Про ключ YouTube Data API + "Щоб замінити псевдоніми на імена користувачів, потрібен ключ розробника YouTube Data API v3. + +Щоденна квота для ключів API у безкоштовному тарифі становить 10 000, і 1 квота використовується для заміни псевдоніма на ім’я користувача для 1 коментаря. + +Натисніть, щоб дізнатися, як створити ключ API." + Створення ключа розробника YouTube Data API v3 + 1. Перейдіть до <a href=%1$s>Створити New Project</a>.<br>2. Натисніть кнопку <b>CREATE</b>.<br>3. Перейдіть до <a href=%2$s>YouTube Data API v3</a>.<br>4. Натисніть кнопку <b>ENABLE</b>.<br>5. Натисніть кнопку <b>CREATE CREDENTIALS</b>.<br>6. Виберіть <b>Public data</b>.<br>7. Натисніть кнопку <b>NEXT</b>.<br>8. Скопіюйте ключ API.<br><br>※ Ключ API не можна надавати іншим, тому його не включено в Імпорт / Експорт налаштувань. SponsorBlock Увімкнути SponsorBlock diff --git a/src/main/resources/music/translations/vi-rVN/strings.xml b/src/main/resources/music/translations/vi-rVN/strings.xml index ff940ccae6..090ac7fd9e 100644 --- a/src/main/resources/music/translations/vi-rVN/strings.xml +++ b/src/main/resources/music/translations/vi-rVN/strings.xml @@ -236,7 +236,7 @@ Lưu ý:\n- Tuỳ chọn này sẽ thay đổi giao diện ứng dụng, tuy nhi "Khôi phục bố cục trình phát về kiểu cũ. \nLưu ý: Một số tính năng có thể không hoạt động bình thường trong bố cục trình phát kiểu cũ." - Mục Cài đặt + Trình đơn Cài đặt Ẩn mục Trung tâm dành cho gia đình Ẩn mục Chung Ẩn mục Tính năng phát @@ -273,6 +273,8 @@ Lưu ý:\n- Tuỳ chọn này sẽ thay đổi giao diện ứng dụng, tuy nhi Hiển thị số lượt không thích dưới dạng tỉ lệ phần trăm. Nút Thích thu gọn Ẩn dấu phân cách giữa nút Thích và số lượt thích. + Số lượt thích ước tính + Hiển thị số lượt thích được ước tính của video. Thông báo ngắn nếu API không khả dụng Hiển thị thông báo ngắn nếu API ReturnYouTubeDislike không khả dụng. Giới thiệu @@ -282,6 +284,26 @@ Lưu ý:\n- Tuỳ chọn này sẽ thay đổi giao diện ứng dụng, tuy nhi Số lượt không thích không khả dụng (trạng thái %d). Số lượt không thích không khả dụng (đã đạt đến giới hạn API máy khách). Số lượt không thích không khả dụng (%s). + Ẩn + + Return YouTube Username + Kích hoạt Return YouTube Username + Hiển thị tên người dùng thay vì tên hiển thị trong phần bình luận. + Định dạng hiển thị + Chọn định dạng hiển thị tên người dùng. + Tên người dùng + Tên người dùng (@handle) + \@handle (Tên người dùng) + Khoá Youtube Data API + Khoá nhà phát triển để sử dụng YouTube Data API v3. + Giới thiệu về khoá YouTube Data API + "Khoá nhà phát triển YouTube Data API v3 là một mã khoá cho phép các nhà phát triển thao tác lấy dữ liệu từ Youtube, và nó cũng cần thiết để thay thế \"Tên hiển thị\" thành \"Tên người dùng\". + +Giới hạn truy cập hàng ngày cho các khoá API trên gói miễn phí là 10000 lần, với mỗi lượt truy cập chỉ thay thế được 1 bình luận. + +Nhấp vào đây để xem các bước phát hành khóa API." + Phát hành mã khoá + 1. Tạo dự án mới <a href=%1$s>Nhấn vào đây</a>.<br>2. Nhấn vào nút <b>CREATE</b>.<br>3. Đi tới YouTube Data API v3 <a href=%2$s>Nhấn vào đây</a>.<br>4. Nhấn vào nút <b>ENABLE</b>.<br>5. Nhấn vào nút <b>CREATE CREDENTIALS</b>.<br>6. Chọn <b>Public data</b>.<br>7. Nhấn vào nút <b>NEXT</b>.<br>8. Sao chép mã khoá API.<br><br>※ Khoá API không nên được chia sẻ với người khác, vì vậy nó cũng không xuất hiện trong cài đặt Nhập/Xuất. SponsorBlock Kích hoạt SponsorBlock @@ -339,7 +361,7 @@ Lưu ý:\n- Tuỳ chọn này sẽ thay đổi giao diện ứng dụng, tuy nhi Giới thiệu sponsor.ajay.app - Khác + Cài đặt khác Bỏ qua hạn chế khu vực cho hình ảnh Thay thế miền bị chặn ở một số khu vực để có thể thu được được ảnh bìa video của danh sách phát, ảnh đại diện kênh, v. v. Thay đổi giao diện chia sẻ diff --git a/src/main/resources/music/translations/zh-rCN/strings.xml b/src/main/resources/music/translations/zh-rCN/strings.xml index 465790dc18..5a5c6ebccc 100644 --- a/src/main/resources/music/translations/zh-rCN/strings.xml +++ b/src/main/resources/music/translations/zh-rCN/strings.xml @@ -238,6 +238,7 @@ 点踩数不可用(状态 %d) 点踩数不可用(已达到客户端 API 限制) 点踩数不可用(%s) + Debug 日志 diff --git a/src/main/resources/music/translations/zh-rTW/strings.xml b/src/main/resources/music/translations/zh-rTW/strings.xml index b575a5e601..7efed854a7 100644 --- a/src/main/resources/music/translations/zh-rTW/strings.xml +++ b/src/main/resources/music/translations/zh-rTW/strings.xml @@ -259,6 +259,7 @@ 倒讚數無法使用 (狀態 %d) 倒讚顯示不正常(已達到客戶端 API 限制) 倒讚數無法使用 (狀態 %s) + 贊助區塊阻擋(SponsorBlock) 啟用SponsorBlock diff --git a/src/main/resources/music/visual/shared/drawable/revanced_preference_screen_return_youtube_username_icon.xml b/src/main/resources/music/visual/shared/drawable/revanced_preference_screen_return_youtube_username_icon.xml new file mode 100644 index 0000000000..44d1ed65a0 --- /dev/null +++ b/src/main/resources/music/visual/shared/drawable/revanced_preference_screen_return_youtube_username_icon.xml @@ -0,0 +1,18 @@ + + + + + \ No newline at end of file diff --git a/src/main/resources/youtube/settings/host/values/arrays.xml b/src/main/resources/youtube/settings/host/values/arrays.xml index b84d97b2ac..cb0427dd4a 100644 --- a/src/main/resources/youtube/settings/host/values/arrays.xml +++ b/src/main/resources/youtube/settings/host/values/arrays.xml @@ -161,6 +161,16 @@ PHONE TABLET + + @string/revanced_return_youtube_username_display_format_username_only + @string/revanced_return_youtube_username_display_format_username_handle + @string/revanced_return_youtube_username_display_format_handle_username + + + USERNAME_ONLY + USERNAME_HANDLE + HANDLE_USERNAME + @string/revanced_shorts_double_tap_to_like_animation_entry_1 @string/revanced_shorts_double_tap_to_like_animation_entry_2 diff --git a/src/main/resources/youtube/settings/host/values/strings.xml b/src/main/resources/youtube/settings/host/values/strings.xml index 71bfacf397..841c8229d9 100644 --- a/src/main/resources/youtube/settings/host/values/strings.xml +++ b/src/main/resources/youtube/settings/host/values/strings.xml @@ -13,6 +13,11 @@ Do you wish to proceed? Restart to load the layout normally Refresh and restart + "There is a YouTube server-side bug that causes rolling number text such as likes, views, and upload dates to be hidden for some users. + +A temporary workaround for this issue is to spoof the app version to 19.13.37. + +Do you want to spoof the app version before restarting the app?" Normal Video downloader package name @@ -275,10 +280,6 @@ Limitations: • Videos with phrases such as 'People also watched' underneath." Hide low views video Hide videos with less than 1,000 views from home feeds that have been uploaded from unsubscribed channels. - Hide UPCOMING video - "Hide videos with UPCOMING label. - -Note: Enabling this also hides the Notify me button." View count filter @@ -388,7 +389,8 @@ If later turned off, it is recommended to clear the app data to prevent UI bugs. 18.17.43 - Restore old player flyout panel 18.33.40 - Restore old Shorts action bar 18.38.45 - Restore old default video quality behavior - 18.48.39 - Disables views and likes from being updated in real time + 18.48.39 - Disable views and likes from being updated in real time + 19.13.37 - Restore old style Rolling number animations Account menu @@ -628,7 +630,7 @@ You tab → View channel → Menu → Settings" YouTube Doodles are shown. "YouTube Doodles show up a few days each year. -If a YouTube Doodle is currently showing in your region and this hide setting is on, then the filter bar below the search bar will also be hidden." +If a YouTube Doodle is currently showing in your region and this setting is on, the filter bar below the search bar will also be hidden." Replace Create button Replaces the Create button with the Settings button. @@ -715,6 +717,9 @@ Settings → Autoplay → Autoplay next video" Hide zoom overlay Zoom overlay is hidden. Zoom overlay is shown. + Sanitize video subtitle + "Phrases like '#', 'Fundraiser', 'Shop' and 'products' were hidden from the video subtitles." + "Phrases like '#', 'Fundraiser', 'Shop' and 'products' were shown from the video subtitles." Action buttons @@ -789,6 +794,9 @@ Settings → Autoplay → Autoplay next video" Hide Comments by members banner Comments by members banner is hidden. Comments by members banner is shown. + Hide highlighted search links + Highlighted search links are hidden. + Highlighted search links are shown. Hide Comments section Comments section is hidden. Comments section is shown. @@ -818,6 +826,9 @@ Settings → Autoplay → Autoplay next video" Change toggle type Text toggles are used. Switch toggles are used. + Hide 1080p Premium menu + 1080p Premium menu is hidden. + 1080p Premium menu is shown. Hide Audio track menu Audio track menu is hidden. Audio track menu is shown. @@ -1072,9 +1083,12 @@ Tap and hold to undo." Hide seekbar in video thumbnails Thumbnail seekbar is hidden. Thumbnail seekbar is shown. - Hide seekbar chapters - Chapters are hidden in the seekbar. - Chapters are shown in the seekbar. + Disable seekbar chapters + Chapters are disabled in the seekbar. + Chapters are enabled in the seekbar. + Hide seekbar chapter labels + Chapter labels next to the timestamp are hidden. + Chapter labels next to the timestamp are shown. Hide timestamp Timestamp is hidden. Timestamp is shown. @@ -1151,6 +1165,12 @@ The Expand video description option may not work if the entered string does not "Hides Shorts shelves. Side effect: Official headers in search results will be hidden." + Hide in channel + "Hidden in channel. + +Info: +• Only shelves with the Shorts header on the home tab are hidden." + Shown in channel. Hide in home feed and related videos Hidden in home feed and related videos. Shown in home feed and related videos. @@ -1348,6 +1368,12 @@ Limitations: Swipeable area size cannot be more than 50. Swipe overlay timeout The amount of milliseconds the overlay is visible. + Brightness swipe sensitivity + Configure the minimum distance for brightness swiping between 1 and 1000 (%).\nThe shorter the minimum distance, the faster the brightness level changes. + Brightness swipe sensitivity must be between 1-1000 (%). + Volume swipe sensitivity + Configure the minimum distance for volume swiping between 1 and 1000 (%).\n\nThe shorter the minimum distance, the faster the volume level changes.\n\nRecommended volume swipe sensitivity is 100% at 15-volume steps and 10% at 150-volume steps. + Volume swipe sensitivity must be between 1-1000 (%). Disable auto HDR brightness Auto HDR brightness is disabled. Auto HDR brightness is enabled. @@ -1453,9 +1479,12 @@ Limitation: Dislikes may not appear if the user is not logged in or in incognito Dislikes as percentage Dislikes shown as a percentage. Dislikes shown as a number. - Compact like button + Compact Like button Like button styled for minimum width. Like button styled for best appearance. + Show estimated likes + Estimated likes are shown. + Estimated likes are hidden. Show a toast if API is unavailable Toast is shown if Return YouTube Dislike is unavailable. Toast is not shown if Return YouTube Dislike is unavailable. @@ -1470,7 +1499,29 @@ Limitation: Dislikes may not appear if the user is not logged in or in incognito Dislikes unavailable (client API limit reached). Dislikes unavailable (%s). Reload video to vote using Return YouTube Dislike + Hidden + + + + Return YouTube Username + + Enable Return YouTube Username + Username is used. + Handle is used. + Display format + Username + Username (@handle) + @handle (Username) + YouTube Data API key + The developer key for using the YouTube Data API v3. + About YouTube Data API key + "A YouTube Data API v3 Developer Key is required to replace handles with usernames. + +The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. +Click to see how to issue a API key." + Issue YouTube Data API v3 developer key + 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. SponsorBlock diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 7d4b8d02e2..63686535bd 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -84,7 +84,6 @@ - @@ -279,8 +278,8 @@ + + SETTINGS: SPOOF_APP_VERSION --> @@ -321,6 +320,7 @@ + @@ -337,6 +337,7 @@ SETTINGS: CHANGE_PLAYER_FLYOUT_MENU_TOGGLE --> @@ -502,7 +504,8 @@ - SETTINGS: PLAYER_COMPONENTS --> + + SETTINGS: PLAYER_COMPONENTS --> @@ -573,6 +576,7 @@ + @@ -597,10 +601,11 @@ - PREFERENCE_SCREEN: SWIPE_CONTROLS --> + - + + + PREFERENCE_SCREEN: SWIPE_CONTROLS --> @@ -653,6 +658,7 @@ + @@ -661,6 +667,15 @@ PREFERENCE_SCREEN: RETURN_YOUTUBE_DISLIKE --> + + + تصفية عدد المشاهدات إخفاء فيديوهات الصفحة الرئيسية حسب عدد المشاهدات @@ -359,6 +360,7 @@ 18.33.40 - استعادة شريط إجراءات Shorts القديم 18.38.45 - استعادة سلوك جودة الفيديو الافتراضي القديم 18.48.39 - تعطيل تحديث المشاهدات والإعجابات في الوقت الفعلي + 19.13-37 - استعادة نمط الرسوم المتحركة القديم للأرقام المتكررة قائمة الحساب إخفاء أو عرض العناصر في قائمة الحساب وعلامة التبويب أنت. @@ -367,9 +369,9 @@ قد لا يتم إخفاء بعض المكونات." تعديل فلتر قائمة الحساب قائمة بأسماء قائمة الحسابات المراد تصفيتها، مفصولة بسطور جديدة. - إخفاء المقبض - تم إخفاء المقبض. - يتم عرض المقبض. + إخفاء الاسم المعرِّف + تم إخفاء الاسم المعرِّف. + يتم عرض الاسم المعرِّف. فلتر مخصص إخفاء المكونات باستخدام عوامل تصفية مخصصة. @@ -581,7 +583,7 @@ يتم عرض رسومات YouTube. "تظهر رسومات YouTube Doodles لعدة أيام كل عام. -إذا كانت رسومات YouTube Doodles تظهر حاليًا في منطقتك وكان إعداد الإخفاء هذا قيد التشغيل، فسيتم أيضًا إخفاء شريط الفلتر الموجود أسفل شريط البحث." +إذا كانت رسومات YouTube Doodles تظهر حاليًا في منطقتك وكان إعداد الإخفاء هذا قيد التشغيل، فسيتم أيضًا إخفاء فلتر الشريط الموجود أسفل شريط البحث." استبدال زر الإنشاء استبدال زر الإنشاء بزر الإعدادات. نوع الإجراء الذي سيتم تعيينه للزر @@ -664,6 +666,9 @@ إخفاء تراكب التكبير يتم عرض تراكب التكبير. تم إخفاء تراكب التكبير. + تطهير ترجمة الفيديو + "تم إخفاء عبارات مثل '#'، 'جمع التبرعات'، 'المتجر' و 'المنتجات' من ترجمات الفيديو." + "يتم عرض عبارات مثل '#'، 'جمع التبرعات'، 'المتجر' و 'المنتجات' من خلال ترجمات الفيديو." أزرار الإجراء إخفاء أو عرض أزرار الإجراءات تحت الفيديو. @@ -730,6 +735,9 @@ إخفاء لافتة تعليقات من الأعضاء تم إخفاء لافتة تعليقات من الأعضاء. يتم عرض لافتة تعليقات من الأعضاء. + إخفاء روابط البحث المميزة + تم إخفاء روابط البحث المميزة. + يتم عرض روابط البحث المميزة. إخفاء قسم التعليقات تم إخفاء قسم التعليقات. يتم عرض قسم التعليقات. @@ -757,6 +765,9 @@ تغيير نوع التبديل يتم استخدام مفتاح التبديل النصي. يتم استخدام مفتاح التبديل. + إخفاء قائمة 1080p Premium + تم إخفاء قائمة 1080p Premium. + يتم عرض قائمة 1080p Premium. إخفاء قائمة المقطع الصوتي تم إخفاء قائمة المقطع الصوتي. يتم عرض قائمة المقطع الصوتي. @@ -996,9 +1007,12 @@ إخفاء شريط التقدم في مُصَّغَرات الفيديو تم إخفاء مُصَّغَرة الفيديو بشريط التقدم. يتم عرض مُصَّغَرة الفيديو بشريط التقدم. - إخفاء فصول شريط التقدم - تم إخفاء الفصول في شريط التقدم. - يتم عرض الفصول في شريط التقدم. + تعطيل فصول شريط التقدم + تم تعطيل الفصول في شريط التقدم. + تم تمكين الفصول في شريط التقدم. + إخفاء تسميات فصول شريط التقدم + تم إخفاء تسميات الفصل المجاورة للطابع الزمني. + يتم عرض تسميات الفصل المجاورة للطابع الزمني. إخفاء طابع الوقت تم إخفاء طابع الوقت. يتم عرض طابع الوقت. @@ -1067,6 +1081,12 @@ "إخفاء رفوف Shorts التأثير الجانبي: سيتم إخفاء الرؤوس الرسمية في نتائج البحث." + إخفاء في القناة + "مخفي في القناة. + +معلومة: +• فقط الأرفف التي تحتوي على عنوان Shorts في علامة تبويب الصفحة الرئيسية تكون مخفية." + يُعرض في القناة. إخفاء في موجز الصفحة الرئيسية والفيديوهات ذات الصلة مخفي في موجز الصفحة الرئيسية والفيديوهات ذات الصلة. يُعرض في موجز الصفحة الرئيسية والفيديوهات ذات الصلة. @@ -1218,7 +1238,7 @@ يجب أن تكون نسبة الارتفاع بين 0-100 (%). استبدال معالج القناة يتم استخدام اسم القناة. - يتم استخدام معالج القناة. + يتم استخدام الاسم المعرِّف. التحكم عبر إيماءة التمرير تمكين التحكم بالسطوع عن طريق إيماءة التمرير @@ -1261,6 +1281,12 @@ مقدار الوقت الذي تظهر فيه واجهة التمرير بعد التغيير (بجزء الثانية). الافتراضي:500 + حساسية تمرير مستوى السطوع + تكوين الحد الأدنى للمسافة لتمرير السطوع بين 1 و1000 (%).\nكلما كانت المسافة الدنيا أقصر، كلما تغيرت مستويات السطوع بشكل أسرع. + يجب أن تكون حساسية تمرير مستوى السطوع بين 1-1000 (%). + حساسية تمرير مستوى الصوت + تكوين الحد الأدنى للمسافة لتمرير مستوى الصوت بين 1 و1000 (%).\n\nكلما كانت المسافة الدنيا أقصر، كانت تغييرات مستوى الصوت أسرع.\n\nحساسية التمرير الموصى بها لمستوى الصوت هي 100% عند 15 خطوة لمستوى الصوت و10% عند 150 خطوة لمستوى الصوت. + يجب أن تكون حساسية تمرير مستوى الصوت بين 1-1000 (%). تعطيل سطوع HDR التلقائي تم تعطيل سطوع HDR التلقائي. تم تمكين سطوع HDR التلقائي. @@ -1362,6 +1388,9 @@ مقاس زر أعجبني زر أعجبني مصمم لأدنى عرض. زر أعجبني مصمم لأفضل مظهر. + عرض الإعجابات المقدرة + يتم عرض الإعجابات المقدرة. + تم إخفاء الإعجابات المقدرة. عرض ملاحظة إذا كان API غير متوفر يتم عرض الملاحظة في حالة عدم توفر Return YouTube Dislike. لا يتم عرض الملاحظة في حالة عدم توفر Return YouTube Dislike. @@ -1374,6 +1403,26 @@ لم يعجبني غير متوفر (تم الوصول إلى حد API العميل). لم يعجبني غير متوفر (%s). أعد تحميل الفيديو للتصويت باستخدام Return YouTube Dislike + مخفي + + Return YouTube Username + تمكين إعادة اسم مستخدم YouTube + يتم استخدام اسم المستخدم. + يتم استخدام الاسم المعرِّف. + شكل العرض + اسم المستخدم + اسم المستخدم (Handle@) + (اسم المستخدم) Handle@ + مفتاح API لبيانات YouTube + مفتاح المطور لاستخدام بيانات YouTube API v3. + لمحة عن مفتاح YouTube Data API + "مطلوب مفتاح مطور بيانات YouTube API v3 لاستبدال الاسم المعرِّف بـ اسم المستخدم. + +الحصة اليومية لمفاتيح API في الخطة المجانية هي 10.000، ويتم استخدام حصة واحدة لاستبدال الاسم المعرِّف بـ اسم المستخدم لتعليق واحد. + +انقر لمعرفة كيفية إصدار مفتاح API." + إصدار مفتاح مطور YouTube Data API v3 + 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ لا ينبغي مشاركة مفتاح API مع الآخرين مطلقًا، لذا فهو غير مدرج في إعدادات الاستيراد / التصدير. SponsorBlock تمكين SponsorBlock diff --git a/src/main/resources/youtube/translations/bg-rBG/strings.xml b/src/main/resources/youtube/translations/bg-rBG/strings.xml index 867bd2ff4d..3cf96b316e 100644 --- a/src/main/resources/youtube/translations/bg-rBG/strings.xml +++ b/src/main/resources/youtube/translations/bg-rBG/strings.xml @@ -244,10 +244,6 @@ • От канали, за които не сте абонирани (по-малко от 1000 гледания)." Скриване на видеоклипове с малко гледания Скрийте видеоклипове с по-малко от 1000 гледания от емисията и от канали, за които сте се абонирали. - ПРЕДСТОЯЩО видео - "Скриване на видеоклипове с етикет ПРЕДСТОЯЩО. - -Забележка: Активирането на това също ще скрие бутона Уведоми ме." Филтрирайте по брой гледания Фильтр за видео в \"Начало\" по гледания @@ -343,6 +339,7 @@ 18.33.40 - Възстановяване на старата лентата с действия за Shorts 18.38.45 - Възстановяване на старото поведение на качеството на видеото по подразбиране 18.48.39 - Деактивира изгледите и харесванията да се актуализират в реално време + 19.13.37 - Стар стил на анимация - въртящи се числа Меню на акаунта Скриване или показване на елементи в менюто на акаунта и раздела Вие. @@ -465,7 +462,16 @@ Меню с настройки Скриване на елементи в менюто с настройки на YouTube. + Меню \"Семеен център\" + Меню \"Семеен център\" е скрито. + Меню \"Семеен център\" се показва. + Меню \"Основни настройки\" + Основни настройки са скрити. + Основни настройки се показват. Скриване на менюто на акаунта + Меню за гледане на Телевизор + Менюто за гледане на ТВ е скрито. + Менюто за гледане на ТВ се показва. Лента с инструменти Скрива или променя елементи, разположени в лентата с инструменти, като бутони на лентата с инструменти, лента за търсене, заглавия. @@ -913,9 +919,6 @@ Миниатюри на лентата за възпроизвеждане Миниатюрите са скрити. Миниатюрите се показват. - Заглавие в лентата за напредък - Главите са скрити. - Главите се показват. Времево клеймо на видеоклипа Времето клеймо е скрито. Клеймо за време се показва. @@ -1282,6 +1285,7 @@ Нехаресванията не са достъпни (достигнат лимит на API). Нехаресванията не са налични (%s). Презареждане на видеото за гласуване чрез ReturnYouTubeDislike + SponsorBlock Включване на SponsorBlock diff --git a/src/main/resources/youtube/translations/de-rDE/strings.xml b/src/main/resources/youtube/translations/de-rDE/strings.xml index 469ebd2361..77bbad5ca8 100644 --- a/src/main/resources/youtube/translations/de-rDE/strings.xml +++ b/src/main/resources/youtube/translations/de-rDE/strings.xml @@ -774,9 +774,6 @@ Tippen und gedrückt halten, um rückgängig zu machen." Verstecke Thumbnail-Suchleiste Thumbnail-Suchleiste ist versteckt Thumbnail-Suchleiste wird angezeigt - Suchleistenkapitel ausblenden - Kapitel werden in der Suchleiste ausgeblendet. - Kapitel werden in der Suchleiste angezeigt. Zeitstempel ausblenden Der Zeitstempel ist ausgeblendet Der Zeitstempel wird angezeigt @@ -1028,6 +1025,7 @@ Einschränkung: Dislikes werden im Inkognito Modus nicht angezeigt." ReturnYouTubeDislike.com Dislikes Daten werden von der True RYD Worker API zur Verfügung gestellt. Tippe hier, um mehr zu erfahren. Dislikes nicht verfügbar (Client-API Limit erreicht) + SponsorBlock SponsorBlock aktivieren diff --git a/src/main/resources/youtube/translations/el-rGR/strings.xml b/src/main/resources/youtube/translations/el-rGR/strings.xml index 493435a530..11df7c6119 100644 --- a/src/main/resources/youtube/translations/el-rGR/strings.xml +++ b/src/main/resources/youtube/translations/el-rGR/strings.xml @@ -11,6 +11,11 @@ Θέλετε να συνεχίσετε; Επανεκκίνηση ώστε να φορτωθεί σωστά η διάταξη Ανανέωση και επανεκκίνηση + "Υπάρχει ένα σφάλμα από πλευράς διακομιστή του YouTube το οποίο προκαλεί να μην εμφανίζονται κάποιοι αριθμοί όπως τα like, οι προβολές, και οι ημερομηνίες μεταμόρφωσης για κάποιους χρήστες. + +Μια προσωρινή λύση για αυτό το θέμα είναι να γίνει παραποίηση της έκδοσης εφαρμογής σε 19.13.37. + +Θέλετε να γίνει παραποίηση της έκδοσης εφαρμογής πριν γίνει επανεκκίνηση εφαρμογής;" Κανονική Όνομα πακέτου προγράμματος λήψης βίντεο Όνομα πακέτου της εγκατεστημένης σας εξωτερικής εφαρμογής λήψης (π.χ NewPipe, YTLDnis). @@ -248,10 +253,6 @@ Playlists • Βίντεο με φράσεις όπως «Άλλοι χρήστες παρακολούθησαν επίσης» στο κάτω μέρος τους." Απόκρυψη βίντεο χαμηλών προβολών Απόκρυψη των βίντεο με λιγότερες από 1,000 προβολές από τη ροή τα οποία ανήκουν σε κανάλια που δεν είστε συνδρομητές. - Απόκρυψη προσεχών βίντεο - "Απόκρυψη βίντεο με την ετικέτα «ΠΡΟΣΕΧΩΝ». - -Σημείωση: Η ενεργοποίηση αυτής της ρύθμισης θα κρύψει επίσης το κουμπί «Να λαμβάνω ειδοποιήσεις»." Φίλτρο αριθμού προβολών Φιλτράρισμα καρτέλας «Αρχική» @@ -355,6 +356,7 @@ Playlists 18.33.40 - Επαναφορά γραμμής ενεργειών Shorts στο παλιό στυλ 18.38.45 - Επαναφορά της παλιάς συμπεριφοράς προεπιλεγμένης ποιότητας βίντεο 18.48.39 - Απενεργοποίηση ενημέρωσης των προβολών & αριθμού των «Μου αρέσει» σε πραγματικό χρόνο + 19.13.37 - Επαναφορά των παλιών εφέ κίνησης αριθμών Μενού λογαριασμού Απόκρυψη ή εμφάνιση στοιχείων στο μενού λογαριασμού και στην καρτέλα «Εσείς». @@ -416,7 +418,7 @@ Playlists • Διπλό πάτημα για αλλαγή του ελαχιστοποιημένου βίντεο σε μεγαλύτερο μέγεθος. • Διπλό πάτημα ξανά για αλλαγή πίσω στο αρχικό μέγεθος." Η ενέργεια διπλού πατήματος είναι απενεργοποιημένη. - Λειτουργία drag and drop + Λειτουργία μεταφοράς και απόθεσης Η λειτουργία μεταφοράς και απόθεσης της ελαχιστοποιημένης οθόνης είναι ενεργοποιημένη. Η λειτουργία μεταφοράς και απόθεσης της ελαχιστοποιημένης οθόνης είναι απενεργοποιημένη. Κουμπιά επέκτασης και κλεισίματος @@ -606,7 +608,7 @@ Playlists Σημειώσεις: • Ενεργοποιώντας αυτή τη ρύθμιση θα επαναφερθεί η λειτουργία «Σύρετε αριστερά η δεξιά για αναζήτηση». • Σε περίπτωση απενεργοποίησης αυτής της ρύθμισης δεν εξαναγκάζεται η ενεργοποίηση της διεπαφής ταχύτητας." - Τιμή διεπαφής ταχύτητας + Αλλαγή τιμής διεπαφής ταχύτητας Τιμή ταχύτητας που εφαρμόζεται κατά το παρατεταμένο πάτημα, μεταξύ 0 και 8.0. Η ταχύτητα πρέπει να ναι μεταξύ 0-8.0. Υδατογράφημα καναλιού @@ -658,9 +660,12 @@ Playlists Άμεση αυτόματη αναπαραγωγή Αν είναι ενεργοποιημένη η αυτόματη αναπαραγωγή, το επόμενο βίντεο παίζει χωρίς αντίστροφη μέτρηση. Αν είναι ενεργοποιημένη η αυτόματη αναπαραγωγή, το επόμενο βίντεο παίζει αφού τελειώσει η αντίστροφη μέτρηση. - Διεπαφή ζουμ - Κρυμμένη. - Εμφανίζεται. + Ειδοποιήσεις αλληλεπιδράσης διεπαφής ζουμ + Κρυμμένες. + Εμφανίζονται. + Καθάρισμα υπότιτλων βίντεο + "Φράσεις όπως «#», «Έρανος», «Κατάστημα» και «προϊόντα» είναι κρυμμένες από τους υπότιτλους των βίντεο." + "Φράσεις όπως «#», «Έρανος», «Κατάστημα» και «N προϊόντα» εμφανίζονται στους υπότιτλους των βίντεο." Κουμπιά ενεργειών Απόκρυψη ή εμφάνιση κουμπιών κάτω από τα βίντεο. @@ -727,6 +732,9 @@ Playlists Ετικέτα «Σχόλια από μέλη» Κρυμμένη. Εμφανίζεται. + Επισημασμένοι συνδέσμοι αναζήτησης + Κρυμμένοι. + Εμφανίζονται. Ενότητα σχολίων Κρυμμένη. Εμφανίζεται. @@ -754,6 +762,9 @@ Playlists Αλλαγή τύπου εναλλαγής ρυθμίσεων Εμφανίζονται εναλλαγές κειμένου. Εμφανίζονται εναλλαγές διακόπτη. + Μενού ποιότητας 1080p Premium + Κρυμμένο. + Εμφανίζεται. Μενού «Κομμάτι ήχου» Κρυμμένο. Εμφανίζεται. @@ -1005,9 +1016,12 @@ Playlists Γραμμή προόδου σε μικρογραφίες βίντεο Κρυμμένη. Εμφανίζεται. - Ονομασίες κεφαλαίων γραμμής προόδου - Κρυμμένες. - Εμφανίζονται. + Απενεργοποίηση κεφαλαίων γραμμής προόδου + Ο διαχωρισμός της γραμμής προόδου σε κεφάλαια είναι απενεργοποιημένος. + Ο διαχωρισμός της γραμμής προόδου σε κεφάλαια είναι ενεργοποιημένος. + Τίτλοι κεφαλαίων δίπλα στη χρονοσφραγίδα + Κρυμμένες. + Εμφανίζονται. Χρονοσφραγίδα βίντεο Κρυμμένη. Εμφανίζεται. @@ -1066,8 +1080,8 @@ Playlists Αυτόματο άνοιγμα περιγραφής βίντεο Η περιγραφή βίντεο ανοίγεται αυτόματα. Η περιγραφή βίντεο ανοίγεται χειροκίνητα. - Τίτλος στον πίνακα περιγραφής βίντεο - "Εισάγετε τον τίτλο του πάνελ περιγραφής βίντεο στη γλώσσα σας. + Τίτλος του πίνακα περιγραφής βίντεο + "Εισάγετε τον τίτλο του πίνακα περιγραφής βίντεο στη γλώσσα σας. Η λειτουργία «Αυτόματο άνοιγμα περιγραφής βίντεο» ενδέχεται να μη λειτουργήσει αν η εισαγόμενη συμβολοσειρά σας δεν ταιριάζει με τον τίτλο." Περιγραφή @@ -1088,6 +1102,12 @@ Playlists "Απόκρυψη της ενότητας Shorts. Παρενέργεια: Οι τίτλοι ενοτήτων στα αποτελέσματα αναζήτησης δεν εμφανίζονται." + Απόκρυψη στη σελίδα καναλιού + "Κρυμμένα. + +Πληροφορίες: +• Μόνο οι ενότητες με την επικεφαλίδα Shorts στην καρτέλα «Αρχική» του καναλιού είναι κρυμμένες." + Εμφανίζονται. Απόκρυψη στην καρτέλα «Αρχική» και στα σχετικά βίντεο Κρυμμένη. Εμφανίζεται. @@ -1153,7 +1173,7 @@ Playlists Εμφανίζεται. Προτεινόμενες ενέργειες - Κουμπί «Πράσινη οθόνη» + Κουμπί «Green screen» Κρυμμένο. Εμφανίζεται. Κουμπί «Αποθήκευση μουσικής» @@ -1274,6 +1294,12 @@ Playlists Το μέγεθος οθόνης πρέπει να ναι μικρότερο από 50. Χρονικό όριο φόντου σάρωσης Το χρονικό διάστημα των χιλιοστών του δευτερολέπτου που είναι ορατό το φόντο σάρωσης. + Ευαισθησία σάρωσης φωτεινότητας + Ρύθμιση της ευαισθησίας σάρωσης για αλλαγή της φωτεινότητας, μεταξύ 1 και 1000 (%).\nΌσο μικρότερη η ελάχιστη απόσταση, τόσο πιο γρήγορα αλλάζει το επίπεδο φωτεινότητας. + Η ευαισθησία σάρωσης πρέπει να ναι μεταξύ 1-1000 (%). + Ευαισθησία σάρωσης έντασης ήχου + Ρύθμιση της ευαισθησίας σάρωσης για αλλαγή της έντασης ήχου, μεταξύ 1 και 1000 (%).\nΌσο μικρότερη η ελάχιστη απόσταση, τόσο πιο γρήγορα αλλάζει το επίπεδο έντασης.\nΗ προτεινόμενη ευαισθησία είναι 100% για 15 βήματα έντασης και 10% για 150 βήματα έντασης. + Η ευαισθησία σάρωσης πρέπει να ναι μεταξύ 1-1000 (%). Απενεργοποίηση αυτόματης φωτεινότητας HDR Η αυτόματη φωτεινότητα HDR είναι απενεργοποιημένη. Η αυτόματη φωτεινότητα HDR είναι ενεργοποιημένη. @@ -1377,6 +1403,9 @@ Playlists Κουμπί «Μου αρέσει» μικρότερου στυλ Το κουμπί «Μου αρέσει» είναι διαμορφωμένο για ελάχιστο μέγεθος. Το κουμπί «Μου αρέσει» είναι διαμορφωμένο για καλύτερη εμφάνιση. + Εμφάνιση εκτιμώμενων likes + Τα εκτιμώμενα like εμφανίζονται. + Τα εκτιμώμενα like δεν εμφανίζονται. Μήνυμα αν το API δεν είναι διαθέσιμο Εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το Return YouTube Dislike δεν είναι διαθέσιμο. Δεν εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το Return YouTube Dislike δεν είναι διαθέσιμο. @@ -1389,6 +1418,26 @@ Playlists Δεδομένα dislike μη διαθέσιμα (το όριο API έχει επιτευχθεί). Δεδομένα dislike μη διαθέσιμα (%s). Επαναφορτώστε το βίντεο για να ψηφίσετε χρησιμοποιώντας το Return YouTube Dislike + Κρυμμένο + + Return YouTube Username + Επαναφορά ονομάτων χρήστη στα σχόλια + Εμφανίζεται το όνομα χρήστη. + Εμφανίζεται το ψευδώνυμο. + Μορφή εμφάνισης + Όνομα χρήστη + Όνομα χρήστη (@ψευδώνυμο) + \@ψευδώνυμο (Όνομα χρήστη) + Κλειδί YouTube Data API + Το κλειδί προγραμματιστή για τη χρήση του YouTube Data API v3. + Σχετικά με το κλειδί YouTube Data API + "Για να γίνει αντικατάσταση του ψευδωνύμου με όνομα χρήστη, απαιτείται κλειδί προγραμματιστή YouTube Data API v3. + +Η ημερήσια ποσόστωση για τα κλειδιά API στο δωρεάν πακέτο είναι 10,000, και χρησιμοποιείται 1 ποσόστωση για την αντικατάσταση ψευδωνύμου με όνομα χρήστη για 1 σχόλιο. + +Πατήστε για να δείτε πώς να εκδώσετε ένα κλειδί API." + Έκδοση κλειδιού προγραμματιστή YouTube Data API v3 + 1. Μεταβείτε στη <a href=%1$s>δημιουργία νέου project</a>.<br>2. Πατήστε το κουμπί <b>CREATE</b>. <br>3. Μεταβείτε στην επιλογή <a href=%2$s>YouTube Data API v3</a>.<br>4. Πατήστε το κουμπί <b>ENABLE</b>.<br>5. Πατήστε το κουμπί <b>CREATE CREDENTIALS</b>.<br>6. Επιλέξτε την επιλογή <b>Public data</b>.<br>7. Πατήστε το κουμπί <b>NEXT</b>.<br>8. Αντιγράψτε το κλειδί API.<br><br>※ Το κλειδί API δεν πρέπει να το μοιράζεστε ποτέ με άλλους, οπότε δεν περιλαμβάνεται κατά την Εισαγωγή / Εξαγωγή ρυθμίσεων. SponsorBlock Ενεργοποίηση του SponsorBlock diff --git a/src/main/resources/youtube/translations/es-rES/strings.xml b/src/main/resources/youtube/translations/es-rES/strings.xml index d9f0e5a8cf..ef3d02b043 100644 --- a/src/main/resources/youtube/translations/es-rES/strings.xml +++ b/src/main/resources/youtube/translations/es-rES/strings.xml @@ -11,6 +11,11 @@ ¿Quieres continuar? Reiniciar para cargar el diseño normalmente Actualizar y reiniciar + "Existe un error en el servidor de YouTube que hace que el texto de los números rodantes, como los \"Me gusta\", las visualizaciones y las fechas de subida, se oculte para algunos usuarios. + +Una solución temporal para este problema es falsificar la versión de la aplicación a 19.13.37. + +¿Quieres falsificar la versión de la aplicación antes de reiniciarla?" Normal Nombre del paquete del descargador de vídeo Nombre del paquete de tu aplicación de descargas externas instalada, como NewPipe o YTDLnis. @@ -200,7 +205,7 @@ Tienda" Visible en el feed de suscripciones. Menú desplegable - Ocultar o mostrar el menú desplegable en el feed. + Ocultar o mostrar componentes del menú desplegable en el feed. Activar filtro del menú desplegable del feed El filtro del menú desplegable del feed está activado. El filtro del menú desplegable del feed está desactivado. @@ -250,10 +255,6 @@ Limitaciones: • Vídeos subidos desde canales a los que no estás suscrito y que tienen menos de 1,000 visualizaciones." Ocultar vídeos con pocas visualizaciones Oculta los vídeos con menos de 1.000 visualizaciones de los feeds de inicio que hayan sido subidos desde canales a los que no estás suscrito. - Ocultar vídeo PRÓXIMO - "Oculta vídeos con la etiqueta PRÓXIMAMENTE. - -Nota: Al activar esta opción también se oculta el botón de notificarme." Filtro de contador de visualizaciones Ocultar vídeos de inicio por visualizaciones @@ -357,6 +358,7 @@ Si se desactiva más tarde, se recomienda borrar los datos de la aplicación par 18.33.40 - Restaura la antigua barra de acción de Shorts 18.38.45 - Restaura el antiguo comportamiento de la calidad predeterminada de vídeo 18.48.39 - Desactiva la actualización en tiempo real de las visualizaciones y los me gusta + 19.13.37 - Restaura el antiguo estilo de las animaciones de números rodantes Menú de cuenta Ocultar o mostrar elementos en el menú de la cuenta y la pestaña Tú. @@ -479,66 +481,66 @@ Si este ajuste no surte efecto, prueba a cambiar al modo incógnito." Menú de configuración Ocultar elementos del menú de configuración de YouTube. - Ocultar menú de centro familiar - El menú de centro familiar está oculto. - El menú de centro familiar está visible. - Ocultar menú de general - El menú de general está oculto. - El menú de general está visible. - Ocultar menú de cuenta - El menú de cuenta está oculto. - El menú de cuenta está visible. - Ocultar menú de ahorro de datos - El menú de ahorro de datos está oculto. - El menú de ahorro de datos está visible. - Ocultar menú de reproducción automática - El menú de reproducción automática está oculto. - El menú de reproducción automática está visible. - Ocultar menú de preferencias de calidad de vídeo - El menú de preferencias de calidad de vídeo está oculto. - El menú de preferencias de calidad de vídeo está visible. - Ocultar menú de segundo plano - El menú de segundo plano está oculto. - El menú de segundo plano está visible. - Ocultar menú de ver en la televisión - El menú de ver en la televisión está oculto. - El menú de ver en la televisión está visible. - Ocultar menú de gestionar todo el historial - El menú de gestionar todo el historial está oculto. - El menú de gestionar todo el historial está visible. - Ocultar menú de tus datos en YouTube - El menú de tus datos en YouTube está oculto. - El menú de tus datos en YouTube está visible. - Ocultar menú de privacidad - El menú de privacidad está oculto. - El menú de privacidad está visible. - Ocultar menú de prueba las nuevas funciones experimentales - El menú de prueba las nuevas funciones experimentales está oculto. - El menú de prueba las nuevas funciones experimentales está visible. - Ocultar menú de compras y suscripciones - El menú de compras y suscripciones está oculto. - El menú de compras y suscripciones está visible. - Ocultar menú de facturación y pagos - El menú de facturación y pagos está oculto. - El menú de facturación y pagos está visible. - Ocultar menú de notificaciones - El menú de notificaciones está oculto. - El menú de notificaciones está visible. - Ocultar menú de aplicaciones conectadas - El menú de aplicaciones conectadas está oculto. - El menú de aplicaciones conectadas está visible. - Ocultar menú de chat en directo - El menú de chat en directo está oculto. - El menú de chat en directo está visible. - Ocultar menú de subtítulos - El menú de subtítulos está oculto. - El menú de subtítulos está visible. - Ocultar menú de accesibilidad - El menú de accesibilidad está oculto. - El menú de accesibilidad está visible. - Ocultar menú de información - El menú de información está oculto. - El menú de información está visible. + Ocultar menú \"Centro Familiar\" + El menú \"Centro Familiar\" está oculto. + El menú \"Centro Familiar\" está visible. + Ocultar menú \"General\" + El menú \"General\" está oculto. + El menú \"General\" está visible. + Ocultar menú \"Cuenta\" + El menú \"Cuenta\" está oculto. + El menú \"Cuenta\" está visible. + Ocultar menú \"Ahorro de datos\" + El menú \"Ahorro de datos\" está oculto. + El menú \"Ahorro de datos\" está visible. + Ocultar menú \"Reproducción automática\" + El menú \"Reproducción automática\" está oculto. + El menú \"Reproducción automática\" está visible. + Ocultar menú \"Preferencias de calidad de vídeo\" + El menú \"Preferencias de calidad de vídeo\" está oculto. + El menú \"Preferencias de calidad de vídeo\" está visible. + Ocultar menú \"Segundo plano\" + El menú \"Segundo plano\" está oculto. + El menú \"Segundo plano\" está visible. + Ocultar menú \"Ver en la televisión\" + El menú \"Ver en la televisión\" está oculto. + El menú \"Ver en la televisión\" está visible. + Ocultar menú \"Gestionar todo el historial\" + El menú \"Gestionar todo el historial\" está oculto. + El menú \"Gestionar todo el historial\" está visible. + Ocultar menú \"Tus datos en YouTube\" + El menú \"Tus datos en YouTube\" está oculto. + El menú \"Tus datos en YouTube\" está visible. + Ocultar menú \"Privacidad\" + El menú \"Privacidad\" está oculto. + El menú \"Privacidad\" está visible. + Ocultar menú \"Prueba las nuevas funciones experimentales\" + El menú \"Prueba las nuevas funciones experimentales\" está oculto. + El menú \"Prueba las nuevas funciones experimentales\" está visible. + Ocultar menú \"Compras y suscripciones\" + El menú \"Compras y suscripciones\" está oculto. + El menú \"Compras y suscripciones\" está visible. + Ocultar menú \"Facturación y pagos\" + El menú \"Facturación y pagos\" está oculto. + El menú \"Facturación y pagos\" está visible. + Ocultar menú \"Notificaciones\" + El menú \"Notificaciones\" está oculto. + El menú \"Notificaciones\" está visible. + Ocultar menú \"Aplicaciones conectadas\" + El menú \"Aplicaciones conectadas\" está oculto. + El menú \"Aplicaciones conectadas\" está visible. + Ocultar menú \"Chat en directo\" + El menú \"Chat en directo\" está oculto. + El menú \"Chat en directo\" está visible. + Ocultar menú \"Subtítulos\" + El menú \"Subtítulos\" está oculto. + El menú \"Subtítulos\" está visible. + Ocultar menú \"Accesibilidad\" + El menú \"Accesibilidad\" está oculto. + El menú \"Accesibilidad\" está visible. + Ocultar menú \"Información\" + El menú \"Información\" está oculto. + El menú \"Información\" está visible. Barra de herramientas Ocultar o cambiar los componentes situados en la barra de herramientas, como los botones, la barra de búsqueda o la cabecera. @@ -662,6 +664,9 @@ La reproducción automática se puede cambiar en la configuración de YouTube: Ocultar superposición del zoom La superposición del zoom está oculta. La superposición del zoom está visible. + Desinfectar subtítulos de vídeo + "Frases como \"#\", \"Tienda\" y \"N productos\" se ocultan en los subtítulos de vídeo." + "Frases como \"#\", \"Tienda\" y \"N productos\" se muestran en los subtítulos de vídeo." Botones de acción Ocultar o mostrar botones de acción bajo los vídeos. @@ -728,6 +733,9 @@ La reproducción automática se puede cambiar en la configuración de YouTube: Ocultar banner de comentarios de los miembros El banner de comentarios de los miembros está oculto. El banner de comentarios de los miembros está visible. + Ocultar enlaces de búsqueda destacados + Los enlaces de búsqueda destacados están ocultos. + Los enlaces de búsqueda destacados están visibles. Ocultar sección de comentarios La sección de comentarios está oculta. La sección de comentarios está visible. @@ -751,69 +759,72 @@ La reproducción automática se puede cambiar en la configuración de YouTube: Los botones de marca de tiempo y emoji están visibles. Menú desplegable - Ocultar o cambiar el menú desplegable del reproductor de vídeo. + Ocultar o cambiar componentes del menú desplegable en el reproductor de vídeo. Cambiar tipo de interruptores Se utilizan interruptores de texto. Se utilizan interruptores cambiables. - Ocultar menú de pista de audio - El menú de pista de audio está oculto. - El menú de pista de audio está visible. - Ocultar menú de subtítulos - El menú de subtítulos está oculto. - El menú de subtítulos está visible. + Ocultar menú \"1080p Premium\" + El menú \"1080p Premium\" está oculto. + El menú \"1080p Premium\" está visible. + Ocultar menú \"Pista de audio\" + El menú \"Pista de audio\" está oculto. + El menú \"Pista de audio\" está visible. + Ocultar menú \"Subtítulos\" + El menú \"Subtítulos\" está oculto. + El menú \"Subtítulos\" está visible. Ocultar pie de página del menú de subtítulos El pie de página del menú de subtítulos está oculto. El pie de página del menú de subtítulos está visible. - Ocultar menú de bloquear pantalla - El menú de bloquear pantalla está oculto. - El menú de bloquear pantalla está visible. - Ocultar menú de más información - El menú de más información está oculto. - El menú de más información está visible. - Ocultar menú de velocidad de reproducción - El menú de velocidad de reproducción está oculto. - El menú de velocidad de reproducción está visible. + Ocultar menú \"Bloquear pantalla\" + El menú \"Bloquear pantalla\" está oculto. + El menú \"Bloquear pantalla\" está visible. + Ocultar menú \"Más información\" + El menú \"Más información\" está oculto. + El menú \"Más información\" está visible. + Ocultar menú \"Velocidad de reproducción\" + El menú \"Velocidad de reproducción\" está oculto. + El menú \"Velocidad de reproducción\" está visible. Ocultar cabecera del menú de calidad La cabecera del menú de calidad está oculta. La cabecera del menú de calidad está visible. Ocultar pie de página del menú de calidad El pie de página del menú de calidad está oculto. El pie de página del menú de calidad está visible. - Ocultar menú de denunciar - El menú de denunciar está oculto. - El menú de denunciar está visible. + Ocultar menú \"Denunciar\" + El menú \"Denunciar\" está oculto. + El menú \"Denunciar\" está visible. Ajustes adicionales - Ocultar menú del modo ambiente - El menú del modo ambiente está oculto. - El menú del modo ambiente está visible. - Ocultar menú de ayuda y comentarios - El menú de ayuda y comentarios está oculto. - El menú de ayuda y comentarios está visible. - Ocultar menú de escuchar con YouTube Music - El menú de escuchar con YouTube Music está oculto. - El menú de escuchar con YouTube Music está visible. - Ocultar menú de reproducción en bucle - El menú de reproducción en bucle está oculto. - El menú de reproducción en bucle está visible. - Ocultar menú de imagen en imagen - El menú de imagen en imagen está oculto. - El menú de imagen en imagen está visible. - Ocultar menú de controles premium - El menú de controles premium está oculto. - El menú de controles premium está visible. - Ocultar menú de temporizador - El menú del temporizador está oculto. - El menú del temporizador está visible. - Ocultar menú de regular volumen - El menú de regular volumen está visible. - El menú de regular volumen está oculto. - Ocultar menú de estadísticas para nerds - El menú de estadísticas para nerds está oculto. - El menú de estadísticas para nerds está visible. - Ocultar menú de ver en realidad virtual - El menú de ver en realidad virtual está oculto. - El menú de ver en realidad virtual está visible. + Ocultar menú \"Modo ambiente\" + El menú \"Modo ambiente\" está oculto. + El menú \"Modo ambiente\" está visible. + Ocultar menú \"Ayuda y comentarios\" + El menú \"Ayuda y comentarios\" está oculto. + El menú \"Ayuda y comentarios\" está visible. + Ocultar menú \"Escuchar con YouTube Music\" + El menú \"Escuchar con YouTube Music\" está oculto. + El menú \"Escuchar con YouTube Music\" está visible. + Ocultar menú \"Reproducción en bucle\" + El menú \"Reproducción en bucle\" está oculto. + El menú \"Reproducción en bucle\" está visible. + Ocultar menú \"Imagen en imagen\" + El menú \"Imagen en imagen\" está oculto. + El menú \"Imagen en imagen\" está visible. + Ocultar menú \"Controles premium\" + El menú \"Controles premium\" está oculto. + El menú \"Controles premium\" está visible. + Ocultar menú \"Temporizador\" + El menú \"Temporizador\" está oculto. + El menú \"Temporizador\" está visible. + Ocultar menú \"Regular volumen\" + El menú \"Regular volumen\" está visible. + El menú \"Regular volumen\" está oculto. + Ocultar menú \"Estadísticas para nerds\" + El menú \"Estadísticas para nerds\" está oculto. + El menú \"Estadísticas para nerds\" está visible. + Ocultar menú \"Ver en realidad virtual\" + El menú \"Ver en realidad virtual\" está oculto. + El menú \"Ver en realidad virtual\" está visible. Pantalla completa Ocultar o cambiar los componentes relacionados con pantalla completa. @@ -994,9 +1005,12 @@ Toca y mantén para deshacer." Ocultar barra de progreso en miniaturas de vídeo La barra de progreso en miniaturas está oculta. La barra de progreso en miniaturas está visible. - Ocultar capítulos en barra de progreso - Los capítulos en la barra de progreso están ocultos. - Los capítulos en la barra de progreso están visibles. + Desactivar capítulos en barra de progreso + Los capítulos están desactivados en la barra de progreso. + Los capítulos están activados en la barra de progreso. + Ocultar etiquetas de capítulos en barra de progreso + Las etiquetas de los capítulos junto a la marca de tiempo están ocultas. + Las etiquetas de los capítulos junto a la marca de tiempo están visibles. Ocultar marca de tiempo La marca de tiempo está oculta. La marca de tiempo está visible. @@ -1066,6 +1080,12 @@ Estos caracteres varían dependiendo de tu idioma. "Oculta los estantes de Shorts. Limitación: las cabeceras oficiales en los resultados de búsqueda estarán ocultas." + Ocultar en canal + "Oculto en el canal. + +Información: +• Solo se ocultan las estanterías con la cabecera Shorts en la pestaña de inicio." + Visible en el canal. Ocultar en feed de inicio y vídeos relacionados Oculto en el feed de inicio y los vídeos relacionados. Visible en el feed de inicio y los vídeos relacionados. @@ -1250,6 +1270,12 @@ Problema conocido: Al tratarse de una función en fase de desarrollo por parte d El tamaño del área deslizable no puede ser superior a 50. Restablezca al valor predeterminado. Tiempo de espera de superposición de deslizamiento La cantidad de milisegundos que la superposición es visible. + Sensibilidad de deslizamiento del brillo + Configura la distancia mínima para el deslizamiento de brillo entre 1 y 1000 (%).\nCuanto menor sea la distancia mínima, más rápido cambiará el nivel de brillo. + La sensibilidad de deslizamiento del brillo debe estar entre 1-1000 (%). + Sensibilidad de deslizamiento de volumen + Configura la distancia mínima para el deslizamiento del volumen entre 1 y 1000 (%).\n\nCuanto menor sea la distancia mínima, más rápido cambiará el nivel de brillo.\n\nSe recomienda una sensibilidad de deslizamiento del volumen del 100% en pasos de 15 niveles de volumen y del 10% en pasos de 150 niveles de volumen. + La sensibilidad de deslizamiento del volumen debe estar entre 1-1000 (%). Desactivar brillo HDR automático El brillo HDR automático está desactivado. El brillo HDR automático está activado. @@ -1352,6 +1378,9 @@ Limitación: es posible que los no me gusta no aparezcan en modo incógnito."Botón compacto de me gusta El botón de me gusta está diseñado para un ancho mínimo. El botón de me gusta está diseñado para una mejor apariencia. + Activar me gusta estimados + Los me gusta estimados están visibles. + Los me gusta estimados están ocultos. Mostrar mensaje si la API no está disponible Se muestra el mensaje si Return YouTube Dislike no está disponible. No se muestra el mensaje si Return YouTube Dislike no está disponible. @@ -1365,6 +1394,26 @@ Pulsa aquí para obtener más información. Los no me gusta no están disponibles (se alcanzó el límite de la API del cliente). Los no me gusta no están disponibles (%s). Recargar vídeo para votar utilizando Return YouTube Dislike + Oculto + + Devolver usuario de YouTube + Activar devolver usuario de YouTube + Se utiliza el nombre de usuario. + Se utiliza el identificador. + Formato de visualización + Nombre de usuario + Nombre de usuario (@identificador) + \@identificador (Nombre de usuario) + Clave de API de datos de YouTube + La clave de desarrollador para utilizar la API v3 de datos de YouTube. + Acerca de la clave API de datos de YouTube + "Se requiere la clave de desarrollador de la API v3 de datos de YouTube para reemplazar el identificador con el nombre de usuario. + +La cuota diaria para las claves de API en el plan gratuito es de 10,000, y se utiliza 1 cuota para reemplazar el identificador con el nombre de usuario en 1 comentario. + +Toca para ver cómo crear una clave de API." + Crear clave de desarrollador de API v3 de datos de YouTube + 1. Ve a <a href=%1$s>Crear un nuevo proyecto</a>.<br>2. Pulsa en el botón <b>CREAR</b>.<br>3. 3. Ve a <a href=%2$s>API v3 de datos de YouTube</a>.<br>4. Pulsa en el botón <b>HABILITAR</b>.<br>5. Pulsa en <b>CREAR</b>. Pulsa en el botón <b>CREAR CREDENCIALES</b>.<br>6. Selecciona la opción <b>Datos públicos</b>.<br>7. Pulsa en el botón <b> SIGUIENTE</b>.<br>8. Copia la clave API.<br><br>※ La clave API nunca debe ser compartida con otros, por lo que no se incluye en los ajustes de Importar / Exportar. SponsorBlock Activar SponsorBlock @@ -1631,8 +1680,10 @@ Pulsa el botón de continuar y desactiva las optimizaciones de la batería."Web Efectos secundarios de falsificación "• Las películas o vídeos de pago no pueden reproducirse." - "• Falta el menú de la pista de audio." - "• Falta el menú de la pista de audio." + "• Falta el menú \"Pista de audio\". +• \"Regular volumen\" no está disponible." + "• Falta el menú \"Pista de audio\". +• \"Regular volumen\" no está disponible." • El vídeo no puede reproducirse. Forzar iOS AVC (H.264) El códec de vídeo de iOS es AVC (H.264). diff --git a/src/main/resources/youtube/translations/fr-rFR/strings.xml b/src/main/resources/youtube/translations/fr-rFR/strings.xml index 4d96e2464a..9bf43bce24 100644 --- a/src/main/resources/youtube/translations/fr-rFR/strings.xml +++ b/src/main/resources/youtube/translations/fr-rFR/strings.xml @@ -11,6 +11,11 @@ Voulez-vous continuer ? Redémarrer pour charger l\'interface correctement Appliquer et redémarrer ? + "Il existe un bug côté serveur de YouTube qui empêche l'animation en temps réel des nombres, tels que les mentions \"J'aime\", les vues et les dates de mise en ligne pour certains utilisateurs. + +Un moyen de contourner temporairement ce problème est de falsifier la version de l'application en version 19.13.37. + +Voulez-vous falsifier la version de l'application et redémarrer ?" Normal Nom du paquet du téléchargeur vidéo Nom du paquet de l\'appli de téléchargement externe installée, telle que NewPipe ou YTDLnis. @@ -252,10 +257,6 @@ Limitations : • Les vidéos avec des phrases telles que \"Les internautes ont aussi regardé cette vidéo\" en dessous." Masquer les vidéos peu vues Masque les vidéos avec moins de 1,000 vues dans le flux \"accueil\" qui ont été mis en ligne par des personnes dont vous n\'êtes pas abonnés. - Masquer les vidéos À SUIVRE - "Masque les vidéos avec l'étiquette 'À SUIVRE'. - -Remarque : Activer ceci masque également le bouton \"M'avertir\"." Filtre du compteur de vues Masquer les vidéos de la page d\'accueil par vues @@ -359,6 +360,7 @@ Si désactivé ultérieurement, il est recommandé d'effacer les données de l'a 18.33.40 - Restaure l\'ancienne barre d\'action Shorts 18.38.45 - Restaure l\'ancien menu de qualité vidéo 18.48.39 - Désactive les \"vues\" et \"j\'aime\" en temps réel + 19.13.37 - Restaure l\'ancienne animation en temps réel des nombres Menu du compte Masque ou affiche des éléments dans le menu du compte et dans l\'onglet \"Vous\". @@ -581,7 +583,7 @@ Vous → Afficher la chaîne → Menu → Paramètres" Les Doodles YouTube sont affichés. "Les Doodles YouTube apparaissent quelques jours par an. -Si un Doodle YouTube est actuellement diffusé dans votre région et que le paramètre pour le masquer est activé, la barre de filtre située à côté de la barre de recherche sera également masquée." +Si un Doodle YouTube est actuellement diffusé dans votre région et que le paramètre est activé, les filtres situés à côté de la barre de recherche sera également masquée." Remplacer le bouton \"Créer\" Remplace le bouton \"Créer\" par le bouton \"Paramètre\". Action à attribuer au bouton @@ -664,15 +666,18 @@ La lecture automatique peut être modifiée dans les paramètres de YouTube : Masquer le voile du zoom Le voile du zoom est masqué. Le voile du zoom est affiché. + Nettoyer les sous-titres vidéo + "Les phrases telles que '#', 'Financement' 'Magasin' et 'produits' seront masqués sur les sous-titres vidéos." + "Les phrases telles que '#', 'Financement' 'Magasin' et 'produits' seront affichés sur les sous-titres vidéos." Boutons sous la vidéo Masque ou affiche les boutons sous les vidéos. Désac. lueur des \"J\'aime\" et \"Je n\'aime pas\" Les boutons \"J\'aime\" et \"Je n\'aime pas\" ne s\'illuminerons pas lorsqu\'ils sont mentionné. Les boutons \"J\'aime\" et \"Je n\'aime pas\" s\'illuminerons lorsqu\'ils sont mentionné. - Masquer le bouton \"Clip\" - Le bouton \"Clip\" est masqué. - Le bouton \"Clip\" est affiché. + Masquer le bouton \"Extrait\" + Le bouton \"Extrait\" est masqué. + Le bouton \"Extrait\" est affiché. Masquer le bouton \"Télécharger\" Le bouton \"Télécharger\" est masqué. Le bouton \"Télécharger\" est affiché. @@ -730,6 +735,9 @@ La lecture automatique peut être modifiée dans les paramètres de YouTube : Masquer les commentaires des membres Les commentaires des membres sont cachés. Les commentaires des membres sont affichés. + Marquer les liens de recherche en surbrillance + Les liens de recherche en surbrillance sont masqués. + Les liens de recherche en surbrillance sont affichés. Masquer la section des commentaires La section des commentaires est masquée. La section des commentaires est affichée. @@ -757,6 +765,9 @@ La lecture automatique peut être modifiée dans les paramètres de YouTube : Type de bouton à bascule Les boutons à bascule avec textes sont utilisés. Les boutons à bascule sont utilisés. + Masquer le menu 1080p Premium + Le menu 1080p Premium est masqué. + Le menu 1080p Premium est affiché. Masquer le menu \"Piste audio\" Le menu \"Piste audio\" est masqué. Le menu \"Piste audio\" est affiché. @@ -996,9 +1007,12 @@ Appuyez longuement pour annuler." Masq. barre de progression sur les miniatures Les miniatures sur la barre de progression sont masqués. Les miniatures sur la barre de progression sont affichés. - Masq. chapitres de la barre de progression - Les chapitres de la barre de progression sont masqués. - Les chapitres de la barre de progression sont affichés. + Désac. chapitres sur la barre de progression + Les chapitres sont désactivés sur la barre de progression. + Les chapitres sont activés sur la barre de progression. + Masq. noms des chapitres sur la barre de progression + Les noms de chapitres situés à côté de l\'horodatage sont masqués. + Les noms de chapitres situés à côté de l\'horodatage sont affichés. Masquer l\'horodatage L\'horodatage est masqué. L\'horodatage est affiché. @@ -1013,7 +1027,7 @@ Effet secondaire : le thème Cairo peut également s'appliquer sur les points d Description vidéo Masque ou affiche les éléments de la description de la vidéo. - Animation en temps réel des nombres + Désactiver l\'animation en temps réel des nombres Animation en temps réel des nombres est désactivé. Animation en temps réel des nombres est activé. Masquer la section \"Mentions\" @@ -1067,6 +1081,12 @@ L'option \"Ouvrir la description automatiquement\" risque de ne pas fonctionner "Masque les propositions de Shorts. Effet secondaire : Les fiches officielles dans les résultats de recherche sont masquées." + Masquer sur les chaînes + "Masqué sur les chaînes. + +Information : +• Seules les étagères dont l'en-tête est Shorts dans l'onglet d'accueil sont masquées." + Affiché sur les chaînes. Masquer dans les flux \"accueil\" et \"vidéos similaires\" Masqué dans les flux \"accueil\" et \"vidéos similaires\". Affiché dans les flux \"accueil\" et \"vidéos similaires\". @@ -1221,7 +1241,7 @@ Limitations : L\'identifiant de la chaîne est utilisé. Contrôles par gestes - Activer les gestes auto. de luminosité + Activer les gestes de luminosité auto La valeur la plus basse du geste de luminosité active la luminosité automatique. La valeur la plus basse du geste de luminosité désactive la luminosité automatique. Activer les gestes de luminosité @@ -1252,7 +1272,13 @@ Limitations : Pourcentage de la zone de l\'écran pouvant être glissée.\n\nNote : Cela affecte également la zone du double appui pour avancer/reculer dans la vidéo. La zone glissable ne peut pas être supérieure à 50. Durée du voile lors des gestes - La quantité de millisecondes pendant laquelle la superposition est visible. + La durée en millisecondes pendant laquelle la superposition est visible. + Sensibilité des gestes de luminosité + Configurez la sensibilité minimale des gestes de luminosité entre 1 et 1000 (%).\nPlus la sensibilité minimale est courte, plus le niveau de luminosité change rapidement. + La sensibilité des gestes de luminosité doit être comprise entre 1-1000 (%). + Sensibilité des gestes de volume + Configurer la sensibilité minimale des gestes de volume entre 1 et 1000 (%).\n\nPlus la sensibilité minimale est courte, plus le niveau du volume change rapidement.\n\nLa sensibilité recommandée des gestes de volume est de 100 % par paliers de 15 volumes et de 10 % par paliers de 150 volumes. + La sensibilité des gestes de volume doit être comprise entre 1-1000 (%). Luminosité HDR automatique La luminosité HDR automatique est désactivée. La luminosité HDR automatique est activée. @@ -1355,6 +1381,9 @@ Limitation : les \"Je n'aime pas\" ne seront pas affichées si vous n'êtes pas Bouton \"J\'aime\" compact Le bouton \"J\'aime\" s\'affiche avec une taille réduite. Le bouton \"J\'aime\" s\'affiche avec une meilleure apparence. + Afficher les \"J\'aime\" estimés + Les \"J\'aime\" estimés sont affichés. + Les \"J\'aime\" estimés sont masqués. Affiche un message si l\'API est indisponible Affiche un message si Return YouTube Dislike est indisponible. N\'affiche pas de message si Return YouTube Dislike est indisponible. @@ -1367,6 +1396,26 @@ Limitation : les \"Je n'aime pas\" ne seront pas affichées si vous n'êtes pas Les \"Je n\'aime pas\" sont indisponibles (le client a atteint la limite de l\'API). Les \"Je n\'aime pas\" sont indisponible (%s). Recharger la vidéo pour voter avec Return YouTube Dislike + Masqué + + Return YouTube Username + Activer Return YouTube Username + Nom d\'utilisateur utilisé. + L\'identifiant est utilisé. + Format d\'affichage + Nom d\'utilisateur + Nom d\'utilisateur (@identifiant) + \@identifiant (Nom d\'utilisateur) + Clé API des données YouTube + La clé de développeur pour utiliser l\'API des données YouTube v3. + À propos de la clé YouTube Data API + "La clé YouTube Data API v3 est nécessaire pour remplacer les identifiants par des noms d'utilisateurs. + +Le quota journalier pour les clés API sur le plan gratuit est de 10 000, et 1 quota est utilisé pour remplacer l'identifiant par un noms d'utilisateur pour 1 commentaire. + +Cliquez pour découvrir comment créer une clé API." + Obtenir une clé développeur pour YouTube Data API v3 + 1. Allez sur <a href=%1$s>Nouveau projet</a>.<br>2. Cliquez sur <b> le bouton</b> Créer.<br>3. Allez sur <a href=%2$s>YouTube Data API v3</a>.<br>4. Cliquez sur <b>le bouton</b> ACTIVER.<br>5. Cliquez sur <b>le bouton</b> CRÉER DES IDENTIFIANTS.<br>6. Sélectionnez <b>l\'option</b> Données Publiques.<br>7. Cliquez sur <b>le bouton</b> SUIVANT.<br>8. copier la Clé API.<br><br>※ La clé API ne doit jamais être partagé avec personne d\'autre, par conséquent, il n\'est pas inclus dans les paramètres Importer / Exporter. SponsorBlock Activer SponsorBlock diff --git a/src/main/resources/youtube/translations/hu-rHU/strings.xml b/src/main/resources/youtube/translations/hu-rHU/strings.xml index 9061a76c35..f8716ae38b 100644 --- a/src/main/resources/youtube/translations/hu-rHU/strings.xml +++ b/src/main/resources/youtube/translations/hu-rHU/strings.xml @@ -171,7 +171,7 @@ Koppints ide, ha többet szeretnél megtudni a DeArrow-ról." A csatornafül szűrő ki van kapcsolva. Csatornafül szűrő Szűrendő csatornafül neveinek listája, új sorral elválasztva. - "Rövid + "Shortok Lejátszási listák Áruház" Áruház böngészése gomb elrejtése @@ -248,10 +248,6 @@ Korlátozások: • Olyan videók, amelyek alatt olyan kifejezések szerepelnek, mint „Mások is megnézték”." Alacsony nézettségű videók elrejtése Az 1000-nél kevesebb megtekintést elért videók elrejtése a Kezdőlapon, amiket a leiratkozott csatornákról töltöttek fel. - KÖZELGŐ videó elrejtése - "Videók elrejtése KÖZELGŐ címkével. - -Megjegyzés: Ha ezt engedélyezi, akkor az Értesíts gomb is el lesz rejtve." Megtekintések szűrő Videók elrejtése a kezdőlapon a nézettség alapján @@ -355,6 +351,7 @@ Ha kikapcsolja, akkor ajánlott törölni az app adatait, hogy elkerülje a UI h 18.33.40 - Régi Shorts művelet sáv visszaállítása 18.38.45 - Visszaállítja a régi alapértelmezett videó minőség viselkedést 18.48.39 - Letiltja a \'Megtekintések\' és a \'Kedvelések\' valós idejű frissítését + 19.13.37 - Visszaállítja a régi stílusú gördülő szám animációkat Fiók menü Elemek elrejtése vagy megjelenítése a fiók menüben és a Te fülön. @@ -749,6 +746,9 @@ Beállítások → Automatikus lejátszás → Következő videó automatikus le Kapcsolótípus megváltoztatása Szövegkapcsolók használata. Kapcsolók használata. + 1080p Premium menü elrejtése + A 1080p Premium menü el van rejtve. + A 1080p Premium menü látható. Audió nyomkövető menü elrejtése Az audiosáv menü el van rejtve. Az audiosáv menü megjelenik. @@ -988,9 +988,12 @@ Tartsa nyomva a sebesség alaphelyzetbe állításához." Folyamatsáv elrejtése a minilejátszóban A minilejátszó folyamatsávja el van rejtve A minilejátszó folyamatsávja megjelenik - Keresősáv fejezetek elrejtése - A fejezetek el vannak rejtve a keresősávban. - A fejezetek megjelennek a keresősávban. + Keresősáv fejezeteinek letiltása + A keresősáv fejezetei le vannak tiltva. + A keresősáv fejezetei engedélyezettek. + Keresősáv fejezetcímkéinek elrejtése + Az időbélyeg melletti fejezetcímkék el vannak rejtve. + Az időbélyeg melletti fejezetcímkék láthatóak. Időtartam elrejtése Az időtartam el van rejtve. Az időtartam látható. @@ -1160,17 +1163,17 @@ Mellékhatás: A hivatalos fejlécek a keresési eredményekben el lesznek rejtv A nem tetszik gomb el van rejtve. A nem tetszik gomb látható. Megjegyzések gomb elrejtése - A megjegyzések gomb el van rejtve - A megjegyzések gomb megjelenik + A megjegyzések gomb el van rejtve. + A megjegyzések gomb látható. Remix gomb elrejtése - A remix gomb el van rejtve - A remix gomb megjelenik + A remix gomb el van rejtve. + A remix gomb látható. Megosztás gomb elrejtése - A megosztás gomb el van rejtve - A megosztás gomb látható + A megosztás gomb el van rejtve. + A megosztás gomb látható. Hang gomb elrejtése - A hang gomb el van rejtve - A hang gomb megjelenik + A hang gomb el van rejtve. + A hang gomb látható. Animáció / Visszajelzés Like gomb animáció elrejtése @@ -1188,21 +1191,23 @@ Mellékhatás: A hivatalos fejlécek a keresési eredményekben el lesznek rejtv Rejtett Fejezetek engedélyezése - "Fejezetek engedélyezve + "Az időbélyeg engedélyezve van. -Ismert hiba: Mivel ez a funkció a Google fejlesztési szakaszában van, előfordulhat, hogy az elrendezés hibás lesz." +Korlátozások: +• Ez a beállítás nem csak az időbélyegeket engedélyezi, hanem lehetővé teszi a felhasználók számára a felhasználói felület elrejtését is a lejátszó hátterére kattintva. +• Mivel ez a funkció a Google fejlesztési szakaszában van, előfordulhat, hogy az elrendezés hibás." Fejezetek letiltva. Időbélyegző hosszú nyomás művelet Nyomd meg és tartsd lenyomva az időbélyeget a Shortok ismétlés állapotának megváltoztatásához. Meta panel alsó margó Állítsd be a keresősáv és a meta panel közötti távolságot 0-64 között. - A Meta panel alsó margójának 0-64 között kell lennie. Alapértelmezett értékekre visszaállítása. + A Meta panel alsó margójának 0-64 között kell lennie. Eszköztár elrejtése Az eszköztár el van rejtve. Az eszköztár látható. Navigációs sáv elrejtése - A navigációs sáv el van rejtve - A navigációs sáv megjelenik + A navigációs sáv el van rejtve. + A navigációs sáv látható. Az üres hely magasságának százaléka Beállítja a navigációs sáv elrejtésekor megmaradó üres terület magasságának arányát 0 és 100 (%) között. A magasság százalékának 0-100 (%) között kell lennie. @@ -1293,7 +1298,7 @@ Megjegyzés: Ezzel a képernyőterület méretét is megváltoztatja, ahol érz Korlátozás: Előfordulhat, hogy ez a beállítás nem vonatkozik azokra a videókra, amelyek nem tartalmazzák a „Hallgassa meg a YouTube Musicon” bannert." Az alapértelmezett lejátszási sebesség engedélyezett zene lejátszásnál. - A Shortok alapértelmezett lejátszási sebességének engedélyezése + Shortok alapértelmezett lejátszási sebességének engedélyezése Az alapértelmezett lejátszási sebesség vonatkozik a Shortokra. Az alapértelmezett lejátszási sebesség nem vonatkozik a Shortokra. Kihagyott előtöltött puffer. @@ -1333,9 +1338,11 @@ Egy másik kodek kerül alkalmazásra kb. 20 másodperc pufferezés után."Return YouTube Dislike A nem tetszések megjelennek A nem tetszések nem jelennek meg - A nem tetszések megjelenítése a Shorts videóknál - A nem tetszések megjelennek a Shorts videóknál - "A nem tetszések megjelennek a Shorts videóknál\n\nKorlátozás: A nem tetszések lehet nem jelennek meg inkognitó módban" + Shorts videók nem tetszéseiek megjelenítése + A Shorts videók nem tetszései láthatóak. + "A Shorts videók nem tetszései láthatóak. + +Korlátozás: A nem tetszések lehet nem jelennek meg kijelentkezett felhasználóval vagy inkognitó módban." A nem tetszések el vannak rejtve a Shorts videóknál Nem tetszések százalékban A nem tetszések százalékban jelennek meg @@ -1343,6 +1350,9 @@ Egy másik kodek kerül alkalmazásra kb. 20 másodperc pufferezés után."Kompakt tetszik gomb A tetszik gomb minimális szélességre formázva A tetszik gomb a legjobb megjelenésre formázva + Becsült kedvelések megjelenítése + A becsült kedvelések láthatóak. + A becsült kedvelések el vannak rejtve. Üzenet megjelenítése, ha az API nem elérhető Üzenet megjelenítése, ha a Return YouTube Dislike nem elérhető Nem jelenik meg üzenet, ha a Return YouTube Dislike nem elérhető @@ -1355,6 +1365,22 @@ Egy másik kodek kerül alkalmazásra kb. 20 másodperc pufferezés után."A nem tetszik funkció nem elérhető A nem tetszik funkció nem elérhető (%s) Töltse újra a videót a Return YouTube Dislike-hoz + Rejtett + + YouTube-felhasználónév visszaadása + A YouTube-felhasználónév visszaadás engedélyezése + A felhasználónév van használatban. + A kezelő van használatban. + YouTube adat API kulcs + A fejlesztői kulcs a YouTube Data API v3 használatához. + A YouTube Data API-kulcsról + "A YouTube Data API v3 fejlesztői kulcsa szükséges ahhoz, hogy a Kezelő-t Felhasználónév-re cseréljék. + +Az API-kulcsok napi kvótája az ingyenes csomagban 10 000, és 1 kvótával cseréli le a Kezelő-t a Felhasználónévre 1 megjegyzés esetén. + +Kattintson az API-kulcs kiadás folyamatának megtekintéséhez." + YouTube Data API v3 fejlesztői kulcs kiadás + 1. Nyissa meg a(z) <a href=%1$s>Új projekt létrehozását</a>.<br>2. Kattintson a <b>LÉTREHOZÁS</b> gomb.<br>3. Lépj a <a href=%2$s>YouTube Data API v3</a> oldalára.<br>4. Kattintson az <b>Engedélyezés</b> gombra.<br>5. Kattintson a <b>HITELESÍTÉSI ADATOK LÉTREHOZÁSA</b> gombra.<br>6. Válassza ki a <b>Nyilvános adatok</b> lehetőség.<br>7. Kattintson a <b>KÖVETKEZŐ</b> gombra.<br>8. Másolja ki az API-kulcsot.<br><br>※ Az API-kulcsot soha ne ossza meg másokkal, így az nem szerepel az importálási/exportálási beállításokban. Szponzor Blokk SponsorBlock bekapcsolása @@ -1383,7 +1409,7 @@ Egy másik kodek kerül alkalmazásra kb. 20 másodperc pufferezés után."Nem fizetett hirdetés/önpromóció Hasonló a „szponzorhoz”, csak ez nem fizetett, vagy saját promóció. Beletartoznak a saját árucikkek, adományok, illetve információk azokról, akikkel együttműködtek Interakció emlékeztető (Feliratkozás) - Egy rövid emlékeztető arról, hogy like-oljunk, iratkozzunk fel, vagy kövessük a tartalom közben. Ha hosszabb szakasz, vagy egy adott témáról van, inkább az önpromóció alá tartozik + Egy rövid emlékeztető arról, hogy like-oljunk, iratkozzunk fel, vagy kövessük őket a tartalom közben. Ha ez hosszabb vagy egy adott témáról szól, inkább az önpromóció alá tartozik. Kiemelt A videónak azon része, amit a legtöbben keresnek Megszakítás/Intro animáció @@ -1462,7 +1488,7 @@ Egy másik kodek kerül alkalmazásra kb. 20 másodperc pufferezés után."Értesíti a SponsorBlock ranglistáját, hogy mennyi időt takarított meg. Minden egyes szakasz kihagyásakor üzenetet küld a ranglistának A kihagyások számának követése nem engedélyezett Minimális szegmens időtartam - A beállított értéknél (másodpercben) rövidebb szakaszokat nem hagyja ki vagy nem jeleníti meg + A beállított értéknél (másodpercben) rövidebb szakaszokat nem hagyja ki vagy jeleníti meg. Érvénytelen időtartam. Az Ön privát felhasználói azonosítója Ezt bizalmasan kell kezelni. Olyan mint egy jelszó és senkivel sem ajánlott megosztani. Ha valaki megszerzi, meg tudja személyesíteni önt diff --git a/src/main/resources/youtube/translations/it-rIT/strings.xml b/src/main/resources/youtube/translations/it-rIT/strings.xml index 53bfd7b180..953aa899d9 100644 --- a/src/main/resources/youtube/translations/it-rIT/strings.xml +++ b/src/main/resources/youtube/translations/it-rIT/strings.xml @@ -11,6 +11,11 @@ Desideri procedere? Riavvia per caricare l\'interfaccia normalmente Aggiorna e riavvia + "C'è un bug sul lato server di YouTube che fa sì che il testo del numero rotante come mi piace, le viste e le date di caricamento siano nascosti per alcuni utenti. + +Una soluzione temporanea per questo problema è quello di camuffare la versione app a 19.13.37. + +Vuoi camuffare la versione dell'app prima di riavviare l'app?" Normale Nome pacchetto scaricatore video Nome del pacchetto dello scaricatore esterno installato, ad esempio NewPipe o YTDLnis. @@ -249,10 +254,6 @@ Limitazioni: • Video con frasi come 'Persone guardano anche' sotto." Nascondi video con poche visualizzazioni Nascondi video con meno di 1.000 visualizzazioni dalla home che sono stati caricati dai canali a cui non si è iscritti. - Nascondi i video PROSSIMAMENTE - "Nascondi i video con l'etichetta PROSSIMAMENTE. - -Nota: Abilitare questo nasconde anche il pulsante Notificami." Filtro sul numero di visualizzazioni Nascondi video della scheda Home per visualizzazioni @@ -356,6 +357,7 @@ Se disattivata in seguito, si consiglia di cancellare i dati dell'app per evitar 18.33.40 - Ripristina la vecchia barra d\'azione degli Shorts 18.38.45 - Ripristina il comportamento della vecchia qualità video predefinita 18.48.39 - Disabilita l\'aggiornamento in tempo reale di visualizzazioni e dei Mi piace + 19.13.37 - Ripristina le vecchie animazioni dei numeri in rotazione Menù account Nascondi o mostra gli elementi nel menu account e nella scheda Tu. @@ -661,6 +663,9 @@ Impostazioni → Riproduzione automatica → Riproduzione automatica del video s Nascondi sovrimpressione dello zoom La sovrimpressione dello zoom è nascosta. La sovrimpressione dello zoom è visibile. + Sanitizza sottotitoli video + "Frasi come '#', 'Raccolta fondi', 'Negozio' e 'Prodotti' sono state nascoste nei sottotitoli video." + "Frasi come '#', 'Raccolta fondi', 'Negozio' e 'Prodotti' sono state mostrate nei sottotitoli video." Pulsanti azione Nascondi o mostra i pulsanti di azione sotto i video. @@ -727,6 +732,9 @@ Impostazioni → Riproduzione automatica → Riproduzione automatica del video s Nascondi il banner dei Commenti dei membri Il banner dei Commenti dei membri è nascosto. Il banner dei Commenti dei membri è visibile. + Nascondi collegamenti di ricerca evidenziati + I collegamenti di ricerca evidenziati sono nascosti. + I collegamenti di ricerca evidenziati sono mostrati. Nascondi la sezione Commenti La sezione Commenti è nascosta La sezione Commenti è visibile @@ -754,6 +762,9 @@ Impostazioni → Riproduzione automatica → Riproduzione automatica del video s Cambia il tipo d\'interruttore Vengono utilizzati gli interruttori con testo. Vengono utilizzati gli interruttori a levetta. + Nascondi il menu Premium 1080p + Il menu Premium 1080p è nascosto. + Il menu Premium 1080p è mostrato. Nascondi il menu Traccia audio Il menu Traccia audio è nascosto. Il menu Traccia audio è visibile. @@ -999,9 +1010,12 @@ Tocca e tieni premuto per annullare." Nascondi la barra di avanzamento nel thumbnail dei video La barra di avanzamento nel thumbnail dei video è nascosta La barra di avanzamento nel thumbnail dei video è visibile - Nascondi i capitoli della barra di avanzamento - I capitoli sono nascosti nella barra di avanzamento. - I capitoli sono mostrati nella barra di avanzamento. + Disabilita i capitoli della barra di avanzamento + I capitoli sono disabilitati nella barra di avanzamento. + I capitoli sono abilitati nella barra di avanzamento. + Nascondi le etichette dei capitoli della barra di avanzamento + Le etichette del capitolo accanto al timestamp sono nascoste. + Le etichette del capitolo accanto al timestamp sono nascoste. Nascondi il timestamp Il timestamp è nascosto Il timestamp è visibile @@ -1068,6 +1082,12 @@ Effetto collaterale: il tema Cairo viene applicato anche ai punti di notifica."< Scaffali Shorts Nascondi lo scaffale degli Shorts "Problema noto: l'intestazione ufficiale nei risultati di ricerca sarà nascosta" + Nascondi nel canale + "Nascosto nel canale. + +Informazione: +• Solo gli scaffali con l'intestazione Shorts nella scheda home sono nascosti." + Mostrato nel canale. Nascondi nella home feed e video correlati Nascosto nella home feed e video correlati. Mostrato Nella home feed e video correlati. @@ -1252,6 +1272,12 @@ Problema noto: Poiché questa è una caratteristica nella fase di sviluppo di Go La dimensione dell\'area trascinabile non può essere superiore a 50. Ripristina il valore predefinito. La durata della sovrapposizione del trascinamento La visibilità in millisecondi della sovrapposizione + Sensibilità dello scorrimento luminosità + Configura la distanza minima per scorrere la luminosità tra 1 e 1000 (%).\nPiù breve è la distanza minima, più velocemente cambia il livello di luminosità. + La sensibilità dello scorrimento della luminosità deve essere compresa tra 1 e 1000 (%). + Sensibilità scorrimento del volume + Configurare la distanza minima per scorrere il volume tra 1 e 1000 (%).\n\nPiù breve è la distanza minima, più il livello del volume cambia.\n\nLa sensibilità consigliata dello scorrimento del volume è 100% a livelli di 15 e 10% a livelli di 150 volumi. + La sensibilità dello scorrimento del volume deve essere compresa tra 1-1000 (%). Disattiva la luminosità HDR automatica La luminosità HDR automatica è disattivata La luminosità HDR automatica è attivata @@ -1353,6 +1379,9 @@ Limitazione: Non mi piace possono non apparire se l'utente non è registrato o i Attiva il pulsante Mi Piace compatto Pulsante Mi Piace riadattato per una dimensione minima Pulsante Mi Piace riadattato per la migliore visualizzazione + Mostra i Mi piace stimati + I Mi piace stimati sono mostrati. + I Mi piace stimati sono nascosti. Mostra una notifica toast se l\'API non è disponibile Notifica toast visibile se l\'API di ReturnYouTubeDislike non è disponibile Notifica toast nascosta se l\'API di ReturnYouTubeDislike non è disponibile @@ -1365,6 +1394,26 @@ Limitazione: Non mi piace possono non apparire se l'utente non è registrato o i Non Mi Piace non disponibili (è stato raggiunto il limite del client API) Non Mi Piace non disponibili (%s) Ricarica il video per votare utilizzando Return YouTube Dislike + Nascosto + + Return YouTube Username + Attiva Return YouTube Username + Il Nome utente è usato. + La maniglia è usata. + Formato di visualizzazione + Nome utente + Nome utente (@maniglia) + \@maniglia (Nome utente) + Chiave API dati di YouTube + La chiave sviluppatore per l\'utilizzo dell\'API dati di YouTube v3. + Informazioni sulla chiave API dati di YouTube + "La chiave sviluppatore YouTube API v3 è necessaria per sostituire la Maniglia con il Nome utente. + +La quota giornaliera per le chiavi API sul piano gratuito è di 10.000, e 1 quota è utilizzata per sostituire la Maniglia con il Nome utente per 1 commento. + +Clicca per vedere come emettere una chiave API." + Inserimento chiave dati sviluppatore API di YouTube v3 + 1. Vai su <a href=%1$s>Crea un nuovo progetto</a>.<br>. Clicca il pulsante <b>CREA</b>.<br>3. Vai su <a href=%2$s>dati YouTube API v3</a>.<br>4. Fare clic sul pulsante <b>ABILITA</b>.<br>5. Fare clic sul pulsante <b>CREA CREDENZIALI</b>.<br>6. Selezionare l\'opzione <b>Dati pubblici</b>.<br>7. Fare clic sul pulsante <b>PROSSIMO</b><br>8. Copia la chiave API.<br><br>※ La chiave API non dovrebbe mai essere condivisa con gli altri, quindi non è inclusa nelle impostazioni di Importazione / Esportazione. SponsorBlock Abilita SponsorBlock diff --git a/src/main/resources/youtube/translations/ja-rJP/strings.xml b/src/main/resources/youtube/translations/ja-rJP/strings.xml index 622c983625..487dde7e4f 100644 --- a/src/main/resources/youtube/translations/ja-rJP/strings.xml +++ b/src/main/resources/youtube/translations/ja-rJP/strings.xml @@ -11,6 +11,11 @@ 続行しますか? 再起動してレイアウトを正常に読み込みます 再起動して設定を適用します + "YouTube サーバー側のバグにより、高評価数、再生回数、アップロード日などの数字のテキストが一部のユーザーに対して非表示になります。 + +この問題は、アプリのバージョンを 19.13.37 に偽装することで回避できます。(一時的な回避策) + +アプリを再起動する前にアプリのバージョンを偽装しますか?" 通常 外部ダウンローダーのパッケージ名 NewPipe や YTDLnis などの、インストールされている外部ダウンローダーアプリのパッケージ名です。 @@ -250,10 +255,6 @@ DeArrow の詳細については、ここをタップしてください。" 再生回数が少ない動画を非表示 登録していないチャンネルからアップロードされた、再生回数が 1,000 回未満の動画をホームフィードから非表示にします。 - プレミア公開動画を非表示 - "「プレミア公開」ラベルがついた動画を非表示にします。 - -注意: これを有効にすると「通知する」ボタンも非表示になります。" 再生回数フィルター ホームフィードをフィルタリング @@ -273,7 +274,7 @@ DeArrow の詳細については、ここをタップしてください。"UIの各動画の下に表示される再生回数の言語テンプレートを設定します。各キー (言語の文字/単語) -> 値 (キーの意味) は、改行して記述する必要があります。キーは「->」記号の前に記述します。言語設定を更新した場合は、この設定をリセットする必要があります。\n\n例:\n英語: 10K views = K -> 1000、views -> 回\nスペイン語: 10 K vistas = K -> 1000、vistas -> 回 万 -> 10 000\n億 -> 100 000 000\n回視聴 -> views 再生回数のフィルタリングについて - "ホーム / 登録チャンネル / 検索結果はフィルタリングされ、設定した値よりも少ない視聴回数の動画を非表示にします。 + "ホーム / 登録チャンネル / 検索結果はフィルタリングされ、設定した値よりも少ない再生回数の動画を非表示にします。 注意: • ショート動画は非表示にできません。 @@ -356,11 +357,12 @@ DeArrow の詳細については、ここをタップしてください。"偽装するバージョン 17.33.42 - 古い UI レイアウトを復元 17.41.37 - 古い再生リスト欄を復元 - 18.05.40 - 古いコメント入力ボックスを復元 + 18.05.40 - 古いコメント入力欄を復元 18.17.43 - 古いプレーヤーフライアウトパネルを復元 - 18.33.40 - 古いショートのアクションバーを復元 + 18.33.40 - ショートの古いアクションバーを復元 18.38.45 - 以前のデフォルトの画質の動作を復元 - 18.48.39 - リアルタイムで更新される「再生回数」と「高評価数」を無効化 + 18.48.39 - リアルタイムで更新される再生回数と高評価数を無効化 + 19.13.37 - 古いスタイルの数字の回転アニメーションを復元 「アカウント」メニュー 「アカウント」メニューと「マイページ」タブで要素を非表示または表示します。 @@ -384,7 +386,7 @@ DeArrow の詳細については、ここをタップしてください。"無効なカスタムフィルターです: %s。 ボタンをフック - YouTube 内の「YouTube Music」ボタンを置換します。 + YouTube アプリ内の「YouTube Music」ボタンを置換します。 ダウンロードボタン 「オフライン」ボタンを置換 @@ -660,6 +662,9 @@ DeArrow の詳細については、ここをタップしてください。"ズームオーバーレイを非表示 ズーム時のオーバーレイを非表示にします。 ズーム時のオーバーレイを非表示にします。 + 動画のサブタイトルをサニタイズ + "動画のタイトルの横にある「#」、「寄付」、「ショップ」、「商品」のようなサブタイトルを非表示にします。" + "動画のタイトルの横にある「#」、「寄付」、「ショップ」、「商品」のようなサブタイトルを非表示にします。" アクションボタン 動画下のアクションボタンを非表示または表示します。 @@ -726,6 +731,9 @@ DeArrow の詳細については、ここをタップしてください。"「メンバーからのコメント」バナーを非表示 「メンバーからのコメント」バナーを非表示にします。 「メンバーからのコメント」バナーを非表示にします。 + ハイライト表示された検索リンクを非表示 + コメント欄のハイライト表示された検索リンク(虫眼鏡マークが付いている水色の文字)を非表示にします。 + コメント欄のハイライト表示された検索リンク(虫眼鏡マークが付いている水色の文字)を非表示にします。 コメント欄を非表示 コメント欄を非表示にします。 コメント欄を非表示にします。 @@ -753,6 +761,9 @@ DeArrow の詳細については、ここをタップしてください。"トグルの種類を変更 現在の設定: テキストのトグル 現在の設定: スイッチのトグル + 1080p Premium メニューを非表示 + 画質設定メニューから「1080p Premium」を非表示にします。 + 画質設定メニューから「1080p Premium」を非表示にします。 「音声トラック」を非表示 「音声トラック」メニューを非表示にします。 「音声トラック」メニューを非表示にします。 @@ -992,9 +1003,12 @@ DeArrow の詳細については、ここをタップしてください。"動画サムネイルのシークバーを非表示 動画のサムネイルのシークバーを非表示にします。 動画のサムネイルのシークバーを非表示にします。 - シークバーのチャプターを非表示 - シークバーからチャプターを非表示にします。 - シークバーからチャプターを非表示にします。 + シークバーのチャプターを非表示 + シークバーからチャプターを非表示にします。 + シークバーからチャプターを非表示にします。 + チャプターのラベルを非表示 + タイムスタンプの横に表示されるチャプターのラベルを非表示にします。 + タイムスタンプの横に表示されるチャプターのラベルを非表示にします。 タイムスタンプを非表示 タイムスタンプを非表示にします。 タイムスタンプを非表示にします。 @@ -1063,6 +1077,11 @@ DeArrow の詳細については、ここをタップしてください。""ショート欄を非表示にします。 注意: 検索結果の公式ヘッダーが非表示になります。" + チャンネルページから非表示 + "チャンネルページの「ホーム」からショート欄を非表示にします。 + +注意: 「ショート」ヘッダーがあるショート欄のみが非表示になります。" + チャンネルページの「ホーム」からショート欄を非表示にします。\n\n注意: 「ショート」ヘッダーがあるショート欄のみが非表示になります。 ホームフィードや関連動画から非表示 ホームフィードや関連動画から非表示にします。 ホームフィードや関連動画から非表示にします。 @@ -1250,6 +1269,12 @@ DeArrow の詳細については、ここをタップしてください。"スワイプ可能な領域は 50 を超えることはできません。デフォルト値にリセットします。 スワイプオーバーレイのタイムアウト スワイプオーバーレイが表示される時間 (単位: ミリ秒) + 明るさのスワイプ感度 + スワイプして明るさを調整する際の感度を 1 ~ 1000 (%) の間で設定できます。 + 感度は1 ~ 1000 (%)の間でなければなりません。 + 音量のスワイプ感度 + スワイプして音量を調整する際の感度を 1 ~ 1000 (%) の間で設定できます。\n\n推奨される音量スワイプ感度は、15 音量ステップで 100%、150 音量ステップで 10% です。 + 感度は1 ~ 1000 (%)の間でなければなりません。 HDR 動画の明るさ自動調節を無効化 HDR 動画の明るさの自動調節を無効にします。 HDR 動画の明るさの自動調節を無効にします。 @@ -1353,6 +1378,9 @@ DeArrow の詳細については、ここをタップしてください。"コンパクトな高評価ボタン 「高評価」ボタンをコンパクトに表示します。 「高評価」ボタンをコンパクトに表示します。 + 推定の高評価数を表示 + 高評価数が非公開の動画で高評価数を推定して表示します。 + 高評価数が非公開の動画で高評価数を推定して表示します。 API が利用できない場合にトーストを表示 Return YouTube Dislike が利用できない場合にトーストを表示します。 Return YouTube Dislike が利用できない場合にトーストを表示します。 @@ -1365,6 +1393,26 @@ DeArrow の詳細については、ここをタップしてください。"低評価数は一時的に利用できません。 (クライアント API が制限に達しました) 低評価数は一時的に利用できません。(%s) 投票するために Return YouTube Dislike を使用するため、動画を再読み込みします + 非表示 + + Return YouTube Username + Return YouTube Username を有効化 + ユーザー名の表示を復活させます。 + ユーザー名の表示を復活させます。 + 表示形式 + ユーザー名のみ + ユーザー名 + (@ハンドル名) + \@ハンドル名 + (ユーザー名) + YouTube Data API キーを入力 + YouTube Data API v3 を使用するための開発者キーです。 + YouTube Data API キーについて + "ハンドル名をユーザー名に置き換えるには、YouTube Data API v3 の開発者キーが必要です。 + +無料プランの API キーの 1 日あたりの割り当ては 10,000 で、コメント 1 件につきハンドル名をユーザー名に置き換えるのに 1 つの割り当てが使用されます。 + +API キーの発行方法については、ここをタップしてください。" + YouTube Data API v3 の開発者キーを発行 + 1. 「<a href=%1$s>新しいプロジェクトの作成</a>」に移動します。<br>2. 「<b>作成</b>」をタップします。<br>3. 「<a href=%2$s>YouTube Data API v3</a>」に移動します。<br>4. 「<b>有効にする</b>」をタップします。<br>5. 「<b>認証情報を作成</b>」をタップします。<br>6. 「<b>一般公開データ</b>」オプションを選択します。<br>7. 「<b>次へ</b>」をタップします。<br>8. API キーをコピーします。<br><br>※API キーは他人と共有してはならないため、インポート/エクスポート設定には含まれません。 SponsorBlock SponsorBlock を有効化 diff --git a/src/main/resources/youtube/translations/ko-rKR/strings.xml b/src/main/resources/youtube/translations/ko-rKR/strings.xml index 9757f1370e..fd15c6ea48 100644 --- a/src/main/resources/youtube/translations/ko-rKR/strings.xml +++ b/src/main/resources/youtube/translations/ko-rKR/strings.xml @@ -11,6 +11,11 @@ 계속하시겠습니까? 레이아웃을 정상적으로 불러오기 위해 다시 시작합니다. 새로고침 및 다시 시작 + "일부 사용자에게 좋아요, 조회수 및 업로드 날짜와 같은 롤링 넘버 텍스트가 숨겨지는 YouTube 서버 측 문제가 있습니다. + +이 문제에 대한 임시 해결 방법은 앱 버전을 19.13.37로 변경하는 것입니다. + +앱을 다시 시작하기 전에 앱 버전을 변경하시겠습니까?" 일반 동영상 외부 다운로더 앱 패키지명 NewPipe 또는 YTDLnis와 같은 설치된 외부 다운로더 앱 패키지명을 설정하세요. @@ -253,10 +258,6 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." • 썸네일 하단에 '시청자가 이 동영상도 시청함'와 같은 문구가 있는 동영상" 조회수가 낮은 추천 동영상 숨기기 구독하지 않는 채널에서 업로드한 동영상 중 조회수가 1,000회 미만인 동영상이 홈 피드에서 숨겨집니다. - (게시) 예정 동영상 숨기기 - "(게시) 예정 라벨이 있는 동영상이 숨겨집니다. - -알림: 이 설정을 활성화하면 '알림 받기' 버튼도 숨겨집니다." 조회수 필터 홈 피드에서 조회수 필터 활성화하기 @@ -355,6 +356,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 18.33.40 - 이전 Shorts 액션바로 복원합니다. 18.38.45 - 이전 기본 동영상 화질 적용 방식을 복원합니다. 18.48.39 - \'조회수\' & \'좋아요\'의 실시간 업데이트를 비활성화합니다. + 19.13.37 - 이전 롤링 넘버 애니메이션으로 복원합니다. 계정 메뉴 계정 메뉴 및 내 페이지에서 구성요소를 숨기거나 표시할 수 있습니다. @@ -661,6 +663,9 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 줌 오버레이 숨기기 줌 오버레이가 숨겨집니다. 줌 오버레이가 표시됩니다. + 불필요한 동영상 자막 문구 숨기기 + "동영상 자막에서 '#', '모금 행사', '쇼핑', '제품'과 같은 문구가 숨겨집니다." + "동영상 자막에서 '#', '모금 행사', '쇼핑', '제품'과 같은 문구가 표시됩니다." 액션 버튼 플레이어 하단에 있는 액션 버튼을 숨기거나 표시할 수 있습니다. @@ -727,6 +732,9 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 회원별 댓글 배너 숨기기 회원별 댓글 배너가 숨겨집니다. 회원별 댓글 배너가 표시됩니다. + 강조 표시된 검색 링크 숨기기 + 강조 표시된 검색 링크가 숨겨집니다.\n• 돋보기 마크가 있는 파란색 강조 글씨 + 강조 표시된 검색 링크가 표시됩니다.\n• 돋보기 마크가 있는 파란색 강조 글씨 댓글 섹션 숨기기 댓글 섹션이 숨겨집니다. 댓글 섹션이 표시됩니다. @@ -754,6 +762,9 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 토글 유형 변경하기 텍스트 토글으로 표시합니다. 스위치 토글으로 표시합니다. + 1080p Premium 메뉴 숨기기 + 1080p Premium 메뉴가 숨겨집니다. + 1080p Premium 메뉴가 표시됩니다. 오디오 트랙 메뉴 숨기기 오디오 트랙 메뉴가 숨겨집니다. 오디오 트랙 메뉴가 표시됩니다. @@ -865,7 +876,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 공유 버튼이 숨겨집니다. 공유 버튼이 표시됩니다. 빠른 작업 상단 여백 - 재생바에서 빠른 작업 컨테이너까지의 간격을 0-32 사이로 지정할 수 있습니다. + 재생바에서 빠른 작업 컨테이너까지의 간격을 0-32 사이에서 지정할 수 있습니다. 빠른 작업 상단 여백 값은 0-32 사이어야 합니다. 전체 화면에서 세로 모드 활성화하기 @@ -995,9 +1006,12 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 동영상 썸네일 재생바 숨기기 썸네일 재생바가 숨겨집니다. 썸네일 재생바가 표시됩니다. - 재생바 챕터 숨기기 - 재생바에서 챕터가 숨겨집니다. - 재생바에서 챕터가 표시됩니다. + 재생바 챕터 비활성화하기 + 재생바에서 챕터를 비활성화합니다. + 재생바에서 챕터를 활성화합니다. + 재생바 챕터 라벨 숨기기 + 타임스탬프 옆에 표시되는 챕터 라벨이 숨겨집니다. + 타임스탬프 옆에 표시되는 챕터 라벨이 표시됩니다. 타임스탬프 숨기기 타임스탬프가 숨겨집니다. 타임스탬프가 표시됩니다. @@ -1072,6 +1086,12 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." • 이전에 시청한 동영상 • 관련 검색어의 검색결과 • 새로운 맞춤 채널 ..." + 채널에서 숨기기 + "채널에서 숨겨집니다. + +알림: +• 홈 탭에 있는 Shorts 헤더 선반만 숨겨집니다." + 채널에서 표시됩니다. 홈 피드 및 관련 동영상에서 Shorts 선반 숨기기 홈 피드 및 관련 동영상에서 Shorts 선반이 숨겨집니다. 홈 피드 및 관련 동영상에서 Shorts 선반이 표시됩니다. @@ -1210,7 +1230,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 타임스탬프 길게 누르기 동작 타임스탬프를 길게 눌러서 Shorts 반복 상태를 변경할 수 있습니다. 메타 패널 하단 여백 - 재생바에서 메타 패널까지의 간격을 0-64 사이로 지정할 수 있습니다. + 재생바에서 메타 패널까지의 간격을 0-64 사이에서 지정할 수 있습니다. 메타 패널 하단 여백은 0-64 사이여야 합니다. 툴바 숨기기 툴바가 숨겨집니다. @@ -1219,7 +1239,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 하단바가 숨겨집니다. 하단바가 표시됩니다. 빈 공간의 높이 비율 - 하단바가 숨겨졌을 때, 남는 빈 공간의 높이 비율을 0에서 100사이로 지정할 수 있습니다 (백분율). + 하단바가 숨겨졌을 때, 남는 빈 공간의 높이 비율을 0-100 사이에서 지정할 수 있습니다. (백분율) 높이 비율은 0-100 사이어야 합니다 (백분율). 채널 핸들 변경하기 채널 이름을 사용합니다. @@ -1258,6 +1278,12 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 스와이프 영역 크기는 50 보다 클 수 없습니다. 오버레이 타임아웃 오버레이가 표시되는 시간을 지정할 수 있습니다. (밀리초) + 밝기 스와이프 감도 + 밝기 스와이프의 최소 거리를 1-1000 사이에서 지정할 수 있습니다. (퍼센트)\n\n최소 거리가 짧을수록 밝기 레벨이 더 빠르게 변경됩니다. + 밝기 스와이프 감도는 1-1000 사이어야 합니다. (퍼센트) + 볼륨 스와이프 감도 + 볼륨 스와이프의 최소 거리를 1-1000 사이에서 지정할 수 있습니다. (퍼센트)\n\n최소 거리가 짧을수록 볼륨 레벨이 더 빨리 변경됩니다.\n\n권장 볼륨 스와이프 감도는 15단계 볼륨에서 100%, 150단계 볼륨에서 10%입니다. + 볼륨 스와이프 감도는 1-1000 사이어야 합니다. (퍼센트) HDR 자동 밝기 비활성화하기 HDR 자동 밝기를 비활성화합니다. HDR 자동 밝기를 활성화합니다. @@ -1358,6 +1384,9 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 좋아요 버튼에서 구분선 숨기기 좋아요 버튼에서 구분선을 표시하지 않습니다. 좋아요 버튼에서 구분선을 표시합니다. + 추정되는 좋아요 수 표시하기 + 좋아요 수가 숨겨진 동영상에서 추정되는 좋아요 수를 표시합니다. + 좋아요 수가 숨겨진 동영상에서 추정되는 좋아요 수를 표시하지 않습니다. API를 사용할 수 없을 때, 팝업 메시지 표시하기 ReturnYouTubeDislike를 사용할 수 없을 때, 팝업 메시지를 표시합니다. ReturnYouTubeDislike를 사용할 수 없을 때, 팝업 메시지를 표시하지 않습니다. @@ -1370,6 +1399,26 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 싫어요 수를 표시할 수 없습니다 (클라이언트 API 제한 도달). 싫어요 수를 표시할 수 없습니다 (%s). Return YouTube Dislike를 사용하여 투표하려면 동영상을 다시 로드하세요. + 숨겨짐 + + Return YouTube Username + Return YouTube Username 활성화하기 + 사용자 이름을 사용합니다. + 핸들(@사용자 아이디)을 사용합니다. + 표시 형식 + 사용자 이름 + 사용자 이름 (핸들) + 핸들 (사용자 이름) + YouTube Data API Key + YouTube Data API v3를 사용하기 위한 Developer Key입니다. + YouTube Data API Key에 대한 정보 + "핸들을 사용자 이름으로 변경하려면 YouTube Data API v3 Developer Key가 필요합니다. + +무료 요금제에서 API Key의 일일 할당량은 10,000개이며, 1개의 할당량은 댓글 1개에 대해 핸들을 사용자 이름으로 변경하는 데 사용됩니다. + +API Key를 발급받는 방법을 보려면 여기를 누르세요." + YouTube Data API v3 Developer Key 발급받기 + 1. <a href=%1$s>새 프로젝트 만들기</a> 로 이동합니다.<br>2. <b>만들기</b> 버튼을 터치합니다.<br>3. <a href=%2$s>YouTube Data API v3</a> 로 이동합니다.<br>4. <b>사용</b> 버튼을 터치합니다.<br>5. <b>사용자 인증 정보 만들기</b> 버튼을 터치합니다.<br>6. <b>공개 데이터</b> 옵션을 선택합니다.<br>7. <b>다음</b> 버튼을 터치합니다.<br>8. API Key를 복사합니다.<br><br>※ API Key는 다른 사람과 공유해서는 안 되므로 가져오기 / 내보내기 설정에 포함되지 않습니다. SponsorBlock SponsorBlock 활성화하기 diff --git a/src/main/resources/youtube/translations/pl-rPL/strings.xml b/src/main/resources/youtube/translations/pl-rPL/strings.xml index a0940efba0..1e57fc76e7 100644 --- a/src/main/resources/youtube/translations/pl-rPL/strings.xml +++ b/src/main/resources/youtube/translations/pl-rPL/strings.xml @@ -11,6 +11,11 @@ Czy chcesz kontynuować? Uruchom ponownie, aby wczytać poprawnie układ aplikacji Odśwież i uruchom ponownie + "Istnieje błąd po stronie serwera YouTube, który u niektórych użytkowników powoduje ukrywanie się tekstu liczb posiadających animację, takich jak polubienia, wyświetlenia, daty opublikowania filmów. + +Tymczasowym obejściem dla tego błędu jest oszukanie wersji aplikacji do 19.13.37. + +Czy chcesz oszukać wersję aplikacji przed ponownym uruchomieniem?" Normalna Nazwa pakietu aplikacji od pobierania (filmy) Nazwa pakietu zainstalowanej zewnętrznej aplikacji od pobierania, takiej jak NewPipe lub YTDLnis. @@ -250,10 +255,6 @@ Ograniczenia: • Filmy z takimi frazami jak 'Inne osoby również obejrzały' u dołu filmu" Ukryj filmy z małą ilością wyświetleń Ukrywa filmy poniżej 1000 wyświetleń ze strony głównej, które zostały przesłane z niesubskrybowanych kanałów. - Ukryj zaplanowane filmy - "Ukryj filmy z etykietą WKRÓTCE. - -Uwaga: Włączenie tego ustawienia ukryje też przycisk 'Powiadom mnie'." Filtr ilości wyświetleń Na stronie głównej @@ -357,6 +358,7 @@ Jeśli później zostanie to wyłączone, rekomendowane jest usunięcie danych a 18.33.40 - Przywraca stary pasek akcji Shortsów 18.38.45 - Przywraca stare zachowanie domyślnej jakości filmu 18.48.39 - Wyłącza aktualizowanie wyświetleń i łapek w górę w czasie rzeczywistym + 19.13.37 - Przywraca stary styl animacji liczb Menu konta Ukryj bądź pokaż elementy w menu konta i zakładki Ty @@ -663,6 +665,9 @@ Autoodtwarzanie można zmienić w ustawieniach YouTube: Poświata przy powiększaniu filmu Ukryta Widoczna + Oczyść napisy w filmach + "Frazy takie jak '#', 'Zbiórka', 'Sklep' i 'Produkty' są ukryte" + "Frazy takie jak '#', 'Zbiórka', 'Sklep' i 'Produkty' są widoczne" Przyciski akcji Ukryj lub pokazuj przyciski akcji pod odtwarzaczem @@ -729,6 +734,9 @@ Autoodtwarzanie można zmienić w ustawieniach YouTube: Banery z komentarzami sponsorów Ukryte Widoczne + Najciekawsze wyniki wyszukiwania (linki) + Ukryte + Widoczne Komentarze Ukryte Widoczne @@ -756,6 +764,9 @@ Autoodtwarzanie można zmienić w ustawieniach YouTube: Wygląd przełączników Tekst Przełączniki + Menu jakości 1080p Premium + Ukryte + Widoczne Menu od ścieżki dźwiękowej Ukryte Widoczne @@ -995,9 +1006,12 @@ Stuknij i przytrzymaj, by cofnąć generowanie playlisty." Paski postępu filmu na stronie głównej Ukryte Widoczne - Rozdziały w pasku postępu filmu - Ukryte - Widoczne + Rozdziały w pasku postępu filmu + Wyłączone + Włączone + Nazwy rozdziałów obok czasu filmu + Ukryte + Widoczne Czas filmu Ukryty Widoczny @@ -1066,6 +1080,12 @@ Opcja rozwijania opisu filmu może nie działać, jeśli wprowadzony ciąg znak "Ukrywa półki z Shortsami. Ograniczenie: Nagłówki z tytułami będą ukryte w wynikach wyszukiwania." + Na stronie kanału + "Ukryte + +Informacja: +• Tylko półki z nagłówkiem Shorts będą ukryte na stronie głównej kanału" + Widoczne Na stronie głównej i między powiązanymi filmami Ukryte Widoczne @@ -1252,6 +1272,12 @@ Ograniczenia: Rozmiar obszaru przesuwania nie może być większy niż 50. Limit czasu widoczności nakładki Ilość milisekund, przez które nakładka jest widoczna + Czułość przesuwania jasności + Skonfiguruj minimalną odległość dla przesuwania jasności, pomiędzy 1 a 1000 (%).\nIm mniejsza minimalna odległość, tym szybciej zmienia się poziom jasności. + Czułość przesuwania gestu jasności musi być pomiędzy 1 a 1000 (%). + Czułość przesuwania głośności + Skonfiguruj minimalną odległość dla przesuwania głośności, pomiędzy 1 a 1000 (%).\n\nIm mniejsza minimalna odległość, tym szybciej zmienia się poziom głośności.\n\nZalecana czułość przesuwania głośności wynosi 100% przy 15 krokach głośności i 10% przy 150 krokach głośności. + Czułość przesuwania gestu głośności musi być pomiędzy 1 a 1000 (%). Automatyczna jasność w filmach z HDR Wyłączona Włączona @@ -1351,9 +1377,12 @@ Ograniczenie: Liczba łapek w dół może nie być widoczna, gdy użytkownik nie Łapki w dół wyświetlane jako procent Tak Liczba - Przycisk łapki w górę jest kompaktowy + Kompaktowy przycisk łapki w górę Przycisk łapki w górę zajmuje mało miejsca Przycisk łapki w górę ładnie wygląda + Szacowana ilość polubień + Widoczna + Ukryta Komunikat, jeśli API jest niedostępne Widoczny Ukryty @@ -1366,6 +1395,26 @@ Ograniczenie: Liczba łapek w dół może nie być widoczna, gdy użytkownik nie Liczba łapek w dół nie jest dostępna (limit API użytkownika został osiągnięty). Liczba łapek w dół nie jest dostępna (%s). Odśwież film, aby zagłosować używając Return YouTube Dislike + Ukryte + + Return YouTube Username + Return YouTube Username + Włączone + Wyłączone + Format wyświetlania + Nazwa użytkownika + Nazwa użytkownika (@nick) + \@nick (Nazwa użytkownika) + Klucz YouTube Data API + Klucz deweloperski używany do korzystania z API YouTube Data V3. + O kluczu YouTube Data API + "Klucz deweloperski YouTube Data API v3 jest wymagany do zastępowania nicków nazwami użytkownika. + +Dzienny limit kluczy API w planie darmowym wynosi 10 000, a 1 limit służy do zastąpienia nicku nazwą użytkownika dla 1 komentarza. + +Kliknij, by zobaczyć, jak zgłosić klucz API." + Zgłoś klucz deweloperski YouTube Data API + 1. Przejdź do <a href=%1$s>Utwórz nowy projekt</a>.<br>2. Kliknij przycisk <b>UTWÓRZ</b><br>3. Przejdź do <a href=%2$s>YouTube Data API v3</a>.<br>4. Kliknij przycisk <b>WŁĄCZ</b><br>5. Kliknij przycisk <b>UTWÓRZ DANE LOGOWANIA</b><br>6. Wybierz opcję <b>Dane publiczne</b><br>7. Kliknij przycisk <b>DALEJ</b><br>8. Skopiuj klucz API<br><br>※ Klucz API nie powinien być współdzielony z innymi, dlatego nie jest zawarty w ustawieniach importu/eksportu SponsorBlock SponsorBlock diff --git a/src/main/resources/youtube/translations/pt-rBR/strings.xml b/src/main/resources/youtube/translations/pt-rBR/strings.xml index e7806b76d2..c7958699b6 100644 --- a/src/main/resources/youtube/translations/pt-rBR/strings.xml +++ b/src/main/resources/youtube/translations/pt-rBR/strings.xml @@ -5,12 +5,17 @@ Seus controles foram modificados porque um serviço de acessibilidade está ativado. ReVanced Extended - Buscar %s + Pesquisar %s Redefinir para os valores padrão. Sinalizadores experimentais Você deseja continuar? Reinicie para carregar o layout normalmente Atualizar e reiniciar + "Há um bug do lado do servidor do YouTube que faz com que o texto de números contínuos, como curtidas, visualizações e datas de upload, fique oculto para alguns usuários. + +Uma solução temporária para esse problema é falsificar a versão do aplicativo para 19.13.37. + +Você quer falsificar a versão do aplicativo antes de reiniciá-lo?" Normal Nome do pacote do aplicativo de download de vídeo Nome do pacote do seu aplicativo de download externo instalado, como NewPipe ou YTDLnis. @@ -250,10 +255,6 @@ Limitações: • Vídeos enviados de canais não inscritos com menos de 1,000 visualizações" Ocultar vídeos com baixas visualizações Ocultar vídeos com menos de 1.000 visualizações do feed de início que foram enviadas de canais não inscritos. - Ocultar PRÓXIMO vídeo - "Ocultar vídeos com a etiqueta PRÓXIMO. - -Nota: Ativar isso também oculta o botão Notificar-me." Filtro por contagem de visualização Ocultar vídeos no feed de início por visualizações @@ -357,6 +358,7 @@ Se for desativado posteriormente, é recomendável limpar os dados do aplicativo 18.33.40 - Restaurar barra de ação antiga do shorts 18.38.45 - Restaurar antigo comportamento padrão de qualidade de vídeo 18.48.39 - Desativa a atualização em tempo real de \'visualizações\' e \'curtidas\' + 19.13.37 - Restaura as animações de números de rolagem do antigo estilo Menu da Conta Ocultar ou mostrar elementos no menu de contas e na aba Você. @@ -662,6 +664,9 @@ A reprodução automática pode ser alterada nas configurações do YouTube: Ocultar sobreposição de zoom A sobreposição de zoom está oculta. A sobreposição de zoom será exibida. + Limpar legendas de vídeo + "Frases como '#', 'Arrecadação de fundos', 'Loja' e 'produtos' foram ocultadas das legendas do vídeo." + "Frases como '#', 'Arrecadação de fundos', 'Loja' e 'produtos' serão exibidos nas legendas do vídeo." Botões de ação Ocultar ou mostrar botões de ação sob os vídeos. @@ -728,6 +733,9 @@ A reprodução automática pode ser alterada nas configurações do YouTube: Ocultar banner de comentários de membros O banner de comentários de membros estão ocultos. O banner de comentários de membros serão exibidos. + Ocultar links de pesquisa em destaque + Os links de pesquisa em destaque estão ocultos. + Os links de pesquisa em destaque serão exibidos. Ocultar seção de comentários A seção de comentários está oculta. A seção de comentários será exibida. @@ -755,6 +763,9 @@ A reprodução automática pode ser alterada nas configurações do YouTube: Modificar tipo de alternância Alternadores de texto são usados. Alternadores serão usados. + Ocultar o menu 1080p Premium + O menu 1080p Premium está oculto. + O menu 1080p Premium será exibido. Ocultar menu faixa de áudio O menu faixa de áudio está oculto. O menu faixa de áudio será exibido. @@ -995,9 +1006,12 @@ Toque e segure para desfazer." Ocultar barra de progresso nas miniaturas do vídeo A barra de progresso em miniaturas está oculta. A barra de progresso em miniaturas será exibida. - Ocultar capítulos na barra de progresso - Os capítulos estão ocultos na barra de progresso. - Os capítulos serão exibidos na barra de progresso. + Desativar capítulos na barra de progresso + Os capítulos na barra de progresso estão desativados. + Os capítulos na barra de progresso estão ativados. + Ocultar rótulos dos capítulos na barra de progresso + Os rótulos dos capítulos ao lado da marcação de tempo estão ocultos. + Os rótulos dos capítulos ao lado da marcação de tempo serão exibidos. Ocultar marcação de tempo A marcação de tempo está oculta. A marcação de tempo será exibida. @@ -1067,6 +1081,12 @@ Estes caracteres variam dependendo do seu idioma. "Oculta o painel de shorts. Limitação: Os cabeçalhos oficiais nos resultados da pesquisa serão ocultados." + Ocultar no canal + "Oculto no canal. + +info: +• Somente painéis com o cabeçalho Shorts na aba home são ocultadas." + Exibindo no canal. Ocultar no feed de início e em vídeos relacionados Oculto no feed de início e em vídeos relacionados. Exibindo no feed de início e em vídeos relacionados. @@ -1251,6 +1271,12 @@ Problema conhecido: como se trata de um recurso em fase de desenvolvimento pelo O tamanho da área deslizável não pode ser maior que 50. Redefinir ao valor padrão. Tempo limite da sobreposição de gestos A quantidade de milissegundos em que a sobreposição é visível. + Sensibilidade de deslizar brilho + Configure a sensibilidade do deslize para o brilho entre 1 e 1000 (%). + A sensibilidade de deslizamento de brilho deve estar entre 1-1000 (%). + Sensibilidade de deslizar volume + Configure a sensibilidade do movimento de deslizar o volume entre 1 e 1000 (%).\nA sensibilidade do movimento de deslizar o volume recomendada é de 100% em etapas de 15 volumes e 10% em etapas de 150 volumes. + A sensibilidade do deslizamento de volume deve estar entre 1-1000 (%). Desativar brilho automático HDR O brilho automático HDR está desativado. O brilho automático HDR está ativado. @@ -1352,6 +1378,9 @@ Limitação: Dislikes pode não aparecer no modo incógnito." Botão de curtir compacto O botão curtir estilizado para largura mínima. O botão curtir estilizado para melhor aparência. + Exibir curtidas estimadas + As curtidas estimadas serão exibidas. + As curtidas estimadas estão ocultas. Exibir uma notificação flutuante se a API não estiver disponível Uma notificação flutuante é exibida se o Retorn YouTube Dislike não estiver disponível. Uma notificação flutuante não é exibida se o Retorn YouTube Dislike não estiver disponível. @@ -1364,6 +1393,26 @@ Limitação: Dislikes pode não aparecer no modo incógnito." Dislikes indisponível (limite da API do cliente atingido). Deslikes indisponível (%s). Recarregue o vídeo para votar usando o Return YouTube Dislike + Oculto + + Return YouTube Username + Ativar Return YouTube Username + Username é utilizado. + O identificador é utilizado. + Formato de exibição + Nome de usuário + Nome de usuário (@identificador) + \@identificador (Nome de usuário) + Chave API dos Dados do YouTube + A chave de desenvolvedor para usar a API de Dados do YouTube v3. + Sobre a chave API de dados do YouTube + "A Chave de desenvolvedor da API de dados do YouTube v3 é necessária para substituir o identificador por nome de usuário. + +A cota diária para chaves de API no plano gratuito é de 10.000, e 1 cota é usada para substituir o identificador por nome de usuário para 1 comentário. + +Clique para ver como emitir uma chave de API." + Emitir chave de desenvolvedor da API de dados do YouTube v3 + 1. Vá para <a href=%1$s>Criar um novo projeto</a>.<br>2. Clique no botão <b>CRIAR</b>.<br>3. Vá para <a href=%2$s>API de dados do YouTube v3</a>.<br>4. Clique no botão <b>ATIVAR</b>.<br>5. Clique no botão <b>CRIAR CREDENCIAIS</b>.<br>6. Selecione a opção <b>Dados públicos</b>.<br>7. Clique no botão <b>PRÓXIMO</b>.<br>8. Copie a chave da API.<br><br>※ A chave da API nunca deve ser compartilhada com outras pessoas, portanto, ela não é incluída nas configurações de Importação/Exportação. SponsorBlock Ativar SponsorBlock diff --git a/src/main/resources/youtube/translations/ru-rRU/strings.xml b/src/main/resources/youtube/translations/ru-rRU/strings.xml index c5337858cb..0e66d6ee45 100644 --- a/src/main/resources/youtube/translations/ru-rRU/strings.xml +++ b/src/main/resources/youtube/translations/ru-rRU/strings.xml @@ -254,9 +254,6 @@ Shorts • С каналов, на которые вы не подписаны (менее 1000 просмотров)." Скрыть видео с низкими просмотрами Скрыть видео с менее 1000 просмотров из ленты, из каналов от которых Вы отписались. - Подготовленное видео - "Скрывает видео с меткой \"подготовленное\" к воспроизведению. -Примечание: Также скроется кнопка \"Уведомить\"." Фильтр по количеству просмотров Фильтр видео в \"Главная\" по просмотрам @@ -367,6 +364,7 @@ Shorts 18.33.40 - Восстановление старой панели действий Shorts 18.38.45 - Восстановление старого поведения качества видео по умолчанию 18.48.39 - Отключение обновления \"просмотров\" и \"лайков\" в реальном времени + 19.13.37 - Старый стиль анимаций - вращающиеся цифры Меню аккаунта Настройка меню аккаунта и вкладки Вы. @@ -673,6 +671,9 @@ Shorts Увеличение наложения Увеличение наложения отключено. Увеличение наложения включено. + Фильтр фраз в субтитрах + "Фильтр фраз типа \"#\", \"Магазин\" и \"N продуктов\" в субтитрах отключен." + "Фильтр фраз типа \"#\", \"Магазин\" и \"N продуктов\" в субтитрах включен." Кнопки действий под видео Настройка кнопок действий под видео. @@ -739,6 +740,9 @@ Shorts Баннер \"Комментарии участников\" Баннер \"Комментарии участников\" скрыт. Баннер \"Комментарии участников\" отображен. + Подсвеченные ссылки поиска + Подсвеченные ссылки поиска скрыты. + Подсвеченные ссылки поиска отображены. Секция \"Комментарии\" Секция комментариев скрыта. Секция комментариев отображена. @@ -766,6 +770,9 @@ Shorts Изменить тип переключателя Текущий переключатель - Текстовый. Текущий переключатель - Визуальный. + Меню 1080p Premium + Меню 1080p Premium скрыто. + Меню 1080p Premium отображено. Меню \"Звуковая дорожка\" Меню \"Звуковая дорожка\" скрыто. Меню \"Звуковая дорожка\" отображено. @@ -1005,9 +1012,12 @@ Shorts Миниатюры шкалы воспроизведения Миниатюры шкалы воспроизведения скрыты. Миниатюры шкалы воспроизведения отображены. - Главы в шкале воспроизведения - Главы в шкале воспроизведения скрыты. - Главы в шкале воспроизведения отображены. + Главы в шкале воспроизведения + Главы в шкале воспроизведения скрыты. + Главы в шкале воспроизведения отображены. + Метки глав в шкале воспроизведения + Метки глав в шкале воспроизведения скрыты. + Метки глав в шкале воспроизведения отображены. Метка времени Метка времени скрыта. Метка времени отображена. @@ -1029,9 +1039,9 @@ Shorts Секция \"Атрибуты\" Секция \"Атрибуты\" (Особенные места, Игры, Музыка) скрыта. Секция \"Атрибуты\" (Особенные места, Игры, Музыка) отображена. - Секция \"Главы\" - Секция \"Главы\" скрыта. - Секция \"Главы\" отображена. + Главы + Главы скрыты. + Главы отображены. Секция содержимого Секция содержимого скрыта. Секция содержимого отображена. @@ -1079,6 +1089,12 @@ Shorts Ограничения: Официальные заголовки в результатах поиска будут скрыты." + Скрывать в канале + "Скрыто в канале. + +Информация: +• Скрыты только полки с заголовком Shorts на домашней вкладке." + Показано в канале. Shorts в ленте и похожих видео В ленте и похожих видео скрыты. В ленте и похожих видео отображены. @@ -1232,7 +1248,7 @@ Shorts Процент высоты отступа Настраивает высоту отступа, когда панель навигации скрыта, от 0 до 100 (%). Высота должна быть от 0 до 100 (%). - Заменить дескриптор канала + Заменить псевдоним канала Используется имя канала. Используется псевдоним канала. @@ -1269,6 +1285,14 @@ Shorts Размер области для жеста больше 50 %. Сброс по умолчанию. Таймаут наложения при жесте Количество миллисекунд отображения наложения. + Чувствительность жеста яркости + Настройка чувствительности жеста яркости от 1 до 1000 (%). + Значение должно быть от 1 до 1000 (%). + Чувствительность жеста громкости + Настройка чувствительности жеста громкости от 1 до 1000 (%). + +Рекомендованная чувствительность жеста 100% при шаге 15 громкости и 10% при шаге 150 громкости. + Значение должно быть от 1 до 1000 (%). Автояркость HDR Автояркость HDR отключена. Автояркость HDR включена. @@ -1373,6 +1397,9 @@ Shorts Компактная кнопка \"Лайк\" Компактная кнопка \"Лайк\" включена. Компактная кнопка \"Лайк\" отключена. + Соотношение лайков + Соотношение лайков отображено. + Соотношение лайков скрыто. Уведомление при недоступности Return YouTube Dislike API Уведомление при недоступности Return YouTube Dislike API включено. Уведомление при недоступности Return YouTube Dislike API отключено. @@ -1385,6 +1412,26 @@ Shorts Return YouTube Dislike недоступен (достигнут лимит клиента API). Return YouTube Dislike недоступен (%s). Обновите видео для использования Return YouTube Dislike + Скрыто владельцем + + Имя пользователя YouTube - \"RYU\" + Включить Имя пользователя YouTube - \"RYU\" + Имя пользователя YouTube включено. + Имя пользователя YouTube отключено. + Вид отображения + Имя пользователя + Имя пользователя (@псевдоним) + \@псевдоним (Имя пользователя) + Ключ \"RYU\" Data API + Ключ разработчика для \"RYU\" Data API v3. + О ключе \"RYU\" Data API + "Ключ разработчика \"Return YouTube Username\" (RYU) API Data v3 необходим для замены псевдонима на имя пользователя. + +Ежедневная, бесплатная, квота ключей API составляет 10 000, и 1 квота используется для замены псевдонима на имя пользователя для комментария. + +Нажмите, чтобы увидеть, как выпустить API ключ." + Проблема с ключом разработчика \"RYU\" Data API v3 + 1. Перейдите <a href=\"%1$s\">Новый проект</a>.<br>2. Нажмите <b>Создать</b>.<br>3. Перейдите <a href=\"%2$s\">YouTube Data API v3</a>.<br>4. Нажмите <b>Включить</b>.<br>5. Нажмите <b>Создать учетные данные</b>.<br>6. Выберите <b>Публичные данные</b>.<br>7. Нажмите <b>Далее</b>.<br>8. Скопируйте ключ API.<br><br>※ Ключом API нельзя поделиться, поэтому он не доступен в настройках Импорт/Экспорт. SponsorBlock Включить SponsorBlock diff --git a/src/main/resources/youtube/translations/tr-rTR/strings.xml b/src/main/resources/youtube/translations/tr-rTR/strings.xml index c16e4f01dd..398387c873 100644 --- a/src/main/resources/youtube/translations/tr-rTR/strings.xml +++ b/src/main/resources/youtube/translations/tr-rTR/strings.xml @@ -834,9 +834,6 @@ Geri almak için dokunun ve basılı tutun." Kapak fotoğraflarındaki zaman çubuğunu gizle Gizleniyor Gizlenmiyor - Zaman çubuğu açıklamalarını gizle - Zaman çubuğunda bölümler gizli. - Zaman çubuğunda bölümler gizlenmiyor. Video süre sayacını gizle Gizleniyor Süre sayacı gösteriliyor @@ -1153,6 +1150,7 @@ Kısıtlama: Gizli modda beğenmeme sayıları görünmeyebilir." Beğenmeme sayısı mevcut değil (istemci API sınırına ulaşıldı). Beğenmemeler mevcut değil (%s). ReturnYouTubeDislike\'ı kullanarak oy vermek için videoyu yeniden yükleyin + SponsorBlock SponsorBlock\'u etkinleştir diff --git a/src/main/resources/youtube/translations/uk-rUA/strings.xml b/src/main/resources/youtube/translations/uk-rUA/strings.xml index ecaecf2641..829ee002a7 100644 --- a/src/main/resources/youtube/translations/uk-rUA/strings.xml +++ b/src/main/resources/youtube/translations/uk-rUA/strings.xml @@ -11,6 +11,11 @@ Бажаєте продовжити? Перезапустіть, щоб нормально завантажився макет Поновити й перезапустити + "Помилка зі сторони сервера YouTube спричиняє приховування тексту лічильників таких як вподобайки, перегляди, та дати завантаження для деяких користувачів. + +Тимчасовим вирішенням цієї проблеми є підміна версії програми на 19.13.37. + +Бажаєте підмінити версію програми перед перезапуском програми?" Стандартна Ім\'я пакета завантажувача відео Ім\'я пакета встановленого зовнішнього завантажувача, наприклад NewPipe або YTDLnis. @@ -250,10 +255,6 @@ • Відео з фразами на кшталт 'Людей також дивилися' внизу." Приховати відео з малою кількістю переглядів Приховати відео з менш ніж 1,000 переглядів з головної стрічки, вантажені з каналів, на які не підписані. - Приховати відео НЕЗАБАРОМ - "Приховати відео з міткою НЕЗАБАРОМ. - -Примітка: Увімкнення також приховає кнопку Сповістити." Фільтр за кількістю переглядів Приховати відео на головній за переглядами @@ -357,6 +358,7 @@ 18.33.40 - відновлення старої панелі дій Shorts 18.38.45 - Відновлення старої поведінки типової якості відео 18.48.39 - Виключає \'переглянуті\' та \'вподобані\' з оновлення в режимі реального часу + 19.13.37 - Відновлення старого стилю анімації лічильників Меню облікового запису Приховувати чи показувати елементи меню облікового запису і вкладки Ви. @@ -662,6 +664,9 @@ Приховати накладання при масштабуванні Накладання при масштабуванні приховано. Накладання при масштабуванні показується. + Обробляти субтитри відео + "Фрази типу '#', 'Збір коштів', 'Магазин' та 'товари' приховано з субтитрів відео." + "Фрази типу '#', 'Збір коштів', 'Магазин' та 'товари' показується в субтитрах відео." Кнопки дії Приховувати чи показувати кнопки дії під відео. @@ -728,6 +733,9 @@ Приховати банер \'Коментарі спонсорів\' Банер \'Коментарі спонсорів\' приховано. Банер \'Коментарі спонсорів\' показується. + Приховати виділені пошукові посилання + Виділені пошукові посилання приховано. + Виділені пошукові посилання показується. Приховати секцію Коментарі Секцію коментарів приховано. Секцію коментарів показується. @@ -755,6 +763,9 @@ Тип перемикача змін Використовується текстові перемикачі. Використовується змінні перемикачі. + Приховати меню Premium 1080p + Меню Premium 1080p приховано. + Меню Premium 1080p показується. Приховати меню звукової доріжки Меню звукової доріжки приховано. Меню звукової доріжки показується. @@ -994,9 +1005,12 @@ Приховати мініатюри панелі прогресу у відео Мініатюру панелі прогресу приховано. Мініатюру панелі прогресу показується. - Приховати розділи панелі прогресу - Розділи приховано у панелі прогресу. - Розділи показується у панелі прогресу. + Вимкнути розділи панелі прогресу + Розділи вимкнено у панелі прогресу. + Розділи ввімкнено у панелі прогресу. + Приховати мітки розділів панелі прогресу + Мітки розділів біля мітки часу приховано. + Мітки розділів біля мітки часу показується. Приховати мітку часу Мітку часу приховано. Мітку часу показується. @@ -1066,6 +1080,12 @@ "Приховується полиці Shorts. Відома проблема: Офіційні заголовки в результатах пошуку приховуватиметься." + Приховати у каналі + "Приховується в каналі. + +Інформація: +• Лише полиці з заголовком Shorts на головній вкладці приховано." + Показується в каналі. Приховати у головній стрічці та пов\'язаних відео Приховано у головній стрічці та пов\'язаних відео. Показується у головній стрічці та пов\'язаних відео. @@ -1252,6 +1272,12 @@ Розмір площі для проведення не може бути більшим ніж 50. Час показу панелі Скільки мілісекунд панель буде показуватися + Чутливість жесту яскравості + Налаштуйте мінімальну відстань жесту яскравості від 1 до 1000 (%).\nЧим менша мінімальна відстань, тим швидше змінюється рівень яскравості. + Чутливість жесту яскравості повинна бути в межах 1-1000 (%). + Чутливість жесту гучності + Налаштуйте мінімальну відстань жесту гучності від 1 до 1000 (%).\n\nЧим менша мінімальна відстань, тим швидше змінюється рівень гучності.\n\nРекомендована чутливість жесту гучності 100% при 15 поділках і 10% при 150 поділках. + Чутливість жесту гучності повинна бути в межах 1-1000 (%). Вимкнути авто яскравість HDR Авто яскравість HDR вимкнено. Авто яскравість HDR увімкнено. @@ -1353,6 +1379,9 @@ Компактна кнопка Подобається Кнопку Подобається стилізовано під мінімальну ширину. Кнопку Подобається стилізовано для кращого вигляду. + Показувати розрахункові лайки + Розрахункові лайки показується. + Розрахункові лайки приховано. Показувати тост, якщо не доступний API Тост показується, якщо Повернення дизлайків YouTube не доступне. Тост не показується, якщо Повернення дизлайків YouTube не доступне. @@ -1365,6 +1394,26 @@ Дизлайки недоступні (досягнутий ліміт клієнта API) Дизлайки недоступні (%s). Перезавантажте відео, щоб голосувати використовуючи Повернення дизлайків YouTube + Приховано + + Повернення назви користувача YouTube + Ввімкнути Повернення назви користувача YouTube + Використовується назву користувача. + Використовується ідентифікатор. + Формат відображення + Назва користувача + Назва користувача (@ідентифікатор) + \@ідентифікатор (Назва користувача) + Ключ YouTube Data API + Ключ розробника для використання YouTube Data API v3. + Про ключ YouTube Data API + "Ключ розробника YouTube Data API v3 потрібен для заміни Ідентифікатора на Назву користувача. + +Щоденна квота для ключів API на безкоштовному тарифі становить 10,000, і 1 квота використовується для заміни Ідентифікатора на Назву користувача для 1 коментаря. + +Натисніть щоб побачити як створити ключ API." + Створення ключа розробника YouTube Data API v3 + 1. Перейдіть до <a href=%1$s>Створення нового проекту</a>.<br>2. Натисніть кнопку <b>CREATE</b>.<br>3. Перейдіть до <a href=%2$s>YouTube Data API v3</a>.<br>4. Натисніть кнопку <b>ENABLE</b>.<br>5. Натисніть кнопку <b>CREATE CREDENTIALS</b>.<br>6. Виберіть опцію <b>Public data</b>.<br>7. Натисніть кнопку <b>NEXT</b>.<br>8. Скопіюйте ключ API.<br><br>※ Ключ API не можна поширювати, тому він не включений у Імпорт / Експорт налаштувань. Спонсорблок Увімкнути Спонсорблок diff --git a/src/main/resources/youtube/translations/vi-rVN/strings.xml b/src/main/resources/youtube/translations/vi-rVN/strings.xml index 63a61968c8..30ee0928a7 100644 --- a/src/main/resources/youtube/translations/vi-rVN/strings.xml +++ b/src/main/resources/youtube/translations/vi-rVN/strings.xml @@ -11,14 +11,19 @@ Bạn có muốn tiếp tục không? Vui lòng khởi động lại ứng dụng trong lần đầu khởi chạy để các tính năng hoạt động bình thường Làm mới và khởi động lại + "Hiện có một lỗi phía máy chủ YouTube khiến các văn bản dạng số cuộn như số lượt thích, số lượt xem và ngày tải lên bị ẩn đối với một số người dùng. + +Giải pháp tạm thời cho sự cố này là giả mạo phiên bản ứng dụng thành 19.13.37. + +Bạn có muốn giả mạo phiên bản ứng dụng trước khi khởi động lại ứng dụng không?" Bình thường Tên gói trình tải xuống video Nhập tên gói ứng dụng trình tải xuống đã cài đặt trên thiết bị của bạn, chẳng hạn như NewPipe hoặc YTDLnis. - Trình tải xuống bên ngoài - Cảnh báo - "%1$s chưa được cài đặt. + Trình tải xuống bên thứ ba + Chú ý + "Có vẻ như %1$s chưa được cài đặt. Vui lòng tải xuống %2$s từ trang web." - %s chưa được cài đặt. Hãy cài đặt và thử lại. + Hiện %s chưa được cài đặt. Hãy cài đặt và thử lại. Quảng cáo Ẩn quảng cáo toàn màn hình @@ -56,7 +61,7 @@ Thẻ Trang chủ Thẻ Kênh đăng ký Thẻ Bạn - Danh sách phát, video đề xuất, video liên quan + Danh sách phát của trình phát, đề xuất Kết quả tìm kiếm Hình thu nhỏ gốc DeArrow & Hình thu nhỏ gốc @@ -70,14 +75,14 @@ Nếu được bật, chỉ có URL video được gửi đến máy chủ API, Nhấn vào đây để tìm hiểu thêm về DeArrow." Thông báo ngắn nếu API không khả dụng Hiển thị thông báo ngắn nếu API DeArrow không khả dụng. - Thông báo ngắn nếu API DeArrow không khả dụng đã tắt. + Không hiện thông báo ngắn nếu API DeArrow không khả dụng. Điểm cuối API DeArrow - URL điểm cuối của bộ nhớ đệm hình thu nhỏ DeArrow. Không thay đổi URL này trừ khi bạn biết mình đang làm gì. + URL của điểm cuối của bộ nhớ đệm hình thu nhỏ DeArrow. URL của API DeArrow không hợp lệ. Giới thiệu về Hình thu nhỏ tự động Hình thu nhỏ tự động là ảnh tĩnh ở đầu, giữa hoặc cuối video, được tạo tự động bởi YouTube và không sử dụng bất kỳ API bên ngoài nào. Hình thu nhỏ nhanh - Đang sử dụng ảnh tĩnh chất lượng trung bình làm hình thu nhỏ video. Hình thu nhỏ sẽ tải nhanh hơn, tuy nhiên các sự kiện trực tiếp, video sắp xuất bản và video đã rất cũ có thể hiển thị hình thu nhỏ trống. + Đang sử dụng ảnh tĩnh chất lượng trung bình làm hình thu nhỏ video. Hình thu nhỏ sẽ tải nhanh hơn, tuy nhiên các sự kiện trực tiếp, sắp diễn ra và video đã rất cũ có thể hiển thị hình thu nhỏ trống. Đang sử dụng ảnh tĩnh chất lượng cao làm hình thu nhỏ video. Thời điểm để lấy ảnh tĩnh từ video Đầu video @@ -92,59 +97,60 @@ Nhấn vào đây để tìm hiểu thêm về DeArrow." Sử dụng máy chủ lưu trữ hình ảnh gốc.\n\nBật tính năng này có thể khắc phục tình trạng hình ảnh bị chặn ở một số khu vực. Bảng tin - Ẩn Đĩa nhạc - Đĩa nhạc đã ẩn khỏi kết quả tìm kiếm. - Đĩa nhạc được hiển thị trong kết quả tìm kiếm. + Ẩn thẻ album + Đã ẩn thẻ album. + Đã hiện thẻ album. Ẩn các kệ được cá nhân hoá "Ẩn các kệ sau: - • Tin nổi bật - • Tiếp tục xem - • Khám phá thêm kênh - • Nghe lại - • Mua sắm - • Xem lại" + +• Tin nổi bật +• Tiếp tục xem +• Khám phá thêm kênh +• Nghe lại +• Mua sắm +• Xem lại" Ẩn kệ danh mục được đề xuất - Kệ danh mục được đề xuất đã ẩn. - Kệ danh mục được đề xuất được hiển thị. + Đã ẩn kệ danh mục được đề xuất. + Đã hiện kệ danh mục được đề xuất. Ẩn bảng giới thiệu mở rộng - Bảng giới thiệu mở rộng đã ẩn bên dưới video. - Bảng giới thiệu mở rộng được hiển thị bên dưới video. + Đã ẩn bảng giới thiệu mở rộng bên dưới video. + Đã hiện bảng giới thiệu mở rộng bên dưới video. Ẩn kệ Mở rộng - Kệ Mở rộng đã ẩn. - Kệ Mở rộng đã hiển thị. + Đã ẩn kệ Mở rộng. + Đã hiện kệ Mở rộng. Ẩn nút Phụ đề - Nút Phụ đề đã ẩn. - Nút Phụ đề được hiển thị. + Đã ẩn nút Phụ đề. + Đã hiện nút Phụ đề. Ẩn thanh tìm kiếm - Thanh tìm kiếm đã ẩn. + Thanh tìm kiếm đã bị ẩn. Thanh tìm kiếm được hiển thị. - Ẩn Khảo sát - Khảo sát đã ẩn. - Khảo sát được hiển thị. - Ẩn kệ Hình ảnh từ web - Kệ Hình ảnh từ web đã ẩn khỏi kết quả tìm kiếm. - Kệ Hình ảnh từ web được hiển thị trong kết quả tìm kiếm. + Ẩn khảo sát + Đã ẩn khảo sát. + Đã hiện khảo sát. + Ẩn kệ Hình ảnh + Đã ẩn kệ Hình ảnh. + Đã hiện kệ Hình ảnh. Ẩn bài đăng mới nhất - Bài đăng mới nhất đã ẩn. - Bài đăng mới nhất được hiển thị. + Đã ẩn bài đăng mới nhất. + Đã hiện bài đăng mới nhất. Ẩn nút Video mới nhất - Nút Video mới nhất đã ẩn. - Nút Video mới nhất được hiển thị. + Đã ẩn nút Video mới nhất. + Đã hiện nút Video mới nhất. Ẩn Danh sách kết hợp - Danh sách kết hợp đã ẩn. - Danh sách kết hợp được hiển thị. - Ẩn phim và chương trình truyền hình - Phim và chương trình truyền hình đã ẩn. - Phim và chương trình truyền hình được hiển thị. + Đã ẩn Danh sách kết hợp. + Đã hiện Danh sách kết hợp. + Ẩn kệ Phim và chương trình truyền hình + Đã ẩn kệ Phim và chương trình truyền hình. + Đã hiện kệ Phim và chương trình truyền hình. Ẩn nút Thông báo cho tôi - Nút Thông báo cho tôi đã ẩn bên dưới video sắp xuất bản. - Nút Thông báo cho tôi được hiển thị bên dưới video sắp xuất bản. + Đã ẩn nút \'Thông báo cho tôi\' bên dưới video sắp diễn ra. + Đã hiện nút \'Thông báo cho tôi\' bên dưới video sắp diễn ra. Ẩn kệ Chơi game trên YouTube - Kệ Chơi game trên YouTube đã ẩn. - Kệ Chơi game trên YouTube được hiển thị. + Đã ẩn kệ Chơi game trên YouTube. + Đã hiện kệ Chơi game trên YouTube. Ẩn nút Hiện thêm - Nút Hiện thêm đã ẩn. - Nút Hiện thêm được hiển thị. + Đã ẩn nút Hiện thêm. + Đã ẩn nút Hiện thêm. Ẩn danh sách cuộn Kênh đăng ký Đã ẩn danh sách cuộn Kênh đăng ký. Đã hiện danh sách cuộn Kênh đăng ký. @@ -169,14 +175,14 @@ Nhấn vào đây để tìm hiểu thêm về DeArrow." Bộ lọc thẻ trên kênh Bộ lọc thẻ trên kênh đã bật. Bộ lọc thẻ trên kênh đã tắt. - Chỉnh sửa bộ lọc + Cài đặt bộ lọc Nhập tên các thẻ trên kênh mà bạn muốn lọc được phân cách bằng dòng. - "Video ngắn + "Shorts Danh sách phát Cửa hàng" Ẩn nút Chuyển đến cửa hàng - Nút Chuyển đến cửa hàng đã ẩn. - Nút Chuyển đến cửa hàng được hiển thị. + Đã ẩn nút Chuyển đến cửa hàng. + Đã hiện nút Chuyển đến cửa hàng. Ẩn kệ ghi nhận hội viên của kênh Kệ ghi nhận hội viên của kênh đã ẩn. Kệ ghi nhận hội viên của kênh được hiển thị. @@ -201,11 +207,11 @@ Cửa hàng" Trình đơn tuỳ chọn Ẩn hoặc hiển thị thành phần của trình đơn tuỳ chọn trên bảng tin. - Bật bộ lọc trình đơn tuỳ chọn trên bảng tin + Bộ lọc trình đơn tuỳ chọn trên bảng tin Bộ lọc trình đơn tuỳ chọn trên bảng tin đã bật. Bộ lọc trình đơn tuỳ chọn trên bảng tin đã tắt. - Chỉnh sửa bộ lọc - Nhập tên các mục thành phần của mục tuỳ chọn mà bạn muốn lọc được phân cách bằng dòng. + Cài đặt bộ lọc + Nhập tên các mục thành phần của trình đơn tuỳ chọn mà bạn muốn lọc được phân cách bằng dòng. Bộ lọc video Ẩn video theo từ khoá hoặc số lượt xem. @@ -220,9 +226,9 @@ Cửa hàng" Ẩn video trên thẻ Kênh đăng ký theo từ khoá Các Video trên thẻ Kênh đăng ký đã được lọc theo từ khoá đã đặt. Các Video trên thẻ Kênh đăng ký không được lọc theo từ khoá đã đặt. - Ẩn bình luận theo từ khoá - Bình luận đã được lọc theo từ khoá đã đặt. - Bình luận không được lọc theo từ khoá đã đặt. + Ẩn các bình luận theo từ khoá + Các bình luận đã được lọc theo từ khoá đã đặt. + Các bình luận không được lọc theo từ khoá đã đặt. Bộ lọc từ khoá "Nhập từ hoặc cụm từ cần ẩn được phân cách bằng dòng. @@ -252,10 +258,6 @@ Bộ lọc có phân biệt chữ hoa chữ thường, vì vậy bạn cần nh • Video có cụm từ như \"Mọi người cũng xem video này\" ở bên dưới hình thu nhỏ." Ẩn video có lượt xem thấp Ẩn các Video có dưới 1.000 lượt xem từ các kênh chưa đăng ký khỏi thẻ Trang chủ. - Ẩn video SẮP DIỄN RA - "Ẩn các video có nhãn \"SẮP DIỄN RA\". - -Lưu ý: Việc bật tính năng này cũng sẽ ẩn nút Thông báo cho tôi." Bộ lọc số lượt xem Ẩn video trên thẻ Trang chủ theo số lượt xem @@ -282,7 +284,7 @@ Hạn chế: • Các Video có 0 lượt xem cũng không bị lọc." Ẩn các video có liên quan Các video có liên quan đã bị ẩn. - Nút Video có liên quan được hiển thị. + Các Video có liên quan được hiển thị. "Cài đặt này giới hạn số lượng bố cục tối đa có thể được tải trên màn hình trình phát. Nếu bố cục của màn hình trình phát thay đổi do các thay đổi từ phía máy chủ, các bố cục không mong muốn có thể bị ẩn trên màn hình trình phát." @@ -306,37 +308,36 @@ Nếu bố cục của màn hình trình phát thay đổi do các thay đổi t Kênh đăng ký Thịnh hành Xem sau - Thay đổi trang khởi động + Thay đổi kiểu trang khởi động "Trang khởi động sẽ liên tục thay đổi. -Hạn chế: Nút Quay lại trên thanh công cụ có thể không hoạt động được." +Hạn chế: Nút Quay lại trên thanh công cụ có thể không hoạt động." Trang khởi động chỉ thay đổi một lần. - Tắt buộc tự động phát bản âm thanh - Buộc tự động phát bản âm thanh đã bị tắt. - Buộc tự động phát bản âm thanh đã được bật. + Tắt tự động phát bản âm thanh + Tự động phát bản âm thanh khi phát video có bản âm thanh đã tắt. + Tự động phát bản âm thanh khi phát video có bản âm thanh đã bật. Tắt tự động hiển thị phụ đề Tự động hiển thị phụ đề khi phát video có phụ đề đã tắt. Tự động hiển thị phụ đề khi phát video có phụ đề đã bật. - Tắt ảnh động khởi chạy - Ảnh động khởi chạy đã tắt. - Ảnh động khởi chạy đã bật. + Vô hiệu hoá hoạt ảnh khởi động + Đã vô hiệu hoá hoạt ảnh khởi động. + Đã kích hoạt hoạt ảnh khởi động. Màn hình tải màu gradient - Màn hình tải màu gradient đã bật. - Màn hình tải màu gradient đã tắt. + Đã kích hoạt màn hình tải màu Gradient. + Đã vô hiệu hoá màn hình tải màu Gradient. Ẩn nút Tìm kiếm bằng giọng nói - Nút Tìm kiếm bằng giọng nói đã ẩn khi tìm kiếm. - Nút Tìm kiếm bằng giọng nói được hiển thị khi tìm kiếm. + Đã ẩn nút Tìm kiếm bằng giọng nói. + Đã ẩn nút Tìm kiếm bằng giọng nói. Ẩn dải phân cách màu xám - Dải phân cách màu xám đã ẩn. - Dải phân cách màu xám được hiển thị. + Đã ẩn dải phân cách màu xám. + Đã hiện dải phân cách màu xám. Ẩn thanh thông báo nhanh Thanh thông báo nhanh đã ẩn. Thanh thông báo nhanh được hiển thị. - Đóng hộp thoại cảnh báo trước khi xem - "Đóng hộp thoại cảnh báo nội dung cần cân nhắc trước khi xem. - -Tuỳ chọn này chỉ tự động chấp nhận hộp thoại cảnh báo, không thể bỏ qua giới hạn về độ tuổi." - Thay đổi bố cục + Loại bỏ hộp thoại cảnh báo trước khi xem + "Loại bỏ hộp thoại cảnh báo nội dung cần cân nhắc trước khi xem. +Tuỳ chọn này chỉ tự động chấp nhận hộp thoại cảnh báo, chứ không thể bỏ qua giới hạn về độ tuổi." + Thay đổi giao diện Gốc Điện thoại Điện thoại (Tối đa 480 dpi) @@ -350,40 +351,41 @@ Tuỳ chọn này chỉ tự động chấp nhận hộp thoại cảnh báo, kh Điều này sẽ làm thay đổi giao diện và tính năng của ứng dụng, nhưng đồng thời cũng có thể xẩy ra một số lỗi không xác định. Nếu muốn tắt tính năng này sau đó, bạn nên xóa dữ liệu ứng dụng để tránh phát sinh lỗi giao diện." - Chỉnh sửa phiên bản giả mạo - Nhập phiên bản YouTube mà bạn muốn giả mạo. + Tuỳ chọn phiên bản giả mạo + Nhập phiên bản giả mạo mà bạn muốn hướng tới. Phiên bản giả mạo - 17.33.42 - Khôi phục bố cục giao diện kiểu cũ + 17.33.42 - Khôi phục giao diện kiểu cũ 17.41.37 - Khôi phục kệ Danh sách phát kiểu cũ - 18.05.40 - Khôi phục hộp Viết bình luận kiểu cũ - 18.17.43 - Khôi phục trình đơn Cài đặt trình phát kiểu cũ - 18.33.40 - Khôi phục bảng nút thao tác Shorts kiểu cũ + 18.05.40 - Khôi phục hộp nhập bình luận kiểu cũ + 18.17.43 - Khôi phục bảng điều khiển trình phát cũ + 18.33.40 - Khôi phục bảng nút thao tác trình Shorts kiểu cũ 18.38.45 - Khôi phục phương thức áp dụng chất lượng video mặc định kiểu cũ - 18.48.39 - Tắt cập nhật số \"lượt xem\" và \"lượt thích\" theo thời gian thực + 18.48.39 - Vô hiệu hoá cập nhật số \"lượt xem\" và \"lượt thích\" theo thời gian thực + 19.13.37 - Khôi phục hoạt ảnh Số cuộn kiểu cũ Trình đơn Tài khoản Ẩn hoặc hiển thị các thành phần của trình đơn Tài khoản và thẻ Bạn. Bộ lọc trình đơn Tài khoản "Ẩn các thành phần của trình đơn Tài khoản và thẻ Bạn. Một số thành phần có thể không bị ẩn." - Chỉnh sửa bộ lọc + Cài đặt bộ lọc Nhập tên các mục thành phần của trình đơn Tài khoản mà bạn muốn lọc được phân cách bằng dòng. - Ẩn tên người dùng - Tên người dùng đã ẩn. - Tên người dùng được hiển thị. + Ẩn tên hiển thị + Tên hiển thị đã ẩn. + Tên hiển thị được hiển thị. Bộ lọc tuỳ chỉnh Ẩn các thành phần không mong muốn bằng bộ lọc tuỳ chỉnh. Bộ lọc tuỳ chỉnh Bộ lọc tuỳ chỉnh đã bật. Bộ lọc tuỳ chỉnh đã tắt. - Chỉnh sửa bộ lọc + Cài đặt bộ lọc Nhập tên các mục mà bạn muốn lọc được phân cách bằng dòng. Bộ lọc tuỳ chỉnh không hợp lệ: %s. Điều chỉnh nút - Ghi đè thao tác nhấn của các nút trong ứng dụng. + Ghi đè chức năng của các nút trong ứng dụng. Nút tải xuống Ghi đè nút tải xuống video @@ -401,10 +403,10 @@ Một số thành phần có thể không bị ẩn." Tên gói của RVX Music Tên gói của RVX Music đã được cài đặt. RVX Music - Cảnh báo + Chú ý Hiện %s chưa được cài đặt. Hãy cài đặt và thử lại. Điều kiện tiên quyết - Cần phải có YouTube Music để ghi đè hành động của nút. Nhấn vào đây để tải YouTube Music. + Cần phải có YouTube Music để ghi đè chức năng của nút. Nhấn vào đây để tải YouTube Music. Trình phát thu nhỏ Thay đổi kiểu trình phát thu nhỏ trong ứng dụng. @@ -416,59 +418,59 @@ Một số thành phần có thể không bị ẩn." Hiện đại 2 Hiện đại 3 Thao tác nhấn đúp - "Thao tác nhấn đúp đã được bật. + "Đã kích hoạt thao tác nhấn đúp. • Nhấn đúp để phóng to video đang thu nhỏ. • Nhấn đúp một lần nữa để trả về kích thước ban đầu." - Thao tác nhấn đúp đã tắt. - Kích hoạt kéo và thả + Đã vô hiệu hoá thao tác nhấn đúp. + Kéo và thả Đã kích hoạt kéo và thả. Đã vô hiệu kéo và thả. Ẩn các nút Mở rộng và Đóng - Các nút được ẩn.\n(vuốt trình phát thu nhỏ để mở rộng hoặc đóng) - Các nút Mở rộng và Đóng được hiển thị. - Ẩn văn bản - Văn bản đã ẩn. - Văn bản được hiển thị. - Ẩn các nút Chuyển đến video trước/tiếp theo - Các nút Chuyển về video trước và Chuyển đến video tiếp theo đã ẩn. - Các nút Chuyển về video trước và Chuyển đến video tiếp theo được hiển thị. + Đã ẩn các nút.\n(vuốt trình phát thu nhỏ để mở rộng hoặc đóng) + Đã hiện các nút Mở rộng và Đóng. + Ẩn các văn bản phụ + Đã ẩn các văn bản phụ. + Đã hiện các văn bản phụ. + Ẩn các nút tua tới và tua lùi + Đã ẩn các nút tua tới và tua lùi. + Đã hiện các nút tua tới và tua lùi. Độ mờ lớp phủ Giá trị độ mờ của lớp phủ trình phát thu nhỏ trong khoảng từ 0 đến 100, trong đó 0 là trong suốt. Độ mờ của lớp phủ trình phát thu nhỏ phải nằm trong khoảng 0 - 100. Thanh điều hướng Ẩn hoặc hiển thị các thành phần trong phần thanh điều hướng. - Thanh điều hướng thu gọn - Thanh điều hướng thu gọn đã bật. Khoảng cách giữa các nút trên thanh điều hướng sẽ hẹp hơn. - Thanh điều hướng thu gọn đã tắt. + Nút điều hướng thu gọn + Khoảng cách giữa các nút trên thanh điều hướng sẽ hẹp hơn. + Khoảng cách giữa các nút trên thanh điều hướng về mặc định. Ẩn nút Tạo - Nút Tạo đã ẩn. - Nút Tạo được hiển thị. + Đã ẩn nút Tạo. + Đã hiện nút Tạo. Ẩn nút Trang chủ - Nút Trang chủ đã ẩn. - Nút Trang chủ được hiển thị. + Đã ẩn nút Trang chủ. + Đã hiện nút Trang chủ. Ẩn nút Bạn - Nút Bạn đã ẩn. - Nút Bạn được hiển thị. + Đã ẩn nút Bạn. + Đã hiện nút Bạn. Ẩn nút Thông báo - Nút Thông báo đã ẩn. - Nút Thông báo được hiển thị. + Đã ẩn nút Thông báo. + Đã hiện nút Thông báo. Ẩn nút Shorts Đã ẩn nút Shorts. Đã hiện nút Shorts. Ẩn nút Kênh đăng ký - Nút Kênh đăng ký đã ẩn. - Nút Kênh đăng ký được hiển thị. - Ẩn tên nút - Tên nút đã ẩn. - Tên nút được hiển thị. - Hoán đổi nút Tạo và nút Thông báo - "Nút Tạo đã được hoán đổi với nút Thông báo. + Đã ẩn nút Kênh đăng ký. + Đã hiện nút Kênh đăng ký. + Ẩn tên các thẻ + Đã ẩn tên các thẻ. + Đã hiện tên các thẻ. + Đổi vị trí nút Tạo và nút Thông báo + "Nút Tạo đã được đổi vị trí với nút Thông báo. -Lưu ý: Việc bật tuỳ chọn này cũng sẽ ẩn các quảng cáo trong video." - Nút Tạo không được hoán đổi với nút Thông báo. - "Tắt tùy chọn này có thể hiện quảng cáo từ máy chủ. +Lưu ý: Việc bật tuỳ chọn này cũng sẽ ẩn các quảng cáo video." + Nút Tạo và nút Thông báo như mặc định. + "Tắt tùy chọn này có thể tải thêm quảng cáo từ máy chủ. Ngoài ra, quảng cáo sẽ không còn bị chặn trong trình phát Shorts. @@ -500,12 +502,12 @@ Nếu cài đặt này không có hiệu lực, hãy thử chuyển sang chế Ẩn mục Lựa chọn ưu tiên về chất lượng video Đã ẩn mục Lựa chọn ưu tiên về chất lượng video. Đã hiện mục Lựa chọn ưu tiên về chất lượng video. - Ẩn mục Phát trong nên và nội dung tải xuống - Đã ẩn mục Phát trong nên và nội dung tải xuống. - Đã hiện mục Phát trong nên và nội dung tải xuống. - Ẩn mục xem trên TV - Đã ẩn mục xem trên TV. - Đã hiện mục xem trên TV. + Ẩn mục Phát trong nền và nội dung tải xuống + Đã ẩn mục Phát trong nền và nội dung tải xuống. + Đã hiện mục Phát trong nền và nội dung tải xuống. + Ẩn mục Xem trên TV + Đã ẩn mục Xem trên TV. + Đã hiện mục Xem trên TV. Ẩn mục Quản lý toàn bộ nhật ký hoạt động Đã ẩn mục Quản lý toàn bộ nhật ký hoạt động. Đã hiện mục Quản lý toàn bộ nhật ký hoạt động. @@ -549,16 +551,16 @@ Nếu cài đặt này không có hiệu lực, hãy thử chuyển sang chế Tiêu đề Premium được kích hoạt. Tiêu đề Youtube mặc định. Thanh tìm kiếm rộng - Thanh tìm kiếm rộng đã bật. - Thanh tìm kiếm rộng đã tắt. + Đang áp dụng thanh tìm kiếm rộng. + Đang áp dụng thanh tìm kiếm mặc định. Thanh tìm kiếm rộng với tiêu đề YouTube - Thanh tìm kiếm rộng với tiêu đề YouTube đã bật. - Thanh tìm kiếm rộng với tiêu đề YouTube đã tắt. + Thanh tìm kiếm rộng đồng thời với tiêu đề YouTube. + Thanh tìm kiếm rộng sẽ ẩn tiêu đề YouTube. Thanh tìm kiếm rộng trên thẻ Bạn - "Bật thanh tìm kiếm rộng trên thẻ Bạn. + "Bật cài đặt này sẽ làm vô hiệu hoá nút Cài đặt trong thẻ Bạn. -Tuỳ chọn này sẽ ẩn nút Cài đặt trên thẻ Bạn. Để truy cập phần Cài đặt, vui lòng làm theo các bước sau: -Thẻ Bạn → Xem kênh → Trình đơn → Cài đặt." +Trong trường hợp đó, vui lòng làm theo các bước sau để truy cập Cài đặt: +Thẻ Bạn → Xem kênh → Trình đơn → Cài đặt" Ẩn nút Truyền Nút Truyền đã ẩn. Nút Truyền được hiển thị. @@ -568,18 +570,18 @@ Thẻ Bạn → Xem kênh → Trình đơn → Cài đặt." Ẩn nút Thông báo Nút Thông báo đã ẩn. Nút Thông báo được hiển thị. - Ẩn hình thu nhỏ cụm từ tìm kiếm - Hình thu nhỏ của cụm từ tìm kiếm đã ẩn khỏi nhật ký tìm kiếm. - Hình thu nhỏ của cụm từ tìm kiếm được hiển thị trong nhật ký tìm kiếm. + Ẩn hình thu nhỏ của từ khoá tìm kiếm + Hình thu nhỏ của từ khoá tìm kiếm đã ẩn khỏi lịch sử tìm kiếm. + Hình thu nhỏ của từ khoá tìm kiếm được hiển thị trong lịch sử tìm kiếm. Ẩn nút tìm kiếm bằng hình ảnh Nút tìm kiếm bằng hình ảnh đã bị ẩn. Nút tìm kiếm bằng hình ảnh được hiển thị. Ẩn nút Tìm kiếm bằng giọng nói - Nút Tìm kiếm bằng giọng nói đã ẩn. - Nút Tìm kiếm bằng giọng nói được hiển thị. + Đã ẩn nút Tìm kiếm bằng giọng nói. + Đã hiện nút Tìm kiếm bằng giọng nói. Ẩn YouTube Doodles - Đã ẩn YouTube Doodles. - Đã hiện YouTube Doodles. + YouTube Doodles đã bị ẩn. + YouTube Doodles đã được hiển thị. "YouTube Doodles là những hình ảnh hoặc thiết kế cách điệu được YouTube sử dụng tạm thời trên logo của mình trong một số dịp đặc biệt, tương tự như Google Doodles trên trang chủ của Google. Và chúng thường chỉ xuất hiện trong một khoảng thời gian ngắn, có thể là vài ngày mỗi năm. Nếu YouTube Doodle đang hiển thị đồng thời tuỳ chọn ẩn này cũng đang bật, thì bộ lọc tìm kiếm cũng sẽ bị ẩn." @@ -605,7 +607,7 @@ Nhấn và giữ để mở cài đặt RVX." Tính năng Tự động phát có thể thay đổi trong Cài đặt YouTube: Cài đặt → Tự động phát → Tự động phát video tiếp theo" Việc bật tính năng này sẽ vô hiệu hóa việc tự động chuyển sang YouTube Mix khi phát nhạc đồng thời chế độ phát tự động cũng được bật. - Tắt nhấn và giữ để phát nhanh 2x + Vô hiệu hoá nhấn giữ để phát 2x>> "Tắt tính năng nhấn và giữ để \"2x>>\". Lưu ý: @@ -614,18 +616,18 @@ Lưu ý: Tốc độ phát khi nhấn và giữ Nhập tốc độ phát khi nhấn và giữ trong khoảng từ 0 đến 8.0. Tốc độ phát khi nhấn và giữ phải nằm trong khoảng 0 - 8.0. - Ẩn hình mờ video - Hình mờ video đã ẩn. - Hình mờ video được hiển thị. + Ẩn hình mờ của kênh + Hình mờ của kênh đã ẩn. + Hình mờ kênh được hiển thị. Ẩn chiến dịch gây quỹ Chiến dịch gây quỹ đã ẩn. Chiến dịch gây quỹ được hiển thị. Ẩn bộ lọc lớp phủ nhấn đúp Bộ lọc lớp phủ nhấn đúp bị ẩn. Bộ lọc lớp phủ nhấn đúp được hiển thị. - Ẩn màn hình kết thúc - Màn hình kết thúc đã ẩn. - Màn hình kết thúc được hiển thị. + Ẩn các thẻ màn hình kết thúc + Đã ẩn các thẻ màn hình kết thúc. + Đã hiện các thẻ màn hình kết thúc. Tắt tua chính xác Tua chính xác đã tắt. Tua chính xác đã bật. @@ -660,11 +662,14 @@ Tính năng Tự động phát có thể thay đổi trong Cài đặt YouTube: Cài đặt → Tự động phát → Tự động phát video tiếp theo." Video đề xuất ở màn hình kết thúc được hiển thị. Bỏ qua tự động đếm ngược trước khi phát - Bỏ qua đếm ngược tự động phát đã bật.\nNếu tính năng Tự động phát được bật, video tiếp theo sẽ phát ngay lập tức mà không cần đếm ngược. - Bỏ qua đếm ngược tự động phát đã tắt.\nNếu tính năng Tự động phát được bật, video tiếp theo sẽ phát sau khi hết thời gian đếm ngược. - Ẩn lớp phủ khi chụm để thu phóng + Nếu tính năng Tự động phát được bật, video tiếp theo sẽ được phát ngay lập tức. + Nếu tính năng Tự động phát được bật, video tiếp theo sẽ được phát sau khi đếm ngược kết thúc. + Ẩn chụm để thu phóng Lớp phủ khi chụm để thu phóng đã bị ẩn. Lớp phủ khi chụm để thu phóng đã được hiển thị. + Làm sạch phụ đề video + "Các cụm từ như '#', 'Fundraiser', 'Shop' và 'products' đã bị ẩn khỏi phụ đề video." + "Các cụm từ như '#', 'Fundraiser', 'Shop' và 'products' đã được hiển thị trong phụ đề video." Các nút thao tác Ẩn hoặc hiển thị các nút thao tác bên dưới video. @@ -680,9 +685,9 @@ Cài đặt → Tự động phát → Tự động phát video tiếp theo."Ẩn các nút Thích và Không thích Các nút Thích và Không thích đã ẩn. Các nút Thích và Không thích được hiển thị. - Ẩn nút Remix - Nút Remix đã ẩn. - Nút Remix được hiển thị. + Ẩn nút Phối lại + Nút Phối lại đã ẩn. + Nút Phối lại được hiển thị. Ẩn nút Báo vi phạm Nút Báo vi phạm đã ẩn. Nút Báo vi phạm được hiển thị. @@ -705,13 +710,13 @@ Cài đặt → Tự động phát → Tự động phát video tiếp theo."Chế độ môi trường xung quanh Tắt hoặc bỏ qua các hạn chế của Chế độ môi trường xung quanh. Không giới hạn Chế độ môi trường xung quanh - Chế độ môi trường xung quanh đã được kích hoạt trong chế độ tiết kiệm pin. - Chế độ môi trường xung quanh đang vô hiệu hoá trong chế độ tiết kiệm pin. + Chế độ môi trường xung quanh vẫn được kích hoạt trong Chế độ tiết kiệm pin. + Chế độ môi trường xung quanh sẽ bị vô hiệu hoá trong chế độ tiết kiệm pin. Tắt chế độ môi trường xung quanh Chế độ môi trường xung quanh đã được vô hiệu hoá. Chế độ môi trường xung quanh đã được kích hoạt. Tắt chế độ môi trường khi toàn màn hình - Chế độ môi trường xung quanh đã được vô hiệu hoá ở chế độ toàn màn hình. + Chế độ môi trường xung quanh sẽ bị vô hiệu hoá ở chế độ toàn màn hình. Chế độ môi trường xung quanh đã được kích hoạt ở chế độ toàn màn hình. Thanh kênh @@ -731,6 +736,9 @@ Cài đặt → Tự động phát → Tự động phát video tiếp theo."Ẩn biểu ngữ Bình luận của hội viên Biểu ngữ Bình luận của hội viên đã ẩn. Biểu ngữ Bình luận của hội viên được hiển thị. + Ẩn bình luận chữ xanh + Bình luận chữ xanh đã bị ẩn. + Bình luận chữ xanh đã được hiển thị. Ẩn phần Bình luận Phần Bình luận đã ẩn. Phần Bình luận được hiển thị. @@ -749,15 +757,18 @@ Cài đặt → Tự động phát → Tự động phát video tiếp theo."Ẩn nút Cảm ơn Nút Cảm ơn đã ẩn. Nút Cảm ơn được hiển thị. - Ẩn mốc thời gian và các nút biểu tượng cảm xúc - Mốc thời gian và các nút biểu tượng cảm xúc đã ẩn. - Mốc thời gian và các nút Biểu tượng cảm xúc được hiển thị. + Ẩn dấu thời gian và các nút Biểu tượng cảm xúc + Dấu thời gian và các nút Biểu tượng cảm xúc đã ẩn. + Dấu thời gian và các nút Biểu tượng cảm xúc được hiển thị. Trình đơn tuỳ chọn Ẩn hoặc thay đổi thành phần của trình đơn tuỳ chọn trong trình phát video. Đổi kiểu bật/tắt tuỳ chọn Đang sử dụng kiểu bật/tắt tuỳ chọn dạng văn bản. Đang sử dụng kiểu bật/tắt tuỳ chọn dạng công tắc. + Ẩn mục 1080p Premium + Mục 1080p Premium đã ẩn. + Mục 1080p Premium đã hiển thị. Ẩn mục Bản âm thanh Mục Bản âm thanh đã ẩn. Mục Bản âm thanh được hiển thị. @@ -786,17 +797,17 @@ Cài đặt → Tự động phát → Tự động phát video tiếp theo."Mục Báo vi phạm đã ẩn. Mục Báo vi phạm được hiển thị. - Cài đặt bổ sung + Chế độ cài đặt khác Ẩn mục Chế độ môi trường xung quanh Mục Chế độ môi trường xung quanh đã ẩn. Mục Chế độ môi trường xung quanh được hiển thị. - Ẩn Trợ giúp & Phản hồi - Trợ giúp & Phản hồi đã ẩn. - Trợ giúp & Phản hồi được hiển thị. + Ẩn mục Trợ giúp & phản hồi + Mục Trợ giúp & phản hồi đã ẩn. + Mục Trợ giúp & phản hồi được hiển thị. Ẩn mục \'Nghe nhạc trên YouTube Music\' Mục \'Nghe nhạc trên YouTube Music\' đã bị ẩn. Mục \'Nghe nhạc trên YouTube Music\' được hiển thị. - Ẩn mục Lặp lại video + Ẩn mục Cho video lặp lại Mục lặp lại video đã ẩn. Mục lặp lại video được hiển thị. Ẩn mục Hình trong hình @@ -805,9 +816,9 @@ Cài đặt → Tự động phát → Tự động phát video tiếp theo."Ẩn mục Nút điều khiển cho gói Premium Mục Nút điều khiển cho gói Premium đã ẩn. Mục Nút điều khiển cho gói Premium được hiển thị. - Ẩn mục Hẹn giờ đi ngủ - Mục Hẹn giờ đi ngủ đã ẩn. - Mục Hẹn giờ đi ngủ đã hiển thị. + Ẩn mục Hẹn giờ ngủ + Mục Hẹn giờ ngủ đã ẩn. + Mục Hẹn giờ ngủ đã hiển thị. Ẩn mục Âm lượng ổn định Mục Âm lượng ổn định được hiển thị. Mục Âm lượng ổn định đã ẩn. @@ -842,8 +853,8 @@ Hạn chế: Tiêu đề video sẽ biến mất khi nhấn vào." Bảng nút thao tác nhanh đã ẩn. Bảng nút thao tác nhanh được hiển thị. Ẩn nút Bình luận - Nút bình luận đã ẩn. - Nút bình luận được hiển thị. + Nút Bình luận đã ẩn. + Nút Bình luận được hiển thị. Ẩn nút Không thích Nút Không thích đã bị ẩn. Nút Không thích đã được hiển thị. @@ -882,38 +893,38 @@ Hạn chế: Tiêu đề video sẽ biến mất khi nhấn vào." "Video sẽ chuyển sang chế độ toàn màn hình trong các trường hợp sau: • Khi video bắt đầu. -• Khi nhấn vào mốc thời gian trong phần bình luận." +• Khi nhấn vào dấu thời gian trong phần bình luận." Giữ chế độ toàn màn hình Giữ chế độ toàn màn hình hoạt động trong lúc bạn tắt và đánh thức thiết bị khi đang xem chế độ toàn màn hình. - Thời gian giữ chế độ toàn màn hình (mili giây) + Thời gian giữ chế độ toàn màn hình Số mili giây mà chế độ toàn màn hình được giữ. Phản hồi xúc giác Tắt hoặc bật phản hồi xúc giác. - Tắt phản hồi xúc giác trong các chương + Tắt phản hồi xúc giác khi chuyển chương Phản hồi xúc giác đã tắt. - Phản hồi xúc giác được kích hoạt. + Phản hồi xúc giác được bật. Tắt phản hồi xúc giác khi đăng ký kênh Phản hồi xúc giác đã tắt. - Phản hồi xúc giác được kích hoạt. + Phản hồi xúc giác được bật. Tắt phản hồi xúc giác khi trượt để tua Phản hồi xúc giác đã tắt. - Phản hồi xúc giác được kích hoạt. + Phản hồi xúc giác được bật. Tắt phản hồi xúc giác khi huỷ tua Phản hồi xúc giác đã tắt. - Phản hồi xúc giác được kích hoạt. + Phản hồi xúc giác được bật. Tắt phản hồi xúc giác khi chụm để thu phóng Phản hồi xúc giác đã tắt. - Phản hồi xúc giác được kích hoạt. + Phản hồi xúc giác được bật. Nút trong trình phát - Ẩn hoặc hiển thị các nút trong video. + Ẩn hoặc hiển thị các nút trong trình phát. Ẩn nút Tự động phát Nút Tự động phát đã ẩn. Nút Tự động phát được hiển thị. Ẩn nút Phụ đề Nút Phụ đề đã ẩn. - Nút phụ đề được hiển thị. + Nút Phụ đề được hiển thị. Ẩn nút Truyền Nút Truyền đã ẩn. Nút Truyền được hiển thị. @@ -924,8 +935,8 @@ Hạn chế: Tiêu đề video sẽ biến mất khi nhấn vào." Nút Toàn màn hình đã ẩn. Nút Toàn màn hình được hiển thị. Ẩn các nút Chuyển đến video trước đó/tiếp theo - Các Nút được ẩn. - Các Nút được hiển thị. + Các nút đã ẩn. + Các nút được hiển thị. Ẩn nút YouTube Music Nút YouTube Music đã ẩn. Nút YouTube Music được hiển thị. @@ -933,25 +944,25 @@ Hạn chế: Tiêu đề video sẽ biến mất khi nhấn vào." Nút trên lớp phủ trình phát Nút Phát lặp lại một video "Nhấn để luôn phát lặp lại video. -Nhấn và giữ để tạm dừng sau khi hết thời lượng video đó." +Nhấn giữ để tạm dừng sau khi hết thời lượng video." Nút Sao chép URL video "Nhấn để sao chép URL video. -Nhấn và giữ để sao chép URL video kèm theo mốc thời gian hiện tại." - Hiển thị nút sao chép URL cùng mốc thời gian - "Nhấn để sao chép URL video với mốc thời gian. -Nhấn và giữ để sao chép mốc thời gian hiện tại." - Hiển thị nút tắt âm lượng - Nhấn để tắt âm lượng video hiện tại. Nhấn lần nữa để bật lại. +Nhấn giữ để sao chép URL video kèm theo dấu thời gian hiện tại." + Nút Sao chép URL video với dấu thời gian + "Nhấn để sao chép URL video với dấu thời gian. +Nhấn và giữ để sao chép dấu thời gian hiện tại." + Nút Tắt tiếng + Nhấn để tắt tiếng của video hiện tại. Nhấn lần nữa để bật trở lại. Nút Tải xuống bên ngoài Nhấn để khởi chạy trình tải xuống bên ngoài. Nút Tốc độ phát "Nhấn để mở hộp thoại Tốc độ phát. -Nhấn và giữ để đặt lại tốc độ phát video bình thường (1.0x). Nhấn và giữ lần nữa để đặt lại về tốc độ mặc định." - Hiển thị nút Danh sách trắng - \"Nhấn để mở hộp thoại Danh sách trắng. -Nhấn và giữ để mở hộp thoại cài đặt Danh sách trắng. - Hiển thị nút danh sách phát theo thứ tự thời gian - "Nhấn để tạo danh sách phát tất cả video từ kênh cũ nhất đến mới nhất. +Nhấn giữ để đặt lại tốc độ phát video bình thường (1.0x). Nhấn giữ lần nữa để đặt lại về tốc độ mặc định đã đặt." + Nút Danh sách trắng + Nhấn để mở hộp thoại Danh sách trắng. +Nhấn giữ để mở hộp thoại cài đặt Danh sách trắng. + Nút danh sách phát theo thứ tự thời gian + "Nhấn để tạo danh sách phát gồm tất cả video từ kênh từ cũ nhất đến mới nhất. Nhấn và giữ để hoàn tác." Danh sách trắng Kiểm tra hoặc xóa các kênh đã thêm vào Danh sách trắng. @@ -968,23 +979,23 @@ Nhấn và giữ để hoàn tác." Không tải được thông tin kênh. Đã đặt lại Tốc độ phát: %sx. Nhấn giữ để thay đổi trạng thái nút. - Đã sao chép mốc thời gian vào bảng nhớ tạm. (%s) + Đã sao chép dấu thời gian vào bảng nhớ tạm. (%s) Đã sao chép URL sang bảng nhớ tạm. - Đã sao chép URL cùng mốc thời gian vào bảng nhớ tạm. + Đã sao chép URL cùng dấu thời gian vào bảng nhớ tạm. Thanh tiến trình - Tùy chỉnh thanh tiến trình - Thêm thông tin vào mốc thời gian - Thông tin được thêm vào mốc thời gian. - Thông tin không còn được thêm vào mốc thời gian. + Tùy chỉnh thanh tiến trình. + Thêm thông tin vào dấu thời gian + Thông tin được thêm vào dấu thời gian. + Thông tin không còn được thêm vào dấu thời gian. Loại thông tin cần thêm Thêm Chất lượng video. Thêm Tốc độ phát. - Thay thế hành động của mốc thời gian + Thay thế hành động của dấu thời gian Nhấn để mở mục Tốc độ phát hoặc Chất lượng video. Nhấn để hiển thị thời gian còn lại. - Màu thanh tiến trình tùy chỉnh - Đang sử dụng màu thanh tiến trình video tùy chỉnh. + Màu thanh tiến trình tuỳ chỉnh + Đang sử dụng màu thanh tiến trình video tuỳ chỉnh. Đang sử dụng màu thanh tiến trình video mặc định. Thay đổi màu thanh tiến trình Nhập mã màu hex của thanh tiến trình video mà bạn muốn thay đổi. @@ -997,32 +1008,35 @@ Nhấn và giữ để hoàn tác." Ẩn thanh tiến trình trong trình phát thu nhỏ Thanh tiến trình đã ẩn khỏi trình phát thu nhỏ video. Thanh tiến trình được hiển thị trong trình phát thu nhỏ video. - Ẩn các Chương trong thanh tiến trình - Các chương đã ẩn trong thanh tiến trình. - Các chương được hiển thị trong thanh tiến trình. - Ẩn Mốc thời gian - Mốc thời gian đã ẩn. - Mốc thời gian được hiển thị. - Khôi phục thanh tiến trình hình thu nhỏ kiểu cũ + Vô hiệu hoá các Chương trong thanh tiến trình + Các Chương đã bị vô hiệu hoá trên thanh tiến trình. + Các Chương đã được kích hoạt trên thanh tiến trình. + Ẩn nhãn Chương trên thanh tiến trình + Nhãn Chương kế bên dấu thời gian đã ẩn. + Nhãn Chương kế bên dấu thời gian đã hiện. + Ẩn Dấu thời gian + Dấu thời gian đã ẩn. + Dấu thời gian được hiển thị. + Khôi phục hình thu nhỏ trên thanh tiến trình kiểu cũ Hình thu nhỏ khi tua sẽ xuất hiện phía trên thanh tiến trình. - Hình ảnh khi tua sẽ hiển thị toàn màn hình. - Sử dụng thanh điều hướng kiểu Cairo - "Thanh điều hướng kiểu Cairo đã được bật + Hình thu nhỏ khi tua sẽ xuất hiện ở chế độ toàn màn hình. + Kích hoạt thanh tiến trình kiểu Cairo + "Thanh tiến trình kiểu Cairo đã được kích hoạt. -Hạn chế: Chủ đề Cairo cũng được áp dụng cho dấu chấm thông báo của ứng dụng." - Thanh điều hướng kiểu Cairo đã được vô hiệu hoá. +Hạn chế: Chủ đề Cairo cũng sẽ áp dụng cho dấu chấm thông báo của ứng dụng." + Thanh tiến trình kiểu Cairo đã bị vô hiệu hoá. Mô tả video Ẩn hoặc hiển thị các thành phần mô tả video. - Tắt hoạt ảnh số cuộn - Đã tắt Hoạt ảnh số cuộn. - Đã bật Hoạt ảnh số cuộn. + Vô hiệu hoá hoạt ảnh Số cuộn + Đã vô hiệu hoá hoạt ảnh Số cuộn. + Đã kích hoạt hoạt ảnh Số cuộn. Ẩn phần Thuộc tính - Phần \'Địa điểm nổi bật\', Trò chơi và Âm nhạc được ẩn. - Phần \'Địa điểm nổi bật\', Trò chơi và Âm nhạc được hiện. + Phần Địa điểm nổi bật, Trò chơi và Âm nhạc đã ẩn. + Phần Địa điểm nổi bật, Trò chơi và Âm nhạc được hiển thị. Ẩn phần Chương - Phần Chương được ẩn. - Phần Chương được hiển thị. + Phần Chương đã ẩn. + Phần Chương đã hiển thị. Ẩn phần Nội dung Phần \"Cách tạo Nội dung này\" đã bị ẩn. Phần \"Cách tạo Nội dung này\" đã được hiển thị. @@ -1052,11 +1066,11 @@ Hạn chế: Chủ đề Cairo cũng được áp dụng cho dấu chấm thông Mô tả video được mở rộng thủ công. Tiêu đề trong bảng mô tả video "Nhập tiêu đề vào bảng mô tả video. -Mở rộng mô tả video có thể không hoạt động nếu bạn lưu chuỗi không chính xác." +Mở rộng mô tả video có thể không hoạt động nếu bạn nhập nội dung không khớp với tiêu đề thực tế của bảng mô tả video." Mô tả - Shorts - Tắt tính năng tiếp tục trình phát + Trình Shorts + Tắt tính năng tiếp tục phát video Shorts Trinh phát Shorts sẽ không tiếp tục khi ứng dụng khởi chạy. Trinh phát Shorts sẽ tiếp tục khi ứng dụng khởi chạy. Ẩn nút nổi @@ -1066,6 +1080,12 @@ Mở rộng mô tả video có thể không hoạt động nếu bạn lưu chu Kệ Shorts Ẩn kệ Shorts "\nHạn chế: Tiêu đề chính thức trong kết quả tìm kiếm sẽ được ẩn." + Ẩn trong hồ sơ kênh + "Đã ẩn trong hồ sơ kênh. + +Cụ thể: +• Chỉ những kệ có tiêu đề Shorts trên thẻ trang chủ mới bị ẩn." + Đã hiện trong hồ sơ kênh. Ẩn trên thẻ Trang chủ và các video liên quan Ẩn trên thẻ Trang chủ và các video liên quan. Hiển thị trong thẻ Trang chủ và các video có liên quan. @@ -1194,15 +1214,15 @@ Mở rộng mô tả video có thể không hoạt động nếu bạn lưu chu Trái tim (Đỏ) Ẩn - Bật Mốc thời gian - "Đã kích hoạt Mốc thời gian. + Bật Dấu thời gian + "Đã kích hoạt Dấu thời gian. Hạn chế: -• Cài đặt này không chỉ kích hoạt Mốc thời gian mà còn cho phép ẩn giao diện người dùng bằng cách nhấn vào nền trình phát. +• Cài đặt này không chỉ kích hoạt Dấu thời gian mà còn cho phép ẩn giao diện người dùng bằng cách nhấn vào nền trình phát. • Vì đây là tính năng đang trong giai đoạn phát triển của Google nên bố cục có thể bị hỏng." - Đã vô hiệu hoá Mốc thời gian. - Thao tác nhấn giữ Mốc thời gian - Nhấn và giữ vào Mốc thời gian để thay đổi trạng thái phát lặp lại trên trình phát Shorts. + Đã vô hiệu hoá Dấu thời gian. + Thao tác nhấn giữ Dấu thời gian + Nhấn và giữ vào Dấu thời gian để thay đổi trạng thái phát lặp lại trên trình phát Shorts. Lề dưới của bảng Meta Cấu hình khoảng cách từ thanh tiến trình tới bảng meta, nằm trong khoảng 0 đến 64. Lề dưới của bảng Meta phải nằm trong khoảng từ 0 đến 64. @@ -1215,52 +1235,58 @@ Hạn chế: Chiều cao của khoảng trống Cấu hình chiều cao của khoảng trống còn lại khi thanh điều hướng bị ẩn, nằm trong khoảng từ 0 đến 100 (%). Chiều cao phải nằm trong khoảng từ 0 đến 100 (%). - Thay đổi tên người dùng Shorts - Đang hiển thị tên kênh. - Đang hiển thị tên người dùng (@username). + Thay thế tên hiển thị của kênh + Đang áp dụng tên kênh. + Đang áp dụng tên hiển thị của kênh (@handle). - Điều khiển vuốt - Bật cử chỉ điều chỉnh độ sáng tự động - Giá trị thấp nhất của cử chỉ độ sáng sẽ kích hoạt độ sáng tự động. - Giá trị thấp nhất của cử chỉ độ sáng không kích hoạt độ sáng tự động. - Vuốt Độ sáng - Cử chỉ vuốt Độ sáng đã bật. - Cử chỉ vuốt Độ sáng đã tắt. - Vuốt Âm lượng - Cử chỉ vuốt Âm lượng đã bật. - Cử chỉ vuốt Âm lượng đã tắt. - Bật lưu và khôi phục độ sáng - Lưu và khôi phục độ sáng khi thoát ra hoặc vào chế độ toàn màn hình. - Không lưu và khôi phục độ sáng khi thoát ra hoặc vào chế độ toàn màn hình. + Cử chỉ vuốt + Cử chỉ điều chỉnh độ sáng tự động + Chế độ độ sáng tự động sẽ được bật khi vuốt độ sáng về mức tổi thiểu. + Chế độ độ sáng tự động sẽ không được bật khi vuốt độ sáng về mức tổi thiểu. + Vuốt điều chỉnh độ sáng + Đã kích hoạt cử chỉ vuốt điều chỉnh độ sáng. + Đã vô hiệu hoá cử chỉ vuốt điều chỉnh độ sáng. + Vuốt điều chỉnh âm lượng + Đã kích hoạt cử chỉ vuốt điều chỉnh âm lượng. + Đã vô hiệu hoá cử chỉ vuốt điều chỉnh âm lượng. + Lưu độ sáng + Lưu độ sáng khi thoát ra hoặc vào chế độ toàn màn hình. + Không lưu độ sáng khi thoát ra hoặc vào chế độ toàn màn hình. Nhấn và giữ để vuốt - Nhấn và giữ để kích hoạt cử chỉ vuốt. - Nhấn và giữ để vuốt đã tắt. + Nhấn và giữ để vuốt đã được kích hoạt. + Nhấn và giữ để vuốt đã bị vô hiệu hoá. Phản hồi xúc giác Phản hồi xúc giác đã bật. Phản hồi xúc giác đã tắt. - Vuốt ở chế độ Khóa màn hình - Cử chỉ vuốt đã bật ở chế độ Khóa màn hình. - Vuốt ở chế độ Khóa màn hình đã tắt. - Độ mờ nền lớp phủ vuốt - Độ mờ của nền lớp phủ vuốt khi thực hiện cử chỉ vuốt. + Vuốt ở chế độ Khoá màn hình + Đã kích hoạt cử chỉ vuốt ở chế độ Khóa màn hình. + Đã vô hiệu hoá cử chỉ vuốt ở chế độ Khóa màn hình. + Độ trong suốt lớp phủ + Độ trong suốt của nền khi thực hiện cử chỉ vuốt. Độ rộng ngưỡng vuốt Độ rộng của ngưỡng vuốt để thực hiện cử chỉ vuốt. - Kích thước văn bản trên lớp phủ vuốt - Độ to nhỏ của văn bản được hiển thị trên lớp phủ vuốt. - Kích thước văn bản trên lớp phủ vuốt - Phần diện tích màn hình có thể vuốt.\n\nLưu ý: Thao tác này cũng sẽ thay đổi kích thước vùng màn hình đối với cử chỉ nhấn đúp để tua. + Kích thước văn bản trên lớp phủ + Độ lớn của văn bản được hiển thị trên lớp phủ khi vuốt. + Kích thước màn hình lớp phủ + Phần diện tích màn hình có thể vuốt (tính bằng %).\n\nLưu ý: Tuỳ chọn này cũng sẽ thay đổi kích thước vùng màn hình đối với cử chỉ nhấn đúp để tua. Kích thước khu vực vuốt không được lớn hơn 50. - Thời gian hiển thị lớp phủ vuốt (mili giây) - Số mili giây mà lớp phủ vuốt được hiển thị. + Thời gian hiển thị lớp phủ + Số mili giây mà lớp phủ khi vuốt được hiển thị. + Độ nhạy khi vuốt để điều chỉnh độ sáng + Cấu hình khoảng cách tối thiểu để vuốt điều chỉnh độ sáng trong khoảng từ 1 đến 1000 (%).\nKhoảng cách tối thiểu càng ngắn thì mức độ sáng thay đổi càng nhanh. + Độ nhạy khi vuốt để điều chỉnh độ sáng phải nằm trong khoảng từ 1-1000 (%). + Độ nhạy khi vuốt để điều chỉnh âm lượng + Cấu hình khoảng cách tối thiểu để vuốt điều chỉnh âm lượng trong khoảng từ 1 đến 1000 (%).\n\nKhoảng cách tối thiểu càng ngắn thì mức âm lượng thay đổi càng nhanh.\n\nĐộ nhạy vuốt âm lượng được khuyến nghị là 100% với mức âm lượng 15 và 10% với mức âm lượng 150. + Độ nhạy khi vuốt để điều chỉnh âm lượng phải nằm trong khoảng từ 1 đến 1000 (%). Tắt độ sáng HDR tự động Độ sáng HDR tự động đã tắt. Độ sáng HDR tự động đã bật. Cử chỉ bên dưới trình phát - Cử chỉ vuốt xuống từ khu vực bên dưới trình phát để xem ở chế độ toàn màn hình dọc đã bật. - Cử chỉ vuốt xuống từ khu vực bên dưới trình phát để xem ở chế độ toàn màn hình dọc đã tắt. - Kích hoạt vuốt để chuyển video - Vuốt lên/xuống sẽ phát video tiếp theo/trước đó. - Vuốt lên/xuống sẽ không phát video tiếp theo/trước đó. + Đã kích hoạt cử chỉ vuốt xuống từ khu vực bên dưới trình phát để xem ở chế độ toàn màn hình dọc. + Đã vô hiệu hoá cử chỉ vuốt xuống từ khu vực bên dưới trình phát để xem ở chế độ toàn màn hình dọc. + Vuốt để chuyển video + Vuốt lên/xuống sẽ phát video tiếp theo hoặc trước đó. + Vuốt lên/xuống sẽ không phát video tiếp theo hoặc trước đó. Tự động Video @@ -1354,6 +1380,9 @@ Hạn chế: Lượt không thích có thể không hiển thị nếu người Nút Thích thu gọn Nút Thích được thiết kế để tối ưu kích thước hiển thị. Nút Thích được thiết kế để đồng bộ khả năng hiển thị với nút Không thích. + Hiển thị số lượt thích ước tính + Số lượt thích ước tính đã hiển thị. + Số lượt thích ước tính đã ẩn. Thông báo ngắn nếu API không khả dụng Hiển thị thông báo ngắn nếu API Return YouTube Dislike không khả dụng. Thông báo ngắn nếu API Return YouTube Dislike không khả dụng đã tắt. @@ -1366,6 +1395,26 @@ Hạn chế: Lượt không thích có thể không hiển thị nếu người Số lượt không thích không khả dụng (đã đạt đến giới hạn API máy khách). Số lượt không thích không khả dụng (%s). Tải lại video để bình chọn sử dụng Return YouTube Dislike + Đã ẩn + + Return YouTube Username + Kích hoạt Return YouTube Username + Tên người dùng đang được áp dụng. + Tên hiển thị (@handle) đã được áp dụng. + Định dạng hiển thị + Tên người dùng + Tên người dùng (@handle) + \@handle (Tên người dùng) + Khoá Youtube Data API + Khoá nhà phát triển để sử dụng YouTube Data API v3. + Giới thiệu về khoá YouTube Data API + "Khoá nhà phát triển YouTube Data API v3 là một mã khoá cho phép các nhà phát triển thao tác lấy dữ liệu từ Youtube, và nó cũng cần thiết để thay thế tên hiển thị thành tên người dùng. + +Giới hạn truy cập hàng ngày cho các khoá API trên gói miễn phí là 10000 lần, với mỗi lượt truy cập chỉ thay thế được 1 bình luận. + +Nhấp vào đây để xem các bước phát hành khóa API." + Phát hành mã khoá + 1. Tạo dự án mới <a href=%1$s>Nhấn vào đây</a>.<br>2. Nhấn vào nút <b>CREATE</b>.<br>3. Đi tới YouTube Data API v3 <a href=%2$s>Nhấn vào đây</a>.<br>4. Nhấn vào nút <b>ENABLE</b>.<br>5. Nhấn vào nút <b>CREATE CREDENTIALS</b>.<br>6. Chọn <b>Public data</b>.<br>7. Nhấn vào nút <b>NEXT</b>.<br>8. Sao chép mã khoá API.<br><br>※ Khoá API không nên được chia sẻ với người khác, vì vậy nó cũng không xuất hiện trong cài đặt Nhập/Xuất. SponsorBlock Kích hoạt SponsorBlock @@ -1443,8 +1492,8 @@ Hạn chế: Lượt không thích có thể không hiển thị nếu người Hiển thị nút Bỏ qua Hiển thị trong thanh tiến trình Tắt - Màu sắc: - Màu sắc đã thay đổi. + Màu: + Đã thay đổi màu. Đặt lại màu Mã màu không hợp lệ. Đặt lại @@ -1458,10 +1507,10 @@ Hạn chế: Lượt không thích có thể không hiển thị nếu người Điều chỉnh phân đoạn mới Số mili giây bạn có thể tua đi và tua lại khi sử dụng các nút điều chỉnh thời gian trong lúc tạo phân đoạn mới. Giá trị nhập vào phải là một số dương. - Xem hướng dẫn - Hướng dẫn bao gồm các quy tắc và mẹo về cách tạo phân đoạn mới. - Thực hiện theo các hướng dẫn - Hãy đọc hướng dẫn của SponsorBlock trước khi tạo phân đoạn mới. + Xem nguyên tắc + Hướng dẫn bao gồm các nguyên tắc và mẹo về cách tạo phân đoạn mới. + Thực hiện theo các nguyên tắc + Hãy đọc nguyên tắc của SponsorBlock trước khi tạo phân đoạn mới. Đã đọc Xem ngay @@ -1567,7 +1616,7 @@ Hạn chế: Lượt không thích có thể không hiển thị nếu người Đang bỏ qua chuyển hướng URL khi mở các liên kết xuất hiện trên YouTube. Đang chuyển hướng URL khi mở các liên kết xuất hiện trên YouTube. Mở theo mặc định - Để mở liên kết YouTube trong RVX, hãy kích hoạt \'Mở liên kết được hỗ trợ\' và bật các địa chỉ web được hỗ trợ. + Để mở liên kết YouTube trong RVX, hãy kích hoạt \'Mở các đường liên kết được hỗ trợ\' và thêm các đường liên kết được hỗ trợ. Mở GmsCore Kích hoạt thông báo đám mây để nhận thông báo. GmsCore chưa được cài đặt. Hãy cài đặt nó đi nào. @@ -1582,7 +1631,7 @@ Hãy làm theo hướng dẫn của 'Don't kill my app!' và tiến hành cài Nhấn vào Tiếp tục và tắt tối ưu hóa pin." Tiếp tục - Liên kết sạch khi chia sẻ + Làm sạch liên kết chia sẻ Loại bỏ các tham số truy vấn theo dõi khỏi URL khi chia sẻ liên kết. Vô hiệu hoá giao thức QUIC "Vô hiệu hoá giao thức QUIC của CronetEngine để giảm độ trễ khi phát video." @@ -1636,9 +1685,9 @@ Nhấn vào Tiếp tục và tắt tối ưu hóa pin." • Video có thể kết thúc sớm 1 giây. • Không có bộ giải mã âm thanh opus." "• Mục Bản âm thanh bị thiếu. -• Mục 'Âm lượng ổn định' không khả dụng." +• Mục Âm lượng ổn định không khả dụng." "• Mục Bản âm thanh bị thiếu. -• Mục 'Âm lượng ổn định' không khả dụng." +• Mục Âm lượng ổn định không khả dụng." • Video có thể không phát được. Buộc iOS sử dụng AVC (H.264) Bộ giải mã video trên iOS là AVC (H.264). @@ -1673,12 +1722,12 @@ AVC (H.264) có độ phân giải tối đa 1080p, và phát video sẽ dùng n Nhiều hơn Tùy chỉnh - Nguyên gốc - AFN Xanh - AFN Đỏ + Stock + AFN Blue + AFN Red MMT - Revancify Xanh - Revancify Đỏ + Revancify Blue + Revancify Red YouTube Nguyên gốc Không bao gồm diff --git a/src/main/resources/youtube/translations/zh-rCN/strings.xml b/src/main/resources/youtube/translations/zh-rCN/strings.xml index a6f050fac1..90f124aa61 100644 --- a/src/main/resources/youtube/translations/zh-rCN/strings.xml +++ b/src/main/resources/youtube/translations/zh-rCN/strings.xml @@ -11,6 +11,11 @@ 你想继续吗? 重启应用以正常加载界面布局 刷新并重启 + "YouTube 服务端的一个错误会导致一些用户隐藏像点赞数、播放量和上传日期这样的滚动数字文本 + +此问题的临时解决方法是伪装应用版本为19.13.37 + +您是否想要在重启应用程序之前伪装应用版本?" 正常 视频下载器应用包名 已安装的外部下载器应用的包名,例如 NewPipe 或 YTDLnis @@ -171,7 +176,7 @@ 频道标签过滤器已禁用 频道标签过滤器 要过滤的频道标签名称列表,每行一个名称 - "短视频 + "Shorts 播放列表 商店" 隐藏浏览商店按钮 @@ -230,8 +235,8 @@ "搜索、首页、订阅和评论会被过滤以隐藏与关键词短语匹配的内容 限制: -• 某些Shorts可能不会隐藏 -• 某些UI组件可能不会隐藏 +• 某些 Shorts 可能不会隐藏 +• 某些 UI 组件可能不会隐藏 • 搜索关键词可能不会显示任何结果" 全词匹配 环绕一个关键字/短语带双引号会防止视频标题和频道名称<br><br>例如,<br><b>\"ai\"</b> 将隐藏视频: <b>How does AI work?</b><br>但不会隐藏: <b>What does fair use mean?</b> @@ -250,10 +255,6 @@ • 来自未订阅频道且观看次数少于1,000次的视频" 隐藏低播放量的视频 从主页隐藏未订阅的频道上传的且播放量少于 1,000 的推荐视频 - 隐藏 UPCOMING 视频 - "隐藏带有 UPCOMING 标签的视频 - -注意:启用此选项也隐藏通知按钮" 观看次数过滤器 启用首页播放量过滤器 @@ -276,7 +277,7 @@ "主页/订阅/搜索结果被过滤以隐藏视图小于或大于指定数字的视频 限制: -• 不能隐藏短视频 +• 不能隐藏 Shorts • 不能过滤 0 播放量的视频" 在相关视频中隐藏 相关视频已隐藏 @@ -357,6 +358,7 @@ 18.33.40 - 恢复旧的 Shorts 选项卡 18.38.45 - 恢复旧的默认视频质量行为 \"18.48.39 - 禁止实时更新“播放量”和“喜欢次数” + 19.13.37 - 恢复旧版数字滚动动画风格 账户菜单 隐藏或显示账户菜单和“你”选项卡中的元素 @@ -512,6 +514,33 @@ 隐藏隐私菜单 隐私菜单已隐藏 隐私菜单已显示 + 隐藏新实验性功能菜单 + 新实验性功能菜单已隐藏 + 新实验性功能菜单已显示 + 隐藏购买与会员菜单 + 购买和会员菜单已隐藏 + 购买和会员菜单已显示 + 隐藏账单和支付菜单 + 账单和支付菜单已隐藏 + 账单和支付菜单已显示 + 隐藏通知菜单 + 通知菜单已隐藏 + 通知菜单已显示 + 隐藏已连接应用菜单 + 已连接的应用菜单已隐藏 + 已连接的应用菜单已显示 + 隐藏实时聊天菜单 + 实时聊天菜单已隐藏 + 实时聊天菜单已显示 + 隐藏字幕菜单 + 字幕菜单已隐藏 + 字幕菜单已显示 + 隐藏辅助功能菜单 + 辅助功能菜单已隐藏 + 辅助功能菜单已显示 + 隐藏关于菜单 + 关于菜单已隐藏 + 关于菜单已显示 工具栏 隐藏或更改工具栏上的组件,如工具栏按钮、搜索栏、标题 @@ -547,6 +576,12 @@ 隐藏语音搜索按钮 语音搜索按钮已隐藏 语音搜索按钮已显示 + 隐藏 YouTube 涂鸦 + YouTube 涂鸦已隐藏 + YouTube 涂鸦已显示 + "YouTube 涂鸦每年显示几天 + +如果 YouTube 涂鸦目前在您的地区显示且此设置已开启,搜索栏下方的过滤栏也会隐藏" 替换创建按钮 用设置按钮替换创建按钮 分配给按钮的操作类型 @@ -598,8 +633,8 @@ 信息面板已隐藏 信息面板已显示 隐藏实时聊天消息 - 实时聊天消息已隐藏\n\n此设置也适用于短视频 - 实时聊天消息已隐藏\n\n此设置也适用于短视频 + 实时聊天消息已隐藏\n\n此设置也适用于 Shorts + 实时聊天消息已显示\n\n此设置也适用于 Shorts 隐藏医疗面板 医疗面板已隐藏 医疗面板已显示 @@ -627,6 +662,9 @@ 隐藏缩放叠加层 缩放叠加层已隐藏 缩放叠加层已显示 + 清理视频字幕 + "像'#', 'Shop' 和 'N products' 这样的词组已在视频字幕中隐藏" + "像'#', 'Shop' 和 'N products' 这样的词组已在视频字幕中显示" 操作按钮 隐藏或显示视频下方的操作按钮 @@ -693,6 +731,9 @@ 隐藏会员评论横幅 会员评论中横幅已隐藏 会员评论中横幅已显示 + 隐藏高亮搜索链接 + 高亮搜索链接已隐藏 + 高亮搜索链接已显示 隐藏评论部分 评论部分已隐藏 评论部分已显示 @@ -705,9 +746,9 @@ 预览评论类型 这不会改变评论区的大小,因此可以在评论区打开即时聊天回放 这会改变评论区的大小,因此无法在评论区打开即时聊天回放 - 隐藏创建短片按钮 - 创建短片按钮已隐藏 - 创建短片按钮已显示 + 隐藏创建 Shorts 按钮 + 创建 Shorts 按钮已隐藏 + 创建 Shorts 按钮已显示 隐藏感谢按钮 感谢按钮已隐藏 感谢按钮已显示 @@ -720,6 +761,9 @@ 更改切换类型 使用文本切换 使用开关切换 + 隐藏 1080p Premium 菜单 + 1080p Premium 菜单已隐藏 + 1080p Premium 菜单已显示 隐藏音轨菜单 音轨菜单已隐藏 音轨菜单已显示 @@ -959,9 +1003,12 @@ 隐藏进度条缩略图预览 进度条缩略图预览已隐藏 进度条缩略图预览已显示 - 隐藏进度条中的章节 - 进度条中的章节已隐藏 - 进度条中的章节已显示 + 禁用进度条章节 + 进度条章节已禁用 + 进度条章节已启用 + 隐藏进度条章节标签 + 时间戳旁的章节标签已隐藏 + 时间戳旁的章节标签已显示 隐藏时间戳 时间戳已隐藏 时间戳已显示 @@ -1017,12 +1064,12 @@ 如果保存了不正确的字符串,则“展开视频描述”可能无法正常工作" 描述 - 短视频 - 禁用恢复短片播放器 - 应用启动时不会恢复短片播放器 - 应用启动时恢复短片播放器 + Shorts + 禁止恢复 Shorts 播放器 + 应用启动时不会恢复 Shorts 播放器 + 应用启动时恢复 Shorts 播放器 隐蔽悬浮按钮 - "‘使用此声音’等浮动按钮已在短视频频道标签中隐藏" + "‘使用此声音’等浮动按钮已在 Shorts 频道标签中隐藏" "‘使用此声音’等浮动按钮已在短视频频道标签中显示" Shorts 栏 @@ -1030,6 +1077,12 @@ "隐藏 Shorts 栏 已知问题:搜索结果中的官方标题将被隐藏" + 隐藏频道中的社区帖子 + "已在频道中隐藏 + +信息: +• 仅隐藏主页选项卡上带有 Shorts 标题的架子" + 频道中的社区帖子已显示 在首页和相关视频中隐藏 在首页和相关视频中隐藏 在首页和相关视频中显示 @@ -1043,13 +1096,13 @@ 在观看历史中隐藏 在观看历史中显示 - 更改短片重复状态 + 更改 Shorts 重复状态 自动播放 默认 暂停 重复播放 - 短视频播放器 + Shorts 播放器 隐藏或显示短视频播放器中的组件 隐藏加入按钮 加入按钮已隐藏 @@ -1167,7 +1220,7 @@ 长按时间戳以更改 Shorts 重复状态 Meta 面板底边距 配置从搜索栏到 Meta 面板的间距,范围在 0-64 之间 - Meta 面板底边距必须在0-64之间 已重置为默认值 + Meta 面板底边距必须在 0-64 之间 已重置为默认值 隐藏工具栏 工具栏已隐藏 工具栏已显示 @@ -1175,8 +1228,8 @@ 导航栏已隐藏 导航栏已显示 空白空间的高度百分比 - 配置隐藏导航栏时空白空间的高度百分比,介于0至100之间(%) - 高度百分比必须介于0-100之间(%) + 配置隐藏导航栏时空白空间的高度百分比,介于 0 到 100 之间(%) + 高度百分比必须介于 0-100 之间(%) 替换频道标识 频道名称已使用 频道标识已使用 @@ -1214,6 +1267,12 @@ 可滑动区域大小不能超过50 重置为默认值 滑动叠加层时长 滑动叠加层显示的时长(毫秒) + 亮度滑动灵敏度 + 配置亮度滑动的最小距离范围为 1 到 1000 (%)\n最小距离越短,亮度变化越快 + 亮度滑动灵敏度必须介于 1-1000 之间 (%) + 音量滑动灵敏度 + 配置音量滑动的最小距离范围为 1 到 1000 (%)\n\n最小距离越短,音量等级变化越快\n\n推荐的音量滑动灵敏度:在 15 级音量调节为 100%,在 150 级音量调节为 10% + 音量滑动灵敏度必须介于 1-1000 之间 (%) 禁用 HDR 视频自动亮度 HDR 视频自动亮度已禁用 HDR 视频自动亮度已启用 @@ -1301,18 +1360,21 @@ Return YouTube Dislike 点踩数已显示 点踩数已隐藏 - 点踩 - Shorts 中显示的不喜欢内容 %s - "在短视频中显示点踩 + 在 Shorts 中显示点踩数 + 点踩数已在 Shorts 中显示 + "在 Shorts 中显示点踩数 -限制:在无痕模式下,点踩可能不会显示" - 点踩已隐藏 +限制:在无痕模式下,点踩数可能不会显示" + 点踩数已在 Shorts 中隐藏 点踩百分比 点踩显示为百分比 点踩显示为数字 紧凑点赞按钮 点赞按钮样式:最小宽度 点赞按钮样式:最佳显示 + 显示预估点赞数 + 预估点赞数已显示 + 预估点赞数已隐藏 如果 API 不可用,显示 Toast 如果 YouTube Dislike 不可用,会显示 Toast 如果 YouTube Dislike 不可用,不会显示 Toast @@ -1325,6 +1387,26 @@ 点踩数不可用(已达到客户端 API 限制) 点踩数不可用(%s) 重新加载视频以使用 Return YouTube Dislike进行投票 + 隐藏 + + 返回 YouTube 用户名 + 启用返回 YouTube 用户名 + 用户名已使用 + Handle 已使用 + 显示格式 + 用户名 + 用户名 (@handle) + \@handle (用户名) + YouTube Data API 密钥 + 使用 YouTube Data API v3 的开发者密钥 + 关于 YouTube Data API 密钥 + "需要 YouTube Data API v3 开发者密钥才能将 handle 替换为用户名 + +免费计划下的 API 密钥每日配额为 10,000,其中每替换 1 条评论的 handle 为用户名会消耗 1 个配额 + +点击查看如何获取 API 密钥" + 获取 YouTube Data API v3 开发者密钥 + 1. 前往 <a href=%1$s> 创建一个新项目 </a>.<br>2. 点击 <b> 创建 </b> 按钮 <br>3. 前往 <a href=%2$s> YouTube Data API v3 </a>.<br>4. 点击 <b> 启用 </b> 按钮 <br>5. 点击 <b> 创建凭据 </b> 按钮 <br>6. 选择 <b> 公共数据 </b> 选项 <br>7. 点击 <b> 下一步 </b> 按钮 <br>8. 复制 API 密钥 <br><br>※ API 密钥绝不可与他人分享,因此不包含在导入 / 导出设置中 SponsorBlock 启用 SponsorBlock diff --git a/src/main/resources/youtube/translations/zh-rTW/strings.xml b/src/main/resources/youtube/translations/zh-rTW/strings.xml index b858d2452c..c9c76820d0 100644 --- a/src/main/resources/youtube/translations/zh-rTW/strings.xml +++ b/src/main/resources/youtube/translations/zh-rTW/strings.xml @@ -1,7 +1,7 @@ - 要啟用影片播放器的無障礙控制嗎? + 是否啟用影片播放器的無障礙控制? 由於已啟用無障礙服務,因此您的控制項被修改。 ReVanced Extended @@ -11,6 +11,11 @@ 你想繼續嗎? 重新啟動以套用更改後的介面 重新啟動以重新整理介面 + "YouTube 伺服器端存在一個錯誤,導致某些用戶隱藏滾動數位文字,例如按讚數、觀看次數和上傳日期。 + +此問題的臨時解決方法是將應用程式版本欺騙為 19.13.37。 + +您想在重新啟動應用程式之前偽裝應用程式版本嗎?" 一般 影片下載套件名 您安裝的外部下載器應用程式的套件名稱,例如 NewPipe 或 YTDLnis。 @@ -249,10 +254,6 @@ ・下方標有「其他人還看了」字樣的影片。" 隱藏低觀看次數的影片 在首頁隱藏來自未訂閱頻道的、觀看次數少於 1,000 次的影片。 - 隱藏即將發布的影片 - "隱藏帶有即將推出的標籤的影片。 - -注意:啟用此功能也會隱藏「通知我」按鈕。" 觀看次數篩選器 依觀看次數隱藏家庭影片 @@ -356,6 +357,7 @@ 18.33.40 - 恢復舊的 Shorts 頁籤 18.38.45 - 恢復舊版預設影片畫質 18.48.39 - 停用即時更新「觀看次數」和「喜歡次數」 + 19.13.37 - 恢復舊式滾動數位動畫 帳戶選單 隱藏或顯示帳戶選單和你的內容分頁中的元素。 @@ -661,6 +663,9 @@ 隱藏縮放疊加 縮放疊加被隱藏。 顯示縮放疊加。 + 清理影片字幕 + "像這樣的短語 '#', 'Shop' 和 'N products' 被隱藏在影片字幕中。" + "像這樣的短語 '#', 'Shop' 和 'N products' 被顯示在影片字幕中。" 操作按鈕 隱藏或顯示影片下方的操作按鈕 @@ -727,6 +732,9 @@ 隱藏會員評論橫幅 會員的評論橫幅已隱藏 會員的評論橫幅已顯示 + 隱藏被標記的搜尋連結 + 被標記的搜尋連結已隱藏 + 被標記的搜尋連結已顯示 隱藏評論部分 評論部分已隱藏 評論部分已顯示 @@ -754,6 +762,9 @@ 更改切換類型 使用檔案切換 使用開關切換 + 隱藏 1080p 進階選單 + 1080p 進階選單已隱藏。 + 1080p 進階選單已顯示。 隱藏音軌選單 音軌選單已隱藏 音軌選單已顯示 @@ -993,9 +1004,12 @@ 隱藏進度條縮略圖預覽 進度條縮略圖預覽已隱藏 進度條縮略圖預覽已顯示 - 隱藏進度條中的章節 - 進度條中的章節已隱藏 - 進度條中的章節已顯示 + 停用搜尋列章節 + 搜尋欄中的章節已停用。 + 搜尋欄中的章節已啟用。 + 隱藏搜尋列章節標籤 + 時間戳旁邊的章節標籤已隱藏。 + 時間戳旁邊的章節標籤已隱藏。 隱藏時間戳 時間戳已隱藏 時間戳已顯示 @@ -1063,6 +1077,12 @@ "隱藏短片欄 已知問題:搜索結果中的官方標題將被隱藏" + 隱藏在頻道中 + "隱藏在頻道中。 + +資訊: +• 僅隱藏主頁標籤上有 Shorts 標題的書架。" + 顯示在頻道中。 在首頁和相關影片中隱藏 在首頁和相關影片中隱藏 在首頁和相關影片中顯示 @@ -1245,6 +1265,12 @@ 可滑動區域大小不能超過50。重設為預設值。 滑動疊加層時長 滑動疊加層顯示的時長(毫秒) + 滑動控制 (亮度) 靈敏度 + 配置亮度滑動的最小距離,範圍為 1 到 1000 (%)。\n最小距離越短,亮度等級變化越快。 + 滑動控制 (亮度) 靈敏度的值必須在 1-1000 (%) 之間 + 滑動控制 (音量) 靈敏度 + 將音量滑動的最小距離配置為1 到1000 (%) 之間。 \n\n最小距離越短,亮度等級變化越快。 \n\n建議的音量滑動靈敏度在 15 個音量步長時為 100%,在 150 個音量步長時為 10%。 + 滑動控制 (音量) 靈敏度的值必須在 1-1000 (%) 之間 停用 HDR 影片自動亮度 HDR 影片自動亮度已停用 HDR 影片自動亮度已啟用 @@ -1347,6 +1373,9 @@ 緊湊點讚按鈕 點讚按鈕樣式:最小寬度 點讚按鈕樣式:最佳顯示 + 顯示估計喜歡的次數 + 估計喜歡的次數已顯示。 + 估計喜歡的次數已隱藏。 如果 API 無法使用,顯示提示訊息 如果 恢復 YouTube 倒讚 無法使用,則顯示提示訊息 如果 恢復 YouTube 倒讚 無法使用,不顯示訊息 @@ -1361,6 +1390,26 @@ 倒讚數不可用(已達到用戶端 API 限制) 倒讚數不可用(%s) 重新載入影片以使用 恢復 YouTube 倒讚 進行投票 + 隱藏 + + 恢復 YouTube 使用者名稱 + 啟用恢復 YouTube 使用者名稱 + 使用者名稱已被使用 + 使用者名稱已使用 + 顯示的格式 + 使用者名稱 + 使用者名稱 (@使用者帳號) + \@使用者帳號 (使用者名稱) + YouTube 資料 API 金鑰 + 使用 YouTube 資料 API v3 的開發人員金鑰 + 關於 YouTube 資料 API 金鑰 + "需要 YouTube 資料 API v3 開發人員金鑰才能將名字替換為使用者名稱。 + +免費方案的 API 金鑰每日配額為 10,000 個, 1個配額用於將名字替換為使用者名稱 以獲得1條留言。 + +按一下查看如何取得 API 金鑰。" + 取得 YouTube 資料 API v3 開發人員金鑰 + 1. 前往 <a href=%1$s>建立新專案&p;.<br>2.點擊<b>創建</b> 按鈕。<br>3.<br>轉到 <a href=%2$s>YouTube 資料 API v3</a>.<br>4.點選<b>啟用</b> 按鈕。<br>5.點選<b>建立憑證<b> 按鈕。 <br>6.選擇<b>公共資料</b> 選項。<br>7.點選<b>下一步</b> 按鈕。<br>8.複製 API 金鑰。<br><br>※ API 金鑰不應與其他人共用,因此它不包含在匯入/匯出設定中。 贊助區塊阻擋(SponsorBlock) 啟用 SponsorBlock @@ -1529,10 +1578,10 @@ 統計訊息暫時無法使用(API 出現問題) 加載中... SponsorBlock 已停用 - 你的用戶名:<b>%s</b> - 點擊這裡更改你的用戶名 - 無法更改用戶名:狀態:%1$d %2$s。 - 用戶名成功更改。 + 你的使用者名稱:<b>%s</b> + 點擊這裡變更你的使用者名稱 + 無法更改使用者名稱:狀態:%1$d %2$s。 + 使用者名稱變更完成 您的聲譽為 <b>%.2f</b> 你已經創建了 <b>%s</b> 段影片 點擊此處查看您的片段。 @@ -1566,7 +1615,7 @@ 繞過連結重定向 跟隨預設的重新載入行為 開啟預設應用程式設定 - 若要以外部瀏覽器開啟 RVX,請開啟「開啟支援連結」並啟用支援的網址。 + 若要以外部瀏覽器開啟 RVX,請在設定開啟「開啟支援連結」並啟用支援的網址。 打開 GmsCore 啟用雲端訊息傳遞以接收通知 GMSCore未安裝 請安裝 diff --git a/src/main/resources/youtube/visual/shared/drawable/revanced_preference_screen_return_youtube_username_icon.xml b/src/main/resources/youtube/visual/shared/drawable/revanced_preference_screen_return_youtube_username_icon.xml new file mode 100644 index 0000000000..83ae67b1f7 --- /dev/null +++ b/src/main/resources/youtube/visual/shared/drawable/revanced_preference_screen_return_youtube_username_icon.xml @@ -0,0 +1,18 @@ + + + + +