Compare commits

..

62 Commits

Author SHA1 Message Date
scruz
eecc44b956 fix(Boost for Reddit - Fix missing audio in video downloads): Make it work again by reflecting Reddits latest changes (#6500) 2026-01-18 16:21:59 +01:00
oSumAtrIX
3401467a6d feat(Instagram): Disable Disable Reels scrolling by default 2026-01-15 23:30:17 +01:00
Swakshan
87247590de fix(Instagram): Sanitize sharing links (#6483) 2026-01-13 20:10:25 +01:00
xehpuk
41e2590584 chore(Strava): Restructure media package (#6480) 2026-01-13 15:46:49 +01:00
xehpuk
778d13ce8b feat(Strava): Add Add media download patch (#6449)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2026-01-12 23:28:15 +01:00
ekaunt
19f146c01d feat(YouTube): Add Pause on audio interrupt patch (#6464)
Co-authored-by: bengross <bengross@vecta.com>
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2026-01-12 23:18:09 +01:00
Pun Butrach
12b819d20e ci: Schedule Crowdin to runs weekly instead of every 12 hours (#6466) 2026-01-12 02:40:19 +01:00
Pun Butrach
004b5908db build: Use Gradle credentials system (#6467) 2026-01-11 16:59:48 +01:00
semantic-release-bot
f4af27dfec chore: Release v5.48.0-dev.9 [skip ci]
# [5.48.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.8...v5.48.0-dev.9) (2026-01-08)

### Features

* Add `Disable Sentry telemetry` patch ([#6416](https://github.com/ReVanced/revanced-patches/issues/6416)) ([4cc3159](4cc315952d))
* Disable Play Integrity patch ([#6412](https://github.com/ReVanced/revanced-patches/issues/6412)) ([6312fe8](6312fe8d60))
2026-01-08 00:11:57 +00:00
xehpuk
4cc315952d feat: Add Disable Sentry telemetry patch (#6416) 2026-01-08 01:08:52 +01:00
1fexd
6312fe8d60 feat: Disable Play Integrity patch (#6412)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2026-01-08 01:06:05 +01:00
Ushie
3d754575a4 ci: Simplify Crowdin translation file destination path (#6463) 2026-01-07 22:31:15 +01:00
semantic-release-bot
a3f7609fe3 chore: Release v5.48.0-dev.8 [skip ci]
# [5.48.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.7...v5.48.0-dev.8) (2026-01-04)

### Features

* **Letterboxd:** Add `Unlock app icons` patch ([#6415](https://github.com/ReVanced/revanced-patches/issues/6415)) ([d25dcfe](d25dcfe49a))
2026-01-04 13:17:54 +00:00
Swakshan
d25dcfe49a feat(Letterboxd): Add Unlock app icons patch (#6415) 2026-01-04 14:14:29 +01:00
semantic-release-bot
1cc2cb9cb2 chore: Release v5.48.0-dev.7 [skip ci]
# [5.48.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.6...v5.48.0-dev.7) (2026-01-04)

### Features

* **Strava:** Add `Disable Quick Edit` patch ([#6452](https://github.com/ReVanced/revanced-patches/issues/6452)) ([f5cbb31](f5cbb31724))
* **Strava:** Add `Overwrite media upload parameters` patch ([#6410](https://github.com/ReVanced/revanced-patches/issues/6410)) ([b42ae27](b42ae27ce6))
2026-01-04 02:43:29 +00:00
xehpuk
f5cbb31724 feat(Strava): Add Disable Quick Edit patch (#6452)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2026-01-04 03:38:04 +01:00
xehpuk
b42ae27ce6 feat(Strava): Add Overwrite media upload parameters patch (#6410) 2026-01-04 03:36:08 +01:00
semantic-release-bot
43ab29d03d chore: Release v5.48.0-dev.6 [skip ci]
# [5.48.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.5...v5.48.0-dev.6) (2026-01-04)

### Bug Fixes

* Fix build error introduced in `4046bee` ([#6417](https://github.com/ReVanced/revanced-patches/issues/6417)) ([789f0a5](789f0a5628))
2026-01-04 02:07:07 +00:00
xehpuk
789f0a5628 fix: Fix build error introduced in 4046bee (#6417) 2026-01-04 03:03:44 +01:00
semantic-release-bot
da836b667c chore: Release v5.48.0-dev.5 [skip ci]
# [5.48.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.4...v5.48.0-dev.5) (2025-12-30)

### Bug Fixes

* **Disney+ - Skip ads:** Remove unsupported package names ([#6422](https://github.com/ReVanced/revanced-patches/issues/6422)) ([44e7dbc](44e7dbcf4d))
2025-12-30 18:37:28 +00:00
ILoveOpenSourceApplications
44e7dbcf4d fix(Disney+ - Skip ads): Remove unsupported package names (#6422) 2025-12-30 19:32:17 +01:00
semantic-release-bot
195c239000 chore: Release v5.48.0-dev.4 [skip ci]
# [5.48.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.3...v5.48.0-dev.4) (2025-12-29)

### Features

* **Strava:** Add `Block Snowplow tracking` patch ([#6413](https://github.com/ReVanced/revanced-patches/issues/6413)) ([c47beae](c47beae213))
2025-12-29 21:25:35 +00:00
xehpuk
c47beae213 feat(Strava): Add Block Snowplow tracking patch (#6413)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2025-12-29 22:20:26 +01:00
semantic-release-bot
cebcfab86a chore: Release v5.48.0-dev.3 [skip ci]
# [5.48.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.2...v5.48.0-dev.3) (2025-12-28)

### Bug Fixes

* Fix compilation error introduced in `6bb6281` ([#6409](https://github.com/ReVanced/revanced-patches/issues/6409)) ([71c6cb5](71c6cb569e))

### Features

* **Instagram - Hides navigation buttons:** Add more buttons to hide ([#6390](https://github.com/ReVanced/revanced-patches/issues/6390)) ([6bb6281](6bb6281149))
2025-12-28 22:33:37 +00:00
xehpuk
71c6cb569e fix: Fix compilation error introduced in 6bb6281 (#6409) 2025-12-28 23:30:32 +01:00
PainfulPaladins
6bb6281149 feat(Instagram - Hides navigation buttons): Add more buttons to hide (#6390) 2025-12-27 18:50:08 +01:00
semantic-release-bot
16bd96e2bb chore: Release v5.48.0-dev.2 [skip ci]
# [5.48.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.1...v5.48.0-dev.2) (2025-12-27)

### Features

* **Strava:** Add `Enable password login` patch ([#6396](https://github.com/ReVanced/revanced-patches/issues/6396)) ([8f3f4c9](8f3f4c95bb))
2025-12-27 17:48:32 +00:00
xehpuk
8f3f4c95bb feat(Strava): Add Enable password login patch (#6396)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2025-12-27 18:45:09 +01:00
semantic-release-bot
da02d68587 chore: Release v5.48.0-dev.1 [skip ci]
# [5.48.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.47.0...v5.48.0-dev.1) (2025-12-23)

### Bug Fixes

* Fix compilation error introduced in dc69f243 ([#6392](https://github.com/ReVanced/revanced-patches/issues/6392)) ([a429824](a429824bb7))
* **YouTube - Hide layout components:** Hide new type of crowdfunding box ([#6380](https://github.com/ReVanced/revanced-patches/issues/6380)) ([dc69f24](dc69f2433e))

### Features

* **ProtonVPN:** Add `Unlock split tunneling` patch ([#6353](https://github.com/ReVanced/revanced-patches/issues/6353)) ([e0f3346](e0f33468e6))
* **SBS On Demand:** Add `Remove ads` patch ([#6378](https://github.com/ReVanced/revanced-patches/issues/6378)) ([315931c](315931cbf8))
2025-12-23 01:30:13 +00:00
xehpuk
a429824bb7 fix: Fix compilation error introduced in dc69f243 (#6392) 2025-12-23 02:26:54 +01:00
Sylvain Finot
e0f33468e6 feat(ProtonVPN): Add Unlock split tunneling patch (#6353)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2025-12-22 15:00:08 +01:00
trespyian
315931cbf8 feat(SBS On Demand): Add Remove ads patch (#6378)
Co-authored-by: Trespyian <trespyian@nowhere.com>
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2025-12-22 14:49:19 +01:00
ILoveOpenSourceApplications
dc69f2433e fix(YouTube - Hide layout components): Hide new type of crowdfunding box (#6380) 2025-12-21 23:10:35 +01:00
semantic-release-bot
73e43b2a49 chore: Release v5.47.0 [skip ci]
# [5.47.0](https://github.com/ReVanced/revanced-patches/compare/v5.46.0...v5.47.0) (2025-12-18)

### Bug Fixes

* **Instagram - Disable signature check:** Change patch to default excluded ([#6283](https://github.com/ReVanced/revanced-patches/issues/6283)) ([bb745b5](bb745b555b))
* **Lightroom:** Add `Disable version check` patch to fix opening the app  ([#6315](https://github.com/ReVanced/revanced-patches/issues/6315)) ([018d176](018d176914))
* **Reddit - Hide ads:** Update patch for new versions of Reddit ([#6342](https://github.com/ReVanced/revanced-patches/issues/6342)) ([f8bd123](f8bd1239cc))
* **Spotify:** Make patches work with latest versions again ([#6359](https://github.com/ReVanced/revanced-patches/issues/6359)) ([34830ba](34830ba63b))
* **YouTube - Hide layout components:** Fix "Hide Subscribe button" in channel page not working ([#6363](https://github.com/ReVanced/revanced-patches/issues/6363)) ([ded8370](ded8370207))
* **YouTube - Hide player flyout menu items:** Allow hiding audio menu with 'Android No SDK' client type ([9495cf4](9495cf49ef))
* **YouTube - Sanitize sharing links:** Handle non hierarchical urls ([654d091](654d091e65))

### Features

* **Disney+ - SkipAds:** Add other package names the patch is compatible with ([#6372](https://github.com/ReVanced/revanced-patches/issues/6372)) ([1f4f252](1f4f252c81))
* **Disney+:** Add `Skip ads` patch ([#6343](https://github.com/ReVanced/revanced-patches/issues/6343)) ([6bd7dca](6bd7dca75b))
* **IdAustria - Remove device integrity check:** Update patch to work with latest version ([#6360](https://github.com/ReVanced/revanced-patches/issues/6360)) ([0ea3491](0ea3491227))
* **Instagram:** Add `Anonymous story viewing` patch ([#6263](https://github.com/ReVanced/revanced-patches/issues/6263)) ([94ae84a](94ae84ad0f))
* **Instagram:** Add `Disable auto story flipping` patch ([#6262](https://github.com/ReVanced/revanced-patches/issues/6262)) ([2f0de15](2f0de15e67))
* **Instagram:** Add `Disable Reels scrolling` patch ([#6317](https://github.com/ReVanced/revanced-patches/issues/6317)) ([0928dcd](0928dcd00d))
* **Letterboxd:** Add `Hide ads` patch ([#6309](https://github.com/ReVanced/revanced-patches/issues/6309)) ([0af0ee9](0af0ee92c4))
* **Peacock TV:** Add `Hide ads` patch ([#6348](https://github.com/ReVanced/revanced-patches/issues/6348)) ([847ee18](847ee189a9))
* **ProtonVPN:** Add `Remove delay` patch ([#6326](https://github.com/ReVanced/revanced-patches/issues/6326)) ([bbd8932](bbd8932b2e))
* **Spoof SIM provider:** Spoof additional TelephonyManager methods ([#6293](https://github.com/ReVanced/revanced-patches/issues/6293)) ([ac583d4](ac583d40d0))
* **YouTube - Hide layout components:** Add "Hide cell divider", "Hide featured links", and "Hide featured videos" options ([#6335](https://github.com/ReVanced/revanced-patches/issues/6335)) ([a5d197b](a5d197b977))
* **YouTube - Hide layout components:** Add "Hide Join button" and "Hide Subscribe button" options for channel page ([#6345](https://github.com/ReVanced/revanced-patches/issues/6345)) ([02831a6](02831a6069))
* **YouTube - Hide Shorts components:** Add "Hide auto-dubbed label" and "Hide live preview" options ([#6334](https://github.com/ReVanced/revanced-patches/issues/6334)) ([a7c220a](a7c220a4ae))
2025-12-18 12:14:21 +00:00
oSumAtrIX
918f04793f chore: Merge branch dev to main (#6282) 2025-12-18 13:10:41 +01:00
semantic-release-bot
f1a9537f01 chore: Release v5.47.0-dev.18 [skip ci]
# [5.47.0-dev.18](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.17...v5.47.0-dev.18) (2025-12-18)

### Features

* **Disney+ - SkipAds:** Add other package names the patch is compatible with ([#6372](https://github.com/ReVanced/revanced-patches/issues/6372)) ([1f4f252](1f4f252c81))
2025-12-18 12:09:57 +00:00
vippium
1f4f252c81 feat(Disney+ - SkipAds): Add other package names the patch is compatible with (#6372) 2025-12-18 12:59:47 +01:00
semantic-release-bot
2b560f5fe9 chore: Release v5.47.0-dev.17 [skip ci]
# [5.47.0-dev.17](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.16...v5.47.0-dev.17) (2025-12-18)

### Bug Fixes

* **Reddit - Hide ads:** Update patch for new versions of Reddit ([#6342](https://github.com/ReVanced/revanced-patches/issues/6342)) ([f8bd123](f8bd1239cc))
2025-12-18 02:05:14 +00:00
g9q
f8bd1239cc fix(Reddit - Hide ads): Update patch for new versions of Reddit (#6342)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2025-12-18 03:01:25 +01:00
semantic-release-bot
c825ebda37 chore: Release v5.47.0-dev.16 [skip ci]
# [5.47.0-dev.16](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.15...v5.47.0-dev.16) (2025-12-15)

### Bug Fixes

* **Lightroom:** Add `Disable version check` patch to fix opening the app  ([#6315](https://github.com/ReVanced/revanced-patches/issues/6315)) ([018d176](018d176914))

### Features

* **IdAustria - Remove device integrity check:** Update patch to work with latest version ([#6360](https://github.com/ReVanced/revanced-patches/issues/6360)) ([0ea3491](0ea3491227))
2025-12-15 11:34:05 +00:00
oSumAtrIX
255c00b183 chore: Fix minor syntax error 2025-12-15 12:28:53 +01:00
Alex Katlein
0ea3491227 feat(IdAustria - Remove device integrity check): Update patch to work with latest version (#6360)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2025-12-15 12:26:59 +01:00
Pun Butrach
5d437b08dd docs: Use American spelling (#6233) 2025-12-14 16:38:55 +01:00
f1re4xx
018d176914 fix(Lightroom): Add Disable version check patch to fix opening the app (#6315)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2025-12-14 16:38:26 +01:00
semantic-release-bot
9a77beea8a chore: Release v5.47.0-dev.15 [skip ci]
# [5.47.0-dev.15](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.14...v5.47.0-dev.15) (2025-12-13)

### Bug Fixes

* **YouTube - Hide layout components:** Fix "Hide Subscribe button" in channel page not working ([#6363](https://github.com/ReVanced/revanced-patches/issues/6363)) ([ded8370](ded8370207))
2025-12-13 20:26:05 +00:00
ILoveOpenSourceApplications
ded8370207 fix(YouTube - Hide layout components): Fix "Hide Subscribe button" in channel page not working (#6363) 2025-12-13 21:22:35 +01:00
semantic-release-bot
4d1104fc32 chore: Release v5.47.0-dev.14 [skip ci]
# [5.47.0-dev.14](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.13...v5.47.0-dev.14) (2025-12-13)

### Bug Fixes

* **Spotify:** Make patches work with latest versions again ([#6359](https://github.com/ReVanced/revanced-patches/issues/6359)) ([34830ba](34830ba63b))
2025-12-13 08:52:03 +00:00
Cilly Leang
34830ba63b fix(Spotify): Make patches work with latest versions again (#6359) 2025-12-13 09:48:39 +01:00
github-actions[bot]
7a6894d809 chore: Sync translations (#6344)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-12-10 03:58:45 +01:00
semantic-release-bot
144e6e2694 chore: Release v5.47.0-dev.13 [skip ci]
# [5.47.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.12...v5.47.0-dev.13) (2025-12-10)

### Features

* **Peacock TV:** Add `Hide ads` patch ([#6348](https://github.com/ReVanced/revanced-patches/issues/6348)) ([847ee18](847ee189a9))
2025-12-10 02:58:06 +00:00
g9q
847ee189a9 feat(Peacock TV): Add Hide ads patch (#6348) 2025-12-10 03:55:08 +01:00
semantic-release-bot
dc813fe617 chore: Release v5.47.0-dev.12 [skip ci]
# [5.47.0-dev.12](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.11...v5.47.0-dev.12) (2025-12-08)

### Features

* **YouTube - Hide layout components:** Add "Hide Join button" and "Hide Subscribe button" options for channel page ([#6345](https://github.com/ReVanced/revanced-patches/issues/6345)) ([02831a6](02831a6069))
2025-12-08 21:14:39 +00:00
ILoveOpenSourceApplications
02831a6069 feat(YouTube - Hide layout components): Add "Hide Join button" and "Hide Subscribe button" options for channel page (#6345) 2025-12-08 22:10:35 +01:00
semantic-release-bot
5228fd4b58 chore: Release v5.47.0-dev.11 [skip ci]
# [5.47.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.10...v5.47.0-dev.11) (2025-12-08)

### Features

* **Disney+:** Add `Skip ads` patch ([#6343](https://github.com/ReVanced/revanced-patches/issues/6343)) ([6bd7dca](6bd7dca75b))
2025-12-08 13:51:15 +00:00
g9q
6bd7dca75b feat(Disney+): Add Skip ads patch (#6343)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2025-12-08 14:45:41 +01:00
semantic-release-bot
22ed7bfbb3 chore: Release v5.47.0-dev.10 [skip ci]
# [5.47.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.9...v5.47.0-dev.10) (2025-12-08)

### Features

* **YouTube - Hide Shorts components:** Add "Hide auto-dubbed label" and "Hide live preview" options ([#6334](https://github.com/ReVanced/revanced-patches/issues/6334)) ([a7c220a](a7c220a4ae))
2025-12-08 12:57:23 +00:00
ILoveOpenSourceApplications
a7c220a4ae feat(YouTube - Hide Shorts components): Add "Hide auto-dubbed label" and "Hide live preview" options (#6334) 2025-12-08 13:51:57 +01:00
semantic-release-bot
d8ca4ee931 chore: Release v5.47.0-dev.9 [skip ci]
# [5.47.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.8...v5.47.0-dev.9) (2025-12-08)

### Features

* **YouTube - Hide layout components:** Add "Hide cell divider", "Hide featured links", and "Hide featured videos" options ([#6335](https://github.com/ReVanced/revanced-patches/issues/6335)) ([a5d197b](a5d197b977))
2025-12-08 12:06:03 +00:00
ILoveOpenSourceApplications
a5d197b977 feat(YouTube - Hide layout components): Add "Hide cell divider", "Hide featured links", and "Hide featured videos" options (#6335)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2025-12-08 13:02:22 +01:00
semantic-release-bot
a0ec4c07f7 chore: Release v5.47.0-dev.8 [skip ci]
# [5.47.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.7...v5.47.0-dev.8) (2025-12-08)

### Features

* **Instagram:** Add `Disable Reels scrolling` patch ([#6317](https://github.com/ReVanced/revanced-patches/issues/6317)) ([0928dcd](0928dcd00d))
* **ProtonVPN:** Add `Remove delay` patch ([#6326](https://github.com/ReVanced/revanced-patches/issues/6326)) ([bbd8932](bbd8932b2e))
2025-12-08 11:36:43 +00:00
Alexey Gorbachev
0928dcd00d feat(Instagram): Add Disable Reels scrolling patch (#6317)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2025-12-08 12:31:54 +01:00
Sylvain Finot
bbd8932b2e feat(ProtonVPN): Add Remove delay patch (#6326)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2025-12-08 12:30:47 +01:00
171 changed files with 5225 additions and 1883 deletions

View File

@@ -25,7 +25,8 @@ jobs:
- name: Build - name: Build
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ORG_GRADLE_PROJECT_githubPackagesUsername: ${{ env.GITHUB_ACTOR }}
ORG_GRADLE_PROJECT_githubPackagesPassword: ${{ secrets.GITHUB_TOKEN }}
run: ./gradlew :patches:buildAndroid --no-daemon run: ./gradlew :patches:buildAndroid --no-daemon
- name: Upload artifacts - name: Upload artifacts

View File

@@ -2,7 +2,7 @@ name: Pull strings
on: on:
schedule: schedule:
- cron: "0 */12 * * *" - cron: "0 0 * * 0"
workflow_dispatch: workflow_dispatch:
jobs: jobs:

View File

@@ -31,7 +31,8 @@ jobs:
- name: Build - name: Build
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ORG_GRADLE_PROJECT_githubPackagesUsername: ${{ env.GITHUB_ACTOR }}
ORG_GRADLE_PROJECT_githubPackagesPassword: ${{ secrets.GITHUB_TOKEN }}
run: ./gradlew :patches:buildAndroid clean run: ./gradlew :patches:buildAndroid clean
- name: Setup Node.js - name: Setup Node.js

View File

@@ -1,3 +1,193 @@
# [5.48.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.8...v5.48.0-dev.9) (2026-01-08)
### Features
* Add `Disable Sentry telemetry` patch ([#6416](https://github.com/ReVanced/revanced-patches/issues/6416)) ([4cc3159](https://github.com/ReVanced/revanced-patches/commit/4cc315952db557c565872de9e8484805f2e42305))
* Disable Play Integrity patch ([#6412](https://github.com/ReVanced/revanced-patches/issues/6412)) ([6312fe8](https://github.com/ReVanced/revanced-patches/commit/6312fe8d60da24465c0c1b0fa4e94ceb79873d9c))
# [5.48.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.7...v5.48.0-dev.8) (2026-01-04)
### Features
* **Letterboxd:** Add `Unlock app icons` patch ([#6415](https://github.com/ReVanced/revanced-patches/issues/6415)) ([d25dcfe](https://github.com/ReVanced/revanced-patches/commit/d25dcfe49ac331c9b3dca739ba0be95dbab669cc))
# [5.48.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.6...v5.48.0-dev.7) (2026-01-04)
### Features
* **Strava:** Add `Disable Quick Edit` patch ([#6452](https://github.com/ReVanced/revanced-patches/issues/6452)) ([f5cbb31](https://github.com/ReVanced/revanced-patches/commit/f5cbb31724d15f7e939b96ee0186fd0a108f9fdc))
* **Strava:** Add `Overwrite media upload parameters` patch ([#6410](https://github.com/ReVanced/revanced-patches/issues/6410)) ([b42ae27](https://github.com/ReVanced/revanced-patches/commit/b42ae27ce66ebad9e9cfc5b70fc121df5bad7567))
# [5.48.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.5...v5.48.0-dev.6) (2026-01-04)
### Bug Fixes
* Fix build error introduced in `4046bee` ([#6417](https://github.com/ReVanced/revanced-patches/issues/6417)) ([789f0a5](https://github.com/ReVanced/revanced-patches/commit/789f0a562861825065633d172445ebf35a1ba8d8))
# [5.48.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.4...v5.48.0-dev.5) (2025-12-30)
### Bug Fixes
* **Disney+ - Skip ads:** Remove unsupported package names ([#6422](https://github.com/ReVanced/revanced-patches/issues/6422)) ([44e7dbc](https://github.com/ReVanced/revanced-patches/commit/44e7dbcf4d7eaf94dd0164baba847d3e19250154))
# [5.48.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.3...v5.48.0-dev.4) (2025-12-29)
### Features
* **Strava:** Add `Block Snowplow tracking` patch ([#6413](https://github.com/ReVanced/revanced-patches/issues/6413)) ([c47beae](https://github.com/ReVanced/revanced-patches/commit/c47beae21376dd17ab8bc09afe73e9094481bde9))
# [5.48.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.2...v5.48.0-dev.3) (2025-12-28)
### Bug Fixes
* Fix compilation error introduced in `6bb6281` ([#6409](https://github.com/ReVanced/revanced-patches/issues/6409)) ([71c6cb5](https://github.com/ReVanced/revanced-patches/commit/71c6cb569ebf7b93cf73ee391839e5220557ce7c))
### Features
* **Instagram - Hides navigation buttons:** Add more buttons to hide ([#6390](https://github.com/ReVanced/revanced-patches/issues/6390)) ([6bb6281](https://github.com/ReVanced/revanced-patches/commit/6bb62811493da04812cc3e392e68d874f95cbef9))
# [5.48.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.1...v5.48.0-dev.2) (2025-12-27)
### Features
* **Strava:** Add `Enable password login` patch ([#6396](https://github.com/ReVanced/revanced-patches/issues/6396)) ([8f3f4c9](https://github.com/ReVanced/revanced-patches/commit/8f3f4c95bb8f151fc9a2c272bf7d0e905c2f01fc))
# [5.48.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.47.0...v5.48.0-dev.1) (2025-12-23)
### Bug Fixes
* Fix compilation error introduced in dc69f243 ([#6392](https://github.com/ReVanced/revanced-patches/issues/6392)) ([a429824](https://github.com/ReVanced/revanced-patches/commit/a429824bb77b49aea14b0b54f2204ae24d5209a1))
* **YouTube - Hide layout components:** Hide new type of crowdfunding box ([#6380](https://github.com/ReVanced/revanced-patches/issues/6380)) ([dc69f24](https://github.com/ReVanced/revanced-patches/commit/dc69f2433e2650654e2dffdd76b0b0c8a52bf515))
### Features
* **ProtonVPN:** Add `Unlock split tunneling` patch ([#6353](https://github.com/ReVanced/revanced-patches/issues/6353)) ([e0f3346](https://github.com/ReVanced/revanced-patches/commit/e0f33468e6e96b9f10cf35ec67622d6488528c90))
* **SBS On Demand:** Add `Remove ads` patch ([#6378](https://github.com/ReVanced/revanced-patches/issues/6378)) ([315931c](https://github.com/ReVanced/revanced-patches/commit/315931cbf8f61cd4b3a54ace1ff03685d748614c))
# [5.47.0](https://github.com/ReVanced/revanced-patches/compare/v5.46.0...v5.47.0) (2025-12-18)
### Bug Fixes
* **Instagram - Disable signature check:** Change patch to default excluded ([#6283](https://github.com/ReVanced/revanced-patches/issues/6283)) ([bb745b5](https://github.com/ReVanced/revanced-patches/commit/bb745b555b3808b7679c5995319aa365630fbd76))
* **Lightroom:** Add `Disable version check` patch to fix opening the app ([#6315](https://github.com/ReVanced/revanced-patches/issues/6315)) ([018d176](https://github.com/ReVanced/revanced-patches/commit/018d176914a06a30e9007a3eb2e6b0f459078413))
* **Reddit - Hide ads:** Update patch for new versions of Reddit ([#6342](https://github.com/ReVanced/revanced-patches/issues/6342)) ([f8bd123](https://github.com/ReVanced/revanced-patches/commit/f8bd1239cc0f0bd1c2dca39f846951bf512891e3))
* **Spotify:** Make patches work with latest versions again ([#6359](https://github.com/ReVanced/revanced-patches/issues/6359)) ([34830ba](https://github.com/ReVanced/revanced-patches/commit/34830ba63b436146064f0f89f948d51cd0cb9146))
* **YouTube - Hide layout components:** Fix "Hide Subscribe button" in channel page not working ([#6363](https://github.com/ReVanced/revanced-patches/issues/6363)) ([ded8370](https://github.com/ReVanced/revanced-patches/commit/ded83702077701aac8a8749d71bf7376427f37d6))
* **YouTube - Hide player flyout menu items:** Allow hiding audio menu with 'Android No SDK' client type ([9495cf4](https://github.com/ReVanced/revanced-patches/commit/9495cf49ef8a872be64de6c971c1919b4b9a8720))
* **YouTube - Sanitize sharing links:** Handle non hierarchical urls ([654d091](https://github.com/ReVanced/revanced-patches/commit/654d091e650cda37650b57cbf3ba6f1cdd6d47d3))
### Features
* **Disney+ - SkipAds:** Add other package names the patch is compatible with ([#6372](https://github.com/ReVanced/revanced-patches/issues/6372)) ([1f4f252](https://github.com/ReVanced/revanced-patches/commit/1f4f252c81e9a89267f6e37548e66027b1bc1a1a))
* **Disney+:** Add `Skip ads` patch ([#6343](https://github.com/ReVanced/revanced-patches/issues/6343)) ([6bd7dca](https://github.com/ReVanced/revanced-patches/commit/6bd7dca75bd2ea335a596aa93a8b767d39be5f83))
* **IdAustria - Remove device integrity check:** Update patch to work with latest version ([#6360](https://github.com/ReVanced/revanced-patches/issues/6360)) ([0ea3491](https://github.com/ReVanced/revanced-patches/commit/0ea3491227fc50c03555d43d3fec78eb82906b26))
* **Instagram:** Add `Anonymous story viewing` patch ([#6263](https://github.com/ReVanced/revanced-patches/issues/6263)) ([94ae84a](https://github.com/ReVanced/revanced-patches/commit/94ae84ad0fc3a9197c82d5356301d464730c3b17))
* **Instagram:** Add `Disable auto story flipping` patch ([#6262](https://github.com/ReVanced/revanced-patches/issues/6262)) ([2f0de15](https://github.com/ReVanced/revanced-patches/commit/2f0de15e67e4f99ed6ecdc136d04cceb23b0d069))
* **Instagram:** Add `Disable Reels scrolling` patch ([#6317](https://github.com/ReVanced/revanced-patches/issues/6317)) ([0928dcd](https://github.com/ReVanced/revanced-patches/commit/0928dcd00dc2a9c1eef9a23c1e26ff5dc9ee670a))
* **Letterboxd:** Add `Hide ads` patch ([#6309](https://github.com/ReVanced/revanced-patches/issues/6309)) ([0af0ee9](https://github.com/ReVanced/revanced-patches/commit/0af0ee92c48bb2ffc332197e05439e20c5c05d83))
* **Peacock TV:** Add `Hide ads` patch ([#6348](https://github.com/ReVanced/revanced-patches/issues/6348)) ([847ee18](https://github.com/ReVanced/revanced-patches/commit/847ee189a971e6d4a99823998569f8e561b8319c))
* **ProtonVPN:** Add `Remove delay` patch ([#6326](https://github.com/ReVanced/revanced-patches/issues/6326)) ([bbd8932](https://github.com/ReVanced/revanced-patches/commit/bbd8932b2e740aff96ba047332e541bff3e09436))
* **Spoof SIM provider:** Spoof additional TelephonyManager methods ([#6293](https://github.com/ReVanced/revanced-patches/issues/6293)) ([ac583d4](https://github.com/ReVanced/revanced-patches/commit/ac583d40d0f4c0e6544e3661ff3e82a25912f2b0))
* **YouTube - Hide layout components:** Add "Hide cell divider", "Hide featured links", and "Hide featured videos" options ([#6335](https://github.com/ReVanced/revanced-patches/issues/6335)) ([a5d197b](https://github.com/ReVanced/revanced-patches/commit/a5d197b9775b98d7a37bfdee9e5f726d5e04d8cf))
* **YouTube - Hide layout components:** Add "Hide Join button" and "Hide Subscribe button" options for channel page ([#6345](https://github.com/ReVanced/revanced-patches/issues/6345)) ([02831a6](https://github.com/ReVanced/revanced-patches/commit/02831a6069fc30ffa3a87f8e4de653d003a2187e))
* **YouTube - Hide Shorts components:** Add "Hide auto-dubbed label" and "Hide live preview" options ([#6334](https://github.com/ReVanced/revanced-patches/issues/6334)) ([a7c220a](https://github.com/ReVanced/revanced-patches/commit/a7c220a4aea93ea7ae7005b5760443d7571c4228))
# [5.47.0-dev.18](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.17...v5.47.0-dev.18) (2025-12-18)
### Features
* **Disney+ - SkipAds:** Add other package names the patch is compatible with ([#6372](https://github.com/ReVanced/revanced-patches/issues/6372)) ([1f4f252](https://github.com/ReVanced/revanced-patches/commit/1f4f252c81e9a89267f6e37548e66027b1bc1a1a))
# [5.47.0-dev.17](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.16...v5.47.0-dev.17) (2025-12-18)
### Bug Fixes
* **Reddit - Hide ads:** Update patch for new versions of Reddit ([#6342](https://github.com/ReVanced/revanced-patches/issues/6342)) ([f8bd123](https://github.com/ReVanced/revanced-patches/commit/f8bd1239cc0f0bd1c2dca39f846951bf512891e3))
# [5.47.0-dev.16](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.15...v5.47.0-dev.16) (2025-12-15)
### Bug Fixes
* **Lightroom:** Add `Disable version check` patch to fix opening the app ([#6315](https://github.com/ReVanced/revanced-patches/issues/6315)) ([018d176](https://github.com/ReVanced/revanced-patches/commit/018d176914a06a30e9007a3eb2e6b0f459078413))
### Features
* **IdAustria - Remove device integrity check:** Update patch to work with latest version ([#6360](https://github.com/ReVanced/revanced-patches/issues/6360)) ([0ea3491](https://github.com/ReVanced/revanced-patches/commit/0ea3491227fc50c03555d43d3fec78eb82906b26))
# [5.47.0-dev.15](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.14...v5.47.0-dev.15) (2025-12-13)
### Bug Fixes
* **YouTube - Hide layout components:** Fix "Hide Subscribe button" in channel page not working ([#6363](https://github.com/ReVanced/revanced-patches/issues/6363)) ([ded8370](https://github.com/ReVanced/revanced-patches/commit/ded83702077701aac8a8749d71bf7376427f37d6))
# [5.47.0-dev.14](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.13...v5.47.0-dev.14) (2025-12-13)
### Bug Fixes
* **Spotify:** Make patches work with latest versions again ([#6359](https://github.com/ReVanced/revanced-patches/issues/6359)) ([34830ba](https://github.com/ReVanced/revanced-patches/commit/34830ba63b436146064f0f89f948d51cd0cb9146))
# [5.47.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.12...v5.47.0-dev.13) (2025-12-10)
### Features
* **Peacock TV:** Add `Hide ads` patch ([#6348](https://github.com/ReVanced/revanced-patches/issues/6348)) ([847ee18](https://github.com/ReVanced/revanced-patches/commit/847ee189a971e6d4a99823998569f8e561b8319c))
# [5.47.0-dev.12](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.11...v5.47.0-dev.12) (2025-12-08)
### Features
* **YouTube - Hide layout components:** Add "Hide Join button" and "Hide Subscribe button" options for channel page ([#6345](https://github.com/ReVanced/revanced-patches/issues/6345)) ([02831a6](https://github.com/ReVanced/revanced-patches/commit/02831a6069fc30ffa3a87f8e4de653d003a2187e))
# [5.47.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.10...v5.47.0-dev.11) (2025-12-08)
### Features
* **Disney+:** Add `Skip ads` patch ([#6343](https://github.com/ReVanced/revanced-patches/issues/6343)) ([6bd7dca](https://github.com/ReVanced/revanced-patches/commit/6bd7dca75bd2ea335a596aa93a8b767d39be5f83))
# [5.47.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.9...v5.47.0-dev.10) (2025-12-08)
### Features
* **YouTube - Hide Shorts components:** Add "Hide auto-dubbed label" and "Hide live preview" options ([#6334](https://github.com/ReVanced/revanced-patches/issues/6334)) ([a7c220a](https://github.com/ReVanced/revanced-patches/commit/a7c220a4aea93ea7ae7005b5760443d7571c4228))
# [5.47.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.8...v5.47.0-dev.9) (2025-12-08)
### Features
* **YouTube - Hide layout components:** Add "Hide cell divider", "Hide featured links", and "Hide featured videos" options ([#6335](https://github.com/ReVanced/revanced-patches/issues/6335)) ([a5d197b](https://github.com/ReVanced/revanced-patches/commit/a5d197b9775b98d7a37bfdee9e5f726d5e04d8cf))
# [5.47.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.7...v5.47.0-dev.8) (2025-12-08)
### Features
* **Instagram:** Add `Disable Reels scrolling` patch ([#6317](https://github.com/ReVanced/revanced-patches/issues/6317)) ([0928dcd](https://github.com/ReVanced/revanced-patches/commit/0928dcd00dc2a9c1eef9a23c1e26ff5dc9ee670a))
* **ProtonVPN:** Add `Remove delay` patch ([#6326](https://github.com/ReVanced/revanced-patches/issues/6326)) ([bbd8932](https://github.com/ReVanced/revanced-patches/commit/bbd8932b2e740aff96ba047332e541bff3e09436))
# [5.47.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.6...v5.47.0-dev.7) (2025-12-03) # [5.47.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.6...v5.47.0-dev.7) (2025-12-03)

View File

@@ -97,7 +97,7 @@ Thank you for considering contributing to ReVanced Patches. You can find the con
To build ReVanced Patches, you can follow the [ReVanced documentation](https://github.com/ReVanced/revanced-documentation). To build ReVanced Patches, you can follow the [ReVanced documentation](https://github.com/ReVanced/revanced-documentation).
## 📜 Licence ## 📜 License
ReVanced Patches is licensed under the GPLv3 license. Please see the [license file](LICENSE) for more information. ReVanced Patches is licensed under the GPLv3 license. Please see the [license file](LICENSE) for more information.
[tl;dr](https://www.tldrlegal.com/license/gnu-general-public-license-v3-gpl-3) you may copy, distribute and modify ReVanced Patches as long as you track changes/dates in source files. [tl;dr](https://www.tldrlegal.com/license/gnu-general-public-license-v3-gpl-3) you may copy, distribute and modify ReVanced Patches as long as you track changes/dates in source files.

View File

@@ -1,8 +1,9 @@
project_id_env: "CROWDIN_PROJECT_ID" project_id_env: "CROWDIN_PROJECT_ID"
api_token_env: "CROWDIN_PERSONAL_TOKEN" api_token_env: "CROWDIN_PERSONAL_TOKEN"
preserve_hierarchy: false preserve_hierarchy: true
files: files:
- source: patches/src/main/resources/addresources/values/strings.xml - source: patches/src/main/resources/addresources/values/strings.xml
dest: patches.xml
translation: patches/src/main/resources/addresources/values-%android_code%/strings.xml translation: patches/src/main/resources/addresources/values-%android_code%/strings.xml
skip_untranslated_strings: true skip_untranslated_strings: true

View File

@@ -0,0 +1,20 @@
android {
namespace = "app.revanced.extension"
defaultConfig {
minSdk = 21
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
buildFeatures {
aidl = true
}
}
dependencies {
compileOnly(libs.annotation)
}

View File

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

View File

@@ -0,0 +1,8 @@
package com.google.android.play.core.integrity.protocol;
import android.os.Bundle;
import com.google.android.play.core.integrity.protocol.IExpressIntegrityServiceCallback;
interface IExpressIntegrityService {
oneway void requestIntegrityToken(in Bundle request, IExpressIntegrityServiceCallback callback) = 2;
}

View File

@@ -0,0 +1,5 @@
package com.google.android.play.core.integrity.protocol;
interface IExpressIntegrityServiceCallback {
oneway void onRequestExpressIntegrityTokenResult(in Bundle result) = 2;
}

View File

@@ -0,0 +1,8 @@
package com.google.android.play.core.integrity.protocol;
import android.os.Bundle;
import com.google.android.play.core.integrity.protocol.IIntegrityServiceCallback;
interface IIntegrityService {
oneway void requestIntegrityToken(in Bundle request, IIntegrityServiceCallback callback) = 1;
}

View File

@@ -0,0 +1,7 @@
package com.google.android.play.core.integrity.protocol;
import android.os.Bundle;
interface IIntegrityServiceCallback {
oneway void onResult(in Bundle result) = 1;
}

View File

@@ -0,0 +1,10 @@
package android.ext;
/** @hide */
// Int values that are assigned to packages in this interface can be retrieved at runtime from
// ApplicationInfo.ext().getPackageId() or from AndroidPackage.ext().getPackageId() (in system_server).
//
// PackageIds are assigned to parsed APKs only after they are verified, either by a certificate check
// or by a check that the APK is stored on an immutable OS partition.
public interface PackageId {
String PLAY_STORE_NAME = "com.android.vending";
}

View File

@@ -0,0 +1,62 @@
package android.os;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.io.FileDescriptor;
/** @hide */
public class BinderWrapper implements IBinder {
protected final IBinder base;
public BinderWrapper(IBinder base) {
this.base = base;
}
@Override
public boolean transact(int code, @NonNull Parcel data, @Nullable Parcel reply, int flags) throws RemoteException {
return base.transact(code, data, reply, flags);
}
@Nullable
@Override
public IInterface queryLocalInterface(@NonNull String descriptor) {
return base.queryLocalInterface(descriptor);
}
@Nullable
@Override
public String getInterfaceDescriptor() throws RemoteException {
return base.getInterfaceDescriptor();
}
@Override
public boolean pingBinder() {
return base.pingBinder();
}
@Override
public boolean isBinderAlive() {
return base.isBinderAlive();
}
@Override
public void dump(@NonNull FileDescriptor fd, @Nullable String[] args) throws RemoteException {
base.dump(fd, args);
}
@Override
public void dumpAsync(@NonNull FileDescriptor fd, @Nullable String[] args) throws RemoteException {
base.dumpAsync(fd, args);
}
@Override
public void linkToDeath(@NonNull DeathRecipient recipient, int flags) throws RemoteException {
base.linkToDeath(recipient, flags);
}
@Override
public boolean unlinkToDeath(@NonNull DeathRecipient recipient, int flags) {
return base.unlinkToDeath(recipient, flags);
}
}

View File

@@ -0,0 +1,41 @@
package app.grapheneos.gmscompat.lib.playintegrity;
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import com.android.internal.os.FakeBackgroundHandler;
import com.google.android.play.core.integrity.protocol.IIntegrityService;
import com.google.android.play.core.integrity.protocol.IIntegrityServiceCallback;
class ClassicPlayIntegrityServiceWrapper extends PlayIntegrityServiceWrapper {
ClassicPlayIntegrityServiceWrapper(IBinder base) {
super(base);
requestIntegrityTokenTxnCode = 2; // IIntegrityService.Stub.TRANSACTION_requestIntegrityToken
}
static class TokenRequestStub extends IIntegrityService.Stub {
public void requestIntegrityToken(Bundle request, IIntegrityServiceCallback callback) {
Runnable r = () -> {
var result = new Bundle();
// https://developer.android.com/google/play/integrity/reference/com/google/android/play/core/integrity/model/IntegrityErrorCode.html#API_NOT_AVAILABLE
final int API_NOT_AVAILABLE = -1;
result.putInt("error", API_NOT_AVAILABLE);
try {
callback.onResult(result);
} catch (RemoteException e) {
Log.e("IIntegrityService.Stub", "", e);
}
};
FakeBackgroundHandler.getHandler().postDelayed(r, getTokenRequestResultDelay());
}
};
@Override
protected Binder createTokenRequestStub() {
return new TokenRequestStub();
}
}

View File

@@ -0,0 +1,48 @@
package app.grapheneos.gmscompat.lib.playintegrity;
import android.os.Binder;
import android.os.BinderWrapper;
import android.os.IBinder;
import android.os.Parcel;
import android.os.RemoteException;
import android.util.Log;
import androidx.annotation.Nullable;
abstract class PlayIntegrityServiceWrapper extends BinderWrapper {
final String TAG;
protected int requestIntegrityTokenTxnCode;
public PlayIntegrityServiceWrapper(IBinder base) {
super(base);
TAG = getClass().getSimpleName();
}
protected abstract Binder createTokenRequestStub();
@Override
public boolean transact(int code, Parcel data, @Nullable Parcel reply, int flags) throws RemoteException {
if (code == requestIntegrityTokenTxnCode) {
if (maybeStubOutIntegrityTokenRequest(code, data, reply, flags)) {
return true;
}
}
return super.transact(code, data, reply, flags);
}
private boolean maybeStubOutIntegrityTokenRequest(int code, Parcel data, @Nullable Parcel reply, int flags) {
Log.d(TAG, "integrity token request detected");
try {
createTokenRequestStub().transact(code, data, reply, flags);
} catch (RemoteException e) {
// this is a local call
throw new IllegalStateException(e);
}
return true;
}
protected static long getTokenRequestResultDelay() {
return 500L;
}
}

View File

@@ -0,0 +1,35 @@
package app.grapheneos.gmscompat.lib.playintegrity;
import android.content.Intent;
import android.content.ServiceConnection;
import android.ext.PackageId;
import android.os.IBinder;
import androidx.annotation.Nullable;
import app.grapheneos.gmscompat.lib.util.ServiceConnectionWrapper;
import java.util.function.UnaryOperator;
public class PlayIntegrityUtils {
public static @Nullable ServiceConnection maybeReplaceServiceConnection(Intent service, ServiceConnection orig) {
if (PackageId.PLAY_STORE_NAME.equals(service.getPackage())) {
UnaryOperator<IBinder> binderOverride = null;
final String CLASSIC_SERVICE =
"com.google.android.play.core.integrityservice.BIND_INTEGRITY_SERVICE";
final String STANDARD_SERVICE =
"com.google.android.play.core.expressintegrityservice.BIND_EXPRESS_INTEGRITY_SERVICE";
String action = service.getAction();
if (STANDARD_SERVICE.equals(action)) {
binderOverride = StandardPlayIntegrityServiceWrapper::new;
} else if (CLASSIC_SERVICE.equals(action)) {
binderOverride = ClassicPlayIntegrityServiceWrapper::new;
}
if (binderOverride != null) {
return new ServiceConnectionWrapper(orig, binderOverride);
}
}
return null;
}
}

View File

@@ -0,0 +1,42 @@
package app.grapheneos.gmscompat.lib.playintegrity;
import android.annotation.SuppressLint;
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import com.android.internal.os.FakeBackgroundHandler;
import com.google.android.play.core.integrity.protocol.IExpressIntegrityService;
import com.google.android.play.core.integrity.protocol.IExpressIntegrityServiceCallback;
@SuppressLint("LongLogTag")
class StandardPlayIntegrityServiceWrapper extends PlayIntegrityServiceWrapper {
StandardPlayIntegrityServiceWrapper(IBinder base) {
super(base);
requestIntegrityTokenTxnCode = 3; // IExpressIntegrityService.Stub.TRANSACTION_requestIntegrityToken
}
static class TokenRequestStub extends IExpressIntegrityService.Stub {
public void requestIntegrityToken(Bundle request, IExpressIntegrityServiceCallback callback) {
Runnable r = () -> {
var result = new Bundle();
// https://developer.android.com/google/play/integrity/reference/com/google/android/play/core/integrity/model/StandardIntegrityErrorCode.html#API_NOT_AVAILABLE
final int API_NOT_AVAILABLE = -1;
result.putInt("error", API_NOT_AVAILABLE);
try {
callback.onRequestExpressIntegrityTokenResult(result);
} catch (RemoteException e) {
Log.e("IExpressIntegrityService.Stub", "", e);
}
};
FakeBackgroundHandler.getHandler().postDelayed(r, getTokenRequestResultDelay());
}
};
@Override
protected Binder createTokenRequestStub() {
return new TokenRequestStub();
}
}

View File

@@ -0,0 +1,49 @@
package app.grapheneos.gmscompat.lib.util;
import android.content.ComponentName;
import android.content.ServiceConnection;
import android.os.Build;
import android.os.IBinder;
import java.util.function.UnaryOperator;
public class ServiceConnectionWrapper implements ServiceConnection {
private final ServiceConnection base;
private final UnaryOperator<IBinder> binderOverride;
public ServiceConnectionWrapper(ServiceConnection base, UnaryOperator<IBinder> binderOverride) {
this.base = base;
this.binderOverride = binderOverride;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
IBinder override = binderOverride.apply(service);
if (override != null) {
service = override;
}
}
base.onServiceConnected(name, service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
base.onServiceDisconnected(name);
}
@Override
public void onBindingDied(ComponentName name) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
base.onBindingDied(name);
}
}
@Override
public void onNullBinding(ComponentName name) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
base.onNullBinding(name);
}
}
}

View File

@@ -0,0 +1,17 @@
package app.revanced.extension.playintegrity;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import app.grapheneos.gmscompat.lib.playintegrity.PlayIntegrityUtils;
public class DisablePlayIntegrityPatch {
public static boolean bindService(Context context, Intent service, ServiceConnection conn, int flags) {
ServiceConnection override = PlayIntegrityUtils.maybeReplaceServiceConnection(service, conn);
if (override != null) {
conn = override;
}
return context.bindService(service, conn, flags);
}
}

View File

@@ -0,0 +1,11 @@
package com.android.internal.os;
import android.os.Handler;
import android.os.Looper;
public class FakeBackgroundHandler {
public static Handler getHandler() {
return new Handler(Looper.getMainLooper());
}
}

View File

@@ -311,6 +311,10 @@ public class Utils {
return resourceId; return resourceId;
} }
public static String getResourceString(int id) throws Resources.NotFoundException {
return getContext().getResources().getString(id);
}
public static int getResourceInteger(String resourceIdentifierName) throws Resources.NotFoundException { public static int getResourceInteger(String resourceIdentifierName) throws Resources.NotFoundException {
return getContext().getResources().getInteger(getResourceIdentifierOrThrow(resourceIdentifierName, "integer")); return getContext().getResources().getInteger(getResourceIdentifierOrThrow(resourceIdentifierName, "integer"));
} }

View File

@@ -58,6 +58,23 @@ public abstract class Setting<T> {
}; };
} }
/**
* Availability based on a single parent setting being disabled.
*/
public static Availability parentNot(BooleanSetting parent) {
return new Availability() {
@Override
public boolean isAvailable() {
return !parent.get();
}
@Override
public List<Setting<?>> getParentSettings() {
return Collections.singletonList(parent);
}
};
}
/** /**
* Availability based on all parents being enabled. * Availability based on all parents being enabled.
*/ */

View File

@@ -0,0 +1,5 @@
dependencies {
compileOnly(project(":extensions:shared:library"))
compileOnly(project(":extensions:strava:stub"))
compileOnly(libs.okhttp)
}

View File

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

View File

@@ -0,0 +1,216 @@
package app.revanced.extension.strava;
import android.annotation.SuppressLint;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;
import android.webkit.MimeTypeMap;
import com.strava.core.data.MediaType;
import com.strava.photos.data.Media;
import okhttp3.*;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import app.revanced.extension.shared.Utils;
@SuppressLint("NewApi")
public final class AddMediaDownloadPatch {
public static final int ACTION_DOWNLOAD = -1;
public static final int ACTION_OPEN_LINK = -2;
public static final int ACTION_COPY_LINK = -3;
private static final OkHttpClient client = new OkHttpClient();
public static boolean handleAction(int actionId, Media media) {
String url = getUrl(media);
switch (actionId) {
case ACTION_DOWNLOAD:
String name = media.getId();
if (media.getType() == MediaType.VIDEO) {
downloadVideo(url, name);
} else {
downloadPhoto(url, name);
}
return true;
case ACTION_OPEN_LINK:
Utils.openLink(url);
return true;
case ACTION_COPY_LINK:
copyLink(url);
return true;
default:
return false;
}
}
public static void copyLink(CharSequence url) {
Utils.setClipboard(url);
showInfoToast("link_copied_to_clipboard", "🔗");
}
public static void downloadPhoto(String url, String name) {
showInfoToast("loading", "âŗ");
Utils.runOnBackgroundThread(() -> {
try (Response response = fetch(url)) {
ResponseBody body = response.body();
String mimeType = body.contentType().toString();
String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType);
ContentResolver resolver = Utils.getContext().getContentResolver();
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DISPLAY_NAME, name + '.' + extension);
values.put(MediaStore.Images.Media.IS_PENDING, 1);
values.put(MediaStore.Images.Media.MIME_TYPE, mimeType);
values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES + "/Strava");
Uri collection = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q
? MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL)
: MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
Uri row = resolver.insert(collection, values);
try (OutputStream outputStream = resolver.openOutputStream(row)) {
transferTo(body.byteStream(), outputStream);
} finally {
values.clear();
values.put(MediaStore.Images.Media.IS_PENDING, 0);
resolver.update(row, values, null);
}
showInfoToast("yis_2024_local_save_image_success", "âœ”ī¸");
} catch (IOException e) {
showErrorToast("download_failure", "❌", e);
}
});
}
/**
* Downloads a video in the M3U8 / HLS (HTTP Live Streaming) format.
*/
public static void downloadVideo(String url, String name) {
// The first request yields multiple URLs with different stream options.
// In case of Strava, the first one is always of highest quality.
// Each stream can consist of multiple chunks.
// The second request yields the URLs of all of these chunks.
// Fetch all of them concurrently and pipe their streams into the file in order.
showInfoToast("loading", "âŗ");
Utils.runOnBackgroundThread(() -> {
try {
String highestQualityStreamUrl;
try (Response response = fetch(url)) {
highestQualityStreamUrl = replaceFileName(url, lines(response).findFirst().get());
}
List<Future<Response>> futures;
try (Response response = fetch(highestQualityStreamUrl)) {
futures = lines(response)
.map(line -> replaceFileName(highestQualityStreamUrl, line))
.map(chunkUrl -> Utils.submitOnBackgroundThread(() -> fetch(chunkUrl)))
.collect(Collectors.toList());
}
ContentResolver resolver = Utils.getContext().getContentResolver();
ContentValues values = new ContentValues();
values.put(MediaStore.Video.Media.DISPLAY_NAME, name + '.' + "mp4");
values.put(MediaStore.Video.Media.IS_PENDING, 1);
values.put(MediaStore.Video.Media.MIME_TYPE, MimeTypeMap.getSingleton().getMimeTypeFromExtension("mp4"));
values.put(MediaStore.Video.Media.RELATIVE_PATH, Environment.DIRECTORY_MOVIES + "/Strava");
Uri collection = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q
? MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL)
: MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
Uri row = resolver.insert(collection, values);
try (OutputStream outputStream = resolver.openOutputStream(row)) {
Throwable error = null;
for (Future<Response> future : futures) {
if (error != null) {
if (future.cancel(true)) {
continue;
}
}
try (Response response = future.get()) {
if (error == null) {
transferTo(response.body().byteStream(), outputStream);
}
} catch (InterruptedException | IOException e) {
error = e;
} catch (ExecutionException e) {
error = e.getCause();
}
}
if (error != null) {
throw new IOException(error);
}
} finally {
values.clear();
values.put(MediaStore.Video.Media.IS_PENDING, 0);
resolver.update(row, values, null);
}
showInfoToast("yis_2024_local_save_video_success", "âœ”ī¸");
} catch (IOException e) {
showErrorToast("download_failure", "❌", e);
}
});
}
private static String getUrl(Media media) {
return media.getType() == MediaType.VIDEO
? ((Media.Video) media).getVideoUrl()
: media.getLargestUrl();
}
private static String getString(String name, String fallback) {
int id = Utils.getResourceIdentifier(name, "string");
return id != 0
? Utils.getResourceString(id)
: fallback;
}
private static void showInfoToast(String resourceName, String fallback) {
String text = getString(resourceName, fallback);
Utils.showToastShort(text);
}
private static void showErrorToast(String resourceName, String fallback, IOException exception) {
String text = getString(resourceName, fallback);
Utils.showToastLong(text + ' ' + exception.getLocalizedMessage());
}
private static Response fetch(String url) throws IOException {
Request request = new Request.Builder().url(url).build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) {
throw new IOException("Got HTTP status code " + response.code());
}
return response;
}
/**
* {@code inputStream.transferTo(outputStream)} is "too new".
*/
private static void transferTo(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[1024 * 8];
int length;
while ((length = in.read(buffer)) != -1) {
out.write(buffer, 0, length);
}
}
/**
* Gets all file names.
*/
private static Stream<String> lines(Response response) {
BufferedReader reader = new BufferedReader(response.body().charStream());
return reader.lines().filter(line -> !line.startsWith("#"));
}
private static String replaceFileName(String uri, String newName) {
return uri.substring(0, uri.lastIndexOf('/') + 1) + newName;
}
}

View File

@@ -0,0 +1,12 @@
plugins {
alias(libs.plugins.android.library)
}
android {
namespace = "app.revanced.extension"
compileSdk = 34
defaultConfig {
minSdk = 21
}
}

View File

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

View File

@@ -0,0 +1,15 @@
package com.strava.core.data;
import java.io.Serializable;
public interface MediaContent extends Serializable {
String getCaption();
String getId();
String getReferenceId();
MediaType getType();
void setCaption(String caption);
}

View File

@@ -0,0 +1,44 @@
package com.strava.core.data;
import java.io.Serializable;
public final class MediaDimension implements Comparable<MediaDimension>, Serializable {
private final int height;
private final int width;
public MediaDimension(int width, int height) {
this.width = width;
this.height = height;
}
public int getHeight() {
return height;
}
public float getHeightScale() {
if (width <= 0 || height <= 0) {
return 1f;
}
return height / width;
}
public int getWidth() {
return width;
}
public float getWidthScale() {
if (width <= 0 || height <= 0) {
return 1f;
}
return width / height;
}
public boolean isLandscape() {
return width > 0 && width >= height;
}
@Override
public int compareTo(MediaDimension other) {
return 0;
}
}

View File

@@ -0,0 +1,16 @@
package com.strava.core.data;
public enum MediaType {
PHOTO(1),
VIDEO(2);
private final int remoteValue;
private MediaType(int remoteValue) {
this.remoteValue = remoteValue;
}
public int getRemoteValue() {
return remoteValue;
}
}

View File

@@ -0,0 +1,17 @@
package com.strava.core.data;
import java.util.SortedMap;
public interface RemoteMediaContent extends MediaContent {
MediaDimension getLargestSize();
String getLargestUrl();
SortedMap<Integer, MediaDimension> getSizes();
String getSmallestUrl();
RemoteMediaStatus getStatus();
SortedMap<Integer, String> getUrls();
}

View File

@@ -0,0 +1,11 @@
package com.strava.core.data;
public enum RemoteMediaStatus {
NEW,
PENDING,
PROCESSED,
REPORTED,
REINSTATED,
DELETED,
FAILED
}

View File

@@ -0,0 +1,286 @@
package com.strava.photos.data;
import com.strava.core.data.MediaDimension;
import com.strava.core.data.MediaType;
import com.strava.core.data.RemoteMediaContent;
import com.strava.core.data.RemoteMediaStatus;
import java.util.SortedMap;
public abstract class Media implements RemoteMediaContent {
public static final class Photo extends Media {
private final Long activityId;
private final String activityName;
private final long athleteId;
private String caption;
private final String createdAt;
private final String createdAtLocal;
private final String cursor;
private final String id;
private final SortedMap<Integer, MediaDimension> sizes;
private final RemoteMediaStatus status;
private final String tag;
private final MediaType type;
private final SortedMap<Integer, String> urls;
@Override
public Long getActivityId() {
return activityId;
}
@Override
public String getActivityName() {
return activityName;
}
@Override
public long getAthleteId() {
return athleteId;
}
@Override
public String getCaption() {
return caption;
}
@Override
public String getCreatedAt() {
return createdAt;
}
@Override
public String getCreatedAtLocal() {
return createdAtLocal;
}
@Override
public String getCursor() {
return cursor;
}
@Override
public String getId() {
return id;
}
@Override
public SortedMap<Integer, MediaDimension> getSizes() {
return sizes;
}
@Override
public RemoteMediaStatus getStatus() {
return status;
}
@Override
public String getTag() {
return tag;
}
@Override
public MediaType getType() {
return type;
}
@Override
public SortedMap<Integer, String> getUrls() {
return urls;
}
@Override
public void setCaption(String caption) {
this.caption = caption;
}
public Photo(String id,
String caption,
SortedMap<Integer, String> urls,
SortedMap<Integer, MediaDimension> sizes,
long athleteId,
String createdAt,
String createdAtLocal,
Long activityId,
String activityName,
RemoteMediaStatus status,
String tag,
String cursor) {
this.id = id;
this.caption = caption;
this.urls = urls;
this.sizes = sizes;
this.athleteId = athleteId;
this.createdAt = createdAt;
this.createdAtLocal = createdAtLocal;
this.activityId = activityId;
this.activityName = activityName;
this.status = status;
this.tag = tag;
this.cursor = cursor;
this.type = MediaType.PHOTO;
}
}
public static final class Video extends Media {
private final Long activityId;
private final String activityName;
private final long athleteId;
private String caption;
private final String createdAt;
private final String createdAtLocal;
private final String cursor;
private final Float durationSeconds;
private final String id;
private final SortedMap<Integer, MediaDimension> sizes;
private final RemoteMediaStatus status;
private final String tag;
private final MediaType type;
private final SortedMap<Integer, String> urls;
private final String videoUrl;
@Override
public Long getActivityId() {
return activityId;
}
@Override
public String getActivityName() {
return activityName;
}
@Override
public long getAthleteId() {
return athleteId;
}
@Override
public String getCaption() {
return caption;
}
@Override
public String getCreatedAt() {
return createdAt;
}
@Override
public String getCreatedAtLocal() {
return createdAtLocal;
}
@Override
public String getCursor() {
return cursor;
}
public final Float getDurationSeconds() {
return durationSeconds;
}
@Override
public String getId() {
return id;
}
@Override
public SortedMap<Integer, MediaDimension> getSizes() {
return sizes;
}
@Override
public RemoteMediaStatus getStatus() {
return status;
}
@Override
public String getTag() {
return tag;
}
@Override
public MediaType getType() {
return type;
}
@Override
public SortedMap<Integer, String> getUrls() {
return urls;
}
public final String getVideoUrl() {
return videoUrl;
}
@Override
public void setCaption(String caption) {
this.caption = caption;
}
public Video(String id,
String caption,
SortedMap<Integer, String> urls,
SortedMap<Integer, MediaDimension> sizes,
long athleteId,
String createdAt,
String createdAtLocal,
Long activityId,
String activityName,
RemoteMediaStatus status,
String videoUrl,
Float durationSeconds,
String tag,
String cursor) {
this.id = id;
this.caption = caption;
this.urls = urls;
this.sizes = sizes;
this.athleteId = athleteId;
this.createdAt = createdAt;
this.createdAtLocal = createdAtLocal;
this.activityId = activityId;
this.activityName = activityName;
this.status = status;
this.videoUrl = videoUrl;
this.durationSeconds = durationSeconds;
this.tag = tag;
this.cursor = cursor;
this.type = MediaType.VIDEO;
}
}
public abstract Long getActivityId();
public abstract String getActivityName();
public abstract long getAthleteId();
public abstract String getCreatedAt();
public abstract String getCreatedAtLocal();
public abstract String getCursor();
@Override
public MediaDimension getLargestSize() {
return null;
}
@Override
public String getLargestUrl() {
return null;
}
@Override
public String getReferenceId() {
return null;
}
@Override
public String getSmallestUrl() {
return null;
}
public abstract String getTag();
private Media() {
}
}

View File

@@ -0,0 +1,30 @@
package app.revanced.extension.youtube.patches;
import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused")
public class PauseOnAudioInterruptPatch {
private static final int AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK = -3;
private static final int AUDIOFOCUS_LOSS_TRANSIENT = -2;
/**
* Injection point for AudioFocusRequest builder.
* Returns true if audio ducking should be disabled (willPauseWhenDucked = true).
*/
public static boolean shouldPauseOnAudioInterrupt() {
return Settings.PAUSE_ON_AUDIO_INTERRUPT.get();
}
/**
* Injection point for onAudioFocusChange callback.
* Converts AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK to AUDIOFOCUS_LOSS_TRANSIENT
* when the setting is enabled, causing YouTube to pause instead of ducking.
*/
public static int overrideAudioFocusChange(int focusChange) {
if (Settings.PAUSE_ON_AUDIO_INTERRUPT.get() && focusChange == AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {
return AUDIOFOCUS_LOSS_TRANSIENT;
}
return focusChange;
}
}

View File

@@ -44,10 +44,14 @@ final class DescriptionComponentsFilter extends Filter {
"video_attributes_section" "video_attributes_section"
); );
final StringFilterGroup featuredSection = new StringFilterGroup( final StringFilterGroup featuredLinksSection = new StringFilterGroup(
Settings.HIDE_FEATURED_SECTION, Settings.HIDE_FEATURED_LINKS_SECTION,
// "media_lockup", "structured_description_video_lockup" "media_lockup"
"compact_infocard" );
final StringFilterGroup featuredVideosSection = new StringFilterGroup(
Settings.HIDE_FEATURED_VIDEOS_SECTION,
"structured_description_video_lockup"
); );
final StringFilterGroup podcastSection = new StringFilterGroup( final StringFilterGroup podcastSection = new StringFilterGroup(
@@ -76,7 +80,7 @@ final class DescriptionComponentsFilter extends Filter {
); );
subscribeButton = new StringFilterGroup( subscribeButton = new StringFilterGroup(
Settings.HIDE_DESCRIPTION_SUBSCRIBE_BUTTON, Settings.HIDE_SUBSCRIBE_BUTTON,
"subscribe_button" "subscribe_button"
); );
@@ -110,7 +114,8 @@ final class DescriptionComponentsFilter extends Filter {
aiGeneratedVideoSummarySection, aiGeneratedVideoSummarySection,
askSection, askSection,
attributesSection, attributesSection,
featuredSection, featuredLinksSection,
featuredVideosSection,
horizontalShelf, horizontalShelf,
howThisWasMadeSection, howThisWasMadeSection,
hypePoints, hypePoints,

View File

@@ -35,9 +35,12 @@ public final class LayoutComponentsFilter extends Filter {
"&list=" "&list="
); );
private static final String PAGE_HEADER_PATH = "page_header.e";
private final StringTrieSearch exceptions = new StringTrieSearch(); private final StringTrieSearch exceptions = new StringTrieSearch();
private final StringFilterGroup communityPosts; private final StringFilterGroup communityPosts;
private final StringFilterGroup surveys; private final StringFilterGroup surveys;
private final StringFilterGroup subscribeButton;
private final StringFilterGroup notifyMe; private final StringFilterGroup notifyMe;
private final StringFilterGroup singleItemInformationPanel; private final StringFilterGroup singleItemInformationPanel;
private final StringFilterGroup expandableMetadata; private final StringFilterGroup expandableMetadata;
@@ -68,8 +71,14 @@ public final class LayoutComponentsFilter extends Filter {
"chips_shelf" "chips_shelf"
); );
final var visualSpacer = new StringFilterGroup(
Settings.HIDE_VISUAL_SPACER,
"cell_divider"
);
addIdentifierCallbacks( addIdentifierCallbacks(
chipsShelf chipsShelf,
visualSpacer
); );
// Paths. // Paths.
@@ -238,8 +247,13 @@ public final class LayoutComponentsFilter extends Filter {
"sponsorships" "sponsorships"
); );
final var crowdfundingBox = new StringFilterGroup(
Settings.HIDE_CROWDFUNDING_BOX,
"donation_shelf"
);
final var channelWatermark = new StringFilterGroup( final var channelWatermark = new StringFilterGroup(
Settings.HIDE_VIDEO_CHANNEL_WATERMARK, Settings.HIDE_CHANNEL_WATERMARK,
"featured_channel_watermark_overlay" "featured_channel_watermark_overlay"
); );
@@ -256,19 +270,28 @@ public final class LayoutComponentsFilter extends Filter {
channelProfile = new StringFilterGroup( channelProfile = new StringFilterGroup(
null, null,
"channel_profile.e", "channel_profile.e",
"page_header.e" PAGE_HEADER_PATH
); );
channelProfileBuffer = new ByteArrayFilterGroupList(); channelProfileBuffer = new ByteArrayFilterGroupList();
channelProfileBuffer.addAll(new ByteArrayFilterGroup( channelProfileBuffer.addAll(new ByteArrayFilterGroup(
Settings.HIDE_VISIT_STORE_BUTTON, Settings.HIDE_STORE_BUTTON,
"header_store_button" "store_button"
), ),
new ByteArrayFilterGroup( new ByteArrayFilterGroup(
Settings.HIDE_VISIT_COMMUNITY_BUTTON, Settings.HIDE_COMMUNITY_BUTTON,
"community_button" "community_button"
),
new ByteArrayFilterGroup(
Settings.HIDE_JOIN_BUTTON,
"sponsor_button"
) )
); );
subscribeButton = new StringFilterGroup(
Settings.HIDE_SUBSCRIBE_BUTTON_IN_CHANNEL_PAGE,
"subscribe_button"
);
horizontalShelves = new StringFilterGroup( horizontalShelves = new StringFilterGroup(
Settings.HIDE_HORIZONTAL_SHELVES, Settings.HIDE_HORIZONTAL_SHELVES,
"horizontal_video_shelf.e", "horizontal_video_shelf.e",
@@ -294,6 +317,7 @@ public final class LayoutComponentsFilter extends Filter {
compactChannelBar, compactChannelBar,
compactChannelBarInner, compactChannelBarInner,
communityPosts, communityPosts,
crowdfundingBox,
emergencyBox, emergencyBox,
expandableMetadata, expandableMetadata,
forYouShelf, forYouShelf,
@@ -308,6 +332,7 @@ public final class LayoutComponentsFilter extends Filter {
quickActions, quickActions,
relatedVideos, relatedVideos,
singleItemInformationPanel, singleItemInformationPanel,
subscribeButton,
subscribersCommunityGuidelines, subscribersCommunityGuidelines,
subscriptionsChipBar, subscriptionsChipBar,
surveys, surveys,
@@ -338,6 +363,10 @@ public final class LayoutComponentsFilter extends Filter {
return channelProfileBuffer.check(buffer).isFiltered(); return channelProfileBuffer.check(buffer).isFiltered();
} }
if (matchedGroup == subscribeButton) {
return path.startsWith(PAGE_HEADER_PATH);
}
if (matchedGroup == communityPosts && NavigationBar.isBackButtonVisible()) { if (matchedGroup == communityPosts && NavigationBar.isBackButtonVisible()) {
// Allow community posts on channel profile page, // Allow community posts on channel profile page,
// or if viewing an individual channel in the feed. // or if viewing an individual channel in the feed.
@@ -404,7 +433,7 @@ public final class LayoutComponentsFilter extends Filter {
* Injection point. * Injection point.
*/ */
public static boolean showWatermark() { public static boolean showWatermark() {
return !Settings.HIDE_VIDEO_CHANNEL_WATERMARK.get(); return !Settings.HIDE_CHANNEL_WATERMARK.get();
} }
/** /**

View File

@@ -44,9 +44,10 @@ public final class ShortsFilter extends Filter {
private final StringFilterGroup useTemplateButton; private final StringFilterGroup useTemplateButton;
private final ByteArrayFilterGroup useTemplateButtonBuffer; private final ByteArrayFilterGroup useTemplateButtonBuffer;
private final StringFilterGroup autoDubbedLabel;
private final StringFilterGroup subscribeButton; private final StringFilterGroup subscribeButton;
private final StringFilterGroup joinButton; private final StringFilterGroup joinButton;
private final StringFilterGroup paidPromotionButton; private final StringFilterGroup paidPromotionLabel;
private final StringFilterGroup shelfHeader; private final StringFilterGroup shelfHeader;
private final StringFilterGroup suggestedAction; private final StringFilterGroup suggestedAction;
@@ -161,6 +162,18 @@ public final class ShortsFilter extends Filter {
"participation_bar.e" "participation_bar.e"
); );
StringFilterGroup livePreview = new StringFilterGroup(
Settings.HIDE_SHORTS_LIVE_PREVIEW,
// Live Shorts preview that can popup while scrolling through Shorts player.
// Can be removed if a way to disable live Shorts is found.
"live_preview_page_vm.e"
);
autoDubbedLabel = new StringFilterGroup(
Settings.HIDE_SHORTS_AUTO_DUBBED_LABEL,
"badge."
);
joinButton = new StringFilterGroup( joinButton = new StringFilterGroup(
Settings.HIDE_SHORTS_JOIN_BUTTON, Settings.HIDE_SHORTS_JOIN_BUTTON,
"sponsor_button" "sponsor_button"
@@ -171,9 +184,10 @@ public final class ShortsFilter extends Filter {
"subscribe_button" "subscribe_button"
); );
paidPromotionButton = new StringFilterGroup( paidPromotionLabel = new StringFilterGroup(
Settings.HIDE_PAID_PROMOTION_LABEL, Settings.HIDE_PAID_PROMOTION_LABEL,
"reel_player_disclosure.e" "reel_player_disclosure.e",
"shorts_disclosures.e"
); );
shortsActionBar = new StringFilterGroup( shortsActionBar = new StringFilterGroup(
@@ -219,10 +233,10 @@ public final class ShortsFilter extends Filter {
); );
addPathCallbacks( addPathCallbacks(
shortsCompactFeedVideo, joinButton, subscribeButton, paidPromotionButton, shortsCompactFeedVideo, joinButton, subscribeButton, paidPromotionLabel, autoDubbedLabel,
shortsActionBar, suggestedAction, pausedOverlayButtons, channelBar, previewComment, shortsActionBar, suggestedAction, pausedOverlayButtons, channelBar, previewComment,
fullVideoLinkLabel, videoTitle, useSoundButton, reelSoundMetadata, soundButton, infoPanel, fullVideoLinkLabel, videoTitle, useSoundButton, reelSoundMetadata, soundButton, infoPanel,
stickers, likeFountain, likeButton, dislikeButton stickers, likeFountain, likeButton, dislikeButton, livePreview
); );
// //
@@ -250,6 +264,12 @@ public final class ShortsFilter extends Filter {
// Suggested actions. // Suggested actions.
// //
suggestedActionsBuffer.addAll( suggestedActionsBuffer.addAll(
new ByteArrayFilterGroup(
Settings.HIDE_SHORTS_PREVIEW_COMMENT,
// Preview comment that can popup while a Short is playing.
// Uses no bundled icons, and instead the users profile photo is shown.
"shorts-comments-panel"
),
new ByteArrayFilterGroup( new ByteArrayFilterGroup(
Settings.HIDE_SHORTS_SHOP_BUTTON, Settings.HIDE_SHORTS_SHOP_BUTTON,
"yt_outline_bag_" "yt_outline_bag_"
@@ -322,7 +342,8 @@ public final class ShortsFilter extends Filter {
boolean isFiltered(String identifier, String path, byte[] buffer, boolean isFiltered(String identifier, String path, byte[] buffer,
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) { StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
if (contentType == FilterContentType.PATH) { if (contentType == FilterContentType.PATH) {
if (matchedGroup == subscribeButton || matchedGroup == joinButton || matchedGroup == paidPromotionButton) { if (matchedGroup == subscribeButton || matchedGroup == joinButton
|| matchedGroup == paidPromotionLabel || matchedGroup == autoDubbedLabel) {
// Selectively filter to avoid false positive filtering of other subscribe/join buttons. // Selectively filter to avoid false positive filtering of other subscribe/join buttons.
return path.startsWith(REEL_CHANNEL_BAR_PATH) || path.startsWith(REEL_METAPANEL_PATH); return path.startsWith(REEL_CHANNEL_BAR_PATH) || path.startsWith(REEL_METAPANEL_PATH);
} }

View File

@@ -3,6 +3,7 @@ package app.revanced.extension.youtube.settings;
import static java.lang.Boolean.FALSE; import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE; import static java.lang.Boolean.TRUE;
import static app.revanced.extension.shared.settings.Setting.parent; import static app.revanced.extension.shared.settings.Setting.parent;
import static app.revanced.extension.shared.settings.Setting.parentNot;
import static app.revanced.extension.shared.settings.Setting.parentsAll; import static app.revanced.extension.shared.settings.Setting.parentsAll;
import static app.revanced.extension.shared.settings.Setting.parentsAny; import static app.revanced.extension.shared.settings.Setting.parentsAny;
import static app.revanced.extension.youtube.patches.ChangeFormFactorPatch.FormFactor; import static app.revanced.extension.youtube.patches.ChangeFormFactorPatch.FormFactor;
@@ -95,7 +96,6 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_CHIPS_SHELF = new BooleanSetting("revanced_hide_chips_shelf", 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_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_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_DOODLES = new BooleanSetting("revanced_hide_doodles", FALSE, true, "revanced_hide_doodles_user_dialog_message");
public static final BooleanSetting HIDE_EXPANDABLE_CARD = new BooleanSetting("revanced_hide_expandable_card", TRUE); public static final BooleanSetting HIDE_EXPANDABLE_CARD = new BooleanSetting("revanced_hide_expandable_card", 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_FEED = new BooleanSetting("revanced_hide_filter_bar_feed_in_feed", FALSE, true);
@@ -115,6 +115,7 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_UPLOAD_TIME = new BooleanSetting("revanced_hide_upload_time", FALSE, "revanced_hide_upload_time_user_dialog_message"); public static final BooleanSetting HIDE_UPLOAD_TIME = new BooleanSetting("revanced_hide_upload_time", FALSE, "revanced_hide_upload_time_user_dialog_message");
public static final BooleanSetting HIDE_VIDEO_RECOMMENDATION_LABELS = new BooleanSetting("revanced_hide_video_recommendation_labels", TRUE); public static final BooleanSetting HIDE_VIDEO_RECOMMENDATION_LABELS = new BooleanSetting("revanced_hide_video_recommendation_labels", TRUE);
public static final BooleanSetting HIDE_VIEW_COUNT = new BooleanSetting("revanced_hide_view_count", FALSE, "revanced_hide_view_count_user_dialog_message"); public static final BooleanSetting HIDE_VIEW_COUNT = new BooleanSetting("revanced_hide_view_count", FALSE, "revanced_hide_view_count_user_dialog_message");
public static final BooleanSetting HIDE_VISUAL_SPACER = new BooleanSetting("revanced_hide_visual_spacer", TRUE);
// Alternative thumbnails // 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_HOME = new EnumSetting<>("revanced_alt_thumbnail_home", ThumbnailOption.ORIGINAL);
@@ -136,11 +137,13 @@ public class Settings extends BaseSettings {
parentsAny(HIDE_KEYWORD_CONTENT_HOME, HIDE_KEYWORD_CONTENT_SUBSCRIPTIONS, HIDE_KEYWORD_CONTENT_SEARCH)); parentsAny(HIDE_KEYWORD_CONTENT_HOME, HIDE_KEYWORD_CONTENT_SUBSCRIPTIONS, HIDE_KEYWORD_CONTENT_SEARCH));
// Channel page // Channel page
public static final BooleanSetting HIDE_COMMUNITY_BUTTON = new BooleanSetting("revanced_hide_community_button", TRUE);
public static final BooleanSetting HIDE_FOR_YOU_SHELF = new BooleanSetting("revanced_hide_for_you_shelf", FALSE); public static final BooleanSetting HIDE_FOR_YOU_SHELF = new BooleanSetting("revanced_hide_for_you_shelf", FALSE);
public static final BooleanSetting HIDE_JOIN_BUTTON = new BooleanSetting("revanced_hide_join_button", FALSE);
public static final BooleanSetting HIDE_LINKS_PREVIEW = new BooleanSetting("revanced_hide_links_preview", TRUE); public static final BooleanSetting HIDE_LINKS_PREVIEW = new BooleanSetting("revanced_hide_links_preview", TRUE);
public static final BooleanSetting HIDE_MEMBERS_SHELF = new BooleanSetting("revanced_hide_members_shelf", TRUE); public static final BooleanSetting HIDE_MEMBERS_SHELF = new BooleanSetting("revanced_hide_members_shelf", TRUE);
public static final BooleanSetting HIDE_VISIT_COMMUNITY_BUTTON = new BooleanSetting("revanced_hide_visit_community_button", TRUE); public static final BooleanSetting HIDE_STORE_BUTTON = new BooleanSetting("revanced_hide_store_button", TRUE);
public static final BooleanSetting HIDE_VISIT_STORE_BUTTON = new BooleanSetting("revanced_hide_visit_store_button", TRUE); public static final BooleanSetting HIDE_SUBSCRIBE_BUTTON_IN_CHANNEL_PAGE = new BooleanSetting("revanced_hide_subscribe_button_in_channel_page", FALSE);
// Player // Player
public static final BooleanSetting COPY_VIDEO_URL = new BooleanSetting("revanced_copy_video_url", FALSE); public static final BooleanSetting COPY_VIDEO_URL = new BooleanSetting("revanced_copy_video_url", FALSE);
@@ -154,6 +157,8 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_CAPTIONS_BUTTON = new BooleanSetting("revanced_hide_captions_button", FALSE); 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_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_BAR = new BooleanSetting("revanced_hide_channel_bar", FALSE);
public static final BooleanSetting HIDE_CHANNEL_WATERMARK = new BooleanSetting("revanced_hide_channel_watermark", 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_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_ENDSCREEN_CARDS = new BooleanSetting("revanced_hide_endscreen_cards", FALSE);
public static final BooleanSetting HIDE_END_SCREEN_SUGGESTED_VIDEO = new BooleanSetting("revanced_end_screen_suggested_video", FALSE, true); public static final BooleanSetting HIDE_END_SCREEN_SUGGESTED_VIDEO = new BooleanSetting("revanced_end_screen_suggested_video", FALSE, true);
@@ -168,7 +173,6 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_RELATED_VIDEOS = new BooleanSetting("revanced_hide_related_videos", 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_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_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 OPEN_VIDEOS_FULLSCREEN_PORTRAIT = new BooleanSetting("revanced_open_videos_fullscreen_portrait", FALSE); public static final BooleanSetting OPEN_VIDEOS_FULLSCREEN_PORTRAIT = new BooleanSetting("revanced_open_videos_fullscreen_portrait", FALSE);
public static final BooleanSetting PLAYBACK_SPEED_DIALOG_BUTTON = new BooleanSetting("revanced_playback_speed_dialog_button", FALSE); public static final BooleanSetting PLAYBACK_SPEED_DIALOG_BUTTON = new BooleanSetting("revanced_playback_speed_dialog_button", FALSE);
public static final BooleanSetting VIDEO_QUALITY_DIALOG_BUTTON = new BooleanSetting("revanced_video_quality_dialog_button", FALSE); public static final BooleanSetting VIDEO_QUALITY_DIALOG_BUTTON = new BooleanSetting("revanced_video_quality_dialog_button", FALSE);
@@ -210,13 +214,14 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_ASK_SECTION = new BooleanSetting("revanced_hide_ask_section", FALSE); public static final BooleanSetting HIDE_ASK_SECTION = new BooleanSetting("revanced_hide_ask_section", FALSE);
public static final BooleanSetting HIDE_ATTRIBUTES_SECTION = new BooleanSetting("revanced_hide_attributes_section", FALSE); 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); public static final BooleanSetting HIDE_CHAPTERS_SECTION = new BooleanSetting("revanced_hide_chapters_section", TRUE);
public static final BooleanSetting HIDE_FEATURED_SECTION = new BooleanSetting("revanced_hide_featured_section", TRUE);
public static final BooleanSetting HIDE_HOW_THIS_WAS_MADE_SECTION = new BooleanSetting("revanced_hide_how_this_was_made_section", FALSE); public static final BooleanSetting HIDE_HOW_THIS_WAS_MADE_SECTION = new BooleanSetting("revanced_hide_how_this_was_made_section", FALSE);
public static final BooleanSetting HIDE_HYPE_POINTS = new BooleanSetting("revanced_hide_hype_points", FALSE); public static final BooleanSetting HIDE_HYPE_POINTS = new BooleanSetting("revanced_hide_hype_points", FALSE);
public static final BooleanSetting HIDE_INFO_CARDS_SECTION = new BooleanSetting("revanced_hide_info_cards_section", TRUE); public static final BooleanSetting HIDE_INFO_CARDS_SECTION = new BooleanSetting("revanced_hide_info_cards_section", TRUE);
public static final BooleanSetting HIDE_FEATURED_LINKS_SECTION = new BooleanSetting("revanced_hide_featured_links_section", FALSE, parentNot(HIDE_INFO_CARDS_SECTION));
public static final BooleanSetting HIDE_FEATURED_VIDEOS_SECTION = new BooleanSetting("revanced_hide_featured_videos_section", FALSE, parentNot(HIDE_INFO_CARDS_SECTION));
public static final BooleanSetting HIDE_SUBSCRIBE_BUTTON = new BooleanSetting("revanced_hide_subscribe_button", FALSE, parentNot(HIDE_INFO_CARDS_SECTION));
public static final BooleanSetting HIDE_KEY_CONCEPTS_SECTION = new BooleanSetting("revanced_hide_key_concepts_section", FALSE); 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_PODCAST_SECTION = new BooleanSetting("revanced_hide_podcast_section", TRUE);
public static final BooleanSetting HIDE_DESCRIPTION_SUBSCRIBE_BUTTON = new BooleanSetting("revanced_hide_description_subscribe_button", TRUE);
public static final BooleanSetting HIDE_TRANSCRIPT_SECTION = new BooleanSetting("revanced_hide_transcript_section", TRUE); public static final BooleanSetting HIDE_TRANSCRIPT_SECTION = new BooleanSetting("revanced_hide_transcript_section", TRUE);
// Action buttons // Action buttons
@@ -228,11 +233,11 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_HYPE_BUTTON = new BooleanSetting("revanced_hide_hype_button", FALSE); public static final BooleanSetting HIDE_HYPE_BUTTON = new BooleanSetting("revanced_hide_hype_button", FALSE);
public static final BooleanSetting HIDE_LIKE_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_like_dislike_button", FALSE); public static final BooleanSetting HIDE_LIKE_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_like_dislike_button", FALSE);
public static final BooleanSetting HIDE_PROMOTE_BUTTON = new BooleanSetting("revanced_hide_promote_button", FALSE); public static final BooleanSetting HIDE_PROMOTE_BUTTON = new BooleanSetting("revanced_hide_promote_button", FALSE);
public static final BooleanSetting HIDE_REMIX_BUTTON = new BooleanSetting("revanced_hide_remix_button", TRUE); public static final BooleanSetting HIDE_REMIX_BUTTON = new BooleanSetting("revanced_hide_remix_button", FALSE);
public static final BooleanSetting HIDE_REPORT_BUTTON = new BooleanSetting("revanced_hide_report_button", FALSE); public static final BooleanSetting HIDE_REPORT_BUTTON = new BooleanSetting("revanced_hide_report_button", FALSE);
public static final BooleanSetting HIDE_SAVE_BUTTON = new BooleanSetting("revanced_hide_save_button", FALSE); public static final BooleanSetting HIDE_SAVE_BUTTON = new BooleanSetting("revanced_hide_save_button", FALSE);
public static final BooleanSetting HIDE_SHARE_BUTTON = new BooleanSetting("revanced_hide_share_button", FALSE); public static final BooleanSetting HIDE_SHARE_BUTTON = new BooleanSetting("revanced_hide_share_button", FALSE);
public static final BooleanSetting HIDE_SHOP_BUTTON = new BooleanSetting("revanced_hide_shop_button", FALSE); public static final BooleanSetting HIDE_SHOP_BUTTON = new BooleanSetting("revanced_hide_shop_button", TRUE);
public static final BooleanSetting HIDE_STOP_ADS_BUTTON = new BooleanSetting("revanced_hide_stop_ads_button", TRUE); public static final BooleanSetting HIDE_STOP_ADS_BUTTON = new BooleanSetting("revanced_hide_stop_ads_button", TRUE);
public static final BooleanSetting HIDE_THANKS_BUTTON = new BooleanSetting("revanced_hide_thanks_button", TRUE); public static final BooleanSetting HIDE_THANKS_BUTTON = new BooleanSetting("revanced_hide_thanks_button", TRUE);
@@ -292,6 +297,7 @@ public class Settings extends BaseSettings {
public static final BooleanSetting DISABLE_RESUMING_SHORTS_PLAYER = new BooleanSetting("revanced_disable_resuming_shorts_player", FALSE); public static final BooleanSetting DISABLE_RESUMING_SHORTS_PLAYER = new BooleanSetting("revanced_disable_resuming_shorts_player", FALSE);
public static final BooleanSetting DISABLE_SHORTS_BACKGROUND_PLAYBACK = new BooleanSetting("revanced_shorts_disable_background_playback", FALSE); public static final BooleanSetting DISABLE_SHORTS_BACKGROUND_PLAYBACK = new BooleanSetting("revanced_shorts_disable_background_playback", FALSE);
public static final EnumSetting<ShortsPlayerType> SHORTS_PLAYER_TYPE = new EnumSetting<>("revanced_shorts_player_type", ShortsPlayerType.SHORTS_PLAYER); public static final EnumSetting<ShortsPlayerType> SHORTS_PLAYER_TYPE = new EnumSetting<>("revanced_shorts_player_type", ShortsPlayerType.SHORTS_PLAYER);
public static final BooleanSetting HIDE_SHORTS_AUTO_DUBBED_LABEL = new BooleanSetting("revanced_hide_shorts_auto_dubbed_label", FALSE);
public static final BooleanSetting HIDE_SHORTS_CHANNEL_BAR = new BooleanSetting("revanced_hide_shorts_channel_bar", 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_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_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_dislike_button", FALSE);
@@ -306,11 +312,12 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_SHORTS_JOIN_BUTTON = new BooleanSetting("revanced_hide_shorts_join_button", TRUE); 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_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_LIKE_FOUNTAIN = new BooleanSetting("revanced_hide_shorts_like_fountain", TRUE);
public static final BooleanSetting HIDE_SHORTS_LIVE_PREVIEW = new BooleanSetting("revanced_hide_shorts_live_preview", FALSE);
public static final BooleanSetting HIDE_SHORTS_LOCATION_LABEL = new BooleanSetting("revanced_hide_shorts_location_label", FALSE); 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_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_PAUSED_OVERLAY_BUTTONS = new BooleanSetting("revanced_hide_shorts_paused_overlay_buttons", FALSE);
public static final BooleanSetting HIDE_SHORTS_PREVIEW_COMMENT = new BooleanSetting("revanced_hide_shorts_preview_comment", TRUE); public static final BooleanSetting HIDE_SHORTS_PREVIEW_COMMENT = new BooleanSetting("revanced_hide_shorts_preview_comment", TRUE);
public static final BooleanSetting HIDE_SHORTS_REMIX_BUTTON = new BooleanSetting("revanced_hide_shorts_remix_button", TRUE); public static final BooleanSetting HIDE_SHORTS_REMIX_BUTTON = new BooleanSetting("revanced_hide_shorts_remix_button", 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_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 = 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_SEARCH_SUGGESTIONS = new BooleanSetting("revanced_hide_shorts_search_suggestions", TRUE);
@@ -349,6 +356,7 @@ public class Settings extends BaseSettings {
public static final IntegerSetting ANNOUNCEMENT_LAST_ID = new IntegerSetting("revanced_announcement_last_id", -1, false, false); public static final IntegerSetting ANNOUNCEMENT_LAST_ID = new IntegerSetting("revanced_announcement_last_id", -1, false, false);
public static final BooleanSetting LOOP_VIDEO = new BooleanSetting("revanced_loop_video", FALSE); public static final BooleanSetting LOOP_VIDEO = new BooleanSetting("revanced_loop_video", FALSE);
public static final BooleanSetting LOOP_VIDEO_BUTTON = new BooleanSetting("revanced_loop_video_button", FALSE); public static final BooleanSetting LOOP_VIDEO_BUTTON = new BooleanSetting("revanced_loop_video_button", FALSE);
public static final BooleanSetting PAUSE_ON_AUDIO_INTERRUPT = new BooleanSetting("revanced_pause_on_audio_interrupt", FALSE, true);
public static final BooleanSetting BYPASS_URL_REDIRECTS = new BooleanSetting("revanced_bypass_url_redirects", TRUE); public static final BooleanSetting BYPASS_URL_REDIRECTS = new BooleanSetting("revanced_bypass_url_redirects", TRUE);
public static final BooleanSetting DISABLE_HAPTIC_FEEDBACK_CHAPTERS = new BooleanSetting("revanced_disable_haptic_feedback_chapters", FALSE); public static final BooleanSetting DISABLE_HAPTIC_FEEDBACK_CHAPTERS = new BooleanSetting("revanced_disable_haptic_feedback_chapters", FALSE);
public static final BooleanSetting DISABLE_HAPTIC_FEEDBACK_PRECISE_SEEKING = new BooleanSetting("revanced_disable_haptic_feedback_precise_seeking", FALSE); public static final BooleanSetting DISABLE_HAPTIC_FEEDBACK_PRECISE_SEEKING = new BooleanSetting("revanced_disable_haptic_feedback_precise_seeking", FALSE);

View File

@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
org.gradle.parallel = true org.gradle.parallel = true
android.useAndroidX = true android.useAndroidX = true
kotlin.code.style = official kotlin.code.style = official
version = 5.47.0-dev.7 version = 5.48.0-dev.9

View File

@@ -1,3 +1,7 @@
public final class DisableReelsScrollingPatchKt {
public static final fun getDisableReelsScrollingPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/all/misc/activity/exportall/ExportAllActivitiesPatchKt { public final class app/revanced/patches/all/misc/activity/exportall/ExportAllActivitiesPatchKt {
public static final fun getExportAllActivitiesPatch ()Lapp/revanced/patcher/patch/ResourcePatch; public static final fun getExportAllActivitiesPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
} }
@@ -100,6 +104,10 @@ public final class app/revanced/patches/all/misc/packagename/ChangePackageNamePa
public static final fun setPackageNameOption (Lapp/revanced/patcher/patch/Option;)V public static final fun setPackageNameOption (Lapp/revanced/patcher/patch/Option;)V
} }
public final class app/revanced/patches/all/misc/playintegrity/DisablePlayIntegrityKt {
public static final fun getDisablePlayIntegrityPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/all/misc/resources/AddResourcesPatchKt { public final class app/revanced/patches/all/misc/resources/AddResourcesPatchKt {
public static final fun addResource (Ljava/lang/String;Lapp/revanced/util/resource/BaseResource;)Z public static final fun addResource (Ljava/lang/String;Lapp/revanced/util/resource/BaseResource;)Z
public static final fun addResources (Lapp/revanced/patcher/patch/Patch;Lkotlin/jvm/functions/Function1;)Z public static final fun addResources (Lapp/revanced/patcher/patch/Patch;Lkotlin/jvm/functions/Function1;)Z
@@ -172,6 +180,10 @@ public final class app/revanced/patches/cieid/restrictions/root/BypassRootChecks
public static final fun getBypassRootChecksPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getBypassRootChecksPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
public final class app/revanced/patches/com/sbs/ondemand/tv/RemoveAdsPatchKt {
public static final fun getRemoveAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/cricbuzz/ads/DisableAdsPatchKt { public final class app/revanced/patches/cricbuzz/ads/DisableAdsPatchKt {
public static final fun getDisableAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getDisableAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
@@ -184,6 +196,10 @@ public final class app/revanced/patches/crunchyroll/ads/HideAdsPatchKt {
public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
public final class app/revanced/patches/disneyplus/ads/SkipAdsPatchKt {
public static final fun getSkipAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/duolingo/ad/DisableAdsPatchKt { public final class app/revanced/patches/duolingo/ad/DisableAdsPatchKt {
public static final fun getDisableAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getDisableAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
@@ -260,6 +276,10 @@ public final class app/revanced/patches/iconpackstudio/misc/pro/UnlockProPatchKt
public static final fun getUnlockProPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getUnlockProPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
public final class app/revanced/patches/idaustria/detection/deviceintegrity/RemoveDeviceIntegrityChecksPatchKt {
public static final fun getRemoveDeviceIntegrityChecksPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/idaustria/detection/root/RootDetectionPatchKt { public final class app/revanced/patches/idaustria/detection/root/RootDetectionPatchKt {
public static final fun getRootDetectionPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getRootDetectionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
@@ -336,6 +356,10 @@ public final class app/revanced/patches/letterboxd/ads/HideAdsPatchKt {
public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
public final class app/revanced/patches/letterboxd/unlock/unlockAppIcons/UnlockAppIconsPatchKt {
public static final fun getUnlockAppIconsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/lightroom/misc/login/DisableMandatoryLoginPatchKt { public final class app/revanced/patches/lightroom/misc/login/DisableMandatoryLoginPatchKt {
public static final fun getDisableMandatoryLoginPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getDisableMandatoryLoginPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
@@ -344,6 +368,10 @@ public final class app/revanced/patches/lightroom/misc/premium/UnlockPremiumPatc
public static final fun getUnlockPremiumPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getUnlockPremiumPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
public final class app/revanced/patches/lightroom/misc/version/DisableVersionCheckPatchKt {
public static final fun getDisableVersionCheckPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/memegenerator/detection/license/LicenseValidationPatchKt { public final class app/revanced/patches/memegenerator/detection/license/LicenseValidationPatchKt {
public static final fun getLicenseValidationPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getLicenseValidationPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
@@ -565,6 +593,10 @@ public final class app/revanced/patches/pandora/misc/EnableUnlimitedSkipsPatchKt
public static final fun getEnableUnlimitedSkipsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getEnableUnlimitedSkipsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
public final class app/revanced/patches/peacocktv/ads/HideAdsPatchKt {
public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/photomath/detection/deviceid/SpoofDeviceIdPatchKt { public final class app/revanced/patches/photomath/detection/deviceid/SpoofDeviceIdPatchKt {
public static final fun getGetDeviceIdPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getGetDeviceIdPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
@@ -621,6 +653,14 @@ public final class app/revanced/patches/protonmail/signature/RemoveSentFromSigna
public static final fun getRemoveSentFromSignaturePatch ()Lapp/revanced/patcher/patch/ResourcePatch; public static final fun getRemoveSentFromSignaturePatch ()Lapp/revanced/patcher/patch/ResourcePatch;
} }
public final class app/revanced/patches/protonvpn/delay/RemoveDelayPatchKt {
public static final fun getRemoveDelayPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/protonvpn/splittunneling/UnlockSplitTunnelingKt {
public static final fun getUnlockSplitTunnelingPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/rar/misc/annoyances/purchasereminder/HidePurchaseReminderPatchKt { public final class app/revanced/patches/rar/misc/annoyances/purchasereminder/HidePurchaseReminderPatchKt {
public static final fun getHidePurchaseReminderPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getHidePurchaseReminderPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
@@ -904,6 +944,10 @@ public final class app/revanced/patches/shared/misc/pairip/license/DisableLicens
public static final fun getDisableLicenseCheckPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getDisableLicenseCheckPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
public final class app/revanced/patches/shared/misc/privacy/DisableSentryTelemetryKt {
public static final fun getDisableSentryTelemetryPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
}
public final class app/revanced/patches/shared/misc/settings/SettingsPatchKt { public final class app/revanced/patches/shared/misc/settings/SettingsPatchKt {
public static final fun overrideThemeColors (Ljava/lang/String;Ljava/lang/String;)V public static final fun overrideThemeColors (Ljava/lang/String;Ljava/lang/String;)V
public static final fun settingsPatch (Ljava/util/List;Ljava/util/Set;)Lapp/revanced/patcher/patch/ResourcePatch; public static final fun settingsPatch (Ljava/util/List;Ljava/util/Set;)Lapp/revanced/patcher/patch/ResourcePatch;
@@ -1156,6 +1200,30 @@ public final class app/revanced/patches/stocard/layout/HideStoryBubblesPatchKt {
public static final fun getHideStoryBubblesPatch ()Lapp/revanced/patcher/patch/ResourcePatch; public static final fun getHideStoryBubblesPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
} }
public final class app/revanced/patches/strava/media/download/AddMediaDownloadPatchKt {
public static final fun getAddMediaDownloadPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/strava/media/upload/OverwriteMediaUploadParametersPatchKt {
public static final fun getOverwriteMediaUploadParametersPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/strava/misc/extension/SharedExtensionPatchKt {
public static final fun getSharedExtensionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/strava/password/EnablePasswordLoginPatchKt {
public static final fun getEnablePasswordLoginPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/strava/privacy/BlockSnowplowTrackingPatchKt {
public static final fun getBlockSnowplowTrackingPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/strava/quickedit/DisableQuickEditPatchKt {
public static final fun getDisableQuickEditPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/strava/subscription/UnlockSubscriptionPatchKt { public final class app/revanced/patches/strava/subscription/UnlockSubscriptionPatchKt {
public static final fun getUnlockSubscriptionPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getUnlockSubscriptionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
@@ -1636,6 +1704,10 @@ public final class app/revanced/patches/youtube/misc/announcements/Announcements
public static final fun getAnnouncementsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getAnnouncementsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
public final class app/revanced/patches/youtube/misc/audiofocus/PauseOnAudioInterruptPatchKt {
public static final fun getPauseOnAudioInterruptPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/misc/autorepeat/AutoRepeatPatchKt { public final class app/revanced/patches/youtube/misc/autorepeat/AutoRepeatPatchKt {
public static final fun getAutoRepeatPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getAutoRepeatPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
@@ -1931,6 +2003,7 @@ public final class app/revanced/util/BytecodeUtilsKt {
public static final fun indexOfFirstResourceIdOrThrow (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)I public static final fun indexOfFirstResourceIdOrThrow (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)I
public static final fun injectHideViewCall (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;IILjava/lang/String;Ljava/lang/String;)V public static final fun injectHideViewCall (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;IILjava/lang/String;Ljava/lang/String;)V
public static final fun literal (Lapp/revanced/patcher/FingerprintBuilder;Lkotlin/jvm/functions/Function0;)V public static final fun literal (Lapp/revanced/patcher/FingerprintBuilder;Lkotlin/jvm/functions/Function0;)V
public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;)V
public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;B)V public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;B)V
public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;C)V public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;C)V
public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;D)V public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;D)V
@@ -1940,7 +2013,6 @@ public final class app/revanced/util/BytecodeUtilsKt {
public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Ljava/lang/String;)V public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Ljava/lang/String;)V
public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;S)V public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;S)V
public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Z)V public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Z)V
public static synthetic fun returnEarly$default (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ZILjava/lang/Object;)V
public static final fun returnLate (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;B)V public static final fun returnLate (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;B)V
public static final fun returnLate (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;C)V public static final fun returnLate (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;C)V
public static final fun returnLate (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;D)V public static final fun returnLate (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;D)V

View File

@@ -50,12 +50,9 @@ kotlin {
publishing { publishing {
repositories { repositories {
maven { maven {
name = "GitHubPackages" name = "githubPackages"
url = uri("https://maven.pkg.github.com/revanced/revanced-patches") url = uri("https://maven.pkg.github.com/revanced/revanced-patches")
credentials { credentials(PasswordCredentials::class)
username = System.getenv("GITHUB_ACTOR")
password = System.getenv("GITHUB_TOKEN")
}
} }
} }
} }

View File

@@ -0,0 +1,55 @@
package app.revanced.patches.all.misc.playintegrity
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.Opcode
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
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/playintegrity/DisablePlayIntegrityPatch;"
private val CONTEXT_BIND_SERVICE_METHOD_REFERENCE = ImmutableMethodReference(
"Landroid/content/Context;",
"bindService",
listOf("Landroid/content/Intent;", "Landroid/content/ServiceConnection;", "I"),
"Z"
)
@Suppress("unused")
val disablePlayIntegrityPatch = bytecodePatch(
name = "Disable Play Integrity",
description = "Prevents apps from using Play Integrity by pretending it is not available.",
use = false,
) {
extendWith("extensions/all/misc/disable-play-integrity.rve")
dependsOn(
transformInstructionsPatch(
filterMap = filterMap@{ classDef, method, instruction, instructionIndex ->
val reference = instruction
.getReference<MethodReference>()
?.takeIf {
MethodUtil.methodSignaturesMatch(CONTEXT_BIND_SERVICE_METHOD_REFERENCE, it)
}
?: return@filterMap null
Triple(instruction as Instruction35c, instructionIndex, reference.parameterTypes)
},
transform = { method, entry ->
val (instruction, index, parameterTypes) = entry
val parameterString = parameterTypes.joinToString(separator = "")
val registerString = "v${instruction.registerC}, v${instruction.registerD}, v${instruction.registerE}, v${instruction.registerF}"
method.replaceInstruction(
index,
"invoke-static { $registerString }, $EXTENSION_CLASS_DESCRIPTOR->bindService(Landroid/content/Context;$parameterString)Z"
)
}
)
)
}

View File

@@ -0,0 +1,28 @@
package app.revanced.patches.com.sbs.ondemand.tv
import app.revanced.patcher.fingerprint
internal val shouldShowAdvertisingTVFingerprint = fingerprint {
returns("Z")
custom { method, classDef ->
method.name == "getShouldShowAdvertisingTV" &&
classDef.type == "Lcom/sbs/ondemand/common/InMemoryStorage;"
}
}
internal val shouldShowPauseAdFingerprint = fingerprint {
returns("Z")
custom { method, classDef ->
method.name == "shouldShowPauseAd" &&
classDef.type == "Lcom/sbs/ondemand/player/viewmodels/PauseAdController;"
}
}
internal val requestAdStreamFingerprint = fingerprint {
returns("V")
custom { method, classDef ->
method.name == "requestAdStream\$player_googleStoreTvRelease" &&
classDef.type == "Lcom/sbs/ondemand/player/viewmodels/AdsController;"
}
}

View File

@@ -0,0 +1,37 @@
package app.revanced.patches.com.sbs.ondemand.tv
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.shared.misc.pairip.license.disableLicenseCheckPatch
import app.revanced.util.returnEarly
@Suppress("unused")
val removeAdsPatch = bytecodePatch(
name = "Remove ads",
description = "Removes pre-roll, pause and on-demand advertisements from SBS On Demand TV.",
) {
compatibleWith("com.sbs.ondemand.tv")
dependsOn(disableLicenseCheckPatch)
execute {
shouldShowAdvertisingTVFingerprint.method.returnEarly(true)
shouldShowPauseAdFingerprint.method.returnEarly(false)
// Remove on-demand pre-roll advertisements using exception handling.
// Exception handling is used instead of returnEarly() because:
// 1. returnEarly() causes black screen when the app waits for ad content that never comes.
// 2. SBS app has built-in exception handling in handleProviderFailure().
// 3. Exception triggers fallbackToAkamaiProvider() which loads actual content.
// 4. This preserves the intended app flow: first try ads, then fail gracefully, then load content.
requestAdStreamFingerprint.method.addInstructions(
0,
"""
new-instance v0, Ljava/lang/RuntimeException;
const-string v1, "Ad stream disabled"
invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
"""
)
}
}

View File

@@ -0,0 +1,19 @@
package app.revanced.patches.disneyplus.ads
import app.revanced.patcher.fingerprint
internal val insertionGetPointsFingerprint = fingerprint {
returns("Ljava/util/List")
custom { method, _ ->
method.name == "getPoints" &&
method.definingClass == "Lcom/dss/sdk/internal/media/Insertion;"
}
}
internal val insertionGetRangesFingerprint = fingerprint {
returns("Ljava/util/List")
custom { method, _ ->
method.name == "getRanges" &&
method.definingClass == "Lcom/dss/sdk/internal/media/Insertion;"
}
}

View File

@@ -0,0 +1,25 @@
package app.revanced.patches.disneyplus.ads
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.patch.bytecodePatch
@Suppress("unused")
val skipAdsPatch = bytecodePatch(
name = "Skip ads",
description = "Automatically skips ads.",
) {
compatibleWith("com.disney.disneyplus")
execute {
arrayOf(insertionGetPointsFingerprint, insertionGetRangesFingerprint).forEach {
it.method.addInstructions(
0,
"""
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
return-object v0
""",
)
}
}
}

View File

@@ -0,0 +1,22 @@
package app.revanced.patches.idaustria.detection.deviceintegrity
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val isDeviceBootloaderOpenFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC)
returns("Ljava/lang/Object;")
custom { method, classDef ->
method.name == "isDeviceBootloaderOpen" &&
classDef.endsWith("/DeviceIntegrityCheckProviderImpl;")
}
}
internal val isDeviceRootedFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC)
returns("Z")
custom { method, classDef ->
method.name == "isDeviceRooted" &&
classDef.endsWith("/DeviceIntegrityCheckProviderImpl;")
}
}

View File

@@ -0,0 +1,30 @@
package app.revanced.patches.idaustria.detection.deviceintegrity
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.returnEarly
@Suppress("unused")
val removeDeviceIntegrityChecksPatch = bytecodePatch(
name = "Remove device integrity checks",
description = "Removes the check for root permissions and unlocked bootloader.",
) {
compatibleWith("at.gv.oe.app")
execute {
isDeviceRootedFingerprint.method.returnEarly(false)
isDeviceBootloaderOpenFingerprint.method.apply {
addInstructions(
0,
"""
const/4 v0, 0x0
invoke-static { v0 }, Lkotlin/coroutines/jvm/internal/Boxing;->boxBoolean(Z)Ljava/lang/Boolean;
move-result-object v0
return-object v0
"""
)
}
}
}

View File

@@ -1,31 +0,0 @@
package app.revanced.patches.idaustria.detection.root
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val attestationSupportedCheckFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC)
returns("V")
custom { method, classDef ->
method.name == "attestationSupportCheck" &&
classDef.endsWith("/DeviceIntegrityCheck;")
}
}
internal val bootloaderCheckFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC)
returns("Z")
custom { method, classDef ->
method.name == "bootloaderCheck" &&
classDef.endsWith("/DeviceIntegrityCheck;")
}
}
internal val rootCheckFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC)
returns("V")
custom { method, classDef ->
method.name == "rootCheck" &&
classDef.endsWith("/DeviceIntegrityCheck;")
}
}

View File

@@ -1,22 +1,10 @@
package app.revanced.patches.idaustria.detection.root package app.revanced.patches.idaustria.detection.root
import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.shared.PATCH_DESCRIPTION_REMOVE_ROOT_DETECTION import app.revanced.patches.idaustria.detection.deviceintegrity.removeDeviceIntegrityChecksPatch
import app.revanced.patches.shared.PATCH_NAME_REMOVE_ROOT_DETECTION
import app.revanced.util.returnEarly
@Deprecated("Patch was superseded", ReplaceWith("removeDeviceIntegrityChecksPatch"))
@Suppress("unused") @Suppress("unused")
val rootDetectionPatch = bytecodePatch( val rootDetectionPatch = bytecodePatch {
name = PATCH_NAME_REMOVE_ROOT_DETECTION, dependsOn(removeDeviceIntegrityChecksPatch)
description = PATCH_DESCRIPTION_REMOVE_ROOT_DETECTION
) {
compatibleWith("at.gv.oe.app")
execute {
setOf(
attestationSupportedCheckFingerprint,
bootloaderCheckFingerprint,
rootCheckFingerprint,
).forEach { it.method.returnEarly(true) }
}
} }

View File

@@ -28,6 +28,13 @@ val hideNavigationButtonsPatch = bytecodePatch(
dependsOn(sharedExtensionPatch) dependsOn(sharedExtensionPatch)
val hideHome by booleanOption(
key = "hideHome",
default = false,
title = "Hide Home",
description = "Permanently hides the Home button. App starts at next available tab." // On the "homecoming" / current instagram layout.
)
val hideReels by booleanOption( val hideReels by booleanOption(
key = "hideReels", key = "hideReels",
default = true, default = true,
@@ -35,6 +42,27 @@ val hideNavigationButtonsPatch = bytecodePatch(
description = "Permanently hides the Reels button." description = "Permanently hides the Reels button."
) )
val hideDirect by booleanOption(
key = "hideDirect",
default = false,
title = "Hide Direct",
description = "Permanently hides the Direct button."
)
val hideSearch by booleanOption(
key = "hideSearch",
default = false,
title = "Hide Search",
description = "Permanently hides the Search button."
)
val hideProfile by booleanOption(
key = "hideProfile",
default = false,
title = "Hide Profile",
description = "Permanently hides the Profile button."
)
val hideCreate by booleanOption( val hideCreate by booleanOption(
key = "hideCreate", key = "hideCreate",
default = true, default = true,
@@ -43,7 +71,7 @@ val hideNavigationButtonsPatch = bytecodePatch(
) )
execute { execute {
if (!hideReels!! && !hideCreate!!) { if (!hideHome!! &&!hideReels!! && !hideDirect!! && !hideSearch!! && !hideProfile!! && !hideCreate!!) {
return@execute Logger.getLogger(this::class.java.name).warning( return@execute Logger.getLogger(this::class.java.name).warning(
"No hide navigation buttons options are enabled. No changes made." "No hide navigation buttons options are enabled. No changes made."
) )
@@ -76,6 +104,13 @@ val hideNavigationButtonsPatch = bytecodePatch(
""" """
} }
if (hideHome!!) {
addInstructionsAtControlFlowLabel(
returnIndex,
instructionsRemoveButtonByName("fragment_feed")
)
}
if (hideReels!!) { if (hideReels!!) {
addInstructionsAtControlFlowLabel( addInstructionsAtControlFlowLabel(
returnIndex, returnIndex,
@@ -83,12 +118,33 @@ val hideNavigationButtonsPatch = bytecodePatch(
) )
} }
if (hideDirect!!) {
addInstructionsAtControlFlowLabel(
returnIndex,
instructionsRemoveButtonByName("fragment_direct_tab")
)
}
if (hideSearch!!) {
addInstructionsAtControlFlowLabel(
returnIndex,
instructionsRemoveButtonByName("fragment_search")
)
}
if (hideCreate!!) { if (hideCreate!!) {
addInstructionsAtControlFlowLabel( addInstructionsAtControlFlowLabel(
returnIndex, returnIndex,
instructionsRemoveButtonByName("fragment_share") instructionsRemoveButtonByName("fragment_share")
) )
} }
if (hideProfile!!) {
addInstructionsAtControlFlowLabel(
returnIndex,
instructionsRemoveButtonByName("fragment_profile")
)
}
} }
} }
} }

View File

@@ -13,7 +13,7 @@ internal val storyUrlResponseJsonParserFingerprint = fingerprint {
} }
internal val profileUrlResponseJsonParserFingerprint = fingerprint { internal val profileUrlResponseJsonParserFingerprint = fingerprint {
strings("profile_to_share_url", "ProfileUrlResponse") strings("profile_to_share_url")
custom { method, _ -> method.name == "parseFromJson" } custom { method, _ -> method.name == "parseFromJson" }
} }

View File

@@ -0,0 +1,34 @@
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.instagram.reels.clipsSwipeRefreshLayoutOnInterceptTouchEventFingerprint
import app.revanced.patches.instagram.reels.clipsViewPagerImplGetViewAtIndexFingerprint
import app.revanced.util.returnEarly
@Suppress("unused")
val disableReelsScrollingPatch = bytecodePatch(
name = "Disable Reels scrolling",
description = "Disables the endless scrolling behavior in Instagram Reels, preventing swiping to the next Reel. " +
"Note: On a clean install, the 'Tip' animation may appear but will stop on its own after a few seconds.",
use = false
) {
compatibleWith("com.instagram.android")
execute {
val viewPagerField = clipsViewPagerImplGetViewAtIndexFingerprint.classDef.fields.first {
it.type == "Landroidx/viewpager2/widget/ViewPager2;"
}
// Disable user input on the ViewPager2 to prevent scrolling.
clipsViewPagerImplGetViewAtIndexFingerprint.method.addInstructions(
0,
"""
iget-object v0, p0, $viewPagerField
const/4 v1, 0x0
invoke-virtual { v0, v1 }, Landroidx/viewpager2/widget/ViewPager2;->setUserInputEnabled(Z)V
"""
)
// Return false in onInterceptTouchEvent to disable pull-to-refresh.
clipsSwipeRefreshLayoutOnInterceptTouchEventFingerprint.method.returnEarly(false)
}
}

View File

@@ -0,0 +1,13 @@
package app.revanced.patches.instagram.reels
import app.revanced.patcher.fingerprint
internal val clipsViewPagerImplGetViewAtIndexFingerprint = fingerprint {
strings("ClipsViewPagerImpl_getViewAtIndex")
}
internal val clipsSwipeRefreshLayoutOnInterceptTouchEventFingerprint = fingerprint {
parameters("Landroid/view/MotionEvent;")
custom { _, classDef -> classDef.type == "Linstagram/features/clips/viewer/ui/ClipsSwipeRefreshLayout;" }
}

View File

@@ -0,0 +1,9 @@
package app.revanced.patches.letterboxd.unlock.unlockAppIcons
import app.revanced.patcher.fingerprint
internal val getCanChangeAppIconFingerprint = fingerprint {
custom { method, classDef ->
method.name == "getCanChangeAppIcon" && classDef.type.endsWith("SettingsAppIconFragment;")
}
}

View File

@@ -0,0 +1,16 @@
package app.revanced.patches.letterboxd.unlock.unlockAppIcons
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.returnEarly
@Suppress("unused")
val unlockAppIconsPatch = bytecodePatch(
name = "Unlock app icons",
) {
compatibleWith("com.letterboxd.letterboxd")
execute {
getCanChangeAppIconFingerprint.method.returnEarly(true)
}
}

View File

@@ -0,0 +1,23 @@
package app.revanced.patches.lightroom.misc.version
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.patch.bytecodePatch
import com.android.tools.smali.dexlib2.Opcode
@Suppress("unused")
val disableVersionCheckPatch = bytecodePatch(
name = "Disable version check",
description = "Disables the server-side version check that prevents the app from starting.",
) {
compatibleWith("com.adobe.lrmobile"("9.3.0"))
execute {
refreshRemoteConfigurationFingerprint.method.apply {
val igetIndex = refreshRemoteConfigurationFingerprint.patternMatch!!.endIndex
// This value represents the server command to clear all version restrictions.
val statusForceReset = "-0x2";
replaceInstruction(igetIndex, "const/4 v1, $statusForceReset")
}
}
}

View File

@@ -0,0 +1,18 @@
package app.revanced.patches.lightroom.misc.version
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal val refreshRemoteConfigurationFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
strings(
"com.adobe.lrmobile.denylisted_version_set_key",
"com.adobe.lrmobile.app_min_version_key"
)
opcodes(
Opcode.INVOKE_STATIC,
Opcode.MOVE_RESULT_OBJECT,
Opcode.IGET, // Overwrite this instruction to disable the check.
)
}

View File

@@ -0,0 +1,10 @@
package app.revanced.patches.peacocktv.ads
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val mediaTailerAdServiceFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC)
returns("Ljava/lang/Object")
strings("Could not build MT Advertising service")
}

View File

@@ -0,0 +1,16 @@
package app.revanced.patches.peacocktv.ads
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.returnEarly
@Suppress("unused")
val hideAdsPatch = bytecodePatch(
name = "Hide ads",
description = "Hides all video ads.",
) {
compatibleWith("com.peacocktv.peacockandroid")
execute {
mediaTailerAdServiceFingerprint.method.returnEarly(false)
}
}

View File

@@ -0,0 +1,16 @@
package app.revanced.patches.protonvpn.delay
import app.revanced.patcher.fingerprint
internal val longDelayFingerprint = fingerprint {
custom { method, _ ->
method.name == "getChangeServerLongDelayInSeconds"
}
}
internal val shortDelayFingerprint = fingerprint {
custom { method, _ ->
method.name == "getChangeServerShortDelayInSeconds"
}
}

View File

@@ -0,0 +1,17 @@
package app.revanced.patches.protonvpn.delay
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.returnEarly
@Suppress("unused")
val removeDelayPatch = bytecodePatch(
name = "Remove delay",
description = "Removes the delay when changing servers.",
) {
compatibleWith("ch.protonvpn.android")
execute {
longDelayFingerprint.method.returnEarly(0)
shortDelayFingerprint.method.returnEarly(0)
}
}

View File

@@ -0,0 +1,20 @@
package app.revanced.patches.protonvpn.splittunneling
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal val enableSplitTunnelingUiFingerprint = fingerprint {
strings("currentModeAppNames")
opcodes(
Opcode.MOVE_OBJECT,
Opcode.MOVE_FROM16,
Opcode.INVOKE_DIRECT_RANGE
)
}
internal val initializeSplitTunnelingSettingsUIFingerprint = fingerprint {
custom { method, _ ->
method.name == "applyRestrictions"
}
}

View File

@@ -0,0 +1,34 @@
package app.revanced.patches.protonvpn.splittunneling
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
@Suppress("unused")
val unlockSplitTunnelingPatch =
bytecodePatch(
name = "Unlock split tunneling",
) {
compatibleWith("ch.protonvpn.android")
execute {
val registerIndex = enableSplitTunnelingUiFingerprint.patternMatch!!.endIndex - 1
enableSplitTunnelingUiFingerprint.method.apply {
val register = getInstruction<OneRegisterInstruction>(registerIndex).registerA
replaceInstruction(registerIndex, "const/4 v$register, 0x0")
}
initializeSplitTunnelingSettingsUIFingerprint.method.apply {
val initSettingsIndex = indexOfFirstInstructionOrThrow {
getReference<MethodReference>()?.name == "getSplitTunneling"
}
removeInstruction(initSettingsIndex - 1)
}
}
}

View File

@@ -3,12 +3,8 @@ package app.revanced.patches.reddit.ad.comments
import app.revanced.patcher.fingerprint import app.revanced.patcher.fingerprint
internal val hideCommentAdsFingerprint = fingerprint { internal val hideCommentAdsFingerprint = fingerprint {
strings( custom { method, classDef ->
"link", method.name == "invokeSuspend" &&
// CommentPageRepository is not returning a link object classDef.contains("LoadAdsCombinedCall")
"is not returning a link object"
)
custom { _, classDef ->
classDef.sourceFile == "PostDetailPresenter.kt"
} }
} }

View File

@@ -1,6 +1,6 @@
package app.revanced.patches.reddit.ad.comments package app.revanced.patches.reddit.ad.comments
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.extensions.InstructionExtensions.replaceInstructions
import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.patch.bytecodePatch
val hideCommentAdsPatch = bytecodePatch( val hideCommentAdsPatch = bytecodePatch(
@@ -8,13 +8,6 @@ val hideCommentAdsPatch = bytecodePatch(
) { ) {
execute { execute {
hideCommentAdsFingerprint.method.addInstructions( hideCommentAdsFingerprint.method.replaceInstructions(0, "return-object p1")
0,
"""
new-instance v0, Ljava/lang/Object;
invoke-direct {v0}, Ljava/lang/Object;-><init>()V
return-object v0
""",
)
} }
} }

View File

@@ -12,6 +12,5 @@ internal val adPostFingerprint = fingerprint {
internal val newAdPostFingerprint = fingerprint { internal val newAdPostFingerprint = fingerprint {
opcodes(Opcode.INVOKE_VIRTUAL) opcodes(Opcode.INVOKE_VIRTUAL)
strings("chain", "feedElement") strings("feedElement", "com.reddit.cookie")
custom { _, classDef -> classDef.sourceFile == "AdElementConverter.kt" }
} }

View File

@@ -3,7 +3,6 @@ package app.revanced.patches.reddit.ad.general
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction
import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.reddit.ad.banner.hideBannerPatch
import app.revanced.patches.reddit.ad.comments.hideCommentAdsPatch import app.revanced.patches.reddit.ad.comments.hideCommentAdsPatch
import app.revanced.patches.reddit.misc.extension.sharedExtensionPatch import app.revanced.patches.reddit.misc.extension.sharedExtensionPatch
import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.Opcode
@@ -16,14 +15,9 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
val hideAdsPatch = bytecodePatch( val hideAdsPatch = bytecodePatch(
name = "Hide ads", name = "Hide ads",
) { ) {
dependsOn(hideBannerPatch, hideCommentAdsPatch, sharedExtensionPatch) dependsOn(hideCommentAdsPatch, sharedExtensionPatch)
// Note that for now, this patch and anything using it will only work on compatibleWith("com.reddit.frontpage")
// Reddit 2024.17.0 or older. Newer versions will crash during patching.
// See https://github.com/ReVanced/revanced-patches/issues/3099
// and https://github.com/iBotPeaches/Apktool/issues/3534.
// This constraint is necessary due to dependency on hideBannerPatch.
compatibleWith("com.reddit.frontpage"("2024.17.0"))
execute { execute {
// region Filter promoted ads (does not work in popular or latest feed) // region Filter promoted ads (does not work in popular or latest feed)

View File

@@ -14,8 +14,8 @@ val fixAudioMissingInDownloadsPatch = bytecodePatch(
execute { execute {
val endpointReplacements = mapOf( val endpointReplacements = mapOf(
"/DASH_audio.mp4" to "/DASH_AUDIO_128.mp4", "/DASH_audio.mp4" to "/CMAF_AUDIO_128.mp4",
"/audio" to "/DASH_AUDIO_64.mp4", "/audio" to "/CMAF_AUDIO_64.mp4",
) )
downloadAudioFingerprint.method.apply { downloadAudioFingerprint.method.apply {

View File

@@ -0,0 +1,36 @@
package app.revanced.patches.shared.misc.privacy
import app.revanced.patcher.patch.resourcePatch
import app.revanced.util.asSequence
import app.revanced.util.getNode
import org.w3c.dom.Element
@Suppress("unused")
val disableSentryTelemetryPatch = resourcePatch(
name = "Disable Sentry telemetry",
description = "Disables Sentry telemetry. See https://sentry.io/for/android/ for more information.",
use = false,
) {
execute {
fun Element.replaceOrCreate(tagName: String, attributeName: String, attributeValue: String) {
val childElements = getElementsByTagName(tagName).asSequence().filterIsInstance<Element>()
val targetChild = childElements.find { childElement ->
childElement.getAttribute("android:name") == attributeName
}
if (targetChild != null) {
targetChild.setAttribute("android:value", attributeValue)
} else {
appendChild(ownerDocument.createElement(tagName).apply {
setAttribute("android:name", attributeName)
setAttribute("android:value", attributeValue)
})
}
}
document("AndroidManifest.xml").use { document ->
val application = document.getNode("application") as Element
application.replaceOrCreate("meta-data", "io.sentry.enabled", "false")
application.replaceOrCreate("meta-data", "io.sentry.dsn", "")
}
}
}

View File

@@ -3,5 +3,5 @@ package app.revanced.patches.spotify.misc.extension
import app.revanced.patcher.fingerprint import app.revanced.patcher.fingerprint
internal val loadOrbitLibraryFingerprint = fingerprint { internal val loadOrbitLibraryFingerprint = fingerprint {
strings("OrbitLibraryLoader", "cst") strings("orbit_library_load", "orbit-jni-spotify")
} }

View File

@@ -0,0 +1,116 @@
package app.revanced.patches.strava.media.download
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.smali.ExternalLabel
import app.revanced.patches.shared.misc.mapping.get
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
import app.revanced.patches.shared.misc.mapping.resourceMappings
import app.revanced.patches.strava.misc.extension.sharedExtensionPatch
import app.revanced.util.getReference
import app.revanced.util.writeRegister
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction22c
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
import com.android.tools.smali.dexlib2.iface.reference.TypeReference
private const val ACTION_CLASS_DESCRIPTOR = "Lcom/strava/bottomsheet/Action;"
private const val MEDIA_CLASS_DESCRIPTOR = "Lcom/strava/photos/data/Media;"
private const val MEDIA_DOWNLOAD_CLASS_DESCRIPTOR = "Lapp/revanced/extension/strava/AddMediaDownloadPatch;"
@Suppress("unused")
val addMediaDownloadPatch = bytecodePatch(
name = "Add media download",
description = "Extends the full-screen media viewer menu with items to copy or open their URLs or download them directly."
) {
compatibleWith("com.strava")
dependsOn(
resourceMappingPatch,
sharedExtensionPatch
)
execute {
val fragmentClass = classBy { it.endsWith("/FullscreenMediaFragment;") }!!.mutableClass
// region Extend menu of `FullscreenMediaFragment` with actions.
createAndShowFragmentFingerprint.match(fragmentClass).method.apply {
val setTrueIndex = instructions.indexOfFirst { instruction ->
instruction.opcode == Opcode.IPUT_BOOLEAN
}
val actionRegistrarRegister = getInstruction<BuilderInstruction22c>(setTrueIndex).registerB
val actionRegister = instructions.first { instruction ->
instruction.getReference<TypeReference>()?.type == ACTION_CLASS_DESCRIPTOR
}.writeRegister!!
fun addMenuItem(actionId: String, string: String, color: String, drawable: String) = addInstructions(
setTrueIndex + 1,
"""
new-instance v$actionRegister, $ACTION_CLASS_DESCRIPTOR
sget v${actionRegister + 1}, $MEDIA_DOWNLOAD_CLASS_DESCRIPTOR->$actionId:I
const v${actionRegister + 2}, 0x0
const v${actionRegister + 3}, ${resourceMappings["string", string]}
const v${actionRegister + 4}, ${resourceMappings["color", color]}
const v${actionRegister + 5}, ${resourceMappings["drawable", drawable]}
move/from16 v${actionRegister + 6}, v${actionRegister + 4}
invoke-direct/range { v$actionRegister .. v${actionRegister + 7} }, $ACTION_CLASS_DESCRIPTOR-><init>(ILjava/lang/String;IIIILjava/io/Serializable;)V
invoke-virtual { v$actionRegistrarRegister, v$actionRegister }, Lcom/strava/bottomsheet/a;->a(Lcom/strava/bottomsheet/BottomSheetItem;)V
"""
)
addMenuItem("ACTION_COPY_LINK", "copy_link", "core_o3", "actions_link_normal_xsmall")
addMenuItem("ACTION_OPEN_LINK", "fallback_menu_item_open_in_browser", "core_o3", "actions_link_external_normal_xsmall")
addMenuItem("ACTION_DOWNLOAD", "download", "core_o3", "actions_download_normal_xsmall")
// Move media to last parameter of `Action` constructor.
val getMediaInstruction = instructions.first { instruction ->
instruction.getReference<FieldReference>()?.type == MEDIA_CLASS_DESCRIPTOR
}
addInstruction(
getMediaInstruction.location.index + 1,
"move-object/from16 v${actionRegister + 7}, v${getMediaInstruction.writeRegister}"
)
}
// endregion
// region Handle new actions.
val actionClass = classes.first { clazz ->
clazz.type == ACTION_CLASS_DESCRIPTOR
}
val actionSerializableField = actionClass.instanceFields.first { field ->
field.type == "Ljava/io/Serializable;"
}
// Handle "copy link" & "open link" & "download" actions.
handleMediaActionFingerprint.match(fragmentClass).method.apply {
// Call handler if action ID < 0 (= custom).
val moveInstruction = instructions.first { instruction ->
instruction.opcode == Opcode.MOVE_RESULT
}
val indexAfterMoveInstruction = moveInstruction.location.index + 1
val actionIdRegister = moveInstruction.writeRegister
addInstructionsWithLabels(
indexAfterMoveInstruction,
"""
if-gez v$actionIdRegister, :move
check-cast p2, $ACTION_CLASS_DESCRIPTOR
iget-object v0, p2, $actionSerializableField
check-cast v0, $MEDIA_CLASS_DESCRIPTOR
invoke-static { v$actionIdRegister, v0 }, $MEDIA_DOWNLOAD_CLASS_DESCRIPTOR->handleAction(I$MEDIA_CLASS_DESCRIPTOR)Z
move-result v0
return v0
""",
ExternalLabel("move", instructions[indexAfterMoveInstruction])
)
}
// endregion
}
}

View File

@@ -0,0 +1,15 @@
package app.revanced.patches.strava.media.download
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val createAndShowFragmentFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("V")
parameters("L")
strings("mediaType")
}
internal val handleMediaActionFingerprint = fingerprint {
parameters("Landroid/view/View;", "Lcom/strava/bottomsheet/BottomSheetItem;")
}

View File

@@ -0,0 +1,21 @@
package app.revanced.patches.strava.media.upload
import app.revanced.patcher.fingerprint
internal val getCompressionQualityFingerprint = fingerprint {
custom { method, _ ->
method.name == "getCompressionQuality"
}
}
internal val getMaxDurationFingerprint = fingerprint {
custom { method, _ ->
method.name == "getMaxDuration"
}
}
internal val getMaxSizeFingerprint = fingerprint {
custom { method, _ ->
method.name == "getMaxSize"
}
}

View File

@@ -0,0 +1,48 @@
package app.revanced.patches.strava.media.upload
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patcher.patch.intOption
import app.revanced.patcher.patch.longOption
import app.revanced.util.returnEarly
@Suppress("unused")
val overwriteMediaUploadParametersPatch = bytecodePatch(
name = "Overwrite media upload parameters",
description = "Overwrites the compression, resize and trim media (images and videos) parameters returned by Strava's server before upload.",
) {
compatibleWith("com.strava")
val compressionQuality by intOption(
key = "compressionQuality",
title = "Compression quality (percent)",
description = "This is used as the JPEG quality setting (≤ 100).",
) { it == null || it in 1..100 }
val maxDuration by longOption(
key = "maxDuration",
title = "Max duration (seconds)",
description = "The maximum length (≤ ${60 * 60}) of a video before it gets trimmed.",
) { it == null || it in 1..60 * 60 }
val maxSize by intOption(
key = "maxSize",
title = "Max size (pixels)",
description = "The image gets resized so that the smaller dimension (width/height) does not exceed this value (≤ 10000).",
) { it == null || it in 1..10000 }
execute {
val mediaUploadParametersClass = classes.single { it.endsWith("/MediaUploadParameters;") }
compressionQuality?.let { compressionQuality ->
getCompressionQualityFingerprint.match(mediaUploadParametersClass).method.returnEarly(compressionQuality / 100f)
}
maxDuration?.let { maxDuration ->
getMaxDurationFingerprint.match(mediaUploadParametersClass).method.returnEarly(maxDuration)
}
maxSize?.let {
getMaxSizeFingerprint.match(mediaUploadParametersClass).method.returnEarly(it)
}
}
}

View File

@@ -0,0 +1,9 @@
package app.revanced.patches.strava.misc.extension
import app.revanced.patches.shared.misc.extension.extensionHook
internal val applicationOnCreateHook = extensionHook {
custom { method, classDef ->
method.name == "onCreate" && classDef.endsWith("/StravaApplication;")
}
}

View File

@@ -0,0 +1,5 @@
package app.revanced.patches.strava.misc.extension
import app.revanced.patches.shared.misc.extension.sharedExtensionPatch
val sharedExtensionPatch = sharedExtensionPatch("strava", applicationOnCreateHook)

View File

@@ -0,0 +1,20 @@
package app.revanced.patches.strava.password
import app.revanced.patcher.Fingerprint
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.returnEarly
@Suppress("unused")
val enablePasswordLoginPatch = bytecodePatch(
name = "Enable password login",
description = "Re-enables password login after having used an OTP code.",
) {
compatibleWith("com.strava")
execute {
fun Fingerprint.returnTrue() = method.returnEarly(true)
logInGetUsePasswordFingerprint.returnTrue()
emailChangeGetUsePasswordFingerprint.returnTrue()
}
}

View File

@@ -0,0 +1,15 @@
package app.revanced.patches.strava.password
import app.revanced.patcher.fingerprint
internal val logInGetUsePasswordFingerprint = fingerprint {
custom { method, classDef ->
method.name == "getUsePassword" && classDef.endsWith("/RequestOtpLogInNetworkResponse;")
}
}
internal val emailChangeGetUsePasswordFingerprint = fingerprint {
custom { method, classDef ->
method.name == "getUsePassword" && classDef.endsWith("/RequestEmailChangeWithOtpOrPasswordResponse;")
}
}

View File

@@ -0,0 +1,17 @@
package app.revanced.patches.strava.privacy
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.returnEarly
@Suppress("unused")
val blockSnowplowTrackingPatch = bytecodePatch(
name = "Block Snowplow tracking",
description = "Blocks Snowplow analytics. See https://snowplow.io for more information.",
) {
compatibleWith("com.strava")
execute {
// Keep events list empty, otherwise sent to https://c.strava.com/com.snowplowanalytics.snowplow/tp2.
insertEventFingerprint.method.returnEarly()
}
}

View File

@@ -0,0 +1,9 @@
package app.revanced.patches.strava.privacy
import app.revanced.patcher.fingerprint
// https://github.com/snowplow/snowplow-android-tracker/blob/2.2.0/snowplow-tracker/src/main/java/com/snowplowanalytics/snowplow/internal/emitter/storage/SQLiteEventStore.java#L130
// Not the exact same code (e.g. returns void instead of long), even though the version number matches.
internal val insertEventFingerprint = fingerprint {
strings("Added event to database: %s")
}

View File

@@ -0,0 +1,16 @@
package app.revanced.patches.strava.quickedit
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.returnEarly
@Suppress("unused")
val disableQuickEditPatch = bytecodePatch(
name = "Disable Quick Edit",
description = "Prevents the Quick Edit prompt from popping up.",
) {
compatibleWith("com.strava")
execute {
getHasAccessToQuickEditFingerprint.method.returnEarly()
}
}

View File

@@ -0,0 +1,10 @@
package app.revanced.patches.strava.quickedit
import app.revanced.patcher.fingerprint
internal val getHasAccessToQuickEditFingerprint = fingerprint {
returns("Z")
custom { method, _ ->
method.name == "getHasAccessToQuickEdit"
}
}

View File

@@ -1,11 +1,9 @@
package app.revanced.patches.strava.subscription package app.revanced.patches.strava.subscription
import app.revanced.patcher.fingerprint import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.Opcode
internal val getSubscribedFingerprint = fingerprint { internal val getSubscribedFingerprint = fingerprint {
opcodes(Opcode.IGET_BOOLEAN)
custom { method, classDef -> custom { method, classDef ->
classDef.endsWith("/SubscriptionDetailResponse;") && method.name == "getSubscribed" method.name == "getSubscribed" && classDef.endsWith("/SubscriptionDetailResponse;")
} }
} }

View File

@@ -1,7 +1,7 @@
package app.revanced.patches.strava.subscription package app.revanced.patches.strava.subscription
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.returnEarly
@Suppress("unused") @Suppress("unused")
val unlockSubscriptionPatch = bytecodePatch( val unlockSubscriptionPatch = bytecodePatch(
@@ -11,9 +11,6 @@ val unlockSubscriptionPatch = bytecodePatch(
compatibleWith("com.strava") compatibleWith("com.strava")
execute { execute {
getSubscribedFingerprint.method.replaceInstruction( getSubscribedFingerprint.method.returnEarly(true)
getSubscribedFingerprint.patternMatch!!.startIndex,
"const/4 v0, 0x1",
)
} }
} }

View File

@@ -145,13 +145,14 @@ val hideLayoutComponentsPatch = bytecodePatch(
SwitchPreference("revanced_hide_ask_section"), SwitchPreference("revanced_hide_ask_section"),
SwitchPreference("revanced_hide_attributes_section"), SwitchPreference("revanced_hide_attributes_section"),
SwitchPreference("revanced_hide_chapters_section"), SwitchPreference("revanced_hide_chapters_section"),
SwitchPreference("revanced_hide_featured_section"), SwitchPreference("revanced_hide_featured_links_section"),
SwitchPreference("revanced_hide_featured_videos_section"),
SwitchPreference("revanced_hide_info_cards_section"), SwitchPreference("revanced_hide_info_cards_section"),
SwitchPreference("revanced_hide_how_this_was_made_section"), SwitchPreference("revanced_hide_how_this_was_made_section"),
SwitchPreference("revanced_hide_hype_points"), SwitchPreference("revanced_hide_hype_points"),
SwitchPreference("revanced_hide_key_concepts_section"), SwitchPreference("revanced_hide_key_concepts_section"),
SwitchPreference("revanced_hide_podcast_section"), SwitchPreference("revanced_hide_podcast_section"),
SwitchPreference("revanced_hide_description_subscribe_button"), SwitchPreference("revanced_hide_subscribe_button"),
SwitchPreference("revanced_hide_transcript_section"), SwitchPreference("revanced_hide_transcript_section"),
), ),
), ),
@@ -173,6 +174,7 @@ val hideLayoutComponentsPatch = bytecodePatch(
), ),
SwitchPreference("revanced_hide_channel_bar"), SwitchPreference("revanced_hide_channel_bar"),
SwitchPreference("revanced_hide_channel_watermark"), SwitchPreference("revanced_hide_channel_watermark"),
SwitchPreference("revanced_hide_crowdfunding_box"),
SwitchPreference("revanced_hide_emergency_box"), SwitchPreference("revanced_hide_emergency_box"),
SwitchPreference("revanced_hide_info_panels"), SwitchPreference("revanced_hide_info_panels"),
SwitchPreference("revanced_hide_join_membership_button"), SwitchPreference("revanced_hide_join_membership_button"),
@@ -214,19 +216,20 @@ val hideLayoutComponentsPatch = bytecodePatch(
PreferenceScreenPreference( PreferenceScreenPreference(
key = "revanced_channel_screen", key = "revanced_channel_screen",
preferences = setOf( preferences = setOf(
SwitchPreference("revanced_hide_community_button"),
SwitchPreference("revanced_hide_for_you_shelf"), SwitchPreference("revanced_hide_for_you_shelf"),
SwitchPreference("revanced_hide_join_button"),
SwitchPreference("revanced_hide_links_preview"), SwitchPreference("revanced_hide_links_preview"),
SwitchPreference("revanced_hide_members_shelf"), SwitchPreference("revanced_hide_members_shelf"),
SwitchPreference("revanced_hide_visit_community_button"), SwitchPreference("revanced_hide_store_button"),
SwitchPreference("revanced_hide_visit_store_button"), SwitchPreference("revanced_hide_subscribe_button_in_channel_page"),
), ),
), ),
SwitchPreference("revanced_hide_album_cards"), SwitchPreference("revanced_hide_album_cards"),
SwitchPreference("revanced_hide_artist_cards"), SwitchPreference("revanced_hide_artist_cards"),
SwitchPreference("revanced_hide_chips_shelf"),
SwitchPreference("revanced_hide_community_posts"), SwitchPreference("revanced_hide_community_posts"),
SwitchPreference("revanced_hide_compact_banner"), SwitchPreference("revanced_hide_compact_banner"),
SwitchPreference("revanced_hide_crowdfunding_box"),
SwitchPreference("revanced_hide_chips_shelf"),
SwitchPreference("revanced_hide_expandable_card"), SwitchPreference("revanced_hide_expandable_card"),
SwitchPreference("revanced_hide_floating_microphone_button"), SwitchPreference("revanced_hide_floating_microphone_button"),
SwitchPreference( SwitchPreference(
@@ -242,9 +245,10 @@ val hideLayoutComponentsPatch = bytecodePatch(
SwitchPreference("revanced_hide_show_more_button"), SwitchPreference("revanced_hide_show_more_button"),
SwitchPreference("revanced_hide_surveys"), SwitchPreference("revanced_hide_surveys"),
SwitchPreference("revanced_hide_ticket_shelf"), SwitchPreference("revanced_hide_ticket_shelf"),
SwitchPreference("revanced_hide_upload_time"),
SwitchPreference("revanced_hide_video_recommendation_labels"), SwitchPreference("revanced_hide_video_recommendation_labels"),
SwitchPreference("revanced_hide_view_count"), SwitchPreference("revanced_hide_view_count"),
SwitchPreference("revanced_hide_upload_time"), SwitchPreference("revanced_hide_visual_spacer"),
SwitchPreference("revanced_hide_doodles"), SwitchPreference("revanced_hide_doodles"),
) )

View File

@@ -101,6 +101,7 @@ private val hideShortsComponentsResourcePatch = resourcePatch {
SwitchPreference("revanced_hide_shorts_effect_button"), SwitchPreference("revanced_hide_shorts_effect_button"),
SwitchPreference("revanced_hide_shorts_green_screen_button"), SwitchPreference("revanced_hide_shorts_green_screen_button"),
SwitchPreference("revanced_hide_shorts_hashtag_button"), SwitchPreference("revanced_hide_shorts_hashtag_button"),
SwitchPreference("revanced_hide_shorts_live_preview"),
SwitchPreference("revanced_hide_shorts_new_posts_button"), SwitchPreference("revanced_hide_shorts_new_posts_button"),
SwitchPreference("revanced_hide_shorts_shop_button"), SwitchPreference("revanced_hide_shorts_shop_button"),
SwitchPreference("revanced_hide_shorts_tagged_products"), SwitchPreference("revanced_hide_shorts_tagged_products"),
@@ -109,6 +110,7 @@ private val hideShortsComponentsResourcePatch = resourcePatch {
SwitchPreference("revanced_hide_shorts_stickers"), SwitchPreference("revanced_hide_shorts_stickers"),
// Bottom of the screen. // Bottom of the screen.
SwitchPreference("revanced_hide_shorts_auto_dubbed_label"),
SwitchPreference("revanced_hide_shorts_location_label"), SwitchPreference("revanced_hide_shorts_location_label"),
SwitchPreference("revanced_hide_shorts_channel_bar"), SwitchPreference("revanced_hide_shorts_channel_bar"),
SwitchPreference("revanced_hide_shorts_info_panel"), SwitchPreference("revanced_hide_shorts_info_panel"),

View File

@@ -0,0 +1,14 @@
package app.revanced.patches.youtube.misc.audiofocus
import app.revanced.patcher.fingerprint
internal val audioFocusChangeListenerFingerprint = fingerprint {
strings(
"AudioFocus DUCK",
"AudioFocus loss; Will lower volume",
)
}
internal val audioFocusRequestBuilderFingerprint = fingerprint {
strings("Can't build an AudioFocusRequestCompat instance without a listener")
}

View File

@@ -0,0 +1,66 @@
package app.revanced.patches.youtube.misc.audiofocus
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.smali.ExternalLabel
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
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/PauseOnAudioInterruptPatch;"
val pauseOnAudioInterruptPatch = bytecodePatch(
name = "Pause on audio interrupt",
description = "Adds an option to pause playback instead of lowering volume when other audio plays.",
) {
dependsOn(
sharedExtensionPatch,
settingsPatch,
addResourcesPatch,
)
compatibleWith(
"com.google.android.youtube"(
"20.14.43",
)
)
execute {
addResources("youtube", "misc.audiofocus.pauseOnAudioInterruptPatch")
PreferenceScreen.MISC.addPreferences(
SwitchPreference("revanced_pause_on_audio_interrupt"),
)
// Hook the builder method that creates AudioFocusRequest.
// At the start, set the willPauseWhenDucked field (b) to true if setting is enabled.
val builderMethod = audioFocusRequestBuilderFingerprint.method
val builderClass = builderMethod.definingClass
builderMethod.addInstructionsWithLabels(
0,
"""
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->shouldPauseOnAudioInterrupt()Z
move-result v0
if-eqz v0, :skip_override
const/4 v0, 0x1
iput-boolean v0, p0, $builderClass->b:Z
""",
ExternalLabel("skip_override", builderMethod.getInstruction(0)),
)
// Also hook the audio focus change listener as a backup.
audioFocusChangeListenerFingerprint.method.addInstructions(
0,
"""
invoke-static { p1 }, $EXTENSION_CLASS_DESCRIPTOR->overrideAudioFocusChange(I)I
move-result p1
"""
)
}
}

View File

@@ -23,22 +23,19 @@ import app.revanced.util.InstructionUtils.Companion.writeOpcodes
import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.Opcode.* import com.android.tools.smali.dexlib2.Opcode.*
import com.android.tools.smali.dexlib2.analysis.reflection.util.ReflectionUtils
import com.android.tools.smali.dexlib2.formatter.DexFormatter
import com.android.tools.smali.dexlib2.iface.Method import com.android.tools.smali.dexlib2.iface.Method
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.*
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.RegisterRangeInstruction
import com.android.tools.smali.dexlib2.iface.instruction.ThreeRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.WideLiteralInstruction
import com.android.tools.smali.dexlib2.iface.reference.FieldReference import com.android.tools.smali.dexlib2.iface.reference.FieldReference
import com.android.tools.smali.dexlib2.iface.reference.MethodReference import com.android.tools.smali.dexlib2.iface.reference.MethodReference
import com.android.tools.smali.dexlib2.iface.reference.Reference import com.android.tools.smali.dexlib2.iface.reference.Reference
import com.android.tools.smali.dexlib2.iface.reference.StringReference import com.android.tools.smali.dexlib2.iface.reference.StringReference
import com.android.tools.smali.dexlib2.iface.value.*
import com.android.tools.smali.dexlib2.immutable.ImmutableField import com.android.tools.smali.dexlib2.immutable.ImmutableField
import com.android.tools.smali.dexlib2.immutable.value.*
import com.android.tools.smali.dexlib2.util.MethodUtil import com.android.tools.smali.dexlib2.util.MethodUtil
import java.util.EnumSet import java.util.*
/** /**
* Starting from and including the instruction at index [startIndex], * Starting from and including the instruction at index [startIndex],
@@ -838,23 +835,59 @@ fun BytecodePatchContext.forEachLiteralValueInstruction(
} }
private const val RETURN_TYPE_MISMATCH = "Mismatch between override type and Method return type" private fun MutableMethod.checkReturnType(expectedTypes: Iterable<Class<*>>) {
val returnTypeJava = ReflectionUtils.dexToJavaName(returnType)
check(expectedTypes.any { returnTypeJava == it.name }) {
"Actual return type $returnTypeJava is not contained in expected types: $expectedTypes"
}
}
/** /**
* Overrides the first instruction of a method with a constant `Boolean` return value. * Overrides the first instruction of a method with returning the default value for the type (or `void`).
* None of the method code will ever execute. * None of the method code will ever execute.
* *
* For methods that return an object or any array type, calling this method with `false`
* will force the method to return a `null` value.
*
* @see returnLate * @see returnLate
*/ */
fun MutableMethod.returnEarly(value: Boolean = false) { fun MutableMethod.returnEarly() {
val returnType = returnType.first() val value = when (returnType) {
check(returnType == 'Z' || (!value && (returnType == 'V' || returnType == 'L' || returnType != '['))) { "V" -> null
RETURN_TYPE_MISMATCH "Z" -> ImmutableBooleanEncodedValue.FALSE_VALUE
"B" -> ImmutableByteEncodedValue(0)
"S" -> ImmutableShortEncodedValue(0)
"C" -> ImmutableCharEncodedValue(Char.MIN_VALUE)
"I" -> ImmutableIntEncodedValue(0)
"F" -> ImmutableFloatEncodedValue(0f)
"J" -> ImmutableLongEncodedValue(0)
"D" -> ImmutableDoubleEncodedValue(0.0)
else -> ImmutableNullEncodedValue.INSTANCE
} }
overrideReturnValue(value.toHexString(), false) overrideReturnValue(value, false)
}
private fun MutableMethod.returnString(value: String, late: Boolean) {
checkReturnType(String::class.java.allAssignableTypes())
overrideReturnValue(ImmutableStringEncodedValue(value), late)
}
/**
* Overrides the first instruction of a method with a constant `String` return value.
* None of the method code will ever execute.
*
* @see returnLate
*/
fun MutableMethod.returnEarly(value: String) = returnString(value, false)
/**
* Overrides all return statements with a constant `String` value.
* All method code is executed the same as unpatched.
*
* @see returnEarly
*/
fun MutableMethod.returnLate(value: String) = returnString(value, true)
private fun MutableMethod.returnByte(value: Byte, late: Boolean) {
checkReturnType(Byte::class.javaObjectType.allAssignableTypes() + Byte::class.javaPrimitiveType!!)
overrideReturnValue(ImmutableByteEncodedValue(value), late)
} }
/** /**
@@ -863,9 +896,40 @@ fun MutableMethod.returnEarly(value: Boolean = false) {
* *
* @see returnLate * @see returnLate
*/ */
fun MutableMethod.returnEarly(value: Byte) { fun MutableMethod.returnEarly(value: Byte) = returnByte(value, false)
check(returnType.first() == 'B') { RETURN_TYPE_MISMATCH }
overrideReturnValue(value.toString(), false) /**
* Overrides all return statements with a constant `Byte` value.
* All method code is executed the same as unpatched.
*
* @see returnEarly
*/
fun MutableMethod.returnLate(value: Byte) = returnByte(value, true)
private fun MutableMethod.returnBoolean(value: Boolean, late: Boolean) {
checkReturnType(Boolean::class.javaObjectType.allAssignableTypes() + Boolean::class.javaPrimitiveType!!)
overrideReturnValue(ImmutableBooleanEncodedValue.forBoolean(value), late)
}
/**
* Overrides the first instruction of a method with a constant `Boolean` return value.
* None of the method code will ever execute.
*
* @see returnLate
*/
fun MutableMethod.returnEarly(value: Boolean) = returnBoolean(value, false)
/**
* Overrides all return statements with a constant `Boolean` value.
* All method code is executed the same as unpatched.
*
* @see returnEarly
*/
fun MutableMethod.returnLate(value: Boolean) = returnBoolean(value, true)
private fun MutableMethod.returnShort(value: Short, late: Boolean) {
checkReturnType(Short::class.javaObjectType.allAssignableTypes() + Short::class.javaPrimitiveType!!)
overrideReturnValue(ImmutableShortEncodedValue(value), late)
} }
/** /**
@@ -874,9 +938,19 @@ fun MutableMethod.returnEarly(value: Byte) {
* *
* @see returnLate * @see returnLate
*/ */
fun MutableMethod.returnEarly(value: Short) { fun MutableMethod.returnEarly(value: Short) = returnShort(value, false)
check(returnType.first() == 'S') { RETURN_TYPE_MISMATCH }
overrideReturnValue(value.toString(), false) /**
* Overrides all return statements with a constant `Short` value.
* All method code is executed the same as unpatched.
*
* @see returnEarly
*/
fun MutableMethod.returnLate(value: Short) = returnShort(value, true)
private fun MutableMethod.returnChar(value: Char, late: Boolean) {
checkReturnType(Char::class.javaObjectType.allAssignableTypes() + Char::class.javaPrimitiveType!!)
overrideReturnValue(ImmutableCharEncodedValue(value), late)
} }
/** /**
@@ -885,9 +959,19 @@ fun MutableMethod.returnEarly(value: Short) {
* *
* @see returnLate * @see returnLate
*/ */
fun MutableMethod.returnEarly(value: Char) { fun MutableMethod.returnEarly(value: Char) = returnChar(value, false)
check(returnType.first() == 'C') { RETURN_TYPE_MISMATCH }
overrideReturnValue(value.code.toString(), false) /**
* Overrides all return statements with a constant `Char` value.
* All method code is executed the same as unpatched.
*
* @see returnEarly
*/
fun MutableMethod.returnLate(value: Char) = returnChar(value, true)
private fun MutableMethod.returnInt(value: Int, late: Boolean) {
checkReturnType(Int::class.javaObjectType.allAssignableTypes() + Int::class.javaPrimitiveType!!)
overrideReturnValue(ImmutableIntEncodedValue(value), late)
} }
/** /**
@@ -896,20 +980,19 @@ fun MutableMethod.returnEarly(value: Char) {
* *
* @see returnLate * @see returnLate
*/ */
fun MutableMethod.returnEarly(value: Int) { fun MutableMethod.returnEarly(value: Int) = returnInt(value, false)
check(returnType.first() == 'I') { RETURN_TYPE_MISMATCH }
overrideReturnValue(value.toString(), false)
}
/** /**
* Overrides the first instruction of a method with a constant `Long` return value. * Overrides all return statements with a constant `Int` value.
* None of the method code will ever execute. * All method code is executed the same as unpatched.
* *
* @see returnLate * @see returnEarly
*/ */
fun MutableMethod.returnEarly(value: Long) { fun MutableMethod.returnLate(value: Int) = returnInt(value, true)
check(returnType.first() == 'J') { RETURN_TYPE_MISMATCH }
overrideReturnValue(value.toString(), false) private fun MutableMethod.returnFloat(value: Float, late: Boolean) {
checkReturnType(Float::class.javaObjectType.allAssignableTypes() + Float::class.javaPrimitiveType!!)
overrideReturnValue(ImmutableFloatEncodedValue(value), late)
} }
/** /**
@@ -918,9 +1001,40 @@ fun MutableMethod.returnEarly(value: Long) {
* *
* @see returnLate * @see returnLate
*/ */
fun MutableMethod.returnEarly(value: Float) { fun MutableMethod.returnEarly(value: Float) = returnFloat(value, false)
check(returnType.first() == 'F') { RETURN_TYPE_MISMATCH }
overrideReturnValue(value.toString(), false) /**
* Overrides all return statements with a constant `Float` value.
* All method code is executed the same as unpatched.
*
* @see returnEarly
*/
fun MutableMethod.returnLate(value: Float) = returnFloat(value, true)
private fun MutableMethod.returnLong(value: Long, late: Boolean) {
checkReturnType(Long::class.javaObjectType.allAssignableTypes() + Long::class.javaPrimitiveType!!)
overrideReturnValue(ImmutableLongEncodedValue(value), late)
}
/**
* Overrides the first instruction of a method with a constant `Long` return value.
* None of the method code will ever execute.
*
* @see returnLate
*/
fun MutableMethod.returnEarly(value: Long) = returnLong(value, false)
/**
* Overrides all return statements with a constant `Long` value.
* All method code is executed the same as unpatched.
*
* @see returnEarly
*/
fun MutableMethod.returnLate(value: Long) = returnLong(value, true)
private fun MutableMethod.returnDouble(value: Double, late: Boolean) {
checkReturnType(Double::class.javaObjectType.allAssignableTypes() + Double::class.javaPrimitiveType!!)
overrideReturnValue(ImmutableDoubleEncodedValue(value), late)
} }
/** /**
@@ -929,113 +1043,7 @@ fun MutableMethod.returnEarly(value: Float) {
* *
* @see returnLate * @see returnLate
*/ */
fun MutableMethod.returnEarly(value: Double) { fun MutableMethod.returnEarly(value: Double) = returnDouble(value, false)
check(returnType.first() == 'J') { RETURN_TYPE_MISMATCH }
overrideReturnValue(value.toString(), false)
}
/**
* Overrides the first instruction of a method with a constant String return value.
* None of the method code will ever execute.
*
* Target method must have return type
* Ljava/lang/String; or Ljava/lang/CharSequence;
*
* @see returnLate
*/
fun MutableMethod.returnEarly(value: String) {
check(returnType == "Ljava/lang/String;" || returnType == "Ljava/lang/CharSequence;") {
RETURN_TYPE_MISMATCH
}
overrideReturnValue(value, false)
}
/**
* Overrides all return statements with a constant `Boolean` value.
* All method code is executed the same as unpatched.
*
* For methods that return an object or any array type, calling this method with `false`
* will force the method to return a `null` value.
*
* @see returnEarly
*/
fun MutableMethod.returnLate(value: Boolean) {
val returnType = returnType.first()
if (returnType == 'V') {
error("Cannot return late for Method of void type")
}
check(returnType == 'Z' || (!value && (returnType == 'L' || returnType == '['))) {
RETURN_TYPE_MISMATCH
}
overrideReturnValue(value.toHexString(), true)
}
/**
* Overrides all return statements with a constant `Byte` value.
* All method code is executed the same as unpatched.
*
* @see returnEarly
*/
fun MutableMethod.returnLate(value: Byte) {
check(returnType.first() == 'B') { RETURN_TYPE_MISMATCH }
overrideReturnValue(value.toString(), true)
}
/**
* Overrides all return statements with a constant `Short` value.
* All method code is executed the same as unpatched.
*
* @see returnEarly
*/
fun MutableMethod.returnLate(value: Short) {
check(returnType.first() == 'S') { RETURN_TYPE_MISMATCH }
overrideReturnValue(value.toString(), true)
}
/**
* Overrides all return statements with a constant `Char` value.
* All method code is executed the same as unpatched.
*
* @see returnEarly
*/
fun MutableMethod.returnLate(value: Char) {
check(returnType.first() == 'C') { RETURN_TYPE_MISMATCH }
overrideReturnValue(value.code.toString(), true)
}
/**
* Overrides all return statements with a constant `Int` value.
* All method code is executed the same as unpatched.
*
* @see returnEarly
*/
fun MutableMethod.returnLate(value: Int) {
check(returnType.first() == 'I') { RETURN_TYPE_MISMATCH }
overrideReturnValue(value.toString(), true)
}
/**
* Overrides all return statements with a constant `Long` value.
* All method code is executed the same as unpatched.
*
* @see returnEarly
*/
fun MutableMethod.returnLate(value: Long) {
check(returnType.first() == 'J') { RETURN_TYPE_MISMATCH }
overrideReturnValue(value.toString(), true)
}
/**
* Overrides all return statements with a constant `Float` value.
* All method code is executed the same as unpatched.
*
* @see returnEarly
*/
fun MutableMethod.returnLate(value: Float) {
check(returnType.first() == 'F') { RETURN_TYPE_MISMATCH }
overrideReturnValue(value.toString(), true)
}
/** /**
* Overrides all return statements with a constant `Double` value. * Overrides all return statements with a constant `Double` value.
@@ -1043,75 +1051,164 @@ fun MutableMethod.returnLate(value: Float) {
* *
* @see returnEarly * @see returnEarly
*/ */
fun MutableMethod.returnLate(value: Double) { fun MutableMethod.returnLate(value: Double) = returnDouble(value, true)
check(returnType.first() == 'D') { RETURN_TYPE_MISMATCH }
overrideReturnValue(value.toString(), true)
}
/** private fun MutableMethod.overrideReturnValue(value: EncodedValue?, returnLate: Boolean) {
* Overrides all return statements with a constant String value. val instructions = if (value == null) {
* All method code is executed the same as unpatched. require(!returnLate) {
* "Cannot return late for method of void type"
* Target method must have return type
* Ljava/lang/String; or Ljava/lang/CharSequence;
*
* @see returnEarly
*/
fun MutableMethod.returnLate(value: String) {
check(returnType == "Ljava/lang/String;" || returnType == "Ljava/lang/CharSequence;") {
RETURN_TYPE_MISMATCH
} }
overrideReturnValue(value, true) "return-void"
} } else {
val encodedValue = DexFormatter.INSTANCE.getEncodedValue(value)
private fun MutableMethod.overrideReturnValue(value: String, returnLate: Boolean) { when (value) {
val instructions = if (returnType == "Ljava/lang/String;" || returnType == "Ljava/lang/CharSequence;" ) { is NullEncodedValue -> {
"""
const-string v0, "$value"
return-object v0
"""
} else when (returnType.first()) {
// If return type is an object, always return null.
'L', '[' -> {
""" """
const/4 v0, 0x0 const/4 v0, 0x0
return-object v0 return-object v0
""" """
} }
'V' -> { is StringEncodedValue -> {
"return-void" """
const-string v0, $encodedValue
return-object v0
"""
} }
'B', 'Z' -> { is ByteEncodedValue -> {
if (returnType == "B") {
""" """
const/4 v0, $value const/4 v0, $encodedValue
return v0 return v0
""" """
} else {
"""
const/4 v0, $encodedValue
invoke-static { v0 }, Ljava/lang/Byte;->valueOf(B)Ljava/lang/Byte;
move-result-object v0
return-object v0
"""
}
} }
'S', 'C' -> { is BooleanEncodedValue -> {
val encodedValue = value.value.toHexString()
if (returnType == "Z") {
""" """
const/16 v0, $value const/4 v0, $encodedValue
return v0 return v0
""" """
} else {
"""
const/4 v0, $encodedValue
invoke-static { v0 }, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
move-result-object v0
return-object v0
"""
}
} }
'I', 'F' -> { is ShortEncodedValue -> {
if (returnType == "S") {
""" """
const v0, $value const/16 v0, $encodedValue
return v0 return v0
""" """
} else {
"""
const/16 v0, $encodedValue
invoke-static { v0 }, Ljava/lang/Short;->valueOf(S)Ljava/lang/Short;
move-result-object v0
return-object v0
"""
}
} }
'J', 'D' -> { is CharEncodedValue -> {
if (returnType == "C") {
""" """
const-wide v0, $value const/16 v0, $encodedValue
return v0
"""
} else {
"""
const/16 v0, $encodedValue
invoke-static { v0 }, Ljava/lang/Character;->valueOf(C)Ljava/lang/Character;
move-result-object v0
return-object v0
"""
}
}
is IntEncodedValue -> {
if (returnType == "I") {
"""
const v0, $encodedValue
return v0
"""
} else {
"""
const v0, $encodedValue
invoke-static { v0 }, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v0
return-object v0
"""
}
}
is FloatEncodedValue -> {
val encodedValue = "${encodedValue}f"
if (returnType == "F") {
"""
const v0, $encodedValue
return v0
"""
} else {
"""
const v0, $encodedValue
invoke-static { v0 }, Ljava/lang/Float;->valueOf(F)Ljava/lang/Float;
move-result-object v0
return-object v0
"""
}
}
is LongEncodedValue -> {
val encodedValue = "${encodedValue}L"
if (returnType == "J") {
"""
const-wide v0, $encodedValue
return-wide v0 return-wide v0
""" """
} else {
"""
const-wide v0, $encodedValue
invoke-static { v0 }, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v0
return-object v0
"""
}
} }
else -> throw Exception("Return type is not supported: $this") is DoubleEncodedValue -> {
if (returnType == "D") {
"""
const-wide v0, $encodedValue
return-wide v0
"""
} else {
"""
const-wide v0, $encodedValue
invoke-static { v0 }, Ljava/lang/Double;->valueOf(D)Ljava/lang/Double;
move-result-object v0
return-object v0
"""
}
}
else -> throw IllegalArgumentException("Value $value cannot be returned from $this")
}
} }
if (returnLate) { if (returnLate) {

View File

@@ -8,3 +8,20 @@ internal object Utils {
} }
internal fun Boolean.toHexString(): String = if (this) "0x1" else "0x0" internal fun Boolean.toHexString(): String = if (this) "0x1" else "0x0"
internal fun Class<*>.allAssignableTypes(): Set<Class<*>> {
val result = mutableSetOf<Class<*>>()
fun visit(child: Class<*>?) {
if (child == null || !result.add(child)) {
return
}
child.interfaces.forEach(::visit)
visit(child.superclass)
}
visit(this)
return result
}

View File

@@ -63,9 +63,11 @@ Second \"item\" text"</string>
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles --> <!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
<!-- 'Join' should be translated using the same localized wording YouTube displays. <!-- 'Join' should be translated using the same localized wording YouTube displays.
This appears in the video player for certain videos. --> This appears in the video player for certain videos. -->
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
<!-- 'For You' should be translated using the same localized wording YouTube displays. --> <!-- 'For You' should be translated using the same localized wording YouTube displays. -->
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. --> <!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. --> <!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. --> <!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message --> <!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message --> <!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
@@ -109,7 +111,7 @@ Second \"item\" text"</string>
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. --> <!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. --> <!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays. <!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. --> This button only shows on videos uploaded by the logged-in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. --> <!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. --> <!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays. <!-- 'Ask' should be translated with the same localized wording that YouTube displays.
@@ -136,7 +138,8 @@ Second \"item\" text"</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. --> <!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
'Android No SDK' must be kept untranslated. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
</patch> </patch>
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch"> <patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">

View File

@@ -63,9 +63,11 @@ Second \"item\" text"</string>
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles --> <!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
<!-- 'Join' should be translated using the same localized wording YouTube displays. <!-- 'Join' should be translated using the same localized wording YouTube displays.
This appears in the video player for certain videos. --> This appears in the video player for certain videos. -->
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
<!-- 'For You' should be translated using the same localized wording YouTube displays. --> <!-- 'For You' should be translated using the same localized wording YouTube displays. -->
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. --> <!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. --> <!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. --> <!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message --> <!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message --> <!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
@@ -109,7 +111,7 @@ Second \"item\" text"</string>
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. --> <!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. --> <!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays. <!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. --> This button only shows on videos uploaded by the logged-in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. --> <!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. --> <!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays. <!-- 'Ask' should be translated with the same localized wording that YouTube displays.
@@ -136,7 +138,8 @@ Second \"item\" text"</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. --> <!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
'Android No SDK' must be kept untranslated. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
</patch> </patch>
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch"> <patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">

View File

@@ -282,6 +282,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_video_recommendation_labels_title">ØĨØŽŲØ§ØĄ ØĒØŗŲ…ŲŠØ§ØĒ ØĒ؈ØĩŲŠØ§ØĒ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ</string> <string name="revanced_hide_video_recommendation_labels_title">ØĨØŽŲØ§ØĄ ØĒØŗŲ…ŲŠØ§ØĒ ØĒ؈ØĩŲŠØ§ØĒ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ</string>
<string name="revanced_hide_video_recommendation_labels_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØĒØŗŲ…ŲŠØ§ØĒ \'Ø´Ø§Ų‡Ø¯ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų…ŲˆŲ† ØŖŲŠØļŲ‹Ø§\' ؈\'Ų‚Ø¯ ŲŠØšØŦØ¨Ųƒ ØŖŲŠØļŲ‹Ø§\' ؁؊ Ų†ØĒاØĻØŦ Ø§Ų„Ø¨Ø­ØĢ</string> <string name="revanced_hide_video_recommendation_labels_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØĒØŗŲ…ŲŠØ§ØĒ \'Ø´Ø§Ų‡Ø¯ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų…ŲˆŲ† ØŖŲŠØļŲ‹Ø§\' ؈\'Ų‚Ø¯ ŲŠØšØŦØ¨Ųƒ ØŖŲŠØļŲ‹Ø§\' ؁؊ Ų†ØĒاØĻØŦ Ø§Ų„Ø¨Ø­ØĢ</string>
<string name="revanced_hide_video_recommendation_labels_summary_off">؊ØĒŲ… ØšØąØļ ØĒØŗŲ…ŲŠØ§ØĒ \'Ø´Ø§Ų‡Ø¯ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų…ŲˆŲ† ØŖŲŠØļŲ‹Ø§\' ؈\'Ų‚Ø¯ ŲŠØšØŦØ¨Ųƒ ØŖŲŠØļŲ‹Ø§\' ؁؊ Ų†ØĒاØĻØŦ Ø§Ų„Ø¨Ø­ØĢ</string> <string name="revanced_hide_video_recommendation_labels_summary_off">؊ØĒŲ… ØšØąØļ ØĒØŗŲ…ŲŠØ§ØĒ \'Ø´Ø§Ų‡Ø¯ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų…ŲˆŲ† ØŖŲŠØļŲ‹Ø§\' ؈\'Ų‚Ø¯ ŲŠØšØŦØ¨Ųƒ ØŖŲŠØļŲ‹Ø§\' ؁؊ Ų†ØĒاØĻØŦ Ø§Ų„Ø¨Ø­ØĢ</string>
<string name="revanced_hide_visual_spacer_title">ØĨØŽŲØ§ØĄ Ø§Ų„Ų…ØŗØ§ŲØŠ Ø§Ų„Ø¨Ø§Ø¯ØĻØŠ Ø§Ų„Ų…ØąØĻŲŠØŠ</string>
<string name="revanced_hide_visual_spacer_summary_on">Ø§Ų„Ų…ØŗØ§ŲØŠ Ø§Ų„Ø¨Ø§Ø¯ØĻØŠ Ø§Ų„Ų…ØąØĻŲŠØŠ Ų…ØŽŲŲŠØŠ</string>
<string name="revanced_hide_visual_spacer_summary_off">Ø§Ų„Ų…ØŗØ§ŲØŠ Ø§Ų„Ø¨Ø§Ø¯ØĻØŠ Ø§Ų„Ų…ØąØĻŲŠØŠ Ø¸Ø§Ų‡ØąØŠ</string>
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles --> <!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
<string name="revanced_hide_doodles_title">ØĨØŽŲØ§ØĄ ØąØŗŲˆŲ…Ø§ØĒ YouTube</string> <string name="revanced_hide_doodles_title">ØĨØŽŲØ§ØĄ ØąØŗŲˆŲ…Ø§ØĒ YouTube</string>
<string name="revanced_hide_doodles_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØąØŗŲˆŲ… Doodles Ø§Ų„Ų…ØĒØ­ØąŲƒØŠ ØšŲ„Ų‰ Ø´ØšØ§Øą YouTube</string> <string name="revanced_hide_doodles_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØąØŗŲˆŲ… Doodles Ø§Ų„Ų…ØĒØ­ØąŲƒØŠ ØšŲ„Ų‰ Ø´ØšØ§Øą YouTube</string>
@@ -342,18 +345,21 @@ Second \"item\" text"</string>
<string name="revanced_hide_podcast_section_title">ØĨØŽŲØ§ØĄ \'Ø§ØŗØĒŲƒØ´Ø§Ų Ø§Ų„Ø¨ŲˆØ¯ŲƒØ§ØŗØĒ\'</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_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų‚ØŗŲ… Ø§ØŗØĒŲƒØ´Ø§Ų Ø§Ų„Ø¨ŲˆØ¯ŲƒØ§ØŗØĒ</string>
<string name="revanced_hide_podcast_section_summary_off">؊ØĒŲ… ØšØąØļ Ų‚ØŗŲ… Ø§ØŗØĒŲƒØ´Ø§Ų Ø§Ų„Ø¨ŲˆØ¯ŲƒØ§ØŗØĒ</string> <string name="revanced_hide_podcast_section_summary_off">؊ØĒŲ… ØšØąØļ Ų‚ØŗŲ… Ø§ØŗØĒŲƒØ´Ø§Ų Ø§Ų„Ø¨ŲˆØ¯ŲƒØ§ØŗØĒ</string>
<string name="revanced_hide_featured_section_title">ØĨØŽŲØ§ØĄ Ø§Ų„Ų…Ø­ØĒŲˆŲ‰ Ø§Ų„Ų…Ų…ŲŠØ˛</string> <string name="revanced_hide_featured_links_section_title">ØĨØŽŲØ§ØĄ Ø§Ų„ØąŲˆØ§Ø¨Øˇ Ø§Ų„Ų…Ų…ŲŠØ˛ØŠ</string>
<string name="revanced_hide_featured_section_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų‚ØŗŲ… Ø§Ų„Ų…Ø­ØĒŲˆŲ‰ Ø§Ų„Ų…Ų…ŲŠØ˛</string> <string name="revanced_hide_featured_links_section_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų‚ØŗŲ… Ø§Ų„ØąŲˆØ§Ø¨Øˇ Ø§Ų„Ų…Ų…ŲŠØ˛ØŠ</string>
<string name="revanced_hide_featured_section_summary_off">؊ØĒŲ… ØšØąØļ Ų‚ØŗŲ… Ø§Ų„Ų…Ø­ØĒŲˆŲ‰ Ø§Ų„Ų…Ų…ŲŠØ˛</string> <string name="revanced_hide_featured_links_section_summary_off">؊ØĒŲ… ØšØąØļ Ų‚ØŗŲ… Ø§Ų„ØąŲˆØ§Ø¨Øˇ Ø§Ų„Ų…Ų…ŲŠØ˛ØŠ</string>
<string name="revanced_hide_featured_videos_section_title">ØĨØŽŲØ§ØĄ Ø§Ų„ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ Ø§Ų„Ų…Ų…ŲŠØ˛ØŠ</string>
<string name="revanced_hide_featured_videos_section_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų‚ØŗŲ… Ø§Ų„ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ Ø§Ų„Ų…Ų…ŲŠØ˛ØŠ</string>
<string name="revanced_hide_featured_videos_section_summary_off">؊ØĒŲ… ØšØąØļ Ų‚ØŗŲ… Ø§Ų„ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ Ø§Ų„Ų…Ų…ŲŠØ˛ØŠ</string>
<string name="revanced_hide_info_cards_section_title">ØĨØŽŲØ§ØĄ Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…ØšŲ„ŲˆŲ…Ø§ØĒ</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_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų‚ØŗŲ… Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…ØšŲ„ŲˆŲ…Ø§ØĒ</string>
<string name="revanced_hide_info_cards_section_summary_off">؊ØĒŲ… ØšØąØļ Ų‚ØŗŲ… Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…ØšŲ„ŲˆŲ…Ø§ØĒ</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_title">ØĨØŽŲØ§ØĄ \'Ø§Ų„Ų…ŲØ§Ų‡ŲŠŲ… Ø§Ų„ØŖØŗØ§ØŗŲŠØŠ\'</string>
<string name="revanced_hide_key_concepts_section_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų‚ØŗŲ… Ø§Ų„Ų…ŲØ§Ų‡ŲŠŲ… Ø§Ų„ØŖØŗØ§ØŗŲŠØŠ</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_key_concepts_section_summary_off">؊ØĒŲ… ØšØąØļ Ų‚ØŗŲ… Ø§Ų„Ų…ŲØ§Ų‡ŲŠŲ… Ø§Ų„ØŖØŗØ§ØŗŲŠØŠ</string>
<string name="revanced_hide_description_subscribe_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ø§Ø´ØĒØąØ§Ųƒ</string> <string name="revanced_hide_subscribe_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ø§Ø´ØĒØąØ§Ųƒ</string>
<string name="revanced_hide_description_subscribe_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ø§Ø´ØĒØąØ§Ųƒ</string> <string name="revanced_hide_subscribe_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ø§Ø´ØĒØąØ§Ųƒ</string>
<string name="revanced_hide_description_subscribe_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„Ø§Ø´ØĒØąØ§Ųƒ</string> <string name="revanced_hide_subscribe_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„Ø§Ø´ØĒØąØ§Ųƒ</string>
<string name="revanced_hide_transcript_section_title">ØĨØŽŲØ§ØĄ Ø§Ų„Ų†Øĩ</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_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų‚ØŗŲ… Ø§Ų„Ų†Øĩ</string>
<string name="revanced_hide_transcript_section_summary_off">؊ØĒŲ… ØšØąØļ Ų‚ØŗŲ… Ø§Ų„Ų†Øĩ</string> <string name="revanced_hide_transcript_section_summary_off">؊ØĒŲ… ØšØąØļ Ų‚ØŗŲ… Ø§Ų„Ų†Øĩ</string>
@@ -375,24 +381,32 @@ Second \"item\" text"</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">ŲŠŲØšØąØļ ؁؊ Ø§Ų„ØŗØŦŲ„Ų‘</string> <string name="revanced_hide_filter_bar_feed_in_history_summary_off">ŲŠŲØšØąØļ ؁؊ Ø§Ų„ØŗØŦŲ„Ų‘</string>
<string name="revanced_channel_screen_title">ØĩŲØ­ØŠ Ø§Ų„Ų‚Ų†Ø§ØŠ</string> <string name="revanced_channel_screen_title">ØĩŲØ­ØŠ Ø§Ų„Ų‚Ų†Ø§ØŠ</string>
<string name="revanced_channel_screen_summary">ØĨØŽŲØ§ØĄ ØŖŲˆ ØšØąØļ Ų…ŲƒŲˆŲ†Ø§ØĒ ØĩŲØ­ØŠ Ø§Ų„Ų‚Ų†Ø§ØŠ</string> <string name="revanced_channel_screen_summary">ØĨØŽŲØ§ØĄ ØŖŲˆ ØšØąØļ Ų…ŲƒŲˆŲ†Ø§ØĒ ØĩŲØ­ØŠ Ø§Ų„Ų‚Ų†Ø§ØŠ</string>
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_community_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ų…Ų†ØĒØ¯Ų‰</string>
<string name="revanced_hide_community_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ų…ØŦØĒŲ…Øš</string>
<string name="revanced_hide_community_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„Ų…ØŦØĒŲ…Øš</string>
<!-- 'For You' should be translated using the same localized wording YouTube displays. --> <!-- '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_title">ØĨØŽŲØ§ØĄ ØąŲ \'Ų…Ų‚ØĒØąØ­Ø§ØĒ Ų„Ųƒ\'</string>
<string name="revanced_hide_for_you_shelf_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØąŲ Ų…Ų‚ØĒØąØ­ Ų„Ųƒ</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_off">؊ØĒŲ… ØšØąØļ ØąŲ Ų…Ų‚ØĒØąØ­ Ų„Ųƒ</string>
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_join_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ø§Ų†ØļŲ…Ø§Ų…</string>
<string name="revanced_hide_join_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ø§Ų†ØļŲ…Ø§Ų…</string>
<string name="revanced_hide_join_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„Ø§Ų†ØļŲ…Ø§Ų…</string>
<string name="revanced_hide_links_preview_title">ØĨØŽŲØ§ØĄ Ų…ØšØ§ŲŠŲ†ØŠ Ø§Ų„ØąŲˆØ§Ø¨Øˇ</string> <string name="revanced_hide_links_preview_title">ØĨØŽŲØ§ØĄ Ų…ØšØ§ŲŠŲ†ØŠ Ø§Ų„ØąŲˆØ§Ø¨Øˇ</string>
<string name="revanced_hide_links_preview_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų…ØšØ§ŲŠŲ†ØŠ Ø§Ų„ØąŲˆØ§Ø¨Øˇ</string> <string name="revanced_hide_links_preview_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų…ØšØ§ŲŠŲ†ØŠ Ø§Ų„ØąŲˆØ§Ø¨Øˇ</string>
<string name="revanced_hide_links_preview_summary_off">؊ØĒŲ… ØšØąØļ Ų…ØšØ§ŲŠŲ†ØŠ Ø§Ų„ØąŲˆØ§Ø¨Øˇ</string> <string name="revanced_hide_links_preview_summary_off">؊ØĒŲ… ØšØąØļ Ų…ØšØ§ŲŠŲ†ØŠ Ø§Ų„ØąŲˆØ§Ø¨Øˇ</string>
<string name="revanced_hide_members_shelf_title">ØĨØŽŲØ§ØĄ ØąŲ Ø§Ų„ØŖØšØļØ§ØĄ</string> <string name="revanced_hide_members_shelf_title">ØĨØŽŲØ§ØĄ ØąŲ Ø§Ų„ØŖØšØļØ§ØĄ</string>
<string name="revanced_hide_members_shelf_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØąŲ Ø§Ų„ØŖØšØļØ§ØĄ</string> <string name="revanced_hide_members_shelf_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØąŲ Ø§Ų„ØŖØšØļØ§ØĄ</string>
<string name="revanced_hide_members_shelf_summary_off">؊ØĒŲ… ØšØąØļ ØąŲ Ø§Ų„ØŖØšØļØ§ØĄ</string> <string name="revanced_hide_members_shelf_summary_off">؊ØĒŲ… ØšØąØļ ØąŲ Ø§Ų„ØŖØšØļØ§ØĄ</string>
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. --> <!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_community_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą \'Ø˛ŲŠØ§ØąØŠ Ø§Ų„Ų…ØŦØĒŲ…Øš\'</string> <string name="revanced_hide_store_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ų…ØĒØŦØą</string>
<string name="revanced_hide_visit_community_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø˛ŲŠØ§ØąØŠ Ø§Ų„Ų…ØŦØĒŲ…Øš</string> <string name="revanced_hide_store_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ų…ØĒØŦØą</string>
<string name="revanced_hide_visit_community_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø˛ŲŠØ§ØąØŠ Ø§Ų„Ų…ØŦØĒŲ…Øš</string> <string name="revanced_hide_store_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„Ų…ØĒØŦØą</string>
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. --> <!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_store_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą \'Ø˛ŲŠØ§ØąØŠ Ø§Ų„Ų…ØĒØŦØą\'</string> <string name="revanced_hide_subscribe_button_in_channel_page_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ø§Ø´ØĒØąØ§Ųƒ</string>
<string name="revanced_hide_visit_store_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø˛ŲŠØ§ØąØŠ Ø§Ų„Ų…ØĒØŦØą</string> <string name="revanced_hide_subscribe_button_in_channel_page_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ø§Ø´ØĒØąØ§Ųƒ</string>
<string name="revanced_hide_visit_store_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø˛ŲŠØ§ØąØŠ Ø§Ų„Ų…ØĒØŦØą</string> <string name="revanced_hide_subscribe_button_in_channel_page_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„Ø§Ø´ØĒØąØ§Ųƒ</string>
<string name="revanced_comments_screen_title">Ø§Ų„ØĒØšŲ„ŲŠŲ‚Ø§ØĒ</string> <string name="revanced_comments_screen_title">Ø§Ų„ØĒØšŲ„ŲŠŲ‚Ø§ØĒ</string>
<string name="revanced_comments_screen_summary">ØĨØŽŲØ§ØĄ ØŖŲˆ ØšØąØļ Ų…ŲƒŲˆŲ†Ø§ØĒ Ų‚ØŗŲ… Ø§Ų„ØĒØšŲ„ŲŠŲ‚Ø§ØĒ</string> <string name="revanced_comments_screen_summary">ØĨØŽŲØ§ØĄ ØŖŲˆ ØšØąØļ Ų…ŲƒŲˆŲ†Ø§ØĒ Ų‚ØŗŲ… Ø§Ų„ØĒØšŲ„ŲŠŲ‚Ø§ØĒ</string>
<string name="revanced_hide_comments_ai_chat_summary_title">ØĨØŽŲØ§ØĄ Ų…Ų„ØŽØĩ Ų…Ø­Ø§Ø¯ØĢاØĒ Ø§Ų„Ø°ŲƒØ§ØĄ Ø§Ų„Ø§ØĩØˇŲ†Ø§ØšŲŠ</string> <string name="revanced_hide_comments_ai_chat_summary_title">ØĨØŽŲØ§ØĄ Ų…Ų„ØŽØĩ Ų…Ø­Ø§Ø¯ØĢاØĒ Ø§Ų„Ø°ŲƒØ§ØĄ Ø§Ų„Ø§ØĩØˇŲ†Ø§ØšŲŠ</string>
@@ -534,11 +548,11 @@ Second \"item\" text"</string>
<string name="revanced_share_copy_url_success">ØĒŲ… Ų†ØŗØŽ URL ØĨŲ„Ų‰ Ø§Ų„Ø­Ø§ŲØ¸ØŠ</string> <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_timestamp_success">ØĒŲ… Ų†ØŗØŽ ØšŲ†ŲˆØ§Ų† URL Ų…Øš Ø§Ų„ØˇØ§Ø¨Øš Ø§Ų„Ø˛Ų…Ų†ŲŠ</string>
<string name="revanced_copy_video_url_title">ØšØąØļ Ø˛Øą Ų†ØŗØŽ ØšŲ†ŲˆØ§Ų† URL Ų„Ų„ŲŲŠØ¯ŲŠŲˆ</string> <string name="revanced_copy_video_url_title">ØšØąØļ Ø˛Øą Ų†ØŗØŽ ØšŲ†ŲˆØ§Ų† URL Ų„Ų„ŲŲŠØ¯ŲŠŲˆ</string>
<string name="revanced_copy_video_url_summary_on">؊ØĒŲ… ØšØąØļ Ø§Ų„Ø˛Øą. Ø§Ų†Ų‚Øą Ų„Ų†ØŗØŽ ØšŲ†ŲˆØ§Ų† URL Ų„Ų„ŲŲŠØ¯ŲŠŲˆ. Ø§Ų†Ų‚Øą Ų…Øš Ø§Ų„Ø§ØŗØĒŲ…ØąØ§Øą Ų„Ų„Ų†ØŗØŽ Ų…Øš Ø§Ų„ØˇØ§Ø¨Øš Ø§Ų„Ø˛Ų…Ų†ŲŠ</string> <string name="revanced_copy_video_url_summary_on">؊ØĒŲ… ØšØąØļ Ø˛Øą Ų†ØŗØŽ ØšŲ†ŲˆØ§Ų† URL Ų„Ų„ŲŲŠØ¯ŲŠŲˆ. Ø§Ų†Ų‚Øą Ų„Ų†ØŗØŽ ØšŲ†ŲˆØ§Ų† URL Ų„Ų„ŲŲŠØ¯ŲŠŲˆ. Ø§Ų†Ų‚Øą Ų…Øš Ø§Ų„Ø§ØŗØĒŲ…ØąØ§Øą Ų„Ų„Ų†ØŗØŽ Ų…Øš Ø§Ų„ØˇØ§Ø¨Øš Ø§Ų„Ø˛Ų…Ų†ŲŠ</string>
<string name="revanced_copy_video_url_summary_off">Ų„Ø§ ؊ØĒŲ… ØšØąØļ Ø§Ų„Ø˛Øą</string> <string name="revanced_copy_video_url_summary_off">Ų„Ø§ ؊ØĒŲ… ØšØąØļ Ø˛Øą Ų†ØŗØŽ ØšŲ†ŲˆØ§Ų† URL Ų„Ų„ŲŲŠØ¯ŲŠŲˆ</string>
<string name="revanced_copy_video_url_timestamp_title">ØšØąØļ Ø˛Øą Ų†ØŗØŽ URL Ų…Øš Ø§Ų„ØˇØ§Ø¨Øš Ø§Ų„Ø˛Ų…Ų†ŲŠ</string> <string name="revanced_copy_video_url_timestamp_title">ØšØąØļ Ø˛Øą Ų†ØŗØŽ URL Ų…Øš Ø§Ų„ØˇØ§Ø¨Øš Ø§Ų„Ø˛Ų…Ų†ŲŠ</string>
<string name="revanced_copy_video_url_timestamp_summary_on">؊ØĒŲ… ØšØąØļ Ø§Ų„Ø˛Øą. Ø§Ų†Ų‚Øą Ų„Ų†ØŗØŽ ØšŲ†ŲˆØ§Ų† URL Ų„Ų„ŲŲŠØ¯ŲŠŲˆ Ų…Øš Ø§Ų„ØˇØ§Ø¨Øš Ø§Ų„Ø˛Ų…Ų†ŲŠ. Ø§Ų†Ų‚Øą Ų…Øš Ø§Ų„Ø§ØŗØĒŲ…ØąØ§Øą Ų„Ų„Ų†ØŗØŽ Ø¨Ø¯ŲˆŲ† Ø§Ų„ØˇØ§Ø¨Øš Ø§Ų„Ø˛Ų…Ų†ŲŠ</string> <string name="revanced_copy_video_url_timestamp_summary_on">؊ØĒŲ… ØšØąØļ Ø˛Øą Ų†ØŗØŽ ØšŲ†ŲˆØ§Ų† URL Ų…Øš Ø§Ų„ØˇØ§Ø¨Øš Ø§Ų„Ø˛Ų…Ų†ŲŠ. Ø§Ų†Ų‚Øą Ų„Ų†ØŗØŽ ØšŲ†ŲˆØ§Ų† URL Ų„Ų„ŲŲŠØ¯ŲŠŲˆ Ų…Øš Ø§Ų„ØˇØ§Ø¨Øš Ø§Ų„Ø˛Ų…Ų†ŲŠ. Ø§Ų†Ų‚Øą Ų…Øš Ø§Ų„Ø§ØŗØĒŲ…ØąØ§Øą Ų„Ų„Ų†ØŗØŽ Ø¨Ø¯ŲˆŲ† Ø§Ų„ØˇØ§Ø¨Øš Ø§Ų„Ø˛Ų…Ų†ŲŠ</string>
<string name="revanced_copy_video_url_timestamp_summary_off">Ų„Ø§ ؊ØĒŲ… ØšØąØļ Ø§Ų„Ø˛Øą</string> <string name="revanced_copy_video_url_timestamp_summary_off">Ų„Ø§ ؊ØĒŲ… ØšØąØļ Ø˛Øą Ų†ØŗØŽ ØšŲ†ŲˆØ§Ų† URL Ų…Øš Ø§Ų„ØˇØ§Ø¨Øš Ø§Ų„Ø˛Ų…Ų†ŲŠ</string>
</patch> </patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch"> <patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
<string name="revanced_remove_viewer_discretion_dialog_title">ØĨØ˛Ø§Ų„ØŠ Ų…ØąØ¨Øš Ø­ŲˆØ§Øą ØĒŲ‚Ø¯ŲŠØą Ø§Ų„Ų…Ø´Ø§Ų‡Ø¯</string> <string name="revanced_remove_viewer_discretion_dialog_title">ØĨØ˛Ø§Ų„ØŠ Ų…ØąØ¨Øš Ø­ŲˆØ§Øą ØĒŲ‚Ø¯ŲŠØą Ø§Ų„Ų…Ø´Ø§Ų‡Ø¯</string>
@@ -679,7 +693,7 @@ Second \"item\" text"</string>
<string name="revanced_hide_download_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą ØĒŲ†Ø˛ŲŠŲ„</string> <string name="revanced_hide_download_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą ØĒŲ†Ø˛ŲŠŲ„</string>
<string name="revanced_hide_download_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą ØĒŲ†Ø˛ŲŠŲ„</string> <string name="revanced_hide_download_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą ØĒŲ†Ø˛ŲŠŲ„</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays. <!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. --> This button only shows on videos uploaded by the logged-in user. -->
<string name="revanced_hide_hype_button_title">ØĨØŽŲØ§ØĄ Ø§Ų„ØĒØ´ØŦŲŠØš</string> <string name="revanced_hide_hype_button_title">ØĨØŽŲØ§ØĄ Ø§Ų„ØĒØ´ØŦŲŠØš</string>
<string name="revanced_hide_hype_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„ØĒØ´ØŦŲŠØš</string> <string name="revanced_hide_hype_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„ØĒØ´ØŦŲŠØš</string>
<string name="revanced_hide_hype_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„ØĒØ´ØŦŲŠØš</string> <string name="revanced_hide_hype_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„ØĒØ´ØŦŲŠØš</string>
@@ -800,10 +814,11 @@ Second \"item\" text"</string>
<string name="revanced_hide_player_flyout_audio_track_title">ØĨØŽŲØ§ØĄ Ø§Ų„Ų…Ų‚ØˇØš Ø§Ų„Øĩ؈ØĒ؊</string> <string name="revanced_hide_player_flyout_audio_track_title">ØĨØŽŲØ§ØĄ Ø§Ų„Ų…Ų‚ØˇØš Ø§Ų„Øĩ؈ØĒ؊</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ų…Ų‚ØˇØš Ø§Ų„Øĩ؈ØĒ؊</string> <string name="revanced_hide_player_flyout_audio_track_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ų…Ų‚ØˇØš Ø§Ų„Øĩ؈ØĒ؊</string>
<string name="revanced_hide_player_flyout_audio_track_summary_off">؊ØĒŲ… ØšØąØļ Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ų…Ų‚ØˇØš Ø§Ų„Øĩ؈ØĒ؊</string> <string name="revanced_hide_player_flyout_audio_track_summary_off">؊ØĒŲ… ØšØąØļ Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ų…Ų‚ØˇØš Ø§Ų„Øĩ؈ØĒ؊</string>
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. --> <!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
'Android No SDK' must be kept untranslated. -->
<string name="revanced_hide_player_flyout_audio_track_not_available">"ØĒŲ… ØĨØŽŲØ§ØĄ Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ų…Ų‚ØˇØš Ø§Ų„Øĩ؈ØĒ؊ <string name="revanced_hide_player_flyout_audio_track_not_available">"ØĒŲ… ØĨØŽŲØ§ØĄ Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ų…Ų‚ØˇØš Ø§Ų„Øĩ؈ØĒ؊
Ų„ØšØąØļ Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ų…Ų‚ØˇØš Ø§Ų„Øĩ؈ØĒŲŠØŒ ØēŲŠŲ‘Øą 'Spoof video streams' ØĨŲ„Ų‰ iPadOS"</string> Ų„ØšØąØļ Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ų…Ų‚ØˇØš Ø§Ų„Øĩ؈ØĒŲŠØŒ ØēŲŠŲ‘Øą 'Spoof Video Streams' ØĨŲ„Ų‰ 'Android No SDK'"</string>
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- '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_title">ØĨØŽŲØ§ØĄ Ø§Ų„Ų…Ø´Ø§Ų‡Ø¯ØŠ ؁؊ VR</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ų…Ø´Ø§Ų‡Ø¯ØŠ ؁؊ Ø§Ų„ŲˆØļØš Ø§Ų„Ø§ŲØĒØąØ§Øļ؊</string> <string name="revanced_hide_player_flyout_watch_in_vr_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ų…Ø´Ø§Ų‡Ø¯ØŠ ؁؊ Ø§Ų„ŲˆØļØš Ø§Ų„Ø§ŲØĒØąØ§Øļ؊</string>
@@ -879,6 +894,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_history_title">ØĨØŽŲØ§ØĄ Shorts ؁؊ Ø§Ų„ØŗØŦŲ„Ų‘</string> <string name="revanced_hide_shorts_history_title">ØĨØŽŲØ§ØĄ Shorts ؁؊ Ø§Ų„ØŗØŦŲ„Ų‘</string>
<string name="revanced_hide_shorts_history_summary_on">Ų…ØŽŲŲŠ ؁؊ Ø§Ų„ØŗØŦŲ„Ų‘</string> <string name="revanced_hide_shorts_history_summary_on">Ų…ØŽŲŲŠ ؁؊ Ø§Ų„ØŗØŦŲ„Ų‘</string>
<string name="revanced_hide_shorts_history_summary_off">ŲŠŲØšØąØļ ؁؊ Ø§Ų„ØŗØŦŲ„Ų‘</string> <string name="revanced_hide_shorts_history_summary_off">ŲŠŲØšØąØļ ؁؊ Ø§Ų„ØŗØŦŲ„Ų‘</string>
<string name="revanced_hide_shorts_auto_dubbed_label_title">ØĨØŽŲØ§ØĄ ØĒØŗŲ…ŲŠØŠ \"Ų…Ø¯Ø¨Ų„ØŦ ØĒŲ„Ų‚Ø§ØĻŲŠØ§Ų‹\"</string>
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØĒØŗŲ…ŲŠØŠ Ø§Ų„Ø¯Ø¨Ų„ØŦØŠ Ø§Ų„ØĒŲ„Ų‚Ø§ØĻŲŠØŠ</string>
<string name="revanced_hide_shorts_auto_dubbed_label_summary_off">؊ØĒŲ… ØšØąØļ ØĒØŗŲ…ŲŠØŠ Ø§Ų„Ø¯Ø¨Ų„ØŦØŠ Ø§Ų„ØĒŲ„Ų‚Ø§ØĻŲŠØŠ</string>
<string name="revanced_hide_shorts_super_thanks_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø´ØąØ§ØĄ Super Thanks</string> <string name="revanced_hide_shorts_super_thanks_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø´ØąØ§ØĄ Super Thanks</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø´ØąØ§ØĄ Super Thanks</string> <string name="revanced_hide_shorts_super_thanks_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø´ØąØ§ØĄ Super Thanks</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø´ØąØ§ØĄ Super Thanks</string> <string name="revanced_hide_shorts_super_thanks_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø´ØąØ§ØĄ Super Thanks</string>
@@ -895,6 +913,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_join_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ø§Ų†ØļŲ…Ø§Ų…</string> <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_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ø§Ų†ØļŲ…Ø§Ų…</string>
<string name="revanced_hide_shorts_join_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„Ø§Ų†ØļŲ…Ø§Ų…</string> <string name="revanced_hide_shorts_join_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„Ø§Ų†ØļŲ…Ø§Ų…</string>
<string name="revanced_hide_shorts_live_preview_title">ØĨØŽŲØ§ØĄ Ø§Ų„Ų…ØšØ§ŲŠŲ†ØŠ Ø§Ų„Ų…Ø¨Ø§Ø´ØąØŠ</string>
<string name="revanced_hide_shorts_live_preview_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ų…ØšØ§ŲŠŲ†ØŠ Ø§Ų„Ø¨ØĢ Ø§Ų„Ų…Ø¨Ø§Ø´Øą</string>
<string name="revanced_hide_shorts_live_preview_summary_off">ØĒŲ… ØšØąØļ Ų…ØšØ§ŲŠŲ†ØŠ Ø§Ų„Ø¨ØĢ Ø§Ų„Ų…Ø¨Ø§Ø´Øą</string>
<string name="revanced_hide_shorts_location_label_title">ØĨØŽŲØ§ØĄ ØĒØŗŲ…ŲŠØŠ Ø§Ų„Ų…ŲˆŲ‚Øš</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_on">ØĒŲ… ØĨØŽŲØ§ØĄ ØĒØŗŲ…ŲŠØŠ Ø§Ų„Ų…ŲˆŲ‚Øš</string>
<string name="revanced_hide_shorts_location_label_summary_off">؊ØĒŲ… ØšØąØļ ØĒØŗŲ…ŲŠØŠ Ø§Ų„Ų…ŲˆŲ‚Øš</string> <string name="revanced_hide_shorts_location_label_summary_off">؊ØĒŲ… ØšØąØļ ØĒØŗŲ…ŲŠØŠ Ø§Ų„Ų…ŲˆŲ‚Øš</string>
@@ -1574,13 +1595,13 @@ Second \"item\" text"</string>
</patch> </patch>
<patch id="video.speed.button.playbackSpeedButtonPatch"> <patch id="video.speed.button.playbackSpeedButtonPatch">
<string name="revanced_playback_speed_dialog_button_title">ØšØąØļ Ø˛Øą Ų…ØąØ¨Øš Ø­ŲˆØ§Øą Ø§Ų„ØŗØąØšØŠ</string> <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> <string name="revanced_playback_speed_dialog_button_summary_off">Ų„Ø§ ؊ØĒŲ… ØšØąØļ Ø˛Øą Ų…ØąØ¨Øš Ø­ŲˆØ§Øą Ø§Ų„ØŗØąØšØŠ</string>
</patch> </patch>
<patch id="video.quality.button.videoQualityDialogButtonPatch"> <patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">ØšØąØļ Ø˛Øą ØŦŲˆØ¯ØŠ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ</string> <string name="revanced_video_quality_dialog_button_title">ØšØąØļ Ø˛Øą ØŦŲˆØ¯ØŠ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ</string>
<string name="revanced_video_quality_dialog_button_summary_on">؊ØĒŲ… ØšØąØļ Ø§Ų„Ø˛Øą. Ø§Ų†Ų‚Øą Ų…Øš Ø§Ų„Ø§ØŗØĒŲ…ØąØ§Øą Ų„ØĨؚاد؊ ØĒØšŲŠŲŠŲ† Ø§Ų„ØŦŲˆØ¯ØŠ ØĨŲ„Ų‰ Ø§Ų„ŲˆØļØš Ø§Ų„Ø§ŲØĒØąØ§Øļ؊</string> <string name="revanced_video_quality_dialog_button_summary_on">؊ØĒŲ… ØšØąØļ Ø˛Øą ØŦŲˆØ¯ØŠ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ. Ø§Ų†Ų‚Øą Ų…Øš Ø§Ų„Ø§ØŗØĒŲ…ØąØ§Øą Ų„ØĨؚاد؊ ØĒØšŲŠŲŠŲ† Ø§Ų„ØŦŲˆØ¯ØŠ ØĨŲ„Ų‰ Ø§Ų„ŲˆØļØš Ø§Ų„Ø§ŲØĒØąØ§Øļ؊</string>
<string name="revanced_video_quality_dialog_button_summary_off">Ų„Ø§ ؊ØĒŲ… ØšØąØļ Ø§Ų„Ø˛Øą</string> <string name="revanced_video_quality_dialog_button_summary_off">Ų„Ø§ ؊ØĒŲ… ØšØąØļ Ø˛Øą ØŦŲˆØ¯ØŠ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ</string>
</patch> </patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch"> <patch id="video.speed.custom.customPlaybackSpeedPatch">
<string name="revanced_custom_speed_menu_title">Ų‚Ø§ØĻŲ…ØŠ ØŗØąØšØŠ Ø§Ų„ØĒØ´ØēŲŠŲ„ Ø§Ų„Ų…ØŽØĩØĩØŠ</string> <string name="revanced_custom_speed_menu_title">Ų‚Ø§ØĻŲ…ØŠ ØŗØąØšØŠ Ø§Ų„ØĒØ´ØēŲŠŲ„ Ø§Ų„Ų…ØŽØĩØĩØŠ</string>
@@ -1682,8 +1703,8 @@ Second \"item\" text"</string>
<string name="revanced_music_hide_cast_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ø¨ØĢ</string> <string name="revanced_music_hide_cast_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„Ø¨ØĢ</string>
<string name="revanced_music_hide_cast_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„Ø¨ØĢ</string> <string name="revanced_music_hide_cast_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„Ø¨ØĢ</string>
<string name="revanced_music_hide_history_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„ØŗØŦŲ„</string> <string name="revanced_music_hide_history_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„ØŗØŦŲ„</string>
<string name="revanced_music_hide_history_button_summary_on">Ø˛Øą Ø§Ų„ØŗØŦŲ„ Ų…ØŽŲŲŠ</string> <string name="revanced_music_hide_history_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„ØŗØŦŲ„</string>
<string name="revanced_music_hide_history_button_summary_off">Ø˛Øą Ø§Ų„ØŗØŦŲ„ Ø¸Ø§Ų‡Øą</string> <string name="revanced_music_hide_history_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„ØŗØŦŲ„</string>
<string name="revanced_music_hide_notification_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„ØĨØ´ØšØ§ØąØ§ØĒ</string> <string name="revanced_music_hide_notification_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„ØĨØ´ØšØ§ØąØ§ØĒ</string>
<string name="revanced_music_hide_notification_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„ØĨØ´ØšØ§ØąØ§ØĒ</string> <string name="revanced_music_hide_notification_button_summary_on">ØĒŲ… ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„ØĨØ´ØšØ§ØąØ§ØĒ</string>
<string name="revanced_music_hide_notification_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„ØĨØ´ØšØ§ØąØ§ØĒ</string> <string name="revanced_music_hide_notification_button_summary_off">؊ØĒŲ… ØšØąØļ Ø˛Øą Ø§Ų„ØĨØ´ØšØ§ØąØ§ØĒ</string>

View File

@@ -63,9 +63,11 @@ Second \"item\" text"</string>
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles --> <!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
<!-- 'Join' should be translated using the same localized wording YouTube displays. <!-- 'Join' should be translated using the same localized wording YouTube displays.
This appears in the video player for certain videos. --> This appears in the video player for certain videos. -->
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
<!-- 'For You' should be translated using the same localized wording YouTube displays. --> <!-- 'For You' should be translated using the same localized wording YouTube displays. -->
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. --> <!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. --> <!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. --> <!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message --> <!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message --> <!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
@@ -109,7 +111,7 @@ Second \"item\" text"</string>
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. --> <!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. --> <!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays. <!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. --> This button only shows on videos uploaded by the logged-in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. --> <!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. --> <!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays. <!-- 'Ask' should be translated with the same localized wording that YouTube displays.
@@ -136,7 +138,8 @@ Second \"item\" text"</string>
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. --> <!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
'Android No SDK' must be kept untranslated. -->
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
</patch> </patch>
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch"> <patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">

View File

@@ -282,6 +282,9 @@ Hər halda, bunu aktivləşdirmə IP ÃŧnvanÄąnÄąz kimi bəzi istifadəçi məlum
<string name="revanced_hide_video_recommendation_labels_title">Video tÃļvsiyə etiketlərini gizlət</string> <string name="revanced_hide_video_recommendation_labels_title">Video tÃļvsiyə etiketlərini gizlət</string>
<string name="revanced_hide_video_recommendation_labels_summary_on">\'İnsanlar həmçinin izləyiblər\' və \'Bunu da bəyənə bilərsiniz\' etiketləri axtarÄąÅŸ nəticələrində gizlədilib</string> <string name="revanced_hide_video_recommendation_labels_summary_on">\'İnsanlar həmçinin izləyiblər\' və \'Bunu da bəyənə bilərsiniz\' etiketləri axtarÄąÅŸ nəticələrində gizlədilib</string>
<string name="revanced_hide_video_recommendation_labels_summary_off">\'İnsanlar həmçinin izləyiblər\' və \'Bunu da bəyənə bilərsiniz\' etiketləri axtarÄąÅŸ nəticələrində gÃļrÃŧnÃŧr</string> <string name="revanced_hide_video_recommendation_labels_summary_off">\'İnsanlar həmçinin izləyiblər\' və \'Bunu da bəyənə bilərsiniz\' etiketləri axtarÄąÅŸ nəticələrində gÃļrÃŧnÃŧr</string>
<string name="revanced_hide_visual_spacer_title">Vizual ayırıcı gizlət</string>
<string name="revanced_hide_visual_spacer_summary_on">Vizual ayırıcı gizlənib</string>
<string name="revanced_hide_visual_spacer_summary_off">Vizual ayÄąrÄącÄą gÃļstərilib</string>
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles --> <!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
<string name="revanced_hide_doodles_title">YouTube Doodle-ları gizlət</string> <string name="revanced_hide_doodles_title">YouTube Doodle-ları gizlət</string>
<string name="revanced_hide_doodles_summary_on">YouTube Doodles animasiyasÄą simvolda gizlidir</string> <string name="revanced_hide_doodles_summary_on">YouTube Doodles animasiyasÄą simvolda gizlidir</string>
@@ -342,18 +345,21 @@ Hər halda, bunu aktivləşdirmə IP ÃŧnvanÄąnÄąz kimi bəzi istifadəçi məlum
<string name="revanced_hide_podcast_section_title">\'PodkastÄą araşdÄąrÄąn\"-Äą Gizlət</string> <string name="revanced_hide_podcast_section_title">\'PodkastÄą araşdÄąrÄąn\"-Äą Gizlət</string>
<string name="revanced_hide_podcast_section_summary_on">Podkast bÃļlməsin araşdÄąrÄąn gizlidir</string> <string name="revanced_hide_podcast_section_summary_on">Podkast bÃļlməsin araşdÄąrÄąn gizlidir</string>
<string name="revanced_hide_podcast_section_summary_off">Podkast bÃļlməsin araşdÄąrÄąn gÃļrÃŧnÃŧr</string> <string name="revanced_hide_podcast_section_summary_off">Podkast bÃļlməsin araşdÄąrÄąn gÃļrÃŧnÃŧr</string>
<string name="revanced_hide_featured_section_title">Seçilən məzmunu gizlət</string> <string name="revanced_hide_featured_links_section_title">Seçilən keçidləri gizlət</string>
<string name="revanced_hide_featured_section_summary_on">Seçilən məzmun bÃļlməsi gizlidir</string> <string name="revanced_hide_featured_links_section_summary_on">Seçilən keçidlər bÃļlməsi gizlidir</string>
<string name="revanced_hide_featured_section_summary_off">Seçilən məzmun bÃļlməsi gÃļstərilir</string> <string name="revanced_hide_featured_links_section_summary_off">Seçilən keçidlər bÃļlməsi gÃļstərilir</string>
<string name="revanced_hide_featured_videos_section_title">Seçilən videolarÄą gizlət</string>
<string name="revanced_hide_featured_videos_section_summary_on">Seçilən videolar bÃļlməsi gizlidir</string>
<string name="revanced_hide_featured_videos_section_summary_off">Seçilən videolar bÃļlməsi gÃļstərilir</string>
<string name="revanced_hide_info_cards_section_title">Məlumat Kartlarını Gizlət</string> <string name="revanced_hide_info_cards_section_title">Məlumat Kartlarını Gizlət</string>
<string name="revanced_hide_info_cards_section_summary_on">Məlumat kartlarÄą bÃļlməsi gizlədilir</string> <string name="revanced_hide_info_cards_section_summary_on">Məlumat kartlarÄą bÃļlməsi gizlədilir</string>
<string name="revanced_hide_info_cards_section_summary_off">Məlumat kartlarÄą bÃļlməsi gÃļstərilir</string> <string name="revanced_hide_info_cards_section_summary_off">Məlumat kartlarÄą bÃļlməsi gÃļstərilir</string>
<string name="revanced_hide_key_concepts_section_title">\"Əsas konseptlər-i\" gizlət</string> <string name="revanced_hide_key_concepts_section_title">\"Əsas konseptlər-i\" gizlət</string>
<string name="revanced_hide_key_concepts_section_summary_on">Əsas konseptlər bÃļlməsi gizlidir</string> <string name="revanced_hide_key_concepts_section_summary_on">Əsas konseptlər bÃļlməsi gizlidir</string>
<string name="revanced_hide_key_concepts_section_summary_off">Əsas konseptlər bÃļlməsi gÃļrÃŧnÃŧr</string> <string name="revanced_hide_key_concepts_section_summary_off">Əsas konseptlər bÃļlməsi gÃļrÃŧnÃŧr</string>
<string name="revanced_hide_description_subscribe_button_title">Abunə ol dÃŧyməsini gizlət</string> <string name="revanced_hide_subscribe_button_title">Abunə ol dÃŧyməsini gizlət</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Abunə ol dÃŧyməsi gizlidir</string> <string name="revanced_hide_subscribe_button_summary_on">Abunə ol dÃŧyməsi gizlidir</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Abunə ol dÃŧyməsi gÃļrÃŧnÃŧr</string> <string name="revanced_hide_subscribe_button_summary_off">Abunə ol dÃŧyməsi gÃļrÃŧnÃŧr</string>
<string name="revanced_hide_transcript_section_title">Transkript-i Gizlət</string> <string name="revanced_hide_transcript_section_title">Transkript-i Gizlət</string>
<string name="revanced_hide_transcript_section_summary_on">Transkripsiya bÃļlməsi gizlidir</string> <string name="revanced_hide_transcript_section_summary_on">Transkripsiya bÃļlməsi gizlidir</string>
<string name="revanced_hide_transcript_section_summary_off">Transkripsiya bÃļlməsi gÃļstərilir</string> <string name="revanced_hide_transcript_section_summary_off">Transkripsiya bÃļlməsi gÃļstərilir</string>
@@ -375,24 +381,32 @@ Hər halda, bunu aktivləşdirmə IP ÃŧnvanÄąnÄąz kimi bəzi istifadəçi məlum
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">BaxÄąÅŸ tarixçəsində gÃļrÃŧnÃŧr</string> <string name="revanced_hide_filter_bar_feed_in_history_summary_off">BaxÄąÅŸ tarixçəsində gÃļrÃŧnÃŧr</string>
<string name="revanced_channel_screen_title">Kanal səhifəsi</string> <string name="revanced_channel_screen_title">Kanal səhifəsi</string>
<string name="revanced_channel_screen_summary">Kanal səhifə elementlərini gizlət və ya gÃļstər</string> <string name="revanced_channel_screen_summary">Kanal səhifə elementlərini gizlət və ya gÃļstər</string>
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_community_button_title">İcma dÃŧyməsini gizlət</string>
<string name="revanced_hide_community_button_summary_on">İcmaya dÃŧyməsi gizlidir</string>
<string name="revanced_hide_community_button_summary_off">İcmaya dÃŧyməsi gÃļrÃŧnÃŧr</string>
<!-- 'For You' should be translated using the same localized wording YouTube displays. --> <!-- 'For You' should be translated using the same localized wording YouTube displays. -->
<string name="revanced_hide_for_you_shelf_title">\"Sizin ÃŧçÃŧn\" bÃļlməsin gizlət</string> <string name="revanced_hide_for_you_shelf_title">\"Sizin ÃŧçÃŧn\" bÃļlməsin gizlət</string>
<string name="revanced_hide_for_you_shelf_summary_on">Sizin ÃŧçÃŧn cərgəsi gizlidir</string> <string name="revanced_hide_for_you_shelf_summary_on">Sizin ÃŧçÃŧn cərgəsi gizlidir</string>
<string name="revanced_hide_for_you_shelf_summary_off">Sizin ÃŧçÃŧn cərgəsi gÃļrÃŧnÃŧr</string> <string name="revanced_hide_for_you_shelf_summary_off">Sizin ÃŧçÃŧn cərgəsi gÃļrÃŧnÃŧr</string>
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_join_button_title">Qoşulun dÃŧyməsini gizlət</string>
<string name="revanced_hide_join_button_summary_on">Qoşul dÃŧyməsi gizlidir</string>
<string name="revanced_hide_join_button_summary_off">Qoşul dÃŧyməsi gÃļrÃŧnÃŧr</string>
<string name="revanced_hide_links_preview_title">Keçidlərin Ãļnizləməsini gizlət</string> <string name="revanced_hide_links_preview_title">Keçidlərin Ãļnizləməsini gizlət</string>
<string name="revanced_hide_links_preview_summary_on">Keçidlər Ãļnizləməsi gizlədilib</string> <string name="revanced_hide_links_preview_summary_on">Keçidlər Ãļnizləməsi gizlədilib</string>
<string name="revanced_hide_links_preview_summary_off">Keçidlər Ãļnizləməsi gÃļrÃŧnÃŧr</string> <string name="revanced_hide_links_preview_summary_off">Keçidlər Ãļnizləməsi gÃļrÃŧnÃŧr</string>
<string name="revanced_hide_members_shelf_title">Üzvlər cərgəsini gizlət</string> <string name="revanced_hide_members_shelf_title">Üzvlər cərgəsini gizlət</string>
<string name="revanced_hide_members_shelf_summary_on">Üzvlər cərgəsi gizlidir</string> <string name="revanced_hide_members_shelf_summary_on">Üzvlər cərgəsi gizlidir</string>
<string name="revanced_hide_members_shelf_summary_off">Üzvlər cərgəsi gÃļrÃŧnÃŧr</string> <string name="revanced_hide_members_shelf_summary_off">Üzvlər cərgəsi gÃļrÃŧnÃŧr</string>
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. --> <!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_community_button_title">\'İcmaya daxil olun\' dÃŧyməsini gizlət</string> <string name="revanced_hide_store_button_title">Mağaza dÃŧyməsini gizlət</string>
<string name="revanced_hide_visit_community_button_summary_on">İcmaya daxil ol dÃŧyməsi gizlidir</string> <string name="revanced_hide_store_button_summary_on">Mağaza dÃŧyməsi gizlidir</string>
<string name="revanced_hide_visit_community_button_summary_off">İcmaya daxil ol dÃŧyməsi gÃļrÃŧnÃŧr</string> <string name="revanced_hide_store_button_summary_off">Mağaza dÃŧyməsi gÃļrÃŧnÃŧr</string>
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. --> <!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_store_button_title">Kanalda \"Mağazaya baxÄąn\" dÃŧyməsin gizlə</string> <string name="revanced_hide_subscribe_button_in_channel_page_title">Abunə ol dÃŧyməsini gizlət</string>
<string name="revanced_hide_visit_store_button_summary_on">Mağazaya baxÄąn dÃŧyməsi gizlidir</string> <string name="revanced_hide_subscribe_button_in_channel_page_summary_on">Abunə ol dÃŧyməsi gizlidir</string>
<string name="revanced_hide_visit_store_button_summary_off">Mağazaya baxÄąn dÃŧyməsi gÃļrÃŧnÃŧr</string> <string name="revanced_hide_subscribe_button_in_channel_page_summary_off">Abunə ol dÃŧyməsi gÃļrÃŧnÃŧr</string>
<string name="revanced_comments_screen_title">Şərhlə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_comments_screen_summary">Şərhlər bÃļlməsi elementlərin gizlət və ya gÃļstər</string>
<string name="revanced_hide_comments_ai_chat_summary_title">Sİ sÃļhbət xÃŧlasəsini gizlət</string> <string name="revanced_hide_comments_ai_chat_summary_title">Sİ sÃļhbət xÃŧlasəsini gizlət</string>
@@ -534,11 +548,11 @@ Bu xÃŧsusiyyət yalnÄąz kÃļhnə cihazlar ÃŧçÃŧn mÃļvcuddur"</string>
<string name="revanced_share_copy_url_success">URL buferə kÃļçÃŧrÃŧldÃŧ</string> <string name="revanced_share_copy_url_success">URL buferə kÃļçÃŧrÃŧldÃŧ</string>
<string name="revanced_share_copy_url_timestamp_success">Vaxt mÃļhÃŧrlÃŧ URL kÃļçÃŧrÃŧldÃŧ</string> <string name="revanced_share_copy_url_timestamp_success">Vaxt mÃļhÃŧrlÃŧ URL kÃļçÃŧrÃŧldÃŧ</string>
<string name="revanced_copy_video_url_title">Video URL-i kÃļçÃŧrmə dÃŧyməsin gÃļstər</string> <string name="revanced_copy_video_url_title">Video URL-i kÃļçÃŧrmə dÃŧyməsin gÃļstər</string>
<string name="revanced_copy_video_url_summary_on">DÃŧymə gÃļstərilir. Video URL-ni kÃļçÃŧrmək ÃŧçÃŧn toxun. Vaxt mÃļhÃŧrÃŧ ilə kÃļçÃŧrmək ÃŧçÃŧn basÄąb saxlayÄąn</string> <string name="revanced_copy_video_url_summary_on">Video URL-ini kopyala dÃŧyməsi gÃļrÃŧnÃŧr. Video URL-ini kopyalamaq ÃŧçÃŧn toxunun. Zaman nişanÄą ilə kopyalamaq ÃŧçÃŧn toxunub saxlayÄąn</string>
<string name="revanced_copy_video_url_summary_off">DÃŧymə gÃļstərilmir</string> <string name="revanced_copy_video_url_summary_off">Video URL-ini kopyala dÃŧyməsi gÃļrÃŧnmÃŧr</string>
<string name="revanced_copy_video_url_timestamp_title">Vaxt mÃļhÃŧrÃŧ URL kÃļçÃŧr dÃŧyməsi gÃļstər</string> <string name="revanced_copy_video_url_timestamp_title">Vaxt mÃļhÃŧrÃŧ URL kÃļçÃŧr dÃŧyməsi gÃļstər</string>
<string name="revanced_copy_video_url_timestamp_summary_on">DÃŧymə gÃļstərilir. Video URL-ni vaxt mÃļhÃŧrÃŧ ilə kÃļçÃŧrmək ÃŧçÃŧn toxun. Vaxt mÃļhÃŧrÃŧ olmadan kÃļçÃŧrmək ÃŧçÃŧn basÄąb saxlayÄąn</string> <string name="revanced_copy_video_url_timestamp_summary_on">Zaman nişanÄą URL-ini kopyala dÃŧyməsi gÃļrÃŧnÃŧr. Zaman nişanÄą ilə video URL-ini kopyalamaq ÃŧçÃŧn toxunun. Zaman nişanÄą olmadan kopyalamaq ÃŧçÃŧn toxunub saxlayÄąn</string>
<string name="revanced_copy_video_url_timestamp_summary_off">DÃŧymə gÃļstərilmir</string> <string name="revanced_copy_video_url_timestamp_summary_off">Zaman nişanÄą URL-ini kopyala dÃŧyməsi gÃļrÃŧnmÃŧr</string>
</patch> </patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch"> <patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
<string name="revanced_remove_viewer_discretion_dialog_title">İzləyici mÃŧlahizə dialoqun sil</string> <string name="revanced_remove_viewer_discretion_dialog_title">İzləyici mÃŧlahizə dialoqun sil</string>
@@ -679,7 +693,7 @@ EkranÄąn sağ tərəfində dÃŧzÃŧnə sÃŧrÃŧşdÃŧrərək səs səviyyəsini tənz
<string name="revanced_hide_download_button_summary_on">YÃŧkləmə dÃŧyməsi gizlidir</string> <string name="revanced_hide_download_button_summary_on">YÃŧkləmə dÃŧyməsi gizlidir</string>
<string name="revanced_hide_download_button_summary_off">YÃŧkləmə dÃŧyməsi gÃļstərilir</string> <string name="revanced_hide_download_button_summary_off">YÃŧkləmə dÃŧyməsi gÃļstərilir</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays. <!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. --> This button only shows on videos uploaded by the logged-in user. -->
<string name="revanced_hide_hype_button_title">Coşqu Gizlət</string> <string name="revanced_hide_hype_button_title">Coşqu Gizlət</string>
<string name="revanced_hide_hype_button_summary_on">Coşqu dÃŧyməsi gizlidir</string> <string name="revanced_hide_hype_button_summary_on">Coşqu dÃŧyməsi gizlidir</string>
<string name="revanced_hide_hype_button_summary_off">Coşqu dÃŧyməsi gÃļrÃŧnÃŧr</string> <string name="revanced_hide_hype_button_summary_off">Coşqu dÃŧyməsi gÃļrÃŧnÃŧr</string>
@@ -800,10 +814,11 @@ Bu seçimi dəyişdirmə işə dÃŧşmÃŧrsə, Gizli rejimə keçməyə çalÄąÅŸÄą
<string name="revanced_hide_player_flyout_audio_track_title">Səs trekini gizlət</string> <string name="revanced_hide_player_flyout_audio_track_title">Səs trekini gizlət</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Səs axını menyusu gizlidir</string> <string name="revanced_hide_player_flyout_audio_track_summary_on">Səs axını menyusu gizlidir</string>
<string name="revanced_hide_player_flyout_audio_track_summary_off">Səs axÄąnÄą menyusu gÃļstərilir</string> <string name="revanced_hide_player_flyout_audio_track_summary_off">Səs axÄąnÄą menyusu gÃļstərilir</string>
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. --> <!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
<string name="revanced_hide_player_flyout_audio_track_not_available">"Səs trek menyusu gizlidir 'Android No SDK' must be kept untranslated. -->
<string name="revanced_hide_player_flyout_audio_track_not_available">"Səs axını menyusu gizlidir
Səs treki menyusunu gÃļstərmək ÃŧçÃŧn \"Video yayÄąmlarÄą saxtalaşdÄąr\"Äą iPadOS-a dəyiş"</string> Səs treki menyusunu gÃļstərmək ÃŧçÃŧn \"Video yayÄąmlarÄą saxtalaşdÄąr\"-Äą 'Android No SDK'-a dəyiş"</string>
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- '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-da İzləni\" gizlət</string> <string name="revanced_hide_player_flyout_watch_in_vr_title">\"VR-da İzləni\" gizlət</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">VR menyusunda izləmə gizlidir</string> <string name="revanced_hide_player_flyout_watch_in_vr_summary_on">VR menyusunda izləmə gizlidir</string>
@@ -879,13 +894,16 @@ Səs treki menyusunu gÃļstərmək ÃŧçÃŧn \"Video yayÄąmlarÄą saxtalaşdÄąr\"Äą
<string name="revanced_hide_shorts_history_title">BaxÄąÅŸ tarixçəsində Shorts-u gizlət</string> <string name="revanced_hide_shorts_history_title">BaxÄąÅŸ tarixçəsində Shorts-u gizlət</string>
<string name="revanced_hide_shorts_history_summary_on">BaxÄąÅŸ tarixçəsində gizlidir</string> <string name="revanced_hide_shorts_history_summary_on">BaxÄąÅŸ tarixçəsində gizlidir</string>
<string name="revanced_hide_shorts_history_summary_off">BaxÄąÅŸ tarixçəsində gÃļstərilib</string> <string name="revanced_hide_shorts_history_summary_off">BaxÄąÅŸ tarixçəsində gÃļstərilib</string>
<string name="revanced_hide_shorts_super_thanks_button_title">Super TəşəkkÃŧr Al dÃŧyməsini gizlət</string> <string name="revanced_hide_shorts_auto_dubbed_label_title">\'Avtomatik dublyaj olunmuş\' etiketini gizlət</string>
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">Avto-dublyaj etiketi gizlidir</string>
<string name="revanced_hide_shorts_auto_dubbed_label_summary_off">Avto-dublyaj etiketi gÃļstərilir</string>
<string name="revanced_hide_shorts_super_thanks_button_title">\'Super TəşəkkÃŧr Al\' dÃŧyməsini gizlət</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_on">Super TəşəkkÃŧrlər Al dÃŧyməsi gizlidir</string> <string name="revanced_hide_shorts_super_thanks_button_summary_on">Super TəşəkkÃŧrlər Al dÃŧyməsi gizlidir</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_off">Super TəşəkkÃŧrlər Al dÃŧyməsi gÃļrÃŧnÃŧr</string> <string name="revanced_hide_shorts_super_thanks_button_summary_off">Super TəşəkkÃŧrlər Al dÃŧyməsi gÃļrÃŧnÃŧr</string>
<string name="revanced_hide_shorts_effect_button_title">Effekt dÃŧyməsini gizlət</string> <string name="revanced_hide_shorts_effect_button_title">Effekt dÃŧyməsini gizlət</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Effekt dÃŧyməsi gizlidir</string> <string name="revanced_hide_shorts_effect_button_summary_on">Effekt dÃŧyməsi gizlidir</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Effekt dÃŧyməsi gÃļrÃŧnÃŧr</string> <string name="revanced_hide_shorts_effect_button_summary_off">Effekt dÃŧyməsi gÃļrÃŧnÃŧr</string>
<string name="revanced_hide_shorts_green_screen_button_title">YaÅŸÄąl ekran dÃŧyməsini gizlət</string> <string name="revanced_hide_shorts_green_screen_button_title">\'YaÅŸÄąl ekran\' dÃŧyməsini gizlət</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">\"YaÅŸÄąl ekran\" dÃŧyməsi gizlidir</string> <string name="revanced_hide_shorts_green_screen_button_summary_on">\"YaÅŸÄąl ekran\" dÃŧyməsi gizlidir</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">\"YaÅŸÄąl ekran\" dÃŧyməsi gÃļstərilir</string> <string name="revanced_hide_shorts_green_screen_button_summary_off">\"YaÅŸÄąl ekran\" dÃŧyməsi gÃļstərilir</string>
<string name="revanced_hide_shorts_hashtag_button_title">MÃļvzu etiketi dÃŧyməsini gizlət</string> <string name="revanced_hide_shorts_hashtag_button_title">MÃļvzu etiketi dÃŧyməsini gizlət</string>
@@ -895,6 +913,9 @@ Səs treki menyusunu gÃļstərmək ÃŧçÃŧn \"Video yayÄąmlarÄą saxtalaşdÄąr\"Äą
<string name="revanced_hide_shorts_join_button_title">Qoşul dÃŧyməsin gizlə</string> <string name="revanced_hide_shorts_join_button_title">Qoşul dÃŧyməsin gizlə</string>
<string name="revanced_hide_shorts_join_button_summary_on">Qoşulma dÃŧyməsi gizlidir</string> <string name="revanced_hide_shorts_join_button_summary_on">Qoşulma dÃŧyməsi gizlidir</string>
<string name="revanced_hide_shorts_join_button_summary_off">Qoşulma dÃŧyməsi gÃļstərilir</string> <string name="revanced_hide_shorts_join_button_summary_off">Qoşulma dÃŧyməsi gÃļstərilir</string>
<string name="revanced_hide_shorts_live_preview_title">CanlÄą Ãļnizləməni gizlət</string>
<string name="revanced_hide_shorts_live_preview_summary_on">CanlÄą Ãļnizləmə gizlədilib</string>
<string name="revanced_hide_shorts_live_preview_summary_off">CanlÄą Ãļnizləmə gÃļstərilir</string>
<string name="revanced_hide_shorts_location_label_title">Məkan etiketini gizlət</string> <string name="revanced_hide_shorts_location_label_title">Məkan etiketini gizlət</string>
<string name="revanced_hide_shorts_location_label_summary_on">Məkan etiketi gizlidir</string> <string name="revanced_hide_shorts_location_label_summary_on">Məkan etiketi gizlidir</string>
<string name="revanced_hide_shorts_location_label_summary_off">Məkan etiketi gÃļstərilir</string> <string name="revanced_hide_shorts_location_label_summary_off">Məkan etiketi gÃļstərilir</string>
@@ -907,7 +928,7 @@ Səs treki menyusunu gÃļstərmək ÃŧçÃŧn \"Video yayÄąmlarÄą saxtalaşdÄąr\"Äą
<string name="revanced_hide_shorts_preview_comment_title">ÖncÃŧl baxÄąÅŸ şərhini gizlət</string> <string name="revanced_hide_shorts_preview_comment_title">ÖncÃŧl baxÄąÅŸ şərhini gizlət</string>
<string name="revanced_hide_shorts_preview_comment_summary_on">ÖncÃŧl baxÄąÅŸ şərhi gizlidir</string> <string name="revanced_hide_shorts_preview_comment_summary_on">ÖncÃŧl baxÄąÅŸ şərhi gizlidir</string>
<string name="revanced_hide_shorts_preview_comment_summary_off">ÖncÃŧl baxÄąÅŸ şərhi gÃļstərilir</string> <string name="revanced_hide_shorts_preview_comment_summary_off">ÖncÃŧl baxÄąÅŸ şərhi gÃļstərilir</string>
<string name="revanced_hide_shorts_save_sound_button_title">Musiqini saxla dÃŧyməsini gizlət</string> <string name="revanced_hide_shorts_save_sound_button_title">\'Musiqini yadda saxla\' dÃŧyməsini gizlət</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">\"Musiqini saxla\" dÃŧyməsi gizlidir</string> <string name="revanced_hide_shorts_save_sound_button_summary_on">\"Musiqini saxla\" dÃŧyməsi gizlidir</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">\"Musiqini saxla\" dÃŧyməsi gÃļstərilir</string> <string name="revanced_hide_shorts_save_sound_button_summary_off">\"Musiqini saxla\" dÃŧyməsi gÃļstərilir</string>
<string name="revanced_hide_shorts_search_suggestions_title">AxtarÄąÅŸ təkliflərini gizlət</string> <string name="revanced_hide_shorts_search_suggestions_title">AxtarÄąÅŸ təkliflərini gizlət</string>
@@ -1573,13 +1594,13 @@ Bunu aktivləşdirmə daha yÃŧksək video keyfiyyətləri əngəlin silə bilər
</patch> </patch>
<patch id="video.speed.button.playbackSpeedButtonPatch"> <patch id="video.speed.button.playbackSpeedButtonPatch">
<string name="revanced_playback_speed_dialog_button_title">SÃŧrət dialoq dÃŧyməsini gÃļstər</string> <string name="revanced_playback_speed_dialog_button_title">SÃŧrət dialoq dÃŧyməsini gÃļstər</string>
<string name="revanced_playback_speed_dialog_button_summary_on">DÃŧymə gÃļstərilir. Oynatma sÃŧrətin standart olaraq qaytarmaq ÃŧçÃŧn toxunub saxla</string> <string name="revanced_playback_speed_dialog_button_summary_on">SÃŧrət dialoqu dÃŧyməsi gÃļrÃŧnÃŧr. Oxutma sÃŧrətini ilkin vəziyyətinə qaytarmaq ÃŧçÃŧn toxunub saxlayÄąn</string>
<string name="revanced_playback_speed_dialog_button_summary_off">DÃŧymə gÃļstərilmir</string> <string name="revanced_playback_speed_dialog_button_summary_off">SÃŧrət dialoqu dÃŧyməsi gÃļrÃŧnmÃŧr</string>
</patch> </patch>
<patch id="video.quality.button.videoQualityDialogButtonPatch"> <patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Video keyfiyyəti dÃŧyməsini gÃļstər</string> <string name="revanced_video_quality_dialog_button_title">Video keyfiyyəti dÃŧyməsini gÃļstər</string>
<string name="revanced_video_quality_dialog_button_summary_on">DÃŧymə gÃļrÃŧnÃŧr. Keyfiyyəti ilkin vəziyyətinə qaytarmaq ÃŧçÃŧn toxunub saxlayÄąn</string> <string name="revanced_video_quality_dialog_button_summary_on">Video keyfiyyəti dÃŧyməsi gÃļrÃŧnÃŧr. Keyfiyyəti ilkin vəziyyətinə qaytarmaq ÃŧçÃŧn toxunub saxlayÄąn</string>
<string name="revanced_video_quality_dialog_button_summary_off">DÃŧymə gÃļrÃŧnmÃŧr</string> <string name="revanced_video_quality_dialog_button_summary_off">Video keyfiyyəti dÃŧyməsi gÃļrÃŧnmÃŧr</string>
</patch> </patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch"> <patch id="video.speed.custom.customPlaybackSpeedPatch">
<string name="revanced_custom_speed_menu_title">Fərdi oynatma sÃŧrəti siyahÄąsÄą</string> <string name="revanced_custom_speed_menu_title">Fərdi oynatma sÃŧrəti siyahÄąsÄą</string>

View File

@@ -282,6 +282,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_video_recommendation_labels_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŧĐĩŅ‚ĐēŅ– Ņ€ŅĐēаĐŧĐĩĐŊĐ´Đ°Ņ†Ņ‹Đš Đ˛Ņ–Đ´ŅĐ°</string> <string name="revanced_hide_video_recommendation_labels_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŧĐĩŅ‚ĐēŅ– Ņ€ŅĐēаĐŧĐĩĐŊĐ´Đ°Ņ†Ņ‹Đš Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_hide_video_recommendation_labels_summary_on">МĐĩŅ‚ĐēŅ– ÂĢĐ›ŅŽĐ´ĐˇŅ– Ņ‚Đ°ĐēŅĐ°Đŧа ĐŗĐģŅĐ´ĐˇĐĩĐģŅ–Âģ Ņ– ÂĢВаĐŧ Ņ‚Đ°ĐēŅĐ°Đŧа ĐŧĐžĐļа ҁĐŋĐ°Đ´Đ°ĐąĐ°Ņ†Ņ†Đ°Âģ Ņž Đ˛Ņ‹ĐŊŅ–ĐēĐ°Ņ… ĐŋĐžŅˆŅƒĐē҃ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹Ņ</string> <string name="revanced_hide_video_recommendation_labels_summary_on">МĐĩŅ‚ĐēŅ– ÂĢĐ›ŅŽĐ´ĐˇŅ– Ņ‚Đ°ĐēŅĐ°Đŧа ĐŗĐģŅĐ´ĐˇĐĩĐģŅ–Âģ Ņ– ÂĢВаĐŧ Ņ‚Đ°ĐēŅĐ°Đŧа ĐŧĐžĐļа ҁĐŋĐ°Đ´Đ°ĐąĐ°Ņ†Ņ†Đ°Âģ Ņž Đ˛Ņ‹ĐŊŅ–ĐēĐ°Ņ… ĐŋĐžŅˆŅƒĐē҃ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹Ņ</string>
<string name="revanced_hide_video_recommendation_labels_summary_off">МĐĩŅ‚ĐēŅ– ÂĢĐ›ŅŽĐ´ĐˇŅ– Ņ‚Đ°ĐēŅĐ°Đŧа ĐŗĐģŅĐ´ĐˇĐĩĐģŅ–Âģ Ņ– ÂĢВаĐŧ Ņ‚Đ°ĐēŅĐ°Đŧа ĐŧĐžĐļа ҁĐŋĐ°Đ´Đ°ĐąĐ°Ņ†Ņ†Đ°Âģ Ņž Đ˛Ņ‹ĐŊŅ–ĐēĐ°Ņ… ĐŋĐžŅˆŅƒĐē҃ ĐŋаĐēаСаĐŊŅ‹Ņ</string> <string name="revanced_hide_video_recommendation_labels_summary_off">МĐĩŅ‚ĐēŅ– ÂĢĐ›ŅŽĐ´ĐˇŅ– Ņ‚Đ°ĐēŅĐ°Đŧа ĐŗĐģŅĐ´ĐˇĐĩĐģŅ–Âģ Ņ– ÂĢВаĐŧ Ņ‚Đ°ĐēŅĐ°Đŧа ĐŧĐžĐļа ҁĐŋĐ°Đ´Đ°ĐąĐ°Ņ†Ņ†Đ°Âģ Ņž Đ˛Ņ‹ĐŊŅ–ĐēĐ°Ņ… ĐŋĐžŅˆŅƒĐē҃ ĐŋаĐēаСаĐŊŅ‹Ņ</string>
<string name="revanced_hide_visual_spacer_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Đ˛Ņ–ĐˇŅƒĐ°ĐģҌĐŊŅ‹ ĐŋадСĐĩĐģҌĐŊŅ–Đē</string>
<string name="revanced_hide_visual_spacer_summary_on">Đ’Ņ–ĐˇŅƒĐ°ĐģҌĐŊŅ‹ ĐŋадСĐĩĐģҌĐŊŅ–Đē ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_visual_spacer_summary_off">Đ’Ņ–ĐˇŅƒĐ°ĐģҌĐŊŅ‹ ĐŋадСĐĩĐģҌĐŊŅ–Đē ĐŋаĐēаСаĐŊŅ‹</string>
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles --> <!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
<string name="revanced_hide_doodles_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ YouTube Doodles</string> <string name="revanced_hide_doodles_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ YouTube Doodles</string>
<string name="revanced_hide_doodles_summary_on">АĐŊŅ–ĐŧĐ°Ņ†Ņ‹Ņ YouTube Doodles ĐŊа ĐģĐ°ĐŗĐ°Ņ‚Ņ‹ĐŋĐĩ ŅŅ…Đ°Đ˛Đ°ĐŊĐ°Ņ</string> <string name="revanced_hide_doodles_summary_on">АĐŊŅ–ĐŧĐ°Ņ†Ņ‹Ņ YouTube Doodles ĐŊа ĐģĐ°ĐŗĐ°Ņ‚Ņ‹ĐŋĐĩ ŅŅ…Đ°Đ˛Đ°ĐŊĐ°Ņ</string>
@@ -342,18 +345,21 @@ Second \"item\" text"</string>
<string name="revanced_hide_podcast_section_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ÂĢПазĐŊĐ°Ņ‘Đŧ҆ĐĩŅŅ С ĐŋадĐēĐ°ŅŅ‚Đ°ĐŧÂģ</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_on">РаСдСĐĩĐģ ÂĢПазĐŊĐ°Ņ‘Đŧ҆ĐĩŅŅ С ĐŋадĐēĐ°ŅŅ‚Đ°ĐŧÂģ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_podcast_section_summary_off">РаСдСĐĩĐģ ÂĢПазĐŊĐ°Ņ‘Đŧ҆ĐĩŅŅ С ĐŋадĐēĐ°ŅŅ‚Đ°ĐŧÂģ ĐŋаĐēаСаĐŊŅ‹</string> <string name="revanced_hide_podcast_section_summary_off">РаСдСĐĩĐģ ÂĢПазĐŊĐ°Ņ‘Đŧ҆ĐĩŅŅ С ĐŋадĐēĐ°ŅŅ‚Đ°ĐŧÂģ ĐŋаĐēаСаĐŊŅ‹</string>
<string name="revanced_hide_featured_section_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Ņ€ŅĐēаĐŧĐĩĐŊдаваĐŊŅ‹ ĐēаĐŊŅ‚ŅĐŊŅ‚</string> <string name="revanced_hide_featured_links_section_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Đ˛Ņ‹ĐąŅ€Đ°ĐŊŅ‹Ņ ҁĐŋĐ°ŅŅ‹ĐģĐēŅ–</string>
<string name="revanced_hide_featured_section_summary_on">РаСдСĐĩĐģ Ņ€ŅĐēаĐŧĐĩĐŊдаваĐŊĐ°ĐŗĐ° ĐēаĐŊŅ‚ŅĐŊŅ‚Ņƒ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string> <string name="revanced_hide_featured_links_section_summary_on">РаСдСĐĩĐģ С Ņ€ŅĐēаĐŧĐĩĐŊдаваĐŊŅ‹ĐŧŅ– ҁĐŋĐ°ŅŅ‹ĐģĐēаĐŧŅ– ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_featured_section_summary_off">РаСдСĐĩĐģ Ņ€ŅĐēаĐŧĐĩĐŊдаваĐŊĐ°ĐŗĐ° ĐēаĐŊŅ‚ŅĐŊŅ‚Ņƒ ĐŋаĐēаСаĐŊŅ‹</string> <string name="revanced_hide_featured_links_section_summary_off">РаСдСĐĩĐģ С Ņ€ŅĐēаĐŧĐĩĐŊдаваĐŊŅ‹ĐŧŅ– ҁĐŋĐ°ŅŅ‹ĐģĐēаĐŧŅ– ĐŋаĐēаСаĐŊŅ‹</string>
<string name="revanced_hide_featured_videos_section_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Ņ€ŅĐēаĐŧĐĩĐŊдаваĐŊŅ‹Ņ Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_hide_featured_videos_section_summary_on">РаСдСĐĩĐģ С Ņ€ŅĐēаĐŧĐĩĐŊдаваĐŊŅ‹ĐŧŅ– Đ˛Ņ–Đ´ŅĐ° ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_featured_videos_section_summary_off">РаСдСĐĩĐģ С Ņ€ŅĐēаĐŧĐĩĐŊдаваĐŊŅ‹ĐŧŅ– Đ˛Ņ–Đ´ŅĐ° ĐŋаĐēаСаĐŊŅ‹</string>
<string name="revanced_hide_info_cards_section_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Ņ–ĐŊŅ„Đ°Ņ€ĐŧĐ°Ņ†Ņ‹ĐšĐŊŅ‹Ņ ĐēĐ°Ņ€Ņ‚ĐēŅ–</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_on">РаСдСĐĩĐģ Ņ–ĐŊŅ„Đ°Ņ€ĐŧĐ°Ņ†Ņ‹ĐšĐŊҋ҅ ĐēĐ°Ņ€Ņ‚Đ°Đē ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_info_cards_section_summary_off">ПаĐēаСваĐĩŅ†Ņ†Đ° Ņ€Đ°ĐˇĐ´ĐˇĐĩĐģ Ņ–ĐŊŅ„Đ°Ņ€ĐŧĐ°Ņ†Ņ‹ĐšĐŊҋ҅ ĐēĐ°Ņ€Ņ‚</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_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ÂĢКĐģŅŽŅ‡Đ°Đ˛Ņ‹Ņ ĐēаĐŊŅ†ŅĐŋ҆ҋҖÂģ</string>
<string name="revanced_hide_key_concepts_section_summary_on">РаСдСĐĩĐģ ÂĢКĐģŅŽŅ‡Đ°Đ˛Ņ‹Ņ ĐēаĐŊŅ†ŅĐŋ҆ҋҖÂģ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</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_key_concepts_section_summary_off">РаСдСĐĩĐģ ÂĢКĐģŅŽŅ‡Đ°Đ˛Ņ‹Ņ ĐēаĐŊŅ†ŅĐŋ҆ҋҖÂģ ĐŋаĐēаСаĐŊŅ‹</string>
<string name="revanced_hide_description_subscribe_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ÂĢПадĐŋŅ–ŅĐ°Ņ†Ņ†Đ°Âģ</string> <string name="revanced_hide_subscribe_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ÂĢПадĐŋŅ–ŅĐ°Ņ†Ņ†Đ°Âģ</string>
<string name="revanced_hide_description_subscribe_button_summary_on">КĐŊĐžĐŋĐēа ĐŋадĐŋҖҁĐēŅ– ŅŅ…Đ°Đ˛Đ°ĐŊа</string> <string name="revanced_hide_subscribe_button_summary_on">КĐŊĐžĐŋĐēа ÂĢПадĐŋŅ–ŅĐ°Ņ†Ņ†Đ°Âģ ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_description_subscribe_button_summary_off">КĐŊĐžĐŋĐēа ĐŋадĐŋҖҁĐēŅ– ĐŋаĐēаСаĐŊа</string> <string name="revanced_hide_subscribe_button_summary_off">КĐŊĐžĐŋĐēа ÂĢПадĐŋŅ–ŅĐ°Ņ†Ņ†Đ°Âģ ĐŋаĐēаСаĐŊа</string>
<string name="revanced_hide_transcript_section_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ŅŅ‚ŅĐŊĐ°ĐŗŅ€Đ°Đŧ҃</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_on">РаСдСĐĩĐģ ŅŅ‚ŅĐŊĐ°ĐŗŅ€Đ°ĐŧŅ‹ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_transcript_section_summary_off">ПаĐēаСваĐĩŅ†Ņ†Đ° Ņ€Đ°ĐˇĐ´ĐˇĐĩĐģ ŅŅ‚ŅĐŊĐ°ĐŗŅ€Đ°ĐŧŅ‹</string> <string name="revanced_hide_transcript_section_summary_off">ПаĐēаСваĐĩŅ†Ņ†Đ° Ņ€Đ°ĐˇĐ´ĐˇĐĩĐģ ŅŅ‚ŅĐŊĐ°ĐŗŅ€Đ°ĐŧŅ‹</string>
@@ -375,24 +381,32 @@ Second \"item\" text"</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">ПаĐēаСаĐŊŅ‹ Ņž ĐŗŅ–ŅŅ‚ĐžŅ€Ņ‹Ņ– ĐŋŅ€Đ°ĐŗĐģŅĐ´Đ°Ņž</string> <string name="revanced_hide_filter_bar_feed_in_history_summary_off">ПаĐēаСаĐŊŅ‹ Ņž ĐŗŅ–ŅŅ‚ĐžŅ€Ņ‹Ņ– ĐŋŅ€Đ°ĐŗĐģŅĐ´Đ°Ņž</string>
<string name="revanced_channel_screen_title">ĐĄŅ‚Đ°Ņ€ĐžĐŊĐēа ĐēаĐŊаĐģа</string> <string name="revanced_channel_screen_title">ĐĄŅ‚Đ°Ņ€ĐžĐŊĐēа ĐēаĐŊаĐģа</string>
<string name="revanced_channel_screen_summary">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ айО ĐŋаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐēаĐŧĐŋаĐŊĐĩĐŊ҂ҋ ŅŅ‚Đ°Ņ€ĐžĐŊĐēŅ– ĐēаĐŊаĐģа</string> <string name="revanced_channel_screen_summary">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ айО ĐŋаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐēаĐŧĐŋаĐŊĐĩĐŊ҂ҋ ŅŅ‚Đ°Ņ€ĐžĐŊĐēŅ– ĐēаĐŊаĐģа</string>
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_community_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ÂĢĐĄŅƒĐŋĐžĐģҌĐŊĐ°ŅŅ†ŅŒÂģ</string>
<string name="revanced_hide_community_button_summary_on">КĐŊĐžĐŋĐēа ҁ҃ĐŋĐžĐģҌĐŊĐ°ŅŅ†Ņ– ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_community_button_summary_off">КĐŊĐžĐŋĐēа ҁ҃ĐŋĐžĐģҌĐŊĐ°ŅŅ†Ņ– ĐŋаĐēаСаĐŊа</string>
<!-- 'For You' should be translated using the same localized wording YouTube displays. --> <!-- '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_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋаĐģŅ–Ņ†Ņƒ ÂĢДĐģŅ Đ˛Đ°ŅÂģ</string>
<string name="revanced_hide_for_you_shelf_summary_on">ПаĐģŅ–Ņ†Đ° \"ДĐģŅ Đ˛Đ°Ņ\" ŅŅ…Đ°Đ˛Đ°ĐŊĐ°Ņ</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_off">ПаĐģŅ–Ņ†Đ° \"ДĐģŅ Đ˛Đ°Ņ\" ĐŋаĐēаСаĐŊĐ°Ņ</string>
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_join_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ДаĐģŅƒŅ‡Ņ‹Ņ†Ņ†Đ°</string>
<string name="revanced_hide_join_button_summary_on">КĐŊĐžĐŋĐēа ДаĐģŅƒŅ‡Ņ‹Ņ†Ņ†Đ° ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_join_button_summary_off">КĐŊĐžĐŋĐēа ДаĐģŅƒŅ‡Ņ‹Ņ†Ņ†Đ° ĐŋаĐēаСаĐŊа</string>
<string name="revanced_hide_links_preview_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´ ҁĐŋĐ°ŅŅ‹ĐģаĐē</string> <string name="revanced_hide_links_preview_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´ ҁĐŋĐ°ŅŅ‹ĐģаĐē</string>
<string name="revanced_hide_links_preview_summary_on">ПаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´ ҁĐŋĐ°ŅŅ‹ĐģаĐē ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string> <string name="revanced_hide_links_preview_summary_on">ПаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´ ҁĐŋĐ°ŅŅ‹ĐģаĐē ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_links_preview_summary_off">ПаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´ ҁĐŋĐ°ŅŅ‹ĐģаĐē ĐŋаĐēаСаĐŊŅ‹</string> <string name="revanced_hide_links_preview_summary_off">ПаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´ ҁĐŋĐ°ŅŅ‹ĐģаĐē ĐŋаĐēаСаĐŊŅ‹</string>
<string name="revanced_hide_members_shelf_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋаĐģŅ–Ņ†Ņƒ ŅžĐ´ĐˇĐĩĐģҌĐŊŅ–ĐēĐ°Ņž</string> <string name="revanced_hide_members_shelf_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋаĐģŅ–Ņ†Ņƒ ŅžĐ´ĐˇĐĩĐģҌĐŊŅ–ĐēĐ°Ņž</string>
<string name="revanced_hide_members_shelf_summary_on">ПаĐģŅ–Ņ†Đ° ŅžĐ´ĐˇĐĩĐģҌĐŊŅ–ĐēĐ°Ņž ŅŅ…Đ°Đ˛Đ°ĐŊĐ°Ņ</string> <string name="revanced_hide_members_shelf_summary_on">ПаĐģŅ–Ņ†Đ° ŅžĐ´ĐˇĐĩĐģҌĐŊŅ–ĐēĐ°Ņž ŅŅ…Đ°Đ˛Đ°ĐŊĐ°Ņ</string>
<string name="revanced_hide_members_shelf_summary_off">ПаĐģŅ–Ņ†Đ° ŅžĐ´ĐˇĐĩĐģҌĐŊŅ–ĐēĐ°Ņž ĐŋаĐēаСаĐŊа</string> <string name="revanced_hide_members_shelf_summary_off">ПаĐģŅ–Ņ†Đ° ŅžĐ´ĐˇĐĩĐģҌĐŊŅ–ĐēĐ°Ņž ĐŋаĐēаСаĐŊа</string>
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. --> <!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_community_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ \"НавĐĩĐ´Đ°Ņ†ŅŒ ҁ҃ĐŋĐžĐģҌĐŊĐ°ŅŅ†ŅŒ\"</string> <string name="revanced_hide_store_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ĐšŅ€Đ°Đŧа</string>
<string name="revanced_hide_visit_community_button_summary_on">КĐŊĐžĐŋĐēа \"НавĐĩĐ´Đ°Ņ†ŅŒ ҁ҃ĐŋĐžĐģҌĐŊĐ°ŅŅ†ŅŒ\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string> <string name="revanced_hide_store_button_summary_on">КĐŊĐžĐŋĐēа ĐšŅ€Đ°Đŧа ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_visit_community_button_summary_off">КĐŊĐžĐŋĐēа \"НавĐĩĐ´Đ°Ņ†ŅŒ ҁ҃ĐŋĐžĐģҌĐŊĐ°ŅŅ†ŅŒ\" ĐŋаĐēаСаĐŊĐ°Ņ</string> <string name="revanced_hide_store_button_summary_off">КĐŊĐžĐŋĐēа ĐšŅ€Đ°Đŧа ĐŋаĐēаСаĐŊа</string>
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. --> <!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_store_button_title">ĐĄŅ…Đ°Đ˛Đ°ĐšŅ†Đĩ ĐēĐŊĐžĐŋĐē҃ \"НавĐĩĐ´Đ°ĐšŅ†Đĩ ĐēŅ€Đ°Đŧ҃\" ĐŊа ŅŅ‚Đ°Ņ€ĐžĐŊĐēĐ°Ņ… ĐēаĐŊаĐģа</string> <string name="revanced_hide_subscribe_button_in_channel_page_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ПадĐŋŅ–ŅĐ°Ņ†Ņ†Đ°</string>
<string name="revanced_hide_visit_store_button_summary_on">КĐŊĐžĐŋĐēа \"НавĐĩĐ´Đ°Ņ†ŅŒ ĐēŅ€Đ°Đŧ҃\" ŅŅ…Đ°Đ˛Đ°ĐŊĐ°Ņ</string> <string name="revanced_hide_subscribe_button_in_channel_page_summary_on">КĐŊĐžĐŋĐēа ПадĐŋŅ–ŅĐ°Ņ†Ņ†Đ° ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_visit_store_button_summary_off">КĐŊĐžĐŋĐēа \"НавĐĩĐ´Đ°Ņ†ŅŒ ĐēŅ€Đ°Đŧ҃\" ĐŋаĐēаСаĐŊĐ°Ņ</string> <string name="revanced_hide_subscribe_button_in_channel_page_summary_off">КĐŊĐžĐŋĐēа ПадĐŋŅ–ŅĐ°Ņ†Ņ†Đ° ĐŋаĐēаСаĐŊа</string>
<string name="revanced_comments_screen_title">КаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Ņ–</string> <string name="revanced_comments_screen_title">КаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Ņ–</string>
<string name="revanced_comments_screen_summary">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ айО ĐŋаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐēаĐŧĐŋаĐŊĐĩĐŊ҂ҋ Ņ€Đ°ĐˇĐ´ĐˇĐĩĐģа ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹ŅŅž</string> <string name="revanced_comments_screen_summary">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ айО ĐŋаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐēаĐŧĐŋаĐŊĐĩĐŊ҂ҋ Ņ€Đ°ĐˇĐ´ĐˇĐĩĐģа ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹ŅŅž</string>
<string name="revanced_hide_comments_ai_chat_summary_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ СвОдĐē҃ Ņ‡Đ°Ņ‚Đ° ŅĐ° ŅˆŅ‚ŅƒŅ‡ĐŊŅ‹Đŧ Ņ–ĐŊŅ‚ŅĐģĐĩĐēŅ‚Đ°Đŧ</string> <string name="revanced_hide_comments_ai_chat_summary_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ СвОдĐē҃ Ņ‡Đ°Ņ‚Đ° ŅĐ° ŅˆŅ‚ŅƒŅ‡ĐŊŅ‹Đŧ Ņ–ĐŊŅ‚ŅĐģĐĩĐēŅ‚Đ°Đŧ</string>
@@ -534,11 +548,11 @@ Second \"item\" text"</string>
<string name="revanced_share_copy_url_success">URL ҁĐēаĐŋŅ–Ņ€Đ°Đ˛Đ°ĐŊŅ‹ Ņž ĐąŅƒŅ„ĐĩŅ€ айĐŧĐĩĐŊ҃</string> <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_timestamp_success">URL-Đ°Đ´Ņ€Đ°Ņ С ĐŋаСĐŊаĐēаК Ņ‡Đ°ŅŅƒ ҁĐēаĐŋŅ–Ņ€Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_copy_video_url_title">ПаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ҁĐēаĐŋŅ–Ņ€Đ°Đ˛Đ°ĐŊĐŊŅ URL Đ˛Ņ–Đ´ŅĐ°</string> <string name="revanced_copy_video_url_title">ПаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ҁĐēаĐŋŅ–Ņ€Đ°Đ˛Đ°ĐŊĐŊŅ URL Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_copy_video_url_summary_on">КĐŊĐžĐŋĐēа ĐŋаĐēаСаĐŊа. ĐĐ°Ņ†Ņ–ŅĐŊҖ҆Đĩ, Đēай ҁĐēаĐŋŅ–ŅĐ˛Đ°Ņ†ŅŒ URL Đ˛Ņ–Đ´ŅĐ°. ĐĐ°Ņ†Ņ–ŅĐŊҖ҆Đĩ Ņ– ŅžŅ‚Ņ€Ņ‹ĐŧĐģŅ–Đ˛Đ°ĐšŅ†Đĩ, Đēай ҁĐēаĐŋŅ–ŅĐ˛Đ°Ņ†ŅŒ С ĐŋаСĐŊаĐēаК Ņ‡Đ°ŅŅƒ</string> <string name="revanced_copy_video_url_summary_on">КĐŊĐžĐŋĐēа \"КаĐŋŅ–ŅĐ˛Đ°Ņ†ŅŒ URL Đ˛Ņ–Đ´ŅĐ°\" ĐŋаĐēаСаĐŊа. ĐĐ°Ņ†Ņ–ŅĐŊҖ҆Đĩ, Đēай ҁĐēаĐŋŅ–ŅĐ˛Đ°Ņ†ŅŒ URL Đ˛Ņ–Đ´ŅĐ°. ĐĐ°Ņ†Ņ–ŅĐŊҖ҆Đĩ Ņ– ŅžŅ‚Ņ€Ņ‹ĐŧĐģŅ–Đ˛Đ°ĐšŅ†Đĩ, Đēай ҁĐēаĐŋŅ–ŅĐ˛Đ°Ņ†ŅŒ С ĐŋаСĐŊаĐēаК Ņ‡Đ°ŅŅƒ</string>
<string name="revanced_copy_video_url_summary_off">КĐŊĐžĐŋĐēа ĐŊĐĩ ĐŋаĐēаСваĐĩŅ†Ņ†Đ°</string> <string name="revanced_copy_video_url_summary_off">КĐŊĐžĐŋĐēа \"КаĐŋŅ–ŅĐ˛Đ°Ņ†ŅŒ URL Đ˛Ņ–Đ´ŅĐ°\" ĐŊĐĩ ĐŋаĐēаСаĐŊа</string>
<string name="revanced_copy_video_url_timestamp_title">ПаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ URL-Đ°Đ´Ņ€Đ°Ņ С Ņ‡Đ°ŅĐžĐ˛Đ°Đš ĐŋаСĐŊаĐēаК</string> <string name="revanced_copy_video_url_timestamp_title">ПаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ URL-Đ°Đ´Ņ€Đ°Ņ С Ņ‡Đ°ŅĐžĐ˛Đ°Đš ĐŋаСĐŊаĐēаК</string>
<string name="revanced_copy_video_url_timestamp_summary_on">КĐŊĐžĐŋĐēа ĐŋаĐēаСаĐŊа. ĐĐ°Ņ†Ņ–ŅĐŊҖ҆Đĩ, Đēай ҁĐēаĐŋŅ–ŅĐ˛Đ°Ņ†ŅŒ URL Đ˛Ņ–Đ´ŅĐ° С ĐŋаСĐŊаĐēаК Ņ‡Đ°ŅŅƒ. ĐĐ°Ņ†Ņ–ŅĐŊҖ҆Đĩ Ņ– ŅžŅ‚Ņ€Ņ‹ĐŧĐģŅ–Đ˛Đ°ĐšŅ†Đĩ, Đēай ҁĐēаĐŋŅ–ŅĐ˛Đ°Ņ†ŅŒ ĐąĐĩС ĐŋаСĐŊаĐēŅ– Ņ‡Đ°ŅŅƒ</string> <string name="revanced_copy_video_url_timestamp_summary_on">КĐŊĐžĐŋĐēа \"КаĐŋŅ–ŅĐ˛Đ°Ņ†ŅŒ URL С ĐŋаСĐŊаĐēаК Ņ‡Đ°ŅŅƒ\" ĐŋаĐēаСаĐŊа. ĐĐ°Ņ†Ņ–ŅĐŊҖ҆Đĩ, Đēай ҁĐēаĐŋŅ–ŅĐ˛Đ°Ņ†ŅŒ URL Đ˛Ņ–Đ´ŅĐ° С ĐŋаСĐŊаĐēаК Ņ‡Đ°ŅŅƒ. ĐĐ°Ņ†Ņ–ŅĐŊҖ҆Đĩ Ņ– ŅžŅ‚Ņ€Ņ‹ĐŧĐģŅ–Đ˛Đ°ĐšŅ†Đĩ, Đēай ҁĐēаĐŋŅ–ŅĐ˛Đ°Ņ†ŅŒ ĐąĐĩС ĐŋаСĐŊаĐēŅ– Ņ‡Đ°ŅŅƒ</string>
<string name="revanced_copy_video_url_timestamp_summary_off">КĐŊĐžĐŋĐēа ĐŊĐĩ ĐŋаĐēаСваĐĩŅ†Ņ†Đ°</string> <string name="revanced_copy_video_url_timestamp_summary_off">КĐŊĐžĐŋĐēа \"КаĐŋŅ–ŅĐ˛Đ°Ņ†ŅŒ URL С ĐŋаСĐŊаĐēаК Ņ‡Đ°ŅŅƒ\" ĐŊĐĩ ĐŋаĐēаСаĐŊа</string>
</patch> </patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch"> <patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
<string name="revanced_remove_viewer_discretion_dialog_title">Đ’Ņ‹Đ´Đ°ĐģŅ–Ņ†ŅŒ Đ´Ņ‹ŅĐģĐžĐŗĐ°Đ˛Đ°Đĩ аĐēĐŊĐž ĐŋŅ€Đ°Đ˛Đ° ĐŋŅ€Đ°ĐŗĐģŅĐ´Ņƒ</string> <string name="revanced_remove_viewer_discretion_dialog_title">Đ’Ņ‹Đ´Đ°ĐģŅ–Ņ†ŅŒ Đ´Ņ‹ŅĐģĐžĐŗĐ°Đ˛Đ°Đĩ аĐēĐŊĐž ĐŋŅ€Đ°Đ˛Đ° ĐŋŅ€Đ°ĐŗĐģŅĐ´Ņƒ</string>
@@ -547,7 +561,7 @@ Second \"item\" text"</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Đ“ŅŅ‚Đ° ĐŊĐĩ Đ°ĐąŅ‹Ņ…ĐžĐ´ĐˇŅ–Ņ†ŅŒ ŅƒĐˇŅ€ĐžŅŅ‚Đ°Đ˛Đ°Đĩ айĐŧĐĩĐļаваĐŊĐŊĐĩ. ЁĐŊ ĐŋŅ€ĐžŅŅ‚Đ° ĐŋҀҋĐŧаĐĩ ĐŗŅŅ‚Đ° Đ°ŅžŅ‚Đ°ĐŧĐ°Ņ‚Ņ‹Ņ‡ĐŊа.</string> <string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Đ“ŅŅ‚Đ° ĐŊĐĩ Đ°ĐąŅ‹Ņ…ĐžĐ´ĐˇŅ–Ņ†ŅŒ ŅƒĐˇŅ€ĐžŅŅ‚Đ°Đ˛Đ°Đĩ айĐŧĐĩĐļаваĐŊĐŊĐĩ. ЁĐŊ ĐŋŅ€ĐžŅŅ‚Đ° ĐŋҀҋĐŧаĐĩ ĐŗŅŅ‚Đ° Đ°ŅžŅ‚Đ°ĐŧĐ°Ņ‚Ņ‹Ņ‡ĐŊа.</string>
</patch> </patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch"> <patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">АдĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ ҃ҁĐŋĐģŅ‹Đ˛Đ°ĐģҌĐŊаĐĩ аĐēĐŊĐž ÂĢĐŖĐ˛Đ°Ņ…ĐžĐ´ ҃ ĐĸБÂģ</string> <string name="revanced_disable_signin_to_tv_popup_title">АдĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ ҃ҁĐŋĐģŅ‹Đ˛Đ°ŅŽŅ‡Đ°Đĩ аĐēĐŊĐž \"ĐŖĐ˛Đ°ĐšŅŅ†Ņ– Ņž ĐĸБ\"</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">ĐŖŅĐŋĐģŅ‹Đ˛Đ°ĐģҌĐŊаĐĩ аĐēĐŊĐž ÂĢĐŖĐ˛Đ°Ņ…ĐžĐ´ ҃ ĐĸБÂģ адĐēĐģŅŽŅ‡Đ°ĐŊа</string> <string name="revanced_disable_signin_to_tv_popup_summary_on">ĐŖŅĐŋĐģŅ‹Đ˛Đ°ĐģҌĐŊаĐĩ аĐēĐŊĐž ÂĢĐŖĐ˛Đ°Ņ…ĐžĐ´ ҃ ĐĸБÂģ адĐēĐģŅŽŅ‡Đ°ĐŊа</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">ĐŖŅĐŋĐģŅ‹Đ˛Đ°ĐģҌĐŊаĐĩ аĐēĐŊĐž ÂĢĐŖĐ˛Đ°Ņ…ĐžĐ´ ҃ ĐĸБÂģ ҃ĐēĐģŅŽŅ‡Đ°ĐŊа</string> <string name="revanced_disable_signin_to_tv_popup_summary_off">ĐŖŅĐŋĐģŅ‹Đ˛Đ°ĐģҌĐŊаĐĩ аĐēĐŊĐž ÂĢĐŖĐ˛Đ°Ņ…ĐžĐ´ ҃ ĐĸБÂģ ҃ĐēĐģŅŽŅ‡Đ°ĐŊа</string>
</patch> </patch>
@@ -679,7 +693,7 @@ Second \"item\" text"</string>
<string name="revanced_hide_download_button_summary_on">КĐŊĐžĐŋĐēа ĐˇĐ°ĐŗŅ€ŅƒĐˇĐēŅ– ŅŅ…Đ°Đ˛Đ°ĐŊа</string> <string name="revanced_hide_download_button_summary_on">КĐŊĐžĐŋĐēа ĐˇĐ°ĐŗŅ€ŅƒĐˇĐēŅ– ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_download_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ĐˇĐ°ĐŗŅ€ŅƒĐˇĐēŅ–</string> <string name="revanced_hide_download_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ĐˇĐ°ĐŗŅ€ŅƒĐˇĐēŅ–</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays. <!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. --> This button only shows on videos uploaded by the logged-in user. -->
<string name="revanced_hide_hype_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Ņ…Đ°ĐšĐŋ</string> <string name="revanced_hide_hype_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Ņ…Đ°ĐšĐŋ</string>
<string name="revanced_hide_hype_button_summary_on">КĐŊĐžĐŋĐēа Hype ŅŅ…Đ°Đ˛Đ°ĐŊĐ°Ņ</string> <string name="revanced_hide_hype_button_summary_on">КĐŊĐžĐŋĐēа Hype ŅŅ…Đ°Đ˛Đ°ĐŊĐ°Ņ</string>
<string name="revanced_hide_hype_button_summary_off">КĐŊĐžĐŋĐēа Ņ…Đ°ĐšĐŋ҃ ĐŋаĐēаСаĐŊа</string> <string name="revanced_hide_hype_button_summary_off">КĐŊĐžĐŋĐēа Ņ…Đ°ĐšĐŋ҃ ĐŋаĐēаСаĐŊа</string>
@@ -800,10 +814,11 @@ Second \"item\" text"</string>
<string name="revanced_hide_player_flyout_audio_track_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŗŅƒĐēĐ°Đ˛ŅƒŅŽ Đ´Đ°Ņ€ĐžĐļĐē҃</string> <string name="revanced_hide_player_flyout_audio_track_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŗŅƒĐēĐ°Đ˛ŅƒŅŽ Đ´Đ°Ņ€ĐžĐļĐē҃</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">МĐĩĐŊŅŽ ĐŗŅƒĐēавОК Đ´Đ°Ņ€ĐžĐļĐēŅ– ŅŅ…Đ°Đ˛Đ°ĐŊа</string> <string name="revanced_hide_player_flyout_audio_track_summary_on">МĐĩĐŊŅŽ ĐŗŅƒĐēавОК Đ´Đ°Ņ€ĐžĐļĐēŅ– ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_player_flyout_audio_track_summary_off">АдĐģŅŽŅŅ‚Ņ€ŅƒĐĩŅ†Ņ†Đ° ĐŧĐĩĐŊŅŽ ĐŗŅƒĐēавОК Đ´Đ°Ņ€ĐžĐļĐēŅ–</string> <string name="revanced_hide_player_flyout_audio_track_summary_off">АдĐģŅŽŅŅ‚Ņ€ŅƒĐĩŅ†Ņ†Đ° ĐŧĐĩĐŊŅŽ ĐŗŅƒĐēавОК Đ´Đ°Ņ€ĐžĐļĐēŅ–</string>
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. --> <!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
'Android No SDK' must be kept untranslated. -->
<string name="revanced_hide_player_flyout_audio_track_not_available">"МĐĩĐŊŅŽ Đ°ŅžĐ´Ņ‹ŅĐ´Đ°Ņ€ĐžĐļĐēŅ– ŅŅ…Đ°Đ˛Đ°ĐŊа <string name="revanced_hide_player_flyout_audio_track_not_available">"МĐĩĐŊŅŽ Đ°ŅžĐ´Ņ‹ŅĐ´Đ°Ņ€ĐžĐļĐēŅ– ŅŅ…Đ°Đ˛Đ°ĐŊа
Каб ĐŋаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐŧĐĩĐŊŅŽ Đ°ŅžĐ´Ņ‹ŅĐ´Đ°Ņ€ĐžĐļĐēŅ–, СĐŧŅĐŊҖ҆Đĩ \"ПадĐŧĐĩĐŊа Đ˛Ņ–Đ´ŅĐ°ĐŋĐ°Ņ‚ĐžĐēĐ°Ņž\" ĐŊа iPadOS"</string> Каб ĐŋаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐŧĐĩĐŊŅŽ Đ°ŅžĐ´Ņ‹ŅĐ´Đ°Ņ€ĐžĐļĐēŅ–, СĐŧĐĩĐŊҖ҆Đĩ \"ІĐŧŅ–Ņ‚Đ°Ņ†Ņ‹Ņ Đ˛Ņ–Đ´ŅĐ°ĐŋĐ°Ņ‚ĐžĐēĐ°Ņž\" ĐŊа \"Android No SDK\""</string>
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- '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_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_on">МĐĩĐŊŅŽ ĐŋŅ€Đ°ĐŗĐģŅĐ´Ņƒ Ņž VR ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
@@ -879,13 +894,16 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_history_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Shorts С ĐŗŅ–ŅŅ‚ĐžŅ€Ņ‹Ņ– ĐŋŅ€Đ°ĐŗĐģŅĐ´Đ°Ņž</string> <string name="revanced_hide_shorts_history_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ Shorts С ĐŗŅ–ŅŅ‚ĐžŅ€Ņ‹Ņ– ĐŋŅ€Đ°ĐŗĐģŅĐ´Đ°Ņž</string>
<string name="revanced_hide_shorts_history_summary_on">ĐĄŅ…Đ°Đ˛Đ°ĐŊа Ņž ĐŗŅ–ŅŅ‚ĐžŅ€Ņ‹Ņ– ĐŋŅ€Đ°ĐŗĐģŅĐ´Đ°Ņž</string> <string name="revanced_hide_shorts_history_summary_on">ĐĄŅ…Đ°Đ˛Đ°ĐŊа Ņž ĐŗŅ–ŅŅ‚ĐžŅ€Ņ‹Ņ– ĐŋŅ€Đ°ĐŗĐģŅĐ´Đ°Ņž</string>
<string name="revanced_hide_shorts_history_summary_off">ПаĐēаСаĐŊŅ‹ Ņž ĐŗŅ–ŅŅ‚ĐžŅ€Ņ‹Ņ– ĐŋŅ€Đ°ĐŗĐģŅĐ´Đ°Ņž</string> <string name="revanced_hide_shorts_history_summary_off">ПаĐēаСаĐŊŅ‹ Ņž ĐŗŅ–ŅŅ‚ĐžŅ€Ņ‹Ņ– ĐŋŅ€Đ°ĐŗĐģŅĐ´Đ°Ņž</string>
<string name="revanced_hide_shorts_super_thanks_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ÂĢĐšŅƒĐŋŅ–Ņ†ŅŒ Super ThanksÂģ</string> <string name="revanced_hide_shorts_auto_dubbed_label_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŧĐĩŅ‚Đē҃ \"ĐŅžŅ‚Đ°ĐŧĐ°Ņ‚Ņ‹Ņ‡ĐŊŅ‹ Đ´ŅƒĐąĐģŅĐļ\"</string>
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">НадĐŋҖҁ С Đ°ŅžŅ‚Đ°Đ´ŅƒĐąĐģŅĐļĐžĐŧ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_shorts_auto_dubbed_label_summary_off">НадĐŋҖҁ С Đ°ŅžŅ‚Đ°Đ´ŅƒĐąĐģŅĐļĐžĐŧ ĐŋаĐēаСаĐŊŅ‹</string>
<string name="revanced_hide_shorts_super_thanks_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ \"ĐĐ°ĐąŅ‹Ņ†ŅŒ Super Thanks\"</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_on">КĐŊĐžĐŋĐēа ÂĢĐĐ°ĐąŅ‹Ņ†ŅŒ Super ThanksÂģ ŅŅ…Đ°Đ˛Đ°ĐŊа</string> <string name="revanced_hide_shorts_super_thanks_button_summary_on">КĐŊĐžĐŋĐēа ÂĢĐĐ°ĐąŅ‹Ņ†ŅŒ Super ThanksÂģ ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_off">КĐŊĐžĐŋĐēа ÂĢĐĐ°ĐąŅ‹Ņ†ŅŒ Super ThanksÂģ ĐŋаĐēаСаĐŊа</string> <string name="revanced_hide_shorts_super_thanks_button_summary_off">КĐŊĐžĐŋĐēа ÂĢĐĐ°ĐąŅ‹Ņ†ŅŒ Super ThanksÂģ ĐŋаĐēаСаĐŊа</string>
<string name="revanced_hide_shorts_effect_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ŅŅ„ĐĩĐēŅ‚Ņƒ</string> <string name="revanced_hide_shorts_effect_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ŅŅ„ĐĩĐēŅ‚Ņƒ</string>
<string name="revanced_hide_shorts_effect_button_summary_on">КĐŊĐžĐŋĐēа ŅŅ„ĐĩĐēŅ‚Ņƒ ŅŅ…Đ°Đ˛Đ°ĐŊа</string> <string name="revanced_hide_shorts_effect_button_summary_on">КĐŊĐžĐŋĐēа ŅŅ„ĐĩĐēŅ‚Ņƒ ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_effect_button_summary_off">КĐŊĐžĐŋĐēа ŅŅ„ĐĩĐēŅ‚Ņƒ ĐŋаĐēаСаĐŊа</string> <string name="revanced_hide_shorts_effect_button_summary_off">КĐŊĐžĐŋĐēа ŅŅ„ĐĩĐēŅ‚Ņƒ ĐŋаĐēаСаĐŊа</string>
<string name="revanced_hide_shorts_green_screen_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ÂĢĐ—ŅĐģŅ‘ĐŊŅ‹ ŅĐēŅ€Đ°ĐŊÂģ</string> <string name="revanced_hide_shorts_green_screen_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ \"Đ—ŅĐģŅ‘ĐŊŅ‹ ŅĐēŅ€Đ°ĐŊ\"</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">КĐŊĐžĐŋĐēа ҁ СĐĩĐģŅ‘ĐŊŅ‹Đŧ ŅĐēŅ€Đ°ĐŊĐžĐŧ 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_green_screen_button_summary_off">КĐŊĐžĐŋĐēа ҁ СĐĩĐģŅ‘ĐŊŅ‹Đŧ ŅĐēŅ€Đ°ĐŊĐžĐŧ Shorts ĐžŅ‚ĐžĐąŅ€Đ°ĐļаĐĩŅ‚ŅŅ</string>
<string name="revanced_hide_shorts_hashtag_button_title">ĐĄĐēŅ€Ņ‹Ņ‚ŅŒ Ņ…ĐĩŅˆŅ‚ĐĩĐŗ-ĐēĐŊĐžĐŋĐē҃ Shorts</string> <string name="revanced_hide_shorts_hashtag_button_title">ĐĄĐēŅ€Ņ‹Ņ‚ŅŒ Ņ…ĐĩŅˆŅ‚ĐĩĐŗ-ĐēĐŊĐžĐŋĐē҃ Shorts</string>
@@ -895,10 +913,13 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_join_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ÂĢДаĐģŅƒŅ‡Ņ‹Ņ†Ņ†Đ°Âģ</string> <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_on">КĐŊĐžĐŋĐēа ÂĢДаĐģŅƒŅ‡Ņ‹Ņ†Ņ†Đ°Âģ ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_join_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ÂĢДаĐģŅƒŅ‡Ņ‹Ņ†Ņ†Đ°Âģ</string> <string name="revanced_hide_shorts_join_button_summary_off">ПаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ÂĢДаĐģŅƒŅ‡Ņ‹Ņ†Ņ†Đ°Âģ</string>
<string name="revanced_hide_shorts_live_preview_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐļŅ‹Đ˛Ņ‹ ĐŋаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´</string>
<string name="revanced_hide_shorts_live_preview_summary_on">ПаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´ ҃ Ņ€ŅĐ°ĐģҌĐŊŅ‹Đŧ Ņ‡Đ°ŅĐĩ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_shorts_live_preview_summary_off">ПаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´ ҃ Ņ€ŅĐ°ĐģҌĐŊŅ‹Đŧ Ņ‡Đ°ŅĐĩ ĐŋаĐēаСаĐŊŅ‹</string>
<string name="revanced_hide_shorts_location_label_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŧĐĩŅ‚Đē҃ ĐŧĐĩŅŅ†Đ°ĐˇĐŊĐ°Ņ…ĐžĐ´ĐļаĐŊĐŊŅ</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_on">МĐĩŅ‚Đēа ĐŧĐĩŅŅ†Đ°ĐˇĐŊĐ°Ņ…ĐžĐ´ĐļаĐŊĐŊŅ ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_location_label_summary_off">ПаĐēаСаĐŊа ĐŧĐĩŅ‚Đēа ĐŧĐĩŅŅ†Đ°ĐˇĐŊĐ°Ņ…ĐžĐ´ĐļаĐŊĐŊŅ</string> <string name="revanced_hide_shorts_location_label_summary_off">ПаĐēаСаĐŊа ĐŧĐĩŅ‚Đēа ĐŧĐĩŅŅ†Đ°ĐˇĐŊĐ°Ņ…ĐžĐ´ĐļаĐŊĐŊŅ</string>
<string name="revanced_hide_shorts_new_posts_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ÂĢĐĐžĐ˛Ņ‹Ņ ĐŋавĐĩдаĐŧĐģĐĩĐŊĐŊŅ–Âģ</string> <string name="revanced_hide_shorts_new_posts_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ \"ĐĐžĐ˛Ņ‹Ņ ĐŋавĐĩдаĐŧĐģĐĩĐŊĐŊŅ–\"</string>
<string name="revanced_hide_shorts_new_posts_button_summary_on">КĐŊĐžĐŋĐēа ÂĢĐĐžĐ˛Ņ‹Ņ ĐŋавĐĩдаĐŧĐģĐĩĐŊĐŊŅ–Âģ ŅŅ…Đ°Đ˛Đ°ĐŊа</string> <string name="revanced_hide_shorts_new_posts_button_summary_on">КĐŊĐžĐŋĐēа ÂĢĐĐžĐ˛Ņ‹Ņ ĐŋавĐĩдаĐŧĐģĐĩĐŊĐŊŅ–Âģ ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_new_posts_button_summary_off">КĐŊĐžĐŋĐēа ÂĢĐĐžĐ˛Ņ‹Ņ ĐŋавĐĩдаĐŧĐģĐĩĐŊĐŊŅ–Âģ ĐŋаĐēаСаĐŊа</string> <string name="revanced_hide_shorts_new_posts_button_summary_off">КĐŊĐžĐŋĐēа ÂĢĐĐžĐ˛Ņ‹Ņ ĐŋавĐĩдаĐŧĐģĐĩĐŊĐŊŅ–Âģ ĐŋаĐēаСаĐŊа</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋҀҋĐŋŅ‹ĐŊĐĩĐŊŅ‹Ņ ĐēĐŊĐžĐŋĐēŅ– ĐŊаĐēĐģадаĐŊĐŊŅ</string> <string name="revanced_hide_shorts_paused_overlay_buttons_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋҀҋĐŋŅ‹ĐŊĐĩĐŊŅ‹Ņ ĐēĐŊĐžĐŋĐēŅ– ĐŊаĐēĐģадаĐŊĐŊŅ</string>
@@ -907,7 +928,7 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_preview_comment_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´ ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Ņ</string> <string name="revanced_hide_shorts_preview_comment_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´ ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Ņ</string>
<string name="revanced_hide_shorts_preview_comment_summary_on">ПаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´ ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Ņ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string> <string name="revanced_hide_shorts_preview_comment_summary_on">ПаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´ ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Ņ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_hide_shorts_preview_comment_summary_off">ПаĐēаСваĐĩŅ†Ņ†Đ° ĐŋаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´ ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Ņ</string> <string name="revanced_hide_shorts_preview_comment_summary_off">ПаĐēаСваĐĩŅ†Ņ†Đ° ĐŋаĐŋŅŅ€ŅĐ´ĐŊŅ– ĐŋŅ€Đ°ĐŗĐģŅĐ´ ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Ņ</string>
<string name="revanced_hide_shorts_save_sound_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ÂĢĐ—Đ°Ņ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŧŅƒĐˇŅ‹Đē҃Âģ</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_on">КĐŊĐžĐŋĐēа ĐˇĐ°Ņ…Đ°Đ˛Đ°ĐŊĐŊŅ ĐŧŅƒĐˇŅ‹ĐēŅ– ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">КĐŊĐžĐŋĐēа ĐˇĐ°Ņ…Đ°Đ˛Đ°ĐŊĐŊŅ ĐŧŅƒĐˇŅ‹ĐēŅ– ĐŋаĐēаСаĐŊа</string> <string name="revanced_hide_shorts_save_sound_button_summary_off">КĐŊĐžĐŋĐēа ĐˇĐ°Ņ…Đ°Đ˛Đ°ĐŊĐŊŅ ĐŧŅƒĐˇŅ‹ĐēŅ– ĐŋаĐēаСаĐŊа</string>
<string name="revanced_hide_shorts_search_suggestions_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋŅ€Đ°ĐŋаĐŊĐžĐ˛Ņ‹ ĐŋĐžŅˆŅƒĐē҃</string> <string name="revanced_hide_shorts_search_suggestions_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋŅ€Đ°ĐŋаĐŊĐžĐ˛Ņ‹ ĐŋĐžŅˆŅƒĐē҃</string>
@@ -1575,13 +1596,13 @@ Second \"item\" text"</string>
</patch> </patch>
<patch id="video.speed.button.playbackSpeedButtonPatch"> <patch id="video.speed.button.playbackSpeedButtonPatch">
<string name="revanced_playback_speed_dialog_button_title">ПаĐēĐ°ĐˇĐ°Ņ†ŅŒ Đ´Ņ‹ŅĐģĐžĐŗĐ°Đ˛ŅƒŅŽ ĐēĐŊĐžĐŋĐē҃ Ņ…ŅƒŅ‚ĐēĐ°ŅŅ†Ņ–</string> <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> <string name="revanced_playback_speed_dialog_button_summary_off">КĐŊĐžĐŋĐēа Đ´Ņ‹ŅĐģĐžĐŗŅƒ Ņ…ŅƒŅ‚ĐēĐ°ŅŅ†Ņ– ĐŊĐĩ ĐŋаĐēаСаĐŊа</string>
</patch> </patch>
<patch id="video.quality.button.videoQualityDialogButtonPatch"> <patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">ПаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ŅĐēĐ°ŅŅ†Ņ– Đ˛Ņ–Đ´ŅĐ°</string> <string name="revanced_video_quality_dialog_button_title">ПаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ ŅĐēĐ°ŅŅ†Ņ– Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_video_quality_dialog_button_summary_on">КĐŊĐžĐŋĐēа ĐŋаĐēаСаĐŊа. ĐĐ°Ņ†Ņ–ŅĐŊҖ҆Đĩ Ņ– ŅžŅ‚Ņ€Ņ‹ĐŧĐģŅ–Đ˛Đ°ĐšŅ†Đĩ, Đēай ҁĐēŅ–ĐŊŅƒŅ†ŅŒ ŅĐēĐ°ŅŅ†ŅŒ да Đŋа СĐŧĐ°ŅžŅ‡Đ°ĐŊĐŊŅ–</string> <string name="revanced_video_quality_dialog_button_summary_on">КĐŊĐžĐŋĐēа ŅĐēĐ°ŅŅ†Ņ– Đ˛Ņ–Đ´ŅĐ° ĐŋаĐēаСаĐŊа. ĐĐ°Ņ†Ņ–ŅĐŊҖ҆Đĩ Ņ– ŅžŅ‚Ņ€Ņ‹ĐŧĐģŅ–Đ˛Đ°ĐšŅ†Đĩ, Đēай ҁĐēŅ–ĐŊŅƒŅ†ŅŒ ŅĐēĐ°ŅŅ†ŅŒ да СĐŊĐ°Ņ‡ŅĐŊĐŊŅ Đŋа СĐŧĐ°ŅžŅ‡Đ°ĐŊĐŊŅ–</string>
<string name="revanced_video_quality_dialog_button_summary_off">КĐŊĐžĐŋĐēа ĐŊĐĩ ĐŋаĐēаСваĐĩŅ†Ņ†Đ°</string> <string name="revanced_video_quality_dialog_button_summary_off">КĐŊĐžĐŋĐēа ŅĐēĐ°ŅŅ†Ņ– Đ˛Ņ–Đ´ŅĐ° ĐŊĐĩ ĐŋаĐēаСаĐŊа</string>
</patch> </patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch"> <patch id="video.speed.custom.customPlaybackSpeedPatch">
<string name="revanced_custom_speed_menu_title">МĐĩĐŊŅŽ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģҌҁĐēОК ҁĐēĐžŅ€ĐžŅŅ‚Đ¸ Đ˛ĐžŅĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐ´ĐĩĐŊĐ¸Ņ</string> <string name="revanced_custom_speed_menu_title">МĐĩĐŊŅŽ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģҌҁĐēОК ҁĐēĐžŅ€ĐžŅŅ‚Đ¸ Đ˛ĐžŅĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐ´ĐĩĐŊĐ¸Ņ</string>

View File

@@ -282,6 +282,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_video_recommendation_labels_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐĩŅ‚Đ¸ĐēĐĩŅ‚Đ¸Ņ‚Đĩ Са ĐŋŅ€ĐĩĐŋĐžŅ€ŅŠŅ‡Đ°ĐŊи видĐĩĐžĐēĐģиĐŋОвĐĩ</string> <string name="revanced_hide_video_recommendation_labels_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐĩŅ‚Đ¸ĐēĐĩŅ‚Đ¸Ņ‚Đĩ Са ĐŋŅ€ĐĩĐŋĐžŅ€ŅŠŅ‡Đ°ĐŊи видĐĩĐžĐēĐģиĐŋОвĐĩ</string>
<string name="revanced_hide_video_recommendation_labels_summary_on">\'ĐĨĐžŅ€Đ°Ņ‚Đ° ŅŅŠŅ‰Đž Ņ‚Đ°Đēа ĐŗĐģĐĩĐ´Đ°Ņ…Đ°\' и \'МоĐļĐĩ ŅŅŠŅ‰Đž да Ņ…Đ°Ņ€ĐĩŅĐ°Ņ‚Đĩ\' ĐĩŅ‚Đ¸ĐēĐĩŅ‚Đ¸Ņ‚Đĩ в Ņ€ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string> <string name="revanced_hide_video_recommendation_labels_summary_on">\'ĐĨĐžŅ€Đ°Ņ‚Đ° ŅŅŠŅ‰Đž Ņ‚Đ°Đēа ĐŗĐģĐĩĐ´Đ°Ņ…Đ°\' и \'МоĐļĐĩ ŅŅŠŅ‰Đž да Ņ…Đ°Ņ€ĐĩŅĐ°Ņ‚Đĩ\' ĐĩŅ‚Đ¸ĐēĐĩŅ‚Đ¸Ņ‚Đĩ в Ņ€ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_hide_video_recommendation_labels_summary_off">\'ĐĨĐžŅ€Đ°Ņ‚Đ° ŅŅŠŅ‰Đž Ņ‚Đ°Đēа ĐŗĐģĐĩĐ´Đ°Ņ…Đ°\' и \'МоĐļĐĩ ŅŅŠŅ‰Đž да Ņ…Đ°Ņ€ĐĩŅĐ°Ņ‚Đĩ\' ĐĩŅ‚Đ¸ĐēĐĩŅ‚Đ¸Ņ‚Đĩ в Ņ€ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩ ŅĐ° ĐŋĐžĐēаСаĐŊи</string> <string name="revanced_hide_video_recommendation_labels_summary_off">\'ĐĨĐžŅ€Đ°Ņ‚Đ° ŅŅŠŅ‰Đž Ņ‚Đ°Đēа ĐŗĐģĐĩĐ´Đ°Ņ…Đ°\' и \'МоĐļĐĩ ŅŅŠŅ‰Đž да Ņ…Đ°Ņ€ĐĩŅĐ°Ņ‚Đĩ\' ĐĩŅ‚Đ¸ĐēĐĩŅ‚Đ¸Ņ‚Đĩ в Ņ€ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸Ņ‚Đĩ ĐžŅ‚ Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
<string name="revanced_hide_visual_spacer_title">ĐĄĐēŅ€Đ¸Đš Đ˛Đ¸ĐˇŅƒĐ°ĐģĐŊĐ¸Ņ Ņ€Đ°ĐˇĐ´ĐĩĐģĐ¸Ņ‚ĐĩĐģ</string>
<string name="revanced_hide_visual_spacer_summary_on">Đ’Đ¸ĐˇŅƒĐ°ĐģĐŊĐ¸ŅŅ‚ Ņ€Đ°ĐˇĐ´ĐĩĐģĐ¸Ņ‚ĐĩĐģ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_visual_spacer_summary_off">Đ’Đ¸ĐˇŅƒĐ°ĐģĐŊĐ¸ŅŅ‚ Ņ€Đ°ĐˇĐ´ĐĩĐģĐ¸Ņ‚ĐĩĐģ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles --> <!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
<string name="revanced_hide_doodles_title">YouTube Doodles</string> <string name="revanced_hide_doodles_title">YouTube Doodles</string>
<string name="revanced_hide_doodles_summary_on">АĐŊиĐŧĐ°Ņ†Đ¸ŅŅ‚Đ° ĐŊа YouTube Doodles Đ˛ŅŠŅ€Ņ…Ņƒ ĐģĐžĐŗĐžŅ‚Đž Đĩ ҁĐēŅ€Đ¸Ņ‚Đ°</string> <string name="revanced_hide_doodles_summary_on">АĐŊиĐŧĐ°Ņ†Đ¸ŅŅ‚Đ° ĐŊа YouTube Doodles Đ˛ŅŠŅ€Ņ…Ņƒ ĐģĐžĐŗĐžŅ‚Đž Đĩ ҁĐēŅ€Đ¸Ņ‚Đ°</string>
@@ -342,18 +345,21 @@ Second \"item\" text"</string>
<string name="revanced_hide_podcast_section_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа \"Đ Đ°ĐˇĐŗĐģĐĩĐ´Đ°ĐšŅ‚Đĩ ĐŋОдĐēĐ°ŅŅ‚Đ°\"</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_on">ĐĄĐĩĐēŅ†Đ¸ŅŅ‚Đ° \"Đ Đ°ĐˇĐŗĐģĐĩĐ´Đ°ĐšŅ‚Đĩ ĐŋОдĐēĐ°ŅŅ‚Đ°\" Đĩ ҁĐēŅ€Đ¸Ņ‚Đ°</string>
<string name="revanced_hide_podcast_section_summary_off">ĐĄĐĩĐēŅ†Đ¸ŅŅ‚Đ° \"Đ Đ°ĐˇĐŗĐģĐĩĐ´Đ°ĐšŅ‚Đĩ ĐŋОдĐēĐ°ŅŅ‚Đ°\" Đĩ ĐŋĐžĐēаСаĐŊа</string> <string name="revanced_hide_podcast_section_summary_off">ĐĄĐĩĐēŅ†Đ¸ŅŅ‚Đ° \"Đ Đ°ĐˇĐŗĐģĐĩĐ´Đ°ĐšŅ‚Đĩ ĐŋОдĐēĐ°ŅŅ‚Đ°\" Đĩ ĐŋĐžĐēаСаĐŊа</string>
<string name="revanced_hide_featured_section_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Đ¸ĐˇĐąŅ€Đ°ĐŊĐž ŅŅŠĐ´ŅŠŅ€ĐļаĐŊиĐĩ</string> <string name="revanced_hide_featured_links_section_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€ĐĩĐŋĐžŅ€ŅŠŅ‡ĐĩĐŊи Đ˛Ņ€ŅŠĐˇĐēи</string>
<string name="revanced_hide_featured_section_summary_on">ĐĄĐĩĐēŅ†Đ¸ŅŅ‚Đ° ҁ Đ¸ĐˇĐąŅ€Đ°ĐŊĐž ŅŅŠĐ´ŅŠŅ€ĐļаĐŊиĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚Đ°</string> <string name="revanced_hide_featured_links_section_summary_on">ĐĄĐĩĐēŅ†Đ¸ŅŅ‚Đ° ҁ ĐŋŅ€ĐĩĐ´ŅŅ‚Đ°Đ˛ĐĩĐŊи Đ˛Ņ€ŅŠĐˇĐēи Đĩ ҁĐēŅ€Đ¸Ņ‚Đ°</string>
<string name="revanced_hide_featured_section_summary_off">ĐĄĐĩĐēŅ†Đ¸ŅŅ‚Đ° ҁ Đ¸ĐˇĐąŅ€Đ°ĐŊĐž ŅŅŠĐ´ŅŠŅ€ĐļаĐŊиĐĩ Đĩ ĐŋĐžĐēаСаĐŊа</string> <string name="revanced_hide_featured_links_section_summary_off">ĐĄĐĩĐēŅ†Đ¸ŅŅ‚Đ° ҁ ĐŋŅ€ĐĩĐ´ŅŅ‚Đ°Đ˛ĐĩĐŊи Đ˛Ņ€ŅŠĐˇĐēи Đĩ ĐŋĐžĐēаСаĐŊа</string>
<string name="revanced_hide_featured_videos_section_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€ĐĩĐ´ŅŅ‚Đ°Đ˛ĐĩĐŊи видĐĩĐžĐēĐģиĐŋОвĐĩ</string>
<string name="revanced_hide_featured_videos_section_summary_on">ĐĄĐĩĐēŅ†Đ¸ŅŅ‚Đ° ҁ ĐŋŅ€ĐĩĐ´ŅŅ‚Đ°Đ˛ĐĩĐŊи видĐĩĐžĐēĐģиĐŋОвĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚Đ°</string>
<string name="revanced_hide_featured_videos_section_summary_off">ĐĄĐĩĐēŅ†Đ¸ŅŅ‚Đ° ҁ ĐŋŅ€ĐĩĐ´ŅŅ‚Đ°Đ˛ĐĩĐŊи видĐĩĐžĐēĐģиĐŋОвĐĩ Đĩ ĐŋĐžĐēаСаĐŊа</string>
<string name="revanced_hide_info_cards_section_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа иĐŊŅ„Đž. ĐēĐ°Ņ€Ņ‚Đ¸</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_on">РаСдĐĩĐģŅŠŅ‚ Са иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ĐžĐŊĐŊи ĐēĐ°Ņ€Ņ‚Đ¸ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_info_cards_section_summary_off">РаСдĐĩĐģŅŠŅ‚ Са иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ĐžĐŊĐŊи ĐēĐ°Ņ€Ņ‚Đ¸ Đĩ ĐŋĐžĐēаСаĐŊ</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_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа \"ĐžŅĐŊОвĐŊи ĐēĐžĐŊ҆ĐĩĐŋŅ†Đ¸Đ¸\"</string>
<string name="revanced_hide_key_concepts_section_summary_on">ĐĄĐĩĐēŅ†Đ¸ŅŅ‚Đ° \"ĐžŅĐŊОвĐŊи ĐēĐžĐŊ҆ĐĩĐŋŅ†Đ¸Đ¸\" Đĩ ҁĐēŅ€Đ¸Ņ‚Đ°</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_key_concepts_section_summary_off">ĐĄĐĩĐēŅ†Đ¸ŅŅ‚Đ° \"ĐžŅĐŊОвĐŊи ĐēĐžĐŊ҆ĐĩĐŋŅ†Đ¸Đ¸\" Đĩ ĐŋĐžĐēаСаĐŊа</string>
<string name="revanced_hide_description_subscribe_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа Са айОĐŊĐ¸Ņ€Đ°ĐŊĐĩ</string> <string name="revanced_hide_subscribe_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа Са айОĐŊĐ¸Ņ€Đ°ĐŊĐĩ</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са айОĐŊĐ¸Ņ€Đ°ĐŊĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string> <string name="revanced_hide_subscribe_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са айОĐŊĐ¸Ņ€Đ°ĐŊĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са айОĐŊĐ¸Ņ€Đ°ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string> <string name="revanced_hide_subscribe_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са айОĐŊĐ¸Ņ€Đ°ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_transcript_section_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ‚Ņ€Đ°ĐŊҁĐēŅ€Đ¸ĐŋŅ‚</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_on">РаСдĐĩĐģŅŠŅ‚ Са Ņ‚Ņ€Đ°ĐŊҁĐēŅ€Đ¸ĐŋŅ†Đ¸Ņ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_transcript_section_summary_off">РаСдĐĩĐģŅŠŅ‚ Са Ņ‚Ņ€Đ°ĐŊҁĐēŅ€Đ¸ĐŋŅ†Đ¸Ņ Đĩ ĐŋĐžĐēаСаĐŊ</string> <string name="revanced_hide_transcript_section_summary_off">РаСдĐĩĐģŅŠŅ‚ Са Ņ‚Ņ€Đ°ĐŊҁĐēŅ€Đ¸ĐŋŅ†Đ¸Ņ Đĩ ĐŋĐžĐēаСаĐŊ</string>
@@ -375,24 +381,32 @@ Second \"item\" text"</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">ПоĐēаСаĐŊĐž в Đ¸ŅŅ‚ĐžŅ€Đ¸ŅŅ‚Đ° ĐŊа ĐŗĐģĐĩдаĐŊĐ¸ŅŅ‚Đ°</string> <string name="revanced_hide_filter_bar_feed_in_history_summary_off">ПоĐēаСаĐŊĐž в Đ¸ŅŅ‚ĐžŅ€Đ¸ŅŅ‚Đ° ĐŊа ĐŗĐģĐĩдаĐŊĐ¸ŅŅ‚Đ°</string>
<string name="revanced_channel_screen_title">ĐĄŅ‚Ņ€Đ°ĐŊĐ¸Ņ†Đ° ĐŊа ĐēаĐŊаĐģа</string> <string name="revanced_channel_screen_title">ĐĄŅ‚Ņ€Đ°ĐŊĐ¸Ņ†Đ° ĐŊа ĐēаĐŊаĐģа</string>
<string name="revanced_channel_screen_summary">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ иĐģи ĐŋĐžĐēаСваĐŊĐĩ ĐŊа ĐēĐžĐŧĐŋĐžĐŊĐĩĐŊŅ‚Đ¸ ĐŊа ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ†Đ°Ņ‚Đ° ĐŊа ĐēаĐŊаĐģа</string> <string name="revanced_channel_screen_summary">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ иĐģи ĐŋĐžĐēаСваĐŊĐĩ ĐŊа ĐēĐžĐŧĐŋĐžĐŊĐĩĐŊŅ‚Đ¸ ĐŊа ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ†Đ°Ņ‚Đ° ĐŊа ĐēаĐŊаĐģа</string>
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_community_button_title">ĐĄĐēŅ€Đ¸Đš ĐąŅƒŅ‚ĐžĐŊа Са ĐžĐąŅ‰ĐŊĐžŅŅ‚</string>
<string name="revanced_hide_community_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐžĐąŅ‰ĐŊĐžŅŅ‚ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_community_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐžĐąŅ‰ĐŊĐžŅŅ‚ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<!-- 'For You' should be translated using the same localized wording YouTube displays. --> <!-- '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_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€Đ°Ņ„Ņ‚Đ° \"За Đ˛Đ°Ņ\"</string>
<string name="revanced_hide_for_you_shelf_summary_on">Đ Đ°Ņ„Ņ‚ŅŠŅ‚ „За Đ’Đ°Ņâ€œ Đĩ ҁĐēŅ€Đ¸Ņ‚</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_off">Đ Đ°Ņ„Ņ‚ŅŠŅ‚ „За Đ’Đ°Ņâ€œ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_join_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа ĐŸŅ€Đ¸ŅŅŠĐĩдиĐŊŅĐ˛Đ°ĐŊĐĩ</string>
<string name="revanced_hide_join_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐŸŅ€Đ¸ŅŅŠĐĩдиĐŊŅĐ˛Đ°ĐŊĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_join_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐŸŅ€Đ¸ŅŅŠĐĩдиĐŊŅĐ˛Đ°ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_links_preview_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€ĐĩĐŗĐģĐĩĐ´ ĐŊа Đ˛Ņ€ŅŠĐˇĐēи</string> <string name="revanced_hide_links_preview_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€ĐĩĐŗĐģĐĩĐ´ ĐŊа Đ˛Ņ€ŅŠĐˇĐēи</string>
<string name="revanced_hide_links_preview_summary_on">ĐŸŅ€ĐĩĐŗĐģĐĩĐ´ŅŠŅ‚ ĐŊа Đ˛Ņ€ŅŠĐˇĐēи Đĩ ҁĐēŅ€Đ¸Ņ‚</string> <string name="revanced_hide_links_preview_summary_on">ĐŸŅ€ĐĩĐŗĐģĐĩĐ´ŅŠŅ‚ ĐŊа Đ˛Ņ€ŅŠĐˇĐēи Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_links_preview_summary_off">ĐŸŅ€ĐĩĐŗĐģĐĩĐ´ŅŠŅ‚ ĐŊа Đ˛Ņ€ŅŠĐˇĐēи Đĩ ĐŋĐžĐēаСаĐŊ</string> <string name="revanced_hide_links_preview_summary_off">ĐŸŅ€ĐĩĐŗĐģĐĩĐ´ŅŠŅ‚ ĐŊа Đ˛Ņ€ŅŠĐˇĐēи Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_members_shelf_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€Đ°Ņ„Ņ‚Đ° Са ҇ĐģĐĩĐŊОвĐĩ</string> <string name="revanced_hide_members_shelf_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€Đ°Ņ„Ņ‚Đ° Са ҇ĐģĐĩĐŊОвĐĩ</string>
<string name="revanced_hide_members_shelf_summary_on">Đ Đ°Ņ„Ņ‚ŅŠŅ‚ Са ҇ĐģĐĩĐŊОвĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string> <string name="revanced_hide_members_shelf_summary_on">Đ Đ°Ņ„Ņ‚ŅŠŅ‚ Са ҇ĐģĐĩĐŊОвĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_members_shelf_summary_off">Đ Đ°Ņ„Ņ‚ŅŠŅ‚ Са ҇ĐģĐĩĐŊОвĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string> <string name="revanced_hide_members_shelf_summary_off">Đ Đ°Ņ„Ņ‚ŅŠŅ‚ Са ҇ĐģĐĩĐŊОвĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. --> <!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_community_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа \"ĐŸĐžŅĐĩŅ‚ĐĩŅ‚Đĩ ĐžĐąŅ‰ĐŊĐžŅŅ‚Ņ‚Đ°\"</string> <string name="revanced_hide_store_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа ĐœĐ°ĐŗĐ°ĐˇĐ¸ĐŊ</string>
<string name="revanced_hide_visit_community_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ \"ĐŸĐžŅĐĩŅ‚ĐĩŅ‚Đĩ ĐžĐąŅ‰ĐŊĐžŅŅ‚Ņ‚Đ°\" Đĩ ҁĐēŅ€Đ¸Ņ‚</string> <string name="revanced_hide_store_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐœĐ°ĐŗĐ°ĐˇĐ¸ĐŊ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_visit_community_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ â€žĐŸĐžŅĐĩŅ‚ĐĩŅ‚Đĩ ĐžĐąŅ‰ĐŊĐžŅŅ‚Ņ‚Đ°â€œ Đĩ ĐŋĐžĐēаСаĐŊ</string> <string name="revanced_hide_store_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐœĐ°ĐŗĐ°ĐˇĐ¸ĐŊ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. --> <!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_store_button_title">ĐĄĐēŅ€Đ¸ĐšŅ‚Đĩ ĐąŅƒŅ‚ĐžĐŊа â€žĐŸĐžŅĐĩŅ‚ĐĩŅ‚Đĩ ĐŧĐ°ĐŗĐ°ĐˇĐ¸ĐŊа“ ĐŊа ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ†Đ¸Ņ‚Đĩ ĐŊа ĐēаĐŊаĐģĐ¸Ņ‚Đĩ</string> <string name="revanced_hide_subscribe_button_in_channel_page_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа АйОĐŊĐ¸Ņ€Đ°ĐŊĐĩ</string>
<string name="revanced_hide_visit_store_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ â€žĐŸĐžŅĐĩŅ‚ĐĩŅ‚Đĩ ĐŧĐ°ĐŗĐ°ĐˇĐ¸ĐŊа“ Đĩ ҁĐēŅ€Đ¸Ņ‚</string> <string name="revanced_hide_subscribe_button_in_channel_page_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ АйОĐŊĐ¸Ņ€Đ°ĐŊĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_visit_store_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ â€žĐŸĐžŅĐĩŅ‚ĐĩŅ‚Đĩ ĐŧĐ°ĐŗĐ°ĐˇĐ¸ĐŊа“ Đĩ ĐŋĐžĐēаСаĐŊ</string> <string name="revanced_hide_subscribe_button_in_channel_page_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ АйОĐŊĐ¸Ņ€Đ°ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_comments_screen_title">КоĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸</string> <string name="revanced_comments_screen_title">КоĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸</string>
<string name="revanced_comments_screen_summary">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ иĐģи ĐŋĐžĐēаСваĐŊĐĩ ĐŊа ҁĐĩĐēŅ†Đ¸ŅŅ‚Đ° Са ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸</string> <string name="revanced_comments_screen_summary">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ иĐģи ĐŋĐžĐēаСваĐŊĐĩ ĐŊа ҁĐĩĐēŅ†Đ¸ŅŅ‚Đ° Са ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸</string>
<string name="revanced_hide_comments_ai_chat_summary_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€ĐĩĐˇŅŽĐŧĐĩŅ‚Đž ĐŊа AI Ņ‡Đ°Ņ‚Đ°</string> <string name="revanced_hide_comments_ai_chat_summary_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ€ĐĩĐˇŅŽĐŧĐĩŅ‚Đž ĐŊа AI Ņ‡Đ°Ņ‚Đ°</string>
@@ -534,11 +548,11 @@ Second \"item\" text"</string>
<string name="revanced_share_copy_url_success">Đ’Ņ€ŅŠĐˇĐēĐ°Ņ‚Đ° Đĩ ĐēĐžĐŋĐ¸Ņ€Đ°ĐŊа в ĐēĐģиĐŋĐąĐžŅ€Đ´Đ°.</string> <string name="revanced_share_copy_url_success">Đ’Ņ€ŅŠĐˇĐēĐ°Ņ‚Đ° Đĩ ĐēĐžĐŋĐ¸Ņ€Đ°ĐŊа в ĐēĐģиĐŋĐąĐžŅ€Đ´Đ°.</string>
<string name="revanced_share_copy_url_timestamp_success">URL Đ°Đ´Ņ€Đĩҁ ҁ ĐžŅ‚ĐŧĐĩŅ‚Đēа Са Đ˛Ņ€ĐĩĐŧĐĩ, ĐēĐžĐŋĐ¸Ņ€Đ°ĐŊ в ĐēĐģиĐŋĐąĐžŅ€Đ´Đ°.</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_title">ПоĐēаСваĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа Са ĐēĐžĐŋĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа URL Đ°Đ´Ņ€ĐĩŅĐ° ĐŊа видĐĩĐžĐēĐģиĐŋа</string>
<string name="revanced_copy_video_url_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Đĩ ĐŋĐžĐēаСаĐŊ. ДоĐēĐžŅĐŊĐĩŅ‚Đĩ, Са да ĐēĐžĐŋĐ¸Ņ€Đ°Ņ‚Đĩ URL Đ°Đ´Ņ€ĐĩŅĐ° ĐŊа видĐĩĐžĐēĐģиĐŋа. ДоĐēĐžŅĐŊĐĩŅ‚Đĩ и ĐˇĐ°Đ´Ņ€ŅŠĐļŅ‚Đĩ, Са да ĐēĐžĐŋĐ¸Ņ€Đ°Ņ‚Đĩ ҁ Đ˛Ņ€ĐĩĐŧĐĩви ĐŋĐĩŅ‡Đ°Ņ‚</string> <string name="revanced_copy_video_url_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐēĐžĐŋĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа URL Đ°Đ´Ņ€Đĩҁ ĐŊа видĐĩĐž Đĩ ĐŋĐžĐēаСаĐŊ. ДоĐēĐžŅĐŊĐĩŅ‚Đĩ, Са да ĐēĐžĐŋĐ¸Ņ€Đ°Ņ‚Đĩ URL Đ°Đ´Ņ€ĐĩŅĐ° ĐŊа видĐĩĐžŅ‚Đž. ДоĐēĐžŅĐŊĐĩŅ‚Đĩ и ĐˇĐ°Đ´Ņ€ŅŠĐļŅ‚Đĩ, Са да ĐēĐžĐŋĐ¸Ņ€Đ°Ņ‚Đĩ ҁ Đ˛Ņ€ĐĩĐŧĐĩва ĐžŅ‚ĐŧĐĩŅ‚Đēа</string>
<string name="revanced_copy_video_url_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string> <string name="revanced_copy_video_url_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐēĐžĐŋĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа URL Đ°Đ´Ņ€Đĩҁ ĐŊа видĐĩĐž ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_copy_video_url_timestamp_title">ПоĐēаСваĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа Са ĐēĐžĐŋĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа URL Đ°Đ´Ņ€ĐĩŅĐ° ĐŊа Đ˛Ņ€ĐĩĐŧĐĩĐ˛Đ¸Ņ ĐžŅ‚ĐŋĐĩŅ‡Đ°Ņ‚ŅŠĐē ĐŊа видĐĩĐžĐēĐģиĐŋа</string> <string name="revanced_copy_video_url_timestamp_title">ПоĐēаСваĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа Са ĐēĐžĐŋĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа URL Đ°Đ´Ņ€ĐĩŅĐ° ĐŊа Đ˛Ņ€ĐĩĐŧĐĩĐ˛Đ¸Ņ ĐžŅ‚ĐŋĐĩŅ‡Đ°Ņ‚ŅŠĐē ĐŊа видĐĩĐžĐēĐģиĐŋа</string>
<string name="revanced_copy_video_url_timestamp_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Đĩ ĐŋĐžĐēаСаĐŊ. ДоĐēĐžŅĐŊĐĩŅ‚Đĩ, Са да ĐēĐžĐŋĐ¸Ņ€Đ°Ņ‚Đĩ URL Đ°Đ´Ņ€ĐĩŅĐ° ĐŊа видĐĩĐžĐēĐģиĐŋа ҁ Đ˛Ņ€ĐĩĐŧĐĩви ĐŋĐĩŅ‡Đ°Ņ‚. ДоĐēĐžŅĐŊĐĩŅ‚Đĩ и ĐˇĐ°Đ´Ņ€ŅŠĐļŅ‚Đĩ, Са да ĐēĐžĐŋĐ¸Ņ€Đ°Ņ‚Đĩ ĐąĐĩС Đ˛Ņ€ĐĩĐŧĐĩви ĐŋĐĩŅ‡Đ°Ņ‚</string> <string name="revanced_copy_video_url_timestamp_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐēĐžĐŋĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа URL Đ°Đ´Ņ€Đĩҁ ҁ Đ˛Ņ€ĐĩĐŧĐĩва ĐžŅ‚ĐŧĐĩŅ‚Đēа Đĩ ĐŋĐžĐēаСаĐŊ. ДоĐēĐžŅĐŊĐĩŅ‚Đĩ, Са да ĐēĐžĐŋĐ¸Ņ€Đ°Ņ‚Đĩ URL Đ°Đ´Ņ€Đĩҁ ĐŊа видĐĩĐž ҁ Đ˛Ņ€ĐĩĐŧĐĩва ĐžŅ‚ĐŧĐĩŅ‚Đēа. ДоĐēĐžŅĐŊĐĩŅ‚Đĩ и ĐˇĐ°Đ´Ņ€ŅŠĐļŅ‚Đĩ, Са да ĐēĐžĐŋĐ¸Ņ€Đ°Ņ‚Đĩ ĐąĐĩС Đ˛Ņ€ĐĩĐŧĐĩва ĐžŅ‚ĐŧĐĩŅ‚Đēа</string>
<string name="revanced_copy_video_url_timestamp_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string> <string name="revanced_copy_video_url_timestamp_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐēĐžĐŋĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа URL Đ°Đ´Ņ€Đĩҁ ҁ Đ˛Ņ€ĐĩĐŧĐĩва ĐžŅ‚ĐŧĐĩŅ‚Đēа ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
</patch> </patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch"> <patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
<string name="revanced_remove_viewer_discretion_dialog_title">ĐŸŅ€ĐžĐˇĐžŅ€Đĩ҆ Са Đ˛ŅŠĐˇŅ€Đ°ŅŅ‚ĐžĐ˛Đž ĐžĐŗŅ€Đ°ĐŊĐ¸Ņ‡ĐĩĐŊиĐĩ</string> <string name="revanced_remove_viewer_discretion_dialog_title">ĐŸŅ€ĐžĐˇĐžŅ€Đĩ҆ Са Đ˛ŅŠĐˇŅ€Đ°ŅŅ‚ĐžĐ˛Đž ĐžĐŗŅ€Đ°ĐŊĐ¸Ņ‡ĐĩĐŊиĐĩ</string>
@@ -547,7 +561,7 @@ Second \"item\" text"</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">ĐĸаСи Ņ„ŅƒĐŊĐēŅ†Đ¸Ņ ĐŊĐĩ СаОйиĐēаĐģŅ Đ˛ŅŠĐˇŅ€Đ°ŅŅ‚ĐžĐ˛ĐžŅ‚Đž ĐžĐŗŅ€Đ°ĐŊĐ¸Ņ‡ĐĩĐŊиĐĩ. ĐĸŅ ĐŋŅ€ĐžŅŅ‚Đž ĐŋŅ€Đ¸ĐĩĐŧа Đ˛ŅŠĐˇŅ€Đ°ŅŅ‚ĐžĐ˛Đ°Ņ‚Đ° ĐŗŅ€Đ°ĐŊĐ¸Ņ†Đ° Đ°Đ˛Ņ‚ĐžĐŧĐ°Ņ‚Đ¸Ņ‡ĐŊĐž.</string> <string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">ĐĸаСи Ņ„ŅƒĐŊĐēŅ†Đ¸Ņ ĐŊĐĩ СаОйиĐēаĐģŅ Đ˛ŅŠĐˇŅ€Đ°ŅŅ‚ĐžĐ˛ĐžŅ‚Đž ĐžĐŗŅ€Đ°ĐŊĐ¸Ņ‡ĐĩĐŊиĐĩ. ĐĸŅ ĐŋŅ€ĐžŅŅ‚Đž ĐŋŅ€Đ¸ĐĩĐŧа Đ˛ŅŠĐˇŅ€Đ°ŅŅ‚ĐžĐ˛Đ°Ņ‚Đ° ĐŗŅ€Đ°ĐŊĐ¸Ņ†Đ° Đ°Đ˛Ņ‚ĐžĐŧĐ°Ņ‚Đ¸Ņ‡ĐŊĐž.</string>
</patch> </patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch"> <patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">ДĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа Đ¸ĐˇŅĐēĐ°Ņ‡Đ°Ņ‰Đ¸Ņ ĐŋŅ€ĐžĐˇĐžŅ€Đĩ҆ „ВĐģиСаĐŊĐĩ в Ņ‚ĐĩĐģĐĩĐ˛Đ¸ĐˇĐžŅ€Đ°â€œ</string> <string name="revanced_disable_signin_to_tv_popup_title">ДĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа Đ¸ĐˇŅĐēĐ°Ņ‡Đ°Ņ‰Đ¸Ņ ĐŋŅ€ĐžĐˇĐžŅ€Đĩ҆ â€žĐ’Ņ…ĐžĐ´ в Ņ‚ĐĩĐģĐĩĐ˛Đ¸ĐˇĐžŅ€â€œ</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">Đ˜ĐˇŅĐēĐ°Ņ‡Đ°Ņ‰Đ¸ŅŅ‚ ĐŋŅ€ĐžĐˇĐžŅ€Đĩ҆ „ВĐģиСаĐŊĐĩ в Ņ‚ĐĩĐģĐĩĐ˛Đ¸ĐˇĐžŅ€Đ°â€œ Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊ</string> <string name="revanced_disable_signin_to_tv_popup_summary_on">Đ˜ĐˇŅĐēĐ°Ņ‡Đ°Ņ‰Đ¸ŅŅ‚ ĐŋŅ€ĐžĐˇĐžŅ€Đĩ҆ „ВĐģиСаĐŊĐĩ в Ņ‚ĐĩĐģĐĩĐ˛Đ¸ĐˇĐžŅ€Đ°â€œ Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊ</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">Đ˜ĐˇŅĐēĐ°Ņ‡Đ°Ņ‰Đ¸ŅŅ‚ ĐŋŅ€ĐžĐˇĐžŅ€Đĩ҆ „ВĐģиСаĐŊĐĩ в Ņ‚ĐĩĐģĐĩĐ˛Đ¸ĐˇĐžŅ€Đ°â€œ Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊ</string> <string name="revanced_disable_signin_to_tv_popup_summary_off">Đ˜ĐˇŅĐēĐ°Ņ‡Đ°Ņ‰Đ¸ŅŅ‚ ĐŋŅ€ĐžĐˇĐžŅ€Đĩ҆ „ВĐģиСаĐŊĐĩ в Ņ‚ĐĩĐģĐĩĐ˛Đ¸ĐˇĐžŅ€Đ°â€œ Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊ</string>
</patch> </patch>
@@ -679,7 +693,7 @@ Second \"item\" text"</string>
<string name="revanced_hide_download_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊа Са Đ¸ĐˇŅ‚ĐĩĐŗĐģŅĐŊĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string> <string name="revanced_hide_download_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊа Са Đ¸ĐˇŅ‚ĐĩĐŗĐģŅĐŊĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_download_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊа Са Đ¸ĐˇŅ‚ĐĩĐŗĐģŅĐŊĐĩ ҁĐĩ ĐŋĐžĐēаСва</string> <string name="revanced_hide_download_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊа Са Đ¸ĐˇŅ‚ĐĩĐŗĐģŅĐŊĐĩ ҁĐĩ ĐŋĐžĐēаСва</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays. <!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. --> This button only shows on videos uploaded by the logged-in user. -->
<string name="revanced_hide_hype_button_title">ĐĄĐēŅ€Đ¸Đš Ņ…Đ°ĐšĐŋа</string> <string name="revanced_hide_hype_button_title">ĐĄĐēŅ€Đ¸Đš Ņ…Đ°ĐšĐŋа</string>
<string name="revanced_hide_hype_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са Ņ…Đ°ĐšĐŋ Đĩ ҁĐēŅ€Đ¸Ņ‚</string> <string name="revanced_hide_hype_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са Ņ…Đ°ĐšĐŋ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_hype_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са Ņ…Đ°ĐšĐŋ Đĩ ĐŋĐžĐēаСаĐŊ</string> <string name="revanced_hide_hype_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са Ņ…Đ°ĐšĐŋ Đĩ ĐŋĐžĐēаСаĐŊ</string>
@@ -800,10 +814,11 @@ Second \"item\" text"</string>
<string name="revanced_hide_player_flyout_audio_track_title">Đ˜ĐˇĐąĐžŅ€ ĐŊа ĐŅƒĐ´Đ¸Đž</string> <string name="revanced_hide_player_flyout_audio_track_title">Đ˜ĐˇĐąĐžŅ€ ĐŊа ĐŅƒĐ´Đ¸Đž</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">МĐĩĐŊŅŽŅ‚Đž Са Đ¸ĐˇĐąĐžŅ€ ĐŊа ĐŅƒĐ´Đ¸Đž Đĩ ҁĐēŅ€Đ¸Ņ‚Đž</string> <string name="revanced_hide_player_flyout_audio_track_summary_on">МĐĩĐŊŅŽŅ‚Đž Са Đ¸ĐˇĐąĐžŅ€ ĐŊа ĐŅƒĐ´Đ¸Đž Đĩ ҁĐēŅ€Đ¸Ņ‚Đž</string>
<string name="revanced_hide_player_flyout_audio_track_summary_off">МĐĩĐŊŅŽŅ‚Đž Са Đ¸ĐˇĐąĐžŅ€ ĐŊа ĐŅƒĐ´Đ¸Đž ҁĐĩ ĐŋĐžĐēаСва</string> <string name="revanced_hide_player_flyout_audio_track_summary_off">МĐĩĐŊŅŽŅ‚Đž Са Đ¸ĐˇĐąĐžŅ€ ĐŊа ĐŅƒĐ´Đ¸Đž ҁĐĩ ĐŋĐžĐēаСва</string>
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. --> <!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
'Android No SDK' must be kept untranslated. -->
<string name="revanced_hide_player_flyout_audio_track_not_available">"МĐĩĐŊŅŽŅ‚Đž Са Đ°ŅƒĐ´Đ¸ĐžĐˇĐ°ĐŋĐ¸Ņ Đĩ ҁĐēŅ€Đ¸Ņ‚Đž <string name="revanced_hide_player_flyout_audio_track_not_available">"МĐĩĐŊŅŽŅ‚Đž Са Đ°ŅƒĐ´Đ¸ĐžĐˇĐ°ĐŋĐ¸Ņ Đĩ ҁĐēŅ€Đ¸Ņ‚Đž
За да ĐŋĐžĐēаĐļĐĩŅ‚Đĩ ĐŧĐĩĐŊŅŽŅ‚Đž Са Đ°ŅƒĐ´Đ¸ĐžĐˇĐ°ĐŋĐ¸Ņ, ĐŋŅ€ĐžĐŧĐĩĐŊĐĩŅ‚Đĩ „ПодĐŋŅ€Đ°Đ˛ŅĐŊĐĩ ĐŊа видĐĩĐž ĐŋĐžŅ‚ĐžŅ†Đ¸â€œ ĐŊа iPadOS"</string> За да ĐŋĐžĐēаĐļĐĩŅ‚Đĩ ĐŧĐĩĐŊŅŽŅ‚Đž Са Đ°ŅƒĐ´Đ¸ĐžĐˇĐ°ĐŋĐ¸Ņ, ĐŋŅ€ĐžĐŧĐĩĐŊĐĩŅ‚Đĩ „ПодĐŋŅ€Đ°Đ˛ŅĐŊĐĩ ĐŊа видĐĩĐž ĐŋĐžŅ‚ĐžŅ†Đ¸â€œ ĐŊа „Android No SDK“"</string>
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- '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_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_on">МĐĩĐŊŅŽŅ‚Đž Са ĐŗĐģĐĩдаĐŊĐĩ в VR Đĩ ҁĐēŅ€Đ¸Ņ‚Đž</string>
@@ -879,13 +894,16 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_history_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ŅˆĐžŅ€Ņ‚Đ¸Ņ‚Đĩ в Đ¸ŅŅ‚ĐžŅ€Đ¸ŅŅ‚Đ° ĐŊа ĐŗĐģĐĩдаĐŊĐĩ</string> <string name="revanced_hide_shorts_history_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ŅˆĐžŅ€Ņ‚Đ¸Ņ‚Đĩ в Đ¸ŅŅ‚ĐžŅ€Đ¸ŅŅ‚Đ° ĐŊа ĐŗĐģĐĩдаĐŊĐĩ</string>
<string name="revanced_hide_shorts_history_summary_on">ĐĄĐēŅ€Đ¸Ņ‚Đž в Đ¸ŅŅ‚ĐžŅ€Đ¸ŅŅ‚Đ° ĐŊа ĐŗĐģĐĩдаĐŊĐĩ</string> <string name="revanced_hide_shorts_history_summary_on">ĐĄĐēŅ€Đ¸Ņ‚Đž в Đ¸ŅŅ‚ĐžŅ€Đ¸ŅŅ‚Đ° ĐŊа ĐŗĐģĐĩдаĐŊĐĩ</string>
<string name="revanced_hide_shorts_history_summary_off">ПоĐēаСва ҁĐĩ в Đ¸ŅŅ‚ĐžŅ€Đ¸ŅŅ‚Đ° ĐŊа ĐŗĐģĐĩдаĐŊĐĩ</string> <string name="revanced_hide_shorts_history_summary_off">ПоĐēаСва ҁĐĩ в Đ¸ŅŅ‚ĐžŅ€Đ¸ŅŅ‚Đ° ĐŊа ĐŗĐģĐĩдаĐŊĐĩ</string>
<string name="revanced_hide_shorts_super_thanks_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа Buy Super Thanks</string> <string name="revanced_hide_shorts_auto_dubbed_label_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐĩŅ‚Đ¸ĐēĐĩŅ‚Đ° â€žĐĐ˛Ņ‚ĐžĐŧĐ°Ņ‚Đ¸Ņ‡ĐŊĐž ĐžĐˇĐ˛ŅƒŅ‡ĐĩĐŊо“</string>
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">Đ•Ņ‚Đ¸ĐēĐĩŅ‚ŅŠŅ‚ Са Đ°Đ˛Ņ‚ĐžĐŧĐ°Ņ‚Đ¸Ņ‡ĐŊĐž ĐžĐˇĐ˛ŅƒŅ‡Đ°Đ˛Đ°ĐŊĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_shorts_auto_dubbed_label_summary_off">Đ•Ņ‚Đ¸ĐēĐĩŅ‚ŅŠŅ‚ Са Đ°Đ˛Ņ‚ĐžĐŧĐ°Ņ‚Đ¸Ņ‡ĐŊĐž ĐžĐˇĐ˛ŅƒŅ‡Đ°Đ˛Đ°ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_shorts_super_thanks_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа â€žĐšŅƒĐŋĐĩŅ‚Đĩ ҁ҃ĐŋĐĩŅ€ ĐąĐģĐ°ĐŗĐžĐ´Đ°Ņ€ĐŊĐžŅŅ‚Đ¸â€œ</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐšŅƒĐŋи Super Thanks Đĩ ҁĐēŅ€Đ¸Ņ‚</string> <string name="revanced_hide_shorts_super_thanks_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐšŅƒĐŋи Super Thanks Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐšŅƒĐŋи Super Thanks Đĩ ĐŋĐžĐēаСаĐŊ</string> <string name="revanced_hide_shorts_super_thanks_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐšŅƒĐŋи Super Thanks Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_shorts_effect_button_title">ĐĄĐēŅ€Đ¸Đš ĐąŅƒŅ‚ĐžĐŊа Са ĐĩŅ„ĐĩĐēŅ‚</string> <string name="revanced_hide_shorts_effect_button_title">ĐĄĐēŅ€Đ¸Đš ĐąŅƒŅ‚ĐžĐŊа Са ĐĩŅ„ĐĩĐēŅ‚</string>
<string name="revanced_hide_shorts_effect_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐĩŅ„ĐĩĐēŅ‚Đ¸ Đĩ ҁĐēŅ€Đ¸Ņ‚</string> <string name="revanced_hide_shorts_effect_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐĩŅ„ĐĩĐēŅ‚Đ¸ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_shorts_effect_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐĩŅ„ĐĩĐēŅ‚Đ¸ Đĩ видиĐŧ</string> <string name="revanced_hide_shorts_effect_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐĩŅ„ĐĩĐēŅ‚Đ¸ Đĩ видиĐŧ</string>
<string name="revanced_hide_shorts_green_screen_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа Green screen</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_on">Đ‘ŅƒŅ‚ĐžĐŊ \"ЗĐĩĐģĐĩĐŊ ĐĩĐēŅ€Đ°ĐŊ\" Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊ \"ЗĐĩĐģĐĩĐŊ ĐĩĐēŅ€Đ°ĐŊ\" ҁĐĩ ĐŋĐžĐēаСва</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_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа Са Ņ…Đ°ŅˆŅ‚Đ°Đŗ</string>
@@ -895,10 +913,13 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_join_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа Join</string> <string name="revanced_hide_shorts_join_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа Join</string>
<string name="revanced_hide_shorts_join_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊа Са ĐŋŅ€Đ¸ŅŅŠĐĩдиĐŊŅĐ˛Đ°ĐŊĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</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>
<string name="revanced_hide_shorts_live_preview_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€ĐĩĐŗĐģĐĩда ĐŊа ĐļивО</string>
<string name="revanced_hide_shorts_live_preview_summary_on">ĐŸŅ€ĐĩĐŗĐģĐĩĐ´ŅŠŅ‚ ĐŊа ĐļивО Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_shorts_live_preview_summary_off">ĐŸŅ€ĐĩĐŗĐģĐĩĐ´ŅŠŅ‚ ĐŊа ĐļивО Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_shorts_location_label_title">Đ•Ņ‚Đ¸ĐēĐĩŅ‚ Са ĐŧĐĩŅŅ‚ĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ</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_on">Đ•Ņ‚Đ¸ĐēĐĩŅ‚ Са ĐŧĐĩŅŅ‚ĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_shorts_location_label_summary_off">Đ•Ņ‚Đ¸ĐēĐĩŅ‚ Са ĐŧĐĩŅŅ‚ĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ ҁĐĩ ĐŋĐžĐēаСва</string> <string name="revanced_hide_shorts_location_label_summary_off">Đ•Ņ‚Đ¸ĐēĐĩŅ‚ Са ĐŧĐĩŅŅ‚ĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ ҁĐĩ ĐŋĐžĐēаСва</string>
<string name="revanced_hide_shorts_new_posts_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа \"Нови ĐŋŅƒĐąĐģиĐēĐ°Ņ†Đ¸Đ¸\"</string> <string name="revanced_hide_shorts_new_posts_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа „Нови ĐŋŅƒĐąĐģиĐēĐ°Ņ†Đ¸Đ¸â€œ</string>
<string name="revanced_hide_shorts_new_posts_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ \"Нови ĐŋŅƒĐąĐģиĐēĐ°Ņ†Đ¸Đ¸\" Đĩ ҁĐēŅ€Đ¸Ņ‚</string> <string name="revanced_hide_shorts_new_posts_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ \"Нови ĐŋŅƒĐąĐģиĐēĐ°Ņ†Đ¸Đ¸\" Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_shorts_new_posts_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ \"Нови ĐŋŅƒĐąĐģиĐēĐ°Ņ†Đ¸Đ¸\" ҁĐĩ ĐŋĐžĐēаСва</string> <string name="revanced_hide_shorts_new_posts_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ \"Нови ĐŋŅƒĐąĐģиĐēĐ°Ņ†Đ¸Đ¸\" ҁĐĩ ĐŋĐžĐēаСва</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_title">ПоĐēаСваĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊи ĐŋŅ€Đ¸ ĐŋĐ°ŅƒĐˇĐ°</string> <string name="revanced_hide_shorts_paused_overlay_buttons_title">ПоĐēаСваĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊи ĐŋŅ€Đ¸ ĐŋĐ°ŅƒĐˇĐ°</string>
@@ -907,7 +928,7 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_preview_comment_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ° Са Đ˛Đ¸ĐˇŅƒĐ°ĐģĐ¸ĐˇĐ°Ņ†Đ¸Ņ</string> <string name="revanced_hide_shorts_preview_comment_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ° Са Đ˛Đ¸ĐˇŅƒĐ°ĐģĐ¸ĐˇĐ°Ņ†Đ¸Ņ</string>
<string name="revanced_hide_shorts_preview_comment_summary_on">КоĐŧĐĩĐŊŅ‚Đ°Ņ€ŅŠŅ‚ Са Đ˛Đ¸ĐˇŅƒĐ°ĐģĐ¸ĐˇĐ°Ņ†Đ¸Ņ Đĩ ҁĐēŅ€Đ¸Ņ‚</string> <string name="revanced_hide_shorts_preview_comment_summary_on">КоĐŧĐĩĐŊŅ‚Đ°Ņ€ŅŠŅ‚ Са Đ˛Đ¸ĐˇŅƒĐ°ĐģĐ¸ĐˇĐ°Ņ†Đ¸Ņ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_shorts_preview_comment_summary_off">ПоĐēаСва ҁĐĩ Đ˛Đ¸ĐˇŅƒĐ°ĐģĐ¸ĐˇĐ°Ņ†Đ¸Ņ ĐŊа ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ°</string> <string name="revanced_hide_shorts_preview_comment_summary_off">ПоĐēаСва ҁĐĩ Đ˛Đ¸ĐˇŅƒĐ°ĐģĐ¸ĐˇĐ°Ņ†Đ¸Ņ ĐŊа ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ°</string>
<string name="revanced_hide_shorts_save_sound_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа Save music</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_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са СаĐŋаСваĐŊĐĩ ĐŊа ĐŧŅƒĐˇĐ¸Đēа Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">ПоĐēаСаĐŊ Đĩ ĐąŅƒŅ‚ĐžĐŊŅŠŅ‚ Са СаĐŋаСваĐŊĐĩ ĐŊа ĐŧŅƒĐˇĐ¸Đēа</string> <string name="revanced_hide_shorts_save_sound_button_summary_off">ПоĐēаСаĐŊ Đĩ ĐąŅƒŅ‚ĐžĐŊŅŠŅ‚ Са СаĐŋаСваĐŊĐĩ ĐŊа ĐŧŅƒĐˇĐ¸Đēа</string>
<string name="revanced_hide_shorts_search_suggestions_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€ĐĩĐ´ĐģĐžĐļĐĩĐŊĐ¸ŅŅ‚Đ° Са Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩ</string> <string name="revanced_hide_shorts_search_suggestions_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€ĐĩĐ´ĐģĐžĐļĐĩĐŊĐ¸ŅŅ‚Đ° Са Ņ‚ŅŠŅ€ŅĐĩĐŊĐĩ</string>
@@ -928,7 +949,7 @@ Second \"item\" text"</string>
<string name="revanced_hide_shorts_upcoming_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа Upcoming</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_on">Đ‘ŅƒŅ‚ĐžĐŊ \"ĐŸŅ€ĐĩĐ´ŅŅ‚ĐžŅŅ‰Đ¸ ŅŅŠĐąĐ¸Ņ‚Đ¸Ņ\" Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊ \"ĐŸŅ€ĐĩĐ´ŅŅ‚ĐžŅŅ‰Đ¸ ŅŅŠĐąĐ¸Ņ‚Đ¸Ņ\" ҁĐĩ ĐŋĐžĐēаСва</string> <string name="revanced_hide_shorts_upcoming_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊ \"ĐŸŅ€ĐĩĐ´ŅŅ‚ĐžŅŅ‰Đ¸ ŅŅŠĐąĐ¸Ņ‚Đ¸Ņ\" ҁĐĩ ĐŋĐžĐēаСва</string>
<string name="revanced_hide_shorts_use_sound_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа \"ИСĐŋĐžĐģĐˇĐ˛Đ°ĐšŅ‚Đĩ Ņ‚ĐžĐˇĐ¸ ĐˇĐ˛ŅƒĐē\"</string> <string name="revanced_hide_shorts_use_sound_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа „ИзĐŋĐžĐģСваĐŊĐĩ ĐŊа Ņ‚ĐžĐˇĐ¸ ĐˇĐ˛ŅƒĐē“</string>
<string name="revanced_hide_shorts_use_sound_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ \"ИСĐŋĐžĐģĐˇĐ˛Đ°ĐšŅ‚Đĩ Ņ‚ĐžĐˇĐ¸ ĐˇĐ˛ŅƒĐē\" Đĩ ҁĐēŅ€Đ¸Ņ‚</string> <string name="revanced_hide_shorts_use_sound_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ \"ИСĐŋĐžĐģĐˇĐ˛Đ°ĐšŅ‚Đĩ Ņ‚ĐžĐˇĐ¸ ĐˇĐ˛ŅƒĐē\" Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_shorts_use_sound_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ \"ИСĐŋĐžĐģĐˇĐ˛Đ°ĐšŅ‚Đĩ Ņ‚ĐžĐˇĐ¸ ĐˇĐ˛ŅƒĐē\" Đĩ ĐŋĐžĐēаСаĐŊ</string> <string name="revanced_hide_shorts_use_sound_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ \"ИСĐŋĐžĐģĐˇĐ˛Đ°ĐšŅ‚Đĩ Ņ‚ĐžĐˇĐ¸ ĐˇĐ˛ŅƒĐē\" Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_hide_shorts_use_template_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа „ИзĐŋĐžĐģСваĐŊĐĩ ĐŊа Ņ‚ĐžĐˇĐ¸ ŅˆĐ°ĐąĐģĐžĐŊ“</string> <string name="revanced_hide_shorts_use_template_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа „ИзĐŋĐžĐģСваĐŊĐĩ ĐŊа Ņ‚ĐžĐˇĐ¸ ŅˆĐ°ĐąĐģĐžĐŊ“</string>
@@ -1574,13 +1595,13 @@ Second \"item\" text"</string>
</patch> </patch>
<patch id="video.speed.button.playbackSpeedButtonPatch"> <patch id="video.speed.button.playbackSpeedButtonPatch">
<string name="revanced_playback_speed_dialog_button_title">ПоĐēаСваĐŊĐĩ ĐąŅƒŅ‚ĐžĐŊ Са ҁĐēĐžŅ€ĐžŅŅ‚</string> <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> <string name="revanced_playback_speed_dialog_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са диаĐģĐžĐŗĐžĐ˛ ĐŋŅ€ĐžĐˇĐžŅ€Đĩ҆ Са ҁĐēĐžŅ€ĐžŅŅ‚ ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
</patch> </patch>
<patch id="video.quality.button.videoQualityDialogButtonPatch"> <patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">ПоĐēаĐļи ĐąŅƒŅ‚ĐžĐŊа Са ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đž ĐŊа видĐĩĐžŅ‚Đž</string> <string name="revanced_video_quality_dialog_button_title">ПоĐēаĐļи ĐąŅƒŅ‚ĐžĐŊа Са ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đž ĐŊа видĐĩĐžŅ‚Đž</string>
<string name="revanced_video_quality_dialog_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Đĩ ĐŋĐžĐēаСаĐŊ. ДоĐēĐžŅĐŊĐĩŅ‚Đĩ и ĐˇĐ°Đ´Ņ€ŅŠĐļŅ‚Đĩ, Са да Đ˛ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚Đĩ ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛ĐžŅ‚Đž Đ´Đž ĐŋĐžĐ´Ņ€Đ°ĐˇĐąĐ¸Ņ€Đ°ĐŊĐĩ</string> <string name="revanced_video_quality_dialog_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đž ĐŊа видĐĩĐžŅ‚Đž Đĩ ĐŋĐžĐēаСаĐŊ. ДоĐēĐžŅĐŊĐĩŅ‚Đĩ и ĐˇĐ°Đ´Ņ€ŅŠĐļŅ‚Đĩ, Са да Đ˛ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚Đĩ ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛ĐžŅ‚Đž Đ´Đž ĐŋĐž ĐŋĐžĐ´Ņ€Đ°ĐˇĐąĐ¸Ņ€Đ°ĐŊĐĩ</string>
<string name="revanced_video_quality_dialog_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string> <string name="revanced_video_quality_dialog_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đž ĐŊа видĐĩĐžŅ‚Đž ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
</patch> </patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch"> <patch id="video.speed.custom.customPlaybackSpeedPatch">
<string name="revanced_custom_speed_menu_title">МĐĩĐŊŅŽŅ‚Đž Са ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēа ҁĐēĐžŅ€ĐžŅŅ‚</string> <string name="revanced_custom_speed_menu_title">МĐĩĐŊŅŽŅ‚Đž Са ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēа ҁĐēĐžŅ€ĐžŅŅ‚</string>

View File

@@ -278,6 +278,9 @@ MicroG-āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ
<string name="revanced_hide_video_recommendation_labels_title">āĻ­āĻŋāĻĄāĻŋāĻ“ āϏ⧁āĻĒāĻžāϰāĻŋāĻļ āϞ⧇āĻŦ⧇āϞ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_video_recommendation_labels_title">āĻ­āĻŋāĻĄāĻŋāĻ“ āϏ⧁āĻĒāĻžāϰāĻŋāĻļ āϞ⧇āĻŦ⧇āϞ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_video_recommendation_labels_summary_on">\"āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻĻāĻ°ā§āĻļāĻ• āĻĻ⧇āϖ⧇āϛ⧇āύ\" āĻāĻŦāĻ‚ \"āφāĻĒāύāĻžāϰ āĻĒāĻ›āĻ¨ā§āĻĻ āĻšāϤ⧇ āĻĒāĻžāϰ⧇\" āϞ⧇āĻŦ⧇āϞāϗ⧁āϞāĻŋ āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻĢāϞāĻžāĻĢāϞ⧇ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_video_recommendation_labels_summary_on">\"āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻĻāĻ°ā§āĻļāĻ• āĻĻ⧇āϖ⧇āϛ⧇āύ\" āĻāĻŦāĻ‚ \"āφāĻĒāύāĻžāϰ āĻĒāĻ›āĻ¨ā§āĻĻ āĻšāϤ⧇ āĻĒāĻžāϰ⧇\" āϞ⧇āĻŦ⧇āϞāϗ⧁āϞāĻŋ āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻĢāϞāĻžāĻĢāϞ⧇ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_video_recommendation_labels_summary_off">\"āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻĻāĻ°ā§āĻļāĻ• āĻĻ⧇āϖ⧇āϛ⧇āύ\" āĻāĻŦāĻ‚ \"āφāĻĒāύāĻžāϰ āĻĒāĻ›āĻ¨ā§āĻĻ āĻšāϤ⧇ āĻĒāĻžāϰ⧇\" āϞ⧇āĻŦ⧇āϞāϗ⧁āϞāĻŋ āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻĢāϞāĻžāĻĢāϞ⧇ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string> <string name="revanced_hide_video_recommendation_labels_summary_off">\"āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻĻāĻ°ā§āĻļāĻ• āĻĻ⧇āϖ⧇āϛ⧇āύ\" āĻāĻŦāĻ‚ \"āφāĻĒāύāĻžāϰ āĻĒāĻ›āĻ¨ā§āĻĻ āĻšāϤ⧇ āĻĒāĻžāϰ⧇\" āϞ⧇āĻŦ⧇āϞāϗ⧁āϞāĻŋ āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻĢāϞāĻžāĻĢāϞ⧇ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string>
<string name="revanced_hide_visual_spacer_title">āĻ­āĻŋāĻœā§āϝ⧁āϝāĻŧāĻžāϞ āĻ¸ā§āĻĒ⧇āϏāĻžāϰ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_visual_spacer_summary_on">āĻ­āĻŋāĻœā§āϝ⧁āϝāĻŧāĻžāϞ āĻ¸ā§āĻĒ⧇āϏāĻžāϰ āϞ⧁āĻ•āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string>
<string name="revanced_hide_visual_spacer_summary_off">āĻ­āĻŋāĻœā§āϝ⧁āϝāĻŧāĻžāϞ āĻ¸ā§āĻĒ⧇āϏāĻžāϰ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string>
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles --> <!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
<string name="revanced_hide_doodles_title">YouTube Doodles ⤛ā¤ŋā¤Ēā¤žā¤ā¤</string> <string name="revanced_hide_doodles_title">YouTube Doodles ⤛ā¤ŋā¤Ēā¤žā¤ā¤</string>
<string name="revanced_hide_doodles_summary_on">āϞ⧋āĻ—ā§‹āϤ⧇ YouTube Doodles āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āĻļāύ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_doodles_summary_on">āϞ⧋āĻ—ā§‹āϤ⧇ YouTube Doodles āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āĻļāύ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
@@ -338,18 +341,21 @@ MicroG-āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ
<string name="revanced_hide_podcast_section_title">\'Explore the podcast\' āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_podcast_section_title">\'Explore the podcast\' āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_podcast_section_summary_on">Explore the podcast āĻŦāĻŋāĻ­āĻžāĻ—āϟāĻŋ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_podcast_section_summary_on">Explore the podcast āĻŦāĻŋāĻ­āĻžāĻ—āϟāĻŋ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_podcast_section_summary_off">Explore the podcast āĻŦāĻŋāĻ­āĻžāĻ—āϟāĻŋ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string> <string name="revanced_hide_podcast_section_summary_off">Explore the podcast āĻŦāĻŋāĻ­āĻžāĻ—āϟāĻŋ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string>
<string name="revanced_hide_featured_section_title">āĻŦāĻŋāĻļ⧇āώ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_featured_links_section_title">āĻĢāĻŋāϚāĻžāϰ āϞāĻŋāĻ™ā§āĻ• āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_featured_section_summary_on">āĻŦāĻŋāĻļ⧇āώ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āĻŦāĻŋāĻ­āĻžāĻ— āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_featured_links_section_summary_on">āĻŦāĻŋāĻļ⧇āώ āϞāĻŋāĻ™ā§āĻ• āĻŦāĻŋāĻ­āĻžāĻ— āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_featured_section_summary_off">āĻŦāĻŋāĻļ⧇āώ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āĻŦāĻŋāĻ­āĻžāĻ— āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string> <string name="revanced_hide_featured_links_section_summary_off">āĻŦāĻŋāĻļ⧇āώ āϞāĻŋāĻ™ā§āĻ• āĻŦāĻŋāĻ­āĻžāĻ— āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_featured_videos_section_title">āĻŦāĻŋāĻļ⧇āώ āĻ­āĻŋāĻĄāĻŋāĻ“ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_featured_videos_section_summary_on">āĻŦāĻŋāĻļ⧇āώ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻŦāĻŋāĻ­āĻžāĻ— āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_featured_videos_section_summary_off">āĻŦāĻŋāĻļ⧇āώ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻŦāĻŋāĻ­āĻžāĻ— āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_info_cards_section_title">āϤāĻĨā§āϝ āĻ•āĻžāĻ°ā§āĻĄ āϞ⧁āĻ•āĻžāύ</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_on">āϤāĻĨā§āϝ āĻ•āĻžāĻ°ā§āĻĄ āϏ⧇āĻ•āĻļāύ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_info_cards_section_summary_off">āϤāĻĨā§āϝ āĻ•āĻžāĻ°ā§āĻĄ āϏ⧇āĻ•āĻļāύ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string> <string name="revanced_hide_info_cards_section_summary_off">āϤāĻĨā§āϝ āĻ•āĻžāĻ°ā§āĻĄ āϏ⧇āĻ•āĻļāύ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_key_concepts_section_title">\'Key concepts\' āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_key_concepts_section_title">\'Key concepts\' āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_key_concepts_section_summary_on">Key concepts āĻŦāĻŋāĻ­āĻžāĻ—āϟāĻŋ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_key_concepts_section_summary_on">Key concepts āĻŦāĻŋāĻ­āĻžāĻ—āϟāĻŋ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_key_concepts_section_summary_off">Key concepts āĻŦāĻŋāĻ­āĻžāĻ—āϟāĻŋ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string> <string name="revanced_hide_key_concepts_section_summary_off">Key concepts āĻŦāĻŋāĻ­āĻžāĻ—āϟāĻŋ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string>
<string name="revanced_hide_description_subscribe_button_title">āϏāĻĻāĻ¸ā§āϝāϤāĻž āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_subscribe_button_title">āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_description_subscribe_button_summary_on">āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻŦāĻžāϟāύ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_subscribe_button_summary_on">āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_description_subscribe_button_summary_off">āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻŦāĻžāϟāύ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_subscribe_button_summary_off">āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_transcript_section_title">āύāĻĨāĻŋ āϞ⧁āĻ•āĻžāύ</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_on">āĻŸā§āϰāĻžāĻ¨ā§āϏāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻŦāĻŋāĻ­āĻžāĻ— āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_transcript_section_summary_off">āĻŸā§āϰāĻžāĻ¨ā§āϏāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻŦāĻŋāĻ­āĻžāĻ— āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string> <string name="revanced_hide_transcript_section_summary_off">āĻŸā§āϰāĻžāĻ¨ā§āϏāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻŦāĻŋāĻ­āĻžāĻ— āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
@@ -371,24 +377,32 @@ MicroG-āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">āĻĻ⧇āĻ–āĻžāϰ āχāϤāĻŋāĻšāĻžāϏ⧇ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string> <string name="revanced_hide_filter_bar_feed_in_history_summary_off">āĻĻ⧇āĻ–āĻžāϰ āχāϤāĻŋāĻšāĻžāϏ⧇ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string>
<string name="revanced_channel_screen_title">āĻšā§āϝāĻžāύ⧇āϞ āĻĒ⧃āĻˇā§āĻ āĻž</string> <string name="revanced_channel_screen_title">āĻšā§āϝāĻžāύ⧇āϞ āĻĒ⧃āĻˇā§āĻ āĻž</string>
<string name="revanced_channel_screen_summary">āĻšā§āϝāĻžāύ⧇āϞ āĻĒ⧃āĻˇā§āĻ āĻžāϰ āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻžāύ āĻŦāĻž āĻĻ⧇āĻ–āĻžāύ</string> <string name="revanced_channel_screen_summary">āĻšā§āϝāĻžāύ⧇āϞ āĻĒ⧃āĻˇā§āĻ āĻžāϰ āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻžāύ āĻŦāĻž āĻĻ⧇āĻ–āĻžāύ</string>
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_community_button_title">āĻ•āĻŽāĻŋāωāύāĻŋāϟāĻŋ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_community_button_summary_on">āĻ•āĻŽāĻŋāωāύāĻŋāϟāĻŋ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_community_button_summary_off">āĻ•āĻŽāĻŋāωāύāĻŋāϟāĻŋ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<!-- 'For You' should be translated using the same localized wording YouTube displays. --> <!-- '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_title">\'āφāĻĒāύāĻžāϰ āϜāĻ¨ā§āϝ\' āĻļ⧇āĻ˛ā§āĻĢ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_for_you_shelf_summary_on">āφāĻĒāύāĻžāϰ āϜāĻ¨ā§āϝ āĻļ⧇āĻ˛ā§āĻĢ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</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_off">āφāĻĒāύāĻžāϰ āϜāĻ¨ā§āϝ āĻļ⧇āĻ˛ā§āĻĢ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_join_button_title">āϝ⧋āĻ—āĻĻāĻžāύ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_join_button_summary_on">āϝ⧋āĻ—āĻĻāĻžāύ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_join_button_summary_off">āϝ⧋āĻ—āĻĻāĻžāύ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_links_preview_title">āϞāĻŋāĻ™ā§āĻ• āĻĒā§‚āĻ°ā§āĻŦāϰ⧂āĻĒ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_links_preview_title">āϞāĻŋāĻ™ā§āĻ• āĻĒā§‚āĻ°ā§āĻŦāϰ⧂āĻĒ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_links_preview_summary_on">āϞāĻŋāĻ™ā§āĻ• āĻĒā§‚āĻ°ā§āĻŦāϰ⧂āĻĒ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_links_preview_summary_on">āϞāĻŋāĻ™ā§āĻ• āĻĒā§‚āĻ°ā§āĻŦāϰ⧂āĻĒ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_links_preview_summary_off">āϞāĻŋāĻ™ā§āĻ• āĻĒā§‚āĻ°ā§āĻŦāϰ⧂āĻĒ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_links_preview_summary_off">āϞāĻŋāĻ™ā§āĻ• āĻĒā§‚āĻ°ā§āĻŦāϰ⧂āĻĒ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_members_shelf_title">āϏāĻĻāĻ¸ā§āϝ āĻļ⧇āĻ˛ā§āĻĢ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_members_shelf_title">āϏāĻĻāĻ¸ā§āϝ āĻļ⧇āĻ˛ā§āĻĢ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_members_shelf_summary_on">āϏāĻĻāĻ¸ā§āϝ āĻļ⧇āĻ˛ā§āĻĢ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_members_shelf_summary_on">āϏāĻĻāĻ¸ā§āϝ āĻļ⧇āĻ˛ā§āĻĢ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_members_shelf_summary_off">āϏāĻĻāĻ¸ā§āϝāĻĻ⧇āϰ āĻļ⧇āĻ˛ā§āĻĢ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇</string> <string name="revanced_hide_members_shelf_summary_off">āϏāĻĻāĻ¸ā§āϝāĻĻ⧇āϰ āĻļ⧇āĻ˛ā§āĻĢ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇</string>
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. --> <!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_community_button_title">\'āĻ•āĻŽāĻŋāωāύāĻŋāϟāĻŋ āĻĻ⧇āϖ⧁āύ\' āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_store_button_title">āĻ¸ā§āĻŸā§‹āϰ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_visit_community_button_summary_on">\'āĻ•āĻŽāĻŋāωāύāĻŋāϟāĻŋ āĻĻ⧇āϖ⧁āύ\' āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇</string> <string name="revanced_hide_store_button_summary_on">āĻ¸ā§āĻŸā§‹āϰ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_visit_community_button_summary_off">āĻ•āĻŽāĻŋāωāύāĻŋāϟāĻŋ āĻ­āĻŋāϜāĻŋāϟ āĻŦāĻžāϟāύ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_store_button_summary_off">āĻ¸ā§āĻŸā§‹āϰ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. --> <!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_store_button_title">āĻšā§āϝāĻžāύ⧇āϞ āĻĒāĻžāϤāĻžā§Ÿ \'āĻ¸ā§āĻŸā§‹āϰ⧇ āϝāĻžāύ\' āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_subscribe_button_in_channel_page_title">āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_visit_store_button_summary_on">āĻ¸ā§āĻŸā§‹āϰ āĻ­āĻŋāϜāĻŋāϟ āĻŦāĻžāϟāύ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_subscribe_button_in_channel_page_summary_on">āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_visit_store_button_summary_off">āĻ¸ā§āĻŸā§‹āϰ āĻ­āĻŋāϜāĻŋāϟ āĻŦāĻžāϟāύ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_subscribe_button_in_channel_page_summary_off">āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_comments_screen_title">āĻŽāĻ¨ā§āϤāĻŦā§āϝ</string> <string name="revanced_comments_screen_title">āĻŽāĻ¨ā§āϤāĻŦā§āϝ</string>
<string name="revanced_comments_screen_summary">āĻŽāĻ¨ā§āϤāĻŦā§āϝ āĻŦāĻŋāĻ­āĻžāϗ⧇āϰ āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻžāύ āĻŦāĻž āĻĻ⧇āĻ–āĻžāύ⧎</string> <string name="revanced_comments_screen_summary">āĻŽāĻ¨ā§āϤāĻŦā§āϝ āĻŦāĻŋāĻ­āĻžāϗ⧇āϰ āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻžāύ āĻŦāĻž āĻĻ⧇āĻ–āĻžāύ⧎</string>
<string name="revanced_hide_comments_ai_chat_summary_title">āĻāφāχ āĻšā§āϝāĻžāϟ āϏāĻžāϰāĻžāĻ‚āĻļ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_comments_ai_chat_summary_title">āĻāφāχ āĻšā§āϝāĻžāϟ āϏāĻžāϰāĻžāĻ‚āĻļ āϞ⧁āĻ•āĻžāύ</string>
@@ -530,11 +544,11 @@ MicroG-āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ
<string name="revanced_share_copy_url_success">āĻ•ā§āϞāĻŋāĻĒāĻŦā§‹āĻ°ā§āĻĄā§‡ URL āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇</string> <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_timestamp_success">āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ āϏāĻš URL āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_copy_video_url_title">āĻ­āĻŋāĻĄāĻŋāĻ“ URL āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ</string> <string name="revanced_copy_video_url_title">āĻ­āĻŋāĻĄāĻŋāĻ“ URL āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ</string>
<string name="revanced_copy_video_url_summary_on">āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇āĨ¤ āĻ­āĻŋāĻĄāĻŋāĻ“ URL āĻ•āĻĒāĻŋ āĻ•āϰāϤ⧇ āφāϞāϤ⧋ āϚāĻžāĻĒ⧁āύāĨ¤ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ āϏāĻš āĻ•āĻĒāĻŋ āĻ•āϰāϤ⧇ āϟāĻŋāĻĒ⧁āύ āĻāĻŦāĻ‚ āϧāϰ⧇ āϰāĻžāϖ⧁āύāĨ¤</string> <string name="revanced_copy_video_url_summary_on">āĻ­āĻŋāĻĄāĻŋāĻ“ āχāωāφāϰāĻāϞ āĻ•āĻĒāĻŋ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇āĨ¤ āĻ­āĻŋāĻĄāĻŋāĻ“ āχāωāφāϰāĻāϞ āĻ•āĻĒāĻŋ āĻ•āϰāϤ⧇ āĻŸā§āϝāĻžāĻĒ āĻ•āϰ⧁āύāĨ¤ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ āϏāĻš āĻ•āĻĒāĻŋ āĻ•āϰāϤ⧇ āĻŸā§āϝāĻžāĻĒ āĻ•āϰ⧇ āϧāϰ⧇ āϰāĻžāϖ⧁āύ</string>
<string name="revanced_copy_video_url_summary_off">āĻŦā§‹āϤāĻžāĻŽ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§ŸāύāĻŋ</string> <string name="revanced_copy_video_url_summary_off">āĻ­āĻŋāĻĄāĻŋāĻ“ āχāωāφāϰāĻāϞ āĻ•āĻĒāĻŋ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āύ⧇āχ</string>
<string name="revanced_copy_video_url_timestamp_title">āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ URL āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ</string> <string name="revanced_copy_video_url_timestamp_title">āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ URL āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ</string>
<string name="revanced_copy_video_url_timestamp_summary_on">āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇āĨ¤ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ āϏāĻš āĻ­āĻŋāĻĄāĻŋāĻ“ URL āĻ•āĻĒāĻŋ āĻ•āϰāϤ⧇ āφāϞāϤ⧋ āϚāĻžāĻĒ⧁āύāĨ¤ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ āĻ›āĻžā§œāĻž āĻ•āĻĒāĻŋ āĻ•āϰāϤ⧇ āϟāĻŋāĻĒ⧁āύ āĻāĻŦāĻ‚ āϧāϰ⧇ āϰāĻžāϖ⧁āύāĨ¤</string> <string name="revanced_copy_video_url_timestamp_summary_on">āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ āχāωāφāϰāĻāϞ āĻ•āĻĒāĻŋ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇āĨ¤ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ āϏāĻš āĻ­āĻŋāĻĄāĻŋāĻ“ āχāωāφāϰāĻāϞ āĻ•āĻĒāĻŋ āĻ•āϰāϤ⧇ āĻŸā§āϝāĻžāĻĒ āĻ•āϰ⧁āύāĨ¤ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ āĻ›āĻžāĻĄāĻŧāĻž āĻ•āĻĒāĻŋ āĻ•āϰāϤ⧇ āĻŸā§āϝāĻžāĻĒ āĻ•āϰ⧇ āϧāϰ⧇ āϰāĻžāϖ⧁āύ</string>
<string name="revanced_copy_video_url_timestamp_summary_off">āĻŦā§‹āϤāĻžāĻŽ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§ŸāύāĻŋ</string> <string name="revanced_copy_video_url_timestamp_summary_off">āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ āχāωāφāϰāĻāϞ āĻ•āĻĒāĻŋ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āύ⧇āχ</string>
</patch> </patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch"> <patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
<string name="revanced_remove_viewer_discretion_dialog_title">āĻĻāĻ°ā§āĻļāϕ⧇āϰ āĻŦāĻŋāϚāĻ•ā§āώāĻŖāϤāĻž āĻĄāĻžā§ŸāĻžāϞāĻ— āϏāϰāĻžāύ</string> <string name="revanced_remove_viewer_discretion_dialog_title">āĻĻāĻ°ā§āĻļāϕ⧇āϰ āĻŦāĻŋāϚāĻ•ā§āώāĻŖāϤāĻž āĻĄāĻžā§ŸāĻžāϞāĻ— āϏāϰāĻžāύ</string>
@@ -543,7 +557,7 @@ MicroG-āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">āĻāϟāĻŋ āĻŦāϝāĻŧāϏ⧇āϰ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϕ⧇ āĻŦāĻžāχāĻĒāĻžāϏ āĻ•āϰ⧇ āύāĻžāĨ¤ āĻāϟāĻž āĻļ⧁āϧ⧁ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇āĨ¤</string> <string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">āĻāϟāĻŋ āĻŦāϝāĻŧāϏ⧇āϰ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϕ⧇ āĻŦāĻžāχāĻĒāĻžāϏ āĻ•āϰ⧇ āύāĻžāĨ¤ āĻāϟāĻž āĻļ⧁āϧ⧁ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇āĨ¤</string>
</patch> </patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch"> <patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">āϟāĻŋāĻ­āĻŋāϤ⧇ āϏāĻžāχāύ āχāύ āĻĒāĻĒāφāĻĒ āĻ…āĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ</string> <string name="revanced_disable_signin_to_tv_popup_title">\'āϟāĻŋāĻ­āĻŋ-āϤ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰ⧁āύ\' āĻĒāĻĒāφāĻĒ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰ⧁āύ</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">āϟāĻŋāĻ­āĻŋāϤ⧇ āϏāĻžāχāύ āχāύ āĻĒāĻĒāφāĻĒ āĻ…āĻ•ā§āώāĻŽ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇</string> <string name="revanced_disable_signin_to_tv_popup_summary_on">āϟāĻŋāĻ­āĻŋāϤ⧇ āϏāĻžāχāύ āχāύ āĻĒāĻĒāφāĻĒ āĻ…āĻ•ā§āώāĻŽ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">āϟāĻŋāĻ­āĻŋāϤ⧇ āϏāĻžāχāύ āχāύ āĻĒāĻĒāφāĻĒ āϏāĻ•ā§āώāĻŽ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇</string> <string name="revanced_disable_signin_to_tv_popup_summary_off">āϟāĻŋāĻ­āĻŋāϤ⧇ āϏāĻžāχāύ āχāύ āĻĒāĻĒāφāĻĒ āϏāĻ•ā§āώāĻŽ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇</string>
</patch> </patch>
@@ -675,7 +689,7 @@ MicroG-āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ
<string name="revanced_hide_download_button_summary_on">āĻĄāĻžāωāύāϞ⧋āĻĄ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_download_button_summary_on">āĻĄāĻžāωāύāϞ⧋āĻĄ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_download_button_summary_off">āĻĄāĻžāωāύāϞ⧋āĻĄ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string> <string name="revanced_hide_download_button_summary_off">āĻĄāĻžāωāύāϞ⧋āĻĄ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays. <!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. --> This button only shows on videos uploaded by the logged-in user. -->
<string name="revanced_hide_hype_button_title">āĻšāĻžāχāĻĒ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_hype_button_title">āĻšāĻžāχāĻĒ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_hype_button_summary_on">āĻšāĻžāχāĻĒ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_hype_button_summary_on">āĻšāĻžāχāĻĒ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_hype_button_summary_off">āĻšāĻžāχāĻĒ āĻŦāĻžāϟāύ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇</string> <string name="revanced_hide_hype_button_summary_off">āĻšāĻžāχāĻĒ āĻŦāĻžāϟāύ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇</string>
@@ -796,10 +810,11 @@ MicroG-āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ
<string name="revanced_hide_player_flyout_audio_track_title">āĻ…āĻĄāĻŋāĻ“ āĻŸā§āĻ°ā§āϝāĻžāĻ• āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_player_flyout_audio_track_title">āĻ…āĻĄāĻŋāĻ“ āĻŸā§āĻ°ā§āϝāĻžāĻ• āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">āĻ…āĻĄāĻŋāĻ“ āĻŸā§āĻ°ā§āϝāĻžāĻ• āĻŽā§‡āύ⧁ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_player_flyout_audio_track_summary_on">āĻ…āĻĄāĻŋāĻ“ āĻŸā§āĻ°ā§āϝāĻžāĻ• āĻŽā§‡āύ⧁ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_player_flyout_audio_track_summary_off">āĻ…āĻĄāĻŋāĻ“ āĻŸā§āĻ°ā§āϝāĻžāĻ• āĻŽā§‡āύ⧁ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ</string> <string name="revanced_hide_player_flyout_audio_track_summary_off">āĻ…āĻĄāĻŋāĻ“ āĻŸā§āĻ°ā§āϝāĻžāĻ• āĻŽā§‡āύ⧁ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ</string>
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. --> <!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
'Android No SDK' must be kept untranslated. -->
<string name="revanced_hide_player_flyout_audio_track_not_available">"āĻ…āĻĄāĻŋāĻ“ āĻŸā§āĻ°ā§āϝāĻžāĻ• āĻŽā§‡āύ⧁ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇ <string name="revanced_hide_player_flyout_audio_track_not_available">"āĻ…āĻĄāĻŋāĻ“ āĻŸā§āĻ°ā§āϝāĻžāĻ• āĻŽā§‡āύ⧁ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇
āĻ…āĻĄāĻŋāĻ“ āĻŸā§āĻ°ā§āϝāĻžāĻ• āĻŽā§‡āύ⧁ āĻĻ⧇āĻ–āĻžāύ⧋āϰ āϜāĻ¨ā§āϝ, 'āĻ­āĻŋāĻĄāĻŋāĻ“ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻ¸ā§āĻĒ⧁āĻĢ āĻ•āϰ⧁āύ' āϕ⧇ iPadOS āĻ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ"</string> āĻ…āĻĄāĻŋāĻ“ āĻŸā§āĻ°ā§āϝāĻžāĻ• āĻŽā§‡āύ⧁ āĻĻ⧇āĻ–āĻžāϤ⧇, 'Spoof video streams' āϕ⧇ 'Android No SDK'-āϤ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύāĨ¤"</string>
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. --> <!-- '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">āĻ­āĻŋāφāϰ-āĻ āϘāĻĄāĻŧāĻŋ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_player_flyout_watch_in_vr_title">āĻ­āĻŋāφāϰ-āĻ āϘāĻĄāĻŧāĻŋ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">āĻ­āĻŋāφāϰ āĻŽā§‡āύ⧁āϤ⧇ āĻĻ⧇āϖ⧁āύ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_player_flyout_watch_in_vr_summary_on">āĻ­āĻŋāφāϰ āĻŽā§‡āύ⧁āϤ⧇ āĻĻ⧇āϖ⧁āύ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
@@ -875,13 +890,16 @@ MicroG-āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ
<string name="revanced_hide_shorts_history_title">Shortsāϗ⧁āϞāĻŋāϕ⧇ āĻ“āϝāĻŧāĻžāϚ āχāϤāĻŋāĻšāĻžāϏ⧇ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_shorts_history_title">Shortsāϗ⧁āϞāĻŋāϕ⧇ āĻ“āϝāĻŧāĻžāϚ āχāϤāĻŋāĻšāĻžāϏ⧇ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_shorts_history_summary_on">āĻ“āϝāĻŧāĻžāϚ āĻšāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ āϞ⧁āĻ•āĻžāύ⧋</string> <string name="revanced_hide_shorts_history_summary_on">āĻ“āϝāĻŧāĻžāϚ āĻšāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ āϞ⧁āĻ•āĻžāύ⧋</string>
<string name="revanced_hide_shorts_history_summary_off">āĻ“āϝāĻŧāĻžāϚ āχāϤāĻŋāĻšāĻžāϏ⧇ āĻĻ⧇āĻ–āĻžāύ⧋</string> <string name="revanced_hide_shorts_history_summary_off">āĻ“āϝāĻŧāĻžāϚ āχāϤāĻŋāĻšāĻžāϏ⧇ āĻĻ⧇āĻ–āĻžāύ⧋</string>
<string name="revanced_hide_shorts_super_thanks_button_title">āϏ⧁āĻĒāĻžāϰ āĻĨā§āϝāĻžāĻ™ā§āĻ•āϏ āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_shorts_auto_dubbed_label_title">\'āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ-āĻĄāĻžāĻŦāĻĄ\' āϞ⧇āĻŦ⧇āϞ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻĄāĻžāĻŦ āĻ•āϰāĻž āϞ⧇āĻŦ⧇āϞ āϞ⧁āĻ•āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string>
<string name="revanced_hide_shorts_auto_dubbed_label_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_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_effect_button_title">āχāĻĢ⧇āĻ•ā§āϟ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_shorts_effect_button_title">āχāĻĢ⧇āĻ•ā§āϟ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_shorts_effect_button_summary_on">āχāĻĢ⧇āĻ•ā§āϟ āĻŦāĻžāϟāύ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_shorts_effect_button_summary_on">āχāĻĢ⧇āĻ•ā§āϟ āĻŦāĻžāϟāύ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_shorts_effect_button_summary_off">āχāĻĢ⧇āĻ•ā§āϟ āĻŦāĻžāϟāύ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_shorts_effect_button_summary_off">āχāĻĢ⧇āĻ•ā§āϟ āĻŦāĻžāϟāύ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_shorts_green_screen_button_title">āĻ—ā§āϰāĻŋāύ āĻ¸ā§āĻ•ā§āϰāĻŋāύ āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āϞ⧁āĻ•āĻžāύ</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_on">āϏāĻŦ⧁āϜ āĻĒāĻ°ā§āĻĻāĻž āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">āϏāĻŦ⧁āϜ āĻĒāĻ°ā§āĻĻāĻž āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</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_title">āĻšā§āϝāĻžāĻļāĻŸā§āϝāĻžāĻ— āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
@@ -891,10 +909,13 @@ MicroG-āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ
<string name="revanced_hide_shorts_join_button_title">āϏāĻžāĻŽāĻŋāϞ āĻšāĻ“ āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āϞ⧁āĻ•āĻžāύ</string> <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_on">āĻœā§Ÿā§‡āύ āĻ•āϰ⧁āύ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_shorts_join_button_summary_off">āĻœā§Ÿā§‡āύ āĻ•āϰ⧁āύ āĻŦā§‹āϤāĻžāĻŽ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string> <string name="revanced_hide_shorts_join_button_summary_off">āĻœā§Ÿā§‡āύ āĻ•āϰ⧁āύ āĻŦā§‹āϤāĻžāĻŽ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_shorts_live_preview_title">āϏāϰāĻžāϏāϰāĻŋ āĻĒā§‚āĻ°ā§āĻŦāϰ⧂āĻĒ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_shorts_live_preview_summary_on">āϞāĻžāχāĻ­ āĻĒā§āϰāĻŋāĻ­āĻŋāω āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_shorts_live_preview_summary_off">āϞāĻžāχāĻ­ āĻĒā§āϰāĻŋāĻ­āĻŋāω āĻĻ⧇āĻ–āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_shorts_location_label_title">āĻ…āĻŦāĻ¸ā§āĻĨāĻžāύ āϞ⧇āĻŦ⧇āϞ āϞ⧁āĻ•āĻžāύ</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_on">āĻ…āĻŦāĻ¸ā§āĻĨāĻžāύ āϞ⧇āĻŦ⧇āϞ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āĻ°ā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_shorts_location_label_summary_off">āĻ…āĻŦāĻ¸ā§āĻĨāĻžāύ āϞ⧇āĻŦ⧇āϞ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string> <string name="revanced_hide_shorts_location_label_summary_off">āĻ…āĻŦāĻ¸ā§āĻĨāĻžāύ āϞ⧇āĻŦ⧇āϞ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_shorts_new_posts_button_title">āύāϤ⧁āύ āĻĒā§‹āĻ¸ā§āϟ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_shorts_new_posts_button_title">\'āύāϤ⧁āύ āĻĒā§‹āĻ¸ā§āϟ\' āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_shorts_new_posts_button_summary_on">āύāϤ⧁āύ āĻĒā§‹āĻ¸ā§āϟ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇</string> <string name="revanced_hide_shorts_new_posts_button_summary_on">āύāϤ⧁āύ āĻĒā§‹āĻ¸ā§āϟ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_shorts_new_posts_button_summary_off">āύāϤ⧁āύ āĻĒā§‹āĻ¸ā§āϟ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇</string> <string name="revanced_hide_shorts_new_posts_button_summary_off">āύāϤ⧁āύ āĻĒā§‹āĻ¸ā§āϟ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_title">āĻĨ⧇āĻŽā§‡ āĻĨāĻžāĻ•āĻž āĻ“āĻ­āĻžāϰāϞ⧇ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_shorts_paused_overlay_buttons_title">āĻĨ⧇āĻŽā§‡ āĻĨāĻžāĻ•āĻž āĻ“āĻ­āĻžāϰāϞ⧇ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
@@ -903,7 +924,7 @@ MicroG-āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ
<string name="revanced_hide_shorts_preview_comment_title">Preview comment āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_shorts_preview_comment_title">Preview comment āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_shorts_preview_comment_summary_on">Preview comment āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_shorts_preview_comment_summary_on">Preview comment āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_shorts_preview_comment_summary_off">Preview comment āĻĻ⧇āĻ–āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇</string> <string name="revanced_hide_shorts_preview_comment_summary_off">Preview comment āĻĻ⧇āĻ–āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_hide_shorts_save_sound_button_title">āϏ⧇āĻ­ āĻŽāĻŋāωāϜāĻŋāĻ• āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āϞ⧁āĻ•āĻžāύ</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_on">Save music āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">Save music āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string> <string name="revanced_hide_shorts_save_sound_button_summary_off">Save music āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_hide_shorts_search_suggestions_title">āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_shorts_search_suggestions_title">āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻžāύ</string>
@@ -924,10 +945,10 @@ MicroG-āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ
<string name="revanced_hide_shorts_upcoming_button_title">āφāϏāĻ¨ā§āύ āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āϞ⧁āĻ•āĻžāύ</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_on">āφāĻ—āĻžāĻŽā§€ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">āφāĻ—āĻžāĻŽā§€ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string> <string name="revanced_hide_shorts_upcoming_button_summary_off">āφāĻ—āĻžāĻŽā§€ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<string name="revanced_hide_shorts_use_sound_button_title">āĻāχ āϏāĻžāωāĻ¨ā§āĻĄ āĻŦāĻžāϟāύāϟāĻŋ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_shorts_use_sound_button_title">\'āĻāχ āϏāĻžāωāĻ¨ā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ\' āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_shorts_use_sound_button_summary_on">āĻāχ āϏāĻžāωāĻ¨ā§āĻĄ āĻŦāĻžāϟāύāϟāĻŋ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_shorts_use_sound_button_summary_on">āĻāχ āϏāĻžāωāĻ¨ā§āĻĄ āĻŦāĻžāϟāύāϟāĻŋ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_shorts_use_sound_button_summary_off">āĻāχ āϏāĻžāωāĻ¨ā§āĻĄ āĻŦāĻžāϟāύāϟāĻŋ āĻĻ⧇āĻ–āĻž āϝāĻžāĻšā§āϛ⧇</string> <string name="revanced_hide_shorts_use_sound_button_summary_off">āĻāχ āϏāĻžāωāĻ¨ā§āĻĄ āĻŦāĻžāϟāύāϟāĻŋ āĻĻ⧇āĻ–āĻž āϝāĻžāĻšā§āϛ⧇</string>
<string name="revanced_hide_shorts_use_template_button_title">\"āĻāχ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ\" āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</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_on">āĻāχ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻŦāĻžāϟāύāϟāĻŋ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_shorts_use_template_button_summary_off">\"āĻāχ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ\" āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string> <string name="revanced_hide_shorts_use_template_button_summary_off">\"āĻāχ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ\" āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇</string>
<string name="revanced_hide_shorts_like_fountain_title">āϞāĻžāχāĻ• āĻŦā§‹āϤāĻžāĻŽ āĻĢāĻžāωāĻ¨ā§āĻŸā§‡āύ āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āĻļāύāϟāĻŋ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_shorts_like_fountain_title">āϞāĻžāχāĻ• āĻŦā§‹āϤāĻžāĻŽ āĻĢāĻžāωāĻ¨ā§āĻŸā§‡āύ āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āĻļāύāϟāĻŋ āϞ⧁āĻ•āĻžāύ</string>
@@ -1570,13 +1591,13 @@ DeArrow āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύāϤ⧇ āĻāĻ–āĻžāύ⧇ āϟ
</patch> </patch>
<patch id="video.speed.button.playbackSpeedButtonPatch"> <patch id="video.speed.button.playbackSpeedButtonPatch">
<string name="revanced_playback_speed_dialog_button_title">āĻ¸ā§āĻĒāĻŋāĻĄ āĻĄāĻžā§ŸāĻžāϞāĻ— āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ</string> <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> <string name="revanced_playback_speed_dialog_button_summary_off">āĻ¸ā§āĻĒāĻŋāĻĄ āĻĄāĻžāϝāĻŧāĻžāϞāĻ— āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āύ⧇āχ</string>
</patch> </patch>
<patch id="video.quality.button.videoQualityDialogButtonPatch"> <patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">āĻ­āĻŋāĻĄāĻŋāĻ“ āϗ⧁āĻŖāĻŽāĻžāύ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ</string> <string name="revanced_video_quality_dialog_button_title">āĻ­āĻŋāĻĄāĻŋāĻ“ āϗ⧁āĻŖāĻŽāĻžāύ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ</string>
<string name="revanced_video_quality_dialog_button_summary_on">āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āϗ⧁āĻŖāĻŽāĻžāύ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸā§‡ āϰāĻŋāϏ⧇āϟ āĻ•āϰāϤ⧇ āĻŸā§āϝāĻžāĻĒ āĻ•āϰ⧇ āϧāϰ⧇ āϰāĻžāϖ⧁āύāĨ¤</string> <string name="revanced_video_quality_dialog_button_summary_on">āĻ­āĻŋāĻĄāĻŋāĻ“ āϕ⧋āϝāĻŧāĻžāϞāĻŋāϟāĻŋ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇āĨ¤ āϕ⧋āϝāĻŧāĻžāϞāĻŋāϟāĻŋ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸā§‡ āϰāĻŋāϏ⧇āϟ āĻ•āϰāϤ⧇ āĻŸā§āϝāĻžāĻĒ āĻ•āϰ⧇ āϧāϰ⧇ āϰāĻžāϖ⧁āύ</string>
<string name="revanced_video_quality_dialog_button_summary_off">āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧāύāĻŋāĨ¤</string> <string name="revanced_video_quality_dialog_button_summary_off">āĻ­āĻŋāĻĄāĻŋāĻ“ āϕ⧋āϝāĻŧāĻžāϞāĻŋāϟāĻŋ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āύ⧇āχ</string>
</patch> </patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch"> <patch id="video.speed.custom.customPlaybackSpeedPatch">
<string name="revanced_custom_speed_menu_title">āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĒā§āϞ⧇āĻŦā§āϝāĻžāĻ• āĻ—āϤāĻŋ āĻŽā§‡āύ⧁</string> <string name="revanced_custom_speed_menu_title">āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĒā§āϞ⧇āĻŦā§āϝāĻžāĻ• āĻ—āϤāĻŋ āĻŽā§‡āύ⧁</string>

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