mirror of
https://github.com/revanced/revanced-patches
synced 2024-12-27 12:55:49 +01:00
refactor: Use raw string resources (#4109)
This commit is contained in:
parent
b639476a22
commit
c9b1a3bf60
@ -1,8 +1,8 @@
|
||||
package app.revanced.util.resource
|
||||
|
||||
import app.revanced.patcher.patch.PatchException
|
||||
import org.w3c.dom.Document
|
||||
import org.w3c.dom.Node
|
||||
import java.util.logging.Logger
|
||||
|
||||
/**
|
||||
* A string value.
|
||||
@ -19,13 +19,36 @@ class StringResource(
|
||||
) : BaseResource(name, "string") {
|
||||
override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) =
|
||||
super.serialize(ownerDocument, resourceCallback).apply {
|
||||
|
||||
fun String.validateAndroidStringEscaping() : String {
|
||||
if (value.startsWith('"') && value.endsWith('"')) {
|
||||
// Raw strings allow unescaped single quote but not double quote.
|
||||
if (!value.substring(1, value.length - 1).contains(Regex("(?<!\\\\)[\"]"))) {
|
||||
return this;
|
||||
}
|
||||
} else {
|
||||
if (value.contains('\n')) {
|
||||
// Don't throw an exception, otherwise unnoticed mistakes
|
||||
// in Crowdin can cause patching failures.
|
||||
// Incorrectly escaped strings still work but do not display as intended.
|
||||
Logger.getLogger(StringResource.javaClass.name).severe(
|
||||
"String $name is not raw but contains encoded new line characters: $value")
|
||||
}
|
||||
if (!value.contains(Regex("(?<!\\\\)['\"]"))) {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
Logger.getLogger(StringResource.javaClass.name).severe(
|
||||
"String $name cannot contain unescaped quotes in value: $value")
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
// if the string is un-formatted, explicitly add the formatted attribute
|
||||
if (!formatted) setAttribute("formatted", "false")
|
||||
|
||||
if (value.contains(Regex("(?<!\\\\)['\"]")))
|
||||
throw PatchException("String $name cannot contain unescaped quotes in value \"$value\".")
|
||||
|
||||
textContent = value
|
||||
textContent = value.validateAndroidStringEscaping();
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
@ -1,33 +1,22 @@
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@ -67,9 +56,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">MicroG GmsCore is not installed. Install it.</string>
|
||||
<string name="gms_core_dialog_title">Action needed</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore does not have permission to run in the background.\n\nFollow the \"Don\'t kill my app\" guide for your phone, and apply the instructions to your MicroG installation.\n\nThis is required for the app to work.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore does not have permission to run in the background.
|
||||
|
||||
Follow the \"Don\'t kill my app\" guide for your phone, and apply the instructions to your MicroG installation.
|
||||
|
||||
This is required for the app to work."</string>
|
||||
<string name="gms_core_dialog_open_website_text">Open website</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">MicroG GmsCore battery optimizations must be disabled to prevent issues.\n\nDisabling battery optimizations for MicroG will not negatively affect battery usage.\n\nTap the continue button and allow optimization changes.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"MicroG GmsCore battery optimizations must be disabled to prevent issues.
|
||||
|
||||
Disabling battery optimizations for MicroG will not negatively affect battery usage.
|
||||
|
||||
Tap the continue button and allow optimization changes."</string>
|
||||
<string name="gms_core_dialog_continue_text">Continue</string>
|
||||
</patch>
|
||||
</app>
|
||||
@ -107,7 +104,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_debug_toast_on_error_title">Show toast on ReVanced error</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Toast shown if error occurs</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">Toast not shown if error occurs</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">Turning off error toasts hides all ReVanced error notifications.\n\nYou will not be notified of any unexpected events.</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"Turning off error toasts hides all ReVanced error notifications.
|
||||
|
||||
You will not be notified of any unexpected events."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Disable like / subscribe button glow</string>
|
||||
@ -126,7 +125,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Watermark is hidden</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">Watermark is shown</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">Hide horizontal shelves</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">Shelves are hidden such as:\n• Breaking news\n• Continue watching\n• Explore more channels\n• Shopping\n• Watch it again</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"Shelves are hidden such as:
|
||||
• Breaking news
|
||||
• Continue watching
|
||||
• Explore more channels
|
||||
• Shopping
|
||||
• Watch it again"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">Shelves are shown</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
@ -278,8 +282,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_doodles_title">Hide YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Search bar Doodles are hidden</string>
|
||||
<string name="revanced_hide_doodles_summary_off">Search bar Doodles are shown</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">YouTube Doodles show up a few days each year.\n\nIf a 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.</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"YouTube Doodles are shown a few days each year.
|
||||
|
||||
If a 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."</string>
|
||||
<string name="revanced_custom_filter_screen_title">Custom filter</string>
|
||||
<string name="revanced_custom_filter_screen_summary">Hide components using custom filters</string>
|
||||
<string name="revanced_custom_filter_title">Enable custom filter</string>
|
||||
@ -304,9 +309,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_keyword_content_phrases_title">Keywords to hide</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">Keywords and phrases to hide, separated by new lines\n\nKeywords can be channel names or any text shown in video titles\n\nWords with uppercase letters in the middle must be entered with the casing (ie: iPhone, TikTok, LeBlanc)</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">"Keywords and phrases to hide, separated by new lines
|
||||
|
||||
Keywords can be channel names or any text shown in video titles
|
||||
|
||||
Words with uppercase letters in the middle must be entered with the casing (ie: iPhone, TikTok, LeBlanc)"</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">About keyword filtering</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">Home/Subscription/Search results are filtered to hide content that matches keyword phrases\n\nLimitations\n• Shorts cannot be hidden by channel name\n• Some UI components may not be hidden\n• Searching for a keyword may show no results</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">"Home/Subscription/Search results are filtered to hide content that matches keyword phrases
|
||||
|
||||
Limitations
|
||||
• Shorts cannot be hidden by channel name
|
||||
• Some UI components may not be hidden
|
||||
• Searching for a keyword may show no results"</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">Match whole words</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">Surrounding a keyword/phrase with double-quotes will prevent partial matches of video titles and channel names<br><br>For example,<br><b>\"ai\"</b> will hide the video: <b>How does AI work?</b><br>but will not hide: <b>What does fair use mean?</b></string>
|
||||
@ -322,7 +336,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_general_ads_summary_on">General ads are hidden</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">General ads are shown</string>
|
||||
<string name="revanced_hide_fullscreen_ads_title">Hide fullscreen ads</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">Fullscreen ads are hidden\n\nThis feature is only available for older devices</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">"Fullscreen ads are hidden
|
||||
|
||||
This feature is only available for older devices"</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_off">Fullscreen ads are shown</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">Hide buttoned ads</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">Buttoned ads are hidden</string>
|
||||
@ -496,7 +512,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Subscriptions button is shown</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">Switch Create with Notifications</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">Create button is switched with Notifications button\n\nNote: Enabling this also forcibly hides video ads</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"Create button is switched with Notifications button
|
||||
|
||||
Note: Enabling this also forcibly hides video ads"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">Create button is not switched with Notifications button</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">Hide navigation button labels</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">Labels are hidden</string>
|
||||
@ -739,7 +757,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_enable_summary_off">Dislikes are not shown</string>
|
||||
<string name="revanced_ryd_shorts_title">Show dislikes on Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Dislikes shown on Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">Dislikes shown on Shorts\n\nLimitation: Dislikes may not appear in incognito mode</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Dislikes shown on Shorts
|
||||
|
||||
Limitation: Dislikes may not appear in incognito mode"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Dislikes hidden on Shorts</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">Dislikes as percentage</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Dislikes shown as percentage</string>
|
||||
@ -783,7 +803,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Seekbar thumbnails are medium quality</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">Fullscreen seekbar thumbnails are high quality</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">Fullscreen seekbar thumbnails are medium quality</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">This will also restore thumbnails on livestreams that do not have seekbar thumbnails.\n\nSeekbar thumbnails will use the same quality as the current video.\n\nThis feature works best with a video quality of 720p or lower and when using a very fast internet connection.</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"This will also restore thumbnails on livestreams that do not have seekbar thumbnails.
|
||||
|
||||
Seekbar thumbnails will use the same quality as the current video.
|
||||
|
||||
This feature works best with a video quality of 720p or lower and when using a very fast internet connection."</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">Restore old seekbar thumbnails</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Seekbar thumbnails will appear above the seekbar</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Seekbar thumbnails will appear in fullscreen</string>
|
||||
@ -847,7 +871,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_settings_import_successful">Settings imported successfully</string>
|
||||
<string name="revanced_sb_settings_import_failed">Failed to import: %s</string>
|
||||
<string name="revanced_sb_settings_export_failed">Failed to export: %s</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">Your settings contain a private SponsorBlock userid.\n\nYour user id is like a password and it should never be shared.\n</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"Your settings contain a private SponsorBlock userid.
|
||||
|
||||
Your user id is like a password and it should never be shared.
|
||||
"</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">Do not show again</string>
|
||||
<string name="revanced_sb_diff_segments">Change segment behavior</string>
|
||||
<string name="revanced_sb_segments_sponsor">Sponsor</string>
|
||||
@ -907,9 +934,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_submit_failed_invalid">Unable to submit segment: %s</string>
|
||||
<string name="revanced_sb_submit_failed_timeout">SponsorBlock is temporarily down</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error">Unable to submit segment (status: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">Unable to submit segment.\nRate Limited (too many from the same user or IP)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">Unable to submit segment. Rate Limited (too many from the same user or IP)</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden">Can\'t submit the segment: %s</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">Can\'t submit the segment.\nAlready exists</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">"Can\'t submit the segment.
|
||||
Already exists"</string>
|
||||
<string name="revanced_sb_submit_succeeded">Segment submitted successfully</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock temporarily not available (API timed out)</string>
|
||||
@ -932,7 +960,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_new_segment_time_start">Time the segment begins at</string>
|
||||
<string name="revanced_sb_new_segment_time_end">Time the segment ends at</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">Are the times correct?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">The segment is from\n\n%1$s\nto\n%2$s\n\n(%3$s)\n\nReady to submit?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">"The segment is from
|
||||
|
||||
%1$s
|
||||
to
|
||||
%2$s
|
||||
|
||||
(%3$s)
|
||||
|
||||
Ready to submit?"</string>
|
||||
<string name="revanced_sb_new_segment_start_is_before_end">Start must be before the end</string>
|
||||
<string name="revanced_sb_new_segment_mark_locations_first">Mark two locations on the time bar first</string>
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">Preview the segment, and ensure it skips smoothly</string>
|
||||
@ -975,7 +1011,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_app_version_title">Spoof app version</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">Version spoofed</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">Version not spoofed</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">App version will be spoofed to an older version of YouTube.\n\nThis will change the appearance and features of the app, but unknown side effects may occur.\n\nIf later turned off, it is recommended to clear the app data to prevent UI bugs.</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"App version will be spoofed to an older version of YouTube.
|
||||
|
||||
This will change the appearance and features of the app, but unknown side effects may occur.
|
||||
|
||||
If later turned off, it is recommended to clear the app data to prevent UI bugs."</string>
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">Spoof app version target</string>
|
||||
@ -1038,19 +1078,28 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Corners are rounded</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Corners are square</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Enable double-tap and pinch to resize</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">Double-tap action and pinch to resize is enabled\n\n• Double tap to increase miniplayer size\n• Double tap again to restore original size</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Double-tap action and pinch to resize is enabled
|
||||
|
||||
• Double tap to increase miniplayer size
|
||||
• Double tap again to restore original size"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Double-tap action and pinch to resize is disabled</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Enable drag and drop</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">Drag and drop is enabled\n\nMiniplayer can be dragged to any corner of the screen</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Drag and drop is enabled
|
||||
|
||||
Miniplayer can be dragged to any corner of the screen"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Drag and drop is disabled</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Enable horizontal drag gesture</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">Horizontal drag gesture enabled\n\nMiniplayer can be dragged off screen to the left or right</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Horizontal drag gesture enabled
|
||||
|
||||
Miniplayer can be dragged off screen to the left or right"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Horizontal drag gesture disabled</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_title">Hide close button</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_on">Close button is hidden</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_off">Close button is shown</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_title">Hide expand and close buttons</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">Buttons are hidden\n\nSwipe to expand or close</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"Buttons are hidden
|
||||
|
||||
Swipe to expand or close"</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">Expand and close buttons are shown</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">Hide subtexts</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">Subtexts are hidden</string>
|
||||
@ -1081,7 +1130,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
<string name="revanced_bypass_image_region_restrictions_title">Bypass image region restrictions</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_on">Using image host yt4.ggpht.com</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">Using original image host\n\nEnabling this can fix missing images that are blocked in some regions</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"Using original image host
|
||||
|
||||
Enabling this can fix missing images that are blocked in some regions"</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
@ -1097,7 +1148,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow & Still captures</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_4">Still captures</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_title">DeArrow</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow provides crowd-sourced thumbnails for YouTube videos. These thumbnails are often more relevant than those provided by YouTube\n\nIf enabled, video URLs will be sent to the API server and no other data is sent. If a video does not have DeArrow thumbnails, then the original or still captures are shown\n\nTap here to learn more about DeArrow</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow provides crowd-sourced thumbnails for YouTube videos. These thumbnails are often more relevant than those provided by YouTube
|
||||
|
||||
If enabled, video URLs will be sent to the API server and no other data is sent. If a video does not have DeArrow thumbnails, then the original or still captures are shown
|
||||
|
||||
Tap here to learn more about DeArrow"</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">Show a toast if API is not available</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">Toast is shown if DeArrow is not available</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Toast is not shown if DeArrow is not available</string>
|
||||
@ -1136,8 +1191,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">Spoof device dimensions</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">Device dimensions spoofed\n\nHigher video qualities might be unlocked but you may experience video playback stuttering, worse battery life, and unknown side effects</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">Device dimensions not spoofed\n\nEnabling this can unlock higher video qualities</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"Device dimensions spoofed
|
||||
|
||||
Higher video qualities might be unlocked but you may experience video playback stuttering, worse battery life, and unknown side effects"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"Device dimensions not spoofed
|
||||
|
||||
Enabling this can unlock higher video qualities"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">Enabling this can cause video playback stuttering, worse battery life, and unknown side effects.</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
@ -1187,8 +1246,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_custom_speed_menu_summary_off">Custom speed menu is not shown</string>
|
||||
<string name="revanced_custom_playback_speeds_title">Custom playback speeds</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">Add or change the custom playback speeds</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Custom speeds must be less than %s. Using default values.</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Invalid custom playback speeds. Using default values.</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Custom speeds must be less than %s</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Invalid custom playback speeds</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">Auto</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
@ -1213,17 +1272,25 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Spoof the client video streams to prevent playback issues</string>
|
||||
<string name="revanced_spoof_video_streams_title">Spoof video streams</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">Video streams are spoofed</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">Video streams are not spoofed\n\nVideo playback may not work</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"Video streams are not spoofed
|
||||
|
||||
Video playback may not work"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">Turning off this setting may cause video playback issues.</string>
|
||||
<string name="revanced_spoof_video_streams_client_title">Default client</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Force AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video codec is forced to AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video codec is determined automatically</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Enabling this might improve battery life and fix playback stuttering.\n\nAVC has a maximum resolution of 1080p, Opus audio codec is not available, and video playback will use more internet data than VP9 or AV1.</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Enabling this might improve battery life and fix playback stuttering.
|
||||
|
||||
AVC has a maximum resolution of 1080p, Opus audio codec is not available, and video playback will use more internet data than VP9 or AV1."</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_title">iOS spoofing side effects</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">• Private kids videos may not play\n• Livestreams start from the beginning\n• Videos end 1 second early</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Private kids videos may not play
|
||||
• Livestreams start from the beginning
|
||||
• Videos end 1 second early"</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR spoofing side effects</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Kids videos may not play\n• Livestreams start from the beginning\n• Videos end 1 second early</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Kids videos may not play
|
||||
• Livestreams start from the beginning
|
||||
• Videos end 1 second early"</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">Default audio stream language</string>
|
||||
<string name="revanced_spoof_video_streams_language_DEFAULT">App language</string>
|
||||
<string name="revanced_spoof_video_streams_language_AR">Arabic</string>
|
||||
@ -1287,8 +1354,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_block_audio_ads_summary_off">Audio ads are unblocked</string>
|
||||
</patch>
|
||||
<patch id="ad.embedded.embeddedAdsPatch">
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s is unavailable. Ads may show. Try switching to another ad block service in settings.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s server returned an error. Ads may show. Try switching to another ad block service in settings.</string>
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s unavailable, ads may show. Try changing ad block service in settings.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s returned an error, ads may show. Try changing ad block service in settings.</string>
|
||||
<string name="revanced_block_embedded_ads_title">Block embedded video ads</string>
|
||||
<string name="revanced_block_embedded_ads_entry_1">Disabled</string>
|
||||
<string name="revanced_block_embedded_ads_entry_2">Luminous proxy</string>
|
||||
|
Loading…
Reference in New Issue
Block a user