Compare commits

...

89 Commits

Author SHA1 Message Date
semantic-release-bot
fe07033444 chore: Release v5.5.2-dev.2 [skip ci]
## [5.5.2-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.5.2-dev.1...v5.5.2-dev.2) (2024-12-17)

### Bug Fixes

* **YouTube - Hide layout components:** Hide new kind of community post ([#4155](https://github.com/ReVanced/revanced-patches/issues/4155)) ([246333f](246333f3dc))
2024-12-17 15:50:15 +00:00
Bceez
246333f3dc fix(YouTube - Hide layout components): Hide new kind of community post (#4155) 2024-12-17 19:46:46 +04:00
semantic-release-bot
d82b02e4f5 chore: Release v5.5.2-dev.1 [skip ci]
## [5.5.2-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.5.1...v5.5.2-dev.1) (2024-12-17)

### Bug Fixes

* **YouTube - Miniplayer:** Use estimated maximum on screen size for devices with low density screens ([#4150](https://github.com/ReVanced/revanced-patches/issues/4150)) ([c87c788](c87c788a26))
* **YouTube - SponsorBlock:** Show create new segment error messages using a dialog ([#4148](https://github.com/ReVanced/revanced-patches/issues/4148)) ([44995a9](44995a9f15))
2024-12-17 00:25:18 +00:00
LisoUseInAIKyrios
44995a9f15 fix(YouTube - SponsorBlock): Show create new segment error messages using a dialog (#4148) 2024-12-17 04:22:37 +04:00
LisoUseInAIKyrios
c87c788a26 fix(YouTube - Miniplayer): Use estimated maximum on screen size for devices with low density screens (#4150) 2024-12-17 04:22:16 +04:00
github-actions[bot]
4ef30618d1 chore: Sync translations (#4151) 2024-12-17 04:21:11 +04:00
oSumAtrIX
b23e6c39fc ci: Schedule pulling strings separately from opening a PR (#4146) 2024-12-16 23:02:13 +01:00
semantic-release-bot
de26766543 chore: Release v5.5.1 [skip ci]
## [5.5.1](https://github.com/ReVanced/revanced-patches/compare/v5.5.0...v5.5.1) (2024-12-16)

### Bug Fixes

* **YouTube:** Fix string translations ([5e8dfed](5e8dfed3e8))
2024-12-16 20:04:21 +00:00
oSumAtrIX
9168b5eaaf chore: Merge branch dev to main (#4142) 2024-12-16 21:01:56 +01:00
semantic-release-bot
c43b9b3b03 chore: Release v5.5.1-dev.1 [skip ci]
## [5.5.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.5.0...v5.5.1-dev.1) (2024-12-16)

### Bug Fixes

* **YouTube:** Fix string translations ([5e8dfed](5e8dfed3e8))
2024-12-16 20:00:52 +00:00
github-actions[bot]
5e8dfed3e8 fix(YouTube): Fix string translations 2024-12-16 23:58:23 +04:00
semantic-release-bot
d67dbba76f chore: Release v5.5.0 [skip ci]
# [5.5.0](https://github.com/ReVanced/revanced-patches/compare/v5.4.0...v5.5.0) (2024-12-16)

### Bug Fixes

* **Twitch:** Change recommended target to the latest app version ([9525137](9525137800))
* **YouTube - Spoof video streams:** Make livestreams start at the current time when using iOS client   ([#4137](https://github.com/ReVanced/revanced-patches/issues/4137)) ([5965478](59654788fc))
* **YouTube Music:** Add `Spoof client patch` to fix playback ([#4132](https://github.com/ReVanced/revanced-patches/issues/4132)) ([ccb6a7f](ccb6a7f161))

### Features

* **YouTube - Hide feed components:** Remove obsolete `Hide search result shelf header` option ([#4134](https://github.com/ReVanced/revanced-patches/issues/4134)) ([a7aab9a](a7aab9aeca))
* **YouTube - Navigation buttons:** Add options to disable translucent status bar and navigation bar ([#4133](https://github.com/ReVanced/revanced-patches/issues/4133)) ([9e6669d](9e6669d962))
* **YouTube:** Add `Force original audio` patch ([#4122](https://github.com/ReVanced/revanced-patches/issues/4122)) ([68304fd](68304fd96a))
2024-12-16 19:28:30 +00:00
oSumAtrIX
5dc93156e0 chore: Merge branch dev to main (#4123) 2024-12-16 20:25:26 +01:00
github-actions[bot]
5275413ab7 chore: Sync translations (#4136)
Co-authored-by: revanced-bot <github@revanced.app>
2024-12-16 20:24:58 +01:00
semantic-release-bot
248c05b670 chore: Release v5.5.0-dev.5 [skip ci]
# [5.5.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.5.0-dev.4...v5.5.0-dev.5) (2024-12-16)

### Features

* **YouTube - Navigation buttons:** Add options to disable translucent status bar and navigation bar ([#4133](https://github.com/ReVanced/revanced-patches/issues/4133)) ([9e6669d](9e6669d962))
2024-12-16 19:10:30 +00:00
LisoUseInAIKyrios
9e6669d962 feat(YouTube - Navigation buttons): Add options to disable translucent status bar and navigation bar (#4133) 2024-12-16 23:07:08 +04:00
semantic-release-bot
9c81d01cc8 chore: Release v5.5.0-dev.4 [skip ci]
# [5.5.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.5.0-dev.3...v5.5.0-dev.4) (2024-12-16)

### Bug Fixes

* **YouTube - Spoof video streams:** Make livestreams start at the current time when using iOS client   ([#4137](https://github.com/ReVanced/revanced-patches/issues/4137)) ([5965478](59654788fc))
2024-12-16 18:46:48 +00:00
LisoUseInAIKyrios
59654788fc fix(YouTube - Spoof video streams): Make livestreams start at the current time when using iOS client (#4137) 2024-12-16 22:43:50 +04:00
semantic-release-bot
4c44982cde chore: Release v5.5.0-dev.3 [skip ci]
# [5.5.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.5.0-dev.2...v5.5.0-dev.3) (2024-12-16)

### Features

* **YouTube - Hide feed components:** Remove obsolete `Hide search result shelf header` option ([#4134](https://github.com/ReVanced/revanced-patches/issues/4134)) ([a7aab9a](a7aab9aeca))
2024-12-16 18:18:23 +00:00
ILoveOpenSourceApplications
a7aab9aeca feat(YouTube - Hide feed components): Remove obsolete Hide search result shelf header option (#4134) 2024-12-16 19:15:22 +01:00
semantic-release-bot
7a8486f562 chore: Release v5.5.0-dev.2 [skip ci]
# [5.5.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.5.0-dev.1...v5.5.0-dev.2) (2024-12-16)

### Bug Fixes

* **YouTube Music:** Add `Spoof client patch` to fix playback ([#4132](https://github.com/ReVanced/revanced-patches/issues/4132)) ([ccb6a7f](ccb6a7f161))
2024-12-16 18:10:37 +00:00
oSumAtrIX
ccb6a7f161 fix(YouTube Music): Add Spoof client patch to fix playback (#4132) 2024-12-16 19:07:37 +01:00
LisoUseInAIKyrios
c792edfb77 chore: fix typo 2024-12-15 17:06:36 +04:00
semantic-release-bot
339cd6cc70 chore: Release v5.5.0-dev.1 [skip ci]
# [5.5.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.4.1-dev.1...v5.5.0-dev.1) (2024-12-15)

### Features

* **YouTube:** Add `Force original audio` patch ([#4122](https://github.com/ReVanced/revanced-patches/issues/4122)) ([68304fd](68304fd96a))
2024-12-15 12:55:13 +00:00
LisoUseInAIKyrios
68304fd96a feat(YouTube): Add Force original audio patch (#4122) 2024-12-15 16:51:34 +04:00
semantic-release-bot
4033048c9b chore: Release v5.4.1-dev.1 [skip ci]
## [5.4.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.4.0...v5.4.1-dev.1) (2024-12-14)

### Bug Fixes

* **Twitch:** Change recommended target to the latest app version ([9525137](9525137800))
2024-12-14 20:18:28 +00:00
LisoUseInAIKyrios
9525137800 fix(Twitch): Change recommended target to the latest app version 2024-12-15 00:15:00 +04:00
semantic-release-bot
0cf05fa2b0 chore: Release v5.4.0 [skip ci]
# [5.4.0](https://github.com/ReVanced/revanced-patches/compare/v5.3.0...v5.4.0) (2024-12-14)

### Bug Fixes

* **GmsCore support:** Adjust presentation of battery optimization dialog  ([#4091](https://github.com/ReVanced/revanced-patches/issues/4091)) ([2062660](2062660d60))
* **TikTok - Settings:** Use correct colors for dark mode ([#4087](https://github.com/ReVanced/revanced-patches/issues/4087)) ([18f1884](18f18849f3))
* **TikTok - SIM Spoof:** Change patch to default off to fix login ([#4084](https://github.com/ReVanced/revanced-patches/issues/4084)) ([3c47bff](3c47bfff1a))
* **YouTube - Hide ads:** Hide new type of featured promotions ([#4113](https://github.com/ReVanced/revanced-patches/issues/4113)) ([c348b10](c348b10a35))
* **YouTube - Spoof video streams:** Fix error toast that is sometimes shown ([#4090](https://github.com/ReVanced/revanced-patches/issues/4090)) ([3ec2577](3ec25778eb))
* **YouTube - Spoof video streams:** Resolve playback of age restricted videos ([#4096](https://github.com/ReVanced/revanced-patches/issues/4096)) ([32be03c](32be03c28d))
* **YouTube Music - Bypass certificate checks:** Add a recommended target version ([#4104](https://github.com/ReVanced/revanced-patches/issues/4104)) ([11216cd](11216cd942))
* **YouTube Music - Spoof video streams:** Disable stable volume ([#4097](https://github.com/ReVanced/revanced-patches/issues/4097)) ([78c5118](78c51182f2))

### Features

* Add Internal data documents provider patch ([#3830](https://github.com/ReVanced/revanced-patches/issues/3830)) ([89c45af](89c45afcc6))
* **Change package name:** Add options to change provider and permission package names to handle installation conflicts ([c44a4af](c44a4af406))
* **Twitch:** Make patches compatible with latest versions ([#4099](https://github.com/ReVanced/revanced-patches/issues/4099)) ([b217ca9](b217ca9f9d))
* **YouTube - Comments:** Add `Hide 'Chat summary'` ([#4110](https://github.com/ReVanced/revanced-patches/issues/4110)) ([8d06a4a](8d06a4a8ad))
2024-12-14 07:40:53 +00:00
oSumAtrIX
a9bfaf44e2 chore: Merge branch dev to main (#4078) 2024-12-14 08:37:30 +01:00
semantic-release-bot
7b08051371 chore: Release v5.4.0-dev.11 [skip ci]
# [5.4.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.10...v5.4.0-dev.11) (2024-12-14)

### Features

* **Twitch:** Make patches compatible with latest versions ([#4099](https://github.com/ReVanced/revanced-patches/issues/4099)) ([b217ca9](b217ca9f9d))
2024-12-14 07:36:35 +00:00
oSumAtrIX
b217ca9f9d feat(Twitch): Make patches compatible with latest versions (#4099) 2024-12-14 08:33:27 +01:00
github-actions[bot]
9482092579 chore: Sync translations (#4116) 2024-12-14 11:18:19 +04:00
semantic-release-bot
134c2e52bd chore: Release v5.4.0-dev.10 [skip ci]
# [5.4.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.9...v5.4.0-dev.10) (2024-12-13)

### Bug Fixes

* **YouTube - Hide ads:** Hide new type of featured promotions ([#4113](https://github.com/ReVanced/revanced-patches/issues/4113)) ([c348b10](c348b10a35))
2024-12-13 21:36:09 +00:00
ILoveOpenSourceApplications
c348b10a35 fix(YouTube - Hide ads): Hide new type of featured promotions (#4113) 2024-12-14 01:33:25 +04:00
github-actions[bot]
9a9ec7ef18 chore: Sync translations (#4114) 2024-12-14 01:32:59 +04:00
oSumAtrIX
e746507339 ci: Upload PR build artifact 2024-12-12 23:17:44 +01:00
oSumAtrIX
862ca077db ci: Only build relevant project 2024-12-12 23:17:09 +01:00
semantic-release-bot
138d43b34b chore: Release v5.4.0-dev.9 [skip ci]
# [5.4.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.8...v5.4.0-dev.9) (2024-12-12)

### Features

* **YouTube - Comments:** Add `Hide 'Chat summary'` ([#4110](https://github.com/ReVanced/revanced-patches/issues/4110)) ([8d06a4a](8d06a4a8ad))
2024-12-12 18:42:30 +00:00
ILoveOpenSourceApplications
8d06a4a8ad feat(YouTube - Comments): Add Hide 'Chat summary' (#4110) 2024-12-12 22:39:08 +04:00
github-actions[bot]
d7ca7c1733 chore: Sync translations (#4105) 2024-12-12 19:01:48 +04:00
LisoUseInAIKyrios
8e0b7db82a refactor: Use raw string resources (#4109) 2024-12-12 17:01:16 +04:00
semantic-release-bot
b9d7867cee chore: Release v5.4.0-dev.8 [skip ci]
# [5.4.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.7...v5.4.0-dev.8) (2024-12-11)

### Bug Fixes

* **YouTube Music - Bypass certificate checks:** Add a recommended target version ([#4104](https://github.com/ReVanced/revanced-patches/issues/4104)) ([11216cd](11216cd942))
2024-12-11 20:04:06 +00:00
LisoUseInAIKyrios
11216cd942 fix(YouTube Music - Bypass certificate checks): Add a recommended target version (#4104) 2024-12-11 21:00:32 +01:00
LisoUseInAIKyrios
b163e5f64d chore(YouTube): Simplify strings for translations 2024-12-11 17:54:17 +04:00
semantic-release-bot
5c2bbd0671 chore: Release v5.4.0-dev.7 [skip ci]
# [5.4.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.6...v5.4.0-dev.7) (2024-12-10)

### Bug Fixes

* **GmsCore support:** Adjust presentation of battery optimization dialog  ([#4091](https://github.com/ReVanced/revanced-patches/issues/4091)) ([2062660](2062660d60))
2024-12-10 21:47:35 +00:00
LisoUseInAIKyrios
2062660d60 fix(GmsCore support): Adjust presentation of battery optimization dialog (#4091)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2024-12-11 01:43:57 +04:00
semantic-release-bot
2d9f08a08e chore: Release v5.4.0-dev.6 [skip ci]
# [5.4.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.5...v5.4.0-dev.6) (2024-12-10)

### Bug Fixes

* **YouTube Music - Spoof video streams:** Disable stable volume ([#4097](https://github.com/ReVanced/revanced-patches/issues/4097)) ([78c5118](78c51182f2))
2024-12-10 21:08:47 +00:00
LisoUseInAIKyrios
78c51182f2 fix(YouTube Music - Spoof video streams): Disable stable volume (#4097) 2024-12-11 01:04:48 +04:00
semantic-release-bot
feac2ab439 chore: Release v5.4.0-dev.5 [skip ci]
# [5.4.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.4...v5.4.0-dev.5) (2024-12-10)

### Bug Fixes

* **YouTube - Spoof video streams:** Resolve playback of age restricted videos ([#4096](https://github.com/ReVanced/revanced-patches/issues/4096)) ([32be03c](32be03c28d))
2024-12-10 20:46:59 +00:00
LisoUseInAIKyrios
32be03c28d fix(YouTube - Spoof video streams): Resolve playback of age restricted videos (#4096) 2024-12-11 00:42:56 +04:00
github-actions[bot]
6a345eee37 chore: Sync translations (#4093) 2024-12-10 21:26:57 +04:00
LisoUseInAIKyrios
61be7731e3 refactor(YouTube - Spoof streaming data): Add more debug logging 2024-12-10 21:12:38 +04:00
semantic-release-bot
8295356f88 chore: Release v5.4.0-dev.4 [skip ci]
# [5.4.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.3...v5.4.0-dev.4) (2024-12-10)

### Bug Fixes

* **YouTube - Spoof video streams:** Fix error toast that is sometimes shown ([#4090](https://github.com/ReVanced/revanced-patches/issues/4090)) ([3ec2577](3ec25778eb))
2024-12-10 16:30:47 +00:00
LisoUseInAIKyrios
3ec25778eb fix(YouTube - Spoof video streams): Fix error toast that is sometimes shown (#4090) 2024-12-10 20:27:22 +04:00
LisoUseInAIKyrios
3faf0ac160 refactor(YouTube Music): Show error toast if GmsCore Support is included with root installation 2024-12-10 15:15:02 +04:00
LisoUseInAIKyrios
3ff559878b refactor(YouTube - Miniplayer): Use 'Default' language to describe unpatched Miniplayer type 2024-12-10 03:13:39 +04:00
LisoUseInAIKyrios
ed9c78da1e chore(YouTube - Spoof video streams): Improve error logging 2024-12-10 02:56:40 +04:00
semantic-release-bot
eefb59020e chore: Release v5.4.0-dev.3 [skip ci]
# [5.4.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.2...v5.4.0-dev.3) (2024-12-09)

### Bug Fixes

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

### Bug Fixes

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

### Features

* Add Internal data documents provider patch ([#3830](https://github.com/ReVanced/revanced-patches/issues/3830)) ([89c45af](89c45afcc6))
2024-12-09 17:52:14 +00:00
github-actions[bot]
5b15602896 chore: Sync translations (#4085) 2024-12-09 21:49:37 +04:00
Tim Schneeberger
89c45afcc6 feat: Add Internal data documents provider patch (#3830)
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2024-12-09 18:46:31 +01:00
LisoUseInAIKyrios
3c47bfff1a fix(TikTok - SIM Spoof): Change patch to default off to fix login (#4084) 2024-12-09 18:45:42 +01:00
semantic-release-bot
6af8e1b625 chore: Release v5.4.0-dev.1 [skip ci]
# [5.4.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.3.0...v5.4.0-dev.1) (2024-12-09)

### Features

* **Change package name:** Add options to change provider and permission package names to handle installation conflicts ([c44a4af](c44a4af406))
2024-12-09 06:55:58 +00:00
1fexd
c44a4af406 feat(Change package name): Add options to change provider and permission package names to handle installation conflicts
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2024-12-09 07:53:05 +01:00
semantic-release-bot
cb857b0fce chore: Release v5.3.0 [skip ci]
# [5.3.0](https://github.com/ReVanced/revanced-patches/compare/v5.2.3...v5.3.0) (2024-12-09)

### Bug Fixes

* **Change package name:** Prevent applying the patch to known incompatible apps ([#3943](https://github.com/ReVanced/revanced-patches/issues/3943)) ([b04a11a](b04a11a885))
* **Reddit:** Fix patches by using correct extension class ([95d56b1](95d56b1529))
* **Sync for Reddit:** Fix patches by using correct extension name ([5ae76f4](5ae76f4df8))
* **Twitter:** Merge correct extension by depending on correct extension patch ([35594d0](35594d0a20))
* **YouTube - Spoof video streams:** Add missing preferred language preference to the settings ([6462fb8](6462fb8cba))
* **YouTube - Spoof video streams:** Enable opus codec by updating iOS client version ([#4063](https://github.com/ReVanced/revanced-patches/issues/4063)) ([d1ae1f1](d1ae1f1da7))
* **YouTube - Spoof video streams:** Update `Force AVC` client data ([#4064](https://github.com/ReVanced/revanced-patches/issues/4064)) ([4a88f65](4a88f650c2))
* **YouTube Music - Permanent shuffle:** Remove obsolete and non functional patch ([#4073](https://github.com/ReVanced/revanced-patches/issues/4073)) ([4983e02](4983e021f9))

### Features

* **Nyx:** Remove broken `Unlock pro` patch ([87fe83a](87fe83aacf))
* **YouTube - Spoof video streams:** Allow picking a default audio language track ([#4050](https://github.com/ReVanced/revanced-patches/issues/4050)) ([538ed6d](538ed6d876))
* **YouTube Music:** Add `Spoof video streams` patch to fix playback ([#4065](https://github.com/ReVanced/revanced-patches/issues/4065)) ([cf4456c](cf4456c2ba))
* **YouTube:** Add `Open videos fullscreen` patch ([#4069](https://github.com/ReVanced/revanced-patches/issues/4069)) ([bee917f](bee917f4ed))
2024-12-09 06:10:59 +00:00
oSumAtrIX
e0322afbf0 chore: Merge branch dev to main (#4060) 2024-12-09 07:06:49 +01:00
semantic-release-bot
5f02f583be chore: Release v5.3.0-dev.7 [skip ci]
# [5.3.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.6...v5.3.0-dev.7) (2024-12-09)

### Bug Fixes

* **YouTube - Spoof video streams:** Add missing preferred language preference to the settings ([6462fb8](6462fb8cba))
2024-12-09 02:23:18 +00:00
LisoUseInAIKyrios
6462fb8cba fix(YouTube - Spoof video streams): Add missing preferred language preference to the settings 2024-12-09 06:19:49 +04:00
github-actions[bot]
f9dcce927e chore: Sync translations (#4076) 2024-12-09 06:19:26 +04:00
github-actions[bot]
69f9ab8345 chore: Sync translations (#4075) 2024-12-09 05:15:29 +04:00
semantic-release-bot
dd400ac2a0 chore: Release v5.3.0-dev.6 [skip ci]
# [5.3.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.5...v5.3.0-dev.6) (2024-12-09)

### Features

* **YouTube - Spoof video streams:** Allow picking a default audio language track ([#4050](https://github.com/ReVanced/revanced-patches/issues/4050)) ([538ed6d](538ed6d876))
2024-12-09 01:14:21 +00:00
LisoUseInAIKyrios
538ed6d876 feat(YouTube - Spoof video streams): Allow picking a default audio language track (#4050) 2024-12-09 05:11:00 +04:00
semantic-release-bot
5ff94dc34a chore: Release v5.3.0-dev.5 [skip ci]
# [5.3.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.4...v5.3.0-dev.5) (2024-12-09)

### Bug Fixes

* **Change package name:** Prevent applying the patch to known incompatible apps ([#3943](https://github.com/ReVanced/revanced-patches/issues/3943)) ([b04a11a](b04a11a885))
* **YouTube Music - Permanent shuffle:** Remove obsolete and non functional patch ([#4073](https://github.com/ReVanced/revanced-patches/issues/4073)) ([4983e02](4983e021f9))

### Features

* **YouTube:** Add `Open videos fullscreen` patch ([#4069](https://github.com/ReVanced/revanced-patches/issues/4069)) ([bee917f](bee917f4ed))
2024-12-09 00:50:48 +00:00
LisoUseInAIKyrios
b04a11a885 fix(Change package name): Prevent applying the patch to known incompatible apps (#3943) 2024-12-09 04:46:47 +04:00
LisoUseInAIKyrios
4983e021f9 fix(YouTube Music - Permanent shuffle): Remove obsolete and non functional patch (#4073) 2024-12-09 04:44:12 +04:00
LisoUseInAIKyrios
bee917f4ed feat(YouTube): Add Open videos fullscreen patch (#4069)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2024-12-09 04:43:20 +04:00
semantic-release-bot
c94376bc4c chore: Release v5.3.0-dev.4 [skip ci]
# [5.3.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.3...v5.3.0-dev.4) (2024-12-09)

### Features

* **Nyx:** Remove broken `Unlock pro` patch ([87fe83a](87fe83aacf))
2024-12-09 00:36:16 +00:00
oSumAtrIX
87fe83aacf feat(Nyx): Remove broken Unlock pro patch 2024-12-09 01:32:41 +01:00
semantic-release-bot
92d282e963 chore: Release v5.3.0-dev.3 [skip ci]
# [5.3.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.2...v5.3.0-dev.3) (2024-12-09)

### Bug Fixes

* **YouTube - Spoof video streams:** Update `Force AVC` client data ([#4064](https://github.com/ReVanced/revanced-patches/issues/4064)) ([4a88f65](4a88f650c2))
2024-12-09 00:16:04 +00:00
LisoUseInAIKyrios
4a88f650c2 fix(YouTube - Spoof video streams): Update Force AVC client data (#4064) 2024-12-09 04:12:36 +04:00
semantic-release-bot
8b67716506 chore: Release v5.3.0-dev.2 [skip ci]
# [5.3.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.1...v5.3.0-dev.2) (2024-12-08)

### Bug Fixes

* **Reddit:** Fix patches by using correct extension class ([95d56b1](95d56b1529))
2024-12-08 22:01:18 +00:00
LisoUseInAIKyrios
95d56b1529 fix(Reddit): Fix patches by using correct extension class 2024-12-09 01:58:31 +04:00
semantic-release-bot
b1f3b12fa1 chore: Release v5.3.0-dev.1 [skip ci]
# [5.3.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.2.4-dev.3...v5.3.0-dev.1) (2024-12-08)

### Features

* **YouTube Music:** Add `Spoof video streams` patch to fix playback ([#4065](https://github.com/ReVanced/revanced-patches/issues/4065)) ([cf4456c](cf4456c2ba))
2024-12-08 15:23:18 +00:00
oSumAtrIX
cf4456c2ba feat(YouTube Music): Add Spoof video streams patch to fix playback (#4065)
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
2024-12-08 16:19:29 +01:00
semantic-release-bot
d509a3f397 chore: Release v5.2.4-dev.3 [skip ci]
## [5.2.4-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.2.4-dev.2...v5.2.4-dev.3) (2024-12-07)

### Bug Fixes

* **YouTube - Spoof video streams:** Enable opus codec by updating iOS client version ([#4063](https://github.com/ReVanced/revanced-patches/issues/4063)) ([d1ae1f1](d1ae1f1da7))
2024-12-07 20:18:41 +00:00
kitadai31
d1ae1f1da7 fix(YouTube - Spoof video streams): Enable opus codec by updating iOS client version (#4063) 2024-12-08 00:15:36 +04:00
semantic-release-bot
9c1c90864c chore: Release v5.2.4-dev.2 [skip ci]
## [5.2.4-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.2.4-dev.1...v5.2.4-dev.2) (2024-12-07)

### Bug Fixes

* **Sync for Reddit:** Fix patches by using correct extension name ([5ae76f4](5ae76f4df8))
2024-12-07 06:07:08 +00:00
oSumAtrIX
5ae76f4df8 fix(Sync for Reddit): Fix patches by using correct extension name 2024-12-07 07:04:55 +01:00
171 changed files with 23611 additions and 8173 deletions

View File

@@ -28,4 +28,10 @@ jobs:
- name: Build
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: ./gradlew build --no-daemon
run: ./gradlew :patches:buildAndroid --no-daemon
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: revanced-patches
path: patches/build/libs

View File

@@ -1,6 +1,8 @@
name: Pull strings
on:
schedule:
- cron: "0 */8 * * *"
workflow_dispatch:
jobs:
@@ -23,14 +25,18 @@ jobs:
config: crowdin.yml
download_translations: true
localization_branch_name: feat/translations
create_pull_request: true
pull_request_title: "chore: Sync translations"
pull_request_body: "Sync translations from [crowdin.com/project/revanced](https://crowdin.com/project/revanced)"
pull_request_base_branch_name: "dev"
commit_message: "chore: Sync translations"
github_user_name: revanced-bot
github_user_email: github@revanced.app
create_pull_request: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
- name: Open pull request
if: github.event_name == 'workflow_dispatch'
uses: repo-sync/pull-request@v2
with:
source_branch: feat/translations
destination_branch: dev
pr_title: "chore: Sync translations"
pr_body: "Sync translations from [crowdin.com/project/revanced](https://crowdin.com/project/revanced)"
pr_draft: true

View File

@@ -35,7 +35,7 @@ jobs:
- name: Build
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: ./gradlew build clean
run: ./gradlew :patches:buildAndroid clean
- name: Setup Node.js
uses: actions/setup-node@v4

View File

@@ -1,3 +1,285 @@
## [5.5.2-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.5.2-dev.1...v5.5.2-dev.2) (2024-12-17)
### Bug Fixes
* **YouTube - Hide layout components:** Hide new kind of community post ([#4155](https://github.com/ReVanced/revanced-patches/issues/4155)) ([08f68cb](https://github.com/ReVanced/revanced-patches/commit/08f68cb5d33f2cfe656d2f93d159c69981f31418))
## [5.5.2-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.5.1...v5.5.2-dev.1) (2024-12-17)
### Bug Fixes
* **YouTube - Miniplayer:** Use estimated maximum on screen size for devices with low density screens ([#4150](https://github.com/ReVanced/revanced-patches/issues/4150)) ([2694158](https://github.com/ReVanced/revanced-patches/commit/2694158c3c9935ede21c96832533222f850068df))
* **YouTube - SponsorBlock:** Show create new segment error messages using a dialog ([#4148](https://github.com/ReVanced/revanced-patches/issues/4148)) ([5870906](https://github.com/ReVanced/revanced-patches/commit/587090636dfff0b358b15026cf7d47c65a4296dc))
## [5.5.1](https://github.com/ReVanced/revanced-patches/compare/v5.5.0...v5.5.1) (2024-12-16)
### Bug Fixes
* **YouTube:** Fix string translations ([52e04d3](https://github.com/ReVanced/revanced-patches/commit/52e04d340c1a85f3d683c67a15ae96529432d5fe))
## [5.5.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.5.0...v5.5.1-dev.1) (2024-12-16)
### Bug Fixes
* **YouTube:** Fix string translations ([52e04d3](https://github.com/ReVanced/revanced-patches/commit/52e04d340c1a85f3d683c67a15ae96529432d5fe))
# [5.5.0](https://github.com/ReVanced/revanced-patches/compare/v5.4.0...v5.5.0) (2024-12-16)
### Bug Fixes
* **Twitch:** Change recommended target to the latest app version ([fb32972](https://github.com/ReVanced/revanced-patches/commit/fb32972f4de92dac1fc5d73f56a392a671c4e94b))
* **YouTube - Spoof video streams:** Make livestreams start at the current time when using iOS client ([#4137](https://github.com/ReVanced/revanced-patches/issues/4137)) ([140f484](https://github.com/ReVanced/revanced-patches/commit/140f484b4b251b0dfa94163a63f61f45f5302052))
* **YouTube Music:** Add `Spoof client patch` to fix playback ([#4132](https://github.com/ReVanced/revanced-patches/issues/4132)) ([b092508](https://github.com/ReVanced/revanced-patches/commit/b0925088e8b41636e285cb234593d545604ce461))
### Features
* **YouTube - Hide feed components:** Remove obsolete `Hide search result shelf header` option ([#4134](https://github.com/ReVanced/revanced-patches/issues/4134)) ([c71443a](https://github.com/ReVanced/revanced-patches/commit/c71443a08883ab10ef2553213c03b00e7c580a43))
* **YouTube - Navigation buttons:** Add options to disable translucent status bar and navigation bar ([#4133](https://github.com/ReVanced/revanced-patches/issues/4133)) ([a2d2141](https://github.com/ReVanced/revanced-patches/commit/a2d2141cec9b0b4929e07a8010889b21c324b229))
* **YouTube:** Add `Force original audio` patch ([#4122](https://github.com/ReVanced/revanced-patches/issues/4122)) ([f4aa440](https://github.com/ReVanced/revanced-patches/commit/f4aa4406080b91f01d623e54b11b99ea849ddcdf))
# [5.5.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.5.0-dev.4...v5.5.0-dev.5) (2024-12-16)
### Features
* **YouTube - Navigation buttons:** Add options to disable translucent status bar and navigation bar ([#4133](https://github.com/ReVanced/revanced-patches/issues/4133)) ([a2d2141](https://github.com/ReVanced/revanced-patches/commit/a2d2141cec9b0b4929e07a8010889b21c324b229))
# [5.5.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.5.0-dev.3...v5.5.0-dev.4) (2024-12-16)
### Bug Fixes
* **YouTube - Spoof video streams:** Make livestreams start at the current time when using iOS client ([#4137](https://github.com/ReVanced/revanced-patches/issues/4137)) ([140f484](https://github.com/ReVanced/revanced-patches/commit/140f484b4b251b0dfa94163a63f61f45f5302052))
# [5.5.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.5.0-dev.2...v5.5.0-dev.3) (2024-12-16)
### Features
* **YouTube - Hide feed components:** Remove obsolete `Hide search result shelf header` option ([#4134](https://github.com/ReVanced/revanced-patches/issues/4134)) ([c71443a](https://github.com/ReVanced/revanced-patches/commit/c71443a08883ab10ef2553213c03b00e7c580a43))
# [5.5.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.5.0-dev.1...v5.5.0-dev.2) (2024-12-16)
### Bug Fixes
* **YouTube Music:** Add `Spoof client patch` to fix playback ([#4132](https://github.com/ReVanced/revanced-patches/issues/4132)) ([b092508](https://github.com/ReVanced/revanced-patches/commit/b0925088e8b41636e285cb234593d545604ce461))
# [5.5.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.4.1-dev.1...v5.5.0-dev.1) (2024-12-15)
### Features
* **YouTube:** Add `Force original audio` patch ([#4122](https://github.com/ReVanced/revanced-patches/issues/4122)) ([f4aa440](https://github.com/ReVanced/revanced-patches/commit/f4aa4406080b91f01d623e54b11b99ea849ddcdf))
## [5.4.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.4.0...v5.4.1-dev.1) (2024-12-14)
### Bug Fixes
* **Twitch:** Change recommended target to the latest app version ([fb32972](https://github.com/ReVanced/revanced-patches/commit/fb32972f4de92dac1fc5d73f56a392a671c4e94b))
# [5.4.0](https://github.com/ReVanced/revanced-patches/compare/v5.3.0...v5.4.0) (2024-12-14)
### Bug Fixes
* **GmsCore support:** Adjust presentation of battery optimization dialog ([#4091](https://github.com/ReVanced/revanced-patches/issues/4091)) ([5d8fc1b](https://github.com/ReVanced/revanced-patches/commit/5d8fc1bcd4e453298cfac086cdbdf279612bfb63))
* **TikTok - Settings:** Use correct colors for dark mode ([#4087](https://github.com/ReVanced/revanced-patches/issues/4087)) ([6bd22ff](https://github.com/ReVanced/revanced-patches/commit/6bd22ffa7e8af4d8f5d2d3b1711bd92c44b4e4aa))
* **TikTok - SIM Spoof:** Change patch to default off to fix login ([#4084](https://github.com/ReVanced/revanced-patches/issues/4084)) ([f4659a3](https://github.com/ReVanced/revanced-patches/commit/f4659a328eaf600e1e5f02a66fa2af4b6d8dc7c1))
* **YouTube - Hide ads:** Hide new type of featured promotions ([#4113](https://github.com/ReVanced/revanced-patches/issues/4113)) ([13c7592](https://github.com/ReVanced/revanced-patches/commit/13c7592b21defd27e3a7aa9b219ffc0247bb5914))
* **YouTube - Spoof video streams:** Fix error toast that is sometimes shown ([#4090](https://github.com/ReVanced/revanced-patches/issues/4090)) ([4c46cb2](https://github.com/ReVanced/revanced-patches/commit/4c46cb27a02c6f29626cd769b6a8e825645d5b16))
* **YouTube - Spoof video streams:** Resolve playback of age restricted videos ([#4096](https://github.com/ReVanced/revanced-patches/issues/4096)) ([839a404](https://github.com/ReVanced/revanced-patches/commit/839a4045f1bb1759d89047834e0b7695781e82a3))
* **YouTube Music - Bypass certificate checks:** Add a recommended target version ([#4104](https://github.com/ReVanced/revanced-patches/issues/4104)) ([17a5a6c](https://github.com/ReVanced/revanced-patches/commit/17a5a6c1691b0c23f601d3355b72f122c2bd5dcb))
* **YouTube Music - Spoof video streams:** Disable stable volume ([#4097](https://github.com/ReVanced/revanced-patches/issues/4097)) ([16bb9df](https://github.com/ReVanced/revanced-patches/commit/16bb9dfc299612f3922724c136878606987ab132))
### Features
* Add Internal data documents provider patch ([#3830](https://github.com/ReVanced/revanced-patches/issues/3830)) ([cb22f65](https://github.com/ReVanced/revanced-patches/commit/cb22f652ed678d81ffda9ece659b3971225d6931))
* **Change package name:** Add options to change provider and permission package names to handle installation conflicts ([75c740c](https://github.com/ReVanced/revanced-patches/commit/75c740c6ba2e0c62e567f7dc90cdad368fc4f372))
* **Twitch:** Make patches compatible with latest versions ([#4099](https://github.com/ReVanced/revanced-patches/issues/4099)) ([eecfbb7](https://github.com/ReVanced/revanced-patches/commit/eecfbb7122a9072e55e687f2c003f63108654888))
* **YouTube - Comments:** Add `Hide 'Chat summary'` ([#4110](https://github.com/ReVanced/revanced-patches/issues/4110)) ([269493c](https://github.com/ReVanced/revanced-patches/commit/269493cd198604f1438ea2850fb68fe900d0e56f))
# [5.4.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.10...v5.4.0-dev.11) (2024-12-14)
### Features
* **Twitch:** Make patches compatible with latest versions ([#4099](https://github.com/ReVanced/revanced-patches/issues/4099)) ([eecfbb7](https://github.com/ReVanced/revanced-patches/commit/eecfbb7122a9072e55e687f2c003f63108654888))
# [5.4.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.9...v5.4.0-dev.10) (2024-12-13)
### Bug Fixes
* **YouTube - Hide ads:** Hide new type of featured promotions ([#4113](https://github.com/ReVanced/revanced-patches/issues/4113)) ([13c7592](https://github.com/ReVanced/revanced-patches/commit/13c7592b21defd27e3a7aa9b219ffc0247bb5914))
# [5.4.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.8...v5.4.0-dev.9) (2024-12-12)
### Features
* **YouTube - Comments:** Add `Hide 'Chat summary'` ([#4110](https://github.com/ReVanced/revanced-patches/issues/4110)) ([269493c](https://github.com/ReVanced/revanced-patches/commit/269493cd198604f1438ea2850fb68fe900d0e56f))
# [5.4.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.7...v5.4.0-dev.8) (2024-12-11)
### Bug Fixes
* **YouTube Music - Bypass certificate checks:** Add a recommended target version ([#4104](https://github.com/ReVanced/revanced-patches/issues/4104)) ([17a5a6c](https://github.com/ReVanced/revanced-patches/commit/17a5a6c1691b0c23f601d3355b72f122c2bd5dcb))
# [5.4.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.6...v5.4.0-dev.7) (2024-12-10)
### Bug Fixes
* **GmsCore support:** Adjust presentation of battery optimization dialog ([#4091](https://github.com/ReVanced/revanced-patches/issues/4091)) ([5d8fc1b](https://github.com/ReVanced/revanced-patches/commit/5d8fc1bcd4e453298cfac086cdbdf279612bfb63))
# [5.4.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.5...v5.4.0-dev.6) (2024-12-10)
### Bug Fixes
* **YouTube Music - Spoof video streams:** Disable stable volume ([#4097](https://github.com/ReVanced/revanced-patches/issues/4097)) ([16bb9df](https://github.com/ReVanced/revanced-patches/commit/16bb9dfc299612f3922724c136878606987ab132))
# [5.4.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.4...v5.4.0-dev.5) (2024-12-10)
### Bug Fixes
* **YouTube - Spoof video streams:** Resolve playback of age restricted videos ([#4096](https://github.com/ReVanced/revanced-patches/issues/4096)) ([839a404](https://github.com/ReVanced/revanced-patches/commit/839a4045f1bb1759d89047834e0b7695781e82a3))
# [5.4.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.3...v5.4.0-dev.4) (2024-12-10)
### Bug Fixes
* **YouTube - Spoof video streams:** Fix error toast that is sometimes shown ([#4090](https://github.com/ReVanced/revanced-patches/issues/4090)) ([4c46cb2](https://github.com/ReVanced/revanced-patches/commit/4c46cb27a02c6f29626cd769b6a8e825645d5b16))
# [5.4.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.2...v5.4.0-dev.3) (2024-12-09)
### Bug Fixes
* **TikTok - Settings:** Use correct colors for dark mode ([#4087](https://github.com/ReVanced/revanced-patches/issues/4087)) ([6bd22ff](https://github.com/ReVanced/revanced-patches/commit/6bd22ffa7e8af4d8f5d2d3b1711bd92c44b4e4aa))
# [5.4.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.1...v5.4.0-dev.2) (2024-12-09)
### Bug Fixes
* **TikTok - SIM Spoof:** Change patch to default off to fix login ([#4084](https://github.com/ReVanced/revanced-patches/issues/4084)) ([f4659a3](https://github.com/ReVanced/revanced-patches/commit/f4659a328eaf600e1e5f02a66fa2af4b6d8dc7c1))
### Features
* Add Internal data documents provider patch ([#3830](https://github.com/ReVanced/revanced-patches/issues/3830)) ([cb22f65](https://github.com/ReVanced/revanced-patches/commit/cb22f652ed678d81ffda9ece659b3971225d6931))
# [5.4.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.3.0...v5.4.0-dev.1) (2024-12-09)
### Features
* **Change package name:** Add options to change provider and permission package names to handle installation conflicts ([75c740c](https://github.com/ReVanced/revanced-patches/commit/75c740c6ba2e0c62e567f7dc90cdad368fc4f372))
# [5.3.0](https://github.com/ReVanced/revanced-patches/compare/v5.2.3...v5.3.0) (2024-12-09)
### Bug Fixes
* **Change package name:** Prevent applying the patch to known incompatible apps ([#3943](https://github.com/ReVanced/revanced-patches/issues/3943)) ([44936e7](https://github.com/ReVanced/revanced-patches/commit/44936e71e846f72f7279950232a5dba37765ceb3))
* **Reddit:** Fix patches by using correct extension class ([70bdc68](https://github.com/ReVanced/revanced-patches/commit/70bdc6840d465399625aa1ae0259f49e72711955))
* **Sync for Reddit:** Fix patches by using correct extension name ([030093e](https://github.com/ReVanced/revanced-patches/commit/030093e913aab3fab43935eedbaeba0f6c0491bb))
* **Twitter:** Merge correct extension by depending on correct extension patch ([8281cf6](https://github.com/ReVanced/revanced-patches/commit/8281cf6a3eead8cc25a277371e0b0ab2be982497))
* **YouTube - Spoof video streams:** Add missing preferred language preference to the settings ([630633c](https://github.com/ReVanced/revanced-patches/commit/630633cf57c65c65e5578046413e17670ae336e8))
* **YouTube - Spoof video streams:** Enable opus codec by updating iOS client version ([#4063](https://github.com/ReVanced/revanced-patches/issues/4063)) ([0af156f](https://github.com/ReVanced/revanced-patches/commit/0af156f18972c5f089af4bb69824968d2a47d18f))
* **YouTube - Spoof video streams:** Update `Force AVC` client data ([#4064](https://github.com/ReVanced/revanced-patches/issues/4064)) ([7d537dd](https://github.com/ReVanced/revanced-patches/commit/7d537ddff4bb5421fa320741275131a66ef5c7bb))
* **YouTube Music - Permanent shuffle:** Remove obsolete and non functional patch ([#4073](https://github.com/ReVanced/revanced-patches/issues/4073)) ([fbc6ab6](https://github.com/ReVanced/revanced-patches/commit/fbc6ab6a357b351f02d4d486ddc2072cf53199c3))
### Features
* **Nyx:** Remove broken `Unlock pro` patch ([1fe8b16](https://github.com/ReVanced/revanced-patches/commit/1fe8b164eab0c4fa80ab2da2581977f5111a2858))
* **YouTube - Spoof video streams:** Allow picking a default audio language track ([#4050](https://github.com/ReVanced/revanced-patches/issues/4050)) ([ede666b](https://github.com/ReVanced/revanced-patches/commit/ede666b5cb64fcbaa1334ad8bef79e2634ced113))
* **YouTube Music:** Add `Spoof video streams` patch to fix playback ([#4065](https://github.com/ReVanced/revanced-patches/issues/4065)) ([cf3116a](https://github.com/ReVanced/revanced-patches/commit/cf3116a7583d09c25c798a85687a056f143656f0))
* **YouTube:** Add `Open videos fullscreen` patch ([#4069](https://github.com/ReVanced/revanced-patches/issues/4069)) ([296d63b](https://github.com/ReVanced/revanced-patches/commit/296d63bd42c338a01efbcb2df702e5822d05a5f1))
# [5.3.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.6...v5.3.0-dev.7) (2024-12-09)
### Bug Fixes
* **YouTube - Spoof video streams:** Add missing preferred language preference to the settings ([630633c](https://github.com/ReVanced/revanced-patches/commit/630633cf57c65c65e5578046413e17670ae336e8))
# [5.3.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.5...v5.3.0-dev.6) (2024-12-09)
### Features
* **YouTube - Spoof video streams:** Allow picking a default audio language track ([#4050](https://github.com/ReVanced/revanced-patches/issues/4050)) ([ede666b](https://github.com/ReVanced/revanced-patches/commit/ede666b5cb64fcbaa1334ad8bef79e2634ced113))
# [5.3.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.4...v5.3.0-dev.5) (2024-12-09)
### Bug Fixes
* **Change package name:** Prevent applying the patch to known incompatible apps ([#3943](https://github.com/ReVanced/revanced-patches/issues/3943)) ([44936e7](https://github.com/ReVanced/revanced-patches/commit/44936e71e846f72f7279950232a5dba37765ceb3))
* **YouTube Music - Permanent shuffle:** Remove obsolete and non functional patch ([#4073](https://github.com/ReVanced/revanced-patches/issues/4073)) ([fbc6ab6](https://github.com/ReVanced/revanced-patches/commit/fbc6ab6a357b351f02d4d486ddc2072cf53199c3))
### Features
* **YouTube:** Add `Open videos fullscreen` patch ([#4069](https://github.com/ReVanced/revanced-patches/issues/4069)) ([296d63b](https://github.com/ReVanced/revanced-patches/commit/296d63bd42c338a01efbcb2df702e5822d05a5f1))
# [5.3.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.3...v5.3.0-dev.4) (2024-12-09)
### Features
* **Nyx:** Remove broken `Unlock pro` patch ([1fe8b16](https://github.com/ReVanced/revanced-patches/commit/1fe8b164eab0c4fa80ab2da2581977f5111a2858))
# [5.3.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.2...v5.3.0-dev.3) (2024-12-09)
### Bug Fixes
* **YouTube - Spoof video streams:** Update `Force AVC` client data ([#4064](https://github.com/ReVanced/revanced-patches/issues/4064)) ([7d537dd](https://github.com/ReVanced/revanced-patches/commit/7d537ddff4bb5421fa320741275131a66ef5c7bb))
# [5.3.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.1...v5.3.0-dev.2) (2024-12-08)
### Bug Fixes
* **Reddit:** Fix patches by using correct extension class ([70bdc68](https://github.com/ReVanced/revanced-patches/commit/70bdc6840d465399625aa1ae0259f49e72711955))
# [5.3.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.2.4-dev.3...v5.3.0-dev.1) (2024-12-08)
### Features
* **YouTube Music:** Add `Spoof video streams` patch to fix playback ([#4065](https://github.com/ReVanced/revanced-patches/issues/4065)) ([cf3116a](https://github.com/ReVanced/revanced-patches/commit/cf3116a7583d09c25c798a85687a056f143656f0))
## [5.2.4-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.2.4-dev.2...v5.2.4-dev.3) (2024-12-07)
### Bug Fixes
* **YouTube - Spoof video streams:** Enable opus codec by updating iOS client version ([#4063](https://github.com/ReVanced/revanced-patches/issues/4063)) ([0af156f](https://github.com/ReVanced/revanced-patches/commit/0af156f18972c5f089af4bb69824968d2a47d18f))
## [5.2.4-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.2.4-dev.1...v5.2.4-dev.2) (2024-12-07)
### Bug Fixes
* **Sync for Reddit:** Fix patches by using correct extension name ([030093e](https://github.com/ReVanced/revanced-patches/commit/030093e913aab3fab43935eedbaeba0f6c0491bb))
## [5.2.4-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.2.3...v5.2.4-dev.1) (2024-12-07)

View File

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

View File

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

View File

@@ -0,0 +1 @@
// Do not remove. Necessary for the extension plugin to be applied to the project.

View File

@@ -0,0 +1 @@
<manifest/>

View File

@@ -0,0 +1,27 @@
package app.revanced.extension.music.spoof;
/**
* @noinspection unused
*/
public class SpoofClientPatch {
private static final int CLIENT_TYPE_ID = 26;
private static final String CLIENT_VERSION = "6.21";
private static final String DEVICE_MODEL = "iPhone16,2";
private static final String OS_VERSION = "17.7.2.21H221";
public static int getClientId() {
return CLIENT_TYPE_ID;
}
public static String getClientVersion() {
return CLIENT_VERSION;
}
public static String getClientModel() {
return DEVICE_MODEL;
}
public static String getOsVersion() {
return OS_VERSION;
}
}

View File

@@ -1,12 +1,16 @@
package app.revanced.extension.patches;
package app.revanced.extension.reddit.patches;
import com.reddit.domain.model.ILink;
import java.util.ArrayList;
import java.util.List;
@SuppressWarnings("unused")
public final class FilterPromotedLinksPatch {
/**
* Injection point.
*
* Filters list from promoted links.
**/
public static List<?> filterChildren(final Iterable<?> links) {

View File

@@ -24,7 +24,9 @@ import java.net.URL;
* @noinspection unused
*/
public class GmsCoreSupport {
public static final String ORIGINAL_UNPATCHED_PACKAGE_NAME = "com.google.android.youtube";
private static final String PACKAGE_NAME_YOUTUBE = "com.google.android.youtube";
private static final String PACKAGE_NAME_YOUTUBE_MUSIC = "com.google.android.apps.youtube.music";
private static final String GMS_CORE_PACKAGE_NAME
= getGmsCoreVendorGroupId() + ".android.gms";
private static final Uri GMS_CORE_PROVIDER
@@ -52,17 +54,20 @@ public class GmsCoreSupport {
private static void showBatteryOptimizationDialog(Activity context,
String dialogMessageRef,
String positiveButtonStringRef,
String positiveButtonTextRef,
DialogInterface.OnClickListener onPositiveClickListener) {
// Do not set cancelable to false, to allow using back button to skip the action,
// just in case the check can never be satisfied.
var dialog = new AlertDialog.Builder(context)
.setIconAttribute(android.R.attr.alertDialogIcon)
.setTitle(str("gms_core_dialog_title"))
.setMessage(str(dialogMessageRef))
.setPositiveButton(str(positiveButtonStringRef), onPositiveClickListener)
.create();
Utils.showDialog(context, dialog);
// Use a delay to allow the activity to finish initializing.
// Otherwise, if device is in dark mode the dialog is shown with wrong color scheme.
Utils.runOnMainThreadDelayed(() -> {
// Do not set cancelable to false, to allow using back button to skip the action,
// just in case the battery change can never be satisfied.
var dialog = new AlertDialog.Builder(context)
.setTitle(str("gms_core_dialog_title"))
.setMessage(str(dialogMessageRef))
.setPositiveButton(str(positiveButtonTextRef), onPositiveClickListener)
.create();
Utils.showDialog(context, dialog);
}, 100);
}
/**
@@ -74,7 +79,8 @@ public class GmsCoreSupport {
// Verify the user has not included GmsCore for a root installation.
// GmsCore Support changes the package name, but with a mounted installation
// all manifest changes are ignored and the original package name is used.
if (context.getPackageName().equals(ORIGINAL_UNPATCHED_PACKAGE_NAME)) {
String packageName = context.getPackageName();
if (packageName.equals(PACKAGE_NAME_YOUTUBE) || packageName.equals(PACKAGE_NAME_YOUTUBE_MUSIC)) {
Logger.printInfo(() -> "App is mounted with root, but GmsCore patch was included");
// Cannot use localize text here, since the app will load
// resources from the unpatched app and all patch strings are missing.
@@ -99,7 +105,18 @@ public class GmsCoreSupport {
return;
}
// Check if GmsCore is running in the background.
// Check if GmsCore is whitelisted from battery optimizations.
if (batteryOptimizationsEnabled(context)) {
Logger.printInfo(() -> "GmsCore is not whitelisted from battery optimizations");
showBatteryOptimizationDialog(context,
"gms_core_dialog_not_whitelisted_using_battery_optimizations_message",
"gms_core_dialog_continue_text",
(dialog, id) -> openGmsCoreDisableBatteryOptimizationsIntent(context));
return;
}
// Check if GmsCore is currently running in the background.
try (var client = context.getContentResolver().acquireContentProviderClient(GMS_CORE_PROVIDER)) {
if (client == null) {
Logger.printInfo(() -> "GmsCore is not running in the background");
@@ -108,18 +125,8 @@ public class GmsCoreSupport {
"gms_core_dialog_not_whitelisted_not_allowed_in_background_message",
"gms_core_dialog_open_website_text",
(dialog, id) -> open(DONT_KILL_MY_APP_LINK));
return;
}
}
// Check if GmsCore is whitelisted from battery optimizations.
if (batteryOptimizationsEnabled(context)) {
Logger.printInfo(() -> "GmsCore is not whitelisted from battery optimizations");
showBatteryOptimizationDialog(context,
"gms_core_dialog_not_whitelisted_using_battery_optimizations_message",
"gms_core_dialog_continue_text",
(dialog, id) -> openGmsCoreDisableBatteryOptimizationsIntent(context));
}
} catch (Exception ex) {
Logger.printException(() -> "checkGmsCore failure", ex);
}
@@ -143,12 +150,10 @@ public class GmsCoreSupport {
private static String getGmsCoreDownload() {
final var vendorGroupId = getGmsCoreVendorGroupId();
//noinspection SwitchStatementWithTooFewBranches
switch (vendorGroupId) {
case "app.revanced":
return "https://github.com/revanced/gmscore/releases/latest";
default:
return vendorGroupId + ".android.gms";
}
return switch (vendorGroupId) {
case "app.revanced" -> "https://github.com/revanced/gmscore/releases/latest";
default -> vendorGroupId + ".android.gms";
};
}
// Modified by a patch. Do not touch.

View File

@@ -4,8 +4,10 @@ import android.annotation.SuppressLint;
import android.app.*;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.os.Build;
@@ -47,6 +49,7 @@ public class Utils {
private static Context context;
private static String versionName;
private static String applicationLabel;
private Utils() {
} // utility class
@@ -61,28 +64,30 @@ public class Utils {
return ""; // Value is replaced during patching.
}
private static PackageInfo getPackageInfo() throws PackageManager.NameNotFoundException {
final var packageName = Objects.requireNonNull(getContext()).getPackageName();
PackageManager packageManager = context.getPackageManager();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
return packageManager.getPackageInfo(
packageName,
PackageManager.PackageInfoFlags.of(0)
);
}
return packageManager.getPackageInfo(
packageName,
0
);
}
/**
* @return The version name of the app, such as 19.11.43
*/
public static String getAppVersionName() {
if (versionName == null) {
try {
final var packageName = Objects.requireNonNull(getContext()).getPackageName();
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
packageInfo = packageManager.getPackageInfo(
packageName,
PackageManager.PackageInfoFlags.of(0)
);
} else {
packageInfo = packageManager.getPackageInfo(
packageName,
0
);
}
versionName = packageInfo.versionName;
versionName = getPackageInfo().versionName;
} catch (Exception ex) {
Logger.printException(() -> "Failed to get package info", ex);
versionName = "Unknown";
@@ -92,6 +97,19 @@ public class Utils {
return versionName;
}
public static String getApplicationName() {
if (applicationLabel == null) {
try {
ApplicationInfo applicationInfo = getPackageInfo().applicationInfo;
applicationLabel = (String) applicationInfo.loadLabel(context.getPackageManager());
} catch (Exception ex) {
Logger.printException(() -> "Failed to get application name", ex);
applicationLabel = "Unknown";
}
}
return applicationLabel;
}
/**
* Hide a view by setting its layout height and width to 1dp.
@@ -325,7 +343,7 @@ public class Utils {
public static void restartApp(@NonNull Context context) {
String packageName = context.getPackageName();
Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
Intent intent = Objects.requireNonNull(context.getPackageManager().getLaunchIntentForPackage(packageName));
Intent mainIntent = Intent.makeRestartActivityTask(intent.getComponent());
// Required for API 34 and later
// Ref: https://developer.android.com/about/versions/14/behavior-changes-14#safer-intents
@@ -499,6 +517,12 @@ public class Utils {
);
}
public static boolean isDarkModeEnabled(Context context) {
Configuration config = context.getResources().getConfiguration();
final int currentNightMode = config.uiMode & Configuration.UI_MODE_NIGHT_MASK;
return currentNightMode == Configuration.UI_MODE_NIGHT_YES;
}
/**
* Automatically logs any exceptions the runnable throws.
*

View File

@@ -3,10 +3,14 @@ package app.revanced.extension.shared.settings;
import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE;
import static app.revanced.extension.shared.settings.Setting.parent;
import static app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.SpoofiOSAvailability;
import app.revanced.extension.shared.spoof.AudioStreamLanguage;
import app.revanced.extension.shared.spoof.ClientType;
/**
* Settings shared across multiple apps.
*
* <p>
* To ensure this class is loaded when the UI is created, app specific setting bundles should extend
* or reference this class.
*/
@@ -16,4 +20,11 @@ public class BaseSettings {
public static final BooleanSetting DEBUG_TOAST_ON_ERROR = new BooleanSetting("revanced_debug_toast_on_error", TRUE, "revanced_debug_toast_on_error_user_dialog_message");
public static final IntegerSetting CHECK_ENVIRONMENT_WARNINGS_ISSUED = new IntegerSetting("revanced_check_environment_warnings_issued", 0, true, false);
public static final BooleanSetting SPOOF_VIDEO_STREAMS = new BooleanSetting("revanced_spoof_video_streams", TRUE, true, "revanced_spoof_video_streams_user_dialog_message");
public static final EnumSetting<AudioStreamLanguage> SPOOF_VIDEO_STREAMS_LANGUAGE = new EnumSetting<>("revanced_spoof_video_streams_language", AudioStreamLanguage.DEFAULT, new SpoofiOSAvailability());
public static final BooleanSetting SPOOF_VIDEO_STREAMS_IOS_FORCE_AVC = new BooleanSetting("revanced_spoof_video_streams_ios_force_avc", FALSE, true,
"revanced_spoof_video_streams_ios_force_avc_user_dialog_message", new SpoofiOSAvailability());
public static final EnumSetting<ClientType> SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client", ClientType.ANDROID_VR, true, parent(SPOOF_VIDEO_STREAMS));
}

View File

@@ -7,7 +7,6 @@ import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.StringRef;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.preference.SharedPrefCategory;
import org.jetbrains.annotations.NotNull;
import org.json.JSONException;
import org.json.JSONObject;
@@ -330,7 +329,7 @@ public abstract class Setting<T> {
return value.equals(defaultValue);
}
@NotNull
@NonNull
@Override
public String toString() {
return key + "=" + get();

View File

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

View File

@@ -0,0 +1,113 @@
package app.revanced.extension.shared.spoof;
import java.util.Locale;
public enum AudioStreamLanguage {
/**
* YouTube default.
* Can be the original language or can be app language,
* depending on what YouTube decides to pick as the default.
*/
DEFAULT,
// Language codes found in locale_config.xml
// Region specific variants of Chinese/English/Spanish/French have been removed.
AF,
AM,
AR,
AS,
AZ,
BE,
BG,
BN,
BS,
CA,
CS,
DA,
DE,
EL,
EN,
ES,
ET,
EU,
FA,
FI,
FR,
GL,
GU,
HI,
HE, // App uses obsolete 'IW' and 'HE' is modern ISO code.
HR,
HU,
HY,
ID,
IS,
IT,
JA,
KA,
KK,
KM,
KN,
KO,
KY,
LO,
LT,
LV,
MK,
ML,
MN,
MR,
MS,
MY,
NE,
NL,
NB,
OR,
PA,
PL,
PT_BR,
PT_PT,
RO,
RU,
SI,
SK,
SL,
SQ,
SR,
SV,
SW,
TA,
TE,
TH,
TL,
TR,
UK,
UR,
UZ,
VI,
ZH,
ZU;
private final String iso639_1;
AudioStreamLanguage() {
String name = name();
final int regionSeparatorIndex = name.indexOf('_');
if (regionSeparatorIndex >= 0) {
iso639_1 = name.substring(0, regionSeparatorIndex).toLowerCase(Locale.US)
+ name.substring(regionSeparatorIndex);
} else {
iso639_1 = name().toLowerCase(Locale.US);
}
}
public String getIso639_1() {
// Changing the app language does not force the app to completely restart,
// so the default needs to be the current language and not a static field.
if (this == DEFAULT) {
return Locale.getDefault().toLanguageTag();
}
return iso639_1;
}
}

View File

@@ -1,52 +1,60 @@
package app.revanced.extension.youtube.patches.spoof;
import static app.revanced.extension.youtube.patches.spoof.DeviceHardwareSupport.allowAV1;
import static app.revanced.extension.youtube.patches.spoof.DeviceHardwareSupport.allowVP9;
package app.revanced.extension.shared.spoof;
import android.os.Build;
import androidx.annotation.Nullable;
import app.revanced.extension.shared.settings.BaseSettings;
public enum ClientType {
// Specific purpose for age restricted, or private videos, because the iOS client is not logged in.
// https://dumps.tadiphone.dev/dumps/oculus/eureka
ANDROID_VR(28,
"ANDROID_VR",
"Quest 3",
"12",
"com.google.android.apps.youtube.vr.oculus/1.56.21 (Linux; U; Android 12; GB) gzip",
"32", // Android 12.1
"1.56.21",
"ANDROID_VR",
true
),
true,
false),
// Specific for kids videos.
// https://dumps.tadiphone.dev/dumps/oculus/eureka
IOS(5,
// iPhone 15 supports AV1 hardware decoding.
// Only use if this Android device also has hardware decoding.
allowAV1()
? "iPhone16,2" // 15 Pro Max
: "iPhone11,4", // XS Max
// iOS 14+ forces VP9.
allowVP9()
? "17.5.1.21F90"
: "13.7.17H35",
allowVP9()
? "com.google.ios.youtube/19.10.7 (iPhone; U; CPU iOS 17_5_1 like Mac OS X)"
: "com.google.ios.youtube/19.10.7 (iPhone; U; CPU iOS 13_7 like Mac OS X)",
"IOS",
forceAVC()
? "iPhone12,5" // 11 Pro Max (last device with iOS 13)
: "iPhone16,2", // 15 Pro Max
// iOS 13 and earlier uses only AVC. 14+ adds VP9 and AV1.
forceAVC()
? "13.7.17H35" // Last release of iOS 13.
: "17.5.1.21F90",
forceAVC()
? "com.google.ios.youtube/17.40.5 (iPhone; U; CPU iOS 13_7 like Mac OS X)"
: "com.google.ios.youtube/19.47.7 (iPhone; U; CPU iOS 17_5_1 like Mac OS X)",
null,
// Version number should be a valid iOS release.
// https://www.ipa4fun.com/history/185230
"19.10.7",
"IOS",
false
forceAVC()
// Some newer versions can also force AVC,
// but 17.40 is the last version that supports iOS 13.
? "17.40.5"
: "19.47.7",
false,
true
);
private static boolean forceAVC() {
return BaseSettings.SPOOF_VIDEO_STREAMS_IOS_FORCE_AVC.get();
}
/**
* YouTube
* <a href="https://github.com/zerodytrash/YouTube-Internal-Clients?tab=readme-ov-file#clients">client type</a>
*/
public final int id;
public final String clientName;
/**
* Device model, equivalent to {@link Build#MODEL} (System property: ro.product.model)
*/
@@ -69,11 +77,6 @@ public enum ClientType {
@Nullable
public final String androidSdkVersion;
/**
* Client name.
*/
public final String clientName;
/**
* App version.
*/
@@ -84,22 +87,28 @@ public enum ClientType {
*/
public final boolean canLogin;
/**
* If a language code should be used.
*/
public final boolean useLanguageCode;
ClientType(int id,
String clientName,
String deviceModel,
String osVersion,
String userAgent,
@Nullable String androidSdkVersion,
String clientVersion,
String clientName,
boolean canLogin
) {
boolean canLogin,
boolean useLanguageCode) {
this.id = id;
this.clientName = clientName;
this.deviceModel = deviceModel;
this.osVersion = osVersion;
this.userAgent = userAgent;
this.androidSdkVersion = androidSdkVersion;
this.clientVersion = clientVersion;
this.clientName = clientName;
this.canLogin = canLogin;
this.useLanguageCode = useLanguageCode;
}
}

View File

@@ -1,4 +1,4 @@
package app.revanced.extension.youtube.patches.spoof;
package app.revanced.extension.shared.spoof;
import android.net.Uri;
@@ -6,25 +6,19 @@ import androidx.annotation.Nullable;
import java.nio.ByteBuffer;
import java.util.Map;
import java.util.Objects;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.BaseSettings;
import app.revanced.extension.shared.settings.Setting;
import app.revanced.extension.youtube.patches.spoof.requests.StreamingDataRequest;
import app.revanced.extension.youtube.settings.Settings;
import app.revanced.extension.shared.spoof.requests.StreamingDataRequest;
@SuppressWarnings("unused")
public class SpoofVideoStreamsPatch {
public static final class ForceiOSAVCAvailability implements Setting.Availability {
@Override
public boolean isAvailable() {
return Settings.SPOOF_VIDEO_STREAMS.get() && Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.IOS;
}
}
private static final boolean SPOOF_STREAMING_DATA = BaseSettings.SPOOF_VIDEO_STREAMS.get();
private static final boolean SPOOF_STREAMING_DATA = Settings.SPOOF_VIDEO_STREAMS.get();
private static final boolean FIX_HLS_CURRENT_TIME = SPOOF_STREAMING_DATA
&& BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.IOS;
/**
* Any unreachable ip address. Used to intentionally fail requests.
@@ -96,10 +90,19 @@ public class SpoofVideoStreamsPatch {
try {
Uri uri = Uri.parse(url);
String path = uri.getPath();
// 'heartbeat' has no video id and appears to be only after playback has started.
if (path != null && path.contains("player") && !path.contains("heartbeat")) {
String videoId = Objects.requireNonNull(uri.getQueryParameter("id"));
StreamingDataRequest.fetchRequest(videoId, requestHeaders);
// 'refresh' has no video id and appears to happen when waiting for a livestream to start.
if (path != null && path.contains("player") && !path.contains("heartbeat")
&& !path.contains("refresh")) {
String id = uri.getQueryParameter("id");
if (id == null) {
Logger.printException(() -> "Ignoring request that has no video id." +
" Url: " + url + " headers: " + requestHeaders);
return;
}
StreamingDataRequest.fetchRequest(id, requestHeaders);
}
} catch (Exception ex) {
Logger.printException(() -> "buildRequest failure", ex);
@@ -165,4 +168,25 @@ public class SpoofVideoStreamsPatch {
return postData;
}
/**
* Injection point.
*
* Fixes iOS livestreams starting from the beginning.
*/
public static boolean fixHLSCurrentTime(boolean original) {
if (FIX_HLS_CURRENT_TIME) {
return false;
}
return original;
}
public static final class SpoofiOSAvailability implements Setting.Availability {
@Override
public boolean isAvailable() {
return BaseSettings.SPOOF_VIDEO_STREAMS.get()
&& BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.IOS;
}
}
}

View File

@@ -1,4 +1,4 @@
package app.revanced.extension.youtube.patches.spoof.requests;
package app.revanced.extension.shared.spoof.requests;
import org.json.JSONException;
import org.json.JSONObject;
@@ -7,10 +7,10 @@ import java.io.IOException;
import java.net.HttpURLConnection;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.requests.Requester;
import app.revanced.extension.shared.requests.Route;
import app.revanced.extension.youtube.patches.spoof.ClientType;
import app.revanced.extension.shared.settings.BaseSettings;
import app.revanced.extension.shared.spoof.ClientType;
final class PlayerRoutes {
static final Route.CompiledRoute GET_STREAMING_DATA = new Route(
@@ -19,15 +19,14 @@ final class PlayerRoutes {
"?fields=streamingData" +
"&alt=proto"
).compile();
private static final String YT_API_URL = "https://youtubei.googleapis.com/youtubei/v1/";
/**
* TCP connection and HTTP read timeout
*/
private static final int CONNECTION_TIMEOUT_MILLISECONDS = 10 * 1000; // 10 Seconds.
private static final String LOCALE_LANGUAGE = Utils.getContext().getResources()
.getConfiguration().locale.getLanguage();
private PlayerRoutes() {
}
@@ -38,9 +37,10 @@ final class PlayerRoutes {
JSONObject context = new JSONObject();
JSONObject client = new JSONObject();
// Required to use correct default audio channel with iOS.
client.put("hl", LOCALE_LANGUAGE);
client.put("clientName", clientType.name());
if (clientType.useLanguageCode) {
client.put("hl", BaseSettings.SPOOF_VIDEO_STREAMS_LANGUAGE.get().getIso639_1());
}
client.put("clientName", clientType.clientName);
client.put("clientVersion", clientType.clientVersion);
client.put("deviceModel", clientType.deviceModel);
client.put("osVersion", clientType.osVersion);

View File

@@ -1,6 +1,6 @@
package app.revanced.extension.youtube.patches.spoof.requests;
package app.revanced.extension.shared.spoof.requests;
import static app.revanced.extension.youtube.patches.spoof.requests.PlayerRoutes.GET_STREAMING_DATA;
import static app.revanced.extension.shared.spoof.requests.PlayerRoutes.GET_STREAMING_DATA;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -22,8 +22,7 @@ import java.util.concurrent.TimeoutException;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.BaseSettings;
import app.revanced.extension.youtube.patches.spoof.ClientType;
import app.revanced.extension.youtube.settings.Settings;
import app.revanced.extension.shared.spoof.ClientType;
/**
* Video streaming data. Fetching is tied to the behavior YT uses,
@@ -70,7 +69,7 @@ public class StreamingDataRequest {
static {
ClientType[] allClientTypes = ClientType.values();
ClientType preferredClient = Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get();
ClientType preferredClient = BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get();
CLIENT_ORDER_TO_USE = new ClientType[allClientTypes.length];
CLIENT_ORDER_TO_USE[0] = preferredClient;
@@ -116,8 +115,7 @@ public class StreamingDataRequest {
Objects.requireNonNull(playerHeaders);
final long startTime = System.currentTimeMillis();
String clientTypeName = clientType.name();
Logger.printDebug(() -> "Fetching video streams for: " + videoId + " using client: " + clientType.name());
Logger.printDebug(() -> "Fetching video streams for: " + videoId + " using client: " + clientType);
try {
HttpURLConnection connection = PlayerRoutes.getPlayerResponseConnectionFromRoute(GET_STREAMING_DATA, clientType);
@@ -125,12 +123,16 @@ public class StreamingDataRequest {
connection.setReadTimeout(HTTP_TIMEOUT_MILLISECONDS);
for (String key : REQUEST_HEADER_KEYS) {
if (!clientType.canLogin && key.equals(AUTHORIZATION_HEADER)) {
continue;
}
String value = playerHeaders.get(key);
if (value != null) {
if (key.equals(AUTHORIZATION_HEADER)) {
if (!clientType.canLogin) {
Logger.printDebug(() -> "Not including request header: " + key);
continue;
}
}
Logger.printDebug(() -> "Including request header: " + key);
connection.setRequestProperty(key, value);
}
}
@@ -143,8 +145,10 @@ public class StreamingDataRequest {
final int responseCode = connection.getResponseCode();
if (responseCode == 200) return connection;
handleConnectionError(clientTypeName + " not available with response code: "
+ responseCode + " message: " + connection.getResponseMessage(),
// This situation likely means the patches are outdated.
// Use a toast message that suggests updating.
handleConnectionError("Playback error (App is outdated?) " + clientType + ": "
+ responseCode + " response: " + connection.getResponseMessage(),
null, showErrorToasts);
} catch (SocketTimeoutException ex) {
handleConnectionError("Connection timeout", ex, showErrorToasts);
@@ -173,17 +177,19 @@ public class StreamingDataRequest {
try {
// gzip encoding doesn't response with content length (-1),
// but empty response body does.
if (connection.getContentLength() != 0) {
try (InputStream inputStream = new BufferedInputStream(connection.getInputStream())) {
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
byte[] buffer = new byte[2048];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) >= 0) {
baos.write(buffer, 0, bytesRead);
}
if (connection.getContentLength() == 0) {
Logger.printDebug(() -> "Received empty response for video: " + videoId);
} else {
try (InputStream inputStream = new BufferedInputStream(connection.getInputStream());
ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
return ByteBuffer.wrap(baos.toByteArray());
byte[] buffer = new byte[2048];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) >= 0) {
baos.write(buffer, 0, bytesRead);
}
return ByteBuffer.wrap(baos.toByteArray());
}
}
} catch (IOException ex) {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -18,7 +18,7 @@ public final class ChangeStartPagePatch {
/**
* Unmodified type, and same as un-patched.
*/
ORIGINAL("", null),
DEFAULT("", null),
/**
* Browse id.

View File

@@ -0,0 +1,41 @@
package app.revanced.extension.youtube.patches;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused")
public class ForceOriginalAudioPatch {
private static final String DEFAULT_AUDIO_TRACKS_IDENTIFIER = "original";
/**
* Injection point.
*/
public static boolean isDefaultAudioStream(boolean isDefault, String audioTrackId, String audioTrackDisplayName) {
try {
if (!Settings.FORCE_ORIGINAL_AUDIO.get()) {
return isDefault;
}
if (audioTrackDisplayName.isEmpty()) {
// Older app targets can have empty audio tracks and these might be placeholders.
// The real audio tracks are called after these.
return isDefault;
}
Logger.printDebug(() -> "default: " + String.format("%-5s", isDefault) + " id: "
+ String.format("%-8s", audioTrackId) + " name:" + audioTrackDisplayName);
final boolean isOriginal = audioTrackDisplayName.contains(DEFAULT_AUDIO_TRACKS_IDENTIFIER);
if (isOriginal) {
Logger.printDebug(() -> "Using audio: " + audioTrackId);
}
return isOriginal;
} catch (Exception ex) {
Logger.printException(() -> "isDefaultAudioStream failure", ex);
}
return isDefault;
}
}

View File

@@ -1,12 +0,0 @@
package app.revanced.extension.youtube.patches;
import android.view.View;
import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused")
public class FullscreenPanelsRemoverPatch {
public static int getFullscreenPanelsVisibility() {
return Settings.HIDE_FULLSCREEN_PANELS.get() ? View.GONE : View.VISIBLE;
}
}

View File

@@ -30,7 +30,7 @@ public final class MiniplayerPatch {
*/
DISABLED(false, null),
/** Unmodified type, and same as un-patched. */
ORIGINAL(null, null),
DEFAULT(null, null),
/**
* Exactly the same as MINIMAL and only here for migration of user settings.
* Eventually this should be deleted.
@@ -82,7 +82,13 @@ public final class MiniplayerPatch {
final int WIDTH_DIP_MIN = 170; // Seems to be the smallest that works.
final int HORIZONTAL_PADDING_DIP = 15; // Estimated padding.
// Round down to the nearest 5 pixels, to keep any error toasts easier to read.
final int WIDTH_DIP_MAX = 5 * ((deviceDipWidth - HORIZONTAL_PADDING_DIP) / 5);
final int estimatedWidthDipMax = 5 * ((deviceDipWidth - HORIZONTAL_PADDING_DIP) / 5);
// On some ultra low end devices the pixel width and density are the same number,
// which causes the estimate to always give a value of 1.
// Fix this by using a fixed size of double the min width.
final int WIDTH_DIP_MAX = estimatedWidthDipMax <= WIDTH_DIP_MIN
? 2 * WIDTH_DIP_MIN
: estimatedWidthDipMax;
Logger.printDebug(() -> "Screen dip width: " + deviceDipWidth + " maxWidth: " + WIDTH_DIP_MAX);
int dipWidth = Settings.MINIPLAYER_WIDTH_DIP.get();
@@ -127,8 +133,10 @@ public final class MiniplayerPatch {
private static final boolean HIDE_SUBTEXT_ENABLED =
(CURRENT_TYPE == MODERN_1 || CURRENT_TYPE == MODERN_3) && Settings.MINIPLAYER_HIDE_SUBTEXT.get();
private static final boolean HIDE_REWIND_FORWARD_ENABLED =
CURRENT_TYPE == MODERN_1 && Settings.MINIPLAYER_HIDE_REWIND_FORWARD.get();
// 19.25 is last version that has forward/back buttons for phones,
// but buttons still show for tablets/foldable devices and they don't work well so always hide.
private static final boolean HIDE_REWIND_FORWARD_ENABLED = CURRENT_TYPE == MODERN_1
&& (VersionCheckPatch.IS_19_34_OR_GREATER || Settings.MINIPLAYER_HIDE_REWIND_FORWARD.get());
private static final boolean MINIPLAYER_ROUNDED_CORNERS_ENABLED =
Settings.MINIPLAYER_ROUNDED_CORNERS.get();
@@ -145,6 +153,18 @@ public final class MiniplayerPatch {
private static final int OPACITY_LEVEL;
static {
int opacity = Settings.MINIPLAYER_OPACITY.get();
if (opacity < 0 || opacity > 100) {
Utils.showToastLong(str("revanced_miniplayer_opacity_invalid_toast"));
Settings.MINIPLAYER_OPACITY.resetToDefault();
opacity = Settings.MINIPLAYER_OPACITY.defaultValue;
}
OPACITY_LEVEL = (opacity * 255) / 100;
}
public static final class MiniplayerHorizontalDragAvailability implements Setting.Availability {
@Override
public boolean isAvailable() {
@@ -163,18 +183,6 @@ public final class MiniplayerPatch {
}
}
static {
int opacity = Settings.MINIPLAYER_OPACITY.get();
if (opacity < 0 || opacity > 100) {
Utils.showToastLong(str("revanced_miniplayer_opacity_invalid_toast"));
Settings.MINIPLAYER_OPACITY.resetToDefault();
opacity = Settings.MINIPLAYER_OPACITY.defaultValue;
}
OPACITY_LEVEL = (opacity * 255) / 100;
}
/**
* Injection point.
*
@@ -182,7 +190,7 @@ public final class MiniplayerPatch {
* effectively disabling the miniplayer.
*/
public static boolean getMiniplayerOnCloseHandler(boolean original) {
return CURRENT_TYPE == ORIGINAL
return CURRENT_TYPE == DEFAULT
? original
: CURRENT_TYPE == DISABLED;
}
@@ -201,7 +209,7 @@ public final class MiniplayerPatch {
* Injection point.
*/
public static boolean getModernMiniplayerOverride(boolean original) {
return CURRENT_TYPE == ORIGINAL
return CURRENT_TYPE == DEFAULT
? original
: CURRENT_TYPE.isModern();
}
@@ -229,7 +237,7 @@ public final class MiniplayerPatch {
* Injection point.
*/
public static boolean getModernFeatureFlagsActiveOverride(boolean original) {
if (CURRENT_TYPE == ORIGINAL) {
if (CURRENT_TYPE == DEFAULT) {
return original;
}
@@ -240,7 +248,7 @@ public final class MiniplayerPatch {
* Injection point.
*/
public static boolean enableMiniplayerDoubleTapAction(boolean original) {
if (CURRENT_TYPE == ORIGINAL) {
if (CURRENT_TYPE == DEFAULT) {
return original;
}
@@ -251,7 +259,7 @@ public final class MiniplayerPatch {
* Injection point.
*/
public static boolean enableMiniplayerDragAndDrop(boolean original) {
if (CURRENT_TYPE == ORIGINAL) {
if (CURRENT_TYPE == DEFAULT) {
return original;
}

View File

@@ -3,12 +3,15 @@ package app.revanced.extension.youtube.patches;
import static app.revanced.extension.shared.Utils.hideViewUnderCondition;
import static app.revanced.extension.youtube.shared.NavigationBar.NavigationButton;
import android.os.Build;
import android.view.View;
import java.util.EnumMap;
import java.util.Map;
import android.widget.TextView;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused")
@@ -26,6 +29,15 @@ public final class NavigationButtonsPatch {
private static final boolean SWITCH_CREATE_WITH_NOTIFICATIONS_BUTTON
= Settings.SWITCH_CREATE_WITH_NOTIFICATIONS_BUTTON.get();
private static final Boolean DISABLE_TRANSLUCENT_STATUS_BAR
= Settings.DISABLE_TRANSLUCENT_STATUS_BAR.get();
private static final Boolean DISABLE_TRANSLUCENT_NAVIGATION_BAR_LIGHT
= Settings.DISABLE_TRANSLUCENT_NAVIGATION_BAR_LIGHT.get();
private static final Boolean DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK
= Settings.DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK.get();
/**
* Injection point.
*/
@@ -48,4 +60,42 @@ public final class NavigationButtonsPatch {
public static void hideNavigationButtonLabels(TextView navigationLabelsView) {
hideViewUnderCondition(Settings.HIDE_NAVIGATION_BUTTON_LABELS, navigationLabelsView);
}
/**
* Injection point.
*/
public static boolean useTranslucentNavigationStatusBar(boolean original) {
// Must check Android version, as forcing this on Android 11 or lower causes app hang and crash.
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
return original;
}
if (DISABLE_TRANSLUCENT_STATUS_BAR) {
return false;
}
return original;
}
/**
* Injection point.
*/
public static boolean useTranslucentNavigationButtons(boolean original) {
// Feature requires Android 13+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
return original;
}
if (!DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK && !DISABLE_TRANSLUCENT_NAVIGATION_BAR_LIGHT) {
return original;
}
if (DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK && DISABLE_TRANSLUCENT_NAVIGATION_BAR_LIGHT) {
return false;
}
return Utils.isDarkModeEnabled(Utils.getContext())
? !DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK
: !DISABLE_TRANSLUCENT_NAVIGATION_BAR_LIGHT;
}
}

View File

@@ -0,0 +1,14 @@
package app.revanced.extension.youtube.patches;
import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused")
public class OpenVideosFullscreen {
/**
* Injection point.
*/
public static boolean openVideoFullscreenPortrait(boolean original) {
return Settings.OPEN_VIDEOS_FULLSCREEN_PORTRAIT.get();
}
}

View File

@@ -85,7 +85,8 @@ public final class AdsFilter extends Filter {
"composite_concurrent_carousel_layout",
"carousel_headered_layout",
"full_width_portrait_image_layout",
"brand_video_shelf"
"brand_video_shelf",
"brand_video_singleton"
);
final var movieAds = new StringFilterGroup(

View File

@@ -14,6 +14,11 @@ final class CommentsFilter extends Filter {
private final ByteArrayFilterGroup emojiPickerBufferGroup;
public CommentsFilter() {
var chatSummary = new StringFilterGroup(
Settings.HIDE_COMMENTS_CHAT_SUMMARY,
"live_chat_summary_banner.eml"
);
var commentsByMembers = new StringFilterGroup(
Settings.HIDE_COMMENTS_BY_MEMBERS_HEADER,
"sponsorships_comments_header.eml",
@@ -54,6 +59,7 @@ final class CommentsFilter extends Filter {
);
addPathCallbacks(
chatSummary,
commentsByMembers,
comments,
createAShort,

View File

@@ -36,7 +36,6 @@ public final class LayoutComponentsFilter extends Filter {
);
private final StringTrieSearch exceptions = new StringTrieSearch();
private final StringFilterGroup searchResultShelfHeader;
private final StringFilterGroup inFeedSurvey;
private final StringFilterGroup notifyMe;
private final StringFilterGroup expandableMetadata;
@@ -74,13 +73,14 @@ public final class LayoutComponentsFilter extends Filter {
final var communityPosts = new StringFilterGroup(
Settings.HIDE_COMMUNITY_POSTS,
"post_base_wrapper",
"post_base_wrapper", // may be obsolete and no longer needed.
"text_post_root.eml",
"images_post_root.eml",
"images_post_slim.eml",
"images_post_slim.eml", // may be obsolete and no longer needed.
"images_post_root_slim.eml",
"text_post_root_slim.eml",
"post_base_wrapper_slim.eml"
"post_base_wrapper_slim.eml",
"poll_post_root.eml"
);
final var communityGuidelines = new StringFilterGroup(
@@ -194,11 +194,6 @@ public final class LayoutComponentsFilter extends Filter {
"timed_reaction"
);
searchResultShelfHeader = new StringFilterGroup(
Settings.HIDE_SEARCH_RESULT_SHELF_HEADER,
"shelf_header.eml"
);
notifyMe = new StringFilterGroup(
Settings.HIDE_NOTIFY_ME_BUTTON,
"set_reminder_button"
@@ -324,9 +319,6 @@ public final class LayoutComponentsFilter extends Filter {
return false;
}
// TODO: This also hides the feed Shorts shelf header
if (matchedGroup == searchResultShelfHeader && contentIndex != 0) return false;
if (matchedGroup == horizontalShelves) {
if (contentIndex == 0 && hideShelves()) {
return super.isFiltered(path, identifier, protobufBufferArray, matchedGroup, contentType, contentIndex);

View File

@@ -1,53 +0,0 @@
package app.revanced.extension.youtube.patches.spoof;
import android.media.MediaCodecInfo;
import android.media.MediaCodecList;
import android.os.Build;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.youtube.settings.Settings;
public class DeviceHardwareSupport {
public static final boolean DEVICE_HAS_HARDWARE_DECODING_VP9;
public static final boolean DEVICE_HAS_HARDWARE_DECODING_AV1;
static {
boolean vp9found = false;
boolean av1found = false;
MediaCodecList codecList = new MediaCodecList(MediaCodecList.ALL_CODECS);
final boolean deviceIsAndroidTenOrLater = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q;
for (MediaCodecInfo codecInfo : codecList.getCodecInfos()) {
final boolean isHardwareAccelerated = deviceIsAndroidTenOrLater
? codecInfo.isHardwareAccelerated()
: !codecInfo.getName().startsWith("OMX.google"); // Software decoder.
if (isHardwareAccelerated && !codecInfo.isEncoder()) {
for (String type : codecInfo.getSupportedTypes()) {
if (type.equalsIgnoreCase("video/x-vnd.on2.vp9")) {
vp9found = true;
} else if (type.equalsIgnoreCase("video/av01")) {
av1found = true;
}
}
}
}
DEVICE_HAS_HARDWARE_DECODING_VP9 = vp9found;
DEVICE_HAS_HARDWARE_DECODING_AV1 = av1found;
Logger.printDebug(() -> DEVICE_HAS_HARDWARE_DECODING_AV1
? "Device supports AV1 hardware decoding\n"
: "Device does not support AV1 hardware decoding\n"
+ (DEVICE_HAS_HARDWARE_DECODING_VP9
? "Device supports VP9 hardware decoding"
: "Device does not support VP9 hardware decoding"));
}
public static boolean allowVP9() {
return DEVICE_HAS_HARDWARE_DECODING_VP9 && !Settings.SPOOF_VIDEO_STREAMS_IOS_FORCE_AVC.get();
}
public static boolean allowAV1() {
return allowVP9() && DEVICE_HAS_HARDWARE_DECODING_AV1;
}
}

View File

@@ -55,7 +55,7 @@ public class ThemePatch {
/**
* Injection point.
*/
public static boolean gradientLoadingScreenEnabled() {
public static boolean gradientLoadingScreenEnabled(boolean original) {
return GRADIENT_LOADING_SCREEN_ENABLED;
}
}

View File

@@ -2,25 +2,41 @@ package app.revanced.extension.youtube.settings;
import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE;
import static app.revanced.extension.shared.settings.Setting.*;
import static app.revanced.extension.shared.settings.Setting.Availability;
import static app.revanced.extension.shared.settings.Setting.migrateFromOldPreferences;
import static app.revanced.extension.shared.settings.Setting.migrateOldSettingToNew;
import static app.revanced.extension.shared.settings.Setting.parent;
import static app.revanced.extension.shared.settings.Setting.parentsAny;
import static app.revanced.extension.youtube.patches.ChangeStartPagePatch.StartPage;
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHideExpandCloseAvailability;
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHorizontalDragAvailability;
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType;
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.*;
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MINIMAL;
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MODERN_1;
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MODERN_2;
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MODERN_3;
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MODERN_4;
import static app.revanced.extension.youtube.patches.SeekbarThumbnailsPatch.SeekbarThumbnailsHighQualityAvailability;
import static app.revanced.extension.youtube.patches.VersionCheckPatch.IS_19_17_OR_GREATER;
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.*;
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.IGNORE;
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.MANUAL_SKIP;
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.SKIP_AUTOMATICALLY;
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.SKIP_AUTOMATICALLY_ONCE;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.settings.*;
import app.revanced.extension.shared.settings.BaseSettings;
import app.revanced.extension.shared.settings.BooleanSetting;
import app.revanced.extension.shared.settings.EnumSetting;
import app.revanced.extension.shared.settings.FloatSetting;
import app.revanced.extension.shared.settings.IntegerSetting;
import app.revanced.extension.shared.settings.LongSetting;
import app.revanced.extension.shared.settings.Setting;
import app.revanced.extension.shared.settings.StringSetting;
import app.revanced.extension.shared.settings.preference.SharedPrefCategory;
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.DeArrowAvailability;
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.StillImagesAvailability;
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.ThumbnailOption;
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.ThumbnailStillTime;
import app.revanced.extension.youtube.patches.spoof.ClientType;
import app.revanced.extension.youtube.patches.spoof.SpoofVideoStreamsPatch;
import app.revanced.extension.youtube.sponsorblock.SponsorBlockSettings;
public class Settings extends BaseSettings {
@@ -35,19 +51,21 @@ public class Settings extends BaseSettings {
public static final FloatSetting PLAYBACK_SPEED_DEFAULT = new FloatSetting("revanced_playback_speed_default", -2.0f);
public static final StringSetting CUSTOM_PLAYBACK_SPEEDS = new StringSetting("revanced_custom_playback_speeds",
"0.25\n0.5\n0.75\n0.9\n0.95\n1.0\n1.05\n1.1\n1.25\n1.5\n1.75\n2.0\n3.0\n4.0\n5.0", true);
// Audio
public static final BooleanSetting FORCE_ORIGINAL_AUDIO = new BooleanSetting("revanced_force_original_audio", FALSE);
// Ads
public static final BooleanSetting HIDE_FULLSCREEN_ADS = new BooleanSetting("revanced_hide_fullscreen_ads", TRUE);
public static final BooleanSetting HIDE_BUTTONED_ADS = new BooleanSetting("revanced_hide_buttoned_ads", TRUE);
public static final BooleanSetting HIDE_FULLSCREEN_ADS = new BooleanSetting("revanced_hide_fullscreen_ads", TRUE);
public static final BooleanSetting HIDE_GENERAL_ADS = new BooleanSetting("revanced_hide_general_ads", TRUE);
public static final BooleanSetting HIDE_GET_PREMIUM = new BooleanSetting("revanced_hide_get_premium", TRUE);
public static final BooleanSetting HIDE_HIDE_LATEST_POSTS = new BooleanSetting("revanced_hide_latest_posts_ads", TRUE);
public static final BooleanSetting HIDE_MERCHANDISE_BANNERS = new BooleanSetting("revanced_hide_merchandise_banners", TRUE);
public static final BooleanSetting HIDE_PAID_PROMOTION_LABEL = new BooleanSetting("revanced_hide_paid_promotion_label", TRUE);
public static final BooleanSetting HIDE_PRODUCTS_BANNER = new BooleanSetting("revanced_hide_products_banner", TRUE);
public static final BooleanSetting HIDE_PLAYER_STORE_SHELF = new BooleanSetting("revanced_hide_player_store_shelf", TRUE);
public static final BooleanSetting HIDE_SHOPPING_LINKS = new BooleanSetting("revanced_hide_shopping_links", TRUE);
public static final BooleanSetting HIDE_PRODUCTS_BANNER = new BooleanSetting("revanced_hide_products_banner", TRUE);
public static final BooleanSetting HIDE_SELF_SPONSOR = new BooleanSetting("revanced_hide_self_sponsor_ads", TRUE);
public static final BooleanSetting HIDE_SHOPPING_LINKS = new BooleanSetting("revanced_hide_shopping_links", TRUE);
public static final BooleanSetting HIDE_VIDEO_ADS = new BooleanSetting("revanced_hide_video_ads", TRUE, true);
public static final BooleanSetting HIDE_VISIT_STORE_BUTTON = new BooleanSetting("revanced_hide_visit_store_button", TRUE);
public static final BooleanSetting HIDE_WEB_SEARCH_RESULTS = new BooleanSetting("revanced_hide_web_search_results", TRUE);
@@ -55,9 +73,26 @@ public class Settings extends BaseSettings {
// Feed
public static final BooleanSetting HIDE_ALBUM_CARDS = new BooleanSetting("revanced_hide_album_cards", FALSE, true);
public static final BooleanSetting HIDE_ARTIST_CARDS = new BooleanSetting("revanced_hide_artist_cards", FALSE);
public static final BooleanSetting HIDE_EXPANDABLE_CHIP = new BooleanSetting("revanced_hide_expandable_chip", TRUE);
public static final BooleanSetting HIDE_CHIPS_SHELF = new BooleanSetting("revanced_hide_chips_shelf", TRUE);
public static final BooleanSetting HIDE_COMMUNITY_POSTS = new BooleanSetting("revanced_hide_community_posts", FALSE);
public static final BooleanSetting HIDE_COMPACT_BANNER = new BooleanSetting("revanced_hide_compact_banner", TRUE);
public static final BooleanSetting HIDE_CROWDFUNDING_BOX = new BooleanSetting("revanced_hide_crowdfunding_box", FALSE, true);
public static final BooleanSetting HIDE_DOODLES = new BooleanSetting("revanced_hide_doodles", FALSE, true, "revanced_hide_doodles_user_dialog_message");
public static final BooleanSetting HIDE_EXPANDABLE_CHIP = new BooleanSetting("revanced_hide_expandable_chip", TRUE);
public static final BooleanSetting HIDE_FEED_SURVEY = new BooleanSetting("revanced_hide_feed_survey", TRUE);
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_FEED = new BooleanSetting("revanced_hide_filter_bar_feed_in_feed", FALSE, true);
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_RELATED_VIDEOS = new BooleanSetting("revanced_hide_filter_bar_feed_in_related_videos", FALSE, true);
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_SEARCH = new BooleanSetting("revanced_hide_filter_bar_feed_in_search", FALSE, true);
public static final BooleanSetting HIDE_FLOATING_MICROPHONE_BUTTON = new BooleanSetting("revanced_hide_floating_microphone_button", TRUE, true);
public static final BooleanSetting HIDE_FOR_YOU_SHELF = new BooleanSetting("revanced_hide_for_you_shelf", TRUE);
public static final BooleanSetting HIDE_HORIZONTAL_SHELVES = new BooleanSetting("revanced_hide_horizontal_shelves", TRUE);
public static final BooleanSetting HIDE_IMAGE_SHELF = new BooleanSetting("revanced_hide_image_shelf", TRUE);
public static final BooleanSetting HIDE_MIX_PLAYLISTS = new BooleanSetting("revanced_hide_mix_playlists", TRUE);
public static final BooleanSetting HIDE_MOVIES_SECTION = new BooleanSetting("revanced_hide_movies_section", TRUE);
public static final BooleanSetting HIDE_NOTIFY_ME_BUTTON = new BooleanSetting("revanced_hide_notify_me_button", TRUE);
public static final BooleanSetting HIDE_PLAYABLES = new BooleanSetting("revanced_hide_playables", TRUE);
public static final BooleanSetting HIDE_SEARCH_RESULT_RECOMMENDATIONS = new BooleanSetting("revanced_hide_search_result_recommendations", TRUE);
public static final BooleanSetting HIDE_SHOW_MORE_BUTTON = new BooleanSetting("revanced_hide_show_more_button", TRUE, true);
// Alternative thumbnails
public static final EnumSetting<ThumbnailOption> ALT_THUMBNAIL_HOME = new EnumSetting<>("revanced_alt_thumbnail_home", ThumbnailOption.ORIGINAL);
public static final EnumSetting<ThumbnailOption> ALT_THUMBNAIL_SUBSCRIPTIONS = new EnumSetting<>("revanced_alt_thumbnail_subscription", ThumbnailOption.ORIGINAL);
@@ -69,7 +104,6 @@ public class Settings extends BaseSettings {
public static final BooleanSetting ALT_THUMBNAIL_DEARROW_CONNECTION_TOAST = new BooleanSetting("revanced_alt_thumbnail_dearrow_connection_toast", TRUE, new DeArrowAvailability());
public static final EnumSetting<ThumbnailStillTime> ALT_THUMBNAIL_STILLS_TIME = new EnumSetting<>("revanced_alt_thumbnail_stills_time", ThumbnailStillTime.MIDDLE, new StillImagesAvailability());
public static final BooleanSetting ALT_THUMBNAIL_STILLS_FAST = new BooleanSetting("revanced_alt_thumbnail_stills_fast", FALSE, new StillImagesAvailability());
// Hide keyword content
public static final BooleanSetting HIDE_KEYWORD_CONTENT_HOME = new BooleanSetting("revanced_hide_keyword_content_home", FALSE);
public static final BooleanSetting HIDE_KEYWORD_CONTENT_SUBSCRIPTIONS = new BooleanSetting("revanced_hide_keyword_content_subscriptions", FALSE);
@@ -77,88 +111,61 @@ public class Settings extends BaseSettings {
public static final StringSetting HIDE_KEYWORD_CONTENT_PHRASES = new StringSetting("revanced_hide_keyword_content_phrases", "",
parentsAny(HIDE_KEYWORD_CONTENT_HOME, HIDE_KEYWORD_CONTENT_SUBSCRIPTIONS, HIDE_KEYWORD_CONTENT_SEARCH));
// Uncategorized layout related settings. Do not add to this section, and instead move these out and categorize them.
public static final BooleanSetting DISABLE_SUGGESTED_VIDEO_END_SCREEN = new BooleanSetting("revanced_disable_suggested_video_end_screen", FALSE, true);
public static final BooleanSetting GRADIENT_LOADING_SCREEN = new BooleanSetting("revanced_gradient_loading_screen", FALSE, true);
public static final BooleanSetting HIDE_HORIZONTAL_SHELVES = new BooleanSetting("revanced_hide_horizontal_shelves", TRUE);
public static final BooleanSetting HIDE_CAPTIONS_BUTTON = new BooleanSetting("revanced_hide_captions_button", FALSE);
public static final BooleanSetting HIDE_CHANNEL_BAR = new BooleanSetting("revanced_hide_channel_bar", FALSE);
public static final BooleanSetting HIDE_CHANNEL_MEMBER_SHELF = new BooleanSetting("revanced_hide_channel_member_shelf", TRUE);
public static final BooleanSetting HIDE_CHIPS_SHELF = new BooleanSetting("revanced_hide_chips_shelf", TRUE);
public static final BooleanSetting HIDE_COMMUNITY_GUIDELINES = new BooleanSetting("revanced_hide_community_guidelines", TRUE);
public static final BooleanSetting HIDE_COMMUNITY_POSTS = new BooleanSetting("revanced_hide_community_posts", FALSE);
public static final BooleanSetting HIDE_COMPACT_BANNER = new BooleanSetting("revanced_hide_compact_banner", TRUE);
public static final BooleanSetting HIDE_CROWDFUNDING_BOX = new BooleanSetting("revanced_hide_crowdfunding_box", FALSE, true);
public static final BooleanSetting HIDE_EMERGENCY_BOX = new BooleanSetting("revanced_hide_emergency_box", TRUE);
public static final BooleanSetting HIDE_ENDSCREEN_CARDS = new BooleanSetting("revanced_hide_endscreen_cards", FALSE);
public static final BooleanSetting HIDE_FEED_SURVEY = new BooleanSetting("revanced_hide_feed_survey", TRUE);
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_FEED = new BooleanSetting("revanced_hide_filter_bar_feed_in_feed", FALSE, true);
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_RELATED_VIDEOS = new BooleanSetting("revanced_hide_filter_bar_feed_in_related_videos", FALSE, true);
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_SEARCH = new BooleanSetting("revanced_hide_filter_bar_feed_in_search", FALSE, true);
public static final BooleanSetting HIDE_FLOATING_MICROPHONE_BUTTON = new BooleanSetting("revanced_hide_floating_microphone_button", TRUE, true);
public static final BooleanSetting HIDE_FULLSCREEN_PANELS = new BooleanSetting("revanced_hide_fullscreen_panels", TRUE, true);
public static final BooleanSetting HIDE_HIDE_CHANNEL_GUIDELINES = new BooleanSetting("revanced_hide_channel_guidelines", TRUE);
public static final BooleanSetting HIDE_HIDE_INFO_PANELS = new BooleanSetting("revanced_hide_info_panels", TRUE);
public static final BooleanSetting HIDE_IMAGE_SHELF = new BooleanSetting("revanced_hide_image_shelf", TRUE);
public static final BooleanSetting HIDE_INFO_CARDS = new BooleanSetting("revanced_hide_info_cards", FALSE);
public static final BooleanSetting HIDE_JOIN_MEMBERSHIP_BUTTON = new BooleanSetting("revanced_hide_join_membership_button", TRUE);
public static final BooleanSetting HIDE_SHOW_MORE_BUTTON = new BooleanSetting("revanced_hide_show_more_button", TRUE, true);
public static final BooleanSetting HIDE_MEDICAL_PANELS = new BooleanSetting("revanced_hide_medical_panels", TRUE);
public static final BooleanSetting HIDE_MIX_PLAYLISTS = new BooleanSetting("revanced_hide_mix_playlists", TRUE);
public static final BooleanSetting HIDE_MOVIES_SECTION = new BooleanSetting("revanced_hide_movies_section", TRUE);
public static final BooleanSetting HIDE_NOTIFY_ME_BUTTON = new BooleanSetting("revanced_hide_notify_me_button", TRUE);
public static final BooleanSetting HIDE_PLAYABLES = new BooleanSetting("revanced_hide_playables", TRUE);
public static final BooleanSetting HIDE_QUICK_ACTIONS = new BooleanSetting("revanced_hide_quick_actions", FALSE);
public static final BooleanSetting HIDE_RELATED_VIDEOS = new BooleanSetting("revanced_hide_related_videos", FALSE);
public static final BooleanSetting HIDE_SEARCH_RESULT_SHELF_HEADER = new BooleanSetting("revanced_hide_search_result_shelf_header", FALSE);
public static final BooleanSetting HIDE_SUBSCRIBERS_COMMUNITY_GUIDELINES = new BooleanSetting("revanced_hide_subscribers_community_guidelines", TRUE);
public static final BooleanSetting HIDE_TIMED_REACTIONS = new BooleanSetting("revanced_hide_timed_reactions", TRUE);
public static final BooleanSetting HIDE_TIMESTAMP = new BooleanSetting("revanced_hide_timestamp", FALSE);
public static final BooleanSetting HIDE_VIDEO_CHANNEL_WATERMARK = new BooleanSetting("revanced_hide_channel_watermark", TRUE);
public static final BooleanSetting HIDE_FOR_YOU_SHELF = new BooleanSetting("revanced_hide_for_you_shelf", TRUE);
public static final BooleanSetting HIDE_SEARCH_RESULT_RECOMMENDATIONS = new BooleanSetting("revanced_hide_search_result_recommendations", TRUE);
public static final IntegerSetting PLAYER_OVERLAY_OPACITY = new IntegerSetting("revanced_player_overlay_opacity",100, true);
public static final BooleanSetting PLAYER_POPUP_PANELS = new BooleanSetting("revanced_hide_player_popup_panels", FALSE);
// Player
public static final BooleanSetting DISABLE_FULLSCREEN_AMBIENT_MODE = new BooleanSetting("revanced_disable_fullscreen_ambient_mode", TRUE, true);
public static final BooleanSetting DISABLE_ROLLING_NUMBER_ANIMATIONS = new BooleanSetting("revanced_disable_rolling_number_animations", FALSE);
public static final BooleanSetting DISABLE_LIKE_SUBSCRIBE_GLOW = new BooleanSetting("revanced_disable_like_subscribe_glow", FALSE);
public static final BooleanSetting HIDE_AUTOPLAY_BUTTON = new BooleanSetting("revanced_hide_autoplay_button", TRUE, true);
public static final BooleanSetting HIDE_CAST_BUTTON = new BooleanSetting("revanced_hide_cast_button", TRUE, true);
public static final BooleanSetting HIDE_PLAYER_PREVIOUS_NEXT_BUTTONS = new BooleanSetting("revanced_hide_player_previous_next_buttons", FALSE, true);
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_BUTTONS = new BooleanSetting("revanced_hide_player_buttons", FALSE, true);
public static final BooleanSetting COPY_VIDEO_URL = new BooleanSetting("revanced_copy_video_url", FALSE);
public static final BooleanSetting COPY_VIDEO_URL_TIMESTAMP = new BooleanSetting("revanced_copy_video_url_timestamp", TRUE);
public static final BooleanSetting DISABLE_FULLSCREEN_AMBIENT_MODE = new BooleanSetting("revanced_disable_fullscreen_ambient_mode", TRUE, true);
public static final BooleanSetting DISABLE_LIKE_SUBSCRIBE_GLOW = new BooleanSetting("revanced_disable_like_subscribe_glow", FALSE);
public static final BooleanSetting DISABLE_ROLLING_NUMBER_ANIMATIONS = new BooleanSetting("revanced_disable_rolling_number_animations", FALSE);
public static final BooleanSetting DISABLE_SUGGESTED_VIDEO_END_SCREEN = new BooleanSetting("revanced_disable_suggested_video_end_screen", FALSE, true);
public static final BooleanSetting HIDE_AUTOPLAY_BUTTON = new BooleanSetting("revanced_hide_autoplay_button", TRUE, true);
public static final BooleanSetting HIDE_CAPTIONS_BUTTON = new BooleanSetting("revanced_hide_captions_button", FALSE);
public static final BooleanSetting HIDE_CAST_BUTTON = new BooleanSetting("revanced_hide_cast_button", TRUE, true);
public static final BooleanSetting HIDE_CHANNEL_BAR = new BooleanSetting("revanced_hide_channel_bar", FALSE);
public static final BooleanSetting HIDE_CHANNEL_MEMBER_SHELF = new BooleanSetting("revanced_hide_channel_member_shelf", TRUE);
public static final BooleanSetting HIDE_COMMUNITY_GUIDELINES = new BooleanSetting("revanced_hide_community_guidelines", TRUE);
public static final BooleanSetting HIDE_EMERGENCY_BOX = new BooleanSetting("revanced_hide_emergency_box", TRUE);
public static final BooleanSetting HIDE_ENDSCREEN_CARDS = new BooleanSetting("revanced_hide_endscreen_cards", FALSE);
public static final BooleanSetting HIDE_HIDE_CHANNEL_GUIDELINES = new BooleanSetting("revanced_hide_channel_guidelines", TRUE);
public static final BooleanSetting HIDE_HIDE_INFO_PANELS = new BooleanSetting("revanced_hide_info_panels", TRUE);
public static final BooleanSetting HIDE_INFO_CARDS = new BooleanSetting("revanced_hide_info_cards", FALSE);
public static final BooleanSetting HIDE_JOIN_MEMBERSHIP_BUTTON = new BooleanSetting("revanced_hide_join_membership_button", TRUE);
public static final BooleanSetting HIDE_MEDICAL_PANELS = new BooleanSetting("revanced_hide_medical_panels", TRUE);
public static final BooleanSetting HIDE_PLAYER_PREVIOUS_NEXT_BUTTONS = new BooleanSetting("revanced_hide_player_previous_next_buttons", FALSE, true);
public static final BooleanSetting HIDE_QUICK_ACTIONS = new BooleanSetting("revanced_hide_quick_actions", FALSE);
public static final BooleanSetting HIDE_RELATED_VIDEOS = new BooleanSetting("revanced_hide_related_videos", FALSE);
public static final BooleanSetting HIDE_SUBSCRIBERS_COMMUNITY_GUIDELINES = new BooleanSetting("revanced_hide_subscribers_community_guidelines", TRUE);
public static final BooleanSetting HIDE_TIMED_REACTIONS = new BooleanSetting("revanced_hide_timed_reactions", TRUE);
public static final BooleanSetting HIDE_VIDEO_CHANNEL_WATERMARK = new BooleanSetting("revanced_hide_channel_watermark", TRUE);
public static final BooleanSetting PLAYBACK_SPEED_DIALOG_BUTTON = new BooleanSetting("revanced_playback_speed_dialog_button", FALSE);
public static final BooleanSetting PLAYER_POPUP_PANELS = new BooleanSetting("revanced_hide_player_popup_panels", FALSE);
public static final IntegerSetting PLAYER_OVERLAY_OPACITY = new IntegerSetting("revanced_player_overlay_opacity", 100, true);
public static final BooleanSetting OPEN_VIDEOS_FULLSCREEN_PORTRAIT = new BooleanSetting("revanced_open_videos_fullscreen_portrait", FALSE);
// Miniplayer
public static final EnumSetting<MiniplayerType> MINIPLAYER_TYPE = new EnumSetting<>("revanced_miniplayer_type", MiniplayerType.ORIGINAL, true);
public static final EnumSetting<MiniplayerType> MINIPLAYER_TYPE = new EnumSetting<>("revanced_miniplayer_type", MiniplayerType.DEFAULT, true);
private static final Availability MINIPLAYER_ANY_MODERN = MINIPLAYER_TYPE.availability(MODERN_1, MODERN_2, MODERN_3, MODERN_4);
public static final BooleanSetting MINIPLAYER_DOUBLE_TAP_ACTION = new BooleanSetting("revanced_miniplayer_double_tap_action", TRUE, true, MINIPLAYER_ANY_MODERN);
public static final BooleanSetting MINIPLAYER_DRAG_AND_DROP = new BooleanSetting("revanced_miniplayer_drag_and_drop", TRUE, true, MINIPLAYER_ANY_MODERN);
public static final BooleanSetting MINIPLAYER_HORIZONTAL_DRAG = new BooleanSetting("revanced_miniplayer_horizontal_drag", FALSE, true, new MiniplayerHorizontalDragAvailability());
public static final BooleanSetting MINIPLAYER_HIDE_EXPAND_CLOSE = new BooleanSetting("revanced_miniplayer_hide_expand_close", FALSE, true, new MiniplayerHideExpandCloseAvailability());
public static final BooleanSetting MINIPLAYER_HIDE_SUBTEXT = new BooleanSetting("revanced_miniplayer_hide_subtext", FALSE, true, MINIPLAYER_TYPE.availability(MODERN_1, MODERN_3));
public static final BooleanSetting MINIPLAYER_HIDE_REWIND_FORWARD = new BooleanSetting("revanced_miniplayer_hide_rewind_forward", FALSE, true, MINIPLAYER_TYPE.availability(MODERN_1));
public static final BooleanSetting MINIPLAYER_HIDE_REWIND_FORWARD = new BooleanSetting("revanced_miniplayer_hide_rewind_forward", TRUE, true, MINIPLAYER_TYPE.availability(MODERN_1));
public static final BooleanSetting MINIPLAYER_ROUNDED_CORNERS = new BooleanSetting("revanced_miniplayer_rounded_corners", TRUE, true, MINIPLAYER_ANY_MODERN);
public static final IntegerSetting MINIPLAYER_WIDTH_DIP = new IntegerSetting("revanced_miniplayer_width_dip", 192, true, MINIPLAYER_ANY_MODERN);
public static final IntegerSetting MINIPLAYER_OPACITY = new IntegerSetting("revanced_miniplayer_opacity", 100, true, MINIPLAYER_TYPE.availability(MODERN_1));
// External downloader
public static final BooleanSetting EXTERNAL_DOWNLOADER = new BooleanSetting("revanced_external_downloader", FALSE);
public static final BooleanSetting EXTERNAL_DOWNLOADER_ACTION_BUTTON = new BooleanSetting("revanced_external_downloader_action_button", FALSE);
public static final StringSetting EXTERNAL_DOWNLOADER_PACKAGE_NAME = new StringSetting("revanced_external_downloader_name",
"org.schabi.newpipe" /* NewPipe */, parentsAny(EXTERNAL_DOWNLOADER, EXTERNAL_DOWNLOADER_ACTION_BUTTON));
// Comments
public static final BooleanSetting HIDE_COMMENTS_CHAT_SUMMARY = new BooleanSetting("revanced_hide_comments_chat_summary", FALSE);
public static final BooleanSetting HIDE_COMMENTS_BY_MEMBERS_HEADER = new BooleanSetting("revanced_hide_comments_by_members_header", FALSE);
public static final BooleanSetting HIDE_COMMENTS_SECTION = new BooleanSetting("revanced_hide_comments_section", FALSE);
public static final BooleanSetting HIDE_COMMENTS_CREATE_A_SHORT_BUTTON = new BooleanSetting("revanced_hide_comments_create_a_short_button", TRUE);
public static final BooleanSetting HIDE_COMMENTS_PREVIEW_COMMENT = new BooleanSetting("revanced_hide_comments_preview_comment", FALSE);
public static final BooleanSetting HIDE_COMMENTS_SECTION = new BooleanSetting("revanced_hide_comments_section", FALSE);
public static final BooleanSetting HIDE_COMMENTS_THANKS_BUTTON = new BooleanSetting("revanced_hide_comments_thanks_button", TRUE);
public static final BooleanSetting HIDE_COMMENTS_TIMESTAMP_AND_EMOJI_BUTTONS = new BooleanSetting("revanced_hide_comments_timestamp_and_emoji_buttons", TRUE);
// Description
public static final BooleanSetting HIDE_ATTRIBUTES_SECTION = new BooleanSetting("revanced_hide_attributes_section", FALSE);
public static final BooleanSetting HIDE_CHAPTERS_SECTION = new BooleanSetting("revanced_hide_chapters_section", TRUE);
@@ -166,47 +173,43 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_KEY_CONCEPTS_SECTION = new BooleanSetting("revanced_hide_key_concepts_section", FALSE);
public static final BooleanSetting HIDE_PODCAST_SECTION = new BooleanSetting("revanced_hide_podcast_section", TRUE);
public static final BooleanSetting HIDE_TRANSCRIPT_SECTION = new BooleanSetting("revanced_hide_transcript_section", TRUE);
// Action buttons
public static final BooleanSetting HIDE_LIKE_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_like_dislike_button", FALSE);
public static final BooleanSetting HIDE_SHARE_BUTTON = new BooleanSetting("revanced_hide_share_button", FALSE);
public static final BooleanSetting HIDE_REPORT_BUTTON = new BooleanSetting("revanced_hide_report_button", FALSE);
public static final BooleanSetting HIDE_REMIX_BUTTON = new BooleanSetting("revanced_hide_remix_button", TRUE);
public static final BooleanSetting HIDE_DOWNLOAD_BUTTON = new BooleanSetting("revanced_hide_download_button", FALSE);
public static final BooleanSetting HIDE_THANKS_BUTTON = new BooleanSetting("revanced_hide_thanks_button", TRUE);
public static final BooleanSetting HIDE_CLIP_BUTTON = new BooleanSetting("revanced_hide_clip_button", TRUE);
public static final BooleanSetting HIDE_DOWNLOAD_BUTTON = new BooleanSetting("revanced_hide_download_button", FALSE);
public static final BooleanSetting HIDE_LIKE_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_like_dislike_button", FALSE);
public static final BooleanSetting HIDE_PLAYLIST_BUTTON = new BooleanSetting("revanced_hide_playlist_button", FALSE);
public static final BooleanSetting HIDE_REMIX_BUTTON = new BooleanSetting("revanced_hide_remix_button", TRUE);
public static final BooleanSetting HIDE_REPORT_BUTTON = new BooleanSetting("revanced_hide_report_button", FALSE);
public static final BooleanSetting HIDE_SHARE_BUTTON = new BooleanSetting("revanced_hide_share_button", FALSE);
public static final BooleanSetting HIDE_THANKS_BUTTON = new BooleanSetting("revanced_hide_thanks_button", TRUE);
// Player flyout menu items
public static final BooleanSetting HIDE_PLAYER_FLYOUT_CAPTIONS = new BooleanSetting("revanced_hide_player_flyout_captions", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_ADDITIONAL_SETTINGS = new BooleanSetting("revanced_hide_player_flyout_additional_settings", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOOP_VIDEO = new BooleanSetting("revanced_hide_player_flyout_loop_video", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_AMBIENT_MODE = new BooleanSetting("revanced_hide_player_flyout_ambient_mode", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_HELP = new BooleanSetting("revanced_hide_player_flyout_help", TRUE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_SPEED = new BooleanSetting("revanced_hide_player_flyout_speed", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MORE_INFO = new BooleanSetting("revanced_hide_player_flyout_more_info", TRUE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOCK_SCREEN = new BooleanSetting("revanced_hide_player_flyout_lock_screen", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_AUDIO_TRACK = new BooleanSetting("revanced_hide_player_flyout_audio_track", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_CAPTIONS = new BooleanSetting("revanced_hide_player_flyout_captions", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_HELP = new BooleanSetting("revanced_hide_player_flyout_help", TRUE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOCK_SCREEN = new BooleanSetting("revanced_hide_player_flyout_lock_screen", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOOP_VIDEO = new BooleanSetting("revanced_hide_player_flyout_loop_video", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MORE_INFO = new BooleanSetting("revanced_hide_player_flyout_more_info", TRUE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_SLEEP_TIMER = new BooleanSetting("revanced_hide_player_flyout_sleep_timer", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_SPEED = new BooleanSetting("revanced_hide_player_flyout_speed", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_STABLE_VOLUME = new BooleanSetting("revanced_hide_player_flyout_stable_volume", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_WATCH_IN_VR = new BooleanSetting("revanced_hide_player_flyout_watch_in_vr", TRUE);
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER = new BooleanSetting("revanced_hide_video_quality_menu_footer", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER = new BooleanSetting("revanced_hide_player_flyout_video_quality_footer", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_WATCH_IN_VR = new BooleanSetting("revanced_hide_player_flyout_watch_in_vr", TRUE);
// General layout
public static final EnumSetting<StartPage> CHANGE_START_PAGE = new EnumSetting<>("revanced_change_start_page", StartPage.ORIGINAL, true);
public static final BooleanSetting SPOOF_APP_VERSION = new BooleanSetting("revanced_spoof_app_version", FALSE, true, "revanced_spoof_app_version_user_dialog_message");
public static final StringSetting SPOOF_APP_VERSION_TARGET = new StringSetting("revanced_spoof_app_version_target", IS_19_17_OR_GREATER ? "19.35.36" : "17.33.42", true, parent(SPOOF_APP_VERSION));
public static final BooleanSetting TABLET_LAYOUT = new BooleanSetting("revanced_tablet_layout", FALSE, true, "revanced_tablet_layout_user_dialog_message");
public static final BooleanSetting WIDE_SEARCHBAR = new BooleanSetting("revanced_wide_searchbar", FALSE, true);
public static final BooleanSetting BYPASS_IMAGE_REGION_RESTRICTIONS = new BooleanSetting("revanced_bypass_image_region_restrictions", FALSE, true);
public static final BooleanSetting GRADIENT_LOADING_SCREEN = new BooleanSetting("revanced_gradient_loading_screen", FALSE, true);
public static final BooleanSetting REMOVE_VIEWER_DISCRETION_DIALOG = new BooleanSetting("revanced_remove_viewer_discretion_dialog", FALSE,
"revanced_remove_viewer_discretion_dialog_user_dialog_message");
public static final BooleanSetting SPOOF_APP_VERSION = new BooleanSetting("revanced_spoof_app_version", FALSE, true, "revanced_spoof_app_version_user_dialog_message");
public static final BooleanSetting TABLET_LAYOUT = new BooleanSetting("revanced_tablet_layout", FALSE, true, "revanced_tablet_layout_user_dialog_message");
public static final BooleanSetting WIDE_SEARCHBAR = new BooleanSetting("revanced_wide_searchbar", FALSE, true);
public static final EnumSetting<StartPage> CHANGE_START_PAGE = new EnumSetting<>("revanced_change_start_page", StartPage.DEFAULT, true);
public static final StringSetting SPOOF_APP_VERSION_TARGET = new StringSetting("revanced_spoof_app_version_target", IS_19_17_OR_GREATER ? "19.35.36" : "17.33.42", true, parent(SPOOF_APP_VERSION));
// Custom filter
public static final BooleanSetting CUSTOM_FILTER = new BooleanSetting("revanced_custom_filter", FALSE);
public static final StringSetting CUSTOM_FILTER_STRINGS = new StringSetting("revanced_custom_filter_strings", "", true, parent(CUSTOM_FILTER));
// Navigation buttons
public static final BooleanSetting HIDE_HOME_BUTTON = new BooleanSetting("revanced_hide_home_button", FALSE, true);
public static final BooleanSetting HIDE_CREATE_BUTTON = new BooleanSetting("revanced_hide_create_button", TRUE, true);
@@ -214,73 +217,72 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_SUBSCRIPTIONS_BUTTON = new BooleanSetting("revanced_hide_subscriptions_button", FALSE, true);
public static final BooleanSetting HIDE_NAVIGATION_BUTTON_LABELS = new BooleanSetting("revanced_hide_navigation_button_labels", FALSE, true);
public static final BooleanSetting SWITCH_CREATE_WITH_NOTIFICATIONS_BUTTON = new BooleanSetting("revanced_switch_create_with_notifications_button", TRUE, true);
public static final BooleanSetting DISABLE_TRANSLUCENT_STATUS_BAR = new BooleanSetting("revanced_disable_translucent_status_bar", FALSE, true);
public static final BooleanSetting DISABLE_TRANSLUCENT_NAVIGATION_BAR_LIGHT = new BooleanSetting("revanced_disable_translucent_navigation_bar_light", FALSE, true);
public static final BooleanSetting DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK = new BooleanSetting("revanced_disable_translucent_navigation_bar_dark", FALSE, true);
// Shorts
public static final BooleanSetting DISABLE_SHORTS_BACKGROUND_PLAYBACK = new BooleanSetting("revanced_shorts_disable_background_playback", FALSE);
public static final BooleanSetting DISABLE_RESUMING_SHORTS_PLAYER = new BooleanSetting("revanced_disable_resuming_shorts_player", FALSE);
public static final BooleanSetting HIDE_SHORTS_HOME = new BooleanSetting("revanced_hide_shorts_home", FALSE);
public static final BooleanSetting HIDE_SHORTS_SUBSCRIPTIONS = new BooleanSetting("revanced_hide_shorts_subscriptions", FALSE);
public static final BooleanSetting HIDE_SHORTS_SEARCH = new BooleanSetting("revanced_hide_shorts_search", FALSE);
public static final BooleanSetting HIDE_SHORTS_JOIN_BUTTON = new BooleanSetting("revanced_hide_shorts_join_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_SUBSCRIBE_BUTTON = new BooleanSetting("revanced_hide_shorts_subscribe_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_PAUSED_OVERLAY_BUTTONS = new BooleanSetting("revanced_hide_shorts_paused_overlay_buttons", FALSE);
public static final BooleanSetting HIDE_SHORTS_SHOP_BUTTON = new BooleanSetting("revanced_hide_shorts_shop_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_TAGGED_PRODUCTS = new BooleanSetting("revanced_hide_shorts_tagged_products", TRUE);
public static final BooleanSetting HIDE_SHORTS_LOCATION_LABEL = new BooleanSetting("revanced_hide_shorts_location_label", FALSE);
public static final BooleanSetting HIDE_SHORTS_SAVE_SOUND_BUTTON = new BooleanSetting("revanced_hide_shorts_save_sound_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_USE_TEMPLATE_BUTTON = new BooleanSetting("revanced_hide_shorts_use_template_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_UPCOMING_BUTTON = new BooleanSetting("revanced_hide_shorts_upcoming_button", TRUE);
public static final BooleanSetting DISABLE_SHORTS_BACKGROUND_PLAYBACK = new BooleanSetting("revanced_shorts_disable_background_playback", FALSE);
public static final BooleanSetting HIDE_SHORTS_CHANNEL_BAR = new BooleanSetting("revanced_hide_shorts_channel_bar", FALSE);
public static final BooleanSetting HIDE_SHORTS_COMMENTS_BUTTON = new BooleanSetting("revanced_hide_shorts_comments_button", FALSE);
public static final BooleanSetting HIDE_SHORTS_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_dislike_button", FALSE);
public static final BooleanSetting HIDE_SHORTS_FULL_VIDEO_LINK_LABEL = new BooleanSetting("revanced_hide_shorts_full_video_link_label", FALSE);
public static final BooleanSetting HIDE_SHORTS_GREEN_SCREEN_BUTTON = new BooleanSetting("revanced_hide_shorts_green_screen_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_HASHTAG_BUTTON = new BooleanSetting("revanced_hide_shorts_hashtag_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_SEARCH_SUGGESTIONS = new BooleanSetting("revanced_hide_shorts_search_suggestions", TRUE);
public static final BooleanSetting HIDE_SHORTS_STICKERS = new BooleanSetting("revanced_hide_shorts_stickers", TRUE);
public static final BooleanSetting HIDE_SHORTS_SUPER_THANKS_BUTTON = new BooleanSetting("revanced_hide_shorts_super_thanks_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_LIKE_FOUNTAIN = new BooleanSetting("revanced_hide_shorts_like_fountain", TRUE);
public static final BooleanSetting HIDE_SHORTS_LIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_like_button", FALSE);
public static final BooleanSetting HIDE_SHORTS_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_dislike_button", FALSE);
public static final BooleanSetting HIDE_SHORTS_COMMENTS_BUTTON = new BooleanSetting("revanced_hide_shorts_comments_button", FALSE);
public static final BooleanSetting HIDE_SHORTS_REMIX_BUTTON = new BooleanSetting("revanced_hide_shorts_remix_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_SHARE_BUTTON = new BooleanSetting("revanced_hide_shorts_share_button", FALSE);
public static final BooleanSetting HIDE_SHORTS_HOME = new BooleanSetting("revanced_hide_shorts_home", FALSE);
public static final BooleanSetting HIDE_SHORTS_INFO_PANEL = new BooleanSetting("revanced_hide_shorts_info_panel", TRUE);
public static final BooleanSetting HIDE_SHORTS_SOUND_BUTTON = new BooleanSetting("revanced_hide_shorts_sound_button", FALSE);
public static final BooleanSetting HIDE_SHORTS_CHANNEL_BAR = new BooleanSetting("revanced_hide_shorts_channel_bar", FALSE);
public static final BooleanSetting HIDE_SHORTS_VIDEO_TITLE = new BooleanSetting("revanced_hide_shorts_video_title", FALSE);
public static final BooleanSetting HIDE_SHORTS_SOUND_METADATA_LABEL = new BooleanSetting("revanced_hide_shorts_sound_metadata_label", FALSE);
public static final BooleanSetting HIDE_SHORTS_FULL_VIDEO_LINK_LABEL = new BooleanSetting("revanced_hide_shorts_full_video_link_label", FALSE);
public static final BooleanSetting HIDE_SHORTS_JOIN_BUTTON = new BooleanSetting("revanced_hide_shorts_join_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_LIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_like_button", FALSE);
public static final BooleanSetting HIDE_SHORTS_LIKE_FOUNTAIN = new BooleanSetting("revanced_hide_shorts_like_fountain", TRUE);
public static final BooleanSetting HIDE_SHORTS_LOCATION_LABEL = new BooleanSetting("revanced_hide_shorts_location_label", FALSE);
public static final BooleanSetting HIDE_SHORTS_NAVIGATION_BAR = new BooleanSetting("revanced_hide_shorts_navigation_bar", FALSE, true);
public static final BooleanSetting HIDE_SHORTS_PAUSED_OVERLAY_BUTTONS = new BooleanSetting("revanced_hide_shorts_paused_overlay_buttons", FALSE);
public static final BooleanSetting HIDE_SHORTS_REMIX_BUTTON = new BooleanSetting("revanced_hide_shorts_remix_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_SAVE_SOUND_BUTTON = new BooleanSetting("revanced_hide_shorts_save_sound_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_SEARCH = new BooleanSetting("revanced_hide_shorts_search", FALSE);
public static final BooleanSetting HIDE_SHORTS_SEARCH_SUGGESTIONS = new BooleanSetting("revanced_hide_shorts_search_suggestions", TRUE);
public static final BooleanSetting HIDE_SHORTS_SHARE_BUTTON = new BooleanSetting("revanced_hide_shorts_share_button", FALSE);
public static final BooleanSetting HIDE_SHORTS_SHOP_BUTTON = new BooleanSetting("revanced_hide_shorts_shop_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_SOUND_BUTTON = new BooleanSetting("revanced_hide_shorts_sound_button", FALSE);
public static final BooleanSetting HIDE_SHORTS_SOUND_METADATA_LABEL = new BooleanSetting("revanced_hide_shorts_sound_metadata_label", FALSE);
public static final BooleanSetting HIDE_SHORTS_STICKERS = new BooleanSetting("revanced_hide_shorts_stickers", TRUE);
public static final BooleanSetting HIDE_SHORTS_SUBSCRIBE_BUTTON = new BooleanSetting("revanced_hide_shorts_subscribe_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_SUBSCRIPTIONS = new BooleanSetting("revanced_hide_shorts_subscriptions", FALSE);
public static final BooleanSetting HIDE_SHORTS_SUPER_THANKS_BUTTON = new BooleanSetting("revanced_hide_shorts_super_thanks_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_TAGGED_PRODUCTS = new BooleanSetting("revanced_hide_shorts_tagged_products", TRUE);
public static final BooleanSetting HIDE_SHORTS_UPCOMING_BUTTON = new BooleanSetting("revanced_hide_shorts_upcoming_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_USE_TEMPLATE_BUTTON = new BooleanSetting("revanced_hide_shorts_use_template_button", TRUE);
public static final BooleanSetting HIDE_SHORTS_VIDEO_TITLE = new BooleanSetting("revanced_hide_shorts_video_title", FALSE);
public static final BooleanSetting SHORTS_AUTOPLAY = new BooleanSetting("revanced_shorts_autoplay", FALSE);
public static final BooleanSetting SHORTS_AUTOPLAY_BACKGROUND = new BooleanSetting("revanced_shorts_autoplay_background", TRUE);
// Seekbar
public static final BooleanSetting DISABLE_PRECISE_SEEKING_GESTURE = new BooleanSetting("revanced_disable_precise_seeking_gesture", TRUE);
public static final BooleanSetting SEEKBAR_TAPPING = new BooleanSetting("revanced_seekbar_tapping", TRUE);
public static final BooleanSetting SLIDE_TO_SEEK = new BooleanSetting("revanced_slide_to_seek", FALSE, true);
public static final BooleanSetting RESTORE_OLD_SEEKBAR_THUMBNAILS = new BooleanSetting("revanced_restore_old_seekbar_thumbnails", TRUE);
public static final BooleanSetting SEEKBAR_THUMBNAILS_HIGH_QUALITY = new BooleanSetting("revanced_seekbar_thumbnails_high_quality", FALSE, true,
"revanced_seekbar_thumbnails_high_quality_dialog_message", new SeekbarThumbnailsHighQualityAvailability());
public static final BooleanSetting HIDE_SEEKBAR = new BooleanSetting("revanced_hide_seekbar", FALSE, true);
public static final BooleanSetting HIDE_SEEKBAR_THUMBNAIL = new BooleanSetting("revanced_hide_seekbar_thumbnail", FALSE);
public static final BooleanSetting HIDE_TIMESTAMP = new BooleanSetting("revanced_hide_timestamp", FALSE);
public static final BooleanSetting RESTORE_OLD_SEEKBAR_THUMBNAILS = new BooleanSetting("revanced_restore_old_seekbar_thumbnails", TRUE);
public static final BooleanSetting SEEKBAR_CUSTOM_COLOR = new BooleanSetting("revanced_seekbar_custom_color", FALSE, true);
public static final BooleanSetting SEEKBAR_TAPPING = new BooleanSetting("revanced_seekbar_tapping", TRUE);
public static final BooleanSetting SEEKBAR_THUMBNAILS_HIGH_QUALITY = new BooleanSetting("revanced_seekbar_thumbnails_high_quality", FALSE, true,
"revanced_seekbar_thumbnails_high_quality_dialog_message", new SeekbarThumbnailsHighQualityAvailability());
public static final BooleanSetting SLIDE_TO_SEEK = new BooleanSetting("revanced_slide_to_seek", FALSE, true);
public static final StringSetting SEEKBAR_CUSTOM_COLOR_VALUE = new StringSetting("revanced_seekbar_custom_color_value", "#FF0033", true, parent(SEEKBAR_CUSTOM_COLOR));
// Misc
public static final BooleanSetting ANNOUNCEMENTS = new BooleanSetting("revanced_announcements", TRUE);
public static final IntegerSetting ANNOUNCEMENT_LAST_ID = new IntegerSetting("revanced_announcement_last_id", -1, false, false);
public static final BooleanSetting AUTO_CAPTIONS = new BooleanSetting("revanced_auto_captions", FALSE);
public static final BooleanSetting AUTO_REPEAT = new BooleanSetting("revanced_auto_repeat", FALSE);
public static final BooleanSetting BYPASS_URL_REDIRECTS = new BooleanSetting("revanced_bypass_url_redirects", TRUE);
public static final BooleanSetting CHECK_WATCH_HISTORY_DOMAIN_NAME = new BooleanSetting("revanced_check_watch_history_domain_name", TRUE, false, false);
public static final BooleanSetting DISABLE_ZOOM_HAPTICS = new BooleanSetting("revanced_disable_zoom_haptics", TRUE);
public static final BooleanSetting EXTERNAL_BROWSER = new BooleanSetting("revanced_external_browser", TRUE, true);
public static final BooleanSetting AUTO_REPEAT = new BooleanSetting("revanced_auto_repeat", FALSE);
public static final BooleanSetting REMOVE_TRACKING_QUERY_PARAMETER = new BooleanSetting("revanced_remove_tracking_query_parameter", TRUE);
public static final BooleanSetting SPOOF_DEVICE_DIMENSIONS = new BooleanSetting("revanced_spoof_device_dimensions", FALSE, true,
"revanced_spoof_device_dimensions_user_dialog_message");
public static final BooleanSetting BYPASS_URL_REDIRECTS = new BooleanSetting("revanced_bypass_url_redirects", TRUE);
public static final BooleanSetting ANNOUNCEMENTS = new BooleanSetting("revanced_announcements", TRUE);
public static final BooleanSetting SPOOF_VIDEO_STREAMS = new BooleanSetting("revanced_spoof_video_streams", TRUE, true,"revanced_spoof_video_streams_user_dialog_message");
public static final BooleanSetting SPOOF_VIDEO_STREAMS_IOS_FORCE_AVC = new BooleanSetting("revanced_spoof_video_streams_ios_force_avc", FALSE, true,
"revanced_spoof_video_streams_ios_force_avc_user_dialog_message", new SpoofVideoStreamsPatch.ForceiOSAVCAvailability());
public static final EnumSetting<ClientType> SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client", ClientType.ANDROID_VR, true, parent(SPOOF_VIDEO_STREAMS));
public static final IntegerSetting ANNOUNCEMENT_LAST_ID = new IntegerSetting("revanced_announcement_last_id", -1, false, false);
public static final BooleanSetting CHECK_WATCH_HISTORY_DOMAIN_NAME = new BooleanSetting("revanced_check_watch_history_domain_name", TRUE, false, false);
public static final BooleanSetting REMOVE_TRACKING_QUERY_PARAMETER = new BooleanSetting("revanced_remove_tracking_query_parameter", TRUE);
// Debugging
/**
* When enabled, share the debug logs with care.
* The buffer contains select user data, including the client ip address and information that could identify the end user.
@@ -298,6 +300,8 @@ public class Settings extends BaseSettings {
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
public static final IntegerSetting SWIPE_OVERLAY_BACKGROUND_ALPHA = new IntegerSetting("revanced_swipe_overlay_background_alpha", 127, true,
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
// Debugging
public static final IntegerSetting SWIPE_OVERLAY_TEXT_SIZE = new IntegerSetting("revanced_swipe_text_overlay_size", 22, true,
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
public static final LongSetting SWIPE_OVERLAY_TIMEOUT = new LongSetting("revanced_swipe_overlay_timeout", 500L, true,
@@ -320,7 +324,6 @@ public class Settings extends BaseSettings {
* Do not use directly, instead use {@link SponsorBlockSettings}
*/
public static final StringSetting SB_PRIVATE_USER_ID = new StringSetting("sb_private_user_id_Do_Not_Share", "");
public static final StringSetting DEPRECATED_SB_UUID_OLD_MIGRATION_SETTING = new StringSetting("uuid", ""); // Delete sometime in 2024
public static final IntegerSetting SB_CREATE_NEW_SEGMENT_STEP = new IntegerSetting("sb_create_new_segment_step", 150, parent(SB_ENABLED));
public static final BooleanSetting SB_VOTING_BUTTON = new BooleanSetting("sb_voting_button", FALSE, parent(SB_ENABLED));
public static final BooleanSetting SB_CREATE_NEW_SEGMENT = new BooleanSetting("sb_create_new_segment", FALSE, parent(SB_ENABLED));
@@ -331,34 +334,38 @@ public class Settings extends BaseSettings {
public static final BooleanSetting SB_TRACK_SKIP_COUNT = new BooleanSetting("sb_track_skip_count", TRUE, parent(SB_ENABLED));
public static final FloatSetting SB_SEGMENT_MIN_DURATION = new FloatSetting("sb_min_segment_duration", 0F, parent(SB_ENABLED));
public static final BooleanSetting SB_VIDEO_LENGTH_WITHOUT_SEGMENTS = new BooleanSetting("sb_video_length_without_segments", TRUE, parent(SB_ENABLED));
public static final StringSetting SB_API_URL = new StringSetting("sb_api_url","https://sponsor.ajay.app");
public static final StringSetting SB_API_URL = new StringSetting("sb_api_url", "https://sponsor.ajay.app");
public static final BooleanSetting SB_USER_IS_VIP = new BooleanSetting("sb_user_is_vip", FALSE);
public static final IntegerSetting SB_LOCAL_TIME_SAVED_NUMBER_SEGMENTS = new IntegerSetting("sb_local_time_saved_number_segments", 0);
public static final LongSetting SB_LOCAL_TIME_SAVED_MILLISECONDS = new LongSetting("sb_local_time_saved_milliseconds", 0L);
public static final LongSetting SB_LAST_VIP_CHECK = new LongSetting("sb_last_vip_check", 0L, false, false);
public static final BooleanSetting SB_HIDE_EXPORT_WARNING = new BooleanSetting("sb_hide_export_warning", FALSE, false, false);
public static final BooleanSetting SB_SEEN_GUIDELINES = new BooleanSetting("sb_seen_guidelines", FALSE, false, false);
public static final StringSetting SB_CATEGORY_SPONSOR = new StringSetting("sb_sponsor", SKIP_AUTOMATICALLY_ONCE.reVancedKeyValue);
public static final StringSetting SB_CATEGORY_SPONSOR_COLOR = new StringSetting("sb_sponsor_color","#00D400");
public static final StringSetting SB_CATEGORY_SPONSOR_COLOR = new StringSetting("sb_sponsor_color", "#00D400");
public static final StringSetting SB_CATEGORY_SELF_PROMO = new StringSetting("sb_selfpromo", MANUAL_SKIP.reVancedKeyValue);
public static final StringSetting SB_CATEGORY_SELF_PROMO_COLOR = new StringSetting("sb_selfpromo_color","#FFFF00");
public static final StringSetting SB_CATEGORY_SELF_PROMO_COLOR = new StringSetting("sb_selfpromo_color", "#FFFF00");
public static final StringSetting SB_CATEGORY_INTERACTION = new StringSetting("sb_interaction", MANUAL_SKIP.reVancedKeyValue);
public static final StringSetting SB_CATEGORY_INTERACTION_COLOR = new StringSetting("sb_interaction_color","#CC00FF");
public static final StringSetting SB_CATEGORY_INTERACTION_COLOR = new StringSetting("sb_interaction_color", "#CC00FF");
public static final StringSetting SB_CATEGORY_HIGHLIGHT = new StringSetting("sb_highlight", MANUAL_SKIP.reVancedKeyValue);
public static final StringSetting SB_CATEGORY_HIGHLIGHT_COLOR = new StringSetting("sb_highlight_color","#FF1684");
public static final StringSetting SB_CATEGORY_HIGHLIGHT_COLOR = new StringSetting("sb_highlight_color", "#FF1684");
public static final StringSetting SB_CATEGORY_INTRO = new StringSetting("sb_intro", MANUAL_SKIP.reVancedKeyValue);
public static final StringSetting SB_CATEGORY_INTRO_COLOR = new StringSetting("sb_intro_color","#00FFFF");
public static final StringSetting SB_CATEGORY_INTRO_COLOR = new StringSetting("sb_intro_color", "#00FFFF");
public static final StringSetting SB_CATEGORY_OUTRO = new StringSetting("sb_outro", MANUAL_SKIP.reVancedKeyValue);
public static final StringSetting SB_CATEGORY_OUTRO_COLOR = new StringSetting("sb_outro_color","#0202ED");
public static final StringSetting SB_CATEGORY_OUTRO_COLOR = new StringSetting("sb_outro_color", "#0202ED");
public static final StringSetting SB_CATEGORY_PREVIEW = new StringSetting("sb_preview", IGNORE.reVancedKeyValue);
public static final StringSetting SB_CATEGORY_PREVIEW_COLOR = new StringSetting("sb_preview_color","#008FD6");
public static final StringSetting SB_CATEGORY_PREVIEW_COLOR = new StringSetting("sb_preview_color", "#008FD6");
public static final StringSetting SB_CATEGORY_FILLER = new StringSetting("sb_filler", IGNORE.reVancedKeyValue);
public static final StringSetting SB_CATEGORY_FILLER_COLOR = new StringSetting("sb_filler_color","#7300FF");
public static final StringSetting SB_CATEGORY_FILLER_COLOR = new StringSetting("sb_filler_color", "#7300FF");
public static final StringSetting SB_CATEGORY_MUSIC_OFFTOPIC = new StringSetting("sb_music_offtopic", MANUAL_SKIP.reVancedKeyValue);
public static final StringSetting SB_CATEGORY_MUSIC_OFFTOPIC_COLOR = new StringSetting("sb_music_offtopic_color","#FF9900");
public static final StringSetting SB_CATEGORY_MUSIC_OFFTOPIC_COLOR = new StringSetting("sb_music_offtopic_color", "#FF9900");
public static final StringSetting SB_CATEGORY_UNSUBMITTED = new StringSetting("sb_unsubmitted", SKIP_AUTOMATICALLY.reVancedKeyValue);
public static final StringSetting SB_CATEGORY_UNSUBMITTED_COLOR = new StringSetting("sb_unsubmitted_color","#FFFFFF");
public static final StringSetting SB_CATEGORY_UNSUBMITTED_COLOR = new StringSetting("sb_unsubmitted_color", "#FFFFFF");
// Deprecated migrations
public static final StringSetting DEPRECATED_SB_UUID_OLD_MIGRATION_SETTING = new StringSetting("uuid", ""); // Delete sometime in 2024
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_BUTTONS = new BooleanSetting("revanced_hide_player_buttons", FALSE, true);
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER = new BooleanSetting("revanced_hide_video_quality_menu_footer", FALSE);
static {
// region Migration
@@ -384,7 +391,8 @@ public class Settings extends BaseSettings {
}
// Migrate renamed enum.
if (MINIPLAYER_TYPE.get() == PHONE) {
//noinspection deprecation
if (MINIPLAYER_TYPE.get() == MiniplayerType.PHONE) {
MINIPLAYER_TYPE.save(MINIMAL);
}

View File

@@ -1,61 +0,0 @@
package app.revanced.extension.youtube.settings.preference;
import static app.revanced.extension.shared.StringRef.str;
import static app.revanced.extension.youtube.patches.spoof.DeviceHardwareSupport.DEVICE_HAS_HARDWARE_DECODING_VP9;
import android.content.Context;
import android.preference.SwitchPreference;
import android.util.AttributeSet;
@SuppressWarnings({"unused", "deprecation"})
public class ForceAVCSpoofingPreference extends SwitchPreference {
{
if (!DEVICE_HAS_HARDWARE_DECODING_VP9) {
setSummaryOn(str("revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on"));
}
}
public ForceAVCSpoofingPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public ForceAVCSpoofingPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public ForceAVCSpoofingPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ForceAVCSpoofingPreference(Context context) {
super(context);
}
private void updateUI() {
if (DEVICE_HAS_HARDWARE_DECODING_VP9) {
return;
}
// Temporarily remove the preference key to allow changing this preference without
// causing the settings UI listeners from showing reboot dialogs by the changes made here.
String key = getKey();
setKey(null);
// This setting cannot be changed by the user.
super.setEnabled(false);
super.setChecked(true);
setKey(key);
}
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
updateUI();
}
@Override
public void setChecked(boolean checked) {
super.setChecked(checked);
updateUI();
}
}

View File

@@ -10,6 +10,7 @@ import android.os.Build;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceScreen;
import android.util.Pair;
import android.util.TypedValue;
import android.view.ViewGroup;
import android.view.WindowInsets;
@@ -18,6 +19,10 @@ import android.widget.Toolbar;
import androidx.annotation.RequiresApi;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.preference.AbstractPreferenceFragment;
@@ -41,6 +46,55 @@ public class ReVancedPreferenceFragment extends AbstractPreferenceFragment {
return Utils.getContext().getResources().getDrawable(backButtonResource);
}
/**
* Sorts a preference list by menu entries, but preserves the first value as the first entry.
*
* @noinspection SameParameterValue
*/
private static void sortListPreferenceByValues(ListPreference listPreference, int firstEntriesToPreserve) {
CharSequence[] entries = listPreference.getEntries();
CharSequence[] entryValues = listPreference.getEntryValues();
final int entrySize = entries.length;
if (entrySize != entryValues.length) {
// Xml array declaration has a missing/extra entry.
throw new IllegalStateException();
}
List<Pair<String, String>> firstPairs = new ArrayList<>(firstEntriesToPreserve);
List<Pair<String, String>> pairsToSort = new ArrayList<>(entrySize);
for (int i = 0; i < entrySize; i++) {
Pair<String, String> pair = new Pair<>(entries[i].toString(), entryValues[i].toString());
if (i < firstEntriesToPreserve) {
firstPairs.add(pair);
} else {
pairsToSort.add(pair);
}
}
Collections.sort(pairsToSort, (pair1, pair2) -> pair1.first.compareToIgnoreCase(pair2.first));
CharSequence[] sortedEntries = new CharSequence[entrySize];
CharSequence[] sortedEntryValues = new CharSequence[entrySize];
int i = 0;
for (Pair<String, String> pair : firstPairs) {
sortedEntries[i] = pair.first;
sortedEntryValues[i] = pair.second;
i++;
}
for (Pair<String, String> pair : pairsToSort) {
sortedEntries[i] = pair.first;
sortedEntryValues[i] = pair.second;
i++;
}
listPreference.setEntries(sortedEntries);
listPreference.setEntryValues(sortedEntryValues);
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void initialize() {
@@ -50,9 +104,14 @@ public class ReVancedPreferenceFragment extends AbstractPreferenceFragment {
setPreferenceScreenToolbar(getPreferenceScreen());
// If the preference was included, then initialize it based on the available playback speed.
Preference defaultSpeedPreference = findPreference(Settings.PLAYBACK_SPEED_DEFAULT.key);
if (defaultSpeedPreference instanceof ListPreference) {
CustomPlaybackSpeedPatch.initializeListPreference((ListPreference) defaultSpeedPreference);
Preference preference = findPreference(Settings.PLAYBACK_SPEED_DEFAULT.key);
if (preference instanceof ListPreference playbackPreference) {
CustomPlaybackSpeedPatch.initializeListPreference(playbackPreference);
}
preference = findPreference(Settings.SPOOF_VIDEO_STREAMS_LANGUAGE.key);
if (preference instanceof ListPreference languagePreference) {
sortListPreferenceByValues(languagePreference, 1);
}
} catch (Exception ex) {
Logger.printException(() -> "initialize failure", ex);

View File

@@ -507,7 +507,7 @@ public class SponsorBlockPreferenceFragment extends PreferenceFragment {
Utils.showToastLong(str("revanced_sb_stats_username_changed"));
} else {
preference.setText(userName); // revert to previous
Utils.showToastLong(errorMessage);
SponsorBlockUtils.showErrorDialog(errorMessage);
}
});
});

View File

@@ -0,0 +1,85 @@
package app.revanced.extension.youtube.settings.preference;
import static app.revanced.extension.shared.StringRef.str;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.Preference;
import android.preference.PreferenceManager;
import android.util.AttributeSet;
import androidx.annotation.Nullable;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.BaseSettings;
import app.revanced.extension.shared.settings.Setting;
import app.revanced.extension.shared.spoof.ClientType;
@SuppressWarnings({"deprecation", "unused"})
public class SpoofStreamingDataSideEffectsPreference extends Preference {
@Nullable
private ClientType currentClientType;
private final SharedPreferences.OnSharedPreferenceChangeListener listener = (sharedPreferences, str) -> {
// Because this listener may run before the ReVanced settings fragment updates Settings,
// this could show the prior config and not the current.
//
// Push this call to the end of the main run queue,
// so all other listeners are done and Settings is up to date.
Utils.runOnMainThread(this::updateUI);
};
public SpoofStreamingDataSideEffectsPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public SpoofStreamingDataSideEffectsPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public SpoofStreamingDataSideEffectsPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SpoofStreamingDataSideEffectsPreference(Context context) {
super(context);
}
private void addChangeListener() {
Setting.preferences.preferences.registerOnSharedPreferenceChangeListener(listener);
}
private void removeChangeListener() {
Setting.preferences.preferences.unregisterOnSharedPreferenceChangeListener(listener);
}
@Override
protected void onAttachedToHierarchy(PreferenceManager preferenceManager) {
super.onAttachedToHierarchy(preferenceManager);
updateUI();
addChangeListener();
}
@Override
protected void onPrepareForRemoval() {
super.onPrepareForRemoval();
removeChangeListener();
}
private void updateUI() {
ClientType clientType = BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get();
if (currentClientType == clientType) {
return;
}
Logger.printDebug(() -> "Updating spoof stream side effects preference");
setEnabled(BaseSettings.SPOOF_VIDEO_STREAMS.get());
String key = "revanced_spoof_video_streams_about_"
+ clientType.name().toLowerCase();
setTitle(str(key + "_title"));
setSummary(str(key + "_summary"));
}
}

View File

@@ -363,6 +363,16 @@ public class SponsorBlockUtils {
}
}
public static void showErrorDialog(String dialogMessage) {
Utils.runOnMainThreadNowOrLater(() ->
new AlertDialog.Builder(SponsorBlockViewController.getOverLaysViewGroupContext())
.setMessage(dialogMessage)
.setPositiveButton(android.R.string.ok, null)
.setCancelable(false)
.show()
);
}
public static void onEditByHandClicked() {
try {
Utils.verifyOnMainThread();

View File

@@ -19,6 +19,7 @@ import java.util.concurrent.TimeUnit;
import app.revanced.extension.youtube.settings.Settings;
import app.revanced.extension.youtube.sponsorblock.SponsorBlockSettings;
import app.revanced.extension.youtube.sponsorblock.SponsorBlockUtils;
import app.revanced.extension.youtube.sponsorblock.objects.SegmentCategory;
import app.revanced.extension.youtube.sponsorblock.objects.SponsorSegment;
import app.revanced.extension.youtube.sponsorblock.objects.SponsorSegment.SegmentVote;
@@ -142,6 +143,7 @@ public class SBRequester {
public static void submitSegments(@NonNull String videoId, @NonNull String category,
long startTime, long endTime, long videoLength) {
Utils.verifyOffMainThread();
try {
String privateUserId = SponsorBlockSettings.getSBPrivateUserID();
String start = String.format(Locale.US, TIME_TEMPLATE, startTime / 1000f);
@@ -151,35 +153,29 @@ public class SBRequester {
HttpURLConnection connection = getConnectionFromRoute(SBRoutes.SUBMIT_SEGMENTS, privateUserId, videoId, category, start, end, duration);
final int responseCode = connection.getResponseCode();
final String messageToToast;
switch (responseCode) {
case HTTP_STATUS_CODE_SUCCESS:
messageToToast = str("revanced_sb_submit_succeeded");
break;
case 409:
messageToToast = str("revanced_sb_submit_failed_duplicate");
break;
case 403:
messageToToast = str("revanced_sb_submit_failed_forbidden", Requester.parseErrorStringAndDisconnect(connection));
break;
case 429:
messageToToast = str("revanced_sb_submit_failed_rate_limit");
break;
case 400:
messageToToast = str("revanced_sb_submit_failed_invalid", Requester.parseErrorStringAndDisconnect(connection));
break;
default:
messageToToast = str("revanced_sb_submit_failed_unknown_error", responseCode, connection.getResponseMessage());
break;
}
Utils.showToastLong(messageToToast);
String userMessage = switch (responseCode) {
case HTTP_STATUS_CODE_SUCCESS -> str("revanced_sb_submit_succeeded");
case 409 -> str("revanced_sb_submit_failed_duplicate");
case 403 -> str("revanced_sb_submit_failed_forbidden",
Requester.parseErrorStringAndDisconnect(connection));
case 429 -> str("revanced_sb_submit_failed_rate_limit");
case 400 -> str("revanced_sb_submit_failed_invalid",
Requester.parseErrorStringAndDisconnect(connection));
default -> str("revanced_sb_submit_failed_unknown_error",
responseCode, connection.getResponseMessage());
};
// Message might be about the users account or an error too large to show in a toast.
// Use a dialog instead.
SponsorBlockUtils.showErrorDialog(userMessage);
} catch (SocketTimeoutException ex) {
// Always show, even if show connection toasts is turned off
Logger.printDebug(() -> "Timeout", ex);
Utils.showToastLong(str("revanced_sb_submit_failed_timeout"));
} catch (IOException ex) {
Logger.printDebug(() -> "IOException", ex);
Utils.showToastLong(str("revanced_sb_submit_failed_unknown_error", 0, ex.getMessage()));
} catch (Exception ex) {
Logger.printException(() -> "failed to submit segments", ex);
Logger.printException(() -> "failed to submit segments", ex); // Should never happen.
}
}
@@ -218,19 +214,22 @@ public class SBRequester {
: getConnectionFromRoute(SBRoutes.VOTE_ON_SEGMENT_QUALITY, uuid, segmentUuid, String.valueOf(voteOption.apiVoteType));
final int responseCode = connection.getResponseCode();
String userMessage;
switch (responseCode) {
case HTTP_STATUS_CODE_SUCCESS:
Logger.printDebug(() -> "Vote success for segment: " + segment);
break;
return;
case 403:
Utils.showToastLong(
str("revanced_sb_vote_failed_forbidden", Requester.parseErrorStringAndDisconnect(connection)));
userMessage = str("revanced_sb_vote_failed_forbidden",
Requester.parseErrorStringAndDisconnect(connection));
break;
default:
Utils.showToastLong(
str("revanced_sb_vote_failed_unknown_error", responseCode, connection.getResponseMessage()));
userMessage = str("revanced_sb_vote_failed_unknown_error",
responseCode, connection.getResponseMessage());
break;
}
SponsorBlockUtils.showErrorDialog(userMessage);
} catch (SocketTimeoutException ex) {
Utils.showToastShort(str("revanced_sb_vote_failed_timeout"));
} catch (IOException ex) {

View File

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

View File

@@ -60,6 +60,10 @@ public final class app/revanced/patches/all/misc/directory/ChangeDataDirectoryLo
public static final fun getChangeDataDirectoryLocationPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/all/misc/directory/documentsprovider/ExportInternalDataDocumentsProviderPatchKt {
public static final fun getExportInternalDataDocumentsProviderPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
}
public final class app/revanced/patches/all/misc/hex/HexPatchKt {
public static final fun getHexPatch ()Lapp/revanced/patcher/patch/RawResourcePatch;
}
@@ -320,6 +324,14 @@ public final class app/revanced/patches/music/misc/gms/GmsCoreSupportPatchKt {
public static final fun getGmsCoreSupportPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/music/misc/spoof/SpoofClientPatchKt {
public static final fun getSpoofClientPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/music/misc/spoof/UserAgentClientSpoofPatchKt {
public static final fun getUserAgentClientSpoofPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/myexpenses/misc/pro/UnlockProPatchKt {
public static final fun getUnlockProPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@@ -753,6 +765,15 @@ public final class app/revanced/patches/shared/misc/settings/preference/TextPref
public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element;
}
public final class app/revanced/patches/shared/misc/spoof/SpoofVideoStreamsPatchKt {
public static final fun spoofVideoStreamsPatch (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/BytecodePatch;
public static synthetic fun spoofVideoStreamsPatch$default (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/shared/misc/spoof/UserAgentClientSpoofPatchKt {
public static final fun userAgentClientSpoofPatch (Ljava/lang/String;)Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/solidexplorer2/functionality/filesize/RemoveFileSizeLimitPatchKt {
public static final fun getRemoveFileSizeLimitPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@@ -1155,6 +1176,10 @@ public final class app/revanced/patches/youtube/layout/player/background/PlayerC
public static final fun getPlayerControlsBackgroundPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
}
public final class app/revanced/patches/youtube/layout/player/fullscreen/OpenVideosFullscreenKt {
public static final fun getOpenVideosFullscreenPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/layout/player/overlay/CustomPlayerOverlayOpacityPatchKt {
public static final fun getCustomPlayerOverlayOpacityPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@@ -1359,6 +1384,14 @@ public final class app/revanced/patches/youtube/misc/settings/SettingsPatchKt {
public static final fun newIntent (Ljava/lang/String;)Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent;
}
public final class app/revanced/patches/youtube/misc/spoof/SpoofVideoStreamsPatchKt {
public static final fun getSpoofVideoStreamsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/misc/spoof/UserAgentClientSpoofPatchKt {
public static final fun getUserAgentClientSpoofPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/misc/zoomhaptics/ZoomHapticsPatchKt {
public static final fun getZoomHapticsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@@ -1367,6 +1400,10 @@ public final class app/revanced/patches/youtube/shared/FingerprintsKt {
public static final fun getRollingNumberTextViewAnimationUpdateFingerprint ()Lapp/revanced/patcher/Fingerprint;
}
public final class app/revanced/patches/youtube/video/audio/ForceOriginalAudioPatchKt {
public static final fun getForceOriginalAudioPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/video/information/VideoInformationPatchKt {
public static final fun getVideoInformationPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
public static final fun userSelectedPlaybackSpeedHook (Ljava/lang/String;Ljava/lang/String;)V

View File

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

View File

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

View File

@@ -1,9 +1,10 @@
package app.revanced.patches.all.misc.packagename
import app.revanced.patcher.patch.Option
import app.revanced.patcher.patch.resourcePatch
import app.revanced.patcher.patch.stringOption
import app.revanced.patcher.patch.*
import app.revanced.util.asSequence
import app.revanced.util.getNode
import org.w3c.dom.Element
import java.util.logging.Logger
lateinit var packageNameOption: Option<String>
@@ -27,7 +28,8 @@ fun setOrGetFallbackPackageName(fallbackPackageName: String): String {
val changePackageNamePatch = resourcePatch(
name = "Change package name",
description = "Appends \".revanced\" to the package name by default. Changing the package name of the app can lead to unexpected issues.",
description = "Appends \".revanced\" to the package name by default. " +
"Changing the package name of the app can lead to unexpected issues.",
use = false,
) {
packageNameOption = stringOption(
@@ -41,20 +43,81 @@ val changePackageNamePatch = resourcePatch(
it == "Default" || it!!.matches(Regex("^[a-z]\\w*(\\.[a-z]\\w*)+\$"))
}
val updatePermissions by booleanOption(
key = "updatePermissions",
default = false,
title = "Update permissions",
description = "Update compatibility receiver permissions. " +
"Enabling this can fix installation errors, but this can also break features in certain apps.",
)
val updateProviders by booleanOption(
key = "updateProviders",
default = false,
title = "Update providers",
description = "Update provider names declared by the app. " +
"Enabling this can fix installation errors, but this can also break features in certain apps.",
)
finalize {
/**
* Apps that are confirmed to not work correctly with this patch.
* This is not an exhaustive list, and is only the apps with
* ReVanced specific patches and are confirmed incompatible with this patch.
*/
val incompatibleAppPackages = setOf(
// Cannot log in, settings menu is broken.
"com.reddit.frontpage",
// Patches and installs but crashes on launch.
"com.duolingo",
"com.twitter.android",
"tv.twitch.android.app",
)
document("AndroidManifest.xml").use { document ->
val manifest = document.getNode("manifest") as Element
val packageName = manifest.getAttribute("package")
if (incompatibleAppPackages.contains(packageName)) {
return@finalize Logger.getLogger(this::class.java.name).severe(
"'$packageName' does not work correctly with \"Change package name\"",
)
}
val replacementPackageName = packageNameOption.value
val newPackageName = if (replacementPackageName != packageNameOption.default) {
replacementPackageName!!
} else {
"$packageName.revanced"
}
val manifest = document.getElementsByTagName("manifest").item(0) as Element
manifest.setAttribute(
"package",
if (replacementPackageName != packageNameOption.default) {
replacementPackageName
} else {
"${manifest.getAttribute("package")}.revanced"
},
)
manifest.setAttribute("package", newPackageName)
if (updatePermissions == true) {
val permissions = manifest.getElementsByTagName("permission").asSequence()
val usesPermissions = manifest.getElementsByTagName("uses-permission").asSequence()
val receiverNotExported = "DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"
(permissions + usesPermissions)
.map { it as Element }
.filter { it.getAttribute("android:name") == "$packageName.$receiverNotExported" }
.forEach { it.setAttribute("android:name", "$newPackageName.$receiverNotExported") }
}
if (updateProviders == true) {
val providers = manifest.getElementsByTagName("provider").asSequence()
for (node in providers) {
val provider = node as Element
val authorities = provider.getAttribute("android:authorities")
if (!authorities.startsWith("$packageName.")) continue
provider.setAttribute("android:authorities", authorities.replace(packageName, newPackageName))
}
}
}
}
}

View File

@@ -3,9 +3,9 @@ package app.revanced.patches.music.interaction.permanentshuffle
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.patch.bytecodePatch
@Deprecated("This patch no longer works and will be removed in the future.")
@Suppress("unused")
val permanentShufflePatch = bytecodePatch(
name = "Permanent shuffle",
description = "Permanently remember your shuffle preference " +
"even if the playlist ends or another track is played.",
use = false,

View File

@@ -1,22 +1,16 @@
package app.revanced.patches.music.misc.androidauto
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.returnEarly
@Suppress("unused")
val bypassCertificateChecksPatch = bytecodePatch(
name = "Bypass certificate checks",
description = "Bypasses certificate checks which prevent YouTube Music from working on Android Auto.",
) {
compatibleWith("com.google.android.apps.youtube.music")
compatibleWith("com.google.android.apps.youtube.music"("7.29.52"))
execute {
checkCertificateFingerprint.method.addInstructions(
0,
"""
const/4 v0, 0x1
return v0
""",
)
checkCertificateFingerprint.method.returnEarly(true)
}
}

View File

@@ -4,5 +4,6 @@ import app.revanced.patches.music.misc.extension.hooks.applicationInitHook
import app.revanced.patches.shared.misc.extension.sharedExtensionPatch
val sharedExtensionPatch = sharedExtensionPatch(
"music",
applicationInitHook,
)

View File

@@ -4,6 +4,7 @@ import app.revanced.patcher.patch.Option
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
import app.revanced.patches.music.misc.gms.Constants.MUSIC_PACKAGE_NAME
import app.revanced.patches.music.misc.gms.Constants.REVANCED_MUSIC_PACKAGE_NAME
import app.revanced.patches.music.misc.spoof.spoofClientPatch
import app.revanced.patches.shared.castContextFetchFingerprint
import app.revanced.patches.shared.misc.gms.gmsCoreSupportPatch
import app.revanced.patches.shared.primeMethodFingerprint
@@ -20,6 +21,8 @@ val gmsCoreSupportPatch = gmsCoreSupportPatch(
extensionPatch = sharedExtensionPatch,
gmsCoreSupportResourcePatchFactory = ::gmsCoreSupportResourcePatch,
) {
dependsOn(spoofClientPatch)
compatibleWith(MUSIC_PACKAGE_NAME)
}

View File

@@ -0,0 +1,39 @@
package app.revanced.patches.music.misc.spoof
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal val playerRequestConstructorFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
strings("player")
}
/**
* Matches using the class found in [playerRequestConstructorFingerprint].
*/
internal val createPlayerRequestBodyFingerprint = fingerprint {
parameters("L")
returns("V")
opcodes(
Opcode.CHECK_CAST,
Opcode.IGET,
Opcode.AND_INT_LIT16,
)
strings("ms")
}
/**
* Used to get a reference to other clientInfo fields.
*/
internal val setClientInfoFieldsFingerprint = fingerprint {
returns("L")
strings("Google Inc.")
}
/**
* Used to get a reference to the clientInfo and clientInfo.clientVersion field.
*/
internal val setClientInfoClientVersionFingerprint = fingerprint {
strings("10.29")
}

View File

@@ -0,0 +1,105 @@
package app.revanced.patches.music.misc.spoof
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.instructions
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
import app.revanced.util.getReference
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.reference.FieldReference
import com.android.tools.smali.dexlib2.iface.reference.TypeReference
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
internal const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/music/spoof/SpoofClientPatch;"
// TODO: Replace this patch with spoofVideoStreamsPatch once possible.
val spoofClientPatch = bytecodePatch(
name = "Spoof client",
description = "Spoofs the client to fix playback.",
) {
compatibleWith("com.google.android.apps.youtube.music")
dependsOn(
sharedExtensionPatch,
// TODO: Add settingsPatch
userAgentClientSpoofPatch,
)
execute {
val playerRequestClass = playerRequestConstructorFingerprint.classDef
val createPlayerRequestBodyMatch = createPlayerRequestBodyFingerprint.match(playerRequestClass)
val clientInfoContainerClass = createPlayerRequestBodyMatch.method
.getInstruction(createPlayerRequestBodyMatch.patternMatch!!.startIndex)
.getReference<TypeReference>()!!.type
val clientInfoField = setClientInfoClientVersionFingerprint.method.instructions.first {
it.opcode == Opcode.IPUT_OBJECT && it.getReference<FieldReference>()!!.definingClass == clientInfoContainerClass
}.getReference<FieldReference>()!!
val setClientInfoFieldInstructions = setClientInfoFieldsFingerprint.method.instructions.filter {
(it.opcode == Opcode.IPUT_OBJECT || it.opcode == Opcode.IPUT) &&
it.getReference<FieldReference>()!!.definingClass == clientInfoField.type
}.map { it.getReference<FieldReference>()!! }
// Offsets are known for the fields in the clientInfo object.
val clientIdField = setClientInfoFieldInstructions[0]
val clientModelField = setClientInfoFieldInstructions[5]
val osVersionField = setClientInfoFieldInstructions[7]
val clientVersionField = setClientInfoClientVersionFingerprint.method
.getInstruction(setClientInfoClientVersionFingerprint.stringMatches!!.first().index + 1)
.getReference<FieldReference>()
// Helper method to spoof the client info.
val spoofClientInfoMethod = ImmutableMethod(
playerRequestClass.type,
"spoofClientInfo",
listOf(ImmutableMethodParameter(clientInfoContainerClass, null, null)),
"V",
AccessFlags.PRIVATE.value or AccessFlags.STATIC.value,
null,
null,
MutableMethodImplementation(3),
).toMutable().also(playerRequestClass.methods::add).apply {
addInstructions(
"""
iget-object v0, p0, $clientInfoField
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->getClientId()I
move-result v1
iput v1, v0, $clientIdField
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->getClientModel()Ljava/lang/String;
move-result-object v1
iput-object v1, v0, $clientModelField
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->getClientVersion()Ljava/lang/String;
move-result-object v1
iput-object v1, v0, $clientVersionField
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->getOsVersion()Ljava/lang/String;
move-result-object v1
iput-object v1, v0, $osVersionField
return-void
""",
)
}
createPlayerRequestBodyMatch.method.apply {
val checkCastIndex = createPlayerRequestBodyMatch.patternMatch!!.startIndex
val clientInfoContainerRegister = getInstruction<OneRegisterInstruction>(checkCastIndex).registerA
addInstruction(checkCastIndex + 1, "invoke-static {v$clientInfoContainerRegister}, $spoofClientInfoMethod")
}
}
}

View File

@@ -0,0 +1,5 @@
package app.revanced.patches.music.misc.spoof
import app.revanced.patches.shared.misc.spoof.userAgentClientSpoofPatch
val userAgentClientSpoofPatch = userAgentClientSpoofPatch("com.google.android.apps.youtube.music")

View File

@@ -3,10 +3,9 @@ package app.revanced.patches.nyx.misc.pro
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.patch.bytecodePatch
@Deprecated("This patch will be removed in the future.")
@Suppress("unused")
val unlockProPatch = bytecodePatch(
name = "Unlock pro",
) {
val unlockProPatch = bytecodePatch {
compatibleWith("com.awedea.nyx")
execute {

View File

@@ -3,4 +3,4 @@ package app.revanced.patches.reddit.customclients.sync.syncforreddit.extension
import app.revanced.patches.reddit.customclients.sync.syncforreddit.extension.hooks.initHook
import app.revanced.patches.shared.misc.extension.sharedExtensionPatch
val sharedExtensionPatch = sharedExtensionPatch("sync", initHook)
val sharedExtensionPatch = sharedExtensionPatch("syncforreddit", initHook)

View File

@@ -1,6 +1,7 @@
package app.revanced.patches.youtube.misc.fix.playback
package app.revanced.patches.shared.misc.spoof
import app.revanced.patcher.fingerprint
import app.revanced.util.literal
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
@@ -27,7 +28,6 @@ internal val buildPlayerRequestURIFingerprint = fingerprint {
Opcode.RETURN_OBJECT,
)
strings(
"youtubei/v1",
"key",
"asig",
)
@@ -111,3 +111,13 @@ internal val buildMediaDataSourceFingerprint = fingerprint {
"Ljava/lang/Object;",
)
}
internal const val HLS_CURRENT_TIME_FEATURE_FLAG = 45355374L
internal val hlsCurrentTimeFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
parameters("Z", "L")
literal {
HLS_CURRENT_TIME_FEATURE_FLAG
}
}

View File

@@ -0,0 +1,216 @@
package app.revanced.patches.shared.misc.spoof
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
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.extensions.InstructionExtensions.instructions
import app.revanced.patcher.patch.BytecodePatchBuilder
import app.revanced.patcher.patch.BytecodePatchContext
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.insertFeatureFlagBooleanOverride
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.FiveRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
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 com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
internal const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/shared/spoof/SpoofVideoStreamsPatch;"
fun spoofVideoStreamsPatch(
block: BytecodePatchBuilder.() -> Unit = {},
executeBlock: BytecodePatchContext.() -> Unit = {},
) = bytecodePatch(
name = "Spoof video streams",
description = "Spoofs the client video streams to fix playback.",
) {
block()
dependsOn(addResourcesPatch)
execute {
// region Block /initplayback requests to fall back to /get_watch requests.
val moveUriStringIndex = buildInitPlaybackRequestFingerprint.patternMatch!!.startIndex
buildInitPlaybackRequestFingerprint.method.apply {
val targetRegister = getInstruction<OneRegisterInstruction>(moveUriStringIndex).registerA
addInstructions(
moveUriStringIndex + 1,
"""
invoke-static { v$targetRegister }, $EXTENSION_CLASS_DESCRIPTOR->blockInitPlaybackRequest(Ljava/lang/String;)Ljava/lang/String;
move-result-object v$targetRegister
""",
)
}
// endregion
// region Block /get_watch requests to fall back to /player requests.
val invokeToStringIndex = buildPlayerRequestURIFingerprint.patternMatch!!.startIndex
buildPlayerRequestURIFingerprint.method.apply {
val uriRegister = getInstruction<FiveRegisterInstruction>(invokeToStringIndex).registerC
addInstructions(
invokeToStringIndex,
"""
invoke-static { v$uriRegister }, $EXTENSION_CLASS_DESCRIPTOR->blockGetWatchRequest(Landroid/net/Uri;)Landroid/net/Uri;
move-result-object v$uriRegister
""",
)
}
// endregion
// region Get replacement streams at player requests.
buildRequestFingerprint.method.apply {
val newRequestBuilderIndex = indexOfFirstInstructionOrThrow {
opcode == Opcode.INVOKE_VIRTUAL &&
getReference<MethodReference>()?.name == "newUrlRequestBuilder"
}
val urlRegister = getInstruction<FiveRegisterInstruction>(newRequestBuilderIndex).registerD
val freeRegister = getInstruction<OneRegisterInstruction>(newRequestBuilderIndex + 1).registerA
addInstructions(
newRequestBuilderIndex,
"""
move-object v$freeRegister, p1
invoke-static { v$urlRegister, v$freeRegister }, $EXTENSION_CLASS_DESCRIPTOR->fetchStreams(Ljava/lang/String;Ljava/util/Map;)V
""",
)
}
// endregion
// region Replace the streaming data with the replacement streams.
createStreamingDataFingerprint.method.apply {
val setStreamDataMethodName = "patch_setStreamingData"
val resultMethodType = createStreamingDataFingerprint.classDef.type
val videoDetailsIndex = createStreamingDataFingerprint.patternMatch!!.endIndex
val videoDetailsRegister = getInstruction<TwoRegisterInstruction>(videoDetailsIndex).registerA
val videoDetailsClass = getInstruction(videoDetailsIndex).getReference<FieldReference>()!!.type
addInstruction(
videoDetailsIndex + 1,
"invoke-direct { p0, v$videoDetailsRegister }, " +
"$resultMethodType->$setStreamDataMethodName($videoDetailsClass)V",
)
val protobufClass = protobufClassParseByteBufferFingerprint.method.definingClass
val setStreamingDataIndex = createStreamingDataFingerprint.patternMatch!!.startIndex
val playerProtoClass = getInstruction(setStreamingDataIndex + 1)
.getReference<FieldReference>()!!.definingClass
val setStreamingDataField = getInstruction(setStreamingDataIndex).getReference<FieldReference>()
val getStreamingDataField = getInstruction(
indexOfFirstInstructionOrThrow {
opcode == Opcode.IGET_OBJECT && getReference<FieldReference>()?.definingClass == playerProtoClass
},
).getReference<FieldReference>()
// Use a helper method to avoid the need of picking out multiple free registers from the hooked code.
createStreamingDataFingerprint.classDef.methods.add(
ImmutableMethod(
resultMethodType,
setStreamDataMethodName,
listOf(ImmutableMethodParameter(videoDetailsClass, null, "videoDetails")),
"V",
AccessFlags.PRIVATE.value or AccessFlags.FINAL.value,
null,
null,
MutableMethodImplementation(9),
).toMutable().apply {
addInstructionsWithLabels(
0,
"""
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->isSpoofingEnabled()Z
move-result v0
if-eqz v0, :disabled
# Get video id.
iget-object v2, p1, $videoDetailsClass->c:Ljava/lang/String;
if-eqz v2, :disabled
# Get streaming data.
invoke-static { v2 }, $EXTENSION_CLASS_DESCRIPTOR->getStreamingData(Ljava/lang/String;)Ljava/nio/ByteBuffer;
move-result-object v3
if-eqz v3, :disabled
# Parse streaming data.
sget-object v4, $playerProtoClass->a:$playerProtoClass
invoke-static { v4, v3 }, $protobufClass->parseFrom(${protobufClass}Ljava/nio/ByteBuffer;)$protobufClass
move-result-object v5
check-cast v5, $playerProtoClass
# Set streaming data.
iget-object v6, v5, $getStreamingDataField
if-eqz v6, :disabled
iput-object v6, p0, $setStreamingDataField
:disabled
return-void
""",
)
},
)
}
// endregion
// region Remove /videoplayback request body to fix playback.
// It is assumed, YouTube makes a request with a body tuned for Android.
// Requesting streams intended for other platforms with a body tuned for Android could be the cause of 400 errors.
// A proper fix may include modifying the request body to match the platforms expected body.
buildMediaDataSourceFingerprint.method.apply {
val targetIndex = instructions.lastIndex
// Instructions are added just before the method returns,
// so there's no concern of clobbering in-use registers.
addInstructions(
targetIndex,
"""
# Field a: Stream uri.
# Field c: Http method.
# Field d: Post data.
move-object v0, p0 # method has over 15 registers and must copy p0 to a lower register.
iget-object v1, v0, $definingClass->a:Landroid/net/Uri;
iget v2, v0, $definingClass->c:I
iget-object v3, v0, $definingClass->d:[B
invoke-static { v1, v2, v3 }, $EXTENSION_CLASS_DESCRIPTOR->removeVideoPlaybackPostBody(Landroid/net/Uri;I[B)[B
move-result-object v1
iput-object v1, v0, $definingClass->d:[B
""",
)
}
// endregion
// region Fix iOS livestream current time.
hlsCurrentTimeFingerprint.method.insertFeatureFlagBooleanOverride(
HLS_CURRENT_TIME_FEATURE_FLAG,
"$EXTENSION_CLASS_DESCRIPTOR->fixHLSCurrentTime(Z)Z"
)
// endregion
executeBlock()
}
}

View File

@@ -0,0 +1,81 @@
package app.revanced.patches.shared.misc.spoof
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patches.all.misc.transformation.IMethodCall
import app.revanced.patches.all.misc.transformation.filterMapInstruction35c
import app.revanced.patches.all.misc.transformation.transformInstructionsPatch
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstruction
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
import com.android.tools.smali.dexlib2.iface.reference.StringReference
private const val USER_AGENT_STRING_BUILDER_APPEND_METHOD_REFERENCE =
"Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;"
fun userAgentClientSpoofPatch(originalPackageName: String) = transformInstructionsPatch(
filterMap = { classDef, _, instruction, instructionIndex ->
filterMapInstruction35c<MethodCall>(
"Lapp/revanced/extension",
classDef,
instruction,
instructionIndex,
)
},
transform = transform@{ mutableMethod, entry ->
val (_, _, instructionIndex) = entry
// Replace the result of context.getPackageName(), if it is used in a user agent string.
mutableMethod.apply {
// After context.getPackageName() the result is moved to a register.
val targetRegister = (
getInstruction(instructionIndex + 1)
as? OneRegisterInstruction ?: return@transform
).registerA
// IndexOutOfBoundsException is technically possible here,
// but no such occurrences are present in the app.
val referee = getInstruction(instructionIndex + 2).getReference<MethodReference>()?.toString()
// Only replace string builder usage.
if (referee != USER_AGENT_STRING_BUILDER_APPEND_METHOD_REFERENCE) {
return@transform
}
// Do not change the package name in methods that use resources, or for methods that use GmsCore.
// Changing these package names will result in playback limitations,
// particularly Android VR background audio only playback.
val resourceOrGmsStringInstructionIndex = indexOfFirstInstruction {
val reference = getReference<StringReference>()
opcode == Opcode.CONST_STRING &&
(reference?.string == "android.resource://" || reference?.string == "gcore_")
}
if (resourceOrGmsStringInstructionIndex >= 0) {
return@transform
}
// Overwrite the result of context.getPackageName() with the original package name.
replaceInstruction(
instructionIndex + 1,
"const-string v$targetRegister, \"$originalPackageName\"",
)
}
},
)
@Suppress("unused")
private enum class MethodCall(
override val definedClassName: String,
override val methodName: String,
override val methodParams: Array<String>,
override val returnType: String,
) : IMethodCall {
GetPackageName(
"Landroid/content/Context;",
"getPackageName",
emptyArray(),
"Ljava/lang/String;",
),
}

View File

@@ -21,7 +21,7 @@ val audioAdsPatch = bytecodePatch(
addResourcesPatch,
)
compatibleWith("tv.twitch.android.app"("15.4.1", "16.1.0", "16.9.1"))
compatibleWith("tv.twitch.android.app")
execute {
addResources("twitch", "ad.audio.audioAdsPatch")

View File

@@ -19,7 +19,7 @@ val embeddedAdsPatch = bytecodePatch(
settingsPatch,
)
compatibleWith("tv.twitch.android.app"("15.4.1", "16.1.0", "16.9.1"))
compatibleWith("tv.twitch.android.app")
execute {
addResources("twitch", "ad.embedded.embeddedAdsPatch")

View File

@@ -4,6 +4,6 @@ import app.revanced.patcher.fingerprint
internal val createsUsherClientFingerprint = fingerprint {
custom { method, _ ->
method.definingClass.endsWith("Ltv/twitch/android/network/OkHttpClientFactory;") && method.name == "buildOkHttpClient"
method.name == "buildOkHttpClient" && method.definingClass.endsWith("Ltv/twitch/android/network/OkHttpClientFactory;")
}
}

View File

@@ -141,24 +141,21 @@ val videoAdsPatch = bytecodePatch(
)
// Spoof showAds JSON field.
contentConfigShowAdsFingerprint.method.addInstructions(
// Late versions of the app don't have the method anymore.
contentConfigShowAdsFingerprint.methodOrNull?.addInstructions(
0,
"""
${createConditionInstructions("v0")}
const/4 v0, 0
:$skipLabelName
return v0
""",
${createConditionInstructions("v0")}
const/4 v0, 0
:$skipLabelName
return v0
""",
)
}
},
)
compatibleWith(
"tv.twitch.android.app"(
"15.4.1",
"16.1.0",
"16.9.1",
),
"tv.twitch.android.app",
)
}

View File

@@ -22,7 +22,7 @@ val showDeletedMessagesPatch = bytecodePatch(
addResourcesPatch,
)
compatibleWith("tv.twitch.android.app"("15.4.1", "16.1.0", "16.9.1"))
compatibleWith("tv.twitch.android.app")
fun createSpoilerConditionInstructions(register: String = "v0") = """
invoke-static {}, Lapp/revanced/extension/twitch/patches/ShowDeletedMessagesPatch;->shouldUseSpoiler()Z

View File

@@ -20,7 +20,7 @@ val autoClaimChannelPointsPatch = bytecodePatch(
addResourcesPatch,
)
compatibleWith("tv.twitch.android.app"("15.4.1", "16.1.0", "16.9.1"))
compatibleWith("tv.twitch.android.app")
execute {
addResources("twitch", "chat.autoclaim.autoClaimChannelPointsPatch")

View File

@@ -48,13 +48,7 @@ val settingsPatch = bytecodePatch(
settingsPatch(preferences = preferences),
)
compatibleWith(
"tv.twitch.android.app"(
"15.4.1",
"16.1.0",
"16.9.1",
),
)
compatibleWith("tv.twitch.android.app")
execute {
addResources("twitch", "misc.settings.settingsPatch")

View File

@@ -3,6 +3,7 @@ package app.revanced.patches.youtube.layout.buttons.navigation
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
import app.revanced.util.literal
internal const val ANDROID_AUTOMOTIVE_STRING = "Android Automotive"
@@ -22,4 +23,31 @@ internal val createPivotBarFingerprint = fingerprint {
Opcode.INVOKE_VIRTUAL,
Opcode.RETURN_VOID,
)
}
internal const val TRANSLUCENT_NAVIGATION_STATUS_BAR_FEATURE_FLAG = 45400535L
internal val translucentNavigationStatusBarFeatureFlagFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Z")
literal { TRANSLUCENT_NAVIGATION_STATUS_BAR_FEATURE_FLAG }
}
internal const val TRANSLUCENT_NAVIGATION_BUTTONS_FEATURE_FLAG = 45630927L
internal val translucentNavigationButtonsFeatureFlagFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("V")
literal { TRANSLUCENT_NAVIGATION_BUTTONS_FEATURE_FLAG }
}
/**
* The device on screen back/home/recent buttons.
*/
internal const val TRANSLUCENT_NAVIGATION_BUTTONS_SYSTEM_FEATURE_FLAG = 45632194L
internal val translucentNavigationButtonsSystemFeatureFlagFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Z")
literal { TRANSLUCENT_NAVIGATION_BUTTONS_SYSTEM_FEATURE_FLAG }
}

View File

@@ -12,10 +12,13 @@ import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.navigation.hookNavigationButtonCreated
import app.revanced.patches.youtube.misc.navigation.navigationBarHookPatch
import app.revanced.patches.youtube.misc.playservice.is_19_25_or_greater
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.insertFeatureFlagBooleanOverride
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
@@ -32,6 +35,7 @@ val navigationButtonsPatch = bytecodePatch(
settingsPatch,
addResourcesPatch,
navigationBarHookPatch,
versionCheckPatch
)
compatibleWith(
@@ -50,19 +54,27 @@ val navigationButtonsPatch = bytecodePatch(
execute {
addResources("youtube", "layout.buttons.navigation.navigationButtonsPatch")
val preferences = mutableSetOf(
SwitchPreference("revanced_hide_home_button"),
SwitchPreference("revanced_hide_shorts_button"),
SwitchPreference("revanced_hide_create_button"),
SwitchPreference("revanced_hide_subscriptions_button"),
SwitchPreference("revanced_switch_create_with_notifications_button"),
SwitchPreference("revanced_hide_navigation_button_labels"),
)
if (is_19_25_or_greater) {
preferences += SwitchPreference("revanced_disable_translucent_status_bar")
preferences += SwitchPreference("revanced_disable_translucent_navigation_bar_light")
preferences += SwitchPreference("revanced_disable_translucent_navigation_bar_dark")
}
PreferenceScreen.GENERAL_LAYOUT.addPreferences(
PreferenceScreenPreference(
key = "revanced_navigation_buttons_screen",
sorting = Sorting.UNSORTED,
preferences = setOf(
SwitchPreference("revanced_hide_home_button"),
SwitchPreference("revanced_hide_shorts_button"),
SwitchPreference("revanced_hide_create_button"),
SwitchPreference("revanced_hide_subscriptions_button"),
SwitchPreference("revanced_switch_create_with_notifications_button"),
SwitchPreference("revanced_hide_navigation_button_labels"),
),
),
preferences = preferences
)
)
// Switch create with notifications button.
@@ -101,5 +113,24 @@ val navigationButtonsPatch = bytecodePatch(
// Hook navigation button created, in order to hide them.
hookNavigationButtonCreated(EXTENSION_CLASS_DESCRIPTOR)
// Force on/off translucent effect on status bar and navigation buttons.
if (is_19_25_or_greater) {
translucentNavigationStatusBarFeatureFlagFingerprint.method.insertFeatureFlagBooleanOverride(
TRANSLUCENT_NAVIGATION_STATUS_BAR_FEATURE_FLAG,
"$EXTENSION_CLASS_DESCRIPTOR->useTranslucentNavigationStatusBar(Z)Z",
)
translucentNavigationButtonsFeatureFlagFingerprint.method.insertFeatureFlagBooleanOverride(
TRANSLUCENT_NAVIGATION_BUTTONS_FEATURE_FLAG,
"$EXTENSION_CLASS_DESCRIPTOR->useTranslucentNavigationButtons(Z)Z",
)
translucentNavigationButtonsSystemFeatureFlagFingerprint.method.insertFeatureFlagBooleanOverride(
TRANSLUCENT_NAVIGATION_BUTTONS_SYSTEM_FEATURE_FLAG,
"$EXTENSION_CLASS_DESCRIPTOR->useTranslucentNavigationButtons(Z)Z",
)
}
}
}

View File

@@ -154,6 +154,7 @@ val hideLayoutComponentsPatch = bytecodePatch(
PreferenceScreenPreference(
"revanced_comments_screen",
preferences = setOf(
SwitchPreference("revanced_hide_comments_chat_summary"),
SwitchPreference("revanced_hide_comments_by_members_header"),
SwitchPreference("revanced_hide_comments_section"),
SwitchPreference("revanced_hide_comments_create_a_short_button"),
@@ -221,7 +222,6 @@ val hideLayoutComponentsPatch = bytecodePatch(
SwitchPreference("revanced_hide_notify_me_button"),
SwitchPreference("revanced_hide_playables"),
SwitchPreference("revanced_hide_search_result_recommendations"),
SwitchPreference("revanced_hide_search_result_shelf_header"),
SwitchPreference("revanced_hide_show_more_button"),
SwitchPreference("revanced_hide_doodles"),
)

View File

@@ -240,14 +240,14 @@ val miniplayerPatch = bytecodePatch(
),
)
fun MutableMethod.insertBooleanOverride(index: Int, methodName: String) {
fun MutableMethod.insertMiniplayerBooleanOverride(index: Int, methodName: String) {
val register = getInstruction<OneRegisterInstruction>(index).registerA
addInstructions(
index,
"""
invoke-static {v$register}, $EXTENSION_CLASS_DESCRIPTOR->$methodName(Z)Z
move-result v$register
""",
invoke-static {v$register}, $EXTENSION_CLASS_DESCRIPTOR->$methodName(Z)Z
move-result v$register
"""
)
}
@@ -257,29 +257,25 @@ val miniplayerPatch = bytecodePatch(
* Adds an override to force legacy tablet miniplayer to be used or not used.
*/
fun MutableMethod.insertLegacyTabletMiniplayerOverride(index: Int) {
insertBooleanOverride(index, "getLegacyTabletMiniplayerOverride")
insertMiniplayerBooleanOverride(index, "getLegacyTabletMiniplayerOverride")
}
/**
* Adds an override to force modern miniplayer to be used or not used.
*/
fun MutableMethod.insertModernMiniplayerOverride(index: Int) {
insertBooleanOverride(index, "getModernMiniplayerOverride")
insertMiniplayerBooleanOverride(index, "getModernMiniplayerOverride")
}
fun Fingerprint.insertLiteralValueBooleanOverride(
fun Fingerprint.insertMiniplayerFeatureFlagBooleanOverride(
literal: Long,
extensionMethod: String,
) {
method.apply {
val literalIndex = indexOfFirstLiteralInstructionOrThrow(literal)
val targetIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT)
) = method.insertFeatureFlagBooleanOverride(
literal,
"$EXTENSION_CLASS_DESCRIPTOR->$extensionMethod(Z)Z"
)
insertBooleanOverride(targetIndex + 1, extensionMethod)
}
}
fun Fingerprint.insertLiteralValueFloatOverride(
fun Fingerprint.insertMiniplayerFeatureFlagFloatOverride(
literal: Long,
extensionMethod: String,
) {
@@ -370,24 +366,24 @@ val miniplayerPatch = bytecodePatch(
}
if (is_19_23_or_greater) {
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
miniplayerModernConstructorFingerprint.insertMiniplayerFeatureFlagBooleanOverride(
MINIPLAYER_DRAG_DROP_FEATURE_KEY,
"enableMiniplayerDragAndDrop",
)
}
if (is_19_25_or_greater) {
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
miniplayerModernConstructorFingerprint.insertMiniplayerFeatureFlagBooleanOverride(
MINIPLAYER_MODERN_FEATURE_LEGACY_KEY,
"getModernMiniplayerOverride",
)
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
miniplayerModernConstructorFingerprint.insertMiniplayerFeatureFlagBooleanOverride(
MINIPLAYER_MODERN_FEATURE_KEY,
"getModernFeatureFlagsActiveOverride",
)
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
miniplayerModernConstructorFingerprint.insertMiniplayerFeatureFlagBooleanOverride(
MINIPLAYER_DOUBLE_TAP_FEATURE_KEY,
"enableMiniplayerDoubleTapAction",
)
@@ -426,19 +422,19 @@ val miniplayerPatch = bytecodePatch(
}
if (is_19_36_or_greater) {
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
miniplayerModernConstructorFingerprint.insertMiniplayerFeatureFlagBooleanOverride(
MINIPLAYER_ROUNDED_CORNERS_FEATURE_KEY,
"setRoundedCorners",
)
}
if (is_19_43_or_greater) {
miniplayerOnCloseHandlerFingerprint.insertLiteralValueBooleanOverride(
miniplayerOnCloseHandlerFingerprint.insertMiniplayerFeatureFlagBooleanOverride(
MINIPLAYER_DISABLED_FEATURE_KEY,
"getMiniplayerOnCloseHandler"
)
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
miniplayerModernConstructorFingerprint.insertMiniplayerFeatureFlagBooleanOverride(
MINIPLAYER_HORIZONTAL_DRAG_FEATURE_KEY,
"setHorizontalDrag",
)

View File

@@ -0,0 +1,16 @@
package app.revanced.patches.youtube.layout.player.fullscreen
import app.revanced.patcher.fingerprint
import app.revanced.util.literal
import com.android.tools.smali.dexlib2.AccessFlags
internal const val OPEN_VIDEOS_FULLSCREEN_PORTRAIT_FEATURE_FLAG = 45666112L
internal val openVideosFullscreenPortraitFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("V")
parameters("L", "Lj\$/util/Optional;")
literal {
OPEN_VIDEOS_FULLSCREEN_PORTRAIT_FEATURE_FLAG
}
}

View File

@@ -0,0 +1,46 @@
package app.revanced.patches.youtube.layout.player.fullscreen
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
import app.revanced.util.insertFeatureFlagBooleanOverride
private const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/youtube/patches/OpenVideosFullscreen;"
@Suppress("unused")
val openVideosFullscreenPatch = bytecodePatch(
name = "Open videos fullscreen",
description = "Adds an option to open videos in full screen portrait mode.",
) {
dependsOn(
sharedExtensionPatch,
settingsPatch,
addResourcesPatch,
)
compatibleWith(
"com.google.android.youtube"(
"19.46.42",
)
)
execute {
openVideosFullscreenPortraitFingerprint.method.insertFeatureFlagBooleanOverride(
OPEN_VIDEOS_FULLSCREEN_PORTRAIT_FEATURE_FLAG,
"$EXTENSION_CLASS_DESCRIPTOR->openVideoFullscreenPortrait(Z)Z"
)
// Add resources and setting last, in case the user force patches an old incompatible version.
addResources("youtube", "layout.player.fullscreen.openVideosFullscreen")
PreferenceScreen.PLAYER.addPreferences(
SwitchPreference("revanced_open_videos_fullscreen_portrait")
)
}
}

View File

@@ -24,6 +24,7 @@ import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.indexOfFirstLiteralInstructionOrThrow
import app.revanced.util.inputStreamFromBundledResource
import app.revanced.util.insertFeatureFlagBooleanOverride
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
@@ -228,19 +229,10 @@ val seekbarColorPatch = bytecodePatch(
// 19.25+ changes
playerSeekbarGradientConfigFingerprint.method.apply {
val literalIndex = indexOfFirstLiteralInstructionOrThrow(PLAYER_SEEKBAR_GRADIENT_FEATURE_FLAG)
val resultIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT)
val register = getInstruction<OneRegisterInstruction>(resultIndex).registerA
addInstructions(
resultIndex + 1,
"""
invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->playerSeekbarGradientEnabled(Z)Z
move-result v$register
"""
)
}
playerSeekbarGradientConfigFingerprint.method.insertFeatureFlagBooleanOverride(
PLAYER_SEEKBAR_GRADIENT_FEATURE_FLAG,
"$EXTENSION_CLASS_DESCRIPTOR->playerSeekbarGradientEnabled(Z)Z"
)
lithoLinearGradientFingerprint.method.addInstruction(
0,
@@ -255,19 +247,10 @@ val seekbarColorPatch = bytecodePatch(
launchScreenLayoutTypeFingerprint,
mainActivityOnCreateFingerprint
).forEach { fingerprint ->
fingerprint.method.apply {
val literalIndex = indexOfFirstLiteralInstructionOrThrow(launchScreenLayoutTypeLotteFeatureFlag)
val resultIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT)
val register = getInstruction<OneRegisterInstruction>(resultIndex).registerA
addInstructions(
resultIndex + 1,
"""
invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->useLotteLaunchSplashScreen(Z)Z
move-result v$register
"""
)
}
fingerprint.method.insertFeatureFlagBooleanOverride(
launchScreenLayoutTypeLotteFeatureFlag,
"$EXTENSION_CLASS_DESCRIPTOR->useLotteLaunchSplashScreen(Z)Z"
)
}
// Hook the splash animation drawable to set the a seekbar color theme.

View File

@@ -1,7 +1,6 @@
package app.revanced.patches.youtube.layout.theme
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.PatchException
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patcher.patch.resourcePatch
@@ -17,10 +16,7 @@ import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
import app.revanced.util.forEachChildElement
import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.indexOfFirstLiteralInstructionOrThrow
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import app.revanced.util.insertFeatureFlagBooleanOverride
import org.w3c.dom.Element
private const val EXTENSION_CLASS_DESCRIPTOR =
@@ -212,19 +208,10 @@ val themePatch = bytecodePatch(
SwitchPreference("revanced_gradient_loading_screen"),
)
useGradientLoadingScreenFingerprint.method.apply {
val literalIndex = indexOfFirstLiteralInstructionOrThrow(GRADIENT_LOADING_SCREEN_AB_CONSTANT)
val isEnabledIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT)
val isEnabledRegister = getInstruction<OneRegisterInstruction>(isEnabledIndex).registerA
addInstructions(
isEnabledIndex + 1,
"""
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->gradientLoadingScreenEnabled()Z
move-result v$isEnabledRegister
""",
)
}
useGradientLoadingScreenFingerprint.method.insertFeatureFlagBooleanOverride(
GRADIENT_LOADING_SCREEN_AB_CONSTANT,
"$EXTENSION_CLASS_DESCRIPTOR->gradientLoadingScreenEnabled(Z)Z"
)
mapOf(
themeHelperLightColorFingerprint to lightThemeBackgroundColor,

View File

@@ -110,22 +110,22 @@ val enableDebuggingPatch = bytecodePatch(
"""
)
}
}
experimentalStringFeatureFlagFingerprint.match(
experimentalFeatureFlagParentFingerprint.originalClassDef
).method.apply {
val insertIndex = indexOfFirstInstructionReversedOrThrow(Opcode.MOVE_RESULT_OBJECT)
experimentalStringFeatureFlagFingerprint.match(
experimentalFeatureFlagParentFingerprint.originalClassDef
).method.apply {
val insertIndex = indexOfFirstInstructionReversedOrThrow(Opcode.MOVE_RESULT_OBJECT)
addInstructions(
insertIndex,
"""
move-result-object v0
invoke-static { v0, p1, p2, p3 }, $EXTENSION_CLASS_DESCRIPTOR->isStringFeatureFlagEnabled(Ljava/lang/String;JLjava/lang/String;)Ljava/lang/String;
move-result-object v0
return-object v0
"""
)
addInstructions(
insertIndex,
"""
move-result-object v0
invoke-static { v0, p1, p2, p3 }, $EXTENSION_CLASS_DESCRIPTOR->isStringFeatureFlagEnabled(Ljava/lang/String;JLjava/lang/String;)Ljava/lang/String;
move-result-object v0
return-object v0
"""
)
}
}
// There exists other experimental accessor methods for byte[]

View File

@@ -34,10 +34,7 @@ internal val disableCairoSettingsPatch = bytecodePatch(
* <a href="https://github.com/qnblackcat/uYouPlus/issues/1468">uYouPlus#1468</a>.
*/
cairoFragmentConfigFingerprint.method.apply {
val literalIndex = indexOfFirstLiteralInstructionOrThrow(
CAIRO_CONFIG_LITERAL_VALUE,
)
val literalIndex = indexOfFirstLiteralInstructionOrThrow(CAIRO_CONFIG_LITERAL_VALUE)
val resultIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT)
val register = getInstruction<OneRegisterInstruction>(resultIndex).registerA

View File

@@ -1,243 +1,9 @@
package app.revanced.patches.youtube.misc.fix.playback
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
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.extensions.InstructionExtensions.instructions
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.shared.misc.settings.preference.ListPreference
import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
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.FiveRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
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 com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
private const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/youtube/patches/spoof/SpoofVideoStreamsPatch;"
val spoofVideoStreamsPatch = bytecodePatch(
name = "Spoof video streams",
description = "Spoofs the client video streams to allow video playback.",
) {
compatibleWith(
"com.google.android.youtube"(
"18.38.44",
"18.49.37",
"19.16.39",
"19.25.37",
"19.34.42",
"19.43.41",
"19.45.38",
"19.46.42",
),
)
dependsOn(
settingsPatch,
addResourcesPatch,
userAgentClientSpoofPatch,
)
execute {
addResources("youtube", "misc.fix.playback.spoofVideoStreamsPatch")
PreferenceScreen.MISC.addPreferences(
PreferenceScreenPreference(
key = "revanced_spoof_video_streams_screen",
sorting = PreferenceScreenPreference.Sorting.UNSORTED,
preferences = setOf(
SwitchPreference("revanced_spoof_video_streams"),
ListPreference(
"revanced_spoof_video_streams_client",
summaryKey = null,
),
SwitchPreference(
"revanced_spoof_video_streams_ios_force_avc",
tag = "app.revanced.extension.youtube.settings.preference.ForceAVCSpoofingPreference",
),
NonInteractivePreference("revanced_spoof_video_streams_about_android_vr"),
NonInteractivePreference("revanced_spoof_video_streams_about_ios"),
),
),
)
// region Block /initplayback requests to fall back to /get_watch requests.
val moveUriStringIndex = buildInitPlaybackRequestFingerprint.patternMatch!!.startIndex
buildInitPlaybackRequestFingerprint.method.apply {
val targetRegister = getInstruction<OneRegisterInstruction>(moveUriStringIndex).registerA
addInstructions(
moveUriStringIndex + 1,
"""
invoke-static { v$targetRegister }, $EXTENSION_CLASS_DESCRIPTOR->blockInitPlaybackRequest(Ljava/lang/String;)Ljava/lang/String;
move-result-object v$targetRegister
""",
)
}
// endregion
// region Block /get_watch requests to fall back to /player requests.
val invokeToStringIndex = buildPlayerRequestURIFingerprint.patternMatch!!.startIndex
buildPlayerRequestURIFingerprint.method.apply {
val uriRegister = getInstruction<FiveRegisterInstruction>(invokeToStringIndex).registerC
addInstructions(
invokeToStringIndex,
"""
invoke-static { v$uriRegister }, $EXTENSION_CLASS_DESCRIPTOR->blockGetWatchRequest(Landroid/net/Uri;)Landroid/net/Uri;
move-result-object v$uriRegister
""",
)
}
// endregion
// region Get replacement streams at player requests.
buildRequestFingerprint.method.apply {
val newRequestBuilderIndex = indexOfFirstInstructionOrThrow {
opcode == Opcode.INVOKE_VIRTUAL &&
getReference<MethodReference>()?.name == "newUrlRequestBuilder"
}
val urlRegister = getInstruction<FiveRegisterInstruction>(newRequestBuilderIndex).registerD
val freeRegister = getInstruction<OneRegisterInstruction>(newRequestBuilderIndex + 1).registerA
addInstructions(
newRequestBuilderIndex,
"""
move-object v$freeRegister, p1
invoke-static { v$urlRegister, v$freeRegister }, $EXTENSION_CLASS_DESCRIPTOR->fetchStreams(Ljava/lang/String;Ljava/util/Map;)V
""",
)
}
// endregion
// region Replace the streaming data with the replacement streams.
createStreamingDataFingerprint.method.apply {
val setStreamDataMethodName = "patch_setStreamingData"
val resultMethodType = createStreamingDataFingerprint.classDef.type
val videoDetailsIndex = createStreamingDataFingerprint.patternMatch!!.endIndex
val videoDetailsRegister = getInstruction<TwoRegisterInstruction>(videoDetailsIndex).registerA
val videoDetailsClass = getInstruction(videoDetailsIndex).getReference<FieldReference>()!!.type
addInstruction(
videoDetailsIndex + 1,
"invoke-direct { p0, v$videoDetailsRegister }, " +
"$resultMethodType->$setStreamDataMethodName($videoDetailsClass)V",
)
val protobufClass = protobufClassParseByteBufferFingerprint.method.definingClass
val setStreamingDataIndex = createStreamingDataFingerprint.patternMatch!!.startIndex
val playerProtoClass = getInstruction(setStreamingDataIndex + 1)
.getReference<FieldReference>()!!.definingClass
val setStreamingDataField = getInstruction(setStreamingDataIndex).getReference<FieldReference>()
val getStreamingDataField = getInstruction(
indexOfFirstInstructionOrThrow {
opcode == Opcode.IGET_OBJECT && getReference<FieldReference>()?.definingClass == playerProtoClass
},
).getReference<FieldReference>()
// Use a helper method to avoid the need of picking out multiple free registers from the hooked code.
createStreamingDataFingerprint.classDef.methods.add(
ImmutableMethod(
resultMethodType,
setStreamDataMethodName,
listOf(ImmutableMethodParameter(videoDetailsClass, null, "videoDetails")),
"V",
AccessFlags.PRIVATE.value or AccessFlags.FINAL.value,
null,
null,
MutableMethodImplementation(9),
).toMutable().apply {
addInstructionsWithLabels(
0,
"""
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->isSpoofingEnabled()Z
move-result v0
if-eqz v0, :disabled
# Get video id.
iget-object v2, p1, $videoDetailsClass->c:Ljava/lang/String;
if-eqz v2, :disabled
# Get streaming data.
invoke-static { v2 }, $EXTENSION_CLASS_DESCRIPTOR->getStreamingData(Ljava/lang/String;)Ljava/nio/ByteBuffer;
move-result-object v3
if-eqz v3, :disabled
# Parse streaming data.
sget-object v4, $playerProtoClass->a:$playerProtoClass
invoke-static { v4, v3 }, $protobufClass->parseFrom(${protobufClass}Ljava/nio/ByteBuffer;)$protobufClass
move-result-object v5
check-cast v5, $playerProtoClass
# Set streaming data.
iget-object v6, v5, $getStreamingDataField
if-eqz v6, :disabled
iput-object v6, p0, $setStreamingDataField
:disabled
return-void
""",
)
},
)
}
// endregion
// region Remove /videoplayback request body to fix playback.
// It is assumed, YouTube makes a request with a body tuned for Android.
// Requesting streams intended for other platforms with a body tuned for Android could be the cause of 400 errors.
// A proper fix may include modifying the request body to match the platforms expected body.
buildMediaDataSourceFingerprint.method.apply {
val targetIndex = instructions.lastIndex
// Instructions are added just before the method returns,
// so there's no concern of clobbering in-use registers.
addInstructions(
targetIndex,
"""
# Field a: Stream uri.
# Field c: Http method.
# Field d: Post data.
move-object v0, p0 # method has over 15 registers and must copy p0 to a lower register.
iget-object v1, v0, $definingClass->a:Landroid/net/Uri;
iget v2, v0, $definingClass->c:I
iget-object v3, v0, $definingClass->d:[B
invoke-static { v1, v2, v3 }, $EXTENSION_CLASS_DESCRIPTOR->removeVideoPlaybackPostBody(Landroid/net/Uri;I[B)[B
move-result-object v1
iput-object v1, v0, $definingClass->d:[B
""",
)
}
// endregion
}
@Deprecated("Use app.revanced.patches.youtube.misc.spoof.spoofVideoStreamsPatch instead.")
@Suppress("unused")
val spoofVideoStreamsPatch = bytecodePatch {
dependsOn(app.revanced.patches.youtube.misc.spoof.spoofVideoStreamsPatch)
}

View File

@@ -1,82 +1,9 @@
package app.revanced.patches.youtube.misc.fix.playback
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patches.all.misc.transformation.IMethodCall
import app.revanced.patches.all.misc.transformation.filterMapInstruction35c
import app.revanced.patches.all.misc.transformation.transformInstructionsPatch
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstruction
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
import com.android.tools.smali.dexlib2.iface.reference.StringReference
private const val ORIGINAL_PACKAGE_NAME = "com.google.android.youtube"
private const val USER_AGENT_STRING_BUILDER_APPEND_METHOD_REFERENCE =
"Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;"
val userAgentClientSpoofPatch = transformInstructionsPatch(
filterMap = { classDef, _, instruction, instructionIndex ->
filterMapInstruction35c<MethodCall>(
"Lapp/revanced/extension",
classDef,
instruction,
instructionIndex,
)
},
transform = transform@{ mutableMethod, entry ->
val (_, _, instructionIndex) = entry
// Replace the result of context.getPackageName(), if it is used in a user agent string.
mutableMethod.apply {
// After context.getPackageName() the result is moved to a register.
val targetRegister = (
getInstruction(instructionIndex + 1)
as? OneRegisterInstruction ?: return@transform
).registerA
// IndexOutOfBoundsException is technically possible here,
// but no such occurrences are present in the app.
val referee = getInstruction(instructionIndex + 2).getReference<MethodReference>()?.toString()
// Only replace string builder usage.
if (referee != USER_AGENT_STRING_BUILDER_APPEND_METHOD_REFERENCE) {
return@transform
}
// Do not change the package name in methods that use resources, or for methods that use GmsCore.
// Changing these package names will result in playback limitations,
// particularly Android VR background audio only playback.
val resourceOrGmsStringInstructionIndex = indexOfFirstInstruction {
val reference = getReference<StringReference>()
opcode == Opcode.CONST_STRING &&
(reference?.string == "android.resource://" || reference?.string == "gcore_")
}
if (resourceOrGmsStringInstructionIndex >= 0) {
return@transform
}
// Overwrite the result of context.getPackageName() with the original package name.
replaceInstruction(
instructionIndex + 1,
"const-string v$targetRegister, \"$ORIGINAL_PACKAGE_NAME\"",
)
}
},
)
import app.revanced.patcher.patch.bytecodePatch
@Deprecated("Use app.revanced.patches.youtube.misc.spoof.userAgentClientSpoofPatch instead.")
@Suppress("unused")
private enum class MethodCall(
override val definedClassName: String,
override val methodName: String,
override val methodParams: Array<String>,
override val returnType: String,
) : IMethodCall {
GetPackageName(
"Landroid/content/Context;",
"getPackageName",
emptyArray(),
"Ljava/lang/String;",
),
val userAgentClientSpoofPatch = bytecodePatch {
dependsOn(app.revanced.patches.youtube.misc.spoof.userAgentClientSpoofPatch)
}

View File

@@ -9,11 +9,11 @@ import app.revanced.patches.shared.misc.settings.preference.IntentPreference
import app.revanced.patches.shared.primeMethodFingerprint
import app.revanced.patches.youtube.layout.buttons.overlay.hidePlayerOverlayButtonsPatch
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.fix.playback.spoofVideoStreamsPatch
import app.revanced.patches.youtube.misc.gms.Constants.REVANCED_YOUTUBE_PACKAGE_NAME
import app.revanced.patches.youtube.misc.gms.Constants.YOUTUBE_PACKAGE_NAME
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
import app.revanced.patches.youtube.misc.spoof.spoofVideoStreamsPatch
import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint
@Suppress("unused")

View File

@@ -0,0 +1,56 @@
package app.revanced.patches.youtube.misc.spoof
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.shared.misc.settings.preference.ListPreference
import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.shared.misc.spoof.spoofVideoStreamsPatch
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
val spoofVideoStreamsPatch = spoofVideoStreamsPatch({
compatibleWith(
"com.google.android.youtube"(
"18.38.44",
"18.49.37",
"19.16.39",
"19.25.37",
"19.34.42",
"19.43.41",
"19.45.38",
"19.46.42",
),
)
dependsOn(
userAgentClientSpoofPatch,
settingsPatch,
)
}, {
addResources("youtube", "misc.fix.playback.spoofVideoStreamsPatch")
PreferenceScreen.MISC.addPreferences(
PreferenceScreenPreference(
key = "revanced_spoof_video_streams_screen",
sorting = PreferenceScreenPreference.Sorting.UNSORTED,
preferences = setOf(
SwitchPreference("revanced_spoof_video_streams"),
ListPreference(
"revanced_spoof_video_streams_client",
summaryKey = null,
),
ListPreference(
"revanced_spoof_video_streams_language",
summaryKey = null
),
SwitchPreference("revanced_spoof_video_streams_ios_force_avc"),
// Preference requires a title but the actual text is chosen at runtime.
NonInteractivePreference(
key = "revanced_spoof_video_streams_about_android_vr",
tag = "app.revanced.extension.youtube.settings.preference.SpoofStreamingDataSideEffectsPreference"
),
),
),
)
})

View File

@@ -0,0 +1,5 @@
package app.revanced.patches.youtube.misc.spoof
import app.revanced.patches.shared.misc.spoof.userAgentClientSpoofPatch
val userAgentClientSpoofPatch = userAgentClientSpoofPatch("com.google.android.youtube")

View File

@@ -0,0 +1,23 @@
package app.revanced.patches.youtube.video.audio
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val streamingModelBuilderFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("L")
strings("vprng")
}
internal val menuItemAudioTrackFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
parameters("L")
returns("V")
strings("menu_item_audio_track")
}
internal val audioStreamingTypeSelector = fingerprint {
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
returns("L")
strings("raw") // String is not unique
}

View File

@@ -0,0 +1,159 @@
package app.revanced.patches.youtube.video.audio
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.patch.bytecodePatch
import app.revanced.patcher.util.proxy.mutableTypes.MutableField.Companion.toMutable
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
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.Method
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
import com.android.tools.smali.dexlib2.immutable.ImmutableField
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
private const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/youtube/patches/ForceOriginalAudioPatch;"
@Suppress("unused")
val forceOriginalAudioPatch = bytecodePatch(
name = "Force original audio",
description = "Adds an option to always use the original audio track.",
) {
dependsOn(
sharedExtensionPatch,
settingsPatch,
addResourcesPatch,
)
compatibleWith(
"com.google.android.youtube"(
"18.38.44",
"18.49.37",
"19.16.39",
"19.25.37",
"19.34.42",
"19.43.41",
"19.45.38",
"19.46.42",
),
)
execute {
addResources("youtube", "video.audio.forceOriginalAudioPatch")
PreferenceScreen.VIDEO.addPreferences(
SwitchPreference("revanced_force_original_audio")
)
fun Method.firstFormatStreamingModelCall(
returnType: String = "Ljava/lang/String;"
): MutableMethod {
val audioTrackIdIndex = indexOfFirstInstructionOrThrow {
val reference = getReference<MethodReference>()
reference?.definingClass == "Lcom/google/android/libraries/youtube/innertube/model/media/FormatStreamModel;"
&& reference.returnType == returnType
}
return navigate(this).to(audioTrackIdIndex).stop()
}
// Accessor methods of FormatStreamModel have no string constants and
// opcodes are identical to other methods in the same class,
// so must walk from another class that use the methods.
val isDefaultMethod = streamingModelBuilderFingerprint.originalMethod.firstFormatStreamingModelCall("Z")
val audioTrackIdMethod = menuItemAudioTrackFingerprint.originalMethod.firstFormatStreamingModelCall()
val audioTrackDisplayNameMethod = audioStreamingTypeSelector.originalMethod.firstFormatStreamingModelCall()
val formatStreamModelClass = proxy(classes.first {
it.type == audioTrackIdMethod.definingClass
}).mutableClass
formatStreamModelClass.apply {
// Add a new field to store the override.
val helperFieldName = "isDefaultAudioTrackOverride"
fields.add(
ImmutableField(
type,
helperFieldName,
"Ljava/lang/Boolean;",
// Boolean is a 100% immutable class (all fields are final)
// and safe to write to a shared field without volatile/synchronization,
// but without volatile the field can show stale data
// and the same field is calculated more than once by different threads.
AccessFlags.PRIVATE.value or AccessFlags.VOLATILE.value,
null,
null,
null
).toMutable()
)
// Add a helper method because the isDefaultAudioTrack() has only 2 registers and 3 are needed.
val helperMethodClass = type
val helperMethodName = "extension_isDefaultAudioTrack"
val helperMethod = ImmutableMethod(
helperMethodClass,
helperMethodName,
listOf(ImmutableMethodParameter("Z", null, null)),
"Z",
AccessFlags.PRIVATE.value,
null,
null,
MutableMethodImplementation(6),
).toMutable().apply {
addInstructionsWithLabels(
0,
"""
iget-object v0, p0, $helperMethodClass->$helperFieldName:Ljava/lang/Boolean;
if-eqz v0, :call_extension
invoke-virtual { v0 }, Ljava/lang/Boolean;->booleanValue()Z
move-result v3
return v3
:call_extension
invoke-virtual { p0 }, $audioTrackIdMethod
move-result-object v1
invoke-virtual { p0 }, $audioTrackDisplayNameMethod
move-result-object v2
invoke-static { p1, v1, v2 }, $EXTENSION_CLASS_DESCRIPTOR->isDefaultAudioStream(ZLjava/lang/String;Ljava/lang/String;)Z
move-result v3
invoke-static { v3 }, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
move-result-object v0
iput-object v0, p0, $helperMethodClass->$helperFieldName:Ljava/lang/Boolean;
return v3
"""
)
}
methods.add(helperMethod)
// Modify isDefaultAudioTrack() to call extension helper method.
isDefaultMethod.apply {
val index = indexOfFirstInstructionOrThrow(Opcode.RETURN)
val register = getInstruction<OneRegisterInstruction>(index).registerA
addInstructions(
index,
"""
invoke-direct { p0, v$register }, $helperMethodClass->$helperMethodName(Z)Z
move-result v$register
"""
)
}
}
}
}

View File

@@ -17,6 +17,7 @@ import app.revanced.patches.shared.misc.mapping.resourceMappings
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.Method
import com.android.tools.smali.dexlib2.iface.instruction.Instruction
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.WideLiteralInstruction
import com.android.tools.smali.dexlib2.iface.reference.Reference
@@ -402,6 +403,20 @@ fun Method.findInstructionIndicesReversedOrThrow(opcode: Opcode): List<Int> {
return instructions
}
internal fun MutableMethod.insertFeatureFlagBooleanOverride(literal: Long, extensionsMethod: String) {
val literalIndex = indexOfFirstLiteralInstructionOrThrow(literal)
val index = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT)
val register = getInstruction<OneRegisterInstruction>(index).registerA
addInstructions(
index + 1,
"""
invoke-static { v$register }, $extensionsMethod
move-result v$register
"""
)
}
/**
* Called for _all_ instructions with the given literal value.
*/

View File

@@ -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 {

View File

@@ -1,34 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
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">
@@ -147,6 +136,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="layout.panels.popup.playerPopupPanelsPatch">
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
</patch>
<patch id="layout.returnyoutubedislike.returnYouTubeDislikePatch">
@@ -209,6 +200,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="misc.zoomhaptics.zoomHapticsPatch">
</patch>
<patch id="video.audio.forceOriginalAudioPatch">
</patch>
<patch id="video.quality.rememberVideoQualityPatch">
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
</patch>

View File

@@ -1,34 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
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">
@@ -147,6 +136,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="layout.panels.popup.playerPopupPanelsPatch">
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
</patch>
<patch id="layout.returnyoutubedislike.returnYouTubeDislikePatch">
@@ -209,6 +200,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="misc.zoomhaptics.zoomHapticsPatch">
</patch>
<patch id="video.audio.forceOriginalAudioPatch">
</patch>
<patch id="video.quality.rememberVideoQualityPatch">
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
</patch>

View File

@@ -1,34 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
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">
@@ -44,6 +33,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_check_environment_not_near_patch_time_invalid">ØĒØ§ØąŲŠØŽ ØĨŲ†Ø´Ø§ØĄ APK ØĒØ§Ų„Ų</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_title">ReVanced</string>
<string name="revanced_settings_confirm_user_dialog_title">Ų‡Ų„ ØĒØąØēب ؁؊ Ø§Ų„Ų…ØĒابؚ؊؟</string>
<string name="revanced_settings_reset">ØĨؚاد؊ Ø§Ų„ØĒØšŲŠŲŠŲ†</string>
<string name="revanced_settings_restart_title">ØĒØ­Ø¯ŲŠØĢ ؈ØĨؚاد؊ ØĒØ´ØēŲŠŲ„</string>
@@ -58,18 +48,26 @@ This is because Crowdin requires temporarily flattening this file and removing t
<!-- Settings about dialog. -->
<string name="revanced_settings_about_links_body">ØŖŲ†ØĒ ØĒØŗØĒØŽØ¯Ų… ØĨØĩØ¯Ø§Øą ReVanced Patches &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Ų…Ų„Ø§Ø­Ø¸ØŠ</string>
<string name="revanced_settings_about_links_dev_body">Ų‡Ø°Ø§ Ø§Ų„ØĨØĩØ¯Ø§Øą Ų‡Ųˆ ØĨØĩØ¯Ø§Øą Ų…ØŗØ¨Ų‚ØŒ ŲˆŲ‚Ø¯ ØĒŲˆØ§ØŦŲ‡ Ų…Ø´Ø§ŲƒŲ„ ØēŲŠØą Ų…ØĒŲˆŲ‚ØšØŠ</string>
<string name="revanced_settings_about_links_dev_body">Ų‡Ø°Ų‡ Ø§Ų„Ų†ØŗØŽØŠ Ų‡ŲŠ ØĨØĩØ¯Ø§Øą Ų…ØŗØ¨Ų‚ ŲˆŲ‚Ø¯ ØĒŲˆØ§ØŦŲ‡ Ų…Ø´ŲƒŲ„Ø§ØĒ ØēŲŠØą Ų…ØĒŲˆŲ‚ØšØŠ</string>
<string name="revanced_settings_about_links_header">Ø§Ų„ØąŲˆØ§Ø¨Øˇ Ø§Ų„ØąØŗŲ…ŲŠØŠ</string>
<!-- NOTE: the about strings above are duplicated in the TikTok about screen code,
and changes made here must also be made there. -->
</patch>
<patch id="misc.gms.gmsCoreSupportResourcePatch">
<!-- 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 . Ų‚Ų… بØĒØĢØ¨ŲŠØĒŲ‡.</string>
<string name="gms_core_toast_not_installed_message">Ų„Ų… ؊ØĒŲ… ØĒØĢØ¨ŲŠØĒ MicroG GmsCore. Ų‚Ų… بØĒØĢØ¨ŲŠØĒŲ‡.</string>
<string name="gms_core_dialog_title">Ø§Ų„ØĨØŦØąØ§ØĄ Ų…ØˇŲ„ŲˆØ¨</string>
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">Ų„Ø§ ŲŠŲ…Ų„Ųƒ MicroG GmsCore Ø§Ų„ØĩŲ„Ø§Ø­ŲŠØŠ Ų„Ų„ØĒØ´ØēŲŠŲ„ ؁؊ Ø§Ų„ØŽŲ„ŲŲŠØŠ.\n\nاØĒبؚ Ø¯Ų„ŲŠŲ„ \"Ų„Ø§ ØĒŲ‚ØĒŲ„ ØĒØˇØ¨ŲŠŲ‚ŲŠ\" Ų„Ų„Ų‡Ø§ØĒ؁ Ø§Ų„ØŽØ§Øĩ Ø¨ŲƒØŒ ŲˆŲ‚Ų… بØĒØˇØ¨ŲŠŲ‚ Ø§Ų„ØĨØąØ´Ø§Ø¯Ø§ØĒ ØšŲ„Ų‰ ØĒØĢØ¨ŲŠØĒ Ø§Ų„Ų…Ø§ŲŠŲƒØąŲˆØŦ.\n\nŲ‡Ø°Ø§ Ų…ØˇŲ„ŲˆØ¨ Ų„ŲƒŲŠ ŲŠØšŲ…Ų„ Ø§Ų„ØĒØˇØ¨ŲŠŲ‚.</string>
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"Ų„Ø§ ŲŠŲ…Ų„Ųƒ MicroG GmsCore ØĩŲ„Ø§Ø­ŲŠØŠ Ø§Ų„ØĒØ´ØēŲŠŲ„ ؁؊ Ø§Ų„ØŽŲ„ŲŲŠØŠ.
اØĒبؚ Ø¯Ų„ŲŠŲ„ \"Ų„Ø§ ØĒŲ‚ØĒŲ„ ØĒØˇØ¨ŲŠŲ‚ŲŠ\" Ų„Ų‡Ø§ØĒŲŲƒØŒ ŲˆØˇØ¨Ų‘Ų‚ Ø§Ų„ØĒØšŲ„ŲŠŲ…Ø§ØĒ Ų„ØĒØĢØ¨ŲŠØĒ MicroG.
Ų‡Ø°Ø§ Ų…ØˇŲ„ŲˆØ¨ Ų„ØšŲ…Ų„ Ø§Ų„ØĒØˇØ¨ŲŠŲ‚."</string>
<string name="gms_core_dialog_open_website_text">؁ØĒØ­ Ø§Ų„Ų…ŲˆŲ‚Øš</string>
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">؊ØŦب ØĒØšØˇŲŠŲ„ ØĒØ­ØŗŲŠŲ†Ø§ØĒ Ø¨ØˇØ§ØąŲŠØŠ MicroG GmsCore Ų„Ų…Ų†Øš Ø­Ø¯ŲˆØĢ Ų…Ø´ŲƒŲ„Ø§ØĒ.\n\nاØļØēØˇ ØšŲ„Ų‰ Ø˛Øą Ø§Ų„Ų…ØĒابؚ؊ ŲˆŲ‚Ų… بØĒØšØˇŲŠŲ„ ØĒØ­ØŗŲŠŲ†Ø§ØĒ Ø§Ų„Ø¨ØˇØ§ØąŲŠØŠ.</string>
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"؊ØŦب ØĒØšØˇŲŠŲ„ ØĒØ­ØŗŲŠŲ†Ø§ØĒ Ø¨ØˇØ§ØąŲŠØŠ MicroG GmsCore Ų„Ų…Ų†Øš Ø­Ø¯ŲˆØĢ Ų…Ø´ŲƒŲ„Ø§ØĒ.
Ų„Ų† ŲŠØ¤ØĢØą ØĒØšØˇŲŠŲ„ ØĒØ­ØŗŲŠŲ†Ø§ØĒ Ø§Ų„Ø¨ØˇØ§ØąŲŠØŠ Ų„Ų€ MicroG ØŗŲ„Ø¨Ų‹Ø§ ØšŲ„Ų‰ Ø§ØŗØĒØŽØ¯Ø§Ų… Ø§Ų„Ø¨ØˇØ§ØąŲŠØŠ.
Ø§Ų†Ų‚Øą ŲŲˆŲ‚ Ø˛Øą Ø§Ų„Ø§ØŗØĒŲ…ØąØ§Øą ŲˆØ§ØŗŲ…Ø­ بØĒØēŲŠŲŠØąØ§ØĒ Ø§Ų„ØĒØ­ØŗŲŠŲ†."</string>
<string name="gms_core_dialog_continue_text">Ų…ØĒابؚ؊</string>
</patch>
</app>
@@ -106,7 +104,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_debug_toast_on_error_title">ØšØąØļ Ų…Ų„Ø§Ø­Ø¸ØŠ ØšŲ†Ø¯ ؈ØŦŲˆØ¯ ØŽØˇØŖ ؁؊ ReVanced</string>
<string name="revanced_debug_toast_on_error_summary_on">؊ØĒŲ… ØšØąØļ Ų…Ų„Ø§Ø­Ø¸ØŠ ؁؊ Ø­Ø§Ų„ØŠ Ø­Ø¯ŲˆØĢ ØŽØˇØŖ</string>
<string name="revanced_debug_toast_on_error_summary_off">Ų„Ø§ ؊ØĒŲ… ØšØąØļ Ų…Ų„Ø§Ø­Ø¸ØŠ ؁؊ Ø­Ø§Ų„ØŠ Ø­Ø¯ŲˆØĢ ØŽØˇØŖ</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">ŲŠØ¤Ø¯ŲŠ ØĨŲŠŲ‚Ø§Ų ØĒØ´ØēŲŠŲ„ Ų…Ų„Ø§Ø­Ø¸Ø§ØĒ Ø§Ų„ØŖØŽØˇØ§ØĄ ØĨŲ„Ų‰ ØĨØŽŲØ§ØĄ ŲƒØ§ŲØŠ ØĨØ´ØšØ§ØąØ§ØĒ ØŽØˇØŖ ReVanced.\n\nŲ„Ų† ؊ØĒŲ… ØĨØšŲ„Ø§Ų…Ųƒ Ø¨ØŖŲŠ ØŖØŽØˇØ§ØĄ ØēŲŠØą Ų…ØĒŲˆŲ‚ØšØŠ.</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"ŲŠØ¤Ø¯ŲŠ ØĨŲŠŲ‚Ø§Ų ØĒØ´ØēŲŠŲ„ Ų…Ų„Ø§Ø­Ø¸Ø§ØĒ Ø§Ų„ØŖØŽØˇØ§ØĄ ØĨŲ„Ų‰ ØĨØŽŲØ§ØĄ ŲƒØ§ŲØŠ ØĨØ´ØšØ§ØąØ§ØĒ ØŖØŽØˇØ§ØĄ ReVanced.
Ų„Ų† ؊ØĒŲ… ØĨØšŲ„Ø§Ų…Ųƒ Ø¨ØŖŲŠ ØŖØŽØˇØ§ØĄ ØēŲŠØą Ų…ØĒŲˆŲ‚ØšØŠ."</string>
</patch>
<patch id="layout.hide.general.hideLayoutComponentsPatch">
<string name="revanced_disable_like_subscribe_glow_title">ØĒØšØˇŲŠŲ„ ØĒŲˆŲ‡ØŦ Ø˛Øą ØŖØšØŦØ¨Ų†ŲŠ / اشØĒØąØ§Ųƒ</string>
@@ -125,7 +125,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_channel_watermark_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØšŲ„Ø§Ų…ØŠ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø§Ų„Ų…Ø§ØĻŲŠØŠ</string>
<string name="revanced_hide_channel_watermark_summary_off">؊ØĒŲ… ØšØąØļ ØšŲ„Ø§Ų…ØŠ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø§Ų„Ų…Ø§ØĻŲŠØŠ</string>
<string name="revanced_hide_horizontal_shelves_title">ØĨØŽŲØ§ØĄ Ø§Ų„ØąŲŲˆŲ Ø§Ų„ØŖŲŲ‚ŲŠØŠ</string>
<string name="revanced_hide_horizontal_shelves_summary_on">ØĒŲƒŲˆŲ† Ø§Ų„ØąŲŲˆŲ Ų…ØŽŲŲŠØŠ Ų…ØĢŲ„:\nâ€ĸ Ø§Ų„ØŖØŽØ¨Ø§Øą Ø§Ų„ØšØ§ØŦŲ„ØŠ\nâ€ĸ Ų…ØĒابؚ؊ Ø§Ų„Ų…Ø´Ø§Ų‡Ø¯ØŠ\nâ€ĸ Ø§ØŗØĒŲƒØ´Ø§Ų Ø§Ų„Ų…Ø˛ŲŠØ¯ Ų…Ų† Ø§Ų„Ų‚Ų†ŲˆØ§ØĒ\nâ€ĸ Ø§Ų„ØĒØŗŲˆŲ‚\nâ€ĸ Ų…Ø´Ø§Ų‡Ø¯ØŠ Ų…ØąØŠ ØŖØŽØąŲ‰</string>
<string name="revanced_hide_horizontal_shelves_summary_on">"ØĒŲƒŲˆŲ† Ø§Ų„ØąŲŲˆŲ Ų…ØŽŲŲŠØŠ Ų…ØĢŲ„:
â€ĸ Ø§Ų„ØŖØŽØ¨Ø§Øą Ø§Ų„ØšØ§ØŦŲ„ØŠ
â€ĸ Ų…ØĒابؚ؊ Ø§Ų„Ų…Ø´Ø§Ų‡Ø¯ØŠ
â€ĸ Ø§ØŗØĒŲƒØ´Ø§Ų Ø§Ų„Ų…Ø˛ŲŠØ¯ Ų…Ų† Ø§Ų„Ų‚Ų†ŲˆØ§ØĒ
â€ĸ Ø§Ų„ØĒØŗŲˆŲ‚
â€ĸ Ų…Ø´Ø§Ų‡Ø¯ØŠ Ų…ØąØŠ ØŖØŽØąŲ‰"</string>
<string name="revanced_hide_horizontal_shelves_summary_off">؊ØĒŲ… ØšØąØļ Ø§Ų„ØąŲŲˆŲ</string>
<!-- 'Join' should be translated using the same localized wording YouTube displays.
This appears in the video player for certain videos. -->
@@ -153,9 +158,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_timed_reactions_title">ØĨØŽŲØ§ØĄ ØąØ¯ŲˆØ¯ Ø§Ų„ŲØšŲ„ Ø§Ų„Ų…Ø¤Ų‚ØĒØŠ</string>
<string name="revanced_hide_timed_reactions_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØąØ¯ŲˆØ¯ Ø§Ų„ŲØšŲ„ Ø§Ų„Ų…Ø¤Ų‚ØĒØŠ</string>
<string name="revanced_hide_timed_reactions_summary_off">؊ØĒŲ… ØšØąØļ ØąØ¯ŲˆØ¯ Ø§Ų„ŲØšŲ„ Ø§Ų„Ų…Ø¤Ų‚ØĒØŠ</string>
<string name="revanced_hide_search_result_shelf_header_title">ØĨØŽŲØ§ØĄ ØąØŖØŗ ØąŲ Ų†ØĒاØĻØŦ Ø§Ų„Ø¨Ø­ØĢ</string>
<string name="revanced_hide_search_result_shelf_header_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØąØŖØŗ Ø§Ų„ØąŲ</string>
<string name="revanced_hide_search_result_shelf_header_summary_off">؊ØĒŲ… ØšØąØļ ØąØŖØŗ Ø§Ų„ØąŲ</string>
<string name="revanced_hide_channel_guidelines_title">ØĨØŽŲØ§ØĄ ØĨØąØ´Ø§Ø¯Ø§ØĒ Ø§Ų„Ų‚Ų†Ø§ØŠ</string>
<string name="revanced_hide_channel_guidelines_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØĨØąØ´Ø§Ø¯Ø§ØĒ Ø§Ų„Ų‚Ų†Ø§ØŠ</string>
<string name="revanced_hide_channel_guidelines_summary_off">؊ØĒŲ… ØšØąØļ ØĨØąØ´Ø§Ø¯Ø§ØĒ Ø§Ų„Ų‚Ų†Ø§ØŠ</string>
@@ -226,8 +228,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_chapters_section_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų‚ØŗŲ… Ø§Ų„ŲØĩŲˆŲ„</string>
<string name="revanced_hide_chapters_section_summary_off">؊ØĒŲ… ØšØąØļ Ų‚ØŗŲ… Ø§Ų„ŲØĩŲˆŲ„</string>
<string name="revanced_hide_podcast_section_title">ØĨØŽŲØ§ØĄ Ų‚ØŗŲ… \'Ø§ØŗØĒŲƒØ´Ø§Ų Ø§Ų„Ø¨ŲˆØ¯ŲƒØ§ØŗØĒ\'</string>
<string name="revanced_hide_podcast_section_summary_on">؊ØĒŲ… ØšØąØļ Ų‚ØŗŲ… \'Ø§ØŗØĒŲƒØ´Ø§Ų Ø§Ų„Ø¨ŲˆØ¯ŲƒØ§ØŗØĒ\'</string>
<string name="revanced_hide_podcast_section_summary_off">؊ØĒŲ… ØšØąØļ Ų‚ØŗŲ… \'Ø§ØŗØĒŲƒØ´Ø§Ų Ø§Ų„Ø¨ŲˆØ¯ŲƒØ§ØŗØĒ\'</string>
<string name="revanced_hide_podcast_section_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų‚ØŗŲ… \"Ø§ØŗØĒŲƒØ´Ø§Ų Ø§Ų„Ø¨ŲˆØ¯ŲƒØ§ØŗØĒ\"</string>
<string name="revanced_hide_podcast_section_summary_off">؊ØĒŲ… ØšØąØļ Ų‚ØŗŲ… \"Ø§ØŗØĒŲƒØ´Ø§Ų Ø§Ų„Ø¨ŲˆØ¯ŲƒØ§ØŗØĒ\"</string>
<string name="revanced_hide_info_cards_section_title">ØĨØŽŲØ§ØĄ Ų‚ØŗŲ… Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…ØšŲ„ŲˆŲ…Ø§ØĒ</string>
<string name="revanced_hide_info_cards_section_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų‚ØŗŲ… Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…ØšŲ„ŲˆŲ…Ø§ØĒ</string>
<string name="revanced_hide_info_cards_section_summary_off">؊ØĒŲ… ØšØąØļ Ų‚ØŗŲ… Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…ØšŲ„ŲˆŲ…Ø§ØĒ</string>
@@ -252,6 +254,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">ŲŠØšØąØļ ؁؊ Ø§Ų„ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ ذاØĒ Ø§Ų„ØĩŲ„ØŠ</string>
<string name="revanced_comments_screen_title">Ø§Ų„ØĒØšŲ„ŲŠŲ‚Ø§ØĒ</string>
<string name="revanced_comments_screen_summary">ØĨØŽŲØ§ØĄ ØŖŲˆ ØšØąØļ Ų…ŲƒŲˆŲ†Ø§ØĒ Ų‚ØŗŲ… Ø§Ų„ØĒØšŲ„ŲŠŲ‚Ø§ØĒ</string>
<string name="revanced_hide_comments_chat_summary_title">ØĨØŽŲØ§ØĄ \"Ų…Ų„ØŽØĩ Ø§Ų„Ø¯ØąØ¯Ø´ØŠ\" </string>
<string name="revanced_hide_comments_chat_summary_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ â€œŲ…Ų„ØŽØĩ Ø§Ų„Ø¯ØąØ¯Ø´ØŠâ€</string>
<string name="revanced_hide_comments_chat_summary_summary_off">؊ØĒŲ… ØšØąØļ â€œŲ…Ų„ØŽØĩ Ø§Ų„Ø¯ØąØ¯Ø´ØŠâ€</string>
<string name="revanced_hide_comments_by_members_header_title">ØĨØŽŲØ§ØĄ ØąØŖØŗ \'ØĒØšŲ„ŲŠŲ‚Ø§ØĒ Ø§Ų„ØŖØšØļØ§ØĄ\'</string>
<string name="revanced_hide_comments_by_members_header_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØąØŖØŗ \'ØĒØšŲ„ŲŠŲ‚Ø§ØĒ Ø§Ų„ØŖØšØļØ§ØĄ\'</string>
<string name="revanced_hide_comments_by_members_header_summary_off">؊ØĒŲ… ØšØąØļ ØąØŖØŗ \'ØĒØšŲ„ŲŠŲ‚Ø§ØĒ Ø§Ų„ØŖØšØļØ§ØĄ\'</string>
@@ -274,7 +279,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_doodles_title">ØĨØŽŲØ§ØĄ ØąØŗŲˆŲ…Ø§ØĒ YouTube</string>
<string name="revanced_hide_doodles_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØąØŗŲˆŲ…Ø§ØĒ Ø´ØąŲŠØˇ Ø§Ų„Ø¨Ø­ØĢ</string>
<string name="revanced_hide_doodles_summary_off">؊ØĒŲ… ØšØąØļ ØąØŗŲˆŲ…Ø§ØĒ Ø´ØąŲŠØˇ Ø§Ų„Ø¨Ø­ØĢ</string>
<string name="revanced_hide_doodles_user_dialog_message">ØĒØ¸Ų‡Øą ØąØŗŲˆŲ…Ø§ØĒ YouTube Doodles Ų„ØšØ¯ØŠ ØŖŲŠØ§Ų… ŲƒŲ„ ØšØ§Ų….\n\nØĨذا ŲƒØ§Ų†ØĒ Ø§Ų„ØąØŗŲˆŲ…Ø§ØĒ ØĒØ¸Ų‡Øą Ø­Ø§Ų„ŲŠŲ‹Ø§ ؁؊ Ų…Ų†ØˇŲ‚ØĒ؃ ؈ØĨؚداد Ø§Ų„ØĨØŽŲØ§ØĄ Ų‡Ø°Ø§ Ų‚ŲŠØ¯ Ø§Ų„ØĒØ´ØēŲŠŲ„ØŒ ØŗŲŠØĒŲ… ØŖŲŠØļŲ‹Ø§ ØĨØŽŲØ§ØĄ Ø´ØąŲŠØˇ Ø§Ų„ŲŲ„ØĒØą ØŖØŗŲŲ„ Ø´ØąŲŠØˇ Ø§Ų„Ø¨Ø­ØĢ.</string>
<string name="revanced_hide_doodles_user_dialog_message">"ØĒØ¸Ų‡Øą \"\"Doodles\"\" ØšŲ„Ų‰ YouTube بØļؚ؊ ØŖŲŠØ§Ų… ŲƒŲ„ ØšØ§Ų….
ØĨذا ŲƒØ§Ų† ؊ØĒŲ… ØšØąØļ \"Doodle\" Ø­Ø§Ų„ŲŠŲ‹Ø§ ؁؊ Ų…Ų†ØˇŲ‚ØĒ؃ ؈ØĨذا ŲƒØ§Ų† ØĨؚداد Ø§Ų„ØĨØŽŲØ§ØĄ Ų‡Ø°Ø§ Ų‚ŲŠØ¯ Ø§Ų„ØĒØ´ØēŲŠŲ„ØŒ ŲØŗŲŠØĒŲ… ØŖŲŠØļŲ‹Ø§ ØĨØŽŲØ§ØĄ Ø´ØąŲŠØˇ Ø§Ų„ØĒØĩŲŲŠØŠ ØŖØŗŲŲ„ Ø´ØąŲŠØˇ Ø§Ų„Ø¨Ø­ØĢ."</string>
<string name="revanced_custom_filter_screen_title">؁؄ØĒØą Ų…ØŽØĩØĩ</string>
<string name="revanced_custom_filter_screen_summary">ØĨØŽŲØ§ØĄ Ø§Ų„Ų…ŲƒŲˆŲ†Ø§ØĒ Ø¨Ø§ØŗØĒØŽØ¯Ø§Ų… ŲŲ„Ø§ØĒØą Ų…ØŽØĩØĩØŠ</string>
<string name="revanced_custom_filter_title">ØĒŲ…ŲƒŲŠŲ† Ø§Ų„ŲŲ„ØĒØą Ø§Ų„Ų…ØŽØĩØĩ</string>
@@ -298,9 +305,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">Ø§Ų„ŲƒŲ„Ų…Ø§ØĒ Ø§Ų„Ų…ŲØĒØ§Ø­ŲŠØŠ Ø§Ų„Ų…ØąØ§Ø¯ ØĨØŽŲØ§Ø¤Ų‡Ø§</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">Ø§Ų„ŲƒŲ„Ų…Ø§ØĒ ŲˆØ§Ų„ØšØ¨Ø§ØąØ§ØĒ Ø§Ų„ØąØĻŲŠØŗŲŠØŠ Ø§Ų„ØĒ؊ ؊ØŦب ØĨØŽŲØ§Ø¤Ų‡Ø§ØŒ ؅؁ØĩŲˆŲ„ØŠ Ø¨ØŗØˇØą ØŦØ¯ŲŠØ¯\n\nØ§Ų„ŲƒŲ„Ų…Ø§ØĒ Ø§Ų„ØąØĻŲŠØŗŲŠØŠ ŲŠŲ…ŲƒŲ† ØŖŲ† ØĒŲƒŲˆŲ† ØŖØŗŲ…Ø§ØĄ Ų‚Ų†ŲˆØ§ØĒ ØŖŲˆ ØŖŲŠ Ų†Øĩ ŲŠØ¸Ų‡Øą ؁؊ ØšŲ†Ø§ŲˆŲŠŲ† Ø§Ų„ŲŲŠØ¯ŲŠŲˆ\n\n؊ØŦب ØĨØ¯ØŽØ§Ų„ Ø§Ų„ŲƒŲ„Ų…Ø§ØĒ Ø§Ų„ØĒ؊ ØĒØ­ØĒ؈؊ ØšŲ„Ų‰ ØŖØ­ØąŲ ŲƒØ¨ŲŠØąØŠ ؁؊ Ø§Ų„ŲˆØŗØˇ بØĨØŗØĒØŽØ¯Ø§Ų… Ø§Ų„ØŖØ­ØąŲ Ø§Ų„ŲƒØ¨ŲŠØąØŠ (Ų…ØĢØ§Ų„: iPhone، TikTok، LeBlanc)</string>
<string name="revanced_hide_keyword_content_phrases_summary">"Ø§Ų„ŲƒŲ„Ų…Ø§ØĒ ŲˆØ§Ų„ØšØ¨Ø§ØąØ§ØĒ Ø§Ų„ØĒ؊ ØĒØąŲŠØ¯ ØĨØŽŲØ§ØĄŲ‡Ø§ØŒ ؅؁ØĩŲˆŲ„ØŠ Ø¨ØŗØˇŲˆØą ØŦØ¯ŲŠØ¯ØŠ
ŲŠŲ…ŲƒŲ† ØŖŲ† ØĒŲƒŲˆŲ† Ø§Ų„ŲƒŲ„Ų…Ø§ØĒ ØšØ¨Ø§ØąØŠ ØšŲ† ØŖØŗŲ…Ø§ØĄ Ų‚Ų†ŲˆØ§ØĒ ØŖŲˆ ØŖŲŠ Ų†Øĩ ŲŠØ¸Ų‡Øą ؁؊ ØšŲ†Ø§ŲˆŲŠŲ† Ø§Ų„ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ
؊ØŦب ØĨØ¯ØŽØ§Ų„ Ø§Ų„ŲƒŲ„Ų…Ø§ØĒ Ø§Ų„ØĒ؊ ØĒØ­ØĒ؈؊ ØšŲ„Ų‰ ØŖØ­ØąŲ ŲƒØ¨ŲŠØąØŠ ؁؊ Ø§Ų„Ų…Ų†ØĒØĩ؁ Ø¨Ų†ŲØŗ Ø§Ų„Ø­Ø§Ų„ØŠ (ØšŲ„Ų‰ ØŗØ¨ŲŠŲ„ Ø§Ų„Ų…ØĢØ§Ų„: iPhone, TikTok, LeBlanc)"</string>
<string name="revanced_hide_keyword_content_about_title">Ø­ŲˆŲ„ ØĒØĩŲŲŠØŠ Ø§Ų„ŲƒŲ„Ų…Ø§ØĒ Ø§Ų„Ų…ŲØĒØ§Ø­ŲŠØŠ</string>
<string name="revanced_hide_keyword_content_about_summary">Ø§Ų„ØĩŲØ­ØŠ Ø§Ų„ØąØĻŲŠØŗŲŠØŠ/Ø§Ų„Ø§Ø´ØĒØąØ§ŲƒØ§ØĒ/Ų†ØĒاØĻØŦ Ø§Ų„ØĨØ´ØĒØąØ§Ųƒ/؊ØĒŲ… ØĒØĩŲŲŠØŠ Ų†ØĒاØĻØŦ Ø§Ų„Ø¨Ø­ØĢ Ų„ØĨØŽŲØ§ØĄ Ø§Ų„Ų…Ø­ØĒŲˆŲ‰ Ø§Ų„Ø°ŲŠ ؊ØĒØˇØ§Ø¨Ų‚ Ų…Øš ØšØ¨Ø§ØąØ§ØĒ Ø§Ų„ŲƒŲ„Ų…Ø§ØĒ Ø§Ų„ØąØĻŲŠØŗŲŠØŠ\n\nØ§Ų„Ų‚ŲŠŲˆØ¯\nâ€ĸ Ų„Ø§ ŲŠŲ…ŲƒŲ† ØĨØŽŲØ§ØĄ ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ Shorts Ø¨ŲˆØ§ØŗØˇØŠ Ø§ØŗŲ… Ø§Ų„Ų‚Ų†Ø§ØŠ\nâ€ĸ Ų‚Ø¯ Ų„Ø§ ØĒŲƒŲˆŲ† بؚØļ Ų…ŲƒŲˆŲ†Ø§ØĒ ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų… Ų…ØŽŲŲŠØŠ\nâ€ĸ Ų‚Ø¯ Ų„Ø§ ØĒØ¸Ų‡Øą Ų†ØĒاØĻØŦ بحØĢ ØšŲ† ŲƒŲ„Ų…ØŠ ØąØĻŲŠØŗŲŠØŠ</string>
<string name="revanced_hide_keyword_content_about_summary">"Ø§Ų„ØĩŲØ­ØŠ Ø§Ų„ØąØĻŲŠØŗŲŠØŠ/Ø§Ų„Ø§Ø´ØĒØąØ§ŲƒØ§ØĒ/Ų†ØĒاØĻØŦ Ø§Ų„Ø¨Ø­ØĢ ؊ØĒŲ… ØĒØĩ؁؊ØĒŲ‡Ø§ Ų„ØĨØŽŲØ§ØĄ Ø§Ų„Ų…Ø­ØĒŲˆŲ‰ Ø§Ų„Ø°ŲŠ ؊ØĒØˇØ§Ø¨Ų‚ Ų…Øš ŲƒŲ„Ų…Ø§ØĒ Ø§Ų„Ø¨Ø­ØĢ
Ø§Ų„Ų‚ŲŠŲˆØ¯
â€ĸ ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ Shorts Ų„Ø§ ŲŠŲ…ŲƒŲ† ØĨØŽŲØ§Ø¤Ų‡Ø§ Ø¨ŲˆØ§ØŗØˇØŠ Ø§ØŗŲ… Ø§Ų„Ų‚Ų†Ø§ØŠ
â€ĸ Ų‚Ø¯ Ų„Ø§ ؊ØĒŲ… ØĨØŽŲØ§ØĄ بؚØļ Ų…ŲƒŲˆŲ†Ø§ØĒ ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų…
â€ĸ Ø§Ų„Ø¨Ø­ØĢ ØšŲ† ŲƒŲ„Ų…ØŠ Ų…Ø§ Ų‚Ø¯ Ų„Ø§ ŲŠØšØˇŲŠ Ų†ØĒاØĻØŦ"</string>
<string name="revanced_hide_keyword_content_about_whole_words_title">Ų…ØˇØ§Ø¨Ų‚ØŠ Ø§Ų„ŲƒŲ„Ų…Ø§ØĒ Ø¨ØŖŲƒŲ…Ų„Ų‡Ø§</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">ØŗŲŠØ¤Ø¯ŲŠ ؈ØļØš ØšŲ„Ø§Ų…ØŠ Ø§Ų‚ØĒØ¨Ø§Øŗ Ų…Ø˛Ø¯ŲˆØŦØŠ Ø­ŲˆŲ„ ŲƒŲ„Ų…ØŠ ØąØĻŲŠØŗŲŠØŠ/ØšØ¨Ø§ØąØŠ ØĨŲ„Ų‰ Ų…Ų†Øš Ø§Ų„ØĒØˇØ§Ø¨Ų‚Ø§ØĒ Ø§Ų„ØŦØ˛ØĻŲŠØŠ Ų„ØšŲ†Ø§ŲˆŲŠŲ† Ø§Ų„ŲŲŠØ¯ŲŠŲˆ ŲˆØŖØŗŲ…Ø§ØĄ Ø§Ų„Ų‚Ų†ŲˆØ§ØĒ.&lt;br&gt;&lt;br&gt;ØšŲ„Ų‰ ØŗØ¨ŲŠŲ„ Ø§Ų„Ų…ØĢØ§Ų„ØŒ&lt;br&gt;&lt;b&gt;\"ai\"&lt;/b&gt; ØŗŲŠØŽŲŲŠ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ: &lt;b&gt;How does AI work?&lt;/b&gt;&lt;br&gt;ŲˆŲ„ŲƒŲ† Ų„Ų† ŲŠØŽŲŲŠ: &lt;b&gt;What does fair use mean?&lt;/b&gt;</string>
@@ -316,7 +332,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_general_ads_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø§Ų„ØĨØšŲ„Ø§Ų†Ø§ØĒ Ø¨Ø´ŲƒŲ„ ØšØ§Ų…</string>
<string name="revanced_hide_general_ads_summary_off">؊ØĒŲ… ØšØąØļ Ø§Ų„ØĨØšŲ„Ø§Ų†Ø§ØĒ Ø§Ų„ØšØ§Ų…ØŠ</string>
<string name="revanced_hide_fullscreen_ads_title">ØĨØŽŲØ§ØĄ ØĨØšŲ„Ø§Ų†Ø§ØĒ Ų…Ų„ØĄ Ø§Ų„Ø´Ø§Ø´ØŠ</string>
<string name="revanced_hide_fullscreen_ads_summary_on">؊ØĒŲ… ØĨØŽŲØ§ØĄ ØĨØšŲ„Ø§Ų†Ø§ØĒ Ų…Ų„ØĄ Ø§Ų„Ø´Ø§Ø´ØŠ\n\nŲ‡Ø°Ų‡ Ø§Ų„Ų…ŲŠØ˛ØŠ Ų…ØĒŲˆŲØąØŠ ŲŲ‚Øˇ Ų„Ų„ØŖØŦŲ‡Ø˛ØŠ Ø§Ų„Ų‚Ø¯ŲŠŲ…ØŠ</string>
<string name="revanced_hide_fullscreen_ads_summary_on">"؊ØĒŲ… ØĨØŽŲØ§ØĄ ØĨØšŲ„Ø§Ų†Ø§ØĒ Ų…Ų„ØĄ Ø§Ų„Ø´Ø§Ø´ØŠ
Ų‡Ø°Ų‡ Ø§Ų„Ų…ŲŠØ˛ØŠ Ų…ØĒاح؊ ŲŲ‚Øˇ Ų„Ų„ØŖØŦŲ‡Ø˛ØŠ Ø§Ų„Ų‚Ø¯ŲŠŲ…ØŠ"</string>
<string name="revanced_hide_fullscreen_ads_summary_off">؊ØĒŲ… ØšØąØļ ØĨØšŲ„Ø§Ų†Ø§ØĒ Ų…Ų„ØĄ Ø§Ų„Ø´Ø§Ø´ØŠ</string>
<string name="revanced_hide_buttoned_ads_title">ØĨØŽŲØ§ØĄ Ø§Ų„ØĨØšŲ„Ø§Ų†Ø§ØĒ Ø§Ų„Ø˛ØąŲŠØŠ</string>
<string name="revanced_hide_buttoned_ads_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø§Ų„ØĨØšŲ„Ø§Ų†Ø§ØĒ Ø§Ų„Ø˛ØąŲŠØŠ</string>
@@ -416,7 +434,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_swipe_save_and_restore_brightness_summary_on">Ø­ŲØ¸ ŲˆØ§ØŗØĒؚاد؊ Ø§Ų„ØŗØˇŲˆØš ØšŲ†Ø¯ Ø§Ų„ØŽØąŲˆØŦ ØŖŲˆ Ø§Ų„Ø¯ØŽŲˆŲ„ ØĨŲ„Ų‰ ؈ØļØš Ų…Ų„ØĄ Ø§Ų„Ø´Ø§Ø´ØŠ</string>
<string name="revanced_swipe_save_and_restore_brightness_summary_off">Ų„Ø§ ØĒŲ‚Ų… Ø¨Ø­ŲØ¸ Ø§Ų„ØŗØˇŲˆØš ŲˆØ§ØŗØĒؚادØĒŲ‡ ØšŲ†Ø¯ Ø§Ų„ØŽØąŲˆØŦ ØŖŲˆ Ø§Ų„Ø¯ØŽŲˆŲ„ ØĨŲ„Ų‰ ؈ØļØš Ų…Ų„ØĄ Ø§Ų„Ø´Ø§Ø´ØŠ</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">ØĒŲ…ŲƒŲŠŲ† ØĨŲŠŲ…Ø§ØĄØŠ Ø§Ų„ØŗØˇŲˆØš Ø§Ų„ØĒŲ„Ų‚Ø§ØĻ؊</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">ŲŠØ¤Ø¯ŲŠ Ø§Ų„ØĒŲ…ØąŲŠØą Ų„ØŖØŗŲŲ„ ØĨŲ„Ų‰ ØŖØ¯Ų†Ų‰ Ų‚ŲŠŲ…ØŠ Ų„ØĨŲŠŲ…Ø§ØĄØŠ Ø§Ų„ØŗØˇŲˆØš ØĨŲ„Ų‰ ØĒŲ…ŲƒŲŠŲ† Ø§Ų„ØŗØˇŲˆØš Ø§Ų„ØĒŲ„Ų‚Ø§ØĻ؊</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">Ø§Ų„ØĒŲ…ØąŲŠØą Ų„ØŖØŗŲŲ„ ØĨŲ„Ų‰ ØŖØ¯Ų†Ų‰ Ų‚ŲŠŲ…ØŠ Ų„Ų„ØŗØˇŲˆØš ŲŠŲ…ŲƒŲ‘Ų† Ø§Ų„ØŗØˇŲˆØš Ø§Ų„ØĒŲ„Ų‚Ø§ØĻ؊</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">Ų„Ø§ ŲŠØ¤Ø¯ŲŠ Ø§Ų„ØĒŲ…ØąŲŠØą Ų„ØŖØŗŲŲ„ ØĨŲ„Ų‰ ØŖØ¯Ų†Ų‰ Ų‚ŲŠŲ…ØŠ ØĨŲ„Ų‰ ØĒŲ…ŲƒŲŠŲ† Ø§Ų„ØŗØˇŲˆØš Ø§Ų„ØĒŲ„Ų‚Ø§ØĻ؊</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">ØĒŲ„Ų‚Ø§ØĻ؊</string>
<string name="revanced_swipe_overlay_timeout_title">Ų…Ų‡Ų„ØŠ ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„ØĒŲ…ØąŲŠØą</string>
@@ -435,7 +453,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="layout.buttons.action.hideButtonsPatch">
<string name="revanced_hide_buttons_screen_title">ØŖØ˛ØąØ§Øą Ø§Ų„ØĨØŦØąØ§ØĄ</string>
<string name="revanced_hide_buttons_screen_summary">ØĨØŽŲØ§ØĄ ØŖŲˆ ØšØąØļ Ø§Ų„ØŖØ˛ØąØ§Øą ØĒØ­ØĒ Ų…Ų‚Ø§ØˇØš Ø§Ų„ŲŲŠØ¯ŲŠŲˆ</string>
<string name="revanced_hide_buttons_screen_summary">ØĨØŽŲØ§ØĄ ØŖŲˆ ØšØąØļ Ø§Ų„ØŖØ˛ØąØ§Øą ØĒØ­ØĒ Ø§Ų„ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ</string>
<string name="revanced_hide_like_dislike_button_title">ØĨØŽŲØ§ØĄ ØŖØšØŦØ¨Ų†ŲŠ ŲˆŲ„Ų… ŲŠØšØŦØ¨Ų†ŲŠ</string>
<string name="revanced_hide_like_dislike_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØŖØ˛ØąØ§Øą ØŖØšØŦØ¨Ų†ŲŠ ŲˆŲ„Ų… ŲŠØšØŦØ¨Ų†ŲŠ</string>
<string name="revanced_hide_like_dislike_button_summary_off">؊ØĒŲ… ØšØąØļ ØŖØ˛ØąØ§Øą ØŖØšØŦØ¨Ų†ŲŠ ŲˆŲ„Ų… ŲŠØšØŦØ¨Ų†ŲŠ</string>
@@ -490,11 +508,22 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_subscriptions_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„Ø§Ø´ØĒØąØ§ŲƒØ§ØĒ</string>
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_switch_create_with_notifications_button_title">ØĒØ¨Ø¯ŲŠŲ„ Ø§Ų„ØĨŲ†Ø´Ø§ØĄ Ų…Øš Ø§Ų„ØĨØ´ØšØ§ØąØ§ØĒ</string>
<string name="revanced_switch_create_with_notifications_button_summary_on">ØĒŲ… ØĒØ¨Ø¯ŲŠŲ„ Ø˛Øą Ø§Ų„ØĨŲ†Ø´Ø§ØĄ Ø¨Ų€Ø˛Øą Ø§Ų„ØĨØ´ØšØ§ØąØ§ØĒ\n\nŲ…Ų„Ø§Ø­Ø¸ØŠ: ŲŠØ¤Ø¯ŲŠ ØĒŲ…ŲƒŲŠŲ† Ų‡Ø°Ø§ ØŖŲŠØļŲ‹Ø§ ØĨŲ„Ų‰ ØĨØŽŲØ§ØĄ ØĨØšŲ„Ø§Ų†Ø§ØĒ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø¨Ø§Ų„Ų‚ŲˆØŠ</string>
<string name="revanced_switch_create_with_notifications_button_summary_on">"ØĒŲ… ØĒØ¨Ø¯ŲŠŲ„ Ø˛Øą Ø§Ų„ØĨŲ†Ø´Ø§ØĄ Ø¨Ų€Ø˛Øą Ø§Ų„ØĨØ´ØšØ§ØąØ§ØĒ
Ų…Ų„Ø§Ø­Ø¸ØŠ: ŲŠØ¤Ø¯ŲŠ ØĒŲ…ŲƒŲŠŲ† Ų‡Ø°Ø§ ØŖŲŠØļŲ‹Ø§ ØĨŲ„Ų‰ ØĨØŽŲØ§ØĄ ØĨØšŲ„Ø§Ų†Ø§ØĒ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø¨Ø§Ų„Ų‚ŲˆØŠ"</string>
<string name="revanced_switch_create_with_notifications_button_summary_off">Ų„Ø§ ؊ØĒŲ… ØĒØ¨Ø¯ŲŠŲ„ Ø˛Øą Ø§Ų„ØĨŲ†Ø´Ø§ØĄ Ø¨Ø˛Øą Ø§Ų„ØĨØ´ØšØ§ØąØ§ØĒ</string>
<string name="revanced_hide_navigation_button_labels_title">ØĨØŽŲØ§ØĄ ØĒØŗŲ…ŲŠØ§ØĒ Ø˛Øą Ø§Ų„ØĒŲ†Ų‚Ų„</string>
<string name="revanced_hide_navigation_button_labels_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø§Ų„ØĒØŗŲ…ŲŠØ§ØĒ</string>
<string name="revanced_hide_navigation_button_labels_summary_off">؊ØĒŲ… ØšØąØļ Ø§Ų„ØĒØŗŲ…ŲŠØ§ØĒ</string>
<string name="revanced_disable_translucent_status_bar_title">ØĒØšØˇŲŠŲ„ Ø´ØąŲŠØˇ Ø§Ų„Ø­Ø§Ų„ØŠ Ø§Ų„Ø´ŲØ§Ų</string>
<string name="revanced_disable_translucent_status_bar_summary_on">Ø´ØąŲŠØˇ Ø§Ų„Ø­Ø§Ų„ØŠ ØēŲŠØą Ų…ØšØĒŲ…ØŠ</string>
<string name="revanced_disable_translucent_status_bar_summary_off">Ø´ØąŲŠØˇ Ø§Ų„Ø­Ø§Ų„ØŠ ØēŲŠØą Ø´ŲØ§ŲØŠ ØŖŲˆ ØšŲ…ŲŠŲ‚ØŠ</string>
<string name="revanced_disable_translucent_navigation_bar_light_title">ØĒØšØˇŲŠŲ„ Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ†Ų‚Ų„ Ø§Ų„Ø´ŲØ§Ų Ø§Ų„ŲØ§ØĒØ­</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_on">Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ†Ų‚Ų„ ؁؊ Ø§Ų„ŲˆØļØš Ø§Ų„ŲØ§ØĒØ­ Ų…ØšØĒŲ…</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">ŲŠŲƒŲˆŲ† Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ†Ų‚Ų„ ؁؊ Ø§Ų„ŲˆØļØš Ø§Ų„ŲØ§ØĒØ­ Ų…ØšØĒŲ…Ų‹Ø§ ØŖŲˆ Ų†Øĩ؁ Ø´ŲØ§Ų</string>
<string name="revanced_disable_translucent_navigation_bar_dark_title">ØĒØšØˇŲŠŲ„ Ø§Ų„Ø´ØąŲŠØˇ Ø§Ų„Ø¯Ø§ŲƒŲ†ØŠ</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_on">Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ†Ų‚Ų„ ؁؊ Ø§Ų„ŲˆØļØš Ø§Ų„Ø¯Ø§ŲƒŲ† Ų…ØšØĒŲ…</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">Ø´ØąŲŠØˇ Ø§Ų„ØĒØˇØ¨ŲŠŲ‚ Ø§Ų„Ų…ØĩŲˆØąŲŠ Ø§Ų„Ø´ŲØ§Ų ØēŲŠØą ØšŲ…ŲŠŲ‚ØŠ ØŖŲˆ ØšŲ…ŲŠŲ‚ØŠ</string>
</patch>
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
<string name="revanced_hide_player_flyout_title">Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ų…Ų†Ø¨ØĢŲ‚ØŠ</string>
@@ -617,8 +646,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_subscribe_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ø§Ø´ØĒØąØ§Ųƒ</string>
<string name="revanced_hide_shorts_subscribe_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„Ø§Ø´ØĒØąØ§Ųƒ</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_title">ØĨØŽŲØ§ØĄ ØŖØ˛ØąØ§Øą ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„ØĒŲˆŲ‚Ų</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØŖØ˛ØąØ§Øą ØĒØąØ§ŲƒØ¨ Ø§Ų„ØĒŲˆŲ‚Ų</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">؊ØĒŲ… ØšØąØļ ØŖØ˛ØąØ§Øą ØĒØąØ§ŲƒØ¨ Ø§Ų„ØĒŲˆŲ‚Ų</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØŖØ˛ØąØ§Øą ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„ØĒŲˆŲ‚Ų</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">؊ØĒŲ… ØšØąØļ ØŖØ˛ØąØ§Øą ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„ØĒŲˆŲ‚Ų</string>
<string name="revanced_hide_shorts_shop_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ų…ØĒØŦØą</string>
<string name="revanced_hide_shorts_shop_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ų…ØĒØŦØą</string>
<string name="revanced_hide_shorts_shop_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„Ų…ØĒØŦØą</string>
@@ -652,9 +681,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_stickers_title">ØĨØŽŲØ§ØĄ Ø§Ų„Ų…Ų„ØĩŲ‚Ø§ØĒ</string>
<string name="revanced_hide_shorts_stickers_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø§Ų„Ų…Ų„ØĩŲ‚Ø§ØĒ</string>
<string name="revanced_hide_shorts_stickers_summary_off">؊ØĒŲ… ØšØąØļ Ø§Ų„Ų…Ų„ØĩŲ‚Ø§ØĒ</string>
<string name="revanced_hide_shorts_like_fountain_title">ØĨØŽŲØ§ØĄ Ų†Ø§ŲŲˆØąØŠ ØŖØšØŦØ¨Ų†ŲŠ</string>
<string name="revanced_hide_shorts_like_fountain_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØĒØŖØĢŲŠØą Ø§Ų„Ų†Ø§ŲŲˆØąØŠ Ų„Ų€Ø˛Øą ØŖØšØŦØ¨Ų†ŲŠ</string>
<string name="revanced_hide_shorts_like_fountain_summary_off">؊ØĒŲ… ØšØąØļ ØĒØŖØĢŲŠØą Ø§Ų„Ų†Ø§ŲŲˆØąØŠ Ų„Ų€Ø˛Øą ØŖØšØŦØ¨Ų†ŲŠ</string>
<string name="revanced_hide_shorts_like_fountain_title">ØĨØŽŲØ§ØĄ ŲŲˆØąØ§Ų† ØŖØšØŦØ¨Ų†ŲŠ</string>
<string name="revanced_hide_shorts_like_fountain_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø§Ų„ØĒØŖØĢŲŠØą Ø§Ų„ŲŲˆŲ‘Ø§Øą Ų„Ų€Ø˛Øą ØŖØšØŦØ¨Ų†ŲŠ</string>
<string name="revanced_hide_shorts_like_fountain_summary_off">؊ØĒŲ… ØšØąØļ Ø§Ų„ØĒØŖØĢŲŠØą Ø§Ų„ŲŲˆŲ‘Ø§Øą Ų„Ų€Ø˛Øą ØŖØšØŦØ¨Ų†ŲŠ</string>
<string name="revanced_hide_shorts_like_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą ØŖØšØŦØ¨Ų†ŲŠ</string>
<string name="revanced_hide_shorts_like_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą ØŖØšØŦØ¨Ų†ŲŠ</string>
<string name="revanced_hide_shorts_like_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą ØŖØšØŦØ¨Ų†ŲŠ</string>
@@ -683,7 +712,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_video_title_summary_off">؊ØĒŲ… ØšØąØļ Ø§Ų„ØšŲ†ŲˆØ§Ų†</string>
<string name="revanced_hide_shorts_sound_metadata_label_title">ØĨØŽŲØ§ØĄ ØĒØŗŲ…ŲŠØŠ Ø¨ŲŠØ§Ų†Ø§ØĒ Ø§Ų„ØĒØšØąŲŠŲ Ø§Ų„Øĩ؈ØĒŲŠØŠ</string>
<string name="revanced_hide_shorts_sound_metadata_label_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØĒØŗŲ…ŲŠØŠ Ø¨ŲŠØ§Ų†Ø§ØĒ Ø§Ų„ØĒØšØąŲŠŲ</string>
<string name="revanced_hide_shorts_sound_metadata_label_summary_off">؊ØĒŲ… ØšØąØļ ØĒØŗŲ…ŲŠØŠ Ø§Ų„Ø¨ŲŠØ§Ų†Ø§ØĒ Ø§Ų„ŲˆØĩŲŲŠØŠ</string>
<string name="revanced_hide_shorts_sound_metadata_label_summary_off">؊ØĒŲ… ØšØąØļ ØĒØŗŲ…ŲŠØŠ Ø¨ŲŠØ§Ų†Ø§ØĒ Ø§Ų„ØĒØšØąŲŠŲ</string>
<string name="revanced_hide_shorts_full_video_link_label_title">ØĨØŽŲØ§ØĄ ØĒØŗŲ…ŲŠØŠ ØąØ§Ø¨Øˇ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø§Ų„ŲƒØ§Ų…Ų„</string>
<string name="revanced_hide_shorts_full_video_link_label_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØĒØŗŲ…ŲŠØŠ ØąØ§Ø¨Øˇ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ</string>
<string name="revanced_hide_shorts_full_video_link_label_summary_off">؊ØĒŲ… ØšØąØļ ØĒØŗŲ…ŲŠØŠ ØąØ§Ø¨Øˇ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ</string>
@@ -709,8 +738,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_popup_panels_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų„ŲˆØ­Ø§ØĒ Ø§Ų„Ų…Ø´ØēŲ„ Ø§Ų„Ų…Ų†Ø¨ØĢŲ‚ØŠ</string>
<string name="revanced_hide_player_popup_panels_summary_off">؊ØĒŲ… ØšØąØļ Ų„ŲˆØ­Ø§ØĒ Ø§Ų„Ų…Ø´ØēŲ„ Ø§Ų„Ų…Ų†Ø¨ØĢŲ‚ØŠ</string>
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
<string name="revanced_open_videos_fullscreen_portrait_title">؁ØĒØ­ Ų…Ų‚Ø§ØˇØš Ø§Ų„ŲŲŠØ¯ŲŠŲˆ ؁؊ Ų…Ų„ØĄ Ø§Ų„Ø´Ø§Ø´ØŠ</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">؊ØĒŲ… ؁ØĒØ­ Ø§Ų„ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ ؁؊ ؈ØļØš Ų…Ų„ØĄ Ø§Ų„Ø´Ø§Ø´ØŠ</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Ų„Ø§ ؊ØĒŲ… ؁ØĒØ­ Ø§Ų„ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ ؁؊ ؈ØļØš Ų…Ų„ØĄ Ø§Ų„Ø´Ø§Ø´ØŠ</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">Ø´ŲØ§ŲŲŠØŠ ØĒØąØ§ŲƒØ¨ Ø§Ų„Ų…Ø´ØēŲ„</string>
<string name="revanced_player_overlay_opacity_title">Ø´ŲØ§ŲŲŠØŠ ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„Ų…Ø´ØēŲ„</string>
<string name="revanced_player_overlay_opacity_summary">Ų‚ŲŠŲ…ØŠ Ø§Ų„Ø´ŲØ§ŲŲŠØŠ Ø¨ŲŠŲ† 0-100، Ø­ŲŠØĢ ŲŠŲƒŲˆŲ† 0 Ø´ŲØ§Ų</string>
<string name="revanced_player_overlay_opacity_invalid_toast">Ø´ŲØ§ŲŲŠØŠ ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„Ų…Ø´ØēŲ„ ؊ØŦب ØŖŲ† ØĒŲƒŲˆŲ† Ø¨ŲŠŲ† 0-100</string>
</patch>
@@ -726,7 +760,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_ryd_enable_summary_off">Ų„Ø§ ؊ØĒŲ… ØšØąØļ Ų„Ų… ŲŠØšØŦØ¨Ų†ŲŠ</string>
<string name="revanced_ryd_shorts_title">ØšØąØļ Ų„Ų… ŲŠØšØŦŲ†ŲŠ ؁؊ Ų…Ų‚Ø§ØˇØš Shorts</string>
<string name="revanced_ryd_shorts_summary_on">؊ØĒŲ… ØšØąØļ Ų„Ų… ŲŠØšØŦŲ†ŲŠ ؁؊ Ų…Ų‚Ø§ØˇØš Shorts</string>
<string name="revanced_ryd_shorts_summary_on_disclaimer">ØĨØ¨Ø¯Ø§ØĄØ§ØĒ Ų„Ų… ŲŠØšØŦØ¨Ų†ŲŠ Ø§Ų„ØĒ؊ ØĒØ¸Ų‡Øą ØšŲ„Ų‰ ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ Shorts\n\nØ§Ų„ØĒŲ‚ŲŠŲŠØ¯: Ų‚Ø¯ Ų„Ø§ ØĒØ¸Ų‡Øą ØĨØ¨Ø¯Ø§ØĄØ§ØĒ Ų„Ų… ŲŠØšØŦØ¨Ų†ŲŠ ؁؊ ؈ØļØš Ø§Ų„ØĒØĩŲØ­ Ø§Ų„Ų…ØĒØŽŲŲŠ</string>
<string name="revanced_ryd_shorts_summary_on_disclaimer">"ØĨØ¨Ø¯Ø§ØĄØ§ØĒ Ų„Ų… ŲŠØšØŦØ¨Ų†ŲŠ Ø§Ų„ØĒ؊ ØĒØ¸Ų‡Øą ØšŲ„Ų‰ ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ Shorts
Ø§Ų„ØĒŲ‚ŲŠŲŠØ¯: Ų‚Ø¯ Ų„Ø§ ØĒØ¸Ų‡Øą ØĨØ¨Ø¯Ø§ØĄØ§ØĒ Ų„Ų… ŲŠØšØŦØ¨Ų†ŲŠ ؁؊ ؈ØļØš Ø§Ų„ØĒØĩŲØ­ Ø§Ų„Ų…ØĒØŽŲŲŠ"</string>
<string name="revanced_ryd_shorts_summary_off">ØĒŲ… ØĨØŽŲØ§ØĄ Ų„Ų… ŲŠØšØŦŲ†ŲŠ ؁؊ Ų…Ų‚Ø§ØˇØš Shorts</string>
<string name="revanced_ryd_dislike_percentage_title">Ų„Ų… ŲŠØšØŦØ¨Ų†ŲŠ ŲƒŲ€Ų€ Ų†ØŗØ¨ØŠ Ų…ØĻŲˆŲŠØŠ</string>
<string name="revanced_ryd_dislike_percentage_summary_on">ŲŠØšØąØļ ؚدد Ų„Ų… ŲŠØšØŦØ¨Ų†ŲŠ ŲƒŲ€ Ų†ØŗØ¨ØŠ Ų…ØĻŲˆŲŠØŠ</string>
@@ -751,7 +787,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_ryd_statistics_getFetchCallCount_zero_summary">Ų„Ų… ؊ØĒŲ… ØĨØŦØąØ§ØĄ اØĒØĩØ§Ų„Ø§ØĒ Ø§Ų„Ø´Ø¨ŲƒØŠ</string>
<string name="revanced_ryd_statistics_getFetchCallCount_non_zero_summary">%d اØĒØĩØ§Ų„Ø§ØĒ Ø´Ø¨ŲƒŲŠØŠ ØŖØŦØąŲŠØĒ</string>
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_title">API ØŦŲ„Ø¨ Ø§Ų„ØŖØĩŲˆØ§ØĒ، ؚدد Ø§Ų„Ų…Ų‡Ų„Ø§ØĒ</string>
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_zero_summary">Ų„Ų… ØĒŲ†ØĒŲ‡ŲŠ Ų…Ų‡Ų„ØŠ Ø§Ų„Ų…ŲƒØ§Ų„Ų…Ø§ØĒ Ø§Ų„Ø´Ø¨ŲƒŲŠØŠ</string>
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_zero_summary">Ų„Ų… ØĒŲ†ØĒŲ‡ŲŠ Ų…Ų‡Ų„ØŠ Ø§Ų„Ø§ØĒØĩØ§Ų„Ø§ØĒ Ø§Ų„Ø´Ø¨ŲƒŲŠØŠ</string>
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_non_zero_summary">اØĒØĩØ§Ų„Ø§ØĒ Ø´Ø¨ŲƒŲŠØŠ Ø§Ų†ØĒŲ‡ØĒ Ų…Ų‡Ų„ØĒŲ‡Ø§ %d</string>
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_title">Ø­Ø¯ŲˆØ¯ Ų…ØšØ¯Ų„ ØšŲ…ŲŠŲ„ API</string>
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_zero_summary">Ų„Ø§ ØĒ؈ØŦد Ø­Ø¯ŲˆØ¯ Ų„Ų…ØšØ¯Ų„ Ø§Ų„ØšŲ…ŲŠŲ„</string>
@@ -769,13 +805,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Ų…ØĩØēØąØ§ØĒ Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ‚Ø¯Ų… Ų…ØĒŲˆØŗØˇØŠ Ø§Ų„ØŦŲˆØ¯ØŠ</string>
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">Ų…ØĩØēØąØ§ØĒ Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ‚Ø¯Ų… Ø¨Ų…Ų„ØĄ Ø§Ų„Ø´Ø§Ø´ØŠ ØšØ§Ų„ŲŠØŠ Ø§Ų„ØŦŲˆØ¯ØŠ</string>
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">Ų…ØĩØēØąØ§ØĒ Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ‚Ø¯Ų… Ø¨Ų…Ų„ØĄ Ø§Ų„Ø´Ø§Ø´ØŠ Ų…ØĒŲˆØŗØˇØŠ Ø§Ų„ØŦŲˆØ¯ØŠ</string>
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">ØŗŲŠØ¤Ø¯ŲŠ Ų‡Ø°Ø§ ØŖŲŠØļا ØĨŲ„Ų‰ Ø§ØŗØĒؚاد؊ Ø§Ų„Ų…ØĩØēØąØ§ØĒ ØšŲ„Ų‰ Ø§Ų„Ø¨ØĢ Ø§Ų„Ų…Ø¨Ø§Ø´Øą Ø§Ų„Ø°ŲŠ Ų„Ø§ ŲŠØ­ØĒ؈؊ ØšŲ„Ų‰ Ų…ØĩØēØąØ§ØĒ Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ‚Ø¯Ų….\n\nŲ…ØĩØēØąØ§ØĒ Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ‚Ø¯Ų… ØŗŲˆŲ ØĒØŗØĒØŽØ¯Ų… Ų†ŲØŗ ØŦŲˆØ¯ØŠ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø§Ų„Ø­Ø§Ų„ŲŠ.\n\nØĒØšŲ…Ų„ Ų‡Ø°Ų‡ Ø§Ų„Ų…ŲŠØ˛ØŠ Ø¨Ø´ŲƒŲ„ ØŖŲØļŲ„ Ų…Øš ØŦŲˆØ¯ØŠ ŲŲŠØ¯ŲŠŲˆ 720p ØŖŲˆ ØŖŲ‚Ų„ ŲˆØšŲ†Ø¯ Ø§ØŗØĒØŽØ¯Ø§Ų… اØĒØĩØ§Ų„ ØĨŲ†ØĒØąŲ†ØĒ ØŗØąŲŠØš ØŦØ¯Ø§Ų‹.</string>
<string name="revanced_restore_old_seekbar_thumbnails_title">Ø§ØŗØĒؚاد؊ Ų…ØĩØēØąØ§ØĒ Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ‚Ø¯Ų… Ø§Ų„Ų‚Ø¯ŲŠŲ…</string>
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"ØŗŲŠØ¤Ø¯ŲŠ Ų‡Ø°Ø§ ØŖŲŠØļا ØĨŲ„Ų‰ Ø§ØŗØĒؚاد؊ Ø§Ų„Ų…ØĩØēØąØ§ØĒ ØšŲ„Ų‰ Ø§Ų„Ø¨ØĢ Ø§Ų„Ų…Ø¨Ø§Ø´Øą Ø§Ų„Ø°ŲŠ Ų„Ø§ ŲŠØ­ØĒ؈؊ ØšŲ„Ų‰ Ų…ØĩØēØąØ§ØĒ Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ‚Ø¯Ų….
Ų…ØĩØēØąØ§ØĒ Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ‚Ø¯Ų… ØŗŲˆŲ ØĒØŗØĒØŽØ¯Ų… Ų†ŲØŗ ØŦŲˆØ¯ØŠ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø§Ų„Ø­Ø§Ų„ŲŠ.
ØĒØšŲ…Ų„ Ų‡Ø°Ų‡ Ø§Ų„Ų…ŲŠØ˛ØŠ Ø¨Ø´ŲƒŲ„ ØŖŲØļŲ„ Ų…Øš ØŦŲˆØ¯ØŠ ŲŲŠØ¯ŲŠŲˆ 720p ØŖŲˆ ØŖŲ‚Ų„ ŲˆØšŲ†Ø¯ Ø§ØŗØĒØŽØ¯Ø§Ų… اØĒØĩØ§Ų„ ØĨŲ†ØĒØąŲ†ØĒ ØŗØąŲŠØš ØŦØ¯Ø§Ų‹."</string>
<string name="revanced_restore_old_seekbar_thumbnails_title">Ø§ØŗØĒؚاد؊ Ų…ØĩØēØąØ§ØĒ Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ‚Ø¯Ų… Ø§Ų„Ų‚Ø¯ŲŠŲ…ØŠ</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Ų…ØĩØēØąØ§ØĒ Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ‚Ø¯Ų… ØŗØĒØ¸Ų‡Øą ŲŲˆŲ‚ Ø´ØąŲŠØˇ ØĒŲ‚Ø¯Ų… Ø§Ų„ŲŲŠØ¯ŲŠŲˆ</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Ų…ØĩØēØąØ§ØĒ Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ‚Ø¯Ų… ØŗØĒØ¸Ų‡Øą ؁؊ Ų…Ų„ØĄ Ø§Ų„Ø´Ø§Ø´ØŠ</string>
</patch>
<patch id="layout.sponsorblock.sponsorBlockResourcePatch">
<string name="revanced_sb_enable_sb">ØĒŲ…ŲƒŲŠŲ† Ų…Ø§Ų†ŲØš Ø§Ų„ØąŲØšŲŽØ§ØŠ SponsorBlock</string>
<string name="revanced_sb_enable_sb">ØĒŲ…ŲƒŲŠŲ† SponsorBlock</string>
<string name="revanced_sb_enable_sb_sum">Ų…Ø§Ų†ŲØš Ø§Ų„ØąŲØšŲŽØ§ØŠ Ų‡Ųˆ Ų†Ø¸Ø§Ų… ØŦŲ…Ø§ØšŲŠ Ų„ØĒØŽØˇŲŠ Ø§Ų„ØŖØŦØ˛Ø§ØĄ Ø§Ų„Ų…ŲŲ…ŲŲ„Ų‘ŲŽØŠ ؁؊ Ų…Ų‚Ø§ØˇØš YouTube</string>
<string name="revanced_sb_appearance_category">Ø§Ų„Ų…Ø¸Ų‡Øą</string>
<string name="revanced_sb_enable_voting">ØšØąØļ Ø˛Øą Ø§Ų„ØĒØĩ؈؊ØĒ</string>
@@ -832,12 +872,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_settings_import_successful">ØĒŲ… Ø§ØŗØĒŲŠØąØ§Ø¯ Ø§Ų„ØĨؚداداØĒ Ø¨Ų†ØŦاح</string>
<string name="revanced_sb_settings_import_failed">ŲØ´Ų„ Ø§ØŗØĒŲŠØąØ§Ø¯: %s</string>
<string name="revanced_sb_settings_export_failed">ŲØ´Ų„ ØĒØĩØ¯ŲŠØą: %s</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning">ØĒØ­ØĒ؈؊ ØĨؚداداØĒ؃ ØšŲ„Ų‰ Ų…ØšØąŲ Ų…ØŗØĒØŽØ¯Ų… ؎اØĩ Ų„Ų€ SponsorBlock.\n\n Ų…ØšØąŲ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų… Ø§Ų„ØŽØ§Øĩ Ø¨Ųƒ ŲŠØ´Ø¨Ų‡ ŲƒŲ„Ų…ØŠ Ø§Ų„Ų…ØąŲˆØą ؈؊ØŦب ØšØ¯Ų… Ų…Ø´Ø§ØąŲƒØĒŲ‡ ØŖØ¨Ø¯Ų‹Ø§.\n</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning">"ØĒØ­ØĒ؈؊ ØĨؚداداØĒ؃ ØšŲ„Ų‰ Ų…ØšØąŲ Ų…ØŗØĒØŽØ¯Ų… ؎اØĩ Ų„Ų€ SponsorBlock.
Ų…ØšØąŲ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų… Ø§Ų„ØŽØ§Øĩ Ø¨Ųƒ ŲŠØ´Ø¨Ų‡ ŲƒŲ„Ų…ØŠ Ø§Ų„Ų…ØąŲˆØą ؈؊ØŦب ØšØ¯Ų… Ų…Ø´Ø§ØąŲƒØĒŲ‡ ØŖØ¨Ø¯Ų‹Ø§.
"</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">Ų„Ø§ ØĒØšØąØļ Ų…ØąØŠ ØŖØŽØąŲ‰</string>
<string name="revanced_sb_diff_segments">ØĒØēŲŠŲŠØą ØŗŲ„ŲˆŲƒ Ø§Ų„Ų…Ų‚ØˇØš</string>
<string name="revanced_sb_segments_sponsor">Ø§Ų„ØąØ§ØšŲŠ</string>
<string name="revanced_sb_segments_sponsor_sum">Ø§Ų„ØĒØąŲˆŲŠØŦ Ø§Ų„Ų…Ø¯ŲŲˆØš Ø§Ų„ØŖØŦØąØŒ ŲˆØ§Ų„ØĨØ­Ø§Ų„Ø§ØĒ Ø§Ų„Ų…Ø¯ŲŲˆØšØŠ Ø§Ų„ØŖØŦØą ŲˆØ§Ų„ØĨØšŲ„Ø§Ų†Ø§ØĒ Ø§Ų„Ų…Ø¨Ø§Ø´ØąØŠ. Ų„ŲŠØŗ Ų„Ų„ØĒØąŲˆŲŠØŦ Ø§Ų„Ø°Ø§ØĒ؊ ØŖŲˆ Ų„ØĩØąØ§ØšØ§ØĒ Ų…ØŦØ§Ų†ŲŠØŠ Ų„Ų„Ų‚ØļØ§ŲŠØ§/Ø§Ų„Ų…Ø¨Ø¯ØšŲŠŲ†/Ø§Ų„Ų…ŲˆØ§Ų‚Øš Ø§Ų„ØĨŲ„ŲƒØĒØąŲˆŲ†ŲŠØŠ/Ø§Ų„Ų…Ų†ØĒØŦاØĒ Ø§Ų„ØĒ؊ ŲŠØ­Ø¨ŲˆŲ† Ø§Ų„Ø­ØĩŲˆŲ„ ØšŲ„ŲŠŲ‡Ø§</string>
<string name="revanced_sb_segments_selfpromo">ØĒØąŲˆŲŠØŦ Ø´ØŽØĩ؊ / ØēŲŠØą Ų…Ø¯ŲŲˆØš Ø§Ų„ØŖØŦØą</string>
<string name="revanced_sb_segments_selfpromo">ØĒØąŲˆŲŠØŦ Ø´ØŽØĩ؊/ØēŲŠØą Ų…Ø¯ŲŲˆØš Ø§Ų„ØŖØŦØą</string>
<string name="revanced_sb_segments_selfpromo_sum">Ø´Ø¨ŲŠŲ‡ØŠ Ø¨Ų€ \"Ø§Ų„ØąØ§ØšŲŠ\" Ø¨Ø§ØŗØĒØĢŲ†Ø§ØĄ Ų…Ø§ ؊ØĒØšŲ„Ų‚ Ø¨Ø§Ų„ØĨØšŲ„Ø§Ų†Ø§ØĒ ØēŲŠØą Ø§Ų„Ų…Ø¯ŲŲˆØšØŠ Ø§Ų„ØŖØŦØą ØŖŲˆ Ø§Ų„Ø°Ø§ØĒŲŠØŠ. ŲˆŲŠØ´Ų…Ų„ Ø°Ų„Ųƒ ØŖŲ‚ØŗØ§Ų… ØšŲ† Ø§Ų„ØŗŲ„Øš ØŖŲˆ Ø§Ų„ØĒØ¨ØąØšØ§ØĒ ØŖŲˆ Ø§Ų„Ų…ØšŲ„ŲˆŲ…Ø§ØĒ Ø§Ų„Ų…ØĒØšŲ„Ų‚ØŠ Ø¨Ų…Ų† ØĒØšØ§ŲˆŲ†ŲˆØ§ Ų…Øš Ų†Ø§Ø´Øą Ø§Ų„Ų…Ø­ØĒŲˆŲ‰</string>
<string name="revanced_sb_segments_interaction">ØĒØ°ŲƒŲŠØą Ø¨Ø§Ų„ØĒŲØ§ØšŲ„ (اشØĒØąØ§Ųƒ)</string>
<string name="revanced_sb_segments_interaction_sum">ØĒØ°ŲƒŲŠØą Ų‚ØĩŲŠØą Ų„Ų„ØĨØšØŦاب ØŖŲˆ Ø§Ų„Ø§Ø´ØĒØąØ§Ųƒ ØŖŲˆ Ø§Ų„Ų…ØĒابؚ؊ ؁؊ Ų…Ų†ØĒØĩ؁ Ø§Ų„Ų…Ø­ØĒŲˆŲ‰. ØĨذا ŲƒØ§Ų†ØĒ ØˇŲˆŲŠŲ„ØŠ ØŖŲˆ ØĒØĒØšŲ„Ų‚ Ø¨Ø´ŲŠØĄ Ų…Ø­Ø¯Ø¯ØŒ ؁؊ØŦب ØŖŲ† ØĒŲƒŲˆŲ† ؎اØļؚ؊ Ų„Ų„ØĒØąŲˆŲŠØŦ Ø§Ų„Ø´ØŽØĩ؊ Ø¨Ø¯Ų„Ø§Ų‹ Ų…Ų† Ø°Ų„Ųƒ</string>
@@ -892,9 +935,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_submit_failed_invalid">ØēŲŠØą Ų‚Ø§Ø¯Øą ØšŲ„Ų‰ ØĨØąØŗØ§Ų„ Ø§Ų„Ų…Ų‚ØˇØš: Ø§Ų„Ø­Ø§Ų„ØŠ: %s</string>
<string name="revanced_sb_submit_failed_timeout">SponsorBlock Ų…ØĒŲˆŲ‚Ų Ų…Ø¤Ų‚ØĒŲ‹Ø§</string>
<string name="revanced_sb_submit_failed_unknown_error">ØēŲŠØą Ų‚Ø§Ø¯Øą ØšŲ„Ų‰ ØĨØąØŗØ§Ų„ Ø§Ų„Ų…Ų‚ØˇØš (Ø§Ų„Ø­Ø§Ų„ØŠ: %1$d %2$s)</string>
<string name="revanced_sb_submit_failed_rate_limit">Ų„Ø§ ŲŠŲ…ŲƒŲ† ØĨØąØŗØ§Ų„ Ø§Ų„Ų…Ų‚ØˇØš.\n ØŦØ§ØąŲ Ø§Ų„Ø­Ø¯ Ų…Ų† Ų…ØšØ¯Ų„ ØĨØąØŗØ§Ų„Ųƒ (ؚدد ŲƒØ¨ŲŠØą ØŦدا Ų…Ų† Ų†ŲØŗ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų… ØŖŲˆ IP)</string>
<string name="revanced_sb_submit_failed_rate_limit">Ų„Ø§ ŲŠŲ…ŲƒŲ† ØĨØąØŗØ§Ų„ Ø§Ų„Ų…Ų‚ØˇØš. ØŦØ§ØąŲ Ø§Ų„Ø­Ø¯ Ų…Ų† Ų…ØšØ¯Ų„ ØĨØąØŗØ§Ų„Ųƒ (ؚدد ŲƒØ¨ŲŠØą ØŦØ¯Ų‹Ø§ Ų…Ų† Ų†ŲØŗ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų… ØŖŲˆ IP)</string>
<string name="revanced_sb_submit_failed_forbidden">Ų„Ø§ ŲŠŲ…ŲƒŲ† ØĨØąØŗØ§Ų„ Ø§Ų„Ų…Ų‚ØˇØš: %s</string>
<string name="revanced_sb_submit_failed_duplicate">Ų„Ø§ ŲŠŲ…ŲƒŲ† ØĨØąØŗØ§Ų„ Ų‡Ø°Ø§ Ø§Ų„Ų…Ų‚ØˇØš.\nŲ…ŲˆØŦŲˆØ¯ Ø¨Ø§Ų„ŲØšŲ„</string>
<string name="revanced_sb_submit_failed_duplicate">"Ų„Ø§ ŲŠŲ…ŲƒŲ† ØĨØąØŗØ§Ų„ Ų‡Ø°Ø§ Ø§Ų„Ų…Ų‚ØˇØš.
Ų…ŲˆØŦŲˆØ¯ Ø¨Ø§Ų„ŲØšŲ„"</string>
<string name="revanced_sb_submit_succeeded">ØĒŲ… ØĨØąØŗØ§Ų„ Ø§Ų„Ų…Ų‚ØˇØš Ø¨Ų†ØŦاح</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 ØēŲŠØą Ų…ØĒاح Ų…Ø¤Ų‚ØĒŲ‹Ø§ (Ø§Ų†ØĒŲ‡ØĒ Ų…Ų‡Ų„ØŠ API)</string>
@@ -909,7 +953,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_vote_no_segments">Ų„Ø§ ØĒ؈ØŦد Ų…Ų‚Ø§ØˇØš Ų„Ų„ØĒØĩ؈؊ØĒ ØšŲ„ŲŠŲ‡Ø§</string>
<string name="revanced_sb_new_segment_choose_category">ا؎ØĒŲŠØ§Øą ؁ØĻØŠ Ø§Ų„Ų…Ų‚ØˇØš</string>
<string name="revanced_sb_new_segment_disabled_category">Ø§Ų„ŲØĻØŠ Ų…ØšØˇŲ„ØŠ ؁؊ Ø§Ų„ØĨؚداداØĒ. ØĒŲ…ŲƒŲŠŲ† Ø§Ų„ŲØĻØŠ Ų„Ų„ØĨØąØŗØ§Ų„.</string>
<string name="revanced_sb_new_segment_title">Ų…Ų‚ØˇØš Ų…Ø§Ų†ŲØš ØąŲØšŲŽØ§ØŠ ØŦØ¯ŲŠØ¯</string>
<string name="revanced_sb_new_segment_title">Ų…Ų‚ØˇØš SponsorBlock ØŦØ¯ŲŠØ¯</string>
<string name="revanced_sb_new_segment_mark_time_as_question">ØĒØšŲŠŲŠŲ† %s ŲƒØ¨Ø¯Ø§ŲŠØŠ ØŖŲˆ Ų†Ų‡Ø§ŲŠØŠ Ų„Ų…Ų‚ØˇØš ØŦØ¯ŲŠØ¯ØŸ</string>
<string name="revanced_sb_new_segment_mark_start">Ø§Ų„Ø¨Ø¯Ø§ŲŠØŠ</string>
<string name="revanced_sb_new_segment_mark_end">Ø§Ų„Ų†Ų‡Ø§ŲŠØŠ</string>
@@ -917,7 +961,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_time_start">Ø§Ų„ŲˆŲ‚ØĒ Ø§Ų„Ø°ŲŠ ŲŠØ¨Ø¯ØŖ ØšŲ†Ø¯Ų‡ Ø§Ų„Ų…Ų‚ØˇØš</string>
<string name="revanced_sb_new_segment_time_end">Ø§Ų„ŲˆŲ‚ØĒ Ø§Ų„Ø°ŲŠ ŲŠŲ†ØĒŲ‡ŲŠ ØšŲ†Ø¯Ų‡ Ø§Ų„Ų…Ų‚ØˇØš</string>
<string name="revanced_sb_new_segment_confirm_title">Ų‡Ų„ Ø§Ų„ØŖŲˆŲ‚Ø§ØĒ ØĩØ­ŲŠØ­ØŠØŸ</string>
<string name="revanced_sb_new_segment_confirm_content">Ø§Ų„Ų…Ų‚ØˇØš Ų…Ų†\n\n%1$s\nto\n%2$s\n\n(%3$s)\n\nReady to ØŦØ§Ų‡Ø˛ Ų„Ų„ØĨØąØŗØ§Ų„ØŸ</string>
<string name="revanced_sb_new_segment_confirm_content">"Ø§Ų„Ų…Ų‚ØˇØš Ų…Ų†
%1$s
ØĨŲ„Ų‰
%2$s
(%3$s)
Ų‡Ų„ ØŖŲ†ØĒ Ų…ØŗØĒؚد Ų„Ų„ØĨØąØŗØ§Ų„ØŸ"</string>
<string name="revanced_sb_new_segment_start_is_before_end">؊ØŦب ØŖŲ† ØĒŲƒŲˆŲ† Ø§Ų„Ø¨Ø¯Ø§ŲŠØŠ Ų‚Ø¨Ų„ Ø§Ų„Ų†Ų‡Ø§ŲŠØŠ</string>
<string name="revanced_sb_new_segment_mark_locations_first">ØļØš ØšŲ„Ø§Ų…ØŠ ØšŲ„Ų‰ Ų…ŲˆŲ‚ØšŲŠŲ† ؁؊ Ø´ØąŲŠØˇ Ø§Ų„ŲˆŲ‚ØĒ ØŖŲˆŲ„Ų‹Ø§</string>
<string name="revanced_sb_new_segment_preview_segment_first">Ų…ØšØ§ŲŠŲ†ØŠ Ø§Ų„Ų…Ų‚ØˇØšØŒ ŲˆØ§Ų„ØĒØŖŲƒØ¯ Ų…Ų† ØĒØŽØˇŲŠŲ‡ Ø¨ØŗŲ„Ø§ØŗØŠ</string>
@@ -959,7 +1011,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_app_version_title">ØŽŲØ¯Ø§Øš ØĨØĩØ¯Ø§Øą Ø§Ų„ØĒØˇØ¨ŲŠŲ‚</string>
<string name="revanced_spoof_app_version_summary_on">ØĒŲ… ØĒØēŲŠŲŠØą اØĩØ¯Ø§Øą Ø§Ų„ØĒØˇØ¨ŲŠŲ‚</string>
<string name="revanced_spoof_app_version_summary_off">Ų„Ų… ؊ØĒŲ… ØĒØēŲŠŲŠØą اØĩØ¯Ø§Øą Ø§Ų„ØĒØˇØ¨ŲŠŲ‚</string>
<string name="revanced_spoof_app_version_user_dialog_message">ØŗŲŠØĒŲ… ØĒØēŲŠŲŠØą ØĨØĩØ¯Ø§Øą Ø§Ų„ØĒØˇØ¨ŲŠŲ‚ ØĨŲ„Ų‰ ØĨØĩØ¯Ø§Øą Ų‚Ø¯ŲŠŲ… Ų…Ų† YouTube.\n\nØŗŲŠØ¤Ø¯ŲŠ Ų‡Ø°Ø§ ØĨŲ„Ų‰ ØĒØēŲŠŲŠØą Ų…Ø¸Ų‡Øą ŲˆŲ…Ų…ŲŠØ˛Ø§ØĒ Ø§Ų„ØĒØˇØ¨ŲŠŲ‚ØŒ ŲˆŲ„ŲƒŲ† Ų‚Ø¯ ØĒحدØĢ ØĒØŖØĢŲŠØąØ§ØĒ ØŦØ§Ų†Ø¨ŲŠØŠ ØēŲŠØą Ų…ØšØąŲˆŲØŠ.\n\nØĨذا ØĒŲ… ØĨŲŠŲ‚Ø§Ų ØĒØ´ØēŲŠŲ„Ų‡ Ų„Ø§Ø­Ų‚Ø§ØŒ Ų…Ų† Ø§Ų„Ų…ØŗØĒØ­ØŗŲ† Ų…ØŗØ­ Ø¨ŲŠØ§Ų†Ø§ØĒ Ø§Ų„ØĒØˇØ¨ŲŠŲ‚ Ų„Ų…Ų†Øš Ø­Ø¯ŲˆØĢ ØŖØŽØˇØ§ØĄ ؁؊ ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų….</string>
<string name="revanced_spoof_app_version_user_dialog_message">"ØŗŲŠØĒŲ… ØĒØēŲŠŲŠØą ØĨØĩØ¯Ø§Øą Ø§Ų„ØĒØˇØ¨ŲŠŲ‚ ØĨŲ„Ų‰ ØĨØĩØ¯Ø§Øą Ų‚Ø¯ŲŠŲ… Ų…Ų† YouTube.
ØŗŲŠØ¤Ø¯ŲŠ Ų‡Ø°Ø§ ØĨŲ„Ų‰ ØĒØēŲŠŲŠØą Ų…Ø¸Ų‡Øą ŲˆŲ…Ų…ŲŠØ˛Ø§ØĒ Ø§Ų„ØĒØˇØ¨ŲŠŲ‚ØŒ ŲˆŲ„ŲƒŲ† Ų‚Ø¯ ØĒحدØĢ ØĒØŖØĢŲŠØąØ§ØĒ ØŦØ§Ų†Ø¨ŲŠØŠ ØēŲŠØą Ų…ØšØąŲˆŲØŠ.
ØĨذا ØĒŲ… ØĨŲŠŲ‚Ø§Ų ØĒØ´ØēŲŠŲ„Ų‡ Ų„Ø§Ø­Ų‚Ų‹Ø§ØŒ Ų…Ų† Ø§Ų„Ų…ØŗØĒØ­ØŗŲ† Ų…ØŗØ­ Ø¨ŲŠØ§Ų†Ø§ØĒ Ø§Ų„ØĒØˇØ¨ŲŠŲ‚ Ų„Ų…Ų†Øš Ø­Ø¯ŲˆØĢ ØŖØŽØˇØ§ØĄ ؁؊ ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų…."</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">Ø§Ų„Ų‡Ø¯Ų Ų…Ų† ØĒØēŲŠŲŠØą ØĨØĩØ¯Ø§Øą Ø§Ų„ØĒØˇØ¨ŲŠŲ‚</string>
@@ -1012,7 +1068,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_miniplayer_screen_summary">ØĒØēŲŠŲŠØą Ų†Ų…Øˇ Ø§Ų„Ų…Ø´ØēŲ„ Ø§Ų„Ų…ØĩØēØą Ø¯Ø§ØŽŲ„ Ø§Ų„ØĒØˇØ¨ŲŠŲ‚</string>
<string name="revanced_miniplayer_type_title">Ų†ŲˆØš Ø§Ų„Ų…Ø´ØēŲ„ Ø§Ų„Ų…ØĩØēØą</string>
<string name="revanced_miniplayer_type_entry_0">Ų…ØšØˇŲ‘Ų„</string>
<string name="revanced_miniplayer_type_entry_1">Ø§Ų„ØŖØĩŲ„ŲŠ</string>
<string name="revanced_miniplayer_type_entry_1">ØĨ؁ØĒØąØ§Øļ؊</string>
<string name="revanced_miniplayer_type_entry_2">Ø§Ų„Ø­Ø¯ Ø§Ų„ØŖØ¯Ų†Ų‰</string>
<string name="revanced_miniplayer_type_entry_3">Ø§Ų„ØŦŲ‡Ø§Ø˛ Ø§Ų„Ų„ŲˆØ­ŲŠ</string>
<string name="revanced_miniplayer_type_entry_4">Ø­Ø¯ŲŠØĢ 1</string>
@@ -1022,19 +1078,28 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_miniplayer_rounded_corners_summary_on">Ø§Ų„Ø˛ŲˆØ§ŲŠØ§ Ų…ØŗØĒØ¯ŲŠØąØŠ</string>
<string name="revanced_miniplayer_rounded_corners_summary_off">Ø§Ų„Ø˛ŲˆØ§ŲŠØ§ Ų…ØąØ¨ØšØŠ</string>
<string name="revanced_miniplayer_double_tap_action_title">ØĒŲ…ŲƒŲŠŲ† Ø§Ų„Ų†Ų‚Øą Ø§Ų„Ų…Ø˛Ø¯ŲˆØŦ ŲˆØ§Ų„ØļØēØˇ Ų„ØĒØēŲŠŲŠØą Ø§Ų„Ø­ØŦŲ…</string>
<string name="revanced_miniplayer_double_tap_action_summary_on">ØĒŲ… ØĒŲ…ŲƒŲŠŲ† ØĨØŦØąØ§ØĄ Ø§Ų„ØļØēØˇ Ø§Ų„Ų…Ø˛Ø¯ŲˆØŦ ŲˆØ§Ų„ØļØēØˇ Ų„ØĒØēŲŠŲŠØą Ø§Ų„Ø­ØŦŲ…\n\nâ€ĸ Ø§Ų„Ų†Ų‚Øą Ø§Ų„Ų…Ø˛Ø¯ŲˆØŦ Ų„Ø˛ŲŠØ§Ø¯ØŠ Ø­ØŦŲ… Ø§Ų„Ų…Ø´ØēŲ„ Ø§Ų„Ų…ØĩØēØą\nâ€ĸ Ø§Ų„Ų†Ų‚Øą Ø§Ų„Ų…Ø˛Ø¯ŲˆØŦ Ų…ØąØŠ ØŖØŽØąŲ‰ Ų„Ø§ØŗØĒؚاد؊ Ø§Ų„Ø­ØŦŲ… Ø§Ų„ØŖØĩŲ„ŲŠ</string>
<string name="revanced_miniplayer_double_tap_action_summary_on">"ØĒŲ… ØĒŲ…ŲƒŲŠŲ† ØĨØŦØąØ§ØĄ Ø§Ų„ØļØēØˇ Ø§Ų„Ų…Ø˛Ø¯ŲˆØŦ ŲˆØ§Ų„ØļØēØˇ Ų„ØĒØēŲŠŲŠØą Ø§Ų„Ø­ØŦŲ…
â€ĸ Ø§Ų„Ų†Ų‚Øą Ø§Ų„Ų…Ø˛Ø¯ŲˆØŦ Ų„Ø˛ŲŠØ§Ø¯ØŠ Ø­ØŦŲ… Ø§Ų„Ų…Ø´ØēŲ„ Ø§Ų„Ų…ØĩØēØą
â€ĸ Ø§Ų„Ų†Ų‚Øą Ø§Ų„Ų…Ø˛Ø¯ŲˆØŦ Ų…ØąØŠ ØŖØŽØąŲ‰ Ų„Ø§ØŗØĒؚاد؊ Ø§Ų„Ø­ØŦŲ… Ø§Ų„ØŖØĩŲ„ŲŠ"</string>
<string name="revanced_miniplayer_double_tap_action_summary_off">ØĨØŦØąØ§ØĄ Ø§Ų„Ų†Ų‚Øą Ø§Ų„Ų…Ø˛Ø¯ŲˆØŦ ŲˆØ§Ų„ØļØēØˇ Ų„ØĒØēŲŠŲŠØą Ø§Ų„Ø­ØŦŲ… Ų…ØšØˇŲ„</string>
<string name="revanced_miniplayer_drag_and_drop_title">ØĒŲ…ŲƒŲŠŲ† Ø§Ų„ØŗØ­Ø¨ ŲˆØ§Ų„ØĨŲŲ„Ø§ØĒ</string>
<string name="revanced_miniplayer_drag_and_drop_summary_on">Ø§Ų„ØŗØ­Ø¨ ŲˆØ§Ų„ØĨŲŲ„Ø§ØĒ Ų…ŲØšŲ„Ø§Ų†\n\nŲŠŲ…ŲƒŲ† ØŗØ­Ø¨ Ø§Ų„Ų…Ø´ØēŲ„ Ø§Ų„Ų…ØĩØēØą ØĨŲ„Ų‰ ØŖŲŠ Ø˛Ø§ŲˆŲŠØŠ Ų…Ų† Ø§Ų„Ø´Ø§Ø´ØŠ</string>
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Ø§Ų„ØŗØ­Ø¨ ŲˆØ§Ų„ØĨŲŲ„Ø§ØĒ Ų…ŲØšŲ„Ø§Ų†
ŲŠŲ…ŲƒŲ† ØŗØ­Ø¨ Ø§Ų„Ų…Ø´ØēŲ„ Ø§Ų„Ų…ØĩØēØą ØĨŲ„Ų‰ ØŖŲŠ Ø˛Ø§ŲˆŲŠØŠ Ų…Ų† Ø§Ų„Ø´Ø§Ø´ØŠ"</string>
<string name="revanced_miniplayer_drag_and_drop_summary_off">ØĒŲ… ØĒØšØˇŲŠŲ„ Ø§Ų„ØŗØ­Ø¨ ŲˆØ§Ų„ØĨŲŲ„Ø§ØĒ</string>
<string name="revanced_miniplayer_horizontal_drag_title">ØĒŲ…ŲƒŲŠŲ† ØĨŲŠŲ…Ø§ØĄØŠ Ø§Ų„ØŗØ­Ø¨ Ø§Ų„ØŖŲŲ‚ŲŠØŠ</string>
<string name="revanced_miniplayer_horizontal_drag_summary_on">ØĒŲ… ØĒŲ…ŲƒŲŠŲ† ØĨŲŠŲ…Ø§ØĄØŠ Ø§Ų„ØŗØ­Ø¨ Ø§Ų„ØŖŲŲ‚ŲŠØŠ\n\nŲŠŲ…ŲƒŲ† ØŗØ­Ø¨ Ø§Ų„Ų…Ø´ØēŲ„ Ø§Ų„Ų…ØĩØēØą ØŽØ§ØąØŦ Ø§Ų„Ø´Ø§Ø´ØŠ ØĨŲ„Ų‰ Ø§Ų„ŲŠØŗØ§Øą ØŖŲˆ Ø§Ų„ŲŠŲ…ŲŠŲ†</string>
<string name="revanced_miniplayer_horizontal_drag_summary_on">"ØĒŲ… ØĒŲ…ŲƒŲŠŲ† ØĨŲŠŲ…Ø§ØĄØŠ Ø§Ų„ØŗØ­Ø¨ Ø§Ų„ØŖŲŲ‚ŲŠØŠ
ŲŠŲ…ŲƒŲ† ØŗØ­Ø¨ Ø§Ų„Ų…Ø´ØēŲ„ Ø§Ų„Ų…ØĩØēØą ØŽØ§ØąØŦ Ø§Ų„Ø´Ø§Ø´ØŠ ØĨŲ„Ų‰ Ø§Ų„ŲŠØŗØ§Øą ØŖŲˆ Ø§Ų„ŲŠŲ…ŲŠŲ†"</string>
<string name="revanced_miniplayer_horizontal_drag_summary_off">ØĒŲ… ØĒØšØˇŲŠŲ„ ØĨŲŠŲ…Ø§ØĄØŠ Ø§Ų„ØŗØ­Ø¨ Ø§Ų„ØŖŲŲ‚ŲŠØŠ</string>
<string name="revanced_miniplayer_hide_expand_close_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„ØĨØēŲ„Ø§Ų‚</string>
<string name="revanced_miniplayer_hide_expand_close_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„ØĨØēŲ„Ø§Ų‚</string>
<string name="revanced_miniplayer_hide_expand_close_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„ØĨØēŲ„Ø§Ų‚</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_title">ØĨØŽŲØ§ØĄ ØŖØ˛ØąØ§Øą Ø§Ų„ØĒŲˆØŗŲŠØš ŲˆØ§Ų„ØĨØēŲ„Ø§Ų‚</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø§Ų„ØŖØ˛ØąØ§Øą\n\nŲ…ØąØą Ų„Ų„ØĒŲˆØŗŲŠØš ØŖŲˆ Ø§Ų„ØĨØēŲ„Ø§Ų‚</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"ØĒŲ… ØĨØŽŲØ§ØĄ Ø§Ų„ØŖØ˛ØąØ§Øą
Ų…ØąØą Ų„Ų„ØĒŲˆØŗŲŠØš ØŖŲˆ Ø§Ų„ØĨØēŲ„Ø§Ų‚"</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">؊ØĒŲ… ØšØąØļ ØŖØ˛ØąØ§Øą Ø§Ų„ØĒŲˆØŗŲŠØš ŲˆØ§Ų„ØĨØēŲ„Ø§Ų‚</string>
<string name="revanced_miniplayer_hide_subtext_title">ØĨØŽŲØ§ØĄ Ø§Ų„Ų†Øĩ؈Øĩ Ø§Ų„ŲØąØšŲŠØŠ</string>
<string name="revanced_miniplayer_hide_subtext_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø§Ų„Ų†Øĩ؈Øĩ Ø§Ų„ŲØąØšŲŠØŠ</string>
@@ -1065,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">ØĒØŦØ§ŲˆØ˛ Ų‚ŲŠŲˆØ¯ Ų…Ų†ØˇŲ‚ØŠ Ø§Ų„ØĩŲˆØąØŠ</string>
<string name="revanced_bypass_image_region_restrictions_summary_on">Ø§ØŗØĒØŽØ¯Ø§Ų… Ų…Øļ؊؁ Ø§Ų„ØĩŲˆØąØŠ yt4.ggpht.com</string>
<string name="revanced_bypass_image_region_restrictions_summary_off">Ø§ØŗØĒØŽØ¯Ø§Ų… Ų…Øļ؊؁ Ø§Ų„ØĩŲˆØą Ø§Ų„ØŖØĩŲ„ŲŠ\n\nØĒŲ…ŲƒŲŠŲ† Ų‡Ø°Ø§ ŲŠŲ…ŲƒŲ† ØĨØĩŲ„Ø§Ø­ Ø§Ų„ØĩŲˆØą Ø§Ų„Ų…ŲŲ‚ŲˆØ¯ØŠ Ø§Ų„ØĒ؊ ؊ØĒŲ… Ø­Ø¸ØąŲ‡Ø§ ؁؊ بؚØļ Ø§Ų„Ų…Ų†Ø§ØˇŲ‚</string>
<string name="revanced_bypass_image_region_restrictions_summary_off">"Ø§ØŗØĒØŽØ¯Ø§Ų… Ų…Øļ؊؁ Ø§Ų„ØĩŲˆØą Ø§Ų„ØŖØĩŲ„ŲŠ
ØĒŲ…ŲƒŲŠŲ† Ų‡Ø°Ø§ ŲŠŲ…ŲƒŲ† ØĨØĩŲ„Ø§Ø­ Ø§Ų„ØĩŲˆØą Ø§Ų„Ų…ŲŲ‚ŲˆØ¯ØŠ Ø§Ų„ØĒ؊ ؊ØĒŲ… Ø­Ø¸ØąŲ‡Ø§ ؁؊ بؚØļ Ø§Ų„Ų…Ų†Ø§ØˇŲ‚"</string>
</patch>
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
@@ -1080,12 +1147,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow &amp; Ø§Ų„Ų…ØĩŲ‘ØēØąØ§ØĒ Ø§Ų„ØŖØĩŲ„ŲŠØŠ</string>
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow &amp; Ø§Ų„Ų„Ų‚ØˇØ§ØĒ Ø§Ų„ØĢابØĒØŠ</string>
<string name="revanced_alt_thumbnail_options_entry_4">Ø§Ų„Ų„Ų‚ØˇØ§ØĒ Ø§Ų„ØĢابØĒØŠ</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">؊؈؁ DeArrow Ų…ØĩØēØąØ§ØĒ ŲŲŠØ¯ŲŠŲˆ Ų…Ų† Ų…ØĩØ§Ø¯Øą ØŦŲ…Ø§ØšŲŠØŠ Ų„ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ YouTube. Ų‡Ø°Ų‡ Ø§Ų„Ų…ØĩØēØąØ§ØĒ ØēØ§Ų„Ø¨Ø§ Ų…Ø§ ØĒŲƒŲˆŲ† ØŖŲƒØĢØą ØĩŲ„ØŠ Ų…Ų† ØĒŲ„Ųƒ Ø§Ų„Ų…Ų‚Ø¯Ų…ØŠ Ų…Ų† YouTube\n\nØĨذا ØĒŲ… ØĒŲØšŲŠŲ„Ų‡Ø§ØŒ ØŗŲŠØĒŲ… ØĨØąØŗØ§Ų„ ØąŲˆØ§Ø¨Øˇ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ ØĨŲ„Ų‰ ØŽØ§Ø¯Ų… API ŲˆŲ„Ų† ؊ØĒŲ… ØĨØąØŗØ§Ų„ ØŖŲŠ Ø¨ŲŠØ§Ų†Ø§ØĒ ØŖØŽØąŲ‰. ØĨذا ŲƒØ§Ų† Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ų„Ø§ ŲŠØ­ØĒ؈؊ ØšŲ„Ų‰ Ų…ØĩØēØąØ§ØĒ DArrow ، ØŗŲŠØĒŲ… ØšØąØļ Ø§Ų„Ų…Ų‚Ø§ØˇØš Ø§Ų„ØŖØĩŲ„ŲŠØŠ ØŖŲˆ Ø§Ų„Ų„Ų‚ØˇØ§ØĒ Ø§Ų„ØĢابØĒØŠ\n\nاØļØēØˇ Ų‡Ų†Ø§ Ų„Ų…ØšØąŲØŠ Ø§Ų„Ų…Ø˛ŲŠØ¯ ØšŲ† DArrow</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">"ŲŠŲˆŲØą DeArrow Ų…ØĩØēØąØ§ØĒ ŲŲŠØ¯ŲŠŲˆ Ų…Ų† Ų…ØĩØ§Ø¯Øą ØŦŲ…Ø§ØšŲŠØŠ Ų„ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ YouTube. Ų‡Ø°Ų‡ Ø§Ų„Ų…ØĩØēØąØ§ØĒ ØēØ§Ų„Ø¨Ø§ Ų…Ø§ ØĒŲƒŲˆŲ† ØŖŲƒØĢØą ØĩŲ„ØŠ Ų…Ų† ØĒŲ„Ųƒ Ø§Ų„Ų…Ų‚Ø¯Ų…ØŠ Ų…Ų† YouTube
ØĨذا ØĒŲ… ØĒŲØšŲŠŲ„Ų‡Ø§ØŒ ØŗŲŠØĒŲ… ØĨØąØŗØ§Ų„ ØąŲˆØ§Ø¨Øˇ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ ØĨŲ„Ų‰ ØŽØ§Ø¯Ų… API ŲˆŲ„Ų† ؊ØĒŲ… ØĨØąØŗØ§Ų„ ØŖŲŠ Ø¨ŲŠØ§Ų†Ø§ØĒ ØŖØŽØąŲ‰. ØĨذا ŲƒØ§Ų† Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ų„Ø§ ŲŠØ­ØĒ؈؊ ØšŲ„Ų‰ Ų…ØĩØēØąØ§ØĒ DArrow، ØŗŲŠØĒŲ… ØšØąØļ Ø§Ų„Ų…Ų‚Ø§ØˇØš Ø§Ų„ØŖØĩŲ„ŲŠØŠ ØŖŲˆ Ø§Ų„Ų„Ų‚ØˇØ§ØĒ Ø§Ų„ØĢابØĒØŠ
اØļØēØˇ Ų‡Ų†Ø§ Ų„Ų…ØšØąŲØŠ Ø§Ų„Ų…Ø˛ŲŠØ¯ ØšŲ† DArrow"</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">ØšØąØļ Ų…Ų„Ø§Ø­Ø¸ØŠ ØĨذا ŲƒØ§Ų† API ØēŲŠØą Ų…ØĒاح</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">؊ØĒŲ… ØšØąØļ Ų…Ų„Ø§Ø­Ø¸ØŠ ØĨذا ŲƒØ§Ų† DeArrow ØēŲŠØą Ų…ØĒŲˆŲØą</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Ų„Ø§ ؊ØĒŲ… ØšØąØļ Ų…Ų„Ø§Ø­Ø¸ØŠ ØĨذا ŲƒØ§Ų† DeArrow ØēŲŠØą Ų…ØĒŲˆŲØą</string>
<string name="revanced_alt_thumbnail_dearrow_api_url_title">DeArrow API endpoint</string>
<string name="revanced_alt_thumbnail_dearrow_api_url_summary">The URL of the DeArrow thumbnail cache endpointThe URL of the DeArrow thumbnail cache endpoint</string>
<string name="revanced_alt_thumbnail_dearrow_api_url_summary">The URL of the DeArrow thumbnail cache endpoint</string>
<string name="revanced_alt_thumbnail_stills_about_title">Ų„Ų‚ØˇØ§ØĒ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø§Ų„ØĢابØĒØŠ</string>
<string name="revanced_alt_thumbnail_stills_about_summary">؊ØĒŲ… Ø§Ų„ØĒŲ‚Ø§Øˇ Ø§Ų„Ų„Ų‚ØˇØ§ØĒ Ø§Ų„ØĢابØĒØŠ Ų…Ų† Ø¨Ø¯Ø§ŲŠØŠ/ŲˆØŗØˇ/Ų†Ų‡Ø§ŲŠØŠ ŲƒŲ„ ŲŲŠØ¯ŲŠŲˆ. Ų‡Ø°Ų‡ Ø§Ų„ØĩŲˆØą Ų…Ø¯Ų…ØŦØŠ ؁؊ YouTube ŲˆŲ„Ø§ ؊ØĒŲ… Ø§ØŗØĒØŽØ¯Ø§Ų… ØŖŲŠ ŲˆØ§ØŦŲ‡ØŠ Ø¨ØąŲ…ØŦØŠ ØĒØˇØ¨ŲŠŲ‚Ø§ØĒ ØŽØ§ØąØŦŲŠØŠ</string>
<string name="revanced_alt_thumbnail_stills_fast_title">Ø§ØŗØĒØŽØ¯Ų… Ø§Ų„Ų„Ų‚ØˇØ§ØĒ Ø§Ų„ØĢابØĒØŠ Ø§Ų„ØŗØąŲŠØšØŠ</string>
@@ -1119,8 +1190,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">Ų…Ø­Ø§ŲƒØ§ØŠ ØŖØ¨ØšØ§Ø¯ Ø§Ų„ØŦŲ‡Ø§Ø˛</string>
<string name="revanced_spoof_device_dimensions_summary_on">ØĒŲ… Ų…Ø­Ø§ŲƒØ§ØŠ ØŖØ¨ØšØ§Ø¯ Ø§Ų„ØŦŲ‡Ø§Ø˛\n\nŲ‚Ø¯ ؊ØĒŲ… ؁ØĒØ­ ؂؁؄ ØŦŲˆØ¯ØŠ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø§Ų„ØšØ§Ų„ŲŠØŠ ŲˆŲ„ŲƒŲ† Ų‚Ø¯ ØĒŲˆØ§ØŦŲ‡ ØĒŲ‚ØˇØšŲ‹Ø§ ؁؊ ØĒØ´ØēŲŠŲ„ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ ŲˆØšŲ…Øą Ø¨ØˇØ§ØąŲŠØŠ ØŖØŗŲˆØŖ ؈ØĒØŖØĢŲŠØąØ§ØĒ ØŦØ§Ų†Ø¨ŲŠØŠ ØēŲŠØą Ų…ØšØąŲˆŲØŠ</string>
<string name="revanced_spoof_device_dimensions_summary_off">ØŖØ¨ØšØ§Ø¯ Ø§Ų„ØŦŲ‡Ø§Ø˛ ØēŲŠØą Ų…Ø­Ø§ŲƒØ§ØŠ\n\nŲŠŲ…ŲƒŲ† ØŖŲ† ŲŠØ¤Ø¯ŲŠ ØĒŲØšŲŠŲ„ Ų‡Ø°Ø§ ØĨŲ„Ų‰ ؁ØĒØ­ ØŦŲˆØ¯ØŠ ØŖØšŲ„Ų‰ Ų„Ų„ŲŲŠØ¯ŲŠŲˆ</string>
<string name="revanced_spoof_device_dimensions_summary_on">"ØĒŲ… Ų…Ø­Ø§ŲƒØ§ØŠ ØŖØ¨ØšØ§Ø¯ Ø§Ų„ØŦŲ‡Ø§Ø˛
Ų‚Ø¯ ؊ØĒŲ… ؁ØĒØ­ ؂؁؄ ØŦŲˆØ¯ØŠ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø§Ų„ØšØ§Ų„ŲŠØŠ ŲˆŲ„ŲƒŲ† Ų‚Ø¯ ØĒŲˆØ§ØŦŲ‡ ØĒŲ‚ØˇØšŲ‹Ø§ ؁؊ ØĒØ´ØēŲŠŲ„ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ ŲˆØšŲ…Øą Ø¨ØˇØ§ØąŲŠØŠ ØŖØŗŲˆØŖ ؈ØĒØŖØĢŲŠØąØ§ØĒ ØŦØ§Ų†Ø¨ŲŠØŠ ØēŲŠØą Ų…ØšØąŲˆŲØŠ"</string>
<string name="revanced_spoof_device_dimensions_summary_off">"ØŖØ¨ØšØ§Ø¯ Ø§Ų„ØŦŲ‡Ø§Ø˛ ØēŲŠØą Ų…Ø­Ø§ŲƒØ§ØŠ
ŲŠŲ…ŲƒŲ† ØŖŲ† ŲŠØ¤Ø¯ŲŠ ØĒŲØšŲŠŲ„ Ų‡Ø°Ø§ ØĨŲ„Ų‰ ؁ØĒØ­ ØŦŲˆØ¯ØŠ ØŖØšŲ„Ų‰ Ų„Ų„ŲŲŠØ¯ŲŠŲˆ"</string>
<string name="revanced_spoof_device_dimensions_user_dialog_message">Ų‚Ø¯ ŲŠØ¤Ø¯ŲŠ ØĒŲ…ŲƒŲŠŲ† Ų‡Ø°Ø§ ØĨŲ„Ų‰ ØĒØ¨Ø§ØˇØ¤ ØĒØ´ØēŲŠŲ„ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ ؈ØĒØ¯Ų‡ŲˆØą ØšŲ…Øą Ø§Ų„Ø¨ØˇØ§ØąŲŠØŠ ؈ØĸØĢØ§Øą ØŦØ§Ų†Ø¨ŲŠØŠ ØēŲŠØą Ų…ØšØąŲˆŲØŠ.</string>
</patch>
<patch id="misc.gms.gmsCoreSupportResourcePatch">
@@ -1147,6 +1222,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_disable_zoom_haptics_summary_on">ØĒŲ… ØĒØšØˇŲŠŲ„ Ø§Ų„Ø§Ų‡ØĒØ˛Ø§Ø˛</string>
<string name="revanced_disable_zoom_haptics_summary_off">ØĒŲ… ØĒŲ…ŲƒŲŠŲ† Ø§Ų„Ø§Ų‡ØĒØ˛Ø§Ø˛</string>
</patch>
<patch id="video.audio.forceOriginalAudioPatch">
<string name="revanced_force_original_audio_title">ŲØąØļ Ø§Ų„Øĩ؈ØĒ Ø§Ų„ØŖØĩŲ„ŲŠ</string>
<string name="revanced_force_original_audio_summary_on">Ø§ØŗØĒØŽØ¯Ø§Ų… Ø§Ų„Øĩ؈ØĒ Ø§Ų„ØŖØĩŲ„ŲŠ</string>
<string name="revanced_force_original_audio_summary_off">Ø§ØŗØĒØŽØ¯Ø§Ų… Ø§Ų„Øĩ؈ØĒ Ø§Ų„Ø§ŲØĒØąØ§Øļ؊</string>
</patch>
<patch id="video.quality.rememberVideoQualityPatch">
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
<string name="revanced_video_quality_default_entry_1">ØĒŲ„Ų‚Ø§ØĻ؊</string>
@@ -1170,13 +1250,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_custom_speed_menu_summary_off">Ų„Ø§ ؊ØĒŲ… ØšØąØļ Ų‚Ø§ØĻŲ…ØŠ ØŗØąØšØŠ Ø§Ų„ØĒØ´ØēŲŠŲ„ Ø§Ų„Ų…ØŽØĩØĩØŠ</string>
<string name="revanced_custom_playback_speeds_title">ØŗØąØšØŠ Ø§Ų„ØĒØ´ØēŲŠŲ„ Ø§Ų„Ų…ØŽØĩØĩØŠ</string>
<string name="revanced_custom_playback_speeds_summary">ØĨØļØ§ŲØŠ ØŖŲˆ ØĒØēŲŠŲŠØą ØŗØąØšØŠ Ø§Ų„ØĒØ´ØēŲŠŲ„ Ø§Ų„Ų…ØŽØĩØĩØŠ</string>
<string name="revanced_custom_playback_speeds_invalid">؊ØŦب ØŖŲ† ØĒŲƒŲˆŲ† Ø§Ų„ØŗØąØšØŠ Ø§Ų„Ų…ØŽØĩØĩØŠ ØŖŲ‚Ų„ Ų…Ų† %s. Ø¨Ø§ØŗØĒØŽØ¯Ø§Ų… Ø§Ų„Ų‚ŲŠŲ… Ø§Ų„Ø§ŲØĒØąØ§ØļŲŠØŠ.</string>
<string name="revanced_custom_playback_speeds_parse_exception">ØŗØąØšØŠ ØĒØ´ØēŲŠŲ„ Ų…ØŽØĩØĩØŠ ØēŲŠØą ØĩØ§Ų„Ø­ØŠ. Ø§ØŗØĒØŽØ¯Ø§Ų… Ø§Ų„Ų‚ŲŠŲ… Ø§Ų„Ø§ŲØĒØąØ§ØļŲŠØŠ.</string>
<string name="revanced_custom_playback_speeds_invalid">؊ØŦب ØŖŲ† ØĒŲƒŲˆŲ† ØŗØąØšØ§ØĒ Ø§Ų„ØĒØ´ØēŲŠŲ„ Ø§Ų„Ų…ØŽØĩØĩØŠ ØŖŲ‚Ų„ Ų…Ų† %s</string>
<string name="revanced_custom_playback_speeds_parse_exception">ØŗØąØšØŠ Ø§Ų„ØĒØ´ØēŲŠŲ„ Ø§Ų„Ų…ØŽØĩØĩØŠ ØēŲŠØą ØĩØ§Ų„Ø­ØŠ</string>
<string name="revanced_custom_playback_speeds_auto">ØĒŲ„Ų‚Ø§ØĻ؊</string>
</patch>
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
<string name="revanced_remember_playback_speed_last_selected_title">ØĒØ°ŲƒØą Ø§Ų„ØĒØēŲŠØąØ§ØĒ ؁؊ ØŗØąØšØŠ Ø§Ų„ØĒØ´ØēŲŠŲ„</string>
<string name="revanced_remember_playback_speed_last_selected_summary_on">ØĒØˇØ¨ŲŠŲ‚ ØĒØēŲŠŲŠØąØ§ØĒ ØŗØąØšØŠ Ø§Ų„ØĒØ´ØēŲŠŲ„ ØšŲ„Ų‰ ØŦŲ…ŲŠØš Ų…Ų‚Ø§ØˇØš Ø§Ų„ŲŲŠØ¯ŲŠŲˆ</string>
<string name="revanced_remember_playback_speed_last_selected_summary_on">ØĒØˇØ¨ŲŠŲ‚ ØĒØēŲŠŲŠØąØ§ØĒ ØŗØąØšØŠ Ø§Ų„ØĒØ´ØēŲŠŲ„ ØšŲ„Ų‰ ØŦŲ…ŲŠØš Ø§Ų„ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ</string>
<string name="revanced_remember_playback_speed_last_selected_summary_off">ØĒØˇØ¨ŲŠŲ‚ ØĒØēŲŠŲŠØąØ§ØĒ ØŗØąØšØŠ Ø§Ų„ØĒØ´ØēŲŠŲ„ ŲŲ‚Øˇ ØšŲ„Ų‰ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø§Ų„Ø­Ø§Ų„ŲŠ</string>
<string name="revanced_playback_speed_default_title">ØŗØąØšØŠ Ø§Ų„ØĒØ´ØēŲŠŲ„ Ø§Ų„Ø§ŲØĒØąØ§ØļŲŠØŠ</string>
<string name="revanced_remember_playback_speed_toast">ØĒØēŲŠŲŠØą Ø§Ų„ØŗØąØšØŠ Ø§Ų„Ø§ŲØĒØąØ§ØļŲŠØŠ ØĨŲ„Ų‰: %s</string>
@@ -1187,27 +1267,87 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_restore_old_video_quality_menu_summary_off">Ų„Ø§ ؊ØĒŲ… ØšØąØļ Ų‚Ø§ØĻŲ…ØŠ ØŦŲˆØ¯ØŠ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø§Ų„Ų‚Ø¯ŲŠŲ…ØŠ</string>
</patch>
<patch id="interaction.seekbar.enableSlideToSeekPatch">
<string name="revanced_slide_to_seek_title">ØĒŲ…ŲƒŲŠŲ† Slide to Seek</string>
<string name="revanced_slide_to_seek_summary_on">ØĒŲ… ØĒŲ…ŲƒŲŠŲ† Slide to Seek</string>
<string name="revanced_slide_to_seek_summary_off">ØĒŲ… ØĒØšØˇŲŠŲ„ Slide to Seek</string>
<string name="revanced_slide_to_seek_title">ØĒŲ…ŲƒŲŠŲ† Ø§Ų„ØĒŲ…ØąŲŠØą Ų„Ų„ØĒŲ‚Ø¯ŲŠŲ… ØŖŲˆ Ø§Ų„ØĒØąØŦŲŠØš</string>
<string name="revanced_slide_to_seek_summary_on">ØĒŲ… ØĒŲ…ŲƒŲŠŲ† Ø§Ų„ØĒŲ…ØąŲŠØą Ų„Ų„ØĒŲ‚Ø¯ŲŠŲ… ØŖŲˆ Ø§Ų„ØĒØąØŦŲŠØš</string>
<string name="revanced_slide_to_seek_summary_off">ØĒŲ… ØĒØšØˇŲŠŲ„ Ø§Ų„ØĒŲ…ØąŲŠØą Ų„Ų„ØĒŲ‚Ø¯ŲŠŲ… ØŖŲˆ Ø§Ų„ØĒØąØŦŲŠØš</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_screen_title">Spoof Video Streams</string>
<string name="revanced_spoof_video_streams_screen_summary">ØĒØ˛ŲŠŲŠŲ ØĒØ¯ŲŲ‚Ø§ØĒ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø§Ų„ØŽØ§ØĩØŠ Ø¨Ø§Ų„ØšŲ…ŲŠŲ„ Ų„Ų…Ų†Øš Ø­Ø¯ŲˆØĢ Ų…Ø´ŲƒŲ„Ø§ØĒ ØŖØĢŲ†Ø§ØĄ Ø§Ų„ØĒØ´ØēŲŠŲ„</string>
<string name="revanced_spoof_video_streams_title">Spoof Video Streams</string>
<string name="revanced_spoof_video_streams_summary_on">؊ØĒŲ… ØĒØ˛ŲŠŲŠŲ ØĒØ¯ŲŲ‚Ø§ØĒ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ</string>
<string name="revanced_spoof_video_streams_summary_off">Ų„Ø§ ؊ØĒŲ… ØĒØ˛ŲŠŲŠŲ ØĒØ¯ŲŲ‚Ø§ØĒ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ\n\nŲ‚Ø¯ Ų„Ø§ ŲŠØšŲ…Ų„ ØĒØ´ØēŲŠŲ„ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ</string>
<string name="revanced_spoof_video_streams_summary_off">"Ų„Ø§ ؊ØĒŲ… ØĒØ˛ŲŠŲŠŲ ØĒØ¯ŲŲ‚Ø§ØĒ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ
Ų‚Ø¯ Ų„Ø§ ŲŠØšŲ…Ų„ ØĒØ´ØēŲŠŲ„ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ"</string>
<string name="revanced_spoof_video_streams_user_dialog_message">ØĨŲŠŲ‚Ø§Ų ØĒØ´ØēŲŠŲ„ Ų‡Ø°Ø§ Ø§Ų„ØĨؚداد Ų‚Ø¯ ŲŠØŗØ¨Ø¨ Ų…Ø´Ø§ŲƒŲ„ ؁؊ ØĒØ´ØēŲŠŲ„ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ.</string>
<string name="revanced_spoof_video_streams_client_title">Ø§Ų„ØšŲ…ŲŠŲ„ Ø§Ų„Ø§ŲØĒØąØ§Øļ؊</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">ŲØąØļ AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ØĒØąŲ…ŲŠØ˛ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ų‡Ųˆ AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ØĒØąŲ…ŲŠØ˛ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ų‡Ųˆ VP9 ØŖŲˆ AV1</string>
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">Ų„Ø§ ŲŠØ­ØĒ؈؊ ØŦŲ‡Ø§Ø˛Ųƒ ØšŲ„Ų‰ ؁؃ ØĒØ´ŲŲŠØą Ø§Ų„ØŖØŦŲ‡Ø˛ØŠ VP9، ŲˆŲ‡Ø°Ø§ Ø§Ų„ØĨؚداد ŲŠØšŲ…Ų„ داØĻŲ…Ø§ ØšŲ†Ø¯ ØĒŲ…ŲƒŲŠŲ† ØĒØ˛ŲŠŲŠŲ Ø§Ų„ØšŲ…ŲŠŲ„</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Ų‚Ø¯ ŲŠØ¤Ø¯ŲŠ ØĒŲ…ŲƒŲŠŲ† Ų‡Ø°Ø§ ØĨŲ„Ų‰ ØĒØ­ØŗŲŠŲ† ØšŲ…Øą Ø§Ų„Ø¨ØˇØ§ØąŲŠØŠ ؈ØĨØĩŲ„Ø§Ø­ Ų…Ø´ŲƒŲ„ØŠ ØĒŲ‚ØˇŲŠØš Ø§Ų„ØĒØ´ØēŲŠŲ„.\n\n؊ØĒŲ…ØĒØš ØĒŲ†ØŗŲŠŲ‚ AVC Ø¨Ø¯Ų‚ØŠ Ų‚ØĩŲˆŲ‰ ØĒØ¨Ų„Øē 1080P، ŲˆØŗŲŠØŗØĒØŽØ¯Ų… ØĒØ´ØēŲŠŲ„ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø§Ų„Ų…Ø˛ŲŠØ¯ Ų…Ų† Ø¨ŲŠØ§Ų†Ø§ØĒ Ø§Ų„ØĨŲ†ØĒØąŲ†ØĒ Ų…Ų‚Ø§ØąŲ†ØŠŲ‹ بØĒŲ†ØŗŲŠŲ‚ VP9 ØŖŲˆ AV1.</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ØĒŲ… ŲØąØļ ØĒØąŲ…ŲŠØ˛ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ ØšŲ„Ų‰ AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">؊ØĒŲ… ØĒØ­Ø¯ŲŠØ¯ ØĒØąŲ…ŲŠØ˛ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ ØĒŲ„Ų‚Ø§ØĻŲŠŲ‹Ø§</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Ų‚Ø¯ ŲŠØ¤Ø¯ŲŠ ØĒŲ…ŲƒŲŠŲ† Ų‡Ø°Ø§ ØĨŲ„Ų‰ ØĒØ­ØŗŲŠŲ† ØšŲ…Øą Ø§Ų„Ø¨ØˇØ§ØąŲŠØŠ ؈ØĨØĩŲ„Ø§Ø­ Ų…Ø´ŲƒŲ„ØŠ ØĒŲ‚ØˇŲŠØš Ø§Ų„ØĒØ´ØēŲŠŲ„.
؊ØĒŲ…ØĒØš ØĒŲ†ØŗŲŠŲ‚ AVC Ø¨Ø¯Ų‚ØŠ Ų‚ØĩŲˆŲ‰ ØĒØ¨Ų„Øē 1080P، Ø¨ØąŲ†Ø§Ų…ØŦ ØĒØąŲ…ŲŠØ˛ Ø§Ų„Øĩ؈ØĒ Opus ØēŲŠØą Ų…ØĒŲˆŲØąØŒ ŲˆØŗŲŠØŗØĒØŽØ¯Ų… ØĒØ´ØēŲŠŲ„ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø§Ų„Ų…Ø˛ŲŠØ¯ Ų…Ų† Ø¨ŲŠØ§Ų†Ø§ØĒ Ø§Ų„ØĨŲ†ØĒØąŲ†ØĒ Ų…Ų‚Ø§ØąŲ†ØŠŲ‹ بØĒŲ†ØŗŲŠŲ‚ VP9 ØŖŲˆ AV1."</string>
<string name="revanced_spoof_video_streams_about_ios_title">Ø§Ų„ØĒØŖØĢŲŠØąØ§ØĒ Ø§Ų„ØŦØ§Ų†Ø¨ŲŠØŠ Ų„Ų…Ø­Ø§ŲƒØ§ØŠ iOS</string>
<string name="revanced_spoof_video_streams_about_ios_summary">â€ĸ Ų‚Ø¯ Ų„Ø§ ؊ØĒŲ… ØĒØ´ØēŲŠŲ„ ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ Ø§Ų„ØŖØˇŲØ§Ų„ Ø§Ų„ØŽØ§ØĩØŠ\nâ€ĸ ØĒØ¨Ø¯ØŖ Ø§Ų„Ø¨ØĢ؈ØĢ Ø§Ų„Ų…Ø¨Ø§Ø´Øą Ų…Ų† Ø§Ų„Ø¨Ø¯Ø§ŲŠØŠ\nâ€ĸ Ų‚Ø¯ ØĒŲ†ØĒŲ‡ŲŠ Ø§Ų„ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ Ų‚Ø¨Ų„ Ø§Ų„Ų†Ų‡Ø§ŲŠØŠ بØĢØ§Ų†ŲŠØŠ ŲˆØ§Ø­Ø¯ØŠ\nâ€ĸ Ų„Ø§ ؊؈ØŦد ØĒØąŲ…ŲŠØ˛ Ø§Ų„Øĩ؈ØĒ opus</string>
<string name="revanced_spoof_video_streams_about_ios_summary">"â€ĸ Ų„Ø§ ŲŠŲ…ŲƒŲ† ØĒØ´ØēŲŠŲ„ Ų…Ų‚Ø§ØˇØš ŲŲŠØ¯ŲŠŲˆ Ø§Ų„ØŖØˇŲØ§Ų„ Ø§Ų„ØŽØ§ØĩØŠ.
â€ĸ ØĒŲ†ØĒŲ‡ŲŠ Ų…Ų‚Ø§ØˇØš Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ų…Ø¨ŲƒØąŲ‹Ø§ Ø¨Ų…Ų‚Ø¯Ø§Øą 1 ØĢØ§Ų†ŲŠØŠ."</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Ø§Ų„ØĒØŖØĢŲŠØąØ§ØĒ Ø§Ų„ØŦØ§Ų†Ø¨ŲŠØŠ Ų„Ų…Ø­Ø§ŲƒØ§ØŠ Android VR</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">â€ĸ Ų‚Ø¯ Ų„Ø§ ؊ØĒŲ… ØĒØ´ØēŲŠŲ„ ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ Ø§Ų„ØŖØˇŲØ§Ų„\nâ€ĸ Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ų…Ų‚ØˇØš Ø§Ų„Øĩ؈ØĒ؊ Ų…ŲŲ‚ŲˆØ¯ØŠ\nâ€ĸ Ų…ØŗØĒŲˆŲ‰ Ø§Ų„Øĩ؈ØĒ Ø§Ų„ØĢابØĒ ØēŲŠØą Ų…ØĒŲˆŲØą</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">"â€ĸ Ų‚Ø¯ Ų„Ø§ ؊ØĒŲ… ØĒØ´ØēŲŠŲ„ ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ Ø§Ų„ØŖØˇŲØ§Ų„
â€ĸ ØĒØ¨Ø¯ØŖ Ø§Ų„Ø¨ØĢ؈ØĢ Ø§Ų„Ų…Ø¨Ø§Ø´ØąØŠ Ų…Ų† Ø§Ų„Ø¨Ø¯Ø§ŲŠØŠ
â€ĸ Ų‚Ø¯ ØĒŲ†ØĒŲ‡ŲŠ Ø§Ų„ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ Ų‚Ø¨Ų„ Ø§Ų„Ų†Ų‡Ø§ŲŠØŠ بØĢØ§Ų†ŲŠØŠ ŲˆØ§Ø­Ø¯ØŠ"</string>
<string name="revanced_spoof_video_streams_language_title">Ų„ØēØŠ Ø§Ų„Ø¨ØĢ Ø§Ų„Øĩ؈ØĒ؊ Ø§Ų„Ø§ŲØĒØąØ§ØļŲŠØŠ</string>
<string name="revanced_spoof_video_streams_language_DEFAULT">Ų„ØēØŠ Ø§Ų„ØĒØˇØ¨ŲŠŲ‚</string>
<string name="revanced_spoof_video_streams_language_AR">Ø§Ų„ØšØąØ¨ŲŠØŠ</string>
<string name="revanced_spoof_video_streams_language_AZ">Azerbaijani</string>
<string name="revanced_spoof_video_streams_language_BG">Bulgarian</string>
<string name="revanced_spoof_video_streams_language_BN">Bengali</string>
<string name="revanced_spoof_video_streams_language_CA">Catalan</string>
<string name="revanced_spoof_video_streams_language_CS">Czech</string>
<string name="revanced_spoof_video_streams_language_DA">Danish</string>
<string name="revanced_spoof_video_streams_language_DE">German</string>
<string name="revanced_spoof_video_streams_language_EL">Greek</string>
<string name="revanced_spoof_video_streams_language_EN">English</string>
<string name="revanced_spoof_video_streams_language_ES">Spanish</string>
<string name="revanced_spoof_video_streams_language_ET">Estonian</string>
<string name="revanced_spoof_video_streams_language_FA">ŲØ§ØąØŗŲ‰</string>
<string name="revanced_spoof_video_streams_language_FI">Finnish</string>
<string name="revanced_spoof_video_streams_language_FR">French</string>
<string name="revanced_spoof_video_streams_language_GU">Gujarati</string>
<string name="revanced_spoof_video_streams_language_HI">Hindi</string>
<string name="revanced_spoof_video_streams_language_HR">Croatian</string>
<string name="revanced_spoof_video_streams_language_HU">Hungarian</string>
<string name="revanced_spoof_video_streams_language_ID"> Indonesian</string>
<string name="revanced_spoof_video_streams_language_IT">Italian</string>
<string name="revanced_spoof_video_streams_language_JA">Japanese</string>
<string name="revanced_spoof_video_streams_language_KK">Kazakh</string>
<string name="revanced_spoof_video_streams_language_KO">Korean</string>
<string name="revanced_spoof_video_streams_language_LT">Lithuanian</string>
<string name="revanced_spoof_video_streams_language_LV">Latvian</string>
<string name="revanced_spoof_video_streams_language_MK">Macedonian</string>
<string name="revanced_spoof_video_streams_language_MN">Mongolian</string>
<string name="revanced_spoof_video_streams_language_MR">Marathi</string>
<string name="revanced_spoof_video_streams_language_MS">Malay</string>
<string name="revanced_spoof_video_streams_language_MY">Burmese</string>
<string name="revanced_spoof_video_streams_language_NL">Dutch</string>
<string name="revanced_spoof_video_streams_language_OR">Odia</string>
<string name="revanced_spoof_video_streams_language_PA">Punjabi</string>
<string name="revanced_spoof_video_streams_language_PL">Polish</string>
<string name="revanced_spoof_video_streams_language_PT_BR">Portuguese (Brazil)</string>
<string name="revanced_spoof_video_streams_language_PT_PT">Portuguese (Portugal)</string>
<string name="revanced_spoof_video_streams_language_RO">Romanian</string>
<string name="revanced_spoof_video_streams_language_RU">Russian</string>
<string name="revanced_spoof_video_streams_language_SK">Slovak</string>
<string name="revanced_spoof_video_streams_language_SL">Slovene</string>
<string name="revanced_spoof_video_streams_language_SR">Serbian</string>
<string name="revanced_spoof_video_streams_language_SV">Swedish</string>
<string name="revanced_spoof_video_streams_language_SW">Swahili</string>
<string name="revanced_spoof_video_streams_language_TA">Tamil</string>
<string name="revanced_spoof_video_streams_language_TE">Telugu</string>
<string name="revanced_spoof_video_streams_language_TH">Thai</string>
<string name="revanced_spoof_video_streams_language_TR">Turkish</string>
<string name="revanced_spoof_video_streams_language_UK">Ukrainian</string>
<string name="revanced_spoof_video_streams_language_UR">Urdu</string>
<string name="revanced_spoof_video_streams_language_VI">Vietnamese</string>
<string name="revanced_spoof_video_streams_language_ZH">Chinese</string>
</patch>
</app>
<app id="twitch">

View File

@@ -1,34 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
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">
@@ -147,6 +136,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="layout.panels.popup.playerPopupPanelsPatch">
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
</patch>
<patch id="layout.returnyoutubedislike.returnYouTubeDislikePatch">
@@ -192,8 +183,10 @@ 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. -->
</patch>
<patch id="misc.announcements.announcementsPatch">
<string name="revanced_announcements_dialog_dismiss">āĻ–āĻžā§°āĻŋāϜ āϕ⧰āĻ•</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">āϏāĻ•ā§€ā§ŸāύāĻŋ</string>
</patch>
<patch id="misc.autorepeat.autoRepeatPatch">
</patch>
@@ -209,6 +202,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="misc.zoomhaptics.zoomHapticsPatch">
</patch>
<patch id="video.audio.forceOriginalAudioPatch">
</patch>
<patch id="video.quality.rememberVideoQualityPatch">
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
</patch>

View File

@@ -1,34 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
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">
@@ -44,6 +33,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_check_environment_not_near_patch_time_invalid">APK quruluş tarixi pozulub</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_title">\"ReVanced\"</string>
<string name="revanced_settings_confirm_user_dialog_title">Davam etmək istəyirsiniz?</string>
<string name="revanced_settings_reset">SÄąfÄąrla</string>
<string name="revanced_settings_restart_title">Yenilə və yenidən başlat</string>
@@ -67,9 +57,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 quraşdÄąrÄąlmayÄąb. Bunu quraşdÄąr.</string>
<string name="gms_core_dialog_title">Fəaliyyət lazımdır</string>
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore arxa planda işləməyə icazə almayÄąb.\n\nTelefonunuz ÃŧçÃŧn \"Tətbiqim bağlanÄąlmasÄąn\" bələdçisin izləyin və təlimatlarÄą MicroG quraşdÄąrmasÄąna tətbiq edin.\n\nBu tətbiq işləyən mÃŧddətdə tələb olunur.</string>
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore-un arxaplanda işləməsi ÃŧçÃŧn icazəsi yoxdur.
Telefonunuz ÃŧçÃŧn \"Tətbiqimi ÃļldÃŧrmə\" bələdçisinə əməl edin və təlimatlarÄą MicroG quraşdÄąrmanÄąza tətbiq edin.
Bu, tətbiqin işləməsi ÃŧçÃŧn tələb olunur."</string>
<string name="gms_core_dialog_open_website_text">Veb saytÄą aç</string>
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">Problemlərin olmamasÄą ÃŧçÃŧn MicroG GmsCore batareya optimallaşdÄąrmasÄą qeyri-aktiv edilməlidir.\n\nDavam dÃŧyməsinə toxun və batareya optimallaşdÄąrmasÄąnÄą qeyri-aktiv et.</string>
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"Problemsiz işləməsi ÃŧçÃŧn MicroG GmsCore batareya optimallaşdÄąrmalarÄą sÄąradan Ã§ÄąxarÄąlmalÄądÄąr.
MicroG ÃŧçÃŧn batareya optimallaşdÄąrmasÄąnÄą sÄąradan Ã§Äąxartmaq, batareya istifadəsinə mənfi təsir etməyəcək.
Davam dÃŧyməsinə toxunun və optimallaşdÄąrma dəyişikliklərinə icazə verin."</string>
<string name="gms_core_dialog_continue_text">Davam et</string>
</patch>
</app>
@@ -84,7 +82,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_screen_07_seekbar_title">AxtarÄąÅŸ çubuğu</string>
<string name="revanced_settings_screen_08_swipe_controls_title">SÃŧrÃŧşdÃŧrmə nəzarətçiləri</string>
<string name="revanced_settings_screen_11_misc_title">MÃŧxtəlif</string>
<string name="revanced_settings_screen_12_video_title">Video</string>
<string name="revanced_settings_screen_12_video_title">\"Video\"</string>
</patch>
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
<string name="revanced_shorts_disable_background_playback_title">Shorts arxa plan oynatmasın bağla</string>
@@ -106,7 +104,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_debug_toast_on_error_title">ReVanced xətasÄąnda ani bildiriş gÃļstər</string>
<string name="revanced_debug_toast_on_error_summary_on">Xəta baş verərsə bildiriş gÃļstər</string>
<string name="revanced_debug_toast_on_error_summary_off">Xəta baş verərsə bildiriş gÃļstərmə</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">Ani bildirişləri sÃļndÃŧrəndə, bÃŧtÃŧn ReVanced xəta bildirişləri gizlənir.\n\nGÃļzlənilməz hallardan xəbərdar olmayacaqsÄąnÄąz.</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"Xəta bildirişlərini sÃļndÃŧrmək, bÃŧtÃŧn ReVanced xəta bildirişlərini gizlədir.
GÃļzlənilməz tədbirlər barədə bildiriş almayacaqsÄąnÄąz."</string>
</patch>
<patch id="layout.hide.general.hideLayoutComponentsPatch">
<string name="revanced_disable_like_subscribe_glow_title">Bəyən/abunə ol dÃŧymə parÄąltÄąsÄąn sÃļndÃŧr</string>
@@ -125,7 +125,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_channel_watermark_summary_on">Su nişanÄą gizlidir</string>
<string name="revanced_hide_channel_watermark_summary_off">Su nişanÄą gÃļstərilir</string>
<string name="revanced_hide_horizontal_shelves_title">ÜfÃŧqi hissələri gizlət</string>
<string name="revanced_hide_horizontal_shelves_summary_on">Belə hissələr gizlidir:\nâ€ĸ Son xəbərlər\nâ€ĸ Baxmağa davam et\nâ€ĸ Daha çox kanal kəşf et\nâ€ĸ BazarlÄąq\nâ€ĸ Təkrar izlə</string>
<string name="revanced_hide_horizontal_shelves_summary_on">"Rəflər gizlidir, məsələn:
â€ĸ Son xəbərlər
â€ĸ İzləməyə davam et
â€ĸ Daha çox kanallar kəşf edin
â€ĸ AlÄąÅŸ-veriş
â€ĸ Yenidən izlə"</string>
<string name="revanced_hide_horizontal_shelves_summary_off">Hissələr gÃļstərilir</string>
<!-- 'Join' should be translated using the same localized wording YouTube displays.
This appears in the video player for certain videos. -->
@@ -153,9 +158,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_timed_reactions_title">Vaxtlı reaksiyaları gizlət</string>
<string name="revanced_hide_timed_reactions_summary_on">ZamanlanmÄąÅŸ reaksiyalar gizlədilir</string>
<string name="revanced_hide_timed_reactions_summary_off">ZamanlanmÄąÅŸ reaksiyalar gÃļstərilir</string>
<string name="revanced_hide_search_result_shelf_header_title">AxtarÄąÅŸ nəticəsi bÃļlmə başlığınÄą gizlət</string>
<string name="revanced_hide_search_result_shelf_header_summary_on">BÃļlmə başlığı gizlidir</string>
<string name="revanced_hide_search_result_shelf_header_summary_off">BÃļlmə başlığı gÃļstərilir</string>
<string name="revanced_hide_channel_guidelines_title">Kanal təlimatlarını gizlət</string>
<string name="revanced_hide_channel_guidelines_summary_on">Kanal təlimatları gizlidir</string>
<string name="revanced_hide_channel_guidelines_summary_off">Kanal təlimatlarÄą gÃļstərilir</string>
@@ -252,6 +254,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Əlaqəli videolarda gÃļrÃŧnÃŧr</string>
<string name="revanced_comments_screen_title">Şərhlər</string>
<string name="revanced_comments_screen_summary">Şərhlər bÃļlməsi elementlərin gizlət və ya gÃļstər</string>
<string name="revanced_hide_comments_chat_summary_title">\'SÃļhbət yekunun\' gizlət </string>
<string name="revanced_hide_comments_chat_summary_summary_on">\"SÃļhbət yekunu\" gizlədilir</string>
<string name="revanced_hide_comments_chat_summary_summary_off">\'SÃļhbət yekunu\' gÃļstərilir</string>
<string name="revanced_hide_comments_by_members_header_title">\'Üzvlərin şərhləri\' başlığınÄą gizlət</string>
<string name="revanced_hide_comments_by_members_header_summary_on">\"Üzvlərin şərhləri\" başlığı gizlədilib</string>
<string name="revanced_hide_comments_by_members_header_summary_off">\"Üzvlərin şərhləri\" başlığı gÃļstərilir</string>
@@ -274,7 +279,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_doodles_title">YouTube Doodle-ları gizlət</string>
<string name="revanced_hide_doodles_summary_on">AxtarÄąÅŸ çubuğu Doodle-larÄą gizlidir</string>
<string name="revanced_hide_doodles_summary_off">AxtarÄąÅŸ çubuğu Doodle-larÄą gÃļstərilir</string>
<string name="revanced_hide_doodles_user_dialog_message">YouTube Doodle-lar hər il bir neçə gÃŧn gÃļstərilir.\n\nDoodle hazÄąrda bÃļlgənizdə gÃļrÃŧnÃŧr və bu gizlətmə seçimi aktivdirsə, axtarÄąÅŸ çubuğu altÄąndakÄą filtr paneli də gizlədiləcək.</string>
<string name="revanced_hide_doodles_user_dialog_message">"YouTube Doodles ilinin bir neçə gÃŧnÃŧ gÃļstərilir.
Əgər Doodle hazÄąrda sizin bÃļlgənizdə gÃļstərilirsə və bu gizlətmə parametr aÃ§ÄąqdÄąrsa, axtarÄąÅŸ çubuğunun altÄąndakÄą filtr çubuğu da gizlənəcək."</string>
<string name="revanced_custom_filter_screen_title">Şəxsi filtr</string>
<string name="revanced_custom_filter_screen_summary">Fərdi filtrlər ilə elementləri gizlət</string>
<string name="revanced_custom_filter_title">Fərdi filtri aktivləşdir</string>
@@ -298,9 +305,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">Gizlədiləcək açar sÃļzlər</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">Yeni sətirlərlə ayrÄąlmÄąÅŸ gizlədiləcək açar sÃļzlər və frazalar\n\nAçar sÃļzlər kanal adlarÄą və ya video adlarÄąnda gÃļstərilən istənilən mətn ola bilər\n\nOrtada bÃļyÃŧk hərf olan sÃļzlər korpusla birlikdə qeyd edilməlidir (yəni: iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_phrases_summary">"Kənarda qoyulacaq açar sÃļzlər və cÃŧmlələr, yeni sətirlərlə ayrÄąlmÄąÅŸdÄąr
Açar sÃļzlər kanal adlarÄą və ya video başlÄąqlarÄąnda gÃļstərilən hər hansÄą mətn ola bilər.
Orta hərfləri bÃļyÃŧk hərflərlə olan sÃļzlər bÃļyÃŧk hərflərlə yazÄąlmalÄądÄąr (məsələn: iPhone, TikTok, LeBlanc)"</string>
<string name="revanced_hide_keyword_content_about_title">Açar sÃļz filtrləməsi haqqÄąnda</string>
<string name="revanced_hide_keyword_content_about_summary">Əsas səhifə/Abunəlik/AxtarÄąÅŸ nəticələri açar sÃļz ifadələrinə uyğunlaşan məzmunu gizlətmək ÃŧçÃŧn filtrlənir\n\nMəhdudiyyətlər\nâ€ĸ Shorts-lar kanal adÄąna gÃļrə gizlənə bilməz\nâ€ĸ Bəzi UI hissəcikləri gizlədilə bilməz\nâ€ĸ Açar sÃļz axtarÄąÅŸÄąnda nəticə olmaya bilər</string>
<string name="revanced_hide_keyword_content_about_summary">"Ana səhifə/Abunəlik/AxtarÄąÅŸ nəticələri açar sÃļz ifadələrinə uyğun olan məzmunu gizlətmək ÃŧçÃŧn sÃŧzÃŧlÃŧr
Məhdudiyyətlər
â€ĸ Şortlar kanal adÄą ilə gizlənə bilməz
â€ĸ Bəzi UI komponentləri gizlənə bilməz
â€ĸ Açar sÃļz axtarmaq heç bir nəticə verməyə bilər"</string>
<string name="revanced_hide_keyword_content_about_whole_words_title">BÃŧtÃŧn sÃļzləri uyğunlaşdÄąr</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">Açar sÃļz/frazanÄąn qoşa dÄąrnaqlarla əhatə olunmasÄą video adlarÄą və kanal adlarÄąnÄąn qismən uyğunlaşmasÄąna mane olacaq &lt;br&gt;&lt;br&gt;Məsələn,&lt;br&gt;&lt;b&gt;\"ai\"&lt;/b&gt; videonu gizlədəcək:&lt;b&gt;How does AI work?&lt;/b&gt;&lt;br&gt; lakin gizlətməyəcək: DÃŧzgÃŧn;&lt;b&gt;What does fair use mean?&lt;/b&gt;</string>
@@ -316,7 +332,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_general_ads_summary_on">Ümumi reklamlar gizlidir</string>
<string name="revanced_hide_general_ads_summary_off">Ümumi reklamlar gÃļstərilir</string>
<string name="revanced_hide_fullscreen_ads_title">Tam ekran reklamlarını gizlət</string>
<string name="revanced_hide_fullscreen_ads_summary_on">Tam ekran reklamlarÄą gizlidir\n\nBu funksiya yalnÄąz kÃļhnə cihazlar ÃŧçÃŧn əlçatandÄąr</string>
<string name="revanced_hide_fullscreen_ads_summary_on">"Tam ekran reklam gizlidir
Bu xÃŧsusiyyət yalnÄąz kÃļhnə cihazlar ÃŧçÃŧn mÃļvcuddur"</string>
<string name="revanced_hide_fullscreen_ads_summary_off">Tam ekran reklamlarÄą gÃļstərilir</string>
<string name="revanced_hide_buttoned_ads_title">DÃŧyməli reklamlarÄą gizlət</string>
<string name="revanced_hide_buttoned_ads_summary_on">DÃŧyməli reklamlar gizlədilir</string>
@@ -490,11 +508,22 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_subscriptions_button_summary_off">Abunəliklər dÃŧyməsi gÃļstərilir</string>
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_switch_create_with_notifications_button_title">\"Yarat\"Äą \"Bildirişlər\" ilə dəyişdir</string>
<string name="revanced_switch_create_with_notifications_button_summary_on">Yarat dÃŧyməsi Bildirişlər dÃŧyməsi ilə dəyişdirilir\n\nQeyd: Bunu aktivləşdirmə video reklamlarÄą da məcburən gizlədir</string>
<string name="revanced_switch_create_with_notifications_button_summary_on">"Yarat dÃŧyməsi Bildirişlər dÃŧyməsi ilə dəyişdirilir
Qeyd: Bunu aktivləşdirmək video reklamlarÄą da məcburi olaraq gizlədir"</string>
<string name="revanced_switch_create_with_notifications_button_summary_off">\"Yarat\" dÃŧyməsi, \"Bildirişlər\" dÃŧyməsi ilə dəyişdirilmir</string>
<string name="revanced_hide_navigation_button_labels_title">Fəaliyyət dÃŧymə etiketlərini gizlət</string>
<string name="revanced_hide_navigation_button_labels_summary_on">Etiketlər gizlidir</string>
<string name="revanced_hide_navigation_button_labels_summary_off">Etiketlər gÃļstərilir</string>
<string name="revanced_disable_translucent_status_bar_title">YarÄąmşəffaf status barÄą deaktiv et</string>
<string name="revanced_disable_translucent_status_bar_summary_on">Status çubuğu şəffaf deyil</string>
<string name="revanced_disable_translucent_status_bar_summary_off">Status çubuğu şəffaf və ya yarÄą şəffaf</string>
<string name="revanced_disable_translucent_navigation_bar_light_title">AÃ§Äąq yarÄąmşəffaf barÄą deaktiv et</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_on">AÃ§Äąq rejim navigasiya barÄą qeyri-şəffafdÄąr</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">AÃ§Äąq rəngli naviqasiya çubuğu şəffaf və ya yarÄą şəffaf</string>
<string name="revanced_disable_translucent_navigation_bar_dark_title">TÃŧnd şəffaf çubuğu deaktiv edin</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_on">TÃŧnd rejim navigasiya barÄą qeyri-şəffafdÄąr</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">TÃŧnd rəngli naviqasiya çubuğu şəffaf və ya yarÄą şəffaf</string>
</patch>
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
<string name="revanced_hide_player_flyout_title">AÃ§Äąlan menyu</string>
@@ -709,6 +738,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_popup_panels_summary_on">OynadÄącÄą aÃ§Äąlan pəncərə panelləri gizlidir</string>
<string name="revanced_hide_player_popup_panels_summary_off">OynadÄącÄą aÃ§Äąlan pəncərə panelləri gÃļstərilir</string>
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
<string name="revanced_open_videos_fullscreen_portrait_title">VideolarÄą tam ekran təsvirində aç</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Videolar tam ekranda aÃ§ÄąlÄąr</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Videolar tam ekranda aÃ§ÄąlmÄąr</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">OynadÄącÄą ÃļrtÃŧyÃŧnÃŧn qeyri-şəffaflığı</string>
<string name="revanced_player_overlay_opacity_summary">0-100 arasÄąnda qeyri-şəffaflÄąq dəyəri, burada 0 şəffafdÄąr</string>
@@ -726,7 +760,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_ryd_enable_summary_off">Bəyənməmələr gÃļstərilmir</string>
<string name="revanced_ryd_shorts_title">\"Shorts\"da bəyənməmə sayÄąnÄą gÃļstər</string>
<string name="revanced_ryd_shorts_summary_on">Bəyənməmə sayÄą \"Shorts\"da gÃļstərilir</string>
<string name="revanced_ryd_shorts_summary_on_disclaimer">\"Bəyənməmə\"lər \"Shorts\"da gÃļstərilir\n\nMəhdudiyyət: \"Bəyənməmə\"lər gizli rejimdə gÃļrÃŧnməyə bilər</string>
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Şortlarda gÃļrÃŧnən bəyənməmələr
Məhdudiyyət: Bəyənməmələr gizli rejimdə gÃļrÃŧnə bilməz"</string>
<string name="revanced_ryd_shorts_summary_off">\"Bəyənməmə\"lər \"Shorts\"da gizlidir</string>
<string name="revanced_ryd_dislike_percentage_title">\"Bəyənməmə\"lər faiz olaraq</string>
<string name="revanced_ryd_dislike_percentage_summary_on">\"Bəyənməmə\"lər faiz olaraq gÃļstərilir</string>
@@ -769,7 +805,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">AxtarÄąÅŸ çubuğu miniatÃŧrləri orta keyfiyyətlidir</string>
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">Tam ekran axtarÄąÅŸ çubuğu miniatÃŧrləri yÃŧksək keyfiyyətlidir</string>
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">Tam ekran axtarÄąÅŸ çubuğu miniatÃŧrləri orta keyfiyyətlidir</string>
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">Bu, həm də axtarÄąÅŸ cizgisi Ãŧzrə miniatÃŧrləri olmayan canlÄą yayÄąmlarda miniatÃŧrləri qaytaracaq.\n\nAxtarÄąÅŸ cizgisi miniatÃŧrləri, cari video kimi eyni keyfiyyəti işlədəcək.\n\nBu xÃŧsusiyyət, 720p və ya daha aşağı video keyfiyyəti və çox sÃŧrətli internet bağlantÄąsÄą istifadə edərkən daha yaxÅŸÄą işləyir.</string>
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"Bu, həmçinin axtarÄąÅŸ çubuğu kiçik gÃļrÃŧntÃŧləri olmayan canlÄą yayÄąmlarda kiçik şəkilləri bərpa edəcək.
AxtarÄąÅŸ çubuğu kiçik şəkilləri cari videonun keyfiyyəti ilə eyni keyfiyyətdən istifadə edəcək.
Bu xÃŧsusiyyət ən yaxÅŸÄą 720p və ya daha aşağı video keyfiyyəti və çox sÃŧrətli internet bağlantÄąsÄąndan istifadə edərkən işləyir."</string>
<string name="revanced_restore_old_seekbar_thumbnails_title">KÃļhnə axtarÄąÅŸ çubuğu miniatÃŧrlərin al</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">AxtarÄąÅŸ çubuğu miniatÃŧrləri axtarÄąÅŸ çubuğu ÃŧstÃŧndə gÃļrÃŧnəcək</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">AxtarÄąÅŸ çubuğu miniatÃŧrləri tam ekranda gÃļrÃŧnəcək</string>
@@ -832,7 +872,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_settings_import_successful">Tənzimləmələr uğurla idxal edildi</string>
<string name="revanced_sb_settings_import_failed">%s idxal uğursuz</string>
<string name="revanced_sb_settings_export_failed">%s ixrac uğursuz</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning">Tənzimləmələr şəxsi SponsorBlock istifadəçi kimliyi ehtiva edir.\n\nİstifadəçi kimliyiniz parol kimidir və bu paylaÅŸÄąlmamalÄądÄąr.\n</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning">"Parametrlərdə Ãļzəl SponsorBlock istifadəçi IDniz var.
Sizə istifadəçi IDniz parol kimidir və heç vaxt başqasÄąna verilməməlidir.
"</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">Təkrar gÃļstərmə</string>
<string name="revanced_sb_diff_segments">BÃļlÃŧm davranÄąÅŸÄąnÄą dəyişdir</string>
<string name="revanced_sb_segments_sponsor">Sponsor</string>
@@ -892,9 +935,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_submit_failed_invalid">BÃļlÃŧm gÃļndərilmir: %s</string>
<string name="revanced_sb_submit_failed_timeout">SponsorBlock mÃŧvəqqəti olaraq cavab vermir</string>
<string name="revanced_sb_submit_failed_unknown_error">BÃļlÃŧm gÃļndərilmir (status: %1$d %2$s)</string>
<string name="revanced_sb_submit_failed_rate_limit">BÃļlÃŧm gÃļndərilmir.\nSÃŧrət məhdudlaÅŸÄąb (eyni istifadəçi və ya IP-dən pik sayda)</string>
<string name="revanced_sb_submit_failed_rate_limit">Segment təqdim edə bilmədiniz. Həddən artÄąq istifadə (eyni istifadəçi və ya IP ÃŧnvanÄąndan çox)</string>
<string name="revanced_sb_submit_failed_forbidden">BÃļlÃŧm gÃļndərilmir: %s</string>
<string name="revanced_sb_submit_failed_duplicate">BÃļlÃŧm gÃļndərilmir.\nArtÄąq var</string>
<string name="revanced_sb_submit_failed_duplicate">"Segment təqdim edə bilmirsiniz.
ArtÄąq mÃļvcuddur"</string>
<string name="revanced_sb_submit_succeeded">BÃļlÃŧm uğurla gÃļndərildi</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 mÃŧvəqqəti əlçatmazdÄąr (API vaxtÄą bitdi)</string>
@@ -917,7 +961,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_time_start">BÃļlÃŧm başladığı vaxt</string>
<string name="revanced_sb_new_segment_time_end">BÃļlÃŧmÃŧn bitmə vaxtÄą</string>
<string name="revanced_sb_new_segment_confirm_title">Vaxtlar dÃŧzgÃŧndÃŧr?</string>
<string name="revanced_sb_new_segment_confirm_content">BÃļlÃŧm \n\n%1$s\n\n%2$s\n\n(%3$s)\n\nTəqdim etməyə hazÄąrsÄąnÄąz?</string>
<string name="revanced_sb_new_segment_confirm_content">"BÃļlÃŧm
%1$s
ilə
%2$s arasÄądÄąr
(%3$s)
Təqdim etməyə hazırdır?"</string>
<string name="revanced_sb_new_segment_start_is_before_end">Başlanğıc sondan əvvəl olmalÄądÄąr</string>
<string name="revanced_sb_new_segment_mark_locations_first">Əvvəlcə vaxt çubuğunda iki yeri doldur</string>
<string name="revanced_sb_new_segment_preview_segment_first">BÃļlÃŧmÃŧ izləyin, rahatlÄąqla ÃļtÃŧrdÃŧyÃŧnə əmin olun</string>
@@ -959,7 +1011,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_app_version_title">Tətbiq versiyasÄąnÄą saxtalaşdÄąr</string>
<string name="revanced_spoof_app_version_summary_on">Versiya saxtalaşdÄąrÄąldÄą</string>
<string name="revanced_spoof_app_version_summary_off">Versiya saxtalaşdÄąrÄąlmadÄą</string>
<string name="revanced_spoof_app_version_user_dialog_message">Tətbiq versiyasÄą, YouTube-un daha kÃļhnə versiyasÄą şəklində saxtalaşdÄąrÄąlacaq.\n\nBu, tətbiqin gÃļrÃŧnÃŧşÃŧnÃŧ və funksiyalarÄąnÄą dəyişdirəcək, ancaq bilinməyən yan təsirlər ola bilər.\n\nDaha sonra sÃļndÃŧrsəniz, UI səhvlərini Ãļnləmək ÃŧçÃŧn tətbiq məlumatÄąnÄą təmizləmək tÃļvsiyə olunur.</string>
<string name="revanced_spoof_app_version_user_dialog_message">"Tətbiq versiyasÄą kÃļhnə bir YouTube versiyasÄąna oxşayacaq.
Bu tətbiqin gÃļrÃŧnÃŧşÃŧnÃŧ və xÃŧsusiyyətlərini dəyişdirəcək, lakin bilinməyən yan təsirlər yarana bilər.
Sonradan sÃļndÃŧrÃŧlərsə, UI səhvlərini qarÅŸÄąsÄąnÄą almaq ÃŧçÃŧn tətbiqin məlumatlarÄąnÄą silmək tÃļvsiyə olunur."</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">Saxta tətbiq versiyası hədəfi</string>
@@ -1012,7 +1068,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_miniplayer_screen_summary">Tətbiqdə kiçildilən oynadÄącÄą Ãŧslubunu dəyişdir</string>
<string name="revanced_miniplayer_type_title">Kiçik oynadÄącÄą nÃļvÃŧ</string>
<string name="revanced_miniplayer_type_entry_0">Qeyri-aktivdir</string>
<string name="revanced_miniplayer_type_entry_1">Orijinal</string>
<string name="revanced_miniplayer_type_entry_1">İlkin</string>
<string name="revanced_miniplayer_type_entry_2">Ən kiçik</string>
<string name="revanced_miniplayer_type_entry_3">Planşet</string>
<string name="revanced_miniplayer_type_entry_4">MÃŧasir 1</string>
@@ -1022,19 +1078,28 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_miniplayer_rounded_corners_summary_on">KÃŧnclər dairəvidir</string>
<string name="revanced_miniplayer_rounded_corners_summary_off">KÃŧnclər kvadratdÄąr</string>
<string name="revanced_miniplayer_double_tap_action_title">ÖlçÃŧsÃŧnÃŧ dəyişmək ÃŧçÃŧn cÃŧt toxunmanÄą və çimdikləməni aktivləşdir</string>
<string name="revanced_miniplayer_double_tap_action_summary_on">ÖlçÃŧsÃŧnÃŧ dəyişdirmək ÃŧçÃŧn cÃŧt toxunma fəaliyyəti və çimdikləmə aktivləşdirildi\n\nâ€ĸ Mini oynadÄącÄą ÃļlçÃŧsÃŧn artÄąrmaq ÃŧçÃŧn cÃŧt toxunun\nâ€ĸ Orijinal ÃļlçÃŧnÃŧ bərpa etmək ÃŧçÃŧn təkrar cÃŧt toxun</string>
<string name="revanced_miniplayer_double_tap_action_summary_on">"İkiqat vuruş hərəkəti və çimdikleyərək yenidən Ãļlçmək aktivdir
â€ĸ Miniplayer ÃļlçÃŧsÃŧnÃŧ artÄąrmaq ÃŧçÃŧn iki dəfə vurun
â€ĸ Orijinal ÃļlçÃŧsÃŧnə qayÄątmaq ÃŧçÃŧn yenidən iki dəfə vurun"</string>
<string name="revanced_miniplayer_double_tap_action_summary_off">ÖlçÃŧsÃŧnÃŧ dəyişdirmək ÃŧçÃŧn cÃŧt toxunma fəaliyyəti və çimdikləmə yoxdur</string>
<string name="revanced_miniplayer_drag_and_drop_title">\"SÃŧrÃŧklə və burax\"Äą aktivləşdir</string>
<string name="revanced_miniplayer_drag_and_drop_summary_on">\"SÃŧrÃŧklə və burax\" aktivdir\n\nMini oynadÄącÄą, ekranÄąn istənilən kÃŧncÃŧnə sÃŧrÃŧklənə bilər</string>
<string name="revanced_miniplayer_drag_and_drop_summary_on">"SÃŧrÃŧklə və burax aktivdir
Miniplayer ekranÄąn istənilən kÃŧncÃŧnə sÃŧrÃŧklənə bilər"</string>
<string name="revanced_miniplayer_drag_and_drop_summary_off">\"SÃŧrÃŧklə və burax\" aktiv deyil</string>
<string name="revanced_miniplayer_horizontal_drag_title">ÜfÃŧqi sÃŧrÃŧkləmə jestini aktivləşdir</string>
<string name="revanced_miniplayer_horizontal_drag_summary_on">ÜfÃŧqi sÃŧrÃŧkləmə jesti aktivdir\n\nKiçik OynadÄącÄą ekranÄąn soluna və ya sağına sÃŧrÃŧklənə bilər</string>
<string name="revanced_miniplayer_horizontal_drag_summary_on">"ÜfÃŧqi sÃŧrÃŧkləmə jesti aktivdir
Miniplayer ekrandan sola və ya sağa sÃŧrÃŧklənə bilər"</string>
<string name="revanced_miniplayer_horizontal_drag_summary_off">ÜfÃŧqi sÃŧrÃŧkləmə jesti qapatÄąldÄą</string>
<string name="revanced_miniplayer_hide_expand_close_title">\"Bağla\" dÃŧyməsini gizlət</string>
<string name="revanced_miniplayer_hide_expand_close_summary_on">\"Bağla\" dÃŧyməsi gizlidir</string>
<string name="revanced_miniplayer_hide_expand_close_summary_off">\"Bağla\" dÃŧyməsi gÃļstərilir</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_title">Genişləndir və bağla dÃŧymələrini gizlət</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">DÃŧymələr gizlədilib\n\nGenişləndirmək və ya bağlamaq ÃŧçÃŧn sÃŧrÃŧşdÃŧr</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"DÃŧymələr gizlidir
Açmaq və ya bağlamaq barmaqla sÃŧrÃŧşdÃŧrÃŧn"</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">Genişləndir və bağla dÃŧymələri gÃļstərilir</string>
<string name="revanced_miniplayer_hide_subtext_title">Alt mətnləri gizlət</string>
<string name="revanced_miniplayer_hide_subtext_summary_on">Alt mətnlər gizlədilir</string>
@@ -1065,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">Təsvir bÃļlgə məhdudiyyətlərini ÃļtÃŧr</string>
<string name="revanced_bypass_image_region_restrictions_summary_on">yt4.ggpht.com təsvir host-u istifadə edilir</string>
<string name="revanced_bypass_image_region_restrictions_summary_off">Orijinal təsvir host-u istifadə edilir\n\nBunu aktivləşdirmə, bəzi bÃļlgələrdə əngəllənən, ağ təsvirləri dÃŧzəldə bilər</string>
<string name="revanced_bypass_image_region_restrictions_summary_off">"Orijinal şəkil hostundan istifadə
Bunu aktivləşdirmək, bəzi regionlarda bloklanmÄąÅŸdÄąrÄąlmÄąÅŸ itkin şəkilləri dÃŧzəldə bilər"</string>
</patch>
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
@@ -1080,7 +1147,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow &amp; Orijinal miniatÃŧrlər</string>
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow &amp; Kadr çəkilişlər</string>
<string name="revanced_alt_thumbnail_options_entry_4">Kadr çəkilişləri</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow YouTube videolarÄą ÃŧçÃŧn bÃļlÃŧk mənbəli miniatÃŧrlər təchiz edir. Bu miniatÃŧrlər hər zaman YouTube tərəfindən təmin edilənlərdən daha uyğun olur\n\nƏgər aktivləşdirilərsə, video URL-lər API serverinə gÃļndəriləcək və başqa heç bir məlumat gÃļndərilməyəcək. Videoda DeArrow miniatÃŧrləri yoxdursa, orijinal və ya hələ də kadr çəkilişləri gÃļstərilir\n\nDeArrow haqqÄąnda ətraflÄą Ãļyrənmək ÃŧçÃŧn bura toxun</string>
<string name="revanced_alt_thumbnail_dearrow_about_title">DeArrow</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow, YouTube videolarÄą ÃŧçÃŧn kÃŧtlədən alÄąnan kiçik gÃļrÃŧntÃŧlər təqdim edir. Bu kiçik gÃļrÃŧntÃŧlər YouTube tərəfindən təqdim edilənlərdən daha uyğun ola bilər
Aktivləşdirilərsə, video URLləri API serverinə gÃļndəriləcək və başqa heç bir məlumat gÃļndərilməyəcək. Bir videoda DeArrow kiçik şəkilləri yoxdursa, onda orijinal və ya hərəkətsiz çəkilişlər gÃļstərilir
DeArrow haqqÄąnda ətraflÄą məlumat ÃŧçÃŧn buraya vurun"</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">API əlçatan deyilsə ani bildiriş gÃļstər</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">DeArrow əlçatan deyilsə bildiriş gÃļstərilir</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">DeArrow əlçatan deyilsə bildiriş gÃļstərilmir</string>
@@ -1119,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">Cihaz ÃļlçÃŧlərini saxtalaşdÄąr</string>
<string name="revanced_spoof_device_dimensions_summary_on">Cihaz ÃļlçÃŧləri saxtalaşdÄą\n\nDaha yÃŧksək video keyfiyyətləri gÃļstərilə bilər, ancaq video oynatma donmalarÄą, daha pis batareya istismarÄą və bilinməyən yan təsirləri gÃļrə bilərsiniz</string>
<string name="revanced_spoof_device_dimensions_summary_off">Cihaz ÃļlçÃŧləri saxtalaşmÄąr\n\nBunu aktivləşdirmə, daha yÃŧksək video keyfiyyətlərinin olmasÄąn təmin edə bilir</string>
<string name="revanced_spoof_device_dimensions_summary_on">"Cihaz ÃļlçÃŧləri saxtalaşdÄąrÄąldÄą
YÃŧksək video keyfiyyətlər gÃļrÃŧnə bilər, ancaq videonun oynadÄąlmasÄąnda qÄąrÄąlma, daha pis batareya ÃļmrÃŧ və bilinməyən yan təsirləri sezə bilərsiniz"</string>
<string name="revanced_spoof_device_dimensions_summary_off">"Cihaz ÃļlçÃŧləri saxtalaşdÄąrÄąlmayÄąb
Bunu aktivləşdirmə daha yÃŧksək video keyfiyyətləri əngəlin silə bilər"</string>
<string name="revanced_spoof_device_dimensions_user_dialog_message">Bunu aktivləşdirmə, video oynatma donmalarÄąna, daha pis batareya istismarÄąna və bilinməyən yan təsirlərə səbəb ola bilər.</string>
</patch>
<patch id="misc.gms.gmsCoreSupportResourcePatch">
@@ -1147,6 +1223,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_disable_zoom_haptics_summary_on">Toxunuş əks-əlaqəsi bağlandÄą</string>
<string name="revanced_disable_zoom_haptics_summary_off">Toxunuş əks-əlaqəsi aktivdir</string>
</patch>
<patch id="video.audio.forceOriginalAudioPatch">
<string name="revanced_force_original_audio_title">Orijinal səsi tələb et</string>
<string name="revanced_force_original_audio_summary_on">Orijinal səs istifadəsi</string>
<string name="revanced_force_original_audio_summary_off">İlkin səs istifadəsi</string>
</patch>
<patch id="video.quality.rememberVideoQualityPatch">
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
<string name="revanced_video_quality_default_entry_1">Avtomatik</string>
@@ -1170,8 +1251,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_custom_speed_menu_summary_off">Fərdi sÃŧrət menyusu gÃļstərilmir</string>
<string name="revanced_custom_playback_speeds_title">Fərdi oynatma sÃŧrəti</string>
<string name="revanced_custom_playback_speeds_summary">Fərdi oynatma sÃŧrətlərini əlavə et və ya dəyiş</string>
<string name="revanced_custom_playback_speeds_invalid">Fərdi sÃŧrətlər %s-dən az olmalÄądÄąr. Standart dəyərlər istifadəsi.</string>
<string name="revanced_custom_playback_speeds_parse_exception">EtibarsÄąz oynatma sÃŧrətləri. Standartlar istifadədədir.</string>
<string name="revanced_custom_playback_speeds_invalid">Fərdi sÃŧrətlər %s dəyərindən az olmalÄądÄąr</string>
<string name="revanced_custom_playback_speeds_parse_exception">Fərdi oynatma sÃŧrətləri etibarsÄązdÄąr</string>
<string name="revanced_custom_playback_speeds_auto">Avtomatik</string>
</patch>
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
@@ -1196,18 +1277,78 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_screen_summary">Oynatma problemlərin Ãļnləmək ÃŧçÃŧn qəbuledici video yayÄąmlarÄąn saxtalaşdÄąr</string>
<string name="revanced_spoof_video_streams_title">Video yayÄąmlarÄą saxtalaşdÄąr</string>
<string name="revanced_spoof_video_streams_summary_on">Video yayÄąmlarÄą saxtalaşdÄąrÄąlÄąr</string>
<string name="revanced_spoof_video_streams_summary_off">Video yayÄąmlarÄą saxtalaşmÄąr\n\nVideo oynatma işləməyə bilər</string>
<string name="revanced_spoof_video_streams_summary_off">"Video yayÄąmlar saxtalaşdÄąrÄąlmÄąr
Video oynatma işləməyə bilər"</string>
<string name="revanced_spoof_video_streams_user_dialog_message">Bu seçimi bağlamaq, video oynatma problemlərinə səbəb olar.</string>
<string name="revanced_spoof_video_streams_client_title">İlkin qəbuledici</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">Məcburi AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video kodlaşdÄąrma: AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video kodlaşdÄąrma / VP9 və ya AV1</string>
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">CihazÄąnÄązÄąn VP9 hardware decoding\'i yoxdur və bu seçim, \"Qəbuledicini saxtalaşdÄąrma\" aktivləşdikdə həmişəlikdir</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Bunu aktivləşdirmə batareya ÃļmrÃŧnÃŧ yaxÅŸÄąlaşdÄąra və oynatma donmasÄąnÄą dÃŧzəldə bilər.\n\nAVC maksimum 1080p gÃļrÃŧntÃŧ imkanÄąna malikdir və video oynadÄąlmasÄą VP9 və ya AV1-dən daha çox internet məlumatÄą istifadə edəcək.</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video kodlama AVC (H.264) -yə məcbur edilir</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video kodlama birbaşa yoxlanÄąlÄąr</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Bunu fəallaşdÄąrma, batareya ÃļmrÃŧnÃŧ yaxÅŸÄąlaşdÄąra və oxutma ilişmələrini dÃŧzəldə bilər.
AVC-nin maksimum dəqiqliyi 1080p-dir, Opus səs kodek əlçatan deyil və video oxutma, VP9 və ya AV1-dən daha çox internet datasÄą istifadə edəcək."</string>
<string name="revanced_spoof_video_streams_about_ios_title">iOS saxtakarlığı yan təsirləri</string>
<string name="revanced_spoof_video_streams_about_ios_summary">â€ĸ Şəxsi uşaq videolarÄą oynadÄąlmaya bilər\nâ€ĸ CanlÄą yayÄąmlar başdan başlayÄąr\nâ€ĸ Videolar 1 saniyə tez bitə bilər\nâ€ĸ Opus səs kodlama yoxdur</string>
<string name="revanced_spoof_video_streams_about_ios_summary">"â—Ļ XÃŧsusi uşaq videolarÄą bəlkə də oynanÄąlmaya bilər
â—Ļ Videolar 1 saniyə tez bitir"</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR saxtakarlığı yan təsirləri</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">â€ĸ Uşaq videolarÄą oynadÄąlmaya bilər\nâ€ĸ Səs treki menyusu əskikdir\nâ€ĸ Sabit səs həcmi əlçatan deyil</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">"â€ĸ Uşaq videolarÄą oxudulmaya bilər
â€ĸ CanlÄą yayÄąmlar başdan başlayÄąr
â€ĸ Videolar 1 saniyə tez bitir"</string>
<string name="revanced_spoof_video_streams_language_title">İlkin səs yayımı dili</string>
<string name="revanced_spoof_video_streams_language_DEFAULT">Tətbiq dili</string>
<string name="revanced_spoof_video_streams_language_AR">Ərəbcə</string>
<string name="revanced_spoof_video_streams_language_AZ">Azərbaycanca</string>
<string name="revanced_spoof_video_streams_language_BG">Bolqarca</string>
<string name="revanced_spoof_video_streams_language_BN">Benqalca</string>
<string name="revanced_spoof_video_streams_language_CA">Katalanca</string>
<string name="revanced_spoof_video_streams_language_CS">Çexcə</string>
<string name="revanced_spoof_video_streams_language_DA">Danimarka dili</string>
<string name="revanced_spoof_video_streams_language_DE">Almanca</string>
<string name="revanced_spoof_video_streams_language_EL">Yunanca</string>
<string name="revanced_spoof_video_streams_language_EN">İngiliscə</string>
<string name="revanced_spoof_video_streams_language_ES">İspanca</string>
<string name="revanced_spoof_video_streams_language_ET">Estonca</string>
<string name="revanced_spoof_video_streams_language_FA">Farsca</string>
<string name="revanced_spoof_video_streams_language_FI">Fincə</string>
<string name="revanced_spoof_video_streams_language_FR">FransÄązca</string>
<string name="revanced_spoof_video_streams_language_GU">QÃŧcərat dili</string>
<string name="revanced_spoof_video_streams_language_HI">Hindcə</string>
<string name="revanced_spoof_video_streams_language_HR">Xorvatca</string>
<string name="revanced_spoof_video_streams_language_HU">Macarca</string>
<string name="revanced_spoof_video_streams_language_ID">İndoneziya dili</string>
<string name="revanced_spoof_video_streams_language_IT">İtalyanca</string>
<string name="revanced_spoof_video_streams_language_JA">Yaponca</string>
<string name="revanced_spoof_video_streams_language_KK">Qazaxca</string>
<string name="revanced_spoof_video_streams_language_KO">Koreyaca</string>
<string name="revanced_spoof_video_streams_language_LT">Litvaca</string>
<string name="revanced_spoof_video_streams_language_LV">Letonca</string>
<string name="revanced_spoof_video_streams_language_MK">Makedon Dili</string>
<string name="revanced_spoof_video_streams_language_MN">Monqolca</string>
<string name="revanced_spoof_video_streams_language_MR">Marathi dili</string>
<string name="revanced_spoof_video_streams_language_MS">Malay dili</string>
<string name="revanced_spoof_video_streams_language_MY">Birman dili</string>
<string name="revanced_spoof_video_streams_language_NL">Hollandca</string>
<string name="revanced_spoof_video_streams_language_OR">Oriya dili</string>
<string name="revanced_spoof_video_streams_language_PA">Pəncabca</string>
<string name="revanced_spoof_video_streams_language_PL">Polyak dili</string>
<string name="revanced_spoof_video_streams_language_PT_BR">Portuqalca (Braziliya)</string>
<string name="revanced_spoof_video_streams_language_PT_PT">Portuqalca (Portəgiz)</string>
<string name="revanced_spoof_video_streams_language_RO">RumÄąnca</string>
<string name="revanced_spoof_video_streams_language_RU">Rusca</string>
<string name="revanced_spoof_video_streams_language_SK">Slovak dili</string>
<string name="revanced_spoof_video_streams_language_SL">Sloven dili</string>
<string name="revanced_spoof_video_streams_language_SR">Serbcə</string>
<string name="revanced_spoof_video_streams_language_SV">İsveçcə</string>
<string name="revanced_spoof_video_streams_language_SW">Suahili dili</string>
<string name="revanced_spoof_video_streams_language_TA">Tamilcə</string>
<string name="revanced_spoof_video_streams_language_TE">Teluquca</string>
<string name="revanced_spoof_video_streams_language_TH">Tay dili</string>
<string name="revanced_spoof_video_streams_language_TR">TÃŧrkcə</string>
<string name="revanced_spoof_video_streams_language_UK">Ukrayna dili</string>
<string name="revanced_spoof_video_streams_language_UR">Urduca</string>
<string name="revanced_spoof_video_streams_language_VI">Vyetnamca</string>
<string name="revanced_spoof_video_streams_language_ZH">Çincə</string>
</patch>
</app>
<app id="twitch">
@@ -1217,8 +1358,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_block_audio_ads_summary_off">Səsli reklamlar bloklanmayıb</string>
</patch>
<patch id="ad.embedded.embeddedAdsPatch">
<string name="revanced_embedded_ads_service_unavailable">%s əlçatmazdÄąr. Reklamlar gÃļrÃŧnə bilər. Seçimlərdə başqa reklam bloku xidmətinə keçirməyə cəhd et.</string>
<string name="revanced_embedded_ads_service_failed">%s serveri xəta sorğusu verdi. Reklam gÃļrÃŧnə bilər. Seçimlərdə başqa reklam bloku xidmətinə keçir.</string>
<string name="revanced_embedded_ads_service_unavailable">%s əlçatmazdÄąr, reklamlar gÃļstərilə bilər. Ayarlarda reklam əngəlləmə xidmətini dəyişdirməyə çalÄąÅŸÄąn.</string>
<string name="revanced_embedded_ads_service_failed">%s bir xəta qaytardÄą, reklamlar gÃļstərilə bilər. Ayarlarda reklam əngəlləmə xidmətini dəyişdirməyə çalÄąÅŸÄąn.</string>
<string name="revanced_block_embedded_ads_title">Yerləşdirilən video reklamlarÄąnÄą əngəllə</string>
<string name="revanced_block_embedded_ads_entry_1">Qeyri-aktiv edildi</string>
<string name="revanced_block_embedded_ads_entry_2">Dəqiq proksi</string>

View File

@@ -1,40 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
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">
<patch id="misc.checks.checkEnvironmentPatch">
<string name="revanced_check_environment_failed_title">\"ĐŸŅ€Đ°Đ˛ŅĐ´ĐˇĐĩĐŊĐŊĐĩ ĐŋŅ€Đ°Đ˛ĐĩŅ€ĐēŅ– Đ°ŅŅŅ€ĐžĐ´Đ´ĐˇŅ ĐŊĐĩ ŅžĐ´Đ°ĐģĐžŅŅ\"</string>
<string name="revanced_check_environment_dialog_open_official_source_button">\"АдĐēŅ€Ņ‹Ņ†ŅŒ Đ°Ņ„Ņ–Ņ†Ņ‹ĐšĐŊŅ‹ Đ˛ŅĐą-ŅĐ°ĐšŅ‚\"</string>
<string name="revanced_check_environment_dialog_ignore_button">Đ†ĐŗĐŊĐ°Ņ€Đ°Đ˛Đ°Ņ†ŅŒ</string>
<string name="revanced_check_environment_failed_message">&lt;h5&gt;Đ“ŅŅ‚Đ° Đ´Đ°Đ´Đ°Ņ‚Đ°Đē Đ˛Ņ–Đ´Đ°Đ˛ĐžŅ‡ĐŊа ĐŊĐĩ С\'ŅŅžĐģŅĐĩŅ†Ņ†Đ° ĐŋĐ°Ņ‚Ņ‡Đ°Đŧ.&lt;/h5&gt;&lt;br&gt;Đ“ŅŅ‚Đ° Đ´Đ°Đ´Đ°Ņ‚Đ°Đē ĐŧĐžĐļа ĐŋŅ€Đ°Ņ†Đ°Đ˛Đ°Ņ†ŅŒ ĐŊŅĐŋŅ€Đ°Đ˛Ņ–ĐģҌĐŊа, а Ņ‚Đ°ĐēŅĐ°Đŧа ĐŧĐžĐļа ĐąŅ‹Ņ†ŅŒ &lt;b&gt;ĐŊĐĩĐąŅŅĐŋĐĩ҇ĐŊŅ‹Đŧ айО ĐŊĐ°Đ˛Đ°Ņ‚ ĐŊĐĩĐąŅŅĐŋĐĩ҇ĐŊŅ‹Đŧ ҃ Đ˛Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐŊĐŊŅ–&lt;/b&gt;.&lt;br&gt;&lt;br&gt;Đ“ŅŅ‚Ņ‹Ņ ĐŋŅ€Đ°Đ˛ĐĩŅ€ĐēŅ– аСĐŊĐ°Ņ‡Đ°ŅŽŅ†ŅŒ, ŅˆŅ‚Đž ĐŗŅŅ‚Đ° Đ´Đ°Đ´Đ°Ņ‚Đ°Đē ĐąŅ‹ĐģĐž ĐˇĐ°ĐŗĐ°Đ´Đ´ĐˇŅ ĐŋĐĩŅ€Đ°Ņ€ĐžĐąĐģĐĩĐŊа айО Đ°Ņ‚Ņ€Ņ‹ĐŧаĐŊа ад ĐēĐ°ĐŗĐžŅŅŒŅ†Ņ– Ņ–ĐŊŅˆĐ°ĐŗĐ°:&lt;br&gt;&lt;br&gt;&lt;small&gt;%1$s&lt;/small&gt;&lt;br&gt;ĐĐ°ŅŅ‚ĐžĐšĐģŅ–Đ˛Đ° Ņ€ŅĐēаĐŧĐĩĐŊĐ´ŅƒĐĩŅ†Ņ†Đ° &lt;b&gt;Đ˛Ņ‹Đ´Đ°ĐģŅ–Ņ†ŅŒ ĐŗŅŅ‚Ņ‹ Đ´Đ°Đ´Đ°Ņ‚Đ°Đē Ņ– ĐŋĐĩŅ€Đ°Ņ€Đ°ĐąŅ–Ņ†ŅŒ ŅĐŗĐž ŅĐ°ĐŧĐ°ŅŅ‚ĐžĐšĐŊа&lt;/b&gt;, Đēай ĐŋĐĩŅ€Đ°ĐēаĐŊĐ°Ņ†Ņ†Đ°, ŅˆŅ‚Đž Đ˛Ņ‹ Đ˛Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚ĐžŅžĐ˛Đ°Đĩ҆Đĩ ĐŋŅ€Đ°Đ˛ĐĩŅ€Đ°ĐŊŅ‹ Ņ– ĐąŅŅĐŋĐĩ҇ĐŊŅ‹ Đ´Đ°Đ´Đ°Ņ‚Đ°Đē.&lt;p&gt;&lt;br&gt;КаĐģŅ– Ņ–ĐŗĐŊĐ°Ņ€Đ°Đ˛Đ°Ņ†ŅŒ, ĐŗŅŅ‚Đ° ĐŋаĐŋŅŅ€ŅĐ´ĐļаĐŊĐŊĐĩ ĐąŅƒĐ´ĐˇĐĩ ĐŋаĐēаСаĐŊа Ņ‚ĐžĐģҌĐēŅ– два Ņ€Đ°ĐˇŅ‹.</string>
<string name="revanced_check_environment_not_same_patching_device">АдĐēĐ°Ņ€ŅĐēŅ‚Đ°Đ˛Đ°ĐŊа ĐŊа Ņ–ĐŊŅˆĐ°Đš ĐŋҀҋĐģадСĐĩ</string>
<string name="revanced_check_environment_manager_not_expected_installer">НĐĩ ŅžŅŅ‚Đ°ĐŊĐžŅžĐģĐĩĐŊа ReVanced Manager</string>
<string name="revanced_check_environment_not_near_patch_time">АдĐēĐ°Ņ€ŅĐēŅ‚Đ°Đ˛Đ°ĐŊа йОĐģҌ҈ ҇ҋĐŧ 10 Ņ…Đ˛Ņ–ĐģŅ–ĐŊ Ņ‚Đ°Đŧ҃</string>
<string name="revanced_check_environment_not_near_patch_time_days">АдĐēĐ°Ņ€ŅĐēŅ‚Đ°Đ˛Đ°ĐŊа %s Đ´ĐˇŅ‘ĐŊ Ņ‚Đ°Đŧ҃</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">Đ”Đ°Ņ‚Đ° ŅŅ‚Đ˛Đ°Ņ€ŅĐŊĐŊŅ APK ĐŋĐ°ŅˆĐēОдĐļаĐŊа</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_title">ReVanced</string>
<string name="revanced_settings_confirm_user_dialog_title">Đ’Ņ‹ Ņ…ĐžŅ‡Đ°Ņ†Đĩ ĐŋŅ€Đ°Ņ†ŅĐŗĐŊŅƒŅ†ŅŒ?</string>
<string name="revanced_settings_reset">ĐĄĐēŅ–ĐŊŅƒŅ†ŅŒ</string>
<string name="revanced_settings_restart_title">АйĐŊĐ°Đ˛Ņ–Ņ†Đĩ Ņ– ĐŋĐĩŅ€Đ°ĐˇĐ°ĐŗŅ€ŅƒĐˇŅ–Ņ†Đĩ</string>
@@ -58,9 +57,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 ĐŊĐĩ ŅžŅŅ‚Đ°ĐģŅĐ˛Đ°ĐŊŅ‹. ĐŖŅŅ‚Đ°ĐģŅŽĐšŅ†Đĩ ŅĐŗĐž.</string>
<string name="gms_core_dialog_title">ĐŸĐ°Ņ‚Ņ€Đ°ĐąŅƒĐĩŅ†Ņ†Đ° дСĐĩŅĐŊĐŊĐĩ</string>
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore ĐŊĐĩ ĐŧаĐĩ даСвОĐģ҃ ĐŊа ĐŋŅ€Đ°Ņ†Ņƒ Ņž Ņ„ĐžĐŊĐ°Đ˛Ņ‹Đŧ Ņ€ŅĐļŅ‹ĐŧĐĩ.\n\nĐ’Ņ‹ĐēĐžĐŊĐ˛Đ°ĐšŅ†Đĩ Ņ–ĐŊŅŅ‚Ņ€ŅƒĐē҆ҋҖ \"НĐĩ ĐˇĐ°ĐąŅ–Đ˛Đ°ĐšŅ†Đĩ ĐŧĐ°ŅŽ ĐŋŅ€Đ°ĐŗŅ€Đ°Đŧ҃\" Đ´ĐģŅ Đ˛Đ°ŅˆĐ°ĐŗĐ° Ņ‚ŅĐģĐĩŅ„ĐžĐŊа Ņ– ĐŋҀҋĐŧŅĐŊҖ҆Đĩ Ņ–ĐŊŅŅ‚Ņ€ŅƒĐē҆ҋҖ да ŅžŅŅ‚Đ°ĐŊĐžŅžĐēŅ– MicroG.\n\nĐ“ŅŅ‚Đ° ĐŋĐ°Ņ‚Ņ€Đ°ĐąŅƒĐĩŅ†Ņ†Đ° Đ´ĐģŅ ĐŋҀҋĐēĐģадаĐŊĐŊĐĩ Đ´ĐģŅ ĐŋŅ€Đ°Ņ†Ņ‹.</string>
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore ĐŊĐĩ ĐŧаĐĩ даСвОĐģ҃ ĐŊа ĐŋŅ€Đ°Ņ†Ņƒ Ņž Ņ„ĐžĐŊĐ°Đ˛Ņ‹Đŧ Ņ€ŅĐļŅ‹ĐŧĐĩ.
Đ’Ņ‹ĐēĐžĐŊĐ˛Đ°ĐšŅ†Đĩ Ņ–ĐŊŅŅ‚Ņ€ŅƒĐē҆ҋҖ \"НĐĩ ĐˇĐ°ĐąŅ–Đ˛Đ°Đš ĐŧĐ°Ņ‘ ĐŋҀҋĐēĐģадаĐŊĐŊĐĩ\" Đ´ĐģŅ Đ˛Đ°ŅˆĐ°ĐŗĐ° Ņ‚ŅĐģĐĩŅ„ĐžĐŊа Ņ– ĐŋҀҋĐŧŅĐŊҖ҆Đĩ Ņ–Ņ… да Đ˛Đ°ŅˆĐ°Đš ŅžŅŅ‚Đ°ĐŊĐžŅžĐēŅ– MicroG.
Đ“ŅŅ‚Đ° ĐŊĐĩĐ°ĐąŅ…ĐžĐ´ĐŊа Đ´ĐģŅ ĐŋŅ€Đ°Ņ†Ņ‹ ĐŋҀҋĐēĐģадаĐŊĐŊŅ."</string>
<string name="gms_core_dialog_open_website_text">АдĐēŅ€Ņ‹Ņ†ŅŒ ŅĐ°ĐšŅ‚</string>
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">АĐŋ҂ҋĐŧŅ–ĐˇĐ°Ņ†Ņ‹Ņ ĐąĐ°Ņ‚Đ°Ņ€ŅŅ– MicroG GmsCore ĐŋĐ°Đ˛Ņ–ĐŊĐŊа ĐąŅ‹Ņ†ŅŒ адĐēĐģŅŽŅ‡Đ°ĐŊа, Đēай ĐŋŅ€Đ°Đ´ŅƒŅ…Ņ–ĐģŅ–Ņ†ŅŒ ĐŋŅ€Đ°ĐąĐģĐĩĐŧŅ‹.\n\nĐĐ°Ņ†Ņ–ŅĐŊҖ҆Đĩ ĐēĐŊĐžĐŋĐē҃ \"ĐŸŅ€Đ°Ņ†ŅĐŗĐŊŅƒŅ†ŅŒ\" Ņ– адĐēĐģŅŽŅ‡Ņ‹Ņ†Đĩ аĐŋ҂ҋĐŧŅ–ĐˇĐ°Ņ†Ņ‹ŅŽ ĐąĐ°Ņ‚Đ°Ņ€ŅŅ–.</string>
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"НĐĩĐ°ĐąŅ…ĐžĐ´ĐŊа адĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ аĐŋ҂ҋĐŧŅ–ĐˇĐ°Ņ†Ņ‹ŅŽ ĐąĐ°Ņ‚Đ°Ņ€ŅŅ– Đ´ĐģŅ MicroG GmsCore, Đēай ĐŋаСйĐĩĐŗĐŊŅƒŅ†ŅŒ ĐŋŅ€Đ°ĐąĐģĐĩĐŧ.
АдĐēĐģŅŽŅ‡ŅĐŊĐŊĐĩ аĐŋ҂ҋĐŧŅ–ĐˇĐ°Ņ†Ņ‹Ņ– ĐąĐ°Ņ‚Đ°Ņ€ŅŅ– Đ´ĐģŅ MicroG ĐŊĐĩ ĐŋĐ°ŅžĐŋĐģŅ‹Đ˛Đ°Đĩ ĐŊа Đ˛Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐŊĐŊĐĩ ĐąĐ°Ņ‚Đ°Ņ€ŅŅ–.
ĐĐ°Ņ†Ņ–ŅĐŊҖ҆Đĩ ĐēĐŊĐžĐŋĐē҃ \"ĐŸŅ€Đ°Ņ†ŅĐŗĐŊŅƒŅ†ŅŒ\" Ņ– даСвОĐģŅŒŅ†Đĩ СĐŧŅĐŊŅ–Ņ†ŅŒ аĐŋ҂ҋĐŧŅ–ĐˇĐ°Ņ†Ņ‹ŅŽ."</string>
<string name="gms_core_dialog_continue_text">ĐŸŅ€Đ°Ņ†ŅĐŗĐŊŅƒŅ†ŅŒ</string>
</patch>
</app>
@@ -72,12 +79,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_screen_03_feed_title">ĐšĐ°Ņ€ĐŧŅ–Ņ†ŅŒ</string>
<string name="revanced_settings_screen_04_player_title">Đ“ŅƒĐģĐĩ҆</string>
<string name="revanced_settings_screen_05_general_title">ГĐĩĐŊĐĩŅ€Đ°ĐģҌĐŊĐ°Ņ ĐŋĐģаĐŊŅ–Ņ€ĐžŅžĐēа</string>
<string name="revanced_settings_screen_06_shorts_title">Shorts</string>
<string name="revanced_settings_screen_07_seekbar_title">ПаĐŊŅĐģҌ ĐŋĐžŅˆŅƒĐē҃</string>
<string name="revanced_settings_screen_08_swipe_controls_title">Đ­ĐģĐĩĐŧĐĩĐŊ҂ҋ ĐēŅ–Ņ€Đ°Đ˛Đ°ĐŊĐŊŅ ĐŋаĐģŅŒŅ†Đ°Đŧ</string>
<string name="revanced_settings_screen_11_misc_title">РОСĐŊаĐĩ</string>
<string name="revanced_settings_screen_12_video_title">Đ’Ņ–Đ´ŅĐ°</string>
</patch>
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
<string name="revanced_shorts_disable_background_playback_title">АдĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐŊĐŊĐĩ Shorts ҃ Ņ„ĐžĐŊĐ°Đ˛Ņ‹Đŧ</string>
<string name="revanced_shorts_disable_background_playback_summary_on">ĐŸŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐŊĐŊĐĩ Shorts ҃ Ņ„ĐžĐŊĐ°Đ˛Ņ‹Đŧ адĐēĐģŅŽŅ‡Đ°ĐŊа</string>
<string name="revanced_shorts_disable_background_playback_summary_off">ФОĐŊĐžĐ˛Ņ‹Đš ĐŋĐģĐĩĐšĐģĐ¸ŅŅ‚ Shorts вĐēĐģŅŽŅ‡ĐĩĐŊ</string>
</patch>
<patch id="misc.debugging.enableDebuggingPatch">
<string name="revanced_debug_screen_title">АдĐģадĐēа</string>
@@ -94,10 +105,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_debug_toast_on_error_title">ПаĐēĐ°ĐˇĐ°Ņ†ŅŒ Ņ‚ĐžŅŅ‚ ĐŋҀҋ ĐŋаĐŧŅ‹Đģ҆ҋ ReVanced</string>
<string name="revanced_debug_toast_on_error_summary_on">ĐĸĐžŅŅ‚ ĐŋаĐēаСваĐĩŅ†Ņ†Đ°, ĐēаĐģŅ– ŅžĐˇĐŊŅ–ĐēаĐĩ ĐŋаĐŧŅ‹ĐģĐēа</string>
<string name="revanced_debug_toast_on_error_summary_off">ĐĸĐžŅŅ‚ ĐŊĐĩ ĐŋаĐēаСваĐĩŅ†Ņ†Đ°, ĐēаĐģŅ– ŅžĐˇĐŊŅ–ĐēаĐĩ ĐŋаĐŧŅ‹ĐģĐēа</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">АдĐēĐģŅŽŅ‡ŅĐŊĐŊĐĩ аĐŋĐ°Đ˛ŅŅˆŅ‡ŅĐŊĐŊŅŅž ĐŋŅ€Đ° ĐŋаĐŧŅ‹ĐģĐēŅ– ŅŅ…Đ°Đ˛Đ°Đĩ ŅžŅĐĩ аĐŋĐ°Đ˛ŅŅˆŅ‡ŅĐŊĐŊŅ– ай ĐŋаĐŧŅ‹ĐģĐēĐ°Ņ… ReVanced.\n\nĐ’Ņ‹ ĐŊĐĩ ĐąŅƒĐ´ĐˇĐĩ҆Đĩ Đ°Ņ‚Ņ€Ņ‹ĐŧĐģŅ–Đ˛Đ°Ņ†ŅŒ аĐŋĐ°Đ˛ŅŅˆŅ‡ŅĐŊĐŊŅ– ай ĐŊĐĩĐŋŅ€Đ°Đ´ĐąĐ°Ņ‡Đ°ĐŊҋ҅ ĐŋадСĐĩŅŅ….</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"АдĐēĐģŅŽŅ‡ŅĐŊĐŊĐĩ ĐŋавĐĩдаĐŧĐģĐĩĐŊĐŊŅŅž ĐŋŅ€Đ° ĐŋаĐŧŅ‹ĐģĐēŅ– ŅŅ…Đ°Đ˛Đ°Đĩ ŅžŅĐĩ аĐŋĐ°Đ˛ŅŅˆŅ‡ŅĐŊĐŊŅ– ReVanced ĐŋŅ€Đ° ĐŋаĐŧŅ‹ĐģĐēŅ–.
Đ’Ņ‹ ĐŊĐĩ ĐąŅƒĐ´ĐˇĐĩ҆Đĩ Đ°Ņ‚Ņ€Ņ‹ĐŧĐģŅ–Đ˛Đ°Ņ†ŅŒ аĐŋĐ°Đ˛ŅŅˆŅ‡ŅĐŊĐŊŅ– ĐŋŅ€Đ° ĐŊĐĩŅ‡Đ°ĐēаĐŊŅ‹Ņ ĐŋадСĐĩŅ–."</string>
</patch>
<patch id="layout.hide.general.hideLayoutComponentsPatch">
<string name="revanced_disable_like_subscribe_glow_title">АдĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ ŅĐ˛ŅŅ‡ŅĐŊĐŊĐĩ ĐēĐŊĐžĐŋĐēŅ– \"ПадабаĐĩŅ†Ņ†Đ°\" / \"ПадĐŋŅ–ŅĐ°Ņ†Ņ†Đ°\".</string>
<string name="revanced_disable_like_subscribe_glow_title">АдĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ ŅĐ˛ŅŅ‡ŅĐŊĐŊĐĩ ĐēĐŊĐžĐŋĐēŅ– \"ПадабаĐĩŅ†Ņ†Đ°\" / \"ПадĐŋŅ–ŅĐ°Ņ†Ņ†Đ°\"</string>
<string name="revanced_disable_like_subscribe_glow_summary_on">КĐŊĐžĐŋĐēа \"ПадабаĐĩŅ†Ņ†Đ°\" Ņ– \"ПадĐŋŅ–ŅĐ°Ņ†Ņ†Đ°\" ĐŊĐĩ ĐąŅƒĐ´ŅƒŅ†ŅŒ ŅĐ˛ŅŅ†Ņ–Ņ†Ņ†Đ° ĐŋҀҋ ĐˇĐŗĐ°Đ´Đ˛Đ°ĐŊĐŊŅ–</string>
<string name="revanced_disable_like_subscribe_glow_summary_off">КĐŊĐžĐŋĐēа \"ПадабаĐĩŅ†Ņ†Đ°\" Ņ– \"ПадĐŋŅ–ŅĐ°Ņ†Ņ†Đ°\" ĐąŅƒĐ´ŅƒŅ†ŅŒ ŅĐ˛ŅŅ†Ņ–Ņ†Ņ†Đ° ĐŋҀҋ ĐˇĐŗĐ°Đ´Đ˛Đ°ĐŊĐŊŅ–</string>
<string name="revanced_hide_album_cards_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐ°Ņ€Ņ‚Ņ‹ аĐģŅŒĐąĐžĐŧа</string>
@@ -113,7 +126,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_channel_watermark_summary_on">Đ’Đ°Đ´ĐˇŅĐŊŅ‹ СĐŊаĐē ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_channel_watermark_summary_off">ПаĐēаСаĐŊŅ‹ Đ˛Đ°Đ´ĐˇŅĐŊŅ‹ СĐŊаĐē</string>
<string name="revanced_hide_horizontal_shelves_title">ĐĄŅ…Đ°Đ˛Đ°ĐšŅ†Đĩ ĐŗĐ°Ņ€Ņ‹ĐˇĐ°ĐŊŅ‚Đ°ĐģҌĐŊŅ‹Ņ ĐŋаĐģҖ҆ҋ</string>
<string name="revanced_hide_horizontal_shelves_summary_on">ПаĐģҖ҆ҋ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹, ĐŊаĐŋҀҋĐēĐģад:\nâ€ĸ АĐŋĐžŅˆĐŊŅ–Ņ ĐŊĐ°Đ˛Ņ–ĐŊŅ‹\nâ€ĸ ĐŸŅ€Đ°Ņ†ŅĐŗĐ˛Đ°ĐšŅ†Đĩ ĐŋŅ€Đ°ĐŗĐģŅĐ´\nâ€ĸ Đ”Đ°ŅĐģĐĩĐ´ŅƒĐšŅ†Đĩ Ņ–ĐŊŅˆŅ‹Ņ ĐēаĐŊаĐģŅ‹\nâ€ĸ ПаĐē҃ĐŋĐēŅ–\nâ€ĸ ГĐģŅĐ´ĐˇŅ–Ņ†Đĩ ŅŅˆŅ‡Ņ Ņ€Đ°Đˇ</string>
<string name="revanced_hide_horizontal_shelves_summary_on">"ĐĄŅ…Đ°Đ˛Đ°ĐŊŅ‹ ĐŋаĐģҖ҆ҋ, Ņ‚Đ°ĐēŅ–Ņ ŅĐē:
â€ĸ ĐĐ°Đ˛Ņ–ĐŊŅ‹
â€ĸ ĐŸŅ€Đ°Ņ†ŅĐŗ ĐŋŅ€Đ°ĐŗĐģŅĐ´Ņƒ
â€ĸ ДавĐĩĐ´Đ°ĐšŅ†ĐĩŅŅ йОĐģҌ҈ ĐŋŅ€Đ° ĐēаĐŊаĐģŅ‹
â€ĸ ПаĐē҃ĐŋĐēŅ–
â€ĸ ĐŸĐ°ĐŗĐģŅĐ´ĐˇĐĩŅ†ŅŒ ŅŅˆŅ‡Ņ Ņ€Đ°Đˇ"</string>
<string name="revanced_hide_horizontal_shelves_summary_off">ПаĐēаСаĐŊŅ‹ ĐŋаĐģҖ҆ҋ</string>
<!-- 'Join' should be translated using the same localized wording YouTube displays.
This appears in the video player for certain videos. -->
@@ -141,9 +159,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_timed_reactions_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Ņ€ŅĐ°Đē҆ҋҖ Đŋа Ņ‡Đ°ŅĐĩ</string>
<string name="revanced_hide_timed_reactions_summary_on">Đ§Đ°ŅĐžĐ˛Ņ‹Ņ Ņ€ŅĐ°Đē҆ҋҖ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹Ņ</string>
<string name="revanced_hide_timed_reactions_summary_off">ПаĐēĐ°ĐˇĐ˛Đ°ŅŽŅ†Ņ†Đ° Ņ€ŅĐ°Đē҆ҋҖ Đŋа Ņ‡Đ°ŅĐĩ</string>
<string name="revanced_hide_search_result_shelf_header_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐˇĐ°ĐŗĐ°ĐģОваĐē ĐŋаĐģҖ҆ҋ С Đ˛Ņ‹ĐŊŅ–ĐēаĐŧŅ– ĐŋĐžŅˆŅƒĐē҃</string>
<string name="revanced_hide_search_result_shelf_header_summary_on">Đ—Đ°ĐŗĐ°ĐģОваĐē ĐŋаĐģҖ҆ҋ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_search_result_shelf_header_summary_off">ПаĐēаСаĐŊŅ‹ ĐˇĐ°ĐŗĐ°ĐģОваĐē ĐŋаĐģҖ҆ҋ</string>
<string name="revanced_hide_channel_guidelines_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Ņ€ŅĐēаĐŧĐĩĐŊĐ´Đ°Ņ†Ņ‹Ņ– ĐēаĐŊаĐģа</string>
<string name="revanced_hide_channel_guidelines_summary_on">ĐŸŅ€Đ°Đ˛Ņ–ĐģŅ‹ ĐēаĐŊаĐģа ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_channel_guidelines_summary_off">ПаĐēĐ°ĐˇĐ˛Đ°ŅŽŅ†Ņ†Đ° Ņ–ĐŊŅŅ‚Ņ€ŅƒĐē҆ҋҖ Đŋа ĐēаĐŊаĐģĐ°Ņ…</string>
@@ -210,7 +225,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_attributes_section_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Ņ€Đ°ĐˇĐ´ĐˇĐĩĐģ Đ°Ņ‚Ņ€Ņ‹ĐąŅƒŅ‚Đ°Ņž</string>
<string name="revanced_hide_attributes_section_summary_on">РаСдСĐĩĐģŅ‹ \"Đ’Ņ‹ĐąŅ€Đ°ĐŊŅ‹Ņ ĐŧĐĩҁ҆ҋ\", ĐŗŅƒĐģҌĐŊŅ– Ņ– ĐŧŅƒĐˇŅ‹Đēа ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_attributes_section_summary_off">ПаĐēĐ°ĐˇĐ˛Đ°ŅŽŅ†Ņ†Đ° Ņ€Đ°ĐˇĐ´ĐˇĐĩĐģŅ‹ \"Đ’Ņ‹ĐąŅ€Đ°ĐŊŅ‹Ņ ĐŧĐĩҁ҆ҋ\", Đ“ŅƒĐģҌĐŊŅ– Ņ– ĐœŅƒĐˇŅ‹Đēа</string>
<string name="revanced_hide_chapters_section_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Ņ€Đ°ĐˇĐ´ĐˇĐĩĐģ \"РаСдСĐĩĐģŅ‹\".</string>
<string name="revanced_hide_chapters_section_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Ņ€Đ°ĐˇĐ´ĐˇĐĩĐģ \"РаСдСĐĩĐģŅ‹\"</string>
<string name="revanced_hide_chapters_section_summary_on">РаСдСĐĩĐģ Ņ€Đ°ĐˇĐ´ĐˇĐĩĐģĐ°Ņž ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_chapters_section_summary_off">ПаĐēаСваĐĩŅ†Ņ†Đ° Ņ€Đ°ĐˇĐ´ĐˇĐĩĐģ Ņ€Đ°ĐˇĐ´ĐˇĐĩĐģĐ°Ņž</string>
<string name="revanced_hide_podcast_section_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Ņ€Đ°ĐˇĐ´ĐˇĐĩĐģ \"Đ”Đ°ŅĐģĐĩĐ´Đ°Đ˛Đ°Ņ†ŅŒ ĐŋадĐēĐ°ŅŅ‚\"</string>
@@ -240,12 +255,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">ПаĐēаСаĐŊа Ņž ĐˇĐ˛ŅĐˇĐ°ĐŊҋ҅ Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_comments_screen_title">КаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Ņ–</string>
<string name="revanced_comments_screen_summary">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ айО ĐŋаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐēаĐŧĐŋаĐŊĐĩĐŊ҂ҋ Ņ€Đ°ĐˇĐ´ĐˇĐĩĐģа ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹ŅŅž</string>
<string name="revanced_hide_comments_chat_summary_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ \"ЗводĐēа Ņ‡Đ°Ņ‚Đ°\" </string>
<string name="revanced_hide_comments_chat_summary_summary_on">ÂĢĐĐŗĐģŅĐ´ Ņ‡Đ°Ņ‚Đ°Âģ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_comments_chat_summary_summary_off">ÂĢĐĐŗĐģŅĐ´ Ņ‡Đ°Ņ‚Đ°Âģ ĐŋаĐēаСаĐŊŅ‹</string>
<string name="revanced_hide_comments_by_members_header_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐˇĐ°ĐŗĐ°ĐģОваĐē \"КаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Ņ– ŅžĐ´ĐˇĐĩĐģҌĐŊŅ–ĐēĐ°Ņž\"</string>
<string name="revanced_hide_comments_by_members_header_summary_on">Đ—Đ°ĐŗĐ°ĐģОваĐē \"КаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Ņ– ŅžĐ´ĐˇĐĩĐģҌĐŊŅ–ĐēĐ°Ņž\" ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_comments_by_members_header_summary_off">ПаĐēаСаĐŊŅ‹ ĐˇĐ°ĐŗĐ°ĐģОваĐē \"КаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Ņ– ŅžĐ´ĐˇĐĩĐģҌĐŊŅ–ĐēĐ°Ņž\"</string>
<string name="revanced_hide_comments_section_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Ņ€Đ°ĐˇĐ´ĐˇĐĩĐģ ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹ŅŅž</string>
<string name="revanced_hide_comments_section_summary_on">РаСдСĐĩĐģ ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹ŅŅž ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_comments_section_summary_off">ПаĐēаСваĐĩŅ†Ņ†Đ° Ņ€Đ°ĐˇĐ´ĐˇĐĩĐģ ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹ŅŅž</string>
<string name="revanced_hide_comments_create_a_short_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ \"ĐĄŅ‚Đ˛ĐžŅ€Đ¸Ņ†ŅŒ Short\"</string>
<string name="revanced_hide_comments_create_a_short_button_summary_on">КĐŊĐžĐŋĐēа \"ĐĄŅ‚Đ˛ĐžŅ€Đ¸Ņ†ŅŒ Short\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_comments_create_a_short_button_summary_off">КĐŊĐžĐŋĐēа \"ĐĄŅ‚Đ˛ĐžŅ€Đ¸Ņ†ŅŒ Short\" ĐŋаĐēаСаĐŊа</string>
<string name="revanced_hide_comments_preview_comment_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Đš Đ´ĐģŅ ĐŋаĐŋŅŅ€ŅĐ´ĐŊŅĐŗĐ° ĐŋŅ€Đ°ĐŗĐģŅĐ´Ņƒ</string>
<string name="revanced_hide_comments_preview_comment_summary_on">КаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Đš ĐŋĐĩŅ€Đ°Đ´ ĐŋŅ€Đ°ĐŗĐģŅĐ´Đ°Đŧ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_comments_preview_comment_summary_off">ПаĐēаСваĐĩŅ†Ņ†Đ° ĐŋаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´ ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Ņ</string>
@@ -256,6 +277,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">КĐŊĐžĐŋĐēŅ– ĐŧĐĩŅ‚ĐēŅ– Ņ‡Đ°ŅŅƒ Ņ– ŅĐŧĐžĐ´ĐˇŅ– ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">ПаĐēĐ°ĐˇĐ˛Đ°ŅŽŅ†Ņ†Đ° ĐēĐŊĐžĐŋĐēŅ– ĐŧĐĩŅ‚ĐēŅ– Ņ‡Đ°ŅŅƒ Ņ– ŅĐŧĐžĐ´ĐˇŅ–</string>
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
<string name="revanced_hide_doodles_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ YouTube Doodles</string>
<string name="revanced_hide_doodles_summary_on">Doodles ҃ ĐŋаĐŊŅĐģŅ– ĐŋĐžŅˆŅƒĐē҃ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_doodles_summary_off">Doodles ҃ ĐŋаĐŊŅĐģŅ– ĐŋĐžŅˆŅƒĐē҃ ĐŋаĐēаСаĐŊŅ‹</string>
<string name="revanced_hide_doodles_user_dialog_message">"Doodles Đŋа YouTube ĐŋаĐēĐ°ĐˇĐ˛Đ°ŅŽŅ†Ņ†Đ° ĐŊĐĩĐēаĐģҌĐēŅ– Đ´ĐˇŅ‘ĐŊ ҃ ĐŗĐžĐ´.
КаĐģŅ– Doodle ĐˇĐ°Ņ€Đ°Đˇ ĐŋаĐēаСваĐĩŅ†Ņ†Đ° Ņž Đ˛Đ°ŅˆŅ‹Đŧ Ņ€ŅĐŗŅ–Ņ‘ĐŊĐĩ Ņ– ĐŗŅŅ‚Ņ‹ ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹, ĐŋаĐŊŅĐģҌ ҄ҖĐģŅŒŅ‚Ņ€Đ°Ņž ĐŊŅ–ĐļŅĐš Ņ€Đ°Đ´Đēа ĐŋĐžŅˆŅƒĐē҃ Ņ‚Đ°ĐēŅĐ°Đŧа ĐąŅƒĐ´ĐˇĐĩ ŅŅ…Đ°Đ˛Đ°ĐŊа."</string>
<string name="revanced_custom_filter_screen_title">ĐšĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊҖ҆ĐēŅ– ҄ҖĐģŅŒŅ‚Ņ€</string>
<string name="revanced_custom_filter_screen_summary">ĐĄŅ…Đ°Đ˛Đ°ĐšŅ†Đĩ ĐēаĐŧĐŋаĐŊĐĩĐŊ҂ҋ С даĐŋаĐŧĐžĐŗĐ°Đš ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°Ņ†ĐēŅ–Ņ… ҄ҖĐģŅŒŅ‚Ņ€Đ°Ņž</string>
<string name="revanced_custom_filter_title">ĐŖĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊҖ҆ĐēŅ– ҄ҖĐģŅŒŅ‚Ņ€</string>
@@ -279,16 +306,36 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">КĐģŅŽŅ‡Đ°Đ˛Ņ‹Ņ ҁĐģĐžĐ˛Ņ‹, ŅĐēŅ–Ņ Ņ‚Ņ€ŅĐąĐ° ŅŅ…Đ°Đ˛Đ°Ņ†ŅŒ</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">"КĐģŅŽŅ‡Đ°Đ˛Ņ‹Ņ ҁĐģĐžĐ˛Ņ‹ Ņ– Ņ„Ņ€Đ°ĐˇŅ‹ Đ´ĐģŅ ŅŅ…Đ°Đ˛Đ°ĐŊĐŊŅ, ĐŋадСĐĩĐģĐĩĐŊŅ‹Ņ ĐŋĐĩŅ€Đ°Ņ…ĐžĐ´Đ°ĐŧŅ– ĐŊа ĐŊĐžĐ˛ŅƒŅŽ Ņ€Đ°Đ´ĐžĐē
КĐģŅŽŅ‡Đ°Đ˛Ņ‹Ņ ҁĐģĐžĐ˛Ņ‹ ĐŧĐžĐŗŅƒŅ†ŅŒ ĐąŅ‹Ņ†ŅŒ ĐŊаСваĐŧŅ– ĐēаĐŊаĐģĐ°Ņž айО ĐģŅŽĐąŅ‹Đŧ Ņ‚ŅĐēŅŅ‚Đ°Đŧ, ŅĐēŅ– ĐŋаĐēаСаĐŊŅ‹ Ņž ĐŊĐ°ĐˇĐ˛Đ°Ņ… Đ˛Ņ–Đ´ŅĐ°
ĐĄĐģĐžĐ˛Ņ‹ С Đ˛ŅĐģŅ–ĐēŅ–ĐŧŅ– ĐģŅ–Ņ‚Đ°Ņ€Đ°ĐŧŅ– ĐŋĐ°ŅŅŅ€ŅĐ´ĐˇŅ–ĐŊĐĩ ĐŋĐ°Đ˛Ņ–ĐŊĐŊŅ‹ ŅžĐ˛ĐžĐ´ĐˇŅ–Ņ†Ņ†Đ° С Đ˛ŅĐģŅ–ĐēаК ĐģŅ–Ņ‚Đ°Ņ€Ņ‹ (ĐŊаĐŋҀҋĐēĐģад: iPhone, TikTok, LeBlanc)"</string>
<string name="revanced_hide_keyword_content_about_title">Ай ҄ҖĐģŅŒŅ‚Ņ€Đ°Ņ†Ņ‹Ņ– ĐēĐģŅŽŅ‡Đ°Đ˛Ņ‹Ņ… ҁĐģĐžŅž</string>
<string name="revanced_hide_keyword_content_about_summary">"Đ’Ņ‹ĐŊŅ–ĐēŅ– Đ´ĐžĐŧа/ĐŋадĐŋҖҁĐēŅ–/ĐŋĐžŅˆŅƒĐē҃ ҄ҖĐģŅŒŅ‚Ņ€ŅƒŅŽŅ†Ņ†Đ°, Đēай ŅŅ…Đ°Đ˛Đ°Ņ†ŅŒ СĐŧĐĩҁ҂, ŅĐēŅ– адĐŋĐ°Đ˛ŅĐ´Đ°Đĩ ĐēĐģŅŽŅ‡Đ°Đ˛Ņ‹Đŧ ҁĐģОваĐŧ Ņ– Ņ„Ņ€Đ°ĐˇĐ°Đŧ
АйĐŧĐĩĐļаваĐŊĐŊŅ–
â€ĸ Shorts ĐŊĐĩĐģŅŒĐŗĐ° ŅŅ…Đ°Đ˛Đ°Ņ†ŅŒ Đŋа ĐŊаСвĐĩ ĐēаĐŊаĐģа
â€ĸ НĐĩĐēĐ°Ņ‚ĐžŅ€Ņ‹Ņ ŅĐģĐĩĐŧĐĩĐŊ҂ҋ Ņ–ĐŊŅ‚ŅŅ€Ņ„ĐĩĐšŅŅƒ ĐŧĐžĐŗŅƒŅ†ŅŒ ĐŊĐĩ ĐąŅ‹Ņ†ŅŒ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹
â€ĸ ĐŸĐžŅˆŅƒĐē Đŋа ĐēĐģŅŽŅ‡Đ°Đ˛Ņ‹Đŧ ҁĐģОвĐĩ ĐŧĐžĐļа ĐŊĐĩ ĐŋаĐēĐ°ĐˇĐ°Ņ†ŅŒ Đ˛Ņ‹ĐŊŅ–ĐēŅ–"</string>
<string name="revanced_hide_keyword_content_about_whole_words_title">ĐĄŅƒĐŋадСĐĩĐŊĐŊĐĩ Ņ†ŅĐģҋ҅ ҁĐģĐžŅž</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">КаĐģŅ– Đ˛Ņ‹ Đ°Ņ…Ņ–ĐŊĐĩ҆Đĩ ĐēĐģŅŽŅ‡Đ°Đ˛ĐžĐĩ ҁĐģОва айО Ņ„Ņ€Đ°ĐˇŅƒ Ņž Đ´Đ˛ŅƒŅ…Ņ€Đ°ĐˇĐžĐ˛Ņ‹Ņ ĐģаĐŋĐēŅ–, ĐŗŅŅ‚Đ° ĐŋĐĩŅ€Đ°ŅˆĐēĐžĐ´ĐˇŅ–Ņ†ŅŒ Ņ‡Đ°ŅŅ‚ĐēОваĐŧ҃ ҁ҃ĐŋадСĐĩĐŊĐŊŅŽ ĐŊĐ°ĐˇĐ˛Đ°Ņž Đ˛Ņ–Đ´ŅĐ° Ņ– ĐēаĐŊаĐģĐ°Ņž&lt;br&gt;&lt;br&gt;НаĐŋҀҋĐēĐģад,&lt;br&gt;&lt;b&gt;\"ai\"&lt;/b&gt; ŅŅ…Đ°Đ˛Đ°Đĩ Đ˛Ņ–Đ´ŅĐ°: &lt;b&gt;How does AI work?&lt;/b&gt;&lt;br&gt;аĐģĐĩ ĐŊĐĩ ŅŅ…Đ°Đ˛Đ°Đĩ: &lt;b&gt;What does fair use mean?&lt;/b&gt;</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_common">НĐĩĐģŅŒĐŗĐ° Đ˛Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚ĐžŅžĐ˛Đ°Ņ†ŅŒ ĐēĐģŅŽŅ‡Đ°Đ˛ĐžĐĩ ҁĐģОва: %s</string>
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">Đ”Đ°Đ´Đ°ĐšŅ†Đĩ Ņ†Ņ‹Ņ‚Đ°Ņ‚Ņ‹ да ĐēĐģŅŽŅ‡Đ°Đ˛ĐžĐŗĐ° ҁĐģОва: %s</string>
<string name="revanced_hide_keyword_toast_invalid_conflicting">КĐģŅŽŅ‡Đ°Đ˛ĐžĐĩ ҁĐģОва ĐŧаĐĩ ҁ҃ĐŋŅŅ€ŅŅ‡ĐģŅ–Đ˛Ņ‹Ņ Đ´ŅĐēĐģĐ°Ņ€Đ°Ņ†Ņ‹Ņ–: %s</string>
<string name="revanced_hide_keyword_toast_invalid_length">КĐģŅŽŅ‡Đ°Đ˛ĐžĐĩ ҁĐģОва СаĐŊĐ°Đ´Ņ‚Đ° ĐēĐ°Ņ€ĐžŅ‚ĐēаĐĩ Ņ– ĐŋĐ°Ņ‚Ņ€Đ°ĐąŅƒĐĩ Ņ†Ņ‹Ņ‚Đ°Ņ‚: %s</string>
<string name="revanced_hide_keyword_toast_invalid_broad">КĐģŅŽŅ‡Đ°Đ˛ĐžĐĩ ҁĐģОва ŅŅ…Đ°Đ˛Đ°Đĩ ŅžŅĐĩ Đ˛Ņ–Đ´ŅĐ°: %s</string>
</patch>
<patch id="ad.general.hideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Đ°ĐŗŅƒĐģҌĐŊŅƒŅŽ Ņ€ŅĐēĐģаĐŧ҃</string>
<string name="revanced_hide_general_ads_summary_on">ĐĐŗŅƒĐģҌĐŊŅ‹Ņ ай\"ŅĐ˛Ņ‹ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹Ņ</string>
<string name="revanced_hide_general_ads_summary_off">ПаĐēĐ°ĐˇĐ˛Đ°ŅŽŅ†Ņ†Đ° Đ°ĐŗŅƒĐģҌĐŊŅ‹Ņ ай\"ŅĐ˛Ņ‹</string>
<string name="revanced_hide_fullscreen_ads_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋĐžŅžĐŊĐ°ŅĐēŅ€Đ°ĐŊĐŊŅƒŅŽ Ņ€ŅĐēĐģаĐŧ҃</string>
<string name="revanced_hide_fullscreen_ads_summary_on">ĐŸĐžŅžĐŊĐ°ŅĐēŅ€Đ°ĐŊĐŊĐ°Ņ Ņ€ŅĐēĐģаĐŧа ŅŅ…Đ°Đ˛Đ°ĐŊа\n\nĐ“ŅŅ‚Đ° Ņ„ŅƒĐŊĐēŅ†Ņ‹Ņ Đ´Đ°ŅŅ‚ŅƒĐŋĐŊĐ°Ņ Ņ‚ĐžĐģҌĐēŅ– Đ´ĐģŅ ŅŅ‚Đ°Ņ€Ņ‹Ņ… ĐŋҀҋĐģад</string>
<string name="revanced_hide_fullscreen_ads_summary_on">"ĐĄŅ…Đ°Đ˛Đ°ĐŊŅ‹ ĐŋĐžŅžĐŊĐ°ŅĐēŅ€Đ°ĐŊĐŊŅ‹Ņ Ņ€ŅĐēĐģаĐŧĐŊŅ‹Ņ Ņ€ĐžĐģŅ–ĐēŅ–
Đ“ŅŅ‚Đ°Ņ Ņ„ŅƒĐŊĐēŅ†Ņ‹Ņ Đ´Đ°ŅŅ‚ŅƒĐŋĐŊĐ°Ņ Ņ‚ĐžĐģҌĐēŅ– Đ´ĐģŅ ŅŅ‚Đ°Ņ€Ņ‹Ņ… ĐŋҀҋĐģад"</string>
<string name="revanced_hide_fullscreen_ads_summary_off">АдĐģŅŽŅŅ‚Ņ€ĐžŅžĐ˛Đ°ĐĩŅ†Ņ†Đ° ĐŋĐžŅžĐŊĐ°ŅĐēŅ€Đ°ĐŊĐŊĐ°Ņ Ņ€ŅĐēĐģаĐŧа</string>
<string name="revanced_hide_buttoned_ads_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Ņ€ŅĐēĐģаĐŧ҃ ĐŊа ĐēĐŊĐžĐŋĐēĐ°Ņ…</string>
<string name="revanced_hide_buttoned_ads_summary_on">Ай\"ŅĐ˛Ņ‹ ĐŊа ĐēĐŊĐžĐŋĐēĐ°Ņ… ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹Ņ</string>
@@ -302,6 +349,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_products_banner_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ йаĐŊĐĩŅ€ Đ´ĐģŅ ĐŋŅ€Đ°ĐŗĐģŅĐ´Ņƒ ĐŋŅ€Đ°Đ´ŅƒĐēŅ‚Đ°Ņž</string>
<string name="revanced_hide_products_banner_summary_on">БаĐŊŅŅ€ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_products_banner_summary_off">ПаĐēаСваĐĩŅ†Ņ†Đ° йаĐŊŅŅ€</string>
<string name="revanced_hide_player_store_shelf_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋĐžĐģĐē҃ ĐēŅ€Đ°ĐŧŅ‹ ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐģҌĐŊŅ–Đēа</string>
<string name="revanced_hide_player_store_shelf_summary_on">ПаĐģŅ–Ņ†Đ° ĐēŅ€Đ°ĐŧŅ‹ ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_player_store_shelf_summary_off">ПаĐģŅ–Ņ†Đ° ĐēŅ€Đ°ĐŧŅ‹ ĐŋаĐēаСаĐŊа</string>
<string name="revanced_hide_shopping_links_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ҁĐŋĐ°ŅŅ‹ĐģĐēŅ– ĐŊа ĐŋаĐē҃ĐŋĐēŅ– Ņž аĐŋŅ–ŅĐ°ĐŊĐŊŅ– Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_hide_shopping_links_summary_on">ĐĄĐŋĐ°ŅŅ‹ĐģĐēŅ– ĐŊа ĐŋаĐē҃ĐŋĐēŅ– ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹Ņ</string>
<string name="revanced_hide_shopping_links_summary_off">ПаĐēĐ°ĐˇĐ˛Đ°ŅŽŅ†Ņ†Đ° ҁĐŋĐ°ŅŅ‹ĐģĐēŅ– ĐŊа ĐŋаĐē҃ĐŋĐēŅ–</string>
@@ -375,7 +425,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_swipe_volume_title">ĐŖĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ ĐļŅŅŅ‚ ĐŗŅƒŅ‡ĐŊĐ°ŅŅ†Ņ–</string>
<string name="revanced_swipe_volume_summary_on">ĐŸŅ€Đ°Đ˛ŅĐ´ĐˇĐĩĐŊĐŊĐĩ ĐŋаĐģŅŒŅ†Đ°Đŧ Đŋа ĐŗŅƒŅ‡ĐŊĐ°ŅŅ†Ņ– ŅžĐēĐģŅŽŅ‡Đ°ĐŊа</string>
<string name="revanced_swipe_volume_summary_off">ĐŸŅ€Đ°Đ˛ŅĐ´ĐˇĐĩĐŊĐŊĐĩ ĐŋаĐģŅŒŅ†Đ°Đŧ Đŋа ĐŗŅƒŅ‡ĐŊĐ°ŅŅ†Ņ– адĐēĐģŅŽŅ‡Đ°ĐŊа</string>
<string name="revanced_swipe_press_to_engage_title">ĐŖĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ ĐļŅŅŅ‚ \"ĐŊĐ°Ņ†Ņ–ŅĐēаĐŊĐŊĐĩ Đ´ĐģŅ ĐŋŅ€Đ°Đ˛ŅĐ´ĐˇĐĩĐŊĐŊŅ ĐŋаĐģŅŒŅ†Đ°Đŧ\".</string>
<string name="revanced_swipe_press_to_engage_title">ĐŖĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ ĐļŅŅŅ‚ \"ĐŊĐ°Ņ†Ņ–ŅĐēаĐŊĐŊĐĩ Đ´ĐģŅ ĐŋŅ€Đ°Đ˛ŅĐ´ĐˇĐĩĐŊĐŊŅ ĐŋаĐģŅŒŅ†Đ°Đŧ\"</string>
<string name="revanced_swipe_press_to_engage_summary_on">ĐŸŅ€Đ°Đ˛ŅĐ´ĐˇĐĩĐŊĐŊĐĩ ĐŋаĐģŅŒŅ†Đ°Đŧ ҃ĐēĐģŅŽŅ‡Đ°ĐŊа</string>
<string name="revanced_swipe_press_to_engage_summary_off">ĐŸŅ€Đ°Đ˛ŅĐ´ĐˇĐĩĐŊĐŊĐĩ ĐŋаĐģŅŒŅ†Đ°Đŧ адĐēĐģŅŽŅ‡Đ°ĐŊа</string>
<string name="revanced_swipe_haptic_feedback_title">ĐŖĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ Ņ‚Đ°Đē҂ҋĐģҌĐŊŅƒŅŽ ĐˇĐ˛Đ°Ņ€ĐžŅ‚ĐŊŅƒŅŽ ŅŅƒĐ˛ŅĐˇŅŒ</string>
@@ -405,22 +455,22 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="layout.buttons.action.hideButtonsPatch">
<string name="revanced_hide_buttons_screen_title">КĐŊĐžĐŋĐēŅ– дСĐĩŅĐŊĐŊŅŅž</string>
<string name="revanced_hide_buttons_screen_summary">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ айО ĐŋаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐēŅ– Đŋад Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_hide_like_dislike_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ \"ПадабаĐĩŅ†Ņ†Đ°\" Ņ– \"НĐĩ ĐŋадайаĐĩŅ†Ņ†Đ°\".</string>
<string name="revanced_hide_like_dislike_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ \"ПадабаĐĩŅ†Ņ†Đ°\" Ņ– \"НĐĩ ĐŋадайаĐĩŅ†Ņ†Đ°\"</string>
<string name="revanced_hide_like_dislike_button_summary_on">КĐŊĐžĐŋĐēŅ– \"ПадабаĐĩŅ†Ņ†Đ°\" Ņ– \"НĐĩ ĐŋадайаĐĩŅ†Ņ†Đ°\" ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_like_dislike_button_summary_off">ПаĐēĐ°ĐˇĐ˛Đ°ŅŽŅ†Ņ†Đ° ĐēĐŊĐžĐŋĐēŅ– \"ПадабаĐĩŅ†Ņ†Đ°\" Ņ– \"НĐĩ ĐŋадайаĐĩŅ†Ņ†Đ°\".</string>
<string name="revanced_hide_like_dislike_button_summary_off">ПаĐēĐ°ĐˇĐ˛Đ°ŅŽŅ†Ņ†Đ° ĐēĐŊĐžĐŋĐēŅ– \"ПадабаĐĩŅ†Ņ†Đ°\" Ņ– \"НĐĩ ĐŋадайаĐĩŅ†Ņ†Đ°\"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_share_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Share</string>
<string name="revanced_hide_share_button_summary_on">КĐŊĐžĐŋĐēа \"ĐŸĐ°Đ´ĐˇŅĐģŅ–Ņ†Ņ†Đ°\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_share_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐŸĐ°Đ´ĐˇŅĐģŅ–Ņ†Ņ†Đ°\".</string>
<string name="revanced_hide_share_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐŸĐ°Đ´ĐˇŅĐģŅ–Ņ†Ņ†Đ°\"</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
<string name="revanced_hide_report_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ҁĐŋŅ€Đ°Đ˛Đ°ĐˇĐ´Đ°Ņ‡Ņƒ</string>
<string name="revanced_hide_report_button_summary_on">КĐŊĐžĐŋĐēа \"ПавĐĩдаĐŧŅ–Ņ†ŅŒ\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_report_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ПавĐĩдаĐŧŅ–Ņ†ŅŒ\".</string>
<string name="revanced_hide_report_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ПавĐĩдаĐŧŅ–Ņ†ŅŒ\"</string>
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_remix_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Ņ€ŅĐŧŅ–Đēҁ</string>
<string name="revanced_hide_remix_button_summary_on">КĐŊĐžĐŋĐēа \"Đ ŅĐŧŅ–Đēҁ\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_remix_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"Đ ŅĐŧŅ–Đēҁ\".</string>
<string name="revanced_hide_remix_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"Đ ŅĐŧŅ–Đēҁ\"</string>
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_download_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐˇĐ°ĐŗŅ€ŅƒĐˇĐē҃</string>
<string name="revanced_hide_download_button_summary_on">КĐŊĐžĐŋĐēа ĐˇĐ°ĐŗŅ€ŅƒĐˇĐēŅ– ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
@@ -436,7 +486,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_playlist_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Đ—Đ°Ņ…Đ°Đ˛Đ°Ņ†ŅŒ ҃ ĐŋĐģŅĐšĐģҖҁ҂</string>
<string name="revanced_hide_playlist_button_summary_on">КĐŊĐžĐŋĐēа \"Đ—Đ°Ņ…Đ°Đ˛Đ°Ņ†ŅŒ ҃ ҁĐŋҖҁ ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐŊĐŊŅ\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_playlist_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"Đ—Đ°Ņ…Đ°Đ˛Đ°Ņ†ŅŒ ҃ ҁĐŋҖҁ ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐŊĐŊŅ\".</string>
<string name="revanced_hide_playlist_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"Đ—Đ°Ņ…Đ°Đ˛Đ°Ņ†ŅŒ ҃ ҁĐŋҖҁ ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐŊĐŊŅ\"</string>
</patch>
<patch id="layout.buttons.navigation.navigationButtonsPatch">
<string name="revanced_navigation_buttons_screen_title">КĐŊĐžĐŋĐēŅ– ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ–</string>
@@ -444,23 +494,37 @@ This is because Crowdin requires temporarily flattening this file and removing t
<!-- 'Home' should be translated using the same localized wording YouTube displays for the tab. -->
<string name="revanced_hide_home_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŗĐ°ĐģĐžŅžĐŊŅƒŅŽ</string>
<string name="revanced_hide_home_button_summary_on">КĐŊĐžĐŋĐēа \"ДадоĐŧ҃\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_home_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ДадоĐŧ҃\".</string>
<string name="revanced_hide_home_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ДадоĐŧ҃\"</string>
<!-- 'Shorts' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_hide_shorts_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Shorts</string>
<string name="revanced_hide_shorts_button_summary_on">КĐŊĐžĐŋĐēа Shorts ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_button_summary_off">КĐŊĐžĐŋĐēа shorts ĐŋаĐēаСваĐĩŅ†Ņ†Đ°</string>
<!-- The Create button has no display name. Translate normally. -->
<string name="revanced_hide_create_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐĄŅ‚Đ˛Đ°Ņ€Ņ‹Ņ†ŅŒ</string>
<string name="revanced_hide_create_button_summary_on">КĐŊĐžĐŋĐēа \"ĐĄŅ‚Đ˛Đ°Ņ€Ņ‹Ņ†ŅŒ\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_create_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐĄŅ‚Đ˛Đ°Ņ€Ņ‹Ņ†ŅŒ\".</string>
<string name="revanced_hide_create_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐĄŅ‚Đ˛Đ°Ņ€Ņ‹Ņ†ŅŒ\"</string>
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_hide_subscriptions_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋадĐŋҖҁĐēŅ–</string>
<string name="revanced_hide_subscriptions_button_summary_on">КĐŊĐžĐŋĐēа \"ПадĐŋҖҁĐēŅ–\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_subscriptions_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ПадĐŋҖҁĐēŅ–\".</string>
<string name="revanced_hide_subscriptions_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ПадĐŋҖҁĐēŅ–\"</string>
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_switch_create_with_notifications_button_title">ПĐĩŅ€Đ°ĐēĐģŅŽŅ‡Đ°ĐģҌĐŊŅ–Đē \"ĐĄŅ‚Đ˛Đ°Ņ€Ņ‹Ņ†ŅŒ С аĐŋĐ°Đ˛ŅŅˆŅ‡ŅĐŊĐŊŅĐŧŅ–\".</string>
<string name="revanced_switch_create_with_notifications_button_summary_on">КĐŊĐžĐŋĐēа \"ĐĄŅ‚Đ˛Đ°Ņ€Ņ‹Ņ†ŅŒ\" СаĐŧŅĐŊŅĐĩŅ†Ņ†Đ° ĐēĐŊĐžĐŋĐēаК \"АĐŋĐ°Đ˛ŅŅˆŅ‡ŅĐŊĐŊŅ–\"\n\nĐ—Đ°ŅžĐ˛Đ°ĐŗĐ°: ĐŋҀҋ ŅžĐēĐģŅŽŅ‡ŅĐŊĐŊŅ– ĐŗŅŅ‚Đ°ĐŗĐ° Ņ‚Đ°ĐēŅĐ°Đŧа ĐŋҀҋĐŧŅƒŅĐžĐ˛Đ° Ņ…Đ°Đ˛Đ°ĐĩŅ†Ņ†Đ° Đ˛Ņ–Đ´ŅĐ°Ņ€ŅĐēĐģаĐŧа</string>
<string name="revanced_switch_create_with_notifications_button_summary_off">КĐŊĐžĐŋĐēа \"ĐĄŅ‚Đ˛Đ°Ņ€Ņ‹Ņ†ŅŒ\" ĐŊĐĩ ŅžĐˇĐ°ĐĩĐŧадСĐĩĐšĐŊŅ–Ņ‡Đ°Đĩ С ĐēĐŊĐžĐŋĐēаК \"АĐŋĐ°Đ˛ŅŅˆŅ‡ŅĐŊĐŊŅ–\".</string>
<string name="revanced_switch_create_with_notifications_button_title">ПĐĩŅ€Đ°ĐēĐģŅŽŅ‡Đ°ĐģҌĐŊŅ–Đē \"ĐĄŅ‚Đ˛Đ°Ņ€Ņ‹Ņ†ŅŒ С аĐŋĐ°Đ˛ŅŅˆŅ‡ŅĐŊĐŊŅĐŧŅ–\"</string>
<string name="revanced_switch_create_with_notifications_button_summary_on">"КĐŊĐžĐŋĐēа ÂĢĐĄŅ‚Đ˛Đ°Ņ€Ņ‹Ņ†ŅŒÂģ СаĐŧĐĩĐŊĐĩĐŊа ĐēĐŊĐžĐŋĐēаК ÂĢАĐŋĐ°Đ˛ŅŅˆŅ‡ŅĐŊĐŊŅ–Âģ
Đ—Đ°ŅžĐ˛Đ°ĐŗĐ°: ĐŖĐēĐģŅŽŅ‡ŅĐŊĐŊĐĩ ĐŗŅŅ‚Đ°ĐŗĐ° Ņ‚Đ°ĐēŅĐ°Đŧа ĐŋҀҋĐŧŅƒŅĐžĐ˛Đ° ŅŅ…Đ°Đ˛Đ°Đĩ Đ˛Ņ–Đ´ŅĐ°Ņ€ŅĐēĐģаĐŧ҃"</string>
<string name="revanced_switch_create_with_notifications_button_summary_off">КĐŊĐžĐŋĐēа \"ĐĄŅ‚Đ˛Đ°Ņ€Ņ‹Ņ†ŅŒ\" ĐŊĐĩ ŅžĐˇĐ°ĐĩĐŧадСĐĩĐšĐŊŅ–Ņ‡Đ°Đĩ С ĐēĐŊĐžĐŋĐēаК \"АĐŋĐ°Đ˛ŅŅˆŅ‡ŅĐŊĐŊŅ–\"</string>
<string name="revanced_hide_navigation_button_labels_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŧĐĩŅ‚ĐēŅ– ĐēĐŊĐžĐŋаĐē ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ–</string>
<string name="revanced_hide_navigation_button_labels_summary_on">ĐĻŅŅ‚ĐģŅ–ĐēŅ– ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹Ņ</string>
<string name="revanced_hide_navigation_button_labels_summary_off">Đ­Ņ‚Ņ‹ĐēĐĩŅ‚ĐēŅ– ĐŋаĐēаСаĐŊŅ‹</string>
<string name="revanced_disable_translucent_status_bar_title">АдĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ ĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚ŅƒŅŽ ĐŋаĐŊŅĐģҌ ŅŅ‚Đ°ĐŊ҃</string>
<string name="revanced_disable_translucent_status_bar_summary_on">ПаĐŊŅĐģҌ ŅŅ‚Đ°ĐŊ҃ ĐŊĐĩĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚Đ°Ņ.</string>
<string name="revanced_disable_translucent_status_bar_summary_off">ПаĐŊŅĐģҌ ŅŅ‚Đ°ĐŊ҃ ĐŊŅĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚Đ°Ņ ҆Җ ĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚Đ°Ņ.</string>
<string name="revanced_disable_translucent_navigation_bar_light_title">АдĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ ŅĐ˛ĐĩŅ‚ĐģŅƒŅŽ ĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚ŅƒŅŽ ĐŋаĐŊŅĐģҌ</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_on">ПаĐŊŅĐģҌ ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ– Ņž ŅĐ˛ĐĩŅ‚ĐģŅ‹Đŧ Ņ€ŅĐļŅ‹ĐŧĐĩ ĐŊĐĩĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚Đ°Ņ</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">ПаĐŊŅĐģҌ ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ– Ņž ŅĐ˛ĐĩŅ‚ĐģаК Ņ‚ŅĐŧĐĩ ĐŊŅĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚Đ°Ņ ҆Җ ĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚Đ°Ņ.</string>
<string name="revanced_disable_translucent_navigation_bar_dark_title">АдĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ ҆ґĐŧĐŊŅƒŅŽ ĐŊĐĩĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚ŅƒŅŽ ĐŋаĐŊŅĐģҌ.</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_on">ПаĐŊŅĐģҌ ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ– Ņž ҆ґĐŧĐŊŅ‹Đŧ Ņ€ŅĐļŅ‹ĐŧĐĩ ĐŊĐĩĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚Đ°Ņ</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">ПаĐŊŅĐģҌ ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ– Ņž ҆ґĐŧĐŊаК Ņ‚ŅĐŧĐĩ ĐŊŅĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚Đ°Ņ.</string>
</patch>
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
<string name="revanced_hide_player_flyout_title">Đ’Ņ‹ĐŋĐ°Đ´Đ°ŅŽŅ‡Đ°Đĩ ĐŧĐĩĐŊŅŽ</string>
@@ -474,6 +538,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_flyout_additional_settings_summary_on">МĐĩĐŊŅŽ Đ´Đ°Đ´Đ°Ņ‚ĐēĐžĐ˛Ņ‹Ņ… ĐŊаĐģад ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_player_flyout_additional_settings_summary_off">АдĐģŅŽŅŅ‚Ņ€ŅƒĐĩŅ†Ņ†Đ° ĐŧĐĩĐŊŅŽ Đ´Đ°Đ´Đ°Ņ‚ĐēĐžĐ˛Ņ‹Ņ… ĐŊаĐģад</string>
<!-- 'Sleep timer' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_sleep_timer_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Ņ‚Đ°ĐšĐŧĐĩŅ€ ҁĐŊ҃</string>
<string name="revanced_hide_player_flyout_sleep_timer_summary_on">МĐĩĐŊŅŽ Ņ‚Đ°ĐšĐŧĐĩŅ€Đ° ҁĐŊ҃ ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_player_flyout_sleep_timer_summary_off">МĐĩĐŊŅŽ Ņ‚Đ°ĐšĐŧĐĩŅ€Đ° ҁĐŊ҃ ĐŋаĐēаСаĐŊа</string>
<!-- 'Loop video' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_loop_video_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ҆ҋĐēĐģ Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_hide_player_flyout_loop_video_summary_on">МĐĩĐŊŅŽ ҆ҋĐēĐģҖ҇ĐŊĐ°ĐŗĐ° Đ˛Ņ–Đ´ŅĐ° ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
@@ -482,6 +549,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_flyout_ambient_mode_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŊĐĩаĐēŅ‚Ņ‹ŅžĐŊŅ‹ Ņ€ŅĐļŅ‹Đŧ</string>
<string name="revanced_hide_player_flyout_ambient_mode_summary_on">МĐĩĐŊŅŽ ĐŊĐĩаĐēŅ‚Ņ‹ŅžĐŊĐ°ĐŗĐ° Ņ€ŅĐļŅ‹Đŧ҃ ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_player_flyout_ambient_mode_summary_off">АдĐģŅŽŅŅ‚Ņ€ĐžŅžĐ˛Đ°ĐĩŅ†Ņ†Đ° ĐŧĐĩĐŊŅŽ Ņ€ŅĐļŅ‹Đŧ҃ ĐŊаваĐēĐžĐģҌĐŊĐ°ĐŗĐ° Đ°ŅŅŅ€ĐžĐ´Đ´ĐˇŅ</string>
<string name="revanced_hide_player_flyout_stable_volume_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ŅŅ‚Đ°ĐąŅ–ĐģҌĐŊŅ‹ ĐŗŅƒĐē</string>
<string name="revanced_hide_player_flyout_stable_volume_summary_off">МĐĩĐŊŅŽ ŅŅ‚Đ°ĐąŅ–ĐģҌĐŊĐ°ĐŗĐ° ĐŗŅƒĐē҃ ĐŋаĐēаСаĐŊа</string>
<string name="revanced_hide_player_flyout_stable_volume_summary_on">МĐĩĐŊŅŽ ŅŅ‚Đ°ĐąŅ–ĐģҌĐŊĐ°ĐŗĐ° ĐŗŅƒĐē҃ ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_help_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ДавĐĩĐ´Đē҃ &amp; ĐˇĐ˛Đ°Ņ€ĐžŅ‚ĐŊĐ°Ņ ŅŅƒĐ˛ŅĐˇŅŒ</string>
<string name="revanced_hide_player_flyout_help_summary_on">ДаĐŋаĐŧĐžĐŗĐ° &amp; ĐŧĐĩĐŊŅŽ ĐˇĐ˛Đ°Ņ€ĐžŅ‚ĐŊаК ŅŅƒĐ˛ŅĐˇŅ– ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
@@ -506,7 +576,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_watch_in_vr_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŗĐ°Đ´ĐˇŅ–ĐŊĐŊŅ–Đē ҃ VR</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">МĐĩĐŊŅŽ ĐŋŅ€Đ°ĐŗĐģŅĐ´Ņƒ Ņž VR ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">ПаĐēаСаĐŊа ĐŧĐĩĐŊŅŽ \"ГĐģŅĐ´ĐˇĐĩŅ†ŅŒ ҃ VR\".</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">ПаĐēаСаĐŊа ĐŧĐĩĐŊŅŽ \"ГĐģŅĐ´ĐˇĐĩŅ†ŅŒ ҃ VR\"</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēаĐģĐžĐŊŅ‚Ņ‹Ņ‚ŅƒĐģ ĐŧĐĩĐŊŅŽ ŅĐēĐ°ŅŅ†Ņ– Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">ĐŅ–ĐļĐŊŅ– ĐēаĐģĐžĐŊŅ‚Ņ‹Ņ‚ŅƒĐģ ĐŧĐĩĐŊŅŽ ŅĐēĐ°ŅŅ†Ņ– Đ˛Ņ–Đ´ŅĐ° ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">ПаĐēаСваĐĩŅ†Ņ†Đ° ĐŊŅ–ĐļĐŊŅ– ĐēаĐģĐžĐŊŅ‚Ņ‹Ņ‚ŅƒĐģ ĐŧĐĩĐŊŅŽ ŅĐēĐ°ŅŅ†Ņ– Đ˛Ņ–Đ´ŅĐ°</string>
@@ -519,7 +589,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_cast_button_summary_on">КĐŊĐžĐŋĐēа Cast ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_cast_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа Cast</string>
<!-- This button does not display any text, but 'captions' should be translated using the same wording used as the translation of 'revanced_hide_player_flyout_captions_title' -->
<string name="revanced_hide_captions_button_title">КĐŊĐžĐŋĐēа ÂĢĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ҆Җ҂ҀҋÂģ.</string>
<string name="revanced_hide_captions_button_title">КĐŊĐžĐŋĐēа ÂĢĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ҆Җ҂ҀҋÂģ</string>
<string name="revanced_hide_captions_button_summary_on">КĐŊĐžĐŋĐēа ŅŅƒĐąŅ†Ņ–Ņ‚Ņ€Đ°Ņž ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_captions_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ŅŅƒĐąŅ†Ņ–Ņ‚Ņ€Đ°Ņž</string>
<string name="revanced_hide_autoplay_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ Đ°ŅžŅ‚Đ°ĐˇĐ°Đŋ҃ҁĐē҃</string>
@@ -555,16 +625,27 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_seekbar_thumbnail_summary_off">АдĐģŅŽŅŅ‚Ņ€ĐžŅžĐ˛Đ°ĐĩŅ†Ņ†Đ° ĐŋаĐŊŅĐģҌ ĐŋĐžŅˆŅƒĐē҃ ŅŅĐēŅ–ĐˇĐ°Ņž</string>
</patch>
<patch id="layout.hide.shorts.hideShortsComponentsResourcePatch">
<string name="revanced_shorts_player_screen_title">ĐŸŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐģҌĐŊŅ–Đē Shorts</string>
<string name="revanced_shorts_player_screen_summary">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ айО ĐŋаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐēаĐŧĐŋаĐŊĐĩĐŊ҂ҋ Ņž ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐģҌĐŊŅ–Đē҃ Shorts</string>
<!-- 'home' should be translated using the same localized wording YouTube displays for the home tab. -->
<string name="revanced_hide_shorts_home_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ŅˆĐžŅ€Ņ‚Ņ‹ Ņž Ņ…Đ°Ņ‚ĐŊŅĐš ŅŅ‚ŅƒĐļ҆ҋ</string>
<string name="revanced_hide_shorts_home_summary_on">Shorts ҃ ŅŅ‚ŅƒĐļ҆ҋ Ņ…Đ°Ņ‚ĐŊŅĐš ŅŅ‚Đ°Ņ€ĐžĐŊĐēŅ– ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_shorts_home_summary_off">Shorts ҃ ŅŅ‚ŅƒĐļ҆ҋ Ņ…Đ°Ņ‚ĐŊŅĐš ŅŅ‚Đ°Ņ€ĐžĐŊĐēŅ– ĐŋаĐēаСаĐŊŅ‹</string>
<!-- 'subscription' should be translated using the same localized wording YouTube displays for the subscription tab. -->
<string name="revanced_hide_shorts_subscriptions_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Shorts ҃ ŅŅ‚ŅƒĐļ҆ҋ ĐŋадĐŋҖҁĐēŅ–</string>
<string name="revanced_hide_shorts_subscriptions_summary_on">Shorts ҃ ŅŅ‚ŅƒĐļ҆ҋ ĐŋадĐŋҖҁĐēŅ– ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_shorts_subscriptions_summary_off">Shorts ҃ ŅŅ‚ŅƒĐļ҆ҋ ĐŋадĐŋҖҁĐēŅ– ĐŋаĐēаСаĐŊŅ‹</string>
<string name="revanced_hide_shorts_search_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Shorts ҃ Đ˛Ņ‹ĐŊŅ–ĐēĐ°Ņ… ĐŋĐžŅˆŅƒĐē҃</string>
<string name="revanced_hide_shorts_search_summary_on">Shorts ҃ Đ˛Ņ‹ĐŊŅ–ĐēĐ°Ņ… ĐŋĐžŅˆŅƒĐē҃ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_shorts_search_summary_off">Shorts ҃ Đ˛Ņ‹ĐŊŅ–ĐēĐ°Ņ… ĐŋĐžŅˆŅƒĐē҃ ĐŋаĐēаСаĐŊŅ‹</string>
<!-- 'join' should be translated using the same localized wording YouTube displays for the button. -->
<string name="revanced_hide_shorts_join_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ даĐģŅƒŅ‡Ņ‹Ņ†Ņ†Đ°</string>
<string name="revanced_hide_shorts_join_button_summary_on">КĐŊĐžĐŋĐēа ÂĢДаĐģŅƒŅ‡Ņ‹Ņ†Ņ†Đ°Âģ ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_join_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ÂĢДаĐģŅƒŅ‡Ņ‹Ņ†Ņ†Đ°Âģ.</string>
<string name="revanced_hide_shorts_join_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ÂĢДаĐģŅƒŅ‡Ņ‹Ņ†Ņ†Đ°Âģ</string>
<!-- 'subscribe' should be translated using the same localized wording YouTube displays for the button. -->
<string name="revanced_hide_shorts_subscribe_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ĐŋадĐŋŅ–ŅĐ°Ņ†Ņ†Đ°</string>
<string name="revanced_hide_shorts_subscribe_button_summary_on">КĐŊĐžĐŋĐēа \"ПадĐŋŅ–ŅĐ°Ņ†Ņ†Đ°\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_subscribe_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ÂĢПадĐŋŅ–ŅĐ°Ņ†Ņ†Đ°Âģ.</string>
<string name="revanced_hide_shorts_subscribe_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ÂĢПадĐŋŅ–ŅĐ°Ņ†Ņ†Đ°Âģ</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋҀҋĐŋŅ‹ĐŊĐĩĐŊŅ‹Ņ ĐēĐŊĐžĐŋĐēŅ– ĐŊаĐēĐģадаĐŊĐŊŅ</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">ĐŸŅ€Ņ‹ĐŋŅ‹ĐŊĐĩĐŊŅ‹Ņ ĐēĐŊĐžĐŋĐēŅ– ĐŊаĐēĐģадаĐŊĐŊŅ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">ПаĐēĐ°ĐˇĐ˛Đ°ŅŽŅ†Ņ†Đ° ĐŋҀҋĐŋŅ‹ĐŊĐĩĐŊŅ‹Ņ ĐēĐŊĐžĐŋĐēŅ– ĐŊаĐēĐģадаĐŊĐŊŅ</string>
@@ -573,33 +654,54 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_shop_button_summary_off">ПаĐēаСваĐĩŅ†Ņ†Đ° ĐēĐŊĐžĐŋĐēа ĐēŅ€Đ°ĐŧŅ‹</string>
<string name="revanced_hide_shorts_super_thanks_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ҁ҃ĐŋĐĩŅ€Đ´ĐˇŅĐēŅƒĐš</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_on">КĐŊĐžĐŋĐēа ҁ҃ĐŋĐĩŅ€Đ´ĐˇŅĐēŅƒĐš ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐĄŅƒĐŋĐĩŅ€ Đ´ĐˇŅĐēŅƒĐš\".</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐĄŅƒĐŋĐĩŅ€ Đ´ĐˇŅĐēŅƒĐš\"</string>
<string name="revanced_hide_shorts_tagged_products_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋаСĐŊĐ°Ņ‡Đ°ĐŊŅ‹Ņ ĐŋŅ€Đ°Đ´ŅƒĐē҂ҋ</string>
<string name="revanced_hide_shorts_tagged_products_summary_on">ПазĐŊĐ°Ņ‡Đ°ĐŊŅ‹Ņ ĐŋŅ€Đ°Đ´ŅƒĐē҂ҋ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_shorts_tagged_products_summary_off">ĐŸŅ€Đ°Đ´ŅƒĐē҂ҋ С Ņ‚ŅĐŗĐ°ĐŧŅ– ĐŋаĐēаСаĐŊŅ‹</string>
<string name="revanced_hide_shorts_location_label_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŧĐĩŅ‚Đē҃ ĐŧĐĩŅŅ†Đ°ĐˇĐŊĐ°Ņ…ĐžĐ´ĐļаĐŊĐŊŅ</string>
<string name="revanced_hide_shorts_location_label_summary_on">МĐĩŅ‚Đēа ĐŧĐĩŅŅ†Đ°ĐˇĐŊĐ°Ņ…ĐžĐ´ĐļаĐŊĐŊŅ ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_location_label_summary_off">ПаĐēаСаĐŊа ĐŧĐĩŅ‚Đēа ĐŧĐĩŅŅ†Đ°ĐˇĐŊĐ°Ņ…ĐžĐ´ĐļаĐŊĐŊŅ</string>
<string name="revanced_hide_shorts_save_sound_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ĐˇĐ°Ņ…Đ°Đ˛Đ°ĐŊĐŊŅ ĐŧŅƒĐˇŅ‹ĐēŅ–</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">КĐŊĐžĐŋĐēа ĐˇĐ°Ņ…Đ°Đ˛Đ°ĐŊĐŊŅ ĐŧŅƒĐˇŅ‹ĐēŅ– ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">КĐŊĐžĐŋĐēа ĐˇĐ°Ņ…Đ°Đ˛Đ°ĐŊĐŊŅ ĐŧŅƒĐˇŅ‹ĐēŅ– ĐŋаĐēаСаĐŊа</string>
<string name="revanced_hide_shorts_use_template_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ Đ˛Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐŊĐŊŅ ŅˆĐ°ĐąĐģĐžĐŊ҃</string>
<string name="revanced_hide_shorts_use_template_button_summary_on">КĐŊĐžĐŋĐēа Đ˛Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐŊĐŊŅ ŅˆĐ°ĐąĐģĐžĐŊ҃ ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_use_template_button_summary_off">КĐŊĐžĐŋĐēа Đ˛Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐŊĐŊŅ ŅˆĐ°ĐąĐģĐžĐŊ҃ ĐŋаĐēаСаĐŊа</string>
<string name="revanced_hide_shorts_upcoming_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ĐąŅƒĐ´ŅƒŅ‡Ņ‹Ņ…</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">КĐŊĐžĐŋĐēа âŦ†ī¸Đ‘ŅƒĐ´ŅƒŅ‰Đ¸Đĩ Ņ€ĐžĐģиĐēиâŦ†ī¸ ҁĐēŅ€Ņ‹Ņ‚Đ°</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">КĐŊĐžĐŋĐēа âŦ†ī¸Đ‘ŅƒĐ´ŅƒŅ‰Đ¸Đĩ Ņ€ĐžĐģиĐēиâŦ†ī¸ ĐžŅ‚ĐžĐąŅ€Đ°ĐļаĐĩŅ‚ŅŅ</string>
<string name="revanced_hide_shorts_green_screen_button_title">ĐĄĐēŅ€Ņ‹Ņ‚ŅŒ ĐēĐŊĐžĐŋĐē҃ ҁ СĐĩĐģŅ‘ĐŊŅ‹Đŧ ŅĐēŅ€Đ°ĐŊĐžĐŧ Shorts</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">КĐŊĐžĐŋĐēа ҁ СĐĩĐģŅ‘ĐŊŅ‹Đŧ ŅĐēŅ€Đ°ĐŊĐžĐŧ Shorts ҁĐēŅ€Ņ‹Ņ‚Đ°</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">КĐŊĐžĐŋĐēа ҁ СĐĩĐģŅ‘ĐŊŅ‹Đŧ ŅĐēŅ€Đ°ĐŊĐžĐŧ Shorts ĐžŅ‚ĐžĐąŅ€Đ°ĐļаĐĩŅ‚ŅŅ</string>
<string name="revanced_hide_shorts_hashtag_button_title">ĐĄĐēŅ€Ņ‹Ņ‚ŅŒ Ņ…ĐĩŅˆŅ‚ĐĩĐŗ-ĐēĐŊĐžĐŋĐē҃ Shorts</string>
<string name="revanced_hide_shorts_hashtag_button_summary_on">ĐĨĐĩŅˆŅ‚ĐĩĐŗ-ĐēĐŊĐžĐŋĐēа Shorts ҁĐēŅ€Ņ‹Ņ‚Đ°</string>
<string name="revanced_hide_shorts_hashtag_button_summary_off">ĐĨĐĩŅˆŅ‚ĐĩĐŗ-ĐēĐŊĐžĐŋĐēа Shorts ĐžŅ‚ĐžĐąŅ€Đ°ĐļаĐĩŅ‚ŅŅ</string>
<string name="revanced_hide_shorts_search_suggestions_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋŅ€Đ°ĐŋаĐŊĐžĐ˛Ņ‹ ĐŋĐžŅˆŅƒĐē҃</string>
<string name="revanced_hide_shorts_search_suggestions_summary_on">ĐŸĐžŅˆŅƒĐēĐ°Đ˛Ņ‹Ņ ĐŋŅ€Đ°ĐŋаĐŊĐžĐ˛Ņ‹ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_shorts_search_suggestions_summary_off">ПаĐēĐ°ĐˇĐ˛Đ°ŅŽŅ†Ņ†Đ° ĐŋŅ€Đ°ĐŋаĐŊĐžĐ˛Ņ‹ ĐŋĐžŅˆŅƒĐē҃</string>
<string name="revanced_hide_shorts_like_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ \"ПадабаĐĩŅ†Ņ†Đ°\".</string>
<string name="revanced_hide_shorts_stickers_title">ĐĄĐēŅ€Ņ‹Ņ‚ŅŒ ŅŅ‚Đ¸ĐēĐĩҀҋ</string>
<string name="revanced_hide_shorts_stickers_summary_on">ĐĄŅ‚Đ¸ĐēĐĩҀҋ Shorts ҁĐēҀҋ҂ҋ</string>
<string name="revanced_hide_shorts_stickers_summary_off">ĐĄŅ‚Đ¸ĐēĐĩҀҋ Shorts ĐžŅ‚ĐžĐąŅ€Đ°ĐļĐ°ŅŽŅ‚ŅŅ</string>
<string name="revanced_hide_shorts_like_fountain_title">ĐĄĐēŅ€Ņ‹Ņ‚ŅŒ Đ˛ŅĐŋĐģŅ‹Đ˛Đ°ŅŽŅ‰ĐĩĐĩ ĐžĐēĐŊĐž ҁ ĐģаКĐēаĐŧи Shorts</string>
<string name="revanced_hide_shorts_like_fountain_summary_on">АĐŊиĐŧĐ°Ņ†Đ¸Ņ Đ˛ŅĐŋĐģŅ‹Đ˛Đ°ŅŽŅ‰ĐĩĐŗĐž ĐžĐēĐŊа ҁ ĐģаКĐēаĐŧи Shorts ҁĐēŅ€Ņ‹Ņ‚Đ°</string>
<string name="revanced_hide_shorts_like_fountain_summary_off">АĐŊиĐŧĐ°Ņ†Đ¸Ņ Đ˛ŅĐŋĐģŅ‹Đ˛Đ°ŅŽŅ‰ĐĩĐŗĐž ĐžĐēĐŊа ҁ ĐģаКĐēаĐŧи Shorts ĐžŅ‚ĐžĐąŅ€Đ°ĐļаĐĩŅ‚ŅŅ</string>
<string name="revanced_hide_shorts_like_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ \"ПадабаĐĩŅ†Ņ†Đ°\"</string>
<string name="revanced_hide_shorts_like_button_summary_on">КĐŊĐžĐŋĐēа \"ПадабаĐĩŅ†Ņ†Đ°\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_like_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ПадабаĐĩŅ†Ņ†Đ°\".</string>
<string name="revanced_hide_shorts_dislike_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ \"ĐŊĐĩ ĐŋадайаĐĩŅ†Ņ†Đ°\".</string>
<string name="revanced_hide_shorts_like_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ПадабаĐĩŅ†Ņ†Đ°\"</string>
<string name="revanced_hide_shorts_dislike_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ \"ĐŊĐĩ ĐŋадайаĐĩŅ†Ņ†Đ°\"</string>
<string name="revanced_hide_shorts_dislike_button_summary_on">КĐŊĐžĐŋĐēа \"НĐĩ ĐŋадайаĐĩŅ†Ņ†Đ°\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_dislike_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"НĐĩ ĐŋадайаĐĩŅ†Ņ†Đ°\".</string>
<string name="revanced_hide_shorts_comments_button_title">КĐŊĐžĐŋĐēа \"ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Ņ–\".</string>
<string name="revanced_hide_shorts_dislike_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"НĐĩ ĐŋадайаĐĩŅ†Ņ†Đ°\"</string>
<string name="revanced_hide_shorts_comments_button_title">КĐŊĐžĐŋĐēа \"ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Ņ–\"</string>
<string name="revanced_hide_shorts_comments_button_summary_on">КĐŊĐžĐŋĐēа ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹ŅŅž ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_comments_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹ŅŅž</string>
<!-- 'remix' should be translated using the same localized wording YouTube displays for the button. -->
<string name="revanced_hide_shorts_remix_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ Ņ€ŅĐŧŅ–ĐēŅĐ°</string>
<string name="revanced_hide_shorts_remix_button_summary_on">КĐŊĐžĐŋĐēа \"Đ ŅĐŧŅ–Đēҁ\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_remix_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"Đ ŅĐŧŅ–Đēҁ\".</string>
<string name="revanced_hide_shorts_remix_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"Đ ŅĐŧŅ–Đēҁ\"</string>
<!-- 'share' should be translated using the same localized wording YouTube displays for the button. -->
<string name="revanced_hide_shorts_share_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ Đ°ĐąĐ°ĐŗŅƒĐģŅŒĐ˛Đ°ĐŊĐŊŅ</string>
<string name="revanced_hide_shorts_share_button_summary_on">КĐŊĐžĐŋĐēа \"ĐŸĐ°Đ´ĐˇŅĐģŅ–Ņ†Ņ†Đ°\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_share_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐŸĐ°Đ´ĐˇŅĐģŅ–Ņ†Ņ†Đ°\".</string>
<string name="revanced_hide_shorts_share_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐŸĐ°Đ´ĐˇŅĐģŅ–Ņ†Ņ†Đ°\"</string>
<string name="revanced_hide_shorts_info_panel_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Ņ–ĐŊŅ„Đ°Ņ€ĐŧĐ°Ņ†Ņ‹ĐšĐŊŅƒŅŽ ĐŋаĐŊŅĐģҌ</string>
<string name="revanced_hide_shorts_info_panel_summary_on">ІĐŊŅ„Đ°Ņ€ĐŧĐ°Ņ†Ņ‹ĐšĐŊĐ°Ņ ĐŋаĐŊŅĐģҌ ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_info_panel_summary_off">ПаĐēаСаĐŊа Ņ–ĐŊŅ„Đ°Ņ€ĐŧĐ°Ņ†Ņ‹ĐšĐŊĐ°Ņ ĐŋаĐŊŅĐģҌ</string>
@@ -615,7 +717,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_full_video_link_label_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋĐžŅžĐŊŅƒŅŽ ĐŧĐĩŅ‚Đē҃ ҁĐŋĐ°ŅŅ‹ĐģĐēŅ– ĐŊа Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_hide_shorts_full_video_link_label_summary_on">МĐĩŅ‚Đēа ҁĐŋĐ°ŅŅ‹ĐģĐēŅ– ĐŊа Đ˛Ņ–Đ´ŅĐ° ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_full_video_link_label_summary_off">АдĐģŅŽŅŅ‚Ņ€ŅƒĐĩŅ†Ņ†Đ° ĐŧĐĩŅ‚Đēа ҁĐŋĐ°ŅŅ‹ĐģĐēŅ– ĐŊа Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_hide_shorts_sound_button_title">КĐŊĐžĐŋĐēа \"ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŗŅƒĐē\".</string>
<string name="revanced_hide_shorts_sound_button_title">КĐŊĐžĐŋĐēа \"ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŗŅƒĐē\"</string>
<string name="revanced_hide_shorts_sound_button_summary_on">КĐŊĐžĐŋĐēа ĐŗŅƒĐē҃ ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_sound_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ĐŗŅƒĐē҃</string>
<string name="revanced_hide_shorts_navigation_bar_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋаĐŊŅĐģҌ ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ–</string>
@@ -637,6 +739,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_popup_panels_summary_on">ĐŖŅĐŋĐģŅ‹Đ˛Đ°ĐģҌĐŊŅ‹Ņ ĐŋаĐŊŅĐģŅ– ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐģҌĐŊŅ–Đēа ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹Ņ</string>
<string name="revanced_hide_player_popup_panels_summary_off">ПаĐēĐ°ĐˇĐ˛Đ°ŅŽŅ†Ņ†Đ° ŅžŅĐŋĐģŅ‹Đ˛Đ°ĐģҌĐŊŅ‹Ņ ĐŋаĐŊŅĐģŅ– ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐģҌĐŊŅ–Đēа</string>
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
<string name="revanced_open_videos_fullscreen_portrait_title">ĐžŅ‚ĐēŅ€Ņ‹Đ˛Đ°Ņ‚ŅŒ видĐĩĐž ĐŊа вĐĩҁҌ ŅĐēŅ€Đ°ĐŊ в ĐŋĐžŅ€Ņ‚Ņ€ĐĩŅ‚ĐŊĐžĐŧ Ņ€ĐĩĐļиĐŧĐĩ</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">ВидĐĩĐž ĐžŅ‚ĐēŅ€Ņ‹Đ˛Đ°ŅŽŅ‚ŅŅ ĐŊа вĐĩҁҌ ŅĐēŅ€Đ°ĐŊ</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">ВидĐĩĐž ĐŊĐĩ ĐžŅ‚ĐēŅ€Ņ‹Đ˛Đ°ŅŽŅ‚ŅŅ ĐŊа вĐĩҁҌ ŅĐēŅ€Đ°ĐŊ</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">НĐĩĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚Đ°ŅŅ†ŅŒ ĐŊаĐēĐģадаĐŊĐŊŅ ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐģҌĐŊŅ–Đēа</string>
<string name="revanced_player_overlay_opacity_summary">ЗĐŊĐ°Ņ‡ŅĐŊĐŊĐĩ ĐŊĐĩĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚Đ°ŅŅ†Ņ– ĐŋаĐŧŅ–Đļ 0-100, дСĐĩ 0 - ĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚Ņ‹</string>
@@ -649,12 +756,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_ryd_failure_client_rate_limit_requested">Đ”Ņ‹ĐˇĐģаКĐēŅ– ĐŊĐĩĐ´Đ°ŅŅ‚ŅƒĐŋĐŊŅ‹Ņ (Đ´Đ°ŅŅĐŗĐŊŅƒŅ‚Ņ‹ ĐģŅ–ĐŧŅ–Ņ‚ ĐēĐģŅ–ĐĩĐŊ҆ĐēĐ°ĐŗĐ° API)</string>
<string name="revanced_ryd_failure_generic">НĐĩ ĐŋадайаĐĩŅ†Ņ†Đ° (%s)</string>
<!-- Toast shown if the user enables RYD while a video is opened, and then tries to vote for the video. -->
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">ПĐĩŅ€Đ°ĐˇĐ°ĐŗŅ€ŅƒĐˇŅ–Ņ†Đĩ Đ˛Ņ–Đ´ŅĐ°, Đēай ĐŋŅ€Đ°ĐŗĐ°ĐģĐ°ŅĐ°Đ˛Đ°Ņ†ŅŒ С даĐŋаĐŧĐžĐŗĐ°Đš Ņ„ŅƒĐŊĐē҆ҋҖ \"Đ’ŅŅ€ĐŊŅƒŅ†ŅŒ ĐŊĐĩ ĐŋадайаĐĩŅ†Ņ†Đ° YouTube\".</string>
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">ПĐĩŅ€Đ°ĐˇĐ°ĐŗŅ€ŅƒĐˇŅ–Ņ†Đĩ Đ˛Ņ–Đ´ŅĐ°, Đēай ĐŋŅ€Đ°ĐŗĐ°ĐģĐ°ŅĐ°Đ˛Đ°Ņ†ŅŒ С даĐŋаĐŧĐžĐŗĐ°Đš Ņ„ŅƒĐŊĐē҆ҋҖ \"Đ’ŅŅ€ĐŊŅƒŅ†ŅŒ ĐŊĐĩ ĐŋадайаĐĩŅ†Ņ†Đ° YouTube\"</string>
<string name="revanced_ryd_enable_summary_on">Đ”Ņ‹ĐˇĐģаКĐēŅ– ĐŋаĐēаСаĐŊŅ‹</string>
<string name="revanced_ryd_enable_summary_off">Đ”Ņ‹ĐˇĐģаКĐēŅ– ĐŊĐĩ ĐŋаĐēĐ°ĐˇĐ˛Đ°ŅŽŅ†Ņ†Đ°</string>
<string name="revanced_ryd_shorts_title">ПаĐēĐ°ĐˇĐ˛Đ°ĐšŅ†Đĩ \"ĐŊĐĩ ĐŋадайаĐĩŅ†Ņ†Đ°\" ĐŊа Shorts</string>
<string name="revanced_ryd_shorts_summary_on">АдСĐŊаĐēŅ– \"ĐŊĐĩ ĐŋадайаĐĩŅ†Ņ†Đ°\" Ņž Shorts</string>
<string name="revanced_ryd_shorts_summary_on_disclaimer">АдСĐŊаĐēŅ– \"НĐĩ ĐŋадайаĐĩŅ†Ņ†Đ°\" Ņž Shorts\n\nАйĐŧĐĩĐļаваĐŊĐŊĐĩ: адСĐŊаĐēŅ– \"НĐĩ ĐŋадайаĐĩŅ†Ņ†Đ°\" ĐŧĐžĐŗŅƒŅ†ŅŒ ĐŊĐĩ С\"ŅŅžĐģŅŅ†Ņ†Đ° Ņž Ņ€ŅĐļŅ‹ĐŧĐĩ Ņ–ĐŊĐēĐžĐŗĐŊŅ–Ņ‚Đ°</string>
<string name="revanced_ryd_shorts_summary_on_disclaimer">"НĐĩĐŋаĐŋадаĐŊĐŊŅ ĐŋаĐēаСаĐŊŅ‹ ĐŊа Shorts
АйĐŧĐĩĐļаваĐŊĐŊĐĩ: НĐĩĐŋаĐŋадаĐŊĐŊŅ ĐŧĐžĐŗŅƒŅ†ŅŒ ĐŊĐĩ С'ŅŅžĐģŅŅ†Ņ†Đ° Ņž Ņ€ŅĐļŅ‹ĐŧĐĩ Ņ–ĐŊĐēĐžĐŗĐŊŅ–Ņ‚Đ°"</string>
<string name="revanced_ryd_shorts_summary_off">Đ”Ņ‹ĐˇĐģаĐēŅ– ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹Ņ Ņž Shorts</string>
<string name="revanced_ryd_dislike_percentage_title">Đ”Ņ‹ĐˇĐģаКĐēŅ– Ņž ĐŋŅ€Đ°Ņ†ŅĐŊŅ‚Đ°Ņ…</string>
<string name="revanced_ryd_dislike_percentage_summary_on">НĐĩŅžĐŋадайаĐŊĐŊŅ– ĐŋаĐēаСаĐŊŅ‹ Ņž ĐŋŅ€Đ°Ņ†ŅĐŊŅ‚Đ°Ņ…</string>
@@ -692,6 +801,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_wide_searchbar_summary_off">Đ¨Ņ‹Ņ€ĐžĐēĐ°Ņ ĐŋаĐŊŅĐģҌ ĐŋĐžŅˆŅƒĐē҃ адĐēĐģŅŽŅ‡Đ°ĐŊа</string>
</patch>
<patch id="layout.seekbar.seekbarThumbnailsPatch">
<string name="revanced_seekbar_thumbnails_high_quality_title">ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ĐŧиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Ņ‹ Đ˛Ņ‹ŅĐžĐēĐžĐŗĐž ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đ°</string>
<string name="revanced_seekbar_thumbnails_high_quality_summary_on">МиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Ņ‹ ĐŋĐžĐģĐˇŅƒĐŊĐēа ĐŋŅ€ĐžĐŗŅ€ĐĩŅŅĐ° — Đ˛Ņ‹ŅĐžĐēĐžĐŗĐž ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đ°</string>
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">МиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Ņ‹ ĐŋĐžĐģĐˇŅƒĐŊĐēа ĐŋŅ€ĐžĐŗŅ€ĐĩŅŅĐ° — ҁҀĐĩĐ´ĐŊĐĩĐŗĐž ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đ°</string>
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">МиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Ņ‹ ĐŋĐžĐģĐˇŅƒĐŊĐēа ĐŋŅ€ĐžĐŗŅ€ĐĩŅŅĐ° в ĐŋĐžĐģĐŊĐžŅĐēŅ€Đ°ĐŊĐŊĐžĐŧ Ņ€ĐĩĐļиĐŧĐĩ — Đ˛Ņ‹ŅĐžĐēĐžĐŗĐž ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đ°</string>
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">МиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Ņ‹ ĐŋĐžĐģĐˇŅƒĐŊĐēа ĐŋŅ€ĐžĐŗŅ€ĐĩŅŅĐ° в ĐŋĐžĐģĐŊĐžŅĐēŅ€Đ°ĐŊĐŊĐžĐŧ Ņ€ĐĩĐļиĐŧĐĩ — ҁҀĐĩĐ´ĐŊĐĩĐŗĐž ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đ°</string>
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"Đ“ŅŅ‚Đ° Ņ‚Đ°ĐēŅĐ°Đŧа адĐŊĐ°Đ˛Ņ–Ņ†ŅŒ ĐŧŅ–ĐŊŅ–Đ°Ņ‚ŅŽŅ€Ņ‹ ĐŊа Ņ‚Ņ€Đ°ĐŊҁĐģŅŅ†Ņ‹ŅŅ… ҃ ĐŋŅ€Đ°ĐŧŅ‹Đŧ ŅŅ„Ņ–Ņ€Ņ‹, ŅĐēŅ–Ņ ĐŊĐĩ ĐŧĐ°ŅŽŅ†ŅŒ ĐŧŅ–ĐŊŅ–Đ°Ņ‚ŅŽŅ€ С ĐŧĐ°ĐŗŅ‡Ņ‹ĐŧĐ°ŅŅ†ŅŽ ĐŋĐĩŅ€Đ°ĐŧĐžŅ‚ĐēŅ–.
ĐœŅ–ĐŊŅ–Đ°Ņ‚ŅŽŅ€Ņ‹ С ĐŧĐ°ĐŗŅ‡Ņ‹ĐŧĐ°ŅŅ†ŅŽ ĐŋĐĩŅ€Đ°ĐŧĐžŅ‚ĐēŅ– ĐąŅƒĐ´ŅƒŅ†ŅŒ Đ˛Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚ĐžŅžĐ˛Đ°Ņ†ŅŒ Ņ‚ŅƒŅŽ Đļ ŅĐēĐ°ŅŅ†ŅŒ, ŅˆŅ‚Đž Ņ– ĐąŅĐŗŅƒŅ‡Đ°Đĩ Đ˛Ņ–Đ´ŅĐ°.
Đ“ŅŅ‚Đ°Ņ Ņ„ŅƒĐŊĐēŅ†Ņ‹Ņ ĐģĐĩĐŋ҈ Са ŅžŅŅ‘ ĐŋŅ€Đ°Ņ†ŅƒĐĩ С ŅĐēĐ°ŅŅ†ŅŽ Đ˛Ņ–Đ´ŅĐ° 720p айО ĐŊŅ–ĐļŅĐš Ņ– ĐŋҀҋ Đ˛Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐŊĐŊŅ– вĐĩĐģҌĐŧŅ– Ņ…ŅƒŅ‚ĐēĐ°ĐŗĐ° ІĐŊŅ‚ŅŅ€ĐŊŅŅ‚-СĐģŅƒŅ‡ŅĐŊĐŊŅ."</string>
<string name="revanced_restore_old_seekbar_thumbnails_title">АдĐŊĐ°Đ˛Ņ–Ņ†ŅŒ ŅŅ‚Đ°Ņ€Ņ‹Ņ ĐŧŅ–ĐŊŅ–ŅŅ†ŅŽŅ€Ņ‹ ĐŋаĐŊŅĐģŅ– ĐŋĐžŅˆŅƒĐē҃</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Đ­ŅĐēŅ–ĐˇŅ‹ ĐŋаĐŊŅĐģŅ– ĐŋĐžŅˆŅƒĐē҃ С\"ŅĐ˛ŅŅ†Ņ†Đ° ĐŊад ĐŋаĐŊŅĐģĐģŅŽ ĐŋĐžŅˆŅƒĐē҃</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">ĐœŅ–ĐŊŅ–ŅŅ†ŅŽŅ€Ņ‹ ĐŋаĐŊŅĐģŅ– ĐŋĐžŅˆŅƒĐē҃ С\"ŅĐ˛ŅŅ†Ņ†Đ° Ņž ĐŋĐžŅžĐŊĐ°ŅĐēŅ€Đ°ĐŊĐŊŅ‹Đŧ Ņ€ŅĐļŅ‹ĐŧĐĩ</string>
@@ -718,7 +837,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_general_time_without_sum_off">ПаĐēаСаĐŊа ĐŋĐžŅžĐŊĐ°Ņ Đ´Đ°ŅžĐļŅ‹ĐŊŅ Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_sb_create_segment_category">ĐĄŅ‚Đ˛Đ°Ņ€ŅĐŊĐŊĐĩ ĐŊĐžĐ˛Ņ‹Ņ… ҁĐĩĐŗĐŧĐĩĐŊŅ‚Đ°Ņž</string>
<string name="revanced_sb_enable_create_segment">ПаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ŅŅ‚Đ˛Đ°Ņ€ŅĐŊĐŊŅ ĐŊĐžĐ˛Đ°ĐŗĐ° ҁĐĩĐŗĐŧĐĩĐŊŅ‚Đ°</string>
<string name="revanced_sb_enable_create_segment_sum_on">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐĄŅ‚Đ˛Đ°Ņ€Ņ‹Ņ†ŅŒ ĐŊĐžĐ˛Ņ‹ ҁĐĩĐŗĐŧĐĩĐŊŅ‚\".</string>
<string name="revanced_sb_enable_create_segment_sum_on">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐĄŅ‚Đ˛Đ°Ņ€Ņ‹Ņ†ŅŒ ĐŊĐžĐ˛Ņ‹ ҁĐĩĐŗĐŧĐĩĐŊŅ‚\"</string>
<string name="revanced_sb_enable_create_segment_sum_off">КĐŊĐžĐŋĐēа \"ĐĄŅ‚Đ˛Đ°Ņ€Ņ‹Ņ†ŅŒ ĐŊĐžĐ˛Ņ‹ ҁĐĩĐŗĐŧĐĩĐŊŅ‚\" ĐŊĐĩ ĐŋаĐēаСваĐĩŅ†Ņ†Đ°</string>
<string name="revanced_sb_general_adjusting">ĐĐ´Ņ€ŅĐŗŅƒĐģŅŽĐšŅ†Đĩ ĐŊĐžĐ˛Ņ‹ ĐēŅ€ĐžĐē ҁĐĩĐŗĐŧĐĩĐŊŅ‚Đ°</string>
<string name="revanced_sb_general_adjusting_sum">КоĐģҌĐēĐ°ŅŅ†ŅŒ ĐŧŅ–ĐģҖҁĐĩĐē҃ĐŊĐ´, ĐŊа ŅĐēŅƒŅŽ ĐŋĐĩŅ€Đ°ĐŧŅŅˆŅ‡Đ°ŅŽŅ†Ņ†Đ° ĐēĐŊĐžĐŋĐēŅ– Ņ€ŅĐŗŅƒĐģŅĐ˛Đ°ĐŊĐŊŅ Ņ‡Đ°ŅŅƒ ĐŋҀҋ ŅŅ‚Đ˛Đ°Ņ€ŅĐŊĐŊŅ– ĐŊĐžĐ˛Ņ‹Ņ… ҁĐĩĐŗĐŧĐĩĐŊŅ‚Đ°Ņž</string>
@@ -738,6 +857,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_general_skipcount_sum_off">ĐĐ´ŅĐžŅ‡Đ˛Đ°ĐŊĐŊĐĩ ĐēĐžĐģҌĐēĐ°ŅŅ†Ņ– ĐŋŅ€ĐžĐŋ҃ҁĐēĐ°Ņž ĐŊĐĩ ŅžĐēĐģŅŽŅ‡Đ°ĐŊа</string>
<string name="revanced_sb_general_min_duration">ĐœŅ–ĐŊŅ–ĐŧаĐģҌĐŊĐ°Ņ ĐŋŅ€Đ°Ņ†ŅĐŗĐģĐ°ŅŅ†ŅŒ ҁĐĩĐŗĐŧĐĩĐŊŅ‚Đ°</string>
<string name="revanced_sb_general_min_duration_sum">ĐĄĐĩĐŗĐŧĐĩĐŊ҂ҋ, ĐēĐ°Ņ€Đ°Ņ†ĐĩĐšŅˆŅ‹Ņ Са ĐŗŅŅ‚Đ° СĐŊĐ°Ņ‡ŅĐŊĐŊĐĩ (҃ ҁĐĩĐē҃ĐŊĐ´Đ°Ņ…), ĐŊĐĩ ĐąŅƒĐ´ŅƒŅ†ŅŒ ĐŋаĐēĐ°ĐˇĐ˛Đ°Ņ†Ņ†Đ° айО ĐŋŅ€Đ°Đŋ҃ҁĐēĐ°Ņ†Ņ†Đ°</string>
<string name="revanced_sb_general_min_duration_invalid">НĐĩвĐĩŅ€ĐŊĐ°Ņ ĐŋŅ€ĐžĐ´ĐžĐģĐļĐ¸Ņ‚ĐĩĐģҌĐŊĐžŅŅ‚ŅŒ</string>
<string name="revanced_sb_general_uuid">Đ’Đ°Ņˆ Đ°ŅĐ°ĐąŅ–ŅŅ‚Ņ‹ Ņ–Đ´ŅĐŊ҂ҋ҄ҖĐēĐ°Ņ‚Đ°Ņ€ ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊŅ–Đēа</string>
<string name="revanced_sb_general_uuid_sum">Đ“ŅŅ‚Đ° ĐŋĐ°Đ˛Ņ–ĐŊĐŊа ĐąŅ‹Ņ†ŅŒ ĐŋŅ€Ņ‹Đ˛Đ°Ņ‚ĐŊŅ‹Đŧ. Đ“ŅŅ‚Đ° ŅĐē ĐŋĐ°Ņ€ĐžĐģҌ, Ņ– ŅĐŗĐž ĐŊĐĩĐģŅŒĐŗĐ° ĐŊŅ–ĐēĐžĐŧ҃ ĐŋавĐĩдаĐŧĐģŅŅ†ŅŒ. КаĐģŅ– Ņž ĐēĐ°ĐŗĐžŅŅŒŅ†Ņ– ĐŗŅŅ‚Đ° Ņ‘ŅŅ†ŅŒ, Ņ‘ĐŊ ĐŧĐžĐļа Đ˛Ņ‹Đ´Đ°Đ˛Đ°Ņ†ŅŒ ŅŅĐąĐĩ Са Đ˛Đ°Ņ</string>
<string name="revanced_sb_general_uuid_invalid">ĐŸŅ€Ņ‹Đ˛Đ°Ņ‚ĐŊŅ‹ Ņ–Đ´ŅĐŊ҂ҋ҄ҖĐēĐ°Ņ‚Đ°Ņ€ ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊŅ–Đēа ĐŋĐ°Đ˛Ņ–ĐŊĐĩĐŊ ĐąŅ‹Ņ†ŅŒ ĐŊĐĩ ĐŧĐĩĐŊ҈ Са 30 ҁҖĐŧваĐģĐ°Ņž</string>
@@ -753,7 +873,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_settings_import_successful">НаĐģĐ°Đ´Ņ‹ ĐŋĐ°ŅĐŋŅŅ…ĐžĐ˛Đ° Ņ–ĐŧĐŋĐ°Ņ€Ņ‚Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_sb_settings_import_failed">НĐĩ ŅžĐ´Đ°ĐģĐžŅŅ Ņ–ĐŧĐŋĐ°Ņ€Ņ‚Đ°Đ˛Đ°Ņ†ŅŒ: %s</string>
<string name="revanced_sb_settings_export_failed">НĐĩ ŅžĐ´Đ°ĐģĐžŅŅ ŅĐēҁĐŋĐ°Ņ€Ņ‚Đ°Đ˛Đ°Ņ†ŅŒ: %s</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning">Đ’Đ°ŅˆŅ‹ ĐŊаĐģĐ°Đ´Ņ‹ ŅžŅ‚Ņ€Ņ‹ĐŧĐģŅ–Đ˛Đ°ŅŽŅ†ŅŒ ĐŋŅ€Ņ‹Đ˛Đ°Ņ‚ĐŊŅ‹ Ņ–Đ´ŅĐŊ҂ҋ҄ҖĐēĐ°Ņ‚Đ°Ņ€ ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊŅ–Đēа SponsorBlock.\n\nĐ’Đ°Ņˆ Ņ–Đ´ŅĐŊ҂ҋ҄ҖĐēĐ°Ņ‚Đ°Ņ€ ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊŅ–Đēа ĐŋадОйĐŊŅ‹ ĐŊа ĐŋĐ°Ņ€ĐžĐģҌ, Ņ– ŅĐŗĐž ĐŊŅ–ĐēĐžĐģŅ– ĐŊĐĩ Ņ‚Ņ€ŅĐąĐ° Ņ€Đ°ŅĐēŅ€Ņ‹Đ˛Đ°Ņ†ŅŒ.\n</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning">"Đ’Đ°ŅˆŅ‹ ĐŊаĐģĐ°Đ´Ņ‹ ŅžŅ‚Ņ€Ņ‹ĐŧĐģŅ–Đ˛Đ°ŅŽŅ†ŅŒ Đ°ŅĐ°ĐąŅ–ŅŅ‚Ņ‹ Ņ–Đ´ŅĐŊ҂ҋ҄ҖĐēĐ°Ņ‚Đ°Ņ€ SponsorBlock.
Đ’Đ°Ņˆ Ņ–Đ´ŅĐŊ҂ҋ҄ҖĐēĐ°Ņ‚Đ°Ņ€ ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊŅ–Đēа ĐŋадОйĐŊŅ‹ да ĐŋĐ°Ņ€ĐžĐģŅ, Ņ– ŅĐŗĐž ĐŊŅ–ĐēĐžĐģŅ– ĐŊĐĩ Đ˛Đ°Ņ€Ņ‚Đ° Đ´ĐˇŅĐģŅ–Ņ†Ņ†Đ°.
"</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">БоĐģҌ҈ ĐŊĐĩ ĐŋаĐēĐ°ĐˇĐ˛Đ°Ņ†ŅŒ</string>
<string name="revanced_sb_diff_segments">ЗĐŧŅĐŊŅ–Ņ†ŅŒ ĐŋĐ°Đ˛ĐžĐ´ĐˇŅ–ĐŊŅ‹ ҁĐĩĐŗĐŧĐĩĐŊŅ‚Đ°</string>
<string name="revanced_sb_segments_sponsor">ĐĄĐŋĐžĐŊŅĐ°Ņ€</string>
@@ -813,9 +937,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_submit_failed_invalid">НĐĩĐŧĐ°ĐŗŅ‡Ņ‹Đŧа адĐŋŅ€Đ°Đ˛Ņ–Ņ†ŅŒ ҁĐĩĐŗĐŧĐĩĐŊŅ‚: %s</string>
<string name="revanced_sb_submit_failed_timeout">SponsorBlock Ņ‡Đ°ŅĐžĐ˛Đ° ĐŊĐĩ ĐŋŅ€Đ°Ņ†ŅƒĐĩ</string>
<string name="revanced_sb_submit_failed_unknown_error">НĐĩĐŧĐ°ĐŗŅ‡Ņ‹Đŧа адĐŋŅ€Đ°Đ˛Ņ–Ņ†ŅŒ ҁĐĩĐŗĐŧĐĩĐŊŅ‚ (ŅŅ‚Đ°Ņ‚ŅƒŅ: %1$d %2$s)</string>
<string name="revanced_sb_submit_failed_rate_limit">НĐĩĐŧĐ°ĐŗŅ‡Ņ‹Đŧа адĐŋŅ€Đ°Đ˛Ņ–Ņ†ŅŒ ҁĐĩĐŗĐŧĐĩĐŊŅ‚.\nĐŅ†ŅĐŊĐēа айĐŧĐĩĐļаваĐŊĐ°Ņ (СаĐŊĐ°Đ´Ņ‚Đ° ҈ĐŧĐ°Ņ‚ ад адĐŊĐ°ĐŗĐž ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊŅ–Đēа айО IP)</string>
<string name="revanced_sb_submit_failed_rate_limit">НĐĩĐŧĐ°ĐŗŅ‡Ņ‹Đŧа адĐŋŅ€Đ°Đ˛Ņ–Ņ†ŅŒ ҁĐĩĐŗĐŧĐĩĐŊŅ‚. АйĐŧĐĩĐļаваĐŊĐŊĐĩ Đŋа Ņ…ŅƒŅ‚ĐēĐ°ŅŅ†Ņ– (СаĐŊĐ°Đ´Ņ‚Đ° ҈ĐŧĐ°Ņ‚ ад адĐŊĐ°ĐŗĐž Ņ– Ņ‚Đ°ĐŗĐž Đļ ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊŅ–Đēа айО IP-Đ°Đ´Ņ€Đ°ŅĐ°)</string>
<string name="revanced_sb_submit_failed_forbidden">НĐĩĐŧĐ°ĐŗŅ‡Ņ‹Đŧа адĐŋŅ€Đ°Đ˛Ņ–Ņ†ŅŒ ҁĐĩĐŗĐŧĐĩĐŊŅ‚: %s</string>
<string name="revanced_sb_submit_failed_duplicate">НĐĩĐŧĐ°ĐŗŅ‡Ņ‹Đŧа адĐŋŅ€Đ°Đ˛Ņ–Ņ†ŅŒ ҁĐĩĐŗĐŧĐĩĐŊŅ‚.\nĐŖĐļĐž ҖҁĐŊ҃Đĩ</string>
<string name="revanced_sb_submit_failed_duplicate">"НĐĩĐŧĐ°ĐŗŅ‡Ņ‹Đŧа адĐŋŅ€Đ°Đ˛Ņ–Ņ†ŅŒ ҁĐĩĐŗĐŧĐĩĐŊŅ‚.
ĐŖĐļĐž ҖҁĐŊ҃Đĩ"</string>
<string name="revanced_sb_submit_succeeded">ĐĄĐĩĐŗĐŧĐĩĐŊŅ‚ ĐŋĐ°ŅĐŋŅŅ…ĐžĐ˛Đ° адĐŋŅ€Đ°ŅžĐģĐĩĐŊŅ‹</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 Ņ‡Đ°ŅĐžĐ˛Đ° ĐŊĐĩĐ´Đ°ŅŅ‚ŅƒĐŋĐŊŅ‹ (Ņ‡Đ°Ņ Ņ‡Đ°ĐēаĐŊĐŊŅ API ҁĐēĐžĐŊŅ‡Ņ‹ŅžŅŅ)</string>
@@ -838,7 +963,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_time_start">Đ§Đ°Ņ ĐŋĐ°Ņ‡Đ°Ņ‚Đē҃ ҁĐĩĐŗĐŧĐĩĐŊŅ‚Đ°</string>
<string name="revanced_sb_new_segment_time_end">Đ§Đ°Ņ СаĐēаĐŊŅ‡ŅĐŊĐŊŅ ҁĐĩĐŗĐŧĐĩĐŊŅ‚Đ°</string>
<string name="revanced_sb_new_segment_confirm_title">ĐĻŅ– ĐŋŅ€Đ°Đ˛Ņ–ĐģҌĐŊŅ‹ Ņ‡Đ°Ņ?</string>
<string name="revanced_sb_new_segment_confirm_content">ĐĄĐĩĐŗĐŧĐĩĐŊŅ‚ ад\n\n%1$s\nда\n%2$s\n\n(%3$s)\n\nĐ“Đ°Ņ‚ĐžĐ˛Ņ‹ адĐŋŅ€Đ°Đ˛Ņ–Ņ†ŅŒ?</string>
<string name="revanced_sb_new_segment_confirm_content">"ĐĄŅĐŗĐŧŅĐŊŅ‚ СĐŊĐ°Ņ…ĐžĐ´ĐˇŅ–Ņ†Ņ†Đ° ĐŋаĐŧŅ–Đļ
%1$s
да
%2$s
(%3$s)
Đ“Đ°Ņ‚ĐžĐ˛Ņ‹Ņ адĐŋŅ€Đ°Đ˛Ņ–Ņ†ŅŒ?"</string>
<string name="revanced_sb_new_segment_start_is_before_end">ĐŸĐ°Ņ‡Ņ‹ĐŊĐ°Ņ†ŅŒ Ņ‚Ņ€ŅĐąĐ° Ņ€Đ°ĐŊĐĩĐš Са ĐēаĐŊĐĩ҆</string>
<string name="revanced_sb_new_segment_mark_locations_first">ĐĄĐŋĐ°Ņ‡Đ°Ņ‚Đē҃ адСĐŊĐ°Ņ‡Ņ†Đĩ два ĐŧĐĩҁ҆ҋ ĐŊа ĐŋаĐŊŅĐģŅ– Ņ‡Đ°ŅŅƒ</string>
<string name="revanced_sb_new_segment_preview_segment_first">ПаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´ ҁĐĩĐŗĐŧĐĩĐŊŅ‚Đ° Ņ– ĐŋĐĩŅ€Đ°ĐēаĐŊĐ°ĐšŅ†ĐĩŅŅ, ŅˆŅ‚Đž Ņ‘ĐŊ ĐŋŅ€Đ°Ņ…ĐžĐ´ĐˇŅ–Ņ†ŅŒ ĐŋĐģĐ°ŅžĐŊа</string>
@@ -856,6 +989,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_stats_username_changed">ІĐŧŅ ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊŅ–Đēа ĐŋĐ°ŅĐŋŅŅ…ĐžĐ˛Đ° СĐŧĐĩĐŊĐĩĐŊа</string>
<string name="revanced_sb_stats_reputation">Đ’Đ°ŅˆĐ° Ņ€ŅĐŋŅƒŅ‚Đ°Ņ†Ņ‹Ņ &lt;b&gt;%.2f&lt;/b&gt;</string>
<string name="revanced_sb_stats_submissions">Đ’Ņ‹ ŅŅ‚Đ˛Đ°Ņ€Ņ‹ĐģŅ– &lt;b&gt;%s&lt;/b&gt; ҁĐĩĐŗĐŧĐĩĐŊ҂ҋ</string>
<string name="revanced_sb_stats_submissions_sum">ĐšĐžŅĐŊĐ¸Ņ‚ĐĩҁҌ, Ņ‡Ņ‚ĐžĐąŅ‹ ĐŋŅ€ĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ Đ˛Đ°ŅˆĐ¸ ҁĐĩĐŗĐŧĐĩĐŊ҂ҋ</string>
<string name="revanced_sb_stats_saved_zero">ĐĸайĐģŅ–Ņ†Đ° ĐģŅ–Đ´ŅŅ€Đ°Ņž SponsorBlock</string>
<string name="revanced_sb_stats_saved">Đ’Ņ‹ Đ˛Ņ‹Ņ€Đ°Ņ‚Đ°Đ˛Đ°ĐģŅ– ĐģŅŽĐ´ĐˇĐĩĐš С &lt;b&gt;%s&lt;/b&gt; ҁĐĩĐŗĐŧĐĩĐŊ҂ҋ</string>
<string name="revanced_sb_stats_saved_sum_zero">ĐĐ°Ņ†Ņ–ŅĐŊҖ҆Đĩ Ņ‚ŅƒŅ‚, Đēай ŅƒĐąĐ°Ņ‡Ņ‹Ņ†ŅŒ ĐŗĐģайаĐģҌĐŊŅƒŅŽ ŅŅ‚Đ°Ņ‚Ņ‹ŅŅ‚Ņ‹Đē҃ Ņ– Đ˛ŅĐ´ŅƒŅ‡Ņ‹Ņ… ŅƒĐ´ĐˇĐĩĐģҌĐŊŅ–ĐēĐ°Ņž</string>
@@ -879,10 +1013,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_app_version_title">ВĐĩŅ€ŅŅ–Ņ ĐŋŅ€Đ°ĐŗŅ€Đ°ĐŧŅ‹ Spoof</string>
<string name="revanced_spoof_app_version_summary_on">ВĐĩŅ€ŅŅ–Ņ ĐŋĐ°Đ´Ņ€ĐžĐąĐģĐĩĐŊĐ°Ņ</string>
<string name="revanced_spoof_app_version_summary_off">ВĐĩŅ€ŅŅ–Ņ ĐŊĐĩ ĐŋĐ°Đ´Ņ€ĐžĐąĐģĐĩĐŊĐ°Ņ</string>
<string name="revanced_spoof_app_version_user_dialog_message">ВĐĩŅ€ŅŅ–Ņ ĐŋŅ€Đ°ĐŗŅ€Đ°ĐŧŅ‹ ĐąŅƒĐ´ĐˇĐĩ ĐŋадĐŧĐĩĐŊĐĩĐŊа ĐŊа ŅŅ‚Đ°Ņ€ŅƒŅŽ вĐĩŅ€ŅŅ–ŅŽ YouTube.\n\nĐ“ŅŅ‚Đ° СĐŧĐĩĐŊŅ–Ņ†ŅŒ СĐŊĐĩ҈ĐŊŅ– Đ˛Ņ‹ĐŗĐģŅĐ´ Ņ– Ņ„ŅƒĐŊĐē҆ҋҖ ĐŋŅ€Đ°ĐŗŅ€Đ°ĐŧŅ‹, аĐģĐĩ ĐŧĐžĐŗŅƒŅ†ŅŒ ŅƒĐˇĐŊŅ–ĐēĐŊŅƒŅ†ŅŒ ĐŊĐĩĐ˛ŅĐ´ĐžĐŧŅ‹Ņ ĐŋĐ°ĐąĐžŅ‡ĐŊŅ‹Ņ ŅŅ„ĐĩĐē҂ҋ.\n\nКаĐģŅ– ĐŋаСĐŊĐĩĐš Đ˛Ņ‹ĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ, Ņ€ŅĐēаĐŧĐĩĐŊĐ´ŅƒĐĩŅ†Ņ†Đ° Đ°Ņ‡Ņ‹ŅŅ†Ņ–Ņ†ŅŒ даĐŊŅ‹Ņ ĐŋŅ€Đ°ĐŗŅ€Đ°ĐŧŅ‹, Đēай ĐŋŅ€Đ°Đ´ŅƒŅ…Ņ–ĐģŅ–Ņ†ŅŒ ĐŋаĐŧŅ‹ĐģĐēŅ– ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°Ņ†ĐēĐ°ĐŗĐ° Ņ–ĐŊŅ‚ŅŅ€Ņ„ĐĩĐšŅŅƒ.</string>
<string name="revanced_spoof_app_version_user_dialog_message">"ВĐĩŅ€ŅŅ–Ņ ĐŋҀҋĐēĐģадаĐŊĐŊŅ ĐąŅƒĐ´ĐˇĐĩ ĐŋĐ°Đ´Ņ€ĐžĐąĐģĐĩĐŊŅ‹ да ŅŅ‚Đ°Ņ€ŅĐšŅˆĐ°Đš вĐĩҀҁҖҖ YouTube.
Đ“ŅŅ‚Đ° СĐŧĐĩĐŊŅ–Ņ†ŅŒ СĐŊĐĩ҈ĐŊŅ– Đ˛Ņ‹ĐŗĐģŅĐ´ Ņ– Ņ„ŅƒĐŊĐē҆ҋҖ ĐŋҀҋĐēĐģадаĐŊĐŊŅ, аĐģĐĩ ĐŧĐžĐŗŅƒŅ†ŅŒ ŅƒĐˇĐŊŅ–ĐēĐŊŅƒŅ†ŅŒ ĐŊĐĩĐ˛ŅĐ´ĐžĐŧŅ‹Ņ ĐŋĐ°ĐąĐžŅ‡ĐŊŅ‹Ņ ŅŅ„ĐĩĐē҂ҋ.
КаĐģŅ– ĐŋаСĐŊĐĩĐš ĐąŅƒĐ´ĐˇĐĩ адĐēĐģŅŽŅ‡Đ°ĐŊа, Ņ€ŅĐēаĐŧĐĩĐŊĐ´ŅƒĐĩŅ†Ņ†Đ° Đ°Ņ‡Ņ‹ŅŅ†Ņ–Ņ†ŅŒ даĐŊŅ‹Ņ ĐŋҀҋĐēĐģадаĐŊĐŊŅ, Đēай ĐŋаСйĐĩĐŗĐŊŅƒŅ†ŅŒ ĐŋаĐŧŅ‹ĐģаĐē ҃ Ņ–ĐŊŅ‚ŅŅ€Ņ„ĐĩĐšŅĐĩ."</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">ĐŸĐ°Đ´Ņ€ĐžĐąĐēа ĐŧŅŅ‚Đ°Đ˛Đ°Đš вĐĩҀҁҖҖ ĐŋŅ€Đ°ĐŗŅ€Đ°ĐŧŅ‹</string>
<string name="revanced_spoof_app_version_target_entry_1">19.35.36 — Đ’ĐžŅŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚ŅŒ ŅŅ‚Đ°Ņ€Ņ‹Đĩ СĐŊĐ°Ņ‡Đēи ĐŋĐģĐĩĐĩŅ€Đ° Shorts</string>
<!-- 'RYD' is 'Return YouTube Dislike' -->
<string name="revanced_spoof_app_version_target_legacy_entry_1">18.33.40 - АдĐŊĐ°ŅžĐģĐĩĐŊĐŊĐĩ RYD ĐŊа Shorts ҃ Ņ€ŅĐļŅ‹ĐŧĐĩ Ņ–ĐŊĐēĐžĐŗĐŊŅ–Ņ‚Đ°</string>
<string name="revanced_spoof_app_version_target_legacy_entry_2">18.20.39 - АдĐŊĐ°Đ˛Ņ–Ņ†ŅŒ Ņ…ŅƒŅ‚ĐēĐ°ŅŅ†ŅŒ ŅˆŅ‹Ņ€ĐžĐēĐ°ĐŗĐ° Đ˛Ņ–Đ´ŅĐ° &amp; ŅĐēĐ°ŅĐŊаĐĩ ĐŧĐĩĐŊŅŽ</string>
@@ -892,12 +1031,20 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="layout.startpage.changeStartPagePatch">
<string name="revanced_change_start_page_title">ĐŖŅŅ‚Đ°ĐģŅĐ˛Đ°Ņ†ŅŒ ŅŅ‚Đ°Ņ€Ņ‚Đ°Đ˛ŅƒŅŽ ŅŅ‚Đ°Ņ€ĐžĐŊĐē҃</string>
<string name="revanced_change_start_page_entry_default">Па СĐŧĐ°ŅžŅ‡Đ°ĐŊĐŊŅ–</string>
<string name="revanced_change_start_page_entry_browse">ĐžĐąĐˇĐžŅ€ ĐēаĐŊаĐģОв</string>
<string name="revanced_change_start_page_entry_explore">Đ”Đ°ŅŅŒĐģĐĩĐ´ŅƒĐšŅ†Đĩ</string>
<string name="revanced_change_start_page_entry_gaming">Đ˜ĐŗŅ€Ņ‹</string>
<string name="revanced_change_start_page_entry_history">Đ“Ņ–ŅŅ‚ĐžŅ€Ņ‹Ņ</string>
<string name="revanced_change_start_page_entry_library">БибĐģĐ¸ĐžŅ‚ĐĩĐēа</string>
<string name="revanced_change_start_page_entry_liked_videos">ĐĄĐŋадайаĐģŅ–ŅŅ Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_change_start_page_entry_live">В ĐŋŅ€ŅĐŧĐžĐŧ ŅŅ„Đ¸Ņ€Đĩ</string>
<string name="revanced_change_start_page_entry_movies">ФиĐģҌĐŧŅ‹</string>
<string name="revanced_change_start_page_entry_music">ĐœŅƒĐˇŅ‹Đēа</string>
<string name="revanced_change_start_page_entry_search">ĐŸĐžŅˆŅƒĐē</string>
<string name="revanced_change_start_page_entry_sports">ĐĄĐŋĐžŅ€Ņ‚</string>
<string name="revanced_change_start_page_entry_subscriptions">ПадĐŋҖҁĐēŅ–</string>
<string name="revanced_change_start_page_entry_trending">ĐŖ Ņ‚Ņ€ŅĐŊдСĐĩ</string>
<string name="revanced_change_start_page_entry_watch_later">ĐŸĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ ĐŋОСĐļĐĩ</string>
</patch>
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
<string name="revanced_disable_resuming_shorts_player_title">АдĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ адĐŊĐ°ŅžĐģĐĩĐŊĐŊĐĩ ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐŊĐŊŅ Shorts</string>
@@ -905,6 +1052,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_disable_resuming_shorts_player_summary_off">ĐŸŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐģҌĐŊŅ–Đē Shorts адĐŊĐžĐ˛Ņ–Ņ†Ņ†Đ° ĐŋҀҋ СаĐŋ҃ҁĐē҃ ĐŋŅ€Đ°ĐŗŅ€Đ°ĐŧŅ‹</string>
</patch>
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
<string name="revanced_shorts_autoplay_title">ĐĐ˛Ņ‚ĐžĐ˛ĐžŅĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐ´ĐĩĐŊиĐĩ Shorts</string>
<string name="revanced_shorts_autoplay_summary_on">Shorts ĐąŅƒĐ´ŅƒŅ‚ Đ˛ĐžŅĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐžĐ´Đ¸Ņ‚ŅŒŅŅ Đ°Đ˛Ņ‚ĐžĐŧĐ°Ņ‚Đ¸Ņ‡ĐĩҁĐēи</string>
<string name="revanced_shorts_autoplay_summary_off">Shorts ĐąŅƒĐ´ŅƒŅ‚ ĐŋĐžĐ˛Ņ‚ĐžŅ€ŅŅ‚ŅŒŅŅ</string>
<string name="revanced_shorts_autoplay_background_title">ĐĐ˛Ņ‚ĐžĐ˛ĐžŅĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐ´ĐĩĐŊиĐĩ Shorts в Ņ„ĐžĐŊОвОĐŧ Ņ€ĐĩĐļиĐŧĐĩ</string>
<string name="revanced_shorts_autoplay_background_summary_on">Shorts в Ņ„ĐžĐŊОвОĐŧ Ņ€ĐĩĐļиĐŧĐĩ ĐąŅƒĐ´ŅƒŅ‚ Đ˛ĐžŅĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐžĐ´Đ¸Ņ‚ŅŒŅŅ Đ°Đ˛Ņ‚ĐžĐŧĐ°Ņ‚Đ¸Ņ‡ĐĩҁĐēи</string>
<string name="revanced_shorts_autoplay_background_summary_off">Shorts в Ņ„ĐžĐŊОвОĐŧ Ņ€ĐĩĐļиĐŧĐĩ ĐąŅƒĐ´ŅƒŅ‚ ĐŋĐžĐ˛Ņ‚ĐžŅ€ŅŅ‚ŅŒŅŅ</string>
</patch>
<patch id="layout.tablet.enableTabletLayoutPatch">
<string name="revanced_tablet_layout_title">ĐŖĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ ĐŧаĐēĐĩŅ‚ ĐŋĐģаĐŊŅˆŅŅ‚Đ°</string>
@@ -917,12 +1070,38 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_miniplayer_screen_summary">ЗĐŧŅĐŊҖ҆Đĩ ҁ҂ҋĐģҌ ĐŧŅ–ĐŊŅ–ĐŧŅ–ĐˇĐ°Đ˛Đ°ĐŊĐ°ĐŗĐ° ĐŋĐģŅĐĩŅ€Đ° Ņž ĐŋŅ€Đ°ĐŗŅ€Đ°ĐŧĐĩ</string>
<string name="revanced_miniplayer_type_title">ĐĸŅ‹Đŋ ĐŧŅ–ĐŊŅ–ĐŋĐģŅĐĩŅ€Đ°</string>
<string name="revanced_miniplayer_type_entry_0">ІĐŊваĐģŅ–Đ´Ņ‹</string>
<string name="revanced_miniplayer_type_entry_1">ĐŅ€Ņ‹ĐŗŅ–ĐŊаĐģ</string>
<string name="revanced_miniplayer_type_entry_1">Па СĐŧĐ°ŅžŅ‡Đ°ĐŊĐŊŅ–</string>
<string name="revanced_miniplayer_type_entry_2">МиĐŊиĐŧаĐģҌĐŊŅ‹Đš</string>
<string name="revanced_miniplayer_type_entry_3">ПĐģаĐŊŅˆŅŅ‚</string>
<string name="revanced_miniplayer_type_entry_4">ĐĄŅƒŅ‡Đ°ŅĐŊŅ‹ 1</string>
<string name="revanced_miniplayer_type_entry_5">ĐĄŅƒŅ‡Đ°ŅĐŊŅ‹ 2</string>
<string name="revanced_miniplayer_type_entry_6">ĐĄŅƒŅ‡Đ°ŅĐŊŅ‹ 3</string>
<string name="revanced_miniplayer_rounded_corners_title">ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ СаĐēŅ€ŅƒĐŗĐģĐĩĐŊĐŊŅ‹Đĩ ŅƒĐŗĐģŅ‹</string>
<string name="revanced_miniplayer_rounded_corners_summary_on">ĐŖĐŗĐģŅ‹ СаĐēŅ€ŅƒĐŗĐģĐĩĐŊŅ‹</string>
<string name="revanced_miniplayer_rounded_corners_summary_off">ĐŖĐŗĐģŅ‹ ĐēĐ˛Đ°Đ´Ņ€Đ°Ņ‚ĐŊŅ‹Đĩ</string>
<string name="revanced_miniplayer_double_tap_action_title">ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ двОКĐŊĐžĐĩ ĐŊаĐļĐ°Ņ‚Đ¸Đĩ и ĐŧĐ°ŅŅˆŅ‚Đ°ĐąĐ¸Ņ€ĐžĐ˛Đ°ĐŊиĐĩ ҁ ĐŋĐžĐŧĐžŅ‰ŅŒŅŽŅ‰Đ¸ĐŋĐēа</string>
<string name="revanced_miniplayer_double_tap_action_summary_on">"ĐŖĐēĐģŅŽŅ‡Đ°ĐŊа дСĐĩŅĐŊĐŊĐĩ ÂĢĐŋОдвОКĐŊаĐĩ ĐŊĐ°Ņ†Ņ–ŅĐēаĐŊĐŊĐĩÂģ Ņ– ÂĢŅˆŅ‡Ņ‹ĐŋĐēŅ– Đ´ĐģŅ СĐŧĐĩĐŊŅ‹ ĐŋаĐŧĐĩŅ€ŅƒÂģ
â€ĸ ПодвойĐŊаĐĩ ĐŊĐ°Ņ†Ņ–ŅĐēаĐŊĐŊĐĩ, Đēай ĐŋĐ°Đ˛ŅĐģŅ–Ņ‡Ņ‹Ņ†ŅŒ ĐŋаĐŧĐĩŅ€ ĐŧŅ–ĐŊŅ–-ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐģҌĐŊŅ–Đēа
â€ĸ ПодвойĐŊаĐĩ ĐŊĐ°Ņ†Ņ–ŅĐēаĐŊĐŊĐĩ ŅŅˆŅ‡Ņ Ņ€Đ°Đˇ, Đēай адĐŊĐ°Đ˛Ņ–Ņ†ŅŒ ĐŋĐĩŅ€ŅˆĐ°ĐŋĐ°Ņ‡Đ°Ņ‚ĐēĐžĐ˛Ņ‹ ĐŋаĐŧĐĩŅ€"</string>
<string name="revanced_miniplayer_double_tap_action_summary_off">ДвойĐŊĐžĐĩ ĐŊаĐļĐ°Ņ‚Đ¸Đĩ и scalewithpinch ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊŅ‹</string>
<string name="revanced_miniplayer_drag_and_drop_title">ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ĐŋĐĩŅ€ĐĩŅ‚Đ°ŅĐēиваĐŊиĐĩ</string>
<string name="revanced_miniplayer_drag_and_drop_summary_on">"ĐŖĐēĐģŅŽŅ‡Đ°ĐŊа ĐŋĐĩŅ€Đ°Ņ†ŅĐŗĐ˛Đ°ĐŊĐŊĐĩ Ņ– ĐēŅ–Đ´Đ°ĐŊĐŊĐĩ
ĐœŅ–ĐŊŅ–-ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐģҌĐŊŅ–Đē ĐŧĐžĐļĐŊа ĐŋĐĩŅ€Đ°Ņ†ŅĐŗĐŊŅƒŅ†ŅŒ ҃ ĐģŅŽĐąŅ‹ ĐēŅƒŅ‚ĐžĐē ŅĐēŅ€Đ°ĐŊа"</string>
<string name="revanced_miniplayer_drag_and_drop_summary_off">ПĐĩŅ€ĐĩŅ‚Đ°ŅĐēиваĐŊиĐĩ ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊĐž</string>
<string name="revanced_miniplayer_horizontal_drag_title">ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ĐŗĐžŅ€Đ¸ĐˇĐžĐŊŅ‚Đ°ĐģҌĐŊŅ‹Đš ĐļĐĩҁ҂ ĐŋĐĩŅ€ĐĩŅ‚Đ°ŅĐēиваĐŊĐ¸Ņ</string>
<string name="revanced_miniplayer_horizontal_drag_summary_on">"ĐŖĐēĐģŅŽŅ‡Đ°ĐŊŅ‹ ĐļŅŅŅ‚ ĐŗĐ°Ņ€Ņ‹ĐˇĐ°ĐŊŅ‚Đ°ĐģҌĐŊĐ°ĐŗĐ° ĐŋĐĩŅ€Đ°Ņ†ŅĐŗĐ˛Đ°ĐŊĐŊŅ
ĐœŅ–ĐŊŅ–-ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐģҌĐŊŅ–Đē ĐŧĐžĐļĐŊа ĐŋĐĩŅ€Đ°Ņ†ŅĐŗĐŊŅƒŅ†ŅŒ Са ĐŧĐĩĐļŅ‹ ŅĐēŅ€Đ°ĐŊа ŅžĐģĐĩва ҆Җ ŅžĐŋŅ€Đ°Đ˛Đ°"</string>
<string name="revanced_miniplayer_horizontal_drag_summary_off">Đ“ĐžŅ€Đ¸ĐˇĐžĐŊŅ‚Đ°ĐģҌĐŊŅ‹Đš ĐļĐĩҁ҂ ĐŋĐĩŅ€ĐĩŅ‚Đ°ŅĐēиваĐŊĐ¸Ņ ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊ</string>
<string name="revanced_miniplayer_hide_expand_close_title">ĐĄĐēŅ€Ņ‹Ņ‚ŅŒ ĐēĐŊĐžĐŋĐē҃ СаĐēŅ€Ņ‹Ņ‚Đ¸Ņ</string>
<string name="revanced_miniplayer_hide_expand_close_summary_on">КĐŊĐžĐŋĐēа СаĐēŅ€Ņ‹Ņ‚Đ¸Ņ ҁĐēŅ€Ņ‹Ņ‚Đ°</string>
<string name="revanced_miniplayer_hide_expand_close_summary_off">КĐŊĐžĐŋĐēа СаĐēŅ€Ņ‹Ņ‚Đ¸Ņ ĐžŅ‚ĐžĐąŅ€Đ°ĐļаĐĩŅ‚ŅŅ</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐēŅ– Ņ€Đ°ĐˇĐŗĐžŅ€Ņ‚Đ˛Đ°ĐŊĐŊŅ Ņ– СаĐēŅ€Ņ‹Ņ†Ņ†Ņ</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"КĐŊĐžĐŋĐēŅ– ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹
ĐŸŅ€Đ°Ņ†ŅĐŗĐ˛Đ°ĐšŅ†Đĩ ĐŋаĐģŅŒŅ†Đ°Đŧ, Đēай Ņ€Đ°ĐˇĐŗĐ°Ņ€ĐŊŅƒŅ†ŅŒ айО СаĐēŅ€Ņ‹Ņ†ŅŒ"</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">ПаĐēĐ°ĐˇĐ˛Đ°ŅŽŅ†Ņ†Đ° ĐēĐŊĐžĐŋĐēŅ– Ņ€Đ°ĐˇĐŗĐ°Ņ€ĐŊŅƒŅ†ŅŒ Ņ– СаĐēŅ€Ņ‹Ņ†ŅŒ</string>
<string name="revanced_miniplayer_hide_subtext_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋĐ°Đ´Ņ‚ŅĐēҁ҂ҋ</string>
<string name="revanced_miniplayer_hide_subtext_summary_on">ĐŸĐ°Đ´Ņ‚ŅĐēҁ҂ҋ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹Ņ</string>
@@ -930,6 +1109,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_miniplayer_hide_rewind_forward_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐēŅ– ĐŋĐĩŅ€Đ°Ņ…ĐžĐ´Ņƒ ĐŊаĐŋĐĩŅ€Đ°Đ´ Ņ– ĐŊаСад</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">ПĐĩŅ€Đ°Ņ…ĐžĐ´ ĐŊаĐŋĐĩŅ€Đ°Đ´ Ņ– ĐŊаСад ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">ПаĐēаСваĐĩŅ†Ņ†Đ° ĐŋĐĩŅ€Đ°Ņ…ĐžĐ´ ĐŊаĐŋĐĩŅ€Đ°Đ´ Ņ– ĐŊаСад</string>
<string name="revanced_miniplayer_width_dip_title">РаСĐŧĐĩŅ€ ĐŋĐž ҃ĐŧĐžĐģŅ‡Đ°ĐŊĐ¸ŅŽ</string>
<string name="revanced_miniplayer_width_dip_summary">ĐĐ°Ņ‡Đ°ĐģҌĐŊĐ°Ņ Ņ€Đ°ĐˇĐŧĐĩŅ€ ĐŊа ŅĐēŅ€Đ°ĐŊĐĩ в ĐŋиĐēҁĐĩĐģŅŅ…</string>
<string name="revanced_miniplayer_width_dip_invalid_toast">РаСĐŧĐĩŅ€ ĐŋиĐēҁĐĩĐģŅ Đ´ĐžĐģĐļĐĩĐŊ ĐąŅ‹Ņ‚ŅŒ в ĐŋŅ€ĐĩĐ´ĐĩĐģĐ°Ņ… %1$s и %2$s</string>
<string name="revanced_miniplayer_opacity_title">НĐĩĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚Đ°ŅŅ†ŅŒ ĐŊаĐēĐģадаĐŊĐŊŅ</string>
<string name="revanced_miniplayer_opacity_summary">ЗĐŊĐ°Ņ‡ŅĐŊĐŊĐĩ ĐŊĐĩĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚Đ°ŅŅ†Ņ– ĐŋаĐŧŅ–Đļ 0-100, дСĐĩ 0 - ĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚Ņ‹</string>
<string name="revanced_miniplayer_opacity_invalid_toast">НĐĩĐŋŅ€Đ°ĐˇŅ€Ņ‹ŅŅ‚Đ°ŅŅ†ŅŒ ĐŊаĐēĐģадаĐŊĐŊŅ ĐŧŅ–ĐŊŅ–-ĐŋĐģŅĐĩŅ€Đ° ĐŋĐ°Đ˛Ņ–ĐŊĐŊа ĐąŅ‹Ņ†ŅŒ ад 0 да 100</string>
@@ -945,11 +1127,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_seekbar_custom_color_summary_off">ПаĐēаСаĐŊŅ‹ ĐˇŅ‹Ņ…ĐžĐ´ĐŊŅ‹ ĐēĐžĐģĐĩŅ€ ĐŋаĐŊŅĐģŅ– ĐŋĐžŅˆŅƒĐē҃</string>
<string name="revanced_seekbar_custom_color_value_title">ĐšĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊҖ҆ĐēŅ– ĐēĐžĐģĐĩŅ€ ĐŋаĐŊŅĐģŅ– ĐŋĐžŅˆŅƒĐē҃</string>
<string name="revanced_seekbar_custom_color_value_summary">КоĐģĐĩŅ€ ĐŋаĐŊŅĐģŅ– ĐŋĐžŅˆŅƒĐē҃</string>
<string name="revanced_seekbar_custom_color_invalid">НĐĩвĐĩŅ€ĐŊĐžĐĩ СĐŊĐ°Ņ‡ĐĩĐŊиĐĩ Ņ†Đ˛ĐĩŅ‚Đ° ĐŋĐžĐģĐˇŅƒĐŊĐēа ĐŋŅ€ĐžĐŗŅ€ĐĩŅŅĐ°</string>
</patch>
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
<string name="revanced_bypass_image_region_restrictions_title">ĐĐąŅ‹Ņ…ĐžĐ´ айĐŧĐĩĐļаваĐŊĐŊŅŅž Ņ€ŅĐŗŅ–Ņ‘ĐŊ҃</string>
<string name="revanced_bypass_image_region_restrictions_summary_on">Đ’Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐŊĐŊĐĩ Ņ…Đ°ŅŅ‚Đ° Đ˛Ņ–Đ´Đ°Ņ€Ņ‹ŅĐ°Ņž yt4.ggpht.com</string>
<string name="revanced_bypass_image_region_restrictions_summary_off">Đ’Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐŊĐŊĐĩ Đ°Ņ€Ņ‹ĐŗŅ–ĐŊаĐģҌĐŊĐ°ĐŗĐ° Ņ…Đ°ŅŅ‚Đ° Đ˛Ņ–Đ´Đ°Ņ€Ņ‹ŅĐ°Ņž\n\nĐŖĐēĐģŅŽŅ‡ŅĐŊĐŊĐĩ ĐŗŅŅ‚Đ°Đš ĐžĐŋ҆ҋҖ ĐŧĐžĐļа Đ˛Ņ‹ĐŋŅ€Đ°Đ˛Ņ–Ņ†ŅŒ Đ°Đ´ŅŅƒŅ‚ĐŊŅ–Ņ‡Đ°ŅŽŅ‡Ņ‹Ņ Đ˛Ņ–Đ´Đ°Ņ€Ņ‹ŅŅ‹, ŅĐēŅ–Ņ СайĐģаĐēŅ–Ņ€Đ°Đ˛Đ°ĐŊŅ‹Ņ Ņž ĐŊĐĩĐēĐ°Ņ‚ĐžŅ€Ņ‹Ņ… Ņ€ŅĐŗŅ–Ņ‘ĐŊĐ°Ņ…</string>
<string name="revanced_bypass_image_region_restrictions_summary_off">"Đ’Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚ĐžŅžĐ˛Đ°ĐĩŅ†Ņ†Đ° Đ°Ņ€Ņ‹ĐŗŅ–ĐŊаĐģҌĐŊŅ‹ Ņ…ĐžŅŅ‚ ĐŧаĐģŅŽĐŊĐēĐ°Ņž
ĐŖĐēĐģŅŽŅ‡ŅĐŊĐŊĐĩ ĐŗŅŅ‚Đ°ĐŗĐ° ĐŧĐžĐļа Đ˛Ņ‹ĐŋŅ€Đ°Đ˛Ņ–Ņ†ŅŒ ĐŋŅ€Đ°ĐąĐģĐĩĐŧ҃ С Đ°Đ´ŅŅƒŅ‚ĐŊĐ°ŅŅ†ŅŽ ĐŧаĐģŅŽĐŊĐēĐ°Ņž, ŅĐēŅ–Ņ СайĐģаĐēаваĐŊŅ‹ Ņž ĐŊĐĩĐēĐ°Ņ‚ĐžŅ€Ņ‹Ņ… Ņ€ŅĐŗŅ–Ņ‘ĐŊĐ°Ņ…"</string>
</patch>
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
@@ -964,7 +1149,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow &amp; ĐŅ€Ņ‹ĐŗŅ–ĐŊаĐģҌĐŊŅ‹Ņ ĐŧŅ–ĐŊŅ–ŅŅ†ŅŽŅ€Ņ‹</string>
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow &amp; ĐŖŅŅ‘ Đļ ĐˇĐ°Ņ…ĐžĐŋĐģŅ–Đ˛Đ°Đĩ</string>
<string name="revanced_alt_thumbnail_options_entry_4">ĐŖŅŅ‘ Đļ ĐˇĐ°Ņ…ĐžĐŋĐģŅ–Đ˛Đ°Đĩ</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow ĐŋŅ€Đ°Đ´Đ°ŅŅ‚Đ°ŅžĐģŅĐĩ ĐēŅ€Đ°ŅžĐ´ŅĐžŅ€ŅŅ–ĐŊĐŗĐ°Đ˛Ņ‹Ņ ĐŧŅ–ĐŊŅ–ŅŅ†ŅŽŅ€Ņ‹ Đ´ĐģŅ Đ˛Ņ–Đ´ŅĐ° YouTube. Đ“ŅŅ‚Ņ‹Ņ ĐŧŅ–ĐŊŅ–ŅŅ†ŅŽŅ€Ņ‹ Ņ‡Đ°ŅŅ‚Đ° йОĐģҌ҈ Ņ€ŅĐģĐĩваĐŊŅ‚ĐŊŅ‹Ņ, ҇ҋĐŧ Ņ‚Ņ‹Ņ, ŅĐēŅ–Ņ ĐŋŅ€Đ°Đ´Đ°ŅŅ‚Đ°ŅžĐģŅĐĩ YouTube\n\nКаĐģŅ– ŅĐŊŅ‹ ŅžĐēĐģŅŽŅ‡Đ°ĐŊŅ‹, URL-Đ°Đ´Ņ€Đ°ŅŅ‹ Đ˛Ņ–Đ´ŅĐ° ĐąŅƒĐ´ŅƒŅ†ŅŒ адĐŋŅ€Đ°ŅžĐģŅŅ†Ņ†Đ° ĐŊа ҁĐĩŅ€Đ˛ĐĩŅ€ API, а Ņ–ĐŊŅˆŅ‹Ņ даĐŊŅ‹Ņ ĐŊĐĩ адĐŋŅ€Đ°ŅžĐģŅŅŽŅ†Ņ†Đ°. КаĐģŅ– Đ˛Ņ–Đ´ŅĐ° ĐŊĐĩ ĐŧаĐĩ ĐŧŅ–ĐŊŅ–ŅŅ†ŅŽŅ€ DeArrow, Ņ‚Đž ĐŋаĐēĐ°ĐˇĐ˛Đ°ŅŽŅ†Ņ†Đ° Đ°Ņ€Ņ‹ĐŗŅ–ĐŊаĐģҌĐŊŅ‹Ņ айО Ņ„ĐžŅ‚Đ°ĐˇĐ´Ņ‹ĐŧĐēŅ–\n\nĐĐ°Ņ†Ņ–ŅĐŊҖ҆Đĩ Ņ‚ŅƒŅ‚, Đēай давĐĩĐ´Đ°Ņ†Ņ†Đ° йОĐģҌ҈ ĐŋŅ€Đ° DeArrow</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow ĐˇĐ°ĐąŅŅĐŋĐĩŅ‡Đ˛Đ°Đĩ ĐŧŅ–ĐŊŅ–Đ°Ņ‚ŅŽŅ€Ņ‹ Đ´ĐģŅ Đ˛Ņ–Đ´ŅĐ° YouTube, ŅĐēŅ–Ņ ĐˇĐąŅ–Ņ€Đ°ŅŽŅ†Ņ†Đ° ад ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊŅ–ĐēĐ°Ņž. Đ“ŅŅ‚Ņ‹Ņ ĐŧŅ–ĐŊŅ–Đ°Ņ‚ŅŽŅ€Ņ‹ Ņ‡Đ°ŅŅ‚Đ° йОĐģҌ҈ аĐēŅ‚ŅƒĐ°ĐģҌĐŊŅ‹Ņ, ҇ҋĐŧ Ņ‚Ņ‹Ņ, ŅĐēŅ–Ņ ĐŋŅ€Đ°Đ´Đ°ŅŅ‚Đ°ŅžĐģŅĐĩŅ†Ņ†Đ° YouTube.
КаĐģŅ– ŅžĐēĐģŅŽŅ‡Đ°ĐŊа, URL Đ˛Ņ–Đ´ŅĐ° ĐąŅƒĐ´ŅƒŅ†ŅŒ адĐŋŅ€Đ°ŅžĐģĐĩĐŊŅ‹ ĐŊа ҁĐĩŅ€Đ˛ĐĩŅ€ API, Ņ– ĐŊŅ–ŅĐēŅ–Ņ Ņ–ĐŊŅˆŅ‹Ņ даĐŊŅ‹Ņ ĐŊĐĩ адĐŋŅ€Đ°ŅžĐģŅŅŽŅ†Ņ†Đ°. КаĐģŅ– Đ˛Ņ–Đ´ŅĐ° ĐŊĐĩ ĐŧаĐĩ ĐŧŅ–ĐŊŅ–Đ°Ņ‚ŅŽŅ€ DeArrow, Ņ‚Đž ĐŋаĐēĐ°ĐˇĐ˛Đ°ŅŽŅ†Ņ†Đ° Đ°Ņ€Ņ‹ĐŗŅ–ĐŊаĐģҌĐŊŅ‹Ņ айО ĐˇĐ´Ņ‹ĐŧĐēŅ–.
ĐĐ°Ņ†Ņ–ŅĐŊҖ҆Đĩ Ņ‚ŅƒŅ‚, Đēай давĐĩĐ´Đ°Ņ†Ņ†Đ° йОĐģҌ҈ ĐŋŅ€Đ° DeArrow"</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">ПаĐēĐ°ĐˇĐ°Ņ†ŅŒ Ņ‚ĐžŅŅ‚, ĐēаĐģŅ– API ĐŊĐĩĐ´Đ°ŅŅ‚ŅƒĐŋĐŊŅ‹</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">ĐĸĐžŅŅ‚ ĐŋаĐēаСваĐĩŅ†Ņ†Đ°, ĐēаĐģŅ– DeArrow ĐŊĐĩĐ´Đ°ŅŅ‚ŅƒĐŋĐŊŅ‹</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">ĐĸĐžŅŅ‚ ĐŊĐĩ ĐŋаĐēаСваĐĩŅ†Ņ†Đ°, ĐēаĐģŅ– DeArrow ĐŊĐĩĐ´Đ°ŅŅ‚ŅƒĐŋĐŊŅ‹</string>
@@ -993,6 +1182,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">ĐŖĐ˛Đ°ĐŗĐ°</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Đ’Đ°ŅˆĐ° ĐŗŅ–ŅŅ‚ĐžŅ€Ņ‹Ņ ĐŋŅ€Đ°ĐŗĐģŅĐ´Ņƒ ĐŊĐĩ ĐˇĐ°Ņ…ĐžŅžĐ˛Đ°ĐĩŅ†Ņ†Đ°.&lt;br&gt;&lt;br&gt;Đ“ŅŅ‚Đ°, Ņ…ŅƒŅ‚Ņ‡ŅĐš Са ŅžŅŅ‘, Đ˛Ņ‹ĐēĐģŅ–ĐēаĐŊа DNS-ĐąĐģаĐēŅ–Ņ€ĐžŅžŅˆŅ‡Ņ‹ĐēаĐŧ Ņ€ŅĐēĐģаĐŧŅ‹ айО ҁĐĩŅ‚ĐēĐ°Đ˛Ņ‹Đŧ ĐŋŅ€Đ°ĐēҁҖ.&lt;br&gt;&lt;br&gt;Каб Đ˛Ņ‹ĐŋŅ€Đ°Đ˛Ņ–Ņ†ŅŒ ĐŗŅŅ‚Đ°, Đ´Đ°Đ´Đ°ĐšŅ†Đĩ &lt;b&gt;s.youtube.com&lt;/b&gt; ҃ ĐąĐĩĐģŅ‹ ҁĐŋҖҁ айО адĐēĐģŅŽŅ‡Ņ‹Ņ†Đĩ ŅžŅĐĩ DNS-ĐąĐģаĐēŅ–Ņ€ĐžŅžŅˆŅ‡Ņ‹ĐēŅ– Ņ– ĐŋŅ€Đ°ĐēҁҖ.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">БоĐģҌ҈ ĐŊĐĩ ĐŋаĐēĐ°ĐˇĐ˛Đ°Ņ†ŅŒ</string>
</patch>
<patch id="misc.autorepeat.autoRepeatPatch">
@@ -1002,8 +1192,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">ПаĐŧĐĩҀҋ ĐŋадĐŧаĐŊĐŊĐ°ĐŗĐ° ĐŋҀҋĐģĐ°Đ´Ņ‹</string>
<string name="revanced_spoof_device_dimensions_summary_on">ПаĐŧĐĩҀҋ ĐŋҀҋĐģĐ°Đ´Ņ‹ ĐŋĐ°Đ´Ņ€ĐžĐąĐģĐĩĐŊŅ‹Ņ\n\nМоĐļа ĐąŅ‹Ņ†ŅŒ Ņ€Đ°ĐˇĐąĐģаĐēŅ–Ņ€Đ°Đ˛Đ°ĐŊа йОĐģҌ҈ Đ˛Ņ‹ŅĐžĐēĐ°Ņ ŅĐēĐ°ŅŅ†ŅŒ Đ˛Ņ–Đ´ŅĐ°, аĐģĐĩ Đ˛Ņ‹ ĐŧĐžĐļĐ°Ņ†Đĩ ŅŅƒŅ‚Ņ‹ĐēĐŊŅƒŅ†Ņ†Đ° С ĐˇĐ°Ņ‚Ņ€Ņ‹ĐŧĐēаĐŧŅ– ĐŋҀҋ ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐŊĐŊŅ–, ĐŋĐ°ĐŗĐ°Ņ€ŅˆŅĐŊĐŊĐĩĐŧ Ņ‡Đ°ŅŅƒ Đ°ŅžŅ‚Đ°ĐŊĐžĐŧĐŊаК ĐŋŅ€Đ°Ņ†Ņ‹ Ņ– ĐŊĐĩĐ˛ŅĐ´ĐžĐŧŅ‹ĐŧŅ– ĐŋĐ°ĐąĐžŅ‡ĐŊŅ‹ĐŧŅ– ŅŅ„ĐĩĐēŅ‚Đ°ĐŧŅ–</string>
<string name="revanced_spoof_device_dimensions_summary_off">ПаĐŧĐĩҀҋ ĐŋҀҋĐģĐ°Đ´Ņ‹ ĐŊĐĩ ĐŋĐ°Đ´Ņ€ĐžĐąĐģĐĩĐŊŅ‹Ņ\n\nĐŖĐēĐģŅŽŅ‡ŅĐŊĐŊĐĩ ĐŗŅŅ‚Đ°ĐŗĐ° ĐŧĐžĐļа Ņ€Đ°ĐˇĐąĐģаĐēŅ–Ņ€Đ°Đ˛Đ°Ņ†ŅŒ йОĐģҌ҈ Đ˛Ņ‹ŅĐžĐēŅƒŅŽ ŅĐēĐ°ŅŅ†ŅŒ Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_spoof_device_dimensions_summary_on">"ПаĐŧĐĩҀҋ ĐŋҀҋĐģĐ°Đ´Ņ‹ ĐŋĐ°Đ´Ņ€ĐžĐąĐģĐĩĐŊŅ‹
ĐœĐ°ĐŗŅ‡Ņ‹Đŧа, ĐąŅƒĐ´ŅƒŅ†ŅŒ Ņ€Đ°ĐˇĐąĐģаĐēаваĐŊŅ‹ йОĐģҌ҈ Đ˛Ņ‹ŅĐžĐēŅ–Ņ ŅĐēĐ°ŅŅ†Ņ– Đ˛Ņ–Đ´ŅĐ°, аĐģĐĩ Đ˛Ņ‹ ĐŧĐžĐļĐ°Ņ†Đĩ ŅŅƒŅ‚Ņ‹ĐēĐŊŅƒŅ†Ņ†Đ° С ĐˇĐ°Ņ–ĐēаĐŊĐŊĐĩĐŧ Đ˛Ņ–Đ´ŅĐ°, ĐŗĐžŅ€ŅˆŅ‹Đŧ Ņ‚ŅŅ€ĐŧŅ–ĐŊаĐŧ ҁĐģ҃ĐļĐąŅ‹ ĐąĐ°Ņ‚Đ°Ņ€ŅŅ– Ņ– ĐŊĐĩĐ˛ŅĐ´ĐžĐŧŅ‹ĐŧŅ– ĐŋĐ°ĐąĐžŅ‡ĐŊŅ‹ĐŧŅ– ŅŅ„ĐĩĐēŅ‚Đ°ĐŧŅ–"</string>
<string name="revanced_spoof_device_dimensions_summary_off">"ПаĐŧĐĩҀҋ ĐŋҀҋĐģĐ°Đ´Ņ‹ ĐŊĐĩ ĐŋĐ°Đ´Ņ€ĐžĐąĐģĐĩĐŊŅ‹
ĐŖĐēĐģŅŽŅ‡ŅĐŊĐŊĐĩ ĐŗŅŅ‚Đ°ĐŗĐ° ĐŧĐžĐļа Ņ€Đ°ĐˇĐąĐģаĐēĐ°Đ˛Đ°Ņ†ŅŒ йОĐģҌ҈ Đ˛Ņ‹ŅĐžĐēŅ–Ņ ŅĐēĐ°ŅŅ†Ņ– Đ˛Ņ–Đ´ŅĐ°"</string>
<string name="revanced_spoof_device_dimensions_user_dialog_message">ĐŖĐēĐģŅŽŅ‡ŅĐŊĐŊĐĩ ĐŗŅŅ‚Đ°ĐŗĐ° ĐŧĐžĐļа ĐŋŅ€Ņ‹Đ˛Đĩҁ҆Җ да ĐŋҀҋĐŋŅ‹ĐŊĐēĐ°Ņž ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐŊĐŊŅ Đ˛Ņ–Đ´ŅĐ°, ĐŋĐ°ĐŗĐ°Ņ€ŅˆŅĐŊĐŊŅ Ņ‚ŅŅ€ĐŧŅ–ĐŊ҃ ҁĐģ҃ĐļĐąŅ‹ ĐąĐ°Ņ‚Đ°Ņ€ŅŅ– Ņ– ĐŊĐĩĐ˛ŅĐ´ĐžĐŧҋ҅ ĐŋĐ°ĐąĐžŅ‡ĐŊҋ҅ ŅŅ„ĐĩĐēŅ‚Đ°Ņž.</string>
</patch>
<patch id="misc.gms.gmsCoreSupportResourcePatch">
@@ -1030,6 +1224,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_disable_zoom_haptics_summary_on">ĐĸаĐē҂ҋĐģҌĐŊŅ‹Ņ Ņ„ŅƒĐŊĐē҆ҋҖ адĐēĐģŅŽŅ‡Đ°ĐŊŅ‹</string>
<string name="revanced_disable_zoom_haptics_summary_off">ĐĸаĐē҂ҋĐģҌĐŊŅ‹Ņ ŅŅ–ĐŗĐŊаĐģŅ‹ ŅžĐēĐģŅŽŅ‡Đ°ĐŊŅ‹</string>
</patch>
<patch id="video.audio.forceOriginalAudioPatch">
<string name="revanced_force_original_audio_title">Đ’Ņ‹ĐŧŅƒŅˆĐ°ĐŊаĐĩ Đ°Ņ€Ņ‹ĐŗŅ–ĐŊаĐģҌĐŊаĐĩ Đ°ŅžĐ´Ņ‹Ņ‘</string>
<string name="revanced_force_original_audio_summary_on">Đ’Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐŊĐŊĐĩ Đ°Ņ€Ņ‹ĐŗŅ–ĐŊаĐģҌĐŊĐ°ĐŗĐ° Đ°ŅžĐ´Ņ‹Ņ‘</string>
<string name="revanced_force_original_audio_summary_off">Đ’Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐŊĐŊĐĩ Đ°ŅžĐ´Ņ‹Ņ‘ Đŋа СĐŧĐ°ŅžŅ‡Đ°ĐŊĐŊŅ–</string>
</patch>
<patch id="video.quality.rememberVideoQualityPatch">
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
<string name="revanced_video_quality_default_entry_1">ĐŅžŅ‚Đž</string>
@@ -1039,7 +1238,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_video_quality_default_wifi_title">ĐĄŅ‚Đ°ĐŊĐ´Đ°Ņ€Ņ‚ĐŊĐ°Ņ ŅĐēĐ°ŅŅ†ŅŒ Đ˛Ņ–Đ´ŅĐ° Ņž ҁĐĩ҂҆ҋ Wi-Fi</string>
<string name="revanced_video_quality_default_mobile_title">ĐĄŅ‚Đ°ĐŊĐ´Đ°Ņ€Ņ‚ĐŊĐ°Ņ ŅĐēĐ°ŅŅ†ŅŒ Đ˛Ņ–Đ´ŅĐ° Ņž ĐŧĐ°ĐąŅ–ĐģҌĐŊаК ҁĐĩ҂҆ҋ</string>
<string name="revanced_remember_video_quality_mobile">ĐŧĐ°ĐąŅ–ĐģҌĐŊŅ‹</string>
<string name="revanced_remember_video_quality_wifi">Wi-Fi</string>
<string name="revanced_remember_video_quality_wifi">wi-fi</string>
<string name="revanced_remember_video_quality_toast">ĐĄŅ‚Đ°ĐŊĐ´Đ°Ņ€Ņ‚ĐŊĐ°Ņ ŅĐēĐ°ŅŅ†ŅŒ %1$s СĐŧĐĩĐŊĐĩĐŊа ĐŊа: %2$s</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
@@ -1048,9 +1247,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_playback_speed_dialog_button_summary_off">КĐŊĐžĐŋĐēа ĐŊĐĩ ĐŋаĐēаСваĐĩŅ†Ņ†Đ°</string>
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
<string name="revanced_custom_speed_menu_title">МĐĩĐŊŅŽ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģҌҁĐēОК ҁĐēĐžŅ€ĐžŅŅ‚Đ¸ Đ˛ĐžŅĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐ´ĐĩĐŊĐ¸Ņ</string>
<string name="revanced_custom_speed_menu_summary_on">МĐĩĐŊŅŽ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģҌҁĐēОК ҁĐēĐžŅ€ĐžŅŅ‚Đ¸ ĐžŅ‚ĐžĐąŅ€Đ°ĐļаĐĩŅ‚ŅŅ</string>
<string name="revanced_custom_speed_menu_summary_off">МĐĩĐŊŅŽ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģҌҁĐēОК ҁĐēĐžŅ€ĐžŅŅ‚Đ¸ ĐŊĐĩ ĐžŅ‚ĐžĐąŅ€Đ°ĐļаĐĩŅ‚ŅŅ</string>
<string name="revanced_custom_playback_speeds_title">ĐšĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊҖ҆ĐēŅ–Ņ Ņ…ŅƒŅ‚ĐēĐ°ŅŅ†Ņ– ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐŊĐŊŅ</string>
<string name="revanced_custom_playback_speeds_invalid">ĐšĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊҖ҆ĐēŅ–Ņ Ņ…ŅƒŅ‚ĐēĐ°ŅŅ†Ņ– ĐŋĐ°Đ˛Ņ–ĐŊĐŊŅ‹ ĐąŅ‹Ņ†ŅŒ ĐŧĐĩĐŊ҈ Са %s. Đ’Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐŊĐŊĐĩ СĐŊĐ°Ņ‡ŅĐŊĐŊŅŅž Đŋа СĐŧĐ°ŅžŅ‡Đ°ĐŊĐŊŅ–.</string>
<string name="revanced_custom_playback_speeds_parse_exception">ĐŅĐŋŅ€Đ°Đ˛Ņ–ĐģҌĐŊŅ‹Ņ ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊҖ҆ĐēŅ–Ņ Ņ…ŅƒŅ‚ĐēĐ°ŅŅ†Ņ– ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐŊĐŊŅ. Đ’Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐŊĐŊĐĩ СĐŊĐ°Ņ‡ŅĐŊĐŊŅŅž Đŋа СĐŧĐ°ŅžŅ‡Đ°ĐŊĐŊŅ–.</string>
<string name="revanced_custom_playback_speeds_summary">Đ”ĐžĐąĐ°Đ˛ŅŒŅ‚Đĩ иĐģи иСĐŧĐĩĐŊĐ¸Ņ‚Đĩ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģҌҁĐēŅƒŅŽ ҁĐēĐžŅ€ĐžŅŅ‚ŅŒ Đ˛ĐžŅĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐ´ĐĩĐŊĐ¸Ņ</string>
<string name="revanced_custom_playback_speeds_invalid">НĐĩŅŅ‚Đ°ĐŊĐ´Đ°Ņ€Ņ‚ĐŊŅ‹Ņ Ņ…ŅƒŅ‚ĐēĐ°ŅŅ†Ņ– ĐŋĐ°Đ˛Ņ–ĐŊĐŊŅ‹ ĐąŅ‹Ņ†ŅŒ ĐŧĐĩĐŊ҈ Са %s</string>
<string name="revanced_custom_playback_speeds_parse_exception">НĐĩŅĐ°ĐŋŅ€Đ°ŅžĐ´ĐŊŅ‹Ņ ĐŊĐĩŅŅ‚Đ°ĐŊĐ´Đ°Ņ€Ņ‚ĐŊŅ‹Ņ Ņ…ŅƒŅ‚ĐēĐ°ŅŅ†Ņ– ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐŊĐŊŅ</string>
<string name="revanced_custom_playback_speeds_auto">ĐŅžŅ‚Đž</string>
</patch>
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
@@ -1071,7 +1274,82 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_slide_to_seek_summary_off">ĐĄĐģаКд Đ´ĐģŅ ĐŋĐžŅˆŅƒĐē҃ ĐŊĐĩ ŅžĐēĐģŅŽŅ‡Đ°ĐŊŅ‹</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_screen_title">ПоддĐĩĐģŅ‹Đ˛Đ°Ņ‚ŅŒ ĐŋĐžŅ‚ĐžĐēи видĐĩĐž</string>
<string name="revanced_spoof_video_streams_screen_summary">ИĐŧĐ¸Ņ‚Đ¸Ņ€ŅƒĐšŅ‚Đĩ ĐŋĐžŅ‚ĐžĐēи видĐĩĐž ĐēĐģиĐĩĐŊŅ‚ĐžĐ˛, Ņ‡Ņ‚ĐžĐąŅ‹ ĐŋŅ€ĐĩĐ´ĐžŅ‚Đ˛Ņ€Đ°Ņ‚Đ¸Ņ‚ŅŒ ĐŋŅ€ĐžĐąĐģĐĩĐŧŅ‹ ҁ Đ˛ĐžŅĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐ´ĐĩĐŊиĐĩĐŧ</string>
<string name="revanced_spoof_video_streams_title">ПоддĐĩĐģŅ‹Đ˛Đ°Ņ‚ŅŒ ĐŋĐžŅ‚ĐžĐēи видĐĩĐž</string>
<string name="revanced_spoof_video_streams_summary_on">ĐŸĐžŅ‚ĐžĐēи видĐĩĐž ĐŋОддĐĩĐģаĐŊŅ‹</string>
<string name="revanced_spoof_video_streams_summary_off">"Đ’Ņ–Đ´ŅĐ°ŅŅ‚Ņ€ŅƒĐŧ ĐŊĐĩ ĐŋĐ°Đ´Ņ€ĐžĐąĐģĐĩĐŊŅ‹
ĐŸŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐŊĐŊĐĩ Đ˛Ņ–Đ´ŅĐ° ĐŧĐžĐļа ĐŊĐĩ ĐŋŅ€Đ°Ņ†Đ°Đ˛Đ°Ņ†ŅŒ"</string>
<string name="revanced_spoof_video_streams_user_dialog_message">АдĐēĐģŅŽŅ‡ŅĐŊĐŊĐĩ ĐŗŅŅ‚Đ°Đš ĐŊаĐģĐ°Đ´Ņ‹ ĐŧĐžĐļа Đ˛Ņ‹ĐēĐģŅ–ĐēĐ°Ņ†ŅŒ ĐŋŅ€Đ°ĐąĐģĐĩĐŧŅ‹ С ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐŊĐŊĐĩĐŧ Đ˛Ņ–Đ´ŅĐ°.</string>
<string name="revanced_spoof_video_streams_client_title">КĐģиĐĩĐŊŅ‚ ĐŋĐž ҃ĐŧĐžĐģŅ‡Đ°ĐŊĐ¸ŅŽ</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">ĐŸŅ€Đ¸ĐŊŅƒĐ´Đ¸Ņ‚ĐĩĐģҌĐŊĐž AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ВидĐĩĐžĐēОдĐĩĐē ĐŋŅ€Đ¸ĐŊŅƒĐ´Đ¸Ņ‚ĐĩĐģҌĐŊĐž ŅƒŅŅ‚Đ°ĐŊОвĐģĐĩĐŊ в AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ВидĐĩĐžĐēОдĐĩĐē ĐžĐŋŅ€ĐĩĐ´ĐĩĐģŅĐĩŅ‚ŅŅ Đ°Đ˛Ņ‚ĐžĐŧĐ°Ņ‚Đ¸Ņ‡ĐĩҁĐēи</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"ĐŖĐēĐģŅŽŅ‡ŅĐŊĐŊĐĩ ĐŗŅŅ‚Đ°ĐŗĐ° ĐŧĐžĐļа ĐŋаĐģĐĩĐŋŅˆŅ‹Ņ†ŅŒ Ņ‚ŅŅ€ĐŧŅ–ĐŊ ҁĐģ҃ĐļĐąŅ‹ ĐąĐ°Ņ‚Đ°Ņ€ŅŅ– Ņ– Đ˛Ņ‹ĐŋŅ€Đ°Đ˛Ņ–Ņ†ŅŒ ĐˇĐ°Ņ–ĐēаĐŊĐŊĐĩ Đ˛Ņ–Đ´ŅĐ°.
AVC ĐŧаĐĩ ĐŧаĐēҁҖĐŧаĐģҌĐŊŅƒŅŽ Ņ€Đ°ĐˇĐ´ĐˇŅĐģŅĐģҌĐŊĐ°ŅŅ†ŅŒ 1080p, Đ°ŅžĐ´Ņ‹ŅĐēĐ°Đ´ŅĐēĐ°Ņ€ Opus ĐŊĐĩĐ´Đ°ŅŅ‚ŅƒĐŋĐŊŅ‹, Ņ– Đ˛Ņ–Đ´ŅĐ° ĐąŅƒĐ´ĐˇĐĩ Đ˛Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚ĐžŅžĐ˛Đ°Ņ†ŅŒ йОĐģҌ҈ ІĐŊŅ‚ŅŅ€ĐŊŅŅ‚-даĐŊҋ҅, ҇ҋĐŧ VP9 айО AV1."</string>
<string name="revanced_spoof_video_streams_about_ios_title">ĐŸĐ°ĐąĐžŅ‡ĐŊŅ‹Ņ ŅŅ„ĐĩĐē҂ҋ ĐŋадĐŧĐĩĐŊŅ‹ iOS</string>
<string name="revanced_spoof_video_streams_about_ios_summary">"â€ĸ ĐŸŅ€Ņ‹Đ˛Đ°Ņ‚ĐŊŅ‹Ņ Đ´ĐˇŅ–Ņ†ŅŅ‡Ņ‹Ņ Đ˛Ņ–Đ´ŅĐ° ĐŧĐžĐŗŅƒŅ†ŅŒ ĐŊĐĩ ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°Ņ†Ņ†Đ°
â€ĸ Đ’Ņ–Đ´ŅĐ° СаĐēаĐŊŅ‡Đ˛Đ°ŅŽŅ†Ņ†Đ° ĐŊа 1 ҁĐĩĐē҃ĐŊĐ´Ņƒ Ņ€Đ°ĐŊĐĩĐš"</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">ĐŸĐžĐąĐžŅ‡ĐŊŅ‹Đĩ ŅŅ„Ņ„ĐĩĐē҂ҋ ĐŋОдĐŧĐĩĐŊŅ‹ Android VR</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">"â€ĸ Đ”ĐˇŅ–Ņ†ŅŅ‡Ņ‹Ņ Đ˛Ņ–Đ´ŅĐ° ĐŧĐžĐŗŅƒŅ†ŅŒ ĐŊĐĩ ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°Ņ†Ņ†Đ°
â€ĸ ĐĸŅ€Đ°ĐŊҁĐģŅŅ†Ņ‹Ņ– Ņž ĐŋŅ€Đ°ĐŧŅ‹Đŧ ŅŅ„Ņ–Ņ€Ņ‹ ĐŋĐ°Ņ‡Ņ‹ĐŊĐ°ŅŽŅ†Ņ†Đ° С ĐŋĐ°Ņ‡Đ°Ņ‚Đē҃
â€ĸ Đ’Ņ–Đ´ŅĐ° СаĐēаĐŊŅ‡Đ˛Đ°ŅŽŅ†Ņ†Đ° ĐŊа 1 ҁĐĩĐē҃ĐŊĐ´Ņƒ Ņ€Đ°ĐŊĐĩĐš"</string>
<string name="revanced_spoof_video_streams_language_title">Đ¯ĐˇŅ‹Đē ĐŋĐžŅ‚ĐžĐēа Đ°ŅƒĐ´Đ¸Đž ĐŋĐž ҃ĐŧĐžĐģŅ‡Đ°ĐŊĐ¸ŅŽ</string>
<string name="revanced_spoof_video_streams_language_DEFAULT">Đ¯ĐˇŅ‹Đē ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊĐ¸Ņ</string>
<string name="revanced_spoof_video_streams_language_AR">ĐŅ€Đ°ĐąŅĐēиК</string>
<string name="revanced_spoof_video_streams_language_AZ">АСĐĩŅ€ĐąĐ°ĐšĐ´ĐļаĐŊҁĐēиК</string>
<string name="revanced_spoof_video_streams_language_BG">БоĐģĐŗĐ°Ņ€ŅĐēиК</string>
<string name="revanced_spoof_video_streams_language_BN">БĐĩĐŊĐŗĐ°ĐģҌҁĐēиК</string>
<string name="revanced_spoof_video_streams_language_CA">ĐšĐ°Ņ‚Đ°ĐģĐžĐŊҁĐēиК</string>
<string name="revanced_spoof_video_streams_language_CS">ЧĐĩ҈ҁĐēиК</string>
<string name="revanced_spoof_video_streams_language_DA">Đ”Đ°Ņ‚ŅĐēиК</string>
<string name="revanced_spoof_video_streams_language_DE">НĐĩĐŧĐĩ҆ĐēиК</string>
<string name="revanced_spoof_video_streams_language_EL">Đ“Ņ€Đĩ҇ĐĩҁĐēиК</string>
<string name="revanced_spoof_video_streams_language_EN">АĐŊĐŗĐģŅ–ĐšŅĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_ES">Đ†ŅĐŋаĐŊҁĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_ET">Đ­ŅŅ‚ĐžĐŊҁĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_FA">Đ¤Đ°Ņ€ŅŅ–</string>
<string name="revanced_spoof_video_streams_language_FI">Đ¤Ņ–ĐŊҁĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_FR">Đ¤Ņ€Đ°ĐŊŅ†ŅƒĐˇŅĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_GU">Đ“ŅƒŅŅ€Đ°Ņ‚Ņ–</string>
<string name="revanced_spoof_video_streams_language_HI">ĐĨŅĐŊĐ´Ņ–</string>
<string name="revanced_spoof_video_streams_language_HR">ĐĨĐžŅ€Đ˛Đ°Ņ‚ŅĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_HU">ВĐĩĐŊĐŗĐĩҀҁĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_ID">ИĐŊдаĐŊĐĩĐˇŅ–ĐšŅĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_IT">Đ˜Ņ‚Đ°ĐģŅŒŅĐŊҁĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_JA">Đ¯ĐŋĐžĐŊҁĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_KK">ĐšĐ°ĐˇĐ°Ņ…ŅĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_KO">ĐšĐžŅ€ŅĐšŅĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_LT">Đ›Ņ–Ņ‚ĐžŅƒŅĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_LV">Đ›Đ°Ņ‚Ņ‹ŅˆŅĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_MK">МаĐēĐĩĐ´ĐžĐŊҁĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_MN">МоĐŊĐŗĐžĐģҌҁĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_MR">ĐœĐ°Ņ€Đ°Ņ‚Ņ…Ņ–</string>
<string name="revanced_spoof_video_streams_language_MS">МаĐģĐ°ĐšŅĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_MY">Đ‘Ņ€Ņ‹ĐŧаĐŊҁĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_NL">ĐŅ–Đ´Ņ€ĐģаĐŊĐ´ŅĐēиК</string>
<string name="revanced_spoof_video_streams_language_OR">ĐžŅ€Ņ–Ņ</string>
<string name="revanced_spoof_video_streams_language_PA">ПаĐŊĐ´ĐļĐ°ĐąŅĐēиК</string>
<string name="revanced_spoof_video_streams_language_PL">ПоĐģҌҁĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_PT_BR">ĐŸĐ°Ņ€Ņ‚ŅƒĐŗĐ°ĐģҌҁĐēĐ°Ņ (Đ‘Ņ€Đ°ĐˇŅ–ĐģŅ–Ņ)</string>
<string name="revanced_spoof_video_streams_language_PT_PT">ĐŸĐ°Ņ€Ņ‚ŅƒĐŗĐ°ĐģҌҁĐēĐ°Ņ (ĐŸĐ°Ņ€Ņ‚ŅƒĐŗĐ°ĐģŅ–Ņ)</string>
<string name="revanced_spoof_video_streams_language_RO">Đ ŅƒĐŧŅ‹ĐŊҁĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_RU">Đ ŅƒŅŅĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_SK">ĐĄĐģĐžĐ˛Đ°Ņ†ĐēĐ¸Ņ</string>
<string name="revanced_spoof_video_streams_language_SL">ĐĄĐģОвĐĩĐŊҁĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_SR">ĐĄĐĩŅ€ĐąŅĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_SV">ШвĐĩ҆ĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_SW">ĐĄŅƒĐ°Ņ…Ņ–ĐģŅ–</string>
<string name="revanced_spoof_video_streams_language_TA">ĐĸаĐŧŅ–ĐģҌҁĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_TE">ĐĸŅĐģŅƒĐŗŅƒ</string>
<string name="revanced_spoof_video_streams_language_TH">ĐĸĐ°ĐšŅĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_TR">ĐĸŅƒŅ€ŅŅ†ĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_UK">ĐŖĐēŅ€Đ°Ņ‘ĐŊҁĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_UR">ĐŖŅ€Đ´Ņƒ</string>
<string name="revanced_spoof_video_streams_language_VI">Đ’Ņ–ĐĩŅ‚ĐŊаĐŧҁĐēĐ°Ņ</string>
<string name="revanced_spoof_video_streams_language_ZH">ĐšŅ–Ņ‚Đ°ĐšŅĐēĐ°Ņ</string>
</patch>
</app>
<app id="twitch">
@@ -1081,8 +1359,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_block_audio_ads_summary_off">ĐŅžĐ´Ņ‹Ņ‘Ņ€ŅĐēĐģаĐŧа Ņ€Đ°ĐˇĐąĐģаĐēŅ–Ņ€Đ°Đ˛Đ°ĐŊа</string>
</patch>
<patch id="ad.embedded.embeddedAdsPatch">
<string name="revanced_embedded_ads_service_unavailable">%s ĐŊĐĩĐ´Đ°ŅŅ‚ŅƒĐŋĐŊŅ‹. Đ ŅĐēĐģаĐŧа ĐŧĐžĐļа ĐŋаĐēĐ°ĐˇĐ˛Đ°Ņ†Ņ†Đ°. ĐŸĐ°ŅĐŋŅ€Đ°ĐąŅƒĐšŅ†Đĩ ĐŋĐĩŅ€Đ°ĐēĐģŅŽŅ‡Ņ‹Ņ†Ņ†Đ° ĐŊа Ņ–ĐŊŅˆŅƒŅŽ ҁĐģ҃ĐļĐąŅƒ ĐąĐģаĐēŅ–Ņ€ĐžŅžĐēŅ– Ņ€ŅĐēĐģаĐŧŅ‹ Ņž ĐŊаĐģĐ°Đ´Đ°Ņ….</string>
<string name="revanced_embedded_ads_service_failed">ĐĄĐĩŅ€Đ˛ĐĩŅ€ %s Đ˛ŅŅ€ĐŊŅƒŅž ĐŋаĐŧŅ‹ĐģĐē҃. Đ ŅĐēĐģаĐŧа ĐŧĐžĐļа ĐŋаĐēĐ°ĐˇĐ˛Đ°Ņ†Ņ†Đ°. ĐŸĐ°ŅĐŋŅ€Đ°ĐąŅƒĐšŅ†Đĩ ĐŋĐĩŅ€Đ°ĐēĐģŅŽŅ‡Ņ‹Ņ†Ņ†Đ° ĐŊа Ņ–ĐŊŅˆŅƒŅŽ ҁĐģ҃ĐļĐąŅƒ ĐąĐģаĐēŅ–Ņ€ĐžŅžĐēŅ– Ņ€ŅĐēĐģаĐŧŅ‹ Ņž ĐŊаĐģĐ°Đ´Đ°Ņ….</string>
<string name="revanced_embedded_ads_service_unavailable">%s ĐŊĐĩĐ´Đ°ŅŅ‚ŅƒĐŋĐŊŅ‹, Ņ€ŅĐēĐģаĐŧа ĐŧĐžĐļа ĐŋаĐēĐ°ĐˇĐ˛Đ°Ņ†Ņ†Đ°. ĐŸĐ°ŅĐŋŅ€Đ°ĐąŅƒĐšŅ†Đĩ СĐŧŅĐŊŅ–Ņ†ŅŒ ҁĐģ҃ĐļĐąŅƒ ĐąĐģаĐēаваĐŊĐŊŅ Ņ€ŅĐēĐģаĐŧŅ‹ Ņž ĐŊаĐģĐ°Đ´Đ°Ņ….</string>
<string name="revanced_embedded_ads_service_failed">%s Đ˛Ņ‹Đ´Đ°Ņž ĐŋаĐŧŅ‹ĐģĐē҃, Ņ€ŅĐēĐģаĐŧа ĐŧĐžĐļа ĐŋаĐēĐ°ĐˇĐ˛Đ°Ņ†Ņ†Đ°. ĐŸĐ°ŅĐŋŅ€Đ°ĐąŅƒĐšŅ†Đĩ СĐŧŅĐŊŅ–Ņ†ŅŒ ҁĐģ҃ĐļĐąŅƒ ĐąĐģаĐēаваĐŊĐŊŅ Ņ€ŅĐēĐģаĐŧŅ‹ Ņž ĐŊаĐģĐ°Đ´Đ°Ņ….</string>
<string name="revanced_block_embedded_ads_title">БĐģаĐēŅ–Ņ€Đ°Đ˛Đ°Ņ†ŅŒ ŅƒĐąŅƒĐ´Đ°Đ˛Đ°ĐŊŅƒŅŽ Đ˛Ņ–Đ´ŅĐ°Ņ€ŅĐēĐģаĐŧ҃</string>
<string name="revanced_block_embedded_ads_entry_1">ІĐŊваĐģŅ–Đ´Ņ‹</string>
<string name="revanced_block_embedded_ads_entry_2">ХвĐĩŅ‚ĐģĐ°Đ˛Ņ‹ ĐŋŅ€ĐžĐēҁҖ</string>
@@ -1114,6 +1392,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="misc.settings.settingsPatch">
<string name="revanced_settings">НаĐģĐ°Đ´Ņ‹ ReVanced</string>
<string name="revanced_about_title">ĐŸŅ€Đ° ĐŊĐ°Ņ</string>
<string name="revanced_about_summary">Đ Đ°ŅĐēаĐļŅ‹Ņ†ŅŒ “ReVanced”</string>
<string name="revanced_ads_screen_title">Ай\"ŅĐ˛Ņ‹</string>
<string name="revanced_ads_screen_summary">НаĐģĐ°Đ´Ņ‹ ĐąĐģаĐēŅ–Ņ€ĐžŅžĐēŅ– Ņ€ŅĐēĐģаĐŧŅ‹</string>
<string name="revanced_chat_screen_title">Đ§Đ°Ņ‚</string>

View File

@@ -1,34 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
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">
@@ -44,12 +33,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_check_environment_not_near_patch_time_invalid">Đ”Đ°Ņ‚Đ°Ņ‚Đ° ĐŊа ĐēĐžĐŧĐŋиĐģĐ°Ņ†Đ¸Ņ ĐŊа APK Đĩ ĐŋĐžĐ˛Ņ€ĐĩĐ´ĐĩĐŊа</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_title">ReVanced</string>
<string name="revanced_settings_confirm_user_dialog_title">Đ˜ŅĐēĐ°Ņ‚Đĩ Đģи да ĐŋŅ€ĐžĐ´ŅŠĐģĐļĐ¸Ņ‚Đĩ?</string>
<string name="revanced_settings_reset">ĐŅƒĐģĐ¸Ņ€Đ°ĐŊĐĩ</string>
<string name="revanced_settings_reset">Đ’ŅŠĐˇŅŅ‚Đ°ĐŊОви</string>
<string name="revanced_settings_restart_title">Đ ĐĩŅŅ‚Đ°Ņ€Ņ‚Đ¸Ņ€Đ°Đš и ĐžĐŋŅ€ĐĩҁĐŊи</string>
<string name="revanced_settings_restart">Đ ĐĩŅŅ‚Đ°Ņ€Ņ‚Đ¸Ņ€Đ°ĐŊĐĩ</string>
<string name="revanced_settings_import">ИĐŧĐŋĐžŅ€Ņ‚Đ¸Ņ€Đ°ĐŊĐĩ</string>
<string name="revanced_settings_import_copy">КоĐŋĐ¸Ņ€Đ°ĐŊĐĩ</string>
<string name="revanced_settings_import_copy">КоĐŋĐ¸Ņ€Đ°Đš</string>
<string name="revanced_settings_import_reset">ĐĐ°ŅŅ‚Ņ€ĐžĐšĐēĐ¸Ņ‚Đĩ ĐŊа ReVanced ĐąŅŅ…Đ° ĐŊ҃ĐģĐ¸Ņ€Đ°ĐŊи</string>
<string name="revanced_settings_import_success">ĐĄĐģĐĩĐ´ĐŊĐ¸Ņ‚Đĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи ĐąŅŅ…Đ° иĐŧĐŋĐžŅ€Ņ‚Đ¸Ņ€Đ°ĐŊи ҃ҁĐŋĐĩ҈ĐŊĐž: %d</string>
<string name="revanced_settings_import_failure_parse">ИĐŧĐŋĐžŅ€Ņ‚Đ¸Ņ€Đ°ĐŊĐĩŅ‚Đž ĐąĐĩ҈Đĩ ĐŊĐĩ҃ҁĐŋĐĩ҈ĐŊĐž: %s</string>
@@ -67,15 +57,23 @@ 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">GmsCore ĐŊĐĩ Đĩ иĐŊŅŅ‚Đ°ĐģĐ¸Ņ€Đ°ĐŊ. ИĐŊŅŅ‚Đ°ĐģĐ¸Ņ€Đ°ĐšŅ‚Đĩ ĐŗĐž.</string>
<string name="gms_core_dialog_title">ĐŅƒĐļĐŊĐž Đĩ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Đĩ</string>
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore ĐŊĐĩ ĐŧĐžĐļĐĩ да Ņ€Đ°ĐąĐžŅ‚Đ¸ Đ˛ŅŠĐ˛ Ņ„ĐžĐŊОв Ņ€ĐĩĐļиĐŧ.\n\nМоĐģŅ, ҁĐģĐĩĐ´Đ˛Đ°ĐšŅ‚Đĩ Ņ€ŅŠĐēĐžĐ˛ĐžĐ´ŅŅ‚Đ˛ĐžŅ‚Đž \"Don\'t kill my app“ Са Đ˛Đ°ŅˆĐ¸Ņ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊ и ĐŋŅ€Đ¸ĐģĐžĐļĐĩŅ‚Đĩ иĐŊŅŅ‚Ņ€ŅƒĐēŅ†Đ¸Đ¸Ņ‚Đĩ ĐŊа MicroG.\n\nĐĸОва Đĩ ĐŊĐĩĐžĐąŅ…ĐžĐ´Đ¸ĐŧĐž, Са да Ņ€Đ°ĐąĐžŅ‚Đ¸ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž.</string>
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore ĐŊŅĐŧа Ņ€Đ°ĐˇŅ€Đĩ҈ĐĩĐŊиĐĩ да Ņ€Đ°ĐąĐžŅ‚Đ¸ Đ˛ŅŠĐ˛ Ņ„ĐžĐŊОв Ņ€ĐĩĐļиĐŧ.
ĐĄĐģĐĩĐ´Đ˛Đ°ĐšŅ‚Đĩ Ņ€ŅŠĐēĐžĐ˛ĐžĐ´ŅŅ‚Đ˛ĐžŅ‚Đž \"НĐĩ ŅƒĐąĐ¸Đ˛Đ°Đš ĐŧĐžĐĩŅ‚Đž ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩ\" Са Đ˛Đ°ŅˆĐ¸Ņ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊ и ĐŋŅ€Đ¸ĐģĐžĐļĐĩŅ‚Đĩ иĐŊŅŅ‚Ņ€ŅƒĐēŅ†Đ¸Đ¸Ņ‚Đĩ ĐēҊĐŧ Đ˛Đ°ŅˆĐ°Ņ‚Đ° иĐŊŅŅ‚Đ°ĐģĐ°Ņ†Đ¸Ņ ĐŊа MicroG.
ĐĸОва Đĩ ĐŊĐĩĐžĐąŅ…ĐžĐ´Đ¸ĐŧĐž, Са да Ņ€Đ°ĐąĐžŅ‚Đ¸ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž."</string>
<string name="gms_core_dialog_open_website_text">ĐžŅ‚Đ˛ĐžŅ€Đ¸ ŅĐ°ĐšŅ‚Đ°</string>
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">За да иСйĐĩĐŗĐŊĐĩŅ‚Đĩ ĐŋŅ€ĐžĐąĐģĐĩĐŧи Đĩ ĐŊĐĩĐžĐąŅ…ĐžĐ´Đ¸ĐŧĐž да иСĐēĐģŅŽŅ‡Đ¸Ņ‚Đĩ ĐžĐŋŅ‚Đ¸ĐŧĐ¸ĐˇĐ°Ņ†Đ¸ŅŅ‚Đ° ĐŊа ĐąĐ°Ņ‚ĐĩŅ€Đ¸ŅŅ‚Đ° Са GmsCore.\n\nĐĐ°Ņ‚Đ¸ŅĐŊĐĩŅ‚Đĩ \"ĐŸŅ€ĐžĐ´ĐžĐģĐļи\" и иСĐēŅŽŅ‡ĐĩŅ€Đĩ ĐžĐŋŅ‚Đ¸ĐŧĐ¸ĐˇĐ°Ņ†Đ¸ŅŅ‚Đ° ĐŊа ĐąĐ°Ņ‚ĐĩŅ€Đ¸ŅŅ‚Đ°.</string>
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"ОĐŋŅ‚Đ¸ĐŧĐ¸ĐˇĐ°Ņ†Đ¸Đ¸Ņ‚Đĩ ĐŊа ĐąĐ°Ņ‚ĐĩŅ€Đ¸ŅŅ‚Đ° Са MicroG GmsCore Ņ‚Ņ€ŅĐąĐ˛Đ° да ĐąŅŠĐ´Đ°Ņ‚ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊи, Са да ҁĐĩ иСйĐĩĐŗĐŊĐ°Ņ‚ ĐŋŅ€ĐžĐąĐģĐĩĐŧи.
ДĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩŅ‚Đž ĐŊа ĐžĐŋŅ‚Đ¸ĐŧĐ¸ĐˇĐ°Ņ†Đ¸Đ¸Ņ‚Đĩ ĐŊа ĐąĐ°Ņ‚ĐĩŅ€Đ¸ŅŅ‚Đ° Са MicroG ĐŊŅĐŧа да ĐŋОвĐģĐ¸ŅĐĩ ĐžŅ‚Ņ€Đ¸Ņ†Đ°Ņ‚ĐĩĐģĐŊĐž ĐŊа иСĐŋĐžĐģСваĐŊĐĩŅ‚Đž ĐŊа ĐąĐ°Ņ‚ĐĩŅ€Đ¸ŅŅ‚Đ°.
ДоĐēĐžŅĐŊĐĩŅ‚Đĩ ĐąŅƒŅ‚ĐžĐŊа Са ĐŋŅ€ĐžĐ´ŅŠĐģĐļаваĐŊĐĩ и Ņ€Đ°ĐˇŅ€Đĩ҈ĐĩŅ‚Đĩ ĐŋŅ€ĐžĐŧĐĩĐŊи в ĐžĐŋŅ‚Đ¸ĐŧĐ¸ĐˇĐ°Ņ†Đ¸ŅŅ‚Đ°."</string>
<string name="gms_core_dialog_continue_text">ĐŸŅ€ĐžĐ´ŅŠĐģĐļи</string>
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.settingsPatch">
<string name="revanced_settings_screen_00_about_title">ĐžŅ‚ĐŊĐžŅĐŊĐž</string>
<string name="revanced_settings_screen_00_about_title">За ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐ°Ņ‚Đ°</string>
<string name="revanced_settings_screen_01_ads_title">Đ ĐĩĐēĐģаĐŧи</string>
<string name="revanced_settings_screen_02_alt_thumbnails_title">АĐģŅ‚ĐĩŅ€ĐŊĐ°Ņ‚Đ¸Đ˛ĐŊи ĐŧиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸</string>
<string name="revanced_settings_screen_03_feed_title">ĐŸĐžŅ‚ĐžĐē</string>
@@ -106,7 +104,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_debug_toast_on_error_title">ПоĐēаĐļи ŅĐ¸ŅŅ‚ĐĩĐŧĐŊĐž ŅŅŠĐžĐąŅ‰ĐĩĐŊиĐĩ ĐŋŅ€Đ¸ ReVanced ĐŗŅ€Đĩ҈Đēа</string>
<string name="revanced_debug_toast_on_error_summary_on">ĐĄĐ¸ŅŅ‚ĐĩĐŧĐŊĐž ŅŅŠĐžĐąŅ‰ĐĩĐŊиĐĩ ҉Đĩ ĐąŅŠĐ´Đĩ ĐŋĐžĐēаСаĐŊĐž, аĐēĐž ҁĐĩ ĐŋĐžŅĐ˛Đ¸ ĐŗŅ€Đĩ҈Đēа</string>
<string name="revanced_debug_toast_on_error_summary_off">ĐĄĐ¸ŅŅ‚ĐĩĐŧĐŊĐž ŅŅŠĐžĐąŅ‰ĐĩĐŊиĐĩ ĐŊŅĐŧа да ĐąŅŠĐ´Đĩ ĐŋĐžĐēаСаĐŊĐž, аĐēĐž ҁĐĩ ĐŋĐžŅĐ˛Đ¸ ĐŗŅ€Đĩ҈Đēа</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">АĐēĐž иСĐēĐģŅŽŅ‡Đ¸Ņ‚Đĩ ŅĐ¸ŅŅ‚ĐĩĐŧĐŊĐ¸Ņ‚Đĩ ŅŅŠĐžĐąŅ‰ĐĩĐŊĐ¸Ņ, ҉Đĩ ҁĐēŅ€Đ¸ĐĩŅ‚Đĩ Đ˛ŅĐ¸Ņ‡Đēи ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊĐ¸Ņ Са ReVanced ĐŗŅ€Đĩ҈Đēи. \n\nĐŅĐŧа да ĐąŅŠĐ´ĐĩŅ‚Đĩ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐĩĐŊи, аĐēĐž ĐŊĐ°ŅŅ‚ŅŠĐŋŅŅ‚ ĐŊĐĩĐžŅ‡Đ°ĐēваĐŊи ŅŅŠĐąĐ¸Ņ‚Đ¸Ņ.</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"ИСĐēĐģŅŽŅ‡Đ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа Đ¸ĐˇŅĐēĐ°Ņ‡Đ°Ņ‰Đ¸ ŅŅŠĐžĐąŅ‰ĐĩĐŊĐ¸Ņ Са ĐŗŅ€Đĩ҈Đēи ĐēŅ€Đ¸Đĩ Đ˛ŅĐ¸Ņ‡Đēи иСвĐĩŅŅ‚Đ¸Ņ Са ĐŗŅ€Đĩ҈Đēи ĐŊа ReVanced.
ĐŅĐŧа да ĐąŅŠĐ´ĐĩŅ‚Đĩ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐĩĐŊи Са ĐŊĐĩĐžŅ‡Đ°ĐēваĐŊи ŅŅŠĐąĐ¸Ņ‚Đ¸Ņ."</string>
</patch>
<patch id="layout.hide.general.hideLayoutComponentsPatch">
<string name="revanced_disable_like_subscribe_glow_title">ДĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐšŅ‚Đĩ ĐŋĐžĐ´ŅĐ˛ĐĩŅ‚ĐēĐ°Ņ‚Đ° ĐŊа ĐąŅƒŅ‚ĐžĐŊа ĐĨĐ°Ņ€ĐĩŅĐ˛Đ°Đŧ /АйОĐŊаĐŧĐĩĐŊŅ‚</string>
@@ -121,74 +121,76 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_floating_microphone_button_title">ПĐģĐ°Đ˛Đ°Ņ‰ ĐąŅƒŅ‚ĐžĐŊ Са ĐŧиĐēŅ€ĐžŅ„ĐžĐŊа</string>
<string name="revanced_hide_floating_microphone_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐŊа ĐŧиĐēŅ€ĐžŅ„ĐžĐŊа Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_floating_microphone_button_summary_off">ПоĐēаСаĐŊ Đĩ ĐąŅƒŅ‚ĐžĐŊ ĐŊа ĐŧиĐēŅ€ĐžŅ„ĐžĐŊа</string>
<string name="revanced_hide_channel_watermark_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа вОдĐŊĐ¸Ņ СĐŊаĐē ĐŊа ĐēаĐŊаĐģа</string>
<string name="revanced_hide_channel_watermark_summary_on">ВодĐŊĐ¸ŅŅ‚ СĐŊаĐē Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_channel_watermark_summary_off">ВодĐŊĐ¸ŅŅ‚ СĐŊаĐē Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_channel_watermark_title">ВодĐĩĐŊ СĐŊаĐē ĐŊа ĐēаĐŊаĐģа</string>
<string name="revanced_hide_channel_watermark_summary_on">ВодĐŊĐ¸ŅŅ‚ СĐŊаĐē ĐŊа ĐēаĐŊаĐģа Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_channel_watermark_summary_off">ВодĐŊĐ¸ŅŅ‚ СĐŊаĐē ĐŊа ĐēаĐŊаĐģа ҁĐĩ ĐŋĐžĐēаСва</string>
<string name="revanced_hide_horizontal_shelves_title">ĐĨĐžŅ€Đ¸ĐˇĐžĐŊŅ‚Đ°ĐģĐŊи ҁĐĩĐēŅ†Đ¸Đ¸</string>
<string name="revanced_hide_horizontal_shelves_summary_on">ĐĨĐžŅ€Đ¸ĐˇĐžĐŊŅ‚Đ°ĐģĐŊĐ¸Ņ‚Đĩ ҁĐĩĐēŅ†Đ¸Đ¸ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸:\nâ€ĸ Đ˜ĐˇĐ˛ŅŠĐŊŅ€ĐĩĐ´ĐŊи ĐŊОвиĐŊи\nâ€ĸ ĐŸŅ€ĐžĐ´ŅŠĐģĐļĐĩŅ‚Đĩ да ĐŗĐģĐĩĐ´Đ°Ņ‚Đĩ\nâ€ĸ Đ Đ°ĐˇĐŗĐģĐĩĐ´Đ°ĐšŅ‚Đĩ ĐžŅ‰Đĩ ĐēаĐŊаĐģи\nâ€ĸ ĐŸĐ°ĐˇĐ°Ņ€ŅƒĐ˛Đ°ĐŊĐĩ\nâ€ĸ ГĐģĐĩĐ´Đ°ĐšŅ‚Đĩ ĐžŅ‚ĐŊОвО</string>
<string name="revanced_hide_horizontal_shelves_summary_on">"Đ Đ°Ņ„Ņ‚ĐžĐ˛ĐĩŅ‚Đĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸, Ņ‚Đ°Đēива ĐēĐ°Ņ‚Đž:
â€ĸ АĐēŅ‚ŅƒĐ°ĐģĐŊи ĐŊОвиĐŊи
â€ĸ ĐŸŅ€ĐžĐ´ŅŠĐģĐļаваК да ĐŗĐģĐĩĐ´Đ°Ņˆ
â€ĸ Đ Đ°ĐˇĐŗĐģĐĩдаК ĐžŅ‰Đĩ ĐēаĐŊаĐģи
â€ĸ ĐŸĐ°ĐˇĐ°Ņ€ŅƒĐ˛Đ°ĐŊĐĩ
â€ĸ ГĐģĐĩдаК ĐžŅ‚ĐŊОвО"</string>
<string name="revanced_hide_horizontal_shelves_summary_off">ĐĨĐžŅ€Đ¸ĐˇĐžĐŊŅ‚Đ°ĐģĐŊи ҁĐĩĐēŅ†Đ¸Đ¸ ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<!-- 'Join' should be translated using the same localized wording YouTube displays.
This appears in the video player for certain videos. -->
<string name="revanced_hide_join_membership_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа \'ĐŸŅ€Đ¸ŅŅŠĐĩдиĐŊи ҁĐĩ\'</string>
<string name="revanced_hide_join_membership_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_join_membership_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_join_membership_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊа ПоĐēаĐļи ĐžŅ‰Đĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_join_membership_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊа \"ĐŖĐ˛ĐĩĐ´ĐžĐŧи ĐŧĐĩ\" ҁĐĩ ĐŋĐžĐēаСва</string>
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
<string name="revanced_hide_for_you_shelf_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ҁĐĩĐēŅ†Đ¸ŅŅ‚Đ° \'За Đ˛Đ°Ņ\' в ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ†Đ°Ņ‚Đ° ĐŊа ĐēаĐŊаĐģа</string>
<string name="revanced_hide_for_you_shelf_summary_on">Đ Đ°Ņ„Ņ‚ŅŠŅ‚ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_for_you_shelf_summary_off">Đ Đ°Ņ„Ņ‚ŅŠŅ‚ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_for_you_shelf_summary_on">ĐĄĐĩĐēŅ†Đ¸ŅŅ‚Đ° \'За Đ’Đ°Ņ\' Đĩ ҁĐēŅ€Đ¸Ņ‚Đ°</string>
<string name="revanced_hide_for_you_shelf_summary_off">ĐĄĐĩĐēŅ†Đ¸ŅŅ‚Đ° \'За Đ’Đ°Ņ\' ҁĐĩ ĐŋĐžĐēаСва</string>
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
This item appear in the subscription feed for future livestreams or unreleased videos. -->
<string name="revanced_hide_notify_me_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа \"ĐŖĐ˛ĐĩĐ´ĐžĐŧи ĐŧĐĩ\"</string>
<string name="revanced_hide_notify_me_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_notify_me_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_notify_me_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊа \"ĐŖĐ˛ĐĩĐ´ĐžĐŧи ĐŧĐĩ\" Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_notify_me_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊа \"ĐŖĐ˛ĐĩĐ´ĐžĐŧи ĐŧĐĩ\" ҁĐĩ ĐŋĐžĐēаСва</string>
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
<string name="revanced_hide_search_result_recommendations_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€ĐĩĐŋĐžŅ€ŅŠĐēĐ¸Ņ‚Đĩ \'Đ”Ņ€ŅƒĐŗĐ¸ Ņ…Đ°Ņ€ĐĩŅĐ˛Đ°Ņ‚ ŅŅŠŅ‰Đž\'</string>
<string name="revanced_hide_search_result_recommendations_summary_on">ĐŸŅ€ĐĩĐŋĐžŅ€ŅŠĐēĐ¸Ņ‚Đĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_search_result_recommendations_summary_off">ĐŸŅ€ĐĩĐŋĐžŅ€ŅŠĐēĐ¸Ņ‚Đĩ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_search_result_recommendations_summary_off">ĐŸŅ€ĐĩĐŋĐžŅ€ŅŠĐēĐ¸Ņ‚Đĩ ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
This button usually appears when searching for a YT creator. -->
<string name="revanced_hide_show_more_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа \"ПоĐēаĐļи ĐžŅ‰Đĩ\"</string>
<string name="revanced_hide_show_more_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_show_more_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_show_more_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊа ПоĐēаĐļи ĐžŅ‰Đĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_show_more_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊа ПоĐēаĐļи ĐžŅ‰Đĩ ҁĐĩ ĐŋĐžĐēаСва</string>
<string name="revanced_hide_timed_reactions_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Đ˛Ņ€ĐĩĐŧĐĩĐ˛Đ¸Ņ‚Đĩ Ņ€ĐĩаĐēŅ†Đ¸Đ¸</string>
<string name="revanced_hide_timed_reactions_summary_on">Đ’Ņ€ĐĩĐŧĐĩĐ˛Đ¸Ņ‚Đĩ Ņ€ĐĩаĐēŅ†Đ¸Đ¸ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_timed_reactions_summary_off">Đ’Ņ€ĐĩĐŧĐĩĐ˛Đ¸Ņ‚Đĩ Ņ€ĐĩаĐēŅ†Đ¸Đ¸ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_search_result_shelf_header_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐˇĐ°ĐŗĐģавиĐĩŅ‚Đž ĐŊа Ņ€Đ°Ņ„Ņ‚Đ° ҁ Ņ€ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩŅ‚Đž</string>
<string name="revanced_hide_search_result_shelf_header_summary_on">Đ—Đ°ĐŗĐģавиĐĩŅ‚Đž ĐŊа Ņ€Đ°Ņ„Ņ‚Đ° Đĩ ҁĐēŅ€Đ¸Ņ‚Đž</string>
<string name="revanced_hide_search_result_shelf_header_summary_off">Đ—Đ°ĐŗĐģавиĐĩŅ‚Đž Đĩ ĐŋĐžĐēаСаĐŊĐž</string>
<string name="revanced_hide_timed_reactions_summary_off">Đ’Ņ€ĐĩĐŧĐĩĐ˛Đ¸Ņ‚Đĩ Ņ€ĐĩаĐēŅ†Đ¸Đ¸ ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<string name="revanced_hide_channel_guidelines_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŊĐ°ŅĐžĐēĐ¸Ņ‚Đĩ ĐŊа ĐēаĐŊаĐģа</string>
<string name="revanced_hide_channel_guidelines_summary_on">ĐĐ°ŅĐžĐēĐ¸Ņ‚Đĩ ĐŊа ĐēаĐŊаĐģа ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_channel_guidelines_summary_off">ĐĐ°ŅĐžĐēĐ¸Ņ‚Đĩ ĐŊа ĐēаĐŊаĐģа ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_chips_shelf_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€Đ°Ņ„Ņ‚Đ° Са Ņ‡Đ¸ĐŋОвĐĩ</string>
<string name="revanced_hide_chips_shelf_summary_on">Đ Đ°Ņ„Ņ‚ŅŠŅ‚ Са Ņ‡Đ¸ĐŋОвĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_chips_shelf_summary_off">Đ Đ°Ņ„Ņ‚ŅŠŅ‚ Са Ņ‡Đ¸ĐŋОвĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_expandable_chip_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€Đ°ĐˇŅˆĐ¸Ņ€ŅĐĩĐŧĐ¸Ņ Ņ‡Đ¸Đŋ ĐŋОд видĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ</string>
<string name="revanced_hide_expandable_chip_summary_on">Đ Đ°ĐˇŅˆĐ¸Ņ€ŅĐ˛Đ°Ņ‰Đ¸Ņ‚Đĩ ҁĐĩ Ņ‡Đ¸ĐŋОвĐĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_expandable_chip_summary_off">Đ Đ°ĐˇŅˆĐ¸Ņ€ŅĐ˛Đ°Ņ‰Đ¸Ņ‚Đĩ ҁĐĩ Ņ‡Đ¸ĐŋОвĐĩ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_channel_guidelines_summary_off">ĐĐ°ŅĐžĐēĐ¸Ņ‚Đĩ ĐŊа ĐēаĐŊаĐģа ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<string name="revanced_hide_chips_shelf_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ„Đ¸ĐģĐŧĐžĐ˛Đ¸Ņ‚Đĩ Ņ€Đ°Ņ„Ņ‚ĐžĐ˛Đĩ</string>
<string name="revanced_hide_chips_shelf_summary_on">Đ Đ°Ņ„Ņ‚ŅŠŅ‚ \"Chip\" Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_chips_shelf_summary_off">Đ Đ°Ņ„Ņ‚ĐžĐ˛ĐĩŅ‚Đĩ ҁҊҁ ҁĐŊиĐŧĐēи ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<string name="revanced_hide_expandable_chip_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‰Đ¸ ҁĐĩ Ņ€Đ°ĐˇĐ´ĐĩĐģи ĐŋОд видĐĩĐžĐēĐģиĐŋОвĐĩ</string>
<string name="revanced_hide_expandable_chip_summary_on">ĐŸĐ°Đ´Đ°Ņ‰Đ¸Ņ‚Đĩ ĐŧĐĩĐŊŅŽŅ‚Đ° ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_expandable_chip_summary_off">ПоĐēĐ°ĐˇĐ˛Đ°Ņ‚ ҁĐĩ</string>
<string name="revanced_hide_community_posts_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅƒĐąĐģиĐēĐ°Ņ†Đ¸Đ¸Ņ‚Đĩ ĐžŅ‚ ĐžĐąŅ‰ĐŊĐžŅŅ‚Ņ‚Đ°</string>
<string name="revanced_hide_community_posts_summary_on">ĐŸŅƒĐąĐģиĐēĐ°Ņ†Đ¸Đ¸Ņ‚Đĩ ĐžŅ‚ ĐžĐąŅ‰ĐŊĐžŅŅ‚Ņ‚Đ° ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_community_posts_summary_off">ĐŸŅƒĐąĐģиĐēĐ°Ņ†Đ¸Đ¸Ņ‚Đĩ ĐžŅ‚ ĐžĐąŅ‰ĐŊĐžŅŅ‚Ņ‚Đ° ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_community_posts_summary_on">ĐĐ°ŅĐžĐēĐ¸Ņ‚Đĩ ĐŊа ĐžĐąŅ‰ĐŊĐžŅŅ‚Ņ‚Đ° ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_community_posts_summary_off">ĐŸĐžŅĐģĐĩĐ´ĐŊĐ¸Ņ‚Đĩ ĐŋŅƒĐąĐģиĐēĐ°Ņ†Đ¸Đ¸ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_compact_banner_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐžĐŧĐŋаĐēŅ‚ĐŊĐ¸Ņ‚Đĩ йаĐŊĐĩŅ€Đ¸</string>
<string name="revanced_hide_compact_banner_summary_on">КоĐŧĐŋаĐēŅ‚ĐŊĐ¸Ņ‚Đĩ йаĐŊĐĩŅ€Đ¸ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_compact_banner_summary_off">КоĐŧĐŋаĐēŅ‚ĐŊĐ¸Ņ‚Đĩ йаĐŊĐĩŅ€Đ¸ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_compact_banner_summary_on">ИĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ĐžĐŊĐŊĐ¸Ņ‚Đĩ ĐŋаĐŊĐĩĐģи ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_compact_banner_summary_off">ИĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ĐžĐŊĐŊĐ¸Ņ‚Đĩ ĐŋаĐŊĐĩĐģи ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<string name="revanced_hide_movies_section_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€Đ°ĐˇĐ´ĐĩĐģа Са Ņ„Đ¸ĐģĐŧи</string>
<string name="revanced_hide_movies_section_summary_on">РаСдĐĩĐģŅŠŅ‚ Са Ņ„Đ¸ĐģĐŧи Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_movies_section_summary_on">ĐĄĐĩĐēŅ†Đ¸ŅŅ‚Đ° ҁ ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸ Đĩ ҁĐēŅ€Đ¸Ņ‚Đ°</string>
<string name="revanced_hide_movies_section_summary_off">РаСдĐĩĐģŅŠŅ‚ Са Ņ„Đ¸ĐģĐŧи Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_feed_survey_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа аĐŊĐēĐĩŅ‚Đ¸Ņ‚Đĩ в ĐŊОвиĐŊĐ°Ņ€ŅĐēĐ¸Ņ ĐŋĐžŅ‚ĐžĐē</string>
<string name="revanced_hide_feed_survey_summary_on">AĐŊĐēĐĩŅ‚Đ¸Ņ‚Đĩ в ĐŊОвиĐŊĐ°Ņ€ŅĐēĐ¸Ņ ĐŋĐžŅ‚ĐžĐē ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_feed_survey_summary_off">AĐŊĐēĐĩŅ‚Đ¸Ņ‚Đĩ в ĐŊОвиĐŊĐ°Ņ€ŅĐēĐ¸Ņ ĐŋĐžŅ‚ĐžĐē ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_feed_survey_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа аĐŊĐēĐĩŅ‚Đ¸ в ĐĩĐŧĐ¸ŅĐ¸Đ¸Ņ‚Đĩ</string>
<string name="revanced_hide_feed_survey_summary_on">АĐŊĐēĐĩŅ‚Đ¸Ņ‚Đĩ Са ĐĩĐŧĐ¸ŅĐ¸Đ¸ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_feed_survey_summary_off">АĐŊĐēĐĩŅ‚Đ¸Ņ‚Đĩ Са ĐĩĐŧĐ¸ŅĐ¸Đ¸ ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<string name="revanced_hide_community_guidelines_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŊĐ°ŅĐžĐēĐ¸Ņ‚Đĩ ĐŊа ĐžĐąŅ‰ĐŊĐžŅŅ‚Ņ‚Đ°</string>
<string name="revanced_hide_community_guidelines_summary_on">ĐĐ°ŅĐžĐēĐ¸Ņ‚Đĩ ĐŊа ĐžĐąŅ‰ĐŊĐžŅŅ‚Ņ‚Đ° ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_community_guidelines_summary_off">ĐĐ°ŅĐžĐēĐ¸Ņ‚Đĩ ĐŊа ĐžĐąŅ‰ĐŊĐžŅŅ‚Ņ‚Đ° ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_community_guidelines_summary_off">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŊĐ°ŅĐžĐēĐ¸Ņ‚Đĩ Са ĐžĐąŅ‰ĐŊĐžŅŅ‚Ņ‚Đ° ĐŊа айОĐŊĐ°Ņ‚Đ¸Ņ‚Đĩ</string>
<string name="revanced_hide_subscribers_community_guidelines_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŊĐ°ŅĐžĐēĐ¸Ņ‚Đĩ Са ĐžĐąŅ‰ĐŊĐžŅŅ‚Ņ‚Đ° ĐŊа айОĐŊĐ°Ņ‚Đ¸Ņ‚Đĩ</string>
<string name="revanced_hide_subscribers_community_guidelines_summary_on">ĐĐ°ŅĐžĐēĐ¸Ņ‚Đĩ Са ĐžĐąŅ‰ĐŊĐžŅŅ‚Ņ‚Đ° ĐŊа айОĐŊĐ°Ņ‚Đ¸Ņ‚Đĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_subscribers_community_guidelines_summary_off">ĐĐ°ŅĐžĐēĐ¸Ņ‚Đĩ Са ĐžĐąŅ‰ĐŊĐžŅŅ‚Ņ‚Đ° ĐŊа айОĐŊĐ°Ņ‚Đ¸Ņ‚Đĩ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_channel_member_shelf_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€Đ°Ņ„Ņ‚Đ° ĐŊа ĐēаĐŊаĐģа</string>
<string name="revanced_hide_channel_member_shelf_summary_on">Đ Đ°Ņ„Ņ‚ŅŠŅ‚ ĐŊа ĐēаĐŊаĐģа Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_channel_member_shelf_summary_off">Đ Đ°Ņ„Ņ‚ŅŠŅ‚ ĐŊа ĐēаĐŊаĐģа Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_subscribers_community_guidelines_summary_on">ĐĐ°ŅĐžĐēĐ¸Ņ‚Đĩ Са ĐžĐąŅ‰ĐŊĐžŅŅ‚Ņ‚Đ° ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_subscribers_community_guidelines_summary_off">ĐĐ°ŅĐžĐēĐ¸Ņ‚Đĩ Са ĐžĐąŅ‰ĐŊĐžŅŅ‚Ņ‚Đ° ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_channel_member_shelf_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ҁĐĩĐēŅ†Đ¸ŅŅ‚Đ° ҁ ҇ĐģĐĩĐŊŅƒĐ˛Đ°Ņ‰Đ¸</string>
<string name="revanced_hide_channel_member_shelf_summary_on">Đ Đ°Ņ„Ņ‚Đ° ҁ ҇ĐģĐĩĐŊŅƒĐ˛Đ°Ņ‰Đ¸ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_channel_member_shelf_summary_off">Đ Đ°Ņ„Ņ‚Đ° ҁ ҇ĐģĐĩĐŊŅƒĐ˛Đ°Ņ‰Đ¸ ҁĐĩ ĐŋĐžĐēаСва</string>
<string name="revanced_hide_emergency_box_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ Đ°Đ˛Đ°Ņ€Đ¸ĐšĐŊĐ¸Ņ‚Đĩ ĐēŅƒŅ‚Đ¸Đ¸</string>
<string name="revanced_hide_emergency_box_summary_on">ĐĐ˛Đ°Ņ€Đ¸ĐšĐŊĐ¸Ņ‚Đĩ ĐēŅƒŅ‚Đ¸Đ¸ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_emergency_box_summary_off">ĐĐ˛Đ°Ņ€Đ¸ĐšĐŊĐ¸Ņ‚Đĩ ĐēŅƒŅ‚Đ¸Đ¸ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_emergency_box_summary_on">ĐĄĐŋĐĩ҈ĐŊи ĐēŅƒŅ‚Đ¸Đ¸ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_emergency_box_summary_off">ĐĄĐŋĐĩ҈ĐŊи ĐēŅƒŅ‚Đ¸Đ¸ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_info_panels_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ĐžĐŊĐŊĐ¸Ņ‚Đĩ ĐŋаĐŊĐĩĐģи</string>
<string name="revanced_hide_info_panels_summary_on">ИĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ĐžĐŊĐŊĐ¸Ņ‚Đĩ ĐŋаĐŊĐĩĐģи ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_info_panels_summary_off">ИĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ĐžĐŊĐŊĐ¸Ņ‚Đĩ ĐŋаĐŊĐĩĐģи ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
@@ -201,24 +203,24 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_playables_title">Đ˜ĐŗŅ€Đ¸ в YouTube</string>
<string name="revanced_hide_playables_summary_on">Đ˜ĐŗŅ€Đ¸ в YouTube ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_playables_summary_off">Đ˜ĐŗŅ€Đ¸Ņ‚Đĩ в YouTube ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<string name="revanced_hide_quick_actions_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅŠŅ€ĐˇĐ¸Ņ‚Đĩ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ в Ņ€ĐĩĐļиĐŧ ĐŊа Ņ†ŅĐģ ĐĩĐēŅ€Đ°ĐŊ</string>
<string name="revanced_hide_quick_actions_summary_on">Đ‘ŅŠŅ€ĐˇĐ¸Ņ‚Đĩ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ в Ņ€ĐĩĐļиĐŧ ĐŊа Ņ†ŅĐģ ĐĩĐēŅ€Đ°ĐŊ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_quick_actions_summary_off">Đ‘ŅŠŅ€ĐˇĐ¸Ņ‚Đĩ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ в Ņ€ĐĩĐļиĐŧ ĐŊа Ņ†ŅĐģ ĐĩĐēŅ€Đ°ĐŊ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_quick_actions_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŧĐĩĐŊŅŽ ҁ Đ‘ŅŠŅ€ĐˇĐ¸ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ</string>
<string name="revanced_hide_quick_actions_summary_on">Đ‘ŅŠŅ€ĐˇĐ¸ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_quick_actions_summary_off">Đ‘ŅŠŅ€ĐˇĐ¸ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<string name="revanced_hide_related_videos_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ŅĐ˛ŅŠŅ€ĐˇĐ°ĐŊĐ¸Ņ‚Đĩ видĐĩĐžĐēĐģиĐŋОвĐĩ в ĐąŅŠŅ€ĐˇĐ¸Ņ‚Đĩ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ</string>
<string name="revanced_hide_related_videos_summary_on">ĐĄĐ˛ŅŠŅ€ĐˇĐ°ĐŊĐ¸Ņ‚Đĩ видĐĩĐžĐēĐģиĐŋОвĐĩ в ĐąŅŠŅ€ĐˇĐ¸Ņ‚Đĩ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ ŅĐ° ҁĐēĐ¸Ņ€Ņ‚Đ¸</string>
<string name="revanced_hide_related_videos_summary_off">ĐĄĐ˛ŅŠŅ€ĐˇĐ°ĐŊĐ¸Ņ‚Đĩ видĐĩĐžĐēĐģиĐŋОвĐĩ в ĐąŅŠŅ€ĐˇĐ¸Ņ‚Đĩ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_image_shelf_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€Đ°Ņ„Ņ‚Đ° ҁ Đ¸ĐˇĐžĐąŅ€Đ°ĐļĐĩĐŊĐ¸Ņ в Ņ€ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩŅ‚Đž</string>
<string name="revanced_hide_image_shelf_summary_on">Đ Đ°Ņ„Ņ‚ŅŠŅ‚ ҁ Đ¸ĐˇĐžĐąŅ€Đ°ĐļĐĩĐŊĐ¸Ņ в Ņ€ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩŅ‚Đž Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_image_shelf_summary_off">Đ Đ°Ņ„Ņ‚ŅŠŅ‚ ҁ Đ¸ĐˇĐžĐąŅ€Đ°ĐļĐĩĐŊĐ¸Ņ в Ņ€ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩŅ‚Đž Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_related_videos_summary_on">ĐĄŅ€ĐžĐ´ĐŊи видĐĩĐž ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_related_videos_summary_off">ĐĄŅ€ĐžĐ´ĐŊи видĐĩĐž ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_image_shelf_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€Đ°Ņ„Ņ‚ĐžĐ˛ĐĩŅ‚Đĩ ҁҊҁ ҁĐŊиĐŧĐēи</string>
<string name="revanced_hide_image_shelf_summary_on">Đ Đ°Ņ„Ņ‚ĐžĐ˛ĐĩŅ‚Đĩ ҁҊҁ ҁĐŊиĐŧĐēи ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_image_shelf_summary_off">Đ Đ°Ņ„Ņ‚ĐžĐ˛ĐĩŅ‚Đĩ ҁҊҁ ҁĐŊиĐŧĐēи ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<string name="revanced_hide_latest_posts_ads_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋĐžŅĐģĐĩĐ´ĐŊĐ¸Ņ‚Đĩ ĐŋŅƒĐąĐģиĐēĐ°Ņ†Đ¸Đ¸</string>
<string name="revanced_hide_latest_posts_ads_summary_on">ĐŸĐžŅĐģĐĩĐ´ĐŊĐ¸Ņ‚Đĩ ĐŋŅƒĐąĐģиĐēĐ°Ņ†Đ¸Đ¸ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_latest_posts_ads_summary_on">Най-ĐŊĐžĐ˛Đ¸Ņ‚Đĩ ĐŋŅƒĐąĐģиĐēĐ°Ņ†Đ¸Đ¸ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_latest_posts_ads_summary_off">ĐŸĐžŅĐģĐĩĐ´ĐŊĐ¸Ņ‚Đĩ ĐŋŅƒĐąĐģиĐēĐ°Ņ†Đ¸Đ¸ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_mix_playlists_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€Đ°ĐˇĐąŅŠŅ€ĐēаĐŊĐ¸Ņ‚Đĩ ĐŋĐģĐĩĐšĐģĐ¸ŅŅ‚Đ¸</string>
<string name="revanced_hide_mix_playlists_summary_on">Đ Đ°ĐˇĐąŅŠŅ€ĐēаĐŊĐ¸Ņ‚Đĩ ĐŋĐģĐĩĐšĐģĐ¸ŅŅ‚Đ¸ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_mix_playlists_summary_off">Đ Đ°ĐˇĐąŅŠŅ€ĐēаĐŊĐ¸Ņ‚Đĩ ĐŋĐģĐĩĐšĐģĐ¸ŅŅ‚Đ¸ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_mix_playlists_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŧиĐēҁ ĐŋĐģĐĩĐšĐģĐ¸ŅŅ‚</string>
<string name="revanced_hide_mix_playlists_summary_on">ПĐģĐĩĐšĐģĐ¸ŅŅ‚ ĐŧиĐēŅĐ° Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_mix_playlists_summary_off">ПĐģĐĩĐšĐģĐ¸ŅŅ‚ ĐŧиĐēŅĐ° ҁĐĩ ĐŋĐžĐēаСва</string>
<string name="revanced_hide_artist_cards_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ¸Ņ‚Đĩ ĐŊа Đ°Ņ€Ņ‚Đ¸ŅŅ‚Đ¸Ņ‚Đĩ</string>
<string name="revanced_hide_artist_cards_summary_on">ĐšĐ°Ņ€Ņ‚Đ¸Ņ‚Đĩ ĐŊа Đ°Ņ€Ņ‚Đ¸ŅŅ‚Đ¸Ņ‚Đĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_artist_cards_summary_off">ĐšĐ°Ņ€Ņ‚Đ¸Ņ‚Đĩ ĐŊа Đ°Ņ€Ņ‚Đ¸ŅŅ‚Đ¸Ņ‚Đĩ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_artist_cards_summary_on">ĐšĐ°Ņ€Ņ‚Đ¸Ņ‚Đĩ ĐŊа иСĐŋҊĐģĐŊĐ¸Ņ‚ĐĩĐģĐ¸Ņ‚Đĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_artist_cards_summary_off">ПоĐēĐ°ĐˇĐ˛Đ°Ņ‚ ҁĐĩ ĐēĐ°Ņ€Ņ‚Đ¸ ĐŊа Đ°Ņ€Ņ‚Đ¸ŅŅ‚Đ¸</string>
<string name="revanced_hide_attributes_section_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ҁĐĩĐēŅ†Đ¸ŅŅ‚Đ° ҁ Đ°Ņ‚Ņ€Đ¸ĐąŅƒŅ‚Đ¸</string>
<string name="revanced_hide_attributes_section_summary_on">„ПоĐŋ҃ĐģŅŅ€ĐŊи ĐŧĐĩŅŅ‚Đ°â€œ, â€žĐ˜ĐŗŅ€Đ¸â€œ и â€žĐœŅƒĐˇĐ¸Đēа“ ĐŋОд ĐžĐŋĐ¸ŅĐ°ĐŊиĐĩŅ‚Đž ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_attributes_section_summary_off">„ПоĐŋ҃ĐģŅŅ€ĐŊи ĐŧĐĩŅŅ‚Đ°â€œ, â€žĐ˜ĐŗŅ€Đ¸â€œ и â€žĐœŅƒĐˇĐ¸Đēа“ ĐŋОд ĐžĐŋĐ¸ŅĐ°ĐŊиĐĩŅ‚Đž ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
@@ -252,6 +254,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">ПоĐēаСаĐŊĐž в ŅŅ€ĐžĐ´ĐŊи видĐĩĐžĐēĐģиĐŋОвĐĩ</string>
<string name="revanced_comments_screen_title">КоĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸</string>
<string name="revanced_comments_screen_summary">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ иĐģи ĐŋĐžĐēаСваĐŊĐĩ ĐŊа ҁĐĩĐēŅ†Đ¸ŅŅ‚Đ° Са ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸</string>
<string name="revanced_hide_comments_chat_summary_title">ĐĄĐēŅ€Đ¸Đš „РĐĩĐˇŅŽĐŧĐĩ ĐŊа Ņ‡Đ°Ņ‚Đ°â€œ</string>
<string name="revanced_hide_comments_chat_summary_summary_on">\'Đ ĐĩĐˇŅŽĐŧĐĩ ĐŊа Ņ‡Đ°Ņ‚Đ°\' Đĩ ҁĐēŅ€Đ¸Ņ‚Đž</string>
<string name="revanced_hide_comments_chat_summary_summary_off">\'Đ ĐĩĐˇŅŽĐŧĐĩ ĐŊа Ņ‡Đ°Ņ‚Đ°\' Đĩ ĐŋĐžĐēаСаĐŊĐž</string>
<string name="revanced_hide_comments_by_members_header_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа „КоĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸, ĐŊаĐŋŅ€Đ°Đ˛ĐĩĐŊи ĐžŅ‚ ҇ĐģĐĩĐŊОвĐĩ“</string>
<string name="revanced_hide_comments_by_members_header_summary_on">„КоĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸ ĐžŅ‚ ҇ĐģĐĩĐŊОвĐĩ“ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_comments_by_members_header_summary_off">„КоĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸ ĐžŅ‚ ҇ĐģĐĩĐŊОвĐĩ“ ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
@@ -274,7 +279,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_doodles_title">YouTube Doodles</string>
<string name="revanced_hide_doodles_summary_on">Doodles в ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° Са Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_doodles_summary_off">Doodles в ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° Са Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩ ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<string name="revanced_hide_doodles_user_dialog_message">YouTube Doodles ҁĐĩ ĐŋĐžŅĐ˛ŅĐ˛Đ°Ņ‚ ĐŊŅĐēĐžĐģĐēĐž Đ´ĐŊи в ĐŗĐžĐ´Đ¸ĐŊĐ°Ņ‚Đ°.\n\nАĐēĐž Doodle в ĐŧĐžĐŧĐĩĐŊŅ‚Đ° ҁĐĩ ĐŋĐžĐēаСва Đ˛ŅŠĐ˛ Đ˛Đ°ŅˆĐ¸Ņ Ņ€ĐĩĐŗĐ¸ĐžĐŊ и Ņ‚Đ°ĐˇĐ¸ ĐžĐŋŅ†Đ¸Ņ Са ҁĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊа, Ņ„Đ¸ĐģŅ‚ŅŠŅ€ĐŊĐ°Ņ‚Đ° ĐģĐĩĐŊŅ‚Đ° ĐŋОд ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° Са Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩ ŅŅŠŅ‰Đž ҉Đĩ ĐąŅŠĐ´Đĩ ҁĐēŅ€Đ¸Ņ‚Đ°.</string>
<string name="revanced_hide_doodles_user_dialog_message">"Doodles в YouTube ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚ ĐŊŅĐēĐžĐģĐēĐž Đ´ĐŊи в ĐŗĐžĐ´Đ¸ĐŊĐ°Ņ‚Đ°.
АĐēĐž в ĐŧĐžĐŧĐĩĐŊŅ‚Đ° ҁĐĩ ĐŋĐžĐēаСва Doodle Đ˛ŅŠĐ˛ Đ˛Đ°ŅˆĐ¸Ņ Ņ€ĐĩĐŗĐ¸ĐžĐŊ и Ņ‚Đ°ĐˇĐ¸ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēа Са ҁĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ Đĩ вĐēĐģŅŽŅ‡ĐĩĐŊа, Ņ‚ĐžĐŗĐ°Đ˛Đ° ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° Са Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°ĐŊĐĩ ĐŋОд ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° Са Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩ ŅŅŠŅ‰Đž ҉Đĩ ĐąŅŠĐ´Đĩ ҁĐēŅ€Đ¸Ņ‚Đ°."</string>
<string name="revanced_custom_filter_screen_title">ĐŸĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēи Ņ„Đ¸ĐģŅ‚ŅŠŅ€</string>
<string name="revanced_custom_filter_screen_summary">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐžĐŧĐŋĐžĐŊĐĩĐŊŅ‚Đ¸ ҁ ĐŋĐžĐŧĐžŅ‰Ņ‚Đ° ĐŊа ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēи Ņ„Đ¸ĐģŅ‚Ņ€Đ¸</string>
<string name="revanced_custom_filter_title">АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēĐ¸Ņ‚Đĩ Ņ„Đ¸ĐģŅ‚Ņ€Đ¸</string>
@@ -286,21 +293,30 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_custom_filter_toast_invalid_syntax">НĐĩваĐģидĐĩĐŊ ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēи Ņ„Đ¸ĐģŅ‚ŅŠŅ€: %s</string>
<string name="revanced_hide_keyword_content_screen_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ŅŅŠĐ´ŅŠŅ€ĐļаĐŊиĐĩŅ‚Đž ҁ ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_screen_summary">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩ в Ņ€ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ Ņ‚ŅŠŅ€ŅĐĩĐŊŅƒŅ и в ĐŊОвиĐŊĐ°Ņ€ŅĐēĐ¸Ņ ĐŋĐžŅ‚ĐžĐē ҁ ĐŋĐžĐŧĐžŅ‰Ņ‚Đ° ĐŊа Ņ„Đ¸ĐģŅ‚Ņ€Đ¸ ҁ ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_home_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩ ĐŊа ĐŊĐ°Ņ‡Đ°ĐģĐŊĐ°Ņ‚Đ° ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ†Đ° ҁ ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_home_summary_on">ВидĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ ĐŊа ĐŊĐ°Ņ‡Đ°ĐģĐŊĐ¸Ņ ĐĩĐēŅ€Đ°ĐŊ ŅĐ° Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°ĐŊи ҁ ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_home_summary_off">ВидĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ ĐŊа ĐŊĐ°Ņ‡Đ°ĐģĐŊĐ¸Ņ ĐĩĐēŅ€Đ°ĐŊ ĐŊĐĩ ŅĐ° Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°ĐŊи ҁ ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_home_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩ в ĐŊĐ°Ņ‡Đ°ĐģĐŊĐ°Ņ‚Đ° ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ†Đ° ҁ ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_home_summary_on">ВидĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ в Ņ€Đ°ĐˇĐ´ĐĩĐģа ĐĐ°Ņ‡Đ°ĐģĐž ҁĐĩ Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°Ņ‚ ҁ ĐŋĐžĐŧĐžŅ‰Ņ‚Đ° ĐŊа ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_home_summary_off">ВидĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ в Ņ€Đ°ĐˇĐ´ĐĩĐģа ĐĐ°Ņ‡Đ°ĐģĐž ĐŊĐĩ ҁĐĩ Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°Ņ‚ ĐŋĐž ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_subscriptions_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩ ĐžŅ‚ айОĐŊаĐŧĐĩĐŊŅ‚Đ¸ ҁ ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_subscriptions_summary_on">ВидĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ в Ņ€Đ°ĐˇĐ´ĐĩĐģа Са айОĐŊаĐŧĐĩĐŊŅ‚Đ¸ ŅĐ° ŅĐ° Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°ĐŊи ҁ ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_subscriptions_summary_off">ВидĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ в Ņ€Đ°ĐˇĐ´ĐĩĐģа Са айОĐŊаĐŧĐĩĐŊŅ‚Đ¸ ŅĐ° ŅĐ° Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°ĐŊи ҁ ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_subscriptions_summary_off">ВидĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ в ĐĩĐŧĐ¸ŅĐ¸ŅŅ‚Đ° Са айОĐŊаĐŧĐĩĐŊŅ‚Đ¸ ĐŊĐĩ ҁĐĩ Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°Ņ‚</string>
<string name="revanced_hide_keyword_content_search_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸ ĐžŅ‚ Ņ‚ŅŠŅ€ŅĐĩĐŊĐ¸Ņ ҁ ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_search_summary_on">Đ ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ Ņ‚ŅŠŅ€ŅĐĩĐŊĐ¸Ņ ŅĐ° Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°ĐŊи ҁ ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_search_summary_off">Đ ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ Ņ‚ŅŠŅ€ŅĐĩĐŊĐ¸Ņ ĐŊĐĩ ŅĐ° Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°ĐŊи ҁ ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_search_summary_on">Đ ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩŅ‚Đž ҁĐĩ Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°Ņ‚ ҁ ĐŋĐžĐŧĐžŅ‰Ņ‚Đ° ĐŊа ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_search_summary_off">Đ ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩŅ‚Đž ĐŊĐĩ ҁĐĩ Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°Ņ‚ ĐŋĐž ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_phrases_title">КĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи, ĐēĐžĐ¸Ņ‚Đž да ĐąŅŠĐ´Đ°Ņ‚ ҁĐēŅ€Đ¸Ņ‚Đ¸</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">КĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи и Ņ„Ņ€Đ°ĐˇĐ¸ Са ҁĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ, Ņ€Đ°ĐˇĐ´ĐĩĐģĐĩĐŊи ҁ ĐŊОви Ņ€ĐĩдОвĐĩ\n\nКĐģŅŽŅ‡ĐžĐ˛Đ¸Ņ‚Đĩ Đ´ŅƒĐŧи ĐŧĐžĐŗĐ°Ņ‚ да ĐąŅŠĐ´Đ°Ņ‚ иĐŧĐĩĐŊа ĐŊа ĐēаĐŊаĐģи иĐģи Đ˛ŅĐĩĐēи Ņ‚ĐĩĐēҁ҂, ĐŋĐžĐēаСаĐŊ в ĐˇĐ°ĐŗĐģĐ°Đ˛Đ¸ŅŅ‚Đ° ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ\n\nĐ”ŅƒĐŧĐ¸Ņ‚Đĩ ҁ ĐŗĐģавĐŊи ĐąŅƒĐēви в ҁҀĐĩĐ´Đ°Ņ‚Đ° Ņ‚Ņ€ŅĐąĐ˛Đ° да ĐąŅŠĐ´Đ°Ņ‚ Đ˛ŅŠĐ˛ĐĩĐ´ĐĩĐŊи ҁ ĐŧаĐģĐēи ĐąŅƒĐēви (ĐŊаĐŋŅ€.: iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_phrases_summary">"КĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи и Ņ„Ņ€Đ°ĐˇĐ¸ Са ҁĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ, Ņ€Đ°ĐˇĐ´ĐĩĐģĐĩĐŊи ĐžŅ‚ ĐŊОв Ņ€ĐĩĐ´
КĐģŅŽŅ‡ĐžĐ˛Đ¸Ņ‚Đĩ Đ´ŅƒĐŧи ĐŧĐžĐŗĐ°Ņ‚ да ĐąŅŠĐ´Đ°Ņ‚ иĐŧĐĩĐŊа ĐŊа ĐēаĐŊаĐģи иĐģи Đ˛ŅŅĐēаĐēŅŠĐ˛ Ņ‚ĐĩĐēҁ҂, ĐŋĐžĐēаСаĐŊ в ĐˇĐ°ĐŗĐģĐ°Đ˛Đ¸ŅŅ‚Đ° ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ
Đ”ŅƒĐŧĐ¸Ņ‚Đĩ ҁ ĐŗĐģавĐŊи ĐąŅƒĐēви в ҁҀĐĩĐ´Đ°Ņ‚Đ° Ņ‚Ņ€ŅĐąĐ˛Đ° да ĐąŅŠĐ´Đ°Ņ‚ Đ˛ŅŠĐ˛ĐĩĐ´ĐĩĐŊи ҁ ĐŗĐģавĐŊи ĐąŅƒĐēви (ĐŊаĐŋŅ€.: iPhone, TikTok, LeBlanc)"</string>
<string name="revanced_hide_keyword_content_about_title">За Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°ĐŊĐĩ ҁ ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи</string>
<string name="revanced_hide_keyword_content_about_summary">ĐĐ°Ņ‡Đ°ĐģĐž/АйОĐŊаĐŧĐĩĐŊŅ‚/Đ ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩŅ‚Đž ҁĐĩ Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°Ņ‚, Са да ҁĐĩ ҁĐēŅ€Đ¸Đĩ ŅŅŠĐ´ŅŠŅ€ĐļаĐŊиĐĩ, ĐēĐžĐĩŅ‚Đž ŅŅŠĐžŅ‚Đ˛ĐĩŅ‚ŅŅ‚Đ˛Đ° ĐŊа ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Ņ„Ņ€Đ°ĐˇĐ¸\n\nĐžĐŗŅ€Đ°ĐŊĐ¸Ņ‡ĐĩĐŊĐ¸Ņ\nâ€ĸ Shorts ĐŊĐĩ ĐŧĐžĐŗĐ°Ņ‚ да ĐąŅŠĐ´Đ°Ņ‚ ҁĐēŅ€Đ¸Ņ‚Đ¸ ĐžŅ‚ иĐŧĐĩŅ‚Đž ĐŊа ĐēаĐŊаĐģа\nâ€ĸ ĐŅĐēОи ĐēĐžĐŧĐŋĐžĐŊĐĩĐŊŅ‚Đ¸ ĐŊа ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēĐ¸Ņ иĐŊŅ‚ĐĩҀ҄ĐĩĐšŅ ĐŧĐžĐļĐĩ да ĐŊĐĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸\nâ€ĸ ĐĸŅŠŅ€ŅĐĩĐŊĐĩŅ‚Đž ĐŋĐž ĐēĐģŅŽŅ‡ĐžĐ˛Đ° Đ´ŅƒĐŧа ĐŧĐžĐļĐĩ да ĐŊĐĩ ĐŋĐžĐēаĐļĐĩ Ņ€ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸</string>
<string name="revanced_hide_keyword_content_about_summary">"Đ ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩŅ‚Đž в ĐĐ°Ņ‡Đ°ĐģĐž/АйОĐŊаĐŧĐĩĐŊŅ‚/ĐĸŅŠŅ€ŅĐĩĐŊĐĩ ҁĐĩ Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°Ņ‚, Са да ҁĐĩ ҁĐēŅ€Đ¸Đĩ ŅŅŠĐ´ŅŠŅ€ĐļаĐŊиĐĩŅ‚Đž, ĐēĐžĐĩŅ‚Đž ŅŅŠĐ˛Đŋада ҁ Ņ„Ņ€Đ°ĐˇĐ¸ ҁ ĐēĐģŅŽŅ‡ĐžĐ˛Đ¸ Đ´ŅƒĐŧи
ĐžĐŗŅ€Đ°ĐŊĐ¸Ņ‡ĐĩĐŊĐ¸Ņ
â€ĸ Đ¨ĐžŅ€Ņ‚Đ¸ ĐŊĐĩ ĐŧĐžĐŗĐ°Ņ‚ да ĐąŅŠĐ´Đ°Ņ‚ ҁĐēŅ€Đ¸Ņ‚Đ¸ ĐŋĐž иĐŧĐĩ ĐŊа ĐēаĐŊаĐģа
â€ĸ ĐŅĐēОи UI ĐēĐžĐŧĐŋĐžĐŊĐĩĐŊŅ‚Đ¸ ĐŧĐžĐļĐĩ да ĐŊĐĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸
â€ĸ ĐĸŅŠŅ€ŅĐĩĐŊĐĩŅ‚Đž ĐŊа ĐēĐģŅŽŅ‡ĐžĐ˛Đ° Đ´ŅƒĐŧа ĐŧĐžĐļĐĩ да ĐŊĐĩ ĐŋĐžĐēаĐļĐĩ Ņ€ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸"</string>
<string name="revanced_hide_keyword_content_about_whole_words_title">ĐĄŅŠĐ˛ĐŋадĐĩĐŊиĐĩ ĐŊа Đ˛ŅĐ¸Ņ‡Đēи Đ´ŅƒĐŧи</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">ĐžĐŗŅ€Đ°ĐļдаĐŊĐĩŅ‚Đž ĐŊа ĐēĐģŅŽŅ‡ĐžĐ˛Đ° Đ´ŅƒĐŧа/Ņ„Ņ€Đ°ĐˇĐ° ҁ двОКĐŊи ĐēĐ°Đ˛Đ¸Ņ‡Đēи ҉Đĩ ĐŋŅ€ĐĩĐ´ĐžŅ‚Đ˛Ņ€Đ°Ņ‚Đ¸ Ņ‡Đ°ŅŅ‚Đ¸Ņ‡ĐŊи ŅŅŠĐ˛ĐŋадĐĩĐŊĐ¸Ņ ĐŊа ĐˇĐ°ĐŗĐģĐ°Đ˛Đ¸Ņ ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩ и иĐŧĐĩĐŊа ĐŊа ĐēаĐŊаĐģи&lt;br&gt;&lt;br&gt;НаĐŋŅ€Đ¸ĐŧĐĩŅ€,&lt;br&gt;&lt;b&gt;\"ai\"&lt;/b&gt; ҉Đĩ ҁĐēŅ€Đ¸Đĩ видĐĩĐžĐēĐģиĐŋа: &lt;b&gt;How does AI work?&lt;/b&gt;&lt;br&gt;ĐŊĐž ĐŊŅĐŧа да ҁĐēŅ€Đ¸Đĩ: &lt;b&gt;What does fair use mean?&lt;/b&gt;</string>
@@ -314,13 +330,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="ad.general.hideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐžĐąŅ‰Đ¸Ņ‚Đĩ Ņ€ĐĩĐēĐģаĐŧи</string>
<string name="revanced_hide_general_ads_summary_on">ĐžĐąŅ‰Đ¸Ņ‚Đĩ Ņ€ĐĩĐēĐģаĐŧи ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_general_ads_summary_off">ĐžĐąŅ‰Đ¸Ņ‚Đĩ Ņ€ĐĩĐēĐģаĐŧи ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_general_ads_summary_off">ĐžĐąŅ‰Đ¸Ņ‚Đĩ Ņ€ĐĩĐēĐģаĐŧи ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<string name="revanced_hide_fullscreen_ads_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€ĐĩĐēĐģаĐŧĐ¸Ņ‚Đĩ в Ņ€ĐĩĐļиĐŧ ĐŊа Ņ†ŅĐģ ĐĩĐēŅ€Đ°ĐŊ</string>
<string name="revanced_hide_fullscreen_ads_summary_on">Đ ĐĩĐēĐģаĐŧĐ¸Ņ‚Đĩ ĐŊа Ņ†ŅĐģ ĐĩĐēŅ€Đ°ĐŊ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸\n\in ĐĸаСи Ņ„ŅƒĐŊĐēŅ†Đ¸Ņ Đĩ Đ´ĐžŅŅ‚ŅŠĐŋĐŊа ŅĐ°ĐŧĐž Са ĐŋĐž-ŅŅ‚Đ°Ņ€Đ¸ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚Đ˛Đ°</string>
<string name="revanced_hide_fullscreen_ads_summary_on">"Đ’ŅĐ¸Ņ‡Đēи Ņ€ĐĩĐēĐģаĐŧи ĐŊа Ņ†ŅĐģ ĐĩĐēŅ€Đ°ĐŊ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸
ĐĸаСи Ņ„ŅƒĐŊĐēŅ†Đ¸Ņ Đĩ ĐŊаĐģĐ¸Ņ‡ĐŊа ŅĐ°ĐŧĐž Са ĐŋĐž-ŅŅ‚Đ°Ņ€Đ¸ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚Đ˛Đ°"</string>
<string name="revanced_hide_fullscreen_ads_summary_off">Đ ĐĩĐēĐģаĐŧĐ¸Ņ‚Đĩ в Ņ€ĐĩĐļиĐŧ ĐŊа Ņ†ŅĐģ ĐĩĐēŅ€Đ°ĐŊ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_buttoned_ads_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€ĐĩĐēĐģаĐŧĐŊи ĐąŅƒŅ‚ĐžĐŊи</string>
<string name="revanced_hide_buttoned_ads_summary_on">Đ ĐĩĐēĐģаĐŧĐ¸Ņ‚Đĩ ĐēĐ°Ņ‚Đž ĐąŅƒŅ‚ĐžĐŊ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_buttoned_ads_summary_off">Đ ĐĩĐēĐģаĐŧĐ¸Ņ‚Đĩ ĐēĐ°Ņ‚Đž ĐąŅƒŅ‚ĐžĐŊ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_buttoned_ads_summary_on">Đ‘ŅƒŅ‚ĐžĐŊĐ¸Ņ€Đ°ĐŊĐ¸Ņ‚Đĩ Ņ€ĐĩĐēĐģаĐŧи ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_buttoned_ads_summary_off">Đ‘ŅƒŅ‚ĐžĐŊĐ¸Ņ€Đ°ĐŊĐ¸Ņ‚Đĩ Ņ€ĐĩĐēĐģаĐŧи ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_paid_promotion_label_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋĐģĐ°Ņ‚ĐĩĐŊĐ¸Ņ‚Đĩ ĐŋŅ€ĐžĐŧĐžŅ†Đ¸Đ¸</string>
<string name="revanced_hide_paid_promotion_label_summary_on">ĐŸŅ€ĐžĐŧĐžŅ†Đ¸ĐžĐŊаĐģĐŊĐ¸Ņ‚Đĩ ĐĩŅ‚Đ¸ĐēĐĩŅ‚Đ¸ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_paid_promotion_label_summary_off">ĐŸŅ€ĐžĐŧĐžŅ†Đ¸ĐžĐŊаĐģĐŊĐ¸Ņ‚Đĩ ĐĩŅ‚Đ¸ĐēĐĩŅ‚Đ¸ ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
@@ -333,35 +351,35 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_store_shelf_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€Đ°Ņ„Ņ‚Đ° Са ĐŋĐ°ĐˇĐ°Ņ€ŅƒĐ˛Đ°ĐŊĐĩ</string>
<string name="revanced_hide_player_store_shelf_summary_on">Đ Đ°Ņ„Ņ‚Đ° Са ĐŋĐ°ĐˇĐ°Ņ€ŅƒĐ˛Đ°ĐŊĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_player_store_shelf_summary_off">Đ Đ°Ņ„Ņ‚Đ° Са ĐŋĐ°ĐˇĐ°Ņ€ŅƒĐ˛Đ°ĐŊĐĩ ҁĐĩ ĐŋĐžĐēаСва</string>
<string name="revanced_hide_shopping_links_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Đ˛Ņ€ŅŠĐˇĐēĐ¸Ņ‚Đĩ Са ĐŋĐ°ĐˇĐ°Ņ€ŅƒĐ˛Đ°ĐŊĐĩ в ĐžĐŋĐ¸ŅĐ°ĐŊиĐĩŅ‚Đž ĐŊа видĐĩĐžĐēĐģиĐŋа</string>
<string name="revanced_hide_shopping_links_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Đ˛Ņ€ŅŠĐˇĐēи Са ĐŋĐ°ĐˇĐ°Ņ€ŅƒĐ˛Đ°ĐŊĐĩ</string>
<string name="revanced_hide_shopping_links_summary_on">Đ’Ņ€ŅŠĐˇĐēĐ¸Ņ‚Đĩ Са ĐŋĐ°ĐˇĐ°Ņ€ŅƒĐ˛Đ°ĐŊĐĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_shopping_links_summary_off">Đ’Ņ€ŅŠĐˇĐēĐ¸Ņ‚Đĩ Са ĐŋĐ°ĐˇĐ°Ņ€ŅƒĐ˛Đ°ĐŊĐĩ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_shopping_links_summary_off">Đ’Ņ€ŅŠĐˇĐēĐ¸Ņ‚Đĩ Са ĐŋĐ°ĐˇĐ°Ņ€ŅƒĐ˛Đ°ĐŊĐĩ ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_store_button_title">ĐĄĐēŅ€Đ¸ĐšŅ‚Đĩ ĐąŅƒŅ‚ĐžĐŊа â€žĐŸĐžŅĐĩŅ‚ĐĩŅ‚Đĩ ĐŧĐ°ĐŗĐ°ĐˇĐ¸ĐŊа“ ĐŊа ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ†Đ¸Ņ‚Đĩ ĐŊа ĐēаĐŊаĐģĐ¸Ņ‚Đĩ</string>
<string name="revanced_hide_visit_store_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_visit_store_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_visit_store_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊа ПоĐēаĐļи ĐžŅ‰Đĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_visit_store_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊа \"ĐŖĐ˛ĐĩĐ´ĐžĐŧи ĐŧĐĩ\" ҁĐĩ ĐŋĐžĐēаСва</string>
<string name="revanced_hide_web_search_results_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ ҃ĐĩĐą Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩŅ‚Đž</string>
<string name="revanced_hide_web_search_results_summary_on">Đ ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ ҃ĐĩĐą Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩŅ‚Đž ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_web_search_results_summary_off">Đ ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ ҃ĐĩĐą Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩŅ‚Đž ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_web_search_results_summary_off">Đ ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ ҃ĐĩĐą Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩŅ‚Đž ŅĐ° ĐŋĐžĐēаСаĐŊи.</string>
<string name="revanced_hide_merchandise_banners_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа йаĐŊĐĩŅ€Đ¸Ņ‚Đĩ Са ŅŅ‚ĐžĐēи</string>
<string name="revanced_hide_merchandise_banners_summary_on">БаĐŊĐĩŅ€Đ¸Ņ‚Đĩ Са ŅŅ‚ĐžĐēи ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_merchandise_banners_summary_off">БаĐŊĐĩŅ€Đ¸Ņ‚Đĩ Са ŅŅ‚ĐžĐēи ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_merchandise_banners_summary_on">Đ ĐĩĐēĐģаĐŧĐŊĐ¸Ņ‚Đĩ йаĐŊĐĩŅ€Đ¸ Са ŅŅ‚ĐžĐēи ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_merchandise_banners_summary_off">БаĐŊĐĩŅ€Đ¸Ņ‚Đĩ Са ŅŅ‚ĐžĐēи ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_fullscreen_ads_feature_not_available_toast">ĐĄĐēŅ€. ĐŊа Ņ€ĐĩĐēĐģаĐŧи ĐŊа Ņ†ŅĐģ ĐĩĐēŅ€Đ°ĐŊ, Са ĐŋĐž-ŅŅ‚Đ°Ņ€Đ¸ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚Đ˛Đ°</string>
</patch>
<patch id="ad.getpremium.hideGetPremiumPatch">
<string name="revanced_hide_get_premium_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа YouTube Premium ĐŋŅ€ĐžĐŧĐžŅ†Đ¸Đ¸</string>
<string name="revanced_hide_get_premium_summary_on">YouTube Premium ĐŋŅ€ĐžĐŧĐžŅ†Đ¸Đ¸Ņ‚Đĩ ĐŋОд видĐĩĐž ĐŋĐģĐĩĐšŅŠŅ€Đ° ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_get_premium_summary_off">YouTube Premium ĐŋŅ€ĐžĐŧĐžŅ†Đ¸Đ¸Ņ‚Đĩ ĐŋОд видĐĩĐž ĐŋĐģĐĩĐšŅŠŅ€Đ° ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_get_premium_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа YouTube Premium ĐŋŅ€ĐžĐŧĐžŅ†Đ¸Đ¸Ņ‚Đĩ</string>
<string name="revanced_hide_get_premium_summary_on">YouTube Premium ĐŋŅ€ĐžĐŧĐžŅ†Đ¸Đ¸Ņ‚Đĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸.</string>
<string name="revanced_hide_get_premium_summary_off">YouTube Premium ĐŋŅ€ĐžĐŧĐžŅ†Đ¸Đ¸Ņ‚Đĩ ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚.</string>
</patch>
<patch id="ad.video.videoAdsPatch">
<string name="revanced_hide_video_ads_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа видĐĩĐž Ņ€ĐĩĐēĐģаĐŧĐ¸Ņ‚Đĩ</string>
<string name="revanced_hide_video_ads_summary_on">ВидĐĩĐž Ņ€ĐĩĐēĐģаĐŧĐ¸Ņ‚Đĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_video_ads_summary_off">ВидĐĩĐž Ņ€ĐĩĐēĐģаĐŧĐ¸Ņ‚Đĩ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_video_ads_summary_on">ВидĐĩĐž Ņ€ĐĩĐēĐģаĐŧĐ¸Ņ‚Đĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸.</string>
<string name="revanced_hide_video_ads_summary_off">ВидĐĩĐž Ņ€ĐĩĐēĐģаĐŧĐ¸Ņ‚Đĩ ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚.</string>
</patch>
<patch id="interaction.copyvideourl.copyVideoUrlResourcePatch">
<string name="revanced_share_copy_url_success">URL Đ°Đ´Ņ€ĐĩŅŅŠŅ‚ Đĩ ĐēĐžĐŋĐ¸Ņ€Đ°ĐŊ в ĐēĐģиĐŋĐąĐžŅ€Đ´Đ°</string>
<string name="revanced_share_copy_url_timestamp_success">URL Đ°Đ´Ņ€ĐĩŅŅŠŅ‚ ҁ Đ˛Ņ€ĐĩĐŧĐĩви ĐžŅ‚ĐŋĐĩŅ‡Đ°Ņ‚ŅŠĐē Đĩ ĐēĐžĐŋĐ¸Ņ€Đ°ĐŊ</string>
<string name="revanced_share_copy_url_success">Đ’Ņ€ŅŠĐˇĐēĐ°Ņ‚Đ° Đĩ ĐēĐžĐŋĐ¸Ņ€Đ°ĐŊа в ĐēĐģиĐŋĐąĐžŅ€Đ´Đ°.</string>
<string name="revanced_share_copy_url_timestamp_success">URL Đ°Đ´Ņ€Đĩҁ ҁ ĐžŅ‚ĐŧĐĩŅ‚Đēа Са Đ˛Ņ€ĐĩĐŧĐĩ, ĐēĐžĐŋĐ¸Ņ€Đ°ĐŊ в ĐēĐģиĐŋĐąĐžŅ€Đ´Đ°.</string>
<string name="revanced_copy_video_url_title">ПоĐēаСваĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа Са ĐēĐžĐŋĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа URL Đ°Đ´Ņ€ĐĩŅĐ° ĐŊа видĐĩĐžĐēĐģиĐŋа</string>
<string name="revanced_copy_video_url_summary_on">ПоĐēаСаĐŊ Đĩ ĐąŅƒŅ‚ĐžĐŊ. ДоĐēĐžŅĐŊĐĩŅ‚Đĩ, Са да ĐēĐžĐŋĐ¸Ņ€Đ°Ņ‚Đĩ URL ĐŊа видĐĩĐžŅ‚Đž. ДоĐēĐžŅĐŊĐĩŅ‚Đĩ и ĐˇĐ°Đ´Ņ€ŅŠĐļŅ‚Đĩ, Са да ĐēĐžĐŋĐ¸Ņ€Đ°Ņ‚Đĩ URL Đ°Đ´Ņ€ĐĩŅĐ° ĐŊа видĐĩĐžĐēĐģиĐŋа ҁ ĐēĐģĐĩĐšĐŧĐž Са Đ˛Ņ€ĐĩĐŧĐĩ</string>
<string name="revanced_copy_video_url_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
@@ -370,7 +388,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_copy_video_url_timestamp_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
<string name="revanced_remove_viewer_discretion_dialog_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€ĐžĐˇĐžŅ€ĐĩŅ†Đ° Са Đ˛ŅŠĐˇŅ€Đ°ŅŅ‚ĐžĐ˛Đž ĐžĐŗŅ€Đ°ĐŊĐ¸Ņ‡ĐĩĐŊиĐĩ</string>
<string name="revanced_remove_viewer_discretion_dialog_title">ĐŸŅ€ĐžĐˇĐžŅ€Đĩ҆ Са Đ˛ŅŠĐˇŅ€Đ°ŅŅ‚ĐžĐ˛Đž ĐžĐŗŅ€Đ°ĐŊĐ¸Ņ‡ĐĩĐŊиĐĩ</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_on">ДиаĐģĐžĐŗĐžĐ˛Đ¸ŅŅ‚ ĐŋŅ€ĐžĐˇĐžŅ€Đĩ҆ ҉Đĩ ĐąŅŠĐ´Đĩ ĐŋŅ€ĐĩĐŧĐ°Ņ…ĐŊĐ°Ņ‚</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">ДиаĐģĐžĐŗĐžĐ˛Đ¸ŅŅ‚ ĐŋŅ€ĐžĐˇĐžŅ€Đĩ҆ ҉Đĩ ĐąŅŠĐ´Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">ĐĸаСи Ņ„ŅƒĐŊĐēŅ†Đ¸Ņ ĐŊĐĩ СаОйиĐēаĐģŅ Đ˛ŅŠĐˇŅ€Đ°ŅŅ‚ĐžĐ˛ĐžŅ‚Đž ĐžĐŗŅ€Đ°ĐŊĐ¸Ņ‡ĐĩĐŊиĐĩ. ĐĸŅ ĐŋŅ€ĐžŅŅ‚Đž ĐŋŅ€Đ¸ĐĩĐŧа Đ˛ŅŠĐˇŅ€Đ°ŅŅ‚ĐžĐ˛Đ°Ņ‚Đ° ĐŗŅ€Đ°ĐŊĐ¸Ņ†Đ° Đ°Đ˛Ņ‚ĐžĐŧĐ°Ņ‚Đ¸Ņ‡ĐŊĐž.</string>
@@ -391,27 +409,27 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="interaction.seekbar.disablePreciseSeekingGesturePatch">
<string name="revanced_disable_precise_seeking_gesture_title">ДĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐļĐĩŅŅ‚Đ° Са Ņ‚ĐžŅ‡ĐŊĐž Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩ</string>
<string name="revanced_disable_precise_seeking_gesture_summary_on">ЖĐĩŅŅ‚ŅŠŅ‚ Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊ</string>
<string name="revanced_disable_precise_seeking_gesture_summary_off">ЖĐĩŅŅ‚ŅŠŅ‚ Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊ</string>
<string name="revanced_disable_precise_seeking_gesture_summary_on">ЖĐĩҁ҂ ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊ</string>
<string name="revanced_disable_precise_seeking_gesture_summary_off">ЖĐĩҁ҂ вĐēĐģŅŽŅ‡ĐĩĐŊ</string>
</patch>
<patch id="interaction.seekbar.enableSeekbarTappingPatch">
<string name="revanced_seekbar_tapping_title">АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа Đ´ĐžĐēĐžŅĐ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° Са Đ˛Ņ€ĐĩĐŧĐĩ</string>
<string name="revanced_seekbar_tapping_summary_on">ДоĐēĐžŅĐ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° Са Đ˛Ņ€ĐĩĐŧĐĩ Đĩ вĐēĐģŅŽŅ‡ĐĩĐŊĐž</string>
<string name="revanced_seekbar_tapping_summary_off">ДоĐēĐžŅĐ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° Са Đ˛Ņ€ĐĩĐŧĐĩ Đĩ иСĐēĐģŅŽŅ‡ĐĩĐŊĐž</string>
<string name="revanced_seekbar_tapping_summary_on">Đ¤ŅƒĐŊĐēŅ†Đ¸ŅŅ‚Đ° „ДоĐēĐžŅĐ˛Đ°ĐŊĐĩ Đ´Đž ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° Са Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩ“ Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊа</string>
<string name="revanced_seekbar_tapping_summary_off">Đ¤ŅƒĐŊĐēŅ†Đ¸ŅŅ‚Đ° „ДоĐēĐžŅĐ˛Đ°ĐŊĐĩ Đ´Đž ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° Са Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩ“ Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊа</string>
</patch>
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
<string name="revanced_swipe_brightness_title">ЗадаваĐŊĐĩ ĐŊа ŅŅ€ĐēĐžŅŅ‚ ҇ҀĐĩС ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ</string>
<string name="revanced_swipe_brightness_summary_on">ЗадаваĐŊĐĩŅ‚Đž ĐŊа ŅŅ€ĐēĐžŅŅ‚ ҇ҀĐĩС ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ Đĩ вĐēĐģŅŽŅ‡ĐĩĐŊĐž</string>
<string name="revanced_swipe_brightness_summary_off">ЗадаваĐŊĐĩŅ‚Đž ĐŊа ŅŅ€ĐēĐžŅŅ‚ ҇ҀĐĩС ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ Đĩ иСĐēĐģŅŽŅ‡ĐĩĐŊĐž</string>
<string name="revanced_swipe_brightness_summary_on">ОĐŋŅ†Đ¸ŅŅ‚Đ° Са ĐŋŅ€ĐĩĐ˛ŅŠŅ€Ņ‚Đ°ĐŊĐĩ ҁ ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ Са ĐŋŅ€ĐžĐŧŅĐŊа ĐŊа ŅŅ€ĐēĐžŅŅ‚Ņ‚Đ° Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊа</string>
<string name="revanced_swipe_brightness_summary_off">ОĐŋŅ†Đ¸ŅŅ‚Đ° Са ĐŋŅ€ĐĩĐ˛ŅŠŅ€Ņ‚Đ°ĐŊĐĩ ҁ ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ Са ĐŋŅ€ĐžĐŧŅĐŊа ĐŊа ŅŅ€ĐēĐžŅŅ‚Ņ‚Đ° Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊа</string>
<string name="revanced_swipe_volume_title">ĐĐ°ŅŅ‚Ņ€ĐžĐšĐ˛Đ°ĐŊĐĩ ĐŊа ĐˇĐ˛ŅƒĐēа ҇ҀĐĩС ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ</string>
<string name="revanced_swipe_volume_summary_on">ĐĐ°ŅŅ‚Ņ€ĐžĐšĐ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа ĐˇĐ˛ŅƒĐēа ҇ҀĐĩС ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ Đĩ вĐēĐģŅŽŅ‡ĐĩĐŊĐž</string>
<string name="revanced_swipe_volume_summary_off">ĐĐ°ŅŅ‚Ņ€ĐžĐšĐ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа ĐˇĐ˛ŅƒĐēа ҇ҀĐĩС ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ Đĩ иСĐēĐģŅŽŅ‡ĐĩĐŊĐž</string>
<string name="revanced_swipe_volume_summary_on">ОбĐĩĐŧŅŠŅ‚ ҇ҀĐĩС ĐŋĐģŅŠĐˇĐ˛Đ°ĐŊĐĩ Đĩ аĐēŅ‚Đ¸Đ˛ĐĩĐŊ</string>
<string name="revanced_swipe_volume_summary_off">ОбĐĩĐŧŅŠŅ‚ ҇ҀĐĩС ĐŋĐģŅŠĐˇĐ˛Đ°ĐŊĐĩ Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊ</string>
<string name="revanced_swipe_press_to_engage_title">АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐļĐĩŅŅ‚Đ° ĐŊĐ°Ņ‚Đ¸ŅĐēаĐŊĐĩ Са ĐŋŅ€ĐĩĐŧĐĩŅŅ‚Đ˛Đ°ĐŊĐĩ</string>
<string name="revanced_swipe_press_to_engage_summary_on">ĐĐ°Ņ‚Đ¸ŅĐēаĐŊĐĩŅ‚Đž ĐŋŅ€Đ¸ ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ Đĩ вĐēĐģŅŽŅ‡ĐĩĐŊĐž</string>
<string name="revanced_swipe_press_to_engage_summary_off">ĐĐ°Ņ‚Đ¸ŅĐēаĐŊĐĩŅ‚Đž ĐŋŅ€Đ¸ ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ Đĩ иСĐēĐģŅŽŅ‡ĐĩĐŊĐž</string>
<string name="revanced_swipe_press_to_engage_summary_on">ПĐģŅŠĐˇĐŗĐ°ĐŊĐĩŅ‚Đž ҇ҀĐĩС ĐŊĐ°Ņ‚Đ¸ŅĐēаĐŊĐĩ Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž</string>
<string name="revanced_swipe_press_to_engage_summary_off">ПĐģŅŠĐˇĐŗĐ°ĐŊĐĩŅ‚Đž ҇ҀĐĩС ĐŊĐ°Ņ‚Đ¸ŅĐēаĐŊĐĩ Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž</string>
<string name="revanced_swipe_haptic_feedback_title">АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ…ĐĩĐŋŅ‚Đ¸Ņ‡ĐŊĐ°Ņ‚Đ° ĐžĐąŅ€Đ°Ņ‚ĐŊа Đ˛Ņ€ŅŠĐˇĐēа</string>
<string name="revanced_swipe_haptic_feedback_summary_on">ĐĨĐĩĐŋŅ‚Đ¸Ņ‡ĐŊĐ°Ņ‚Đ° ĐžĐąŅ€Đ°Ņ‚ĐŊа Đ˛Ņ€ŅŠĐˇĐēа Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊа</string>
<string name="revanced_swipe_haptic_feedback_summary_off">ĐĨĐĩĐŋŅ‚Đ¸Ņ‡ĐŊĐ°Ņ‚Đ° ĐžĐąŅ€Đ°Ņ‚ĐŊа Đ˛Ņ€ŅŠĐˇĐēа Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊа</string>
<string name="revanced_swipe_haptic_feedback_summary_on">ĐĸаĐēŅ‚Đ¸ĐģĐŊĐ°Ņ‚Đ° ĐžĐąŅ€Đ°Ņ‚ĐŊа Đ˛Ņ€ŅŠĐˇĐēа Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊа</string>
<string name="revanced_swipe_haptic_feedback_summary_off">ĐĸаĐēŅ‚Đ¸ĐģĐŊĐ°Ņ‚Đ° ĐžĐąŅ€Đ°Ņ‚ĐŊа Đ˛Ņ€ŅŠĐˇĐēа Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊа</string>
<string name="revanced_swipe_save_and_restore_brightness_title">ЗаĐŋаСваĐŊĐĩ и Đ˛ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛ŅĐ˛Đ°ĐŊĐĩ ĐŊа ŅŅ€ĐēĐžŅŅ‚Ņ‚Đ°</string>
<string name="revanced_swipe_save_and_restore_brightness_summary_on">ЗаĐŋаСваĐŊĐĩ и Đ˛ŅŠĐˇŅŅ‚Đ°ĐžĐ˛ŅĐ˛Đ°ĐŊĐĩ ŅŅ€ĐēĐžŅŅ‚Ņ‚Đ° ĐŋŅ€Đ¸ вĐēĐģŅŽŅ‡Đ˛Đ°ĐŊĐĩ иĐģи иСĐēĐģŅŽŅ‡Đ˛Đ°ĐŊĐĩ ĐŊа Ņ†ŅĐģ ĐĩĐēŅ€Đ°ĐŊ</string>
<string name="revanced_swipe_save_and_restore_brightness_summary_off">НĐĩ ҁĐĩ СаĐŋаСва иĐģи Đ˛ŅŠĐˇŅŅ‚Đ°ĐžĐ˛ŅĐ˛Đ° ŅŅ€ĐēĐžŅŅ‚Ņ‚Đ° ĐŋŅ€Đ¸ вĐēĐģŅŽŅ‡Đ˛Đ°ĐŊĐĩ иĐģи иСĐēĐģŅŽŅ‡Đ˛Đ°ĐŊĐĩ ĐŊа Ņ†ŅĐģ ĐĩĐēŅ€Đ°ĐŊ</string>
@@ -419,12 +437,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">ПĐģŅŠĐˇĐŗĐ°ĐŊĐĩŅ‚Đž ĐŊадОĐģ҃ Đ´Đž ĐŊаК-ĐŊĐ¸ŅĐēĐ°Ņ‚Đ° ŅŅ‚ĐžĐšĐŊĐžŅŅ‚ ĐŊа ĐļĐĩŅŅ‚Đ° Са ŅŅ€ĐēĐžŅŅ‚, Са да ҁĐĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ° Đ°Đ˛Ņ‚ĐžĐŧĐ°Ņ‚Đ¸Ņ‡ĐŊĐ°Ņ‚Đ° ŅŅ€ĐēĐžŅŅ‚</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">ПĐģŅŠĐˇĐŗĐ°ĐŊĐĩŅ‚Đž ĐŊадОĐģ҃ Đ´Đž ĐŊаК-ĐŊĐ¸ŅĐēĐ°Ņ‚Đ° ŅŅ‚ĐžĐšĐŊĐžŅŅ‚ ĐŊа ĐļĐĩŅŅ‚Đ° Са ŅŅ€ĐēĐžŅŅ‚, ĐąĐĩС Đ´Đ°ŅĐĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ° Đ°Đ˛Ņ‚ĐžĐŧĐ°Ņ‚Đ¸Ņ‡ĐŊĐ°Ņ‚Đ° ŅŅ€ĐēĐžŅŅ‚</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">ĐĐ˛Ņ‚Đž</string>
<string name="revanced_swipe_overlay_timeout_title">Đ—Đ°Đ´Ņ€ŅŠĐļĐēа ĐŊа ĐŋĐģŅŠĐˇĐŗĐ°Ņ‰Đ°Ņ‚Đ° ĐēĐžĐŊŅ‚Ņ€ĐžĐģа</string>
<string name="revanced_swipe_overlay_timeout_summary">Đ’Ņ€ĐĩĐŧĐĩ Са ĐēĐžĐĩŅ‚Đž ĐŋĐģŅŠĐˇĐŗĐ°Ņ‰Đ°Ņ‚Đ° ĐēĐžĐŊŅ‚Ņ€ĐžĐģа Đĩ видиĐŧа</string>
<string name="revanced_swipe_overlay_timeout_title">Đ—Đ°Đ´Ņ€ŅŠĐļĐēа ĐŊа ĐŋĐģŅŠĐˇĐŗĐ°Ņ‰Đ°Ņ‚Đ° ĐēĐžĐŊŅ‚Ņ€ĐžĐģа Са ĐŋĐžĐēаСваĐŊĐĩ</string>
<string name="revanced_swipe_overlay_timeout_summary">Đ’Ņ€ĐĩĐŧĐĩ Са ĐēĐžĐĩŅ‚Đž ĐŋĐģŅŠĐˇĐŗĐ°Ņ‰Đ°Ņ‚Đ° ĐēĐžĐŊŅ‚Ņ€ĐžĐģа Đĩ видиĐŧа.</string>
<string name="revanced_swipe_text_overlay_size_title">РаСĐŧĐĩŅ€ ĐŊа Ņ‚ĐĩĐēŅŅ‚Đ° ĐŋŅ€Đ¸ ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ</string>
<string name="revanced_swipe_text_overlay_size_summary">РаСĐŧĐĩŅ€Đ° ĐŊа Ņ‚ĐĩĐēŅŅ‚Đ° ĐŊа ĐŋĐģŅŠĐˇĐŗĐ°Ņ‰Đ¸Ņ‚Đĩ ĐēĐžĐŊŅ‚Ņ€ĐžĐģи</string>
<string name="revanced_swipe_overlay_background_alpha_title">ВидиĐŧĐžŅŅ‚ ĐŊа Ņ„ĐžĐŊа ĐŊа ĐŋĐģŅŠĐˇĐŗĐ°Ņ‰Đ¸Ņ‚Đĩ ĐēĐžĐŊŅ‚Ņ€ĐžĐģи</string>
<string name="revanced_swipe_overlay_background_alpha_summary">ВидиĐŧĐžŅŅ‚Ņ‚Đ° ĐŊа Ņ„ĐžĐŊа ĐŊа ĐŋĐģŅŠĐˇĐŗĐ°Ņ‰Đ¸Ņ‚Đĩ ĐēĐžĐŊŅ‚Ņ€ĐžĐģи</string>
<string name="revanced_swipe_overlay_background_alpha_summary">ВидиĐŧĐžŅŅ‚Ņ‚Đ° ĐŊа Ņ„ĐžĐŊа ĐŊа ĐŋĐģŅŠĐˇĐŗĐ°Ņ‰Đ¸Ņ‚Đĩ ĐēĐžĐŊŅ‚Ņ€ĐžĐģи.</string>
<string name="revanced_swipe_threshold_title">ĐŸŅ€Đ°Đŗ ĐŊа вĐĩĐģĐ¸Ņ‡Đ¸ĐŊĐ°Ņ‚Đ° ĐŊа ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ</string>
<string name="revanced_swipe_threshold_summary">ĐŸŅ€Đ°Đŗ ĐŋŅ€Đĩди да ҁĐĩ ĐžŅŅŠŅ‰ĐĩŅŅ‚Đ˛Đ¸ ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩŅ‚Đž</string>
</patch>
@@ -490,11 +508,22 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_subscriptions_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊа Са айОĐŊаĐŧĐĩĐŊŅ‚Đ¸ ҁĐĩ ĐŋĐžĐēаСва</string>
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_switch_create_with_notifications_button_title">ЗаĐŧĐĩĐŊĐĩŅ‚Đĩ ĐąŅƒŅ‚ĐžĐŊа â€žĐĄŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ“ ҁ ĐąŅƒŅ‚ĐžĐŊа „ИзвĐĩŅŅ‚Đ¸Ņâ€œ</string>
<string name="revanced_switch_create_with_notifications_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ŅŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ҁĐĩ СаĐŧĐĩĐŊŅ ҁ ĐąŅƒŅ‚ĐžĐŊа Са иСвĐĩŅŅ‚Đ¸Ņ\n\nЗабĐĩĐģĐĩĐļĐēа: АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩŅ‚Đž ĐŊа Ņ‚Đ°ĐˇĐ¸ ĐžĐŋŅ†Đ¸Ņ ŅŅŠŅ‰Đž ҁĐēŅ€Đ¸Đ˛Đ° видĐĩĐžŅ€ĐĩĐēĐģаĐŧи</string>
<string name="revanced_switch_create_with_notifications_button_summary_on">"Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ŅŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ Đĩ ҁĐŧĐĩĐŊĐĩĐŊ ҁ ĐąŅƒŅ‚ĐžĐŊа ИСвĐĩŅŅ‚Đ¸Ņ
ЗабĐĩĐģĐĩĐļĐēа: АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩŅ‚Đž ĐŊа Ņ‚ĐžĐ˛Đ° ŅŅŠŅ‰Đž ĐŋŅ€Đ¸ĐŊŅƒĐ´Đ¸Ņ‚ĐĩĐģĐŊĐž ҁĐēŅ€Đ¸Đ˛Đ° видĐĩĐž Ņ€ĐĩĐēĐģаĐŧĐ¸Ņ‚Đĩ"</string>
<string name="revanced_switch_create_with_notifications_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊĐ¸Ņ‚Đĩ \"ĐĄŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ\" и \"ИСвĐĩŅŅ‚Đ¸Ņ\" ĐŊĐĩ ŅĐ° Ņ€Đ°ĐˇĐŧĐĩĐŊĐĩĐŊи</string>
<string name="revanced_hide_navigation_button_labels_title">ИĐŧĐĩĐŊа ĐŊа ĐąŅƒŅ‚ĐžĐŊĐ¸Ņ‚Đĩ ĐŊа ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°Ņ†Đ¸Ņ</string>
<string name="revanced_hide_navigation_button_labels_summary_on">Đ•Ņ‚Đ¸ĐēĐĩŅ‚Đ¸Ņ‚Đĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_navigation_button_labels_summary_off">Đ•Ņ‚Đ¸ĐēĐĩŅ‚Đ¸Ņ‚Đĩ ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<string name="revanced_disable_translucent_status_bar_title">ДĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°Đš ĐŋĐžĐģ҃ĐŋŅ€ĐžĐˇŅ€Đ°Ņ‡ĐŊĐ°Ņ‚Đ° ĐģĐĩĐŊŅ‚Đ° ĐŊа ŅŅŠŅŅ‚ĐžŅĐŊиĐĩŅ‚Đž</string>
<string name="revanced_disable_translucent_status_bar_summary_on">ĐĄŅ‚Đ°Ņ‚ŅƒŅĐŊĐ°Ņ ĐģĐĩĐŊŅ‚Đ° Đĩ ĐŊĐĩĐŋŅ€ĐžĐˇŅ€Đ°Ņ‡ĐŊа</string>
<string name="revanced_disable_translucent_status_bar_summary_off">ĐĄŅ‚Đ°Ņ‚ŅƒŅĐŊĐ°Ņ ĐģĐĩĐŊŅ‚Đ° Đĩ ĐŊĐĩĐŋŅ€ĐžĐˇŅ€Đ°Ņ‡ĐŊа иĐģи ĐŋŅ€ĐžĐˇŅ€Đ°Ņ‡ĐŊа</string>
<string name="revanced_disable_translucent_navigation_bar_light_title">ДĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°Đš ĐŋĐžĐģ҃ĐŋŅ€ĐžĐˇŅ€Đ°Ņ‡ĐŊĐ°Ņ‚Đ° ŅĐ˛ĐĩŅ‚Đģа ĐģĐĩĐŊŅ‚Đ° Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°Ņ†Đ¸Ņ</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_on">ХвĐĩŅ‚ĐģĐ°Ņ‚Đ° ĐģĐĩĐŊŅ‚Đ° Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°Ņ†Đ¸Ņ Đĩ ĐŊĐĩĐŋŅ€ĐžĐˇŅ€Đ°Ņ‡ĐŊа</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">ХвĐĩŅ‚ĐģĐ°Ņ‚Đ° ĐģĐĩĐŊŅ‚Đ° Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°Ņ†Đ¸Ņ Đĩ ĐŊĐĩĐŋŅ€ĐžĐˇŅ€Đ°Ņ‡ĐŊа иĐģи ĐŋŅ€ĐžĐˇŅ€Đ°Ņ‡ĐŊа</string>
<string name="revanced_disable_translucent_navigation_bar_dark_title">ДĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ‚ŅŠĐŧĐŊĐ°Ņ‚Đ° ĐŋĐžĐģ҃ĐŋŅ€ĐžĐˇŅ€Đ°Ņ‡ĐŊа ĐģĐĩĐŊŅ‚Đ°</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_on">ĐĸҊĐŧĐŊĐ°Ņ‚Đ° ĐģĐĩĐŊŅ‚Đ° Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°Ņ†Đ¸Ņ Đĩ ĐŊĐĩĐŋŅ€ĐžĐˇŅ€Đ°Ņ‡ĐŊа</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">ĐĸҊĐŧĐŊĐ°Ņ‚Đ° ĐģĐĩĐŊŅ‚Đ° Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°Ņ†Đ¸Ņ Đĩ ĐŊĐĩĐŋŅ€ĐžĐˇŅ€Đ°Ņ‡ĐŊа иĐģи ĐŋŅ€ĐžĐˇŅ€Đ°Ņ‡ĐŊа</string>
</patch>
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
<string name="revanced_hide_player_flyout_title">ĐŸĐ°Đ´Đ°Ņ‰Đž ĐŧĐĩĐŊŅŽ</string>
@@ -676,8 +705,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_info_panel_summary_on">ИĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ĐžĐŊĐŊĐ¸Ņ‚Đĩ ĐŋаĐŊĐĩĐģи ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_shorts_info_panel_summary_off">ИĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ĐžĐŊĐŊĐ¸Ņ‚Đĩ ĐŋаĐŊĐĩĐģи ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<string name="revanced_hide_shorts_channel_bar_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° ĐŊа ĐēаĐŊаĐģа</string>
<string name="revanced_hide_shorts_channel_bar_summary_on">ЛĐĩĐŊŅ‚Đ°Ņ‚Đ° ĐŊа ĐēаĐŊаĐģа Đĩ ҁĐēŅ€Đ¸Ņ‚Đ°</string>
<string name="revanced_hide_shorts_channel_bar_summary_off">ЛĐĩĐŊŅ‚Đ°Ņ‚Đ° ĐŊа ĐēаĐŊаĐģа Đĩ ĐŋĐžĐēаСаĐŊа</string>
<string name="revanced_hide_shorts_channel_bar_summary_on">ЛĐĩĐŊŅ‚Đ°Ņ‚Đ° ĐŊа ĐēаĐŊаĐģа Đĩ ҁĐēŅ€Đ¸Ņ‚Đ°.</string>
<string name="revanced_hide_shorts_channel_bar_summary_off">ЛĐĩĐŊŅ‚Đ°Ņ‚Đ° ĐŊа ĐēаĐŊаĐģа Đĩ ĐŋĐžĐēаСаĐŊа.</string>
<string name="revanced_hide_shorts_video_title_title">Đ—Đ°ĐŗĐģавиĐĩ ĐŊа видĐĩĐžŅ‚Đž</string>
<string name="revanced_hide_shorts_video_title_summary_on">Đ—Đ°ĐŗĐģавиĐĩŅ‚Đž Đĩ ҁĐēŅ€Đ¸Ņ‚Đž</string>
<string name="revanced_hide_shorts_video_title_summary_off">Đ—Đ°ĐŗĐģавиĐĩŅ‚Đž ҁĐĩ ĐŋĐžĐēаСва</string>
@@ -709,6 +738,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_popup_panels_summary_on">Đ˜ĐˇŅĐēĐ°Ņ‡Đ°Ņ‰Đ¸Ņ‚Đĩ ĐŋаĐŊĐĩĐģи ĐŊа ĐŋĐģĐĩĐšŅŠŅ€Đ° ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_player_popup_panels_summary_off">Đ˜ĐˇŅĐēĐ°Ņ‡Đ°Ņ‰Đ¸Ņ‚Đĩ ĐŋаĐŊĐĩĐģи ĐŊа ĐŋĐģĐĩĐšŅŠŅ€Đ° ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
<string name="revanced_open_videos_fullscreen_portrait_title">ĐžŅ‚Đ˛Đ°Ņ€ŅĐŊĐĩ ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩ в ĐŋĐžŅ€Ņ‚Ņ€ĐĩŅ‚ĐĩĐŊ Ņ€ĐĩĐļиĐŧ ĐŊа Ņ†ŅĐģ ĐĩĐēŅ€Đ°ĐŊ</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">ВидĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ ҁĐĩ ĐžŅ‚Đ˛Đ°Ņ€ŅŅ‚ ĐŊа Ņ†ŅĐģ ĐĩĐēŅ€Đ°ĐŊ</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">ВидĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ НĐĩ ҁĐĩ ĐžŅ‚Đ˛Đ°Ņ€ŅŅ‚ ĐŊа Ņ†ŅĐģ ĐĩĐēŅ€Đ°ĐŊ</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">ĐŸŅ€ĐžĐˇŅ€Đ°Ņ‡ĐŊĐžŅŅ‚ ĐŊа ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēĐ¸Ņ‚Đĩ в ПĐģĐĩĐ°Ņ€Đ°</string>
<string name="revanced_player_overlay_opacity_summary">ĐĄŅ‚ĐžĐšĐŊĐžŅŅ‚ ĐŊа ĐŋŅ€ĐžĐˇŅ€Đ°Ņ‡ĐŊĐžŅŅ‚ ĐŧĐĩĐļĐ´Ņƒ 0-100, ĐēŅŠĐ´ĐĩŅ‚Đž 0 Đĩ ĐŋŅ€ĐžĐˇŅ€Đ°Ņ‡ĐŊĐž</string>
@@ -726,7 +760,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_ryd_enable_summary_off">НĐĩŅ…Đ°Ņ€ĐĩŅĐ˛Đ°ĐŊĐ¸ŅŅ‚Đ° ĐŊĐĩ ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚</string>
<string name="revanced_ryd_shorts_title">ПоĐē. ĐŊĐĩŅ…Đ°Ņ€ĐĩŅĐ˛Đ°ĐŊĐ¸Ņ в ĐēŅ€Đ°Ņ‚ĐēĐ¸Ņ‚Đĩ ĐēĐģиĐŋОвĐĩ</string>
<string name="revanced_ryd_shorts_summary_on">НĐĩŅ…Đ°Ņ€ĐĩŅĐ˛Đ°ĐŊĐ¸ŅŅ‚Đ° ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚ в ĐēŅ€Đ°Ņ‚ĐēĐ¸Ņ‚Đĩ ĐēĐģиĐŋОвĐĩ</string>
<string name="revanced_ryd_shorts_summary_on_disclaimer">НĐĩŅ…Đ°Ņ€ĐĩŅĐ˛Đ°ĐŊĐ¸Ņ, ĐŋĐžĐēаСаĐŊи в Shorts\n\nĐžĐŗŅ€Đ°ĐŊĐ¸Ņ‡ĐĩĐŊиĐĩ: НĐĩŅ…Đ°Ņ€ĐĩŅĐ˛Đ°ĐŊĐ¸ŅŅ‚Đ° ĐŧĐžĐļĐĩ да ĐŊĐĩ ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚ в Ņ€ĐĩĐļиĐŧ „иĐŊĐēĐžĐŗĐŊĐ¸Ņ‚Đžâ€œ</string>
<string name="revanced_ryd_shorts_summary_on_disclaimer">"НĐĩŅ…Đ°Ņ€ĐĩŅĐ˛Đ°ĐŊĐ¸ŅŅ‚Đ° ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚ ĐŊа ŅˆĐžŅ€Ņ‚Đ¸
ĐžĐŗŅ€Đ°ĐŊĐ¸Ņ‡ĐĩĐŊиĐĩ: НĐĩŅ…Đ°Ņ€ĐĩŅĐ˛Đ°ĐŊĐ¸ŅŅ‚Đ° ĐŧĐžĐļĐĩ да ĐŊĐĩ ҁĐĩ ĐŋĐžŅĐ˛ŅŅ‚ в Ņ€ĐĩĐļиĐŧ иĐŊĐēĐžĐŗĐŊĐ¸Ņ‚Đž"</string>
<string name="revanced_ryd_shorts_summary_off">НĐĩŅ…Đ°Ņ€ĐĩŅĐ˛Đ°ĐŊĐ¸ŅŅ‚Đ° ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸ в ĐēŅ€Đ°Ņ‚ĐēĐ¸Ņ‚Đĩ ĐēĐģиĐŋОвĐĩ</string>
<string name="revanced_ryd_dislike_percentage_title">НĐĩŅ…Đ°Ņ€ĐĩŅĐ˛Đ°ĐŊĐ¸Ņ ĐēĐ°Ņ‚Đž ĐŋŅ€ĐžŅ†ĐĩĐŊŅ‚</string>
<string name="revanced_ryd_dislike_percentage_summary_on">НĐĩŅ…Đ°Ņ€ĐĩŅĐ˛Đ°ĐŊĐ¸ŅŅ‚Đ° ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚ ĐēĐ°Ņ‚Đž ĐŋŅ€ĐžŅ†ĐĩĐŊŅ‚</string>
@@ -738,7 +774,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_ryd_toast_on_connection_error_title">ПоĐēаСваĐŊĐĩ ĐŊа иСвĐĩŅŅ‚Đ¸Đĩ, аĐēĐž API ĐŊĐĩ Đĩ ĐŊаĐģĐ¸Ņ‡ĐĩĐŊ</string>
<string name="revanced_ryd_toast_on_connection_error_summary_on">ПоĐēаСва иСвĐĩŅŅ‚Đ¸Đĩ, аĐēĐž Return YouTube Dislike ĐŊĐĩ Đĩ ĐŊаĐģĐ¸Ņ‡ĐĩĐŊ</string>
<string name="revanced_ryd_toast_on_connection_error_summary_off">НĐĩ ҁĐĩ ĐŋĐžĐēаСва иСвĐĩŅŅ‚Đ¸Đĩ, аĐēĐž ReturnYouTube Dislike ĐŊĐĩ Đĩ ĐŊаĐģĐ¸Ņ‡ĐĩĐŊ</string>
<string name="revanced_ryd_about">ĐžŅ‚ĐŊĐžŅĐŊĐž</string>
<string name="revanced_ryd_about">За ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐ°Ņ‚Đ°</string>
<string name="revanced_ryd_attribution_summary">ДаĐŊĐŊĐ¸Ņ‚Đĩ Са ĐŊĐĩŅ…Đ°Ņ€ĐĩŅĐ˛Đ°ĐŊĐĩ ŅĐ° ĐžŅ‚ Return YouTube Dislike API. ДоĐēĐžŅĐŊĐĩŅ‚Đĩ Са да ĐŊĐ°ŅƒŅ‡Đ¸Ņ‚Đĩ ĐŋОвĐĩ҇Đĩ</string>
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
<string name="revanced_ryd_statistics_category_title">ĐĄŅ‚Đ°Ņ‚Đ¸ŅŅ‚Đ¸Đēа Return YouTube Dislike API ĐŊа Ņ‚ĐžĐ˛Đ° ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚Đ˛Đž</string>
@@ -769,7 +805,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">МиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸ ҁ ҁҀĐĩĐ´ĐŊĐž ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đž в ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° ĐŊа Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩ</string>
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">МиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸ ҁ Đ˛Đ¸ŅĐžĐēĐž ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đž в ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° ĐŊа ĐŋŅ€ĐžĐŗŅ€ĐĩŅĐ° ĐŊа Ņ†ŅĐģ ĐĩĐēŅ€Đ°ĐŊ</string>
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">МиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸ ҁҊҁ ҁҀĐĩĐ´ĐŊĐž ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đž в ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° ĐŊа ĐŋŅ€ĐžĐŗŅ€ĐĩŅĐ° ĐŊа Ņ†ŅĐģ ĐĩĐēŅ€Đ°ĐŊ</string>
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">ĐĸОва ŅŅŠŅ‰Đž Ņ‚Đ°Đēа ҉Đĩ Đ˛ŅŠĐˇŅŅ‚Đ°ĐŊОви ĐŧиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸ ĐŊа ĐŋĐžŅ‚ĐžŅ†Đ¸ ĐŊа ĐļивО, ĐēĐžĐ¸Ņ‚Đž ĐŊŅĐŧĐ°Ņ‚ ĐŧиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸ ĐŊа ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° ĐŊа ĐŋŅ€ĐžĐŗŅ€ĐĩŅĐ°.\n\nМиĐŊĐ¸Đ¸ĐˇĐžĐąŅ€Đ°ĐļĐĩĐŊĐ¸ŅŅ‚Đ° ĐŊа ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° ĐŊа ĐŋŅ€ĐžĐŗŅ€ĐĩŅĐ° ҉Đĩ иСĐŋĐžĐģĐˇĐ˛Đ°Ņ‚ ŅŅŠŅ‰ĐžŅ‚Đž ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đž ĐēĐ°Ņ‚Đž Ņ‚ĐĩĐēŅƒŅ‰Đ¸Ņ видĐĩĐžĐēĐģиĐŋ.\n\nĐĸаСи Ņ„ŅƒĐŊĐēŅ†Đ¸Ņ Ņ€Đ°ĐąĐžŅ‚Đ¸ ĐŊаК-Đ´ĐžĐąŅ€Đĩ ҁ ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đž ĐŊа видĐĩĐžŅ‚Đž 720p иĐģи ĐŋĐž-ĐŊĐ¸ŅĐēĐž и ĐēĐžĐŗĐ°Ņ‚Đž иСĐŋĐžĐģĐˇĐ˛Đ°Ņ‚Đĩ ĐŧĐŊĐžĐŗĐž ĐąŅŠŅ€ĐˇĐž иĐŊŅ‚ĐĩŅ€ĐŊĐĩŅ‚ Đ˛Ņ€ŅŠĐˇĐēа.</string>
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"ĐĸОва ŅŅŠŅ‰Đž ҉Đĩ Đ˛ŅŠĐˇŅŅ‚Đ°ĐŊОви ĐŧиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸Ņ‚Đĩ ĐŊа ĐŋŅ€ĐĩдаваĐŊĐ¸Ņ ĐŊа ĐļивО, ĐēĐžĐ¸Ņ‚Đž ĐŊŅĐŧĐ°Ņ‚ ĐŧиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸ ĐŊа ĐŋĐģŅŠĐˇĐŗĐ°Ņ‡Đ°.
МиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸Ņ‚Đĩ ĐŊа ĐŋĐģŅŠĐˇĐŗĐ°Ņ‡Đ° ҉Đĩ иСĐŋĐžĐģĐˇĐ˛Đ°Ņ‚ ŅŅŠŅ‰ĐžŅ‚Đž ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đž ĐēĐ°Ņ‚Đž Ņ‚ĐĩĐēŅƒŅ‰ĐžŅ‚Đž видĐĩĐž.
ĐĸаСи Ņ„ŅƒĐŊĐēŅ†Đ¸Ņ Ņ€Đ°ĐąĐžŅ‚Đ¸ ĐŊаК-Đ´ĐžĐąŅ€Đĩ ҁ видĐĩĐž ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đž ĐžŅ‚ 720p иĐģи ĐŋĐž-ĐŊĐ¸ŅĐēĐž и ĐŋŅ€Đ¸ иСĐŋĐžĐģСваĐŊĐĩ ĐŊа ĐŧĐŊĐžĐŗĐž ĐąŅŠŅ€ĐˇĐ° иĐŊŅ‚ĐĩŅ€ĐŊĐĩŅ‚ Đ˛Ņ€ŅŠĐˇĐēа."</string>
<string name="revanced_restore_old_seekbar_thumbnails_title">ĐĄŅ‚Đ°Ņ€Đ¸ ĐŧиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸ ĐŊа Đ˛Ņ€ĐĩĐŧĐĩĐ˛Đ°Ņ‚Đ° ĐģиĐŊĐ¸Ņ</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Над ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° Са Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩ ҁĐĩ ĐŋĐžŅĐ˛ŅĐ˛Đ°Ņ‚ ĐŧиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">МиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸Ņ‚Đĩ ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚ в Ņ€ĐĩĐļиĐŧ ĐŊа Ņ†ŅĐģ ĐĩĐēŅ€Đ°ĐŊ</string>
@@ -777,7 +817,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="layout.sponsorblock.sponsorBlockResourcePatch">
<string name="revanced_sb_enable_sb">ВĐēĐģŅŽŅ‡Đ˛Đ°ĐŊĐĩ ĐŊа SponsorBlock</string>
<string name="revanced_sb_enable_sb_sum">SponsorBlock Đĩ ŅĐ¸ŅŅ‚ĐĩĐŧа Са ĐŋŅ€ĐĩҁĐēĐ°Ņ‡Đ°ĐŊĐĩ ĐŊа Đ´ĐžŅĐ°Đ´ĐŊи Ņ‡Đ°ŅŅ‚Đ¸ и Ņ€ĐĩĐēĐģаĐŧи ĐžŅ‚ видĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ в YouTube</string>
<string name="revanced_sb_appearance_category">ОбĐģиĐē</string>
<string name="revanced_sb_appearance_category">Đ’ŅŠĐŊ҈ĐĩĐŊ вид</string>
<string name="revanced_sb_enable_voting">Đ‘ŅƒŅ‚ĐžĐŊа Са ĐŗĐģĐ°ŅŅƒĐ˛Đ°ĐŊĐĩ</string>
<string name="revanced_sb_enable_voting_sum_on">Đ‘ŅƒŅ‚ĐžĐŊа Са ĐŗĐģĐ°ŅŅƒĐ˛Đ°ĐŊĐĩ ĐŊа Ņ‡Đ°ŅŅ‚ ҁĐĩ ĐŋĐžĐēаСва</string>
<string name="revanced_sb_enable_voting_sum_off">Đ‘ŅƒŅ‚ĐžĐŊа Са ĐŗĐģĐ°ŅŅƒĐ˛Đ°ĐŊĐĩ ĐŊа Ņ‡Đ°ŅŅ‚ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
@@ -801,13 +841,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_general_adjusting">ĐĐ°ŅŅ‚Ņ€ĐžĐšĐ˛Đ°ĐŊĐĩ ŅŅ‚ŅŠĐŋĐēа ĐŊа ĐŊĐžĐ˛Đ°Ņ‚Đ° Ņ‡Đ°ŅŅ‚</string>
<string name="revanced_sb_general_adjusting_sum">МиĐģĐ¸ŅĐĩĐē҃ĐŊĐ´Đ¸Ņ‚Đĩ ҁ ĐēĐžĐšŅ‚Đž ҁĐĩ ĐŋŅ€ĐĩĐŧĐĩŅŅ‚Đ˛Đ°Ņ‚ ĐąŅƒŅ‚ĐžĐŊĐ¸Ņ‚Đĩ Са ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēа ĐŋŅ€Đ¸ ŅŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ĐŊа Ņ‡Đ°ŅŅ‚</string>
<string name="revanced_sb_general_adjusting_invalid">ĐĄŅ‚ĐžĐšĐŊĐžŅŅ‚Ņ‚Đ° Ņ‚Ņ€ŅĐąĐ˛Đ° да Đĩ ĐŋĐžĐģĐžĐļĐ¸Ņ‚ĐĩĐģĐŊĐž Ņ‡Đ¸ŅĐģĐž</string>
<string name="revanced_sb_guidelines_preference_title">ĐŸŅ€ĐĩĐŗĐģĐĩĐ´ ĐŊа Ņ€ŅŠĐēОвОдĐŊĐ¸Ņ‚Đĩ ĐģиĐŊии</string>
<string name="revanced_sb_guidelines_preference_title">ВиĐļŅ‚Đĩ ҃ĐēаСаĐŊĐ¸ŅŅ‚Đ°</string>
<string name="revanced_sb_guidelines_preference_sum">ĐŖĐēаСаĐŊĐ¸ŅŅ‚Đ° ŅŅŠĐ´ŅŠŅ€ĐļĐ°Ņ‚ ĐŋŅ€Đ°Đ˛Đ¸Đģа и ŅŅŠĐ˛ĐĩŅ‚Đ¸ Са ŅŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ĐŊа ĐŊОви Ņ‡Đ°ŅŅ‚Đ¸</string>
<string name="revanced_sb_guidelines_popup_title">ĐĄĐģĐĩĐ´Đ˛Đ°ĐšŅ‚Đĩ ҃ĐēаСаĐŊĐ¸ŅŅ‚Đ°</string>
<string name="revanced_sb_guidelines_popup_content">ĐŸŅ€ĐžŅ‡ĐĩŅ‚ĐĩŅ‚Đĩ ҃ĐēаСаĐŊĐ¸ŅŅ‚Đ° ĐŊа SponsorBlock ĐŋŅ€Đĩди да ŅŅŠĐˇĐ´Đ°Đ´ĐĩŅ‚Đĩ ĐŊОви Ņ‡Đ°ŅŅ‚Đ¸</string>
<string name="revanced_sb_guidelines_popup_already_read">ВĐĩ҇Đĩ ĐŋŅ€ĐžŅ‡ĐĩŅ‚ĐžŅ…</string>
<string name="revanced_sb_guidelines_popup_already_read">ВĐĩ҇Đĩ ĐŗĐ¸ ĐŋŅ€ĐžŅ‡ĐĩŅ‚ĐžŅ…</string>
<string name="revanced_sb_guidelines_popup_open">ПоĐēаĐļи Đŧи</string>
<string name="revanced_sb_general">ĐžĐąŅ‰Đ¸</string>
<string name="revanced_sb_general">ĐžŅĐŊОвĐĩĐŊ</string>
<string name="revanced_sb_toast_on_connection_error_title">ПоĐēаСваĐŊĐĩ ĐŊа иСвĐĩŅŅ‚Đ¸Đĩ, аĐēĐž API ĐŊĐĩ Đĩ ĐŊаĐģĐ¸Ņ‡ĐĩĐŊ</string>
<string name="revanced_sb_toast_on_connection_error_summary_on">ПоĐēаСва ҁĐĩ иСвĐĩŅŅ‚Đ¸Đĩ, аĐēĐž SponsorBlock ĐŊĐĩ Đĩ ĐŊаĐģĐ¸Ņ‡ĐĩĐŊ</string>
<string name="revanced_sb_toast_on_connection_error_summary_off">ПоĐēаСва ҁĐĩ иСвĐĩŅŅ‚Đ¸Đĩ, аĐēĐž SponsorBlock ĐŊĐĩ Đĩ ĐŊаĐģĐ¸Ņ‡ĐĩĐŊ</string>
@@ -818,24 +858,27 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_general_min_duration_sum">Đ§Đ°ŅŅ‚Đ¸, ĐŋĐž-ĐēŅ€Đ°Ņ‚Đēи ĐžŅ‚ Ņ‚Đ°ĐˇĐ¸ ŅŅ‚ĐžĐšĐŊĐžŅŅ‚ (в ҁĐĩĐē҃ĐŊди) ĐŊŅĐŧа да ĐąŅŠĐ´Đ°Ņ‚ ĐŋŅ€ĐžĐŋ҃ҁĐēаĐŊи иĐģи ĐŋĐžĐēаСваĐŊи</string>
<string name="revanced_sb_general_min_duration_invalid">НĐĩваĐģидĐŊа Đ˛Ņ€ĐĩĐŧĐĩŅ‚Ņ€Đ°ĐĩĐŊĐĩ</string>
<string name="revanced_sb_general_uuid">Đ’Đ°ŅˆĐ¸ŅŅ‚ ҃ĐŊиĐēаĐģĐĩĐŊ ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēи id</string>
<string name="revanced_sb_general_uuid_sum">ĐĸОва Ņ‚Ņ€ŅĐąĐ˛Đ° да ҁĐĩ Đ´ŅŠŅ€Đļи Ņ‚Đ°ĐšĐŊĐž. ĐĸĐž Đĩ ĐēĐ°Ņ‚Đž ĐŋĐ°Ņ€ĐžĐģа и ĐŊĐĩ Ņ‚Ņ€ŅĐąĐ˛Đ° да ҁĐĩ ҁĐŋОдĐĩĐģŅ ҁ ĐŊиĐēĐžĐŗĐž. АĐēĐž ĐŊŅĐēОК ĐŗĐž иĐŧа, Ņ‚Đž Ņ‚ĐžĐš ĐŧĐžĐļĐĩ да ҁĐĩ ĐŋŅ€ĐĩĐ´ŅŅ‚Đ°Đ˛Đ¸ вĐŧĐĩŅŅ‚Đž Đ˛Đ°Ņ</string>
<string name="revanced_sb_general_uuid_sum">ĐĸОва Ņ‚Ņ€ŅĐąĐ˛Đ° да ҁĐĩ ĐŋаСи Ņ‚Đ°ĐšĐŊĐž. ĐĸĐž Đĩ ĐēĐ°Ņ‚Đž ĐŋĐ°Ņ€ĐžĐģа и ĐŊĐĩ Ņ‚Ņ€ŅĐąĐ˛Đ° да ҁĐĩ ҁĐŋОдĐĩĐģŅ ҁ ĐŊиĐēĐžĐŗĐž. АĐēĐž ĐŊŅĐēОК ĐŗĐž ĐŋŅ€Đ¸Ņ‚ĐĩĐļава, Ņ‚ĐžĐš ĐŧĐžĐļĐĩ да ҁĐĩ ĐŋŅ€ĐĩĐ´ŅŅ‚Đ°Đ˛Đ¸ вĐŧĐĩŅŅ‚Đž Đ˛Đ°Ņ.</string>
<string name="revanced_sb_general_uuid_invalid">Đ›Đ¸Ņ‡ĐŊĐ¸ŅŅ‚ Id Ņ‚Ņ€ŅĐąĐ˛Đ° да Đĩ ҁ Đ´ŅŠĐģĐļиĐŊа ĐŋĐžĐŊĐĩ 30 СĐŊаĐēа</string>
<string name="revanced_sb_general_api_url">ĐŸŅ€ĐžĐŧŅĐŊа URL ĐŊа API</string>
<string name="revanced_sb_general_api_url_sum">ĐĐ´Ņ€ĐĩŅŅŠŅ‚, ĐēĐžĐšŅ‚Đž SponsorBlock иСĐŋĐžĐģСва Са ŅĐ˛ŅŠŅ€ĐˇĐ˛Đ°ĐŊĐĩ ĐēҊĐŧ ŅŅŠŅ€Đ˛ŅŠŅ€Đ°</string>
<string name="revanced_sb_api_url_reset">ĐŅƒĐģĐ¸Ņ€Đ°ĐŊĐĩ URL Đ°Đ´Ņ€ĐĩŅĐ° ĐŊа API</string>
<string name="revanced_sb_api_url_reset">ĐŅƒĐģĐ¸Ņ€Đ°ĐŊĐĩ URL Đ°Đ´Ņ€ĐĩŅĐ°, ĐŊа API.</string>
<string name="revanced_sb_api_url_invalid">URL Đ°Đ´Ņ€ĐĩŅŅŠŅ‚ Đĩ ĐŊĐĩваĐģидĐĩĐŊ</string>
<string name="revanced_sb_api_url_changed">URL Đ°Đ´Ņ€ĐĩŅŅŠŅ‚ ĐŊа API Đĩ ĐŋŅ€ĐžĐŧĐĩĐŊĐĩĐŊ</string>
<string name="revanced_sb_settings_ie">ĐĐ°ŅŅ‚Ņ€ĐžĐšĐēи Са вĐŊĐ°ŅŅĐŊĐĩ и иСĐŊĐ°ŅŅĐŊĐĩ</string>
<string name="revanced_sb_settings_copy">КоĐŋĐ¸Ņ€Đ°ĐŊĐĩ</string>
<string name="revanced_sb_api_url_changed">URL API Đĩ ĐŋŅ€ĐžĐŧĐĩĐŊĐĩĐŊ.</string>
<string name="revanced_sb_settings_ie">ИĐŧĐŋĐžŅ€Ņ‚Đ¸Ņ€Đ°ĐŊĐĩ / ЕĐēҁĐŋĐžŅ€Ņ‚Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēĐ¸Ņ‚Đĩ</string>
<string name="revanced_sb_settings_copy">КоĐŋĐ¸Ņ€Đ°Đš</string>
<string name="revanced_sb_settings_ie_sum">Đ’Đ°ŅˆĐ°Ņ‚Đ° JSON ĐēĐžĐŊŅ„Đ¸ĐŗŅƒŅ€Đ°Ņ†Đ¸Ņ ĐŊа SponsorBlock ĐŧĐžĐļĐĩ да ĐąŅŠĐ´Đĩ иĐŧĐŋĐžŅ€Ņ‚Đ¸Ņ€Đ°ĐŊа/ĐĩĐēҁĐŋĐžŅ€Ņ‚Đ¸Ņ€Đ°ĐŊа в ReVanced и Đ´Ņ€ŅƒĐŗĐ¸ ĐŋĐģĐ°Ņ‚Ņ„ĐžŅ€Đŧи ĐŊа SponsorBlock</string>
<string name="revanced_sb_settings_ie_sum_warning">Đ’Đ°ŅˆĐ°Ņ‚Đ° SponsorBlock JSON ĐēĐžĐŊŅ„Đ¸ĐŗŅƒŅ€Đ°Ņ†Đ¸Ņ ĐēĐžŅŅ‚Đž ĐŧĐžĐļĐĩ да ҁĐĩ иĐŧĐŋĐžŅ€Ņ‚Đ¸Ņ€Đ°/ĐĩĐēҁĐŋĐžŅ€Ņ‚Đ¸Ņ€Đ° Đ´Đž ReVanced иĐģи Đ´Ņ€ŅƒĐŗĐ¸ ĐŋĐģĐ°Ņ‚Ņ„ĐžŅ€Đŧи ĐŋĐžĐģĐˇĐ˛Đ°Ņ‰Đ¸ SponsorBlock. ĐĸОва вĐēĐģŅŽŅ‡Đ˛Đ° Đ˛Đ°ŅˆĐ¸Ņ ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēи id. ĐĄĐŋОдĐĩĐģŅĐšŅ‚Đĩ Ņ‚ĐžĐ˛Đ° Ņ€Đ°ĐˇŅƒĐŧĐŊĐž</string>
<string name="revanced_sb_settings_import_successful">ĐĐ°ŅŅ‚Ņ€ĐžĐšĐēĐ¸Ņ‚Đĩ ŅĐ° ҃ҁĐŋĐĩ҈ĐŊĐž Đ˛ŅŠŅŅ‚Đ°ĐŊОвĐĩĐŊи</string>
<string name="revanced_sb_settings_import_failed">НĐĩ҃ҁĐŋĐĩ҈ĐŊĐž иĐŧĐŋĐžŅ€Ņ‚Đ¸Ņ€Đ°ĐŊĐĩ: %s</string>
<string name="revanced_sb_settings_export_failed">НĐĩ҃ҁĐŋĐĩ҈ĐŊĐž ĐĩĐēҁĐŋĐžŅ€Ņ‚Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа %s</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning">Đ’Đ°ŅˆĐ¸Ņ‚Đĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи ĐŊа SponsorBlock ŅŅŠĐ´ŅŠŅ€ĐļĐ°Ņ‚ ĐģĐ¸Ņ‡ĐŊĐž Id.\n\nĐ’Đ°ŅˆĐĩŅ‚Đž Id Đĩ ĐēĐ°Ņ‚Đž ĐŋĐ°Ņ€ĐžĐģа и ĐŊĐĩ Ņ‚Ņ€ŅĐąĐ˛Đ° да ҁĐĩ ҁĐŋОдĐĩĐģŅ ҁ ĐŊиĐēĐžĐŗĐž\n</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning">"Đ’Đ°ŅˆĐ¸Ņ‚Đĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи ŅŅŠĐ´ŅŠŅ€ĐļĐ°Ņ‚ ĐŋОвĐĩŅ€Đ¸Ņ‚ĐĩĐģĐĩĐŊ идĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ĐžŅ€ ĐŊа ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģ ĐŊа SponsorBlock.
ИдĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ĐžŅ€ŅŠŅ‚ ĐŊа ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģŅ Đĩ ĐēĐ°Ņ‚Đž ĐŋĐ°Ņ€ĐžĐģа и ĐŊиĐēĐžĐŗĐ° ĐŊĐĩ Ņ‚Ņ€ŅĐąĐ˛Đ° да ҁĐĩ ҁĐŋОдĐĩĐģŅ.
"</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">НĐĩ ĐŋĐžĐēаСваК ĐžŅ‚ĐŊОвО</string>
<string name="revanced_sb_diff_segments">ĐŸŅ€ĐžĐŧĐĩĐŊи ĐŋОвĐĩĐ´ĐĩĐŊиĐĩŅ‚Đž ĐŊа ŅĐ¸ĐŗĐŧĐĩĐŊŅ‚Đ°</string>
<string name="revanced_sb_segments_sponsor">ĐĄĐŋĐžĐŊŅĐžŅ€</string>
<string name="revanced_sb_segments_sponsor">ĐĄĐŋĐžĐŊŅĐžŅ€Đ¸</string>
<string name="revanced_sb_segments_sponsor_sum">ПĐģĐ°Ņ‚ĐĩĐŊа ĐŋŅ€ĐžĐŧĐžŅ†Đ¸Ņ, ĐŋĐģĐ°Ņ‚ĐĩĐŊи ĐŋŅ€ĐĩĐŋĐžŅ€ŅŠĐēи и Đ´Đ¸Ņ€ĐĩĐēŅ‚ĐŊи Ņ€ĐĩĐēĐģаĐŧи. НĐĩ Са ŅĐ°ĐŧĐžŅ€ĐĩĐēĐģаĐŧа иĐģи ĐąĐĩСĐŋĐģĐ°Ņ‚ĐŊи ĐŋŅ€ĐĩĐŋĐžŅ€ŅŠĐēи Са ĐēĐ°ŅƒĐˇĐ¸/ŅŅŠĐˇĐ´Đ°Ņ‚ĐĩĐģи/҃ĐĩĐąŅĐ°ĐšŅ‚ĐžĐ˛Đĩ/ĐŋŅ€ĐžĐ´ŅƒĐēŅ‚Đ¸, ĐēĐžĐ¸Ņ‚Đž ҁĐĩ Ņ…Đ°Ņ€ĐĩŅĐ˛Đ°Ņ‚ ĐŊа Đ°Đ˛Ņ‚ĐžŅ€Đ°</string>
<string name="revanced_sb_segments_selfpromo">НĐĩĐŋĐģĐ°Ņ‚ĐĩĐŊа/ХаĐŧĐžŅ€ĐĩĐēĐģаĐŧа</string>
<string name="revanced_sb_segments_selfpromo_sum">ПодобĐŊĐž ĐŊа „СĐŋĐžĐŊŅĐžŅ€â€œ, ҁ иСĐēĐģŅŽŅ‡ĐĩĐŊиĐĩ ĐŊа ĐŊĐĩĐŋĐģĐ°Ņ‚ĐĩĐŊĐž иĐģи ŅĐ°ĐŧĐžŅ€ĐĩĐēĐģаĐŧа. ВĐēĐģŅŽŅ‡Đ˛Đ° Ņ€Đ°ĐˇĐ´ĐĩĐģи Са ŅŅ‚ĐžĐēи, Đ´Đ°Ņ€ĐĩĐŊĐ¸Ņ иĐģи иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Ņ Са Ņ‚ĐžĐ˛Đ° ҁ ĐēĐžĐŗĐž ŅĐ° ŅĐ¸ ŅŅŠŅ‚Ņ€ŅƒĐ´ĐŊĐ¸Ņ‡Đ¸Đģи</string>
@@ -884,17 +927,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_skipped_nomusic">ĐŸŅ€ĐžĐŋ҃ҁĐŊĐ°Ņ‚Đ° Ņ‡Đ°ŅŅ‚ ĐąĐĩС ĐŧŅƒĐˇĐ¸Đēа</string>
<string name="revanced_sb_skipped_unsubmitted">ĐŸŅ€ĐžĐŋ҃ҁĐŊĐ°Ņ‚ ĐŊĐĩиСĐŋŅ€Đ°Ņ‚ĐĩĐŊ ҁĐĩĐŗĐŧĐĩĐŊŅ‚</string>
<string name="revanced_sb_skipped_multiple_segments">ĐŸŅ€ĐžĐŋ҃ҁĐŊĐ°Ņ‚Đ¸ ĐŧĐŊĐžĐļĐĩŅŅ‚Đ˛Đž Ņ‡Đ°ŅŅ‚Đ¸</string>
<string name="revanced_sb_skip_automatically">Да ҁĐĩ ĐŋŅ€ĐĩҁĐēĐ°Ņ‡Đ° ĐžŅ‚ ŅĐ°ĐŧĐž ҁĐĩĐąĐĩ ŅĐ¸</string>
<string name="revanced_sb_skip_automatically">ĐĐ˛Ņ‚ĐžĐŧĐ°Ņ‚Đ¸Ņ‡ĐŊĐž ĐŋŅ€ĐžĐŋ҃ҁĐēаĐŊĐĩ</string>
<string name="revanced_sb_skip_automatically_once">ĐĐ˛Ņ‚. ĐŋŅ€ĐžĐŋ҃ҁĐēаĐŊĐĩ вĐĩĐ´ĐŊҊĐļ</string>
<string name="revanced_sb_skip_showbutton">ПоĐēаСваК ĐąŅƒŅ‚ĐžĐŊ Са ĐŋŅ€ĐžĐŋ҃ҁĐēаĐŊĐĩ</string>
<string name="revanced_sb_skip_seekbaronly">ПоĐēаСв. в ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° Са Đ˛Ņ€ĐĩĐŧĐĩ</string>
<string name="revanced_sb_skip_ignore">ИСĐēĐģŅŽŅ‡Đ˛Đ°ĐŊĐĩ</string>
<string name="revanced_sb_skip_ignore">ДĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ</string>
<string name="revanced_sb_submit_failed_invalid">НĐĩ ĐŧĐžĐļĐĩ да ҁĐĩ иСĐŋŅ€Đ°Ņ‚Đ¸ ҁĐĩĐŗĐŧĐĩĐŊŅ‚: %s</string>
<string name="revanced_sb_submit_failed_timeout">SponsorBlock Đ˛Ņ€ĐĩĐŧĐĩĐŊĐŊĐž ĐŊĐĩ Ņ€Đ°ĐąĐžŅ‚Đ¸</string>
<string name="revanced_sb_submit_failed_unknown_error">НĐĩ ĐŧĐžĐŗĐ°Ņ‚ да ҁĐĩ иСĐŋŅ€Đ°Ņ‚ŅŅ‚ ŅĐ¸ĐŗĐŧĐĩĐŊŅ‚Đ¸: (ŅŅ‚Đ°Ņ‚ŅƒŅ:%1$d %2$s)</string>
<string name="revanced_sb_submit_failed_rate_limit">НĐĩ ĐŧĐžĐļĐĩ да ҁĐĩ иСĐŋŅ€Đ°Ņ‚Đ¸ Ņ‡Đ°ŅŅ‚Ņ‚Đ°.\nĐ‘Ņ€ĐžŅŅ‚ Đĩ ĐžĐŗŅ€Đ°ĐŊĐ¸Ņ‡ĐĩĐŊ (ĐĸĐ˛ŅŠŅ€Đ´Đĩ ĐŧĐŊĐžĐŗĐž ĐžŅ‚ ĐĩдиĐŊ и ŅŅŠŅ‰ ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģ, IP)</string>
<string name="revanced_sb_submit_failed_rate_limit">НĐĩ҃ҁĐŋĐĩ҈ĐŊĐž иСĐŋŅ€Đ°Ņ‰Đ°ĐŊĐĩ ĐŊа ҁĐĩĐŗĐŧĐĩĐŊŅ‚. ĐžĐŗŅ€Đ°ĐŊĐ¸Ņ‡ĐĩĐŊа ҁĐēĐžŅ€ĐžŅŅ‚ (Ņ‚Đ˛ŅŠŅ€Đ´Đĩ ĐŧĐŊĐžĐŗĐž ĐžŅ‚ ĐĩдиĐŊ и ŅŅŠŅ‰ ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģ иĐģи IP)</string>
<string name="revanced_sb_submit_failed_forbidden">НĐĩ ĐŧĐžĐļĐĩ да ҁĐĩ иСĐŋŅ€Đ°Ņ‚Đ¸ Ņ‡Đ°ŅŅ‚Ņ‚Đ°: %s</string>
<string name="revanced_sb_submit_failed_duplicate">НĐĩ ĐŧĐžĐļĐĩ да ҁĐĩ иСĐŋŅ€Đ°Ņ‚Đ¸ Ņ‡Đ°ŅŅ‚Ņ‚Đ°.\nВĐĩ҇Đĩ ŅŅŠŅ‰ĐĩŅŅ‚Đ˛ŅƒĐ˛Đ°</string>
<string name="revanced_sb_submit_failed_duplicate">"НĐĩ ĐŧĐžĐļĐĩ да ҁĐĩ иСĐŋŅ€Đ°Ņ‚Đ¸ ҁĐĩĐŗĐŧĐĩĐŊŅ‚ŅŠŅ‚.
ВĐĩ҇Đĩ ŅŅŠŅ‰ĐĩŅŅ‚Đ˛ŅƒĐ˛Đ°"</string>
<string name="revanced_sb_submit_succeeded">Đ§Đ°ŅŅ‚Ņ‚Đ° Đĩ иСĐŋŅ€Đ°Ņ‚ĐĩĐŊа ҃ҁĐŋĐĩ҈ĐŊĐž</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 Đ˛Ņ€ĐĩĐŧĐĩĐŊĐŊĐž ĐŊĐĩ Đĩ ĐŊаĐģĐ¸Ņ‡ĐĩĐŊ (API timed out)</string>
@@ -917,7 +961,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_time_start">Đ§Đ°ŅŅ‚Ņ‚Đ° СаĐŋĐžŅ‡Đ˛Đ° ĐžŅ‚</string>
<string name="revanced_sb_new_segment_time_end">Đ§Đ°ŅŅ‚Ņ‚Đ° ŅĐ˛ŅŠŅ€ŅˆĐ˛Đ° Đ´Đž</string>
<string name="revanced_sb_new_segment_confirm_title">Đ’Ņ€ĐĩĐŧĐĩĐŊĐ°Ņ‚Đ° Ņ‚ĐžŅ‡ĐŊи Đģи ŅĐ°?</string>
<string name="revanced_sb_new_segment_confirm_content">ĐĄĐĩĐŗĐŧĐĩĐŊŅ‚ŅŠŅ‚ ĐŋŅ€ĐžĐ´ŅŠĐģĐļава ĐžŅ‚\n\n%1$s\nĐ´Đž\n%2$s\n\n(%3$s)\n\nĐ“ĐžŅ‚ĐžĐ˛ Đģи Đĩ Са иСĐŋŅ€Đ°Ņ‰Đ°ĐŊĐĩ?</string>
<string name="revanced_sb_new_segment_confirm_content">"ĐĄĐĩĐŗĐŧĐĩĐŊŅ‚ŅŠŅ‚ Đĩ ĐžŅ‚
\"%1$s\"
Đ´Đž
\"%2$s\"
(\"%3$s\")
Đ“ĐžŅ‚ĐžĐ˛Đ¸ Đģи ҁ҂Đĩ да ĐŗĐž иСĐŋŅ€Đ°Ņ‚Đ¸Ņ‚Đĩ?"</string>
<string name="revanced_sb_new_segment_start_is_before_end">ĐĐ°Ņ‡Đ°ĐģĐžŅ‚Đž Ņ‚Ņ€ŅĐąĐ˛Đ° да ĐąŅŠĐ´Đĩ ĐŋŅ€Đĩди ĐēŅ€Đ°Ņ</string>
<string name="revanced_sb_new_segment_mark_locations_first">ĐŸŅŠŅ€Đ˛Đž ĐŧĐ°Ņ€ĐēĐ¸Ņ€Đ°ĐšŅ‚Đĩ двĐĩ ĐŧĐĩŅŅ‚Đ° в ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° Са Đ˛Ņ€ĐĩĐŧĐĩŅ‚Đž</string>
<string name="revanced_sb_new_segment_preview_segment_first">ĐŸŅ€ĐĩĐŗĐģĐĩĐ´ и ĐŋŅ€ĐžĐ˛ĐĩŅ€Đēа ĐŊа Ņ‡Đ°ŅŅ‚Ņ‚Đ° Са ĐŊĐžŅ€ĐŧаĐģĐŊĐž ĐŋŅ€ĐžĐŋ҃ҁĐēаĐŊĐĩ</string>
@@ -928,11 +980,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<!-- Shown in the settings preferences, and translations can be any text length. -->
<string name="revanced_sb_stats_connection_failure">ĐĄŅ‚Đ°Ņ‚Đ¸ŅŅ‚Đ¸ĐēĐ°Ņ‚Đ° Đĩ Đ˛Ņ€Đ°ĐŧĐĩĐŊĐŊĐž ĐŊĐĩĐ´ĐžŅŅ‚ŅŠĐŋĐŊа (API ĐŊĐĩ Ņ€Đ°ĐąĐžŅ‚Đ¸)</string>
<string name="revanced_sb_stats_loading">Đ—Đ°Ņ€ĐĩĐļдаĐŊĐĩ...</string>
<string name="revanced_sb_stats_sb_disabled">SponsorBlock Đĩ иСĐēĐģŅŽŅ‡ĐĩĐŊĐž</string>
<string name="revanced_sb_stats_sb_disabled">SponsorBlock Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊ.</string>
<string name="revanced_sb_stats_username">Đ’Đ°ŅˆĐĩŅ‚Đž ĐŋĐžŅ‚Ņ€ĐĩĐą. иĐŧĐĩ: &lt;b&gt;%s&lt;/b&gt;</string>
<string name="revanced_sb_stats_username_change">ДоĐēĐžŅĐŊĐĩŅ‚Đĩ Са ĐŋŅ€ĐžĐŧŅĐŊа ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēĐžŅ‚Đž иĐŧĐĩ</string>
<string name="revanced_sb_stats_username_change_unknown_error">НĐĩ ĐŧĐžĐļĐĩ да ҁĐĩ ĐŋŅ€ĐžĐŧĐĩĐŊи ĐŋĐžŅ‚Ņ€ĐĩĐą. иĐŧĐĩ: ĐĄŅŠŅŅ‚ĐžŅĐŊиĐĩ: %1$d%2$s</string>
<string name="revanced_sb_stats_username_changed">ĐŸĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēĐžŅ‚Đž иĐŧĐĩ Đĩ ҃ҁĐŋĐĩ҈ĐŊĐž ĐŋŅ€ĐžĐŧĐĩĐŊĐĩĐŊĐž</string>
<string name="revanced_sb_stats_username_changed">ĐŸĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēĐžŅ‚Đž иĐŧĐĩ Đĩ ҃ҁĐŋĐĩ҈ĐŊĐž ĐŋŅ€ĐžĐŧĐĩĐŊĐĩĐŊĐž.</string>
<string name="revanced_sb_stats_reputation">Đ ĐĩĐŋŅƒŅ‚Đ°Ņ†Đ¸ŅŅ‚Đ° ви Đĩ &lt;b&gt;%.2f&lt;/b&gt;</string>
<string name="revanced_sb_stats_submissions">ĐĄŅŠĐˇĐ´Đ°Đ´ĐžŅ…Ņ‚Đĩ &lt;b&gt;%s&lt;/b&gt; Ņ‡Đ°ŅŅ‚Đ¸</string>
<string name="revanced_sb_stats_submissions_sum">ДоĐēĐžŅĐŊĐĩŅ‚Đĩ Ņ‚ŅƒĐē, Са да Đ˛Đ¸Đ´Đ¸Ņ‚Đĩ Đ˛Đ°ŅˆĐ¸Ņ‚Đĩ ҁĐĩĐŗĐŧĐĩĐŊŅ‚Đ¸</string>
@@ -951,15 +1003,19 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_color_reset">Đ’ŅŠĐˇŅŅ‚Đ°ĐŊОви Ņ†Đ˛ĐĩŅ‚Đ°</string>
<string name="revanced_sb_color_invalid">НĐĩваĐģидĐŊа ŅŅ‚ĐžĐšĐŊĐžŅŅ‚ Са Ņ†Đ˛ĐĩŅ‚Đ°</string>
<string name="revanced_sb_reset_color">Đ’ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛ŅĐ˛Đ°ĐŊĐĩ ĐŊа Ņ†Đ˛ŅŅ‚</string>
<string name="revanced_sb_reset">ĐŅƒĐģĐ¸Ņ€Đ°ĐŊĐĩ</string>
<string name="revanced_sb_about">ĐžŅ‚ĐŊĐžŅĐŊĐž</string>
<string name="revanced_sb_reset">Đ’ŅŠĐˇŅŅ‚Đ°ĐŊОви</string>
<string name="revanced_sb_about">За ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐ°Ņ‚Đ°</string>
<string name="revanced_sb_about_api_sum">ДаĐŊĐŊĐ¸Ņ‚Đĩ ŅĐ° ĐŋŅ€ĐĩĐ´ĐžŅŅ‚Đ°Đ˛ĐĩĐŊи ĐžŅ‚ SponsorBlock API. ДоĐēĐžŅĐŊĐĩŅ‚Đĩ Ņ‚ŅƒĐē Са ĐŋОвĐĩ҇Đĩ иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Ņ и Đ¸ĐˇŅ‚ĐĩĐŗĐģĐ¸ŅĐŊĐ¸Ņ</string>
</patch>
<patch id="layout.spoofappversion.spoofAppVersionPatch">
<string name="revanced_spoof_app_version_title">ПодĐģŅŠĐŗĐ˛Đ°ĐŊĐĩ Са вĐĩŅ€ŅĐ¸ŅŅ‚Đ° ĐŊа ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž</string>
<string name="revanced_spoof_app_version_summary_on">ПодĐŋŅ€Đ°Đ˛ĐĩĐŊа вĐĩŅ€ŅĐ¸Ņ</string>
<string name="revanced_spoof_app_version_summary_off">НĐĩ ĐŋОдĐŋŅ€Đ°Đ˛ĐĩĐŊа вĐĩŅ€ŅĐ¸Ņ</string>
<string name="revanced_spoof_app_version_user_dialog_message">ВĐĩŅ€ŅĐ¸ŅŅ‚Đ° ĐŊа ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž YouTube ҉Đĩ ĐąŅŠĐ´Đĩ ĐŋŅ€ĐžĐŧĐĩĐŊĐĩĐŊа ĐŊа ĐŋĐž-ŅŅ‚Đ°Ņ€Đ°.\n\nĐĸОва ҉Đĩ ĐŋŅ€ĐžĐŧĐĩĐŊи Đ˛ŅŠĐŊ҈ĐŊĐ¸Ņ вид и Ņ„ŅƒĐŊĐēŅ†Đ¸Đ¸Ņ‚Đĩ ĐŊа ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž.\n\nĐŊĐž аĐēĐž ĐŋĐž-ĐēҊҁĐŊĐž ҁĐĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°, ҁĐĩ ĐŋŅ€ĐĩĐŋĐžŅ€ŅŠŅ‡Đ˛Đ° да Đ¸ĐˇŅ‡Đ¸ŅŅ‚Đ¸Ņ‚Đĩ даĐŊĐŊĐ¸Ņ‚Đĩ ĐŊа ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž, Са да иСйĐĩĐŗĐŊĐĩŅ‚Đĩ ĐŗŅ€Đĩ҈Đēи в ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēĐ¸Ņ иĐŊŅ‚ĐĩҀ҄ĐĩĐšŅ.</string>
<string name="revanced_spoof_app_version_user_dialog_message">"ВĐĩŅ€ŅĐ¸ŅŅ‚Đ° ĐŊа ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž ҉Đĩ ĐąŅŠĐ´Đĩ Ņ„Đ°ĐģŅˆĐ¸Ņ„Đ¸Ņ†Đ¸Ņ€Đ°ĐŊа ĐŋĐž-ŅŅ‚Đ°Ņ€Đ° вĐĩŅ€ŅĐ¸Ņ ĐŊа YouTube.
ĐĸОва ҉Đĩ ĐŋŅ€ĐžĐŧĐĩĐŊи Đ˛ŅŠĐŊ҈ĐŊĐ¸Ņ вид и Ņ„ŅƒĐŊĐēŅ†Đ¸Đ¸Ņ‚Đĩ ĐŊа ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž, ĐŊĐž ĐŧĐžĐļĐĩ да Đ˛ŅŠĐˇĐŊиĐēĐŊĐ°Ņ‚ ĐŊĐĩиСвĐĩҁ҂ĐŊи ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ‡ĐŊи ĐĩŅ„ĐĩĐēŅ‚Đ¸.
АĐēĐž ĐŋĐž-ĐēҊҁĐŊĐž ĐąŅŠĐ´Đĩ иСĐēĐģŅŽŅ‡ĐĩĐŊĐž, ĐŋŅ€ĐĩĐŋĐžŅ€ŅŠŅ‡Đ¸Ņ‚ĐĩĐģĐŊĐž Đĩ да Đ¸ĐˇŅ‡Đ¸ŅŅ‚Đ¸Ņ‚Đĩ даĐŊĐŊĐ¸Ņ‚Đĩ ĐŊа ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž, Са да ĐŋŅ€ĐĩĐ´ĐžŅ‚Đ˛Ņ€Đ°Ņ‚Đ¸Ņ‚Đĩ ĐŗŅ€Đĩ҈Đēи в ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēĐ¸Ņ иĐŊŅ‚ĐĩҀ҄ĐĩĐšŅ."</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">ПодĐģŅŠĐŗĐ˛Đ°ĐŊĐĩ Са вĐĩŅ€ŅĐ¸ŅŅ‚Đ° ĐŊа</string>
@@ -1012,7 +1068,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_miniplayer_screen_summary">ĐŸŅ€ĐžĐŧĐĩĐŊĐĩŅ‚Đĩ ŅŅ‚Đ¸Đģа ĐŊа ĐŧиĐŊиĐŧĐ¸ĐˇĐ¸Ņ€Đ°ĐŊĐ¸Ņ ĐĩĐēŅ€Đ°ĐŊ Са Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩ</string>
<string name="revanced_miniplayer_type_title">МиĐŊиĐŧĐ¸ĐˇĐ¸Ņ€Đ°ĐŊ Ņ‚Đ¸Đŋ ĐĩĐēŅ€Đ°ĐŊ Са ĐŗĐģĐĩдаĐŊĐĩ</string>
<string name="revanced_miniplayer_type_entry_0">ДĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž</string>
<string name="revanced_miniplayer_type_entry_1">ĐžŅ€Đ¸ĐŗĐ¸ĐŊаĐģ</string>
<string name="revanced_miniplayer_type_entry_1">По ĐŋĐžĐ´Ņ€Đ°ĐˇĐąĐ¸Ņ€Đ°ĐŊĐĩ</string>
<string name="revanced_miniplayer_type_entry_2">МиĐŊиĐŧаĐģĐŊĐž</string>
<string name="revanced_miniplayer_type_entry_3">ĐĸайĐģĐĩŅ‚</string>
<string name="revanced_miniplayer_type_entry_4">МодĐĩŅ€ĐĩĐŊ 1</string>
@@ -1022,19 +1078,28 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_miniplayer_rounded_corners_summary_on">ĐĒĐŗĐģĐ¸Ņ‚Đĩ ŅĐ° СаОйĐģĐĩĐŊи</string>
<string name="revanced_miniplayer_rounded_corners_summary_off">ĐĒĐŗĐģĐ¸Ņ‚Đĩ ŅĐ° ĐŊĐžŅ€ĐŧаĐģĐŊи</string>
<string name="revanced_miniplayer_double_tap_action_title">АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐšŅ‚Đĩ двОКĐŊĐžŅ‚Đž Đ´ĐžĐēĐžŅĐ˛Đ°ĐŊĐĩ и Ņ‰Đ¸ĐŋваĐŊĐĩ Са ĐŋŅ€ĐĩĐžŅ€Đ°ĐˇĐŧĐĩŅ€ŅĐ˛Đ°ĐŊĐĩ</string>
<string name="revanced_miniplayer_double_tap_action_summary_on">ДĐĩĐšŅŅ‚Đ˛Đ¸ĐĩŅ‚Đž ҁ двОКĐŊĐž Đ´ĐžĐēĐžŅĐ˛Đ°ĐŊĐĩ и Ņ‰Đ¸ĐŋваĐŊĐĩ Са ĐŋŅ€ĐĩĐžŅ€Đ°ĐˇĐŧĐĩŅ€ŅĐ˛Đ°ĐŊĐĩ Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž\n\nâ€ĸ ДоĐēĐžŅĐŊĐĩŅ‚Đĩ Đ´Đ˛ŅƒĐēŅ€Đ°Ņ‚ĐŊĐž, Са да ŅƒĐ˛ĐĩĐģĐ¸Ņ‡Đ¸Ņ‚Đĩ Ņ€Đ°ĐˇĐŧĐĩŅ€Đ° ĐŊа ĐŧиĐŊиĐŋĐģĐĩĐšŅŠŅ€Đ°\nâ€ĸ ДоĐēĐžŅĐŊĐĩŅ‚Đĩ два ĐŋŅŠŅ‚Đ¸ ĐžŅ‚ĐŊОвО, Са да Đ˛ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚Đĩ ĐžŅ€Đ¸ĐŗĐ¸ĐŊаĐģĐŊĐ¸Ņ Ņ€Đ°ĐˇĐŧĐĩŅ€</string>
<string name="revanced_miniplayer_double_tap_action_summary_on">"АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž Đĩ двОКĐŊĐž Đ´ĐžĐēĐžŅĐ˛Đ°ĐŊĐĩ и Ņ‰Đ¸ĐŋĐēа Са ĐŋŅ€ĐĩĐžŅ€Đ°ĐˇĐŧĐĩŅ€ŅĐ˛Đ°ĐŊĐĩ
â€ĸ ДвойĐŊĐž Đ´ĐžĐēĐžŅĐ˛Đ°ĐŊĐĩ Са ŅƒĐ˛ĐĩĐģĐ¸Ņ‡Đ°Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€Đ°ĐˇĐŧĐĩŅ€Đ° ĐŊа ĐŧиĐŊи ĐŋĐģĐĩĐšŅŠŅ€Đ°
â€ĸ ДвойĐŊĐž Đ´ĐžĐēĐžŅĐ˛Đ°ĐŊĐĩ ĐžŅ‚ĐŊОвО, Са да Đ˛ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚Đĩ ĐžŅ€Đ¸ĐŗĐ¸ĐŊаĐģĐŊĐ¸Ņ Ņ€Đ°ĐˇĐŧĐĩŅ€"</string>
<string name="revanced_miniplayer_double_tap_action_summary_off">ДвойĐŊĐž Đ´ĐžĐēĐžŅĐ˛Đ°ĐŊĐĩ и Ņ‰Đ¸ĐŋваĐŊĐĩ Са ĐŋŅ€ĐĩĐžŅ€Đ°ĐˇĐŧĐĩŅ€ŅĐ˛Đ°ĐŊĐĩ Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž</string>
<string name="revanced_miniplayer_drag_and_drop_title">Đ Đ°ĐˇŅ€Đĩ҈ĐĩŅ‚Đĩ ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ и ĐŧĐĩҁ҂ĐĩĐŊĐĩ</string>
<string name="revanced_miniplayer_drag_and_drop_summary_on">ПĐģŅŠĐˇĐŗĐ°ĐŊĐĩ и ĐŧĐĩҁ҂ĐĩĐŊĐĩŅ‚Đž Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž\n\nМиĐŊиĐŋĐģĐĩĐšŅŠŅ€ŅŠŅ‚ ĐŧĐžĐļĐĩ да ҁĐĩ ĐŋĐģŅŠĐˇĐŗĐ° Đ´Đž Đ˛ŅĐĩĐēи ŅŠĐŗŅŠĐģ ĐŊа ĐĩĐēŅ€Đ°ĐŊа</string>
<string name="revanced_miniplayer_drag_and_drop_summary_on">"ВĐēĐģŅŽŅ‡ĐĩĐŊĐž Đĩ ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ и Đŋ҃ҁĐēаĐŊĐĩ
МиĐŊи ĐŋĐģĐĩĐšŅŠŅ€ŅŠŅ‚ ĐŧĐžĐļĐĩ да ĐąŅŠĐ´Đĩ ĐŋĐģŅŠĐˇĐŗĐ°ĐŊ Đ´Đž Đ˛ŅĐĩĐēи ŅŠĐŗŅŠĐģ ĐŊа ĐĩĐēŅ€Đ°ĐŊа"</string>
<string name="revanced_miniplayer_drag_and_drop_summary_off">ПĐģŅŠĐˇĐŗĐ°ĐŊĐĩŅ‚Đž и ĐŋŅ€ĐĩĐŧĐĩŅŅ‚Đ˛Đ°ĐŊĐĩŅ‚Đž Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž</string>
<string name="revanced_miniplayer_horizontal_drag_title">АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ…ĐžŅ€Đ¸ĐˇĐžĐŊŅ‚Đ°ĐģĐŊĐž ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ</string>
<string name="revanced_miniplayer_horizontal_drag_summary_on">ЖĐĩŅŅ‚ŅŠŅ‚ Са Ņ…ĐžŅ€Đ¸ĐˇĐžĐŊŅ‚Đ°ĐģĐŊĐž ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊ\n\nМиĐŊиĐŋĐģĐĩĐšŅŠŅ€ŅŠŅ‚ ĐŧĐžĐļĐĩ да ҁĐĩ ĐŋĐģŅŠĐˇĐŗĐ° Đ¸ĐˇĐ˛ŅŠĐŊ ĐĩĐēŅ€Đ°ĐŊа ĐŊаĐģŅĐ˛Đž иĐģи ĐŊĐ°Đ´ŅŅĐŊĐž</string>
<string name="revanced_miniplayer_horizontal_drag_summary_on">"АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊ Đĩ Ņ…ĐžŅ€Đ¸ĐˇĐžĐŊŅ‚Đ°ĐģĐĩĐŊ ĐļĐĩҁ҂ Са ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ
МиĐŊи ĐŋĐģĐĩĐšŅŠŅ€ŅŠŅ‚ ĐŧĐžĐļĐĩ да ĐąŅŠĐ´Đĩ ĐŋĐģŅŠĐˇĐŗĐ°ĐŊ Đ¸ĐˇĐ˛ŅŠĐŊ ĐĩĐēŅ€Đ°ĐŊа ĐŊаĐģŅĐ˛Đž иĐģи ĐŊĐ°Đ´ŅŅĐŊĐž"</string>
<string name="revanced_miniplayer_horizontal_drag_summary_off">ЖĐĩŅŅ‚ŅŠŅ‚ Са Ņ…ĐžŅ€Đ¸ĐˇĐžĐŊŅ‚Đ°ĐģĐŊĐž ĐŋĐģŅŠĐˇĐŗĐ°ĐŊĐĩ Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊ</string>
<string name="revanced_miniplayer_hide_expand_close_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа Са ĐˇĐ°Ņ‚Đ˛Đ°Ņ€ŅĐŊĐĩ</string>
<string name="revanced_miniplayer_hide_expand_close_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐˇĐ°Ņ‚Đ˛Đ°Ņ€ŅĐŊĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_miniplayer_hide_expand_close_summary_off">ПоĐēаСаĐŊ Đĩ ĐąŅƒŅ‚ĐžĐŊ Са ĐˇĐ°Ņ‚Đ˛Đ°Ņ€ŅĐŊĐĩ</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_title">Đ‘ŅƒŅ‚ĐžĐŊи Са Ņ€Đ°ĐˇŅˆĐ¸Ņ€ŅĐ˛Đ°ĐŊĐĩ и ŅĐ˛Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐĩĐēŅ€Đ°ĐŊа</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">Đ‘ŅƒŅ‚ĐžĐŊĐ¸Ņ‚Đĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸\n\nПĐģŅŠĐˇĐŊĐĩŅ‚Đĩ Са Ņ€Đ°ĐˇĐŗŅŠĐ˛Đ°ĐŊĐĩ иĐģи ĐˇĐ°Ņ‚Đ˛Đ°Ņ€ŅĐŊĐĩ</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"Đ‘ŅƒŅ‚ĐžĐŊĐ¸Ņ‚Đĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸
ПĐģŅŠĐˇĐŊĐĩŅ‚Đĩ, Са да Ņ€Đ°ĐˇĐŗŅŠĐŊĐĩŅ‚Đĩ иĐģи ĐˇĐ°Ņ‚Đ˛ĐžŅ€Đ¸Ņ‚Đĩ"</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">Đ‘ŅƒŅ‚ĐžĐŊи Са Ņ€Đ°ĐˇŅˆĐ¸Ņ€ŅĐ˛Đ°ĐŊĐĩ и ŅĐ˛Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐĩĐēŅ€Đ°ĐŊа ŅĐ° видиĐŧи</string>
<string name="revanced_miniplayer_hide_subtext_title">ЕĐēŅ€Đ°ĐŊĐŊи Ņ‚ĐĩĐēŅŅ‚ĐžĐ˛Đĩ, ĐĩŅ‚Đ¸ĐēĐĩŅ‚Đ¸</string>
<string name="revanced_miniplayer_hide_subtext_summary_on">ĐĄĐēŅ€Đ¸Ņ‚Đ¸</string>
@@ -1065,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">ĐŸŅ€ĐĩҁĐēĐžŅ‡ĐĩŅ‚Đĩ ĐˇĐ°ĐąŅ€Đ°ĐŊĐ°Ņ‚Đ° Са ĐˇĐ°Ņ€ĐĩĐļдаĐŊĐĩ ĐŊа Đ¸ĐˇĐžĐąŅ€Đ°ĐļĐĩĐŊиĐĩ</string>
<string name="revanced_bypass_image_region_restrictions_summary_on">ДоĐŧĐĩĐšĐŊŅŠŅ‚ yt4.ggpht.com ҁĐĩ иСĐŋĐžĐģСва Са ĐˇĐ°Ņ€ĐĩĐļдаĐŊĐĩ ĐŊа Đ¸ĐˇĐžĐąŅ€Đ°ĐļĐĩĐŊĐ¸Ņ</string>
<string name="revanced_bypass_image_region_restrictions_summary_off">ĐžŅ€Đ¸ĐŗĐ¸ĐŊаĐģĐŊĐ¸ŅŅ‚ Đ´ĐžĐŧĐĩĐšĐŊ ҁĐĩ иСĐŋĐžĐģСва Са ĐˇĐ°Ņ€ĐĩĐļдаĐŊĐĩ ĐŊа Đ¸ĐˇĐžĐąŅ€Đ°ĐļĐĩĐŊĐ¸Ņ\n\nАĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩŅ‚Đž ĐŊа Ņ‚Đ°ĐˇĐ¸ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēа ĐŧĐžĐļĐĩ да ĐēĐžŅ€Đ¸ĐŗĐ¸Ņ€Đ° ĐˇĐ°Ņ€ĐĩĐļдаĐŊĐĩŅ‚Đž ĐŊа Đ¸ĐˇĐžĐąŅ€Đ°ĐļĐĩĐŊĐ¸Ņ, ĐēĐžĐ¸Ņ‚Đž ŅĐ° ĐąĐģĐžĐēĐ¸Ņ€Đ°ĐŊи в ĐŊŅĐēОи Ņ€ĐĩĐŗĐ¸ĐžĐŊи</string>
<string name="revanced_bypass_image_region_restrictions_summary_off">"ИСĐŋĐžĐģСва ҁĐĩ ĐžŅ€Đ¸ĐŗĐ¸ĐŊаĐģĐĩĐŊ Ņ…ĐžŅŅ‚ ĐŊа Đ¸ĐˇĐžĐąŅ€Đ°ĐļĐĩĐŊĐ¸Ņ
АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩŅ‚Đž ĐŊа Ņ‚ĐžĐ˛Đ° ĐŧĐžĐļĐĩ да ĐŋĐžĐŋŅ€Đ°Đ˛Đ¸ ĐģиĐŋŅĐ˛Đ°Ņ‰Đ¸Ņ‚Đĩ Đ¸ĐˇĐžĐąŅ€Đ°ĐļĐĩĐŊĐ¸Ņ, ĐēĐžĐ¸Ņ‚Đž ŅĐ° ĐąĐģĐžĐēĐ¸Ņ€Đ°ĐŊи в ĐŊŅĐēОи Ņ€ĐĩĐŗĐ¸ĐžĐŊи"</string>
</patch>
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
@@ -1080,7 +1147,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow &amp; ĐžŅ€Đ¸ĐŗĐ¸ĐŊаĐģĐŊи ĐŧиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸</string>
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow &amp; НĐĩĐŋОдвиĐļĐŊи ĐēĐ°Đ´Ņ€Đ¸</string>
<string name="revanced_alt_thumbnail_options_entry_4">НĐĩĐŋОдвиĐļĐŊи ĐēĐ°Đ´Ņ€Đ¸</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow ĐŋŅ€ĐĩĐ´ĐžŅŅ‚Đ°Đ˛Ņ ĐŧиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸ ĐŊа ĐŋŅƒĐąĐģиĐēĐ°Ņ‚Đ° Са видĐĩĐžĐēĐģиĐŋОвĐĩ. ĐĸĐĩСи ĐŧиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸ ҇ĐĩŅŅ‚Đž ŅĐ° ĐŋĐž-ĐŋĐžĐ´Ņ…ĐžĐ´ŅŅ‰Đ¸ ĐžŅ‚ Ņ‚ĐĩСи, ĐŋŅ€ĐĩĐ´ĐžŅŅ‚Đ°Đ˛ĐĩĐŊи ĐžŅ‚ ŅĐ°ĐŧĐ¸Ņ YouTube. АĐēĐž Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž, URL Đ°Đ´Ņ€ĐĩŅĐ¸Ņ‚Đĩ ĐŊа видĐĩĐž ҉Đĩ ĐąŅŠĐ´Đ°Ņ‚ иСĐŋŅ€Đ°Ņ‚ĐĩĐŊи Đ´Đž API ŅŅŠŅ€Đ˛ŅŠŅ€Đ°, ĐąĐĩС да ҁĐĩ иСĐŋŅ€Đ°Ņ‰Đ°Ņ‚ Đ´Ņ€ŅƒĐŗĐ¸ даĐŊĐŊи. АĐēĐž видĐĩĐžĐēĐģиĐŋŅŠŅ‚ ĐŊŅĐŧа ĐŧиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸ ĐŊа DeArrow, ҉Đĩ ҁĐĩ ĐŋĐžĐēаĐļĐ°Ņ‚ иĐģи ĐŊĐĩĐŗĐžĐ˛Đ¸Ņ‚Đĩ ĐžŅ€Đ¸ĐŗĐ¸ĐŊаĐģĐŊи ĐŧиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸, иĐģи ĐˇĐ°ŅĐŊĐĩŅ‚Đ¸ ĐēĐ°Đ´Ņ€Đ¸. ĐŠŅ€Đ°ĐēĐŊĐĩŅ‚Đĩ, Са да ĐŊĐ°ŅƒŅ‡Đ¸Ņ‚Đĩ ĐŋОвĐĩ҇Đĩ Са DeArrow</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow ĐŋŅ€ĐĩĐ´ĐžŅŅ‚Đ°Đ˛Ņ ĐŧиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸ ĐžŅ‚ ĐēŅ€Đ°ŅƒĐ´ŅĐžŅ€ŅĐ¸ĐŊĐŗ Са видĐĩĐžĐēĐģиĐŋОвĐĩ в YouTube. ĐĸĐĩСи ĐŧиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸ ҇ĐĩŅŅ‚Đž ŅĐ° ĐŋĐž-ĐŋĐžĐ´Ņ…ĐžĐ´ŅŅ‰Đ¸ ĐžŅ‚ Ņ‚ĐĩСи, ĐŋŅ€ĐĩĐ´ĐžŅŅ‚Đ°Đ˛ĐĩĐŊи ĐžŅ‚ YouTube
АĐēĐž Đĩ Ņ€Đ°ĐˇŅ€Đĩ҈ĐĩĐŊĐž, URL Đ°Đ´Ņ€ĐĩŅĐ¸Ņ‚Đĩ ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ ҉Đĩ ĐąŅŠĐ´Đ°Ņ‚ иСĐŋŅ€Đ°Ņ‚ĐĩĐŊи Đ´Đž API ŅŅŠŅ€Đ˛ŅŠŅ€Đ° и ĐŊŅĐŧа да ĐąŅŠĐ´Đ°Ņ‚ иСĐŋŅ€Đ°Ņ‰Đ°ĐŊи Đ´Ņ€ŅƒĐŗĐ¸ даĐŊĐŊи. АĐēĐž ĐĩдиĐŊ видĐĩĐžĐēĐģиĐŋ ĐŊŅĐŧа ĐŧиĐŊĐ¸Đ°Ņ‚ŅŽŅ€Đ¸ ĐŊа DeArrow, Ņ‚ĐžĐŗĐ°Đ˛Đ° ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚ ĐžŅ€Đ¸ĐŗĐ¸ĐŊаĐģĐŊĐ¸Ņ‚Đĩ иĐģи ĐˇĐ°ŅĐŊĐĩĐŧĐ°Ņ‰Đ¸Ņ‚Đĩ ĐēĐ°Đ´Ņ€Đ¸
ДоĐēĐžŅĐŊĐĩŅ‚Đĩ Ņ‚ŅƒĐē, Са да ĐŊĐ°ŅƒŅ‡Đ¸Ņ‚Đĩ ĐŋОвĐĩ҇Đĩ Са DeArrow"</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">ПоĐēаСваĐŊĐĩ ĐŊа иСвĐĩŅŅ‚Đ¸Đĩ, аĐēĐž API ĐŊĐĩ Đĩ ĐŊаĐģĐ¸Ņ‡ĐĩĐŊ</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">ПоĐēаСва ҁĐĩ иСвĐĩŅŅ‚Đ¸Đĩ, аĐēĐž DeArrow ĐŊĐĩ Đĩ ĐŊаĐģĐ¸Ņ‡ĐĩĐŊ</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">ПоĐēаСва ҁĐĩ иСвĐĩŅŅ‚Đ¸Đĩ, аĐēĐž DeArrow ĐŊĐĩ Đĩ ĐŊаĐģĐ¸Ņ‡ĐĩĐŊ</string>
@@ -1119,8 +1190,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">Đ›ŅŠĐļĐģиви ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€Đ¸ ĐŊа ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚Đ˛ĐžŅ‚Đž</string>
<string name="revanced_spoof_device_dimensions_summary_on">ПодĐŋŅ€Đ°Đ˛ĐĩĐŊĐ°Ņ‚Đ° Ņ€ĐĩСОĐģŅŽŅ†Đ¸Ņ ĐŊа ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚Đ˛ĐžŅ‚Đž\n\nМоĐļĐĩ да ҁĐĩ ĐžŅ‚ĐēĐģŅŽŅ‡Đ¸ ĐŋĐž-Đ˛Đ¸ŅĐžĐēĐž ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đž ĐŊа видĐĩĐžŅ‚Đž, ĐŊĐž ĐŧĐžĐļĐĩ да иСĐŋĐ¸Ņ‚Đ°Ņ‚Đĩ ĐˇĐ°ŅĐ¸Ņ‡Đ°ĐŊĐĩ ĐŋŅ€Đ¸ Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩ ĐŊа видĐĩĐž, ĐŋĐž-ĐģĐžŅˆ ĐļĐ¸Đ˛ĐžŅ‚ ĐŊа ĐąĐ°Ņ‚ĐĩŅ€Đ¸ŅŅ‚Đ° и ĐŊĐĩиСвĐĩҁ҂ĐŊи ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ‡ĐŊи ĐĩŅ„ĐĩĐēŅ‚Đ¸</string>
<string name="revanced_spoof_device_dimensions_summary_off">Đ ĐĩСОĐģŅŽŅ†Đ¸ŅŅ‚Đ° ĐŊа ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚Đ˛ĐžŅ‚Đž ĐŊĐĩ Đĩ ĐŋОдĐŋŅ€Đ°Đ˛ĐĩĐŊа\n\nАĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩŅ‚Đž ĐŊа Ņ‚ĐžĐ˛Đ° ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐžŅ‚ĐēĐģŅŽŅ‡Đ¸ ĐŋĐž-Đ˛Đ¸ŅĐžĐēĐž ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đž ĐŊа видĐĩĐžŅ‚Đž</string>
<string name="revanced_spoof_device_dimensions_summary_on">"РаСĐŧĐĩŅ€Đ¸Ņ‚Đĩ ĐŊа ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚Đ˛ĐžŅ‚Đž ŅĐ° Ņ„Đ°ĐģŅˆĐ¸Ņ„Đ¸Ņ†Đ¸Ņ€Đ°ĐŊи
По-Đ˛Đ¸ŅĐžĐēĐ¸Ņ‚Đĩ видĐĩĐž ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đ° ĐŧĐžĐļĐĩ да ĐąŅŠĐ´Đ°Ņ‚ ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊи, ĐŊĐž ĐŧĐžĐļĐĩ да иСĐŋĐ¸Ņ‚Đ°Ņ‚Đĩ СаĐĩĐēваĐŊĐĩ ĐŊа видĐĩĐžĐ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩ, ĐŋĐž-ĐģĐžŅˆĐ° Đ¸ĐˇĐ´Ņ€ŅŠĐļĐģĐ¸Đ˛ĐžŅŅ‚ ĐŊа ĐąĐ°Ņ‚ĐĩŅ€Đ¸ŅŅ‚Đ° и ĐŊĐĩиСвĐĩҁ҂ĐŊи ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ‡ĐŊи ĐĩŅ„ĐĩĐēŅ‚Đ¸"</string>
<string name="revanced_spoof_device_dimensions_summary_off">"РаСĐŧĐĩŅ€Đ¸Ņ‚Đĩ ĐŊа ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚Đ˛ĐžŅ‚Đž ĐŊĐĩ ŅĐ° Ņ„Đ°ĐģŅˆĐ¸Ņ„Đ¸Ņ†Đ¸Ņ€Đ°ĐŊи
АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩŅ‚Đž ĐŊа Ņ‚ĐžĐ˛Đ° ĐŧĐžĐļĐĩ да ĐžŅ‚ĐēĐģŅŽŅ‡Đ¸ ĐŋĐž-Đ˛Đ¸ŅĐžĐēи видĐĩĐž ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đ°"</string>
<string name="revanced_spoof_device_dimensions_user_dialog_message">Đ Đ°ĐˇŅ€ĐĩŅˆĐ°Đ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа Ņ‚ĐžĐ˛Đ° ĐŧĐžĐļĐĩ да ĐŋŅ€Đ¸Ņ‡Đ¸ĐŊи ĐŋŅ€ĐĩĐēŅŠŅĐ˛Đ°ĐŊĐĩ ĐŊа Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩŅ‚Đž ĐŊа видĐĩĐž, вĐģĐžŅˆĐĩĐŊ ĐļĐ¸Đ˛ĐžŅ‚ ĐŊа ĐąĐ°Ņ‚ĐĩŅ€Đ¸ŅŅ‚Đ° и ĐŊĐĩиСвĐĩҁ҂ĐŊи ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ‡ĐŊи ĐĩŅ„ĐĩĐēŅ‚Đ¸.</string>
</patch>
<patch id="misc.gms.gmsCoreSupportResourcePatch">
@@ -1147,6 +1222,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_disable_zoom_haptics_summary_on">Đ’Đ¸ĐąŅ€Đ°Ņ†Đ¸Đ¸Ņ‚Đĩ ŅĐ° Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊи</string>
<string name="revanced_disable_zoom_haptics_summary_off">Đ’Đ¸ĐąŅ€Đ°Ņ†Đ¸Đ¸Ņ‚Đĩ ŅĐ° аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊи</string>
</patch>
<patch id="video.audio.forceOriginalAudioPatch">
<string name="revanced_force_original_audio_title">ĐŸŅ€Đ¸ĐŊŅƒĐ´Đ¸Ņ‚ĐĩĐģĐŊĐž ĐžŅ€Đ¸ĐŗĐ¸ĐŊаĐģĐŊĐž Đ°ŅƒĐ´Đ¸Đž</string>
<string name="revanced_force_original_audio_summary_on">ИСĐŋĐžĐģСваĐŊĐĩ ĐŊа ĐžŅ€Đ¸ĐŗĐ¸ĐŊаĐģĐŊĐž Đ°ŅƒĐ´Đ¸Đž</string>
<string name="revanced_force_original_audio_summary_off">ИСĐŋĐžĐģСваĐŊĐĩ ĐŊа Đ°ŅƒĐ´Đ¸Đž ĐŋĐž ĐŋĐžĐ´Ņ€Đ°ĐˇĐąĐ¸Ņ€Đ°ĐŊĐĩ</string>
</patch>
<patch id="video.quality.rememberVideoQualityPatch">
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
<string name="revanced_video_quality_default_entry_1">ĐĐ˛Ņ‚Đž</string>
@@ -1161,7 +1241,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
<string name="revanced_playback_speed_dialog_button_title">ПоĐēаСваĐŊĐĩ ĐąŅƒŅ‚ĐžĐŊ Са ҁĐēĐžŅ€ĐžŅŅ‚</string>
<string name="revanced_playback_speed_dialog_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_playback_speed_dialog_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊа \"ĐŖĐ˛ĐĩĐ´ĐžĐŧи ĐŧĐĩ\" ҁĐĩ ĐŋĐžĐēаСва.</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
@@ -1170,8 +1250,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_custom_speed_menu_summary_off">МĐĩĐŊŅŽŅ‚Đž Са ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēа ҁĐēĐžŅ€ĐžŅŅ‚ ĐŊĐĩ ҁĐĩ ĐŋĐžĐēаСва</string>
<string name="revanced_custom_playback_speeds_title">ПĐĩŅ€ŅĐžĐŊаĐģĐ¸ĐˇĐ¸Ņ€Đ°ĐŊи ҁĐēĐžŅ€ĐžŅŅ‚Đ¸ ĐŊа Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩ</string>
<string name="revanced_custom_playback_speeds_summary">ДобавĐĩŅ‚Đĩ иĐģи ĐŋŅ€ĐžĐŧĐĩĐŊĐĩŅ‚Đĩ ҁĐēĐžŅ€ĐžŅŅ‚a ĐŊа Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩ</string>
<string name="revanced_custom_playback_speeds_invalid">ПĐĩŅ€ŅĐžĐŊаĐģĐŊĐ°Ņ‚Đ° ҁĐēĐžŅ€ĐžŅŅ‚ Ņ‚Ņ€ŅĐąĐ˛Đ° да Đĩ ĐŋĐž-ĐŧаĐģĐēа ĐžŅ‚ %s. ИСĐŋĐžĐģСваĐŊĐĩ ĐŊа ŅŅ‚ĐžĐšĐŊĐžŅŅ‚Đ¸ ĐŋĐž ĐŋĐžĐ´Ņ€Đ°ĐˇĐąĐ¸Ņ€Đ°ĐŊĐĩ.</string>
<string name="revanced_custom_playback_speeds_parse_exception">НĐĩваĐģидĐŊи ĐŋĐĩŅ€ŅĐžĐŊаĐģĐ¸ĐˇĐ¸Ņ€Đ°ĐŊи ҁĐēĐžŅ€ĐžŅŅ‚Đ¸ ĐŊа Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩ. ИСĐŋĐžĐģСваĐŊĐĩ ĐŊа ŅŅ‚ĐžĐšĐŊĐžŅŅ‚Đ¸ ĐŋĐž ĐŋĐžĐ´Ņ€Đ°ĐˇĐąĐ¸Ņ€Đ°ĐŊĐĩ.</string>
<string name="revanced_custom_playback_speeds_invalid">ПĐĩŅ€ŅĐžĐŊаĐģĐ¸ĐˇĐ¸Ņ€Đ°ĐŊĐ¸Ņ‚Đĩ ҁĐēĐžŅ€ĐžŅŅ‚Đ¸ Ņ‚Ņ€ŅĐąĐ˛Đ° да ŅĐ° ĐŋĐž-ĐŧаĐģĐēи ĐžŅ‚ %s</string>
<string name="revanced_custom_playback_speeds_parse_exception">НĐĩваĐģидĐŊи ĐŋĐĩŅ€ŅĐžĐŊаĐģĐ¸ĐˇĐ¸Ņ€Đ°ĐŊи ҁĐēĐžŅ€ĐžŅŅ‚Đ¸ ĐŊа Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩ</string>
<string name="revanced_custom_playback_speeds_auto">ĐĐ˛Ņ‚Đž</string>
</patch>
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
@@ -1196,18 +1276,78 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_screen_summary">ПодĐŋŅ€Đ°Đ˛ĐĩŅ‚Đĩ ĐēĐģиĐĩĐŊ҂ҁĐēĐ¸Ņ‚Đĩ видĐĩĐž ĐŋĐžŅ‚ĐžŅ†Đ¸, Са да ĐŋŅ€ĐĩĐ´ĐžŅ‚Đ˛Ņ€Đ°Ņ‚Đ¸Ņ‚Đĩ ĐŋŅ€ĐžĐąĐģĐĩĐŧи ҁ Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩŅ‚Đž</string>
<string name="revanced_spoof_video_streams_title">ПодĐŋŅ€Đ°Đ˛ŅĐŊĐĩ ĐŊа видĐĩĐž ĐŋĐžŅ‚ĐžŅ†Đ¸</string>
<string name="revanced_spoof_video_streams_summary_on">ВидĐĩĐž ĐŋĐžŅ‚ĐžŅ†Đ¸Ņ‚Đĩ ŅĐ° ĐŋОдĐŋŅ€Đ°Đ˛ĐĩĐŊи</string>
<string name="revanced_spoof_video_streams_summary_off">ВидĐĩĐž ĐŋĐžŅ‚ĐžŅ†Đ¸Ņ‚Đĩ ĐŊĐĩ ŅĐ° ĐŋОдĐŋŅ€Đ°Đ˛ĐĩĐŊи\n\nĐ’ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩŅ‚Đž ĐŊа видĐĩĐž ĐŧĐžĐļĐĩ да ĐŊĐĩ Ņ€Đ°ĐąĐžŅ‚Đ¸</string>
<string name="revanced_spoof_video_streams_summary_off">"ĐŸĐžŅ‚ĐžŅ†Đ¸Ņ‚Đĩ ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩ ĐŊĐĩ ŅĐ° Ņ„Đ°ĐģŅˆĐ¸Ņ„Đ¸Ņ†Đ¸Ņ€Đ°ĐŊи
Đ’ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩŅ‚Đž ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩ ĐŧĐžĐļĐĩ да ĐŊĐĩ Ņ€Đ°ĐąĐžŅ‚Đ¸"</string>
<string name="revanced_spoof_video_streams_user_dialog_message">ДĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩŅ‚Đž ĐŊа Ņ‚Đ°ĐˇĐ¸ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēа ҉Đĩ дОвĐĩĐ´Đĩ Đ´Đž ĐŋŅ€ĐžĐąĐģĐĩĐŧи ҁ Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩŅ‚Đž ĐŊа видĐĩĐž.</string>
<string name="revanced_spoof_video_streams_client_title">КĐģиĐĩĐŊŅ‚ ĐŋĐž ĐŋĐžĐ´Ņ€Đ°ĐˇĐąĐ¸Ņ€Đ°ĐŊĐĩ</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">ĐŸŅ€Đ¸ĐŊŅƒĐ´Đ¸Ņ‚ĐĩĐģĐŊĐž AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ВидĐĩĐžĐēОдĐĩĐēа Đĩ AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ВидĐĩĐžĐēОдĐĩĐēа Đĩ VP9 иĐģи AV1</string>
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">Đ’Đ°ŅˆĐĩŅ‚Đž ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚Đ˛Đž ĐŊŅĐŧа Ņ…Đ°Ņ€Đ´ŅƒĐĩŅ€ĐŊĐž VP9 Đ´ĐĩĐēĐžĐ´Đ¸Ņ€Đ°ĐŊĐĩ и Ņ‚Đ°ĐˇĐ¸ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēа виĐŊĐ°ĐŗĐ¸ Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊа, ĐēĐžĐŗĐ°Ņ‚Đž Đĩ аĐēŅ‚Đ¸Đ˛ĐŊĐž ĐŋОдĐŋŅ€Đ°Đ˛ŅĐŊĐĩ ĐŊа ĐēĐģиĐĩĐŊŅ‚Đ°</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩŅ‚Đž ĐŊа Ņ‚ĐžĐ˛Đ° ĐŧĐžĐļĐĩ да ĐŋĐžĐ´ĐžĐąŅ€Đ¸ ĐļĐ¸Đ˛ĐžŅ‚Đ° ĐŊа ĐąĐ°Ņ‚ĐĩŅ€Đ¸ŅŅ‚Đ° и да ĐēĐžŅ€Đ¸ĐŗĐ¸Ņ€Đ° ĐŋŅ€ĐĩĐēŅŠŅĐ˛Đ°ĐŊĐ¸ŅŅ‚Đ° ĐŋŅ€Đ¸ Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩ.\n\nAVC иĐŧа ĐŧаĐēŅĐ¸ĐŧаĐģĐŊа Ņ€Đ°ĐˇĐ´ĐĩĐģĐ¸Ņ‚ĐĩĐģĐŊа ҁĐŋĐžŅĐžĐąĐŊĐžŅŅ‚ ĐžŅ‚ 1080p и Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩŅ‚Đž ĐŊа видĐĩĐž ҉Đĩ иСĐŋĐžĐģСва ĐŋОвĐĩ҇Đĩ иĐŊŅ‚ĐĩŅ€ĐŊĐĩŅ‚ даĐŊĐŊи ĐžŅ‚ VP9 иĐģи AV1.</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ВидĐĩĐž ĐēОдĐĩĐē ĐŋĐž ĐŋĐžĐ´Ņ€Đ°ĐˇĐąĐ¸Ņ€Đ°ĐŊĐĩ AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ВидĐĩĐž ĐēОдĐĩĐēŅŠŅ‚ ҁĐĩ ĐžĐŋŅ€ĐĩĐ´ĐĩĐģŅ Đ°Đ˛Ņ‚ĐžĐŧĐ°Ņ‚Đ¸Ņ‡ĐŊĐž</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩŅ‚Đž ĐŊа Ņ‚ĐžĐ˛Đ° ĐŧĐžĐļĐĩ да ĐŋĐžĐ´ĐžĐąŅ€Đ¸ ĐļĐ¸Đ˛ĐžŅ‚Đ° ĐŊа ĐąĐ°Ņ‚ĐĩŅ€Đ¸ŅŅ‚Đ° и да ĐŋĐžĐŋŅ€Đ°Đ˛Đ¸ СаĐĩĐēваĐŊĐĩŅ‚Đž ĐŊа Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩŅ‚Đž.
AVC иĐŧа ĐŧаĐēŅĐ¸ĐŧаĐģĐŊа Ņ€Đ°ĐˇĐ´ĐĩĐģĐ¸Ņ‚ĐĩĐģĐŊа ҁĐŋĐžŅĐžĐąĐŊĐžŅŅ‚ ĐžŅ‚ 1080p, Đ°ŅƒĐ´Đ¸Đž ĐēОдĐĩĐēŅŠŅ‚ Opus ĐŊĐĩ Đĩ ĐŊаĐģĐ¸Ņ‡ĐĩĐŊ, а видĐĩĐžĐ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩŅ‚Đž ҉Đĩ иСĐŋĐžĐģСва ĐŋОвĐĩ҇Đĩ иĐŊŅ‚ĐĩŅ€ĐŊĐĩŅ‚ даĐŊĐŊи ĐžŅ‚ VP9 иĐģи AV1."</string>
<string name="revanced_spoof_video_streams_about_ios_title">CŅ‚Ņ€Đ°ĐŊĐ¸Ņ‡ĐŊи ĐĩŅ„ĐĩĐēŅ‚Đ¸ ĐžŅ‚ ĐŋОдĐŧŅĐŊĐ°Ņ‚Đ° ĐŊа iOS</string>
<string name="revanced_spoof_video_streams_about_ios_summary">â€ĸ ПĐģĐ°Ņ‚ĐĩĐŊĐ¸Ņ‚Đĩ видĐĩĐžĐēĐģиĐŋОвĐĩ Са Đ´ĐĩŅ†Đ° ĐŧĐžĐļĐĩ да ĐŊĐĩ ҁĐĩ Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļĐ´Đ°Ņ‚\nâ€ĸ ĐŸĐžŅ‚ĐžŅ†Đ¸Ņ‚Đĩ ĐŊа ĐļивО СаĐŋĐžŅ‡Đ˛Đ°Ņ‚ ĐžŅ‚ĐŊĐ°Ņ‡Đ°ĐģĐž\nâ€ĸ ВидĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ ĐŧĐžĐļĐĩ да ĐˇĐ°Đ˛ŅŠŅ€ŅˆĐ˛Đ°Ņ‚ 1 ҁĐĩĐē҃ĐŊда ĐŋĐž-Ņ€Đ°ĐŊĐž\nâ€ĸ ĐŅĐŧа Đ°ŅƒĐ´Đ¸ĐžĐēОдĐĩĐē Opus</string>
<string name="revanced_spoof_video_streams_about_ios_summary">"â€ĸ Đ’ŅŠĐˇĐŧĐžĐļĐŊĐž Đĩ Ņ‡Đ°ŅŅ‚ĐŊĐ¸Ņ‚Đĩ Đ´Đĩ҂ҁĐēи видĐĩĐžĐēĐģиĐŋОвĐĩ да ĐŊĐĩ ҁĐĩ Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļĐ´Đ°Ņ‚
â€ĸ ВидĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ ĐˇĐ°Đ˛ŅŠŅ€ŅˆĐ˛Đ°Ņ‚ 1 ҁĐĩĐē҃ĐŊда ĐŋĐž-Ņ€Đ°ĐŊĐž"</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">ĐĄŅ‚Ņ€Đ°ĐŊĐ¸Ņ‡ĐŊи ĐĩŅ„ĐĩĐēŅ‚Đ¸ ĐžŅ‚ ĐŋОдĐŋŅ€Đ°Đ˛ŅĐŊĐĩ ĐŊа Android VR</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">â€ĸ ДĐĩ҂ҁĐēĐ¸Ņ‚Đĩ видĐĩĐžĐēĐģиĐŋОвĐĩ ĐŧĐžĐļĐĩ да ĐŊĐĩ ҁĐĩ Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļĐ´Đ°Ņ‚\nâ€ĸ ЛиĐŋŅĐ˛Đ° ĐŧĐĩĐŊŅŽŅ‚Đž Са Đ°ŅƒĐ´Đ¸Đž СаĐŋĐ¸Ņ\nâ€ĸ НĐĩ Đĩ ĐŊаĐģĐ¸Ņ‡ĐŊа ŅŅ‚Đ°ĐąĐ¸ĐģĐŊа ŅĐ¸Đģа ĐŊа ĐˇĐ˛ŅƒĐēа</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">"â€ĸ ДĐĩ҂ҁĐēĐ¸Ņ‚Đĩ видĐĩĐžĐēĐģиĐŋОвĐĩ ĐŧĐžĐļĐĩ да ĐŊĐĩ ҁĐĩ Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļĐ´Đ°Ņ‚
â€ĸ ĐŸŅ€ĐĩдаваĐŊĐ¸ŅŅ‚Đ° ĐŊа ĐļивО СаĐŋĐžŅ‡Đ˛Đ°Ņ‚ ĐžŅ‚ ĐŊĐ°Ņ‡Đ°ĐģĐžŅ‚Đž
â€ĸ ВидĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ ĐˇĐ°Đ˛ŅŠŅ€ŅˆĐ˛Đ°Ņ‚ 1 ҁĐĩĐē҃ĐŊда ĐŋĐž-Ņ€Đ°ĐŊĐž"</string>
<string name="revanced_spoof_video_streams_language_title">ЕзиĐē ĐŋĐž ĐŋĐžĐ´Ņ€Đ°ĐˇĐąĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа Đ°ŅƒĐ´Đ¸Đž ĐŋĐžŅ‚ĐžĐēа</string>
<string name="revanced_spoof_video_streams_language_DEFAULT">ЕзиĐē ĐŊа ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž</string>
<string name="revanced_spoof_video_streams_language_AR">ĐŅ€Đ°ĐąŅĐēи</string>
<string name="revanced_spoof_video_streams_language_AZ">АСĐĩŅ€ĐąĐ°ĐšĐ´ĐļаĐŊҁĐēи</string>
<string name="revanced_spoof_video_streams_language_BG">Đ‘ŅŠĐģĐŗĐ°Ņ€ŅĐēи</string>
<string name="revanced_spoof_video_streams_language_BN">БĐĩĐŊĐŗĐ°ĐģҁĐēи</string>
<string name="revanced_spoof_video_streams_language_CA">ĐšĐ°Ņ‚Đ°ĐģĐžĐŊҁĐēи</string>
<string name="revanced_spoof_video_streams_language_CS">ЧĐĩ҈Đēи</string>
<string name="revanced_spoof_video_streams_language_DA">Đ”Đ°Ņ‚ŅĐēи</string>
<string name="revanced_spoof_video_streams_language_DE">НĐĩĐŧҁĐēи</string>
<string name="revanced_spoof_video_streams_language_EL">Đ“Ņ€ŅŠŅ†Đēи</string>
<string name="revanced_spoof_video_streams_language_EN">АĐŊĐŗĐģĐ¸ĐšŅĐēи</string>
<string name="revanced_spoof_video_streams_language_ES">Đ˜ŅĐŋаĐŊҁĐēи</string>
<string name="revanced_spoof_video_streams_language_ET">Đ•ŅŅ‚ĐžĐŊҁĐēи</string>
<string name="revanced_spoof_video_streams_language_FA">ПĐĩŅ€ŅĐ¸ĐšŅĐēи</string>
<string name="revanced_spoof_video_streams_language_FI">ФиĐŊĐģаĐŊĐ´ŅĐēи</string>
<string name="revanced_spoof_video_streams_language_FR">Đ¤Ņ€ĐĩĐŊҁĐēи</string>
<string name="revanced_spoof_video_streams_language_GU">Đ“ŅƒĐ´ĐļĐ°Ņ€Đ°Ņ‚Đ¸</string>
<string name="revanced_spoof_video_streams_language_HI">ĐĨиĐŊди</string>
<string name="revanced_spoof_video_streams_language_HR">ĐĨŅŠŅ€Đ˛Đ°Ņ‚ŅĐēи</string>
<string name="revanced_spoof_video_streams_language_HU">ĐŖĐŊĐŗĐ°Ņ€ŅĐēи</string>
<string name="revanced_spoof_video_streams_language_ID">ИĐŊĐ´ĐžĐŊĐĩĐˇĐ¸ĐšŅĐēи</string>
<string name="revanced_spoof_video_streams_language_IT">Đ˜Ņ‚Đ°ĐģиаĐŊҁĐēи</string>
<string name="revanced_spoof_video_streams_language_JA">Đ¯ĐŋĐžĐŊҁĐēи</string>
<string name="revanced_spoof_video_streams_language_KK">ĐšĐ°ĐˇĐ°Ņ…ŅĐēи</string>
<string name="revanced_spoof_video_streams_language_KO">ĐšĐžŅ€ĐĩĐšŅĐēи</string>
<string name="revanced_spoof_video_streams_language_LT">Đ›Đ¸Ņ‚ĐžĐ˛ŅĐēи</string>
<string name="revanced_spoof_video_streams_language_LV">Đ›Đ°Ņ‚Đ˛Đ¸ĐšŅĐēи</string>
<string name="revanced_spoof_video_streams_language_MK">МаĐēĐĩĐ´ĐžĐŊҁĐēи</string>
<string name="revanced_spoof_video_streams_language_MN">МоĐŊĐŗĐžĐģҁĐēи</string>
<string name="revanced_spoof_video_streams_language_MR">ĐœĐ°Ņ€Đ°Ņ‚Ņ…Đ¸</string>
<string name="revanced_spoof_video_streams_language_MS">МаĐģĐ°ĐšŅĐēи</string>
<string name="revanced_spoof_video_streams_language_MY">Đ‘Đ¸Ņ€ĐŧаĐŊҁĐēи</string>
<string name="revanced_spoof_video_streams_language_NL">ĐĨĐžĐģаĐŊĐ´ŅĐēи</string>
<string name="revanced_spoof_video_streams_language_OR">ĐžŅ€Đ¸Ņ</string>
<string name="revanced_spoof_video_streams_language_PA">ПĐĩĐŊĐ´ĐļĐ°ĐąŅĐēи</string>
<string name="revanced_spoof_video_streams_language_PL">ПоĐģҁĐēи</string>
<string name="revanced_spoof_video_streams_language_PT_BR">ĐŸĐžŅ€Ņ‚ŅƒĐŗĐ°ĐģҁĐēи (Đ‘Ņ€Đ°ĐˇĐ¸ĐģĐ¸Ņ)</string>
<string name="revanced_spoof_video_streams_language_PT_PT">ĐŸĐžŅ€Ņ‚ŅƒĐŗĐ°ĐģҁĐēи (ĐŸĐžŅ€Ņ‚ŅƒĐŗĐ°ĐģĐ¸Ņ)</string>
<string name="revanced_spoof_video_streams_language_RO">Đ ŅƒĐŧҊĐŊҁĐēи</string>
<string name="revanced_spoof_video_streams_language_RU">Đ ŅƒŅĐēи</string>
<string name="revanced_spoof_video_streams_language_SK">ĐĄĐģĐžĐ˛Đ°ŅˆĐēи</string>
<string name="revanced_spoof_video_streams_language_SL">ĐĄĐģОвĐĩĐŊҁĐēи</string>
<string name="revanced_spoof_video_streams_language_SR">ĐĄŅ€ŅŠĐąŅĐēи</string>
<string name="revanced_spoof_video_streams_language_SV">ШвĐĩĐ´ŅĐēи</string>
<string name="revanced_spoof_video_streams_language_SW">ĐĄŅƒĐ°Ņ…Đ¸Đģи</string>
<string name="revanced_spoof_video_streams_language_TA">ĐĸаĐŧиĐģҁĐēи</string>
<string name="revanced_spoof_video_streams_language_TE">ĐĸĐĩĐģŅƒĐŗŅƒ</string>
<string name="revanced_spoof_video_streams_language_TH">ĐĸаКĐģаĐŊĐ´ŅĐēи</string>
<string name="revanced_spoof_video_streams_language_TR">ĐĸŅƒŅ€ŅĐēи</string>
<string name="revanced_spoof_video_streams_language_UK">ĐŖĐēŅ€Đ°Đ¸ĐŊҁĐēи</string>
<string name="revanced_spoof_video_streams_language_UR">ĐŖŅ€Đ´Ņƒ</string>
<string name="revanced_spoof_video_streams_language_VI">ВиĐĩŅ‚ĐŊаĐŧҁĐēи</string>
<string name="revanced_spoof_video_streams_language_ZH">ĐšĐ¸Ņ‚Đ°ĐšŅĐēи</string>
</patch>
</app>
<app id="twitch">
@@ -1217,8 +1357,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_block_audio_ads_summary_off">ĐŅƒĐ´Đ¸Đž Ņ€ĐĩĐēĐģаĐŧĐ°Ņ‚Đ° Đĩ Ņ€Đ°ĐˇĐąĐģĐžĐēĐ¸Ņ€Đ°ĐŊа</string>
</patch>
<patch id="ad.embedded.embeddedAdsPatch">
<string name="revanced_embedded_ads_service_unavailable">%s Đĩ ĐŊĐĩĐ´ĐžŅŅ‚ŅŠĐŋĐĩĐŊ. МоĐļĐĩ да ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚ Ņ€ĐĩĐēĐģаĐŧи. ОĐŋĐ¸Ņ‚Đ°ĐšŅ‚Đĩ Đ´Ņ€ŅƒĐŗĐ° ҃ҁĐģŅƒĐŗĐ° Са ĐąĐģĐžĐēĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ€ĐĩĐēĐģаĐŧи.</string>
<string name="revanced_embedded_ads_service_failed">%s ŅŅŠŅ€Đ˛ŅŠŅ€ŅŠŅ‚ Đ˛ŅŠŅ€ĐŊа ĐŗŅ€Đĩ҈Đēа. МоĐļĐĩ да ҁĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ‚ Ņ€ĐĩĐēĐģаĐŧи. ОĐŋĐ¸Ņ‚Đ°ĐšŅ‚Đĩ да ĐŋŅ€ĐĩвĐēĐģŅŽŅ‡Đ¸Ņ‚Đĩ Đ´Ņ€ŅƒĐŗĐ° ҃ҁĐģŅƒĐŗĐ° Са ĐąĐģĐžĐēĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ€ĐĩĐēĐģаĐŧи.</string>
<string name="revanced_embedded_ads_service_unavailable">%s ĐŊĐĩ Đĩ ĐŊаĐģĐ¸Ņ‡ĐĩĐŊ, ĐŧĐžĐļĐĩ да ҁĐĩ ĐŋĐžŅĐ˛ŅŅ‚ Ņ€ĐĩĐēĐģаĐŧи. ОĐŋĐ¸Ņ‚Đ°ĐšŅ‚Đĩ да ĐŋŅ€ĐžĐŧĐĩĐŊĐ¸Ņ‚Đĩ ҃ҁĐģŅƒĐŗĐ°Ņ‚Đ° Са ĐąĐģĐžĐēĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ€ĐĩĐēĐģаĐŧи в ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēĐ¸Ņ‚Đĩ.</string>
<string name="revanced_embedded_ads_service_failed">%s Đ˛ŅŠŅ€ĐŊа ĐŗŅ€Đĩ҈Đēа, ĐŧĐžĐļĐĩ да ҁĐĩ ĐŋĐžŅĐ˛ŅŅ‚ Ņ€ĐĩĐēĐģаĐŧи. ОĐŋĐ¸Ņ‚Đ°ĐšŅ‚Đĩ да ĐŋŅ€ĐžĐŧĐĩĐŊĐ¸Ņ‚Đĩ ҃ҁĐģŅƒĐŗĐ°Ņ‚Đ° Са ĐąĐģĐžĐēĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ€ĐĩĐēĐģаĐŧи в ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēĐ¸Ņ‚Đĩ.</string>
<string name="revanced_block_embedded_ads_title">БĐģĐžĐēĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа Đ˛ĐŗŅ€Đ°Đ´ĐĩĐŊи видĐĩĐžŅ€ĐĩĐēĐģаĐŧи</string>
<string name="revanced_block_embedded_ads_entry_1">ДĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž</string>
<string name="revanced_block_embedded_ads_entry_2">Luminous ĐŋŅ€ĐžĐēŅĐ¸</string>

View File

@@ -1,34 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
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">
@@ -36,6 +25,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_check_environment_failed_title">āĻšā§‡āĻ• āĻĢ⧇āχāϞ āĻ•āϰ⧇āϛ⧇</string>
<string name="revanced_check_environment_dialog_open_official_source_button">āĻ…āĻĢāĻŋāĻļā§āϝāĻžāϞ āĻ“ā§Ÿā§‡āĻŦāϏāĻžāχāϟ āϖ⧁āϞ⧁āύ</string>
<string name="revanced_check_environment_dialog_ignore_button">āĻ…āĻŦāĻœā§āĻžāĻž āĻ•āϰ⧁āύ</string>
<string name="revanced_check_environment_failed_message">&lt;h5&gt;āĻāχ āĻ…ā§āϝāĻžāĻĒāϟāĻŋ āφāĻĒāύāĻžāϰ āĻĻā§āĻŦāĻžāϰāĻž āĻĒā§āϝāĻžāϚ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻŦāϞ⧇ āĻŽāύ⧇ āĻšāĻšā§āϛ⧇ āύāĻžāĨ¤&lt;/h5&gt;&lt;br&gt;āĻāχ āĻ…ā§āϝāĻžāĻĒāϟāĻŋ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āύāĻžāĻ“ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇, &lt;b&gt;āĻ•ā§āώāϤāĻŋāĻ•āĻžāϰāĻ• āĻŦāĻž āĻāĻŽāύāĻ•āĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻŦāĻŋāĻĒāĻœā§āϜāύāĻ• āĻšāϤ⧇ āĻĒāĻžāϰ⧇&lt;/b&gt;āĨ¤&lt;br&gt;&lt;br&gt;āĻāχ āĻšā§‡āĻ•āϗ⧁āϞāĻŋ āχāĻ™ā§āĻ—āĻŋāϤ āĻĻ⧇āϝāĻŧ āϝ⧇ āĻāχ āĻ…ā§āϝāĻžāĻĒāϟāĻŋ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀āĻ­āĻžāĻŦ⧇ āĻĒā§āϝāĻžāϚ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻŦāĻž āĻ…āĻ¨ā§āϝ āĻ•āĻžāωāϕ⧇ āĻĨ⧇āϕ⧇ āĻĒāĻžāĻ“āϝāĻŧāĻž āϗ⧇āϛ⧇:&lt;br&gt;&lt;br&gt;&lt;small&gt;%1$s&lt;/small&gt;&lt;br&gt;āĻāϟāĻŋ āĻĻ⧃āĻĸāĻŧāĻ­āĻžāĻŦ⧇ āϏ⧁āĻĒāĻžāϰāĻŋāĻļ āĻ•āϰāĻž āĻšāϝāĻŧ āϝ⧇ &lt;b&gt;āĻāχ āĻ…ā§āϝāĻžāĻĒāϟāĻŋ āφāύāχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻž āĻšā§‹āĻ• āĻāĻŦāĻ‚ āύāĻŋāĻœā§‡āχ āĻĒā§āϝāĻžāϚ āĻ•āϰāĻž āĻšā§‹āĻ•&lt;/b&gt; āϝāĻžāϤ⧇ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻž āĻšāϝāĻŧ āϝ⧇ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āϝāĻžāϚāĻžāχāĻ•ā§ƒāϤ āĻāĻŦāĻ‚ āϏ⧁āϰāĻ•ā§āώāĻŋāϤ āĻ…ā§āϝāĻžāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϛ⧇āύāĨ¤&lt;p&gt;&lt;br&gt;āϝāĻĻāĻŋ āωāĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻž āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ āĻāχ āϏāϤāĻ°ā§āĻ•āϤāĻžāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĻ⧁\'āĻŦāĻžāϰ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻŦ⧇āĨ¤</string>
<string name="revanced_check_environment_not_same_patching_device">āĻ…āĻ¨ā§āϝ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻĒā§āϝāĻžāϚ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_check_environment_manager_not_expected_installer">ReVanced Manager āĻĻā§āĻŦāĻžāϰāĻž āĻĒā§āϝāĻžāϚ āĻ•āϰāĻž āĻšā§ŸāύāĻŋ</string>
<string name="revanced_check_environment_not_near_patch_time">ā§§ā§Ļ āĻŽāĻŋāύāĻŋāĻŸā§‡āϰāĻ“ āĻŦ⧇āĻļāĻŋ āφāϗ⧇ āĻĒā§āϝāĻžāϚ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇</string>
@@ -43,6 +33,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_check_environment_not_near_patch_time_invalid">APK āϤ⧈āϰāĻŋāϰ āϤāĻžāϰāĻŋāĻ– āĻ¤ā§āϰ⧁āϟāĻŋāĻĒā§‚āĻ°ā§āĻŖ</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_title">ReVanced</string>
<string name="revanced_settings_confirm_user_dialog_title">āφāĻĒāύāĻŋ āĻ•āĻŋ āĻāĻ—āĻŋā§Ÿā§‡ āϝ⧇āϤ⧇ āχāĻšā§āϛ⧁āĻ•?</string>
<string name="revanced_settings_reset">āφāĻŦāĻžāϰ āϏ⧇āϟ āĻ•āϰ⧁āύ</string>
<string name="revanced_settings_restart_title">āϰāĻŋāĻĢā§āϰ⧇āĻļ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āφāĻŦāĻžāϰ āϚāĻžāϞ⧁ āĻ•āϰ⧁āύ</string>
@@ -66,9 +57,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 āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻž āĻšā§ŸāύāĻŋāĨ¤ āχāύāĻ¸ā§āϟāϞ āĻ•āϰ⧁āύāĨ¤</string>
<string name="gms_core_dialog_title">āĻĒāĻĻāĻ•ā§āώ⧇āĻĒ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ</string>
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore āĻāϰ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄā§‡ āϚāϞāĻŽāĻžāύ āĻĨāĻžāĻ•āĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āύ⧇āχāĨ¤\n\nāφāĻĒāύāĻžāϰ āĻĄāĻŋāĻ­āĻžāχāϏ⧇āϰ āϜāĻ¨ā§āϝ \"Don\'t kill my app\" āĻ āĻĨāĻžāĻ•āĻž āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧁āύ, āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āχāύāĻ¸ā§āϟāϞāĻ•ā§ƒāϤ MicroG āϤ⧇ āϤāĻž āĻĒā§āĻ°ā§Ÿā§‹āĻ— āĻ•āϰ⧁āύāĨ¤\n\nāĻ…ā§āϝāĻžāĻĒ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āϚāϞāϤ⧇ āĻāϟāĻŋ āĻ…āĻŦāĻļā§āϝāχ āĻĒā§āĻ°ā§Ÿā§‹āϜāύāĨ¤</string>
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore-āĻāϰ āĻĒāϟāĻ­ā§‚āĻŽāĻŋāϤ⧇ āϚāĻžāϞāĻžāύ⧋āϰ āĻ…āύ⧁āĻŽāϤāĻŋ āύ⧇āχāĨ¤
āφāĻĒāύāĻžāϰ āĻĢā§‹āύ⧇āϰ āϜāĻ¨ā§āϝ \"Don't kill my app\" āĻ—āĻžāχāĻĄ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ MicroG āχāύāĻ¸ā§āϟāϞ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰ⧁āύāĨ¤
āĻāϟāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϝāĻŧā§‹āϜāύāĨ¤"</string>
<string name="gms_core_dialog_open_website_text">āĻ“ā§Ÿā§‡āĻŦāϏāĻžāχāϟ āϖ⧁āϞ⧁āύ</string>
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">āĻ¤ā§āϰ⧁āϟāĻŋ āĻā§œāĻžāϤ⧇ MicroG GmsCore āĻāϰ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒāϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāύ āĻ…āĻŦāĻļā§āϝāχ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋ⧟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤\n\nāĻāĻ—āĻŋā§Ÿā§‡ āϝāĻžāύ āĻŦā§‹āϤāĻžāĻŽā§‡ āĻŸā§āϝāĻžāĻĒ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒāϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāύ āύāĻŋāĻ¸ā§āĻ•ā§āϰāĻŋ⧟ āĻ•āϰ⧁āύāĨ¤</string>
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"āϏāĻŽāĻ¸ā§āϝāĻž āĻāĻĄāĻŧāĻžāϤ⧇ MicroG GmsCore-āĻāϰ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāύ āĻ…āĻ•ā§āώāĻŽ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤
MicroG-āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāύ āĻ…āĻ•ā§āώāĻŽ āĻ•āϰāĻž āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāϕ⧇ āύ⧇āϤāĻŋāĻŦāĻžāϚāĻ•āĻ­āĻžāĻŦ⧇ āĻĒā§āϰāĻ­āĻžāĻŦāĻŋāϤ āĻ•āϰāĻŦ⧇ āύāĻžāĨ¤
āϚāĻžāϞāĻŋāϝāĻŧ⧇ āϝāĻžāύ āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āĻŸā§āϝāĻžāĻĒ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻ•āϰ⧁āύāĨ¤"</string>
<string name="gms_core_dialog_continue_text">āĻāĻ—āĻŋā§Ÿā§‡ āϝāĻžāύ</string>
</patch>
</app>
@@ -80,12 +79,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_screen_03_feed_title">āĻĢāĻŋāĻĄ</string>
<string name="revanced_settings_screen_04_player_title">āĻĒā§āĻ˛ā§‡ā§ŸāĻžāϰ</string>
<string name="revanced_settings_screen_05_general_title">āϏāĻžāϧāĻžāϰāĻŖ āϞ⧇-āφāωāϟ</string>
<string name="revanced_settings_screen_06_shorts_title">Shorts</string>
<string name="revanced_settings_screen_07_seekbar_title">āϏāĻŋāĻ•āĻŦāĻžāϰ</string>
<string name="revanced_settings_screen_08_swipe_controls_title">āϏ⧋āϝāĻŧāĻžāχāĻĒ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ</string>
<string name="revanced_settings_screen_11_misc_title">āĻŦāĻŋāĻŦāĻŋāϧ</string>
<string name="revanced_settings_screen_12_video_title">āĻ­āĻŋāĻĄāĻŋāĻ“</string>
</patch>
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
<string name="revanced_shorts_disable_background_playback_title">Shorts āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āĻĒā§āϞ⧇ āĻ…āĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ</string>
<string name="revanced_shorts_disable_background_playback_summary_on">Shorts āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āĻĒā§āϞ⧇ āĻ…āĻ•ā§āώāĻŽ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇</string>
<string name="revanced_shorts_disable_background_playback_summary_off">Shorts āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āĻĒā§āϞ⧇ āϏāĻ•ā§āώāĻŽ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇</string>
</patch>
<patch id="misc.debugging.enableDebuggingPatch">
<string name="revanced_debug_screen_title">āĻĄāĻŋāĻŦāĻžāĻ—āĻŋāĻ‚</string>
@@ -102,7 +105,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_debug_toast_on_error_title">ReVanced āĻāϰ āĻ¤ā§āϰ⧁āϟāĻŋāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻŸā§‹āĻ¸ā§āϟ āĻĻ⧇āĻ–āĻžāύ</string>
<string name="revanced_debug_toast_on_error_summary_on">āϕ⧋āύ āĻ¤ā§āϰ⧁āϟāĻŋ āĻĻ⧇āĻ–āĻž āϗ⧇āϞ⧇ āĻŸā§‹āĻ¸ā§āϟ āĻĻ⧇āĻ–āĻžā§Ÿ</string>
<string name="revanced_debug_toast_on_error_summary_off">āϕ⧋āύ āĻ¤ā§āϰ⧁āϟāĻŋ āĻĻ⧇āĻ–āĻž āϗ⧇āϞ⧇ āĻŸā§‹āĻ¸ā§āϟ āĻĻ⧇āĻ–āĻžā§Ÿ āύāĻž</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">āĻ¤ā§āϰ⧁āϟāĻŋāϰ āĻŸā§‹āĻ¸ā§āϟ āĻĻ⧇āĻ–āĻžāύ⧋ āĻŦāĻ¨ā§āϧ āĻ•āϰāϞ⧇ āϤāĻž ReVanced āĻāϰ āϏāĻ•āϞ āĻ¤ā§āϰ⧁āϟāĻŋāϰ āĻŦāĻŋāĻœā§āĻžāĻĒā§āϤāĻŋ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āϰāĻžāĻ–āĻŦ⧇āĨ¤\n\nāφāĻĒāύāĻŋ āϕ⧋āύ āĻ…āύāĻžāĻ•āĻžāĻ™ā§āĻ•ā§āώāĻŋāϤ āϘāϟāύāĻžāϰ āĻŦāĻŋāĻœā§āĻžāĻĒā§āϤāĻŋ āĻĒāĻžāĻŦ⧇āύ āύāĻžāĨ¤</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"āĻ¤ā§āϰ⧁āϟāĻŋ \"toast\" āĻŦāĻ¨ā§āϧ āĻ•āϰ⧇ ReVanced āĻ¤ā§āϰ⧁āϟāĻŋ āĻŦāĻŋāĻœā§āĻžāĻĒā§āϤāĻŋāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻžāύ⧋ āĻšāϝāĻŧāĨ¤
āφāĻĒāύāĻŋ āϕ⧋āύāĻ“ āĻ…āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ āϘāϟāύāĻžāϰ āĻŦāĻŋāώāϝāĻŧ⧇ āĻ…āĻŦāĻšāĻŋāϤ āĻšāĻŦ⧇āύ āύāĻžāĨ¤"</string>
</patch>
<patch id="layout.hide.general.hideLayoutComponentsPatch">
<string name="revanced_disable_like_subscribe_glow_title">āĻĒāĻ›āĻ¨ā§āĻĻ / āϏāĻĻāĻ¸ā§āϝāϤāĻž āĻŦā§‹āϤāĻžāĻŽā§‡āϰ āωāĻœā§āĻœā§āĻŦāϞāϤāĻž āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋ⧟ āĻ•āϰ⧁āύ</string>
@@ -121,7 +126,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_channel_watermark_summary_on">āϜāϞāĻ›āĻžāĻĒ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_channel_watermark_summary_off">āϜāϞāĻ›āĻžāĻĒ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_horizontal_shelves_title">āφāύ⧁āĻ­ā§‚āĻŽāĻŋāĻ• āĻļ⧇āϞāĻĢ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_horizontal_shelves_summary_on">āϝ⧇ āϏāĻ•āϞ āĻļ⧇āϞāĻĢ āϞ⧁āĻ•āĻžāύ⧋ āĻšāĻŦ⧇:\nâ€ĸ āϏāĻ°ā§āĻŦāĻŽā§‡āώ āĻ–āĻŦāϰ\nâ€ĸ āĻĻ⧇āĻ–āĻž āĻ…āĻŦāĻŋāϰāϤ āϰāĻžāϖ⧁āύ\nâ€ĸ āφāϰāĻ“ āĻšā§āϝāĻžāύ⧇āϞ āĻĻ⧇āϖ⧁āύ\nâ€ĸ āϕ⧇āύāĻžāĻ•āĻžāϟāĻž\nâ€ĸ āĻāϟāĻŋ āφāĻŦāĻžāϰ āĻĻ⧇āϖ⧁āύ</string>
<string name="revanced_hide_horizontal_shelves_summary_on">"āĻļ⧇āĻ˛ā§āĻĢāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻžāύ⧋ āĻšāϝāĻŧ āϝ⧇āĻŽāύ:
â€ĸ āϤāĻžāϜāĻž āϏāĻ‚āĻŦāĻžāĻĻ
â€ĸ āĻĻ⧇āĻ–āĻž āϚāĻžāϞāĻŋāϝāĻŧ⧇ āϝāĻžāύ
â€ĸ āφāϰāĻ“ āĻšā§āϝāĻžāύ⧇āϞ āĻ…āĻ¨ā§āĻŦ⧇āώāĻŖ āĻ•āϰ⧁āύ
â€ĸ āϕ⧇āύāĻžāĻ•āĻžāϟāĻž
â€ĸ āφāĻŦāĻžāϰ āĻĻ⧇āϖ⧁āύ"</string>
<string name="revanced_hide_horizontal_shelves_summary_off">āĻļ⧇āϞāĻĢ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<!-- 'Join' should be translated using the same localized wording YouTube displays.
This appears in the video player for certain videos. -->
@@ -149,9 +159,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_timed_reactions_title">āϏāĻŽā§Ÿ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋ⧟āĻž āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_timed_reactions_summary_on">āϏāĻŽā§Ÿ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋ⧟āĻž āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_timed_reactions_summary_off">āϏāĻŽā§Ÿ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋ⧟āĻž āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_search_result_shelf_header_title">āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻĢāϞāĻžāĻĢāϞ āĻļ⧇āϞāĻĢ⧇āϰ āĻšā§‡āĻĄāĻžāϰ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_search_result_shelf_header_summary_on">āĻļ⧇āϞāĻĢ āĻšā§‡āĻĄāĻžāϰ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_search_result_shelf_header_summary_off">āĻļ⧇āϞāĻĢ āĻšā§‡āĻĄāĻžāϰ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_channel_guidelines_title">āĻšā§āϝāĻžāύ⧇āϞ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_channel_guidelines_summary_on">āĻšā§āϝāĻžāύ⧇āϞ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_channel_guidelines_summary_off">āĻšā§āϝāĻžāύ⧇āϞ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
@@ -221,9 +228,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_chapters_section_title">āĻšā§āϝāĻžāĻĒā§āϟāĻžāϰ āĻŦāĻŋāĻ­āĻžāĻ— āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_chapters_section_summary_on">āĻšā§āϝāĻžāĻĒā§āϟāĻžāϰ āĻŦāĻŋāĻ­āĻžāĻ— āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_chapters_section_summary_off">āĻšā§āϝāĻžāĻĒā§āϟāĻžāϰ āĻŦāĻŋāĻ­āĻžāĻ— āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_podcast_section_title">‘āĻĒāĻĄāĻ•āĻžāĻ¸ā§āϟ āĻŦāĻŋāĻ­āĻžāĻ— āϞ⧁āĻ•āĻžāĻ¨â€™</string>
<string name="revanced_hide_podcast_section_summary_on">‘āĻĒāĻĄāĻ•āĻžāĻ¸ā§āϟ āĻŦāĻŋāĻ­āĻžāĻ—â€™ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_podcast_section_summary_off">‘āĻĒāĻĄāĻ•āĻžāĻ¸ā§āϟ āĻŦāĻŋāĻ­āĻžāĻ—â€™ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_info_cards_section_title">āϤāĻĨā§āϝ āĻ•āĻžāĻ°ā§āĻĄ āϏ⧇āĻ•āĻļāύ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_info_cards_section_summary_on">āϤāĻĨā§āϝ āĻ•āĻžāĻ°ā§āĻĄ āϏ⧇āĻ•āĻļāύ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_info_cards_section_summary_off">āϤāĻĨā§āϝ āĻ•āĻžāĻ°ā§āĻĄ āϏ⧇āĻ•āĻļāύ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_key_concepts_section_title">‘āĻŽā§‚āϞ āĻŦāĻŋāώ⧟āĻŦāĻ¸ā§āĻ¤ā§â€™ āĻŦāĻŋāĻ­āĻžāĻ— āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_key_concepts_section_summary_on">‘āĻŽā§‚āϞ āĻŦāĻŋāώ⧟āĻŦāĻ¸ā§āĻ¤ā§â€™ āĻŦāĻŋāĻ­āĻžāĻ— āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_key_concepts_section_summary_off">â€˜ā¤ŽāĨā¤–āĨā¤¯ ⤏⤂⤕⤞āĨā¤Ēā¤¨ā¤žâ€™ ⤅⤍āĨā¤­ā¤žā¤— ā¤ĒāĨā¤°ā¤Ļ⤰āĨā¤ļā¤ŋ⤤ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆ</string>
<string name="revanced_hide_transcript_section_title">⤟āĨā¤°ā¤žā¤‚⤏⤕āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ⤅⤍āĨā¤­ā¤žā¤— ⤛ā¤ŋā¤Ēā¤žā¤ā¤</string>
<string name="revanced_hide_transcript_section_summary_on">āĻŸā§āϰāĻžāĻ¨ā§āϏāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻŦāĻŋāĻ­āĻžāĻ— āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_transcript_section_summary_off">āĻŸā§āϰāĻžāĻ¨ā§āϏāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻŦāĻŋāĻ­āĻžāĻ— āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_description_components_screen_title">āĻ­āĻŋāĻĄāĻŋāĻ“āϰ āĻŦāĻŋāĻŦāϰāĻŖ</string>
@@ -241,6 +255,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāϤ āĻ­āĻŋāĻĄāĻŋāĻ“āϤ⧇ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_comments_screen_title">āĻŽāĻ¨ā§āϤāĻŦā§āϝ</string>
<string name="revanced_comments_screen_summary">āĻŽāĻ¨ā§āϤāĻŦā§āϝ āĻŦāĻŋāĻ­āĻžāϗ⧇āϰ āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻžāύ āĻŦāĻž āĻĻ⧇āĻ–āĻžāύ⧎</string>
<string name="revanced_hide_comments_chat_summary_title"> \'āĻšā§āϝāĻžāĻŸā§‡āϰ āϏāĻžāϰāĻžāĻ‚āĻļ\' āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_comments_chat_summary_summary_on">“āĻšā§āϝāĻžāϟ āϏāĻžāϰāĻžāĻ‚āĻļ” āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_comments_chat_summary_summary_off">“āĻšā§āϝāĻžāϟ āϏāĻžāϰāĻžāĻ‚āĻļ” āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_hide_comments_by_members_header_title">\'āĻŽā§‡āĻŽā§āĻŦāĻžāϰāĻĻ⧇āϰ āĻŽāĻ¨ā§āϤāĻŦā§āϝ\' āĻšā§‡āĻĄāĻžāϰ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_comments_by_members_header_summary_on">\'āĻŽā§‡āĻŽā§āĻŦāĻžāϰāĻĻ⧇āϰ āĻŽāĻ¨ā§āϤāĻŦā§āϝ\' āĻšā§‡āĻĄāĻžāϰ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_comments_by_members_header_summary_off">\'āĻŽā§‡āĻŽā§āĻŦāĻžāϰāĻĻ⧇āϰ āĻŽāĻ¨ā§āϤāĻŦā§āϝ\' āĻšā§‡āĻĄāĻžāϰ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
@@ -260,6 +277,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ āĻ“ āχāĻŽā§‹āϜāĻŋ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ āĻ“ āχāĻŽā§‹āϜāĻŋ āĻŦā§‹āϤāĻžāĻŽ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
<string name="revanced_hide_doodles_title">YouTube Doodles ⤛ā¤ŋā¤Ēā¤žā¤ā¤</string>
<string name="revanced_hide_doodles_summary_on">⤏⤰āĨā¤š ā¤Ŧā¤žā¤° Doodles ⤛ā¤ŋā¤ĒāĨ‡ ā¤šāĨā¤ ā¤šāĨˆā¤‚</string>
<string name="revanced_hide_doodles_summary_off">āϏāĻžāĻ°ā§āϚ āĻŦāĻžāϰ⧇ Doodles āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšāϝāĻŧ</string>
<string name="revanced_hide_doodles_user_dialog_message">"YouTube Doodles āĻĒā§āϰāϤāĻŋ āĻŦāĻ›āϰ āĻ•āϝāĻŧ⧇āĻ• āĻĻāĻŋāύ⧇āϰ āϜāĻ¨ā§āϝ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧāĨ¤
āφāĻĒāύāĻžāϰ āĻ…āĻžā§āϚāϞ⧇ āϝāĻĻāĻŋ āϕ⧋āύāĻ“ Doodle āĻŦāĻ°ā§āϤāĻŽāĻžāύ⧇ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇ āĻāĻŦāĻ‚ āĻāχ āϞ⧁āĻ•āĻžāύ⧋ āϏ⧇āϟāĻŋāĻ‚ āϚāĻžāϞ⧁ āĻĨāĻžāϕ⧇, āϤāĻžāĻšāϞ⧇ āϏāĻžāĻ°ā§āϚ āĻŦāĻžāϰ⧇āϰ āύ⧀āĻšā§‡ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻŦāĻžāϰāϟāĻŋāĻ“ āϞ⧁āĻ•āĻžāύ⧋ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤"</string>
<string name="revanced_custom_filter_screen_title">āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ</string>
<string name="revanced_custom_filter_screen_summary">āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āωāĻĒāĻžāĻĻāĻžāύ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_custom_filter_title">āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āϏāĻ•ā§āϰāĻŋ⧟ āĻ•āϰ⧁āύ</string>
@@ -283,16 +306,36 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">āϞ⧁āĻ•āĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āϕ⧀āĻ“ā§ŸāĻžāĻ°ā§āĻĄ</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">"āύāϤ⧁āύ āϞāĻžāχāύ āĻĻā§āĻŦāĻžāϰāĻž āĻĒ⧃āĻĨāĻ• āĻ•āϰāĻž āϞ⧁āĻ•āĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻ•āĻŋāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻāĻŦāĻ‚ āĻŦāĻžāĻ•ā§āϝāĻžāĻ‚āĻļ
āĻ•āĻŋāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻšā§āϝāĻžāύ⧇āϞ⧇āϰ āύāĻžāĻŽ āĻŦāĻž āĻ­āĻŋāĻĄāĻŋāĻ“ āĻļāĻŋāϰ⧋āύāĻžāĻŽā§‡ āĻĻ⧇āĻ–āĻžāύ⧋ āϕ⧋āύāĻ“ āĻĒāĻžāĻ ā§āϝ āĻšāϤ⧇ āĻĒāĻžāϰ⧇
āĻŽāĻžāĻāĻ–āĻžāύ⧇ āĻŦāĻĄāĻŧ āĻšāĻžāϤ⧇āϰ āĻ…āĻ•ā§āώāϰ āϏāĻŽā§āĻŦāϞāĻŋāϤ āĻļāĻŦā§āĻĻāϗ⧁āϞāĻŋ āϕ⧇āϏāĻŋāĻ‚ āĻĻāĻŋāϝāĻŧ⧇ āĻĒā§āϰāĻŦ⧇āĻļ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ (āϝ⧇āĻŽāύ: iPhone, TikTok, LeBlanc)"</string>
<string name="revanced_hide_keyword_content_about_title">āϕ⧀āĻ“ā§ŸāĻžāĻ°ā§āĻĄ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāĻŋāĻ‚ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇</string>
<string name="revanced_hide_keyword_content_about_summary">"āĻšā§‹āĻŽ / āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒāĻļāύ / āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ⧇āϰ āĻĢāϞāĻžāĻĢāϞāϗ⧁āϞāĻŋ āĻ•āĻŋāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻŦāĻžāĻ•ā§āϝāĻžāĻ‚āĻļ⧇āϰ āϏāĻžāĻĨ⧇ āĻŽāĻŋāϞ⧇ āϝāĻžāĻ“āϝāĻŧāĻž āϏāĻžāĻŽāĻ—ā§āϰ⧀ āϞ⧁āĻ•āĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ
āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž
â€ĸ āĻšā§āϝāĻžāύ⧇āϞ⧇āϰ āύāĻžāĻŽ āĻĻā§āĻŦāĻžāϰāĻž Shorts āϞ⧁āĻ•āĻžāύ⧋ āϝāĻžāĻŦ⧇ āύāĻž
â€ĸ āĻ•āĻŋāϛ⧁ UI āωāĻĒāĻžāĻĻāĻžāύ āϞ⧁āĻ•āĻžāύ⧋ āύāĻžāĻ“ āĻšāϤ⧇ āĻĒāĻžāϰ⧇
â€ĸ āϕ⧋āύāĻ“ āĻ•āĻŋāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻ•āϰāϞ⧇ āϕ⧋āύāĻ“ āĻĢāϞāĻžāĻĢāϞ āύāĻžāĻ“ āĻĻ⧇āĻ–āĻžāϤ⧇ āĻĒāĻžāϰ⧇"</string>
<string name="revanced_hide_keyword_content_about_whole_words_title">āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻļāĻŦā§āĻĻ āĻŽā§‡āϞāĻžāĻ“</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">āĻĄāĻžāĻŦāϞ āϕ⧋āĻŸā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āϟāĻŋ āϕ⧀āĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ/āĻĢā§āϰ⧇āϜ āϰāĻžāĻ–āϞ⧇ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻļāĻŋāϰ⧋āύāĻžāĻŽ āĻāĻŦāĻ‚ āĻšā§āϝāĻžāύ⧇āϞ⧇āϰ āύāĻžāĻŽā§‡āϰ āφāĻ‚āĻļāĻŋāĻ• āĻŽāĻŋāϞ āϏāύāĻžāĻ•ā§āϤ āĻ•āϰāĻž āĻŦāĻ¨ā§āϧ āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇&lt;br&gt;&lt;br&gt;āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ,&lt;br&gt;&lt;b&gt;\"ai\"&lt;/b&gt; āĻ­āĻŋāĻĄāĻŋāĻ“āϟāĻŋ āϞ⧁āĻ•āĻŋāϝāĻŧ⧇ āĻĻ⧇āĻŦ⧇: &lt;b&gt;How does AI work?&lt;/b&gt;&lt;br&gt;āĻ•āĻŋāĻ¨ā§āϤ⧁ āϞ⧁āĻ•āĻŋāϝāĻŧ⧇ āĻĻ⧇āĻŦ⧇ āύāĻž: &lt;b&gt;What does fair use mean?&lt;/b&gt;</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_common">āĻ•āĻŋāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžāĻŦ⧇ āύāĻž: %s</string>
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">āĻ•āĻŋāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āωāĻĻā§āϧ⧃āϤāĻŋ āϝ⧋āĻ— āĻ•āϰ⧁āύ: %s</string>
<string name="revanced_hide_keyword_toast_invalid_conflicting">āĻ•āĻŋāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄā§‡āϰ āĻĻā§āĻŦāĻ¨ā§āĻĻā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ˜ā§‹āώāĻŖāĻž āφāϛ⧇: %s</string>
<string name="revanced_hide_keyword_toast_invalid_length">āĻ•āĻŋāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āϖ⧁āĻŦ āϛ⧋āϟ āĻāĻŦāĻ‚ āωāĻĻā§āϧ⧃āϤāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ: %s</string>
<string name="revanced_hide_keyword_toast_invalid_broad">āĻ•āĻŋāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āϏāĻŽāĻ¸ā§āϤ āĻ­āĻŋāĻĄāĻŋāĻ“ āϞ⧁āĻ•āĻŋāϝāĻŧ⧇ āϰāĻžāĻ–āĻŦ⧇: %s</string>
</patch>
<patch id="ad.general.hideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">āϏāĻžāϧāĻžāϰāĻŖ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_general_ads_summary_on">āϏāĻžāϧāĻžāϰāĻŖ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_general_ads_summary_off">āϏāĻžāϧāĻžāϰāĻŖ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_fullscreen_ads_title">āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻĒā§āϝāĻžāύ⧇āϞ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_fullscreen_ads_summary_on">āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻ•ā§āϰ⧀āĻŖ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇\n\nāĻāχ āĻĢāĻŋāϚāĻžāϰāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĒ⧁āϰ⧋āύ⧋ āĻĄāĻŋāĻ­āĻžāχāϏ⧇āϰ āϜāĻ¨ā§āϝ āωāĻĒāϞāĻ­ā§āϝ</string>
<string name="revanced_hide_fullscreen_ads_summary_on">"āĻĒā§‚āĻ°ā§āĻŖ āĻĒāĻ°ā§āĻĻāĻžāϰ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āϞ⧁āĻ•āĻžāύ⧋ āĻšāϝāĻŧ
āĻāχ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϟāĻŋ āϕ⧇āĻŦāϞ āĻĒ⧁āϰāύ⧋ āĻĄāĻŋāĻ­āĻžāχāϏ⧇āϰ āϜāĻ¨ā§āϝ āωāĻĒāϞāĻŦā§āϧ"</string>
<string name="revanced_hide_fullscreen_ads_summary_off">āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_buttoned_ads_title">āĻŦā§‹āϤāĻžāĻŽāϝ⧁āĻ•ā§āϤ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_buttoned_ads_summary_on">āĻŦā§‹āϤāĻžāĻŽāϝ⧁āĻ•ā§āϤ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
@@ -306,6 +349,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_products_banner_title">āĻĒā§āϰ⧋āĻĄāĻžāĻ•ā§āϟ āĻĻ⧇āĻ–āĻžāϰ āĻŦā§āϝāĻžāύāĻžāϰ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_products_banner_summary_on">āĻŦā§āϝāĻžāύāĻžāϰ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_products_banner_summary_off">āĻŦā§āϝāĻžāύāĻžāϰ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_player_store_shelf_title">āĻĒā§āϞ⧇āϝāĻŧāĻžāϰ āĻļāĻĒāĻŋāĻ‚ āĻļ⧇āϞāĻĢ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_player_store_shelf_summary_on">āĻļāĻĒāĻŋāĻ‚ āĻļ⧇āϞāĻĢ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_player_store_shelf_summary_off">āĻļāĻĒāĻŋāĻ‚ āĻļ⧇āϞāĻĢ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_hide_shopping_links_title">āĻ­āĻŋāĻĄāĻŋāĻ“āϰ āĻŦāĻŋāĻŦāϰāϪ⧇ āϕ⧇āύāĻžāĻ•āĻžāϟāĻžāϰ āϞāĻŋāĻ™ā§āĻ• āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_shopping_links_summary_on">āϕ⧇āύāĻžāĻ•āĻžāϟāĻžāϰ āϞāĻŋāĻ™ā§āĻ• āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_shopping_links_summary_off">āϕ⧇āύāĻžāĻ•āĻžāϟāĻžāϰ āϞāĻŋāĻ™ā§āĻ• āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
@@ -389,6 +435,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_swipe_save_and_restore_brightness_summary_on">āĻĒā§‚āĻ°ā§āĻŖāĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇ āĻĒā§āϰāĻŦ⧇āĻļ āĻŦāĻž āĻĒā§‚āĻ°ā§āĻŖāĻ¸ā§āĻ•ā§āϰāĻŋāύ āĻĨ⧇āϕ⧇ āĻŦāĻžāĻšāĻŋāϰ āĻšāĻ“āϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ, āωāĻœā§āĻœā§āĻŦāϞāϤāĻž āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻāĻŦāĻ‚ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāĻŦ⧇</string>
<string name="revanced_swipe_save_and_restore_brightness_summary_off">āĻĒā§‚āĻ°ā§āĻŖāĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇ āĻĒā§āϰāĻŦ⧇āĻļ āĻŦāĻž āĻĒā§‚āĻ°ā§āĻŖāĻ¸ā§āĻ•ā§āϰāĻŋāύ āĻĨ⧇āϕ⧇ āĻŦāĻžāĻšāĻŋāϰ āĻšāĻ“āϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ, āωāĻœā§āĻœā§āĻŦāϞāϤāĻž āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻāĻŦāĻ‚ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāĻŦ⧇ āύāĻž</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">āĻ¸ā§āĻŦ⧟āĻ‚āĻ•ā§āϰāĻŋ⧟-āωāĻœā§āĻœā§āĻŦāϞāϤāĻžāϰ āĻ…āĻ™ā§āĻ—āĻ­āĻ™ā§āĻ—āĻŋ āϏāĻ•ā§āϰāĻŋ⧟ āĻ•āϰ⧁āύ</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">āωāĻœā§āĻœā§āĻŦāϞāϤāĻžāϰ āĻ…āĻ™ā§āĻ—āĻ­āĻ™ā§āĻ—āĻŋāϰ āϏāĻ°ā§āĻŦāύāĻŋāĻŽā§āύ āĻŽāĻžāύ⧇ āϏ⧋āϝāĻŧāĻžāχāĻĒ āĻĄāĻžāωāύ āĻ•āϰāϞ⧇ āĻ…āĻŸā§‹-āωāĻœā§āĻœā§āĻŦāϞāϤāĻž āϏāĻ•ā§āώāĻŽ āĻšāϝāĻŧ</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">āϏāĻ°ā§āĻŦāύāĻŋāĻŽā§āύ āĻŽāĻžāύ⧇ āϏ⧋āϝāĻŧāĻžāχāĻĒ āĻĄāĻžāωāύ āĻ•āϰāϞ⧇ āĻ…āĻŸā§‹-āωāĻœā§āĻœā§āĻŦāϞāϤāĻž āϏāĻ•ā§āώāĻŽ āĻšāϝāĻŧ āύāĻž</string>
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">āĻ¸ā§āĻŦāϤāĻ¸ā§āĻĢā§‚āĻ°ā§āϤāĻ­āĻžāĻŦ⧇</string>
<string name="revanced_swipe_overlay_timeout_title">āĻ“āĻ­āĻžāϰ-āϞ⧇ āϟāĻžāχāĻŽ āφāωāϟ</string>
<string name="revanced_swipe_overlay_timeout_summary">āĻ•āϤ āĻŽāĻŋāϞāĻŋāϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ āĻ“āĻ­āĻžāϰāϞ⧇ āĻĻ⧃āĻļā§āϝāĻŽāĻžāύ āĻšāĻŦ⧇</string>
@@ -397,16 +445,34 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_swipe_overlay_background_alpha_title">āĻ¸ā§‹ā§ŸāĻžāχāĻĒ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄā§‡āϰ āĻĻ⧃āĻļā§āϝāĻŽāĻžāύāϤāĻž</string>
<string name="revanced_swipe_overlay_background_alpha_summary">āĻ¸ā§‹ā§ŸāĻžāχāĻĒ āĻ“āĻ­āĻžāϰāϞ⧇ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄā§‡āϰ āĻĻ⧃āĻļā§āϝāĻŽāĻžāύāϤāĻž</string>
<string name="revanced_swipe_threshold_title">āĻ¸ā§‹ā§ŸāĻžāχāĻĒ āĻĨā§āϰ⧇āĻļāĻšā§‹āĻ˛ā§āĻĄ āĻāϰ āĻŽāĻžāĻ¤ā§āϰāĻž</string>
<string name="revanced_swipe_threshold_summary">āĻ¸ā§‹ā§ŸāĻžāχāĻĒ āĻ•āϰāĻžāϰ āĻĨā§āϰ⧇āĻļāĻšā§‹āĻ˛ā§āĻĄā§‡āϰ āĻĒāϰāĻŋāĻŽāĻžāĻŖ</string>
</patch>
<patch id="layout.autocaptions.autoCaptionsPatch">
<string name="revanced_auto_captions_title">āĻ¸ā§āĻŦ⧟āĻ‚āĻ•ā§āϰāĻŋ⧟ āĻ•ā§āϝāĻžāĻĒāĻļāύ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧁āύ</string>
<string name="revanced_auto_captions_summary_on">āĻ…āĻŸā§‹ āĻ•ā§āϝāĻžāĻĒāĻļāύ āĻŦāĻ¨ā§āϧ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇</string>
<string name="revanced_auto_captions_summary_off">āĻ…āĻŸā§‹ āĻ•ā§āϝāĻžāĻĒāĻļāύ āϚāĻžāϞ⧁ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇</string>
</patch>
<patch id="layout.buttons.action.hideButtonsPatch">
<string name="revanced_hide_buttons_screen_title">āĻ…ā§āϝāĻžāĻ•āĻļāύ āĻŦā§‹āϤāĻžāĻŽ</string>
<string name="revanced_hide_buttons_screen_summary">āĻ­āĻŋāĻĄāĻŋāĻ“āϰ āύ⧀āĻšā§‡ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āĻŦāĻž āĻĻ⧇āĻ–āĻžāύ⧋</string>
<string name="revanced_hide_like_dislike_button_title">Like āĻāĻŦāĻ‚ Dislike āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_like_dislike_button_summary_on">Like āĻāĻŦāĻ‚ Dislike āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_like_dislike_button_summary_off">Like āĻāĻŦāĻ‚ Dislike āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_share_button_title">Share āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_share_button_summary_on">āĻļā§‡ā§ŸāĻžāϰ āĻ•āϰ⧁āύ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_share_button_summary_off">āĻļā§‡ā§ŸāĻžāϰ āĻŦāĻžāϟāύ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
<string name="revanced_hide_report_button_title">Report āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_report_button_summary_on">āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āĻŦāĻžāϟāύ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_report_button_summary_off">āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āĻŦāĻžāϟāύ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ</string>
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_remix_button_title">Remix āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_remix_button_summary_on">āϰāĻŋāĻŽāĻŋāĻ•ā§āϏ āĻŦāĻžāϟāύ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_remix_button_summary_off">āϰāĻŋāĻŽāĻŋāĻ•ā§āϏ āĻŦāĻžāϟāύ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_download_button_title">āĻĄāĻžāωāύāϞ⧋āĻĄāϗ⧁āϞ⧋ āĻšāĻžāχāĻĄ āĻ•āϰāĻžāĻ“</string>
<string name="revanced_hide_download_button_summary_on">āĻĄāĻžāωāύāϞ⧋āĻĄ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_download_button_summary_off">āĻĄāĻžāωāύāϞ⧋āĻĄ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
@@ -418,6 +484,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_clip_button_summary_on">āĻ•ā§āϞāĻŋāĻĒ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_clip_button_summary_off">āĻ•ā§āϞāĻŋāĻĒ āĻŦā§‹āϤāĻžāĻŽ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_playlist_button_title">āĻĒā§āϞ⧇āϞāĻŋāĻ¸ā§āĻŸā§‡ Save āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_playlist_button_summary_on">āĻĒā§āϞ⧇āϞāĻŋāĻ¸ā§āĻŸā§‡ Save āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_playlist_button_summary_off">āĻĒā§āϞ⧇āϞāĻŋāĻ¸ā§āĻŸā§‡ Save āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
</patch>
<patch id="layout.buttons.navigation.navigationButtonsPatch">
<string name="revanced_navigation_buttons_screen_title">āύ⧇āĻ­āĻŋāϗ⧇āĻļāύ āĻŦā§‹āϤāĻžāĻŽ</string>
@@ -440,11 +509,22 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_subscriptions_button_summary_off">āϏāĻĻāĻ¸ā§āϝāϤāĻž āύāĻŋāύ āĻŦā§‹āϤāĻžāĻŽ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_switch_create_with_notifications_button_title">āϤ⧈āϰāĻŋ āĻŦā§‹āϤāĻžāĻŽāϕ⧇ āĻŦāĻŋāĻœā§āĻžāĻĒā§āϤāĻŋ āĻŦā§‹āϤāĻžāĻŽ āĻĻā§āĻŦāĻžāϰāĻž āϏ⧁āχāϚ āĻ•āϰ⧁āύ</string>
<string name="revanced_switch_create_with_notifications_button_summary_on">āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āĻŦā§‹āϤāĻžāĻŽ āĻŦāĻŋāĻœā§āĻžāĻĒā§āϤāĻŋāϗ⧁āϞ⧋ āĻŦā§‹āϤāĻžāĻŽ āĻĻā§āĻŦāĻžāϰāĻž āĻ¸ā§āĻĨāĻžāύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇\n\nāĻŦāĻŋāσāĻĻā§āϰāσ āĻāϟāĻŋ āϏāĻ•ā§āϰāĻŋ⧟ āĻ•āϰāĻžāϰ āĻĢāϞ⧇ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻœā§‹āϰāĻĒā§‚āĻ°ā§āĻŦāĻ• āĻŦāĻ¨ā§āϧ āĻĨāĻžāĻ•āĻŦ⧇</string>
<string name="revanced_switch_create_with_notifications_button_summary_on">"āϤ⧈āϰāĻŋ āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āĻŦāĻŋāĻœā§āĻžāĻĒā§āϤāĻŋ āĻŦā§‹āϤāĻžāĻŽā§‡āϰ āϏāĻžāĻĨ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āĻšāϝāĻŧ
āĻŽāύ⧇ āϰāĻžāĻ–āĻŦ⧇āύ: āĻāϟāĻŋ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāĻž āĻ­āĻŋāĻĄāĻŋāĻ“ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύāϗ⧁āϞāĻŋāĻ“ āĻœā§‹āϰ āĻ•āϰ⧇ āϞ⧁āĻ•āĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧ"</string>
<string name="revanced_switch_create_with_notifications_button_summary_off">āϤ⧈āϰāĻŋ āĻŦā§‹āϤāĻžāĻŽāϕ⧇ āĻŦāĻŋāĻœā§āĻžāĻĒā§āϤāĻŋ āĻŦā§‹āϤāĻžāĻŽ āĻĻā§āĻŦāĻžāϰāĻž āϏ⧁āχāϚ āĻ•āϰāĻž āĻšā§ŸāύāĻŋ</string>
<string name="revanced_hide_navigation_button_labels_title">āύ⧇āĻ­āĻŋāϗ⧇āĻļāύ āĻŦā§‹āϤāĻžāĻŽ āϞ⧇āĻŦ⧇āϞ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_navigation_button_labels_summary_on">āϞ⧇āĻŦ⧇āϞ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_navigation_button_labels_summary_off">āϞ⧇āĻŦ⧇āϞ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_disable_translucent_status_bar_title">āĻ…āĻ°ā§āϧāĻ¸ā§āĻŦāĻšā§āĻ› āĻ¸ā§āĻĨāĻŋāϤāĻŋ āĻŦāĻžāϰ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰ⧁āύ</string>
<string name="revanced_disable_translucent_status_bar_summary_on">āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āĻŦāĻžāϰāϟāĻŋ āĻ…āĻ¸ā§āĻŦāĻšā§āĻ›</string>
<string name="revanced_disable_translucent_status_bar_summary_off">āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āĻŦāĻžāϰāϟāĻŋ āĻ…āĻ¸ā§āĻŦāĻšā§āĻ› āĻŦāĻž āĻ¸ā§āĻŦāĻšā§āĻ›</string>
<string name="revanced_disable_translucent_navigation_bar_light_title">āĻ…āĻ°ā§āϧāĻ¸ā§āĻŦāĻšā§āĻ› āĻšāĻžāϞāĻ•āĻž āĻŦāĻžāϰ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰ⧁āύ</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_on">āĻšāĻžāϞāĻ•āĻž āĻŽā§‹āĻĄ āύ⧇āĻ­āĻŋāϗ⧇āĻļāύ āĻŦāĻžāϰ āĻ…āĻ¸ā§āĻŦāĻšā§āĻ›</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">āϞāĻžāχāϟ āĻŽā§‹āĻĄ āĻ¨ā§āϝāĻžāĻ­āĻŋāϗ⧇āĻļāύ āĻŦāĻžāϰāϟāĻŋ āĻ…āĻ¸ā§āĻŦāĻšā§āĻ› āĻŦāĻž āĻ¸ā§āĻŦāĻšā§āĻ›</string>
<string name="revanced_disable_translucent_navigation_bar_dark_title">āĻ—āĻžāĻĸāĻŧ āĻ¸ā§āĻŦāĻšā§āĻ› āĻŦāĻžāϰ āĻ…āĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_on">āĻ—āĻžāĻĸāĻŧ āĻŽā§‹āĻĄ āύ⧇āĻ­āĻŋāϗ⧇āĻļāύ āĻŦāĻžāϰ āĻ…āĻ¸ā§āĻŦāĻšā§āĻ›</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">āĻ—āĻžāĻĸāĻŧ āĻŽā§‹āĻĄ āĻ¨ā§āϝāĻžāĻ­āĻŋāϗ⧇āĻļāύ āĻŦāĻžāϰāϟāĻŋ āĻ…āĻ¸ā§āĻŦāĻšā§āĻ› āĻŦāĻž āĻ¸ā§āĻŦāĻšā§āĻ›</string>
</patch>
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
<string name="revanced_hide_player_flyout_title">āĻĢā§āϞāĻžāχāφāωāϟ āĻŽā§‡āύ⧁</string>
@@ -458,6 +538,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_flyout_additional_settings_summary_on">āφāϰāĻ“ āϏ⧇āϟāĻŋāĻ‚āϏ āĻĻ⧇āϖ⧁āύ āĻŽā§‡āύ⧁ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_player_flyout_additional_settings_summary_off">āφāϰāĻ“ āϏ⧇āϟāĻŋāĻ‚āϏ āĻĻ⧇āϖ⧁āύ āĻŽā§‡āύ⧁ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<!-- 'Sleep timer' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_sleep_timer_title">Sleep timer āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_player_flyout_sleep_timer_summary_on">Sleep timer āĻŽā§‡āύ⧁ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_player_flyout_sleep_timer_summary_off">Sleep timer āĻŽā§‡āύ⧁ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<!-- 'Loop video' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_loop_video_title">āĻ­āĻŋāĻĄāĻŋāĻ“ āϞ⧁āĻĒ āĻ•āϰ⧁āύ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_player_flyout_loop_video_summary_on">āĻ­āĻŋāĻĄāĻŋāĻ“ āϞ⧁āĻĒ āĻ•āϰ⧁āύ āĻŽā§‡āύ⧁ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
@@ -466,6 +549,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_flyout_ambient_mode_title">āĻ…ā§āϝāĻžāĻŽā§āĻŦāĻŋā§Ÿā§‡āĻ¨ā§āϟ āĻŽā§‹āĻĄ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_player_flyout_ambient_mode_summary_on">āĻ…ā§āϝāĻžāĻŽā§āĻŦāĻŋā§Ÿā§‡āĻ¨ā§āϟ āĻŽā§‹āĻĄ āĻŽā§‡āύ⧁ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_player_flyout_ambient_mode_summary_off">āĻ…ā§āϝāĻžāĻŽā§āĻŦāĻŋā§Ÿā§‡āĻ¨ā§āϟ āĻŽā§‹āĻĄ āĻŽā§‡āύ⧁ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_player_flyout_stable_volume_title">Stable volume āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_player_flyout_stable_volume_summary_off">Stable volume āĻŽā§‡āύ⧁ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_hide_player_flyout_stable_volume_summary_on">Stable volume āĻŽā§‡āύ⧁ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_help_title">āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻāĻŦāĻ‚ āĻĢāĻŋāĻĄāĻŦā§āϝāĻžāĻ• āĻŽā§‡āύ⧁ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_player_flyout_help_summary_on">āϏāĻšāĻžā§ŸāϤāĻž āĻ“ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋ⧟āĻž āĻŽā§‡āύ⧁ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
@@ -492,6 +578,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">āĻ­āĻŋāφāϰ āĻŽā§‡āύ⧁āϤ⧇ āĻĻ⧇āϖ⧁āύ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">āĻ­āĻŋāφāϰ āĻŽā§‡āύ⧁āϤ⧇ āĻĻ⧇āϖ⧁āύ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">āĻ­āĻŋāĻĄāĻŋāĻ“ āϗ⧁āĻŖāĻŽāĻžāύ āĻŽā§‡āύ⧁āϰ āĻĢ⧁āϟāĻžāϰ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">āĻ­āĻŋāĻĄāĻŋāĻ“ āϗ⧁āĻŖāĻŽāĻžāύ āĻŽā§‡āύ⧁ āĻĢ⧁āϟāĻžāϰ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">āĻ­āĻŋāĻĄāĻŋāĻ“ āϗ⧁āĻŖāĻŽāĻžāύ āĻŽā§‡āύ⧁ āĻĢ⧁āϟāĻžāϰ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
</patch>
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
<string name="revanced_hide_player_previous_next_buttons_title">āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āϞ⧁āĻ•āĻžāύ &amp; āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻŦā§‹āϤāĻžāĻŽ</string>
@@ -501,6 +589,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_cast_button_summary_on">āĻ•āĻžāĻ¸ā§āϟ āĻŦāĻžāϟāύ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_cast_button_summary_off">āĻ•āĻžāĻ¸ā§āϟ āĻŦāĻžāϟāύ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<!-- This button does not display any text, but 'captions' should be translated using the same wording used as the translation of 'revanced_hide_player_flyout_captions_title' -->
<string name="revanced_hide_captions_button_title">āĻ•ā§āϝāĻžāĻĒāĻļāύ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_captions_button_summary_on">āĻ•ā§āϝāĻžāĻĒāĻļāύ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_captions_button_summary_off">āĻ•ā§āϝāĻžāĻĒāĻļāύ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_hide_autoplay_button_title">autoplay āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_autoplay_button_summary_on">autoplay āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_autoplay_button_summary_off">autoplay āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
</patch>
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
<string name="revanced_hide_endscreen_cards_title">āĻļ⧇āώ āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻ•āĻžāĻ°ā§āĻĄ āϞ⧁āĻ•āĻžāύ</string>
@@ -531,6 +625,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_seekbar_thumbnail_summary_off">āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞ⧇ āϏāĻŋāĻ•āĻŦāĻžāϰ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
</patch>
<patch id="layout.hide.shorts.hideShortsComponentsResourcePatch">
<string name="revanced_shorts_player_screen_title">Shorts āĻĒā§āϞ⧇āϝāĻŧāĻžāϰ</string>
<string name="revanced_shorts_player_screen_summary">Shorts āĻĒā§āϞ⧇āϝāĻŧāĻžāϰ⧇ āωāĻĒāĻžāĻĻāĻžāύ āϞ⧁āĻ•āĻžāύ⧋ āĻŦāĻž āĻĻ⧇āĻ–āĻžāύ⧋</string>
<!-- 'home' should be translated using the same localized wording YouTube displays for the home tab. -->
<string name="revanced_hide_shorts_home_title">āĻĒā§āϰāϧāĻžāύ āĻĢāĻŋāĻĄā§‡ Shorts āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_shorts_home_summary_on">āĻĒā§āϰāϧāĻžāύ āĻĢāĻŋāĻĄā§‡ Shorts āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
@@ -566,6 +662,20 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_location_label_summary_on">āĻ…āĻŦāĻ¸ā§āĻĨāĻžāύ āϞ⧇āĻŦ⧇āϞ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_shorts_location_label_summary_off">āĻ…āĻŦāĻ¸ā§āĻĨāĻžāύ āϞ⧇āĻŦ⧇āϞ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_shorts_save_sound_button_title">āϏāĻ™ā§āĻ—ā§€āϤ āϏ⧇āĻ­ āĻ•āϰ⧁āύ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">Save music āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">Save music āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_hide_shorts_use_template_button_title">Use template āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_shorts_use_template_button_summary_on">Use template āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_shorts_use_template_button_summary_off">Use template āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_hide_shorts_upcoming_button_title">Upcoming āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">āφāĻ—āĻžāĻŽā§€ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">āφāĻ—āĻžāĻŽā§€ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_hide_shorts_green_screen_button_title">āϏāĻŦ⧁āϜ āĻĒāĻ°ā§āĻĻāĻž āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">āϏāĻŦ⧁āϜ āĻĒāĻ°ā§āĻĻāĻž āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">āϏāĻŦ⧁āϜ āĻĒāĻ°ā§āĻĻāĻž āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_hide_shorts_hashtag_button_title">āĻšā§āϝāĻžāĻļāĻŸā§āϝāĻžāĻ— āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_shorts_hashtag_button_summary_on">āĻšā§āϝāĻžāĻļāĻŸā§āϝāĻžāĻ— āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_shorts_hashtag_button_summary_off">āĻšā§āϝāĻžāĻļāĻŸā§āϝāĻžāĻ— āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_hide_shorts_search_suggestions_title">āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_shorts_search_suggestions_summary_on">āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_shorts_search_suggestions_summary_off">āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļāϗ⧁āϞāĻŋ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
@@ -629,6 +739,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_popup_panels_summary_on">āĻĒā§āĻ˛ā§‡ā§ŸāĻžāϰ āĻĒāĻĒāφāĻĒ āĻĒā§āϝāĻžāύ⧇āϞāϗ⧁āϞ⧋ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_player_popup_panels_summary_off">āĻĒā§āĻ˛ā§‡ā§ŸāĻžāϰ āĻĒāĻĒāφāĻĒ āĻĒā§āϝāĻžāύ⧇āϞāϗ⧁āϞ⧋ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
</patch>
<patch id="layout.player.fullscreen.openVideosFullscreen">
<string name="revanced_open_videos_fullscreen_portrait_title">āĻĒā§‚āĻ°ā§āĻŖ āĻĒāĻ°ā§āĻĻāĻžāϝāĻŧ āĻ­āĻŋāĻĄāĻŋāĻ“ āϖ⧁āϞ⧁āύ</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">āĻ­āĻŋāĻĄāĻŋāĻ“ āĻĒā§‚āĻ°ā§āĻŖ āĻĒāĻ°ā§āĻĻāĻžāϝāĻŧ āϖ⧁āϞāĻŦ⧇</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">āĻ­āĻŋāĻĄāĻŋāĻ“ āĻĒā§‚āĻ°ā§āĻŖ āĻĒāĻ°ā§āĻĻāĻžāϝāĻŧ āϖ⧁āϞāĻŦ⧇ āύāĻž</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">āĻĒā§āĻ˛ā§‡ā§ŸāĻžāϰ āĻ“āĻ­āĻžāϰāϞ⧇ āĻ…āĻ¸ā§āĻŦāĻšā§āĻ›āϤāĻž</string>
<string name="revanced_player_overlay_opacity_summary">āĻ…āϏāĻšā§āĻ›āϤāĻž āĻŽāĻžāύ ā§Ļ-ā§§ā§Ļā§Ļ āĻāϰ āĻŽāĻ§ā§āϝ⧇, āϝ⧇āĻ–āĻžāύ⧇ ā§Ļ āĻšāϞ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻŦāĻšā§āĻ›</string>
@@ -646,7 +761,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_ryd_enable_summary_off">āĻ…āĻĒāĻ›āĻ¨ā§āĻĻāϗ⧁āϞ⧋ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§ŸāύāĻŋ</string>
<string name="revanced_ryd_shorts_title">Shorts āĻ āĻ…āĻĒāĻ›āĻ¨ā§āĻĻ āĻĻ⧇āĻ–āĻžāύ</string>
<string name="revanced_ryd_shorts_summary_on">Shorts āĻ āĻ…āĻĒāĻ›āĻ¨ā§āĻĻ āĻĒāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_ryd_shorts_summary_on_disclaimer">Shorts āĻ āĻ…āĻĒāĻ›āĻ¨ā§āĻĻ āĻĒāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇\n\nāϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž: āĻ›āĻĻā§āĻŽāĻŦ⧇āĻļā§€ āĻŽā§‹āĻĄā§‡ āĻ…āĻĒāĻ›āĻ¨ā§āĻĻ āύāĻžāĻ“ āĻĻ⧇āĻ–āĻžāϤ⧇ āĻĒāĻžāϰ⧇</string>
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Shorts-āĻ āĻĄāĻŋāϏāϞāĻžāχāĻ• āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇
āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž: āĻ—ā§‹āĻĒāύ āĻŽā§‹āĻĄā§‡ āĻĄāĻŋāϏāϞāĻžāχāĻ• āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āύāĻžāĻ“ āĻšāϤ⧇ āĻĒāĻžāϰ⧇"</string>
<string name="revanced_ryd_shorts_summary_off">Shorts āĻ āĻ…āĻĒāĻ›āĻ¨ā§āĻĻ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_ryd_dislike_percentage_title">āĻ…āĻĒāĻ›āĻ¨ā§āĻĻāϗ⧁āϞ⧋ āĻļāϤāĻžāĻ‚āĻļ āĻ…āύ⧁āϝāĻžā§Ÿā§€</string>
<string name="revanced_ryd_dislike_percentage_summary_on">āĻ…āĻĒāĻ›āĻ¨ā§āĻĻāϗ⧁āϞ⧋ āĻļāϤāĻžāĻ‚āĻļ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
@@ -684,6 +801,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_wide_searchbar_summary_off">āĻĒā§āϰāĻļāĻ¸ā§āϤ āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻŦāĻžāϰ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋ⧟ āĻšā§Ÿā§‡āϛ⧇</string>
</patch>
<patch id="layout.seekbar.seekbarThumbnailsPatch">
<string name="revanced_seekbar_thumbnails_high_quality_title">āωāĻšā§āϚāĻŽāĻžāύ⧇āϰ āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ</string>
<string name="revanced_seekbar_thumbnails_high_quality_summary_on">āϏāĻŋāĻ•āĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞ āωāĻšā§āϚāĻŽāĻžāύ⧇āϰ</string>
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">āϏāĻŋāĻ•āĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞ āĻŽāĻžāĻāĻžāϰāĻŋāĻŽāĻžāύ⧇āϰ</string>
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">āĻĒā§‚āĻ°ā§āĻŖ āĻĒāĻ°ā§āĻĻāĻžāϝāĻŧ āϏāĻŋāĻ•āĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞ āωāĻšā§āϚāĻŽāĻžāύ⧇āϰ</string>
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">āĻĒā§‚āĻ°ā§āĻŖ āĻĒāĻ°ā§āĻĻāĻžāϝāĻŧ āϏāĻŋāĻ•āĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞ āĻŽāĻžāĻāĻžāϰāĻŋāĻŽāĻžāύ⧇āϰ</string>
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"āĻāϟāĻŋ āϏ⧇āχ āϞāĻžāχāĻ­āĻ¸ā§āĻŸā§āϰāĻŋāĻŽāϗ⧁āϞāĻŋāϤ⧇ āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāĻŦ⧇ āϝ⧇āĻ–āĻžāύ⧇ āϏāĻŋāĻ•āĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞ āύ⧇āχāĨ¤
āϏāĻŋāĻ•āĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻ­āĻŋāĻĄāĻŋāĻ“āϰ āĻāĻ•āχ āĻŽāĻžāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āĨ¤
āĻāχ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϟāĻŋ 720p āĻ…āĻĨāĻŦāĻž āϤāĻžāϰ āĻšā§‡āϝāĻŧ⧇ āĻ•āĻŽ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻŽāĻžāύ āĻāĻŦāĻ‚ āϖ⧁āĻŦ āĻĻā§āϰ⧁āϤ āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āϏāĻ‚āϝ⧋āĻ— āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻ­āĻžāϞ⧋ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤"</string>
<string name="revanced_restore_old_seekbar_thumbnails_title">āĻĒ⧁āϰ⧋āύ⧋ āϏāĻŋāĻ•āĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰ⧁āύ</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">āϏāĻŋāĻ•āĻŦāĻžāϰ āĻāϰ āωāĻĒāϰ⧇ āϏāĻŋāĻ•āĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻŦ⧇</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">āĻĒā§‚āĻ°ā§āĻŖāĻ¸ā§āĻ•ā§āϰ⧀āϪ⧇ āϏāĻŋāĻ•āĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻŦ⧇</string>
@@ -730,6 +857,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_general_skipcount_sum_off">āĻ¸ā§āĻ•āĻŋāĻĒ āĻ•āĻžāωāĻ¨ā§āϟ āĻŸā§āĻ°ā§āϝāĻžāĻ•āĻŋāĻ‚ āϏāĻ•ā§āϰāĻŋ⧟ āĻšā§ŸāύāĻŋ</string>
<string name="revanced_sb_general_min_duration">āĻ¨ā§āϝ⧂āύāϤāĻŽ āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟ āϏāĻŽāϝāĻŧāĻ•āĻžāϞ</string>
<string name="revanced_sb_general_min_duration_sum">āĻāχ āĻŽāĻžāύ (āϏ⧇āϕ⧇āĻ¨ā§āĻĄ) āĻšāϤ⧇ āĻ•āĻŽ āĻĻ⧈āĻ°ā§āĻ˜ā§āϝ⧇āϰ āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻŦāĻž āĻ¸ā§āĻ•āĻŋāĻĒ āĻ•āϰāĻž āĻšāĻŦ⧇ āύāĻž</string>
<string name="revanced_sb_general_min_duration_invalid">āĻ…āĻŦ⧈āϧ āϏāĻŽāϝāĻŧāĻ•āĻžāϞ</string>
<string name="revanced_sb_general_uuid">āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āφāχāĻĄāĻŋ</string>
<string name="revanced_sb_general_uuid_sum">āĻāϟāĻŋ āĻ—ā§‹āĻĒāύ āϰāĻžāĻ–āĻž āωāϚāĻŋāϤāĨ¤ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄā§‡āϰ āĻŽāϤ⧋ āĻāĻŦāĻ‚ āĻ•āĻžāϰāĻ“ āϏāĻžāĻĨ⧇ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻž āωāϚāĻŋāϤ āύāϝāĻŧāĨ¤ āϝāĻĻāĻŋ āĻ•āĻžāϰāĻ“ āĻ•āĻžāϛ⧇ āĻāϟāĻŋ āĻĨāĻžāϕ⧇, āϤāĻŦ⧇ āϤāĻžāϰāĻž āφāĻĒāύāĻžāϰ āĻ›āĻĻā§āĻŽāĻŦ⧇āĻļ āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇</string>
<string name="revanced_sb_general_uuid_invalid">āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤ āĻŦā§āϝāĻŦāĻšāĻžāĻ•āĻžāϰ⧀ āφāχāĻĄāĻŋ āĻ…āĻŦāĻļā§āϝāχ ā§Šā§Ļ āĻ…āĻ•ā§āώāϰ āϞāĻŽā§āĻŦāĻž āĻšāϤ⧇ āĻšāĻŦ⧇</string>
@@ -745,7 +873,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_settings_import_successful">āϏ⧇āϟāĻŋāĻ‚ āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āφāĻŽāĻĻāĻžāύāĻŋ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_sb_settings_import_failed">%s āφāĻŽāĻĻāĻžāύāĻŋ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻ°ā§āĻĨ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_sb_settings_export_failed">%s āϰāĻĒā§āϤāĻžāύāĻŋ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻ°ā§āĻĨ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning">āφāĻĒāύāĻžāϰ āϏ⧇āϟāĻŋāĻ‚āĻ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻžāχāϭ⧇āϟ SponsorBlock āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āφāχāĻĄāĻŋ āĻ°ā§Ÿā§‡āϛ⧇āĨ¤\n\nāφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āφāχāĻĄāĻŋ āĻ…āύ⧇āĻ•āϟāĻž āĻĒāĻžāϏāĻ“ā§ŸāĻžāĻ°ā§āĻĄā§‡āϰ āĻŽāϤ⧋ āϤāĻžāχ āĻāϟāĻŋ āĻ•āĻ–āύ⧋āχ āĻļā§‡ā§ŸāĻžāϰ āĻ•āϰāĻž āωāϚāĻŋāϤ āύ⧟āĨ¤\n</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning">"āφāĻĒāύāĻžāϰ āϏ⧇āϟāĻŋāĻ‚āϏ⧇ āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤ SponsorBlock āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ ID āϰāϝāĻŧ⧇āϛ⧇āĨ¤
āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ ID āĻāĻ•āϟāĻŋ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄā§‡āϰ āĻŽāϤ⧋ āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻ•āĻ–āύāĻ“ āĻ­āĻžāĻ— āĻ•āϰāĻž āωāϚāĻŋāϤ āύāϝāĻŧāĨ¤"</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">āφāĻŦāĻžāϰ āĻĻ⧇āĻ–āĻžāĻŦ⧇āύ āύāĻž</string>
<string name="revanced_sb_diff_segments">āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟ āφāϚāϰāĻŖ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ</string>
<string name="revanced_sb_segments_sponsor">āĻ¸ā§āĻĒāĻ¨ā§āϏāϰ</string>
@@ -805,9 +935,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_submit_failed_invalid">%s āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟ āϜāĻŽāĻž āĻĻāĻŋāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšā§ŸāύāĻŋ</string>
<string name="revanced_sb_submit_failed_timeout">SponsorBlock āϏāĻžāĻŽā§ŸāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻŦāĻ¨ā§āϧ āφāϛ⧇</string>
<string name="revanced_sb_submit_failed_unknown_error">āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟ āϜāĻŽāĻž āĻĻāĻŋāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšā§ŸāύāĻŋ (āĻ…āĻŦāĻ¸ā§āĻĨāĻž: %1$d %2$s)</string>
<string name="revanced_sb_submit_failed_rate_limit">āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟ āϜāĻŽāĻž āĻ•āϰāĻž āϏāĻŽā§āĻ­āĻŦ āĻšā§ŸāύāĻŋāĨ¤\nāϰ⧇āϟ āϞāĻŋāĻŽāĻŋāϟ (āĻāĻ•āχ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻŦāĻž IP āĻĨ⧇āϕ⧇ āĻ…āύ⧇āĻ• āĻŦ⧇āĻļāĻŋ)</string>
<string name="revanced_sb_submit_failed_rate_limit">āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟ āϜāĻŽāĻž āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰāĻ›āĻŋ āύāĻžāĨ¤ āĻšāĻžāϰ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧ (āĻāĻ•āχ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻŦāĻž IP āĻĨ⧇āϕ⧇ āϖ⧁āĻŦ āĻŦ⧇āĻļāĻŋ)āĨ¤</string>
<string name="revanced_sb_submit_failed_forbidden">āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟ āϜāĻŽāĻž āĻ•āϰāĻž āϝāĻžāĻŦ⧇ āύāĻž: %s</string>
<string name="revanced_sb_submit_failed_duplicate">āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟ āϜāĻŽāĻž āĻ•āϰāĻž āϏāĻŽā§āĻ­āĻŦ āύ⧟āĨ¤\nāχāϤ⧋āĻŽāĻ§ā§āϝ⧇ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_sb_submit_failed_duplicate">"āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟ āϜāĻŽāĻž āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰāĻ›āĻŋ āύāĻžāĨ¤
āĻĒā§‚āĻ°ā§āĻŦ⧇āχ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ"</string>
<string name="revanced_sb_submit_succeeded">āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟ āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āϜāĻŽāĻž āĻšā§Ÿā§‡āϛ⧇</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 āϏāĻžāĻŽā§ŸāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āωāĻĒāϞāĻ­ā§āϝ āύ⧟ (API āϏāĻŽā§Ÿ āĻļ⧇āώ āĻšā§Ÿā§‡āϛ⧇)</string>
@@ -823,13 +954,23 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_choose_category">āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āĻŦāĻŋāĻ­āĻžāĻ— āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰ⧁āύ</string>
<string name="revanced_sb_new_segment_disabled_category">āϏ⧇āϟāĻŋāĻ‚ āĻĨ⧇āϕ⧇ āĻŦāĻŋāĻ­āĻžāĻ— āύāĻŋāĻ¸ā§āĻ•ā§āϰāĻŋ⧟ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇āĨ¤ āϜāĻŽāĻž āĻĻāĻŋāϤ⧇ āĻŦāĻŋāĻ­āĻžāĻ— āϏāĻ•ā§āϰāĻŋ⧟ āĻ•āϰ⧁āύāĨ¤</string>
<string name="revanced_sb_new_segment_title">āύāϤ⧁āύ āĻ¸ā§āĻĒāĻ¨ā§āϏāϰāĻŦā§āϞāĻ• āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟ</string>
<string name="revanced_sb_new_segment_mark_time_as_question">%s āϕ⧇ āύāϤ⧁āύ āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āĻļ⧁āϰ⧁ āĻ…āĻĨāĻŦāĻž āĻļ⧇āώ āĻšāĻŋāϏ⧇āĻŦ⧇ āϏ⧇āϟ āĻ•āϰ⧁āύ?</string>
<string name="revanced_sb_new_segment_mark_start">āĻļ⧁āϰ⧁</string>
<string name="revanced_sb_new_segment_mark_end">āĻļ⧇āώ</string>
<string name="revanced_sb_new_segment_now">āĻāĻ–āύ</string>
<string name="revanced_sb_new_segment_time_start">āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟāϟāĻŋ āĻļ⧁āϰ⧁ āĻšāĻ“āϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ</string>
<string name="revanced_sb_new_segment_time_end">āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟāϟāĻŋ āĻļ⧇āώ āĻšāĻ“āϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ</string>
<string name="revanced_sb_new_segment_confirm_title">āϏāĻŽāϝāĻŧāĻ•āĻžāϞ āĻ•āĻŋ āϏāĻ āĻŋāĻ•?</string>
<string name="revanced_sb_new_segment_confirm_content">āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟ āϏāĻŽā§ŸāĻ•āĻžāϞ\n\n%1$s\nāĻĨ⧇āϕ⧇\n%2$s\n\n(%3$s)\n\nāϜāĻŽāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ?</string>
<string name="revanced_sb_new_segment_confirm_content">"āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟāϟāĻŋ
%1$s
āĻĨ⧇āϕ⧇
%2$s
āĻāĻŦāĻ‚
(%3$s)
āϜāĻŽāĻž āĻĻāĻŋāϤ⧇ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤāĨ¤"</string>
<string name="revanced_sb_new_segment_start_is_before_end">āĻļ⧁āϰ⧁ āĻ…āĻŦāĻļā§āϝāχ āĻļ⧇āώ⧇āϰ āφāϗ⧇ āĻšāϤ⧇ āĻšāĻŦ⧇</string>
<string name="revanced_sb_new_segment_mark_locations_first">āφāϗ⧇ āϏāĻŽā§Ÿ āĻŦāĻžāϰ⧇ āĻĻ⧁āϟāĻŋ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāύ āϚāĻŋāĻšā§āύāĻŋāϤ āĻ•āϰ⧁āύ</string>
<string name="revanced_sb_new_segment_preview_segment_first">āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟāϟāĻŋ āĻĒā§‚āĻ°ā§āĻŦāϰ⧂āĻĒ āĻĻ⧇āϖ⧁āύ āĻāĻŦāĻ‚ āύāĻŋāĻļā§āϚāĻŋāϤ āĻšā§‹āύ āϝ⧇ āĻāϟāĻŋ āĻŽāϏ⧃āĻŖāĻ­āĻžāĻŦ⧇ āĻā§œāĻŋā§Ÿā§‡ āϝāĻžāĻšā§āϛ⧇</string>
@@ -847,6 +988,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_stats_username_changed">āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻžāĻŽ āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_sb_stats_reputation">āφāĻĒāύāĻžāϰ āϰāĻŋāĻĒ⧁āĻŸā§‡āĻļāύ āĻšāϞ &lt;b&gt;%.2f&lt;/b&gt;</string>
<string name="revanced_sb_stats_submissions">āφāĻĒāύāĻŋ &lt;b&gt;%s&lt;/b&gt; āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āϛ⧇āύ</string>
<string name="revanced_sb_stats_submissions_sum">āφāĻĒāύāĻžāϰ āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟ āĻĻ⧇āĻ–āϤ⧇ āĻāĻ–āĻžāύ⧇ āĻŸā§āϝāĻžāĻĒ āĻ•āϰ⧁āύ</string>
<string name="revanced_sb_stats_saved_zero">SponsorBlock āϞāĻŋāĻĄāĻžāϰāĻŦā§‹āĻ°ā§āĻĄ</string>
<string name="revanced_sb_stats_saved">āφāĻĒāύāĻŋ āĻŽāĻžāύ⧁āώāϕ⧇ &lt;b&gt;%s&lt;/b&gt; āϏ⧇āĻ—āĻŽā§‡āĻ¨ā§āϟ āĻĨ⧇āϕ⧇ āĻŦāĻžāρāϚāĻŋā§Ÿā§‡āϛ⧇āύ</string>
<string name="revanced_sb_stats_saved_sum_zero">āĻŦ⧈āĻļā§āĻŦāĻŋāĻ• āĻĒāϰāĻŋāϏāĻ‚āĻ–ā§āϝāĻžāύ āĻāĻŦāĻ‚ āĻļā§€āĻ°ā§āώ āĻ…āĻŦāĻĻāĻžāύāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻĻ⧇āĻ–āϤ⧇ āĻāĻ–āĻžāύ⧇ āĻŸā§āϝāĻžāĻĒ āĻ•āϰ⧁āύ</string>
@@ -870,10 +1012,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_app_version_title">āĻ…ā§āϝāĻžāĻĒ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻ¸ā§āĻĒ⧁āĻĢ āĻ•āϰ⧁āύ</string>
<string name="revanced_spoof_app_version_summary_on">āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻ¸ā§āĻĒ⧁āĻĢ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_spoof_app_version_summary_off">āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻ¸ā§āĻĒ⧁āĻĢ āĻ•āϰāĻž āĻšā§ŸāύāĻŋ</string>
<string name="revanced_spoof_app_version_user_dialog_message">āĻ…ā§āϝāĻžāĻĒ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĒ⧁āϰ⧋āύ⧋ āĻāĻ•āϟāĻŋ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇ āĻ¸ā§āĻĒ⧁āĻĢ āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤\n\nāĻāϟāĻŋ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āĻšā§‡āĻšāĻžāϰāĻž āĻāĻŦāĻ‚ āĻĢāĻŋāϚāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϤ⧇ āĻ…āύāĻžāĻ•āĻžāĻ™ā§āĻ–āĻŋāϤ āĻĒāĻžāĻ°ā§āĻļā§āĻŦāĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋ⧟āĻž āĻĻ⧇āĻ–āĻž āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤\n\nāĻĒāϰāĻŦāĻ°ā§āϤ⧀āϤ⧇ āĻŦāĻ¨ā§āϧ āĻ•āϰāĻž āĻšāϞ⧇, UI āĻŦāĻžāĻ— āĻĨ⧇āϕ⧇ āĻŦāĻžāρāϚāϤāĻŋ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āĻĄāĻžāϟāĻž āĻ•ā§āϞāĻŋ⧟āĻžāϰ āĻ•āϰāĻžāϰ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāύāĻž āϰāχāϞ⧋āĨ¤</string>
<string name="revanced_spoof_app_version_user_dialog_message">"āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϟāĻŋ YouTube-āĻāϰ āĻĒ⧁āϰāύ⧋ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇ āϭ⧁āϝāĻŧāĻž āĻšāĻŦ⧇āĨ¤
āĻāϟāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋāϰ āĻšā§‡āĻšāĻžāϰāĻž āĻāĻŦāĻ‚ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻŦ⧇, āϤāĻŦ⧇ āĻ…āϜāĻžāύāĻž āĻĒāĻžāĻ°ā§āĻļā§āĻŦ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
āĻĒāϰ⧇ āϝāĻĻāĻŋ āĻŦāĻ¨ā§āϧ āĻ•āϰāĻž āĻšāϝāĻŧ, UI āĻŦāĻžāĻ— āĻāĻĄāĻŧāĻžāϤ⧇ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻĄā§‡āϟāĻž āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰāĻžāϰ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧāĨ¤"</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">āĻ¸ā§āĻĒ⧁āĻĢ āĻ…ā§āϝāĻžāĻĒ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϞāĻ•ā§āĻˇā§āϝ</string>
<string name="revanced_spoof_app_version_target_entry_1">19.35.36 - āĻĒ⧁āϰāύ⧋ Shorts āĻĒā§āϞ⧇āϝāĻŧāĻžāϰ āφāχāĻ•āύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰ⧁āύ</string>
<!-- 'RYD' is 'Return YouTube Dislike' -->
<string name="revanced_spoof_app_version_target_legacy_entry_1">18.33.40 - āĻ›āĻĻā§āĻŽāĻŦ⧇āĻļāĻŋ āĻŽā§‹āĻĄā§‡ RYD āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰ⧇</string>
<string name="revanced_spoof_app_version_target_legacy_entry_2">18.20.39 - āĻĒā§āϰāĻļā§āĻŦāĻ¸ā§āϤ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻ¸ā§āĻĒāĻŋāĻĄ āĻāĻŦāĻ‚ āϗ⧁āĻŖāĻŽāĻžāύ āĻŽā§‡āύ⧁ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰ⧇</string>
@@ -883,12 +1030,20 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="layout.startpage.changeStartPagePatch">
<string name="revanced_change_start_page_title">āĻļ⧁āϰ⧁āϰ āĻĒ⧃āĻˇā§āĻ āĻž āϏ⧇āϟ āĻ•āϰ⧁āύ</string>
<string name="revanced_change_start_page_entry_default">āĻĒā§‚āĻ°ā§āĻŦ-āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ</string>
<string name="revanced_change_start_page_entry_browse">āĻšā§āϝāĻžāύ⧇āϞ āĻŦā§āϰāĻžāωāϜ āĻ•āϰ⧁āύ</string>
<string name="revanced_change_start_page_entry_explore">āϘ⧁āϰ⧇ āĻĻ⧇āϖ⧁āύ</string>
<string name="revanced_change_start_page_entry_gaming">āϗ⧇āĻŽāĻŋāĻ‚</string>
<string name="revanced_change_start_page_entry_history">āχāϤāĻŋāĻšāĻžāϏ</string>
<string name="revanced_change_start_page_entry_library">āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ</string>
<string name="revanced_change_start_page_entry_liked_videos">āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰāĻž āĻ­āĻŋāĻĄāĻŋāĻ“āϗ⧁āϞāĻŋ</string>
<string name="revanced_change_start_page_entry_live">āϞāĻžāχāĻ­</string>
<string name="revanced_change_start_page_entry_movies">āĻŽā§āĻ­āĻŋ</string>
<string name="revanced_change_start_page_entry_music">āϏāĻ™ā§āĻ—ā§€āϤ</string>
<string name="revanced_change_start_page_entry_search">āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ</string>
<string name="revanced_change_start_page_entry_sports">āϖ⧇āϞāĻžāϧ⧁āϞāĻž</string>
<string name="revanced_change_start_page_entry_subscriptions">āϏāĻĻāĻ¸ā§āϝāϤāĻž</string>
<string name="revanced_change_start_page_entry_trending">āĻāĻ–āύ āϜāύāĻĒā§āϰāĻŋ⧟</string>
<string name="revanced_change_start_page_entry_watch_later">āĻĒāϰ⧇ āĻĻ⧇āϖ⧁āύ</string>
</patch>
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
<string name="revanced_disable_resuming_shorts_player_title">Shorts āĻĒā§āĻ˛ā§‡ā§ŸāĻžāϰ āφāĻŦāĻžāϰ āϚāĻžāϞāĻžāύ⧋ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋ⧟ āĻ•āϰ⧁āύ</string>
@@ -896,6 +1051,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_disable_resuming_shorts_player_summary_off">āĻ…ā§āϝāĻžāĻĒ⧇āϰ āĻļ⧁āϰ⧁āϤ⧇ Shorts āĻĒā§āĻ˛ā§‡ā§ŸāĻžāϰ āφāĻŦāĻžāϰ āϚāϞāĻŦ⧇</string>
</patch>
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
<string name="revanced_shorts_autoplay_title">āĻ…āĻŸā§‹āĻĒā§āϞ⧇ Shorts</string>
<string name="revanced_shorts_autoplay_summary_on">Shorts āĻ…āĻŸā§‹āĻĒā§āϞ⧇ āĻšāĻŦ⧇</string>
<string name="revanced_shorts_autoplay_summary_off">Shorts āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āĻšāĻŦ⧇</string>
<string name="revanced_shorts_autoplay_background_title">āĻĒāϟāĻ­ā§‚āĻŽāĻŋāϤ⧇ Shorts āĻ…āĻŸā§‹āĻĒā§āϞ⧇</string>
<string name="revanced_shorts_autoplay_background_summary_on">āĻĒāϟāĻ­ā§‚āĻŽāĻŋāϤ⧇ Shorts āĻ…āĻŸā§‹āĻĒā§āϞ⧇ āĻšāĻŦ⧇</string>
<string name="revanced_shorts_autoplay_background_summary_off">āĻĒāϟāĻ­ā§‚āĻŽāĻŋāϤ⧇ Shorts āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āĻšāĻŦ⧇</string>
</patch>
<patch id="layout.tablet.enableTabletLayoutPatch">
<string name="revanced_tablet_layout_title">āĻŸā§āϝāĻžāĻŦāϞ⧇āϟ āϞ⧇āφāωāϟ āϏāĻ•ā§āϰāĻŋ⧟ āĻ•āϰ⧁āύ</string>
@@ -908,18 +1069,48 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_miniplayer_screen_summary">āĻ…ā§āϝāĻžāĻĒ⧇āϰ āĻŽāĻ§ā§āϝāĻ•āĻžāϰ āĻŽāĻŋāύāĻŋāĻŽāĻžāχāϜāĻĄ āĻĒā§āĻ˛ā§‡ā§ŸāĻžāϰ āĻāϰ āϧāϰāĻŖ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ</string>
<string name="revanced_miniplayer_type_title">āĻŽāĻŋāύāĻŋāĻĒā§āĻ˛ā§‡ā§ŸāĻžāϰ āϧāϰāĻŖ</string>
<string name="revanced_miniplayer_type_entry_0">āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋ⧟ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_miniplayer_type_entry_1">āφāϏāϞ</string>
<string name="revanced_miniplayer_type_entry_1">āĻĒā§‚āĻ°ā§āĻŦ-āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ</string>
<string name="revanced_miniplayer_type_entry_2">āĻ¨ā§āϝ⧂āύāϤāĻŽ</string>
<string name="revanced_miniplayer_type_entry_3">āĻŸā§āϝāĻžāĻŦāϞ⧇āϟ</string>
<string name="revanced_miniplayer_type_entry_4">āĻŽāĻ°ā§āĻĄāĻžāύ ā§§</string>
<string name="revanced_miniplayer_type_entry_5">āĻŽāĻ°ā§āĻĄāĻžāύ ⧍</string>
<string name="revanced_miniplayer_type_entry_6">āĻŽāĻ°ā§āĻĄāĻžāύ ā§Š</string>
<string name="revanced_miniplayer_rounded_corners_title">āĻ—ā§‹āϞāĻžāĻ•āĻžāϰ āϕ⧋āĻŖ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ</string>
<string name="revanced_miniplayer_rounded_corners_summary_on">āϕ⧋āĻŖāϗ⧁āϞāĻŋ āĻ—ā§‹āϞāĻžāĻ•āĻžāϰ</string>
<string name="revanced_miniplayer_rounded_corners_summary_off">āϕ⧋āĻŖāϗ⧁āϞāĻŋ āĻŦāĻ°ā§āĻ—āĻžāĻ•āĻžāϰ</string>
<string name="revanced_miniplayer_double_tap_action_title">āĻĄāĻžāĻŦāϞ-āĻŸā§āϝāĻžāĻĒ āĻāĻŦāĻ‚ āĻĒāĻŋāĻžā§āϚ āϟ⧁ āϰāĻŋāϏāĻžāχāϜ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ</string>
<string name="revanced_miniplayer_double_tap_action_summary_on">"āĻĄāĻžāĻŦāϞ-āĻŸā§āϝāĻžāĻĒ āĻ•āϰāĻžāϰ āĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻāĻŦāĻ‚ āφāĻ•āĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϚāĻŋāĻŽāϟāĻŋ āĻĻ⧇āĻ“āϝāĻŧāĻž āϏāĻ•ā§āϰāĻŋāϝāĻŧ
â€ĸ miniplayer āφāĻ•āĻžāϰ āĻŦ⧃āĻĻā§āϧāĻŋ āĻ•āϰāϤ⧇ āĻĄāĻžāĻŦāϞ āĻŸā§āϝāĻžāĻĒ āĻ•āϰ⧁āύ
â€ĸ āĻŽā§‚āϞ āφāĻ•āĻžāϰ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāϤ⧇ āφāĻŦāĻžāϰ āĻĄāĻžāĻŦāϞ āĻŸā§āϝāĻžāĻĒ āĻ•āϰ⧁āύ"</string>
<string name="revanced_miniplayer_double_tap_action_summary_off">āĻĄāĻžāĻŦāϞ-āĻŸā§āϝāĻžāĻĒ āĻ…ā§āϝāĻžāĻ•āĻļāύ āĻāĻŦāĻ‚ āĻĒāĻŋāĻžā§āϚ āϟ⧁ āϰāĻŋāϏāĻžāχāϜ āĻ…āĻ•ā§āώāĻŽ</string>
<string name="revanced_miniplayer_drag_and_drop_title">āĻĄā§āĻ°ā§āϝāĻžāĻ— āĻāĻŦāĻ‚ āĻĄā§āϰāĻĒ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ</string>
<string name="revanced_miniplayer_drag_and_drop_summary_on">"āĻĄā§āĻ°ā§āϝāĻžāĻ— āĻāĻŦāĻ‚ āĻĄā§āϰāĻĒ āϏāĻ•ā§āϰāĻŋāϝāĻŧ
Miniplayer āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇āϰ āϝ⧇āϕ⧋āύ⧋ āϕ⧋āϪ⧇ āϟāĻžāύāĻž āϝāĻžāĻŦ⧇"</string>
<string name="revanced_miniplayer_drag_and_drop_summary_off">āĻĄā§āĻ°ā§āϝāĻžāĻ— āĻāĻŦāĻ‚ āĻĄā§āϰāĻĒ āĻ…āĻ•ā§āώāĻŽ</string>
<string name="revanced_miniplayer_horizontal_drag_title">āĻ…āύ⧁āĻ­ā§‚āĻŽāĻŋāĻ• āĻĄā§āĻ°ā§āϝāĻžāĻ— āĻ…āĻ™ā§āĻ—āĻ­āĻ™ā§āĻ—āĻŋ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ</string>
<string name="revanced_miniplayer_horizontal_drag_summary_on">"āĻ•ā§āώāĨˆāϤāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āϟāĻžāύāĻžāϰ āĻ­āĻ™ā§āĻ—āĻŋ āϏāĻ•ā§āϰāĻŋāϝāĻŧ
Miniplayer āĻ¸ā§āĻ•ā§āϰāĻŋāύ āĻĨ⧇āϕ⧇ āĻŦāĻžāĻŽā§‡ āĻŦāĻž āĻĄāĻžāύ⧇ āϟāĻžāύāĻž āϝāĻžāĻŦ⧇"</string>
<string name="revanced_miniplayer_horizontal_drag_summary_off">āĻ…āύ⧁āĻ­ā§‚āĻŽāĻŋāĻ• āĻĄā§āĻ°ā§āϝāĻžāĻ— āĻ…āĻ™ā§āĻ—āĻ­āĻ™ā§āĻ—āĻŋ āĻ…āĻ•ā§āώāĻŽ</string>
<string name="revanced_miniplayer_hide_expand_close_title">āĻŦāĻ¨ā§āϧ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_miniplayer_hide_expand_close_summary_on">āĻŦāĻ¨ā§āϧ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_miniplayer_hide_expand_close_summary_off">āĻŦāĻ¨ā§āϧ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_title">āĻŦāĻŋāĻ¸ā§āϤ⧃āϤ āĻ“ āĻŦāĻ¨ā§āϧ āĻ•āϰāĻžāϰ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"āĻŦā§‹āϤāĻžāĻŽāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻžāύ⧋ āĻšāϝāĻŧ
āĻŦāĻŋāĻ¸ā§āϤ⧃āϤ āĻ•āϰāϤ⧇ āĻŦāĻž āĻŦāĻ¨ā§āϧ āĻ•āϰāϤ⧇ āϏ⧋āϝāĻŧāĻžāχāĻĒ āĻ•āϰ⧁āύ"</string>
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">āĻŦāĻŋāĻ¸ā§āϤ⧃āϤ āĻāĻŦāĻ‚ āĻŦāĻ¨ā§āϧ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_miniplayer_hide_subtext_title">āωāĻĒāĻĒāĻžāĻ  āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_miniplayer_hide_subtext_summary_on">āωāĻĒāĻĒāĻžāĻ  āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_miniplayer_hide_subtext_summary_off">āωāĻĒāĻĒāĻžāĻ  āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_miniplayer_hide_rewind_forward_title">āϏāĻžāĻŽāύ⧇ āĻŦāĻž āĻĒ⧇āĻ›āύ⧇ āĻā§œāĻŋā§Ÿā§‡ āϝāĻžāĻ“ā§ŸāĻžāϰ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">āϏāĻžāĻŽāύ⧇ āĻŦāĻž āĻĒ⧇āĻ›āύ⧇ āĻā§œāĻŋā§Ÿā§‡ āϝāĻžāĻ“ā§ŸāĻžāϰ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">āϏāĻžāĻŽāύ⧇ āĻŦāĻž āĻĒ⧇āĻ›āύ⧇ āĻā§œāĻŋā§Ÿā§‡ āϝāĻžāĻ“ā§ŸāĻžāϰ āĻŦā§‹āϤāĻžāĻŽ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_miniplayer_width_dip_title">āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āφāĻ•āĻžāϰ</string>
<string name="revanced_miniplayer_width_dip_summary">āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āĻĒāĻ°ā§āĻĻāĻžāϰ āφāĻ•āĻžāϰ, āĻĒāĻŋāĻ•ā§āϏ⧇āϞ⧇</string>
<string name="revanced_miniplayer_width_dip_invalid_toast">āĻĒāĻŋāĻ•ā§āϏ⧇āϞ āφāĻ•āĻžāϰ %1$s āĻāĻŦāĻ‚ %2$s āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻšāϤ⧇ āĻšāĻŦ⧇</string>
<string name="revanced_miniplayer_opacity_title">āĻ“āĻ­āĻžāϰāϞ⧇ āĻ…āĻ¸ā§āĻŦāĻšā§āĻ›āϤāĻž</string>
<string name="revanced_miniplayer_opacity_summary">āĻ…āϏāĻšā§āĻ›āϤāĻž āĻŽāĻžāύ ā§Ļ-ā§§ā§Ļā§Ļ āĻāϰ āĻŽāĻ§ā§āϝ⧇, āϝ⧇āĻ–āĻžāύ⧇ ā§Ļ āĻšāϞ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻŦāĻšā§āĻ›</string>
<string name="revanced_miniplayer_opacity_invalid_toast">āĻŽāĻŋāύāĻŋāĻĒā§āĻ˛ā§‡ā§ŸāĻžāϰ āĻ“āĻ­āĻžāϰāϞ⧇ āĻ…āĻ¸ā§āĻŦāĻšā§āĻ›āϤāĻž āĻ…āĻŦāĻļā§āϝāχ ā§Ļ-ā§§ā§Ļā§Ļ āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻšāϤ⧇ āĻšāĻŦ⧇</string>
@@ -935,8 +1126,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_seekbar_custom_color_summary_off">āϏāĻŋāĻ•āĻŦāĻžāϰ⧇ āĻŽā§‚āϞ āϰāĻ‚ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_seekbar_custom_color_value_title">āύāĻŋāϜāĻ¸ā§āĻŦ āϏāĻŋāĻ•āĻŦāĻžāϰ āϰāĻ‚</string>
<string name="revanced_seekbar_custom_color_value_summary">āϏāĻŋāĻ•āĻŦāĻžāϰ⧇āϰ āϰāĻ‚</string>
<string name="revanced_seekbar_custom_color_invalid">āĻ…āĻŦ⧈āϧ āϏāĻŋāĻ•āĻŦāĻžāϰ āϰāĻ™ āĻŽāĻžāύ</string>
</patch>
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
<string name="revanced_bypass_image_region_restrictions_title">āĻ›āĻŦāĻŋ āĻ…āĻžā§āϚāϞ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž āĻŦāĻžāχāĻĒāĻžāϏ āĻ•āϰ⧁āύ</string>
<string name="revanced_bypass_image_region_restrictions_summary_on">yt4.ggpht.com āĻ›āĻŦāĻŋ āĻšā§‹āĻ¸ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇</string>
<string name="revanced_bypass_image_region_restrictions_summary_off">"āĻŽā§‚āϞ āĻ›āĻŦāĻŋ āĻšā§‹āĻ¸ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇
āĻāϟāĻŋ āϏāĻ•ā§āώāĻŽ āĻ•āϰāϞ⧇ āĻ•āĻŋāϛ⧁ āĻ…āĻžā§āϚāϞ⧇ āĻŦā§āϞāĻ• āĻ•āϰāĻž āĻĨāĻžāĻ•āĻž āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻ›āĻŦāĻŋāϗ⧁āϞāĻŋ āϏāĻ‚āĻļā§‹āϧāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇"</string>
</patch>
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
@@ -951,7 +1148,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow āĻāĻŦāĻ‚ āĻŽā§‚āϞ āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞ</string>
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻŋāϰ āĻ›āĻŦāĻŋ</string>
<string name="revanced_alt_thumbnail_options_entry_4">āĻ¸ā§āĻĨāĻŋāϰ āĻ›āĻŦāĻŋ</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow YouTube āĻ­āĻŋāĻĄāĻŋāĻ“āϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻ•ā§āϰāĻžāωāĻĄ-āϏ⧋āĻ°ā§āϏāĻĄ āĻĨāĻžāĻŽā§āĻŦāύ⧇āϞ āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰ⧇āĨ¤ āĻāχ āĻĨāĻžāĻŽā§āĻŦāύ⧇āϞāϗ⧁āϞāĻŋ āĻĒā§āϰāĻžāϝāĻŧāχ YouTube āĻĻā§āĻŦāĻžāϰāĻž āĻĒā§āϰāĻĻāĻ¤ā§āϤ āĻĨāĻžāĻŽā§āĻŦāύ⧇āϞāϗ⧁āϞāĻŋāϰ āĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āĻĒā§āϰāĻžāϏāĻ™ā§āĻ—āĻŋāĻ•\n\nāĻ…āύ āĻ•āϰāϞ⧇, āĻ­āĻŋāĻĄāĻŋāĻ“ URLāϗ⧁āϞāĻŋ API āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻĒāĻžāĻ āĻžāύ⧋ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝ āϕ⧋āύāĻ“ āĻĄā§‡āϟāĻž āĻĒāĻžāĻ āĻžāύ⧋ āĻšāĻŦ⧇ āύāĻžā§ˇ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻ­āĻŋāĻĄāĻŋāĻ“āϤ⧇ DeArrow āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞ āύāĻž āĻĨāĻžāϕ⧇, āϤāĻžāĻšāϞ⧇ āφāϏāϞ āĻŦāĻž āĻ¸ā§āĻĨāĻŋāϰ āϚāĻŋāĻ¤ā§āϰ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ\n\nDeArrow āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύāϤ⧇ āĻāĻ–āĻžāύ⧇ āϚāĻžāĻĒ⧁āύ</string>
<string name="revanced_alt_thumbnail_dearrow_about_title">DeArrow</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow YouTube āĻ­āĻŋāĻĄāĻŋāĻ“āϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āϜāύāĻ—āϪ⧇āϰ āĻ‰ā§ŽāϏ āĻĨ⧇āϕ⧇ āϤ⧈āϰāĻŋ āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞ āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰ⧇āĨ¤ āĻāχ āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞāϗ⧁āϞāĻŋ āĻĒā§āϰāĻžāϝāĻŧāĻļāχ YouTube āĻĻā§āĻŦāĻžāϰāĻž āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰāĻž āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞāϗ⧁āϞāĻŋāϰ āĻšā§‡āϝāĻŧ⧇ āφāϰāĻ“ āĻĒā§āϰāĻžāϏāĻ™ā§āĻ—āĻŋāĻ•āĨ¤
āϝāĻĻāĻŋ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāĻž āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ āĻ­āĻŋāĻĄāĻŋāĻ“ URLāϗ⧁āϞāĻŋ API āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻĒāĻžāĻ āĻžāύ⧋ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝ āϕ⧋āύāĻ“ āĻĄā§‡āϟāĻž āĻĒāĻžāĻ āĻžāύ⧋ āĻšāĻŦ⧇ āύāĻžāĨ¤ āϝāĻĻāĻŋ āϕ⧋āύāĻ“ āĻ­āĻŋāĻĄāĻŋāĻ“āϤ⧇ DeArrow āĻĨāĻžāĻŽā§āĻŦāύ⧇āχāϞ āύāĻž āĻĨāĻžāϕ⧇, āϤāĻžāĻšāϞ⧇ āĻŽā§‚āϞ āĻŦāĻž āĻ¸ā§āĻĨāĻŋāϰ āĻ•ā§āϝāĻžāĻĒāϚāĻžāϰ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻŦ⧇
DeArrow āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύāϤ⧇ āĻāĻ–āĻžāύ⧇ āĻŸā§āϝāĻžāĻĒ āĻ•āϰ⧁āύ"</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">API āωāĻĒāϞāĻ­ā§āϝ āύāĻž āĻĨāĻžāĻ•āϞ⧇ āĻāĻ•āϟāĻŋ āĻŸā§‹āĻ¸ā§āϟ āĻĻ⧇āĻ–āĻžāύ</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">āϝāĻĻāĻŋ DeArrow āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻĨāĻžāϕ⧇ āϤāĻŦ⧇ āĻŸā§‹āĻ¸ā§āϟ āĻŦāĻžāĻ°ā§āϤāĻž āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšāϝāĻŧ</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">āϝāĻĻāĻŋ DeArrow āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻĨāĻžāϕ⧇ āϤāĻŦ⧇ āĻŸā§‹āĻ¸ā§āϟ āĻŦāĻžāĻ°ā§āϤāĻž āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿ āύāĻž</string>
@@ -980,6 +1182,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">āϏāϤāĻ°ā§āϕ⧀āĻ•āϰāĻŖ</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">āφāĻĒāύāĻžāϰ āĻĻ⧇āĻ–āĻžāϰ āχāϤāĻŋāĻšāĻžāϏ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻšāĻšā§āϛ⧇ āύāĻžāĨ¤&lt;br&gt;&lt;br&gt;āĻāϟāĻŋ āϏāĻŽā§āĻ­āĻŦāϤ DNS āĻ…ā§āϝāĻžāĻĄ āĻŦā§āϞāĻ•āĻžāϰ āĻ…āĻĨāĻŦāĻž āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻ•āĻžāϰāϪ⧇āĨ¤&lt;br&gt;&lt;br&gt;āĻāϟāĻŋ āĻ āĻŋāĻ• āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, &lt;b&gt;s.youtube.com&lt;/b&gt; āϏāĻžāĻĻāĻž āϤāĻžāϞāĻŋāĻ•āĻžāϭ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ āĻ…āĻĨāĻŦāĻž āϏāĻ•āϞ DNS āĻŦā§āϞāĻ•āĻžāϰ āĻāĻŦāĻ‚ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧁āύāĨ¤</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">āφāĻŦāĻžāϰ āĻĻ⧇āĻ–āĻžāĻŦ⧇āύ āύāĻž</string>
</patch>
<patch id="misc.autorepeat.autoRepeatPatch">
@@ -989,8 +1192,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">āĻĄāĻŋāĻ­āĻžāχāϏ āĻĄāĻžāχāĻŽā§‡āύāĻļāύ āĻ¸ā§āĻĒ⧁āĻĢ āĻ•āϰ⧁āύ</string>
<string name="revanced_spoof_device_dimensions_summary_on">āĻĄāĻŋāĻ­āĻžāχāϏ āĻĄāĻžāχāĻŽā§‡āύāĻļāύ āĻ¸ā§āĻĒ⧁āĻĢ āĻšā§Ÿā§‡āϛ⧇\n\nāĻ­āĻŋāĻĄāĻŋāĻ“āϰ āωāĻ¨ā§āύāϤ āϗ⧁āĻŖāĻŽāĻžāύ āφāύāϞāĻ• āĻšā§Ÿā§‡āϛ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻĒāύāĻŋ āĻ­āĻŋāĻĄāĻŋāĻ“ āϚāϞāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āφāϟāϕ⧇ āϚāϞāĻž, āĻ–āĻžāϰāĻžāĻĒ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āϞāĻžāχāĻĢ āĻāĻŦāĻ‚ āĻ…āϜāĻžāύāĻž āĻĒāĻžāĻ°ā§āĻļā§āĻŦ-āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋ⧟āĻžāϰ āϏāĻŽā§āĻŽā§āĻ–āĻŋāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āύ</string>
<string name="revanced_spoof_device_dimensions_summary_off">āĻĄāĻŋāĻ­āĻžāχāϏ āĻĄāĻžāχāĻŽā§‡āύāĻļāύ āĻ¸ā§āĻĒ⧁āĻĢ āĻšā§ŸāύāĻŋ\n\nāĻāϟāĻŋ āϏāĻ•ā§āϰāĻŋ⧟ āĻ•āϰāĻžāϰ āĻĢāϞ⧇ āωāĻ¨ā§āύāϤ āĻ­āĻŋāĻĄāĻŋāĻ“ āϗ⧁āĻŖāĻŽāĻžāύ āφāύāϞāĻ• āĻšāĻŦ⧇</string>
<string name="revanced_spoof_device_dimensions_summary_on">"āĻĄāĻŋāĻ­āĻžāχāϏ⧇āϰ āĻŽāĻžāĻ¤ā§āϰāĻž āϭ⧁āϝāĻŧāĻž
āωāĻšā§āϚ āĻ­āĻŋāĻĄāĻŋāĻ“ āϗ⧁āĻŖāĻŽāĻžāύāϗ⧁āϞāĻŋ āφāύāϞāĻ• āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇ āϤāĻŦ⧇ āφāĻĒāύāĻŋ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻĒā§āϞ⧇āĻŦā§āϝāĻžāĻ• āĻšā§‹āρāϚāϟ āĻ–āĻžāĻ“āϝāĻŧāĻž, āĻ–āĻžāϰāĻžāĻĒ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āϞāĻžāχāĻĢ āĻāĻŦāĻ‚ āĻ…āϜāĻžāύāĻž āĻĒāĻžāĻ°ā§āĻļā§āĻŦ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ…āύ⧁āĻ­āĻŦ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ"</string>
<string name="revanced_spoof_device_dimensions_summary_off">"āĻĄāĻŋāĻ­āĻžāχāϏ⧇āϰ āĻŽāĻžāĻ¤ā§āϰāĻž āϭ⧁āϝāĻŧāĻž āύāϝāĻŧ
āĻāϟāĻŋ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāĻž āωāĻšā§āϚ āĻ­āĻŋāĻĄāĻŋāĻ“ āϗ⧁āĻŖāĻŽāĻžāύāϗ⧁āϞāĻŋ āφāύāϞāĻ• āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇"</string>
<string name="revanced_spoof_device_dimensions_user_dialog_message">āĻāϟāĻŋ āϏāĻ•ā§āϰāĻŋ⧟ āĻ•āϰāĻžāϰ āĻĢāϞ⧇ āφāĻĒāύāĻŋ āĻ­āĻŋāĻĄāĻŋāĻ“ āϚāϞāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āφāϟāϕ⧇ āϚāϞāĻž, āĻ–āĻžāϰāĻžāĻĒ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āϞāĻžāχāĻĢ āĻāĻŦāĻ‚ āĻ…āϜāĻžāύāĻž āĻĒāĻžāĻ°ā§āĻļā§āĻŦ-āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋ⧟āĻžāϰ āϏāĻŽā§āĻŽā§āĻ–āĻŋāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤</string>
</patch>
<patch id="misc.gms.gmsCoreSupportResourcePatch">
@@ -1017,6 +1224,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_disable_zoom_haptics_summary_on">āĻ•āĻŽā§āĻĒāύ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋ⧟ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_disable_zoom_haptics_summary_off">āĻ•āĻŽā§āĻĒāύ āϏāĻ•ā§āϰāĻŋ⧟ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇</string>
</patch>
<patch id="video.audio.forceOriginalAudioPatch">
<string name="revanced_force_original_audio_title">āĻŽā§‚āϞ āĻ…āĻĄāĻŋāĻ“ āĻŦāϞāĻĒā§‚āĻ°ā§āĻŦāĻ• āϚāĻžāϞ⧁ āĻ•āϰ⧁āύ</string>
<string name="revanced_force_original_audio_summary_on">āĻŽā§‚āϞ āĻ…āĻĄāĻŋāĻ“ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϛ⧇</string>
<string name="revanced_force_original_audio_summary_off">āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻ…āĻĄāĻŋāĻ“ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϛ⧇</string>
</patch>
<patch id="video.quality.rememberVideoQualityPatch">
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
<string name="revanced_video_quality_default_entry_1">āĻ¸ā§āĻŦāϤāĻ¸ā§āĻĢā§‚āĻ°ā§āϤāĻ­āĻžāĻŦ⧇</string>
@@ -1035,9 +1247,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_playback_speed_dialog_button_summary_off">āĻŦā§‹āϤāĻžāĻŽ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§ŸāύāĻŋ</string>
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
<string name="revanced_custom_speed_menu_title">āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĒā§āϞ⧇āĻŦā§āϝāĻžāĻ• āĻ—āϤāĻŋ āĻŽā§‡āύ⧁</string>
<string name="revanced_custom_speed_menu_summary_on">āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻ¸ā§āĻĒāĻŋāĻĄ āĻŽā§‡āύ⧁ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_custom_speed_menu_summary_off">āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻ¸ā§āĻĒāĻŋāĻĄ āĻŽā§‡āύ⧁ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇ āύāĻž</string>
<string name="revanced_custom_playback_speeds_title">āύāĻŋāϜāĻ¸ā§āĻŦ āĻĒā§āϞ⧇āĻŦā§āϝāĻžāĻ• āĻ¸ā§āĻĒāĻŋāĻĄ</string>
<string name="revanced_custom_playback_speeds_invalid">āύāĻŋāϜāĻ¸ā§āĻŦ āĻ¸ā§āĻĒāĻŋāĻĄ āĻ…āĻŦāĻļā§āϝāχ %sāϗ⧁āĻŖ āĻĨ⧇āϕ⧇ āĻ•āĻŽ āĻšāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻŽā§‚āϞ āĻ­ā§āϝāĻžāϞ⧁ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāĻšā§āϛ⧇āĨ¤</string>
<string name="revanced_custom_playback_speeds_parse_exception">āϭ⧁āϞ āύāĻŋāϜāĻ¸ā§āĻŦ āĻĒā§āϞ⧇āĻŦā§āϝāĻžāĻ• āĻ¸ā§āĻĒāĻŋāĻĄāĨ¤ āĻŽā§‚āϞ āĻ­ā§āϝāĻžāϞ⧁ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāĻšā§āϛ⧇āĨ¤</string>
<string name="revanced_custom_playback_speeds_summary">āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĒā§āϞ⧇āĻŦā§āϝāĻžāĻ• āĻ—āϤāĻŋ āϝ⧋āĻ— āĻ•āϰ⧁āύ āĻ…āĻĨāĻŦāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ</string>
<string name="revanced_custom_playback_speeds_invalid">āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻ—āϤāĻŋ %s āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻ•āĻŽ āĻšāϤ⧇ āĻšāĻŦ⧇</string>
<string name="revanced_custom_playback_speeds_parse_exception">āĻ…āĻŦ⧈āϧ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĒā§āϞ⧇āĻŦā§āϝāĻžāĻ• āĻ—āϤāĻŋ</string>
<string name="revanced_custom_playback_speeds_auto">āĻ¸ā§āĻŦāϤāĻ¸ā§āĻĢā§‚āĻ°ā§āϤāĻ­āĻžāĻŦ⧇</string>
</patch>
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
@@ -1062,12 +1278,77 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_video_streams_screen_summary">āĻĒā§āϞ⧇āĻŦā§āϝāĻžāĻ• āϏāĻŽāĻ¸ā§āϝāĻž āĻĒā§āϰāϤāĻŋāϰ⧋āϧ āĻ•āϰāϤ⧇ āĻ•ā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϟ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻ¸ā§āĻĒ⧁āĻĢ āĻ•āϰ⧁āύ</string>
<string name="revanced_spoof_video_streams_title">āĻ­āĻŋāĻĄāĻŋāĻ“ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽāĻŋāĻ‚ āĻ¸ā§āĻĒ⧁āĻĢ āĻ•āϰ⧁āύ</string>
<string name="revanced_spoof_video_streams_summary_on">āĻ­āĻŋāĻĄāĻŋāĻ“ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻ¸ā§āĻĒ⧁āĻĢ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_spoof_video_streams_summary_off">āĻ­āĻŋāĻĄāĻŋāĻ“ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻ¸ā§āĻĒ⧁āĻĢ āĻ•āϰāĻž āĻšā§ŸāύāĻŋ\n\nāĻ­āĻŋāĻĄāĻŋāĻ“ āĻĒā§āϞ⧇āĻŦā§āϝāĻžāĻ• āĻ āĻŋāĻ•āĻŽāϤ⧋ āĻ•āĻžāϜ āύāĻžāĻ“ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇</string>
<string name="revanced_spoof_video_streams_summary_off">"āĻ­āĻŋāĻĄāĻŋāĻ“ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āϭ⧁āϝāĻŧāĻž āύāϝāĻŧ
āĻ­āĻŋāĻĄāĻŋāĻ“ āĻĒā§āϞ⧇āĻŦā§āϝāĻžāĻ• āĻ•āĻžāϜ āύāĻžāĻ“ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇"</string>
<string name="revanced_spoof_video_streams_user_dialog_message">āĻāχ āϏ⧇āϟāĻŋāĻ‚āϟāĻŋ āĻŦāĻ¨ā§āϧ āĻ•āϰāĻžāϰ āĻĢāϞ⧇ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻĒā§āϞ⧇āĻŦā§āϝāĻžāĻ• āĻ¤ā§āϰ⧁āϟāĻŋ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤</string>
<string name="revanced_spoof_video_streams_client_title">āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻ•ā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϟ</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">AVC (H.264) āĻĢā§‹āĻ°ā§āϏ āĻ•āϰ⧁āύ</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">āĻ­āĻŋāĻĄāĻŋāĻ“ āϕ⧋āĻĄā§‡āĻ• AVC (H.264) āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">āĻ­āĻŋāĻĄāĻŋāĻ“ āϕ⧋āĻĄā§‡āĻ• VP9 āĻŦāĻž AV1 āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">āĻ­āĻŋāĻĄāĻŋāĻ“ āϕ⧋āĻĄā§‡āĻ• AVC (H.264) āϤ⧇ āĻŦāĻžāĻ§ā§āϝ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">āĻ­āĻŋāĻĄāĻŋāĻ“ āϕ⧋āĻĄā§‡āĻ• āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"āĻāϟāĻŋ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāĻž āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āϞāĻžāχāĻĢ āωāĻ¨ā§āύāϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŦāĻ‚ āĻĒā§āϞ⧇āĻŦā§āϝāĻžāĻ• āĻšā§‹āρāϚāϟ āĻ–āĻžāĻ“āϝāĻŧāĻž āĻ āĻŋāĻ• āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
AVC-āĻāϰ āϏāĻ°ā§āĻŦā§‹āĻšā§āϚ āϰ⧇āĻœā§‹āϞāĻŋāωāĻļāύ 1080p, Opus āĻ…āĻĄāĻŋāĻ“ āϕ⧋āĻĄā§‡āĻ• āωāĻĒāϞāĻŦā§āϧ āύāϝāĻŧ āĻāĻŦāĻ‚ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻĒā§āϞ⧇āĻŦā§āϝāĻžāĻ• VP9 āĻŦāĻž AV1 āĻāϰ āϤ⧁āϞāύāĻžāϝāĻŧ āφāϰāĻ“ āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āĻĄā§‡āϟāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āĨ¤"</string>
<string name="revanced_spoof_video_streams_about_ios_title">iOS āĻ¸ā§āĻĒ⧁āĻĢāĻŋāĻ‚ āĻāϰ āĻĒāĻžāĻ°ā§āĻļā§āĻŦ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž</string>
<string name="revanced_spoof_video_streams_about_ios_summary">"â€ĸ āĻŦ⧇āϏāϰāĻ•āĻžāϰāĻŋ āĻļāĻŋāĻļ⧁ āĻ­āĻŋāĻĄāĻŋāĻ“ āϚāϞāϤ⧇ āύāĻžāĻ“ āĻĒāĻžāϰ⧇&lt;br&gt;â€ĸ āĻ­āĻŋāĻĄāĻŋāĻ“āϗ⧁āϞāĻŋ 1 āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āφāϗ⧇ āĻļ⧇āώ āĻšā§Ÿ"</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR āĻ¸ā§āĻĒ⧁āĻĢāĻŋāĻ‚ āĻāϰ āĻĒāĻžāĻ°ā§āĻļā§āĻŦ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">"â€ĸ āĻļāĻŋāĻļ⧁ āĻ­āĻŋāĻĄāĻŋāĻ“āϗ⧁āϞāĻŋ āĻĒā§āϞ⧇ āύāĻžāĻ“ āĻšāϤ⧇ āĻĒāĻžāϰ⧇
â€ĸ āϞāĻžāχāĻ­āĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻļ⧁āϰ⧁ āĻĨ⧇āϕ⧇ āĻļ⧁āϰ⧁ āĻšāϝāĻŧ
â€ĸ āĻ­āĻŋāĻĄāĻŋāĻ“ 1 āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āφāϗ⧇ āĻļ⧇āώ āĻšāϝāĻŧ"</string>
<string name="revanced_spoof_video_streams_language_title">āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻ…āĻĄāĻŋāĻ“ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻ­āĻžāώāĻž</string>
<string name="revanced_spoof_video_streams_language_DEFAULT">āĻ…ā§āϝāĻžāĻĒ āĻ­āĻžāώāĻž</string>
<string name="revanced_spoof_video_streams_language_AR">āφāϰāĻŦāĻŋ</string>
<string name="revanced_spoof_video_streams_language_AZ">āφāϜāĻžāϰāĻŦāĻžāχāϜāĻžāύāĻŋ</string>
<string name="revanced_spoof_video_streams_language_BG">āĻŦ⧁āϞāϗ⧇āϰāĻŋāϝāĻŧāĻžāύ</string>
<string name="revanced_spoof_video_streams_language_BN">āĻŦāĻžāĻ‚āϞāĻž</string>
<string name="revanced_spoof_video_streams_language_CA">āĻ•āĻžāϤāĻžāϞāĻžāύ</string>
<string name="revanced_spoof_video_streams_language_CS">āĻšā§‡āĻ•</string>
<string name="revanced_spoof_video_streams_language_DA">āĻĄā§‡āύāĻŋāĻļ</string>
<string name="revanced_spoof_video_streams_language_DE">āϜāĻžāĻ°ā§āĻŽāĻžāύ</string>
<string name="revanced_spoof_video_streams_language_EL">āĻ—ā§āϰ⧀āĻ•</string>
<string name="revanced_spoof_video_streams_language_EN">āχāĻ‚āϰ⧇āϜāĻŋ</string>
<string name="revanced_spoof_video_streams_language_ES">āĻ¸ā§āĻĒā§āϝāĻžāύāĻŋāĻļ</string>
<string name="revanced_spoof_video_streams_language_ET">āĻāĻ¸ā§āϤ⧋āύāĻŋāϝāĻŧāĻžāύ</string>
<string name="revanced_spoof_video_streams_language_FA">āĻĢāĻžāĻ°ā§āϏāĻŋ</string>
<string name="revanced_spoof_video_streams_language_FI">āĻĢāĻŋāύāĻ˛ā§āϝāĻžāĻ¨ā§āĻĄ</string>
<string name="revanced_spoof_video_streams_language_FR">āĻĢāϰāĻžāϏāĻŋ</string>
<string name="revanced_spoof_video_streams_language_GU">āϗ⧁āϜāϰāĻžāϟāĻŋ</string>
<string name="revanced_spoof_video_streams_language_HI">āĻšāĻŋāĻ¨ā§āĻĻāĻŋ</string>
<string name="revanced_spoof_video_streams_language_HR">āĻ•ā§āϰ⧋āϝāĻŧ⧇āĻļāĻŋāϝāĻŧāĻžāύ</string>
<string name="revanced_spoof_video_streams_language_HU">āĻšāĻžāĻ™ā§āϗ⧇āϰāĻŋāϝāĻŧāĻžāύ</string>
<string name="revanced_spoof_video_streams_language_ID">āχāĻ¨ā§āĻĻā§‹āύ⧇āĻļāĻŋāϝāĻŧāĻžāύ</string>
<string name="revanced_spoof_video_streams_language_IT">āχāϤāĻžāϞ⧀āϝāĻŧ</string>
<string name="revanced_spoof_video_streams_language_JA">āϜāĻžāĻĒāĻžāύāĻŋ</string>
<string name="revanced_spoof_video_streams_language_KK">āĻ•āĻžāϜāĻžāĻ–</string>
<string name="revanced_spoof_video_streams_language_KO">āϕ⧋āϰāĻŋāϝāĻŧāĻžāύ</string>
<string name="revanced_spoof_video_streams_language_LT">āϞāĻŋāĻĨ⧁āϝāĻŧāĻžāύāĻŋāϝāĻŧāĻžāύ</string>
<string name="revanced_spoof_video_streams_language_LV">āϞāĻžāϤāĻ­āĻŋāϝāĻŧāĻžāύ</string>
<string name="revanced_spoof_video_streams_language_MK">āĻŽā§āϝāĻžāϏ⧇āĻĄā§‹āύāĻŋāϝāĻŧāĻžāύ</string>
<string name="revanced_spoof_video_streams_language_MN">āĻŽāĻ™ā§āĻ—ā§‹āϞāĻŋāϝāĻŧāĻžāύ</string>
<string name="revanced_spoof_video_streams_language_MR">āĻŽāĻžāϰāĻžāĻ āĻŋ</string>
<string name="revanced_spoof_video_streams_language_MS">āĻŽāĻžāϞāϝāĻŧ</string>
<string name="revanced_spoof_video_streams_language_MY">āĻŦāĻžāĻ°ā§āĻŽāĻŋāϜ</string>
<string name="revanced_spoof_video_streams_language_NL">āĻĄāĻžāϚ</string>
<string name="revanced_spoof_video_streams_language_OR">āĻ“āĻĄāĻŧāĻŋāϝāĻŧāĻž</string>
<string name="revanced_spoof_video_streams_language_PA">āĻĒāĻžā§āϜāĻžāĻŦāĻŋ</string>
<string name="revanced_spoof_video_streams_language_PL">āĻĒā§‹āϞāĻŋāĻļ</string>
<string name="revanced_spoof_video_streams_language_PT_BR">āĻĒāĻ°ā§āϤ⧁āĻ—āĻŋāϜ (āĻŦā§āϰāĻžāϜāĻŋāϞ)</string>
<string name="revanced_spoof_video_streams_language_PT_PT">āĻĒāĻ°ā§āϤ⧁āĻ—āĻŋāϜ (āĻĒāĻ°ā§āϤ⧁āĻ—āĻžāϞ)</string>
<string name="revanced_spoof_video_streams_language_RO">āϰ⧋āĻŽāĻžāύ⧀āϝāĻŧ</string>
<string name="revanced_spoof_video_streams_language_RU">āϰāĻžāĻļāĻŋāϝāĻŧāĻžāύ</string>
<string name="revanced_spoof_video_streams_language_SK">āĻ¸ā§āϞ⧋āĻ­āĻžāĻ•</string>
<string name="revanced_spoof_video_streams_language_SL">āĻ¸ā§āϞ⧋āϭ⧇āύāĻŋāϝāĻŧāĻžāύ</string>
<string name="revanced_spoof_video_streams_language_SR">āϏāĻžāĻ°ā§āĻŦāĻŋāϝāĻŧāĻžāύ</string>
<string name="revanced_spoof_video_streams_language_SV">āϏ⧁āχāĻĄāĻŋāĻļ</string>
<string name="revanced_spoof_video_streams_language_SW">āϏ⧋āϝāĻŧāĻžāĻšāĻŋāϞāĻŋ</string>
<string name="revanced_spoof_video_streams_language_TA">āϤāĻžāĻŽāĻŋāϞ</string>
<string name="revanced_spoof_video_streams_language_TE">āϤ⧇āϞ⧁āϗ⧁</string>
<string name="revanced_spoof_video_streams_language_TH">āĻĨāĻžāχ</string>
<string name="revanced_spoof_video_streams_language_TR">āϤ⧁āĻ°ā§āĻ•āĻŋ</string>
<string name="revanced_spoof_video_streams_language_UK">āχāωāĻ•ā§āϰ⧇āύ⧀āϝāĻŧ</string>
<string name="revanced_spoof_video_streams_language_UR">āωāĻ°ā§āĻĻ⧁</string>
<string name="revanced_spoof_video_streams_language_VI">āĻ­āĻŋāϝāĻŧ⧇āϤāύāĻžāĻŽāĻŋ</string>
<string name="revanced_spoof_video_streams_language_ZH">āĻšā§€āύāĻž</string>
</patch>
</app>
<app id="twitch">
@@ -1077,8 +1358,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_block_audio_ads_summary_off">āĻ…āĻĄāĻŋāĻ“ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āφāύāĻŦāĻŦā§āϞāĻ• āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇</string>
</patch>
<patch id="ad.embedded.embeddedAdsPatch">
<string name="revanced_embedded_ads_service_unavailable">%s āωāĻĒāϞāĻ­ā§āϝ āύ⧟āĨ¤ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻĻ⧇āĻ–āĻžāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϏ⧇āϟāĻŋāĻ‚ āĻĨ⧇āϕ⧇ āĻ…āĻ¨ā§āϝ āϕ⧋āύ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āφāϟāĻ•āĻžāύ⧋ āϏ⧇āĻŦāĻžā§Ÿ āϏ⧁āχāϚ āĻ•āϰ⧁āύāĨ¤</string>
<string name="revanced_embedded_ads_service_failed">%s āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻāĻ•āϟāĻŋ āĻ¤ā§āϰ⧁āϟāĻŋ āĻĻ⧇āĻ–āĻžāĻšā§āϛ⧇āĨ¤ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻĻ⧇āĻ–āĻžāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϏ⧇āϟāĻŋāĻ‚ āĻĨ⧇āϕ⧇ āĻ…āĻ¨ā§āϝ āϕ⧋āύ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āφāϟāĻ•āĻžāύ⧋ āϏ⧇āĻŦāĻžā§Ÿ āϏ⧁āχāϚ āĻ•āϰ⧁āύāĨ¤</string>
<string name="revanced_embedded_ads_service_unavailable">%s āωāĻĒāϞāĻŦā§āϧ āύāϝāĻŧ, āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϏ⧇āϟāĻŋāĻ‚āϏ⧇ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻŦā§āϞāĻ• āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧁āύāĨ¤</string>
<string name="revanced_embedded_ads_service_failed">%s āĻāĻ•āϟāĻŋ āĻ¤ā§āϰ⧁āϟāĻŋ āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇āϛ⧇, āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϏ⧇āϟāĻŋāĻ‚āϏ⧇ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻŦā§āϞāĻ• āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧁āύāĨ¤</string>
<string name="revanced_block_embedded_ads_title">āĻāĻŽāĻŦ⧇āĻĄ āĻ•āϰāĻž āĻ­āĻŋāĻĄāĻŋāĻ“ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āφāϟāĻ•āĻžāύ</string>
<string name="revanced_block_embedded_ads_entry_1">āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋ⧟ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_block_embedded_ads_entry_2">Luminous āĻĒā§āϰāĻ•ā§āϏāĻŋ</string>
@@ -1110,6 +1391,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="misc.settings.settingsPatch">
<string name="revanced_settings">ReVanced āϏ⧇āϟāĻŋāĻ‚</string>
<string name="revanced_about_title">āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāϤ</string>
<string name="revanced_about_summary">ReVanced āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇</string>
<string name="revanced_ads_screen_title">āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ</string>
<string name="revanced_ads_screen_summary">āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻŦāĻ¨ā§āϧ āĻ•āϰāĻžāϰ āϏ⧇āϟāĻŋāĻ‚</string>
<string name="revanced_chat_screen_title">āφāϞāĻžāĻĒāϚāĻžāϰāĻŋ</string>

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